Whamcloud - gitweb
- outdated patch fired
authoralex <alex>
Sun, 5 Oct 2003 11:13:27 +0000 (11:13 +0000)
committeralex <alex>
Sun, 5 Oct 2003 11:13:27 +0000 (11:13 +0000)
lustre/kernel_patches/patches/2.6.0-test1-mm2.patch [deleted file]
lustre/kernel_patches/pc/2.6.0-test1-mm2.pc [deleted file]

diff --git a/lustre/kernel_patches/patches/2.6.0-test1-mm2.patch b/lustre/kernel_patches/patches/2.6.0-test1-mm2.patch
deleted file mode 100644 (file)
index 59be3f3..0000000
+++ /dev/null
@@ -1,179796 +0,0 @@
---- linux-2.6.0-test1/arch/alpha/kernel/irq.c  2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/alpha/kernel/irq.c 2003-07-19 17:03:49.000000000 -0700
-@@ -601,7 +601,7 @@ handle_irq(int irq, struct pt_regs * reg
-       if ((unsigned) irq > ACTUAL_NR_IRQS && illegal_count < MAX_ILLEGAL_IRQS ) {
-               irq_err_count++;
-               illegal_count++;
--              printk(KERN_CRIT "device_interrupt: illegal interrupt %d\n",
-+              printk(KERN_CRIT "device_interrupt: invalid interrupt %d\n",
-                      irq);
-               return;
-       }
---- linux-2.6.0-test1/arch/alpha/kernel/smp.c  2003-06-14 12:18:05.000000000 -0700
-+++ 25/arch/alpha/kernel/smp.c 2003-07-19 17:04:06.000000000 -0700
-@@ -71,7 +71,7 @@ static int smp_secondary_alive __initdat
- /* Which cpus ids came online.  */
- unsigned long cpu_present_mask;
--volatile unsigned long cpu_online_map;
-+cpumask_t cpu_online_map;
- /* cpus reported in the hwrpb */
- static unsigned long hwrpb_cpu_present_mask __initdata = 0;
-@@ -132,7 +132,7 @@ smp_callin(void)
- {
-       int cpuid = hard_smp_processor_id();
--      if (test_and_set_bit(cpuid, &cpu_online_map)) {
-+      if (cpu_test_and_set(cpuid, cpu_online_map)) {
-               printk("??, cpu 0x%x already present??\n", cpuid);
-               BUG();
-       }
-@@ -575,8 +575,8 @@ smp_prepare_boot_cpu(void)
-       /*
-        * Mark the boot cpu (current cpu) as both present and online
-        */ 
--      set_bit(smp_processor_id(), &cpu_present_mask);
--      set_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_present_mask);
-+      cpu_set(smp_processor_id(), cpu_online_map);
- }
- int __devinit
---- linux-2.6.0-test1/arch/alpha/mm/init.c     2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/alpha/mm/init.c    2003-07-19 17:03:49.000000000 -0700
-@@ -20,9 +20,6 @@
- #include <linux/init.h>
- #include <linux/bootmem.h> /* max_low_pfn */
- #include <linux/vmalloc.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <asm/system.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/arch/alpha/mm/remap.c    2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/alpha/mm/remap.c   2003-07-19 17:07:16.000000000 -0700
-@@ -73,7 +73,7 @@ __alpha_remap_area_pages(unsigned long a
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/arm26/kernel/setup.c        2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/arm26/kernel/setup.c       2003-07-19 17:03:49.000000000 -0700
-@@ -14,7 +14,7 @@
- #include <linux/ioport.h>
- #include <linux/delay.h>
- #include <linux/utsname.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/console.h>
- #include <linux/bootmem.h>
- #include <linux/seq_file.h>
---- linux-2.6.0-test1/arch/arm26/mm/init.c     2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/arm26/mm/init.c    2003-07-19 17:03:49.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <linux/init.h>
- #include <linux/initrd.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/segment.h>
- #include <asm/mach-types.h>
---- linux-2.6.0-test1/arch/arm26/mm/mm-memc.c  2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/arm26/mm/mm-memc.c 2003-07-19 17:07:16.000000000 -0700
-@@ -79,7 +79,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-               goto no_pgd;
-       /*
--       * This lock is here just to satisfy pmd_alloc and pte_lock
-+       * This lock is here just to satisfy pmd_alloc_kernel() and pte_lock
-          * FIXME: I bet we could avoid taking it pretty much altogether
-        */
-       spin_lock(&mm->page_table_lock);
-@@ -88,7 +88,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-        * On ARM, first page must always be allocated since it contains
-        * the machine vectors.
-        */
--      new_pmd = pmd_alloc(mm, new_pgd, 0);
-+      new_pmd = pmd_alloc_kernel(mm, new_pgd, 0);
-       if (!new_pmd)
-               goto no_pmd;
---- linux-2.6.0-test1/arch/arm/mach-arc/mm.c   2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/arm/mach-arc/mm.c  2003-07-19 17:07:16.000000000 -0700
-@@ -66,7 +66,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-               goto no_pgd;
-       /*
--       * This lock is here just to satisfy pmd_alloc and pte_lock
-+       * This lock is here just to satisfy pmd_alloc_map() and pte_lock
-        */
-       spin_lock(&mm->page_table_lock);
-@@ -74,13 +74,15 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-        * On ARM, first page must always be allocated since it contains
-        * the machine vectors.
-        */
--      new_pmd = pmd_alloc(mm, new_pgd, 0);
-+      new_pmd = pmd_alloc_map(mm, new_pgd, 0);
-       if (!new_pmd)
-               goto no_pmd;
--      new_pte = pte_alloc_map(mm, new_pmd, 0);
--      if (!new_pte)
-+      new_pte = pte_alloc_map(mm, new_pgd, &new_pmd, 0);
-+      if (!new_pte) {
-+              pmd_unmap(new_pmd);
-               goto no_pte;
-+      }
-       init_pgd = pgd_offset_k(0);
-       init_pmd = pmd_offset(init_pgd, 0);
-@@ -88,6 +90,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-       set_pte(new_pte, *init_pte);
-       pte_unmap_nested(init_pte);
-       pte_unmap(new_pte);
-+      pmd_unmap(new_pmd);
-       /*
-        * most of the page table entries are zeroed
---- linux-2.6.0-test1/arch/arm/mach-clps711x/autcpu12.c        2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/arm/mach-clps711x/autcpu12.c       2003-07-19 17:03:49.000000000 -0700
-@@ -21,7 +21,6 @@
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/mm.h>
- #include <asm/hardware.h>
---- linux-2.6.0-test1/arch/arm/mm/consistent.c 2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/arm/mm/consistent.c        2003-07-19 17:07:16.000000000 -0700
-@@ -325,7 +325,7 @@ static int __init consistent_init(void)
-       do {
-               pgd = pgd_offset(&init_mm, CONSISTENT_BASE);
--              pmd = pmd_alloc(&init_mm, pgd, CONSISTENT_BASE);
-+              pmd = pmd_alloc_kernel(&init_mm, pgd, CONSISTENT_BASE);
-               if (!pmd) {
-                       printk(KERN_ERR "consistent_init: out of pmd tables\n");
-                       return -ENOMEM;
---- linux-2.6.0-test1/arch/arm/mm/ioremap.c    2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/arm/mm/ioremap.c   2003-07-19 17:07:16.000000000 -0700
-@@ -95,7 +95,7 @@ static int remap_area_pages(unsigned lon
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/arm/mm/minicache.c  2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/arm/mm/minicache.c 2003-07-19 17:07:16.000000000 -0700
-@@ -57,7 +57,7 @@ static int __init minicache_init(void)
-       pmd_t *pmd;
-       pgd = pgd_offset_k(minicache_address);
--      pmd = pmd_alloc(&init_mm, pgd, minicache_address);
-+      pmd = pmd_alloc_kernel(&init_mm, pgd, minicache_address);
-       if (!pmd)
-               BUG();
-       minicache_pte = pte_alloc_kernel(&init_mm, pmd, minicache_address);
---- linux-2.6.0-test1/arch/arm/mm/mm-armv.c    2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/arm/mm/mm-armv.c   2003-07-19 17:07:16.000000000 -0700
-@@ -131,7 +131,7 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-       if (vectors_base() == 0) {
-               /*
--               * This lock is here just to satisfy pmd_alloc and pte_lock
-+               * This lock is here just to satisfy pmd_alloc_map() and pte_lock
-                */
-               spin_lock(&mm->page_table_lock);
-@@ -139,20 +139,22 @@ pgd_t *get_pgd_slow(struct mm_struct *mm
-                * On ARM, first page must always be allocated since it
-                * contains the machine vectors.
-                */
--              new_pmd = pmd_alloc(mm, new_pgd, 0);
-+              new_pmd = pmd_alloc_map(mm, new_pgd, 0);
-               if (!new_pmd)
-                       goto no_pmd;
--              new_pte = pte_alloc_map(mm, new_pmd, 0);
--              if (!new_pte)
-+              new_pte = pte_alloc_map(mm, new_pgd, &new_pmd, 0);
-+              if (!new_pte) {
-+                      pmd_unmap(new_pmd);
-                       goto no_pte;
-+              }
-               init_pmd = pmd_offset(init_pgd, 0);
-               init_pte = pte_offset_map_nested(init_pmd, 0);
-               set_pte(new_pte, *init_pte);
-               pte_unmap_nested(init_pte);
-               pte_unmap(new_pte);
--
-+              pmd_unmap(new_pmd);
-               spin_unlock(&mm->page_table_lock);
-       }
---- linux-2.6.0-test1/arch/cris/mm/ioremap.c   2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/cris/mm/ioremap.c  2003-07-19 17:07:16.000000000 -0700
-@@ -78,7 +78,7 @@ static int remap_area_pages(unsigned lon
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/h8300/kernel/setup.c        2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/h8300/kernel/setup.c       2003-07-19 17:03:49.000000000 -0700
-@@ -35,7 +35,6 @@
- #include <asm/irq.h>
- #ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
- #include <asm/pgtable.h>
- #endif
---- linux-2.6.0-test1/arch/h8300/mm/init.c     2003-06-14 12:18:21.000000000 -0700
-+++ 25/arch/h8300/mm/init.c    2003-07-19 17:03:49.000000000 -0700
-@@ -23,9 +23,6 @@
- #include <linux/errno.h>
- #include <linux/string.h>
- #include <linux/types.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/ptrace.h>
- #include <linux/mman.h>
- #include <linux/mm.h>
---- linux-2.6.0-test1/arch/i386/Kconfig        2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/i386/Kconfig       2003-07-19 17:07:16.000000000 -0700
-@@ -438,9 +438,9 @@ config SMP
-         If you don't know what to do here, say N.
- config NR_CPUS
--      int "Maximum number of CPUs (2-32)"
-+      int "Maximum number of CPUs (2-255)"
-       depends on SMP
--      default "32"
-+      default "8"
-       help
-         This allows you to specify the maximum number of CPUs which this
-         kernel will support.  The maximum supported value is 32 and the
-@@ -723,6 +723,16 @@ config HIGHPTE
-         low memory.  Setting this option will put user-space page table
-         entries in high memory.
-+config HIGHPMD
-+      bool "Allocate 2nd-level pagetables from highmem"
-+      depends on HIGHMEM64G && HIGHPTE
-+      help
-+        The VM uses one lowmem-allocated pmd entry for each pagetable
-+        page of physical memory allocated, and preallocates them all
-+        for 12KB of per-process lowmem overhead. For systems with
-+        extreme amounts of highmem, this cannot be tolerated. Setting
-+        this option will put userspace 2nd-level pagetables in highmem.
-+
- config MATH_EMULATION
-       bool "Math emulation"
-       ---help---
-@@ -1347,6 +1357,15 @@ config DEBUG_PAGEALLOC
-         This results in a large slowdown, but helps to find certain types
-         of memory corruptions.
-+config SPINLINE
-+      bool "Spinlock inlining"
-+      depends on DEBUG_KERNEL
-+      help
-+        This will change spinlocks from out of line to inline, making them
-+        account cost to the callers in readprofile, rather than the lock
-+        itself (as ".text.lock.filename"). This can be helpful for finding
-+        the callers of locks.
-+
- config DEBUG_HIGHMEM
-       bool "Highmem debugging"
-       depends on DEBUG_KERNEL && HIGHMEM
-@@ -1354,20 +1373,207 @@ config DEBUG_HIGHMEM
-         This options enables addition error checking for high memory systems.
-         Disable for production systems.
-+config LOCKMETER
-+      bool "Kernel lock metering"
-+      depends on SMP && !PREEMPT
-+      help
-+        Say Y to enable kernel lock metering, which adds overhead to SMP locks,
-+        but allows you to see various statistics using the lockstat command.
-+
- config DEBUG_SPINLOCK_SLEEP
-       bool "Sleep-inside-spinlock checking"
-       help
-         If you say Y here, various routines which may sleep will become very
-         noisy if they are called with a spinlock held.        
-+config KGDB
-+      bool "Include kgdb kernel debugger"
-+      depends on DEBUG_KERNEL
-+      help  
-+        If you say Y here, the system will be compiled with the debug
-+        option (-g) and a debugging stub will be included in the
-+        kernel.  This stub communicates with gdb on another (host)
-+        computer via a serial port.  The host computer should have
-+        access to the kernel binary file (vmlinux) and a serial port
-+        that is connected to the target machine.  Gdb can be made to
-+        configure the serial port or you can use stty and setserial to
-+        do this. See the 'target' command in gdb. This option also
-+        configures in the ability to request a breakpoint early in the
-+        boot process.  To request the breakpoint just include 'kgdb'
-+        as a boot option when booting the target machine.  The system
-+        will then break as soon as it looks at the boot options.  This
-+        option also installs a breakpoint in panic and sends any
-+        kernel faults to the debugger. For more information see the
-+        Documentation/i386/kgdb.txt file.
-+
-+choice
-+      depends on KGDB
-+      prompt "Debug serial port BAUD" 
-+      default KGDB_115200BAUD
-+      help  
-+        Gdb and the kernel stub need to agree on the baud rate to be
-+        used.  Some systems (x86 family at this writing) allow this to
-+        be configured.
-+
-+config KGDB_9600BAUD
-+      bool "9600"
-+
-+config KGDB_19200BAUD
-+      bool "19200"
-+
-+config KGDB_38400BAUD
-+      bool "38400"
-+
-+config KGDB_57600BAUD
-+      bool "57600"
-+
-+config KGDB_115200BAUD
-+      bool "115200"
-+endchoice
-+
-+config KGDB_PORT
-+      hex "hex I/O port address of the debug serial port"
-+      depends on KGDB
-+      default  3f8
-+      help  
-+        Some systems (x86 family at this writing) allow the port
-+        address to be configured.  The number entered is assumed to be
-+        hex, don't put 0x in front of it.  The standard address are:
-+        COM1 3f8 , irq 4 and COM2 2f8 irq 3.  Setserial /dev/ttySx
-+        will tell you what you have.  It is good to test the serial
-+        connection with a live system before trying to debug.
-+
-+config KGDB_IRQ
-+      int "IRQ of the debug serial port"
-+      depends on KGDB
-+      default 4
-+      help  
-+        This is the irq for the debug port.  If everything is working
-+        correctly and the kernel has interrupts on a control C to the
-+        port should cause a break into the kernel debug stub.
-+
-+config DEBUG_INFO
-+      bool
-+      default y
-+
-+config KGDB_MORE
-+      bool "Add any additional compile options"
-+      depends on KGDB
-+      default n
-+      help  
-+        Saying yes here turns on the ability to enter additional
-+        compile options.
-+
-+
-+config KGDB_OPTIONS
-+      depends on KGDB_MORE
-+      string "Additional compile arguments"
-+      default "-O1"
-+      help  
-+        This option allows you enter additional compile options for
-+        the whole kernel compile.  Each platform will have a default
-+        that seems right for it.  For example on PPC "-ggdb -O1", and
-+        for i386 "-O1".  Note that by configuring KGDB "-g" is already
-+        turned on.  In addition, on i386 platforms
-+        "-fomit-frame-pointer" is deleted from the standard compile
-+        options.
-+
-+config NO_KGDB_CPUS
-+      int "Number of CPUs"
-+      depends on KGDB && SMP
-+      default NR_CPUS
-+      help
-+        
-+        This option sets the number of cpus for kgdb ONLY.  It is used
-+        to prune some internal structures so they look "nice" when
-+        displayed with gdb.  This is to overcome possibly larger
-+        numbers that may have been entered above.  Enter the real
-+        number to get nice clean kgdb_info displays.
-+
-+config KGDB_TS
-+      bool "Enable kgdb time stamp macros?"
-+      depends on KGDB
-+      default n
-+      help      
-+        Kgdb event macros allow you to instrument your code with calls
-+        to the kgdb event recording function.  The event log may be
-+        examined with gdb at a break point.  Turning on this
-+        capability also allows you to choose how many events to
-+        keep. Kgdb always keeps the lastest events.
-+
-+choice 
-+      depends on KGDB_TS
-+      prompt "Max number of time stamps to save?"
-+      default KGDB_TS_128
-+
-+config KGDB_TS_64
-+      bool "64"
-+
-+config KGDB_TS_128
-+      bool "128"
-+
-+config KGDB_TS_256
-+      bool "256"
-+
-+config KGDB_TS_512
-+      bool "512"
-+
-+config KGDB_TS_1024
-+      bool "1024"
-+
-+endchoice
-+
-+config STACK_OVERFLOW_TEST
-+      bool "Turn on kernel stack overflow testing?"
-+      depends on KGDB
-+      default n
-+      help  
-+        This option enables code in the front line interrupt handlers
-+        to check for kernel stack overflow on interrupts and system
-+        calls.  This is part of the kgdb code on x86 systems.
-+
-+config KGDB_CONSOLE
-+      bool "Enable serial console thru kgdb port"
-+      depends on KGDB
-+      default n
-+      help
-+        This option enables the command line "console=kgdb" option.
-+        When the system is booted with this option in the command line
-+        all kernel printk output is sent to gdb (as well as to other
-+        consoles).  For this to work gdb must be connected.  For this
-+        reason, this command line option will generate a breakpoint if
-+        gdb has not yet connected.  After the gdb continue command is
-+        given all pent up console output will be printed by gdb on the
-+        host machine.  Neither this option, nor KGDB require the
-+        serial driver to be configured.
-+
-+config KGDB_SYSRQ
-+      bool "Turn on SysRq 'G' command to do a break?"
-+      depends on KGDB
-+      default y
-+      help
-+        This option includes an option in the SysRq code that allows
-+        you to enter SysRq G which generates a breakpoint to the KGDB
-+        stub.  This will work if the keyboard is alive and can
-+        interrupt the system.  Because of constraints on when the
-+        serial port interrupt can be enabled, this code may allow you
-+        to interrupt the system before the serial port control C is
-+        available.  Just say yes here.
-+
- config FRAME_POINTER
-       bool "Compile the kernel with frame pointers"
-+      default KGDB
-       help
-         If you say Y here the resulting kernel image will be slightly larger
-         and slower, but it will give very useful debugging information.
-         If you don't debug the kernel, you can say N, but we may not be able
-         to solve problems without frame pointers.
-+config MAGIC_SYSRQ
-+      bool
-+      depends on KGDB_SYSRQ
-+      default y
-+
- config X86_EXTRA_IRQS
-       bool
-       depends on X86_LOCAL_APIC || X86_VOYAGER
---- linux-2.6.0-test1/arch/i386/kernel/apic.c  2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/apic.c 2003-07-19 17:04:06.000000000 -0700
-@@ -1137,7 +1137,7 @@ int __init APIC_init_uniprocessor (void)
-       connect_bsp_APIC();
--      phys_cpu_present_map = 1 << boot_cpu_physical_apicid;
-+      phys_cpu_present_map = physid_mask_of_physid(boot_cpu_physical_apicid);
-       setup_local_APIC();
---- linux-2.6.0-test1/arch/i386/kernel/apm.c   2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/i386/kernel/apm.c  2003-07-19 17:04:06.000000000 -0700
-@@ -508,16 +508,16 @@ static void apm_error(char *str, int err
-  
- #ifdef CONFIG_SMP
--static unsigned long apm_save_cpus(void)
-+static cpumask_t apm_save_cpus(void)
- {
--      unsigned long x = current->cpus_allowed;
-+      cpumask_t x = current->cpus_allowed;
-       /* Some bioses don't like being called from CPU != 0 */
--      set_cpus_allowed(current, 1UL << 0);
-+      set_cpus_allowed(current, cpumask_of_cpu(0));
-       BUG_ON(smp_processor_id() != 0);
-       return x;
- }
--static inline void apm_restore_cpus(unsigned long mask)
-+static inline void apm_restore_cpus(cpumask_t mask)
- {
-       set_cpus_allowed(current, mask);
- }
-@@ -528,7 +528,7 @@ static inline void apm_restore_cpus(unsi
-  *    No CPU lockdown needed on a uniprocessor
-  */
-  
--#define apm_save_cpus()       0
-+#define apm_save_cpus()               (current->cpus_allowed)
- #define apm_restore_cpus(x)   (void)(x)
- #endif
-@@ -593,7 +593,7 @@ static u8 apm_bios_call(u32 func, u32 eb
- {
-       APM_DECL_SEGS
-       unsigned long           flags;
--      unsigned long           cpus;
-+      cpumask_t               cpus;
-       int                     cpu;
-       struct desc_struct      save_desc_40;
-@@ -635,7 +635,7 @@ static u8 apm_bios_call_simple(u32 func,
-       u8                      error;
-       APM_DECL_SEGS
-       unsigned long           flags;
--      unsigned long           cpus;
-+      cpumask_t               cpus;
-       int                     cpu;
-       struct desc_struct      save_desc_40;
-@@ -913,7 +913,7 @@ static void apm_power_off(void)
-        */
- #ifdef CONFIG_SMP
-       /* Some bioses don't like being called from CPU != 0 */
--      set_cpus_allowed(current, 1UL << 0);
-+      set_cpus_allowed(current, cpumask_of_cpu(0));
-       BUG_ON(smp_processor_id() != 0);
- #endif
-       if (apm_info.realmode_power_off)
-@@ -1704,7 +1704,7 @@ static int apm(void *unused)
-        * Some bioses don't like being called from CPU != 0.
-        * Method suggested by Ingo Molnar.
-        */
--      set_cpus_allowed(current, 1UL << 0);
-+      set_cpus_allowed(current, cpumask_of_cpu(0));
-       BUG_ON(smp_processor_id() != 0);
- #endif
---- linux-2.6.0-test1/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c       2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c      2003-07-19 17:04:06.000000000 -0700
-@@ -53,10 +53,9 @@ static int stock_freq;
- static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate)
- {
-       u32 l, h;
--      unsigned long cpus_allowed;
-+      cpumask_t cpus_allowed, affected_cpu_map;
-       struct cpufreq_freqs freqs;
-       int hyperthreading = 0;
--      int affected_cpu_map = 0;
-       int sibling = 0;
-       if (!cpu_online(cpu) || (newstate > DC_DISABLE) || 
-@@ -67,16 +66,16 @@ static int cpufreq_p4_setdc(unsigned int
-       cpus_allowed = current->cpus_allowed;
-       /* only run on CPU to be set, or on its sibling */
--      affected_cpu_map = 1 << cpu;
-+       affected_cpu_map = cpumask_of_cpu(cpu);
- #ifdef CONFIG_X86_HT
-       hyperthreading = ((cpu_has_ht) && (smp_num_siblings == 2));
-       if (hyperthreading) {
-               sibling = cpu_sibling_map[cpu];
--              affected_cpu_map |= (1 << sibling);
-+                cpu_set(sibling, affected_cpu_map);
-       }
- #endif
-       set_cpus_allowed(current, affected_cpu_map);
--      BUG_ON(!(affected_cpu_map & (1 << smp_processor_id())));
-+        BUG_ON(!cpu_isset(smp_processor_id(), affected_cpu_map));
-       /* get current state */
-       rdmsr(MSR_IA32_THERM_CONTROL, l, h);
---- linux-2.6.0-test1/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c        2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c       2003-07-19 17:05:02.000000000 -0700
-@@ -156,14 +156,15 @@ static struct cpufreq_frequency_table op
- };
- #undef OP
--#define CPU(max)      \
--      { "Intel(R) Pentium(R) M processor " #max "MHz", (max)*1000, op_##max }
-+#define _CPU(max, name)       \
-+      { "Intel(R) Pentium(R) M processor " name "MHz", (max)*1000, op_##max }
-+#define CPU(max)      _CPU(max, #max)
- /* CPU models, their operating frequency range, and freq/voltage
-    operating points */
- static const struct cpu_model models[] = 
- {
--      CPU( 900),
-+       _CPU( 900, " 900"),
-       CPU(1100),
-       CPU(1200),
-       CPU(1300),
---- linux-2.6.0-test1/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c     2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c    2003-07-19 17:08:59.000000000 -0700
-@@ -77,15 +77,17 @@ static void speedstep_set_state (unsigne
-       u8                      value;
-       unsigned long           flags;
-       struct cpufreq_freqs    freqs;
-+      int                     newfreq;
-       if (!speedstep_chipset_dev || (state > 0x1))
-               return;
-       freqs.old = speedstep_get_processor_frequency(speedstep_processor);
--      freqs.new = speedstep_freqs[SPEEDSTEP_LOW].frequency;
-+      freqs.new = speedstep_freqs[state].frequency;
-       freqs.cpu = 0; /* speedstep.c is UP only driver */
-       
--      if (notify)
-+      /* make sure we've initialized before calling notify */
-+      if (notify && (freqs.new != 0))
-               cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
-       /* get PMBASE */
-@@ -136,13 +138,16 @@ static void speedstep_set_state (unsigne
-       dprintk(KERN_DEBUG "cpufreq: read at pmbase 0x%x + 0x50 returned 0x%x\n", pmbase, value);
-+      /* freqs.new may not be set yet - need local copy */
-+      newfreq = speedstep_get_processor_frequency(speedstep_processor);
-       if (state == (value & 0x1)) {
--              dprintk (KERN_INFO "cpufreq: change to %u MHz succeeded\n", (freqs.new / 1000));
-+              dprintk (KERN_INFO "cpufreq: change to %u MHz succeeded\n", (newfreq / 1000));
-       } else {
-               printk (KERN_ERR "cpufreq: change failed - I/O error\n");
-       }
--      if (notify)
-+      /* Make sure we're initialized before calling notify */
-+      if (notify && (freqs.new != 0))
-               cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
-       return;
-@@ -295,7 +300,7 @@ static int speedstep_cpu_init(struct cpu
-               return -EIO;
-       dprintk(KERN_INFO "cpufreq: currently at %s speed setting - %i MHz\n", 
--              (speed == speedstep_low_freq) ? "low" : "high",
-+              (speed == speedstep_freqs[SPEEDSTEP_LOW].frequency) ? "low" : "high",
-               (speed / 1000));
-       /* cpuinfo and default policy values */
---- linux-2.6.0-test1/arch/i386/kernel/cpuid.c 2003-06-14 12:17:55.000000000 -0700
-+++ 25/arch/i386/kernel/cpuid.c        2003-07-19 17:04:06.000000000 -0700
-@@ -136,7 +136,7 @@ static int cpuid_open(struct inode *inod
-   int cpu = minor(file->f_dentry->d_inode->i_rdev);
-   struct cpuinfo_x86 *c = &(cpu_data)[cpu];
--  if ( !(cpu_online_map & (1UL << cpu)) )
-+  if (!cpu_online(cpu))
-     return -ENXIO;            /* No such CPU */
-   if ( c->cpuid_level < 0 )
-     return -EIO;              /* CPUID not supported */
---- linux-2.6.0-test1/arch/i386/kernel/cpu/mtrr/cyrix.c        2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/mtrr/cyrix.c       2003-07-19 17:03:49.000000000 -0700
-@@ -330,16 +330,16 @@ cyrix_arr_init(void)
-       set_mtrr_done(&ctxt);   /* flush cache and disable MAPEN */
-       if (ccrc[5])
--              printk("mtrr: ARR usage was not enabled, enabled manually\n");
-+              printk(KERN_INFO "mtrr: ARR usage was not enabled, enabled manually\n");
-       if (ccrc[3])
--              printk("mtrr: ARR3 cannot be changed\n");
-+              printk(KERN_INFO "mtrr: ARR3 cannot be changed\n");
- /*
-     if ( ccrc[1] & 0x80) printk ("mtrr: SMM memory access through ARR3 disabled\n");
-     if ( ccrc[1] & 0x04) printk ("mtrr: SMM memory access disabled\n");
-     if ( ccrc[1] & 0x02) printk ("mtrr: SMM mode disabled\n");
- */
-       if (ccrc[6])
--              printk("mtrr: ARR3 was write protected, unprotected\n");
-+              printk(KERN_INFO "mtrr: ARR3 was write protected, unprotected\n");
- }
- static struct mtrr_ops cyrix_mtrr_ops = {
---- linux-2.6.0-test1/arch/i386/kernel/cpu/mtrr/main.c 2003-06-26 22:07:22.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/mtrr/main.c        2003-07-19 17:04:57.000000000 -0700
-@@ -64,7 +64,7 @@ __initdata char *mtrr_if_name[] = {
- static void set_mtrr(unsigned int reg, unsigned long base,
-                    unsigned long size, mtrr_type type);
--static unsigned int arr3_protected;
-+extern int arr3_protected;
- void set_mtrr_ops(struct mtrr_ops * ops)
- {
-@@ -75,23 +75,25 @@ void set_mtrr_ops(struct mtrr_ops * ops)
- /*  Returns non-zero if we have the write-combining memory type  */
- static int have_wrcomb(void)
- {
--      struct pci_dev *dev = NULL;
--
--      /* WTF is this?
--       * Someone, please shoot me.
--       */
--
--      /* ServerWorks LE chipsets have problems with write-combining 
--         Don't allow it and leave room for other chipsets to be tagged */
--
-+      struct pci_dev *dev;
-+      
-       if ((dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, NULL)) != NULL) {
--              if ((dev->vendor == PCI_VENDOR_ID_SERVERWORKS) &&
--                  (dev->device == PCI_DEVICE_ID_SERVERWORKS_LE)) {
--                      printk(KERN_INFO
--                             "mtrr: Serverworks LE detected. Write-combining disabled.\n");
-+              /* ServerWorks LE chipsets have problems with write-combining 
-+                 Don't allow it and leave room for other chipsets to be tagged */
-+              if (dev->vendor == PCI_VENDOR_ID_SERVERWORKS &&
-+                  dev->device == PCI_DEVICE_ID_SERVERWORKS_LE) {
-+                      printk(KERN_INFO "mtrr: Serverworks LE detected. Write-combining disabled.\n");
-                       return 0;
-               }
--      }
-+              /* Intel 450NX errata # 23. Non ascending cachline evictions to
-+                 write combining memory may resulting in data corruption */
-+              if (dev->vendor == PCI_VENDOR_ID_INTEL &&
-+                  dev->device == PCI_DEVICE_ID_INTEL_82451NX)
-+              {
-+                      printk(KERN_INFO "mtrr: Intel 450NX MMC detected. Write-combining disabled.\n");
-+                      return 0;
-+              }
-+      }               
-       return (mtrr_if->have_wrcomb ? mtrr_if->have_wrcomb() : 0);
- }
-@@ -121,7 +123,7 @@ static void init_table(void)
-       max = num_var_ranges;
-       if ((usage_table = kmalloc(max * sizeof *usage_table, GFP_KERNEL))
-           == NULL) {
--              printk("mtrr: could not allocate\n");
-+              printk(KERN_ERR "mtrr: could not allocate\n");
-               return;
-       }
-       for (i = 0; i < max; i++)
-@@ -310,7 +312,7 @@ int mtrr_add_page(unsigned long base, un
-               return error;
-       if (type >= MTRR_NUM_TYPES) {
--              printk("mtrr: type: %u illegal\n", type);
-+              printk(KERN_WARNING "mtrr: type: %u invalid\n", type);
-               return -EINVAL;
-       }
-@@ -322,7 +324,7 @@ int mtrr_add_page(unsigned long base, un
-       }
-       if (base & size_or_mask || size & size_or_mask) {
--              printk("mtrr: base or size exceeds the MTRR width\n");
-+              printk(KERN_WARNING "mtrr: base or size exceeds the MTRR width\n");
-               return -EINVAL;
-       }
-@@ -348,7 +350,7 @@ int mtrr_add_page(unsigned long base, un
-               if (ltype != type) {
-                       if (type == MTRR_TYPE_UNCACHABLE)
-                               continue;
--                      printk ("mtrr: type mismatch for %lx000,%lx000 old: %s new: %s\n",
-+                      printk (KERN_WARNING "mtrr: type mismatch for %lx000,%lx000 old: %s new: %s\n",
-                            base, size, attrib_to_str(ltype),
-                            attrib_to_str(type));
-                       goto out;
-@@ -364,7 +366,7 @@ int mtrr_add_page(unsigned long base, un
-               set_mtrr(i, base, size, type);
-               usage_table[i] = 1;
-       } else
--              printk("mtrr: no more MTRRs available\n");
-+              printk(KERN_INFO "mtrr: no more MTRRs available\n");
-       error = i;
-  out:
-       up(&main_lock);
-@@ -412,8 +414,8 @@ mtrr_add(unsigned long base, unsigned lo
-        char increment)
- {
-       if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
--              printk("mtrr: size and base must be multiples of 4 kiB\n");
--              printk("mtrr: size: 0x%lx  base: 0x%lx\n", size, base);
-+              printk(KERN_WARNING "mtrr: size and base must be multiples of 4 kiB\n");
-+              printk(KERN_DEBUG "mtrr: size: 0x%lx  base: 0x%lx\n", size, base);
-               return -EINVAL;
-       }
-       return mtrr_add_page(base >> PAGE_SHIFT, size >> PAGE_SHIFT, type,
-@@ -458,28 +460,28 @@ int mtrr_del_page(int reg, unsigned long
-                       }
-               }
-               if (reg < 0) {
--                      printk("mtrr: no MTRR for %lx000,%lx000 found\n", base,
-+                      printk(KERN_DEBUG "mtrr: no MTRR for %lx000,%lx000 found\n", base,
-                              size);
-                       goto out;
-               }
-       }
-       if (reg >= max) {
--              printk("mtrr: register: %d too big\n", reg);
-+              printk(KERN_WARNING "mtrr: register: %d too big\n", reg);
-               goto out;
-       }
-       if (is_cpu(CYRIX) && !use_intel()) {
-               if ((reg == 3) && arr3_protected) {
--                      printk("mtrr: ARR3 cannot be changed\n");
-+                      printk(KERN_WARNING "mtrr: ARR3 cannot be changed\n");
-                       goto out;
-               }
-       }
-       mtrr_if->get(reg, &lbase, &lsize, &ltype);
-       if (lsize < 1) {
--              printk("mtrr: MTRR %d not used\n", reg);
-+              printk(KERN_WARNING "mtrr: MTRR %d not used\n", reg);
-               goto out;
-       }
-       if (usage_table[reg] < 1) {
--              printk("mtrr: reg: %d has count=0\n", reg);
-+              printk(KERN_WARNING "mtrr: reg: %d has count=0\n", reg);
-               goto out;
-       }
-       if (--usage_table[reg] < 1)
-@@ -508,8 +510,8 @@ int
- mtrr_del(int reg, unsigned long base, unsigned long size)
- {
-       if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
--              printk("mtrr: size and base must be multiples of 4 kiB\n");
--              printk("mtrr: size: 0x%lx  base: 0x%lx\n", size, base);
-+              printk(KERN_INFO "mtrr: size and base must be multiples of 4 kiB\n");
-+              printk(KERN_DEBUG "mtrr: size: 0x%lx  base: 0x%lx\n", size, base);
-               return -EINVAL;
-       }
-       return mtrr_del_page(reg, base >> PAGE_SHIFT, size >> PAGE_SHIFT);
-@@ -677,7 +679,7 @@ static int __init mtrr_init(void)
-                       break;
-               }
-       }
--      printk("mtrr: v%s\n",MTRR_VERSION);
-+      printk(KERN_INFO "mtrr: v%s\n",MTRR_VERSION);
-       if (mtrr_if) {
-               set_num_var_ranges();
-@@ -701,5 +703,5 @@ char *mtrr_strings[MTRR_NUM_TYPES] =
-     "write-back",               /* 6 */
- };
--subsys_initcall(mtrr_init);
-+core_initcall(mtrr_init);
---- linux-2.6.0-test1/arch/i386/kernel/cpu/proc.c      2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/i386/kernel/cpu/proc.c     2003-07-19 17:04:06.000000000 -0700
-@@ -60,7 +60,7 @@ static int show_cpuinfo(struct seq_file 
-       int fpu_exception;
- #ifdef CONFIG_SMP
--      if (!(cpu_online_map & (1<<n)))
-+      if (!cpu_online(n))
-               return 0;
- #endif
-       seq_printf(m, "processor\t: %d\n"
---- linux-2.6.0-test1/arch/i386/kernel/entry.S 2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/i386/kernel/entry.S        2003-07-19 17:06:37.000000000 -0700
-@@ -48,6 +48,18 @@
- #include <asm/smp.h>
- #include <asm/page.h>
- #include "irq_vectors.h"
-+        /* We do not recover from a stack overflow, but at least
-+         * we know it happened and should be able to track it down.
-+         */
-+#ifdef CONFIG_STACK_OVERFLOW_TEST
-+#define STACK_OVERFLOW_TEST \
-+        testl $7680,%esp;    \
-+        jnz   10f;            \
-+        call  stack_overflow; \
-+10:
-+#else
-+#define STACK_OVERFLOW_TEST
-+#endif
- EBX           = 0x00
- ECX           = 0x04
-@@ -98,7 +110,8 @@ TSS_ESP0_OFFSET = (4 - 0x200)
-       pushl %ebx; \
-       movl $(__USER_DS), %edx; \
-       movl %edx, %ds; \
--      movl %edx, %es;
-+      movl %edx, %es; \
-+        STACK_OVERFLOW_TEST
- #define RESTORE_INT_REGS \
-       popl %ebx;      \
-@@ -298,6 +311,19 @@ syscall_exit:
-       testw $_TIF_ALLWORK_MASK, %cx   # current->work
-       jne syscall_exit_work
- restore_all:
-+#ifdef CONFIG_TRAP_BAD_SYSCALL_EXITS
-+      movl EFLAGS(%esp), %eax         # mix EFLAGS and CS
-+      movb CS(%esp), %al
-+      testl $(VM_MASK | 3), %eax
-+      jz resume_kernelX               # returning to kernel or vm86-space
-+
-+      cmpl $0,TI_PRE_COUNT(%ebx)      # non-zero preempt_count ?
-+      jz resume_kernelX
-+        
-+        int $3
-+        
-+resume_kernelX:
-+#endif
-       RESTORE_ALL
-       # perform work that needs to be done immediately before resumption
-@@ -878,5 +904,6 @@ ENTRY(sys_call_table)
-       .long sys_fstatfs64     
-       .long sys_tgkill        /* 270 */
-       .long sys_utimes
-- 
-+      .long sys_mknod64
-+
- nr_syscalls=(.-sys_call_table)/4
---- linux-2.6.0-test1/arch/i386/kernel/io_apic.c       2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/kernel/io_apic.c      2003-07-19 17:04:06.000000000 -0700
-@@ -249,14 +249,14 @@ static void clear_IO_APIC (void)
-                       clear_IO_APIC_pin(apic, pin);
- }
--static void set_ioapic_affinity (unsigned int irq, unsigned long cpu_mask)
-+static void set_ioapic_affinity(unsigned int irq, cpumask_t cpumask)
- {
-       unsigned long flags;
-       int pin;
-       struct irq_pin_list *entry = irq_2_pin + irq;
-       unsigned int apicid_value;
-       
--      apicid_value = cpu_mask_to_apicid(cpu_mask);
-+      apicid_value = cpu_mask_to_apicid(mk_cpumask_const(cpumask));
-       /* Prepare to do the io_apic_write */
-       apicid_value = apicid_value << 24;
-       spin_lock_irqsave(&ioapic_lock, flags);
-@@ -286,9 +286,9 @@ static void set_ioapic_affinity (unsigne
- #  define Dprintk(x...) 
- # endif
--extern unsigned long irq_affinity[NR_IRQS];
-+extern cpumask_t irq_affinity[NR_IRQS];
--static int __cacheline_aligned pending_irq_balance_cpumask[NR_IRQS];
-+static cpumask_t __cacheline_aligned pending_irq_balance_cpumask[NR_IRQS];
- #define IRQBALANCE_CHECK_ARCH -999
- static int irqbalance_disabled = IRQBALANCE_CHECK_ARCH;
-@@ -307,8 +307,7 @@ struct irq_cpu_info {
- #define IDLE_ENOUGH(cpu,now) \
-               (idle_cpu(cpu) && ((now) - irq_stat[(cpu)].idle_timestamp > 1))
--#define IRQ_ALLOWED(cpu,allowed_mask) \
--              ((1 << cpu) & (allowed_mask))
-+#define IRQ_ALLOWED(cpu, allowed_mask)        cpu_isset(cpu, allowed_mask)
- #define CPU_TO_PACKAGEINDEX(i) \
-               ((physical_balance && i > cpu_sibling_map[i]) ? cpu_sibling_map[i] : i)
-@@ -320,7 +319,7 @@ struct irq_cpu_info {
- long balanced_irq_interval = MAX_BALANCED_IRQ_INTERVAL;
--static unsigned long move(int curr_cpu, unsigned long allowed_mask,
-+static unsigned long move(int curr_cpu, cpumask_t allowed_mask,
-                       unsigned long now, int direction)
- {
-       int search_idle = 1;
-@@ -350,20 +349,20 @@ inside:
- static inline void balance_irq(int cpu, int irq)
- {
-       unsigned long now = jiffies;
--      unsigned long allowed_mask;
-+      cpumask_t allowed_mask;
-       unsigned int new_cpu;
-               
-       if (irqbalance_disabled)
-               return; 
--      allowed_mask = cpu_online_map & irq_affinity[irq];
-+      cpus_and(allowed_mask, cpu_online_map, irq_affinity[irq]);
-       new_cpu = move(cpu, allowed_mask, now, 1);
-       if (cpu != new_cpu) {
-               irq_desc_t *desc = irq_desc + irq;
-               unsigned long flags;
-               spin_lock_irqsave(&desc->lock, flags);
--              pending_irq_balance_cpumask[irq] = 1 << new_cpu;
-+              pending_irq_balance_cpumask[irq] = cpumask_of_cpu(new_cpu);
-               spin_unlock_irqrestore(&desc->lock, flags);
-       }
- }
-@@ -399,8 +398,7 @@ static void do_irq_balance(void)
-       int tmp_loaded, first_attempt = 1;
-       unsigned long tmp_cpu_irq;
-       unsigned long imbalance = 0;
--      unsigned long allowed_mask;
--      unsigned long target_cpu_mask;
-+      cpumask_t allowed_mask, target_cpu_mask, tmp;
-       for (i = 0; i < NR_CPUS; i++) {
-               int package_index;
-@@ -549,10 +547,11 @@ tryanotherirq:
-                                       CPU_IRQ(cpu_sibling_map[min_loaded]))
-               min_loaded = cpu_sibling_map[min_loaded];
--      allowed_mask = cpu_online_map & irq_affinity[selected_irq];
--      target_cpu_mask = 1 << min_loaded;
-+      cpus_and(allowed_mask, cpu_online_map, irq_affinity[selected_irq]);
-+      target_cpu_mask = cpumask_of_cpu(min_loaded);
-+      cpus_and(tmp, target_cpu_mask, allowed_mask);
--      if (target_cpu_mask & allowed_mask) {
-+      if (!cpus_empty(tmp)) {
-               irq_desc_t *desc = irq_desc + selected_irq;
-               unsigned long flags;
-@@ -560,7 +559,8 @@ tryanotherirq:
-                               selected_irq, min_loaded);
-               /* mark for change destination */
-               spin_lock_irqsave(&desc->lock, flags);
--              pending_irq_balance_cpumask[selected_irq] = 1 << min_loaded;
-+              pending_irq_balance_cpumask[selected_irq] =
-+                                      cpumask_of_cpu(min_loaded);
-               spin_unlock_irqrestore(&desc->lock, flags);
-               /* Since we made a change, come back sooner to 
-                * check for more variation.
-@@ -591,8 +591,9 @@ int balanced_irq(void *unused)
-       daemonize("kirqd");
-       
-       /* push everything to CPU 0 to give us a starting point.  */
--      for (i = 0 ; i < NR_IRQS ; i++)
--              pending_irq_balance_cpumask[i] = 1;
-+      for (i = 0 ; i < NR_IRQS ; i++) {
-+              pending_irq_balance_cpumask[i] = cpumask_of_cpu(0);
-+      }
- repeat:
-       set_current_state(TASK_INTERRUPTIBLE);
-@@ -611,7 +612,9 @@ static int __init balanced_irq_init(void
- {
-       int i;
-       struct cpuinfo_x86 *c;
-+      cpumask_t tmp;
-+      cpus_shift_right(tmp, cpu_online_map, 2);
-         c = &boot_cpu_data;
-       /* When not overwritten by the command line ask subarchitecture. */
-       if (irqbalance_disabled == IRQBALANCE_CHECK_ARCH)
-@@ -628,7 +631,7 @@ static int __init balanced_irq_init(void
-        * Enable physical balance only if more than 1 physical processor
-        * is present
-        */
--      if (smp_num_siblings > 1 && cpu_online_map >> 2)
-+      if (smp_num_siblings > 1 && !cpus_empty(tmp))
-               physical_balance = 1;
-       for (i = 0; i < NR_CPUS; i++) {
-@@ -667,14 +670,14 @@ static int __init irqbalance_disable(cha
- __setup("noirqbalance", irqbalance_disable);
--static void set_ioapic_affinity (unsigned int irq, unsigned long mask);
-+static void set_ioapic_affinity(unsigned int irq, cpumask_t mask);
- static inline void move_irq(int irq)
- {
-       /* note - we hold the desc->lock */
--      if (unlikely(pending_irq_balance_cpumask[irq])) {
-+      if (unlikely(!cpus_empty(pending_irq_balance_cpumask[irq]))) {
-               set_ioapic_affinity(irq, pending_irq_balance_cpumask[irq]);
--              pending_irq_balance_cpumask[irq] = 0;
-+              cpus_clear(pending_irq_balance_cpumask[irq]);
-       }
- }
-@@ -682,6 +685,21 @@ __initcall(balanced_irq_init);
- #else /* !SMP */
- static inline void move_irq(int irq) { }
-+
-+void send_IPI_self(int vector)
-+{
-+      unsigned int cfg;
-+
-+      /*
-+       * Wait for idle.
-+       */
-+      apic_wait_icr_idle();
-+      cfg = APIC_DM_FIXED | APIC_DEST_SELF | vector | APIC_DEST_LOGICAL;
-+      /*
-+       * Send the IPI. The write to APIC_ICR fires this off.
-+       */
-+      apic_write_around(APIC_ICR, cfg);
-+}
- #endif /* defined(CONFIG_SMP) */
-@@ -822,7 +840,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, 
-  * we need to reprogram the ioredtbls to cater for the cpus which have come online
-  * so mask in all cases should simply be TARGET_CPUS
-  */
--void __init setup_ioapic_dest (unsigned long mask)
-+void __init setup_ioapic_dest(cpumask_t mask)
- {
-       int pin, ioapic, irq, irq_entry;
-@@ -1598,7 +1616,7 @@ void disable_IO_APIC(void)
- static void __init setup_ioapic_ids_from_mpc(void)
- {
-       union IO_APIC_reg_00 reg_00;
--      unsigned long phys_id_present_map;
-+      physid_mask_t phys_id_present_map;
-       int apic;
-       int i;
-       unsigned char old_id;
-@@ -1608,6 +1626,10 @@ static void __init setup_ioapic_ids_from
-               /* This gets done during IOAPIC enumeration for ACPI. */
-               return;
-+      /*
-+       * This is broken; anything with a real cpu count has to
-+       * circumvent this idiocy regardless.
-+       */
-       phys_id_present_map = ioapic_phys_id_map(phys_cpu_present_map);
-       /*
-@@ -1639,18 +1661,20 @@ static void __init setup_ioapic_ids_from
-                                       mp_ioapics[apic].mpc_apicid)) {
-                       printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
-                               apic, mp_ioapics[apic].mpc_apicid);
--                      for (i = 0; i < 0xf; i++)
--                              if (!(phys_id_present_map & (1 << i)))
-+                      for (i = 0; i < APIC_BROADCAST_ID; i++)
-+                              if (!physid_isset(i, phys_id_present_map))
-                                       break;
--                      if (i >= 0xf)
-+                      if (i >= APIC_BROADCAST_ID)
-                               panic("Max APIC ID exceeded!\n");
-                       printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
-                               i);
--                      phys_id_present_map |= 1 << i;
-+                      physid_set(i, phys_id_present_map);
-                       mp_ioapics[apic].mpc_apicid = i;
-               } else {
-+                      physid_mask_t tmp;
-+                      tmp = apicid_to_cpu_present(mp_ioapics[apic].mpc_apicid);
-                       printk("Setting %d in the phys_id_present_map\n", mp_ioapics[apic].mpc_apicid);
--                      phys_id_present_map |= apicid_to_cpu_present(mp_ioapics[apic].mpc_apicid);
-+                      physids_or(phys_id_present_map, phys_id_present_map, tmp);
-               }
-@@ -2220,7 +2244,8 @@ late_initcall(io_apic_bug_finalize);
- int __init io_apic_get_unique_id (int ioapic, int apic_id)
- {
-       union IO_APIC_reg_00 reg_00;
--      static unsigned long apic_id_map = 0;
-+      static physid_mask_t apic_id_map = PHYSID_MASK_NONE;
-+      physid_mask_t tmp;
-       unsigned long flags;
-       int i = 0;
-@@ -2233,8 +2258,8 @@ int __init io_apic_get_unique_id (int io
-        *      advantage of new APIC bus architecture.
-        */
--      if (!apic_id_map)
--              apic_id_map = phys_cpu_present_map;
-+      if (physids_empty(apic_id_map))
-+              apic_id_map = ioapic_phys_id_map(phys_cpu_present_map);
-       spin_lock_irqsave(&ioapic_lock, flags);
-       reg_00.raw = io_apic_read(ioapic, 0);
-@@ -2266,7 +2291,8 @@ int __init io_apic_get_unique_id (int io
-               apic_id = i;
-       } 
--      apic_id_map |= apicid_to_cpu_present(apic_id);
-+      tmp = apicid_to_cpu_present(apic_id);
-+      physids_or(apic_id_map, apic_id_map, tmp);
-       if (reg_00.bits.ID != apic_id) {
-               reg_00.bits.ID = apic_id;
---- linux-2.6.0-test1/arch/i386/kernel/irq.c   2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/kernel/irq.c  2003-07-19 17:04:06.000000000 -0700
-@@ -45,8 +45,6 @@
- #include <asm/desc.h>
- #include <asm/irq.h>
--
--
- /*
-  * Linux has a controller-independent x86 interrupt architecture.
-  * every controller has a 'controller-template', that is used
-@@ -889,13 +887,13 @@ int setup_irq(unsigned int irq, struct i
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
--static unsigned int parse_hex_value (const char __user *buffer,
--              unsigned long count, unsigned long *ret)
-+static unsigned int parse_hex_value(const char __user *buffer,
-+              unsigned long count, cpumask_t *ret)
- {
--      unsigned char hexnum [HEX_DIGITS];
--      unsigned long value;
-+      unsigned char hexnum[HEX_DIGITS];
-+      cpumask_t value = CPU_MASK_NONE;
-       int i;
-       if (!count)
-@@ -909,10 +907,10 @@ static unsigned int parse_hex_value (con
-        * Parse the first 8 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
--      value = 0;
-       for (i = 0; i < count; i++) {
-               unsigned int c = hexnum[i];
-+              int k;
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-@@ -921,7 +919,10 @@ static unsigned int parse_hex_value (con
-               default:
-                       goto out;
-               }
--              value = (value << 4) | c;
-+              cpus_shift_left(value, value, 4);
-+              for (k = 0; k < 4; ++k)
-+                      if (test_bit(k, (unsigned long *)&c))
-+                              cpu_set(k, value);
-       }
- out:
-       *ret = value;
-@@ -930,22 +931,35 @@ out:
- #ifdef CONFIG_SMP
--static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-+static struct proc_dir_entry *smp_affinity_entry[NR_IRQS];
-+
-+cpumask_t irq_affinity[NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
--unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
--static int irq_affinity_read_proc (char *page, char **start, off_t off,
-+static int irq_affinity_read_proc(char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
-+      int k, len;
-+      cpumask_t tmp = irq_affinity[(long)data];
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+
-+      len = 0;
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
--static int irq_affinity_write_proc (struct file *file, const char __user *buffer,
-+static int irq_affinity_write_proc(struct file *file, const char __user *buffer,
-                                       unsigned long count, void *data)
- {
--      int irq = (long) data, full_count = count, err;
--      unsigned long new_value;
-+      int irq = (long)data, full_count = count, err;
-+      cpumask_t new_value, tmp;
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-@@ -957,11 +971,13 @@ static int irq_affinity_write_proc (stru
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, new_value, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
-       irq_affinity[irq] = new_value;
--      irq_desc[irq].handler->set_affinity(irq, new_value);
-+      irq_desc[irq].handler->set_affinity(irq,
-+                                      cpumask_of_cpu(first_cpu(new_value)));
-       return full_count;
- }
-@@ -980,8 +996,9 @@ static int prof_cpu_mask_read_proc (char
- static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t *mask = (cpumask_t *)data;
-+      unsigned long full_count = count, err;
-+      cpumask_t new_value;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/i386/kernel/kgdb_stub.c    2003-07-19 17:04:14.000000000 -0700
-@@ -0,0 +1,2215 @@
-+/*
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.        See the GNU
-+ * General Public License for more details.
-+ *
-+ */
-+
-+/*
-+ * Copyright (c) 2000 VERITAS Software Corporation.
-+ * 
-+ */
-+/****************************************************************************
-+ *  Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $
-+ *
-+ *  Module name: remcom.c $
-+ *  Revision: 1.34 $
-+ *  Date: 91/03/09 12:29:49 $
-+ *  Contributor:     Lake Stevens Instrument Division$
-+ *
-+ *  Description:     low level support for gdb debugger. $
-+ *
-+ *  Considerations:  only works on target hardware $
-+ *
-+ *  Written by:            Glenn Engel $
-+ *  Updated by:            David Grothe <dave@gcom.com>
-+ *  ModuleState:     Experimental $
-+ *
-+ *  NOTES:         See Below $
-+ *
-+ *  Modified for 386 by Jim Kingdon, Cygnus Support.
-+ *  Compatibility with 2.1.xx kernel by David Grothe <dave@gcom.com>
-+ *
-+ *  Changes to allow auto initilization.  All that is needed is that it
-+ *  be linked with the kernel and a break point (int 3) be executed.
-+ *  The header file <asm/kgdb.h> defines BREAKPOINT to allow one to do
-+ *  this. It should also be possible, once the interrupt system is up, to
-+ *  call putDebugChar("+").  Once this is done, the remote debugger should
-+ *  get our attention by sending a ^C in a packet. George Anzinger 
-+ *  <george@mvista.com>
-+ *  Integrated into 2.2.5 kernel by Tigran Aivazian <tigran@sco.com>
-+ *  Added thread support, support for multiple processors,
-+ *    support for ia-32(x86) hardware debugging.
-+ *    Amit S. Kale ( akale@veritas.com )
-+ *
-+ *
-+ *  To enable debugger support, two things need to happen.  One, a
-+ *  call to set_debug_traps() is necessary in order to allow any breakpoints
-+ *  or error conditions to be properly intercepted and reported to gdb.
-+ *  Two, a breakpoint needs to be generated to begin communication.  This
-+ *  is most easily accomplished by a call to breakpoint().  Breakpoint()
-+ *  simulates a breakpoint by executing an int 3.
-+ *
-+ *************
-+ *
-+ *    The following gdb commands are supported:
-+ *
-+ * command        function                               Return value
-+ *
-+ *    g                   return the value of the CPU registers  hex data or ENN
-+ *    G                   set the value of the CPU registers     OK or ENN
-+ *
-+ *    mAA..AA,LLLL  Read LLLL bytes at address AA..AA    hex data or ENN
-+ *    MAA..AA,LLLL: Write LLLL bytes at address AA.AA    OK or ENN
-+ *
-+ *    c                   Resume at current address              SNN   ( signal NN)
-+ *    cAA..AA     Continue at address AA..AA             SNN
-+ *
-+ *    s                   Step one instruction                   SNN
-+ *    sAA..AA     Step one instruction from AA..AA       SNN
-+ *
-+ *    k                   kill
-+ *
-+ *    ?                   What was the last sigval ?             SNN   (signal NN)
-+ *
-+ * All commands and responses are sent with a packet which includes a
-+ * checksum.  A packet consists of
-+ *
-+ * $<packet info>#<checksum>.
-+ *
-+ * where
-+ * <packet info> :: <characters representing the command or response>
-+ * <checksum>  :: < two hex digits computed as modulo 256 sum of <packetinfo>>
-+ *
-+ * When a packet is received, it is first acknowledged with either '+' or '-'.
-+ * '+' indicates a successful transfer.        '-' indicates a failed transfer.
-+ *
-+ * Example:
-+ *
-+ * Host:                Reply:
-+ * $m0,10#2a             +$00010203040506070809101112131415#42
-+ *
-+ ****************************************************************************/
-+#define KGDB_VERSION "<20030530.0126.22>"
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <asm/string.h>               /* for strcpy */
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <asm/vm86.h>
-+#include <asm/system.h>
-+#include <asm/ptrace.h>               /* for linux pt_regs struct */
-+#include <asm/kgdb_local.h>
-+#include <linux/list.h>
-+#include <asm/atomic.h>
-+#include <asm/processor.h>
-+#include <linux/irq.h>
-+#include <asm/desc.h>
-+
-+/************************************************************************
-+ *
-+ * external low-level support routines
-+ */
-+typedef void (*Function) (void);      /* pointer to a function */
-+
-+/* Thread reference */
-+typedef unsigned char threadref[8];
-+
-+extern void putDebugChar(int);        /* write a single character      */
-+extern int getDebugChar(void);        /* read and return a single char */
-+
-+/************************************************************************/
-+/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
-+/* at least NUMREGBYTES*2 are needed for register packets */
-+/* Longer buffer is needed to list all threads */
-+#define BUFMAX 1024
-+
-+char *kgdb_version = KGDB_VERSION;
-+
-+/*  debug >  0 prints ill-formed commands in valid packets & checksum errors */
-+int debug_regs = 0;           /* set to non-zero to print registers */
-+
-+/* filled in by an external module */
-+char *gdb_module_offsets;
-+
-+static const char hexchars[] = "0123456789abcdef";
-+
-+/* Number of bytes of registers.  */
-+#define NUMREGBYTES 64
-+/*
-+ * Note that this register image is in a different order than
-+ * the register image that Linux produces at interrupt time.
-+ *
-+ * Linux's register image is defined by struct pt_regs in ptrace.h.
-+ * Just why GDB uses a different order is a historical mystery.
-+ */
-+enum regnames { _EAX,         /* 0 */
-+      _ECX,                   /* 1 */
-+      _EDX,                   /* 2 */
-+      _EBX,                   /* 3 */
-+      _ESP,                   /* 4 */
-+      _EBP,                   /* 5 */
-+      _ESI,                   /* 6 */
-+      _EDI,                   /* 7 */
-+      _PC /* 8 also known as eip */ ,
-+      _PS /* 9 also known as eflags */ ,
-+      _CS,                    /* 10 */
-+      _SS,                    /* 11 */
-+      _DS,                    /* 12 */
-+      _ES,                    /* 13 */
-+      _FS,                    /* 14 */
-+      _GS                     /* 15 */
-+};
-+
-+/***************************  ASSEMBLY CODE MACROS *************************/
-+/*
-+ * Put the error code here just in case the user cares.       
-+ * Likewise, the vector number here (since GDB only gets the signal
-+ * number through the usual means, and that's not very specific). 
-+ * The called_from is the return address so he can tell how we entered kgdb.
-+ * This will allow him to seperate out the various possible entries. 
-+ */
-+#define REMOTE_DEBUG 0                /* set != to turn on printing (also available in info) */
-+
-+#define PID_MAX PID_MAX_DEFAULT
-+
-+#ifdef CONFIG_SMP
-+void smp_send_nmi_allbutself(void);
-+#define IF_SMP(x) x
-+#undef MAX_NO_CPUS
-+#ifndef CONFIG_NO_KGDB_CPUS
-+#define CONFIG_NO_KGDB_CPUS 2
-+#endif
-+#if CONFIG_NO_KGDB_CPUS > NR_CPUS
-+#define MAX_NO_CPUS NR_CPUS
-+#else
-+#define MAX_NO_CPUS CONFIG_NO_KGDB_CPUS
-+#endif
-+#define hold_init hold_on_sstep: 1,
-+#define MAX_CPU_MASK (unsigned long)((1LL << MAX_NO_CPUS) - 1LL)
-+#define NUM_CPUS num_online_cpus()
-+#else
-+#define IF_SMP(x)
-+#define hold_init
-+#undef MAX_NO_CPUS
-+#define MAX_NO_CPUS 1
-+#define NUM_CPUS 1
-+#endif
-+#define NOCPU (struct task_struct *)0xbad1fbad
-+/* *INDENT-OFF*        */
-+struct kgdb_info {
-+      int used_malloc;
-+      void *called_from;
-+      long long entry_tsc;
-+      int errcode;
-+      int vector;
-+      int print_debug_info;
-+#ifdef CONFIG_SMP
-+      int hold_on_sstep;
-+      struct {
-+              volatile struct task_struct *task;
-+              int pid;
-+              int hold;
-+              struct pt_regs *regs;
-+      } cpus_waiting[MAX_NO_CPUS];
-+#endif
-+} kgdb_info = {hold_init print_debug_info:REMOTE_DEBUG, vector:-1};
-+
-+/* *INDENT-ON*        */
-+
-+#define used_m kgdb_info.used_malloc
-+/*
-+ * This is little area we set aside to contain the stack we 
-+ * need to build to allow gdb to call functions.  We use one
-+ * per cpu to avoid locking issues.  We will do all this work
-+ * with interrupts off so that should take care of the protection
-+ * issues.
-+ */
-+#define LOOKASIDE_SIZE 200    /* should be more than enough */
-+#define MALLOC_MAX   200      /* Max malloc size */
-+struct {
-+      unsigned int esp;
-+      int array[LOOKASIDE_SIZE];
-+} fn_call_lookaside[MAX_NO_CPUS];
-+
-+static int trap_cpu;
-+static unsigned int OLD_esp;
-+
-+#define END_OF_LOOKASIDE  &fn_call_lookaside[trap_cpu].array[LOOKASIDE_SIZE]
-+#define IF_BIT 0x200
-+#define TF_BIT 0x100
-+
-+#define MALLOC_ROUND 8-1
-+
-+static char malloc_array[MALLOC_MAX];
-+IF_SMP(static void to_gdb(const char *mess));
-+void *
-+malloc(int size)
-+{
-+
-+      if (size <= (MALLOC_MAX - used_m)) {
-+              int old_used = used_m;
-+              used_m += ((size + MALLOC_ROUND) & (~MALLOC_ROUND));
-+              return &malloc_array[old_used];
-+      } else {
-+              return NULL;
-+      }
-+}
-+
-+/*
-+ * Gdb calls functions by pushing agruments, including a return address 
-+ * on the stack and the adjusting EIP to point to the function.        The 
-+ * whole assumption in GDB is that we are on a different stack than the
-+ * one the "user" i.e. code that hit the break point, is on.  This, of
-+ * course is not true in the kernel.  Thus various dodges are needed to
-+ * do the call without directly messing with EIP (which we can not change
-+ * as it is just a location and not a register.        To adjust it would then
-+ * require that we move every thing below EIP up or down as needed.  This
-+ * will not work as we may well have stack relative pointer on the stack
-+ * (such as the pointer to regs, for example).
-+
-+ * So here is what we do:
-+ * We detect gdb attempting to store into the stack area and instead, store
-+ * into the fn_call_lookaside.array at the same relative location as if it 
-+ * were the area ESP pointed at.  We also trap ESP modifications
-+ * and uses these to adjust fn_call_lookaside.esp.  On entry 
-+ * fn_call_lookaside.esp will be set to point at the last entry in
-+ * fn_call_lookaside.array.  This allows us to check if it has changed, and 
-+ * if so, on exit, we add the registers we will use to do the move and a
-+ * trap/ interrupt return exit sequence.  We then adjust the eflags in the
-+ * regs array (remember we now have a copy in the fn_call_lookaside.array) to
-+ * kill the interrupt bit, AND we change EIP to point at our set up stub.
-+ * As part of the register set up we preset the registers to point at the
-+ * begining and end of the fn_call_lookaside.array, so all the stub needs to
-+ * do is move words from the array to the stack until ESP= the desired value
-+ * then do the rti.  This will then transfer to the desired function with 
-+ * all the correct registers.  Nifty huh?
-+ */
-+extern asmlinkage void fn_call_stub(void);
-+extern asmlinkage void fn_rtn_stub(void);
-+/*                                       *INDENT-OFF*  */
-+__asm__("fn_rtn_stub:\n\t"
-+      "movl %eax,%esp\n\t"
-+      "fn_call_stub:\n\t"
-+      "1:\n\t"
-+      "addl $-4,%ebx\n\t"
-+      "movl (%ebx), %eax\n\t"
-+      "pushl %eax\n\t"
-+      "cmpl %esp,%ecx\n\t"
-+      "jne  1b\n\t"
-+      "popl %eax\n\t" 
-+      "popl %ebx\n\t" 
-+      "popl %ecx\n\t" 
-+      "iret \n\t");
-+/*                                         *INDENT-ON*  */
-+#define gdb_i386vector        kgdb_info.vector
-+#define gdb_i386errcode kgdb_info.errcode
-+#define waiting_cpus  kgdb_info.cpus_waiting
-+#define remote_debug  kgdb_info.print_debug_info
-+#define hold_cpu(cpu) kgdb_info.cpus_waiting[cpu].hold
-+/* gdb locks */
-+
-+#ifdef CONFIG_SMP
-+static int in_kgdb_called;
-+static spinlock_t waitlocks[MAX_NO_CPUS] =
-+    {[0 ... MAX_NO_CPUS - 1] = SPIN_LOCK_UNLOCKED };
-+/*
-+ * The following array has the thread pointer of each of the "other"
-+ * cpus.  We make it global so it can be seen by gdb.
-+ */
-+volatile int in_kgdb_entry_log[MAX_NO_CPUS];
-+volatile struct pt_regs *in_kgdb_here_log[MAX_NO_CPUS];
-+/*
-+static spinlock_t continuelocks[MAX_NO_CPUS];
-+*/
-+spinlock_t kgdb_spinlock = SPIN_LOCK_UNLOCKED;
-+/* waiters on our spinlock plus us */
-+static atomic_t spinlock_waiters = ATOMIC_INIT(1);
-+static int spinlock_count = 0;
-+static int spinlock_cpu = 0;
-+/*
-+ * Note we use nested spin locks to account for the case where a break
-+ * point is encountered when calling a function by user direction from
-+ * kgdb. Also there is the memory exception recursion to account for.
-+ * Well, yes, but this lets other cpus thru too.  Lets add a
-+ * cpu id to the lock.
-+ */
-+#define KGDB_SPIN_LOCK(x) if( spinlock_count == 0 || \
-+                            spinlock_cpu != smp_processor_id()){\
-+                                    atomic_inc(&spinlock_waiters); \
-+                                    while (! spin_trylock(x)) {\
-+                                          in_kgdb(&regs);\
-+                                    }\
-+                                    atomic_dec(&spinlock_waiters); \
-+                                    spinlock_count = 1; \
-+                                    spinlock_cpu = smp_processor_id(); \
-+                        }else{  \
-+                                    spinlock_count++; \
-+                        }
-+#define KGDB_SPIN_UNLOCK(x) if( --spinlock_count == 0) spin_unlock(x)
-+#else
-+unsigned kgdb_spinlock = 0;
-+#define KGDB_SPIN_LOCK(x) --*x
-+#define KGDB_SPIN_UNLOCK(x) ++*x
-+#endif
-+
-+int
-+hex(char ch)
-+{
-+      if ((ch >= 'a') && (ch <= 'f'))
-+              return (ch - 'a' + 10);
-+      if ((ch >= '0') && (ch <= '9'))
-+              return (ch - '0');
-+      if ((ch >= 'A') && (ch <= 'F'))
-+              return (ch - 'A' + 10);
-+      return (-1);
-+}
-+
-+/* scan for the sequence $<data>#<checksum>   */
-+void
-+getpacket(char *buffer)
-+{
-+      unsigned char checksum;
-+      unsigned char xmitcsum;
-+      int i;
-+      int count;
-+      char ch;
-+
-+      do {
-+              /* wait around for the start character, ignore all other characters */
-+              while ((ch = (getDebugChar() & 0x7f)) != '$') ;
-+              checksum = 0;
-+              xmitcsum = -1;
-+
-+              count = 0;
-+
-+              /* now, read until a # or end of buffer is found */
-+              while (count < BUFMAX) {
-+                      ch = getDebugChar() & 0x7f;
-+                      if (ch == '#')
-+                              break;
-+                      checksum = checksum + ch;
-+                      buffer[count] = ch;
-+                      count = count + 1;
-+              }
-+              buffer[count] = 0;
-+
-+              if (ch == '#') {
-+                      xmitcsum = hex(getDebugChar() & 0x7f) << 4;
-+                      xmitcsum += hex(getDebugChar() & 0x7f);
-+                      if ((remote_debug) && (checksum != xmitcsum)) {
-+                              printk
-+                                  ("bad checksum.     My count = 0x%x, sent=0x%x. buf=%s\n",
-+                                   checksum, xmitcsum, buffer);
-+                      }
-+
-+                      if (checksum != xmitcsum)
-+                              putDebugChar('-');      /* failed checksum */
-+                      else {
-+                              putDebugChar('+');      /* successful transfer */
-+                              /* if a sequence char is present, reply the sequence ID */
-+                              if (buffer[2] == ':') {
-+                                      putDebugChar(buffer[0]);
-+                                      putDebugChar(buffer[1]);
-+                                      /* remove sequence chars from buffer */
-+                                      count = strlen(buffer);
-+                                      for (i = 3; i <= count; i++)
-+                                              buffer[i - 3] = buffer[i];
-+                              }
-+                      }
-+              }
-+      } while (checksum != xmitcsum);
-+
-+      if (remote_debug)
-+              printk("R:%s\n", buffer);
-+}
-+
-+/* send the packet in buffer.  */
-+
-+void
-+putpacket(char *buffer)
-+{
-+      unsigned char checksum;
-+      int count;
-+      char ch;
-+
-+      /*  $<packet info>#<checksum>. */
-+      do {
-+              if (remote_debug)
-+                      printk("T:%s\n", buffer);
-+              putDebugChar('$');
-+              checksum = 0;
-+              count = 0;
-+
-+              while ((ch = buffer[count])) {
-+                      putDebugChar(ch);
-+                      checksum += ch;
-+                      count += 1;
-+              }
-+
-+              putDebugChar('#');
-+              putDebugChar(hexchars[checksum >> 4]);
-+              putDebugChar(hexchars[checksum % 16]);
-+
-+      } while ((getDebugChar() & 0x7f) != '+');
-+
-+}
-+
-+static char remcomInBuffer[BUFMAX];
-+static char remcomOutBuffer[BUFMAX];
-+static short error;
-+
-+void
-+debug_error(char *format, char *parm)
-+{
-+      if (remote_debug)
-+              printk(format, parm);
-+}
-+
-+static void
-+print_regs(struct pt_regs *regs)
-+{
-+      printk("EAX=%08lx ", regs->eax);
-+      printk("EBX=%08lx ", regs->ebx);
-+      printk("ECX=%08lx ", regs->ecx);
-+      printk("EDX=%08lx ", regs->edx);
-+      printk("\n");
-+      printk("ESI=%08lx ", regs->esi);
-+      printk("EDI=%08lx ", regs->edi);
-+      printk("EBP=%08lx ", regs->ebp);
-+      printk("ESP=%08lx ", (long) &regs->esp);
-+      printk("\n");
-+      printk(" DS=%08x ", regs->xds);
-+      printk(" ES=%08x ", regs->xes);
-+      printk(" SS=%08x ", __KERNEL_DS);
-+      printk(" FL=%08lx ", regs->eflags);
-+      printk("\n");
-+      printk(" CS=%08x ", regs->xcs);
-+      printk(" IP=%08lx ", regs->eip);
-+#if 0
-+      printk(" FS=%08x ", regs->fs);
-+      printk(" GS=%08x ", regs->gs);
-+#endif
-+      printk("\n");
-+
-+}                             /* print_regs */
-+
-+#define NEW_esp fn_call_lookaside[trap_cpu].esp
-+
-+static void
-+regs_to_gdb_regs(int *gdb_regs, struct pt_regs *regs)
-+{
-+      gdb_regs[_EAX] = regs->eax;
-+      gdb_regs[_EBX] = regs->ebx;
-+      gdb_regs[_ECX] = regs->ecx;
-+      gdb_regs[_EDX] = regs->edx;
-+      gdb_regs[_ESI] = regs->esi;
-+      gdb_regs[_EDI] = regs->edi;
-+      gdb_regs[_EBP] = regs->ebp;
-+      gdb_regs[_DS] = regs->xds;
-+      gdb_regs[_ES] = regs->xes;
-+      gdb_regs[_PS] = regs->eflags;
-+      gdb_regs[_CS] = regs->xcs;
-+      gdb_regs[_PC] = regs->eip;
-+      /* Note, as we are a debugging the kernel, we will always 
-+       * trap in kernel code, this means no priviledge change,
-+       * and so the pt_regs structure is not completely valid.  In a non
-+       * privilege change trap, only EFLAGS, CS and EIP are put on the stack,
-+       * SS and ESP are not stacked, this means that the last 2 elements of
-+       * pt_regs is not valid (they would normally refer to the user stack)
-+       * also, using regs+1 is no good because you end up will a value that is 
-+       * 2 longs (8) too high.  This used to cause stepping over functions
-+       * to fail, so my fix is to use the address of regs->esp, which 
-+       * should point at the end of the stack frame.  Note I have ignored
-+       * completely exceptions that cause an error code to be stacked, such
-+       * as double fault.  Stuart Hughes, Zentropix.
-+       * original code: gdb_regs[_ESP] =  (int) (regs + 1) ; 
-+
-+       * this is now done on entry and moved to OLD_esp (as well as NEW_esp).
-+       */
-+      gdb_regs[_ESP] = NEW_esp;
-+      gdb_regs[_SS] = __KERNEL_DS;
-+      gdb_regs[_FS] = 0xFFFF;
-+      gdb_regs[_GS] = 0xFFFF;
-+}                             /* regs_to_gdb_regs */
-+
-+static void
-+gdb_regs_to_regs(int *gdb_regs, struct pt_regs *regs)
-+{
-+      regs->eax = gdb_regs[_EAX];
-+      regs->ebx = gdb_regs[_EBX];
-+      regs->ecx = gdb_regs[_ECX];
-+      regs->edx = gdb_regs[_EDX];
-+      regs->esi = gdb_regs[_ESI];
-+      regs->edi = gdb_regs[_EDI];
-+      regs->ebp = gdb_regs[_EBP];
-+      regs->xds = gdb_regs[_DS];
-+      regs->xes = gdb_regs[_ES];
-+      regs->eflags = gdb_regs[_PS];
-+      regs->xcs = gdb_regs[_CS];
-+      regs->eip = gdb_regs[_PC];
-+      NEW_esp = gdb_regs[_ESP];       /* keep the value */
-+#if 0                         /* can't change these */
-+      regs->esp = gdb_regs[_ESP];
-+      regs->xss = gdb_regs[_SS];
-+      regs->fs = gdb_regs[_FS];
-+      regs->gs = gdb_regs[_GS];
-+#endif
-+
-+}                             /* gdb_regs_to_regs */
-+extern void scheduling_functions_start_here(void);
-+extern void scheduling_functions_end_here(void);
-+#define first_sched   ((unsigned long) scheduling_functions_start_here)
-+#define last_sched    ((unsigned long) scheduling_functions_end_here)
-+
-+int thread_list = 0;
-+
-+void
-+get_gdb_regs(struct task_struct *p, struct pt_regs *regs, int *gdb_regs)
-+{
-+      unsigned long stack_page;
-+      int count = 0;
-+      IF_SMP(int i);
-+      if (!p || p == current) {
-+              regs_to_gdb_regs(gdb_regs, regs);
-+              return;
-+      }
-+#ifdef CONFIG_SMP
-+      for (i = 0; i < MAX_NO_CPUS; i++) {
-+              if (p == kgdb_info.cpus_waiting[i].task) {
-+                      regs_to_gdb_regs(gdb_regs,
-+                                       kgdb_info.cpus_waiting[i].regs);
-+                      gdb_regs[_ESP] =
-+                          (int) &kgdb_info.cpus_waiting[i].regs->esp;
-+
-+                      return;
-+              }
-+      }
-+#endif
-+      memset(gdb_regs, 0, NUMREGBYTES);
-+      gdb_regs[_ESP] = p->thread.esp;
-+      gdb_regs[_PC] = p->thread.eip;
-+      gdb_regs[_EBP] = *(int *) gdb_regs[_ESP];
-+      gdb_regs[_EDI] = *(int *) (gdb_regs[_ESP] + 4);
-+      gdb_regs[_ESI] = *(int *) (gdb_regs[_ESP] + 8);
-+
-+/*
-+ * This code is to give a more informative notion of where a process 
-+ * is waiting.        It is used only when the user asks for a thread info
-+ * list.  If he then switches to the thread, s/he will find the task
-+ * is in schedule, but a back trace should show the same info we come
-+ * up with.  This code was shamelessly purloined from process.c.  It was
-+ * then enhanced to provide more registers than simply the program 
-+ * counter.
-+ */
-+
-+      if (!thread_list) {
-+              return;
-+      }
-+
-+      if (p->state == TASK_RUNNING)
-+              return;
-+      stack_page = (unsigned long) p->thread_info;
-+      if (gdb_regs[_ESP] < stack_page || gdb_regs[_ESP] > 8188 + stack_page)
-+              return;
-+      /* include/asm-i386/system.h:switch_to() pushes ebp last. */
-+      do {
-+              if (gdb_regs[_EBP] < stack_page ||
-+                  gdb_regs[_EBP] > 8184 + stack_page)
-+                      return;
-+              gdb_regs[_PC] = *(unsigned long *) (gdb_regs[_EBP] + 4);
-+              gdb_regs[_ESP] = gdb_regs[_EBP] + 8;
-+              gdb_regs[_EBP] = *(unsigned long *) gdb_regs[_EBP];
-+              if (gdb_regs[_PC] < first_sched || gdb_regs[_PC] >= last_sched)
-+                      return;
-+      } while (count++ < 16);
-+      return;
-+}
-+
-+/* Indicate to caller of mem2hex or hex2mem that there has been an
-+   error.  */
-+static volatile int mem_err = 0;
-+static volatile int mem_err_expected = 0;
-+static volatile int mem_err_cnt = 0;
-+static int garbage_loc = -1;
-+
-+int
-+get_char(char *addr)
-+{
-+      return *addr;
-+}
-+
-+void
-+set_char(char *addr, int val, int may_fault)
-+{
-+      /*
-+       * This code traps references to the area mapped to the kernel
-+       * stack as given by the regs and, instead, stores to the
-+       * fn_call_lookaside[cpu].array
-+       */
-+      if (may_fault &&
-+          (unsigned int) addr < OLD_esp &&
-+          ((unsigned int) addr > (OLD_esp - (unsigned int) LOOKASIDE_SIZE))) {
-+              addr = (char *) END_OF_LOOKASIDE - ((char *) OLD_esp - addr);
-+      }
-+      *addr = val;
-+}
-+
-+/* convert the memory pointed to by mem into hex, placing result in buf */
-+/* return a pointer to the last char put in buf (null) */
-+/* If MAY_FAULT is non-zero, then we should set mem_err in response to
-+   a fault; if zero treat a fault like any other fault in the stub.  */
-+char *
-+mem2hex(char *mem, char *buf, int count, int may_fault)
-+{
-+      int i;
-+      unsigned char ch;
-+
-+      if (may_fault) {
-+              mem_err_expected = 1;
-+              mem_err = 0;
-+      }
-+      for (i = 0; i < count; i++) {
-+              /* printk("%lx = ", mem) ; */
-+
-+              ch = get_char(mem++);
-+
-+              /* printk("%02x\n", ch & 0xFF) ; */
-+              if (may_fault && mem_err) {
-+                      if (remote_debug)
-+                              printk("Mem fault fetching from addr %lx\n",
-+                                     (long) (mem - 1));
-+                      *buf = 0;       /* truncate buffer */
-+                      return (buf);
-+              }
-+              *buf++ = hexchars[ch >> 4];
-+              *buf++ = hexchars[ch % 16];
-+      }
-+      *buf = 0;
-+      if (may_fault)
-+              mem_err_expected = 0;
-+      return (buf);
-+}
-+
-+/* convert the hex array pointed to by buf into binary to be placed in mem */
-+/* return a pointer to the character AFTER the last byte written */
-+/* NOTE: We use the may fault flag to also indicate if the write is to
-+ * the registers (0) or "other" memory (!=0) 
-+ */
-+char *
-+hex2mem(char *buf, char *mem, int count, int may_fault)
-+{
-+      int i;
-+      unsigned char ch;
-+
-+      if (may_fault) {
-+              mem_err_expected = 1;
-+              mem_err = 0;
-+      }
-+      for (i = 0; i < count; i++) {
-+              ch = hex(*buf++) << 4;
-+              ch = ch + hex(*buf++);
-+              set_char(mem++, ch, may_fault);
-+
-+              if (may_fault && mem_err) {
-+                      if (remote_debug)
-+                              printk("Mem fault storing to addr %lx\n",
-+                                     (long) (mem - 1));
-+                      return (mem);
-+              }
-+      }
-+      if (may_fault)
-+              mem_err_expected = 0;
-+      return (mem);
-+}
-+
-+/**********************************************/
-+/* WHILE WE FIND NICE HEX CHARS, BUILD AN INT */
-+/* RETURN NUMBER OF CHARS PROCESSED         */
-+/**********************************************/
-+int
-+hexToInt(char **ptr, int *intValue)
-+{
-+      int numChars = 0;
-+      int hexValue;
-+
-+      *intValue = 0;
-+
-+      while (**ptr) {
-+              hexValue = hex(**ptr);
-+              if (hexValue >= 0) {
-+                      *intValue = (*intValue << 4) | hexValue;
-+                      numChars++;
-+              } else
-+                      break;
-+
-+              (*ptr)++;
-+      }
-+
-+      return (numChars);
-+}
-+
-+#define stubhex(h) hex(h)
-+
-+static int
-+stub_unpack_int(char *buff, int fieldlength)
-+{
-+      int nibble;
-+      int retval = 0;
-+
-+      while (fieldlength) {
-+              nibble = stubhex(*buff++);
-+              retval |= nibble;
-+              fieldlength--;
-+              if (fieldlength)
-+                      retval = retval << 4;
-+      }
-+      return retval;
-+}
-+
-+static char *
-+pack_hex_byte(char *pkt, int byte)
-+{
-+      *pkt++ = hexchars[(byte >> 4) & 0xf];
-+      *pkt++ = hexchars[(byte & 0xf)];
-+      return pkt;
-+}
-+
-+#define BUF_THREAD_ID_SIZE 16
-+
-+static char *
-+pack_threadid(char *pkt, threadref * id)
-+{
-+      char *limit;
-+      unsigned char *altid;
-+
-+      altid = (unsigned char *) id;
-+      limit = pkt + BUF_THREAD_ID_SIZE;
-+      while (pkt < limit)
-+              pkt = pack_hex_byte(pkt, *altid++);
-+      return pkt;
-+}
-+
-+static char *
-+unpack_byte(char *buf, int *value)
-+{
-+      *value = stub_unpack_int(buf, 2);
-+      return buf + 2;
-+}
-+
-+static char *
-+unpack_threadid(char *inbuf, threadref * id)
-+{
-+      char *altref;
-+      char *limit = inbuf + BUF_THREAD_ID_SIZE;
-+      int x, y;
-+
-+      altref = (char *) id;
-+
-+      while (inbuf < limit) {
-+              x = stubhex(*inbuf++);
-+              y = stubhex(*inbuf++);
-+              *altref++ = (x << 4) | y;
-+      }
-+      return inbuf;
-+}
-+
-+void
-+int_to_threadref(threadref * id, int value)
-+{
-+      unsigned char *scan;
-+
-+      scan = (unsigned char *) id;
-+      {
-+              int i = 4;
-+              while (i--)
-+                      *scan++ = 0;
-+      }
-+      *scan++ = (value >> 24) & 0xff;
-+      *scan++ = (value >> 16) & 0xff;
-+      *scan++ = (value >> 8) & 0xff;
-+      *scan++ = (value & 0xff);
-+}
-+
-+static int
-+threadref_to_int(threadref * ref)
-+{
-+      int i, value = 0;
-+      unsigned char *scan;
-+
-+      scan = (char *) ref;
-+      scan += 4;
-+      i = 4;
-+      while (i-- > 0)
-+              value = (value << 8) | ((*scan++) & 0xff);
-+      return value;
-+}
-+
-+#if 1                         /* this is a hold over from 2.4 where O(1) was "sometimes" */
-+extern struct task_struct *kgdb_get_idle(int cpu);
-+#define idle_task(cpu) kgdb_get_idle(cpu)
-+#else
-+#define idle_task(cpu) init_tasks[cpu]
-+#endif
-+
-+struct task_struct *
-+getthread(int pid)
-+{
-+      struct task_struct *thread;
-+      if (pid >= PID_MAX && pid <= (PID_MAX + MAX_NO_CPUS)) {
-+
-+              return idle_task(pid - PID_MAX);
-+      } else {
-+              /*
-+               * find_task_by_pid is relatively safe all the time
-+               * Other pid functions require lock downs which imply
-+               * that we may be interrupting them (as we get here
-+               * in the middle of most any lock down)
-+               */
-+              thread = find_task_by_pid(pid);
-+              if (thread) {
-+                      return thread;
-+              }
-+      }
-+      return NULL;
-+}
-+/* *INDENT-OFF*        */
-+struct hw_breakpoint {
-+      unsigned enabled;
-+      unsigned type;
-+      unsigned len;
-+      unsigned addr;
-+} breakinfo[4] = { {enabled:0}, 
-+                 {enabled:0}, 
-+                 {enabled:0}, 
-+                 {enabled:0}};
-+/* *INDENT-ON*        */
-+unsigned hw_breakpoint_status;
-+void
-+correct_hw_break(void)
-+{
-+      int breakno;
-+      int correctit;
-+      int breakbit;
-+      unsigned dr7;
-+
-+      asm volatile ("movl %%db7, %0\n":"=r" (dr7)
-+                    :);
-+      /* *INDENT-OFF*  */
-+      do {
-+              unsigned addr0, addr1, addr2, addr3;
-+              asm volatile ("movl %%db0, %0\n"
-+                            "movl %%db1, %1\n"
-+                            "movl %%db2, %2\n"
-+                            "movl %%db3, %3\n"
-+                            :"=r" (addr0), "=r"(addr1),
-+                            "=r"(addr2), "=r"(addr3)
-+                            :);
-+      } while (0);
-+      /* *INDENT-ON*  */
-+      correctit = 0;
-+      for (breakno = 0; breakno < 3; breakno++) {
-+              breakbit = 2 << (breakno << 1);
-+              if (!(dr7 & breakbit) && breakinfo[breakno].enabled) {
-+                      correctit = 1;
-+                      dr7 |= breakbit;
-+                      dr7 &= ~(0xf0000 << (breakno << 2));
-+                      dr7 |= (((breakinfo[breakno].len << 2) |
-+                               breakinfo[breakno].type) << 16) <<
-+                          (breakno << 2);
-+                      switch (breakno) {
-+                      case 0:
-+                              asm volatile ("movl %0, %%dr0\n"::"r"
-+                                            (breakinfo[breakno].addr));
-+                              break;
-+
-+                      case 1:
-+                              asm volatile ("movl %0, %%dr1\n"::"r"
-+                                            (breakinfo[breakno].addr));
-+                              break;
-+
-+                      case 2:
-+                              asm volatile ("movl %0, %%dr2\n"::"r"
-+                                            (breakinfo[breakno].addr));
-+                              break;
-+
-+                      case 3:
-+                              asm volatile ("movl %0, %%dr3\n"::"r"
-+                                            (breakinfo[breakno].addr));
-+                              break;
-+                      }
-+              } else if ((dr7 & breakbit) && !breakinfo[breakno].enabled) {
-+                      correctit = 1;
-+                      dr7 &= ~breakbit;
-+                      dr7 &= ~(0xf0000 << (breakno << 2));
-+              }
-+      }
-+      if (correctit) {
-+              asm volatile ("movl %0, %%db7\n"::"r" (dr7));
-+      }
-+}
-+
-+int
-+remove_hw_break(unsigned breakno)
-+{
-+      if (!breakinfo[breakno].enabled) {
-+              return -1;
-+      }
-+      breakinfo[breakno].enabled = 0;
-+      return 0;
-+}
-+
-+int
-+set_hw_break(unsigned breakno, unsigned type, unsigned len, unsigned addr)
-+{
-+      if (breakinfo[breakno].enabled) {
-+              return -1;
-+      }
-+      breakinfo[breakno].enabled = 1;
-+      breakinfo[breakno].type = type;
-+      breakinfo[breakno].len = len;
-+      breakinfo[breakno].addr = addr;
-+      return 0;
-+}
-+
-+#ifdef CONFIG_SMP
-+static int in_kgdb_console = 0;
-+
-+int
-+in_kgdb(struct pt_regs *regs)
-+{
-+      unsigned flags;
-+      int cpu = smp_processor_id();
-+      in_kgdb_called = 1;
-+      if (!spin_is_locked(&kgdb_spinlock)) {
-+              if (in_kgdb_here_log[cpu] ||    /* we are holding this cpu */
-+                  in_kgdb_console) {  /* or we are doing slow i/o */
-+                      return 1;
-+              }
-+              return 0;
-+      }
-+
-+      /* As I see it the only reason not to let all cpus spin on
-+       * the same spin_lock is to allow selected ones to proceed.
-+       * This would be a good thing, so we leave it this way.
-+       * Maybe someday....  Done !
-+
-+       * in_kgdb() is called from an NMI so we don't pretend
-+       * to have any resources, like printk() for example.  
-+       */
-+
-+      kgdb_local_irq_save(flags);     /* only local here, to avoid hanging */
-+      /*
-+       * log arival of this cpu
-+       * The NMI keeps on ticking.  Protect against recurring more
-+       * than once, and ignor the cpu that has the kgdb lock
-+       */
-+      in_kgdb_entry_log[cpu]++;
-+      in_kgdb_here_log[cpu] = regs;
-+      if (cpu == spinlock_cpu || waiting_cpus[cpu].task) {
-+              goto exit_in_kgdb;
-+      }
-+      /*
-+       * For protection of the initilization of the spin locks by kgdb
-+       * it locks the kgdb spinlock before it gets the wait locks set
-+       * up.  We wait here for the wait lock to be taken.  If the
-+       * kgdb lock goes away first??  Well, it could be a slow exit
-+       * sequence where the wait lock is removed prior to the kgdb lock
-+       * so if kgdb gets unlocked, we just exit.
-+       */
-+      while (spin_is_locked(&kgdb_spinlock) &&
-+             !spin_is_locked(waitlocks + cpu)) ;
-+      if (!spin_is_locked(&kgdb_spinlock)) {
-+              goto exit_in_kgdb;
-+      }
-+      waiting_cpus[cpu].task = current;
-+      waiting_cpus[cpu].pid = (current->pid) ? : (PID_MAX + cpu);
-+      waiting_cpus[cpu].regs = regs;
-+
-+      spin_unlock_wait(waitlocks + cpu);
-+      /*
-+       * log departure of this cpu
-+       */
-+      waiting_cpus[cpu].task = 0;
-+      waiting_cpus[cpu].pid = 0;
-+      waiting_cpus[cpu].regs = 0;
-+      correct_hw_break();
-+      exit_in_kgdb:
-+      in_kgdb_here_log[cpu] = 0;
-+      kgdb_local_irq_restore(flags);
-+      return 1;
-+      /*
-+         spin_unlock(continuelocks + smp_processor_id());
-+       */
-+}
-+
-+void
-+smp__in_kgdb(struct pt_regs regs)
-+{
-+      ack_APIC_irq();
-+      in_kgdb(&regs);
-+}
-+#else
-+int
-+in_kgdb(struct pt_regs *regs)
-+{
-+      return (kgdb_spinlock);
-+}
-+#endif
-+
-+void
-+printexceptioninfo(int exceptionNo, int errorcode, char *buffer)
-+{
-+      unsigned dr6;
-+      int i;
-+      switch (exceptionNo) {
-+      case 1:         /* debug exception */
-+              break;
-+      case 3:         /* breakpoint */
-+              sprintf(buffer, "Software breakpoint");
-+              return;
-+      default:
-+              sprintf(buffer, "Details not available");
-+              return;
-+      }
-+      asm volatile ("movl %%db6, %0\n":"=r" (dr6)
-+                    :);
-+      if (dr6 & 0x4000) {
-+              sprintf(buffer, "Single step");
-+              return;
-+      }
-+      for (i = 0; i < 4; ++i) {
-+              if (dr6 & (1 << i)) {
-+                      sprintf(buffer, "Hardware breakpoint %d", i);
-+                      return;
-+              }
-+      }
-+      sprintf(buffer, "Unknown trap");
-+      return;
-+}
-+
-+/*
-+ * This function does all command procesing for interfacing to gdb.
-+ *
-+ * NOTE:  The INT nn instruction leaves the state of the interrupt
-+ *      enable flag UNCHANGED.  That means that when this routine
-+ *      is entered via a breakpoint (INT 3) instruction from code
-+ *      that has interrupts enabled, then interrupts will STILL BE
-+ *      enabled when this routine is entered.  The first thing that
-+ *      we do here is disable interrupts so as to prevent recursive
-+ *      entries and bothersome serial interrupts while we are
-+ *      trying to run the serial port in polled mode.
-+ *
-+ * For kernel version 2.1.xx the kgdb_cli() actually gets a spin lock so
-+ * it is always necessary to do a restore_flags before returning
-+ * so as to let go of that lock.
-+ */
-+int
-+kgdb_handle_exception(int exceptionVector,
-+                    int signo, int err_code, struct pt_regs *linux_regs)
-+{
-+      struct task_struct *usethread = NULL;
-+      struct task_struct *thread_list_start = 0, *thread = NULL;
-+      int addr, length;
-+      int breakno, breaktype;
-+      char *ptr;
-+      int newPC;
-+      threadref thref;
-+      int threadid;
-+      int thread_min = PID_MAX + MAX_NO_CPUS;
-+      int maxthreads;
-+      int nothreads;
-+      unsigned long flags;
-+      int gdb_regs[NUMREGBYTES / 4];
-+      int dr6;
-+      IF_SMP(int entry_state = 0);    /* 0, ok, 1, no nmi, 2 sync failed */
-+#define NO_NMI 1
-+#define NO_SYNC 2
-+#define       regs    (*linux_regs)
-+#define NUMREGS NUMREGBYTES/4
-+      /*
-+       * If the entry is not from the kernel then return to the Linux
-+       * trap handler and let it process the interrupt normally.
-+       */
-+      if ((linux_regs->eflags & VM_MASK) || (3 & linux_regs->xcs)) {
-+              printk("ignoring non-kernel exception\n");
-+              print_regs(&regs);
-+              return (0);
-+      }
-+
-+      kgdb_local_irq_save(flags);
-+
-+      /* Get kgdb spinlock */
-+
-+      KGDB_SPIN_LOCK(&kgdb_spinlock);
-+      rdtscll(kgdb_info.entry_tsc);
-+      /*
-+       * We depend on this spinlock and the NMI watch dog to control the 
-+       * other cpus.  They will arrive at "in_kgdb()" as a result of the
-+       * NMI and will wait there for the following spin locks to be 
-+       * released.
-+       */
-+#ifdef CONFIG_SMP
-+
-+#if 0
-+      if (cpu_callout_map & ~MAX_CPU_MASK) {
-+              printk("kgdb : too many cpus, possibly not mapped"
-+                     " in contiguous space, change MAX_NO_CPUS"
-+                     " in kgdb_stub and make new kernel.\n"
-+                     " cpu_callout_map is %lx\n", cpu_callout_map);
-+              goto exit_just_unlock;
-+      }
-+#endif
-+      if (spinlock_count == 1) {
-+              int time, end_time, dum;
-+              int i;
-+              int cpu_logged_in[MAX_NO_CPUS] = {[0 ... MAX_NO_CPUS - 1] = (0)
-+              };
-+              if (remote_debug) {
-+                      printk("kgdb : cpu %d entry, syncing others\n",
-+                             smp_processor_id());
-+              }
-+              for (i = 0; i < MAX_NO_CPUS; i++) {
-+                      /*
-+                       * Use trylock as we may already hold the lock if
-+                       * we are holding the cpu.  Net result is all
-+                       * locked.
-+                       */
-+                      spin_trylock(&waitlocks[i]);
-+              }
-+              for (i = 0; i < MAX_NO_CPUS; i++)
-+                      cpu_logged_in[i] = 0;
-+              /*
-+               * Wait for their arrival.  We know the watch dog is active if 
-+               * in_kgdb() has ever been called, as it is always called on a 
-+               * watchdog tick.
-+               */
-+              rdtsc(dum, time);
-+              end_time = time + 2;    /* Note: we use the High order bits! */
-+              i = 1;
-+              if (num_online_cpus() > 1) {
-+                      int me_in_kgdb = in_kgdb_entry_log[smp_processor_id()];
-+                      smp_send_nmi_allbutself();
-+                      while (i < num_online_cpus() && time != end_time) {
-+                              int j;
-+                              for (j = 0; j < MAX_NO_CPUS; j++) {
-+                                      if (waiting_cpus[j].task &&
-+                                          !cpu_logged_in[j]) {
-+                                              i++;
-+                                              cpu_logged_in[j] = 1;
-+                                              if (remote_debug) {
-+                                                      printk
-+                                                          ("kgdb : cpu %d arrived at kgdb\n",
-+                                                           j);
-+                                              }
-+                                              break;
-+                                      } else if (!waiting_cpus[j].task &&
-+                                                 !cpu_online(j)) {
-+                                              waiting_cpus[j].task = NOCPU;
-+                                              cpu_logged_in[j] = 1;
-+                                              waiting_cpus[j].hold = 1;
-+                                              break;
-+                                      }
-+                                      if (!waiting_cpus[j].task &&
-+                                          in_kgdb_here_log[j]) {
-+
-+                                              int wait = 100000;
-+                                              while (wait--) ;
-+                                              if (!waiting_cpus[j].task &&
-+                                                  in_kgdb_here_log[j]) {
-+                                                      printk
-+                                                          ("kgdb : cpu %d stall"
-+                                                           " in in_kgdb\n",
-+                                                           j);
-+                                                      i++;
-+                                                      cpu_logged_in[j] = 1;
-+                                                      waiting_cpus[j].task =
-+                                                          (struct task_struct
-+                                                           *) 1;
-+                                              }
-+                                      }
-+                              }
-+
-+                              if (in_kgdb_entry_log[smp_processor_id()] >
-+                                  (me_in_kgdb + 10)) {
-+                                      break;
-+                              }
-+
-+                              rdtsc(dum, time);
-+                      }
-+                      if (i < num_online_cpus()) {
-+                              printk
-+                                  ("kgdb : time out, proceeding without sync\n");
-+#if 0
-+                              printk("kgdb : Waiting_cpus: 0 = %d, 1 = %d\n",
-+                                     waiting_cpus[0].task != 0,
-+                                     waiting_cpus[1].task != 0);
-+                              printk("kgdb : Cpu_logged in: 0 = %d, 1 = %d\n",
-+                                     cpu_logged_in[0], cpu_logged_in[1]);
-+                              printk
-+                                  ("kgdb : in_kgdb_here_log in: 0 = %d, 1 = %d\n",
-+                                   in_kgdb_here_log[0] != 0,
-+                                   in_kgdb_here_log[1] != 0);
-+#endif
-+                              entry_state = NO_SYNC;
-+                      } else {
-+#if 0
-+                              int ent =
-+                                  in_kgdb_entry_log[smp_processor_id()] -
-+                                  me_in_kgdb;
-+                              printk("kgdb : sync after %d entries\n", ent);
-+#endif
-+                      }
-+              } else {
-+                      if (remote_debug) {
-+                              printk
-+                                  ("kgdb : %d cpus, but watchdog not active\n"
-+                                   "proceeding without locking down other cpus\n",
-+                                   num_online_cpus());
-+                              entry_state = NO_NMI;
-+                      }
-+              }
-+      }
-+#endif
-+
-+      if (remote_debug) {
-+              unsigned long *lp = (unsigned long *) &linux_regs;
-+
-+              printk("handle_exception(exceptionVector=%d, "
-+                     "signo=%d, err_code=%d, linux_regs=%p)\n",
-+                     exceptionVector, signo, err_code, linux_regs);
-+              if (debug_regs) {
-+                      print_regs(&regs);
-+                      printk("Stk: %8lx %8lx %8lx %8lx"
-+                             "  %8lx %8lx %8lx %8lx\n",
-+                             lp[0], lp[1], lp[2], lp[3],
-+                             lp[4], lp[5], lp[6], lp[7]);
-+                      printk("     %8lx %8lx %8lx %8lx"
-+                             "  %8lx %8lx %8lx %8lx\n",
-+                             lp[8], lp[9], lp[10], lp[11],
-+                             lp[12], lp[13], lp[14], lp[15]);
-+                      printk("     %8lx %8lx %8lx %8lx  "
-+                             "%8lx %8lx %8lx %8lx\n",
-+                             lp[16], lp[17], lp[18], lp[19],
-+                             lp[20], lp[21], lp[22], lp[23]);
-+                      printk("     %8lx %8lx %8lx %8lx  "
-+                             "%8lx %8lx %8lx %8lx\n",
-+                             lp[24], lp[25], lp[26], lp[27],
-+                             lp[28], lp[29], lp[30], lp[31]);
-+              }
-+      }
-+
-+      /* Disable hardware debugging while we are in kgdb */
-+      /* Get the debug register status register */
-+/*                                   *INDENT-OFF*  */
-+      __asm__("movl %0,%%db7"
-+            : /* no output */
-+            :"r"(0));
-+
-+      asm volatile ("movl %%db6, %0\n"
-+                    :"=r" (hw_breakpoint_status)
-+                    :);
-+
-+/*                                   *INDENT-ON*  */
-+      switch (exceptionVector) {
-+      case 0:         /* divide error */
-+      case 1:         /* debug exception */
-+      case 2:         /* NMI */
-+      case 3:         /* breakpoint */
-+      case 4:         /* overflow */
-+      case 5:         /* bounds check */
-+      case 6:         /* invalid opcode */
-+      case 7:         /* device not available */
-+      case 8:         /* double fault (errcode) */
-+      case 10:                /* invalid TSS (errcode) */
-+      case 12:                /* stack fault (errcode) */
-+      case 16:                /* floating point error */
-+      case 17:                /* alignment check (errcode) */
-+      default:                /* any undocumented */
-+              break;
-+      case 11:                /* segment not present (errcode) */
-+      case 13:                /* general protection (errcode) */
-+      case 14:                /* page fault (special errcode) */
-+      case 19:                /* cache flush denied */
-+              if (mem_err_expected) {
-+                      /*
-+                       * This fault occured because of the
-+                       * get_char or set_char routines.  These
-+                       * two routines use either eax of edx to
-+                       * indirectly reference the location in
-+                       * memory that they are working with.
-+                       * For a page fault, when we return the
-+                       * instruction will be retried, so we
-+                       * have to make sure that these
-+                       * registers point to valid memory. 
-+                       */
-+                      mem_err = 1;    /* set mem error flag */
-+                      mem_err_expected = 0;
-+                      mem_err_cnt++;  /* helps in debugging */
-+                      /* make valid address */
-+                      regs.eax = (long) &garbage_loc;
-+                      /* make valid address */
-+                      regs.edx = (long) &garbage_loc;
-+                      if (remote_debug)
-+                              printk("Return after memory error: "
-+                                     "mem_err_cnt=%d\n", mem_err_cnt);
-+                      if (debug_regs)
-+                              print_regs(&regs);
-+                      goto exit_kgdb;
-+              }
-+              break;
-+      }
-+      if (remote_debug)
-+              printk("kgdb : entered kgdb on cpu %d\n", smp_processor_id());
-+
-+      gdb_i386vector = exceptionVector;
-+      gdb_i386errcode = err_code;
-+      kgdb_info.called_from = __builtin_return_address(0);
-+#ifdef CONFIG_SMP
-+      /*
-+       * OK, we can now communicate, lets tell gdb about the sync.
-+       * but only if we had a problem.
-+       */
-+      switch (entry_state) {
-+      case NO_NMI:
-+              to_gdb("NMI not active, other cpus not stopped\n");
-+              break;
-+      case NO_SYNC:
-+              to_gdb("Some cpus not stopped, see 'kgdb_info' for details\n");
-+      default:;
-+      }
-+
-+#endif
-+/*
-+ * Set up the gdb function call area.
-+ */
-+      trap_cpu = smp_processor_id();
-+      OLD_esp = NEW_esp = (int) (&linux_regs->esp);
-+
-+      IF_SMP(once_again:)
-+          /* reply to host that an exception has occurred */
-+          remcomOutBuffer[0] = 'S';
-+      remcomOutBuffer[1] = hexchars[signo >> 4];
-+      remcomOutBuffer[2] = hexchars[signo % 16];
-+      remcomOutBuffer[3] = 0;
-+
-+      putpacket(remcomOutBuffer);
-+
-+      while (1 == 1) {
-+              error = 0;
-+              remcomOutBuffer[0] = 0;
-+              getpacket(remcomInBuffer);
-+              switch (remcomInBuffer[0]) {
-+              case '?':
-+                      remcomOutBuffer[0] = 'S';
-+                      remcomOutBuffer[1] = hexchars[signo >> 4];
-+                      remcomOutBuffer[2] = hexchars[signo % 16];
-+                      remcomOutBuffer[3] = 0;
-+                      break;
-+              case 'd':
-+                      remote_debug = !(remote_debug); /* toggle debug flag */
-+                      printk("Remote debug %s\n",
-+                             remote_debug ? "on" : "off");
-+                      break;
-+              case 'g':       /* return the value of the CPU registers */
-+                      get_gdb_regs(usethread, &regs, gdb_regs);
-+                      mem2hex((char *) gdb_regs,
-+                              remcomOutBuffer, NUMREGBYTES, 0);
-+                      break;
-+              case 'G':       /* set the value of the CPU registers - return OK */
-+                      hex2mem(&remcomInBuffer[1],
-+                              (char *) gdb_regs, NUMREGBYTES, 0);
-+                      if (!usethread || usethread == current) {
-+                              gdb_regs_to_regs(gdb_regs, &regs);
-+                              strcpy(remcomOutBuffer, "OK");
-+                      } else {
-+                              strcpy(remcomOutBuffer, "E00");
-+                      }
-+                      break;
-+
-+              case 'P':{      /* set the value of a single CPU register - 
-+                                 return OK */
-+                              /*
-+                               * For some reason, gdb wants to talk about psudo
-+                               * registers (greater than 15).  These may have
-+                               * meaning for ptrace, but for us it is safe to
-+                               * ignor them.  We do this by dumping them into
-+                               * _GS which we also ignor, but do have memory for.
-+                               */
-+                              int regno;
-+
-+                              ptr = &remcomInBuffer[1];
-+                              regs_to_gdb_regs(gdb_regs, &regs);
-+                              if ((!usethread || usethread == current) &&
-+                                  hexToInt(&ptr, &regno) &&
-+                                  *ptr++ == '=' && (regno >= 0)) {
-+                                      regno =
-+                                          (regno >= NUMREGS ? _GS : regno);
-+                                      hex2mem(ptr, (char *) &gdb_regs[regno],
-+                                              4, 0);
-+                                      gdb_regs_to_regs(gdb_regs, &regs);
-+                                      strcpy(remcomOutBuffer, "OK");
-+                                      break;
-+                              }
-+                              strcpy(remcomOutBuffer, "E01");
-+                              break;
-+                      }
-+
-+                      /* mAA..AA,LLLL  Read LLLL bytes at address AA..AA */
-+              case 'm':
-+                      /* TRY TO READ %x,%x.  IF SUCCEED, SET PTR = 0 */
-+                      ptr = &remcomInBuffer[1];
-+                      if (hexToInt(&ptr, &addr) &&
-+                          (*(ptr++) == ',') && (hexToInt(&ptr, &length))) {
-+                              ptr = 0;
-+                              /*
-+                               * hex doubles the byte count
-+                               */
-+                              if (length > (BUFMAX / 2))
-+                                      length = BUFMAX / 2;
-+                              mem2hex((char *) addr,
-+                                      remcomOutBuffer, length, 1);
-+                              if (mem_err) {
-+                                      strcpy(remcomOutBuffer, "E03");
-+                                      debug_error("memory fault\n", NULL);
-+                              }
-+                      }
-+
-+                      if (ptr) {
-+                              strcpy(remcomOutBuffer, "E01");
-+                              debug_error
-+                                  ("malformed read memory command: %s\n",
-+                                   remcomInBuffer);
-+                      }
-+                      break;
-+
-+                      /* MAA..AA,LLLL: 
-+                         Write LLLL bytes at address AA.AA return OK */
-+              case 'M':
-+                      /* TRY TO READ '%x,%x:'.  IF SUCCEED, SET PTR = 0 */
-+                      ptr = &remcomInBuffer[1];
-+                      if (hexToInt(&ptr, &addr) &&
-+                          (*(ptr++) == ',') &&
-+                          (hexToInt(&ptr, &length)) && (*(ptr++) == ':')) {
-+                              hex2mem(ptr, (char *) addr, length, 1);
-+
-+                              if (mem_err) {
-+                                      strcpy(remcomOutBuffer, "E03");
-+                                      debug_error("memory fault\n", NULL);
-+                              } else {
-+                                      strcpy(remcomOutBuffer, "OK");
-+                              }
-+
-+                              ptr = 0;
-+                      }
-+                      if (ptr) {
-+                              strcpy(remcomOutBuffer, "E02");
-+                              debug_error
-+                                  ("malformed write memory command: %s\n",
-+                                   remcomInBuffer);
-+                      }
-+                      break;
-+
-+                      /* cAA..AA  Continue at address AA..AA(optional) */
-+                      /* sAA..AA  Step one instruction from AA..AA(optional) */
-+                      /* D        detach, reply OK and then continue */
-+              case 'c':
-+              case 's':
-+              case 'D':
-+
-+                      /* try to read optional parameter, 
-+                         pc unchanged if no parm */
-+                      ptr = &remcomInBuffer[1];
-+                      if (hexToInt(&ptr, &addr)) {
-+                              if (remote_debug)
-+                                      printk("Changing EIP to 0x%x\n", addr);
-+
-+                              regs.eip = addr;
-+                      }
-+
-+                      newPC = regs.eip;
-+
-+                      /* clear the trace bit */
-+                      regs.eflags &= 0xfffffeff;
-+
-+                      /* set the trace bit if we're stepping */
-+                      if (remcomInBuffer[0] == 's')
-+                              regs.eflags |= 0x100;
-+
-+                      /* detach is a friendly version of continue. Note that
-+                         debugging is still enabled (e.g hit control C)
-+                         until the process that issued an ioctl TIOCGDB
-+                         terminates
-+                       */
-+                      if (remcomInBuffer[0] == 'D') {
-+                              strcpy(remcomOutBuffer, "OK");
-+                              putpacket(remcomOutBuffer);
-+                      }
-+
-+                      if (remote_debug) {
-+                              printk("Resuming execution\n");
-+                              print_regs(&regs);
-+                      }
-+                      asm volatile ("movl %%db6, %0\n":"=r" (dr6)
-+                                    :);
-+                      if (!(dr6 & 0x4000)) {
-+                              for (breakno = 0; breakno < 4; ++breakno) {
-+                                      if (dr6 & (1 << breakno) &&
-+                                          (breakinfo[breakno].type == 0)) {
-+                                              /* Set restore flag */
-+                                              regs.eflags |= 0x10000;
-+                                              break;
-+                                      }
-+                              }
-+                      }
-+                      correct_hw_break();
-+                      asm volatile ("movl %0, %%db6\n"::"r" (0));
-+                      goto exit_kgdb;
-+
-+                      /* kill the program */
-+              case 'k':       /* do nothing */
-+                      break;
-+
-+                      /* query */
-+              case 'q':
-+                      switch (remcomInBuffer[1]) {
-+                      case 'L':
-+                              /* List threads */
-+                              thread_list = 2;
-+                              thread_list_start = (usethread ? : current);
-+                              unpack_byte(remcomInBuffer + 3, &maxthreads);
-+                              unpack_threadid(remcomInBuffer + 5, &thref);
-+                              do {
-+                                      int buf_thread_limit =
-+                                          (BUFMAX - 22) / BUF_THREAD_ID_SIZE;
-+                                      if (maxthreads > buf_thread_limit) {
-+                                              maxthreads = buf_thread_limit;
-+                                      }
-+                              } while (0);
-+                              remcomOutBuffer[0] = 'q';
-+                              remcomOutBuffer[1] = 'M';
-+                              remcomOutBuffer[4] = '0';
-+                              pack_threadid(remcomOutBuffer + 5, &thref);
-+
-+                              threadid = threadref_to_int(&thref);
-+                              for (nothreads = 0;
-+                                   nothreads < maxthreads &&
-+                                   threadid < PID_MAX + MAX_NO_CPUS;
-+                                   threadid++) {
-+                                      thread = getthread(threadid);
-+                                      if (thread) {
-+                                              int_to_threadref(&thref,
-+                                                               threadid);
-+                                              pack_threadid(remcomOutBuffer +
-+                                                            21 +
-+                                                            nothreads * 16,
-+                                                            &thref);
-+                                              nothreads++;
-+                                              if (thread_min > threadid)
-+                                                      thread_min = threadid;
-+                                      }
-+                              }
-+
-+                              if (threadid == PID_MAX + MAX_NO_CPUS) {
-+                                      remcomOutBuffer[4] = '1';
-+                              }
-+                              pack_hex_byte(remcomOutBuffer + 2, nothreads);
-+                              remcomOutBuffer[21 + nothreads * 16] = '\0';
-+                              break;
-+
-+                      case 'C':
-+                              /* Current thread id */
-+                              remcomOutBuffer[0] = 'Q';
-+                              remcomOutBuffer[1] = 'C';
-+                              threadid = current->pid;
-+                              if (!threadid) {
-+                                      /*
-+                                       * idle thread
-+                                       */
-+                                      for (threadid = PID_MAX;
-+                                           threadid < PID_MAX + MAX_NO_CPUS;
-+                                           threadid++) {
-+                                              if (current ==
-+                                                  idle_task(threadid -
-+                                                            PID_MAX))
-+                                                      break;
-+                                      }
-+                              }
-+                              int_to_threadref(&thref, threadid);
-+                              pack_threadid(remcomOutBuffer + 2, &thref);
-+                              remcomOutBuffer[18] = '\0';
-+                              break;
-+
-+                      case 'E':
-+                              /* Print exception info */
-+                              printexceptioninfo(exceptionVector,
-+                                                 err_code, remcomOutBuffer);
-+                              break;
-+                      }
-+                      break;
-+
-+                      /* task related */
-+              case 'H':
-+                      switch (remcomInBuffer[1]) {
-+                      case 'g':
-+                              ptr = &remcomInBuffer[2];
-+                              hexToInt(&ptr, &threadid);
-+                              thread = getthread(threadid);
-+                              if (!thread) {
-+                                      remcomOutBuffer[0] = 'E';
-+                                      remcomOutBuffer[1] = '\0';
-+                                      break;
-+                              }
-+                              /*
-+                               * Just in case I forget what this is all about,
-+                               * the "thread info" command to gdb causes it
-+                               * to ask for a thread list.  It then switches
-+                               * to each thread and asks for the registers.
-+                               * For this (and only this) usage, we want to
-+                               * fudge the registers of tasks not on the run
-+                               * list (i.e. waiting) to show the routine that
-+                               * called schedule. Also, gdb, is a minimalist
-+                               * in that if the current thread is the last
-+                               * it will not re-read the info when done.
-+                               * This means that in this case we must show
-+                               * the real registers. So here is how we do it:
-+                               * Each entry we keep track of the min
-+                               * thread in the list (the last that gdb will)
-+                               * get info for.  We also keep track of the
-+                               * starting thread.
-+                               * "thread_list" is cleared when switching back
-+                               * to the min thread if it is was current, or
-+                               * if it was not current, thread_list is set 
-+                               * to 1.  When the switch to current comes,
-+                               * if thread_list is 1, clear it, else do 
-+                               * nothing.
-+                               */
-+                              usethread = thread;
-+                              if ((thread_list == 1) &&
-+                                  (thread == thread_list_start)) {
-+                                      thread_list = 0;
-+                              }
-+                              if (thread_list && (threadid == thread_min)) {
-+                                      if (thread == thread_list_start) {
-+                                              thread_list = 0;
-+                                      } else {
-+                                              thread_list = 1;
-+                                      }
-+                              }
-+                              /* follow through */
-+                      case 'c':
-+                              remcomOutBuffer[0] = 'O';
-+                              remcomOutBuffer[1] = 'K';
-+                              remcomOutBuffer[2] = '\0';
-+                              break;
-+                      }
-+                      break;
-+
-+                      /* Query thread status */
-+              case 'T':
-+                      ptr = &remcomInBuffer[1];
-+                      hexToInt(&ptr, &threadid);
-+                      thread = getthread(threadid);
-+                      if (thread) {
-+                              remcomOutBuffer[0] = 'O';
-+                              remcomOutBuffer[1] = 'K';
-+                              remcomOutBuffer[2] = '\0';
-+                              if (thread_min > threadid)
-+                                      thread_min = threadid;
-+                      } else {
-+                              remcomOutBuffer[0] = 'E';
-+                              remcomOutBuffer[1] = '\0';
-+                      }
-+                      break;
-+
-+              case 'Y':
-+                      ptr = &remcomInBuffer[1];
-+                      hexToInt(&ptr, &breakno);
-+                      ptr++;
-+                      hexToInt(&ptr, &breaktype);
-+                      ptr++;
-+                      hexToInt(&ptr, &length);
-+                      ptr++;
-+                      hexToInt(&ptr, &addr);
-+                      if (set_hw_break(breakno & 0x3,
-+                                       breaktype & 0x3,
-+                                       length & 0x3, addr) == 0) {
-+                              strcpy(remcomOutBuffer, "OK");
-+                      } else {
-+                              strcpy(remcomOutBuffer, "ERROR");
-+                      }
-+                      break;
-+
-+                      /* Remove hardware breakpoint */
-+              case 'y':
-+                      ptr = &remcomInBuffer[1];
-+                      hexToInt(&ptr, &breakno);
-+                      if (remove_hw_break(breakno & 0x3) == 0) {
-+                              strcpy(remcomOutBuffer, "OK");
-+                      } else {
-+                              strcpy(remcomOutBuffer, "ERROR");
-+                      }
-+                      break;
-+
-+              case 'r':       /* reboot */
-+                      strcpy(remcomOutBuffer, "OK");
-+                      putpacket(remcomOutBuffer);
-+                      /*to_gdb("Rebooting\n"); */
-+                      /* triplefault   no return from here */
-+                      {
-+                              static long no_idt[2];
-+                              __asm__ __volatile__("lidt %0"::"m"(no_idt));
-+                              BREAKPOINT;
-+                      }
-+
-+              }               /* switch */
-+
-+              /* reply to the request */
-+              putpacket(remcomOutBuffer);
-+      }                       /* while(1==1) */
-+      /*
-+       *  reached by goto only.
-+       */
-+      exit_kgdb:
-+      /*
-+       * Here is where we set up to trap a gdb function call.  NEW_esp
-+       * will be changed if we are trying to do this.  We handle both
-+       * adding and subtracting, thus allowing gdb to put grung on 
-+       * the stack which it removes later.
-+       */
-+      if (NEW_esp != OLD_esp) {
-+              int *ptr = END_OF_LOOKASIDE;
-+              if (NEW_esp < OLD_esp)
-+                      ptr -= (OLD_esp - NEW_esp) / sizeof (int);
-+              *--ptr = linux_regs->eflags;
-+              *--ptr = linux_regs->xcs;
-+              *--ptr = linux_regs->eip;
-+              *--ptr = linux_regs->ecx;
-+              *--ptr = linux_regs->ebx;
-+              *--ptr = linux_regs->eax;
-+              linux_regs->ecx = NEW_esp - (sizeof (int) * 6);
-+              linux_regs->ebx = (unsigned int) END_OF_LOOKASIDE;
-+              if (NEW_esp < OLD_esp) {
-+                      linux_regs->eip = (unsigned int) fn_call_stub;
-+              } else {
-+                      linux_regs->eip = (unsigned int) fn_rtn_stub;
-+                      linux_regs->eax = NEW_esp;
-+              }
-+              linux_regs->eflags &= ~(IF_BIT | TF_BIT);
-+      }
-+#ifdef CONFIG_SMP
-+      /*
-+       * Release gdb wait locks 
-+       * Sanity check time.  Must have at least one cpu to run.  Also single
-+       * step must not be done if the current cpu is on hold.
-+       */
-+      if (spinlock_count == 1) {
-+              int ss_hold = (regs.eflags & 0x100) && kgdb_info.hold_on_sstep;
-+              int cpu_avail = 0;
-+              int i;
-+
-+              for (i = 0; i < MAX_NO_CPUS; i++) {
-+                      if (!cpu_online(i))
-+                              break;
-+                      if (!hold_cpu(i)) {
-+                              cpu_avail = 1;
-+                      }
-+              }
-+              /*
-+               * Early in the bring up there will be NO cpus on line...
-+               */
-+              if (!cpu_avail && !cpus_empty(cpu_online_map)) {
-+                      to_gdb("No cpus unblocked, see 'kgdb_info.hold_cpu'\n");
-+                      goto once_again;
-+              }
-+              if (hold_cpu(smp_processor_id()) && (regs.eflags & 0x100)) {
-+                      to_gdb
-+                          ("Current cpu must be unblocked to single step\n");
-+                      goto once_again;
-+              }
-+              if (!(ss_hold)) {
-+                      int i;
-+                      for (i = 0; i < MAX_NO_CPUS; i++) {
-+                              if (!hold_cpu(i)) {
-+                                      spin_unlock(&waitlocks[i]);
-+                              }
-+                      }
-+              } else {
-+                      spin_unlock(&waitlocks[smp_processor_id()]);
-+              }
-+              /* Release kgdb spinlock */
-+              KGDB_SPIN_UNLOCK(&kgdb_spinlock);
-+              /*
-+               * If this cpu is on hold, this is where we
-+               * do it.  Note, the NMI will pull us out of here,
-+               * but will return as the above lock is not held.
-+               * We will stay here till another cpu releases the lock for us.
-+               */
-+              spin_unlock_wait(waitlocks + smp_processor_id());
-+              kgdb_local_irq_restore(flags);
-+              return (0);
-+      }
-+#if 0
-+exit_just_unlock:
-+#endif
-+#endif
-+      /* Release kgdb spinlock */
-+      KGDB_SPIN_UNLOCK(&kgdb_spinlock);
-+      kgdb_local_irq_restore(flags);
-+      return (0);
-+}
-+
-+/* this function is used to set up exception handlers for tracing and
-+ * breakpoints. 
-+ * This function is not needed as the above line does all that is needed.
-+ * We leave it for backward compatitability...
-+ */
-+void
-+set_debug_traps(void)
-+{
-+      /*
-+       * linux_debug_hook is defined in traps.c.  We store a pointer
-+       * to our own exception handler into it.
-+
-+       * But really folks, every hear of labeled common, an old Fortran
-+       * concept.  Lots of folks can reference it and it is define if 
-+       * anyone does.  Only one can initialize it at link time.  We do 
-+       * this with the hook.  See the statement above.  No need for any
-+       * executable code and it is ready as soon as the kernel is
-+       * loaded.  Very desirable in kernel debugging.
-+
-+       linux_debug_hook = handle_exception ;
-+       */
-+
-+      /* In case GDB is started before us, ack any packets (presumably
-+         "$?#xx") sitting there. 
-+         putDebugChar ('+');
-+
-+         initialized = 1;
-+       */
-+}
-+
-+/* This function will generate a breakpoint exception.        It is used at the
-+   beginning of a program to sync up with a debugger and can be used
-+   otherwise as a quick means to stop program execution and "break" into
-+   the debugger. */
-+/* But really, just use the BREAKPOINT macro.  We will handle the int stuff
-+ */
-+
-+#ifdef later
-+/*
-+ * possibly we should not go thru the traps.c code at all?  Someday.
-+ */
-+void
-+do_kgdb_int3(struct pt_regs *regs, long error_code)
-+{
-+      kgdb_handle_exception(3, 5, error_code, regs);
-+      return;
-+}
-+#endif
-+#undef regs
-+#ifdef CONFIG_TRAP_BAD_SYSCALL_EXITS
-+asmlinkage void
-+bad_sys_call_exit(int stuff)
-+{
-+      struct pt_regs *regs = (struct pt_regs *) &stuff;
-+      printk("Sys call %d return with %x preempt_count\n",
-+             (int) regs->orig_eax, preempt_count());
-+}
-+#endif
-+#ifdef CONFIG_STACK_OVERFLOW_TEST
-+#include <asm/kgdb.h>
-+asmlinkage void
-+stack_overflow(void)
-+{
-+#ifdef BREAKPOINT
-+      BREAKPOINT;
-+#else
-+      printk("Kernel stack overflow, looping forever\n");
-+#endif
-+      while (1) {
-+      }
-+}
-+#endif
-+
-+#if defined(CONFIG_SMP) || defined(CONFIG_KGDB_CONSOLE)
-+char gdbconbuf[BUFMAX];
-+
-+static void
-+kgdb_gdb_message(const char *s, unsigned count)
-+{
-+      int i;
-+      int wcount;
-+      char *bufptr;
-+      /*
-+       * This takes care of NMI while spining out chars to gdb
-+       */
-+      IF_SMP(in_kgdb_console = 1);
-+      gdbconbuf[0] = 'O';
-+      bufptr = gdbconbuf + 1;
-+      while (count > 0) {
-+              if ((count << 1) > (BUFMAX - 2)) {
-+                      wcount = (BUFMAX - 2) >> 1;
-+              } else {
-+                      wcount = count;
-+              }
-+              count -= wcount;
-+              for (i = 0; i < wcount; i++) {
-+                      bufptr = pack_hex_byte(bufptr, s[i]);
-+              }
-+              *bufptr = '\0';
-+              s += wcount;
-+
-+              putpacket(gdbconbuf);
-+
-+      }
-+      IF_SMP(in_kgdb_console = 0);
-+}
-+#endif
-+#ifdef CONFIG_SMP
-+static void
-+to_gdb(const char *s)
-+{
-+      int count = 0;
-+      while (s[count] && (count++ < BUFMAX)) ;
-+      kgdb_gdb_message(s, count);
-+}
-+#endif
-+#ifdef CONFIG_KGDB_CONSOLE
-+#include <linux/console.h>
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+void
-+kgdb_console_write(struct console *co, const char *s, unsigned count)
-+{
-+
-+      if (gdb_i386vector == -1) {
-+              /*
-+               * We have not yet talked to gdb.  What to do...
-+               * lets break, on continue we can do the write.
-+               * But first tell him whats up. Uh, well no can do,
-+               * as this IS the console.  Oh well...
-+               * We do need to wait or the messages will be lost.
-+               * Other option would be to tell the above code to
-+               * ignore this breakpoint and do an auto return, 
-+               * but that might confuse gdb.  Also this happens 
-+               * early enough in boot up that we don't have the traps
-+               * set up yet, so...
-+               */
-+              breakpoint();
-+      }
-+      kgdb_gdb_message(s, count);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * Serial KGDB driver 
-+ * ------------------------------------------------------------
-+ */
-+
-+static struct console kgdbcons = {
-+      name:"kgdb",
-+      write:kgdb_console_write,
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+      device:kgdb_console_device,
-+#endif
-+      flags:CON_PRINTBUFFER | CON_ENABLED,
-+      index:-1,
-+};
-+
-+/*
-+ * The trick here is that this file gets linked before printk.o
-+ * That means we get to peer at the console info in the command
-+ * line before it does.        If we are up, we register, otherwise,
-+ * do nothing.        By returning 0, we allow printk to look also.
-+ */
-+static int kgdb_console_enabled;
-+
-+int __init
-+kgdb_console_init(char *str)
-+{
-+      if ((strncmp(str, "kgdb", 4) == 0) || (strncmp(str, "gdb", 3) == 0)) {
-+              register_console(&kgdbcons);
-+              kgdb_console_enabled = 1;
-+      }
-+      return 0;               /* let others look at the string */
-+}
-+
-+__setup("console=", kgdb_console_init);
-+
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+static kdev_t kgdb_console_device(struct console *c);
-+/* This stuff sort of works, but it knocks out telnet devices  
-+ * we are leaving it here in case we (or you) find time to figure it out
-+ * better..
-+ */
-+
-+/*
-+ * We need a real char device as well for when the console is opened for user
-+ * space activities.
-+ */
-+
-+static int
-+kgdb_consdev_open(struct inode *inode, struct file *file)
-+{
-+      return 0;
-+}
-+
-+static ssize_t
-+kgdb_consdev_write(struct file *file, const char *buf,
-+                 size_t count, loff_t * ppos)
-+{
-+      int size, ret = 0;
-+      static char kbuf[128];
-+      static DECLARE_MUTEX(sem);
-+
-+      /* We are not reentrant... */
-+      if (down_interruptible(&sem))
-+              return -ERESTARTSYS;
-+
-+      while (count > 0) {
-+              /* need to copy the data from user space */
-+              size = count;
-+              if (size > sizeof (kbuf))
-+                      size = sizeof (kbuf);
-+              if (copy_from_user(kbuf, buf, size)) {
-+                      ret = -EFAULT;
-+                      break;;
-+              }
-+              kgdb_console_write(&kgdbcons, kbuf, size);
-+              count -= size;
-+              ret += size;
-+              buf += size;
-+      }
-+
-+      up(&sem);
-+
-+      return ret;
-+}
-+
-+struct file_operations kgdb_consdev_fops = {
-+      open:kgdb_consdev_open,
-+      write:kgdb_consdev_write
-+};
-+static kdev_t
-+kgdb_console_device(struct console *c)
-+{
-+      return MKDEV(TTYAUX_MAJOR, 1);
-+}
-+
-+/*
-+ * This routine gets called from the serial stub in the i386/lib 
-+ * This is so it is done late in bring up (just before the console open).
-+ */
-+void
-+kgdb_console_finit(void)
-+{
-+      if (kgdb_console_enabled) {
-+              char *cptr = cdevname(MKDEV(TTYAUX_MAJOR, 1));
-+              char *cp = cptr;
-+              while (*cptr && *cptr != '(')
-+                      cptr++;
-+              *cptr = 0;
-+              unregister_chrdev(TTYAUX_MAJOR, cp);
-+              register_chrdev(TTYAUX_MAJOR, "kgdb", &kgdb_consdev_fops);
-+      }
-+}
-+#endif
-+#endif
-+#ifdef CONFIG_KGDB_TS
-+#include <asm/msr.h>          /* time stamp code */
-+#include <asm/hardirq.h>      /* in_interrupt */
-+#ifdef CONFIG_KGDB_TS_64
-+#define DATA_POINTS 64
-+#endif
-+#ifdef CONFIG_KGDB_TS_128
-+#define DATA_POINTS 128
-+#endif
-+#ifdef CONFIG_KGDB_TS_256
-+#define DATA_POINTS 256
-+#endif
-+#ifdef CONFIG_KGDB_TS_512
-+#define DATA_POINTS 512
-+#endif
-+#ifdef CONFIG_KGDB_TS_1024
-+#define DATA_POINTS 1024
-+#endif
-+#ifndef DATA_POINTS
-+#define DATA_POINTS 128               /* must be a power of two */
-+#endif
-+#define INDEX_MASK (DATA_POINTS - 1)
-+#if (INDEX_MASK & DATA_POINTS)
-+#error "CONFIG_KGDB_TS_COUNT must be a power of 2"
-+#endif
-+struct kgdb_and_then_struct {
-+#ifdef CONFIG_SMP
-+      int on_cpu;
-+#endif
-+      struct task_struct *task;
-+      long long at_time;
-+      int from_ln;
-+      char *in_src;
-+      void *from;
-+      int *with_shpf;
-+      int data0;
-+      int data1;
-+};
-+struct kgdb_and_then_struct2 {
-+#ifdef CONFIG_SMP
-+      int on_cpu;
-+#endif
-+      struct task_struct *task;
-+      long long at_time;
-+      int from_ln;
-+      char *in_src;
-+      void *from;
-+      int *with_shpf;
-+      struct task_struct *t1;
-+      struct task_struct *t2;
-+};
-+struct kgdb_and_then_struct kgdb_data[DATA_POINTS];
-+
-+struct kgdb_and_then_struct *kgdb_and_then = &kgdb_data[0];
-+int kgdb_and_then_count;
-+
-+void
-+kgdb_tstamp(int line, char *source, int data0, int data1)
-+{
-+      static spinlock_t ts_spin = SPIN_LOCK_UNLOCKED;
-+      int flags;
-+      kgdb_local_irq_save(flags);
-+      spin_lock(&ts_spin);
-+      rdtscll(kgdb_and_then->at_time);
-+#ifdef CONFIG_SMP
-+      kgdb_and_then->on_cpu = smp_processor_id();
-+#endif
-+      kgdb_and_then->task = current;
-+      kgdb_and_then->from_ln = line;
-+      kgdb_and_then->in_src = source;
-+      kgdb_and_then->from = __builtin_return_address(0);
-+      kgdb_and_then->with_shpf = (int *) (((flags & IF_BIT) >> 9) |
-+                                          (preempt_count() << 8));
-+      kgdb_and_then->data0 = data0;
-+      kgdb_and_then->data1 = data1;
-+      kgdb_and_then = &kgdb_data[++kgdb_and_then_count & INDEX_MASK];
-+      spin_unlock(&ts_spin);
-+      kgdb_local_irq_restore(flags);
-+#ifdef CONFIG_PREEMPT
-+
-+#endif
-+      return;
-+}
-+#endif
-+typedef int gdb_debug_hook(int exceptionVector,
-+                         int signo, int err_code, struct pt_regs *linux_regs);
-+gdb_debug_hook *linux_debug_hook = &kgdb_handle_exception;    /* histerical reasons... */
---- linux-2.6.0-test1/arch/i386/kernel/ldt.c   2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/i386/kernel/ldt.c  2003-07-19 17:04:06.000000000 -0700
-@@ -56,9 +56,11 @@ static int alloc_ldt(mm_context_t *pc, i
-       if (reload) {
- #ifdef CONFIG_SMP
-+              cpumask_t mask;
-               preempt_disable();
-               load_LDT(pc);
--              if (current->mm->cpu_vm_mask != (1 << smp_processor_id()))
-+              mask = cpumask_of_cpu(smp_processor_id());
-+              if (!cpus_equal(current->mm->cpu_vm_mask, mask))
-                       smp_call_function(flush_ldt, 0, 1, 1);
-               preempt_enable();
- #else
---- linux-2.6.0-test1/arch/i386/kernel/Makefile        2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/Makefile       2003-07-19 17:04:02.000000000 -0700
-@@ -14,6 +14,7 @@ obj-y                                += timers/
- obj-$(CONFIG_ACPI)            += acpi/
- obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o
- obj-$(CONFIG_MCA)             += mca.o
-+obj-$(CONFIG_KGDB)            += kgdb_stub.o 
- obj-$(CONFIG_X86_MSR)         += msr.o
- obj-$(CONFIG_X86_CPUID)               += cpuid.o
- obj-$(CONFIG_MICROCODE)               += microcode.o
---- linux-2.6.0-test1/arch/i386/kernel/mpparse.c       2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/i386/kernel/mpparse.c      2003-07-19 17:04:06.000000000 -0700
-@@ -71,7 +71,7 @@ unsigned int boot_cpu_logical_apicid = -
- static unsigned int __initdata num_processors;
- /* Bitmask of physically existing CPUs */
--unsigned long phys_cpu_present_map;
-+physid_mask_t phys_cpu_present_map;
- u8 bios_cpu_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
-@@ -106,6 +106,7 @@ static struct mpc_config_translation *tr
- void __init MP_processor_info (struct mpc_config_processor *m)
- {
-       int ver, apicid;
-+      physid_mask_t tmp;
-       
-       if (!(m->mpc_cpuflag & CPU_ENABLED))
-               return;
-@@ -176,7 +177,8 @@ void __init MP_processor_info (struct mp
-       }
-       ver = m->mpc_apicver;
--      phys_cpu_present_map |= apicid_to_cpu_present(apicid);
-+      tmp = apicid_to_cpu_present(apicid);
-+      physids_or(phys_cpu_present_map, phys_cpu_present_map, tmp);
-       
-       /*
-        * Validate version
---- linux-2.6.0-test1/arch/i386/kernel/msr.c   2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/i386/kernel/msr.c  2003-07-19 17:04:06.000000000 -0700
-@@ -242,7 +242,7 @@ static int msr_open(struct inode *inode,
-   int cpu = minor(file->f_dentry->d_inode->i_rdev);
-   struct cpuinfo_x86 *c = &(cpu_data)[cpu];
-   
--  if ( !(cpu_online_map & (1UL << cpu)) )
-+  if (!cpu_online(cpu))
-     return -ENXIO;            /* No such CPU */
-   if ( !cpu_has(c, X86_FEATURE_MSR) )
-     return -EIO;              /* MSR not supported */
---- linux-2.6.0-test1/arch/i386/kernel/nmi.c   2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/kernel/nmi.c  2003-07-19 17:04:02.000000000 -0700
-@@ -31,7 +31,17 @@
- #include <asm/mpspec.h>
- #include <asm/nmi.h>
-+#ifdef CONFIG_KGDB
-+#include <asm/kgdb.h>
-+#ifdef CONFIG_SMP
-+unsigned int nmi_watchdog = NMI_IO_APIC;
-+#else
-+unsigned int nmi_watchdog = NMI_LOCAL_APIC;
-+#endif
-+#else
- unsigned int nmi_watchdog = NMI_NONE;
-+#endif
-+
- static unsigned int nmi_hz = HZ;
- unsigned int nmi_perfctr_msr; /* the MSR to reset in NMI handler */
- extern void show_registers(struct pt_regs *regs);
-@@ -396,6 +406,9 @@ void touch_nmi_watchdog (void)
-       for (i = 0; i < NR_CPUS; i++)
-               alert_counter[i] = 0;
- }
-+#ifdef CONFIG_KGDB
-+int tune_watchdog = 5*HZ;
-+#endif
- void nmi_watchdog_tick (struct pt_regs * regs)
- {
-@@ -409,12 +422,24 @@ void nmi_watchdog_tick (struct pt_regs *
-       sum = irq_stat[cpu].apic_timer_irqs;
-+#ifdef CONFIG_KGDB
-+      if (! in_kgdb(regs) && last_irq_sums[cpu] == sum ) {
-+  
-+#else
-       if (last_irq_sums[cpu] == sum) {
-+#endif
-               /*
-                * Ayiee, looks like this CPU is stuck ...
-                * wait a few IRQs (5 seconds) before doing the oops ...
-                */
-               alert_counter[cpu]++;
-+#ifdef CONFIG_KGDB
-+                if (alert_counter[cpu] == tune_watchdog) {                      
-+                        kgdb_handle_exception(2, SIGPWR, 0, regs);
-+                        last_irq_sums[cpu] = sum;
-+                        alert_counter[cpu] = 0;
-+                }
-+#endif
-               if (alert_counter[cpu] == 5*nmi_hz) {
-                       spin_lock(&nmi_print_lock);
-                       /*
---- linux-2.6.0-test1/arch/i386/kernel/reboot.c        2003-06-14 12:18:06.000000000 -0700
-+++ 25/arch/i386/kernel/reboot.c       2003-07-19 17:04:06.000000000 -0700
-@@ -226,7 +226,7 @@ void machine_restart(char * __unused)
-                  if its not, default to the BSP */
-               if ((reboot_cpu == -1) ||  
-                     (reboot_cpu > (NR_CPUS -1))  || 
--                    !(phys_cpu_present_map & (1<<cpuid))) 
-+                    !cpu_isset(cpuid, phys_cpu_present_map))
-                       reboot_cpu = boot_cpu_physical_apicid;
-               reboot_smp = 0;  /* use this as a flag to only go through this once*/
---- linux-2.6.0-test1/arch/i386/kernel/setup.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/i386/kernel/setup.c        2003-07-19 17:03:49.000000000 -0700
-@@ -42,6 +42,7 @@
- #include <asm/edd.h>
- #include <asm/setup.h>
- #include <asm/arch_hooks.h>
-+#include <asm/sections.h>
- #include "setup_arch_pre.h"
- #include "mach_resources.h"
-@@ -100,7 +101,7 @@ extern void early_cpu_init(void);
- extern void dmi_scan_machine(void);
- extern void generic_apic_probe(char *);
- extern int root_mountflags;
--extern char _text, _etext, _edata, _end;
-+extern char _end[];
- unsigned long saved_videomode;
-@@ -520,7 +521,7 @@ static void __init parse_cmdline_early (
-                       acpi_disabled = 1;
-               /* "acpismp=force" turns on ACPI again */
--              else if (!memcmp(from, "acpismp=force", 14))
-+              if (c == ' ' && !memcmp(from, "acpismp=force", 13))
-                       acpi_disabled = 0;
-               /*
-@@ -676,7 +677,7 @@ static unsigned long __init setup_memory
-        * partially used pages are not usable - thus
-        * we are rounding upwards:
-        */
--      start_pfn = PFN_UP(__pa(&_end));
-+      start_pfn = PFN_UP(__pa(_end));
-       find_max_pfn();
-@@ -947,15 +948,15 @@ void __init setup_arch(char **cmdline_p)
-       if (!MOUNT_ROOT_RDONLY)
-               root_mountflags &= ~MS_RDONLY;
--      init_mm.start_code = (unsigned long) &_text;
--      init_mm.end_code = (unsigned long) &_etext;
--      init_mm.end_data = (unsigned long) &_edata;
--      init_mm.brk = (unsigned long) &_end;
--
--      code_resource.start = virt_to_phys(&_text);
--      code_resource.end = virt_to_phys(&_etext)-1;
--      data_resource.start = virt_to_phys(&_etext);
--      data_resource.end = virt_to_phys(&_edata)-1;
-+      init_mm.start_code = (unsigned long) _text;
-+      init_mm.end_code = (unsigned long) _etext;
-+      init_mm.end_data = (unsigned long) _edata;
-+      init_mm.brk = (unsigned long) _end;
-+
-+      code_resource.start = virt_to_phys(_text);
-+      code_resource.end = virt_to_phys(_etext)-1;
-+      data_resource.start = virt_to_phys(_etext);
-+      data_resource.end = virt_to_phys(_edata)-1;
-       parse_cmdline_early(cmdline_p);
-@@ -977,7 +978,7 @@ void __init setup_arch(char **cmdline_p)
-       generic_apic_probe(*cmdline_p);
- #endif        
--#ifdef CONFIG_ACPI_BOOT
-+#ifdef CONFIG_ACPI
-       /*
-        * Parse the ACPI tables for possible boot-time SMP configuration.
-        */
---- linux-2.6.0-test1/arch/i386/kernel/smpboot.c       2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/kernel/smpboot.c      2003-07-19 17:04:06.000000000 -0700
-@@ -61,12 +61,12 @@ static int __initdata smp_b_stepping;
- int smp_num_siblings = 1;
- int phys_proc_id[NR_CPUS]; /* Package ID of each logical CPU */
--/* Bitmask of currently online CPUs */
--unsigned long cpu_online_map;
-+/* bitmap of online cpus */
-+cpumask_t cpu_online_map;
--static volatile unsigned long cpu_callin_map;
--volatile unsigned long cpu_callout_map;
--static unsigned long smp_commenced_mask;
-+static cpumask_t cpu_callin_map;
-+cpumask_t cpu_callout_map;
-+static cpumask_t smp_commenced_mask;
- /* Per CPU bogomips and other parameters */
- struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
-@@ -268,7 +268,7 @@ static void __init synchronize_tsc_bp (v
-       sum = 0;
-       for (i = 0; i < NR_CPUS; i++) {
--              if (test_bit(i, &cpu_callout_map)) {
-+              if (cpu_isset(i, cpu_callout_map)) {
-                       t0 = tsc_values[i];
-                       sum += t0;
-               }
-@@ -277,7 +277,7 @@ static void __init synchronize_tsc_bp (v
-       sum = 0;
-       for (i = 0; i < NR_CPUS; i++) {
--              if (!test_bit(i, &cpu_callout_map))
-+              if (!cpu_isset(i, cpu_callout_map))
-                       continue;
-               delta = tsc_values[i] - avg;
-               if (delta < 0)
-@@ -353,7 +353,7 @@ void __init smp_callin(void)
-        */
-       phys_id = GET_APIC_ID(apic_read(APIC_ID));
-       cpuid = smp_processor_id();
--      if (test_bit(cpuid, &cpu_callin_map)) {
-+      if (cpu_isset(cpuid, cpu_callin_map)) {
-               printk("huh, phys CPU#%d, CPU#%d already present??\n",
-                                       phys_id, cpuid);
-               BUG();
-@@ -376,7 +376,7 @@ void __init smp_callin(void)
-               /*
-                * Has the boot CPU finished it's STARTUP sequence?
-                */
--              if (test_bit(cpuid, &cpu_callout_map))
-+              if (cpu_isset(cpuid, cpu_callout_map))
-                       break;
-               rep_nop();
-       }
-@@ -417,7 +417,7 @@ void __init smp_callin(void)
-       /*
-        * Allow the master to continue.
-        */
--      set_bit(cpuid, &cpu_callin_map);
-+      cpu_set(cpuid, cpu_callin_map);
-       /*
-        *      Synchronize the TSC with the BP
-@@ -442,7 +442,7 @@ int __init start_secondary(void *unused)
-        */
-       cpu_init();
-       smp_callin();
--      while (!test_bit(smp_processor_id(), &smp_commenced_mask))
-+      while (!cpu_isset(smp_processor_id(), smp_commenced_mask))
-               rep_nop();
-       setup_secondary_APIC_clock();
-       if (nmi_watchdog == NMI_IO_APIC) {
-@@ -456,7 +456,7 @@ int __init start_secondary(void *unused)
-        * the local TLBs too.
-        */
-       local_flush_tlb();
--      set_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-       wmb();
-       return cpu_idle();
- }
-@@ -499,16 +499,16 @@ static struct task_struct * __init fork_
- #ifdef CONFIG_NUMA
- /* which logical CPUs are on which nodes */
--volatile unsigned long node_2_cpu_mask[MAX_NR_NODES] = 
--                                              { [0 ... MAX_NR_NODES-1] = 0 };
-+cpumask_t node_2_cpu_mask[MAX_NR_NODES] =
-+                              { [0 ... MAX_NR_NODES-1] = CPU_MASK_NONE };
- /* which node each logical CPU is on */
--volatile int cpu_2_node[NR_CPUS] = { [0 ... NR_CPUS-1] = 0 };
-+int cpu_2_node[NR_CPUS] = { [0 ... NR_CPUS-1] = 0 };
- /* set up a mapping between cpu and node. */
- static inline void map_cpu_to_node(int cpu, int node)
- {
-       printk("Mapping cpu %d to node %d\n", cpu, node);
--      node_2_cpu_mask[node] |= (1 << cpu);
-+      cpu_set(cpu, node_2_cpu_mask[node]);
-       cpu_2_node[cpu] = node;
- }
-@@ -519,7 +519,7 @@ static inline void unmap_cpu_to_node(int
-       printk("Unmapping cpu %d from all nodes\n", cpu);
-       for (node = 0; node < MAX_NR_NODES; node ++)
--              node_2_cpu_mask[node] &= ~(1 << cpu);
-+              cpu_clear(cpu, node_2_cpu_mask[node]);
-       cpu_2_node[cpu] = -1;
- }
- #else /* !CONFIG_NUMA */
-@@ -529,7 +529,7 @@ static inline void unmap_cpu_to_node(int
- #endif /* CONFIG_NUMA */
--volatile u8 cpu_2_logical_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
-+u8 cpu_2_logical_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
- void map_cpu_to_logical_apicid(void)
- {
-@@ -770,7 +770,7 @@ wakeup_secondary_cpu(int phys_apicid, un
- }
- #endif        /* WAKE_SECONDARY_VIA_INIT */
--extern unsigned long cpu_initialized;
-+extern cpumask_t cpu_initialized;
- static int __init do_boot_cpu(int apicid)
- /*
-@@ -836,19 +836,19 @@ static int __init do_boot_cpu(int apicid
-                * allow APs to start initializing.
-                */
-               Dprintk("Before Callout %d.\n", cpu);
--              set_bit(cpu, &cpu_callout_map);
-+              cpu_set(cpu, cpu_callout_map);
-               Dprintk("After Callout %d.\n", cpu);
-               /*
-                * Wait 5s total for a response
-                */
-               for (timeout = 0; timeout < 50000; timeout++) {
--                      if (test_bit(cpu, &cpu_callin_map))
-+                      if (cpu_isset(cpu, cpu_callin_map))
-                               break;  /* It has booted */
-                       udelay(100);
-               }
--              if (test_bit(cpu, &cpu_callin_map)) {
-+              if (cpu_isset(cpu, cpu_callin_map)) {
-                       /* number CPUs logically, starting from 1 (BSP is 0) */
-                       Dprintk("OK.\n");
-                       printk("CPU%d: ", cpu);
-@@ -869,8 +869,8 @@ static int __init do_boot_cpu(int apicid
-       if (boot_error) {
-               /* Try to put things back the way they were before ... */
-               unmap_cpu_to_logical_apicid(cpu);
--              clear_bit(cpu, &cpu_callout_map); /* was set here (do_boot_cpu()) */
--              clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
-+              cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
-+              cpu_clear(cpu, cpu_initialized); /* was set by cpu_init() */
-               cpucount--;
-       }
-@@ -957,7 +957,7 @@ static void __init smp_boot_cpus(unsigne
-       if (!smp_found_config) {
-               printk(KERN_NOTICE "SMP motherboard not detected.\n");
-               smpboot_clear_io_apic_irqs();
--              phys_cpu_present_map = 1;
-+              phys_cpu_present_map = physid_mask_of_physid(0);
-               if (APIC_init_uniprocessor())
-                       printk(KERN_NOTICE "Local APIC not detected."
-                                          " Using dummy APIC emulation.\n");
-@@ -973,7 +973,7 @@ static void __init smp_boot_cpus(unsigne
-       if (!check_phys_apicid_present(boot_cpu_physical_apicid)) {
-               printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
-                               boot_cpu_physical_apicid);
--              phys_cpu_present_map |= (1 << hard_smp_processor_id());
-+              cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
-       }
-       /*
-@@ -984,7 +984,7 @@ static void __init smp_boot_cpus(unsigne
-                       boot_cpu_physical_apicid);
-               printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
-               smpboot_clear_io_apic_irqs();
--              phys_cpu_present_map = 1;
-+              phys_cpu_present_map = physid_mask_of_physid(0);
-               return;
-       }
-@@ -997,7 +997,7 @@ static void __init smp_boot_cpus(unsigne
-               smp_found_config = 0;
-               printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
-               smpboot_clear_io_apic_irqs();
--              phys_cpu_present_map = 1;
-+              phys_cpu_present_map = physid_mask_of_physid(0);
-               return;
-       }
-@@ -1017,10 +1017,10 @@ static void __init smp_boot_cpus(unsigne
-        * bits 0-3 are quad0, 4-7 are quad1, etc. A perverse twist on the 
-        * clustered apic ID.
-        */
--      Dprintk("CPU present map: %lx\n", phys_cpu_present_map);
-+      Dprintk("CPU present map: %lx\n", cpus_coerce(phys_cpu_present_map));
-       kicked = 1;
--      for (bit = 0; kicked < NR_CPUS && bit < BITS_PER_LONG; bit++) {
-+      for (bit = 0; kicked < NR_CPUS && bit < MAX_APICS; bit++) {
-               apicid = cpu_present_to_apicid(bit);
-               /*
-                * Don't even attempt to start the boot CPU!
-@@ -1055,7 +1055,7 @@ static void __init smp_boot_cpus(unsigne
-       } else {
-               unsigned long bogosum = 0;
-               for (cpu = 0; cpu < NR_CPUS; cpu++)
--                      if (cpu_callout_map & (1<<cpu))
-+                      if (cpu_isset(cpu, cpu_callout_map))
-                               bogosum += cpu_data[cpu].loops_per_jiffy;
-               printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
-                       cpucount+1,
-@@ -1087,10 +1087,11 @@ static void __init smp_boot_cpus(unsigne
-               
-               for (cpu = 0; cpu < NR_CPUS; cpu++) {
-                       int     i;
--                      if (!test_bit(cpu, &cpu_callout_map)) continue;
-+                      if (!cpu_isset(cpu, cpu_callout_map))
-+                              continue;
-                       for (i = 0; i < NR_CPUS; i++) {
--                              if (i == cpu || !test_bit(i, &cpu_callout_map))
-+                              if (i == cpu || !cpu_isset(i, cpu_callout_map))
-                                       continue;
-                               if (phys_proc_id[cpu] == phys_proc_id[i]) {
-                                       cpu_sibling_map[cpu] = i;
-@@ -1125,28 +1126,28 @@ void __init smp_prepare_cpus(unsigned in
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &cpu_callout_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_callout_map);
- }
- int __devinit __cpu_up(unsigned int cpu)
- {
-       /* This only works at boot for x86.  See "rewrite" above. */
--      if (test_bit(cpu, &smp_commenced_mask)) {
-+      if (cpu_isset(cpu, smp_commenced_mask)) {
-               local_irq_enable();
-               return -ENOSYS;
-       }
-       /* In case one didn't come up */
--      if (!test_bit(cpu, &cpu_callin_map)) {
-+      if (!cpu_isset(cpu, cpu_callin_map)) {
-               local_irq_enable();
-               return -EIO;
-       }
-       local_irq_enable();
-       /* Unleash the CPU! */
--      set_bit(cpu, &smp_commenced_mask);
--      while (!test_bit(cpu, &cpu_online_map))
-+      cpu_set(cpu, smp_commenced_mask);
-+      while (!cpu_isset(cpu, cpu_online_map))
-               mb();
-       return 0;
- }
-@@ -1154,7 +1155,8 @@ int __devinit __cpu_up(unsigned int cpu)
- void __init smp_cpus_done(unsigned int max_cpus)
- {
- #ifdef CONFIG_X86_IO_APIC
--      setup_ioapic_dest(TARGET_CPUS);
-+      cpumask_t targets = CPU_MASK_ALL;
-+      setup_ioapic_dest(targets);
- #endif
-       zap_low_mappings();
- }
---- linux-2.6.0-test1/arch/i386/kernel/smp.c   2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/kernel/smp.c  2003-07-19 17:04:06.000000000 -0700
-@@ -155,8 +155,12 @@ void send_IPI_self(int vector)
-       __send_IPI_shortcut(APIC_DEST_SELF, vector);
- }
--inline void send_IPI_mask_bitmask(int mask, int vector)
-+/*
-+ * This is only used on smaller machines.
-+ */
-+inline void send_IPI_mask_bitmask(cpumask_t cpumask, int vector)
- {
-+      unsigned long mask = cpus_coerce(cpumask);
-       unsigned long cfg;
-       unsigned long flags;
-@@ -186,10 +190,10 @@ inline void send_IPI_mask_bitmask(int ma
-       local_irq_restore(flags);
- }
--inline void send_IPI_mask_sequence(int mask, int vector)
-+inline void send_IPI_mask_sequence(cpumask_t mask, int vector)
- {
-       unsigned long cfg, flags;
--      unsigned int query_cpu, query_mask;
-+      unsigned int query_cpu;
-       /*
-        * Hack. The clustered APIC addressing mode doesn't allow us to send 
-@@ -200,8 +204,7 @@ inline void send_IPI_mask_sequence(int m
-       local_irq_save(flags);
-       for (query_cpu = 0; query_cpu < NR_CPUS; ++query_cpu) {
--              query_mask = 1 << query_cpu;
--              if (query_mask & mask) {
-+              if (cpu_isset(query_cpu, mask)) {
-               
-                       /*
-                        * Wait for idle.
-@@ -238,7 +241,7 @@ inline void send_IPI_mask_sequence(int m
-  *    Optimizations Manfred Spraul <manfred@colorfullife.com>
-  */
--static volatile unsigned long flush_cpumask;
-+static cpumask_t flush_cpumask;
- static struct mm_struct * flush_mm;
- static unsigned long flush_va;
- static spinlock_t tlbstate_lock = SPIN_LOCK_UNLOCKED;
-@@ -255,7 +258,7 @@ static inline void leave_mm (unsigned lo
- {
-       if (cpu_tlbstate[cpu].state == TLBSTATE_OK)
-               BUG();
--      clear_bit(cpu, &cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
-+      cpu_clear(cpu, cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
-       load_cr3(swapper_pg_dir);
- }
-@@ -265,7 +268,7 @@ static inline void leave_mm (unsigned lo
-  * [cpu0: the cpu that switches]
-  * 1) switch_mm() either 1a) or 1b)
-  * 1a) thread switch to a different mm
-- * 1a1) clear_bit(cpu, &old_mm->cpu_vm_mask);
-+ * 1a1) cpu_clear(cpu, old_mm->cpu_vm_mask);
-  *    Stop ipi delivery for the old mm. This is not synchronized with
-  *    the other cpus, but smp_invalidate_interrupt ignore flush ipis
-  *    for the wrong mm, and in the worst case we perform a superflous
-@@ -275,7 +278,7 @@ static inline void leave_mm (unsigned lo
-  *    was in lazy tlb mode.
-  * 1a3) update cpu_tlbstate[].active_mm
-  *    Now cpu0 accepts tlb flushes for the new mm.
-- * 1a4) set_bit(cpu, &new_mm->cpu_vm_mask);
-+ * 1a4) cpu_set(cpu, new_mm->cpu_vm_mask);
-  *    Now the other cpus will send tlb flush ipis.
-  * 1a4) change cr3.
-  * 1b) thread switch without mm change
-@@ -311,7 +314,7 @@ asmlinkage void smp_invalidate_interrupt
-       cpu = get_cpu();
--      if (!test_bit(cpu, &flush_cpumask))
-+      if (!cpu_isset(cpu, flush_cpumask))
-               goto out;
-               /* 
-                * This was a BUG() but until someone can quote me the
-@@ -332,15 +335,17 @@ asmlinkage void smp_invalidate_interrupt
-                       leave_mm(cpu);
-       }
-       ack_APIC_irq();
--      clear_bit(cpu, &flush_cpumask);
--
-+      smp_mb__before_clear_bit();
-+      cpu_clear(cpu, flush_cpumask);
-+      smp_mb__after_clear_bit();
- out:
-       put_cpu_no_resched();
- }
--static void flush_tlb_others (unsigned long cpumask, struct mm_struct *mm,
-+static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
-                                               unsigned long va)
- {
-+      cpumask_t tmp;
-       /*
-        * A couple of (to be removed) sanity checks:
-        *
-@@ -348,14 +353,12 @@ static void flush_tlb_others (unsigned l
-        * - current CPU must not be in mask
-        * - mask must exist :)
-        */
--      if (!cpumask)
--              BUG();
--      if ((cpumask & cpu_online_map) != cpumask)
--              BUG();
--      if (cpumask & (1 << smp_processor_id()))
--              BUG();
--      if (!mm)
--              BUG();
-+      BUG_ON(cpus_empty(cpumask));
-+
-+      cpus_and(tmp, cpumask, cpu_online_map);
-+      BUG_ON(!cpus_equal(cpumask, tmp));
-+      BUG_ON(cpu_isset(smp_processor_id(), cpumask));
-+      BUG_ON(!mm);
-       /*
-        * i'm not happy about this global shared spinlock in the
-@@ -367,15 +370,26 @@ static void flush_tlb_others (unsigned l
-       
-       flush_mm = mm;
-       flush_va = va;
-+#if NR_CPUS <= BITS_PER_LONG
-       atomic_set_mask(cpumask, &flush_cpumask);
-+#else
-+      {
-+              int k;
-+              unsigned long *flush_mask = (unsigned long *)&flush_cpumask;
-+              unsigned long *cpu_mask = (unsigned long *)&cpumask;
-+              for (k = 0; k < BITS_TO_LONGS(NR_CPUS); ++k)
-+                      atomic_set_mask(cpu_mask[k], &flush_mask[k]);
-+      }
-+#endif
-       /*
-        * We have to send the IPI only to
-        * CPUs affected.
-        */
-       send_IPI_mask(cpumask, INVALIDATE_TLB_VECTOR);
--      while (flush_cpumask)
--              /* nothing. lockup detection does not belong here */;
-+      while (!cpus_empty(flush_cpumask))
-+              /* nothing. lockup detection does not belong here */
-+              mb();
-       flush_mm = NULL;
-       flush_va = 0;
-@@ -385,23 +399,25 @@ static void flush_tlb_others (unsigned l
- void flush_tlb_current_task(void)
- {
-       struct mm_struct *mm = current->mm;
--      unsigned long cpu_mask;
-+      cpumask_t cpu_mask;
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+      cpu_mask = mm->cpu_vm_mask;
-+      cpu_clear(smp_processor_id(), cpu_mask);
-       local_flush_tlb();
--      if (cpu_mask)
-+      if (!cpus_empty(cpu_mask))
-               flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-       preempt_enable();
- }
- void flush_tlb_mm (struct mm_struct * mm)
- {
--      unsigned long cpu_mask;
-+      cpumask_t cpu_mask;
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+      cpu_mask = mm->cpu_vm_mask;
-+      cpu_clear(smp_processor_id(), cpu_mask);
-       if (current->active_mm == mm) {
-               if (current->mm)
-@@ -409,7 +425,7 @@ void flush_tlb_mm (struct mm_struct * mm
-               else
-                       leave_mm(smp_processor_id());
-       }
--      if (cpu_mask)
-+      if (!cpus_empty(cpu_mask))
-               flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-       preempt_enable();
-@@ -418,10 +434,11 @@ void flush_tlb_mm (struct mm_struct * mm
- void flush_tlb_page(struct vm_area_struct * vma, unsigned long va)
- {
-       struct mm_struct *mm = vma->vm_mm;
--      unsigned long cpu_mask;
-+      cpumask_t cpu_mask;
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+      cpu_mask = mm->cpu_vm_mask;
-+      cpu_clear(smp_processor_id(), cpu_mask);
-       if (current->active_mm == mm) {
-               if(current->mm)
-@@ -430,7 +447,7 @@ void flush_tlb_page(struct vm_area_struc
-                       leave_mm(smp_processor_id());
-       }
--      if (cpu_mask)
-+      if (!cpus_empty(cpu_mask))
-               flush_tlb_others(cpu_mask, mm, va);
-       preempt_enable();
-@@ -457,9 +474,19 @@ void flush_tlb_all(void)
-  */
- void smp_send_reschedule(int cpu)
- {
--      send_IPI_mask(1 << cpu, RESCHEDULE_VECTOR);
-+      send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR);
- }
--
-+#ifdef CONFIG_KGDB
-+/*
-+ * By using the NMI code instead of a vector we just sneak thru the 
-+ * word generator coming out with just what we want.  AND it does
-+ * not matter if clustered_apic_mode is set or not.
-+ */
-+void smp_send_nmi_allbutself(void)
-+{
-+      send_IPI_allbutself(APIC_DM_NMI);
-+}
-+#endif
- /*
-  * Structure and data for smp_call_function(). This is designed to minimise
-  * static memory requirements. It also looks cleaner.
-@@ -533,7 +560,7 @@ static void stop_this_cpu (void * dummy)
-       /*
-        * Remove this CPU:
-        */
--      clear_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_clear(smp_processor_id(), cpu_online_map);
-       local_irq_disable();
-       disable_local_APIC();
-       if (cpu_data[smp_processor_id()].hlt_works_ok)
---- linux-2.6.0-test1/arch/i386/kernel/traps.c 2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/i386/kernel/traps.c        2003-07-19 17:06:40.000000000 -0700
-@@ -90,6 +90,42 @@ asmlinkage void alignment_check(void);
- asmlinkage void spurious_interrupt_bug(void);
- asmlinkage void machine_check(void);
-+#ifdef CONFIG_KGDB
-+extern void sysenter_entry(void);
-+#include <asm/kgdb.h>
-+#include <linux/init.h>
-+extern void int3(void);
-+extern void debug(void);
-+void set_intr_gate(unsigned int n, void *addr);
-+static void set_intr_usr_gate(unsigned int n, void *addr);
-+/*
-+ * Should be able to call this breakpoint() very early in
-+ * bring up.  Just hard code the call where needed.
-+ * The breakpoint() code is here because set_?_gate() functions
-+ * are local (static) to trap.c.  They need be done only once,
-+ * but it does not hurt to do them over.
-+ */
-+void breakpoint(void)
-+{
-+        set_intr_usr_gate(3,&int3); /* disable ints on trap */
-+      set_intr_gate(1,&debug);
-+      set_intr_gate(14,&page_fault);
-+       
-+        BREAKPOINT;
-+}
-+#define       CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,after)            \
-+    {                                                                 \
-+      if (!user_mode(regs)  ) \
-+      {                                                               \
-+              kgdb_handle_exception(trapnr, signr, error_code, regs); \
-+              after;                                                  \
-+      } else if ((trapnr == 3) && (regs->eflags &0x200)) local_irq_enable(); \
-+    }
-+#else
-+#define       CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,after)    
-+#endif
-+
-+
- static int kstack_depth_to_print = 24;
- void show_trace(struct task_struct *task, unsigned long * stack)
-@@ -172,8 +208,9 @@ void show_registers(struct pt_regs *regs
-               ss = regs->xss & 0xffff;
-       }
-       print_modules();
--      printk("CPU:    %d\nEIP:    %04x:[<%08lx>]    %s\nEFLAGS: %08lx\n",
--              smp_processor_id(), 0xffff & regs->xcs, regs->eip, print_tainted(), regs->eflags);
-+      printk("CPU:    %d\nEIP:    %04x:[<%08lx>]    %s VLI\nEFLAGS: %08lx\n",
-+              smp_processor_id(), 0xffff & regs->xcs,
-+              regs->eip, print_tainted(), regs->eflags);
-       print_symbol("EIP is at %s\n", regs->eip);
-       printk("eax: %08lx   ebx: %08lx   ecx: %08lx   edx: %08lx\n",
-@@ -189,23 +226,25 @@ void show_registers(struct pt_regs *regs
-        * time of the fault..
-        */
-       if (in_kernel) {
-+              u8 *eip;
-               printk("\nStack: ");
-               show_stack(NULL, (unsigned long*)esp);
-               printk("Code: ");
--              if(regs->eip < PAGE_OFFSET)
--                      goto bad;
--              for(i=0;i<20;i++)
--              {
-+              eip = (u8 *)regs->eip - 43;
-+              for (i = 0; i < 64; i++, eip++) {
-                       unsigned char c;
--                      if(__get_user(c, &((unsigned char*)regs->eip)[i])) {
--bad:
-+
-+                      if (eip < (u8 *)PAGE_OFFSET || __get_user(c, eip)) {
-                               printk(" Bad EIP value.");
-                               break;
-                       }
--                      printk("%02x ", c);
-+                      if (eip == (u8 *)regs->eip)
-+                              printk("<%02x> ", c);
-+                      else
-+                              printk("%02x ", c);
-               }
-       }
-       printk("\n");
-@@ -252,12 +291,36 @@ spinlock_t die_lock = SPIN_LOCK_UNLOCKED
- void die(const char * str, struct pt_regs * regs, long err)
- {
-       static int die_counter;
-+      int nl = 0;
-       console_verbose();
-       spin_lock_irq(&die_lock);
-       bust_spinlocks(1);
-       handle_BUG(regs);
-       printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
-+#ifdef CONFIG_PREEMPT
-+      printk("PREEMPT ");
-+      nl = 1;
-+#endif
-+#ifdef CONFIG_SMP
-+      printk("SMP ");
-+      nl = 1;
-+#endif
-+#ifdef CONFIG_DEBUG_PAGEALLOC
-+      printk("DEBUG_PAGEALLOC");
-+      nl = 1;
-+#endif
-+      if (nl)
-+              printk("\n");
-+#ifdef CONFIG_KGDB
-+      /* This is about the only place we want to go to kgdb even if in 
-+       * user mode.  But we must go in via a trap so within kgdb we will
-+       * always be in kernel mode.
-+       */
-+      if (user_mode(regs))
-+              BREAKPOINT;
-+#endif
-+      CHK_REMOTE_DEBUG(0,SIGTRAP,err,regs,)
-       show_registers(regs);
-       bust_spinlocks(0);
-       spin_unlock_irq(&die_lock);
-@@ -327,6 +390,7 @@ static inline void do_trap(int trapnr, i
- #define DO_ERROR(trapnr, signr, str, name) \
- asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
- { \
-+      CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,)\
-       do_trap(trapnr, signr, str, 0, regs, error_code, NULL); \
- }
-@@ -344,7 +408,9 @@ asmlinkage void do_##name(struct pt_regs
- #define DO_VM86_ERROR(trapnr, signr, str, name) \
- asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
- { \
-+      CHK_REMOTE_DEBUG(trapnr, signr, error_code,regs, return)\
-       do_trap(trapnr, signr, str, 1, regs, error_code, NULL); \
-+      return; \
- }
- #define DO_VM86_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
-@@ -387,8 +453,10 @@ gp_in_vm86:
-       return;
- gp_in_kernel:
--      if (!fixup_exception(regs))
-+      if (!fixup_exception(regs)){
-+              CHK_REMOTE_DEBUG(13,SIGSEGV,error_code,regs,)
-               die("general protection fault", regs, error_code);
-+      }
- }
- static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
-@@ -550,8 +618,18 @@ asmlinkage void do_debug(struct pt_regs 
-                * allowing programs to debug themselves without the ptrace()
-                * interface.
-                */
--              if ((regs->xcs & 3) == 0)
-+#ifdef CONFIG_KGDB
-+              /*
-+               * I think this is the only "real" case of a TF in the kernel
-+               * that really belongs to user space.  Others are
-+               * "Ours all ours!"
-+               */
-+              if (((regs->xcs & 3) == 0) && ((void *)regs->eip == sysenter_entry))
-+                      goto clear_TF_reenable;
-+#else
-+              if ((regs->xcs & 3) == 0)       
-                       goto clear_TF_reenable;
-+#endif
-               if ((tsk->ptrace & (PT_DTRACE|PT_PTRACED)) == PT_DTRACE)
-                       goto clear_TF;
-       }
-@@ -563,6 +641,17 @@ asmlinkage void do_debug(struct pt_regs 
-       info.si_errno = 0;
-       info.si_code = TRAP_BRKPT;
-       
-+#ifdef CONFIG_KGDB
-+        /*
-+       * If this is a kernel mode trap, we need to reset db7 to allow us
-+       * to continue sanely ALSO skip the signal delivery 
-+         */
-+      if ((regs->xcs & 3) == 0)
-+              goto clear_dr7;
-+
-+        /* if not kernel, allow ints but only if they were on */ 
-+       if ( regs->eflags & 0x200) local_irq_enable(); 
-+#endif
-       /* If this is a kernel mode trap, save the user PC on entry to 
-        * the kernel, that's what the debugger can make sense of.
-        */
-@@ -577,6 +666,7 @@ clear_dr7:
-       __asm__("movl %0,%%db7"
-               : /* no output */
-               : "r" (0));
-+      CHK_REMOTE_DEBUG(1,SIGTRAP,error_code,regs,)
-       return;
- debug_vm86:
-@@ -823,6 +913,12 @@ static void __init set_call_gate(void *a
- {
-       _set_gate(a,12,3,addr,__KERNEL_CS);
- }
-+#ifdef CONFIG_KGDB
-+void set_intr_usr_gate(unsigned int n, void *addr)
-+{
-+      _set_gate(idt_table+n,14,3,addr,__KERNEL_CS);
-+}
-+#endif
- static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
- {
-@@ -849,7 +945,11 @@ void __init trap_init(void)
-       set_trap_gate(0,&divide_error);
-       set_intr_gate(1,&debug);
-       set_intr_gate(2,&nmi);
-+#ifndef CONFIG_KGDB
-       set_system_gate(3,&int3);       /* int3-5 can be called from all */
-+#else
-+      set_intr_usr_gate(3,&int3);     /* int3-5 can be called from all */
-+#endif
-       set_system_gate(4,&overflow);
-       set_system_gate(5,&bounds);
-       set_trap_gate(6,&invalid_op);
---- linux-2.6.0-test1/arch/i386/kernel/vm86.c  2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/i386/kernel/vm86.c 2003-07-19 17:07:16.000000000 -0700
-@@ -144,12 +144,14 @@ static void mark_screen_rdonly(struct ta
-               pgd_clear(pgd);
-               goto out;
-       }
--      pmd = pmd_offset(pgd, 0xA0000);
--      if (pmd_none(*pmd))
-+      pmd = pmd_offset_map(pgd, 0xA0000);
-+      if (pmd_none(*pmd)) {
-+              pmd_unmap(pmd);
-               goto out;
--      if (pmd_bad(*pmd)) {
-+      } else if (pmd_bad(*pmd)) {
-               pmd_ERROR(*pmd);
-               pmd_clear(pmd);
-+              pmd_unmap(pmd);
-               goto out;
-       }
-       pte = mapped = pte_offset_map(pmd, 0xA0000);
-@@ -159,6 +161,7 @@ static void mark_screen_rdonly(struct ta
-               pte++;
-       }
-       pte_unmap(mapped);
-+      pmd_unmap(pmd);
- out:
-       spin_unlock(&tsk->mm->page_table_lock);
-       preempt_enable();
---- linux-2.6.0-test1/arch/i386/lib/dec_and_lock.c     2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/lib/dec_and_lock.c    2003-07-19 17:06:40.000000000 -0700
-@@ -10,6 +10,7 @@
- #include <linux/spinlock.h>
- #include <asm/atomic.h>
-+#ifndef ATOMIC_DEC_AND_LOCK
- int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
- {
-       int counter;
-@@ -38,3 +39,5 @@ slow_path:
-       spin_unlock(lock);
-       return 0;
- }
-+#endif
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/i386/lib/kgdb_serial.c     2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,485 @@
-+/*
-+ * Serial interface GDB stub
-+ *
-+ * Written (hacked together) by David Grothe (dave@gcom.com)
-+ * Modified to allow invokation early in boot see also
-+ * kgdb.h for instructions by George Anzinger(george@mvista.com)
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/signal.h>
-+#include <linux/sched.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/tty.h>
-+#include <linux/tty_flip.h>
-+#include <linux/serial.h>
-+#include <linux/serial_reg.h>
-+#include <linux/config.h>
-+#include <linux/major.h>
-+#include <linux/string.h>
-+#include <linux/fcntl.h>
-+#include <linux/ptrace.h>
-+#include <linux/ioport.h>
-+#include <linux/mm.h>
-+#include <linux/init.h>
-+#include <linux/highmem.h>
-+#include <asm/system.h>
-+#include <asm/io.h>
-+#include <asm/segment.h>
-+#include <asm/bitops.h>
-+#include <asm/system.h>
-+#include <asm/kgdb_local.h>
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+extern void kgdb_console_finit(void);
-+#endif
-+#define PRNT_off
-+#define TEST_EXISTANCE
-+#ifdef PRNT
-+#define dbprintk(s) printk s
-+#else
-+#define dbprintk(s)
-+#endif
-+#define TEST_INTERRUPT_off
-+#ifdef TEST_INTERRUPT
-+#define intprintk(s) printk s
-+#else
-+#define intprintk(s)
-+#endif
-+
-+#define IRQ_T(info) ((info->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT)
-+
-+#define       GDB_BUF_SIZE    512     /* power of 2, please */
-+
-+static char gdb_buf[GDB_BUF_SIZE];
-+static int gdb_buf_in_inx;
-+static atomic_t gdb_buf_in_cnt;
-+static int gdb_buf_out_inx;
-+
-+struct async_struct *gdb_async_info;
-+static int gdb_async_irq;
-+
-+#define outb_px(a,b) outb_p(b,a)
-+
-+static void program_uart(struct async_struct *info);
-+static void write_char(struct async_struct *info, int chr);
-+/*
-+ * Get a byte from the hardware data buffer and return it
-+ */
-+static int
-+read_data_bfr(struct async_struct *info)
-+{
-+      char it = inb_p(info->port + UART_LSR);
-+
-+      if (it & UART_LSR_DR)
-+              return (inb_p(info->port + UART_RX));
-+      /*
-+       * If we have a framing error assume somebody messed with
-+       * our uart.  Reprogram it and send '-' both ways...
-+       */
-+      if (it & 0xc) {
-+              program_uart(info);
-+              write_char(info, '-');
-+              return ('-');
-+      }
-+      return (-1);
-+
-+}                             /* read_data_bfr */
-+
-+/*
-+ * Get a char if available, return -1 if nothing available.
-+ * Empty the receive buffer first, then look at the interface hardware.
-+
-+ * Locking here is a bit of a problem.        We MUST not lock out communication
-+ * if we are trying to talk to gdb about a kgdb entry.        ON the other hand
-+ * we can loose chars in the console pass thru if we don't lock.  It is also
-+ * possible that we could hold the lock or be waiting for it when kgdb
-+ * NEEDS to talk.  Since kgdb locks down the world, it does not need locks.
-+ * We do, of course have possible issues with interrupting a uart operation,
-+ * but we will just depend on the uart status to help keep that straight.
-+
-+ */
-+static spinlock_t uart_interrupt_lock = SPIN_LOCK_UNLOCKED;
-+#ifdef CONFIG_SMP
-+extern spinlock_t kgdb_spinlock;
-+#endif
-+
-+static int
-+read_char(struct async_struct *info)
-+{
-+      int chr;
-+      unsigned long flags;
-+      local_irq_save(flags);
-+#ifdef CONFIG_SMP
-+      if (!spin_is_locked(&kgdb_spinlock)) {
-+              spin_lock(&uart_interrupt_lock);
-+      }
-+#endif
-+      if (atomic_read(&gdb_buf_in_cnt) != 0) {        /* intr routine has q'd chars */
-+              chr = gdb_buf[gdb_buf_out_inx++];
-+              gdb_buf_out_inx &= (GDB_BUF_SIZE - 1);
-+              atomic_dec(&gdb_buf_in_cnt);
-+      } else {
-+              chr = read_data_bfr(info);
-+      }
-+#ifdef CONFIG_SMP
-+      if (!spin_is_locked(&kgdb_spinlock)) {
-+              spin_unlock(&uart_interrupt_lock);
-+      }
-+#endif
-+      local_irq_restore(flags);
-+      return (chr);
-+}
-+
-+/*
-+ * Wait until the interface can accept a char, then write it.
-+ */
-+static void
-+write_char(struct async_struct *info, int chr)
-+{
-+      while (!(inb_p(info->port + UART_LSR) & UART_LSR_THRE)) ;
-+
-+      outb_p(chr, info->port + UART_TX);
-+
-+}                             /* write_char */
-+
-+/*
-+ * Mostly we don't need a spinlock, but since the console goes
-+ * thru here with interrutps on, well, we need to catch those
-+ * chars.
-+ */
-+/*
-+ * This is the receiver interrupt routine for the GDB stub.
-+ * It will receive a limited number of characters of input
-+ * from the gdb  host machine and save them up in a buffer.
-+ *
-+ * When the gdb stub routine getDebugChar() is called it
-+ * draws characters out of the buffer until it is empty and
-+ * then reads directly from the serial port.
-+ *
-+ * We do not attempt to write chars from the interrupt routine
-+ * since the stubs do all of that via putDebugChar() which
-+ * writes one byte after waiting for the interface to become
-+ * ready.
-+ *
-+ * The debug stubs like to run with interrupts disabled since,
-+ * after all, they run as a consequence of a breakpoint in
-+ * the kernel.
-+ *
-+ * Perhaps someone who knows more about the tty driver than I
-+ * care to learn can make this work for any low level serial
-+ * driver.
-+ */
-+static irqreturn_t
-+gdb_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+      struct async_struct *info;
-+      unsigned long flags;
-+
-+      info = gdb_async_info;
-+      if (!info || !info->tty || irq != gdb_async_irq)
-+              return IRQ_NONE;
-+
-+      local_irq_save(flags);
-+      spin_lock(&uart_interrupt_lock);
-+      do {
-+              int chr = read_data_bfr(info);
-+              intprintk(("Debug char on int: %x hex\n", chr));
-+              if (chr < 0)
-+                      continue;
-+
-+              if (chr == 3) { /* Ctrl-C means remote interrupt */
-+                      BREAKPOINT;
-+                      continue;
-+              }
-+
-+              if (atomic_read(&gdb_buf_in_cnt) >= GDB_BUF_SIZE) {
-+                      /* buffer overflow tosses early char */
-+                      read_char(info);
-+              }
-+              gdb_buf[gdb_buf_in_inx++] = chr;
-+              gdb_buf_in_inx &= (GDB_BUF_SIZE - 1);
-+      } while (inb_p(info->port + UART_IIR) & UART_IIR_RDI);
-+      spin_unlock(&uart_interrupt_lock);
-+      local_irq_restore(flags);
-+      return IRQ_HANDLED;
-+}                             /* gdb_interrupt */
-+
-+/*
-+ * Just a NULL routine for testing.
-+ */
-+void
-+gdb_null(void)
-+{
-+}                             /* gdb_null */
-+
-+/* These structure are filled in with values defined in asm/kgdb_local.h
-+ */
-+static struct serial_state state = SB_STATE;
-+static struct async_struct local_info = SB_INFO;
-+static int ok_to_enable_ints = 0;
-+static void kgdb_enable_ints_now(void);
-+
-+extern char *kgdb_version;
-+/*
-+ * Hook an IRQ for KGDB.
-+ *
-+ * This routine is called from putDebugChar, below.
-+ */
-+static int ints_disabled = 1;
-+int
-+gdb_hook_interrupt(struct async_struct *info, int verb)
-+{
-+      struct serial_state *state = info->state;
-+      unsigned long flags;
-+      int port;
-+#ifdef TEST_EXISTANCE
-+      int scratch, scratch2;
-+#endif
-+
-+      /* The above fails if memory managment is not set up yet. 
-+       * Rather than fail the set up, just keep track of the fact
-+       * and pick up the interrupt thing later.
-+       */
-+      gdb_async_info = info;
-+      port = gdb_async_info->port;
-+      gdb_async_irq = state->irq;
-+      if (verb) {
-+              printk("kgdb %s : port =%x, IRQ=%d, divisor =%d\n",
-+                     kgdb_version,
-+                     port,
-+                     gdb_async_irq, gdb_async_info->state->custom_divisor);
-+      }
-+      local_irq_save(flags);
-+#ifdef TEST_EXISTANCE
-+      /* Existance test */
-+      /* Should not need all this, but just in case.... */
-+
-+      scratch = inb_p(port + UART_IER);
-+      outb_px(port + UART_IER, 0);
-+      outb_px(0xff, 0x080);
-+      scratch2 = inb_p(port + UART_IER);
-+      outb_px(port + UART_IER, scratch);
-+      if (scratch2) {
-+              printk
-+                  ("gdb_hook_interrupt: Could not clear IER, not a UART!\n");
-+              local_irq_restore(flags);
-+              return 1;       /* We failed; there's nothing here */
-+      }
-+      scratch2 = inb_p(port + UART_LCR);
-+      outb_px(port + UART_LCR, 0xBF); /* set up for StarTech test */
-+      outb_px(port + UART_EFR, 0);    /* EFR is the same as FCR */
-+      outb_px(port + UART_LCR, 0);
-+      outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO);
-+      scratch = inb_p(port + UART_IIR) >> 6;
-+      if (scratch == 1) {
-+              printk("gdb_hook_interrupt: Undefined UART type!"
-+                     "  Not a UART! \n");
-+              local_irq_restore(flags);
-+              return 1;
-+      } else {
-+              dbprintk(("gdb_hook_interrupt: UART type "
-+                        "is %d where 0=16450, 2=16550 3=16550A\n", scratch));
-+      }
-+      scratch = inb_p(port + UART_MCR);
-+      outb_px(port + UART_MCR, UART_MCR_LOOP | scratch);
-+      outb_px(port + UART_MCR, UART_MCR_LOOP | 0x0A);
-+      scratch2 = inb_p(port + UART_MSR) & 0xF0;
-+      outb_px(port + UART_MCR, scratch);
-+      if (scratch2 != 0x90) {
-+              printk("gdb_hook_interrupt: "
-+                     "Loop back test failed! Not a UART!\n");
-+              local_irq_restore(flags);
-+              return scratch2 + 1000; /* force 0 to fail */
-+      }
-+#endif                                /* test existance */
-+      program_uart(info);
-+      local_irq_restore(flags);
-+
-+      return (0);
-+
-+}                             /* gdb_hook_interrupt */
-+
-+static void
-+program_uart(struct async_struct *info)
-+{
-+      int port = info->port;
-+
-+      (void) inb_p(port + UART_RX);
-+      outb_px(port + UART_IER, 0);
-+
-+      (void) inb_p(port + UART_RX);   /* serial driver comments say */
-+      (void) inb_p(port + UART_IIR);  /* this clears the interrupt regs */
-+      (void) inb_p(port + UART_MSR);
-+      outb_px(port + UART_LCR, UART_LCR_WLEN8 | UART_LCR_DLAB);
-+      outb_px(port + UART_DLL, info->state->custom_divisor & 0xff);   /* LS */
-+      outb_px(port + UART_DLM, info->state->custom_divisor >> 8);     /* MS  */
-+      outb_px(port + UART_MCR, info->MCR);
-+
-+      outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1 | UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR);        /* set fcr */
-+      outb_px(port + UART_LCR, UART_LCR_WLEN8);       /* reset DLAB */
-+      outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1);    /* set fcr */
-+      if (!ints_disabled) {
-+              intprintk(("KGDB: Sending %d to port %x offset %d\n",
-+                         gdb_async_info->IER,
-+                         (int) gdb_async_info->port, UART_IER));
-+              outb_px(gdb_async_info->port + UART_IER, gdb_async_info->IER);
-+      }
-+      return;
-+}
-+
-+/*
-+ * getDebugChar
-+ *
-+ * This is a GDB stub routine.        It waits for a character from the
-+ * serial interface and then returns it.  If there is no serial
-+ * interface connection then it returns a bogus value which will
-+ * almost certainly cause the system to hang.  In the 
-+ */
-+int kgdb_in_isr = 0;
-+int kgdb_in_lsr = 0;
-+extern spinlock_t kgdb_spinlock;
-+
-+/* Caller takes needed protections */
-+
-+int
-+getDebugChar(void)
-+{
-+      volatile int chr, dum, time, end_time;
-+
-+      dbprintk(("getDebugChar(port %x): ", gdb_async_info->port));
-+
-+      if (gdb_async_info == NULL) {
-+              gdb_hook_interrupt(&local_info, 0);
-+      }
-+      /* 
-+       * This trick says if we wait a very long time and get
-+       * no char, return the -1 and let the upper level deal
-+       * with it.
-+       */
-+      rdtsc(dum, time);
-+      end_time = time + 2;
-+      while (((chr = read_char(gdb_async_info)) == -1) &&
-+             (end_time - time) > 0) {
-+              rdtsc(dum, time);
-+      };
-+      /*
-+       * This covers our butts if some other code messes with
-+       * our uart, hay, it happens :o)
-+       */
-+      if (chr == -1)
-+              program_uart(gdb_async_info);
-+
-+      dbprintk(("%c\n", chr > ' ' && chr < 0x7F ? chr : ' '));
-+      return (chr);
-+
-+}                             /* getDebugChar */
-+
-+static int count = 3;
-+static spinlock_t one_at_atime = SPIN_LOCK_UNLOCKED;
-+
-+static int __init
-+kgdb_enable_ints(void)
-+{
-+      if (gdb_async_info == NULL) {
-+              gdb_hook_interrupt(&local_info, 1);
-+      }
-+      ok_to_enable_ints = 1;
-+      kgdb_enable_ints_now();
-+#ifdef CONFIG_KGDB_USER_CONSOLE
-+      kgdb_console_finit();
-+#endif
-+      return 0;
-+}
-+
-+#ifdef CONFIG_SERIAL_8250
-+void shutdown_for_kgdb(struct async_struct *gdb_async_info);
-+#endif
-+
-+#ifdef CONFIG_DISCONTIGMEM
-+static inline int kgdb_mem_init_done(void)
-+{
-+      return highmem_start_page != NULL;
-+}
-+#else
-+static inline int kgdb_mem_init_done(void)
-+{
-+      return max_mapnr != 0;
-+}
-+#endif
-+
-+static void
-+kgdb_enable_ints_now(void)
-+{
-+      if (!spin_trylock(&one_at_atime))
-+              return;
-+      if (!ints_disabled)
-+              goto exit;
-+      if (kgdb_mem_init_done() &&
-+                      ints_disabled) {        /* don't try till mem init */
-+#ifdef CONFIG_SERIAL_8250
-+              /*
-+               * The ifdef here allows the system to be configured
-+               * without the serial driver.
-+               * Don't make it a module, however, it will steal the port
-+               */
-+              shutdown_for_kgdb(gdb_async_info);
-+#endif
-+              ints_disabled = request_irq(gdb_async_info->state->irq,
-+                                          gdb_interrupt,
-+                                          IRQ_T(gdb_async_info),
-+                                          "KGDB-stub", NULL);
-+              intprintk(("KGDB: request_irq returned %d\n", ints_disabled));
-+      }
-+      if (!ints_disabled) {
-+              intprintk(("KGDB: Sending %d to port %x offset %d\n",
-+                         gdb_async_info->IER,
-+                         (int) gdb_async_info->port, UART_IER));
-+              outb_px(gdb_async_info->port + UART_IER, gdb_async_info->IER);
-+      }
-+      exit:
-+      spin_unlock(&one_at_atime);
-+}
-+
-+/*
-+ * putDebugChar
-+ *
-+ * This is a GDB stub routine.        It waits until the interface is ready
-+ * to transmit a char and then sends it.  If there is no serial
-+ * interface connection then it simply returns to its caller, having
-+ * pretended to send the char.        Caller takes needed protections.
-+ */
-+void
-+putDebugChar(int chr)
-+{
-+      dbprintk(("putDebugChar(port %x): chr=%02x '%c', ints_on=%d\n",
-+                gdb_async_info->port,
-+                chr,
-+                chr > ' ' && chr < 0x7F ? chr : ' ', ints_disabled ? 0 : 1));
-+
-+      if (gdb_async_info == NULL) {
-+              gdb_hook_interrupt(&local_info, 0);
-+      }
-+
-+      write_char(gdb_async_info, chr);        /* this routine will wait */
-+      count = (chr == '#') ? 0 : count + 1;
-+      if ((count == 2)) {     /* try to enable after */
-+              if (ints_disabled & ok_to_enable_ints)
-+                      kgdb_enable_ints_now(); /* try to enable after */
-+
-+              /* We do this a lot because, well we really want to get these
-+               * interrupts.  The serial driver will clear these bits when it
-+               * initializes the chip.  Every thing else it does is ok, 
-+               * but this.
-+               */
-+              if (!ints_disabled) {
-+                      outb_px(gdb_async_info->port + UART_IER,
-+                              gdb_async_info->IER);
-+              }
-+      }
-+
-+}                             /* putDebugChar */
-+
-+module_init(kgdb_enable_ints);
---- linux-2.6.0-test1/arch/i386/lib/Makefile   2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/lib/Makefile  2003-07-19 17:04:02.000000000 -0700
-@@ -9,4 +9,5 @@ lib-y = checksum.o delay.o \
- lib-$(CONFIG_X86_USE_3DNOW) += mmx.o
- lib-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o
-+lib-$(CONFIG_KGDB) += kgdb_serial.o
- lib-$(CONFIG_DEBUG_IOVIRT)  += iodebug.o
---- linux-2.6.0-test1/arch/i386/mach-generic/bigsmp.c  2003-06-14 12:18:05.000000000 -0700
-+++ 25/arch/i386/mach-generic/bigsmp.c 2003-07-19 17:04:13.000000000 -0700
-@@ -3,6 +3,10 @@
-  * Drives the local APIC in "clustered mode".
-  */
- #define APIC_DEFINITION 1
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
-+#include <asm/mpspec.h>
- #include <asm/genapic.h>
- #include <asm/fixmap.h>
- #include <asm/apicdef.h>
---- linux-2.6.0-test1/arch/i386/mach-generic/default.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/i386/mach-generic/default.c        2003-07-19 17:04:13.000000000 -0700
-@@ -2,6 +2,10 @@
-  * Default generic APIC driver. This handles upto 8 CPUs.
-  */
- #define APIC_DEFINITION 1
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
-+#include <asm/mpspec.h>
- #include <asm/mach-default/mach_apicdef.h>
- #include <asm/genapic.h>
- #include <asm/fixmap.h>
---- linux-2.6.0-test1/arch/i386/mach-generic/probe.c   2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/i386/mach-generic/probe.c  2003-07-19 17:04:13.000000000 -0700
-@@ -3,11 +3,15 @@
-  * 
-  * Generic x86 APIC driver probe layer.
-  */  
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/string.h>
- #include <linux/kernel.h>
- #include <linux/ctype.h>
- #include <linux/init.h>
- #include <asm/fixmap.h>
-+#include <asm/mpspec.h>
- #include <asm/apicdef.h>
- #include <asm/genapic.h>
---- linux-2.6.0-test1/arch/i386/mach-generic/summit.c  2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/i386/mach-generic/summit.c 2003-07-19 17:04:13.000000000 -0700
-@@ -2,6 +2,10 @@
-  * APIC driver for the IBM "Summit" chipset.
-  */
- #define APIC_DEFINITION 1
-+#include <linux/config.h>
-+#include <linux/threads.h>
-+#include <linux/cpumask.h>
-+#include <asm/mpspec.h>
- #include <asm/genapic.h>
- #include <asm/fixmap.h>
- #include <asm/apicdef.h>
---- linux-2.6.0-test1/arch/i386/mach-visws/mpparse.c   2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/i386/mach-visws/mpparse.c  2003-07-19 17:04:06.000000000 -0700
-@@ -26,7 +26,7 @@ unsigned int boot_cpu_physical_apicid = 
- unsigned int boot_cpu_logical_apicid = -1U;
- /* Bitmask of physically existing CPUs */
--unsigned long phys_cpu_present_map;
-+cpumask_t phys_cpu_present_map;
- /*
-@@ -38,6 +38,7 @@ unsigned long phys_cpu_present_map;
- void __init MP_processor_info (struct mpc_config_processor *m)
- {
-       int ver, logical_apicid;
-+      cpumask_t apic_cpus;
-       
-       if (!(m->mpc_cpuflag & CPU_ENABLED))
-               return;
-@@ -62,7 +63,8 @@ void __init MP_processor_info (struct mp
-       }
-       ver = m->mpc_apicver;
--      phys_cpu_present_map |= apicid_to_cpu_present(m->mpc_apicid);
-+      apic_cpus = apicid_to_cpu_present(m->mpc_apicid);
-+      cpus_or(phys_cpu_present_map, phys_cpu_present_map, apic_cpus);
-       /*
-        * Validate version
-        */
---- linux-2.6.0-test1/arch/i386/mach-voyager/voyager_smp.c     2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/i386/mach-voyager/voyager_smp.c    2003-07-19 17:04:06.000000000 -0700
-@@ -75,15 +75,15 @@ static int voyager_extended_cpus = 1;
- int smp_found_config = 0;
- /* Used for the invalidate map that's also checked in the spinlock */
--volatile unsigned long smp_invalidate_needed;
-+static volatile unsigned long smp_invalidate_needed;
- /* Bitmask of currently online CPUs - used by setup.c for
-    /proc/cpuinfo, visible externally but still physical */
--unsigned long cpu_online_map = 0;
-+cpumask_t cpu_online_map = CPU_MASK_NONE;
- /* Bitmask of CPUs present in the system - exported by i386_syms.c, used
-  * by scheduler but indexed physically */
--unsigned long phys_cpu_present_map = 0;
-+cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
- /* estimate of time used to flush the SMP-local cache - used in
-  * processor affinity calculations */
-@@ -108,7 +108,7 @@ static void enable_local_vic_irq(unsigne
- static void disable_local_vic_irq(unsigned int irq);
- static void before_handle_vic_irq(unsigned int irq);
- static void after_handle_vic_irq(unsigned int irq);
--static void set_vic_irq_affinity(unsigned int irq, unsigned long mask);
-+static void set_vic_irq_affinity(unsigned int irq, cpumask_t mask);
- static void ack_vic_irq(unsigned int irq);
- static void vic_enable_cpi(void);
- static void do_boot_cpu(__u8 cpuid);
-@@ -128,13 +128,12 @@ send_one_QIC_CPI(__u8 cpu, __u8 cpi)
- static inline void
- send_QIC_CPI(__u32 cpuset, __u8 cpi)
- {
--      int mask;
--      __u8 cpu;
-+      int cpu;
--      for_each_cpu(cpu, mask) {
-+      for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
-               if(cpuset & (1<<cpu)) {
- #ifdef VOYAGER_DEBUG
--                      if(!test_bit(cpu, cpu_online_map))
-+                      if(!cpu_isset(cpu, cpu_online_map))
-                               VDEBUG(("CPU%d sending cpi %d to CPU%d not in cpu_online_map\n", hard_smp_processor_id(), cpi, cpu));
- #endif
-                       send_one_QIC_CPI(cpu, cpi - QIC_CPI_OFFSET);
-@@ -155,7 +154,7 @@ static inline void
- send_CPI_allbutself(__u8 cpi)
- {
-       __u8 cpu = smp_processor_id();
--      __u32 mask = (cpu_online_map & (~(1<<cpu)));
-+      __u32 mask = cpus_coerce(cpu_online_map) & ~(1 << cpu);
-       send_CPI(mask, cpi);
- }
-@@ -243,11 +242,11 @@ static __u32 cpu_booted_map;
- /* the synchronize flag used to hold all secondary CPUs spinning in
-  * a tight loop until the boot sequence is ready for them */
--static unsigned long smp_commenced_mask = 0;
-+static cpumask_t smp_commenced_mask = CPU_MASK_NONE;
- /* This is for the new dynamic CPU boot code */
--volatile unsigned long cpu_callin_map = 0;
--volatile unsigned long cpu_callout_map = 0;
-+volatile cpumask_t cpu_callin_map = CPU_MASK_NONE;
-+volatile cpumask_t cpu_callout_map = CPU_MASK_NONE;
- /* The per processor IRQ masks (these are usually kept in sync) */
- static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned;
-@@ -395,7 +394,7 @@ find_smp_config(void)
-       for(i=0; i<NR_CPUS; i++) {
-               cpu_irq_affinity[i] = ~0;
-       }
--      cpu_online_map = (1<<boot_cpu_id);
-+      cpu_online_map = cpumask_of_cpu(boot_cpu_id);
-       /* The boot CPU must be extended */
-       voyager_extended_vic_processors = 1<<boot_cpu_id;
-@@ -404,11 +403,11 @@ find_smp_config(void)
-       /* set up everything for just this CPU, we can alter
-        * this as we start the other CPUs later */
-       /* now get the CPU disposition from the extended CMOS */
--      phys_cpu_present_map = voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK);
--      phys_cpu_present_map |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8;
--      phys_cpu_present_map |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16;
--      phys_cpu_present_map |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24;
--      printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", phys_cpu_present_map);
-+      phys_cpu_present_map = cpus_promote(voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK));
-+      cpus_coerce(phys_cpu_present_map) |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8;
-+      cpus_coerce(phys_cpu_present_map) |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16;
-+      cpus_coerce(phys_cpu_present_map) |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24;
-+      printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", cpus_coerce(phys_cpu_present_map));
-       /* Here we set up the VIC to enable SMP */
-       /* enable the CPIs by writing the base vector to their register */
-       outb(VIC_DEFAULT_CPI_BASE, VIC_CPI_BASE_REGISTER);
-@@ -509,18 +508,18 @@ start_secondary(void *unused)
-        * permission to proceed.  Without this, the new per CPU stuff
-        * in the softirqs will fail */
-       local_irq_disable();
--      set_bit(cpuid, &cpu_callin_map);
-+      cpu_set(cpuid, cpu_callin_map);
-       /* signal that we're done */
-       cpu_booted_map = 1;
--      while (!test_bit(cpuid, &smp_commenced_mask))
-+      while (!cpu_isset(cpuid, smp_commenced_mask))
-               rep_nop();
-       local_irq_enable();
-       local_flush_tlb();
--      set_bit(cpuid, &cpu_online_map);
-+      cpu_set(cpuid, cpu_online_map);
-       wmb();
-       return cpu_idle();
- }
-@@ -674,14 +673,14 @@ do_boot_cpu(__u8 cpu)
-       free_page((unsigned long)page_table_copies);
- #endif
-         
--      if(cpu_booted_map) {
-+      if (cpu_booted_map) {
-               VDEBUG(("CPU%d: Booted successfully, back in CPU %d\n",
-                       cpu, smp_processor_id()));
-       
-               printk("CPU%d: ", cpu);
-               print_cpu_info(&cpu_data[cpu]);
-               wmb();
--              set_bit(cpu, &cpu_callout_map);
-+              cpu_set(cpu, cpu_callout_map);
-       }
-       else {
-               printk("CPU%d FAILED TO BOOT: ", cpu);
-@@ -708,13 +707,12 @@ smp_boot_cpus(void)
-               /* now that the cat has probed the Voyager System Bus, sanity
-                * check the cpu map */
-               if( ((voyager_quad_processors | voyager_extended_vic_processors)
--                   & phys_cpu_present_map) != phys_cpu_present_map) {
-+                   & cpus_coerce(phys_cpu_present_map)) != cpus_coerce(phys_cpu_present_map)) {
-                       /* should panic */
-                       printk("\n\n***WARNING*** Sanity check of CPU present map FAILED\n");
-               }
--      } else if(voyager_level == 4) {
--              voyager_extended_vic_processors = phys_cpu_present_map;
--      }
-+      } else if(voyager_level == 4)
-+              voyager_extended_vic_processors = cpus_coerce(phys_cpu_present_map);
-       /* this sets up the idle task to run on the current cpu */
-       voyager_extended_cpus = 1;
-@@ -740,13 +738,13 @@ smp_boot_cpus(void)
-       /* enable our own CPIs */
-       vic_enable_cpi();
--      set_bit(boot_cpu_id, &cpu_online_map);
--      set_bit(boot_cpu_id, &cpu_callout_map);
-+      cpu_set(boot_cpu_id, cpu_online_map);
-+      cpu_set(boot_cpu_id, cpu_callout_map);
-       
-       /* loop over all the extended VIC CPUs and boot them.  The 
-        * Quad CPUs must be bootstrapped by their extended VIC cpu */
-       for(i = 0; i < NR_CPUS; i++) {
--              if( i == boot_cpu_id || ((1<<i) & (phys_cpu_present_map) ) == 0)
-+              if(i == boot_cpu_id || !cpu_isset(i, phys_cpu_present_map))
-                       continue;
-               do_boot_cpu(i);
-               /* This udelay seems to be needed for the Quad boots
-@@ -758,7 +756,7 @@ smp_boot_cpus(void)
-       {
-               unsigned long bogosum = 0;
-               for (i = 0; i < NR_CPUS; i++)
--                      if (cpu_online_map & (1<<i))
-+                      if (cpu_isset(i, cpu_online_map))
-                               bogosum += cpu_data[i].loops_per_jiffy;
-               printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
-                       cpucount+1,
-@@ -865,7 +863,7 @@ leave_mm (unsigned long cpu)
- {
-       if (cpu_tlbstate[cpu].state == TLBSTATE_OK)
-               BUG();
--      clear_bit(cpu,  &cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
-+      cpu_clear(cpu,  cpu_tlbstate[cpu].active_mm->cpu_vm_mask);
-       load_cr3(swapper_pg_dir);
- }
-@@ -878,7 +876,7 @@ smp_invalidate_interrupt(void)
- {
-       __u8 cpu = get_cpu();
--      if(!test_bit(cpu, &smp_invalidate_needed))
-+      if (!(smp_invalidate_needed & (1UL << cpu)))
-               goto out;
-       /* This will flood messages.  Don't uncomment unless you see
-        * Problems with cross cpu invalidation
-@@ -895,7 +893,7 @@ smp_invalidate_interrupt(void)
-               } else
-                       leave_mm(cpu);
-       }
--      clear_bit(cpu, &smp_invalidate_needed);
-+      smp_invalidate_needed |= 1UL << cpu;
-  out:
-       put_cpu_no_resched();
- }
-@@ -912,7 +910,7 @@ flush_tlb_others (unsigned long cpumask,
-       if (!cpumask)
-               BUG();
--      if ((cpumask & cpu_online_map) != cpumask)
-+      if ((cpumask & cpus_coerce(cpu_online_map)) != cpumask)
-               BUG();
-       if (cpumask & (1 << smp_processor_id()))
-               BUG();
-@@ -954,7 +952,7 @@ flush_tlb_current_task(void)
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
-+      cpu_mask = cpus_coerce(mm->cpu_vm_mask) & ~(1 << smp_processor_id());
-       local_flush_tlb();
-       if (cpu_mask)
-               flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-@@ -970,7 +968,7 @@ flush_tlb_mm (struct mm_struct * mm)
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
-+      cpu_mask = cpus_coerce(mm->cpu_vm_mask) & ~(1 << smp_processor_id());
-       if (current->active_mm == mm) {
-               if (current->mm)
-@@ -991,7 +989,7 @@ void flush_tlb_page(struct vm_area_struc
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
-+      cpu_mask = cpus_coerce(mm->cpu_vm_mask) & ~(1 << smp_processor_id());
-       if (current->active_mm == mm) {
-               if(current->mm)
-                       __flush_tlb_one(va);
-@@ -1033,7 +1031,7 @@ static void
- smp_stop_cpu_function(void *dummy)
- {
-       VDEBUG(("VOYAGER SMP: CPU%d is STOPPING\n", smp_processor_id()));
--      clear_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_clear(smp_processor_id(), cpu_online_map);
-       local_irq_disable();
-       for(;;)
-              __asm__("hlt");
-@@ -1100,7 +1098,7 @@ smp_call_function (void (*func) (void *i
-                  int wait)
- {
-       struct call_data_struct data;
--      __u32 mask = cpu_online_map;
-+      __u32 mask = cpus_coerce(cpu_online_map);
-       mask &= ~(1<<smp_processor_id());
-@@ -1451,8 +1449,7 @@ smp_intr_init(void)
- static void
- send_CPI(__u32 cpuset, __u8 cpi)
- {
--      int mask;
--      __u8 cpu;
-+      int cpu;
-       __u32 quad_cpuset = (cpuset & voyager_quad_processors);
-       if(cpi < VIC_START_FAKE_CPI) {
-@@ -1467,7 +1464,7 @@ send_CPI(__u32 cpuset, __u8 cpi)
-       cpuset &= 0xff;         /* only first 8 CPUs vaild for VIC CPI */
-       if(cpuset == 0)
-               return;
--      for_each_cpu(cpu, mask) {
-+      for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
-               if(cpuset & (1<<cpu))
-                       set_bit(cpi, &vic_cpi_mailbox[cpu]);
-       }
-@@ -1571,10 +1568,9 @@ startup_vic_irq(unsigned int irq)
- static void
- enable_vic_irq(unsigned int irq)
- {
--      int tmpmask;
-       /* linux doesn't to processor-irq affinity, so enable on
-        * all CPUs we know about */
--      __u8 cpu = smp_processor_id(), real_cpu;
-+      int cpu = smp_processor_id(), real_cpu;
-       __u16 mask = (1<<irq);
-       __u32 processorList = 0;
-       unsigned long flags;
-@@ -1582,7 +1578,7 @@ enable_vic_irq(unsigned int irq)
-       VDEBUG(("VOYAGER: enable_vic_irq(%d) CPU%d affinity 0x%lx\n",
-               irq, cpu, cpu_irq_affinity[cpu]));
-       spin_lock_irqsave(&vic_irq_lock, flags);
--      for_each_cpu(real_cpu, tmpmask) {
-+      for_each_cpu(real_cpu, mk_cpumask_const(cpu_online_map)) {
-               if(!(voyager_extended_vic_processors & (1<<real_cpu)))
-                       continue;
-               if(!(cpu_irq_affinity[real_cpu] & mask)) {
-@@ -1727,7 +1723,7 @@ after_handle_vic_irq(unsigned int irq)
-                       printk("VOYAGER SMP: CPU%d lost interrupt %d\n",
-                              cpu, irq);
--                      for_each_cpu(real_cpu, mask) {
-+                      for_each_cpu(real_cpu, mk_cpumask_const(mask)) {
-                               outb(VIC_CPU_MASQUERADE_ENABLE | real_cpu,
-                                    VIC_PROCESSOR_ID);
-@@ -1783,15 +1779,16 @@ after_handle_vic_irq(unsigned int irq)
-  * the selected processors */
- void
--set_vic_irq_affinity(unsigned int irq, unsigned long mask) 
-+set_vic_irq_affinity(unsigned int irq, cpumask_t mask)
- {
-       /* Only extended processors handle interrupts */
--      unsigned long real_mask = mask & voyager_extended_vic_processors;
--      unsigned long irq_mask = (1<<irq);
--      int tmpmask;
--      __u8 cpu;
-+      unsigned long real_mask;
-+      unsigned long irq_mask = 1 << irq;
-+      int cpu;
-+
-+      real_mask = cpus_coerce(mask) & voyager_extended_vic_processors;
-       
--      if(mask == 0)
-+      if(cpus_coerce(mask) == 0)
-               /* can't have no cpu's to accept the interrupt -- extremely
-                * bad things will happen */
-               return;
-@@ -1811,8 +1808,8 @@ set_vic_irq_affinity(unsigned int irq, u
-                * bus) */
-               return;
--      for_each_cpu(cpu, tmpmask) {
--              unsigned long cpu_mask = (1<<cpu);
-+      for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
-+              unsigned long cpu_mask = 1 << cpu;
-               
-               if(cpu_mask & real_mask) {
-                       /* enable the interrupt for this cpu */
-@@ -1874,11 +1871,10 @@ vic_enable_cpi(void)
- void
- voyager_smp_dump()
- {
--      int mask;
--      __u8 old_cpu = smp_processor_id(), cpu;
-+      int old_cpu = smp_processor_id(), cpu;
-       /* dump the interrupt masks of each processor */
--      for_each_cpu(cpu, mask) {
-+      for_each_cpu(cpu, mk_cpumask_const(cpu_online_map)) {
-               __u16 imr, isr, irr;
-               unsigned long flags;
-@@ -1936,23 +1932,23 @@ smp_prepare_cpus(unsigned int max_cpus)
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &cpu_callout_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_callout_map);
- }
- int __devinit
- __cpu_up(unsigned int cpu)
- {
-       /* This only works at boot for x86.  See "rewrite" above. */
--      if (test_bit(cpu, &smp_commenced_mask))
-+      if (cpu_isset(cpu, smp_commenced_mask))
-               return -ENOSYS;
-       /* In case one didn't come up */
--      if (!test_bit(cpu, &cpu_callin_map))
-+      if (!cpu_isset(cpu, cpu_callin_map))
-               return -EIO;
-       /* Unleash the CPU! */
--      set_bit(cpu, &smp_commenced_mask);
--      while (!test_bit(cpu, &cpu_online_map))
-+      cpu_set(cpu, smp_commenced_mask);
-+      while (!cpu_isset(cpu, cpu_online_map))
-               mb();
-       return 0;
- }
---- linux-2.6.0-test1/arch/i386/Makefile       2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/Makefile      2003-07-19 17:04:05.000000000 -0700
-@@ -85,6 +85,9 @@ mcore-$(CONFIG_X86_ES7000)   := mach-es700
- # default subarch .h files
- mflags-y += -Iinclude/asm-i386/mach-default
-+mflags-$(CONFIG_KGDB) += -ggdb
-+mflags-$(CONFIG_KGDB_MORE) += $(shell echo $(CONFIG_KGDB_OPTIONS) | sed -e 's/"//g')
-+
- head-y := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
- libs-y                                        += arch/i386/lib/
---- linux-2.6.0-test1/arch/i386/mm/fault.c     2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/mm/fault.c    2003-07-19 17:07:16.000000000 -0700
-@@ -236,6 +236,12 @@ no_context:
-  * Oops. The kernel tried to access some bad page. We'll have to
-  * terminate things with extreme prejudice.
-  */
-+#ifdef CONFIG_KGDB
-+        if (!user_mode(regs)){
-+                kgdb_handle_exception(14,SIGBUS, error_code, regs);
-+                return;
-+        }
-+#endif
-       bust_spinlocks(1);
-@@ -247,6 +253,13 @@ no_context:
-       printk(" printing eip:\n");
-       printk("%08lx\n", regs->eip);
-       asm("movl %%cr3,%0":"=r" (page));
-+#ifdef CONFIG_HIGHPMD /* Oh boy. Error reporting is going to blow major goats. */
-+      printk(KERN_ALERT "%%cr3 = 0x%lx\n", page);
-+      /* Mask off flag bits. It should end up 32B-aligned. */
-+      page &= ~(PTRS_PER_PGD*sizeof(pgd_t) - 1);
-+      printk(KERN_ALERT "*pdpte = 0x%Lx\n",
-+                      pgd_val(((pgd_t *)__va(page))[address >> PGDIR_SHIFT]));
-+#else /* !CONFIG_HIGHPMD */
-       page = ((unsigned long *) __va(page))[address >> 22];
-       printk(KERN_ALERT "*pde = %08lx\n", page);
-       /*
-@@ -262,7 +275,8 @@ no_context:
-               page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT];
-               printk(KERN_ALERT "*pte = %08lx\n", page);
-       }
--#endif
-+#endif /* !CONFIG_HIGHPTE */
-+#endif /* CONFIG_HIGHPMD */
-       die("Oops", regs, error_code);
-       bust_spinlocks(0);
-       do_exit(SIGKILL);
-@@ -330,8 +344,8 @@ vmalloc_fault:
-                * and redundant with the set_pmd() on non-PAE.
-                */
--              pmd = pmd_offset(pgd, address);
--              pmd_k = pmd_offset(pgd_k, address);
-+              pmd = pmd_offset_kernel(pgd, address);
-+              pmd_k = pmd_offset_kernel(pgd_k, address);
-               if (!pmd_present(*pmd_k))
-                       goto no_context;
-               set_pmd(pmd, *pmd_k);
---- linux-2.6.0-test1/arch/i386/mm/hugetlbpage.c       2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/i386/mm/hugetlbpage.c      2003-07-19 17:07:16.000000000 -0700
-@@ -87,8 +87,8 @@ static pte_t *huge_pte_alloc(struct mm_s
-       pmd_t *pmd = NULL;
-       pgd = pgd_offset(mm, addr);
--      pmd = pmd_alloc(mm, pgd, addr);
--      return (pte_t *) pmd;
-+      pmd = pmd_alloc_map(mm, pgd, addr);
-+      return (pte_t *)pmd;
- }
- static pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
-@@ -97,8 +97,8 @@ static pte_t *huge_pte_offset(struct mm_
-       pmd_t *pmd = NULL;
-       pgd = pgd_offset(mm, addr);
--      pmd = pmd_offset(pgd, addr);
--      return (pte_t *) pmd;
-+      pmd = pmd_offset_map_nested(pgd, addr);
-+      return (pte_t *)pmd;
- }
- static void set_huge_pte(struct mm_struct *mm, struct vm_area_struct *vma, struct page *page, pte_t * page_table, int write_access)
-@@ -145,6 +145,8 @@ int copy_hugetlb_page_range(struct mm_st
-               ptepage = pte_page(entry);
-               get_page(ptepage);
-               set_pte(dst_pte, entry);
-+              pmd_unmap(dst_pte);
-+              pmd_unmap_nested(src_pte);
-               dst->rss += (HPAGE_SIZE / PAGE_SIZE);
-               addr += HPAGE_SIZE;
-       }
-@@ -182,6 +184,7 @@ follow_hugetlb_page(struct mm_struct *mm
-                       get_page(page);
-                       pages[i] = page;
-+                      pmd_unmap_nested(pte);
-               }
-               if (vmas)
-@@ -271,6 +274,7 @@ follow_huge_pmd(struct mm_struct *mm, un
-               page += ((address & ~HPAGE_MASK) >> PAGE_SHIFT);
-               get_page(page);
-       }
-+      pmd_unmap(pmd);
-       return page;
- }
- #endif
-@@ -314,6 +318,7 @@ void unmap_hugepage_range(struct vm_area
-               page = pte_page(*pte);
-               huge_page_release(page);
-               pte_clear(pte);
-+              pmd_unmap_nested(pte);
-       }
-       mm->rss -= (end - start) >> PAGE_SHIFT;
-       flush_tlb_range(vma, start, end);
-@@ -348,8 +353,10 @@ int hugetlb_prefault(struct address_spac
-                       ret = -ENOMEM;
-                       goto out;
-               }
--              if (!pte_none(*pte))
-+              if (!pte_none(*pte)) {
-+                      pmd_unmap(pte);
-                       continue;
-+              }
-               idx = ((addr - vma->vm_start) >> HPAGE_SHIFT)
-                       + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT));
-@@ -358,16 +365,19 @@ int hugetlb_prefault(struct address_spac
-                       page = alloc_hugetlb_page();
-                       if (!page) {
-                               ret = -ENOMEM;
-+                              pmd_unmap(pte);
-                               goto out;
-                       }
-                       ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
-                       unlock_page(page);
-                       if (ret) {
-                               free_huge_page(page);
-+                              pmd_unmap(pte);
-                               goto out;
-                       }
-               }
-               set_huge_pte(mm, vma, page, pte, vma->vm_flags & VM_WRITE);
-+              pmd_unmap(pte);
-       }
- out:
-       spin_unlock(&mm->page_table_lock);
---- linux-2.6.0-test1/arch/i386/mm/init.c      2003-06-26 22:07:23.000000000 -0700
-+++ 25/arch/i386/mm/init.c     2003-07-19 17:07:16.000000000 -0700
-@@ -20,9 +20,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/highmem.h>
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
-@@ -59,10 +56,10 @@ static pmd_t * __init one_md_table_init(
- #ifdef CONFIG_X86_PAE
-       pmd_table = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
-       set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
--      if (pmd_table != pmd_offset(pgd, 0)) 
-+      if (pmd_table != pmd_offset_kernel(pgd, 0))
-               BUG();
- #else
--      pmd_table = pmd_offset(pgd, 0);
-+      pmd_table = pmd_offset_kernel(pgd, 0);
- #endif
-       return pmd_table;
-@@ -113,7 +110,7 @@ static void __init page_table_range_init
-               if (pgd_none(*pgd)) 
-                       one_md_table_init(pgd);
--              pmd = pmd_offset(pgd, vaddr);
-+              pmd = pmd_offset_kernel(pgd, vaddr);
-               for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end); pmd++, pmd_idx++) {
-                       if (pmd_none(*pmd)) 
-                               one_page_table_init(pmd);
-@@ -194,7 +191,7 @@ pte_t *kmap_pte;
- pgprot_t kmap_prot;
- #define kmap_get_fixmap_pte(vaddr)                                    \
--      pte_offset_kernel(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr))
-+      pte_offset_kernel(pmd_offset_kernel(pgd_offset_k(vaddr), (vaddr)), (vaddr))
- void __init kmap_init(void)
- {
-@@ -218,7 +215,7 @@ void __init permanent_kmaps_init(pgd_t *
-       page_table_range_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
-       pgd = swapper_pg_dir + pgd_index(vaddr);
--      pmd = pmd_offset(pgd, vaddr);
-+      pmd = pmd_offset_kernel(pgd, vaddr);
-       pte = pte_offset_kernel(pmd, vaddr);
-       pkmap_page_table = pte; 
- }
-@@ -512,20 +509,19 @@ void __init mem_init(void)
- #endif
- }
--#ifdef CONFIG_X86_PAE
--struct kmem_cache_s *pae_pgd_cachep;
-+kmem_cache_t *pgd_cache;
- void __init pgtable_cache_init(void)
- {
--        /*
--         * PAE pgds must be 16-byte aligned:
--         */
--        pae_pgd_cachep = kmem_cache_create("pae_pgd", 32, 0,
--                SLAB_HWCACHE_ALIGN | SLAB_MUST_HWCACHE_ALIGN, NULL, NULL);
--        if (!pae_pgd_cachep)
--                panic("init_pae(): Cannot alloc pae_pgd SLAB cache");
-+      pgd_cache = kmem_cache_create("pgd",
-+                              PTRS_PER_PGD*sizeof(pgd_t),
-+                              0,
-+                              SLAB_HWCACHE_ALIGN | SLAB_MUST_HWCACHE_ALIGN,
-+                              pgd_ctor,
-+                              PTRS_PER_PMD == 1 ? pgd_dtor : NULL);
-+      if (!pgd_cache)
-+              panic("pgtable_cache_init(): Cannot create pgd cache");
- }
--#endif
- /*
-  * This function cannot be __init, since exceptions don't work in that
-@@ -565,7 +561,7 @@ void free_initmem(void)
-               free_page(addr);
-               totalram_pages++;
-       }
--      printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (&__init_end - &__init_begin) >> 10);
-+      printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (__init_end - __init_begin) >> 10);
- }
- #ifdef CONFIG_BLK_DEV_INITRD
---- linux-2.6.0-test1/arch/i386/mm/ioremap.c   2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/i386/mm/ioremap.c  2003-07-19 17:07:16.000000000 -0700
-@@ -82,7 +82,7 @@ static int remap_area_pages(unsigned lon
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/i386/mm/pageattr.c  2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/mm/pageattr.c 2003-07-19 17:07:16.000000000 -0700
-@@ -23,7 +23,7 @@ static inline pte_t *lookup_address(unsi
-       pmd_t *pmd;
-       if (pgd_none(*pgd))
-               return NULL;
--      pmd = pmd_offset(pgd, address);                
-+      pmd = pmd_offset_kernel(pgd, address);
-       if (pmd_none(*pmd))
-               return NULL;
-       if (pmd_large(*pmd))
-@@ -67,19 +67,22 @@ static void flush_kernel_map(void *dummy
- static void set_pmd_pte(pte_t *kpte, unsigned long address, pte_t pte) 
- { 
-+      struct page *page;
-+      unsigned long flags;
-+
-       set_pte_atomic(kpte, pte);      /* change init_mm */
--#ifndef CONFIG_X86_PAE
--      {
--              struct list_head *l;
--              spin_lock(&mmlist_lock);
--              list_for_each(l, &init_mm.mmlist) { 
--                      struct mm_struct *mm = list_entry(l, struct mm_struct, mmlist);
--                      pmd_t *pmd = pmd_offset(pgd_offset(mm, address), address);
--                      set_pte_atomic((pte_t *)pmd, pte);
--              } 
--              spin_unlock(&mmlist_lock);
-+      if (PTRS_PER_PMD > 1)
-+              return;
-+
-+      spin_lock_irqsave(&pgd_lock, flags);
-+      list_for_each_entry(page, &pgd_list, lru) {
-+              pgd_t *pgd;
-+              pmd_t *pmd;
-+              pgd = (pgd_t *)page_address(page) + pgd_index(address);
-+              pmd = pmd_offset_kernel(pgd, address);
-+              set_pte_atomic((pte_t *)pmd, pte);
-       }
--#endif
-+      spin_unlock_irqrestore(&pgd_lock, flags);
- }
- /* 
-@@ -89,7 +92,7 @@ static void set_pmd_pte(pte_t *kpte, uns
- static inline void revert_page(struct page *kpte_page, unsigned long address)
- {
-       pte_t *linear = (pte_t *) 
--              pmd_offset(pgd_offset(&init_mm, address), address);
-+              pmd_offset_kernel(pgd_offset_k(address), address);
-       set_pmd_pte(linear,  address,
-                   pfn_pte((__pa(address) & LARGE_PAGE_MASK) >> PAGE_SHIFT,
-                           PAGE_KERNEL_LARGE));
---- linux-2.6.0-test1/arch/i386/mm/pgtable.c   2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/mm/pgtable.c  2003-07-19 17:07:16.000000000 -0700
-@@ -12,6 +12,7 @@
- #include <linux/highmem.h>
- #include <linux/slab.h>
- #include <linux/pagemap.h>
-+#include <linux/spinlock.h>
- #include <asm/system.h>
- #include <asm/pgtable.h>
-@@ -69,7 +70,7 @@ static void set_pte_pfn(unsigned long va
-               BUG();
-               return;
-       }
--      pmd = pmd_offset(pgd, vaddr);
-+      pmd = pmd_offset_kernel(pgd, vaddr);
-       if (pmd_none(*pmd)) {
-               BUG();
-               return;
-@@ -109,7 +110,7 @@ void set_pmd_pfn(unsigned long vaddr, un
-               printk ("set_pmd_pfn: pgd_none\n");
-               return; /* BUG(); */
-       }
--      pmd = pmd_offset(pgd, vaddr);
-+      pmd = pmd_offset_kernel(pgd, vaddr);
-       set_pmd(pmd, pfn_pmd(pfn, flags));
-       /*
-        * It's enough to flush this one mapping.
-@@ -151,61 +152,89 @@ struct page *pte_alloc_one(struct mm_str
-       return pte;
- }
--#ifdef CONFIG_X86_PAE
-+/*
-+ * List of all pgd's needed for non-PAE so it can invalidate entries
-+ * in both cached and uncached pgd's; not needed for PAE since the
-+ * kernel pmd is shared. If PAE were not to share the pmd a similar
-+ * tactic would be needed. This is essentially codepath-based locking
-+ * against pageattr.c; it is the unique case in which a valid change
-+ * of kernel pagetables can't be lazily synchronized by vmalloc faults.
-+ * vmalloc faults work because attached pagetables are never freed.
-+ * If the locking proves to be non-performant, a ticketing scheme with
-+ * checks at dup_mmap(), exec(), and other mmlist addition points
-+ * could be used. The locking scheme was chosen on the basis of
-+ * manfred's recommendations and having no core impact whatsoever.
-+ * -- wli
-+ */
-+spinlock_t pgd_lock = SPIN_LOCK_UNLOCKED;
-+LIST_HEAD(pgd_list);
--pgd_t *pgd_alloc(struct mm_struct *mm)
-+void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused)
- {
--      int i;
--      pgd_t *pgd = kmem_cache_alloc(pae_pgd_cachep, GFP_KERNEL);
-+      unsigned long flags;
--      if (pgd) {
--              for (i = 0; i < USER_PTRS_PER_PGD; i++) {
--                      unsigned long pmd = __get_free_page(GFP_KERNEL);
--                      if (!pmd)
--                              goto out_oom;
--                      clear_page(pmd);
--                      set_pgd(pgd + i, __pgd(1 + __pa(pmd)));
--              }
--              memcpy(pgd + USER_PTRS_PER_PGD,
-+      if (PTRS_PER_PMD == 1)
-+              spin_lock_irqsave(&pgd_lock, flags);
-+
-+      memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD,
-                       swapper_pg_dir + USER_PTRS_PER_PGD,
-                       (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
--      }
--      return pgd;
--out_oom:
--      for (i--; i >= 0; i--)
--              free_page((unsigned long)__va(pgd_val(pgd[i])-1));
--      kmem_cache_free(pae_pgd_cachep, pgd);
--      return NULL;
-+
-+      if (PTRS_PER_PMD > 1)
-+              return;
-+
-+      list_add(&virt_to_page(pgd)->lru, &pgd_list);
-+      spin_unlock_irqrestore(&pgd_lock, flags);
-+      memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t));
- }
--void pgd_free(pgd_t *pgd)
-+/* never called when PTRS_PER_PMD > 1 */
-+void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused)
- {
--      int i;
-+      unsigned long flags; /* can be called from interrupt context */
--      for (i = 0; i < USER_PTRS_PER_PGD; i++)
--              free_page((unsigned long)__va(pgd_val(pgd[i])-1));
--      kmem_cache_free(pae_pgd_cachep, pgd);
-+      spin_lock_irqsave(&pgd_lock, flags);
-+      list_del(&virt_to_page(pgd)->lru);
-+      spin_unlock_irqrestore(&pgd_lock, flags);
- }
--#else
--
- pgd_t *pgd_alloc(struct mm_struct *mm)
- {
--      pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-+      int i;
-+      pgd_t *pgd = kmem_cache_alloc(pgd_cache, GFP_KERNEL);
--      if (pgd) {
--              memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
--              memcpy(pgd + USER_PTRS_PER_PGD,
--                      swapper_pg_dir + USER_PTRS_PER_PGD,
--                      (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
-+      if (PTRS_PER_PMD == 1 || !pgd)
-+              return pgd;
-+
-+      for (i = 0; i < USER_PTRS_PER_PGD; ++i) {
-+              struct page *pmd;
-+#ifdef CONFIG_HIGHPMD
-+              pmd = alloc_page(GFP_KERNEL|__GFP_HIGHMEM|__GFP_REPEAT);
-+#else
-+              pmd = alloc_page(GFP_KERNEL|__GFP_REPEAT);
-+#endif
-+              if (!pmd)
-+                      goto out_oom;
-+              clear_highpage(pmd);
-+              set_pgd(&pgd[i], __pgd(1ULL | (u64)page_to_pfn(pmd) << PAGE_SHIFT));
-       }
-       return pgd;
-+
-+out_oom:
-+      for (i--; i >= 0; i--)
-+              __free_page(pgd_page(pgd[i]));
-+      kmem_cache_free(pgd_cache, pgd);
-+      return NULL;
- }
- void pgd_free(pgd_t *pgd)
- {
--      free_page((unsigned long)pgd);
--}
--
--#endif /* CONFIG_X86_PAE */
-+      int i;
-+      /* in the PAE case user pgd entries are overwritten before usage */
-+      if (PTRS_PER_PMD > 1)
-+              for (i = 0; i < USER_PTRS_PER_PGD; ++i)
-+                      __free_page(pgd_page(pgd[i]));
-+      /* in the non-PAE case, clear_page_tables() clears user pgd entries */
-+      kmem_cache_free(pgd_cache, pgd);
-+}
---- linux-2.6.0-test1/arch/i386/pci/legacy.c   2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/i386/pci/legacy.c  2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,7 @@ static void __devinit pcibios_fixup_peer
-               for (devfn = 0; devfn < 256; devfn += 8) {
-                       if (!raw_pci_ops->read(0, n, devfn, PCI_VENDOR_ID, 2, &l) &&
-                           l != 0x0000 && l != 0xffff) {
--                              DBG("Found device at %02x:%02x [%04x]\n", n, dev->devfn, l);
-+                              DBG("Found device at %02x:%02x [%04x]\n", n, devfn, l);
-                               printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n);
-                               pci_scan_bus(n, &pci_root_ops, NULL);
-                               break;
---- linux-2.6.0-test1/arch/i386/pci/visws.c    2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/i386/pci/visws.c   2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,7 @@
- int broken_hp_bios_irq9;
--extern struct pci_ops pci_direct_conf1;
-+extern struct pci_raw_ops pci_direct_conf1;
- static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; }
-@@ -101,8 +101,9 @@ static int __init pcibios_init(void)
-       printk(KERN_INFO "PCI: Lithium bridge A bus: %u, "
-               "bridge B (PIIX4) bus: %u\n", pci_bus1, pci_bus0);
--      pci_scan_bus(pci_bus0, &pci_direct_conf1, NULL);
--      pci_scan_bus(pci_bus1, &pci_direct_conf1, NULL);
-+      raw_pci_ops = &pci_direct_conf1;
-+      pci_scan_bus(pci_bus0, &pci_root_ops, NULL);
-+      pci_scan_bus(pci_bus1, &pci_root_ops, NULL);
-       pci_fixup_irqs(visws_swizzle, visws_map_irq);
-       pcibios_resource_survey();
-       return 0;
---- linux-2.6.0-test1/arch/ia64/hp/sim/simscsi.c       2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/hp/sim/simscsi.c      2003-07-19 17:03:49.000000000 -0700
-@@ -9,7 +9,7 @@
-  * 99/12/18 David Mosberger   Added support for READ10/WRITE10 needed by linux v2.3.33
-  */
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/arch/ia64/ia32/ia32_ioctl.c      2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/ia32/ia32_ioctl.c     2003-07-19 17:03:49.000000000 -0700
-@@ -52,7 +52,7 @@
- #include <linux/raw.h>
- #include <linux/smb_fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/rtc.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/arch/ia64/kernel/acpi.c  2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/acpi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -720,7 +720,7 @@ acpi_register_irq (u32 gsi, u32 polarity
- {
-       int vector = 0;
--      if (acpi_madt->flags.pcat_compat && (gsi < 16))
-+      if (has_8259 && (gsi < 16))
-               return isa_irq_to_vector(gsi);
-       if (!iosapic_register_intr)
---- linux-2.6.0-test1/arch/ia64/kernel/entry.S 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/kernel/entry.S        2003-07-19 17:03:49.000000000 -0700
-@@ -61,7 +61,17 @@ ENTRY(ia64_execve)
-       mov out2=in2                    // envp
-       add out3=16,sp                  // regs
-       br.call.sptk.many rp=sys_execve
--.ret0:        cmp4.ge p6,p7=r8,r0
-+.ret0:
-+#ifdef CONFIG_IA32_SUPPORT
-+      /*
-+       * Check if we're returning to ia32 mode. If so, we need to restore ia32 registers
-+       * from pt_regs.
-+       */
-+      adds r16=PT(CR_IPSR)+16,sp
-+      ;;
-+      ld8 r16=[r16]
-+#endif
-+      cmp4.ge p6,p7=r8,r0
-       mov ar.pfs=loc1                 // restore ar.pfs
-       sxt4 r8=r8                      // return 64-bit result
-       ;;
-@@ -89,6 +99,12 @@ ENTRY(ia64_execve)
-       ldf.fill f23=[sp];      ldf.fill f24=[sp];      mov f25=f0
-       ldf.fill f26=[sp];      ldf.fill f27=[sp];      mov f28=f0
-       ldf.fill f29=[sp];      ldf.fill f30=[sp];      mov f31=f0
-+#ifdef CONFIG_IA32_SUPPORT
-+      tbit.nz p6,p0=r16, IA64_PSR_IS_BIT
-+      movl loc0=ia64_ret_from_ia32_execve
-+      ;;
-+(p6)  mov rp=loc0
-+#endif
-       br.ret.sptk.many rp
- END(ia64_execve)
-@@ -688,7 +704,7 @@ GLOBAL_ENTRY(ia64_leave_syscall)
-       mov b7=r0               // clear b7
-       ;;
- (pUStk) st1 [r14]=r3
--      movl r17=THIS_CPU(ia64_phys_stacked_size_p8)
-+      addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
-       ;;
-       mov r16=ar.bsp          // get existing backing store pointer
-       srlz.i                  // ensure interruption collection is off
-@@ -701,6 +717,19 @@ GLOBAL_ENTRY(ia64_leave_syscall)
-       br.cond.sptk.many rbs_switch
- END(ia64_leave_syscall)
-+#ifdef CONFIG_IA32_SUPPORT
-+GLOBAL_ENTRY(ia64_ret_from_ia32_execve)
-+      PT_REGS_UNWIND_INFO(0)
-+      adds r2=PT(R8)+16,sp                    // r2 = &pt_regs.r8
-+      adds r3=PT(R10)+16,sp                   // r3 = &pt_regs.r10
-+      ;;
-+      .mem.offset 0,0
-+      st8.spill [r2]=r8       // store return value in slot for r8 and set unat bit
-+      .mem.offset 8,0
-+      st8.spill [r3]=r0       // clear error indication in slot for r10 and set unat bit
-+END(ia64_ret_from_ia32_execve_syscall)
-+      // fall through
-+#endif /* CONFIG_IA32_SUPPORT */
- GLOBAL_ENTRY(ia64_leave_kernel)
-       PT_REGS_UNWIND_INFO(0)
-       /*
-@@ -841,7 +870,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
-       shr.u r18=r19,16        // get byte size of existing "dirty" partition
-       ;;
-       mov r16=ar.bsp          // get existing backing store pointer
--      movl r17=THIS_CPU(ia64_phys_stacked_size_p8)
-+      addl r17=THIS_CPU(ia64_phys_stacked_size_p8),r0
-       ;;
-       ld4 r17=[r17]           // r17 = cpu_data->phys_stacked_size_p8
- (pKStk)       br.cond.dpnt skip_rbs_switch
---- linux-2.6.0-test1/arch/ia64/kernel/fsys.S  2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/kernel/fsys.S 2003-07-19 17:03:49.000000000 -0700
-@@ -165,7 +165,7 @@ ENTRY(fsys_gettimeofday)
-       .altrp b6
-       .body
-       add r9=TI_FLAGS+IA64_TASK_SIZE,r16
--      movl r3=THIS_CPU(cpu_info)
-+      addl r3=THIS_CPU(cpu_info),r0
-       mov.m r31=ar.itc                // put time stamp into r31 (ITC) == now         (35 cyc)
- #ifdef CONFIG_SMP
-@@ -177,7 +177,7 @@ ENTRY(fsys_gettimeofday)
-       movl r19=xtime                  // xtime is a timespec struct
-       ld8 r10=[r10]                   // r10 <- __per_cpu_offset[0]
--      movl r21=THIS_CPU(cpu_info)
-+      addl r21=THIS_CPU(cpu_info),r0
-       ;;
-       add r10=r21, r10                // r10 <- &cpu_data(time_keeper_id)
-       tbit.nz p8,p0 = r2, IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT_BIT
---- linux-2.6.0-test1/arch/ia64/kernel/ia64_ksyms.c    2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/kernel/ia64_ksyms.c   2003-07-19 17:03:49.000000000 -0700
-@@ -64,9 +64,10 @@ EXPORT_SYMBOL(ia64_pfn_valid);
- #endif
- #include <asm/processor.h>
--EXPORT_SYMBOL(cpu_info__per_cpu);
-+EXPORT_SYMBOL(per_cpu__cpu_info);
- #ifdef CONFIG_SMP
- EXPORT_SYMBOL(__per_cpu_offset);
-+EXPORT_SYMBOL(per_cpu__local_per_cpu_offset);
- #endif
- EXPORT_SYMBOL(kernel_thread);
---- linux-2.6.0-test1/arch/ia64/kernel/init_task.c     2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/init_task.c    2003-07-19 17:03:49.000000000 -0700
-@@ -2,7 +2,7 @@
-  * This is where we statically allocate and initialize the initial
-  * task.
-  *
-- * Copyright (C) 1999, 2002 Hewlett-Packard Co
-+ * Copyright (C) 1999, 2002-2003 Hewlett-Packard Co
-  *    David Mosberger-Tang <davidm@hpl.hp.com>
-  */
-@@ -34,7 +34,7 @@ static union {
-               struct thread_info thread_info;
-       } s;
-       unsigned long stack[KERNEL_STACK_SIZE/sizeof (unsigned long)];
--} init_task_mem __attribute__((section(".data.init_task"))) = {{
-+} init_task_mem asm ("init_task_mem") __attribute__((section(".data.init_task"))) = {{
-       .task =         INIT_TASK(init_task_mem.s.task),
-       .thread_info =  INIT_THREAD_INFO(init_task_mem.s.task)
- }};
---- linux-2.6.0-test1/arch/ia64/kernel/iosapic.c       2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/iosapic.c      2003-07-19 17:04:06.000000000 -0700
-@@ -274,7 +274,7 @@ unmask_irq (unsigned int irq)
- static void
--iosapic_set_affinity (unsigned int irq, unsigned long mask)
-+iosapic_set_affinity (unsigned int irq, cpumask_t mask)
- {
- #ifdef CONFIG_SMP
-       unsigned long flags;
-@@ -287,12 +287,10 @@ iosapic_set_affinity (unsigned int irq, 
-       irq &= (~IA64_IRQ_REDIRECTED);
-       vec = irq_to_vector(irq);
--      mask &= cpu_online_map;
--
--      if (!mask || vec >= IA64_NUM_VECTORS)
-+      if (cpus_empty(mask) || vec >= IA64_NUM_VECTORS)
-               return;
--      dest = cpu_physical_id(ffz(~mask));
-+      dest = cpu_physical_id(first_cpu(mask));
-       rte_index = iosapic_intr_info[vec].rte_index;
-       addr = iosapic_intr_info[vec].addr;
-@@ -717,6 +715,7 @@ iosapic_parse_prt (void)
-                       register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY, IOSAPIC_POL_LOW,
-                                     IOSAPIC_LEVEL);
-               }
-+              entry->irq = vector;
-               snprintf(pci_id, sizeof(pci_id), "%02x:%02x:%02x[%c]",
-                        entry->id.segment, entry->id.bus, entry->id.device, 'A' + entry->pin);
---- linux-2.6.0-test1/arch/ia64/kernel/irq.c   2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/irq.c  2003-07-19 17:04:06.000000000 -0700
-@@ -898,13 +898,14 @@ int setup_irq(unsigned int irq, struct i
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
--static unsigned int parse_hex_value (const char *buffer,
--              unsigned long count, unsigned long *ret)
-+static unsigned int parse_hex_value(const char *buffer,
-+              unsigned long count, cpumask_t *ret)
- {
--      unsigned char hexnum [HEX_DIGITS];
--      unsigned long value, i;
-+      unsigned char hexnum[HEX_DIGITS];
-+      cpumask_t value = CPU_MASK_NONE;
-+      unsigned long i;
-       if (!count)
-               return -EINVAL;
-@@ -917,10 +918,9 @@ static unsigned int parse_hex_value (con
-        * Parse the first 8 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
--      value = 0;
--
-       for (i = 0; i < count; i++) {
-               unsigned int c = hexnum[i];
-+              int k;
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-@@ -929,7 +929,10 @@ static unsigned int parse_hex_value (con
-               default:
-                       goto out;
-               }
--              value = (value << 4) | c;
-+              cpus_shift_left(value, value, 4);
-+              for (k = 0; k < 4; ++k)
-+                      if (test_bit(k, (unsigned long *)&c))
-+                              cpu_set(k, value);
-       }
- out:
-       *ret = value;
-@@ -940,12 +943,15 @@ out:
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
-+
- static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 };
- void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
- {
--      unsigned long mask = 1UL<<cpu_logical_id(hwid);
-+      cpumask_t mask = CPU_MASK_NONE;
-+
-+      cpu_set(cpu_logical_id(hwid), mask);
-       if (irq < NR_IRQS) {
-               irq_affinity[irq] = mask;
-@@ -956,10 +962,21 @@ void set_irq_affinity_info (unsigned int
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
--      if (count < HEX_DIGITS+3)
-+      int k, len;
-+      cpumask_t tmp = irq_affinity[(long)data];
-+
-+      if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%s%08lx\n", irq_redir[(unsigned long)data] ? "r " : "",
--                      irq_affinity[(unsigned long)data]);
-+
-+      len = 0;
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
-@@ -967,7 +984,7 @@ static int irq_affinity_write_proc (stru
- {
-       unsigned int irq = (unsigned long) data;
-       int full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t new_value, tmp;
-       const char *buf = buffer;
-       irq_desc_t *desc = irq_descp(irq);
-       int redir;
-@@ -991,7 +1008,8 @@ static int irq_affinity_write_proc (stru
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, new_value, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
-       desc->handler->set_affinity(irq | (redir? IA64_IRQ_REDIRECTED : 0), new_value);
-@@ -1003,18 +1021,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
--      unsigned long *mask = (unsigned long *) data;
-+      cpumask_t *mask = (cpumask_t *)data;
-+      int k, len = 0;
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", *mask);
-+
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(unsigned long); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(*mask));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(*mask, *mask, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data;
--      int full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t *mask = (cpumask_t *)data;
-+      unsigned long full_count = count, err;
-+      cpumask_t new_value;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
-@@ -1058,7 +1086,7 @@ static void register_irq_proc (unsigned 
- #endif
- }
--unsigned long prof_cpu_mask = -1;
-+cpumask_t prof_cpu_mask = CPU_MASK_ALL;
- void init_irq_proc (void)
- {
---- linux-2.6.0-test1/arch/ia64/kernel/module.c        2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/kernel/module.c       2003-07-19 17:03:49.000000000 -0700
-@@ -164,7 +164,7 @@ static int
- apply_imm64 (struct module *mod, struct insn *insn, uint64_t val)
- {
-       if (slot(insn) != 2) {
--              printk(KERN_ERR "%s: illegal slot number %d for IMM64\n",
-+              printk(KERN_ERR "%s: invalid slot number %d for IMM64\n",
-                      mod->name, slot(insn));
-               return 0;
-       }
-@@ -176,7 +176,7 @@ static int
- apply_imm60 (struct module *mod, struct insn *insn, uint64_t val)
- {
-       if (slot(insn) != 2) {
--              printk(KERN_ERR "%s: illegal slot number %d for IMM60\n",
-+              printk(KERN_ERR "%s: invalid slot number %d for IMM60\n",
-                      mod->name, slot(insn));
-               return 0;
-       }
---- linux-2.6.0-test1/arch/ia64/kernel/perfmon.c       2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/perfmon.c      2003-07-19 17:04:06.000000000 -0700
-@@ -221,14 +221,6 @@
- #define PFM_REG_RETFLAG_SET(flags, val)       do { flags &= ~PFM_REG_RETFL_MASK; flags |= (val); } while(0)
--#ifdef CONFIG_SMP
--#define PFM_CPU_ONLINE_MAP    cpu_online_map
--#define cpu_is_online(i)      (PFM_CPU_ONLINE_MAP & (1UL << i))
--#else
--#define PFM_CPU_ONLINE_MAP     1UL
--#define cpu_is_online(i)      (i==0)
--#endif
--
- /*
-  * cmp0 must be the value of pmc0
-  */
-@@ -566,7 +558,7 @@ static struct vm_operations_struct pfm_v
- #define pfm_wait_task_inactive(t)     wait_task_inactive(t)
--#define pfm_get_cpu_var(v)            __get_cpu_var(v)
-+#define pfm_get_cpu_var(v)            __ia64_per_cpu_var(v)
- #define pfm_get_cpu_data(a,b)         per_cpu(a, b)
- typedef       irqreturn_t     pfm_irq_handler_t;
- #define PFM_IRQ_HANDLER_RET(v)        do {  \
-@@ -5354,7 +5346,7 @@ pfm_proc_info(char *page)
-               p += sprintf(p, "ovfl_mask                 : 0x%lx\n", pmu_conf.ovfl_val);
-       for(i=0; i < NR_CPUS; i++) {
--              if (cpu_is_online(i) == 0) continue;
-+              if (cpu_online(i) == 0) continue;
-               p += sprintf(p, "CPU%-2d overflow intrs      : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_count);
-               p += sprintf(p, "CPU%-2d overflow cycles     : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_cycles);
-               p += sprintf(p, "CPU%-2d overflow min        : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_cycles_min);
-@@ -5372,7 +5364,7 @@ pfm_proc_info(char *page)
-               p += sprintf(p, "CPU%-2d activations         : %lu\n", i, pfm_get_cpu_data(pmu_activation_number,i));
-       }
--      if (hweight64(PFM_CPU_ONLINE_MAP) == 1)
-+      if (num_online_cpus() == 1)
-       {
-               psr = pfm_get_psr();
-               ia64_srlz_d();
---- linux-2.6.0-test1/arch/ia64/kernel/ptrace.c        2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/kernel/ptrace.c       2003-07-19 17:03:49.000000000 -0700
-@@ -42,7 +42,7 @@
-       (IA64_PSR_UM | IA64_PSR_DB | IA64_PSR_IS | IA64_PSR_ID | IA64_PSR_DD | IA64_PSR_RI)
- #define IPSR_READ_MASK        IPSR_WRITE_MASK
--#define PTRACE_DEBUG  1
-+#define PTRACE_DEBUG  0
- #if PTRACE_DEBUG
- # define dprintk(format...)   printk(format)
---- linux-2.6.0-test1/arch/ia64/kernel/setup.c 2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/kernel/setup.c        2003-07-19 17:04:07.000000000 -0700
-@@ -56,6 +56,7 @@ unsigned long __per_cpu_offset[NR_CPUS];
- #endif
- DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
-+DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
- DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
- unsigned long ia64_cycles_per_usec;
- struct ia64_boot_param *ia64_boot_param;
-@@ -558,7 +559,7 @@ static void *
- c_start (struct seq_file *m, loff_t *pos)
- {
- #ifdef CONFIG_SMP
--      while (*pos < NR_CPUS && !(cpu_online_map & (1UL << *pos)))
-+      while (*pos < NR_CPUS && !cpu_isset(*pos, cpu_online_map))
-               ++*pos;
- #endif
-       return *pos < NR_CPUS ? cpu_data(*pos) : NULL;
-@@ -709,6 +710,8 @@ cpu_init (void)
-                       memcpy(cpu_data, __phys_per_cpu_start, __per_cpu_end - __per_cpu_start);
-                       __per_cpu_offset[cpu] = (char *) cpu_data - __per_cpu_start;
-                       cpu_data += PERCPU_PAGE_SIZE;
-+
-+                      per_cpu(local_per_cpu_offset, cpu) = __per_cpu_offset[cpu];
-               }
-       }
-       cpu_data = __per_cpu_start + __per_cpu_offset[smp_processor_id()];
-@@ -716,19 +719,18 @@ cpu_init (void)
-       cpu_data = __phys_per_cpu_start;
- #endif /* !CONFIG_SMP */
--      cpu_info = cpu_data + ((char *) &__get_cpu_var(cpu_info) - __per_cpu_start);
--#ifdef CONFIG_NUMA
--      cpu_info->node_data = get_node_data_ptr();
--#endif
--
-       get_max_cacheline_size();
-       /*
-        * We can't pass "local_cpu_data" to identify_cpu() because we haven't called
-        * ia64_mmu_init() yet.  And we can't call ia64_mmu_init() first because it
-        * depends on the data returned by identify_cpu().  We break the dependency by
--       * accessing cpu_data() the old way, through identity mapped space.
-+       * accessing cpu_data() through the canonical per-CPU address.
-        */
-+      cpu_info = cpu_data + ((char *) &__ia64_per_cpu_var(cpu_info) - __per_cpu_start);
-+#ifdef CONFIG_NUMA
-+      cpu_info->node_data = get_node_data_ptr();
-+#endif
-       identify_cpu(cpu_info);
- #ifdef CONFIG_MCKINLEY
---- linux-2.6.0-test1/arch/ia64/kernel/smpboot.c       2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/kernel/smpboot.c      2003-07-19 17:04:07.000000000 -0700
-@@ -79,13 +79,13 @@ int cpucount;
- task_t *task_for_booting_cpu;
- /* Bitmask of currently online CPUs */
--volatile unsigned long cpu_online_map;
--unsigned long phys_cpu_present_map;
-+cpumask_t cpu_online_map;
-+cpumask_t phys_cpu_present_map;
- /* which logical CPU number maps to which CPU (physical APIC ID) */
- volatile int ia64_cpu_to_sapicid[NR_CPUS];
--static volatile unsigned long cpu_callin_map;
-+static volatile cpumask_t cpu_callin_map;
- struct smp_boot_data smp_boot_data __initdata;
-@@ -282,7 +282,7 @@ smp_callin (void)
-       cpuid = smp_processor_id();
-       phys_id = hard_smp_processor_id();
--      if (test_and_set_bit(cpuid, &cpu_online_map)) {
-+      if (cpu_test_and_set(cpuid, cpu_online_map)) {
-               printk(KERN_ERR "huh, phys CPU#0x%x, CPU#0x%x already present??\n",
-                      phys_id, cpuid);
-               BUG();
-@@ -327,7 +327,7 @@ smp_callin (void)
-       /*
-        * Allow the master to continue.
-        */
--      set_bit(cpuid, &cpu_callin_map);
-+      cpu_set(cpuid, cpu_callin_map);
-       Dprintk("Stack on CPU %d at about %p\n",cpuid, &cpuid);
- }
-@@ -391,19 +391,19 @@ do_boot_cpu (int sapicid, int cpu)
-        */
-       Dprintk("Waiting on callin_map ...");
-       for (timeout = 0; timeout < 100000; timeout++) {
--              if (test_bit(cpu, &cpu_callin_map))
-+              if (cpu_isset(cpu, cpu_callin_map))
-                       break;  /* It has booted */
-               udelay(100);
-       }
-       Dprintk("\n");
--      if (test_bit(cpu, &cpu_callin_map)) {
-+      if (cpu_isset(cpu, cpu_callin_map)) {
-               /* number CPUs logically, starting from 1 (BSP is 0) */
-               printk(KERN_INFO "CPU%d: CPU has booted.\n", cpu);
-       } else {
-               printk(KERN_ERR "Processor 0x%x/0x%x is stuck.\n", cpu, sapicid);
-               ia64_cpu_to_sapicid[cpu] = -1;
--              clear_bit(cpu, &cpu_online_map);  /* was set in smp_callin() */
-+              cpu_clear(cpu, cpu_online_map);  /* was set in smp_callin() */
-               return -EINVAL;
-       }
-       return 0;
-@@ -446,13 +446,14 @@ smp_build_cpu_map (void)
-               ia64_cpu_to_sapicid[cpu] = -1;
-       ia64_cpu_to_sapicid[0] = boot_cpu_id;
--      phys_cpu_present_map = 1;
-+      cpus_clear(phys_cpu_present_map);
-+      cpu_set(0, phys_cpu_present_map);
-       for (cpu = 1, i = 0; i < smp_boot_data.cpu_count; i++) {
-               sapicid = smp_boot_data.cpu_phys_id[i];
-               if (sapicid == boot_cpu_id)
-                       continue;
--              phys_cpu_present_map |= (1UL << cpu);
-+              cpu_set(cpu, phys_cpu_present_map);
-               ia64_cpu_to_sapicid[cpu] = sapicid;
-               cpu++;
-       }
-@@ -463,7 +464,7 @@ smp_build_cpu_map (void)
- /* on which node is each logical CPU (one cacheline even for 64 CPUs) */
- volatile char cpu_to_node_map[NR_CPUS] __cacheline_aligned;
- /* which logical CPUs are on which nodes */
--volatile unsigned long node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned;
-+volatile cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned;
- /*
-  * Build cpu to node mapping and initialize the per node cpu masks.
-@@ -474,7 +475,7 @@ build_cpu_to_node_map (void)
-       int cpu, i, node;
-       for(node=0; node<MAX_NUMNODES; node++)
--              node_to_cpu_mask[node] = 0;
-+              cpus_clear(node_to_cpu_mask[node]);
-       for(cpu = 0; cpu < NR_CPUS; ++cpu) {
-               /*
-                * All Itanium NUMA platforms I know use ACPI, so maybe we
-@@ -492,7 +493,7 @@ build_cpu_to_node_map (void)
- #endif
-               cpu_to_node_map[cpu] = node;
-               if (node >= 0)
--                      node_to_cpu_mask[node] |= (1UL << cpu);
-+                      cpu_set(cpu, node_to_cpu_mask[node]);
-       }
- }
-@@ -515,8 +516,8 @@ smp_prepare_cpus (unsigned int max_cpus)
-       /*
-        * We have the boot CPU online for sure.
-        */
--      set_bit(0, &cpu_online_map);
--      set_bit(0, &cpu_callin_map);
-+      cpu_set(0, cpu_online_map);
-+      cpu_set(0, cpu_callin_map);
-       local_cpu_data->loops_per_jiffy = loops_per_jiffy;
-       ia64_cpu_to_sapicid[0] = boot_cpu_id;
-@@ -531,15 +532,18 @@ smp_prepare_cpus (unsigned int max_cpus)
-        */
-       if (!max_cpus) {
-               printk(KERN_INFO "SMP mode deactivated.\n");
--              cpu_online_map = phys_cpu_present_map = 1;
-+              cpus_clear(cpu_online_map);
-+              cpus_clear(phys_cpu_present_map);
-+              cpu_set(1, cpu_online_map);
-+              cpu_set(1, phys_cpu_present_map);
-               return;
-       }
- }
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &cpu_callin_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_callin_map);
- }
- void
---- linux-2.6.0-test1/arch/ia64/kernel/smp.c   2003-06-14 12:18:50.000000000 -0700
-+++ 25/arch/ia64/kernel/smp.c  2003-07-19 17:04:07.000000000 -0700
-@@ -72,7 +72,7 @@ static volatile struct call_data_struct 
- #define IPI_CPU_STOP          1
- /* This needs to be cacheline aligned because it is written to by *other* CPUs.  */
--static DEFINE_PER_CPU(__u64, ipi_operation) ____cacheline_aligned;
-+static DEFINE_PER_CPU(u64, ipi_operation) ____cacheline_aligned;
- static void
- stop_this_cpu (void)
-@@ -81,7 +81,7 @@ stop_this_cpu (void)
-       /*
-        * Remove this CPU:
-        */
--      clear_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_clear(smp_processor_id(), cpu_online_map);
-       max_xtp();
-       local_irq_disable();
-       cpu_halt();
-@@ -91,7 +91,7 @@ irqreturn_t
- handle_IPI (int irq, void *dev_id, struct pt_regs *regs)
- {
-       int this_cpu = get_cpu();
--      unsigned long *pending_ipis = &__get_cpu_var(ipi_operation);
-+      unsigned long *pending_ipis = &__ia64_per_cpu_var(ipi_operation);
-       unsigned long ops;
-       /* Count this now; we may make a call that never returns. */
---- linux-2.6.0-test1/arch/ia64/kernel/time.c  2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/ia64/kernel/time.c 2003-07-19 17:04:07.000000000 -0700
-@@ -40,13 +40,13 @@ unsigned long last_cli_ip;
- static void
- do_profile (unsigned long ip)
- {
--      extern unsigned long prof_cpu_mask;
-+      extern cpumask_t prof_cpu_mask;
-       extern char _stext;
-       if (!prof_buffer)
-               return;
--      if (!((1UL << smp_processor_id()) & prof_cpu_mask))
-+      if (!cpu_isset(smp_processor_id(), prof_cpu_mask))
-               return;
-       ip -= (unsigned long) &_stext;
-@@ -83,12 +83,11 @@ unsigned long
- itc_get_offset (void)
- {
-       unsigned long elapsed_cycles, lost = jiffies - wall_jiffies;
--      unsigned long now, last_tick;
-+      unsigned long now = ia64_get_itc(), last_tick;
-       last_tick = (cpu_data(TIME_KEEPER_ID)->itm_next
-                    - (lost + 1)*cpu_data(TIME_KEEPER_ID)->itm_delta);
--      now = ia64_get_itc();
-       if (unlikely((long) (now - last_tick) < 0)) {
-               printk(KERN_ERR "CPU %d: now < last_tick (now=0x%lx,last_tick=0x%lx)!\n",
-                      smp_processor_id(), now, last_tick);
---- linux-2.6.0-test1/arch/ia64/Makefile       2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/Makefile      2003-07-19 17:03:49.000000000 -0700
-@@ -66,8 +66,7 @@ core-$(CONFIG_IA64_SGI_SN2)  += arch/ia64
- drivers-$(CONFIG_PCI)         += arch/ia64/pci/
- drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/
- drivers-$(CONFIG_IA64_HP_ZX1) += arch/ia64/hp/common/ arch/ia64/hp/zx1/
--drivers-$(CONFIG_IA64_GENERIC)        += arch/ia64/hp/common/ arch/ia64/hp/zx1/ arch/ia64/hp/sim/ \
--                                 arch/ia64/sn/
-+drivers-$(CONFIG_IA64_GENERIC)        += arch/ia64/hp/common/ arch/ia64/hp/zx1/ arch/ia64/hp/sim/
- boot := arch/ia64/boot
---- linux-2.6.0-test1/arch/ia64/mm/hugetlbpage.c       2003-06-22 12:04:43.000000000 -0700
-+++ 25/arch/ia64/mm/hugetlbpage.c      2003-07-19 17:07:16.000000000 -0700
-@@ -60,9 +60,9 @@ huge_pte_alloc (struct mm_struct *mm, un
-       pte_t *pte = NULL;
-       pgd = pgd_offset(mm, taddr);
--      pmd = pmd_alloc(mm, pgd, taddr);
-+      pmd = pmd_alloc_map(mm, pgd, taddr);
-       if (pmd)
--              pte = pte_alloc_map(mm, pmd, taddr);
-+              pte = pte_alloc_map(mm, pgd, &pmd, taddr);
-       return pte;
- }
---- linux-2.6.0-test1/arch/ia64/mm/init.c      2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/mm/init.c     2003-07-19 17:07:16.000000000 -0700
-@@ -286,10 +286,10 @@ put_kernel_page (struct page *page, unsi
-       spin_lock(&init_mm.page_table_lock);
-       {
--              pmd = pmd_alloc(&init_mm, pgd, address);
-+              pmd = pmd_alloc_kernel(&init_mm, pgd, address);
-               if (!pmd)
-                       goto out;
--              pte = pte_alloc_map(&init_mm, pmd, address);
-+              pte = pte_alloc_map(&init_mm, pgd, &pmd, address);
-               if (!pte)
-                       goto out;
-               if (!pte_none(*pte)) {
---- linux-2.6.0-test1/arch/ia64/pci/pci.c      2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ia64/pci/pci.c     2003-07-19 17:03:49.000000000 -0700
-@@ -124,7 +124,7 @@ subsys_initcall(pci_acpi_init);
- /* Called by ACPI when it finds a new root bus.  */
--static struct pci_controller *
-+static struct pci_controller * __devinit
- alloc_pci_controller (int seg)
- {
-       struct pci_controller *controller;
-@@ -138,7 +138,7 @@ alloc_pci_controller (int seg)
-       return controller;
- }
--static int
-+static int __devinit
- alloc_resource (char *name, struct resource *root, unsigned long start, unsigned long end, unsigned long flags)
- {
-       struct resource *res;
-@@ -159,7 +159,7 @@ alloc_resource (char *name, struct resou
-       return 0;
- }
--static u64
-+static u64 __devinit
- add_io_space (struct acpi_resource_address64 *addr)
- {
-       u64 offset;
-@@ -190,7 +190,7 @@ add_io_space (struct acpi_resource_addre
-       return IO_SPACE_BASE(i);
- }
--static acpi_status
-+static acpi_status __devinit
- count_window (struct acpi_resource *resource, void *data)
- {
-       unsigned int *windows = (unsigned int *) data;
-@@ -211,7 +211,7 @@ struct pci_root_info {
-       char *name;
- };
--static acpi_status
-+static acpi_status __devinit
- add_window (struct acpi_resource *res, void *data)
- {
-       struct pci_root_info *info = (struct pci_root_info *) data;
-@@ -252,7 +252,7 @@ add_window (struct acpi_resource *res, v
-       return AE_OK;
- }
--struct pci_bus *
-+struct pci_bus * __devinit
- pci_acpi_scan_root (struct acpi_device *device, int domain, int bus)
- {
-       struct pci_root_info info;
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/ia64/scripts/check-model.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1 @@
-+int __attribute__ ((__model__ (__small__))) x;
---- linux-2.6.0-test1/arch/ia64/scripts/toolchain-flags        2003-07-02 14:53:12.000000000 -0700
-+++ 25/arch/ia64/scripts/toolchain-flags       2003-07-19 17:03:49.000000000 -0700
-@@ -2,6 +2,7 @@
- #
- # Check whether linker can handle cross-segment @segrel():
- #
-+CPPFLAGS=""
- CC=$1
- OBJDUMP=$2
- dir=$(dirname $0)
-@@ -11,10 +12,17 @@ $CC -nostdlib -static -Wl,-T$dir/check-s
- res=$($OBJDUMP --full --section .rodata $out | fgrep 000 | cut -f3 -d' ')
- rm -f $out
- if [ $res != 00000a00 ]; then
--    echo " -DHAVE_BUGGY_SEGREL"
-+    CPPFLAGS="$CPPFLAGS -DHAVE_BUGGY_SEGREL"
-     cat >&2 <<EOF
- warning: your linker cannot handle cross-segment segment-relative relocations.
-          please upgrade to a newer version (it is safe to use this linker, but
-          the kernel will be bigger than strictly necessary).
- EOF
- fi
-+
-+if ! $CC -c $dir/check-model.c -o $out | grep -q 'attribute directive ignored'
-+then
-+    CPPFLAGS="$CPPFLAGS -DHAVE_MODEL_SMALL_ATTRIBUTE"
-+fi
-+rm -f $out
-+echo $CPPFLAGS
---- linux-2.6.0-test1/arch/m68k/apollo/dn_ints.c       2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/m68k/apollo/dn_ints.c      2003-07-19 17:03:49.000000000 -0700
-@@ -46,7 +46,7 @@ void dn_init_IRQ(void) {
- int dn_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) {
-   if((irq<0) || (irq>15)) {
--    printk("Trying to request illegal IRQ\n");
-+    printk("Trying to request invalid IRQ\n");
-     return -ENXIO;
-   }
-@@ -72,7 +72,7 @@ int dn_request_irq(unsigned int irq, irq
- void dn_free_irq(unsigned int irq, void *dev_id) {
-   if((irq<0) || (irq>15)) {
--    printk("Trying to free illegal IRQ\n");
-+    printk("Trying to free invalid IRQ\n");
-     return ;
-   }
---- linux-2.6.0-test1/arch/m68k/atari/stram.c  2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/m68k/atari/stram.c 2003-07-19 17:03:49.000000000 -0700
-@@ -37,7 +37,6 @@
- #define MAJOR_NR    Z2RAM_MAJOR
- #define do_z2_request do_stram_request
- #define DEVICE_NR(device) (minor(device))
--#include <linux/blk.h>
- #endif
- #undef DEBUG
---- linux-2.6.0-test1/arch/m68k/kernel/head.S  2003-06-14 12:18:51.000000000 -0700
-+++ 25/arch/m68k/kernel/head.S 2003-07-19 17:07:16.000000000 -0700
-@@ -110,7 +110,7 @@
-  * 
-  *    These routines are used by other mmu routines to get a pointer into
-  * a table, if necessary a new table is allocated. These routines are working
-- * basically like pmd_alloc() and pte_alloc() in <asm/pgtable.h>. The root
-+ * basically like pmd_alloc_map() and pte_alloc_map() in <asm/pgtable.h>. The root
-  * table needs of course only to be allocated once in mmu_get_root_table_entry,
-  * so that here also some mmu specific initialization is done. The second page
-  * at the start of the kernel (the first page is unmapped later) is used for
---- linux-2.6.0-test1/arch/m68k/mm/init.c      2003-06-14 12:18:32.000000000 -0700
-+++ 25/arch/m68k/mm/init.c     2003-07-19 17:03:49.000000000 -0700
-@@ -17,9 +17,6 @@
- #include <linux/types.h>
- #include <linux/init.h>
- #include <linux/bootmem.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <asm/setup.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/arch/m68k/mm/kmap.c      2003-06-14 12:18:35.000000000 -0700
-+++ 25/arch/m68k/mm/kmap.c     2003-07-19 17:07:16.000000000 -0700
-@@ -189,7 +189,7 @@ void *__ioremap(unsigned long physaddr, 
-                       printk ("\npa=%#lx va=%#lx ", physaddr, virtaddr);
- #endif
-               pgd_dir = pgd_offset_k(virtaddr);
--              pmd_dir = pmd_alloc(&init_mm, pgd_dir, virtaddr);
-+              pmd_dir = pmd_alloc_kernel(&init_mm, pgd_dir, virtaddr);
-               if (!pmd_dir) {
-                       printk("ioremap: no mem for pmd_dir\n");
-                       return NULL;
---- linux-2.6.0-test1/arch/m68k/mm/motorola.c  2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/m68k/mm/motorola.c 2003-07-19 17:03:49.000000000 -0700
-@@ -18,9 +18,6 @@
- #include <linux/types.h>
- #include <linux/init.h>
- #include <linux/bootmem.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <asm/setup.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/arch/m68k/mm/sun3mmu.c   2003-06-14 12:18:05.000000000 -0700
-+++ 25/arch/m68k/mm/sun3mmu.c  2003-07-19 17:03:49.000000000 -0700
-@@ -16,9 +16,6 @@
- #include <linux/string.h>
- #include <linux/types.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/bootmem.h>
- #include <asm/setup.h>
---- linux-2.6.0-test1/arch/m68knommu/kernel/setup.c    2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/m68knommu/kernel/setup.c   2003-07-19 17:03:49.000000000 -0700
-@@ -37,7 +37,6 @@
- #include <asm/machdep.h>
- #ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
- #include <asm/pgtable.h>
- #endif
---- linux-2.6.0-test1/arch/m68knommu/mm/init.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/m68knommu/mm/init.c        2003-07-19 17:03:49.000000000 -0700
-@@ -27,9 +27,6 @@
- #include <linux/mm.h>
- #include <linux/swap.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/highmem.h>
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/arch/m68k/q40/q40ints.c  2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/m68k/q40/q40ints.c 2003-07-19 17:03:49.000000000 -0700
-@@ -171,7 +171,7 @@ void q40_free_irq(unsigned int irq, void
-         {
-         case 1: case 2: case 8: case 9:
-         case 12: case 13:
--          printk("%s: ISA IRQ %d from %x illegal\n", __FUNCTION__, irq, (unsigned)dev_id);
-+          printk("%s: ISA IRQ %d from %x invalid\n", __FUNCTION__, irq, (unsigned)dev_id);
-           return;
-         case 11: irq=10;
-         default:
---- linux-2.6.0-test1/arch/m68k/sun3x/dvma.c   2003-06-14 12:17:59.000000000 -0700
-+++ 25/arch/m68k/sun3x/dvma.c  2003-07-19 17:07:16.000000000 -0700
-@@ -102,7 +102,7 @@ inline int dvma_map_cpu(unsigned long ka
-               pmd_t *pmd;
-               unsigned long end2;
--              if((pmd = pmd_alloc(&init_mm, pgd, vaddr)) == NULL) {
-+              if((pmd = pmd_alloc_kernel(&init_mm, pgd, vaddr)) == NULL) {
-                       ret = -ENOMEM;
-                       goto out;
-               }
---- linux-2.6.0-test1/arch/mips64/kernel/irq.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/irq.c        2003-07-19 17:04:07.000000000 -0700
-@@ -818,13 +818,13 @@ EXPORT_SYMBOL(probe_irq_mask);
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
- static unsigned int parse_hex_value (const char *buffer,
--              unsigned long count, unsigned long *ret)
-+              unsigned long count, cpumask_t *ret)
- {
-       unsigned char hexnum [HEX_DIGITS];
--      unsigned long value;
-+      cpumask_t value = CPU_MASK_NONE;
-       int i;
-       if (!count)
-@@ -838,10 +838,9 @@ static unsigned int parse_hex_value (con
-        * Parse the first 8 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
--      value = 0;
-       for (i = 0; i < count; i++) {
--              unsigned int c = hexnum[i];
-+              unsigned int k, c = hexnum[i];
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-@@ -850,7 +849,10 @@ static unsigned int parse_hex_value (con
-               default:
-                       goto out;
-               }
--              value = (value << 4) | c;
-+              cpus_shift_left(value, value, 4);
-+              for (k = 0; k < 4; ++k)
-+                      if (c & (1 << k))
-+                              cpu_set(k, value);
-       }
- out:
-       *ret = value;
-@@ -861,20 +863,31 @@ out:
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
-+      int k, len = 0;
-+      cpumask_t tmp = irq_affinity[(long)data];
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
-       int irq = (long) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t new_value, tmp;
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-@@ -886,7 +899,8 @@ static int irq_affinity_write_proc (stru
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, new_value, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
-       irq_affinity[irq] = new_value;
-@@ -900,17 +914,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
--      unsigned long *mask = (unsigned long *) data;
-+      int k, len = 0;
-+      cpumask_t *mask = (cpumask_t *)data, tmp;
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", *mask);
-+
-+      tmp = *mask;
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data, full_count = count, err;
--      unsigned long new_value;
-+      unsigned long full_count = count, err;
-+      cpumask_t new_value, *mask = (cpumask_t *)data;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
---- linux-2.6.0-test1/arch/mips64/kernel/proc.c        2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/proc.c       2003-07-19 17:04:07.000000000 -0700
-@@ -81,7 +81,7 @@ static int show_cpuinfo(struct seq_file 
-       char fmt [64];
- #ifdef CONFIG_SMP
--      if (!CPUMASK_TSTB(cpu_online_map, n))
-+      if (!cpu_isset(n, cpu_online_map))
-               return 0;
- #endif
---- linux-2.6.0-test1/arch/mips64/kernel/setup.c       2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/setup.c      2003-07-19 17:03:49.000000000 -0700
-@@ -28,9 +28,6 @@
- #include <linux/a.out.h>
- #include <linux/tty.h>
- #include <linux/bootmem.h>
--#ifdef CONFIG_BLK_DEV_RAM
--#include <linux/blk.h>
--#endif
- #include <linux/major.h>
- #include <linux/kdev_t.h>
- #include <linux/root_dev.h>
---- linux-2.6.0-test1/arch/mips64/kernel/smp.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips64/kernel/smp.c        2003-07-19 17:04:07.000000000 -0700
-@@ -146,7 +146,7 @@ asmlinkage void start_secondary(void)
-       cpu_data[cpu].udelay_val = loops_per_jiffy;
-       prom_smp_finish();
-       printk("Slave cpu booted successfully\n");
--      CPUMASK_SETB(cpu_online_map, cpu);
-+      cpu_set(cpu, cpu_online_map);
-       atomic_inc(&cpus_booted);
-       cpu_idle();
- }
-@@ -250,7 +250,7 @@ static void stop_this_cpu(void *dummy)
-       /*
-        * Remove this CPU:
-        */
--      clear_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_clear(smp_processor_id(), cpu_online_map);
-       local_irq_enable();     /* May need to service _machine_restart IPI */
-       for (;;);               /* Wait if available. */
- }
---- linux-2.6.0-test1/arch/mips/kernel/irq.c   2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/kernel/irq.c  2003-07-19 17:04:07.000000000 -0700
-@@ -861,20 +861,30 @@ out:
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
-+      int len, k;
-+      cpumask_t tmp = irq_affinity[(long)data];
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
-       int irq = (long) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t new_value, tmp;
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-@@ -886,7 +896,8 @@ static int irq_affinity_write_proc (stru
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, tmp, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
-       irq_affinity[irq] = new_value;
-@@ -900,17 +911,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
--      unsigned long *mask = (unsigned long *) data;
-+      int len, k;
-+      cpumask_t *mask = (cpumask_t *)data, tmp;
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", *mask);
-+      tmp = *mask;
-+
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t *mask = (cpumask_t *)data, new_value;
-+      unsigned long full_count = count, err;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
---- linux-2.6.0-test1/arch/mips/kernel/proc.c  2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/kernel/proc.c 2003-07-19 17:04:07.000000000 -0700
-@@ -81,7 +81,7 @@ static int show_cpuinfo(struct seq_file 
-       char fmt [64];
- #ifdef CONFIG_SMP
--      if (!CPUMASK_TSTB(cpu_online_map, n))
-+      if (!cpu_isset(n, cpu_online_map))
-               return 0;
- #endif
---- linux-2.6.0-test1/arch/mips/kernel/smp.c   2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/kernel/smp.c  2003-07-19 17:04:07.000000000 -0700
-@@ -146,7 +146,7 @@ asmlinkage void start_secondary(void)
-       cpu_data[cpu].udelay_val = loops_per_jiffy;
-       prom_smp_finish();
-       printk("Slave cpu booted successfully\n");
--      CPUMASK_SETB(cpu_online_map, cpu);
-+      cpu_set(cpu, cpu_online_map);
-       atomic_inc(&cpus_booted);
-       cpu_idle();
- }
-@@ -250,7 +250,7 @@ static void stop_this_cpu(void *dummy)
-       /*
-        * Remove this CPU:
-        */
--      clear_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_clear(smp_processor_id(), cpu_online_map);
-       local_irq_enable();     /* May need to service _machine_restart IPI */
-       for (;;);               /* Wait if available. */
- }
---- linux-2.6.0-test1/arch/mips/mm/fault.c     2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/mm/fault.c    2003-07-19 17:03:49.000000000 -0700
-@@ -162,7 +162,7 @@ bad_area:
-               tsk->thread.cp0_badvaddr = address;
-               tsk->thread.error_code = write;
- #if 0
--              printk("do_page_fault() #2: sending SIGSEGV to %s for illegal %s\n"
-+              printk("do_page_fault() #2: sending SIGSEGV to %s for invalid %s\n"
-                      "%08lx (epc == %08lx, ra == %08lx)\n",
-                      tsk->comm,
-                      write ? "write access to" : "read access from",
---- linux-2.6.0-test1/arch/mips/mm/init.c      2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/mm/init.c     2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,7 @@
- #include <linux/bootmem.h>
- #include <linux/highmem.h>
- #include <linux/swap.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/bootinfo.h>
- #include <asm/cacheflush.h>
---- linux-2.6.0-test1/arch/mips/mm/ioremap.c   2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/mm/ioremap.c  2003-07-19 17:07:16.000000000 -0700
-@@ -81,7 +81,7 @@ static int remap_area_pages(unsigned lon
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/mips/momentum/ocelot_c/setup.c      2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/momentum/ocelot_c/setup.c     2003-07-19 17:03:49.000000000 -0700
-@@ -63,7 +63,7 @@
- #include <asm/mc146818rtc.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/mv64340.h>
- #include "ocelot_c_fpga.h"
---- linux-2.6.0-test1/arch/mips/momentum/ocelot_g/setup.c      2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/momentum/ocelot_g/setup.c     2003-07-19 17:03:49.000000000 -0700
-@@ -64,7 +64,7 @@
- #include <asm/mc146818rtc.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "gt64240.h"
- #include "ocelot_pld.h"
---- linux-2.6.0-test1/arch/mips/ramdisk/Makefile       2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/ramdisk/Makefile      2003-07-19 17:03:49.000000000 -0700
-@@ -2,7 +2,7 @@
- # Makefile for a ramdisk image
- #
--O_FORMAT = $(shell $(OBJDUMP) -i | head -2 | grep elf32)
-+O_FORMAT = $(shell $(OBJDUMP) -i | head -n 2 | grep elf32)
- img = $(CONFIG_EMBEDDED_RAMDISK_IMAGE)
- ramdisk.o: $(subst ",,$(img)) ld.script
-       echo "O_FORMAT:  " $(O_FORMAT)
---- linux-2.6.0-test1/arch/mips/sgi-ip27/ip27-init.c   2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sgi-ip27/ip27-init.c  2003-07-19 17:04:07.000000000 -0700
-@@ -481,7 +481,7 @@ static int __init do_boot_cpu(int cpu, i
-        */
-       __cpu_number_map[cpu] = num_cpus;
-       __cpu_logical_map[num_cpus] = cpu;
--      CPUMASK_SETB(cpu_online_map, cpu);
-+      cpu_set(cpu, cpu_online_map);
-       /*
-        * Wait this cpu to start up and initialize its hub,
---- linux-2.6.0-test1/arch/mips/sibyte/cfe/setup.c     2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/cfe/setup.c    2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/bootmem.h>
- #include <linux/smp.h>
---- linux-2.6.0-test1/arch/mips/sibyte/cfe/smp.c       2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/cfe/smp.c      2003-07-19 17:04:07.000000000 -0700
-@@ -63,7 +63,7 @@ void prom_setup_smp(void)
-       /* Use CFE to find out how many CPUs are available */
-       for (i=1; i<NR_CPUS; i++) {
-               if (cfe_cpu_stop(i) == 0) {
--                      CPUMASK_SETB(cpu_online_map, i);
-+                      cpu_set(i, cpu_online_map);
-               }
-       }
-       printk("Detected %i available CPU(s)\n", num_online_cpus());
---- linux-2.6.0-test1/arch/mips/sibyte/sb1250/prom.c   2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/sb1250/prom.c  2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/bootmem.h>
- #include <linux/smp.h>
---- linux-2.6.0-test1/arch/mips/sibyte/sb1250/smp.c    2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/sb1250/smp.c   2003-07-19 17:04:07.000000000 -0700
-@@ -107,8 +107,8 @@ void __init smp_boot_cpus(void)
-       current_thread_info()->cpu = 0;
-       cpu_data[0].udelay_val = loops_per_jiffy;
-       cpu_data[0].asid_cache = ASID_FIRST_VERSION;
--      CPUMASK_CLRALL(cpu_online_map);
--      CPUMASK_SETB(cpu_online_map, 0);
-+      cpus_clear(cpu_online_map);
-+      cpu_set(0, cpu_online_map);
-       atomic_set(&cpus_booted, 1);  /* Master CPU is already booted... */
-       smp_tune_scheduling();
---- linux-2.6.0-test1/arch/mips/sibyte/swarm/setup.c   2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/sibyte/swarm/setup.c  2003-07-19 17:03:49.000000000 -0700
-@@ -23,7 +23,7 @@
- #include <linux/spinlock.h>
- #include <linux/mm.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/ide.h>
- #include <linux/console.h>
---- linux-2.6.0-test1/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c 2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c        2003-07-19 17:03:49.000000000 -0700
-@@ -134,7 +134,7 @@ JP7 is not bus master -- do NOT use -- o
- #include <asm/time.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #ifdef CONFIG_RTC_DS1742
- #include <asm/rtc_ds1742.h>
- #endif
---- linux-2.6.0-test1/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c       2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c      2003-07-19 17:03:49.000000000 -0700
-@@ -62,7 +62,7 @@
- #include <asm/time.h>
- #include <linux/version.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/console.h>
- #ifdef CONFIG_RTC_DS1742
- #include <asm/rtc_ds1742.h>
---- linux-2.6.0-test1/arch/mips/vr41xx/tanbac-tb0229/setup.c   2003-07-02 14:53:13.000000000 -0700
-+++ 25/arch/mips/vr41xx/tanbac-tb0229/setup.c  2003-07-19 17:03:49.000000000 -0700
-@@ -18,7 +18,7 @@
-  *  option) any later version.
-  */
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/console.h>
- #include <linux/init.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/arch/parisc/kernel/ioctl32.c     2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/parisc/kernel/ioctl32.c    2003-07-19 17:03:49.000000000 -0700
-@@ -48,7 +48,6 @@
- #include <linux/raw.h>
- #include <linux/smb_fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
- #include <linux/elevator.h>
- #include <linux/rtc.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/arch/parisc/kernel/pci-dma.c     2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/parisc/kernel/pci-dma.c    2003-07-19 17:07:16.000000000 -0700
-@@ -133,7 +133,7 @@ static inline int map_uncached_pages(uns
-       do {
-               pmd_t *pmd;
-               
--              pmd = pmd_alloc(NULL, dir, vaddr);
-+              pmd = pmd_alloc_kernel(NULL, dir, vaddr);
-               if (!pmd)
-                       return -ENOMEM;
-               if (map_pmd_uncached(pmd, vaddr, end - vaddr, &paddr))
---- linux-2.6.0-test1/arch/parisc/kernel/smp.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/parisc/kernel/smp.c        2003-07-19 17:04:07.000000000 -0700
-@@ -62,14 +62,14 @@ volatile struct task_struct *smp_init_cu
- static volatile int smp_commenced = 0;   /* Set when the idlers are all forked */
- static volatile int cpu_now_booting = 0;      /* track which CPU is booting */
--volatile unsigned long cpu_online_map = 0;   /* Bitmap of online CPUs */
--#define IS_LOGGED_IN(cpunum) (test_bit(cpunum, (atomic_t *)&cpu_online_map))
-+cpumask_t cpu_online_map = CPU_MASK_NONE;   /* Bitmap of online CPUs */
-+#define IS_LOGGED_IN(cpunum) (cpu_isset(cpunum, cpu_online_map))
- int smp_num_cpus = 1;
- int smp_threads_ready = 0;
- unsigned long cache_decay_ticks;
- static int max_cpus = -1;                          /* Command line */
--unsigned long cpu_present_mask;
-+cpumask_t cpu_present_mask;
- struct smp_call_struct {
-       void (*func) (void *info);
-@@ -139,7 +139,7 @@ halt_processor(void) 
- #else
-       /* REVISIT : redirect I/O Interrupts to another CPU? */
-       /* REVISIT : does PM *know* this CPU isn't available? */
--      clear_bit(smp_processor_id(), (void *)&cpu_online_map);
-+      cpu_clear(smp_processor_id(), cpu_online_map);
-       local_irq_disable();
-       for (;;)
-               ;
-@@ -443,7 +443,7 @@ smp_cpu_init(int cpunum)
-       mb();
-       /* Well, support 2.4 linux scheme as well. */
--      if (test_and_set_bit(cpunum, (unsigned long *) (&cpu_online_map)))
-+      if (cpu_test_and_set(cpunum, cpu_online_map))
-       {
-               extern void machine_halt(void); /* arch/parisc.../process.c */
-@@ -624,13 +624,14 @@ void __init smp_boot_cpus(void)
-       printk(KERN_DEBUG "SMP: bootstrap CPU ID is %d\n",bootstrap_processor);
-       init_task.thread_info->cpu = bootstrap_processor; 
-       current->thread_info->cpu = bootstrap_processor;
--      cpu_online_map = 1 << bootstrap_processor; /* Mark Boostrap processor as present */
-+      /* Mark Boostrap processor as present */
-+      cpu_online_map = cpumask_of_cpu(bootstrap_processor);
-       current->active_mm = &init_mm;
- #ifdef ENTRY_SYS_CPUS
-       cpu_data[0].state = STATE_RUNNING;
- #endif
--      cpu_present_mask = 1UL << bootstrap_processor;
-+      cpu_present_mask = cpumask_of_cpu(bootstrap_processor);
-       /* Nothing to do when told not to.  */
-       if (max_cpus == 0) {
-@@ -709,8 +710,8 @@ void __init smp_prepare_cpus(unsigned in
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &cpu_present_mask);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_present_mask);
- }
- int __devinit __cpu_up(unsigned int cpu)
---- linux-2.6.0-test1/arch/parisc/mm/ioremap.c 2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/parisc/mm/ioremap.c        2003-07-19 17:07:16.000000000 -0700
-@@ -77,7 +77,7 @@ static int remap_area_pages(unsigned lon
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(dir, address);
-+              pmd = pmd_alloc_kernel(dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/ppc64/boot/Makefile 2003-06-14 12:18:32.000000000 -0700
-+++ 25/arch/ppc64/boot/Makefile        2003-07-19 17:03:49.000000000 -0700
-@@ -118,7 +118,7 @@ $(obj)/imagesize.c: vmlinux
-       ls -l vmlinux | \
-       awk '{printf "/* generated -- do not edit! */\n" \
-               "unsigned long vmlinux_filesize = %d;\n", $$5}' > $(obj)/imagesize.c
--      $(CROSS_COMPILE)nm -n vmlinux | tail -1 | \
-+      $(CROSS_COMPILE)nm -n vmlinux | tail -n 1 | \
-       awk '{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}' \
-               >> $(obj)/imagesize.c
---- linux-2.6.0-test1/arch/ppc64/Kconfig       2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/ppc64/Kconfig      2003-07-19 17:04:07.000000000 -0700
-@@ -93,7 +93,7 @@ config IRQ_ALL_CPUS
-         CPU.
- config NR_CPUS
--      int "Maximum number of CPUs (2-64)"
-+      int "Maximum number of CPUs (2-128)"
-       depends on SMP
-       default "32"
---- linux-2.6.0-test1/arch/ppc64/kernel/htab.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc64/kernel/htab.c        2003-07-19 17:04:07.000000000 -0700
-@@ -377,6 +377,7 @@ int hash_page(unsigned long ea, unsigned
-       int ret;
-       int user_region = 0;
-       int local = 0;
-+      cpumask_t tmp;
-       /* Check for invalid addresses. */
-       if (!IS_VALID_EA(ea))
-@@ -431,7 +432,8 @@ int hash_page(unsigned long ea, unsigned
-        */
-       spin_lock(&mm->page_table_lock);
--      if (user_region && (mm->cpu_vm_mask == (1 << smp_processor_id())))
-+      tmp = cpumask_of_cpu(smp_processor_id());
-+      if (user_region && cpus_equal(mm->cpu_vm_mask, tmp))
-               local = 1;
-       ptep = find_linux_pte(pgdir, ea);
---- linux-2.6.0-test1/arch/ppc64/kernel/irq.c  2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/ppc64/kernel/irq.c 2003-07-19 17:04:07.000000000 -0700
-@@ -603,26 +603,37 @@ static struct proc_dir_entry * irq_dir [
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
- #ifdef CONFIG_IRQ_ALL_CPUS
--unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = -1UL};
-+cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
- #else  /* CONFIG_IRQ_ALL_CPUS */
--unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = 0x0};
-+cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_NONE };
- #endif /* CONFIG_IRQ_ALL_CPUS */
--#define HEX_DIGITS 16
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
-+      int k, len;
-+      cpumask_t tmp = irq_affinity[(long)data];
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf(page, "%16lx\n", irq_affinity[(long)data]);
-+
-+      for (k = 0; k < sizeof(cpumask_t) / sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static unsigned int parse_hex_value (const char *buffer,
--              unsigned long count, unsigned long *ret)
-+              unsigned long count, cpumask_t *ret)
- {
-       unsigned char hexnum [HEX_DIGITS];
--      unsigned long value;
-+      cpumask_t value = CPU_MASK_NONE;
-       int i;
-       if (!count)
-@@ -636,10 +647,10 @@ static unsigned int parse_hex_value (con
-        * Parse the first 16 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
--      value = 0;
-       for (i = 0; i < count; i++) {
-               unsigned int c = hexnum[i];
-+              int k;
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-@@ -648,7 +659,11 @@ static unsigned int parse_hex_value (con
-               default:
-                       goto out;
-               }
--              value = (value << 4) | c;
-+              cpus_shift_left(value, value, 4);
-+              for (k = 0; k < 4; ++k)
-+                      if (test_bit(k, (unsigned long *)&c))
-+                              cpu_set(k, value);
-+
-       }
- out:
-       *ret = value;
-@@ -659,7 +674,7 @@ static int irq_affinity_write_proc (stru
-                                       unsigned long count, void *data)
- {
-       int irq = (long)data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t new_value, tmp;
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-@@ -671,7 +686,8 @@ static int irq_affinity_write_proc (stru
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, new_value, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
-       irq_affinity[irq] = new_value;
-@@ -692,8 +708,9 @@ static int prof_cpu_mask_read_proc (char
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t *mask = (cpumask_t *)data;
-+      unsigned long full_count = count, err;
-+      cpumask_t new_value;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
---- linux-2.6.0-test1/arch/ppc64/kernel/iSeries_irq.c  2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/ppc64/kernel/iSeries_irq.c 2003-07-19 17:03:49.000000000 -0700
-@@ -29,7 +29,6 @@
- #include <linux/param.h>
- #include <linux/string.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
- #include <linux/ide.h>
- #include <linux/irq.h>
---- linux-2.6.0-test1/arch/ppc64/kernel/open_pic.c     2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc64/kernel/open_pic.c    2003-07-19 17:04:07.000000000 -0700
-@@ -46,7 +46,7 @@ static int broken_ipi_registers;
- OpenPIC_SourcePtr ISU[OPENPIC_MAX_ISU];
- static void openpic_end_irq(unsigned int irq_nr);
--static void openpic_set_affinity(unsigned int irq_nr, unsigned long cpumask);
-+static void openpic_set_affinity(unsigned int irq_nr, cpumask_t cpumask);
- struct hw_interrupt_type open_pic = {
-       " OpenPIC  ",
-@@ -505,7 +505,7 @@ static void openpic_set_spurious(u_int v
- void openpic_init_processor(u_int cpumask)
- {
-       openpic_write(&OpenPIC->Global.Processor_Initialization,
--                    cpumask & cpu_online_map);
-+                    cpumask & cpus_coerce(cpu_online_map));
- }
- #ifdef CONFIG_SMP
-@@ -539,7 +539,7 @@ void openpic_cause_IPI(u_int ipi, u_int 
-       CHECK_THIS_CPU;
-       check_arg_ipi(ipi);
-       openpic_write(&OpenPIC->THIS_CPU.IPI_Dispatch(ipi),
--                    cpumask & cpu_online_map);
-+                    cpumask & cpus_coerce(cpu_online_map));
- }
- void openpic_request_IPIs(void)
-@@ -625,7 +625,7 @@ static void __init openpic_maptimer(u_in
- {
-       check_arg_timer(timer);
-       openpic_write(&OpenPIC->Global.Timer[timer].Destination,
--                    cpumask & cpu_online_map);
-+                    cpumask & cpus_coerce(cpu_online_map));
- }
-@@ -746,9 +746,12 @@ static void openpic_end_irq(unsigned int
-               openpic_eoi();
- }
--static void openpic_set_affinity(unsigned int irq_nr, unsigned long cpumask)
-+static void openpic_set_affinity(unsigned int irq_nr, cpumask_t cpumask)
- {
--      openpic_mapirq(irq_nr - open_pic_irq_offset, cpumask & cpu_online_map);
-+      cpumask_t tmp;
-+
-+      cpus_and(tmp, cpumask, cpu_online_map);
-+      openpic_mapirq(irq_nr - open_pic_irq_offset, cpus_coerce(tmp));
- }
- #ifdef CONFIG_SMP
---- linux-2.6.0-test1/arch/ppc64/kernel/open_pic.h     2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/ppc64/kernel/open_pic.h    2003-07-19 17:04:07.000000000 -0700
-@@ -13,6 +13,7 @@
- #define _PPC64_KERNEL_OPEN_PIC_H
- #include <linux/config.h>
-+#include <linux/cpumask.h>
- #define OPENPIC_SIZE  0x40000
---- linux-2.6.0-test1/arch/ppc64/kernel/pacaData.c     2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/ppc64/kernel/pacaData.c    2003-07-19 17:04:07.000000000 -0700
-@@ -134,5 +134,71 @@ struct paca_struct paca[NR_CPUS] __page_
-       PACAINITDATA(61, 0, 0, 0, 0),
-       PACAINITDATA(62, 0, 0, 0, 0),
-       PACAINITDATA(63, 0, 0, 0, 0),
-+#if NR_CPUS > 64
-+      PACAINITDATA(64, 0, 0, 0, 0),
-+      PACAINITDATA(65, 0, 0, 0, 0),
-+      PACAINITDATA(66, 0, 0, 0, 0),
-+      PACAINITDATA(67, 0, 0, 0, 0),
-+      PACAINITDATA(68, 0, 0, 0, 0),
-+      PACAINITDATA(69, 0, 0, 0, 0),
-+      PACAINITDATA(70, 0, 0, 0, 0),
-+      PACAINITDATA(71, 0, 0, 0, 0),
-+      PACAINITDATA(72, 0, 0, 0, 0),
-+      PACAINITDATA(73, 0, 0, 0, 0),
-+      PACAINITDATA(74, 0, 0, 0, 0),
-+      PACAINITDATA(75, 0, 0, 0, 0),
-+      PACAINITDATA(76, 0, 0, 0, 0),
-+      PACAINITDATA(77, 0, 0, 0, 0),
-+      PACAINITDATA(78, 0, 0, 0, 0),
-+      PACAINITDATA(79, 0, 0, 0, 0),
-+      PACAINITDATA(80, 0, 0, 0, 0),
-+      PACAINITDATA(81, 0, 0, 0, 0),
-+      PACAINITDATA(82, 0, 0, 0, 0),
-+      PACAINITDATA(83, 0, 0, 0, 0),
-+      PACAINITDATA(84, 0, 0, 0, 0),
-+      PACAINITDATA(85, 0, 0, 0, 0),
-+      PACAINITDATA(86, 0, 0, 0, 0),
-+      PACAINITDATA(87, 0, 0, 0, 0),
-+      PACAINITDATA(88, 0, 0, 0, 0),
-+      PACAINITDATA(89, 0, 0, 0, 0),
-+      PACAINITDATA(90, 0, 0, 0, 0),
-+      PACAINITDATA(91, 0, 0, 0, 0),
-+      PACAINITDATA(92, 0, 0, 0, 0),
-+      PACAINITDATA(93, 0, 0, 0, 0),
-+      PACAINITDATA(94, 0, 0, 0, 0),
-+      PACAINITDATA(95, 0, 0, 0, 0),
-+      PACAINITDATA(96, 0, 0, 0, 0),
-+      PACAINITDATA(97, 0, 0, 0, 0),
-+      PACAINITDATA(98, 0, 0, 0, 0),
-+      PACAINITDATA(99, 0, 0, 0, 0),
-+      PACAINITDATA(100, 0, 0, 0, 0),
-+      PACAINITDATA(101, 0, 0, 0, 0),
-+      PACAINITDATA(102, 0, 0, 0, 0),
-+      PACAINITDATA(103, 0, 0, 0, 0),
-+      PACAINITDATA(104, 0, 0, 0, 0),
-+      PACAINITDATA(105, 0, 0, 0, 0),
-+      PACAINITDATA(106, 0, 0, 0, 0),
-+      PACAINITDATA(107, 0, 0, 0, 0),
-+      PACAINITDATA(108, 0, 0, 0, 0),
-+      PACAINITDATA(109, 0, 0, 0, 0),
-+      PACAINITDATA(110, 0, 0, 0, 0),
-+      PACAINITDATA(111, 0, 0, 0, 0),
-+      PACAINITDATA(112, 0, 0, 0, 0),
-+      PACAINITDATA(113, 0, 0, 0, 0),
-+      PACAINITDATA(114, 0, 0, 0, 0),
-+      PACAINITDATA(115, 0, 0, 0, 0),
-+      PACAINITDATA(116, 0, 0, 0, 0),
-+      PACAINITDATA(117, 0, 0, 0, 0),
-+      PACAINITDATA(118, 0, 0, 0, 0),
-+      PACAINITDATA(119, 0, 0, 0, 0),
-+      PACAINITDATA(120, 0, 0, 0, 0),
-+      PACAINITDATA(121, 0, 0, 0, 0),
-+      PACAINITDATA(122, 0, 0, 0, 0),
-+      PACAINITDATA(123, 0, 0, 0, 0),
-+      PACAINITDATA(124, 0, 0, 0, 0),
-+      PACAINITDATA(125, 0, 0, 0, 0),
-+      PACAINITDATA(126, 0, 0, 0, 0),
-+      PACAINITDATA(127, 0, 0, 0, 0),
-+#endif
- #endif
- };
---- linux-2.6.0-test1/arch/ppc64/kernel/prom.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/ppc64/kernel/prom.c        2003-07-19 17:04:07.000000000 -0700
-@@ -27,7 +27,6 @@
- #include <linux/version.h>
- #include <linux/threads.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
- #include <linux/types.h>
- #include <linux/pci.h>
- #include <asm/prom.h>
-@@ -1134,7 +1133,7 @@ prom_init(unsigned long r3, unsigned lon
-       _prom->cpu = (int)(unsigned long)getprop_rval;
-       _xPaca[_prom->cpu].active = 1;
- #ifdef CONFIG_SMP
--      RELOC(cpu_online_map) = 1UL << _prom->cpu;
-+      cpu_set(_prom->cpu, RELOC(cpu_online_map));
- #endif
-       RELOC(boot_cpuid) = _prom->cpu;
---- linux-2.6.0-test1/arch/ppc64/kernel/rtasd.c        2003-06-14 12:18:06.000000000 -0700
-+++ 25/arch/ppc64/kernel/rtasd.c       2003-07-19 17:04:07.000000000 -0700
-@@ -225,7 +225,7 @@ repeat:
-                       continue;
-               DEBUG("scheduling on %d\n", cpu);
--              set_cpus_allowed(current, 1UL << cpu);
-+              set_cpus_allowed(current, cpumask_of_cpu(cpu));
-               DEBUG("watchdog scheduled on cpu %d\n", smp_processor_id());
-               do {
---- linux-2.6.0-test1/arch/ppc64/kernel/semaphore.c    2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/ppc64/kernel/semaphore.c   2003-07-19 17:04:51.000000000 -0700
-@@ -21,6 +21,7 @@
- #include <asm/semaphore.h>
- #include <asm/errno.h>
-+#if 0
- /*
-  * Atomically update sem->count.
-  * This does the equivalent of the following:
-@@ -129,3 +130,140 @@ int __down_interruptible(struct semaphor
-       wake_up(&sem->wait);
-       return retval;
- }
-+#else
-+
-+static __inline__ int atomic_add_negative(int i, atomic_t *v)
-+{
-+      if (atomic_add_return(i, v) < 0)
-+              return 1;
-+      else
-+              return 0;
-+}
-+
-+void __up(struct semaphore *sem)
-+{
-+      wake_up(&sem->wait);
-+}
-+
-+void __down(struct semaphore * sem)
-+{
-+      struct task_struct *tsk = current;
-+      DECLARE_WAITQUEUE(wait, tsk);
-+      unsigned long flags;
-+
-+      tsk->state = TASK_UNINTERRUPTIBLE;
-+      spin_lock_irqsave(&sem->wait.lock, flags);
-+      add_wait_queue_exclusive_locked(&sem->wait, &wait);
-+
-+      sem->sleepers++;
-+      for (;;) {
-+              int sleepers = sem->sleepers;
-+
-+              /*
-+               * Add "everybody else" into it. They aren't
-+               * playing, because we own the spinlock in
-+               * the wait_queue_head.
-+               */
-+              if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-+                      sem->sleepers = 0;
-+                      break;
-+              }
-+              sem->sleepers = 1;      /* us - see -1 above */
-+              spin_unlock_irqrestore(&sem->wait.lock, flags);
-+
-+              schedule();
-+
-+              spin_lock_irqsave(&sem->wait.lock, flags);
-+              tsk->state = TASK_UNINTERRUPTIBLE;
-+      }
-+      remove_wait_queue_locked(&sem->wait, &wait);
-+      wake_up_locked(&sem->wait);
-+      spin_unlock_irqrestore(&sem->wait.lock, flags);
-+      tsk->state = TASK_RUNNING;
-+}
-+
-+int __down_interruptible(struct semaphore * sem)
-+{
-+      int retval = 0;
-+      struct task_struct *tsk = current;
-+      DECLARE_WAITQUEUE(wait, tsk);
-+      unsigned long flags;
-+
-+      tsk->state = TASK_INTERRUPTIBLE;
-+      spin_lock_irqsave(&sem->wait.lock, flags);
-+      add_wait_queue_exclusive_locked(&sem->wait, &wait);
-+
-+      sem->sleepers++;
-+      for (;;) {
-+              int sleepers = sem->sleepers;
-+
-+              /*
-+               * With signals pending, this turns into
-+               * the trylock failure case - we won't be
-+               * sleeping, and we* can't get the lock as
-+               * it has contention. Just correct the count
-+               * and exit.
-+               */
-+              if (signal_pending(current)) {
-+                      retval = -EINTR;
-+                      sem->sleepers = 0;
-+                      atomic_add(sleepers, &sem->count);
-+                      break;
-+              }
-+
-+              /*
-+               * Add "everybody else" into it. They aren't
-+               * playing, because we own the spinlock in
-+               * wait_queue_head. The "-1" is because we're
-+               * still hoping to get the semaphore.
-+               */
-+              if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-+                      sem->sleepers = 0;
-+                      break;
-+              }
-+              sem->sleepers = 1;      /* us - see -1 above */
-+              spin_unlock_irqrestore(&sem->wait.lock, flags);
-+
-+              schedule();
-+
-+              spin_lock_irqsave(&sem->wait.lock, flags);
-+              tsk->state = TASK_INTERRUPTIBLE;
-+      }
-+      remove_wait_queue_locked(&sem->wait, &wait);
-+      wake_up_locked(&sem->wait);
-+      spin_unlock_irqrestore(&sem->wait.lock, flags);
-+
-+      tsk->state = TASK_RUNNING;
-+      return retval;
-+}
-+
-+/*
-+ * Trylock failed - make sure we correct for
-+ * having decremented the count.
-+ *
-+ * We could have done the trylock with a
-+ * single "cmpxchg" without failure cases,
-+ * but then it wouldn't work on a 386.
-+ */
-+int __down_trylock(struct semaphore * sem)
-+{
-+      int sleepers;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&sem->wait.lock, flags);
-+      sleepers = sem->sleepers + 1;
-+      sem->sleepers = 0;
-+
-+      /*
-+       * Add "everybody else" and us into it. They aren't
-+       * playing, because we own the spinlock in the
-+       * wait_queue_head.
-+       */
-+      if (!atomic_add_negative(sleepers, &sem->count)) {
-+              wake_up_locked(&sem->wait);
-+      }
-+
-+      spin_unlock_irqrestore(&sem->wait.lock, flags);
-+      return 1;
-+}
-+#endif
---- linux-2.6.0-test1/arch/ppc64/kernel/setup.c        2003-06-14 12:18:09.000000000 -0700
-+++ 25/arch/ppc64/kernel/setup.c       2003-07-19 17:04:07.000000000 -0700
-@@ -256,7 +256,7 @@ static int show_cpuinfo(struct seq_file 
-               return 0;
-       }
--      if (!(cpu_online_map & (1UL << cpu_id)))
-+      if (!cpu_online(cpu_id))
-               return 0;
- #ifdef CONFIG_SMP
---- linux-2.6.0-test1/arch/ppc64/kernel/smp.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/ppc64/kernel/smp.c 2003-07-19 17:04:07.000000000 -0700
-@@ -53,7 +53,7 @@ int smp_threads_ready;
- unsigned long cache_decay_ticks;
- /* initialised so it doesn't end up in bss */
--unsigned long cpu_online_map = 0;
-+cpumask_t cpu_online_map = CPU_MASK_NONE;
- static struct smp_ops_t *smp_ops;
-@@ -570,7 +570,7 @@ void __init smp_prepare_cpus(unsigned in
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-       /* FIXME: what about cpu_possible()? */
- }
-@@ -631,7 +631,7 @@ int __devinit __cpu_up(unsigned int cpu)
-       if (smp_ops->give_timebase)
-               smp_ops->give_timebase();
--      set_bit(cpu, &cpu_online_map);
-+      cpu_set(cpu, cpu_online_map);
-       return 0;
- }
---- linux-2.6.0-test1/arch/ppc64/kernel/xics.c 2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/ppc64/kernel/xics.c        2003-07-19 17:04:07.000000000 -0700
-@@ -33,7 +33,7 @@ void xics_enable_irq(u_int irq);
- void xics_disable_irq(u_int irq);
- void xics_mask_and_ack_irq(u_int irq);
- void xics_end_irq(u_int irq);
--void xics_set_affinity(unsigned int irq_nr, unsigned long cpumask);
-+void xics_set_affinity(unsigned int irq_nr, cpumask_t cpumask);
- struct hw_interrupt_type xics_pic = {
-       " XICS     ",
-@@ -508,7 +508,7 @@ nextnode:
-       ppc64_boot_msg(0x21, "XICS Done");
- }
--void xics_set_affinity(unsigned int virq, unsigned long cpumask)
-+void xics_set_affinity(unsigned int virq, cpumask_t cpumask)
- {
-         irq_desc_t *desc = irq_desc + virq;
-       unsigned int irq;
-@@ -516,6 +516,8 @@ void xics_set_affinity(unsigned int virq
-       long status;
-       unsigned long xics_status[2];
-       unsigned long newmask;
-+      cpumask_t allcpus = CPU_MASK_ALL;
-+      cpumask_t tmp = CPU_MASK_NONE;
-       virq -= XICS_IRQ_OFFSET;
-       irq = virt_irq_to_real(virq);
-@@ -533,12 +535,13 @@ void xics_set_affinity(unsigned int virq
-       }
-       /* For the moment only implement delivery to all cpus or one cpu */
--      if (cpumask == -1UL) {
-+      if (cpus_equal(cpumask, allcpus)) {
-               newmask = default_distrib_server;
-       } else {
--              if (!(cpumask & cpu_online_map))
-+              cpus_and(tmp, cpu_online_map, cpumask);
-+              if (cpus_empty(tmp))
-                       goto out;
--              newmask = find_first_bit(&cpumask, 8*sizeof(unsigned long));
-+              newmask = first_cpu(cpumask);
-       }
-       status = rtas_call(ibm_set_xive, 3, 1, NULL,
---- linux-2.6.0-test1/arch/ppc64/kernel/XmPciLpEvent.c 2003-06-14 12:18:21.000000000 -0700
-+++ 25/arch/ppc64/kernel/XmPciLpEvent.c        2003-07-19 17:03:49.000000000 -0700
-@@ -12,7 +12,6 @@
- #include <linux/param.h>
- #include <linux/string.h>
- #include <linux/bootmem.h>
--#include <linux/blk.h>
- #include <linux/ide.h>
- #include <asm/iSeries/HvTypes.h>
---- linux-2.6.0-test1/arch/ppc64/mm/init.c     2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ppc64/mm/init.c    2003-07-19 17:07:16.000000000 -0700
-@@ -37,9 +37,6 @@
- #include <linux/bootmem.h>
- #include <linux/highmem.h>
- #include <linux/proc_fs.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>                /* for initrd_* */
--#endif
- #include <asm/pgalloc.h>
- #include <asm/page.h>
-@@ -211,7 +208,7 @@ static void map_io_page(unsigned long ea
-       if (mem_init_done) {
-               spin_lock(&ioremap_mm.page_table_lock);
-               pgdp = pgd_offset_i(ea);
--              pmdp = pmd_alloc(&ioremap_mm, pgdp, ea);
-+              pmdp = pmd_alloc_kernel(&ioremap_mm, pgdp, ea);
-               ptep = pte_alloc_kernel(&ioremap_mm, pmdp, ea);
-               pa = absolute_to_phys(pa);
-@@ -253,7 +250,7 @@ flush_tlb_mm(struct mm_struct *mm)
-               __flush_tlb_range(mm, mp->vm_start, mp->vm_end);
-       /* XXX are there races with checking cpu_vm_mask? - Anton */
--      mm->cpu_vm_mask = 0;
-+      cpus_clear(mm->cpu_vm_mask);
-       spin_unlock(&mm->page_table_lock);
- }
-@@ -270,6 +267,7 @@ flush_tlb_page(struct vm_area_struct *vm
-       pte_t *ptep;
-       pte_t pte;
-       int local = 0;
-+      cpumask_t tmp;
-       switch( REGION_ID(vmaddr) ) {
-       case VMALLOC_REGION_ID:
-@@ -283,7 +281,8 @@ flush_tlb_page(struct vm_area_struct *vm
-               context = vma->vm_mm->context;
-               /* XXX are there races with checking cpu_vm_mask? - Anton */
--              if (vma->vm_mm->cpu_vm_mask == (1 << smp_processor_id()))
-+              tmp = cpumask_of_cpu(smp_processor_id());
-+              if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp))
-                       local = 1;
-               break;
-@@ -319,6 +318,7 @@ __flush_tlb_range(struct mm_struct *mm, 
-       struct ppc64_tlb_batch *batch = &ppc64_tlb_batch[smp_processor_id()];
-       unsigned long i = 0;
-       int local = 0;
-+      cpumask_t tmp;
-       switch(REGION_ID(start)) {
-       case VMALLOC_REGION_ID:
-@@ -332,7 +332,8 @@ __flush_tlb_range(struct mm_struct *mm, 
-               context = mm->context;
-               /* XXX are there races with checking cpu_vm_mask? - Anton */
--              if (mm->cpu_vm_mask == (1 << smp_processor_id()))
-+              tmp = cpumask_of_cpu(smp_processor_id());
-+              if (cpus_equal(mm->cpu_vm_mask, tmp))
-                       local = 1;
-               break;
-@@ -698,6 +699,7 @@ void update_mmu_cache(struct vm_area_str
-       void *pgdir;
-       pte_t *ptep;
-       int local = 0;
-+      cpumask_t tmp;
-       /* handle i-cache coherency */
-       if (!(cur_cpu_spec->cpu_features & CPU_FTR_NOEXECUTE)) {
-@@ -723,7 +725,8 @@ void update_mmu_cache(struct vm_area_str
-       ptep = find_linux_pte(pgdir, ea);
-       vsid = get_vsid(vma->vm_mm->context, ea);
--      if (vma->vm_mm->cpu_vm_mask == (1 << smp_processor_id()))
-+      tmp = cpumask_of_cpu(smp_processor_id());
-+      if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp))
-               local = 1;
-       __hash_page(ea, pte_val(pte) & (_PAGE_USER|_PAGE_RW), vsid, ptep,
---- linux-2.6.0-test1/arch/ppc/kernel/irq.c    2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/ppc/kernel/irq.c   2003-07-19 17:04:07.000000000 -0700
-@@ -44,6 +44,7 @@
- #include <linux/proc_fs.h>
- #include <linux/random.h>
- #include <linux/seq_file.h>
-+#include <linux/cpumask.h>
- #include <asm/uaccess.h>
- #include <asm/bitops.h>
-@@ -420,10 +421,9 @@ void ppc_irq_dispatch_handler(struct pt_
- {
-       int status;
-       struct irqaction *action;
--      int cpu = smp_processor_id();
-       irq_desc_t *desc = irq_desc + irq;
--      kstat_cpu(cpu).irqs[irq]++;
-+      kstat_this_cpu.irqs[irq]++;
-       spin_lock(&desc->lock);
-       ack_irq(irq);   
-       /*
-@@ -565,29 +565,41 @@ static struct proc_dir_entry *irq_dir[NR
- static struct proc_dir_entry *smp_affinity_entry[NR_IRQS];
- #ifdef CONFIG_IRQ_ALL_CPUS
--#define DEFAULT_CPU_AFFINITY 0xffffffff
-+#define DEFAULT_CPU_AFFINITY CPU_MASK_ALL
- #else
--#define DEFAULT_CPU_AFFINITY 0x00000001
-+#define DEFAULT_CPU_AFFINITY cpumask_of_cpu(0)
- #endif
--unsigned int irq_affinity [NR_IRQS] =
-+cpumask_t irq_affinity [NR_IRQS] =
-       { [0 ... NR_IRQS-1] = DEFAULT_CPU_AFFINITY };
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
-+      cpumask_t tmp = irq_affinity[(long)data];
-+      int k, len = 0;
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08x\n", irq_affinity[(int)data]);
-+
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static unsigned int parse_hex_value (const char __user *buffer,
--              unsigned long count, unsigned long *ret)
-+              unsigned long count, cpumask_t *ret)
- {
-       unsigned char hexnum [HEX_DIGITS];
--      unsigned long value;
-+      cpumask_t value = CPU_MASK_NONE;
-       int i;
-       if (!count)
-@@ -601,10 +613,9 @@ static unsigned int parse_hex_value (con
-        * Parse the first 8 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
--      value = 0;
--
-       for (i = 0; i < count; i++) {
-               unsigned int c = hexnum[i];
-+              int k;
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-@@ -613,7 +624,10 @@ static unsigned int parse_hex_value (con
-               default:
-                       goto out;
-               }
--              value = (value << 4) | c;
-+              cpus_shift_left(value, value, 4);
-+              for (k = 0; k < 4; ++k)
-+                      if (c & (1 << k))
-+                              cpu_set(k, value);
-       }
- out:
-       *ret = value;
-@@ -624,7 +638,7 @@ static int irq_affinity_write_proc (stru
-                                       unsigned long count, void *data)
- {
-       int irq = (int) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t new_value, tmp;
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-@@ -641,7 +655,8 @@ static int irq_affinity_write_proc (stru
-        * are actually logical cpu #'s then we have no problem.
-        *  -- Cort <cort@fsmlabs.com>
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, new_value, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
-       irq_affinity[irq] = new_value;
-@@ -653,17 +668,27 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
--      unsigned long *mask = (unsigned long *) data;
-+      cpumask_t mask = *(cpumask_t *)data;
-+      int k, len = 0;
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", *mask);
-+
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(mask));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(mask, mask, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t *mask = (cpumask_t *)data, full_count = count, err;
-+      cpumask_t new_value;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
---- linux-2.6.0-test1/arch/ppc/kernel/misc.S   2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/ppc/kernel/misc.S  2003-07-19 17:03:49.000000000 -0700
-@@ -1375,3 +1375,8 @@ _GLOBAL(sys_call_table)
-       .long sys_clock_gettime
-       .long sys_clock_getres
-       .long sys_clock_nanosleep
-+      .long sys_ni_syscall    /* reserved for swapcontext */
-+      .long sys_tgkill        /* 250 */
-+      .long sys_utimes
-+      .long sys_statfs64
-+      .long sys_fstatfs64
---- linux-2.6.0-test1/arch/ppc/kernel/setup.c  2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/ppc/kernel/setup.c 2003-07-19 17:04:07.000000000 -0700
-@@ -159,7 +159,7 @@ int show_cpuinfo(struct seq_file *m, voi
-       }
- #ifdef CONFIG_SMP
--      if (!(cpu_online_map & (1 << i)))
-+      if (!cpu_online(i))
-               return 0;
-       pvr = cpu_data[i].pvr;
-       lpj = cpu_data[i].loops_per_jiffy;
---- linux-2.6.0-test1/arch/ppc/kernel/smp.c    2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/ppc/kernel/smp.c   2003-07-19 17:04:07.000000000 -0700
-@@ -47,7 +47,7 @@ atomic_t ipi_sent;
- DEFINE_PER_CPU(unsigned int, prof_multiplier);
- DEFINE_PER_CPU(unsigned int, prof_counter);
- unsigned long cache_decay_ticks = HZ/100;
--unsigned long cpu_online_map = 1UL;
-+unsigned long cpu_online_map = cpumask_of_cpu(0);
- unsigned long cpu_possible_map = 1UL;
- int smp_hw_index[NR_CPUS];
- struct thread_info *secondary_ti;
-@@ -361,8 +361,8 @@ void __init smp_prepare_cpus(unsigned in
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &cpu_possible_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_possible_map);
- }
- int __init setup_profiling_timer(unsigned int multiplier)
-@@ -444,7 +444,7 @@ int __cpu_up(unsigned int cpu)
-       printk("Processor %d found.\n", cpu);
-       smp_ops->give_timebase();
--      set_bit(cpu, &cpu_online_map);
-+      cpu_set(cpu, cpu_online_map);
-       return 0;
- }
---- linux-2.6.0-test1/arch/ppc/kernel/syscalls.c       2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/ppc/kernel/syscalls.c      2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,6 @@
-  *
-  */
--#include <linux/config.h>
- #include <linux/errno.h>
- #include <linux/sched.h>
- #include <linux/mm.h>
-@@ -59,10 +58,15 @@ sys_ipc (uint call, int first, int secon
-       version = call >> 16; /* hack for backward compatibility */
-       call &= 0xffff;
--      ret = -EINVAL;
-+      ret = -ENOSYS;
-       switch (call) {
-       case SEMOP:
--              ret = sys_semop (first, (struct sembuf __user *)ptr, second);
-+              ret = sys_semtimedop (first, (struct sembuf __user *)ptr,
-+                                    second, NULL);
-+              break;
-+      case SEMTIMEDOP:
-+              ret = sys_semtimedop (first, (struct sembuf __user *)ptr,
-+                                    second, (const struct timespec *) fifth);
-               break;
-       case SEMGET:
-               ret = sys_semget (first, second, third);
-@@ -258,6 +262,4 @@ int sys_olduname(struct oldold_utsname _
-       return error;
- }
--cond_syscall(sys_pciconfig_read);
--cond_syscall(sys_pciconfig_write);
- cond_syscall(sys_pciconfig_iobase);
---- linux-2.6.0-test1/arch/ppc/kernel/time.c   2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/ppc/kernel/time.c  2003-07-19 17:03:49.000000000 -0700
-@@ -244,7 +244,7 @@ int do_settimeofday(struct timespec *tv)
-       time_t wtm_sec, new_sec = tv->tv_sec;
-       long wtm_nsec, new_nsec = tv->tv_nsec;
-       unsigned long flags;
--      int tb_delta, new_nsec, new_sec;
-+      int tb_delta;
-       if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
-               return -EINVAL;
---- linux-2.6.0-test1/arch/ppc/mm/mem_pieces.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/ppc/mm/mem_pieces.c        2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,6 @@
- #include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/stddef.h>
--#include <linux/blk.h>
- #include <linux/init.h>
- #include "mem_pieces.h"
---- linux-2.6.0-test1/arch/ppc/platforms/4xx/beech.c   2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/ppc/platforms/4xx/beech.c  2003-07-19 17:03:49.000000000 -0700
-@@ -25,7 +25,6 @@
-  *
-  */
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/init.h>
- #include <linux/module.h>
---- linux-2.6.0-test1/arch/ppc/platforms/4xx/sycamore.c        2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/ppc/platforms/4xx/sycamore.c       2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,6 @@
- #include <linux/threads.h>
- #include <linux/param.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/pci.h>
- #include <linux/rtc.h>
---- linux-2.6.0-test1/arch/ppc/platforms/4xx/walnut.c  2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc/platforms/4xx/walnut.c 2003-07-19 17:03:49.000000000 -0700
-@@ -19,7 +19,6 @@
- #include <linux/threads.h>
- #include <linux/param.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/pci.h>
- #include <linux/rtc.h>
---- linux-2.6.0-test1/arch/ppc/platforms/pmac_cpufreq.c        2003-06-14 12:18:23.000000000 -0700
-+++ 25/arch/ppc/platforms/pmac_cpufreq.c       2003-07-19 17:03:49.000000000 -0700
-@@ -176,7 +176,7 @@ do_set_cpu_speed(int speed_mode)
-       
-       freqs.old = cur_freq;
-       freqs.new = (speed_mode == PMAC_CPU_HIGH_SPEED) ? hi_freq : low_freq;
--      freqs.cpu = CPUFREQ_ALL_CPUS;
-+      freqs.cpu = smp_processor_id();
-       cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
-       if (cpufreq_uses_pmu)
---- linux-2.6.0-test1/arch/ppc/platforms/residual.c    2003-06-14 12:18:00.000000000 -0700
-+++ 25/arch/ppc/platforms/residual.c   2003-07-19 17:03:49.000000000 -0700
-@@ -36,7 +36,6 @@
- #include <linux/interrupt.h>
- #include <linux/reboot.h>
- #include <linux/init.h>
--#include <linux/blk.h>
- #include <linux/ioport.h>
- #include <linux/pci.h>
- #include <linux/ide.h>
---- linux-2.6.0-test1/arch/s390/defconfig      2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/defconfig     2003-07-19 17:03:49.000000000 -0700
-@@ -20,6 +20,7 @@ CONFIG_SYSVIPC=y
- CONFIG_SYSCTL=y
- CONFIG_LOG_BUF_SHIFT=17
- # CONFIG_EMBEDDED is not set
-+# CONFIG_KALLSYMS is not set
- CONFIG_FUTEX=y
- CONFIG_EPOLL=y
-@@ -169,7 +170,7 @@ CONFIG_IP_MULTICAST=y
- # CONFIG_INET_AH is not set
- # CONFIG_INET_ESP is not set
- # CONFIG_INET_IPCOMP is not set
--CONFIG_IPV6=m
-+CONFIG_IPV6=y
- # CONFIG_IPV6_PRIVACY is not set
- # CONFIG_INET6_AH is not set
- # CONFIG_INET6_ESP is not set
-@@ -180,7 +181,7 @@ CONFIG_IPV6=m
- #
- # SCTP Configuration (EXPERIMENTAL)
- #
--CONFIG_IPV6_SCTP__=m
-+CONFIG_IPV6_SCTP__=y
- # CONFIG_IP_SCTP is not set
- # CONFIG_ATM is not set
- # CONFIG_VLAN_8021Q is not set
-@@ -383,7 +384,6 @@ CONFIG_IBM_PARTITION=y
- CONFIG_DEBUG_KERNEL=y
- CONFIG_MAGIC_SYSRQ=y
- # CONFIG_DEBUG_SLAB is not set
--# CONFIG_KALLSYMS is not set
- # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
- #
---- linux-2.6.0-test1/arch/s390/kernel/compat_ioctl.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/compat_ioctl.c 2003-07-19 17:03:49.000000000 -0700
-@@ -23,7 +23,6 @@
- #include <asm/types.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h>
- #include <linux/dm-ioctl.h>
---- linux-2.6.0-test1/arch/s390/kernel/compat_linux.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/compat_linux.c 2003-07-19 17:03:49.000000000 -0700
-@@ -250,14 +250,14 @@ asmlinkage long sys32_getegid16(void)
- static inline long get_tv32(struct timeval *o, struct compat_timeval *i)
- {
-       return (!access_ok(VERIFY_READ, tv32, sizeof(*tv32)) ||
--              (__get_user(o->tv_sec, &i->tv_sec) |
-+              (__get_user(o->tv_sec, &i->tv_sec) ||
-                __get_user(o->tv_usec, &i->tv_usec)));
- }
- static inline long put_tv32(struct compat_timeval *o, struct timeval *i)
- {
-       return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) ||
--              (__put_user(i->tv_sec, &o->tv_sec) |
-+              (__put_user(i->tv_sec, &o->tv_sec) ||
-                __put_user(i->tv_usec, &o->tv_usec)));
- }
---- linux-2.6.0-test1/arch/s390/kernel/entry64.S       2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/entry64.S      2003-07-19 17:03:49.000000000 -0700
-@@ -637,6 +637,7 @@ io_sigpending:     
- ext_int_handler:
-         SAVE_ALL __LC_EXT_OLD_PSW,0
-         GET_THREAD_INFO                # load pointer to task_struct to R9
-+      brasl   %r14,do_extint
-       llgh    %r6,__LC_EXT_INT_CODE  # get interruption code
-       lgr     %r1,%r6                # calculate index = code & 0xff
-       nill    %r1,0xff
---- linux-2.6.0-test1/arch/s390/kernel/entry.S 2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/entry.S        2003-07-19 17:03:49.000000000 -0700
-@@ -606,6 +606,8 @@ ext_int_handler:
-       SAVE_ALL_BASE
-         SAVE_ALL __LC_EXT_OLD_PSW,0
-         GET_THREAD_INFO                # load pointer to task_struct to R9
-+      l       %r1,BASED(.Ldo_extint)
-+      basr    %r14,%r1
-       lh      %r6,__LC_EXT_INT_CODE  # get interruption code
-       lr      %r1,%r6                # calculate index = code & 0xff
-       n       %r1,BASED(.Lc0xff)
-@@ -694,6 +696,7 @@ restart_go:
-  */
- .Ls390_mcck:   .long  s390_do_machine_check
- .Ldo_IRQ:      .long  do_IRQ
-+.Ldo_extint:   .long  do_extint
- .Ldo_signal:   .long  do_signal
- .Ldo_softirq:  .long  do_softirq
- .Lentry_base:  .long  entry_base
---- linux-2.6.0-test1/arch/s390/kernel/s390_ext.c      2003-06-14 12:18:09.000000000 -0700
-+++ 25/arch/s390/kernel/s390_ext.c     2003-07-19 17:03:49.000000000 -0700
-@@ -11,8 +11,11 @@
- #include <linux/kernel.h>
- #include <linux/slab.h>
- #include <linux/errno.h>
-+#include <linux/kernel_stat.h>
-+
- #include <asm/lowcore.h>
- #include <asm/s390_ext.h>
-+#include <asm/irq.h>
- /*
-  * Simple hash strategy: index = code & 0xff;
-@@ -98,6 +101,11 @@ int unregister_early_external_interrupt(
-       return 0;
- }
-+void do_extint(void)
-+{
-+      kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++;
-+}
-+
- EXPORT_SYMBOL(register_external_interrupt);
- EXPORT_SYMBOL(unregister_external_interrupt);
---- linux-2.6.0-test1/arch/s390/kernel/setup.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/s390/kernel/setup.c        2003-07-19 17:04:07.000000000 -0700
-@@ -34,12 +34,15 @@
- #include <linux/root_dev.h>
- #include <linux/console.h>
- #include <linux/seq_file.h>
-+#include <linux/kernel_stat.h>
-+
- #include <asm/uaccess.h>
- #include <asm/system.h>
- #include <asm/smp.h>
- #include <asm/mmu_context.h>
- #include <asm/cpcmd.h>
- #include <asm/lowcore.h>
-+#include <asm/irq.h>
- /*
-  * Machine setup..
-@@ -53,7 +56,7 @@ struct { unsigned long addr, size, type;
- #define CHUNK_READ_WRITE 0
- #define CHUNK_READ_ONLY 1
- int cpus_initialized = 0;
--unsigned long cpu_initialized = 0;
-+static cpumask_t cpu_initialized;
- volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */
- /*
-@@ -83,7 +86,7 @@ void __devinit cpu_init (void)
-         int nr = smp_processor_id();
-         int addr = hard_smp_processor_id();
--        if (test_and_set_bit(nr,&cpu_initialized)) {
-+        if (cpu_test_and_set(nr,cpu_initialized)) {
-                 printk("CPU#%d ALREADY INITIALIZED!!!!!!!!!\n", nr);
-                 for (;;) local_irq_enable();
-         }
-@@ -562,7 +565,7 @@ static int show_cpuinfo(struct seq_file 
-                              num_online_cpus(), loops_per_jiffy/(500000/HZ),
-                              (loops_per_jiffy/(5000/HZ))%100);
-       }
--      if (cpu_online_map & (1 << n)) {
-+      if (cpu_online(n)) {
- #ifdef CONFIG_SMP
-               if (smp_processor_id() == n)
-                       cpuinfo = &S390_lowcore.cpu_data;
-@@ -600,3 +603,40 @@ struct seq_operations cpuinfo_op = {
-       .stop   = c_stop,
-       .show   = show_cpuinfo,
- };
-+
-+/*
-+ * show_interrupts is needed by /proc/interrupts.
-+ */
-+
-+static const char *intrclass_names[] = {
-+      "EXT",
-+      "I/O",
-+};
-+
-+int show_interrupts(struct seq_file *p, void *v)
-+{
-+        int i, j;
-+      
-+        seq_puts(p, "           ");
-+      
-+        for (j=0; j<NR_CPUS; j++)
-+                if (cpu_online(j))
-+                        seq_printf(p, "CPU%d       ",j);
-+      
-+        seq_putc(p, '\n');
-+      
-+        for (i = 0 ; i < NR_IRQS ; i++) {
-+              seq_printf(p, "%s: ", intrclass_names[i]);
-+#ifndef CONFIG_SMP
-+              seq_printf(p, "%10u ", kstat_irqs(i));
-+#else
-+              for (j = 0; j < NR_CPUS; j++)
-+                      if (cpu_online(j))
-+                              seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
-+#endif
-+                seq_putc(p, '\n');
-+              
-+        }
-+      
-+        return 0;
-+}
---- linux-2.6.0-test1/arch/s390/kernel/smp.c   2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/s390/kernel/smp.c  2003-07-19 17:04:07.000000000 -0700
-@@ -51,8 +51,8 @@ struct _lowcore *lowcore_ptr[NR_CPUS];
- cycles_t         cacheflush_time=0;
- int              smp_threads_ready=0;      /* Set when the idlers are all forked. */
--volatile unsigned long cpu_online_map;
--volatile unsigned long cpu_possible_map;
-+cpumask_t cpu_online_map;
-+cpumask_t cpu_possible_map;
- unsigned long    cache_decay_ticks = 0;
- /*
-@@ -200,14 +200,14 @@ void smp_send_stop(void)
- /*
-  * Reboot, halt and power_off routines for SMP.
-  */
--static volatile unsigned long cpu_restart_map;
-+static cpumask_t cpu_restart_map;
- static void do_machine_restart(void * __unused)
- {
--      clear_bit(smp_processor_id(), &cpu_restart_map);
-+      cpu_clear(smp_processor_id(), cpu_restart_map);
-       if (smp_processor_id() == 0) {
-               /* Wait for all other cpus to enter do_machine_restart. */
--              while (cpu_restart_map != 0);
-+              while (!cpus_empty(cpu_restart_map));
-               /* Store status of other cpus. */
-               do_store_status();
-               /*
-@@ -427,7 +427,7 @@ void __init smp_check_cpus(unsigned int 
-                 if (signal_processor(num_cpus, sigp_sense) ==
-                     sigp_not_operational)
-                         continue;
--              set_bit(num_cpus, &cpu_possible_map);
-+              cpu_set(num_cpus, cpu_possible_map);
-                 num_cpus++;
-         }
-         printk("Detected %d CPU's\n",(int) num_cpus);
-@@ -452,7 +452,7 @@ int __devinit start_secondary(void *cpuv
-       pfault_init();
- #endif
-       /* Mark this cpu as online */
--      set_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-       /* Switch on interrupts */
-       local_irq_enable();
-         /* Print info about this processor */
-@@ -558,8 +558,8 @@ void __init smp_prepare_cpus(unsigned in
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &cpu_possible_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_possible_map);
- }
- void smp_cpus_done(unsigned int max_cpus)
---- linux-2.6.0-test1/arch/s390/mm/init.c      2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/s390/mm/init.c     2003-07-19 17:03:49.000000000 -0700
-@@ -22,9 +22,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/arch/s390/mm/ioremap.c   2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/s390/mm/ioremap.c  2003-07-19 17:07:16.000000000 -0700
-@@ -83,7 +83,7 @@ static int remap_area_pages(unsigned lon
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/sh/mm/init.c        2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/sh/mm/init.c       2003-07-19 17:03:49.000000000 -0700
-@@ -22,9 +22,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/highmem.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/arch/sh/mm/ioremap.c     2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/sh/mm/ioremap.c    2003-07-19 17:07:16.000000000 -0700
-@@ -45,7 +45,7 @@ static inline void remap_area_pte(pte_t 
-       } while (address && (address < end));
- }
--static inline int remap_area_pmd(pmd_t * pmd, unsigned long address,
-+static inline int remap_area_pmd(pgd_t *pgd, pmd_t * pmd, unsigned long address,
-       unsigned long size, unsigned long phys_addr, unsigned long flags)
- {
-       unsigned long end;
-@@ -83,11 +83,11 @@ int remap_area_pages(unsigned long addre
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_map(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
--              if (remap_area_pmd(pmd, address, end - address,
-+              if (remap_area_pmd(dir, pmd, address, end - address,
-                                       phys_addr + address, flags))
-                       break;
-               error = 0;
---- linux-2.6.0-test1/arch/sparc64/kernel/devices.c    2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/sparc64/kernel/devices.c   2003-07-19 17:06:40.000000000 -0700
-@@ -31,6 +31,8 @@ int linux_num_cpus = 0;
- extern void cpu_probe(void);
- extern void central_probe(void);
-+unsigned long cpu_hz;
-+
- void __init device_scan(void)
- {
-       char node_str[128];
-@@ -68,6 +70,8 @@ void __init device_scan(void)
-                                       prom_getproperty(scan, "portid",
-                                                        (char *) &thismid, sizeof(thismid));
-                               }
-+                              if (!cpu_hz)
-+                                      cpu_hz = prom_getint(scan, "clock-frequency");
-                               linux_cpus[cpu_ctr].mid = thismid;
-                               printk("Found CPU %d (node=%08x,mid=%d)\n",
-                                      cpu_ctr, (unsigned) scan, thismid);
---- linux-2.6.0-test1/arch/sparc64/kernel/head.S       2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/sparc64/kernel/head.S      2003-07-19 17:03:49.000000000 -0700
-@@ -66,7 +66,7 @@ sparc_ramdisk_image:
- sparc_ramdisk_size:
-         .word   0
-         .xword  reboot_command
--      .xword  bootstr_len
-+      .xword  bootstr_info
-       .word   _end
-       /* We must be careful, 32-bit OpenBOOT will get confused if it
-@@ -740,8 +740,9 @@ swapper_pg_dir:
-       .data
-       .align  8
--      .globl  prom_tba
-+      .globl  prom_tba, tlb_type
- prom_tba:     .xword  0
-+tlb_type:     .word   0       /* Must NOT end up in BSS */
-       .section        ".fixup",#alloc,#execinstr
-       .globl  __ret_efault
- __ret_efault:
---- linux-2.6.0-test1/arch/sparc64/kernel/irq.c        2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/sparc64/kernel/irq.c       2003-07-19 17:04:07.000000000 -0700
-@@ -110,6 +110,10 @@ static void register_irq_proc (unsigned 
-               action->flags |= __irq_ino(irq) << 48;
- #define get_ino_in_irqaction(action)  (action->flags >> 48)
-+#if NR_CPUS > 64
-+#error irqaction embedded smp affinity does not work with > 64 cpus, FIXME
-+#endif
-+
- #define put_smpaff_in_irqaction(action, smpaff)       (action)->mask = (smpaff)
- #define get_smpaff_in_irqaction(action)       ((action)->mask)
-@@ -658,11 +662,11 @@ static inline void redirect_intr(int cpu
-        *    Just Do It.
-        */
-       struct irqaction *ap = bp->irq_info;
--      unsigned long cpu_mask = get_smpaff_in_irqaction(ap);
-+      cpumask_t cpu_mask = { .mask[0] = get_smpaff_in_irqaction(ap) };
-       unsigned int buddy, ticks;
--      cpu_mask &= cpu_online_map;
--      if (cpu_mask == 0)
-+      cpus_and(cpu_mask, cpu_mask, cpu_online_map);
-+      if (cpus_empty(cpu_mask))
-               cpu_mask = cpu_online_map;
-       if (this_is_starfire != 0 ||
-@@ -677,7 +681,7 @@ static inline void redirect_intr(int cpu
-               buddy = 0;
-       ticks = 0;
--      while ((cpu_mask & (1UL << buddy)) == 0) {
-+      while (!cpu_isset(buddy, cpu_mask)) {
-               if (++buddy >= NR_CPUS)
-                       buddy = 0;
-               if (++ticks > NR_CPUS) {
---- linux-2.6.0-test1/arch/sparc64/kernel/pci.c        2003-06-14 12:17:55.000000000 -0700
-+++ 25/arch/sparc64/kernel/pci.c       2003-07-19 17:03:49.000000000 -0700
-@@ -804,25 +804,20 @@ int pci_mmap_page_range(struct pci_dev *
- /* Return the domain nuber for this pci bus */
--int pci_domain_nr(struct pci_bus *bus)
-+int pci_domain_nr(struct pci_bus *pbus)
- {
--      struct pcidev_cookie *cookie = bus->sysdata;
-+      struct pci_pbm_info *pbm = pbus->sysdata;
-       int ret;
--      if (cookie != NULL) {
--              struct pci_pbm_info *pbm = cookie->pbm;
--              if (pbm == NULL || pbm->parent == NULL) {
--                      ret = -ENXIO;
--              } else {
--                      struct pci_controller_info *p = pbm->parent;
--
--                      ret = p->index;
--                      if (p->pbms_same_domain == 0)
--                              ret = ((ret << 1) +
--                                     ((pbm == &pbm->parent->pbm_B) ? 1 : 0));
--              }
--      } else {
-+      if (pbm == NULL || pbm->parent == NULL) {
-               ret = -ENXIO;
-+      } else {
-+              struct pci_controller_info *p = pbm->parent;
-+
-+              ret = p->index;
-+              if (p->pbms_same_domain == 0)
-+                      ret = ((ret << 1) +
-+                             ((pbm == &pbm->parent->pbm_B) ? 1 : 0));
-       }
-       return ret;
---- linux-2.6.0-test1/arch/sparc64/kernel/setup.c      2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/sparc64/kernel/setup.c     2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,6 @@
- #include <linux/kdev_t.h>
- #include <linux/major.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/init.h>
- #include <linux/inet.h>
- #include <linux/console.h>
---- linux-2.6.0-test1/arch/sparc64/kernel/smp.c        2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/sparc64/kernel/smp.c       2003-07-19 17:04:07.000000000 -0700
-@@ -46,12 +46,11 @@ cpuinfo_sparc cpu_data[NR_CPUS];
- /* Please don't make this stuff initdata!!!  --DaveM */
- static unsigned char boot_cpu_id;
--atomic_t sparc64_num_cpus_online = ATOMIC_INIT(0);
--unsigned long cpu_online_map = 0;
-+cpumask_t cpu_online_map = CPU_MASK_NONE;
- atomic_t sparc64_num_cpus_possible = ATOMIC_INIT(0);
--unsigned long phys_cpu_present_map = 0;
--static unsigned long smp_commenced_mask;
--static unsigned long cpu_callout_map;
-+cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
-+static cpumask_t smp_commenced_mask;
-+static cpumask_t cpu_callout_map;
- void smp_info(struct seq_file *m)
- {
-@@ -151,11 +150,10 @@ void __init smp_callin(void)
-       atomic_inc(&init_mm.mm_count);
-       current->active_mm = &init_mm;
--      while (!test_bit(cpuid, &smp_commenced_mask))
-+      while (!cpu_isset(cpuid, smp_commenced_mask))
-               membar("#LoadLoad");
--      set_bit(cpuid, &cpu_online_map);
--      atomic_inc(&sparc64_num_cpus_online);
-+      cpu_set(cpuid, cpu_online_map);
- }
- void cpu_panic(void)
-@@ -334,7 +332,7 @@ static int __devinit smp_boot_one_cpu(un
-               if (linux_cpus[no].mid == cpu)
-                       break;
-       cpu_new_thread = p->thread_info;
--      set_bit(cpu, &cpu_callout_map);
-+      cpu_set(cpu, cpu_callout_map);
-       prom_startcpu(linux_cpus[no].prom_node, entry, cookie);
-       for (timeout = 0; timeout < 5000000; timeout++) {
-               if (callin_flag)
-@@ -346,7 +344,7 @@ static int __devinit smp_boot_one_cpu(un
-               ret = 0;
-       } else {
-               printk("Processor %d is stuck.\n", cpu);
--              clear_bit(cpu, &cpu_callout_map);
-+              cpu_clear(cpu, cpu_callout_map);
-               ret = -ENODEV;
-       }
-       cpu_new_thread = NULL;
-@@ -420,17 +418,17 @@ again:
-       }
- }
--static __inline__ void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, unsigned long mask)
-+static __inline__ void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask)
- {
-       u64 pstate;
-       int i;
-       __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate));
-       for (i = 0; i < NR_CPUS; i++) {
--              if (mask & (1UL << i)) {
-+              if (cpu_isset(i, mask)) {
-                       spitfire_xcall_helper(data0, data1, data2, pstate, i);
--                      mask &= ~(1UL << i);
--                      if (!mask)
-+                      cpu_clear(i, mask);
-+                      if (cpus_empty(mask))
-                               break;
-               }
-       }
-@@ -443,12 +441,12 @@ static __inline__ void spitfire_xcall_de
- #if NR_CPUS > 32
- #error Fixup cheetah_xcall_deliver Dave...
- #endif
--static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, unsigned long mask)
-+static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask)
- {
-       u64 pstate;
-       int nack_busy_id;
--      if (!mask)
-+      if (cpus_empty(mask))
-               return;
-       __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate));
-@@ -469,11 +467,11 @@ retry:
-       nack_busy_id = 0;
-       {
--              unsigned long work_mask = mask;
-+              cpumask_t work_mask = mask;
-               int i;
-               for (i = 0; i < NR_CPUS; i++) {
--                      if (work_mask & (1UL << i)) {
-+                      if (cpu_isset(i, work_mask)) {
-                               u64 target = (i << 14) | 0x70;
-                               target |= (nack_busy_id++ << 24);
-@@ -482,8 +480,8 @@ retry:
-                                       "membar #Sync\n\t"
-                                       : /* no outputs */
-                                       : "r" (target), "i" (ASI_INTR_W));
--                              work_mask &= ~(1UL << i);
--                              if (!work_mask)
-+                              cpu_clear(i, work_mask);
-+                              if (cpus_empty(work_mask))
-                                       break;
-                       }
-               }
-@@ -518,7 +516,7 @@ retry:
-                       printk("CPU[%d]: mondo stuckage result[%016lx]\n",
-                              smp_processor_id(), dispatch_stat);
-               } else {
--                      unsigned long work_mask = mask;
-+                      cpumask_t work_mask = mask;
-                       int i, this_busy_nack = 0;
-                       /* Delay some random time with interrupts enabled
-@@ -530,13 +528,13 @@ retry:
-                        * NACK us.
-                        */
-                       for (i = 0; i < NR_CPUS; i++) {
--                              if (work_mask & (1UL << i)) {
-+                              if (cpu_isset(i, work_mask)) {
-                                       if ((dispatch_stat &
-                                            (0x2 << this_busy_nack)) == 0)
--                                              mask &= ~(1UL << i);
-+                                              cpu_clear(i, mask);
-                                       this_busy_nack += 2;
--                                      work_mask &= ~(1UL << i);
--                                      if (!work_mask)
-+                                      cpu_clear(i, work_mask);
-+                                      if (cpus_empty(work_mask))
-                                               break;
-                               }
-                       }
-@@ -549,12 +547,12 @@ retry:
- /* Send cross call to all processors mentioned in MASK
-  * except self.
-  */
--static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, unsigned long mask)
-+static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, cpumask_t mask)
- {
-       u64 data0 = (((u64)ctx)<<32 | (((u64)func) & 0xffffffff));
--      mask &= cpu_online_map;
--      mask &= ~(1UL<<smp_processor_id());
-+      cpus_and(mask, mask, cpu_online_map);
-+      cpu_clear(smp_processor_id(), mask);
-       if (tlb_type == spitfire)
-               spitfire_xcall_deliver(data0, data1, data2, mask);
-@@ -567,9 +565,10 @@ extern unsigned long xcall_sync_tick;
- static void smp_start_sync_tick_client(int cpu)
- {
-+      cpumask_t mask = cpumask_of_cpu(cpu);
-+
-       smp_cross_call_masked(&xcall_sync_tick,
--                            0, 0, 0,
--                            (1UL << cpu));
-+                            0, 0, 0, mask);
- }
- /* Send cross call to all processors except self. */
-@@ -685,14 +684,14 @@ static __inline__ void __local_flush_dca
- void smp_flush_dcache_page_impl(struct page *page, int cpu)
- {
--      unsigned long mask = 1UL << cpu;
-+      cpumask_t mask = cpumask_of_cpu(cpu);
- #ifdef CONFIG_DEBUG_DCFLUSH
-       atomic_inc(&dcpage_flushes);
- #endif
-       if (cpu == smp_processor_id()) {
-               __local_flush_dcache_page(page);
--      } else if ((cpu_online_map & mask) != 0) {
-+      } else if (cpu_online(cpu)) {
-               u64 data0;
-               if (tlb_type == spitfire) {
-@@ -719,13 +718,14 @@ void smp_flush_dcache_page_impl(struct p
- void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
- {
--      unsigned long mask = cpu_online_map & ~(1UL << smp_processor_id());
-+      cpumask_t mask = cpu_online_map;
-+      cpu_clear(smp_processor_id(), mask);
-       u64 data0;
- #ifdef CONFIG_DEBUG_DCFLUSH
-       atomic_inc(&dcpage_flushes);
- #endif
--      if (mask == 0UL)
-+      if (cpus_empty(mask))
-               goto flush_self;
-       if (tlb_type == spitfire) {
-               data0 = ((u64)&xcall_flush_dcache_page_spitfire);
-@@ -750,9 +750,9 @@ void flush_dcache_page_all(struct mm_str
- void smp_receive_signal(int cpu)
- {
--      unsigned long mask = 1UL << cpu;
-+      cpumask_t mask = cpumask_of_cpu(cpu);
--      if ((cpu_online_map & mask) != 0) {
-+      if (cpu_online(cpu)) {
-               u64 data0 = (((u64)&xcall_receive_signal) & 0xffffffff);
-               if (tlb_type == spitfire)
-@@ -854,7 +854,7 @@ void smp_flush_tlb_mm(struct mm_struct *
-               if (atomic_read(&mm->mm_users) == 1) {
-                       /* See smp_flush_tlb_page for info about this. */
--                      mm->cpu_vm_mask = (1UL << cpu);
-+                      mm->cpu_vm_mask = cpumask_of_cpu(cpu);
-                       goto local_flush_and_out;
-               }
-@@ -877,7 +877,7 @@ void smp_flush_tlb_range(struct mm_struc
-       end    = PAGE_ALIGN(end);
-       if (mm == current->active_mm && atomic_read(&mm->mm_users) == 1) {
--              mm->cpu_vm_mask = (1UL << cpu);
-+              mm->cpu_vm_mask = cpumask_of_cpu(cpu);
-               goto local_flush_and_out;
-       }
-@@ -921,14 +921,16 @@ void smp_flush_tlb_page(struct mm_struct
-                        * is almost certain that all TLB entries for this
-                        * context will be replaced by the time that happens.
-                        */
--                      mm->cpu_vm_mask = (1UL << cpu);
-+                      mm->cpu_vm_mask = cpumask_of_cpu(cpu);
-                       goto local_flush_and_out;
-               } else {
-+                      cpumask_t this_cpu_mask = cpumask_of_cpu(cpu);
-+
-                       /* By virtue of running under the mm->page_table_lock,
-                        * and mmu_context.h:switch_mm doing the same, the
-                        * following operation is safe.
-                        */
--                      if (mm->cpu_vm_mask == (1UL << cpu))
-+                      if (cpus_equal(mm->cpu_vm_mask, this_cpu_mask))
-                               goto local_flush_and_out;
-               }
-@@ -939,7 +941,7 @@ void smp_flush_tlb_page(struct mm_struct
-               smp_cross_call_masked(&xcall_flush_tlb_page,
-                                     ctx, page, 0,
-                                     mm->cpu_vm_mask);
--              if (!(mm->cpu_vm_mask & (1UL << cpu)))
-+              if (!cpu_isset(cpu, mm->cpu_vm_mask))
-                       return;
-       local_flush_and_out:
-@@ -1122,8 +1124,7 @@ void __init smp_tick_init(void)
-               prom_halt();
-       }
--      atomic_inc(&sparc64_num_cpus_online);
--      set_bit(boot_cpu_id, &cpu_online_map);
-+      cpu_set(boot_cpu_id, cpu_online_map);
-       prom_cpu_nodes[boot_cpu_id] = linux_cpus[0].prom_node;
-       prof_counter(boot_cpu_id) = prof_multiplier(boot_cpu_id) = 1;
- }
-@@ -1241,16 +1242,14 @@ void __init smp_prepare_cpus(unsigned in
-       for (i = 0; i < linux_num_cpus; i++) {
-               if (linux_cpus[i].mid < max_cpus) {
--                      set_bit(linux_cpus[i].mid,
--                              &phys_cpu_present_map);
-+                      cpu_set(linux_cpus[i].mid, phys_cpu_present_map);
-                       atomic_inc(&sparc64_num_cpus_possible);
-               }
-       }
-       if (atomic_read(&sparc64_num_cpus_possible) > max_cpus) {
-               for (i = linux_num_cpus - 1; i >= 0; i--) {
-                       if (linux_cpus[i].mid != boot_cpu_id) {
--                              clear_bit(linux_cpus[i].mid,
--                                        &phys_cpu_present_map);
-+                              cpu_clear(linux_cpus[i].mid, phys_cpu_present_map);
-                               atomic_dec(&sparc64_num_cpus_possible);
-                               if (atomic_read(&sparc64_num_cpus_possible) <= max_cpus)
-                                       break;
-@@ -1263,8 +1262,8 @@ void __init smp_prepare_cpus(unsigned in
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &phys_cpu_present_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), phys_cpu_present_map);
- }
- int __devinit __cpu_up(unsigned int cpu)
-@@ -1272,10 +1271,10 @@ int __devinit __cpu_up(unsigned int cpu)
-       int ret = smp_boot_one_cpu(cpu);
-       if (!ret) {
--              set_bit(cpu, &smp_commenced_mask);
--              while (!test_bit(cpu, &cpu_online_map))
-+              cpu_set(cpu, smp_commenced_mask);
-+              while (!cpu_isset(cpu, cpu_online_map))
-                       mb();
--              if (!test_bit(cpu, &cpu_online_map)) {
-+              if (!cpu_isset(cpu, cpu_online_map)) {
-                       ret = -ENODEV;
-               } else {
-                       smp_synchronize_one_tick(cpu);
---- linux-2.6.0-test1/arch/sparc64/kernel/sparc64_ksyms.c      2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/sparc64/kernel/sparc64_ksyms.c     2003-07-19 17:04:07.000000000 -0700
-@@ -147,7 +147,6 @@ EXPORT_SYMBOL(cpu_data);
- /* CPU online map and active count.  */
- EXPORT_SYMBOL(cpu_online_map);
--EXPORT_SYMBOL(sparc64_num_cpus_online);
- EXPORT_SYMBOL(phys_cpu_present_map);
- EXPORT_SYMBOL(sparc64_num_cpus_possible);
-@@ -176,6 +175,8 @@ EXPORT_SYMBOL(up);
- /* Atomic counter implementation. */
- EXPORT_SYMBOL(__atomic_add);
- EXPORT_SYMBOL(__atomic_sub);
-+EXPORT_SYMBOL(__atomic64_add);
-+EXPORT_SYMBOL(__atomic64_sub);
- #ifdef CONFIG_SMP
- EXPORT_SYMBOL(atomic_dec_and_lock);
- #endif
---- linux-2.6.0-test1/arch/sparc64/kernel/time.c       2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/sparc64/kernel/time.c      2003-07-19 17:03:49.000000000 -0700
-@@ -41,6 +41,7 @@
- #include <asm/isa.h>
- #include <asm/starfire.h>
- #include <asm/smp.h>
-+#include <asm/sections.h>
- spinlock_t mostek_lock = SPIN_LOCK_UNLOCKED;
- spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
-@@ -449,7 +450,6 @@ void sparc64_do_profile(struct pt_regs *
-               return;
-       {
--              extern int _stext;
-               extern int rwlock_impl_begin, rwlock_impl_end;
-               extern int atomic_impl_begin, atomic_impl_end;
-               extern int __memcpy_begin, __memcpy_end;
-@@ -468,7 +468,7 @@ void sparc64_do_profile(struct pt_regs *
-                    pc < (unsigned long) &__bitops_end))
-                       pc = o7;
--              pc -= (unsigned long) &_stext;
-+              pc -= (unsigned long) _stext;
-               pc >>= prof_shift;
-               if(pc >= prof_len)
---- linux-2.6.0-test1/arch/sparc64/kernel/us2e_cpufreq.c       2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/sparc64/kernel/us2e_cpufreq.c      2003-07-19 17:04:07.000000000 -0700
-@@ -232,15 +232,16 @@ static unsigned long estar_to_divisor(un
- static void us2e_set_cpu_divider_index(unsigned int cpu, unsigned int index)
- {
--      unsigned long new_bits, new_freq, cpus_allowed;
-+      unsigned long new_bits, new_freq;
-       unsigned long clock_tick, divisor, old_divisor, estar;
-+      cpumask_t cpus_allowed;
-       struct cpufreq_freqs freqs;
-       if (!cpu_online(cpu))
-               return;
-       cpus_allowed = current->cpus_allowed;
--      set_cpus_allowed(current, (1UL << cpu));
-+      set_cpus_allowed(current, cpumask_of_cpu(cpu));
-       new_freq = clock_tick = sparc64_get_clock_tick(cpu);
-       new_bits = index_to_estar_mode(index);
---- linux-2.6.0-test1/arch/sparc64/kernel/us3_cpufreq.c        2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/sparc64/kernel/us3_cpufreq.c       2003-07-19 17:04:07.000000000 -0700
-@@ -78,14 +78,15 @@ static unsigned long get_current_freq(un
- static void us3_set_cpu_divider_index(unsigned int cpu, unsigned int index)
- {
--      unsigned long new_bits, new_freq, reg, cpus_allowed;
-+      unsigned long new_bits, new_freq, reg;
-+      cpumask_t cpus_allowed;
-       struct cpufreq_freqs freqs;
-       if (!cpu_online(cpu))
-               return;
-       cpus_allowed = current->cpus_allowed;
--      set_cpus_allowed(current, (1UL << cpu));
-+      set_cpus_allowed(current, cpumask_of_cpu(cpu));
-       new_freq = sparc64_get_clock_tick(cpu);
-       switch (index) {
---- linux-2.6.0-test1/arch/sparc64/lib/atomic.S        2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/sparc64/lib/atomic.S       2003-07-19 17:03:49.000000000 -0700
-@@ -33,4 +33,27 @@ __atomic_sub: /* %o0 = increment, %o1 = 
-        membar #StoreLoad | #StoreStore
-       retl
-        sub    %g7, %o0, %o0
-+
-+      .globl  __atomic64_add
-+__atomic64_add: /* %o0 = increment, %o1 = atomic_ptr */
-+      ldx     [%o1], %g5
-+      add     %g5, %o0, %g7
-+      casx    [%o1], %g5, %g7
-+      cmp     %g5, %g7
-+      bne,pn  %xcc, __atomic64_add
-+       membar #StoreLoad | #StoreStore
-+      retl
-+       add    %g7, %o0, %o0
-+
-+      .globl  __atomic64_sub
-+__atomic64_sub: /* %o0 = increment, %o1 = atomic_ptr */
-+      ldx     [%o1], %g5
-+      sub     %g5, %o0, %g7
-+      casx    [%o1], %g5, %g7
-+      cmp     %g5, %g7
-+      bne,pn  %xcc, __atomic64_sub
-+       membar #StoreLoad | #StoreStore
-+      retl
-+       sub    %g7, %o0, %o0
-+
- atomic_impl_end:
---- linux-2.6.0-test1/arch/sparc64/lib/rwlock.S        2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/sparc64/lib/rwlock.S       2003-07-19 17:06:40.000000000 -0700
-@@ -63,5 +63,33 @@ __write_lock: /* %o0 = lock_ptr */
-       be,pt           %icc, 99b
-        membar         #StoreLoad | #StoreStore
-       ba,a,pt         %xcc, 1b
-+
-+      .globl  __read_trylock
-+__read_trylock: /* %o0 = lock_ptr */
-+      ldsw            [%o0], %g5
-+      brlz,pn         %g5, 100f
-+       add            %g5, 1, %g7
-+      cas             [%o0], %g5, %g7
-+      cmp             %g5, %g7
-+      bne,pn          %icc, __read_trylock
-+       membar         #StoreLoad | #StoreStore
-+      retl
-+       mov            1, %o0
-+
-+      .globl          __write_trylock
-+__write_trylock: /* %o0 = lock_ptr */
-+      sethi           %hi(0x80000000), %g2
-+1:    lduw            [%o0], %g5
-+4:    brnz,pn         %g5, 100f
-+       or             %g5, %g2, %g7
-+      cas             [%o0], %g5, %g7
-+      cmp             %g5, %g7
-+      bne,pn          %icc, 1b
-+       membar         #StoreLoad | #StoreStore
-+      retl
-+       mov            1, %o0
-+100:  retl
-+       mov            0, %o0
-+
- rwlock_impl_end:
---- linux-2.6.0-test1/arch/sparc64/mm/fault.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/sparc64/mm/fault.c 2003-07-19 17:03:49.000000000 -0700
-@@ -26,6 +26,7 @@
- #include <asm/uaccess.h>
- #include <asm/asi.h>
- #include <asm/lsu.h>
-+#include <asm/sections.h>
- #define ELEMENTS(arr) (sizeof (arr)/sizeof (arr[0]))
-@@ -320,10 +321,9 @@ asmlinkage void do_sparc64_fault(struct 
-       if (regs->tstate & TSTATE_PRIV) {
-               unsigned long tpc = regs->tpc;
--              extern unsigned int _etext;
-               /* Sanity check the PC. */
--              if ((tpc >= KERNBASE && tpc < (unsigned long) &_etext) ||
-+              if ((tpc >= KERNBASE && tpc < (unsigned long) _etext) ||
-                   (tpc >= MODULES_VADDR && tpc < MODULES_END)) {
-                       /* Valid, no problems... */
-               } else {
---- linux-2.6.0-test1/arch/sparc64/mm/generic.c        2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/sparc64/mm/generic.c       2003-07-19 17:07:16.000000000 -0700
-@@ -85,7 +85,7 @@ static inline void io_remap_pte_range(pt
-       } while (address < end);
- }
--static inline int io_remap_pmd_range(pmd_t * pmd, unsigned long address, unsigned long size,
-+static inline int io_remap_pmd_range(pgd_t *pgd, pmd_t * pmd, unsigned long address, unsigned long size,
-       unsigned long offset, pgprot_t prot, int space)
- {
-       unsigned long end;
-@@ -96,7 +96,7 @@ static inline int io_remap_pmd_range(pmd
-               end = PGDIR_SIZE;
-       offset -= address;
-       do {
--              pte_t * pte = pte_alloc_map(current->mm, pmd, address);
-+              pte_t * pte = pte_alloc_map(current->mm, pgd, &pmd, address);
-               if (!pte)
-                       return -ENOMEM;
-               io_remap_pte_range(pte, address, end - address, address + offset, prot, space);
-@@ -122,11 +122,11 @@ int io_remap_page_range(struct vm_area_s
-       spin_lock(&mm->page_table_lock);
-       while (from < end) {
--              pmd_t *pmd = pmd_alloc(current->mm, dir, from);
-+              pmd_t *pmd = pmd_alloc_map(current->mm, dir, from);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
--              error = io_remap_pmd_range(pmd, from, end - from, offset + from, prot, space);
-+              error = io_remap_pmd_range(pgd, pmd, from, end - from, offset + from, prot, space);
-               if (error)
-                       break;
-               from = (from + PGDIR_SIZE) & PGDIR_MASK;
---- linux-2.6.0-test1/arch/sparc64/mm/hugetlbpage.c    2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/sparc64/mm/hugetlbpage.c   2003-07-19 17:07:16.000000000 -0700
-@@ -107,9 +107,11 @@ static pte_t *huge_pte_alloc_map(struct 
-       pgd = pgd_offset(mm, addr);
-       if (pgd) {
--              pmd = pmd_alloc(mm, pgd, addr);
--              if (pmd)
--                      pte = pte_alloc_map(mm, pmd, addr);
-+              pmd = pmd_alloc_map(mm, pgd, addr);
-+              if (pmd) {
-+                      pte = pte_alloc_map(mm, pgd, &pmd, addr);
-+                      pmd_unmap(pmd);
-+              }
-       }
-       return pte;
- }
-@@ -122,9 +124,11 @@ static pte_t *huge_pte_offset_map(struct
-       pgd = pgd_offset(mm, addr);
-       if (pgd) {
--              pmd = pmd_offset(pgd, addr);
--              if (pmd)
-+              pmd = pmd_offset_map(pgd, addr);
-+              if (pmd) {
-                       pte = pte_offset_map(pmd, addr);
-+                      pmd_unmap(pmd);
-+              }
-       }
-       return pte;
- }
---- linux-2.6.0-test1/arch/sparc64/mm/init.c   2003-06-14 12:18:07.000000000 -0700
-+++ 25/arch/sparc64/mm/init.c  2003-07-19 17:03:49.000000000 -0700
-@@ -35,6 +35,7 @@
- #include <asm/starfire.h>
- #include <asm/tlb.h>
- #include <asm/spitfire.h>
-+#include <asm/sections.h>
- DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
-@@ -48,16 +49,14 @@ unsigned long *sparc64_valid_addr_bitmap
- unsigned long phys_base;
- unsigned long pfn_base;
--enum ultra_tlb_layout tlb_type = spitfire;
--
- /* get_new_mmu_context() uses "cache + 1".  */
- spinlock_t ctx_alloc_lock = SPIN_LOCK_UNLOCKED;
- unsigned long tlb_context_cache = CTX_FIRST_VERSION - 1;
- #define CTX_BMAP_SLOTS (1UL << (CTX_VERSION_SHIFT - 6))
- unsigned long mmu_context_bmap[CTX_BMAP_SLOTS];
--/* References to section boundaries */
--extern char __init_begin, __init_end, _start, _end, etext, edata;
-+/* References to special section boundaries */
-+extern char  _start[], _end[];
- /* Initial ramdisk setup */
- extern unsigned int sparc_ramdisk_image;
-@@ -1333,7 +1332,7 @@ unsigned long __init bootmem_init(unsign
-        * image.  The kernel is hard mapped below PAGE_OFFSET in a
-        * 4MB locked TLB translation.
-        */
--      start_pfn  = PAGE_ALIGN((unsigned long) &_end) -
-+      start_pfn  = PAGE_ALIGN((unsigned long) _end) -
-               ((unsigned long) KERNBASE);
-       /* Adjust up to the physical address where the kernel begins. */
-@@ -1349,7 +1348,7 @@ unsigned long __init bootmem_init(unsign
- #ifdef CONFIG_BLK_DEV_INITRD
-       /* Now have to check initial ramdisk, so that bootmap does not overwrite it */
-       if (sparc_ramdisk_image) {
--              if (sparc_ramdisk_image >= (unsigned long)&_end - 2 * PAGE_SIZE)
-+              if (sparc_ramdisk_image >= (unsigned long)_end - 2 * PAGE_SIZE)
-                       sparc_ramdisk_image -= KERNBASE;
-               initrd_start = sparc_ramdisk_image + phys_base;
-               initrd_end = initrd_start + sparc_ramdisk_size;
-@@ -1426,7 +1425,7 @@ void __init paging_init(void)
-       set_bit(0, mmu_context_bmap);
--      real_end = (unsigned long)&_end;
-+      real_end = (unsigned long)_end;
-       if ((real_end > ((unsigned long)KERNBASE + 0x400000)))
-               bigkernel = 1;
- #ifdef CONFIG_BLK_DEV_INITRD
-@@ -1718,7 +1717,7 @@ void __init mem_init(void)
-       memset(sparc64_valid_addr_bitmap, 0, i << 3);
-       addr = PAGE_OFFSET + phys_base;
--      last = PAGE_ALIGN((unsigned long)&_end) -
-+      last = PAGE_ALIGN((unsigned long)_end) -
-               ((unsigned long) KERNBASE);
-       last += PAGE_OFFSET + phys_base;
-       while (addr < last) {
-@@ -1745,11 +1744,11 @@ void __init mem_init(void)
-       SetPageReserved(mem_map_zero);
-       clear_page(page_address(mem_map_zero));
--      codepages = (((unsigned long) &etext) - ((unsigned long)&_start));
-+      codepages = (((unsigned long) _etext) - ((unsigned long) _start));
-       codepages = PAGE_ALIGN(codepages) >> PAGE_SHIFT;
--      datapages = (((unsigned long) &edata) - ((unsigned long)&etext));
-+      datapages = (((unsigned long) _edata) - ((unsigned long) _etext));
-       datapages = PAGE_ALIGN(datapages) >> PAGE_SHIFT;
--      initpages = (((unsigned long) &__init_end) - ((unsigned long) &__init_begin));
-+      initpages = (((unsigned long) __init_end) - ((unsigned long) __init_begin));
-       initpages = PAGE_ALIGN(initpages) >> PAGE_SHIFT;
- #ifndef CONFIG_SMP
-@@ -1812,8 +1811,8 @@ void free_initmem (void)
-       /*
-        * The init section is aligned to 8k in vmlinux.lds. Page align for >8k pagesizes.
-        */
--      addr = PAGE_ALIGN((unsigned long)(&__init_begin));
--      initend = (unsigned long)(&__init_end) & PAGE_MASK;
-+      addr = PAGE_ALIGN((unsigned long)(__init_begin));
-+      initend = (unsigned long)(__init_end) & PAGE_MASK;
-       for (; addr < initend; addr += PAGE_SIZE) {
-               unsigned long page;
-               struct page *p;
---- linux-2.6.0-test1/arch/sparc64/prom/bootstr.c      2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/sparc64/prom/bootstr.c     2003-07-19 17:03:49.000000000 -0700
-@@ -15,16 +15,22 @@
-  */
- #define BARG_LEN  256
--int bootstr_len = BARG_LEN;
--static int bootstr_valid = 0;
--static char bootstr_buf[BARG_LEN] = { 0 };
-+struct {
-+      int bootstr_len;
-+      int bootstr_valid;
-+      char bootstr_buf[BARG_LEN];
-+} bootstr_info = {
-+      .bootstr_len = BARG_LEN,
-+};
- char * __init
- prom_getbootargs(void)
- {
-       /* This check saves us from a panic when bootfd patches args. */
--      if (bootstr_valid) return bootstr_buf;
--      prom_getstring(prom_chosen_node, "bootargs", bootstr_buf, BARG_LEN);
--      bootstr_valid = 1;
--      return bootstr_buf;
-+      if (bootstr_info.bootstr_valid)
-+              return bootstr_info.bootstr_buf;
-+      prom_getstring(prom_chosen_node, "bootargs",
-+                     bootstr_info.bootstr_buf, BARG_LEN);
-+      bootstr_info.bootstr_valid = 1;
-+      return bootstr_info.bootstr_buf;
- }
---- linux-2.6.0-test1/arch/sparc/kernel/process.c      2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/sparc/kernel/process.c     2003-07-19 17:03:49.000000000 -0700
-@@ -590,16 +590,20 @@ int dump_fpu (struct pt_regs * regs, elf
-               put_psr(get_psr() | PSR_EF);
-               fpsave(&current->thread.float_regs[0], &current->thread.fsr,
-                      &current->thread.fpqueue[0], &current->thread.fpqdepth);
--              regs->psr &= ~(PSR_EF);
--              current->flags &= ~(PF_USEDFPU);
-+              if (regs != NULL) {
-+                      regs->psr &= ~(PSR_EF);
-+                      current->flags &= ~(PF_USEDFPU);
-+              }
-       }
- #else
-       if (current == last_task_used_math) {
-               put_psr(get_psr() | PSR_EF);
-               fpsave(&current->thread.float_regs[0], &current->thread.fsr,
-                      &current->thread.fpqueue[0], &current->thread.fpqdepth);
--              last_task_used_math = 0;
--              regs->psr &= ~(PSR_EF);
-+              if (regs != NULL) {
-+                      regs->psr &= ~(PSR_EF);
-+                      last_task_used_math = 0;
-+              }
-       }
- #endif
-       memcpy(&fpregs->pr_fr.pr_regs[0],
---- linux-2.6.0-test1/arch/sparc/kernel/setup.c        2003-06-14 12:17:56.000000000 -0700
-+++ 25/arch/sparc/kernel/setup.c       2003-07-19 17:03:49.000000000 -0700
-@@ -25,7 +25,6 @@
- #include <linux/kdev_t.h>
- #include <linux/major.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/console.h>
---- linux-2.6.0-test1/arch/sparc/mm/generic.c  2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/sparc/mm/generic.c 2003-07-19 17:07:16.000000000 -0700
-@@ -67,7 +67,7 @@ static inline void io_remap_pte_range(pt
-       } while (address < end);
- }
--static inline int io_remap_pmd_range(pmd_t * pmd, unsigned long address, unsigned long size,
-+static inline int io_remap_pmd_range(pgd_t *pgd, pmd_t * pmd, unsigned long address, unsigned long size,
-       unsigned long offset, pgprot_t prot, int space)
- {
-       unsigned long end;
-@@ -78,7 +78,7 @@ static inline int io_remap_pmd_range(pmd
-               end = PGDIR_SIZE;
-       offset -= address;
-       do {
--              pte_t * pte = pte_alloc_map(current->mm, pmd, address);
-+              pte_t * pte = pte_alloc_map(current->mm, pgd, &pmd, address);
-               if (!pte)
-                       return -ENOMEM;
-               io_remap_pte_range(pte, address, end - address, address + offset, prot, space);
-@@ -103,11 +103,11 @@ int io_remap_page_range(struct vm_area_s
-       spin_lock(&mm->page_table_lock);
-       while (from < end) {
--              pmd_t *pmd = pmd_alloc(current->mm, dir, from);
-+              pmd_t *pmd = pmd_alloc_map(current->mm, dir, from);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
--              error = io_remap_pmd_range(pmd, from, end - from, offset + from, prot, space);
-+              error = io_remap_pmd_range(pgd, pmd, from, end - from, offset + from, prot, space);
-               if (error)
-                       break;
-               from = (from + PGDIR_SIZE) & PGDIR_MASK;
---- linux-2.6.0-test1/arch/sparc/mm/srmmu.c    2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/sparc/mm/srmmu.c   2003-07-19 17:07:16.000000000 -0700
-@@ -15,7 +15,6 @@
- #include <linux/vmalloc.h>
- #include <linux/pagemap.h>
- #include <linux/init.h>
--#include <linux/blk.h>
- #include <linux/spinlock.h>
- #include <linux/bootmem.h>
- #include <linux/fs.h>
-@@ -2188,7 +2187,7 @@ void __init ld_mmu_srmmu(void)
-       BTFIXUPSET_CALL(pte_pfn, srmmu_pte_pfn, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(pmd_page, srmmu_pmd_page, BTFIXUPCALL_NORM);
--      BTFIXUPSET_CALL(pgd_page, srmmu_pgd_page, BTFIXUPCALL_NORM);
-+      BTFIXUPSET_CALL(__pgd_page, srmmu_pgd_page, BTFIXUPCALL_NORM);
-       BTFIXUPSET_SETHI(none_mask, 0xF0000000);
-@@ -2220,7 +2219,7 @@ void __init ld_mmu_srmmu(void)
-       BTFIXUPSET_CALL(pte_alloc_one_kernel, srmmu_pte_alloc_one_kernel, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(pte_alloc_one, srmmu_pte_alloc_one, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(free_pmd_fast, srmmu_pmd_free, BTFIXUPCALL_NORM);
--      BTFIXUPSET_CALL(pmd_alloc_one, srmmu_pmd_alloc_one, BTFIXUPCALL_NORM);
-+      BTFIXUPSET_CALL(__pmd_alloc_one, srmmu_pmd_alloc_one, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(free_pgd_fast, srmmu_free_pgd_fast, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(get_pgd_fast, srmmu_get_pgd_fast, BTFIXUPCALL_NORM);
---- linux-2.6.0-test1/arch/sparc/mm/sun4c.c    2003-06-14 12:18:29.000000000 -0700
-+++ 25/arch/sparc/mm/sun4c.c   2003-07-19 17:07:16.000000000 -0700
-@@ -2211,7 +2211,7 @@ void __init ld_mmu_sun4c(void)
-       BTFIXUPSET_CALL(pte_alloc_one_kernel, sun4c_pte_alloc_one_kernel, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(pte_alloc_one, sun4c_pte_alloc_one, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(free_pmd_fast, sun4c_free_pmd_fast, BTFIXUPCALL_NOP);
--      BTFIXUPSET_CALL(pmd_alloc_one, sun4c_pmd_alloc_one, BTFIXUPCALL_RETO0);
-+      BTFIXUPSET_CALL(__pmd_alloc_one, sun4c_pmd_alloc_one, BTFIXUPCALL_RETO0);
-       BTFIXUPSET_CALL(free_pgd_fast, sun4c_free_pgd_fast, BTFIXUPCALL_NORM);
-       BTFIXUPSET_CALL(get_pgd_fast, sun4c_get_pgd_fast, BTFIXUPCALL_NORM);
-@@ -2252,5 +2252,5 @@ void __init ld_mmu_sun4c(void)
-       /* These should _never_ get called with two level tables. */
-       BTFIXUPSET_CALL(pgd_set, sun4c_pgd_set, BTFIXUPCALL_NOP);
--      BTFIXUPSET_CALL(pgd_page, sun4c_pgd_page, BTFIXUPCALL_RETO0);
-+      BTFIXUPSET_CALL(__pgd_page, sun4c_pgd_page, BTFIXUPCALL_RETO0);
- }
---- linux-2.6.0-test1/arch/um/drivers/ubd_kern.c       2003-06-14 12:18:20.000000000 -0700
-+++ 25/arch/um/drivers/ubd_kern.c      2003-07-19 17:03:49.000000000 -0700
-@@ -15,7 +15,6 @@
- #include "linux/config.h"
- #include "linux/module.h"
--#include "linux/blk.h"
- #include "linux/blkdev.h"
- #include "linux/hdreg.h"
- #include "linux/init.h"
---- linux-2.6.0-test1/arch/um/kernel/irq.c     2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/um/kernel/irq.c    2003-07-19 17:04:07.000000000 -0700
-@@ -565,9 +565,9 @@ static struct proc_dir_entry * smp_affin
- /* These are read and written as longs, so a read won't see a partial write
-  * even during a race.
-  */
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
-@@ -578,10 +578,10 @@ static int irq_affinity_read_proc (char 
- }
- static unsigned int parse_hex_value (const char *buffer,
--              unsigned long count, unsigned long *ret)
-+              unsigned long count, cpumask_t *ret)
- {
-       unsigned char hexnum [HEX_DIGITS];
--      unsigned long value;
-+      cpumask_t value = CPU_MASK_NONE;
-       int i;
-       if (!count)
-@@ -595,10 +595,9 @@ static unsigned int parse_hex_value (con
-        * Parse the first 8 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
--      value = 0;
-       for (i = 0; i < count; i++) {
--              unsigned int c = hexnum[i];
-+              unsigned int k, c = hexnum[i];
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-@@ -607,7 +606,10 @@ static unsigned int parse_hex_value (con
-               default:
-                       goto out;
-               }
--              value = (value << 4) | c;
-+              cpus_shift_left(value, value, 16);
-+              for (k = 0; k < 4; ++k)
-+                      if (c & (1 << k))
-+                              cpu_set(k, value);
-       }
- out:
-       *ret = value;
-@@ -618,7 +620,7 @@ static int irq_affinity_write_proc (stru
-                                       unsigned long count, void *data)
- {
-       int irq = (long) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t new_value, tmp;
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-@@ -631,7 +633,8 @@ static int irq_affinity_write_proc (stru
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, new_value, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
- #endif
-@@ -644,17 +647,27 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
--      unsigned long *mask = (unsigned long *) data;
-+      cpumask_t tmp, *mask = (cpumask_t *) data;
-+      int k, len = 0;
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", *mask);
-+      tmp = *mask;
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t *mask = (cpumask_t *)data, new_value;
-+      unsigned long full_count = count, err;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
-@@ -693,7 +706,7 @@ static void register_irq_proc (unsigned 
- }
- /* Read and written as a long */
--unsigned long prof_cpu_mask = -1;
-+cpumask_t prof_cpu_mask = CPU_MASK_ALL;
- void __init init_irq_proc (void)
- {
---- linux-2.6.0-test1/arch/um/kernel/skas/process_kern.c       2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/um/kernel/skas/process_kern.c      2003-07-19 17:04:07.000000000 -0700
-@@ -152,7 +152,7 @@ static int start_kernel_proc(void *unuse
-       cpu_tasks[0].pid = pid;
-       cpu_tasks[0].task = current;
- #ifdef CONFIG_SMP
--      cpu_online_map = 1;
-+      cpu_online_map = cpumask_of_cpu(0);
- #endif
-       start_kernel();
-       return(0);
---- linux-2.6.0-test1/arch/um/kernel/smp.c     2003-06-14 12:18:03.000000000 -0700
-+++ 25/arch/um/kernel/smp.c    2003-07-19 17:04:07.000000000 -0700
-@@ -5,9 +5,6 @@
- #include "linux/config.h"
--/* CPU online map, set by smp_boot_cpus */
--unsigned long cpu_online_map = 1;
--
- #ifdef CONFIG_SMP
- #include "linux/sched.h"
-@@ -24,6 +21,9 @@ unsigned long cpu_online_map = 1;
- #include "irq_user.h"
- #include "os.h"
-+/* CPU online map, set by smp_boot_cpus */
-+unsigned long cpu_online_map = cpumask_of_cpu(0);
-+
- /* Per CPU bogomips and other parameters
-  * The only piece used here is the ipi pipe, which is set before SMP is
-  * started and never changed.
-@@ -104,8 +104,8 @@ void smp_send_stop(void)
-       printk("done\n");
- }
--static unsigned long smp_commenced_mask;
--static volatile unsigned long smp_callin_map = 0;
-+static cpumask_t smp_commenced_mask;
-+static cpumask_t smp_callin_map = CPU_MASK_NONE;
- static int idle_proc(void *cpup)
- {
-@@ -120,15 +120,15 @@ static int idle_proc(void *cpup)
-                    current->thread.mode.tt.extern_pid);
-  
-       wmb();
--      if (test_and_set_bit(cpu, &smp_callin_map)) {
-+      if (cpu_test_and_set(cpu, &smp_callin_map)) {
-               printk("huh, CPU#%d already present??\n", cpu);
-               BUG();
-       }
--      while (!test_bit(cpu, &smp_commenced_mask))
-+      while (!cpu_isset(cpu, &smp_commenced_mask))
-               cpu_relax();
--      set_bit(cpu, &cpu_online_map);
-+      cpu_set(cpu, cpu_online_map);
-       default_idle();
-       return(0);
- }
-@@ -159,8 +159,8 @@ void smp_prepare_cpus(unsigned int maxcp
-       unsigned long waittime;
-       int err, cpu;
--      set_bit(0, &cpu_online_map);
--      set_bit(0, &smp_callin_map);
-+      cpu_set(0, cpu_online_map);
-+      cpu_set(0, smp_callin_map);
-       err = os_pipe(cpu_data[0].ipi_pipe, 1, 1);
-       if(err) panic("CPU#0 failed to create IPI pipe, errno = %d", -err);
-@@ -177,10 +177,10 @@ void smp_prepare_cpus(unsigned int maxcp
-               unhash_process(idle);
-               waittime = 200000000;
--              while (waittime-- && !test_bit(cpu, &smp_callin_map))
-+              while (waittime-- && !cpu_isset(cpu, smp_callin_map))
-                       cpu_relax();
--              if (test_bit(cpu, &smp_callin_map))
-+              if (cpu_isset(cpu, smp_callin_map))
-                       printk("done\n");
-               else printk("failed\n");
-       }
-@@ -188,13 +188,13 @@ void smp_prepare_cpus(unsigned int maxcp
- void smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
- }
- int __cpu_up(unsigned int cpu)
- {
--      set_bit(cpu, &smp_commenced_mask);
--      while (!test_bit(cpu, &cpu_online_map))
-+      cpu_set(cpu, smp_commenced_mask);
-+      while (!cpu_isset(cpu, cpu_online_map))
-               mb();
-       return(0);
- }
-@@ -271,7 +271,7 @@ int smp_call_function(void (*_func)(void
-       for (i=0;i<NR_CPUS;i++)
-               if((i != current->thread_info->cpu) && 
--                 test_bit(i, &cpu_online_map))
-+                 cpu_isset(i, cpu_online_map))
-                       write(cpu_data[i].ipi_pipe[1], "C", 1);
-       while (atomic_read(&scf_started) != cpus)
---- linux-2.6.0-test1/arch/um/kernel/tt/process_kern.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/um/kernel/tt/process_kern.c        2003-07-19 17:04:07.000000000 -0700
-@@ -419,7 +419,7 @@ static int start_kernel_proc(void *unuse
-       cpu_tasks[0].pid = pid;
-       cpu_tasks[0].task = current;
- #ifdef CONFIG_SMP
--      cpu_online_map = 1;
-+      cpu_online_map = cpumask_of_cpu(0);
- #endif
-       if(debug) os_stop_process(pid);
-       start_kernel();
---- linux-2.6.0-test1/arch/um/kernel/um_arch.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/um/kernel/um_arch.c        2003-07-19 17:04:07.000000000 -0700
-@@ -57,7 +57,7 @@ static int show_cpuinfo(struct seq_file 
-       index = (struct cpuinfo_um *)v - cpu_data;
- #ifdef CONFIG_SMP
--      if (!(cpu_online_map & (1 << index)))
-+      if (!cpu_online(index))
-               return 0;
- #endif
---- linux-2.6.0-test1/arch/v850/Kconfig        2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/v850/Kconfig       2003-07-19 17:03:49.000000000 -0700
-@@ -48,20 +48,24 @@ menu "Processor type and features"
-    choice
-         prompt "Platform"
-         default GDB
-+      config V850E_SIM
-+                   bool "GDB"
-       config RTE_CB_MA1
-                    bool "RTE-V850E/MA1-CB"
-       config RTE_CB_NB85E
-                    bool "RTE-V850E/NB85E-CB"
--      config V850E_SIM
--                   bool "GDB"
-+      config RTE_CB_ME2
-+                   bool "RTE-V850E/ME2-CB"
-+      config V850E_AS85EP1
-+                   bool "AS85EP1"
-       config V850E2_SIM85E2C
-                    bool "sim85e2c"
-+      config V850E2_SIM85E2S
-+                   bool "sim85e2s"
-       config V850E2_FPGA85E2C
-                    bool "NA85E2C-FPGA"
-       config V850E2_ANNA
-                    bool "Anna"
--      config V850E_AS85EP1
--                   bool "AS85EP1"
-    endchoice
-@@ -78,41 +82,32 @@ menu "Processor type and features"
-         bool
-         depends RTE_CB_MA1
-         default y
--   # Similarly for the RTE-V850E/MA1-CB - V850E/TEG
-+   # Similarly for the RTE-V850E/NB85E-CB - V850E/TEG
-    config V850E_TEG
-         bool
-         depends RTE_CB_NB85E
-         default y
--
--   # NB85E processor core
--   config V850E_NB85E
-+   # ... and the RTE-V850E/ME2-CB - V850E/ME2
-+   config V850E_ME2
-         bool
--        depends V850E_MA1 || V850E_TEG
-+        depends RTE_CB_ME2
-         default y
--   config V850E_MA1_HIGHRES_TIMER
--        bool "High resolution timer support"
--        depends V850E_MA1
--
--   #### V850E2 processor-specific config
-+   #### sim85e2-specific config
--   # V850E2 processors
--   config V850E2
-+   config V850E2_SIM85E2
-         bool
--        depends V850E2_SIM85E2C || V850E2_FPGA85E2C || V850E2_ANNA
-+        depends V850E2_SIM85E2C || V850E2_SIM85E2S
-         default y
--   # Processors based on the NA85E2A core
--   config V850E2_NA85E2A
--        bool
--        depends V850E2_ANNA
--        default y
--   # Processors based on the NA85E2C core
--   config V850E2_NA85E2C
-+   #### V850E2 processor-specific config
-+
-+   # V850E2 processors
-+   config V850E2
-         bool
--        depends V850E2_SIM85E2C || V850E2_FPGA85E2C
-+        depends V850E2_SIM85E2 || V850E2_FPGA85E2C || V850E2_ANNA
-         default y
-@@ -121,7 +116,7 @@ menu "Processor type and features"
-    # Boards in the RTE-x-CB series
-    config RTE_CB
-         bool
--        depends RTE_CB_MA1 || RTE_CB_NB85E
-+        depends RTE_CB_MA1 || RTE_CB_NB85E || RTE_CB_ME2
-         default y
-    config RTE_CB_MULTI
-@@ -129,7 +124,7 @@ menu "Processor type and features"
-         # RTE_CB_NB85E can either have multi ROM support or not, but
-         # other platforms (currently only RTE_CB_MA1) require it.
-         prompt "Multi monitor ROM support" if RTE_CB_NB85E
--        depends RTE_CB
-+        depends RTE_CB_MA1 || RTE_CB_NB85E
-         default y
-    config RTE_CB_MULTI_DBTRAP
-@@ -156,14 +151,42 @@ menu "Processor type and features"
-    # The only PCI bus we support is on the RTE-MOTHER-A board
-    config PCI
-         bool
--        default y if RTE_MB_A_PCI
-+        default RTE_MB_A_PCI
-+
-+
-+   #### Some feature-specific configs
-+
-+   # Everything except for the GDB simulator uses the same interrupt controller
-+   config V850E_INTC
-+        bool
-+        default !V850E_SIM
-+
-+   # Everything except for the various simulators uses the "Timer D" unit
-+   config V850E_TIMER_D
-+        bool
-+        default !V850E_SIM && !V850E2_SIM85E2
-+
-+   # Cache control used on some v850e1 processors
-+   config V850E_CACHE
-+          bool
-+        default V850E_TEG || V850E_ME2
-+
-+   # Cache control used on v850e2 processors; I think this should
-+   # actually apply to more, but currently only the SIM85E2S uses it
-+   config V850E2_CACHE
-+        bool
-+        default V850E2_SIM85E2S
-+
-+   config NO_CACHE
-+        bool
-+        default !V850E_CACHE && !V850E2_CACHE
-    #### Misc config
-    config ROM_KERNEL
-         bool "Kernel in ROM"
--        depends V850E2_ANNA || (RTE_CB && !RTE_CB_MULTI)
-+        depends V850E2_ANNA || V850E_AS85EP1 || RTE_CB_ME2
-    # Some platforms pre-zero memory, in which case the kernel doesn't need to
-    config ZERO_BSS
-@@ -177,9 +200,12 @@ menu "Processor type and features"
-         int
-         default 8 if V850E2_SIM85E2C || V850E2_FPGA85E2C
-+   config V850E_HIGHRES_TIMER
-+        bool "High resolution timer support"
-+        depends V850E_TIMER_D
-    config TIME_BOOTUP
-         bool "Time bootup"
--        depends V850E_MA1_HIGHRES_TIMER
-+        depends V850E_HIGHRES_TIMER
-    config RESET_GUARD
-         bool "Reset Guard"
-@@ -241,6 +267,7 @@ config KCORE_AOUT
-       default y
- config KCORE_ELF
-+      bool
-       default y
- source "fs/Kconfig.binfmt"
---- linux-2.6.0-test1/arch/v850/kernel/anna.c  2003-06-14 12:18:21.000000000 -0700
-+++ 25/arch/v850/kernel/anna.c 2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * arch/v850/kernel/anna.c -- Anna V850E2 evaluation chip/board
-  *
-- *  Copyright (C) 2002  NEC Corporation
-- *  Copyright (C) 2002  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2002,03  NEC Electronics Corporation
-+ *  Copyright (C) 2002,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -21,8 +21,8 @@
- #include <asm/machdep.h>
- #include <asm/atomic.h>
- #include <asm/page.h>
--#include <asm/nb85e_timer_d.h>
--#include <asm/nb85e_uart.h>
-+#include <asm/v850e_timer_d.h>
-+#include <asm/v850e_uart.h>
- #include "mach.h"
-@@ -41,32 +41,34 @@ static void anna_led_tick (void);
- void __init mach_early_init (void)
- {
--      ANNA_ILBEN  = 0;
--      ANNA_CSC(0) = 0x402F;
--      ANNA_CSC(1) = 0x4000;
--      ANNA_BPC    = 0;
--      ANNA_BSC    = 0xAAAA;
--      ANNA_BEC    = 0;
--      ANNA_BHC    = 0xFFFF;   /* icache all memory, dcache all */
--      ANNA_BCT(0) = 0xB088;
--      ANNA_BCT(1) = 0x0008;
--      ANNA_DWC(0) = 0x0027;
--      ANNA_DWC(1) = 0;
--      ANNA_BCC    = 0x0006;
--      ANNA_ASC    = 0;
--      ANNA_LBS    = 0x0089;
--      ANNA_SCR3   = 0x21A9;
--      ANNA_RFS3   = 0x8121;
-+      ANNA_ILBEN    = 0;
--      nb85e_intc_disable_irqs ();
-+      V850E2_CSC(0) = 0x402F;
-+      V850E2_CSC(1) = 0x4000;
-+      V850E2_BPC    = 0;
-+      V850E2_BSC    = 0xAAAA;
-+      V850E2_BEC    = 0;
-+
-+#if 0
-+      V850E2_BHC    = 0xFFFF; /* icache all memory, dcache all */
-+#else
-+      V850E2_BHC    = 0;      /* cache no memory */
-+#endif
-+      V850E2_BCT(0) = 0xB088;
-+      V850E2_BCT(1) = 0x0008;
-+      V850E2_DWC(0) = 0x0027;
-+      V850E2_DWC(1) = 0;
-+      V850E2_BCC    = 0x0006;
-+      V850E2_ASC    = 0;
-+      V850E2_LBS    = 0x0089;
-+      V850E2_SCR(3) = 0x21A9;
-+      V850E2_RFS(3) = 0x8121;
-+
-+      v850e_intc_disable_irqs ();
- }
- void __init mach_setup (char **cmdline)
- {
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
--      nb85e_uart_cons_init (1);
--#endif
--
-       ANNA_PORT_PM (LEDS_PORT) = 0;   /* Make all LED pins output pins.  */
-       mach_tick = anna_led_tick;
- }
-@@ -95,12 +97,12 @@ void mach_gettimeofday (struct timespec 
- void __init mach_sched_init (struct irqaction *timer_action)
- {
-       /* Start hardware timer.  */
--      nb85e_timer_d_configure (0, HZ);
-+      v850e_timer_d_configure (0, HZ);
-       /* Install timer interrupt handler.  */
-       setup_irq (IRQ_INTCMD(0), timer_action);
- }
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
-       { "IRQ", 0,             NUM_MACH_IRQS,  1, 7 },
-       { "PIN", IRQ_INTP(0),   IRQ_INTP_NUM,   1, 4 },
-       { "CCC", IRQ_INTCCC(0), IRQ_INTCCC_NUM, 1, 5 },
-@@ -118,7 +120,7 @@ static struct hw_interrupt_type hw_itype
- void __init mach_init_irqs (void)
- {
--      nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+      v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
- void machine_restart (char *__unused)
---- linux-2.6.0-test1/arch/v850/kernel/as85ep1.c       2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/v850/kernel/as85ep1.c      2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * arch/v850/kernel/as85ep1.c -- AS85EP1 V850E evaluation chip/board
-  *
-- *  Copyright (C) 2002  NEC Corporation
-- *  Copyright (C) 2002  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2002,03  NEC Electronics Corporation
-+ *  Copyright (C) 2002,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -21,8 +21,8 @@
- #include <asm/machdep.h>
- #include <asm/atomic.h>
- #include <asm/page.h>
--#include <asm/nb85e_timer_d.h>
--#include <asm/nb85e_uart.h>
-+#include <asm/v850e_timer_d.h>
-+#include <asm/v850e_uart.h>
- #include "mach.h"
-@@ -90,20 +90,14 @@ void __init mach_early_init (void)
-       AS85EP1_IRAMM = 0x0;    /* \e$BFbB"L?Na\e(BRAM\e$B$O!V\e(Bread-mode\e$B!W$K$J$j$^$9\e(B */
- #endif /* !CONFIG_ROM_KERNEL */
--      nb85e_intc_disable_irqs ();
-+      v850e_intc_disable_irqs ();
- }
- void __init mach_setup (char **cmdline)
- {
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
--      nb85e_uart_cons_init (1);
--#endif
--
-       AS85EP1_PORT_PMC (LEDS_PORT) = 0; /* Make the LEDs port an I/O port. */
-       AS85EP1_PORT_PM (LEDS_PORT) = 0; /* Make all the bits output pins.  */
-       mach_tick = as85ep1_led_tick;
--
--      ROOT_DEV = MKDEV (BLKMEM_MAJOR, 0);
- }
- void __init mach_get_physical_ram (unsigned long *ram_start,
-@@ -137,21 +131,21 @@ void __init mach_reserve_bootmem ()
-                                root_fs_image_end - root_fs_image_start);
- }
--void mach_gettimeofday (struct timeval *tv)
-+void mach_gettimeofday (struct timespec *tv)
- {
-       tv->tv_sec = 0;
--      tv->tv_usec = 0;
-+      tv->tv_nsec = 0;
- }
- void __init mach_sched_init (struct irqaction *timer_action)
- {
-       /* Start hardware timer.  */
--      nb85e_timer_d_configure (0, HZ);
-+      v850e_timer_d_configure (0, HZ);
-       /* Install timer interrupt handler.  */
-       setup_irq (IRQ_INTCMD(0), timer_action);
- }
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
-       { "IRQ", 0,             NUM_MACH_IRQS,  1, 7 },
-       { "CCC", IRQ_INTCCC(0), IRQ_INTCCC_NUM, 1, 5 },
-       { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 },
-@@ -166,7 +160,7 @@ static struct hw_interrupt_type hw_itype
- void __init mach_init_irqs (void)
- {
--      nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+      v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
- void machine_restart (char *__unused)
---- linux-2.6.0-test1/arch/v850/kernel/fpga85e2c.c     2003-06-14 12:18:33.000000000 -0700
-+++ 25/arch/v850/kernel/fpga85e2c.c    2003-07-19 17:03:49.000000000 -0700
-@@ -2,8 +2,8 @@
-  * arch/v850/kernel/fpga85e2c.h -- Machine-dependent defs for
-  *    FPGA implementation of V850E2/NA85E2C
-  *
-- *  Copyright (C) 2002  NEC Corporation
-- *  Copyright (C) 2002  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2002,03  NEC Electronics Corporation
-+ *  Copyright (C) 2002,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -46,7 +46,7 @@ void __init mach_early_init (void)
-       /* Set bus sizes: CS0 32-bit, CS1 16-bit, CS7 8-bit,
-          everything else 32-bit.  */
--      BSC = 0x2AA6;
-+      V850E2_BSC = 0x2AA6;
-       for (i = 2; i <= 6; i++)
-               CSDEV(i) = 0;   /* 32 bit */
-@@ -134,7 +134,7 @@ void machine_power_off (void)
\f
- /* Interrupts */
--struct nb85e_intc_irq_init irq_inits[] = {
-+struct v850e_intc_irq_init irq_inits[] = {
-       { "IRQ", 0,             NUM_MACH_IRQS,  1, 7 },
-       { "RPU", IRQ_RPU(0),    IRQ_RPU_NUM,    1, 6 },
-       { 0 }
-@@ -146,7 +146,7 @@ struct hw_interrupt_type hw_itypes[NUM_I
- /* Initialize interrupts.  */
- void __init mach_init_irqs (void)
- {
--      nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+      v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
\f
---- linux-2.6.0-test1/arch/v850/kernel/gbus_int.c      2003-07-13 21:44:34.000000000 -0700
-+++ 25/arch/v850/kernel/gbus_int.c     2003-07-19 17:03:49.000000000 -0700
-@@ -113,9 +113,7 @@ static irqreturn_t gbus_int_handle_irq (
-               /* Only pay attention to enabled interrupts.  */
-               status &= enable;
-               if (status) {
--                      unsigned base_irq
--                              = IRQ_GBUS_INT (w * GBUS_INT_BITS_PER_WORD);
--                      irq = base_irq;
-+                      irq = IRQ_GBUS_INT (w * GBUS_INT_BITS_PER_WORD);
-                       do {
-                               /* There's an active interrupt in word
-                                  W, find out which one, and call its
-@@ -247,7 +245,7 @@ void __init gbus_int_init_irqs (void)
-       /* First initialize the shared gint interrupts.  */
-       for (i = 0; i < NUM_USED_GINTS; i++) {
-               unsigned gint = used_gint[i].gint;
--              struct nb85e_intc_irq_init gint_irq_init[2];
-+              struct v850e_intc_irq_init gint_irq_init[2];
-               /* We initialize one GINT interrupt at a time.  */
-               gint_irq_init[0].name = "GINT";
-@@ -258,7 +256,7 @@ void __init gbus_int_init_irqs (void)
-               gint_irq_init[1].name = 0; /* Terminate the vector.  */
--              nb85e_intc_init_irq_types (gint_irq_init, gint_hw_itypes);
-+              v850e_intc_init_irq_types (gint_irq_init, gint_hw_itypes);
-       }
-       /* Then the GBUS interrupts.  */
---- linux-2.6.0-test1/arch/v850/kernel/head.S  2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/v850/kernel/head.S 2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * arch/v850/kernel/head.S -- Lowest-level startup code
-  *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -115,7 +115,14 @@ C_ENTRY(start):
-       jarl    CSYM(memset), lp
- #endif
--      // Start Linux kernel.
-+      // What happens if the main kernel function returns (it shouldn't)
-       mov     hilo(CSYM(machine_halt)), lp
--      jr      CSYM(start_kernel)
-+
-+      // Start the linux kernel.  We use an indirect jump to get extra
-+      // range, because on some platforms this initial startup code
-+      // (and the associated platform-specific code in mach_early_init)
-+      // are located far away from the main kernel, e.g. so that they
-+      // can initialize RAM first and copy the kernel or something.
-+      mov     hilo(CSYM(start_kernel)), r12
-+      jmp     [r12]
- C_END(start)
---- linux-2.6.0-test1/arch/v850/kernel/highres_timer.c 2003-06-14 12:18:52.000000000 -0700
-+++ 25/arch/v850/kernel/highres_timer.c        2003-07-19 17:03:49.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * arch/v850/kernel/highres_timer.c -- High resolution timing routines
-  *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -12,7 +12,7 @@
-  */
- #include <asm/system.h>
--#include <asm/nb85e_timer_d.h>
-+#include <asm/v850e_timer_d.h>
- #include <asm/highres_timer.h>
- #define HIGHRES_TIMER_USEC_SHIFT   12
-@@ -42,7 +42,7 @@ void highres_timer_slow_tick_irq (void)
- void highres_timer_reset (void)
- {
--      NB85E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT) = 0;
-+      V850E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT) = 0;
-       HIGHRES_TIMER_SLOW_TICKS = 0;
- }
-@@ -51,12 +51,12 @@ void highres_timer_start (void)
-       u32 fast_tick_rate;
-       /* Start hardware timer.  */
--      nb85e_timer_d_configure (HIGHRES_TIMER_TIMER_D_UNIT,
-+      v850e_timer_d_configure (HIGHRES_TIMER_TIMER_D_UNIT,
-                                HIGHRES_TIMER_SLOW_TICK_RATE);
-       fast_tick_rate =
--              (NB85E_TIMER_D_BASE_FREQ
--               >> NB85E_TIMER_D_DIVLOG2 (HIGHRES_TIMER_TIMER_D_UNIT));
-+              (V850E_TIMER_D_BASE_FREQ
-+               >> V850E_TIMER_D_DIVLOG2 (HIGHRES_TIMER_TIMER_D_UNIT));
-       /* The obvious way of calculating microseconds from fast ticks
-          is to do:
-@@ -77,16 +77,16 @@ void highres_timer_start (void)
-       /* Enable the interrupt (which is hardwired to this use), and
-          give it the highest priority.  */
--      NB85E_INTC_IC (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT)) = 0;
-+      V850E_INTC_IC (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT)) = 0;
- }
- void highres_timer_stop (void)
- {
-       /* Stop the timer.  */
--      NB85E_TIMER_D_TMCD (HIGHRES_TIMER_TIMER_D_UNIT) =
--              NB85E_TIMER_D_TMCD_CAE;
-+      V850E_TIMER_D_TMCD (HIGHRES_TIMER_TIMER_D_UNIT) =
-+              V850E_TIMER_D_TMCD_CAE;
-       /* Disable its interrupt, just in case.  */
--      nb85e_intc_disable_irq (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT));
-+      v850e_intc_disable_irq (IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT));
- }
- inline void highres_timer_read_ticks (u32 *slow_ticks, u32 *fast_ticks)
-@@ -95,9 +95,9 @@ inline void highres_timer_read_ticks (u3
-       u32 fast_ticks_1, fast_ticks_2, _slow_ticks;
-       local_irq_save (flags);
--      fast_ticks_1 = NB85E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
-+      fast_ticks_1 = V850E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
-       _slow_ticks = HIGHRES_TIMER_SLOW_TICKS;
--      fast_ticks_2 = NB85E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
-+      fast_ticks_2 = V850E_TIMER_D_TMD (HIGHRES_TIMER_TIMER_D_UNIT);
-       local_irq_restore (flags);
-       if (fast_ticks_2 < fast_ticks_1)
---- linux-2.6.0-test1/arch/v850/kernel/intv.S  2003-06-14 12:18:22.000000000 -0700
-+++ 25/arch/v850/kernel/intv.S 2003-07-19 17:03:49.000000000 -0700
-@@ -16,7 +16,7 @@
- #include <asm/machdep.h>
- #include <asm/entry.h>
--#ifdef CONFIG_V850E_MA1_HIGHRES_TIMER
-+#ifdef CONFIG_V850E_HIGHRES_TIMER
- #include <asm/highres_timer.h>
- #endif
-@@ -59,7 +59,7 @@
-       .section        .intv.mach, "ax"
-       .org    0x0
--#if defined (CONFIG_V850E_MA1_HIGHRES_TIMER) && defined (IRQ_INTCMD)
-+#if defined (CONFIG_V850E_HIGHRES_TIMER) && defined (IRQ_INTCMD)
-       /* Interrupts before the highres timer interrupt.  */
-       .rept   IRQ_INTCMD (HIGHRES_TIMER_TIMER_D_UNIT)
---- linux-2.6.0-test1/arch/v850/kernel/ma.c    2003-06-14 12:17:58.000000000 -0700
-+++ 25/arch/v850/kernel/ma.c   2003-07-19 17:03:49.000000000 -0700
-@@ -22,19 +22,19 @@
- #include <asm/atomic.h>
- #include <asm/page.h>
- #include <asm/machdep.h>
--#include <asm/nb85e_timer_d.h>
-+#include <asm/v850e_timer_d.h>
- #include "mach.h"
- void __init mach_sched_init (struct irqaction *timer_action)
- {
-       /* Start hardware timer.  */
--      nb85e_timer_d_configure (0, HZ);
-+      v850e_timer_d_configure (0, HZ);
-       /* Install timer interrupt handler.  */
-       setup_irq (IRQ_INTCMD(0), timer_action);
- }
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
-       { "IRQ", 0,             NUM_MACH_IRQS,  1, 7 },
-       { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 },
-       { "DMA", IRQ_INTDMA(0), IRQ_INTDMA_NUM, 1, 2 },
-@@ -51,7 +51,7 @@ static struct hw_interrupt_type hw_itype
- /* Initialize MA chip interrupts.  */
- void __init ma_init_irqs (void)
- {
--      nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+      v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
- /* Called before configuring an on-chip UART.  */
---- linux-2.6.0-test1/arch/v850/kernel/Makefile        2003-06-14 12:18:51.000000000 -0700
-+++ 25/arch/v850/kernel/Makefile       2003-07-19 17:03:49.000000000 -0700
-@@ -15,24 +15,26 @@ obj-y += intv.o entry.o process.o syscal
-        signal.o irq.o mach.o ptrace.o bug.o
- obj-$(CONFIG_MODULES)         += module.o v850_ksyms.o
- # chip-specific code
--obj-$(CONFIG_V850E_NB85E)     += nb85e_intc.o
--obj-$(CONFIG_V850E_MA1)               += ma.o nb85e_utils.o nb85e_timer_d.o
--obj-$(CONFIG_V850E_TEG)               += teg.o nb85e_utils.o nb85e_cache.o \
--                                 nb85e_timer_d.o
--obj-$(CONFIG_V850E2_ANNA)     += anna.o nb85e_intc.o nb85e_utils.o \
--                                 nb85e_timer_d.o
--obj-$(CONFIG_V850E_AS85EP1)   += as85ep1.o nb85e_intc.o nb85e_utils.o \
--                                 nb85e_timer_d.o
-+obj-$(CONFIG_V850E_MA1)               += ma.o
-+obj-$(CONFIG_V850E_ME2)               += me2.o
-+obj-$(CONFIG_V850E_TEG)               += teg.o
-+obj-$(CONFIG_V850E_AS85EP1)   += as85ep1.o
-+obj-$(CONFIG_V850E2_ANNA)     += anna.o
- # platform-specific code
- obj-$(CONFIG_V850E_SIM)               += sim.o simcons.o
--obj-$(CONFIG_V850E2_SIM85E2C) += sim85e2c.o nb85e_intc.o memcons.o
--obj-$(CONFIG_V850E2_FPGA85E2C)        += fpga85e2c.o nb85e_intc.o memcons.o
-+obj-$(CONFIG_V850E2_SIM85E2)  += sim85e2.o memcons.o
-+obj-$(CONFIG_V850E2_FPGA85E2C)        += fpga85e2c.o memcons.o
- obj-$(CONFIG_RTE_CB)          += rte_cb.o rte_cb_leds.o
- obj-$(CONFIG_RTE_CB_MA1)      += rte_ma1_cb.o
-+obj-$(CONFIG_RTE_CB_ME2)      += rte_me2_cb.o
- obj-$(CONFIG_RTE_CB_NB85E)    += rte_nb85e_cb.o
- obj-$(CONFIG_RTE_CB_MULTI)    += rte_cb_multi.o
- obj-$(CONFIG_RTE_MB_A_PCI)    += rte_mb_a_pci.o
- obj-$(CONFIG_RTE_GBUS_INT)    += gbus_int.o
- # feature-specific code
--obj-$(CONFIG_V850E_MA1_HIGHRES_TIMER) += highres_timer.o
-+obj-$(CONFIG_V850E_INTC)      += v850e_intc.o
-+obj-$(CONFIG_V850E_TIMER_D)   += v850e_timer_d.o v850e_utils.o
-+obj-$(CONFIG_V850E_CACHE)     += v850e_cache.o
-+obj-$(CONFIG_V850E2_CACHE)    += v850e2_cache.o
-+obj-$(CONFIG_V850E_HIGHRES_TIMER) += highres_timer.o
- obj-$(CONFIG_PROC_FS)         += procfs.o
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/me2.c  2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,74 @@
-+/*
-+ * arch/v850/kernel/me2.c -- V850E/ME2 chip-specific support
-+ *
-+ *  Copyright (C) 2003  NEC Corporation
-+ *  Copyright (C) 2003  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/swap.h>
-+#include <linux/bootmem.h>
-+#include <linux/irq.h>
-+
-+#include <asm/atomic.h>
-+#include <asm/page.h>
-+#include <asm/machdep.h>
-+#include <asm/v850e_timer_d.h>
-+
-+#include "mach.h"
-+
-+void __init mach_sched_init (struct irqaction *timer_action)
-+{
-+      /* Start hardware timer.  */
-+      v850e_timer_d_configure (0, HZ);
-+      /* Install timer interrupt handler.  */
-+      setup_irq (IRQ_INTCMD(0), timer_action);
-+}
-+
-+static struct v850e_intc_irq_init irq_inits[] = {
-+      { "IRQ",    0,                NUM_CPU_IRQS,      1, 7 },
-+      { "INTP",   IRQ_INTP(0),      IRQ_INTP_NUM,      1, 5 },
-+      { "CMD",    IRQ_INTCMD(0),    IRQ_INTCMD_NUM,    1, 3 },
-+      { "UBTIRE", IRQ_INTUBTIRE(0), IRQ_INTUBTIRE_NUM, 5, 4 },
-+      { "UBTIR",  IRQ_INTUBTIR(0),  IRQ_INTUBTIR_NUM,  5, 4 },
-+      { "UBTIT",  IRQ_INTUBTIT(0),  IRQ_INTUBTIT_NUM,  5, 4 },
-+      { "UBTIF",  IRQ_INTUBTIF(0),  IRQ_INTUBTIF_NUM,  5, 4 },
-+      { "UBTITO", IRQ_INTUBTITO(0), IRQ_INTUBTITO_NUM, 5, 4 },
-+      { 0 }
-+};
-+#define NUM_IRQ_INITS ((sizeof irq_inits / sizeof irq_inits[0]) - 1)
-+
-+static struct hw_interrupt_type hw_itypes[NUM_IRQ_INITS];
-+
-+/* Initialize V850E/ME2 chip interrupts.  */
-+void __init me2_init_irqs (void)
-+{
-+      v850e_intc_init_irq_types (irq_inits, hw_itypes);
-+}
-+
-+/* Called before configuring an on-chip UART.  */
-+void me2_uart_pre_configure (unsigned chan, unsigned cflags, unsigned baud)
-+{
-+      if (chan == 0) {
-+              /* Specify that the relevent pins on the chip should do
-+                 serial I/O, not direct I/O.  */
-+              ME2_PORT1_PMC |= 0xC;
-+              /* Specify that we're using the UART, not the CSI device. */
-+              ME2_PORT1_PFC |= 0xC;
-+      } else if (chan == 1) {
-+              /* Specify that the relevent pins on the chip should do
-+                 serial I/O, not direct I/O.  */
-+              ME2_PORT2_PMC |= 0x6;
-+              /* Specify that we're using the UART, not the CSI device. */
-+              ME2_PORT2_PFC |= 0x6;
-+      }
-+}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_cache.c   2003-06-14 12:18:25.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,178 +0,0 @@
--/*
-- * arch/v850/kernel/nb85e_cache.c -- Cache control for NB85E_CACHE212 and
-- *    NB85E_CACHE213 cache memories
-- *
-- *  Copyright (C) 2003  NEC Electronics Corporation
-- *  Copyright (C) 2003  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <asm/entry.h>
--#include <asm/nb85e_cache.h>
--
--#define WAIT_UNTIL_CLEAR(value) while (value) {}
--
--/* Set caching params via the BHC and DCC registers.  */
--void nb85e_cache_enable (u16 bhc, u16 dcc)
--{
--      unsigned long *r0_ram = (unsigned long *)R0_RAM_ADDR;
--      register u16 bhc_val asm ("r6") = bhc;
--
--      /* Configure data-cache.  */
--      NB85E_CACHE_DCC = dcc;
--
--      /* Configure caching for various memory regions by writing the BHC
--         register.  The documentation says that an instruction _cannot_
--         enable/disable caching for the memory region in which the
--         instruction itself exists; to work around this, we store
--         appropriate instructions into the on-chip RAM area (which is never
--         cached), and briefly jump there to do the work.  */
--      r0_ram[0] = 0xf0720760; /* st.h r0, 0xfffff072[r0] */
--      r0_ram[1] = 0xf06a3760; /* st.h r6, 0xfffff06a[r0] */
--      r0_ram[2] = 0x5640006b; /* jmp [r11] */
--      asm ("mov hilo(1f), r11; jmp [%1]; 1:;"
--           :: "r" (bhc_val), "r" (R0_RAM_ADDR) : "r11");
--}
--
--static void clear_icache (void)
--{
--      /* 1. Read the instruction cache control register (ICC) and confirm
--            that bits 0 and 1 (TCLR0, TCLR1) are all cleared.  */
--      WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3);
--
--      /* 2. Read the ICC register and confirm that bit 12 (LOCK0) is
--            cleared.  Bit 13 of the ICC register is always cleared.  */
--      WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x1000);
--
--      /* 3. Set the TCLR0 and TCLR1 bits of the ICC register as follows,
--            when clearing way 0 and way 1 at the same time:
--              (a) Set the TCLR0 and TCLR1 bits.
--              (b) Read the TCLR0 and TCLR1 bits to confirm that these bits
--                  are cleared.
--              (c) Perform (a) and (b) above again.  */
--      NB85E_CACHE_ICC |= 0x3;
--      WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3);
--      /* Do it again.  */
--      NB85E_CACHE_ICC |= 0x3;
--      WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3);
--}
--
--/* Flush or clear (or both) the data cache, depending on the value of FLAGS;
--   the procedure is the same for both, just the control bits used differ (and
--   both may be performed simultaneously).  */
--static void dcache_op (unsigned short flags)
--{
--      /* 1. Read the data cache control register (DCC) and confirm that bits
--            0, 1, 4, and 5 (DC00, DC01, DC04, DC05) are all cleared.  */
--      WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & 0x33);
--
--      /* 2. Clear DCC register bit 12 (DC12), bit 13 (DC13), or both
--            depending on the way for which tags are to be cleared.  */
--      NB85E_CACHE_DCC &= ~0xC000;
--
--      /* 3. Set DCC register bit 0 (DC00), bit 1 (DC01) or both depending on
--            the way for which tags are to be cleared.
--            ...
--            Set DCC register bit 4 (DC04), bit 5 (DC05), or both depending
--            on the way to be data flushed.  */
--      NB85E_CACHE_DCC |= flags;
--
--      /* 4. Read DCC register bit DC00, DC01 [DC04, DC05], or both depending
--            on the way for which tags were cleared [flushed] and confirm
--            that that bit is cleared.  */
--      WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & flags);
--}
--
--/* Flushes the contents of the dcache to memory.  */
--static inline void flush_dcache (void)
--{
--      /* We only need to do something if in write-back mode.  */
--      if (NB85E_CACHE_DCC & 0x0400)
--              dcache_op (0x30);
--}
--
--/* Flushes the contents of the dcache to memory, and then clears it.  */
--static inline void clear_dcache (void)
--{
--      /* We only need to do something if the dcache is enabled.  */
--      if (NB85E_CACHE_DCC & 0x0C00)
--              dcache_op (0x33);
--}
--
--/* Clears the dcache without flushing to memory first.  */
--static inline void clear_dcache_no_flush (void)
--{
--      /* We only need to do something if the dcache is enabled.  */
--      if (NB85E_CACHE_DCC & 0x0C00)
--              dcache_op (0x3);
--}
--
--static inline void cache_exec_after_store (void)
--{
--      flush_dcache ();
--      clear_icache ();
--}
--
--\f
--/* Exported functions.  */
--
--void inline nb85e_cache_flush_all (void)
--{
--      clear_icache ();
--      clear_dcache ();
--}
--
--void nb85e_cache_flush_mm (struct mm_struct *mm)
--{
--      /* nothing */
--}
--
--void nb85e_cache_flush_range (struct mm_struct *mm,
--                            unsigned long start, unsigned long end)
--{
--      /* nothing */
--}
--
--void nb85e_cache_flush_page (struct vm_area_struct *vma,
--                           unsigned long page_addr)
--{
--      /* nothing */
--}
--
--void nb85e_cache_flush_dcache_page (struct page *page)
--{
--      /* nothing */
--}
--
--void nb85e_cache_flush_icache (void)
--{
--      cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_icache_range (unsigned long start, unsigned long end)
--{
--      cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_icache_page (struct vm_area_struct *vma,
--                                  struct page *page)
--{
--      cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma,
--                                        struct page *page,
--                                        unsigned long adr, int len)
--{
--      cache_exec_after_store ();
--}
--
--void nb85e_cache_flush_sigtramp (unsigned long addr)
--{
--      cache_exec_after_store ();
--}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_intc.c    2003-06-14 12:18:06.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,104 +0,0 @@
--/*
-- * arch/v850/kernel/nb85e_intc.c -- NB85E cpu core interrupt controller (INTC)
-- *
-- *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-- *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/irq.h>
--
--#include <asm/nb85e_intc.h>
--
--static void irq_nop (unsigned irq) { }
--
--static unsigned nb85e_intc_irq_startup (unsigned irq)
--{
--      nb85e_intc_clear_pending_irq (irq);
--      nb85e_intc_enable_irq (irq);
--      return 0;
--}
--
--static void nb85e_intc_end_irq (unsigned irq)
--{
--      unsigned long psw, temp;
--
--      /* Clear the highest-level bit in the In-service priority register
--         (ISPR), to allow this interrupt (or another of the same or
--         lesser priority) to happen again.
--
--         The `reti' instruction normally does this automatically when the
--         PSW bits EP and NP are zero, but we can't always rely on reti
--         being used consistently to return after an interrupt (another
--         process can be scheduled, for instance, which can delay the
--         associated reti for a long time, or this process may be being
--         single-stepped, which uses the `dbret' instruction to return
--         from the kernel).
--
--         We also set the PSW EP bit, which prevents reti from also
--         trying to modify the ISPR itself.  */
--
--      /* Get PSW and disable interrupts.  */
--      asm volatile ("stsr psw, %0; di" : "=r" (psw));
--      /* We don't want to do anything for NMIs (they don't use the ISPR).  */
--      if (! (psw & 0xC0)) {
--              /* Transition to `trap' state, so that an eventual real
--                 reti instruction won't modify the ISPR.  */
--              psw |= 0x40;
--              /* Fake an interrupt return, which automatically clears the
--                 appropriate bit in the ISPR.  */
--              asm volatile ("mov hilo(1f), %0;"
--                            "ldsr %0, eipc; ldsr %1, eipsw;"
--                            "reti;"
--                            "1:"
--                            : "=&r" (temp) : "r" (psw));
--      }
--}
--
--/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
--   INITS (which is terminated by an entry with the name field == 0).  */
--void __init nb85e_intc_init_irq_types (struct nb85e_intc_irq_init *inits,
--                                     struct hw_interrupt_type *hw_irq_types)
--{
--      struct nb85e_intc_irq_init *init;
--      for (init = inits; init->name; init++) {
--              unsigned i;
--              struct hw_interrupt_type *hwit = hw_irq_types++;
--
--              hwit->typename = init->name;
--
--              hwit->startup  = nb85e_intc_irq_startup;
--              hwit->shutdown = nb85e_intc_disable_irq;
--              hwit->enable   = nb85e_intc_enable_irq;
--              hwit->disable  = nb85e_intc_disable_irq;
--              hwit->ack      = irq_nop;
--              hwit->end      = nb85e_intc_end_irq;
--              
--              /* Initialize kernel IRQ infrastructure for this interrupt.  */
--              init_irq_handlers(init->base, init->num, init->interval, hwit);
--
--              /* Set the interrupt priorities.  */
--              for (i = 0; i < init->num; i++) {
--                      unsigned irq = init->base + i * init->interval;
--
--                      /* If the interrupt is currently enabled (all
--                         interrupts are initially disabled), then
--                         assume whoever enabled it has set things up
--                         properly, and avoid messing with it.  */
--                      if (! nb85e_intc_irq_enabled (irq))
--                              /* This write also (1) disables the
--                                 interrupt, and (2) clears any pending
--                                 interrupts.  */
--                              NB85E_INTC_IC (irq)
--                                      = (NB85E_INTC_IC_PR (init->priority)
--                                         | NB85E_INTC_IC_MK);
--              }
--      }
--}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_timer_d.c 2003-06-14 12:18:21.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,54 +0,0 @@
--/*
-- * include/asm-v850/nb85e_timer_d.c -- `Timer D' component often used
-- *    with the NB85E cpu core
-- *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/kernel.h>
--
--#include <asm/nb85e_utils.h>
--#include <asm/nb85e_timer_d.h>
--
--/* Start interval timer TIMER (0-3).  The timer will issue the
--   corresponding INTCMD interrupt RATE times per second.
--   This function does not enable the interrupt.  */
--void nb85e_timer_d_configure (unsigned timer, unsigned rate)
--{
--      unsigned divlog2, count;
--
--      /* Calculate params for timer.  */
--      if (! calc_counter_params (
--                  NB85E_TIMER_D_BASE_FREQ, rate,
--                  NB85E_TIMER_D_TMCD_CS_MIN, NB85E_TIMER_D_TMCD_CS_MAX, 16,
--                  &divlog2, &count))
--              printk (KERN_WARNING
--                      "Cannot find interval timer %d setting suitable"
--                      " for rate of %dHz.\n"
--                      "Using rate of %dHz instead.\n",
--                      timer, rate,
--                      (NB85E_TIMER_D_BASE_FREQ >> divlog2) >> 16);
--
--      /* Do the actual hardware timer initialization:  */
--
--      /* Enable timer.  */
--      NB85E_TIMER_D_TMCD(timer) = NB85E_TIMER_D_TMCD_CAE;
--      /* Set clock divider.  */
--      NB85E_TIMER_D_TMCD(timer)
--              = NB85E_TIMER_D_TMCD_CAE
--              | NB85E_TIMER_D_TMCD_CS(divlog2);
--      /* Set timer compare register.  */
--      NB85E_TIMER_D_CMD(timer) = count;
--      /* Start counting.  */
--      NB85E_TIMER_D_TMCD(timer)
--              = NB85E_TIMER_D_TMCD_CAE
--              | NB85E_TIMER_D_TMCD_CS(divlog2)
--              | NB85E_TIMER_D_TMCD_CE;
--}
---- linux-2.6.0-test1/arch/v850/kernel/nb85e_utils.c   2003-06-14 12:17:59.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,65 +0,0 @@
--/*
-- * include/asm-v850/nb85e_utils.h -- Utility functions associated with
-- *    the NB85E cpu core
-- *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--/* Note: these functions are often associated with the N85E cpu core,
--   but not always, which is why they're not in `nb85e.c'.  */
--
--#include <asm/nb85e_utils.h>
--
--/* Calculate counter clock-divider and count values to attain the
--   desired frequency RATE from the base frequency BASE_FREQ.  The
--   counter is expected to have a clock-divider, which can divide the
--   system cpu clock by a power of two value from MIN_DIVLOG2 to
--   MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
--   counts up and resets whenever it's equal to the compare register,
--   generating an interrupt or whatever when it does so).  The returned
--   values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
--   -- the counter compare value to use.  Returns true if it was possible
--   to find a reasonable value, otherwise false (and the other return
--   values will be set to be as good as possible).  */
--int calc_counter_params (unsigned long base_freq,
--                       unsigned long rate,
--                       unsigned min_divlog2, unsigned max_divlog2,
--                       unsigned counter_size,
--                       unsigned *divlog2, unsigned *count)
--{
--      unsigned _divlog2;
--      int ok = 0;
--
--      /* Find the lowest clock divider setting that can represent RATE.  */
--      for (_divlog2 = min_divlog2; _divlog2 <= max_divlog2; _divlog2++) {
--              /* Minimum interrupt rate possible using this divider.  */
--              unsigned min_int_rate
--                      = (base_freq >> _divlog2) >> counter_size;
--
--              if (min_int_rate <= rate) {
--                      /* This setting is the highest resolution
--                         setting that's slow enough enough to attain
--                         RATE interrupts per second, so use it.  */
--                      ok = 1;
--                      break;
--              }
--      }
--
--      if (_divlog2 > max_divlog2)
--              /* Can't find correct setting.  */
--              _divlog2 = max_divlog2;
--
--      if (divlog2)
--              *divlog2 = _divlog2;
--      if (count)
--              *count = ((base_freq >> _divlog2) + rate/2) / rate;
--
--      return ok;
--}
---- linux-2.6.0-test1/arch/v850/kernel/rte_cb.c        2003-06-14 12:17:57.000000000 -0700
-+++ 25/arch/v850/kernel/rte_cb.c       2003-07-19 17:03:49.000000000 -0700
-@@ -17,7 +17,7 @@
- #include <linux/fs.h>
- #include <asm/machdep.h>
--#include <asm/nb85e_uart.h>
-+#include <asm/v850e_uart.h>
- #include "mach.h"
-@@ -34,7 +34,7 @@ extern void multi_init (void);
\f
- void __init rte_cb_early_init (void)
- {
--      nb85e_intc_disable_irqs ();
-+      v850e_intc_disable_irqs ();
- #ifdef CONFIG_RTE_CB_MULTI
-       multi_init ();
-@@ -43,6 +43,7 @@ void __init rte_cb_early_init (void)
- void __init mach_setup (char **cmdline)
- {
-+#ifdef CONFIG_RTE_MB_A_PCI
-       /* Probe for Mother-A, and print a message if we find it.  */
-       *(volatile unsigned long *)MB_A_SRAM_ADDR = 0xDEADBEEF;
-       if (*(volatile unsigned long *)MB_A_SRAM_ADDR == 0xDEADBEEF) {
-@@ -52,23 +53,11 @@ void __init mach_setup (char **cmdline)
-                               "          NEC SolutionGear/Midas lab"
-                               " RTE-MOTHER-A motherboard\n");
-       }
--
--#if defined (CONFIG_V850E_NB85E_UART_CONSOLE) && !defined (CONFIG_TIME_BOOTUP)
--      nb85e_uart_cons_init (0);
--#endif
-+#endif /* CONFIG_RTE_MB_A_PCI */
-       mach_tick = led_tick;
- }
--#ifdef CONFIG_TIME_BOOTUP
--void initial_boot_done (void)
--{
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
--      nb85e_uart_cons_init (0);
--#endif
--}
--#endif
--
- void machine_restart (char *__unused)
- {
- #ifdef CONFIG_RESET_GUARD
-@@ -194,6 +183,7 @@ static struct hw_interrupt_type gbus_hw_
- #endif /* CONFIG_RTE_GBUS_INT */
-+
- void __init rte_cb_init_irqs (void)
- {
- #ifdef CONFIG_RTE_GBUS_INT
---- linux-2.6.0-test1/arch/v850/kernel/rte_ma1_cb.c    2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/v850/kernel/rte_ma1_cb.c   2003-07-19 17:03:49.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <asm/page.h>
- #include <asm/ma1.h>
- #include <asm/rte_ma1_cb.h>
--#include <asm/nb85e_timer_c.h>
-+#include <asm/v850e_timer_c.h>
- #include "mach.h"
-@@ -89,14 +89,14 @@ void __init mach_init_irqs (void)
-       rte_cb_init_irqs ();
-       /* Use falling-edge-sensitivity for interrupts .  */
--      NB85E_TIMER_C_SESC (0) &= ~0xC;
--      NB85E_TIMER_C_SESC (1) &= ~0xF;
-+      V850E_TIMER_C_SESC (0) &= ~0xC;
-+      V850E_TIMER_C_SESC (1) &= ~0xF;
-       /* INTP000-INTP011 are shared with `Timer C', so we have to set
-          up Timer C to pass them through as raw interrupts.  */
-       for (tc = 0; tc < 2; tc++)
-               /* Turn on the timer.  */
--              NB85E_TIMER_C_TMCC0 (tc) |= NB85E_TIMER_C_TMCC0_CAE;
-+              V850E_TIMER_C_TMCC0 (tc) |= V850E_TIMER_C_TMCC0_CAE;
-       /* Make sure the relevant port0/port1 pins are assigned
-          interrupt duty.  We used INTP001-INTP011 (don't screw with
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/rte_me2_cb.c   2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,308 @@
-+/*
-+ * arch/v850/kernel/rte_me2_cb.c -- Midas labs RTE-V850E/ME2-CB board
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/bootmem.h>
-+#include <linux/irq.h>
-+#include <linux/fs.h>
-+#include <linux/major.h>
-+#include <linux/sched.h>
-+#include <linux/delay.h>
-+
-+#include <asm/atomic.h>
-+#include <asm/page.h>
-+#include <asm/me2.h>
-+#include <asm/rte_me2_cb.h>
-+#include <asm/machdep.h>
-+#include <asm/v850e_intc.h>
-+#include <asm/v850e_cache.h>
-+#include <asm/irq.h>
-+
-+#include "mach.h"
-+
-+extern unsigned long *_intv_start;
-+extern unsigned long *_intv_end;
-+
-+/* LED access routines.  */
-+extern unsigned read_leds (int pos, char *buf, int len);
-+extern unsigned write_leds (int pos, const char *buf, int len);
-+
-+
-+/* SDRAM are almost contiguous (with a small hole in between;
-+   see mach_reserve_bootmem for details), so just use both as one big area.  */
-+#define RAM_START     SDRAM_ADDR
-+#define RAM_END               (SDRAM_ADDR + SDRAM_SIZE)
-+
-+
-+void __init mach_get_physical_ram (unsigned long *ram_start,
-+                                 unsigned long *ram_len)
-+{
-+      *ram_start = RAM_START;
-+      *ram_len = RAM_END - RAM_START;
-+}
-+
-+void __init mach_reserve_bootmem ()
-+{
-+      extern char _root_fs_image_start, _root_fs_image_end;
-+      u32 root_fs_image_start = (u32)&_root_fs_image_start;
-+      u32 root_fs_image_end = (u32)&_root_fs_image_end;
-+
-+      /* Reserve the memory used by the root filesystem image if it's
-+         in RAM.  */
-+      if (root_fs_image_start >= RAM_START && root_fs_image_start < RAM_END)
-+              reserve_bootmem (root_fs_image_start,
-+                               root_fs_image_end - root_fs_image_start);
-+}
-+
-+void mach_gettimeofday (struct timespec *tv)
-+{
-+      tv->tv_sec = 0;
-+      tv->tv_nsec = 0;
-+}
-+
-+/* Called before configuring an on-chip UART.  */
-+void rte_me2_cb_uart_pre_configure (unsigned chan,
-+                                  unsigned cflags, unsigned baud)
-+{
-+      /* The RTE-V850E/ME2-CB connects some general-purpose I/O
-+         pins on the CPU to the RTS/CTS lines of UARTB channel 0's
-+         serial connection.
-+         I/O pins P21 and P22 are RTS and CTS respectively.  */
-+      if (chan == 0) {
-+              /* Put P21 & P22 in I/O port mode.  */
-+              ME2_PORT2_PMC &= ~0x6;
-+              /* Make P21 and output, and P22 an input.  */
-+              ME2_PORT2_PM = (ME2_PORT2_PM & ~0xC) | 0x4;
-+      }
-+
-+      me2_uart_pre_configure (chan, cflags, baud);
-+}
-+
-+void __init mach_init_irqs (void)
-+{
-+      /* Initialize interrupts.  */
-+      me2_init_irqs ();
-+      rte_me2_cb_init_irqs ();
-+}
-+
-+#ifdef CONFIG_ROM_KERNEL
-+/* Initialization for kernel in ROM.  */
-+static inline rom_kernel_init (void)
-+{
-+      /* If the kernel is in ROM, we have to copy any initialized data
-+         from ROM into RAM.  */
-+      extern unsigned long _data_load_start, _sdata, _edata;
-+      register unsigned long *src = &_data_load_start;
-+      register unsigned long *dst = &_sdata, *end = &_edata;
-+
-+      while (dst != end)
-+              *dst++ = *src++;
-+}
-+#endif /* CONFIG_ROM_KERNEL */
-+
-+static void install_interrupt_vectors (void)
-+{
-+      unsigned long *p1, *p2;
-+
-+      ME2_IRAMM = 0x03; /* V850E/ME2 iRAM write mode */
-+
-+      /* vector copy to iRAM */
-+      p1 = (unsigned long *)0; /* v85x vector start */
-+      p2 = (unsigned long *)&_intv_start;
-+      while (p2 < (unsigned long *)&_intv_end)
-+              *p1++ = *p2++;
-+
-+      ME2_IRAMM = 0x00; /* V850E/ME2 iRAM read mode */
-+}
-+\f
-+/* CompactFlash */
-+
-+static void cf_power_on (void)
-+{
-+      /* CF card detected? */
-+      if (CB_CF_STS0 & 0x0030)
-+              return;
-+
-+      CB_CF_REG0 = 0x0002; /* reest on */
-+      mdelay (10);
-+      CB_CF_REG0 = 0x0003; /* power on */
-+      mdelay (10);
-+      CB_CF_REG0 = 0x0001; /* reset off */
-+      mdelay (10);
-+}
-+
-+static void cf_power_off (void)
-+{
-+      CB_CF_REG0 = 0x0003; /* power on */
-+      mdelay (10);
-+      CB_CF_REG0 = 0x0002; /* reest on */
-+      mdelay (10);
-+}
-+
-+void __init mach_early_init (void)
-+{
-+      install_interrupt_vectors ();
-+
-+      /* CS1 SDRAM instruction cache enable */
-+      v850e_cache_enable (0x04, 0x03, 0);
-+
-+      rte_cb_early_init ();
-+
-+      /* CompactFlash power on */
-+      cf_power_on ();
-+
-+#if defined (CONFIG_ROM_KERNEL)
-+      rom_kernel_init ();
-+#endif
-+}
-+
-+\f
-+/* RTE-V850E/ME2-CB Programmable Interrupt Controller.  */
-+
-+static struct cb_pic_irq_init cb_pic_irq_inits[] = {
-+      { "CB_EXTTM0",       IRQ_CB_EXTTM0,       1, 1, 6 },
-+      { "CB_EXTSIO",       IRQ_CB_EXTSIO,       1, 1, 6 },
-+      { "CB_TOVER",        IRQ_CB_TOVER,        1, 1, 6 },
-+      { "CB_GINT0",        IRQ_CB_GINT0,        1, 1, 6 },
-+      { "CB_USB",          IRQ_CB_USB,          1, 1, 6 },
-+      { "CB_LANC",         IRQ_CB_LANC,         1, 1, 6 },
-+      { "CB_USB_VBUS_ON",  IRQ_CB_USB_VBUS_ON,  1, 1, 6 },
-+      { "CB_USB_VBUS_OFF", IRQ_CB_USB_VBUS_OFF, 1, 1, 6 },
-+      { "CB_EXTTM1",       IRQ_CB_EXTTM1,       1, 1, 6 },
-+      { "CB_EXTTM2",       IRQ_CB_EXTTM2,       1, 1, 6 },
-+      { 0 }
-+};
-+#define NUM_CB_PIC_IRQ_INITS  \
-+   ((sizeof cb_pic_irq_inits / sizeof cb_pic_irq_inits[0]) - 1)
-+
-+static struct hw_interrupt_type cb_pic_hw_itypes[NUM_CB_PIC_IRQ_INITS];
-+static unsigned char cb_pic_active_irqs = 0;
-+
-+void __init rte_me2_cb_init_irqs (void)
-+{
-+      cb_pic_init_irq_types (cb_pic_irq_inits, cb_pic_hw_itypes);
-+
-+      /* Initalize on board PIC1 (not PIC0) enable */
-+      CB_PIC_INT0M  = 0x0000;
-+      CB_PIC_INT1M  = 0x0000;
-+      CB_PIC_INTR   = 0x0000;
-+      CB_PIC_INTEN |= CB_PIC_INT1EN;
-+
-+      ME2_PORT2_PMC    |= 0x08;       /* INTP23/SCK1 mode */
-+      ME2_PORT2_PFC    &= ~0x08;      /* INTP23 mode */
-+      ME2_INTR(2)      &= ~0x08;      /* INTP23 falling-edge detect */
-+      ME2_INTF(2)      &= ~0x08;      /*   " */
-+
-+      rte_cb_init_irqs ();    /* gbus &c */
-+}
-+
-+
-+/* Enable interrupt handling for interrupt IRQ.  */
-+void cb_pic_enable_irq (unsigned irq)
-+{
-+      CB_PIC_INT1M |= 1 << (irq - CB_PIC_BASE_IRQ);
-+}
-+
-+void cb_pic_disable_irq (unsigned irq)
-+{
-+      CB_PIC_INT1M &= ~(1 << (irq - CB_PIC_BASE_IRQ));
-+}
-+
-+void cb_pic_shutdown_irq (unsigned irq)
-+{
-+      cb_pic_disable_irq (irq);
-+
-+      if (--cb_pic_active_irqs == 0)
-+              free_irq (IRQ_CB_PIC, 0);
-+
-+      CB_PIC_INT1M &= ~(1 << (irq - CB_PIC_BASE_IRQ));
-+}
-+
-+static void cb_pic_handle_irq (int irq, void *dev_id, struct pt_regs *regs)
-+{
-+      unsigned status = CB_PIC_INTR;
-+      unsigned enable = CB_PIC_INT1M;
-+
-+      /* Only pay attention to enabled interrupts.  */
-+      status &= enable;
-+
-+      CB_PIC_INTEN &= ~CB_PIC_INT1EN;
-+
-+      if (status) {
-+              unsigned mask = 1;
-+
-+              irq = CB_PIC_BASE_IRQ;
-+              do {
-+                      /* There's an active interrupt, find out which one,
-+                         and call its handler.  */
-+                      while (! (status & mask)) {
-+                              irq++;
-+                              mask <<= 1;
-+                      }
-+                      status &= ~mask;
-+
-+                      CB_PIC_INTR = mask;
-+
-+                      /* Recursively call handle_irq to handle it. */
-+                      handle_irq (irq, regs);
-+              } while (status);
-+      }
-+
-+      CB_PIC_INTEN |= CB_PIC_INT1EN;
-+}
-+
-+
-+static void irq_nop (unsigned irq) { }
-+
-+static unsigned cb_pic_startup_irq (unsigned irq)
-+{
-+      int rval;
-+
-+      if (cb_pic_active_irqs == 0) {
-+              rval = request_irq (IRQ_CB_PIC, cb_pic_handle_irq,
-+                                  SA_INTERRUPT, "cb_pic_handler", 0);
-+              if (rval != 0)
-+                      return rval;
-+      }
-+
-+      cb_pic_active_irqs++;
-+
-+      cb_pic_enable_irq (irq);
-+
-+      return 0;
-+}
-+
-+/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-+   INITS (which is terminated by an entry with the name field == 0).  */
-+void __init cb_pic_init_irq_types (struct cb_pic_irq_init *inits,
-+                                 struct hw_interrupt_type *hw_irq_types)
-+{
-+      struct cb_pic_irq_init *init;
-+      for (init = inits; init->name; init++) {
-+              struct hw_interrupt_type *hwit = hw_irq_types++;
-+
-+              hwit->typename = init->name;
-+
-+              hwit->startup  = cb_pic_startup_irq;
-+              hwit->shutdown = cb_pic_shutdown_irq;
-+              hwit->enable   = cb_pic_enable_irq;
-+              hwit->disable  = cb_pic_disable_irq;
-+              hwit->ack      = irq_nop;
-+              hwit->end      = irq_nop;
-+
-+              /* Initialize kernel IRQ infrastructure for this interrupt.  */
-+              init_irq_handlers(init->base, init->num, init->interval, hwit);
-+      }
-+}
---- linux-2.6.0-test1/arch/v850/kernel/rte_nb85e_cb.c  2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/v850/kernel/rte_nb85e_cb.c 2003-07-19 17:03:49.000000000 -0700
-@@ -21,7 +21,7 @@
- #include <asm/atomic.h>
- #include <asm/page.h>
--#include <asm/nb85e.h>
-+#include <asm/v850e.h>
- #include <asm/rte_nb85e_cb.h>
- #include "mach.h"
-@@ -41,7 +41,7 @@ void __init mach_early_init (void)
-          Unfortunately, the dcache seems to be buggy, so we only use the
-          icache for now.  */
--      nb85e_cache_enable (0x0040 /* BHC */, 0x0000 /* DCC */);
-+      v850e_cache_enable (0x0040 /*BHC*/, 0x0003 /*ICC*/, 0x0000 /*DCC*/);
-       rte_cb_early_init ();
- }
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/sim85e2.c      2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,211 @@
-+/*
-+ * arch/v850/kernel/sim85e2.c -- Machine-specific stuff for
-+ *    V850E2 RTL simulator
-+ *
-+ *  Copyright (C) 2002,03  NEC Electronics Corporation
-+ *  Copyright (C) 2002,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/swap.h>
-+#include <linux/bootmem.h>
-+#include <linux/irq.h>
-+
-+#include <asm/atomic.h>
-+#include <asm/page.h>
-+#include <asm/machdep.h>
-+
-+#include "mach.h"
-+
-+
-+/* There are 4 possible areas we can use:
-+
-+     IRAM (1MB) is fast for instruction fetches, but slow for data
-+     DRAM (1020KB) is fast for data, but slow for instructions
-+     ERAM is cached, so should be fast for both insns and data
-+     SDRAM is external DRAM, similar to ERAM
-+*/
-+
-+#define INIT_MEMC_FOR_SDRAM
-+#define USE_SDRAM_AREA
-+#define KERNEL_IN_SDRAM_AREA
-+
-+#define DCACHE_MODE   V850E2_CACHE_BTSC_DCM_WT
-+/*#define DCACHE_MODE V850E2_CACHE_BTSC_DCM_WB_ALLOC*/
-+
-+#ifdef USE_SDRAM_AREA
-+#define RAM_START     SDRAM_ADDR
-+#define RAM_END               (SDRAM_ADDR + SDRAM_SIZE)
-+#else
-+/* When we use DRAM, we need to account for the fact that the end of it is
-+   used for R0_RAM.  */
-+#define RAM_START     DRAM_ADDR
-+#define RAM_END               R0_RAM_ADDR
-+#endif
-+
-+
-+extern void memcons_setup (void);
-+
-+
-+#ifdef KERNEL_IN_SDRAM_AREA
-+#define EARLY_INIT_SECTION_ATTR __attribute__ ((section (".early.text")))
-+#else
-+#define EARLY_INIT_SECTION_ATTR __init
-+#endif
-+
-+void EARLY_INIT_SECTION_ATTR mach_early_init (void)
-+{
-+      extern int panic_timeout;
-+
-+      /* The sim85e2 simulator tracks `undefined' values, so to make
-+         debugging easier, we begin by zeroing out all otherwise
-+         undefined registers.  This is not strictly necessary.
-+
-+         The registers we zero are:
-+             Every GPR except:
-+                 stack-pointer (r3)
-+                 task-pointer (r16)
-+                 our return addr (r31)
-+             Every system register (SPR) that we know about except for
-+             the PSW (SPR 5), which we zero except for the
-+             disable-interrupts bit.
-+      */
-+
-+      /* GPRs */
-+      asm volatile ("             mov r0, r1 ; mov r0, r2              ");
-+      asm volatile ("mov r0, r4 ; mov r0, r5 ; mov r0, r6 ; mov r0, r7 ");
-+      asm volatile ("mov r0, r8 ; mov r0, r9 ; mov r0, r10; mov r0, r11");
-+      asm volatile ("mov r0, r12; mov r0, r13; mov r0, r14; mov r0, r15");
-+      asm volatile ("             mov r0, r17; mov r0, r18; mov r0, r19");
-+      asm volatile ("mov r0, r20; mov r0, r21; mov r0, r22; mov r0, r23");
-+      asm volatile ("mov r0, r24; mov r0, r25; mov r0, r26; mov r0, r27");
-+      asm volatile ("mov r0, r28; mov r0, r29; mov r0, r30");
-+
-+      /* SPRs */
-+      asm volatile ("ldsr r0, 0;  ldsr r0, 1;  ldsr r0, 2;  ldsr r0, 3");
-+      asm volatile ("ldsr r0, 4");
-+      asm volatile ("addi 0x20, r0, r1; ldsr r1, 5"); /* PSW */
-+      asm volatile ("ldsr r0, 16; ldsr r0, 17; ldsr r0, 18; ldsr r0, 19");
-+      asm volatile ("ldsr r0, 20");
-+
-+
-+#ifdef INIT_MEMC_FOR_SDRAM
-+      /* Settings for SDRAM controller.  */
-+      V850E2_VSWC   = 0x0042;
-+      V850E2_BSC    = 0x9286;
-+      V850E2_BCT(0) = 0xb000; /* was: 0 */
-+      V850E2_BCT(1) = 0x000b;
-+      V850E2_ASC    = 0;
-+      V850E2_LBS    = 0xa9aa; /* was: 0xaaaa */
-+      V850E2_LBC(0) = 0;
-+      V850E2_LBC(1) = 0;      /* was: 0x3 */
-+      V850E2_BCC    = 0;
-+      V850E2_RFS(4) = 0x800a; /* was: 0xf109 */
-+      V850E2_SCR(4) = 0x2091; /* was: 0x20a1 */
-+      V850E2_RFS(3) = 0x800c;
-+      V850E2_SCR(3) = 0x20a1;
-+      V850E2_DWC(0) = 0;
-+      V850E2_DWC(1) = 0;
-+#endif
-+
-+#if 0
-+#ifdef CONFIG_V850E2_SIM85E2S
-+      /* Turn on the caches.  */
-+      V850E2_CACHE_BTSC = V850E2_CACHE_BTSC_ICM | DCACHE_MODE;
-+      V850E2_BHC  = 0x1010;
-+#elif CONFIG_V850E2_SIM85E2C
-+      V850E2_CACHE_BTSC |= (V850E2_CACHE_BTSC_ICM | V850E2_CACHE_BTSC_DCM0);
-+      V850E2_BUSM_BHC = 0xFFFF;
-+#endif
-+#else
-+      V850E2_BHC  = 0;
-+#endif
-+
-+      /* Don't stop the simulator at `halt' instructions.  */
-+      SIM85E2_NOTHAL = 1;
-+
-+      /* Ensure that the simulator halts on a panic, instead of going
-+         into an infinite loop inside the panic function.  */
-+      panic_timeout = -1;
-+}
-+
-+void __init mach_setup (char **cmdline)
-+{
-+      memcons_setup ();
-+}
-+
-+void mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len)
-+{
-+      *ram_start = RAM_START;
-+      *ram_len = RAM_END - RAM_START;
-+}
-+
-+void __init mach_reserve_bootmem ()
-+{
-+      extern char _root_fs_image_start, _root_fs_image_end;
-+      u32 root_fs_image_start = (u32)&_root_fs_image_start;
-+      u32 root_fs_image_end = (u32)&_root_fs_image_end;
-+
-+      /* Reserve the memory used by the root filesystem image if it's
-+         in RAM.  */
-+      if (root_fs_image_end > root_fs_image_start
-+          && root_fs_image_start >= RAM_START
-+          && root_fs_image_start < RAM_END)
-+              reserve_bootmem (root_fs_image_start,
-+                               root_fs_image_end - root_fs_image_start);
-+}
-+
-+void __init mach_sched_init (struct irqaction *timer_action)
-+{
-+      /* The simulator actually cycles through all interrupts
-+         periodically.  We just pay attention to IRQ0, which gives us
-+         1/64 the rate of the periodic interrupts.  */
-+      setup_irq (0, timer_action);
-+}
-+
-+void mach_gettimeofday (struct timespec *tv)
-+{
-+      tv->tv_sec = 0;
-+      tv->tv_nsec = 0;
-+}
-+\f
-+/* Interrupts */
-+
-+struct v850e_intc_irq_init irq_inits[] = {
-+      { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
-+      { 0 }
-+};
-+struct hw_interrupt_type hw_itypes[1];
-+
-+/* Initialize interrupts.  */
-+void __init mach_init_irqs (void)
-+{
-+      v850e_intc_init_irq_types (irq_inits, hw_itypes);
-+}
-+\f
-+
-+void machine_halt (void) __attribute__ ((noreturn));
-+void machine_halt (void)
-+{
-+      SIM85E2_SIMFIN = 0;     /* Halt immediately.  */
-+      for (;;) {}
-+}
-+
-+void machine_restart (char *__unused)
-+{
-+      machine_halt ();
-+}
-+
-+void machine_power_off (void)
-+{
-+      machine_halt ();
-+}
---- linux-2.6.0-test1/arch/v850/kernel/sim85e2c.c      2003-06-14 12:18:22.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,145 +0,0 @@
--/*
-- * arch/v850/kernel/sim85e2c.c -- Machine-specific stuff for
-- *    V850E2 RTL simulator
-- *
-- *  Copyright (C) 2002  NEC Corporation
-- *  Copyright (C) 2002  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/config.h>
--#include <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/mm.h>
--#include <linux/swap.h>
--#include <linux/bootmem.h>
--#include <linux/irq.h>
--
--#include <asm/atomic.h>
--#include <asm/page.h>
--#include <asm/machdep.h>
--
--#include "mach.h"
--
--extern void memcons_setup (void);
--
--
--void __init mach_early_init (void)
--{
--      extern int panic_timeout;
--
--      /* Don't stop the simulator at `halt' instructions.  */
--      NOTHAL = 1;
--
--      /* The sim85e2c simulator tracks `undefined' values, so to make
--         debugging easier, we begin by zeroing out all otherwise
--         undefined registers.  This is not strictly necessary.
--
--         The registers we zero are:
--             Every GPR except:
--                 stack-pointer (r3)
--                 task-pointer (r16)
--                 our return addr (r31)
--             Every system register (SPR) that we know about except for
--             the PSW (SPR 5), which we zero except for the
--             disable-interrupts bit.
--      */
--
--      /* GPRs */
--      asm volatile ("             mov r0, r1 ; mov r0, r2              ");
--      asm volatile ("mov r0, r4 ; mov r0, r5 ; mov r0, r6 ; mov r0, r7 ");
--      asm volatile ("mov r0, r8 ; mov r0, r9 ; mov r0, r10; mov r0, r11");
--      asm volatile ("mov r0, r12; mov r0, r13; mov r0, r14; mov r0, r15");
--      asm volatile ("             mov r0, r17; mov r0, r18; mov r0, r19");
--      asm volatile ("mov r0, r20; mov r0, r21; mov r0, r22; mov r0, r23");
--      asm volatile ("mov r0, r24; mov r0, r25; mov r0, r26; mov r0, r27");
--      asm volatile ("mov r0, r28; mov r0, r29; mov r0, r30");
--
--      /* SPRs */
--      asm volatile ("ldsr r0, 0;  ldsr r0, 1;  ldsr r0, 2;  ldsr r0, 3");
--      asm volatile ("ldsr r0, 4");
--      asm volatile ("addi 0x20, r0, r1; ldsr r1, 5"); /* PSW */
--      asm volatile ("ldsr r0, 16; ldsr r0, 17; ldsr r0, 18; ldsr r0, 19");
--      asm volatile ("ldsr r0, 20");
--
--      /* Turn on the caches.  */
--      NA85E2C_CACHE_BTSC
--              |= (NA85E2C_CACHE_BTSC_ICM | NA85E2C_CACHE_BTSC_DCM0);
--      NA85E2C_BUSM_BHC = 0xFFFF;
--
--      /* Ensure that the simulator halts on a panic, instead of going
--         into an infinite loop inside the panic function.  */
--      panic_timeout = -1;
--}
--
--void __init mach_setup (char **cmdline)
--{
--      memcons_setup ();
--}
--
--void mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len)
--{
--      /* There are 3 possible areas we can use:
--           IRAM (1MB) is fast for instruction fetches, but slow for data
--           DRAM (1020KB) is fast for data, but slow for instructions
--           ERAM is cached, so should be fast for both insns and data,
--                _but_ currently only supports write-through caching, so
--                writes are slow.
--         Since there's really no area that's good for general kernel
--         use, we use DRAM -- it won't be good for user programs
--         (which will be loaded into kernel allocated memory), but
--         currently we're more concerned with testing the kernel.  */
--      *ram_start = DRAM_ADDR;
--      *ram_len = R0_RAM_ADDR - DRAM_ADDR;
--}
--
--void __init mach_sched_init (struct irqaction *timer_action)
--{
--      /* The simulator actually cycles through all interrupts
--         periodically.  We just pay attention to IRQ0, which gives us
--         1/64 the rate of the periodic interrupts.  */
--      setup_irq (0, timer_action);
--}
--
--void mach_gettimeofday (struct timespec *tv)
--{
--      tv->tv_sec = 0;
--      tv->tv_nsec = 0;
--}
--\f
--/* Interrupts */
--
--struct nb85e_intc_irq_init irq_inits[] = {
--      { "IRQ", 0, NUM_MACH_IRQS, 1, 7 },
--      { 0 }
--};
--struct hw_interrupt_type hw_itypes[1];
--
--/* Initialize interrupts.  */
--void __init mach_init_irqs (void)
--{
--      nb85e_intc_init_irq_types (irq_inits, hw_itypes);
--}
--\f
--
--void machine_halt (void) __attribute__ ((noreturn));
--void machine_halt (void)
--{
--      SIMFIN = 0;             /* Halt immediately.  */
--      for (;;) {}
--}
--
--void machine_restart (char *__unused)
--{
--      machine_halt ();
--}
--
--void machine_power_off (void)
--{
--      machine_halt ();
--}
---- linux-2.6.0-test1/arch/v850/kernel/teg.c   2003-06-14 12:18:25.000000000 -0700
-+++ 25/arch/v850/kernel/teg.c  2003-07-19 17:03:49.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <asm/atomic.h>
- #include <asm/page.h>
- #include <asm/machdep.h>
--#include <asm/nb85e_timer_d.h>
-+#include <asm/v850e_timer_d.h>
- #include "mach.h"
-@@ -31,12 +31,12 @@ void __init mach_sched_init (struct irqa
-       /* Select timer interrupt instead of external pin.  */
-       TEG_ISS |= 0x1;
-       /* Start hardware timer.  */
--      nb85e_timer_d_configure (0, HZ);
-+      v850e_timer_d_configure (0, HZ);
-       /* Install timer interrupt handler.  */
-       setup_irq (IRQ_INTCMD(0), timer_action);
- }
--static struct nb85e_intc_irq_init irq_inits[] = {
-+static struct v850e_intc_irq_init irq_inits[] = {
-       { "IRQ", 0,             NUM_CPU_IRQS,   1, 7 },
-       { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 },
-       { "SER", IRQ_INTSER(0), IRQ_INTSER_NUM, 1, 3 },
-@@ -51,7 +51,7 @@ static struct hw_interrupt_type hw_itype
- /* Initialize MA chip interrupts.  */
- void __init teg_init_irqs (void)
- {
--      nb85e_intc_init_irq_types (irq_inits, hw_itypes);
-+      v850e_intc_init_irq_types (irq_inits, hw_itypes);
- }
- /* Called before configuring an on-chip UART.  */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e2_cache.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,127 @@
-+/*
-+ * arch/v850/kernel/v850e2_cache.c -- Cache control for V850E2 cache
-+ *    memories
-+ *
-+ *  Copyright (C) 2003  NEC Electronics Corporation
-+ *  Copyright (C) 2003  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/mm.h>
-+
-+#include <asm/v850e2_cache.h>
-+
-+/* Cache operations we can do.  The encoding corresponds directly to the
-+   value we need to write into the COPR register.  */
-+enum cache_op {
-+      OP_SYNC_IF_DIRTY           = V850E2_CACHE_COPR_CFC(0), /* 000 */
-+      OP_SYNC_IF_VALID           = V850E2_CACHE_COPR_CFC(1), /* 001 */
-+      OP_SYNC_IF_VALID_AND_CLEAR = V850E2_CACHE_COPR_CFC(3), /* 011 */
-+      OP_WAY_CLEAR               = V850E2_CACHE_COPR_CFC(4), /* 100 */
-+      OP_FILL                    = V850E2_CACHE_COPR_CFC(5), /* 101 */
-+      OP_CLEAR                   = V850E2_CACHE_COPR_CFC(6), /* 110 */
-+      OP_CREATE_DIRTY            = V850E2_CACHE_COPR_CFC(7)  /* 111 */
-+};
-+
-+/* Which cache to use.  This encoding also corresponds directly to the
-+   value we need to write into the COPR register. */
-+enum cache {
-+      ICACHE = 0,
-+      DCACHE = V850E2_CACHE_COPR_LBSL
-+};
-+
-+/* Returns ADDR rounded down to the beginning of its cache-line.  */
-+#define CACHE_LINE_ADDR(addr)  \
-+   ((addr) & ~(V850E2_CACHE_LINE_SIZE - 1))
-+/* Returns END_ADDR rounded up to the `limit' of its cache-line.  */
-+#define CACHE_LINE_END_ADDR(end_addr)  \
-+   CACHE_LINE_ADDR(end_addr + (V850E2_CACHE_LINE_SIZE - 1))
-+
-+\f
-+/* Low-level cache ops.  */
-+
-+/* Apply cache-op OP to all entries in CACHE.  */
-+static inline void cache_op_all (enum cache_op op, enum cache cache)
-+{
-+      int cmd = op | cache | V850E2_CACHE_COPR_WSLE | V850E2_CACHE_COPR_STRT;
-+
-+      if (op != OP_WAY_CLEAR) {
-+              /* The WAY_CLEAR operation does the whole way, but other
-+                 ops take begin-index and count params; we just indicate
-+                 the entire cache.  */
-+              V850E2_CACHE_CADL = 0;
-+              V850E2_CACHE_CADH = 0;
-+              V850E2_CACHE_CCNT = V850E2_CACHE_WAY_SIZE - 1;
-+      }
-+
-+      V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(0); /* way 0 */
-+      V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(1); /* way 1 */
-+      V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(2); /* way 2 */
-+      V850E2_CACHE_COPR = cmd | V850E2_CACHE_COPR_WSL(3); /* way 3 */
-+}
-+
-+/* Apply cache-op OP to all entries in CACHE covering addresses ADDR
-+   through ADDR+LEN.  */
-+static inline void cache_op_range (enum cache_op op, u32 addr, u32 len,
-+                                 enum cache cache)
-+{
-+      u32 start = CACHE_LINE_ADDR (addr);
-+      u32 end = CACHE_LINE_END_ADDR (addr + len);
-+      u32 num_lines = (end - start) >> V850E2_CACHE_LINE_SIZE_BITS;
-+
-+      V850E2_CACHE_CADL = start & 0xFFFF;
-+      V850E2_CACHE_CADH = start >> 16;
-+      V850E2_CACHE_CCNT = num_lines - 1;
-+
-+      V850E2_CACHE_COPR = op | cache | V850E2_CACHE_COPR_STRT;
-+}
-+
-+\f
-+/* High-level ops.  */
-+
-+static void cache_exec_after_store_all (void)
-+{
-+      cache_op_all (OP_SYNC_IF_DIRTY, DCACHE);
-+      cache_op_all (OP_WAY_CLEAR, ICACHE);
-+}
-+
-+static void cache_exec_after_store_range (u32 start, u32 len)
-+{
-+      cache_op_range (OP_SYNC_IF_DIRTY, start, len, DCACHE);
-+      cache_op_range (OP_CLEAR, start, len, ICACHE);
-+}
-+
-+\f
-+/* Exported functions.  */
-+
-+void flush_icache (void)
-+{
-+      cache_exec_after_store_all ();
-+}
-+
-+void flush_icache_range (unsigned long start, unsigned long end)
-+{
-+      cache_exec_after_store_range (start, end - start);
-+}
-+
-+void flush_icache_page (struct vm_area_struct *vma, struct page *page)
-+{
-+      cache_exec_after_store_range (page_to_virt (page), PAGE_SIZE);
-+}
-+
-+void flush_icache_user_range (struct vm_area_struct *vma, struct page *page,
-+                            unsigned long addr, int len)
-+{
-+      cache_exec_after_store_range (addr, len);
-+}
-+
-+void flush_cache_sigtramp (unsigned long addr)
-+{
-+      /* For the exact size, see signal.c, but 16 bytes should be enough.  */
-+      cache_exec_after_store_range (addr, 16);
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_cache.c  2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,173 @@
-+/*
-+ * arch/v850/kernel/v850e_cache.c -- Cache control for V850E cache memories
-+ *
-+ *  Copyright (C) 2003  NEC Electronics Corporation
-+ *  Copyright (C) 2003  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This file implements cache control for the rather simple cache used on
-+   some V850E CPUs, specifically the NB85E/TEG CPU-core and the V850E/ME2
-+   CPU.  V850E2 processors have their own (better) cache
-+   implementation.  */
-+
-+#include <asm/entry.h>
-+#include <asm/v850e_cache.h>
-+
-+#define WAIT_UNTIL_CLEAR(value) while (value) {}
-+
-+/* Set caching params via the BHC and DCC registers.  */
-+void v850e_cache_enable (u16 bhc, u16 icc, u16 dcc)
-+{
-+      unsigned long *r0_ram = (unsigned long *)R0_RAM_ADDR;
-+      register u16 bhc_val asm ("r6") = bhc;
-+
-+      /* Read the instruction cache control register (ICC) and confirm
-+         that bits 0 and 1 (TCLR0, TCLR1) are all cleared.  */
-+      WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+      V850E_CACHE_ICC = icc;
-+
-+#ifdef V850E_CACHE_DCC
-+      /* Configure data-cache.  */
-+      V850E_CACHE_DCC = dcc;
-+#endif /* V850E_CACHE_DCC */
-+
-+      /* Configure caching for various memory regions by writing the BHC
-+         register.  The documentation says that an instruction _cannot_
-+         enable/disable caching for the memory region in which the
-+         instruction itself exists; to work around this, we store
-+         appropriate instructions into the on-chip RAM area (which is never
-+         cached), and briefly jump there to do the work.  */
-+#ifdef V850E_CACHE_WRITE_IBS
-+      *r0_ram++       = 0xf0720760;   /* st.h r0, 0xfffff072[r0] */
-+#endif
-+      *r0_ram++       = 0xf06a3760;   /* st.h r6, 0xfffff06a[r0] */
-+      *r0_ram         = 0x5640006b;   /* jmp [r11] */
-+
-+      asm ("mov hilo(1f), r11; jmp [%1]; 1:;"
-+           :: "r" (bhc_val), "r" (R0_RAM_ADDR) : "r11");
-+}
-+
-+static void clear_icache (void)
-+{
-+      /* 1. Read the instruction cache control register (ICC) and confirm
-+            that bits 0 and 1 (TCLR0, TCLR1) are all cleared.  */
-+      WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+
-+      /* 2. Read the ICC register and confirm that bit 12 (LOCK0) is
-+            cleared.  Bit 13 of the ICC register is always cleared.  */
-+      WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x1000);
-+
-+      /* 3. Set the TCLR0 and TCLR1 bits of the ICC register as follows,
-+            when clearing way 0 and way 1 at the same time:
-+              (a) Set the TCLR0 and TCLR1 bits.
-+              (b) Read the TCLR0 and TCLR1 bits to confirm that these bits
-+                  are cleared.
-+              (c) Perform (a) and (b) above again.  */
-+      V850E_CACHE_ICC |= 0x3;
-+      WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+
-+#ifdef V850E_CACHE_REPEAT_ICC_WRITE
-+      /* Do it again.  */
-+      V850E_CACHE_ICC |= 0x3;
-+      WAIT_UNTIL_CLEAR (V850E_CACHE_ICC & 0x3);
-+#endif
-+}
-+
-+#ifdef V850E_CACHE_DCC
-+/* Flush or clear (or both) the data cache, depending on the value of FLAGS;
-+   the procedure is the same for both, just the control bits used differ (and
-+   both may be performed simultaneously).  */
-+static void dcache_op (unsigned short flags)
-+{
-+      /* 1. Read the data cache control register (DCC) and confirm that bits
-+            0, 1, 4, and 5 (DC00, DC01, DC04, DC05) are all cleared.  */
-+      WAIT_UNTIL_CLEAR (V850E_CACHE_DCC & 0x33);
-+
-+      /* 2. Clear DCC register bit 12 (DC12), bit 13 (DC13), or both
-+            depending on the way for which tags are to be cleared.  */
-+      V850E_CACHE_DCC &= ~0xC000;
-+
-+      /* 3. Set DCC register bit 0 (DC00), bit 1 (DC01) or both depending on
-+            the way for which tags are to be cleared.
-+            ...
-+            Set DCC register bit 4 (DC04), bit 5 (DC05), or both depending
-+            on the way to be data flushed.  */
-+      V850E_CACHE_DCC |= flags;
-+
-+      /* 4. Read DCC register bit DC00, DC01 [DC04, DC05], or both depending
-+            on the way for which tags were cleared [flushed] and confirm
-+            that that bit is cleared.  */
-+      WAIT_UNTIL_CLEAR (V850E_CACHE_DCC & flags);
-+}
-+#endif /* V850E_CACHE_DCC */
-+
-+/* Flushes the contents of the dcache to memory.  */
-+static inline void flush_dcache (void)
-+{
-+#ifdef V850E_CACHE_DCC
-+      /* We only need to do something if in write-back mode.  */
-+      if (V850E_CACHE_DCC & 0x0400)
-+              dcache_op (0x30);
-+#endif /* V850E_CACHE_DCC */
-+}
-+
-+/* Flushes the contents of the dcache to memory, and then clears it.  */
-+static inline void clear_dcache (void)
-+{
-+#ifdef V850E_CACHE_DCC
-+      /* We only need to do something if the dcache is enabled.  */
-+      if (V850E_CACHE_DCC & 0x0C00)
-+              dcache_op (0x33);
-+#endif /* V850E_CACHE_DCC */
-+}
-+
-+/* Clears the dcache without flushing to memory first.  */
-+static inline void clear_dcache_no_flush (void)
-+{
-+#ifdef V850E_CACHE_DCC
-+      /* We only need to do something if the dcache is enabled.  */
-+      if (V850E_CACHE_DCC & 0x0C00)
-+              dcache_op (0x3);
-+#endif /* V850E_CACHE_DCC */
-+}
-+
-+static inline void cache_exec_after_store (void)
-+{
-+      flush_dcache ();
-+      clear_icache ();
-+}
-+
-+\f
-+/* Exported functions.  */
-+
-+void flush_icache (void)
-+{
-+      cache_exec_after_store ();
-+}
-+
-+void flush_icache_range (unsigned long start, unsigned long end)
-+{
-+      cache_exec_after_store ();
-+}
-+
-+void flush_icache_page (struct vm_area_struct *vma, struct page *page)
-+{
-+      cache_exec_after_store ();
-+}
-+
-+void flush_icache_user_range (struct vm_area_struct *vma, struct page *page,
-+                            unsigned long adr, int len)
-+{
-+      cache_exec_after_store ();
-+}
-+
-+void flush_cache_sigtramp (unsigned long addr)
-+{
-+      cache_exec_after_store ();
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_intc.c   2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,104 @@
-+/*
-+ * arch/v850/kernel/v850e_intc.c -- V850E interrupt controller (INTC)
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/irq.h>
-+
-+#include <asm/v850e_intc.h>
-+
-+static void irq_nop (unsigned irq) { }
-+
-+static unsigned v850e_intc_irq_startup (unsigned irq)
-+{
-+      v850e_intc_clear_pending_irq (irq);
-+      v850e_intc_enable_irq (irq);
-+      return 0;
-+}
-+
-+static void v850e_intc_end_irq (unsigned irq)
-+{
-+      unsigned long psw, temp;
-+
-+      /* Clear the highest-level bit in the In-service priority register
-+         (ISPR), to allow this interrupt (or another of the same or
-+         lesser priority) to happen again.
-+
-+         The `reti' instruction normally does this automatically when the
-+         PSW bits EP and NP are zero, but we can't always rely on reti
-+         being used consistently to return after an interrupt (another
-+         process can be scheduled, for instance, which can delay the
-+         associated reti for a long time, or this process may be being
-+         single-stepped, which uses the `dbret' instruction to return
-+         from the kernel).
-+
-+         We also set the PSW EP bit, which prevents reti from also
-+         trying to modify the ISPR itself.  */
-+
-+      /* Get PSW and disable interrupts.  */
-+      asm volatile ("stsr psw, %0; di" : "=r" (psw));
-+      /* We don't want to do anything for NMIs (they don't use the ISPR).  */
-+      if (! (psw & 0xC0)) {
-+              /* Transition to `trap' state, so that an eventual real
-+                 reti instruction won't modify the ISPR.  */
-+              psw |= 0x40;
-+              /* Fake an interrupt return, which automatically clears the
-+                 appropriate bit in the ISPR.  */
-+              asm volatile ("mov hilo(1f), %0;"
-+                            "ldsr %0, eipc; ldsr %1, eipsw;"
-+                            "reti;"
-+                            "1:"
-+                            : "=&r" (temp) : "r" (psw));
-+      }
-+}
-+
-+/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-+   INITS (which is terminated by an entry with the name field == 0).  */
-+void __init v850e_intc_init_irq_types (struct v850e_intc_irq_init *inits,
-+                                     struct hw_interrupt_type *hw_irq_types)
-+{
-+      struct v850e_intc_irq_init *init;
-+      for (init = inits; init->name; init++) {
-+              unsigned i;
-+              struct hw_interrupt_type *hwit = hw_irq_types++;
-+
-+              hwit->typename = init->name;
-+
-+              hwit->startup  = v850e_intc_irq_startup;
-+              hwit->shutdown = v850e_intc_disable_irq;
-+              hwit->enable   = v850e_intc_enable_irq;
-+              hwit->disable  = v850e_intc_disable_irq;
-+              hwit->ack      = irq_nop;
-+              hwit->end      = v850e_intc_end_irq;
-+              
-+              /* Initialize kernel IRQ infrastructure for this interrupt.  */
-+              init_irq_handlers(init->base, init->num, init->interval, hwit);
-+
-+              /* Set the interrupt priorities.  */
-+              for (i = 0; i < init->num; i++) {
-+                      unsigned irq = init->base + i * init->interval;
-+
-+                      /* If the interrupt is currently enabled (all
-+                         interrupts are initially disabled), then
-+                         assume whoever enabled it has set things up
-+                         properly, and avoid messing with it.  */
-+                      if (! v850e_intc_irq_enabled (irq))
-+                              /* This write also (1) disables the
-+                                 interrupt, and (2) clears any pending
-+                                 interrupts.  */
-+                              V850E_INTC_IC (irq)
-+                                      = (V850E_INTC_IC_PR (init->priority)
-+                                         | V850E_INTC_IC_MK);
-+              }
-+      }
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_timer_d.c        2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,54 @@
-+/*
-+ * include/asm-v850/v850e_timer_d.c -- `Timer D' component often used
-+ *    with V850E CPUs
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <linux/kernel.h>
-+
-+#include <asm/v850e_utils.h>
-+#include <asm/v850e_timer_d.h>
-+
-+/* Start interval timer TIMER (0-3).  The timer will issue the
-+   corresponding INTCMD interrupt RATE times per second.
-+   This function does not enable the interrupt.  */
-+void v850e_timer_d_configure (unsigned timer, unsigned rate)
-+{
-+      unsigned divlog2, count;
-+
-+      /* Calculate params for timer.  */
-+      if (! calc_counter_params (
-+                  V850E_TIMER_D_BASE_FREQ, rate,
-+                  V850E_TIMER_D_TMCD_CS_MIN, V850E_TIMER_D_TMCD_CS_MAX, 16,
-+                  &divlog2, &count))
-+              printk (KERN_WARNING
-+                      "Cannot find interval timer %d setting suitable"
-+                      " for rate of %dHz.\n"
-+                      "Using rate of %dHz instead.\n",
-+                      timer, rate,
-+                      (V850E_TIMER_D_BASE_FREQ >> divlog2) >> 16);
-+
-+      /* Do the actual hardware timer initialization:  */
-+
-+      /* Enable timer.  */
-+      V850E_TIMER_D_TMCD(timer) = V850E_TIMER_D_TMCD_CAE;
-+      /* Set clock divider.  */
-+      V850E_TIMER_D_TMCD(timer)
-+              = V850E_TIMER_D_TMCD_CAE
-+              | V850E_TIMER_D_TMCD_CS(divlog2);
-+      /* Set timer compare register.  */
-+      V850E_TIMER_D_CMD(timer) = count;
-+      /* Start counting.  */
-+      V850E_TIMER_D_TMCD(timer)
-+              = V850E_TIMER_D_TMCD_CAE
-+              | V850E_TIMER_D_TMCD_CS(divlog2)
-+              | V850E_TIMER_D_TMCD_CE;
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/kernel/v850e_utils.c  2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,62 @@
-+/*
-+ * include/asm-v850/v850e_utils.h -- Utility functions associated with
-+ *    V850E CPUs
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#include <asm/v850e_utils.h>
-+
-+/* Calculate counter clock-divider and count values to attain the
-+   desired frequency RATE from the base frequency BASE_FREQ.  The
-+   counter is expected to have a clock-divider, which can divide the
-+   system cpu clock by a power of two value from MIN_DIVLOG2 to
-+   MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
-+   counts up and resets whenever it's equal to the compare register,
-+   generating an interrupt or whatever when it does so).  The returned
-+   values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
-+   -- the counter compare value to use.  Returns true if it was possible
-+   to find a reasonable value, otherwise false (and the other return
-+   values will be set to be as good as possible).  */
-+int calc_counter_params (unsigned long base_freq,
-+                       unsigned long rate,
-+                       unsigned min_divlog2, unsigned max_divlog2,
-+                       unsigned counter_size,
-+                       unsigned *divlog2, unsigned *count)
-+{
-+      unsigned _divlog2;
-+      int ok = 0;
-+
-+      /* Find the lowest clock divider setting that can represent RATE.  */
-+      for (_divlog2 = min_divlog2; _divlog2 <= max_divlog2; _divlog2++) {
-+              /* Minimum interrupt rate possible using this divider.  */
-+              unsigned min_int_rate
-+                      = (base_freq >> _divlog2) >> counter_size;
-+
-+              if (min_int_rate <= rate) {
-+                      /* This setting is the highest resolution
-+                         setting that's slow enough enough to attain
-+                         RATE interrupts per second, so use it.  */
-+                      ok = 1;
-+                      break;
-+              }
-+      }
-+
-+      if (_divlog2 > max_divlog2)
-+              /* Can't find correct setting.  */
-+              _divlog2 = max_divlog2;
-+
-+      if (divlog2)
-+              *divlog2 = _divlog2;
-+      if (count)
-+              *count = ((base_freq >> _divlog2) + rate/2) / rate;
-+
-+      return ok;
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/rte_me2_cb.ld 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,30 @@
-+/* Linker script for the Midas labs RTE-V850E/ME2-CB evaluation board
-+   (CONFIG_RTE_CB_ME2), with kernel in SDRAM.  */
-+
-+MEMORY {
-+      /* 128Kbyte of IRAM */
-+      IRAM : ORIGIN = 0x00000000, LENGTH = 0x00020000
-+      
-+      /* 32MB of SDRAM.  */
-+      SDRAM : ORIGIN = 0x00800000, LENGTH = 0x02000000
-+}
-+
-+#define KRAM SDRAM
-+
-+SECTIONS {
-+      .text : {
-+              __kram_start = . ;
-+              TEXT_CONTENTS
-+              INTV_CONTENTS   /* copy to iRAM (0x0-0x620) */
-+      } > KRAM
-+
-+      .data : {
-+              DATA_CONTENTS
-+              BSS_CONTENTS
-+              RAMK_INIT_CONTENTS
-+              __kram_end = . ;
-+              BOOTMAP_CONTENTS
-+      } > KRAM
-+      
-+      .root ALIGN (4096) : { ROOT_FS_CONTENTS } > SDRAM
-+}
---- linux-2.6.0-test1/arch/v850/sim85e2c.ld    2003-06-14 12:18:34.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,44 +0,0 @@
--/* Linker script for the sim85e2c simulator, which is a verilog simulation of
--   the V850E2 NA85E2C cpu core (CONFIG_V850E2_SIM85E2C).  */
--
--MEMORY {
--      /* 1MB of `instruction RAM', starting at 0.
--         Instruction fetches are much faster from IRAM than from DRAM.
--         This should match IRAM_ADDR in "include/asm-v580/sim85e2c.h".    */
--      IRAM    : ORIGIN = 0x00000000, LENGTH = 0x00100000
--
--      /* 1MB of `data RAM', below and contiguous with the I/O space.
--         Data fetches are much faster from DRAM than from IRAM.
--         This should match DRAM_ADDR in "include/asm-v580/sim85e2c.h".  */
--      DRAM    : ORIGIN = 0xfff00000, LENGTH = 0x000ff000
--      /* We have to load DRAM at a mirror-address of 0x1ff00000,
--         because the simulator's preprocessing script isn't smart
--         enough to deal with the above LMA.  */
--      DRAM_LOAD : ORIGIN = 0x1ff00000, LENGTH = 0x000ff000
--
--      /* `external ram' (CS1 area), comes after IRAM.
--         This should match ERAM_ADDR in "include/asm-v580/sim85e2c.h".  */
--      ERAM    : ORIGIN = 0x00100000, LENGTH = 0x07f00000
--}
--
--SECTIONS {
--      .iram : {
--              INTV_CONTENTS
--              TEXT_CONTENTS
--              RAMK_INIT_CONTENTS
--      } > IRAM
--      .data : {
--              __kram_start = . ;
--              DATA_CONTENTS
--              BSS_CONTENTS
--              ROOT_FS_CONTENTS
--
--              /* We stick console output into a buffer here.  */
--              _memcons_output = . ;
--              . = . + 0x8000 ;
--              _memcons_output_end = . ;
--
--              __kram_end = . ;
--              BOOTMAP_CONTENTS
--      } > DRAM  AT> DRAM_LOAD
--}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/arch/v850/sim85e2.ld    2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,44 @@
-+/* Linker script for the sim85e2c simulator, which is a verilog simulation of
-+   the V850E2 NA85E2C cpu core (CONFIG_V850E2_SIM85E2C).  */
-+
-+MEMORY {
-+      /* 1MB of `instruction RAM', starting at 0.
-+         Instruction fetches are much faster from IRAM than from DRAM.
-+         This should match IRAM_ADDR in "include/asm-v580/sim85e2c.h".    */
-+      IRAM            : ORIGIN = 0x00000000, LENGTH = 0x00100000
-+
-+      /* 1MB of `data RAM', below and contiguous with the I/O space.
-+         Data fetches are much faster from DRAM than from IRAM.
-+         This should match DRAM_ADDR in "include/asm-v580/sim85e2c.h".  */
-+      DRAM            : ORIGIN = 0xfff00000, LENGTH = 0x000ff000
-+      /* We have to load DRAM at a mirror-address of 0x1ff00000,
-+         because the simulator's preprocessing script isn't smart
-+         enough to deal with the above LMA.  */
-+      DRAM_LOAD       : ORIGIN = 0x1ff00000, LENGTH = 0x000ff000
-+
-+      /* `external ram' (CS1 area), comes after IRAM.
-+         This should match ERAM_ADDR in "include/asm-v580/sim85e2c.h".  */
-+      ERAM            : ORIGIN = 0x00100000, LENGTH = 0x07f00000
-+
-+      /* Dynamic RAM; uses memory controller.  */
-+      /* SDRAM        : ORIGIN = 0x10000000, LENGTH = 0x01000000 */
-+      SDRAM           : ORIGIN = 0x10000000, LENGTH = 0x00200000/*use 2MB*/
-+}
-+
-+SECTIONS {
-+      .iram : {
-+              INTV_CONTENTS
-+              *arch/v850/kernel/head.o
-+              *(.early.text)
-+      } > IRAM
-+      .dram : {
-+              _memcons_output = . ;
-+              . = . + 0x8000 ;
-+              _memcons_output_end = . ;
-+      } > DRAM
-+      .sdram : {
-+              /* We stick console output into a buffer here.  */
-+              RAMK_KRAM_CONTENTS
-+              ROOT_FS_CONTENTS
-+      } > SDRAM
-+}
---- linux-2.6.0-test1/arch/v850/vmlinux.lds.S  2003-06-22 12:04:44.000000000 -0700
-+++ 25/arch/v850/vmlinux.lds.S 2003-07-19 17:03:49.000000000 -0700
-@@ -206,8 +206,8 @@ _jiffies = _jiffies_64 ;
- # include "sim.ld"
- #endif
--#ifdef CONFIG_V850E2_SIM85E2C
--# include "sim85e2c.ld"
-+#ifdef CONFIG_V850E2_SIM85E2
-+# include "sim85e2.ld"
- #endif
- #ifdef CONFIG_V850E2_FPGA85E2C
-@@ -247,3 +247,8 @@ _jiffies = _jiffies_64 ;
- #  include "rte_nb85e_cb.ld"
- # endif
- #endif
-+
-+#ifdef CONFIG_RTE_CB_ME2
-+#  include "rte_me2_cb.ld"
-+#endif
-+
---- linux-2.6.0-test1/arch/x86_64/boot/compressed/head.S       2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/x86_64/boot/compressed/head.S      2003-07-19 17:04:53.000000000 -0700
-@@ -26,6 +26,7 @@
- .code32
- .text
-+#define IN_BOOTLOADER
- #include <linux/linkage.h>
- #include <asm/segment.h>
---- linux-2.6.0-test1/arch/x86_64/boot/compressed/misc.c       2003-06-26 22:07:24.000000000 -0700
-+++ 25/arch/x86_64/boot/compressed/misc.c      2003-07-19 17:04:53.000000000 -0700
-@@ -9,6 +9,7 @@
-  * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996
-  */
-+#define IN_BOOTLOADER
- #include "miscsetup.h"
- #include <asm/io.h>
---- linux-2.6.0-test1/arch/x86_64/ia32/syscall32.c     2003-06-14 12:18:24.000000000 -0700
-+++ 25/arch/x86_64/ia32/syscall32.c    2003-07-19 17:07:16.000000000 -0700
-@@ -29,12 +29,15 @@ char *syscall32_page; 
-    and let it be handled by generic VM */ 
- int map_syscall32(struct mm_struct *mm, unsigned long address) 
- { 
-+      pgd_t *pgd;
-+      pmd_t *pmd;
-       pte_t *pte;
-       int err = 0;
-       down_read(&mm->mmap_sem);
-       spin_lock(&mm->page_table_lock); 
--      pmd_t *pmd = pmd_alloc(mm, pgd_offset(mm, address), address); 
--      if (pmd && (pte = pte_alloc_map(mm, pmd, address)) != NULL) { 
-+      pgd = pgd_offset(mm, address);
-+      pmd = pmd_alloc_map(mm, pgd, address);
-+      if (pmd && (pte = pte_alloc_map(mm, pgd, &pmd, address)) != NULL) {
-               if (pte_none(*pte)) { 
-                       set_pte(pte, 
-                               mk_pte(virt_to_page(syscall32_page), 
---- linux-2.6.0-test1/arch/x86_64/kernel/apic.c        2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/apic.c       2003-07-19 17:04:07.000000000 -0700
-@@ -298,8 +298,8 @@ void __init setup_local_APIC (void)
-        * Double-check whether this APIC is really registered.
-        * This is meaningless in clustered apic mode, so we skip it.
-        */
--      if (!clustered_apic_mode && 
--          !test_bit(GET_APIC_ID(apic_read(APIC_ID)), &phys_cpu_present_map))
-+      if (!clustered_apic_mode &&
-+              !cpu_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map))
-               BUG();
-       /*
-@@ -997,7 +997,7 @@ int __init APIC_init_uniprocessor (void)
-       connect_bsp_APIC();
--      phys_cpu_present_map = 1;
-+      phys_cpu_present_map = cpumask_of_cpu(0);
-       apic_write_around(APIC_ID, boot_cpu_id);
-       setup_local_APIC();
---- linux-2.6.0-test1/arch/x86_64/kernel/io_apic.c     2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/x86_64/kernel/io_apic.c    2003-07-19 17:04:07.000000000 -0700
-@@ -1014,7 +1014,7 @@ void disable_IO_APIC(void)
- static void __init setup_ioapic_ids_from_mpc (void)
- {
-       union IO_APIC_reg_00 reg_00;
--      unsigned long phys_id_present_map = phys_cpu_present_map;
-+      cpumask_t phys_id_present_map = phys_cpu_present_map;
-       int apic;
-       int i;
-       unsigned char old_id;
-@@ -1047,22 +1047,22 @@ static void __init setup_ioapic_ids_from
-                * system must have a unique ID or we get lots of nice
-                * 'stuck on smp_invalidate_needed IPI wait' messages.
-                */
--              if (phys_id_present_map & (1 << mp_ioapics[apic].mpc_apicid)) {
-+              if (cpu_isset(mp_ioapics[apic].mpc_apicid, phys_id_present_map)) {
-                       printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
-                               apic, mp_ioapics[apic].mpc_apicid);
-                       for (i = 0; i < 0xf; i++)
--                              if (!(phys_id_present_map & (1 << i)))
-+                              if (!cpu_isset(i, phys_id_present_map))
-                                       break;
-                       if (i >= 0xf)
-                               panic("Max APIC ID exceeded!\n");
-                       printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
-                               i);
--                      phys_id_present_map |= 1 << i;
-+                      cpu_set(i, phys_id_present_map);
-                       mp_ioapics[apic].mpc_apicid = i;
-               } else {
-                       printk(KERN_INFO 
-                              "Using IO-APIC %d\n", mp_ioapics[apic].mpc_apicid);
--                      phys_id_present_map |= 1 << mp_ioapics[apic].mpc_apicid;
-+                      cpu_set(mp_ioapics[apic].mpc_apicid, phys_id_present_map);
-               }
-@@ -1638,7 +1638,7 @@ void __init mp_config_ioapic_for_sci(int
- int __init io_apic_get_unique_id (int ioapic, int apic_id)
- {
-       union IO_APIC_reg_00 reg_00;
--      static unsigned long apic_id_map = 0;
-+      static cpumask_t apic_id_map;
-       unsigned long flags;
-       int i = 0;
-@@ -1651,7 +1651,7 @@ int __init io_apic_get_unique_id (int io
-        *      advantage of new APIC bus architecture.
-        */
--      if (!apic_id_map)
-+      if (!cpus_empty(apic_id_map))
-               apic_id_map = phys_cpu_present_map;
-       spin_lock_irqsave(&ioapic_lock, flags);
-@@ -1668,10 +1668,10 @@ int __init io_apic_get_unique_id (int io
-        * Every APIC in a system must have a unique ID or we get lots of nice 
-        * 'stuck on smp_invalidate_needed IPI wait' messages.
-        */
--      if (apic_id_map & (1 << apic_id)) {
-+      if (cpu_isset(apic_id, apic_id_map)) {
-               for (i = 0; i < IO_APIC_MAX_ID; i++) {
--                      if (!(apic_id_map & (1 << i)))
-+                      if (!cpu_isset(i, apic_id_map))
-                               break;
-               }
-@@ -1684,7 +1684,7 @@ int __init io_apic_get_unique_id (int io
-               apic_id = i;
-       } 
--      apic_id_map |= (1 << apic_id);
-+      cpu_set(apic_id, apic_id_map);
-       if (reg_00.bits.ID != apic_id) {
-               reg_00.bits.ID = apic_id;
---- linux-2.6.0-test1/arch/x86_64/kernel/irq.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/arch/x86_64/kernel/irq.c        2003-07-19 17:04:07.000000000 -0700
-@@ -792,13 +792,13 @@ int setup_irq(unsigned int irq, struct i
- static struct proc_dir_entry * root_irq_dir;
- static struct proc_dir_entry * irq_dir [NR_IRQS];
--#define HEX_DIGITS 8
-+#define HEX_DIGITS (2*sizeof(cpumask_t))
- static unsigned int parse_hex_value (const char *buffer,
--              unsigned long count, unsigned long *ret)
-+              unsigned long count, cpumask_t *ret)
- {
-       unsigned char hexnum [HEX_DIGITS];
--      unsigned long value;
-+      cpumask_t value = CPU_MASK_NONE;
-       unsigned i;
-       if (!count)
-@@ -812,10 +812,9 @@ static unsigned int parse_hex_value (con
-        * Parse the first 8 characters as a hex string, any non-hex char
-        * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
-        */
--      value = 0;
-       for (i = 0; i < count; i++) {
--              unsigned int c = hexnum[i];
-+              unsigned int k, c = hexnum[i];
-               switch (c) {
-                       case '0' ... '9': c -= '0'; break;
-@@ -824,7 +823,10 @@ static unsigned int parse_hex_value (con
-               default:
-                       goto out;
-               }
--              value = (value << 4) | c;
-+              cpus_shift_left(value, value, 4);
-+              for (k = 0; k < 4; ++k)
-+                      if (c & (1 << k))
-+                              cpu_set(k, value);
-       }
- out:
-       *ret = value;
-@@ -835,20 +837,31 @@ out:
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
--static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
-+      int k, len;
-+      cpumask_t tmp = irq_affinity[(long)data];
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-+
-+      for (k = len = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int irq_affinity_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
-       int irq = (long) data, full_count = count, err;
--      unsigned long new_value;
-+      cpumask_t tmp, new_value;
-       if (!irq_desc[irq].handler->set_affinity)
-               return -EIO;
-@@ -860,7 +873,8 @@ static int irq_affinity_write_proc (stru
-        * way to make the system unusable accidentally :-) At least
-        * one online CPU still has to be targeted.
-        */
--      if (!(new_value & cpu_online_map))
-+      cpus_and(tmp, new_value, cpu_online_map);
-+      if (cpus_empty(tmp))
-               return -EINVAL;
-       irq_affinity[irq] = new_value;
-@@ -874,17 +888,28 @@ static int irq_affinity_write_proc (stru
- static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
-                       int count, int *eof, void *data)
- {
--      unsigned long *mask = (unsigned long *) data;
-+      cpumask_t tmp, *mask = (cpumask_t *) data;
-+      int k, len;
-+
-       if (count < HEX_DIGITS+1)
-               return -EINVAL;
--      return sprintf (page, "%08lx\n", *mask);
-+
-+      tmp = *mask;
-+      for (k = len = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(page, "%04hx", (u16)cpus_coerce(tmp));
-+              len += j;
-+              page += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+      len += sprintf(page, "\n");
-+      return len;
- }
- static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
-                                       unsigned long count, void *data)
- {
--      unsigned long *mask = (unsigned long *) data, full_count = count, err;
--      unsigned long new_value;
-+      unsigned long full_count = count, err;
-+      cpumask_t new_value, *mask = (cpumask_t *)data;
-       err = parse_hex_value(buffer, count, &new_value);
-       if (err)
---- linux-2.6.0-test1/arch/x86_64/kernel/ldt.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/ldt.c        2003-07-19 17:04:07.000000000 -0700
-@@ -60,9 +60,12 @@ static int alloc_ldt(mm_context_t *pc, u
-       wmb();
-       if (reload) {
- #ifdef CONFIG_SMP
-+              cpumask_t mask;
-+
-               preempt_disable();
-+              mask = cpumask_of_cpu(smp_processor_id());
-               load_LDT(pc);
--              if (current->mm->cpu_vm_mask != (1UL<<smp_processor_id()))
-+              if (!cpus_equal(current->mm->cpu_vm_mask, mask))
-                       smp_call_function(flush_ldt, 0, 1, 1);
-               preempt_enable();
- #else
---- linux-2.6.0-test1/arch/x86_64/kernel/mpparse.c     2003-06-14 12:18:06.000000000 -0700
-+++ 25/arch/x86_64/kernel/mpparse.c    2003-07-19 17:04:07.000000000 -0700
-@@ -65,7 +65,7 @@ unsigned int boot_cpu_id = -1U;
- static unsigned int num_processors = 0;
- /* Bitmask of physically existing CPUs */
--unsigned long phys_cpu_present_map = 0;
-+cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
- /* ACPI MADT entry parsing functions */
- #ifdef CONFIG_ACPI_BOOT
-@@ -124,7 +124,7 @@ static void __init MP_processor_info (st
-       }
-       ver = m->mpc_apicver;
--      phys_cpu_present_map |= 1 << m->mpc_apicid;
-+      cpu_set(m->mpc_apicid, phys_cpu_present_map);
-       /*
-        * Validate version
-        */
---- linux-2.6.0-test1/arch/x86_64/kernel/msr.c 2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/msr.c        2003-07-19 17:04:07.000000000 -0700
-@@ -242,7 +242,7 @@ static int msr_open(struct inode *inode,
-   int cpu = minor(file->f_dentry->d_inode->i_rdev);
-   struct cpuinfo_x86 *c = &(cpu_data)[cpu];
-   
--  if ( !(cpu_online_map & (1UL << cpu)) )
-+  if (!cpu_online(cpu))
-     return -ENXIO;            /* No such CPU */
-   if ( !cpu_has(c, X86_FEATURE_MSR) )
-     return -EIO;              /* MSR not supported */
---- linux-2.6.0-test1/arch/x86_64/kernel/reboot.c      2003-06-14 12:18:30.000000000 -0700
-+++ 25/arch/x86_64/kernel/reboot.c     2003-07-19 17:04:07.000000000 -0700
-@@ -110,7 +110,7 @@ static void smp_halt(void)
-       }
-       /* Wait for all other CPUs to have run smp_stop_cpu */
--      while (cpu_online_map) 
-+      while (!cpus_empty(cpu_online_map))
-               rep_nop(); 
- }
- #endif
---- linux-2.6.0-test1/arch/x86_64/kernel/setup.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/arch/x86_64/kernel/setup.c      2003-07-19 17:04:07.000000000 -0700
-@@ -643,7 +643,7 @@ static int show_cpuinfo(struct seq_file 
- #ifdef CONFIG_SMP
--      if (!(cpu_online_map & (1<<(c-cpu_data))))
-+      if (!cpu_online(c-cpu_data))
-               return 0;
- #endif
---- linux-2.6.0-test1/arch/x86_64/kernel/smpboot.c     2003-06-16 22:32:20.000000000 -0700
-+++ 25/arch/x86_64/kernel/smpboot.c    2003-07-19 17:04:07.000000000 -0700
-@@ -54,11 +54,11 @@
- #include <asm/proto.h>
- /* Bitmask of currently online CPUs */
--unsigned long cpu_online_map = 1;
-+cpumask_t cpu_online_map;
--static volatile unsigned long cpu_callin_map;
--volatile unsigned long cpu_callout_map;
--static unsigned long smp_commenced_mask;
-+static cpumask_t cpu_callin_map;
-+cpumask_t cpu_callout_map;
-+static cpumask_t smp_commenced_mask;
- /* Per CPU bogomips and other parameters */
- struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
-@@ -174,7 +174,7 @@ static void __init synchronize_tsc_bp (v
-       sum = 0;
-       for (i = 0; i < NR_CPUS; i++) {
--              if (test_bit(i, &cpu_callout_map)) {
-+              if (cpu_isset(i, cpu_callout_map)) {
-               t0 = tsc_values[i];
-               sum += t0;
-       }
-@@ -183,7 +183,7 @@ static void __init synchronize_tsc_bp (v
-       sum = 0;
-       for (i = 0; i < NR_CPUS; i++) {
--              if (!test_bit(i, &cpu_callout_map))
-+              if (!cpu_isset(i, cpu_callout_map))
-                       continue;
-               delta = tsc_values[i] - avg;
-@@ -258,7 +258,7 @@ void __init smp_callin(void)
-        */
-       phys_id = GET_APIC_ID(apic_read(APIC_ID));
-       cpuid = smp_processor_id();
--      if (test_and_set_bit(cpuid, &cpu_callin_map)) {
-+      if (cpu_test_and_set(cpuid, cpu_callin_map)) {
-               panic("smp_callin: phys CPU#%d, CPU#%d already present??\n",
-                                       phys_id, cpuid);
-       }
-@@ -280,7 +280,7 @@ void __init smp_callin(void)
-               /*
-                * Has the boot CPU finished it's STARTUP sequence?
-                */
--              if (test_bit(cpuid, &cpu_callout_map))
-+              if (cpu_isset(cpuid, cpu_callout_map))
-                       break;
-               rep_nop();
-       }
-@@ -320,7 +320,7 @@ void __init smp_callin(void)
-       /*
-        * Allow the master to continue.
-        */
--      set_bit(cpuid, &cpu_callin_map);
-+      cpu_set(cpuid, cpu_callin_map);
-       /*
-        *      Synchronize the TSC with the BP
-@@ -348,7 +348,7 @@ void __init start_secondary(void)
-       barrier();
-       Dprintk("cpu %d: waiting for commence\n", smp_processor_id()); 
--      while (!test_bit(smp_processor_id(), &smp_commenced_mask))
-+      while (!cpu_isset(smp_processor_id(), smp_commenced_mask))
-               rep_nop();
-       Dprintk("cpu %d: setting up apic clock\n", smp_processor_id());         
-@@ -372,7 +372,7 @@ void __init start_secondary(void)
-       local_flush_tlb();
-       Dprintk("cpu %d eSetting cpu_online_map\n", smp_processor_id()); 
--      set_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-       wmb();
-       
-       cpu_idle();
-@@ -630,19 +630,19 @@ static void __init do_boot_cpu (int apic
-                * allow APs to start initializing.
-                */
-               Dprintk("Before Callout %d.\n", cpu);
--              set_bit(cpu, &cpu_callout_map);
-+              cpu_set(cpu, cpu_callout_map);
-               Dprintk("After Callout %d.\n", cpu);
-               /*
-                * Wait 5s total for a response
-                */
-               for (timeout = 0; timeout < 50000; timeout++) {
--                      if (test_bit(cpu, &cpu_callin_map))
-+                      if (cpu_isset(cpu, cpu_callin_map))
-                               break;  /* It has booted */
-                       udelay(100);
-               }
--              if (test_bit(cpu, &cpu_callin_map)) {
-+              if (cpu_isset(cpu, cpu_callin_map)) {
-                       /* number CPUs logically, starting from 1 (BSP is 0) */
-                       Dprintk("OK.\n");
-                       printk(KERN_INFO "CPU%d: ", cpu);
-@@ -663,7 +663,7 @@ static void __init do_boot_cpu (int apic
-               }
-       }
-       if (boot_error) {
--              clear_bit(cpu, &cpu_callout_map); /* was set here (do_boot_cpu()) */
-+              cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
-               clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
-               cpucount--;
-       }
-@@ -734,10 +734,10 @@ static void __init smp_boot_cpus(unsigne
-       current_thread_info()->cpu = 0;
-       smp_tune_scheduling();
--      if (!test_bit(hard_smp_processor_id(), &phys_cpu_present_map)) {
-+      if (!cpu_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
-               printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
-                      hard_smp_processor_id());
--              phys_cpu_present_map |= (1 << hard_smp_processor_id());
-+              cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
-       }
-       /*
-@@ -747,8 +747,8 @@ static void __init smp_boot_cpus(unsigne
-       if (!smp_found_config) {
-               printk(KERN_NOTICE "SMP motherboard not detected.\n");
-               io_apic_irqs = 0;
--              cpu_online_map = phys_cpu_present_map = 1;
--              phys_cpu_present_map = 1;
-+              cpu_online_map = cpumask_of_cpu(0);
-+              phys_cpu_present_map = cpumask_of_cpu(0);
-               if (APIC_init_uniprocessor())
-                       printk(KERN_NOTICE "Local APIC not detected."
-                                          " Using dummy APIC emulation.\n");
-@@ -759,10 +759,10 @@ static void __init smp_boot_cpus(unsigne
-        * Should not be necessary because the MP table should list the boot
-        * CPU too, but we do it for the sake of robustness anyway.
-        */
--      if (!test_bit(boot_cpu_id, &phys_cpu_present_map)) {
-+      if (!cpu_isset(boot_cpu_id, phys_cpu_present_map)) {
-               printk(KERN_NOTICE "weird, boot CPU (#%d) not listed by the BIOS.\n",
-                                                                boot_cpu_id);
--              phys_cpu_present_map |= (1 << hard_smp_processor_id());
-+              cpu_set(hard_smp_processor_id(), phys_cpu_present_map);
-       }
-       /*
-@@ -773,8 +773,8 @@ static void __init smp_boot_cpus(unsigne
-                       boot_cpu_id);
-               printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
-               io_apic_irqs = 0;
--              cpu_online_map = phys_cpu_present_map = 1;
--              phys_cpu_present_map = 1;
-+              cpu_online_map = cpumask_of_cpu(0);
-+              phys_cpu_present_map = cpumask_of_cpu(0);
-               disable_apic = 1;
-               goto smp_done;
-       }
-@@ -788,8 +788,8 @@ static void __init smp_boot_cpus(unsigne
-               smp_found_config = 0;
-               printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
-               io_apic_irqs = 0;
--              cpu_online_map = phys_cpu_present_map = 1;
--              phys_cpu_present_map = 1;
-+              cpu_online_map = cpumask_of_cpu(0);
-+              phys_cpu_present_map = cpumask_of_cpu(0);
-               disable_apic = 1;
-               goto smp_done;
-       }
-@@ -812,7 +812,7 @@ static void __init smp_boot_cpus(unsigne
-               if (apicid == boot_cpu_id)
-                       continue;
--              if (!(phys_cpu_present_map & (1 << apicid)))
-+              if (!cpu_isset(apicid, phys_cpu_present_map))
-                       continue;
-               if ((max_cpus >= 0) && (max_cpus <= cpucount+1))
-                       continue;
-@@ -848,7 +848,7 @@ static void __init smp_boot_cpus(unsigne
-       } else {
-               unsigned long bogosum = 0;
-               for (cpu = 0; cpu < NR_CPUS; cpu++)
--                      if (cpu_callout_map & (1<<cpu))
-+                      if (cpu_isset(cpu, cpu_callout_map))
-                               bogosum += cpu_data[cpu].loops_per_jiffy;
-               printk(KERN_INFO "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
-                       cpucount+1,
-@@ -889,20 +889,20 @@ void __init smp_prepare_cpus(unsigned in
- void __devinit smp_prepare_boot_cpu(void)
- {
--      set_bit(smp_processor_id(), &cpu_online_map);
--      set_bit(smp_processor_id(), &cpu_callout_map);
-+      cpu_set(smp_processor_id(), cpu_online_map);
-+      cpu_set(smp_processor_id(), cpu_callout_map);
- }
- int __devinit __cpu_up(unsigned int cpu)
- {
-       /* This only works at boot for x86.  See "rewrite" above. */
--      if (test_bit(cpu, &smp_commenced_mask)) { 
-+      if (cpu_isset(cpu, smp_commenced_mask)) {
-               local_irq_enable();
-               return -ENOSYS;
-       }
-       /* In case one didn't come up */
--      if (!test_bit(cpu, &cpu_callin_map)) { 
-+      if (!cpu_isset(cpu, cpu_callin_map)) {
-               local_irq_enable();
-               return -EIO;
-       }
-@@ -911,8 +911,8 @@ int __devinit __cpu_up(unsigned int cpu)
-       /* Unleash the CPU! */
-       Dprintk("waiting for cpu %d\n", cpu);
--      set_bit(cpu, &smp_commenced_mask);
--      while (!test_bit(cpu, &cpu_online_map))
-+      cpu_set(cpu, smp_commenced_mask);
-+      while (!cpu_isset(cpu, cpu_online_map))
-               mb();
-       return 0;
- }
---- linux-2.6.0-test1/arch/x86_64/kernel/smp.c 2003-06-14 12:18:04.000000000 -0700
-+++ 25/arch/x86_64/kernel/smp.c        2003-07-19 17:04:07.000000000 -0700
-@@ -92,8 +92,9 @@ void send_IPI_self(int vector)
-       __send_IPI_shortcut(APIC_DEST_SELF, vector);
- }
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t cpumask, int vector)
- {
-+      unsigned long mask = cpus_coerce(cpumask);
-       unsigned long cfg;
-       unsigned long flags;
-@@ -133,7 +134,7 @@ static inline void send_IPI_mask(int mas
-  *    Optimizations Manfred Spraul <manfred@colorfullife.com>
-  */
--static volatile unsigned long flush_cpumask;
-+static volatile cpumask_t flush_cpumask;
- static struct mm_struct * flush_mm;
- static unsigned long flush_va;
- static spinlock_t tlbstate_lock = SPIN_LOCK_UNLOCKED;
-@@ -203,7 +204,7 @@ asmlinkage void smp_invalidate_interrupt
-       cpu = get_cpu();
--      if (!test_bit(cpu, &flush_cpumask))
-+      if (!cpu_isset(cpu, flush_cpumask))
-               goto out;
-               /* 
-                * This was a BUG() but until someone can quote me the
-@@ -224,15 +225,16 @@ asmlinkage void smp_invalidate_interrupt
-                       leave_mm(cpu);
-       }
-       ack_APIC_irq();
--      clear_bit(cpu, &flush_cpumask);
-+      cpu_clear(cpu, flush_cpumask);
- out:
-       put_cpu_no_resched();
- }
--static void flush_tlb_others (unsigned long cpumask, struct mm_struct *mm,
-+static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
-                                               unsigned long va)
- {
-+      cpumask_t tmp;
-       /*
-        * A couple of (to be removed) sanity checks:
-        *
-@@ -240,12 +242,10 @@ static void flush_tlb_others (unsigned l
-        * - current CPU must not be in mask
-        * - mask must exist :)
-        */
--      if (!cpumask)
--              BUG();
--      if ((cpumask & cpu_online_map) != cpumask)
--              BUG();
--      if (cpumask & (1 << smp_processor_id()))
--              BUG();
-+      BUG_ON(cpus_empty(cpumask));
-+      cpus_and(tmp, cpumask, cpu_online_map);
-+      BUG_ON(!cpus_equal(tmp, cpumask));
-+      BUG_ON(cpu_isset(smp_processor_id(), cpumask));
-       if (!mm)
-               BUG();
-@@ -259,14 +259,15 @@ static void flush_tlb_others (unsigned l
-       
-       flush_mm = mm;
-       flush_va = va;
--      atomic_set_mask(cpumask, &flush_cpumask);
-+      cpus_or(flush_cpumask, cpumask, flush_cpumask);
-+
-       /*
-        * We have to send the IPI only to
-        * CPUs affected.
-        */
-       send_IPI_mask(cpumask, INVALIDATE_TLB_VECTOR);
--      while (flush_cpumask)
-+      while (!cpus_empty(flush_cpumask))
-               /* nothing. lockup detection does not belong here */;
-       flush_mm = NULL;
-@@ -277,23 +278,25 @@ static void flush_tlb_others (unsigned l
- void flush_tlb_current_task(void)
- {
-       struct mm_struct *mm = current->mm;
--      unsigned long cpu_mask;
-+      cpumask_t cpu_mask;
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+      cpu_mask = mm->cpu_vm_mask;
-+      cpu_clear(smp_processor_id(), cpu_mask);
-       local_flush_tlb();
--      if (cpu_mask)
-+      if (!cpus_empty(cpu_mask))
-               flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-       preempt_enable();
- }
- void flush_tlb_mm (struct mm_struct * mm)
- {
--      unsigned long cpu_mask;
-+      cpumask_t cpu_mask;
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+      cpu_mask = mm->cpu_vm_mask;
-+      cpu_clear(smp_processor_id(), cpu_mask);
-       if (current->active_mm == mm) {
-               if (current->mm)
-@@ -301,7 +304,7 @@ void flush_tlb_mm (struct mm_struct * mm
-               else
-                       leave_mm(smp_processor_id());
-       }
--      if (cpu_mask)
-+      if (!cpus_empty(cpu_mask))
-               flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
-       preempt_enable();
-@@ -310,10 +313,11 @@ void flush_tlb_mm (struct mm_struct * mm
- void flush_tlb_page(struct vm_area_struct * vma, unsigned long va)
- {
-       struct mm_struct *mm = vma->vm_mm;
--      unsigned long cpu_mask;
-+      cpumask_t cpu_mask;
-       preempt_disable();
--      cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
-+      cpu_mask = mm->cpu_vm_mask;
-+      cpu_clear(smp_processor_id(), cpu_mask);
-       if (current->active_mm == mm) {
-               if(current->mm)
-@@ -322,7 +326,7 @@ void flush_tlb_page(struct vm_area_struc
-                       leave_mm(smp_processor_id());
-       }
--      if (cpu_mask)
-+      if (!cpus_empty(cpu_mask))
-               flush_tlb_others(cpu_mask, mm, va);
-       preempt_enable();
-@@ -355,7 +359,7 @@ void smp_kdb_stop(void)
- void smp_send_reschedule(int cpu)
- {
--      send_IPI_mask(1 << cpu, RESCHEDULE_VECTOR);
-+      send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR);
- }
- /*
-@@ -430,7 +434,7 @@ void smp_stop_cpu(void)
-       /*
-        * Remove this CPU:
-        */
--      clear_bit(smp_processor_id(), &cpu_online_map);
-+      cpu_clear(smp_processor_id(), cpu_online_map);
-       local_irq_disable();
-       disable_local_APIC();
-       local_irq_enable(); 
-@@ -491,8 +495,8 @@ int slow_smp_processor_id(void)
-       unsigned long sp = (unsigned long)&stack_location; 
-       int offset = 0, cpu;
--      for (offset = 0; (cpu_online_map >> offset); offset = cpu + 1) { 
--              cpu = ffz(~(cpu_online_map >> offset));
-+      for (offset = 0; next_cpu(offset, cpu_online_map) < NR_CPUS; offset = cpu + 1) {
-+              cpu = next_cpu(offset, cpu_online_map);
-               if (sp >= (u64)cpu_pda[cpu].irqstackptr - IRQSTACKSIZE && 
-                   sp <= (u64)cpu_pda[cpu].irqstackptr)
---- linux-2.6.0-test1/arch/x86_64/mm/init.c    2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/x86_64/mm/init.c   2003-07-19 17:03:49.000000000 -0700
-@@ -19,9 +19,6 @@
- #include <linux/swap.h>
- #include <linux/smp.h>
- #include <linux/init.h>
--#ifdef CONFIG_BLK_DEV_INITRD
--#include <linux/blk.h>
--#endif
- #include <linux/pagemap.h>
- #include <linux/bootmem.h>
- #include <linux/proc_fs.h>
---- linux-2.6.0-test1/arch/x86_64/mm/ioremap.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/arch/x86_64/mm/ioremap.c        2003-07-19 17:07:16.000000000 -0700
-@@ -82,7 +82,7 @@ static int remap_area_pages(unsigned lon
-       spin_lock(&init_mm.page_table_lock);
-       do {
-               pmd_t *pmd;
--              pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
---- linux-2.6.0-test1/arch/x86_64/mm/numa.c    2003-07-10 18:50:30.000000000 -0700
-+++ 25/arch/x86_64/mm/numa.c   2003-07-19 17:03:49.000000000 -0700
-@@ -8,7 +8,6 @@
- #include <linux/init.h>
- #include <linux/bootmem.h>
- #include <linux/mmzone.h>
--#include <linux/blk.h>
- #include <linux/ctype.h>
- #include <asm/e820.h>
- #include <asm/proto.h>
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/fb/neofb.txt      2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,27 @@
-+the neofb framebuffer driver supports the following Neomagic chipsets:
-+
-+NM2070 MagicGraph 128
-+NM2090 MagicGraph 128V
-+NM2093 MagicGraph 128ZV
-+NM2097 MagicGraph 128ZV+
-+NM2160 MagicGraph 128XD
-+NM2200 MagicGraph 256AV
-+NM2230 MagicGraph 256AV+
-+NM2360 MagicGraph 256ZX
-+NM2380 MagicGraph 256XL+
-+
-+with the following options:
-+
-+disabled      Disable this driver's initialization.
-+internal      Enable output on internal LCD Display.
-+external      Enable output on external CRT.
-+nostretch     Disable stretching of modes smaller than LCD.
-+nopciburst    Disable PCI burst mode.
-+libretto      Force Libretto 100/110 800x480 LCD.
-+picturebook   Force Picturebook 1024x480 LCD.
-+
-+at the boot prompt:
-+      video=neofb:picturebook
-+
-+as a module:
-+      modprobe neofb picturebook=1
---- linux-2.6.0-test1/Documentation/filesystems/proc.txt       2003-06-26 22:07:24.000000000 -0700
-+++ 25/Documentation/filesystems/proc.txt      2003-07-19 17:04:56.000000000 -0700
-@@ -222,6 +222,7 @@ Table 1-3: Kernel info in /proc 
-  partitions  Table of partitions known to the system           
-  pci       Depreciated info of PCI bus (new way -> /proc/bus/pci/, 
-              decoupled by lspci                                       (2.4)
-+ rcu       Read-Copy Update information                       (2.5)
-  rtc         Real time clock                                   
-  scsi        SCSI info (see text)                              
-  slabinfo    Slab pool info                                    
-@@ -346,6 +347,9 @@ available.  In this case, there are 0 ch
- ZONE_DMA, 4 chunks of 2^1*PAGE_SIZE in ZONE_DMA, 101 chunks of 2^4*PAGE_SIZE 
- available in ZONE_NORMAL, etc... 
-+The rcu file gives information about Read-Copy Update synchronization
-+primitive. It indicates the number for RCU requests and actual
-+updates for every CPU.
- 1.3 IDE devices in /proc/ide
- ----------------------------
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/andthen 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,100 @@
-+
-+define        set_andthen
-+      set var $thp=0
-+      set var $thp=(struct kgdb_and_then_struct *)&kgdb_data[0]
-+      set var $at_size = (sizeof kgdb_data)/(sizeof *$thp)
-+      set var $at_oc=kgdb_and_then_count
-+      set var $at_cc=$at_oc
-+end
-+
-+define andthen_next
-+      set var $at_cc=$arg0
-+end
-+
-+define andthen
-+      andthen_set_edge
-+      if ($at_cc >= $at_oc)
-+              printf "Outside window.  Window size is %d\n",($at_oc-$at_low)
-+      else
-+              printf "%d: ",$at_cc
-+              output *($thp+($at_cc++ % $at_size ))
-+              printf "\n"
-+      end
-+end
-+define andthen_set_edge
-+      set var $at_oc=kgdb_and_then_count
-+      set var $at_low = $at_oc - $at_size
-+      if ($at_low < 0 )
-+              set var $at_low = 0
-+      end
-+      if (( $at_cc > $at_oc) || ($at_cc < $at_low))
-+              printf "Count outside of window, setting count to "
-+              if ($at_cc >= $at_oc)
-+                      set var $at_cc = $at_oc
-+              else
-+                      set var $at_cc = $at_low
-+              end
-+              printf "%d\n",$at_cc
-+      end
-+end
-+
-+define beforethat
-+      andthen_set_edge
-+      if ($at_cc <= $at_low)
-+              printf "Outside window.  Window size is %d\n",($at_oc-$at_low)
-+      else
-+              printf "%d: ",$at_cc-1
-+              output *($thp+(--$at_cc % $at_size ))
-+              printf "\n"
-+      end
-+end
-+
-+document andthen_next
-+      andthen_next <count>
-+      .       sets the number of the event to display next. If this event
-+      .       is not in the event pool, either andthen or beforethat will
-+      .       correct it to the nearest event pool edge.  The event pool
-+      .       ends at the last event recorded and begins <number of events>
-+      .       prior to that.  If beforethat is used next, it will display
-+      .       event <count> -1.
-+.
-+      andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
-+      
-+                      
-+document andthen
-+      andthen 
-+.     displays the next event in the list.  <set_andthen> sets up to display
-+.     the oldest saved event first. 
-+.     <count> (optional) count of the event to display.
-+.     note the number of events saved is specified at configure time.
-+.     if events are saved between calls to andthen the index will change
-+.     but the displayed event will be the next one (unless the event buffer
-+.     is overrun).
-+.
-+.     andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
-+
-+document set_andthen
-+      set_andthen
-+.     sets up to use the <andthen> and <beforethat> commands. 
-+.             if you have defined your own struct, use the above and
-+.             then enter the following:
-+.             p $thp=(struct kgdb_and_then_structX *)&kgdb_data[0]
-+.             where <kgdb_and_then_structX> is the name of your structure.
-+.
-+.     andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
-+
-+document beforethat
-+      beforethat 
-+.     displays the next prior event in the list. <set_andthen> sets up to
-+.     display the last occuring event first.
-+.
-+.     note the number of events saved is specified at configure time.
-+.     if events are saved between calls to beforethat the index will change
-+.     but the displayed event will be the next one (unless the event buffer
-+.     is overrun).
-+.
-+.     andthen commands are: set_andthen, andthen_next, andthen and beforethat
-+end
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/debug-nmi.txt   2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,37 @@
-+Subject: Debugging with NMI
-+Date: Mon, 12 Jul 1999 11:28:31 -0500
-+From: David Grothe <dave@gcom.com>
-+Organization: Gcom, Inc
-+To: David Grothe <dave@gcom.com>
-+
-+Kernel hackers:
-+
-+Maybe this is old hat, but it is new to me --
-+
-+On an ISA bus machine, if you short out the A1 and B1 pins of an ISA
-+slot you will generate an NMI to the CPU.  This interrupts even a
-+machine that is hung in a loop with interrupts disabled.  Used in
-+conjunction with kgdb <
-+ftp://ftp.gcom.com/pub/linux/src/kgdb-2.3.35/kgdb-2.3.35.tgz > you can
-+gain debugger control of a machine that is hung in the kernel!  Even
-+without kgdb the kernel will print a stack trace so you can find out
-+where it was hung.
-+
-+The A1/B1 pins are directly opposite one another and the farthest pins
-+towards the bracket end of the ISA bus socket.  You can stick a paper
-+clip or multi-meter probe between them to short them out.
-+
-+I had a spare ISA bus to PC104 bus adapter around.  The PC104 end of the
-+board consists of two rows of wire wrap pins.  So I wired a push button
-+between the A1/B1 pins and now have an ISA board that I can stick into
-+any ISA bus slot for debugger entry.
-+
-+Microsoft has a circuit diagram of a PCI card at
-+http://www.microsoft.com/hwdev/DEBUGGING/DMPSW.HTM.  If you want to
-+build one you will have to mail them and ask for the PAL equations.
-+Nobody makes one comercially.
-+
-+[THIS TIP COMES WITH NO WARRANTY WHATSOEVER.  It works for me, but if
-+your machine catches fire, it is your problem, not mine.]
-+
-+-- Dave (the kgdb guy)
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdb-globals.txt 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,71 @@
-+Sender: akale@veritas.com
-+Date: Fri, 23 Jun 2000 19:26:35 +0530
-+From: "Amit S. Kale" <akale@veritas.com>
-+Organization: Veritas Software (India)
-+To: Dave Grothe <dave@gcom.com>, linux-kernel@vger.rutgers.edu
-+CC: David Milburn <dmilburn@wirespeed.com>,
-+        "Edouard G. Parmelan" <Edouard.Parmelan@quadratec.fr>,
-+        ezannoni@cygnus.com, Keith Owens <kaos@ocs.com.au>
-+Subject: Re: Module debugging using kgdb
-+
-+Dave Grothe wrote:
-+> 
-+> Amit:
-+> 
-+> There is a 2.4.0 version of kgdb on our ftp site:
-+> ftp://ftp.gcom.com/pub/linux/src/kgdb.  I mirrored your version of gdb
-+> and loadmodule.sh there.
-+> 
-+> Have a look at the README file and see if I go it right.  If not, send
-+> me some corrections and I will update it.
-+> 
-+> Does your version of gdb solve the global variable problem?
-+
-+Yes. 
-+Thanks to Elena Zanoni, gdb (developement version) can now calculate 
-+correctly addresses  of dynamically loaded object files. I have not been 
-+following gdb developement for sometime and am not sure when symbol
-+address calculation fix is going to appear in a gdb stable version.
-+
-+Elena, any idea when the fix will make it to a prebuilt gdb from a
-+redhat release?
-+
-+For the time being I have built a gdb developement version. It can be
-+used for module debugging with loadmodule.sh script.
-+
-+The problem with calculating of module addresses with previous versions
-+of gdb was as follows:
-+gdb did not use base address of a section while calculating address of
-+a symbol in the section in an object file loaded via 'add-symbol-file'. 
-+It used address of .text segment instead. Due to this addresses of
-+symbols in .data, .bss etc. (e.g. global variables) were calculated incorrectly.
-+
-+Above mentioned fix allow gdb to use base address of a segment while
-+calculating address of a symbol in it. It adds a parameter '-s' to
-+'add-symbol-file' command for specifying base address of a segment.
-+
-+loadmodule.sh script works as follows.
-+
-+1. Copy a module file to target machine.
-+2. Load the module on the target machine using insmod with -m parameter.
-+insmod produces a module load map which contains base addresses of all
-+sections in the module and addresses of symbols in the module file.
-+3. Find all sections and their base addresses in the module from 
-+the module map.
-+4. Generate a script that loads the module file. The script uses
-+'add-symbol-file' and specifies address of text segment followed by
-+addresses of all segments in the module.
-+
-+Here is an example gdb script produced by loadmodule.sh script.
-+
-+add-symbol-file foo 0xd082c060 -s .text.lock 0xd08cbfb5 
-+-s .fixup 0xd08cfbdf -s .rodata 0xd08cfde0 -s __ex_table 0xd08e3b38 
-+-s .data 0xd08e3d00 -s .bss 0xd08ec8c0 -s __ksymtab 0xd08ee838
-+
-+With this command gdb can calculate addresses of symbols in ANY segment
-+in a module file.
-+
-+Regards.
-+-- 
-+Amit Kale
-+Veritas Software ( http://www.veritas.com )
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdbinit 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,14 @@
-+shell echo -e "\003" >/dev/ttyS0
-+set remotebaud 38400
-+target remote /dev/ttyS0
-+define si
-+stepi
-+printf "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", $eax, $ebx, $ecx, $edx
-+printf "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n", $esi, $edi, $ebp, $esp
-+x/i $eip
-+end
-+define ni
-+nexti
-+printf "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", $eax, $ebx, $ecx, $edx
-+printf "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n", $esi, $edi, $ebp, $esp
-+x/i $eip
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdbinit.hw      2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,117 @@
-+
-+#Using ia-32 hardware breakpoints.
-+#
-+#4 hardware breakpoints are available in ia-32 processors. These breakpoints
-+#do not need code modification. They are set using debug registers.
-+#
-+#Each hardware breakpoint can be of one of the
-+#three types: execution, write, access.
-+#1. An Execution breakpoint is triggered when code at the breakpoint address is
-+#executed.
-+#2. A write breakpoint ( aka watchpoints ) is triggered when memory location
-+#at the breakpoint address is written.
-+#3. An access breakpoint is triggered when memory location at the breakpoint
-+#address is either read or written.
-+#
-+#As hardware breakpoints are available in limited number, use software
-+#breakpoints ( br command in gdb ) instead of execution hardware breakpoints.
-+#
-+#Length of an access or a write breakpoint defines length of the datatype to
-+#be watched. Length is 1 for char, 2 short , 3 int.
-+#
-+#For placing execution, write and access breakpoints, use commands
-+#hwebrk, hwwbrk, hwabrk
-+#To remove a breakpoint use hwrmbrk command.
-+#
-+#These commands take following types of arguments. For arguments associated
-+#with each command, use help command.
-+#1. breakpointno: 0 to 3
-+#2. length: 1 to 3
-+#3. address: Memory location in hex ( without 0x ) e.g c015e9bc
-+#
-+#Use the command exinfo to find which hardware breakpoint occured.
-+
-+#hwebrk breakpointno address
-+define hwebrk
-+      maintenance packet Y$arg0,0,0,$arg1
-+end
-+document hwebrk
-+      hwebrk <breakpointno> <address>
-+      Places a hardware execution breakpoint
-+      <breakpointno> = 0 - 3
-+      <address> = Hex digits without leading "0x".
-+end
-+
-+#hwwbrk breakpointno length address
-+define hwwbrk
-+      maintenance packet Y$arg0,1,$arg1,$arg2
-+end
-+document hwwbrk
-+      hwwbrk <breakpointno> <length> <address>
-+      Places a hardware write breakpoint
-+      <breakpointno> = 0 - 3
-+      <length> = 1 (1 byte), 2 (2 byte), 3 (4 byte)
-+      <address> = Hex digits without leading "0x".
-+end
-+
-+#hwabrk breakpointno length address
-+define hwabrk
-+      maintenance packet Y$arg0,1,$arg1,$arg2
-+end
-+document hwabrk
-+      hwabrk <breakpointno> <length> <address>
-+      Places a hardware access breakpoint
-+      <breakpointno> = 0 - 3
-+      <length> = 1 (1 byte), 2 (2 byte), 3 (4 byte)
-+      <address> = Hex digits without leading "0x".
-+end
-+
-+#hwrmbrk breakpointno
-+define hwrmbrk
-+      maintenance packet y$arg0
-+end
-+document hwrmbrk
-+      hwrmbrk <breakpointno>
-+      <breakpointno> = 0 - 3
-+      Removes a hardware breakpoint
-+end
-+
-+define reboot
-+        maintenance packet r
-+end
-+#exinfo 
-+define exinfo
-+      maintenance packet qE
-+end
-+document exinfo
-+      exinfo 
-+      Gives information about a breakpoint.
-+end
-+define get_th
-+      p $th=(struct thread_info *)((int)$esp & ~8191)
-+end
-+document get_th
-+      get_tu
-+      Gets and prints the current thread_info pointer, Defines th to be it.
-+end
-+define get_cu
-+      p $cu=(struct thread_info *)((int)$esp & ~8191)->task
-+end
-+document get_cu
-+      get_cu
-+      Gets and print the "current" value.  Defines $cu to be it.
-+end
-+define int_off
-+      set var $flags=$eflags
-+      set $eflags=$eflags&~0x200
-+      end
-+define int_on
-+      set var $eflags|=$flags&0x200
-+      end
-+document int_off
-+      saves the current interrupt state and clears the processor interrupt 
-+      flag.  Use int_on to restore the saved flag.
-+end
-+document int_on
-+      Restores the interrupt flag saved by int_off.
-+end
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/gdbinit-modules 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,146 @@
-+#
-+# Usefull GDB user-command to debug Linux Kernel Modules with gdbstub.
-+#
-+# This don't work for Linux-2.0 or older.
-+#
-+# Author Edouard G. Parmelan <Edouard.Parmelan@quadratec.fr>
-+#
-+#
-+# Fri Apr 30 20:33:29 CEST 1999
-+#   First public release.
-+#
-+#   Major cleanup after experiment Linux-2.0 kernel without success.
-+#   Symbols of a module are not in the correct order, I can't explain
-+#   why :(
-+#
-+# Fri Mar 19 15:41:40 CET 1999
-+#   Initial version.
-+#
-+# Thu Jan  6 16:29:03 CST 2000
-+#   A little fixing by Dave Grothe <dave@gcom.com>
-+#
-+# Mon Jun 19 09:33:13 CDT 2000
-+#   Alignment changes from Edouard Parmelan
-+#
-+# The basic idea is to find where insmod load the module and inform
-+# GDB to load the symbol table of the module with the GDB command 
-+# ``add-symbol-file <object> <address>''.
-+#
-+# The Linux kernel holds the list of all loaded modules in module_list,
-+# this list end with &kernel_module (exactly with module->next == NULL,
-+# but the last module is not a real module).
-+#
-+# Insmod allocates the struct module before the object file.  Since
-+# Linux-2.1, this structure contain his size.  The real address of
-+# the object file is then (char*)module + module->size_of_struct.
-+#
-+# You can use three user functions ``mod-list'', ``mod-print-symbols''
-+# and ``add-module-symbols''.
-+#
-+# mod-list list all loaded modules with the format:
-+#    <module-address> <module-name>
-+#
-+# As soon as you have found the address of your module, you can
-+# print its exported symbols (mod-print-symbols) or inform GDB to add
-+# symbols from your module file (mod-add-symbols).
-+#
-+# The argument that you give to mod-print-symbols or mod-add-symbols
-+# is the <module-address> from the mod-list command.
-+#
-+# When using the mod-add-symbols command you must also give the full
-+# pathname of the modules object code file.
-+#
-+# The command mod-add-lis is an example of how to make this easier.
-+# You can edit this macro to contain the path name of your own
-+# favorite module and then use it as a shorthand to load it.  You
-+# still need the module-address, however.
-+#
-+# The internal function ``mod-validate'' set the GDB variable $mod
-+# as a ``struct module*'' if the kernel known the module otherwise
-+# $mod is set to NULL.  This ensure to not add symbols for a wrong
-+# address.
-+# 
-+# Have a nice hacking day !
-+#
-+#
-+define mod-list
-+    set $mod = (struct module*)module_list
-+    # the last module is the kernel, ignore it
-+    while $mod != &kernel_module
-+      printf "%p\t%s\n", (long)$mod, ($mod)->name
-+      set $mod = $mod->next
-+    end
-+end
-+document mod-list
-+List all modules in the form: <module-address> <module-name>
-+Use the <module-address> as the argument for the other
-+mod-commands: mod-print-symbols, mod-add-symbols.
-+end
-+
-+define mod-validate
-+    set $mod = (struct module*)module_list
-+    while ($mod != $arg0) && ($mod != &kernel_module)
-+      set $mod = $mod->next
-+    end
-+    if $mod == &kernel_module
-+      set $mod = 0
-+      printf "%p is not a module\n", $arg0
-+    end
-+end
-+document mod-validate
-+mod-validate <module-address>
-+Internal user-command used to validate the module parameter.
-+If <module> is a real loaded module, set $mod to it otherwise set $mod to 0.
-+end
-+
-+
-+define mod-print-symbols
-+    mod-validate $arg0
-+    if $mod != 0
-+      set $i = 0
-+      while $i < $mod->nsyms
-+          set $sym = $mod->syms[$i]
-+          printf "%p\t%s\n", $sym->value, $sym->name
-+          set $i = $i + 1
-+      end
-+    end
-+end
-+document mod-print-symbols
-+mod-print-symbols <module-address>
-+Print all exported symbols of the module.  see mod-list
-+end
-+
-+
-+define mod-add-symbols-align
-+    mod-validate $arg0
-+    if $mod != 0
-+      set $mod_base = ($mod->size_of_struct + (long)$mod)
-+      if ($arg2 != 0) && (($mod_base & ($arg2 - 1)) != 0)
-+          set $mod_base = ($mod_base | ($arg2 - 1)) + 1
-+      end
-+      add-symbol-file $arg1 $mod_base
-+    end
-+end
-+document mod-add-symbols-align
-+mod-add-symbols-align <module-address> <object file path name> <align>
-+Load the symbols table of the module from the object file where
-+first section aligment is <align>.
-+To retreive alignment, use `objdump -h <object file path name>'.
-+end
-+
-+define mod-add-symbols
-+    mod-add-symbols-align $arg0 $arg1 sizeof(long)
-+end
-+document mod-add-symbols
-+mod-add-symbols <module-address> <object file path name>
-+Load the symbols table of the module from the object file.
-+Default alignment is 4.  See mod-add-symbols-align.
-+end
-+
-+define mod-add-lis
-+    mod-add-symbols-align $arg0 /usr/src/LiS/streams.o 16
-+end
-+document mod-add-lis
-+mod-add-lis <module-address>
-+Does mod-add-symbols <module-address> /usr/src/LiS/streams.o
-+end
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/kgdb.txt        2003-07-19 17:04:05.000000000 -0700
-@@ -0,0 +1,716 @@
-+Last edit: <20030506.1615.42>
-+This file has information specific to the i386 kgdb option.  Other
-+platforms with the kgdb option may behave in a similar fashion.
-+
-+New features: 
-+============
-+20030505.1827.27
-+We are starting to align with the sourceforge version, at least in 
-+commands.  To this end, the boot command string to start kgdb at
-+boot time has been changed from "kgdb" to "gdb".
-+
-+Andrew Morton sent a couple of patches which are now included as follows:
-+1.) We now return a flag to the interrupt handler.
-+2.) We no longer use smp_num_cpus (a conflict with the lock meter).
-+3.) And from William Lee Irwin III <wli@holomorphy.com> code to make
-+    sure high-mem is set up before we attempt to register our interrupt
-+    handler.
-+We now include asm/kgdb.h from config.h so you will most likely never
-+have to include it.  It also 'NULLS' the kgdb macros you might have in
-+your code when CONFIG_KGDB is not defined.  This allows you to just
-+turn off CONFIG_KGDB to turn off all the kgdb_ts() calls and such.
-+This include is conditioned on the machine being an x86 so as to not
-+mess with other archs.
-+
-+20020801.1129.03
-+This is currently the version for the 2.4.18 (and beyond?) kernel.
-+
-+We have several new "features" beginning with this version:
-+ 
-+1.) Kgdb now syncs the "other" CPUs with a cross-CPU NMI.  No more
-+    waiting and it will pull that guy out of an IRQ off spin lock :)
-+
-+2.) We doctored up the code that tells where a task is waiting and
-+    included it so that the "info thread" command will show a bit more
-+    than "schedule()".  Try it...
-+
-+3.) Added the ability to call a function from gdb.  All the standard gdb
-+    issues apply, i.e. if you hit a breakpoint in the function, you are
-+    not allowed to call another (gdb limitation, not kgdb).  To help
-+    this capability we added a memory allocation function.  Gdb does not
-+    return this memory (it is used for strings that you pass to that function
-+    you are calling from gdb) so we fixed up a way to allow you to
-+    manually return the memory (see below).
-+
-+4.) Kgdb time stamps (kgdb_ts()) are enhanced to expand what was the
-+    interrupt flag to now also include the preemption count and the
-+    "in_interrupt" info.  The flag is now called "with_pif" to indicate
-+    the order, preempt_count, in_interrupt, flag.  The preempt_count is
-+    shifted left by 4 bits so you can read the count in hex by dropping
-+    the low order digit.  In_interrupt is in bit 1, and the flag is in
-+    bit 0.
-+
-+5.) The command: "p kgdb_info" is now expanded and prints something
-+    like:
-+(gdb) p kgdb_info
-+$2 = {used_malloc = 0, called_from = 0xc0107506, entry_tsc = 67468627259, 
-+  errcode = 0, vector = 3, print_debug_info = 0, hold_on_sstep = 1, 
-+  cpus_waiting = {{task = 0xc027a000, pid = 32768, hold = 0, 
-+      regs = 0xc027bf84}, {task = 0x0, pid = 0, hold = 0, regs = 0x0}}}
-+    
-+    Things to note here: a.) used_malloc is the amount of memory that
-+    has been malloc'ed to do calls from gdb.  You can reclaim this
-+    memory like this: "p kgdb_info.used_malloc=0" Cool, huh?  b.)
-+    cpus_waiting is now "sized" by the number of CPUs you enter at
-+    configure time in the kgdb configure section.  This is NOT used
-+    anywhere else in the system, but it is "nice" here.  c.)  The task's
-+    "pid" is now in the structure.  This is the pid you will need to use
-+    to decode to the thread id to get gdb to look at that thread.
-+    Remember that the "info thread" command prints a list of threads
-+    wherein it numbers each thread with its reference number followed
-+    by the thread's pid.  Note that the per-CPU idle threads actually
-+    have pids of 0 (yes, there is more than one pid 0 in an SMP system).
-+    To avoid confusion, kgdb numbers these threads with numbers beyond
-+    the MAX_PID.  That is why you see 32768 and above.
-+
-+6.) A subtle change, we now provide the complete register set for tasks
-+    that are active on the other CPUs.  This allows better trace back on
-+    those tasks.
-+
-+    And, let's mention what we could not fix.  Back-trace from all but the
-+    thread that we trapped will, most likely, have a bogus entry in it.
-+    The problem is that gdb does not recognize the entry code for
-+    functions that use "current" near (at all?) the entry.  The compiler
-+    is putting the "current" decode as the first two instructions of the
-+    function where gdb expects to find %ebp changing code.  Back trace
-+    also has trouble with interrupt frames.  I am talking with Daniel
-+    Jacobowitz about some way to fix this, but don't hold your breath.
-+
-+20011220.0050.35
-+Major enhancement with this version is the ability to hold one or more
-+CPUs in an SMP system while allowing the others to continue.  Also, by
-+default only the current CPU is enabled on single-step commands (please
-+note that gdb issues single-step commands at times other than when you
-+use the si command).
-+ 
-+Another change is to collect some useful information in
-+a global structure called "kgdb_info".  You should be able to just:
-+
-+p kgdb_info
-+
-+although I have seen cases where the first time this is done gdb just
-+prints the first member but prints the whole structure if you then enter
-+CR (carriage return or enter).  This also works:
-+
-+p *&kgdb_info
-+
-+Here is a sample:
-+(gdb) p kgdb_info
-+$4 = {called_from = 0xc010732c, entry_tsc = 32804123790856, errcode = 0, 
-+  vector = 3, print_debug_info = 0}
-+
-+"Called_from" is the return address from the current entry into kgdb.  
-+Sometimes it is useful to know why you are in kgdb, for example, was 
-+it an NMI or a real breakpoint?  The simple way to interrogate this
-+return address is:
-+
-+l *0xc010732c
-+
-+which will print the surrounding few lines of source code.
-+
-+"Entry_tsc" is the CPU TSC on entry to kgdb (useful to compare to the
-+kgdb_ts entries).
-+
-+"errcode" and "vector" are other entry parameters which may be helpful on
-+some traps.
-+
-+"print_debug_info" is the internal debugging kgdb print enable flag.  Yes,
-+you can modify it.
-+
-+In SMP systems kgdb_info also includes the "cpus_waiting" structure and
-+"hold_on_step": 
-+
-+(gdb) p kgdb_info
-+$7 = {called_from = 0xc0112739, entry_tsc = 1034936624074, errcode = 0, 
-+  vector = 2, print_debug_info = 0, hold_on_sstep = 1, cpus_waiting = {{
-+      task = 0x0, hold = 0, regs = 0x0}, {task = 0xc71b8000, hold = 0, 
-+      regs = 0xc71b9f70}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0, 
-+      hold = 0, regs = 0x0}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0, 
-+      hold = 0, regs = 0x0}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0, 
-+      hold = 0, regs = 0x0}}}
-+
-+"Cpus_waiting" has an entry for each CPU other than the current one that
-+has been stopped.  Each entry contains the task_struct address for that
-+CPU, the address of the regs for that task and a hold flag.  All these
-+have the proper typing so that, for example:
-+
-+p *kgdb_info.cpus_waiting[1].regs
-+
-+will print the registers for CPU 1.
-+
-+"Hold_on_sstep" is a new feature with this version and comes up set or
-+true.  What this means is that whenever kgdb is asked to single-step all
-+other CPUs are held (i.e. not allowed to execute).  The flag applies to
-+all but the current CPU and, again, can be changed:
-+
-+p kgdb_info.hold_on_sstep=0
-+
-+restores the old behavior of letting all CPUs run during single-stepping.
-+
-+Likewise, each CPU has a "hold" flag, which if set, locks that CPU out
-+of execution.  Note that this has some risk in cases where the CPUs need
-+to communicate with each other.  If kgdb finds no CPU available on exit,
-+it will push a message thru gdb and stay in kgdb.  Note that it is legal
-+to hold the current CPU as long as at least one CPU can execute.
-+
-+20010621.1117.09
-+This version implements an event queue.  Events are signaled by calling
-+a function in the kgdb stub and may be examined from gdb.  See EVENTS 
-+below for details.  This version also tightens up the interrupt and SMP
-+handling to not allow interrupts on the way to kgdb from a breakpoint 
-+trap.  It is fine to allow these interrupts for user code, but not
-+system debugging.
-+
-+Version
-+=======
-+
-+This version of the kgdb package was developed and tested on
-+kernel version 2.4.16.  It will not install on any earlier kernels.  
-+It is possible that it will continue to work on later versions
-+of 2.4 and then versions of 2.5 (I hope).
-+
-+
-+Debugging Setup
-+===============
-+
-+Designate one machine as the "development" machine.  This is the
-+machine on which you run your compiles and which has your source
-+code for the kernel.  Designate a second machine as the "target"
-+machine.  This is the machine that will run your experimental
-+kernel.
-+
-+The two machines will be connected together via a serial line out
-+one or the other of the COM ports of the PC.  You will need the
-+appropriate modem eliminator (null modem) cable(s) for this.
-+
-+Decide on which tty port you want the machines to communicate, then
-+connect them up back-to-back using the null modem cable.  COM1 is
-+/dev/ttyS0 and COM2 is /dev/ttyS1. You should test this connection
-+with the two machines prior to trying to debug a kernel.  Once you
-+have it working, on the TARGET machine, enter:
-+
-+setserial /dev/ttyS0 (or what ever tty you are using)
-+
-+and record the port address and the IRQ number.
-+
-+On the DEVELOPMENT machine you need to apply the patch for the kgdb
-+hooks.  You have probably already done that if you are reading this
-+file.
-+
-+On your DEVELOPMENT machine, go to your kernel source directory and do
-+"make Xconfig" where X is one of "x", "menu", or "".  If you are
-+configuring in the standard serial driver, it must not be a module.
-+Either yes or no is ok, but making the serial driver a module means it
-+will initialize after kgdb has set up the UART interrupt code and may
-+cause a failure of the control-C option discussed below.  The configure
-+question for the serial driver is under the "Character devices" heading
-+and is:
-+
-+"Standard/generic (8250/16550 and compatible UARTs) serial support"
-+
-+Go down to the kernel debugging menu item and open it up.  Enable the
-+kernel kgdb stub code by selecting that item.  You can also choose to
-+turn on the "-ggdb -O1" compile options.  The -ggdb causes the compiler
-+to put more debug info (like local symbols) in the object file.  On the
-+i386 -g and -ggdb are the same so this option just reduces to "O1".  The
-+-O1 reduces the optimization level.  This may be helpful in some cases,
-+be aware, however, that this may also mask the problem you are looking
-+for.
-+
-+The baud rate.  Default is 115200.  What ever you choose be sure that
-+the host machine is set to the same speed.  I recommend the default.
-+
-+The port.  This is the I/O address of the serial UART that you should
-+have gotten using setserial as described above.  The standard COM1 port
-+(3f8) using IRQ 4 is default.  COM2 is 2f8 which by convention uses IRQ
-+3.
-+
-+The port IRQ (see above).
-+
-+Stack overflow test.  This option makes a minor change in the trap,
-+system call and interrupt code to detect stack overflow and transfer
-+control to kgdb if it happens.  (Some platforms have this in the
-+baseline code, but the i386 does not.)
-+
-+You can also configure the system to recognize the boot option
-+"console=kgdb" which if given will cause all console output during
-+booting to be put thru gdb as well as other consoles.  This option
-+requires that gdb and kgdb be connected prior to sending console output
-+so, if they are not, a breakpoint is executed to force the connection.
-+This will happen before any kernel output (it is going thru gdb, right),
-+and will stall the boot until the connection is made.
-+
-+You can also configure in a patch to SysRq to enable the kGdb SysRq.
-+This request generates a breakpoint.  Since the serial port IRQ line is
-+set up after any serial drivers, it is possible that this command will
-+work when the control-C will not.
-+
-+Save and exit the Xconfig program.  Then do "make clean" , "make dep"
-+and "make bzImage" (or whatever target you want to make).  This gets the
-+kernel compiled with the "-g" option set -- necessary for debugging.
-+
-+You have just built the kernel on your DEVELOPMENT machine that you
-+intend to run on your TARGET machine.
-+
-+To install this new kernel, use the following installation procedure.
-+Remember, you are on the DEVELOPMENT machine patching the kernel source
-+for the kernel that you intend to run on the TARGET machine.
-+
-+Copy this kernel to your target machine using your usual procedures.  I
-+usually arrange to copy development:
-+/usr/src/linux/arch/i386/boot/bzImage to /vmlinuz on the TARGET machine
-+via a LAN based NFS access.  That is, I run the cp command on the target
-+and copy from the development machine via the LAN.  Run Lilo (see "man
-+lilo" for details on how to set this up) on the new kernel on the target
-+machine so that it will boot!  Then boot the kernel on the target
-+machine.
-+
-+On the DEVELOPMENT machine, create a file called .gdbinit in the
-+directory /usr/src/linux.  An example .gdbinit file looks like this:
-+
-+shell echo -e "\003" >/dev/ttyS0
-+set remotebaud 38400 (or what ever speed you have chosen)
-+target remote /dev/ttyS0
-+
-+
-+Change the "echo" and "target" definition so that it specifies the tty
-+port that you intend to use.  Change the "remotebaud" definition to
-+match the data rate that you are going to use for the com line.
-+
-+You are now ready to try it out.
-+
-+Boot your target machine with "kgdb" in the boot command i.e. something
-+like:
-+
-+lilo> test kgdb
-+
-+or if you also want console output thru gdb:
-+
-+lilo> test kgdb console=kgdb
-+
-+You should see the lilo message saying it has loaded the kernel and then
-+all output stops.  The kgdb stub is trying to connect with gdb.  Start
-+gdb something like this:
-+
-+
-+On your DEVELOPMENT machine, cd /usr/src/linux and enter "gdb vmlinux".
-+When gdb gets the symbols loaded it will read your .gdbinit file and, if
-+everything is working correctly, you should see gdb print out a few
-+lines indicating that a breakpoint has been taken.  It will actually
-+show a line of code in the target kernel inside the kgdb activation
-+code.
-+
-+The gdb interaction should look something like this:
-+
-+    linux-dev:/usr/src/linux# gdb vmlinux
-+    GDB is free software and you are welcome to distribute copies of it
-+     under certain conditions; type "show copying" to see the conditions.
-+    There is absolutely no warranty for GDB; type "show warranty" for details.
-+    GDB 4.15.1 (i486-slackware-linux), 
-+    Copyright 1995 Free Software Foundation, Inc...
-+    breakpoint () at i386-stub.c:750
-+    750     }
-+    (gdb) 
-+
-+You can now use whatever gdb commands you like to set breakpoints.
-+Enter "continue" to start your target machine executing again.  At this
-+point the target system will run at full speed until it encounters
-+your breakpoint or gets a segment violation in the kernel, or whatever.
-+
-+If you have the kgdb console enabled when you continue, gdb will print
-+out all the console messages.
-+
-+The above example caused a breakpoint relatively early in the boot
-+process.  For the i386 kgdb it is possible to code a break instruction
-+as the first C-language point in init/main.c, i.e. as the first instruction
-+in start_kernel().  This could be done as follows:
-+
-+#include <asm/kgdb.h>
-+       breakpoint();
-+
-+This breakpoint() is really a function that sets up the breakpoint and
-+single-step hardware trap cells and then executes a breakpoint.  Any
-+early hard coded breakpoint will need to use this function.  Once the
-+trap cells are set up they need not be set again, but doing it again
-+does not hurt anything, so you don't need to be concerned about which
-+breakpoint is hit first.  Once the trap cells are set up (and the kernel
-+sets them up in due course even if breakpoint() is never called) the
-+macro:
-+
-+BREAKPOINT;
-+
-+will generate an inline breakpoint.  This may be more useful as it stops
-+the processor at the instruction instead of in a function a step removed
-+from the location of interest.  In either case <asm/kgdb.h> must be
-+included to define both breakpoint() and BREAKPOINT.
-+
-+Triggering kgdbstub at other times
-+==================================
-+
-+Often you don't need to enter the debugger until much later in the boot
-+or even after the machine has been running for some time.  Once the
-+kernel is booted and interrupts are on, you can force the system to
-+enter the debugger by sending a control-C to the debug port. This is
-+what the first line of the recommended .gdbinit file does.  This allows
-+you to start gdb any time after the system is up as well as when the
-+system is already at a breakpoint.  (In the case where the system is
-+already at a breakpoint the control-C is not needed, however, it will
-+be ignored by the target so no harm is done.  Also note the the echo
-+command assumes that the port speed is already set.  This will be true
-+once gdb has connected, but it is best to set the port speed before you
-+run gdb.)
-+
-+Another simple way to do this is to put the following file in you ~/bin
-+directory:
-+
-+#!/bin/bash
-+echo  -e "\003"  > /dev/ttyS0 
-+
-+Here, the ttyS0 should be replaced with what ever port you are using.
-+The "\003" is control-C.  Once you are connected with gdb, you can enter
-+control-C at the command prompt.
-+
-+An alternative way to get control to the debugger is to enable the kGdb
-+SysRq command.  Then you would enter Alt-SysRq-g (all three keys at the
-+same time, but push them down in the order given).  To refresh your
-+memory of the available SysRq commands try Alt-SysRq-=.  Actually any
-+undefined command could replace the "=", but I like to KNOW that what I
-+am pushing will never be defined.
-+ 
-+Debugging hints
-+===============
-+
-+You can break into the target machine at any time from the development
-+machine by typing ^C (see above paragraph).  If the target machine has
-+interrupts enabled this will stop it in the kernel and enter the
-+debugger.
-+
-+There is unfortunately no way of breaking into the kernel if it is
-+in a loop with interrupts disabled, so if this happens to you then
-+you need to place exploratory breakpoints or printk's into the kernel
-+to find out where it is looping.  The exploratory breakpoints can be
-+entered either thru gdb or hard coded into the source.  This is very
-+handy if you do something like:
-+
-+if (<it hurts>) BREAKPOINT;
-+
-+
-+There is a copy of an e-mail in the Documentation/i386/kgdb/ directory
-+(debug-nmi.txt) which describes how to create an NMI on an ISA bus
-+machine using a paper clip.  I have a sophisticated version of this made
-+by wiring a push button switch into a PC104/ISA bus adapter card.  The
-+adapter card nicely furnishes wire wrap pins for all the ISA bus
-+signals.
-+
-+When you are done debugging the kernel on the target machine it is a
-+good idea to leave it in a running state.  This makes reboots faster,
-+bypassing the fsck.  So do a gdb "continue" as the last gdb command if
-+this is possible.  To terminate gdb itself on the development machine
-+and leave the target machine running, first clear all breakpoints and
-+continue, then type ^Z to suspend gdb and then kill it with "kill %1" or
-+something similar.
-+
-+If gdbstub Does Not Work
-+========================
-+
-+If it doesn't work, you will have to troubleshoot it.  Do the easy
-+things first like double checking your cabling and data rates.  You
-+might try some non-kernel based programs to see if the back-to-back
-+connection works properly.  Just something simple like cat /etc/hosts
-+>/dev/ttyS0 on one machine and cat /dev/ttyS0 on the other will tell you
-+if you can send data from one machine to the other.  Make sure it works
-+in both directions.  There is no point in tearing out your hair in the
-+kernel if the line doesn't work.
-+
-+All of the real action takes place in the file
-+/usr/src/linux/arch/i386/kernel/kgdb_stub.c.  That is the code on the target
-+machine that interacts with gdb on the development machine.  In gdb you can
-+turn on a debug switch with the following command:
-+
-+      set remotedebug
-+
-+This will print out the protocol messages that gdb is exchanging with
-+the target machine.
-+
-+Another place to look is /usr/src/arch/i386/lib/kgdb_serial.c. This is
-+the code that talks to the serial port on the target side.  There might
-+be a problem there.  In particular there is a section of this code that
-+tests the UART which will tell you what UART you have if you define
-+"PRNT" (just remove "_off" from the #define PRNT_off).  To view this
-+report you will need to boot the system without any beakpoints.  This
-+allows the kernel to run to the point where it calls kgdb to set up
-+interrupts.  At this time kgdb will test the UART and print out the type
-+it finds.  (You need to wait so that the printks are actually being
-+printed.  Early in the boot they are cached, waiting for the console to
-+be enabled.  Also, if kgdb is entered thru a breakpoint it is possible
-+to cause a dead lock by calling printk when the console is locked.  The
-+stub thus avoids doing printks from breakpoints, especially in the
-+serial code.)  At this time, if the UART fails to do the expected thing,
-+kgdb will print out (using printk) information on what failed.  (These
-+messages will be buried in all the other boot up messages.  Look for
-+lines that start with "gdb_hook_interrupt:".  You may want to use dmesg
-+once the system is up to view the log.  If this fails or if you still
-+don't connect, review your answers for the port address.  Use:
-+
-+setserial /dev/ttyS0 
-+
-+to get the current port and IRQ information.  This command will also
-+tell you what the system found for the UART type. The stub recognizes
-+the following UART types:
-+
-+16450, 16550, and 16550A
-+
-+If you are really desperate you can use printk debugging in the
-+kgdbstub code in the target kernel until you get it working.  In particular,
-+there is a global variable in /usr/src/linux/arch/i386/kernel/kgdb_stub.c
-+named "remote_debug".  Compile your kernel with this set to 1, rather
-+than 0 and the debug stub will print out lots of stuff as it does
-+what it does.  Likewise there are debug printks in the kgdb_serial.c
-+code that can be turned on with simple changes in the macro defines.
-+
-+
-+Debugging Loadable Modules
-+==========================
-+
-+This technique comes courtesy of Edouard Parmelan
-+<Edouard.Parmelan@quadratec.fr>
-+
-+When you run gdb, enter the command
-+
-+source gdbinit-modules
-+
-+This will read in a file of gdb macros that was installed in your
-+kernel source directory when kgdb was installed.  This file implements
-+the following commands:
-+
-+mod-list
-+    Lists the loaded modules in the form <module-address> <module-name>
-+
-+mod-print-symbols <module-address>
-+    Prints all the symbols in the indicated module.
-+
-+mod-add-symbols <module-address> <object-file-path-name>
-+    Loads the symbols from the object file and associates them
-+    with the indicated module.
-+
-+After you have loaded the module that you want to debug, use the command
-+mod-list to find the <module-address> of your module.  Then use that
-+address in the mod-add-symbols command to load your module's symbols.
-+From that point onward you can debug your module as if it were a part
-+of the kernel.
-+
-+The file gdbinit-modules also contains a command named mod-add-lis as
-+an example of how to construct a command of your own to load your
-+favorite module.  The idea is to "can" the pathname of the module
-+in the command so you don't have to type so much.
-+
-+Threads
-+=======
-+
-+Each process in a target machine is seen as a gdb thread. gdb thread
-+related commands (info threads, thread n) can be used.
-+
-+ia-32 hardware breakpoints
-+==========================
-+
-+kgdb stub contains support for hardware breakpoints using debugging features
-+of ia-32(x86) processors. These breakpoints do not need code modification.
-+They use debugging registers. 4 hardware breakpoints are available in ia-32
-+processors.
-+
-+Each hardware breakpoint can be of one of the following three types.
-+
-+1. Execution breakpoint - An Execution breakpoint is triggered when code
-+      at the breakpoint address is executed.
-+
-+      As limited number of hardware breakpoints are available, it is
-+      advisable to use software breakpoints ( break command ) instead
-+      of execution hardware breakpoints, unless modification of code
-+      is to be avoided.
-+
-+2. Write breakpoint - A write breakpoint is triggered when memory
-+      location at the breakpoint address is written.
-+
-+      A write or can be placed for data of variable length. Length of
-+      a write breakpoint indicates length of the datatype to be
-+      watched. Length is 1 for 1 byte data , 2 for 2 byte data, 3 for
-+      4 byte data.
-+
-+3. Access breakpoint - An access breakpoint is triggered when memory
-+      location at the breakpoint address is either read or written.
-+
-+      Access breakpoints also have lengths similar to write breakpoints.
-+
-+IO breakpoints in ia-32 are not supported.
-+
-+Since gdb stub at present does not use the protocol used by gdb for hardware
-+breakpoints, hardware breakpoints are accessed through gdb macros. gdb macros
-+for hardware breakpoints are described below.
-+
-+hwebrk        - Places an execution breakpoint
-+      hwebrk breakpointno address
-+hwwbrk        - Places a write breakpoint
-+      hwwbrk breakpointno length address
-+hwabrk        - Places an access breakpoint
-+      hwabrk breakpointno length address
-+hwrmbrk       - Removes a breakpoint
-+      hwrmbrk breakpointno
-+exinfo        - Tells whether a software or hardware breakpoint has occurred.
-+      Prints number of the hardware breakpoint if a hardware breakpoint has
-+      occurred.
-+
-+Arguments required by these commands are as follows
-+breakpointno  - 0 to 3
-+length                - 1 to 3
-+address               - Memory location in hex digits ( without 0x ) e.g c015e9bc
-+
-+SMP support
-+==========
-+
-+When a breakpoint occurs or user issues a break ( Ctrl + C ) to gdb
-+client, all the processors are forced to enter the debugger. Current
-+thread corresponds to the thread running on the processor where
-+breakpoint occurred.  Threads running on other processor(s) appear
-+similar to other non-running threads in the 'info threads' output.
-+Within the kgdb stub there is a structure "waiting_cpus" in which kgdb
-+records the values of "current" and "regs" for each CPU other than the
-+one that hit the breakpoint.  "current" is a pointer to the task
-+structure for the task that CPU is running, while "regs" points to the
-+saved registers for the task.  This structure can be examined with the
-+gdb "p" command.
-+
-+ia-32 hardware debugging registers on all processors are set to same
-+values.  Hence any hardware breakpoints may occur on any processor.
-+
-+gdb troubleshooting
-+===================
-+
-+1. gdb hangs
-+Kill it. restart gdb. Connect to target machine.
-+
-+2. gdb cannot connect to target machine (after killing a gdb and
-+restarting another) If the target machine was not inside debugger when
-+you killed gdb, gdb cannot connect because the target machine won't
-+respond.  In this case echo "Ctrl+C"(ASCII 3) to the serial line.
-+e.g. echo -e "\003" > /dev/ttyS1
-+This forces that target machine into the debugger, after which you
-+can connect.
-+
-+3. gdb cannot connect even after echoing Ctrl+C into serial line
-+Try changing serial line settings min to 1 and time to 0
-+e.g. stty min 1 time 0 < /dev/ttyS1
-+Try echoing again
-+
-+Check serial line speed and set it to correct value if required
-+e.g. stty ispeed 115200 ospeed 115200 < /dev/ttyS1
-+
-+EVENTS
-+======
-+
-+Ever want to know the order of things happening?  Which CPU did what and
-+when?  How did the spinlock get the way it is?  Then events are for
-+you.  Events are defined by calls to an event collection interface and
-+saved for later examination.  In this case, kgdb events are saved by a
-+very fast bit of code in kgdb which is fully SMP and interrupt protected
-+and they are examined by using gdb to display them.  Kgdb keeps only
-+the last N events, where N must be a power of two and is defined at
-+configure time.
-+
-+
-+Events are signaled to kgdb by calling:
-+
-+kgdb_ts(data0,data1)
-+
-+For each call kgdb records each call in an array along with other info.
-+Here is the array definition:
-+
-+struct kgdb_and_then_struct {
-+#ifdef CONFIG_SMP
-+      int     on_cpu;
-+#endif
-+      long long at_time;
-+      int     from_ln;
-+      char    * in_src;
-+      void    *from;
-+        int     with_if;
-+      int     data0;
-+      int     data1;
-+};
-+
-+For SMP machines the CPU is recorded, for all machines the TSC is
-+recorded (gets a time stamp) as well as the line number and source file
-+the call was made from.  The address of the (from), the "if" (interrupt
-+flag) and the two data items are also recorded.  The macro kgdb_ts casts
-+the types to int, so you can put any 32-bit values here.  There is a
-+configure option to select the number of events you want to keep.  A
-+nice number might be 128, but you can keep up to 1024 if you want.  The
-+number must be a power of two.  An "andthen" macro library is provided
-+for gdb to help you look at these events.  It is also possible to define
-+a different structure for the event storage and cast the data to this
-+structure.  For example the following structure is defined in kgdb:
-+
-+struct kgdb_and_then_struct2 {
-+#ifdef CONFIG_SMP
-+      int     on_cpu;
-+#endif
-+      long long at_time;
-+      int     from_ln;
-+      char    * in_src;
-+      void    *from;
-+        int     with_if;
-+      struct task_struct *t1;
-+      struct task_struct *t2;
-+};
-+
-+If you use this for display, the data elements will be displayed as
-+pointers to task_struct entries.  You may want to define your own
-+structure to use in casting.  You should only change the last two items
-+and you must keep the structure size the same.  Kgdb will handle these
-+as 32-bit ints, but within that constraint you can define a structure to
-+cast to any 32-bit quantity.  This need only be available to gdb and is
-+only used for casting in the display code.
-+
-+Final Items
-+===========
-+
-+I picked up this code from Amit S. Kale and enhanced it.
-+
-+If you make some really cool modification to this stuff, or if you 
-+fix a bug, please let me know.
-+
-+George Anzinger
-+<george@mvista.com>
-+
-+Amit S. Kale
-+<akale@veritas.com>
-+
-+(First kgdb by David Grothe <dave@gcom.com>)
-+
-+(modified by Tigran Aivazian <tigran@sco.com>)
-+    Putting gdbstub into the kernel config menu.
-+
-+(modified by Scott Foehner <sfoehner@engr.sgi.com>)
-+    Hooks for entering gdbstub at boot time.
-+
-+(modified by Amit S. Kale <akale@veritas.com>)
-+    Threads, ia-32 hw debugging, mp support, console support,
-+    nmi watchdog handling.
-+
-+(modified by George Anzinger <george@mvista.com>)
-+    Extended threads to include the idle threads.
-+    Enhancements to allow breakpoint() at first C code.
-+    Use of module_init() and __setup() to automate the configure.
-+    Enhanced the cpu "collection" code to work in early bring-up.
-+    Added ability to call functions from gdb
-+    Print info thread stuff without going back to schedule()
-+    Now collect the "other" cpus with an IPI/ NMI.
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/Documentation/i386/kgdb/loadmodule.sh   2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,78 @@
-+#/bin/sh
-+# This script loads a module on a target machine and generates a gdb script.
-+# source generated gdb script to load the module file at appropriate addresses
-+# in gdb.
-+#
-+# Usage: 
-+# Loading the module on target machine and generating gdb script)
-+#     [foo]$ loadmodule.sh <modulename>
-+#
-+# Loading the module file into gdb
-+#     (gdb) source <gdbscriptpath>
-+#
-+# Modify following variables according to your setup. 
-+#     TESTMACHINE - Name of the target machine
-+#     GDBSCRIPTS - The directory where a gdb script will be generated
-+#
-+# Author: Amit S. Kale (akale@veritas.com).
-+#
-+# If you run into problems, please check files pointed to by following
-+# variables.
-+#     ERRFILE - /tmp/<modulename>.errs contains stderr output of insmod
-+#     MAPFILE - /tmp/<modulename>.map contains stdout output of insmod
-+#     GDBSCRIPT - $GDBSCRIPTS/load<modulename> gdb script.
-+
-+TESTMACHINE=foo
-+GDBSCRIPTS=/home/bar
-+
-+if [ $# -lt 1 ] ; then {
-+      echo Usage: $0 modulefile
-+      exit
-+} ; fi
-+
-+MODULEFILE=$1
-+MODULEFILEBASENAME=`basename $1`
-+
-+if [ $MODULEFILE = $MODULEFILEBASENAME ] ; then {
-+      MODULEFILE=`pwd`/$MODULEFILE
-+} fi
-+
-+ERRFILE=/tmp/$MODULEFILEBASENAME.errs
-+MAPFILE=/tmp/$MODULEFILEBASENAME.map
-+GDBSCRIPT=$GDBSCRIPTS/load$MODULEFILEBASENAME
-+
-+function findaddr() {
-+      local ADDR=0x$(echo "$SEGMENTS" | \
-+              grep "$1" | sed 's/^[^ ]*[ ]*[^ ]*[ ]*//' | \
-+              sed 's/[ ]*[^ ]*$//')
-+      echo $ADDR
-+}
-+
-+function checkerrs() {
-+      if [ "`cat $ERRFILE`" != "" ] ; then {
-+              cat $ERRFILE
-+              exit
-+      } fi
-+}
-+
-+#load the module
-+echo Copying $MODULEFILE to $TESTMACHINE
-+rcp $MODULEFILE root@${TESTMACHINE}:
-+
-+echo Loading module $MODULEFILE
-+rsh -l root $TESTMACHINE  /sbin/insmod -m ./`basename $MODULEFILE` \
-+      > $MAPFILE 2> $ERRFILE
-+checkerrs
-+
-+SEGMENTS=`head -n 11 $MAPFILE | tail -n 10`
-+TEXTADDR=$(findaddr "\\.text[^.]")
-+LOADSTRING="add-symbol-file $MODULEFILE $TEXTADDR"
-+SEGADDRS=`echo "$SEGMENTS" | awk '//{
-+      if ($1 != ".text" && $1 != ".this" &&
-+          $1 != ".kstrtab" && $1 != ".kmodtab") {
-+              print " -s " $1 " 0x" $3 " "
-+      }
-+}'`
-+LOADSTRING="$LOADSTRING $SEGADDRS"
-+echo Generating script $GDBSCRIPT
-+echo $LOADSTRING > $GDBSCRIPT
---- linux-2.6.0-test1/Documentation/magic-number.txt   2003-06-14 12:18:23.000000000 -0700
-+++ 25/Documentation/magic-number.txt  2003-07-19 17:03:49.000000000 -0700
-@@ -51,6 +51,13 @@ kernel before 2.6.x yet.
-                                       <pasky@ucw.cz>
-                                       03 Nov 2002
-+Updated the magic table to Linux 2.5.74.
-+
-+                                      Fabian Frederick
-+                                      <ffrederick@users.sourceforge.net>
-+                                      09 Jul 2003
-+
-+
- Magic Name            Number      Structure            File
- ===========================================================================
- PG_MAGIC              'P'         pg_{read,write}_hdr include/linux/pg.h
-@@ -62,10 +69,12 @@ AURORA_MAGIC          0x0A18      Aurora
- HDLC_MAGIC            0x239e      n_hdlc            drivers/char/n_hdlc.c
- APM_BIOS_MAGIC        0x4101      apm_user          arch/i386/kernel/apm.c
- CYCLADES_MAGIC        0x4359      cyclades_port     include/linux/cyclades.h
-+DB_MAGIC              0x4442      fc_info           drivers/net/iph5526_novram.c
-+DL_MAGIC              0x444d      fc_info           drivers/net/iph5526_novram.c
- FASYNC_MAGIC          0x4601      fasync_struct     include/linux/fs.h
-+FF_MAGIC              0x4646      fc_info           drivers/net/iph5526_novram.c
- ISICOM_MAGIC          0x4d54      isi_port          include/linux/isicom.h
--PTY_MAGIC             0x5001      (none at the moment)
--                                                    drivers/char/pty.c
-+PTY_MAGIC             0x5001                        drivers/char/pty.c
- PPP_MAGIC             0x5002      ppp               include/linux/if_pppvar.h
- SERIAL_MAGIC          0x5301      async_struct      include/linux/serial.h
- SSTATE_MAGIC          0x5302      serial_state      include/linux/serial.h
-@@ -81,9 +90,9 @@ TTY_DRIVER_MAGIC      0x5402      tty_dr
- MGSLPC_MAGIC          0x5402      mgslpc_info       drivers/char/pcmcia/synclink_cs.c
- TTY_LDISC_MAGIC       0x5403      tty_ldisc         include/linux/tty_ldisc.h
- USB_SERIAL_MAGIC      0x6702      usb_serial        drivers/usb/serial/usb-serial.h
-+FULL_DUPLEX_MAGIC     0x6969                        drivers/net/tulip/de2104x.c
- USB_BLUETOOTH_MAGIC   0x6d02      usb_bluetooth     drivers/usb/class/bluetty.c
--RFCOMM_TTY_MAGIC      0x6d02      (note at the moment)
--                                                    net/bluetooth/rfcomm/tty.c
-+RFCOMM_TTY_MAGIC      0x6d02                        net/bluetooth/rfcomm/tty.c
- USB_SERIAL_PORT_MAGIC 0x7301      usb_serial_port   drivers/usb/serial/usb-serial.h
- CG_MAGIC              0x00090255  ufs_cylinder_group include/linux/ufs_fs.h
- A2232_MAGIC           0x000a2232  gs_port           drivers/char/ser_a2232.h
-@@ -91,6 +100,7 @@ SOLARIS_SOCKET_MAGIC  0x000ADDED  sol_so
- RPORT_MAGIC           0x00525001  r_port            drivers/char/rocket_int.h
- LSEMAGIC              0x05091998  lse               drivers/fc4/fc.c
- GDTIOCTL_MAGIC        0x06030f07  gdth_iowr_str     drivers/scsi/gdth_ioctl.h
-+RIEBL_MAGIC           0x09051990                    drivers/net/atarilance.c
- RIO_MAGIC             0x12345678  gs_port           drivers/char/rio/rio_linux.c
- SX_MAGIC              0x12345678  gs_port           drivers/char/sx.h
- NBD_REQUEST_MAGIC     0x12560953  nbd_request       include/linux/nbd.h
-@@ -120,6 +130,7 @@ SAVEKMSG_MAGIC1       0x53415645  savekm
- GDA_MAGIC             0x58464552  gda               include/asm-mips64/sn/gda.h
- RED_MAGIC1            0x5a2cf071  (any)             mm/slab.c
- STL_PORTMAGIC         0x5a7182c9  stlport           include/linux/stallion.h
-+EEPROM_MAGIC_VALUE    0X5ab478d2  lanai_dev         drivers/atm/lanai.c
- HDLCDRV_MAGIC         0x5ac6e778  hdlcdrv_state     include/linux/hdlcdrv.h
- EPCA_MAGIC            0x5c6df104  channel           include/linux/epca.h
- PCXX_MAGIC            0x5c6df104  channel           drivers/char/pcxx.h
-@@ -127,9 +138,11 @@ KV_MAGIC              0x5f4b565f  kernel
- I810_STATE_MAGIC      0x63657373  i810_state        sound/oss/i810_audio.c
- TRIDENT_STATE_MAGIC   0x63657373  trient_state      sound/oss/trident.c
- M3_CARD_MAGIC         0x646e6f50  m3_card           sound/oss/maestro3.c
-+FW_HEADER_MAGIC       0x65726F66  fw_header         drivers/atm/fore200e.h
- SLOT_MAGIC            0x67267321  slot              drivers/hotplug/cpqphp.h
- SLOT_MAGIC            0x67267322  slot              drivers/hotplug/acpiphp.h
- LO_MAGIC              0x68797548  nbd_device        include/linux/nbd.h
-+OPROFILE_MAGIC        0x6f70726f  super_block       drivers/oprofile/oprofilefs.h
- M3_STATE_MAGIC        0x734d724d  m3_state          sound/oss/maestro3.c
- STL_PANELMAGIC        0x7ef621a1  stlpanel          include/linux/stallion.h
- VMALLOC_MAGIC         0x87654320  snd_alloc_track   sound/core/memory.c
-@@ -137,11 +150,15 @@ KMALLOC_MAGIC         0x87654321  snd_al
- PWC_MAGIC             0x89DC10AB  pwc_device        drivers/usb/media/pwc.h
- NBD_REPLY_MAGIC       0x96744668  nbd_reply         include/linux/nbd.h
- STL_BOARDMAGIC        0xa2267f52  stlbrd            include/linux/stallion.h
-+ENI155_MAGIC          0xa54b872d  midway_eprom            drivers/atm/eni.h
- SCI_MAGIC             0xbabeface  gs_port           drivers/char/sh-sci.h
- CODA_MAGIC            0xC0DAC0DA  coda_file_info    include/linux/coda_fs_i.h
-+DPMEM_MAGIC           0xc0ffee11  gdt_pci_sram      drivers/scsi/gdth.h
- STLI_PORTMAGIC        0xe671c7a1  stliport          include/linux/istallion.h
- YAM_MAGIC             0xF10A7654  yam_port          drivers/net/hamradio/yam.c
- CCB_MAGIC             0xf2691ad2  ccb               drivers/scsi/ncr53c8xx.c
-+QUEUE_MAGIC_FREE      0xf7e1c9a3  queue_entry       drivers/scsi/arm/queue.c
-+QUEUE_MAGIC_USED      0xf7e1cc33  queue_entry       drivers/scsi/arm/queue.c
- HTB_CMAGIC            0xFEFAFEF1  htb_class         net/sched/sch_htb.c
- NMI_MAGIC             0x48414d4d455201 nmi_s        include/asm-mips64/sn/nmi.h
---- linux-2.6.0-test1/Documentation/networking/vortex.txt      2003-06-14 12:18:00.000000000 -0700
-+++ 25/Documentation/networking/vortex.txt     2003-07-19 17:05:08.000000000 -0700
-@@ -216,19 +216,6 @@ watchdog=N
-   to increase this value on LANs which have very high collision rates.
-   The default value is 5000 (5.0 seconds).
--enable_wol=N1,N2,N3,...
--
--  Enable Wake-on-LAN support for the relevant interface.  Donald
--  Becker's `ether-wake' application may be used to wake suspended
--  machines.
--
--  Also enables the NIC's power management support.
--
--global_enable_wol=N
--
--  Sets enable_wol mode for all 3c59x NICs in the machine.  Entries in
--  the `enable_wol' array above will override any setting of this.
--
- Media selection
- ---------------
---- linux-2.6.0-test1/Documentation/pnp.txt    2003-06-14 12:17:58.000000000 -0700
-+++ 25/Documentation/pnp.txt   2003-07-19 17:03:49.000000000 -0700
-@@ -22,7 +22,7 @@ user interface is integrated into driver
- In addition to the standard driverfs file the following are created in each 
- device's directory:
- id - displays a list of support EISA IDs
--possible - displays possible resource configurations
-+options - displays possible resource configurations
- resources - displays currently allocated resources and allows resource changes
- -activating a device
-@@ -60,7 +60,7 @@ DISABLED
- - Notice the string "DISABLED".  THis means the device is not active.
- 3.) check the device's possible configurations (optional)
--# cat possible
-+# cat options
- Dependent: 01 - Priority acceptable
-     port 0x3f0-0x3f0, align 0x7, size 0x6, 16-bit address decoding
-     port 0x3f7-0x3f7, align 0x0, size 0x1, 16-bit address decoding
---- linux-2.6.0-test1/drivers/acorn/block/fd1772.c     2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/acorn/block/fd1772.c    2003-07-19 17:03:49.000000000 -0700
-@@ -152,8 +152,6 @@
- #include <asm/uaccess.h>
--#include <linux/blk.h>
--
- /* Note: FD_MAX_UNITS could be redefined to 2 for the Atari (with
-  * little additional rework in this file). But I'm not yet sure if
-  * some other code depends on the number of floppies... (It is defined
---- linux-2.6.0-test1/drivers/acorn/block/mfmhd.c      2003-06-14 12:18:01.000000000 -0700
-+++ 25/drivers/acorn/block/mfmhd.c     2003-07-19 17:03:49.000000000 -0700
-@@ -111,7 +111,6 @@
- #include <linux/major.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/acpi/executer/exutils.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/acpi/executer/exutils.c 2003-07-19 17:03:49.000000000 -0700
-@@ -290,7 +290,7 @@ acpi_ex_digits_needed (
-        * acpi_integer is unsigned, so we don't worry about a '-'
-        */
-       if ((current_value = value) == 0) {
--          return_VALUE (1);
-+              return_VALUE (1);
-       }
-       num_digits = 0;
---- linux-2.6.0-test1/drivers/acpi/hardware/hwregs.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/acpi/hardware/hwregs.c  2003-07-19 17:03:49.000000000 -0700
-@@ -357,9 +357,9 @@ acpi_set_register (
-       /*
-        * Decode the Register ID
--       * Register id = Register block id | bit id
-+       * Register ID = [Register block ID] | [bit ID]
-        *
--       * Check bit id to fine locate Register offset.
-+       * Check bit ID to fine locate Register offset.
-        * Check Mask to determine Register offset, and then read-write.
-        */
-       switch (bit_reg_info->parent_register) {
-@@ -367,9 +367,9 @@ acpi_set_register (
-               /*
-                * Status Registers are different from the rest.  Clear by
--               * writing 1, writing 0 has no effect.  So, the only relevant
-+               * writing 1, and writing 0 has no effect.  So, the only relevant
-                * information is the single bit we're interested in, all others should
--               * be written as 0 so they will be left unchanged
-+               * be written as 0 so they will be left unchanged.
-                */
-               value = ACPI_REGISTER_PREPARE_BITS (value,
-                                bit_reg_info->bit_position, bit_reg_info->access_bit_mask);
-@@ -394,17 +394,17 @@ acpi_set_register (
-       case ACPI_REGISTER_PM1_CONTROL:
-               /*
--               * Read the PM1 Control register.
-+               * Write the PM1 Control register.
-                * Note that at this level, the fact that there are actually TWO
--               * registers (A and B - and that B may not exist) is abstracted.
-+               * registers (A and B - and B may not exist) is abstracted.
-                */
-               ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", register_value));
-               ACPI_REGISTER_INSERT_VALUE (register_value, bit_reg_info->bit_position,
-                               bit_reg_info->access_bit_mask, value);
--              status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, register_id,
--                              (u16) register_value);
-+              status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-+                                ACPI_REGISTER_PM1_CONTROL, (u16) register_value);
-               break;
-@@ -724,7 +724,7 @@ acpi_hw_low_level_read (
-       /*
-        * Three address spaces supported:
--       * Memory, Io, or PCI config.
-+       * Memory, IO, or PCI_Config.
-        */
-       switch (reg->address_space_id) {
-       case ACPI_ADR_SPACE_SYSTEM_MEMORY:
-@@ -808,9 +808,10 @@ acpi_hw_low_level_write (
-               (!reg->address)) {
-               return (AE_OK);
-       }
-+
-       /*
-        * Three address spaces supported:
--       * Memory, Io, or PCI config.
-+       * Memory, IO, or PCI_Config.
-        */
-       switch (reg->address_space_id) {
-       case ACPI_ADR_SPACE_SYSTEM_MEMORY:
---- linux-2.6.0-test1/drivers/acpi/osl.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/acpi/osl.c      2003-07-19 17:03:49.000000000 -0700
-@@ -35,6 +35,7 @@
- #include <linux/kmod.h>
- #include <linux/delay.h>
- #include <linux/workqueue.h>
-+#include <linux/nmi.h>
- #include <acpi/acpi.h>
- #include <asm/io.h>
- #include <acpi/acpi_bus.h>
-@@ -291,11 +292,14 @@ acpi_os_sleep(u32 sec, u32 ms)
- void
- acpi_os_stall(u32 us)
- {
--      if (us > 10000) {
--              mdelay(us / 1000);
--      }
--      else {
--              udelay(us);
-+      while (us) {
-+              u32 delay = 1000;
-+
-+              if (delay > us)
-+                      delay = us;
-+              udelay(delay);
-+              touch_nmi_watchdog();
-+              us -= delay;
-       }
- }
---- linux-2.6.0-test1/drivers/acpi/processor.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/acpi/processor.c        2003-07-19 17:03:49.000000000 -0700
-@@ -1351,7 +1351,7 @@ static int acpi_processor_throttling_ope
-                                               PDE(inode)->data);
- }
--static int
-+static ssize_t
- acpi_processor_write_throttling (
-         struct file           *file,
-         const char            *buffer,
-@@ -1414,7 +1414,7 @@ static int acpi_processor_limit_open_fs(
-                                               PDE(inode)->data);
- }
--static int
-+static ssize_t
- acpi_processor_write_limit (
-       struct file             *file,
-       const char              *buffer,
---- linux-2.6.0-test1/drivers/acpi/tables.c    2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/acpi/tables.c   2003-07-19 17:03:49.000000000 -0700
-@@ -33,6 +33,7 @@
- #include <linux/irq.h>
- #include <linux/errno.h>
- #include <linux/acpi.h>
-+#include <linux/bootmem.h>
- #define PREFIX                        "ACPI: "
-@@ -61,16 +62,14 @@ static char *acpi_table_signatures[ACPI_
- /* System Description Table (RSDT/XSDT) */
- struct acpi_table_sdt {
--      unsigned long           pa;             /* Physical Address */
--      unsigned long           count;          /* Table count */
--      struct {
--              unsigned long           pa;
--              enum acpi_table_id      id;
--              unsigned long           size;
--      }                       entry[ACPI_MAX_TABLES];
-+      unsigned long           pa;
-+      enum acpi_table_id      id;
-+      unsigned long           size;
- } __attribute__ ((packed));
--static struct acpi_table_sdt  sdt;
-+static unsigned long          sdt_pa;         /* Physical Address */
-+static unsigned long          sdt_count;      /* Table count */
-+static struct acpi_table_sdt  *sdt_entry;
- void
- acpi_table_print (
-@@ -236,11 +235,11 @@ acpi_get_table_header_early (
-       /* Locate the table. */
--      for (i = 0; i < sdt.count; i++) {
--              if (sdt.entry[i].id != temp_id)
-+      for (i = 0; i < sdt_count; i++) {
-+              if (sdt_entry[i].id != temp_id)
-                       continue;
-               *header = (void *)
--                      __acpi_map_table(sdt.entry[i].pa, sdt.entry[i].size);
-+                      __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
-               if (!*header) {
-                       printk(KERN_WARNING PREFIX "Unable to map %s\n",
-                              acpi_table_signatures[temp_id]);
-@@ -289,11 +288,11 @@ acpi_table_parse_madt_family (
-       /* Locate the MADT (if exists). There should only be one. */
--      for (i = 0; i < sdt.count; i++) {
--              if (sdt.entry[i].id != id)
-+      for (i = 0; i < sdt_count; i++) {
-+              if (sdt_entry[i].id != id)
-                       continue;
-               madt = (void *)
--                      __acpi_map_table(sdt.entry[i].pa, sdt.entry[i].size);
-+                      __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
-               if (!madt) {
-                       printk(KERN_WARNING PREFIX "Unable to map %s\n",
-                              acpi_table_signatures[id]);
-@@ -308,7 +307,7 @@ acpi_table_parse_madt_family (
-               return -ENODEV;
-       }
--      madt_end = (unsigned long) madt + sdt.entry[i].size;
-+      madt_end = (unsigned long) madt + sdt_entry[i].size;
-       /* Parse all entries looking for a match. */
-@@ -349,10 +348,10 @@ acpi_table_parse (
-       if (!handler)
-               return -EINVAL;
--      for (i = 0; i < sdt.count; i++) {
--              if (sdt.entry[i].id != id)
-+      for (i = 0; i < sdt_count; i++) {
-+              if (sdt_entry[i].id != id)
-                       continue;
--              handler(sdt.entry[i].pa, sdt.entry[i].size);
-+              handler(sdt_entry[i].pa, sdt_entry[i].size);
-               count++;
-       }
-@@ -377,11 +376,11 @@ acpi_table_get_sdt (
-                       
-               struct acpi_table_xsdt  *mapped_xsdt = NULL;
--              sdt.pa = ((struct acpi20_table_rsdp*)rsdp)->xsdt_address;
-+              sdt_pa = ((struct acpi20_table_rsdp*)rsdp)->xsdt_address;
-               /* map in just the header */
-               header = (struct acpi_table_header *)
--                      __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header));
-+                      __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
-               if (!header) {
-                       printk(KERN_WARNING PREFIX "Unable to map XSDT header\n");
-@@ -390,7 +389,7 @@ acpi_table_get_sdt (
-               /* remap in the entire table before processing */
-               mapped_xsdt = (struct acpi_table_xsdt *)
--                      __acpi_map_table(sdt.pa, header->length);
-+                      __acpi_map_table(sdt_pa, header->length);
-               if (!mapped_xsdt) {
-                       printk(KERN_WARNING PREFIX "Unable to map XSDT\n");
-                       return -ENODEV;
-@@ -407,15 +406,21 @@ acpi_table_get_sdt (
-                       return -ENODEV;
-               }
--              sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3;
--              if (sdt.count > ACPI_MAX_TABLES) {
-+              sdt_count = (header->length - sizeof(struct acpi_table_header)) >> 3;
-+              if (sdt_count > ACPI_MAX_TABLES) {
-                       printk(KERN_WARNING PREFIX "Truncated %lu XSDT entries\n",
--                              (sdt.count - ACPI_MAX_TABLES));
--                      sdt.count = ACPI_MAX_TABLES;
-+                              (sdt_count - ACPI_MAX_TABLES));
-+                      sdt_count = ACPI_MAX_TABLES;
-               }
--              for (i = 0; i < sdt.count; i++)
--                      sdt.entry[i].pa = (unsigned long) mapped_xsdt->entry[i];
-+              sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
-+              if (!sdt_entry) {
-+                      printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
-+                      return -ENOMEM;
-+              }
-+
-+              for (i = 0; i < sdt_count; i++)
-+                      sdt_entry[i].pa = (unsigned long) mapped_xsdt->entry[i];
-       }
-       /* Then check RSDT */
-@@ -424,11 +429,11 @@ acpi_table_get_sdt (
-               struct acpi_table_rsdt  *mapped_rsdt = NULL;
--              sdt.pa = rsdp->rsdt_address;
-+              sdt_pa = rsdp->rsdt_address;
-               /* map in just the header */
-               header = (struct acpi_table_header *)
--                      __acpi_map_table(sdt.pa, sizeof(struct acpi_table_header));
-+                      __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
-               if (!header) {
-                       printk(KERN_WARNING PREFIX "Unable to map RSDT header\n");
-                       return -ENODEV;
-@@ -436,7 +441,7 @@ acpi_table_get_sdt (
-               /* remap in the entire table before processing */
-               mapped_rsdt = (struct acpi_table_rsdt *)
--                      __acpi_map_table(sdt.pa, header->length);
-+                      __acpi_map_table(sdt_pa, header->length);
-               if (!mapped_rsdt) {
-                       printk(KERN_WARNING PREFIX "Unable to map RSDT\n");
-                       return -ENODEV;
-@@ -453,15 +458,21 @@ acpi_table_get_sdt (
-                       return -ENODEV;
-               }
--              sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 2;
--              if (sdt.count > ACPI_MAX_TABLES) {
-+              sdt_count = (header->length - sizeof(struct acpi_table_header)) >> 2;
-+              if (sdt_count > ACPI_MAX_TABLES) {
-                       printk(KERN_WARNING PREFIX "Truncated %lu RSDT entries\n",
--                              (sdt.count - ACPI_TABLE_COUNT));
--                      sdt.count = ACPI_MAX_TABLES;
-+                              (sdt_count - ACPI_MAX_TABLES));
-+                      sdt_count = ACPI_MAX_TABLES;
-               }
--              for (i = 0; i < sdt.count; i++)
--                      sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
-+              sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
-+              if (!sdt_entry) {
-+                      printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
-+                      return -ENOMEM;
-+              }
-+
-+              for (i = 0; i < sdt_count; i++)
-+                      sdt_entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
-       }
-       else {
-@@ -469,38 +480,38 @@ acpi_table_get_sdt (
-               return -ENODEV;
-       }
--      acpi_table_print(header, sdt.pa);
-+      acpi_table_print(header, sdt_pa);
--      for (i = 0; i < sdt.count; i++) {
-+      for (i = 0; i < sdt_count; i++) {
-               /* map in just the header */
-               header = (struct acpi_table_header *)
--                      __acpi_map_table(sdt.entry[i].pa,
-+                      __acpi_map_table(sdt_entry[i].pa,
-                               sizeof(struct acpi_table_header));
-               if (!header)
-                       continue;
-               /* remap in the entire table before processing */
-               header = (struct acpi_table_header *)
--                      __acpi_map_table(sdt.entry[i].pa,
-+                      __acpi_map_table(sdt_entry[i].pa,
-                               header->length);
-               if (!header)
-                       continue;
-                      
--              acpi_table_print(header, sdt.entry[i].pa);
-+              acpi_table_print(header, sdt_entry[i].pa);
-               if (acpi_table_compute_checksum(header, header->length)) {
-                       printk(KERN_WARNING "  >>> ERROR: Invalid checksum\n");
-                       continue;
-               }
--              sdt.entry[i].size = header->length;
-+              sdt_entry[i].size = header->length;
-               for (id = 0; id < ACPI_TABLE_COUNT; id++) {
-                       if (!strncmp((char *) &header->signature,
-                               acpi_table_signatures[id],
-                               sizeof(header->signature))) {
--                              sdt.entry[i].id = id;
-+                              sdt_entry[i].id = id;
-                       }
-               }
-       }
-@@ -525,8 +536,6 @@ acpi_table_init (void)
-       unsigned long           rsdp_phys = 0;
-       int                     result = 0;
--      memset(&sdt, 0, sizeof(struct acpi_table_sdt));
--
-       /* Locate and map the Root System Description Table (RSDP) */
-       rsdp_phys = acpi_find_rsdp();
---- linux-2.6.0-test1/drivers/acpi/tables/tbconvrt.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/acpi/tables/tbconvrt.c  2003-07-19 17:03:49.000000000 -0700
-@@ -75,14 +75,10 @@ acpi_tb_get_table_count (
-       ACPI_FUNCTION_ENTRY ();
--#if ACPI_MACHINE_WIDTH != 64
--
-       if (RSDP->revision < 2) {
-               pointer_size = sizeof (u32);
-       }
--      else
--#endif
--      {
-+      else {
-               pointer_size = sizeof (u64);
-       }
---- linux-2.6.0-test1/drivers/acpi/tables/tbget.c      2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/acpi/tables/tbget.c     2003-07-19 17:03:49.000000000 -0700
-@@ -145,7 +145,7 @@ acpi_tb_get_table_header (
-               /* Create a logical address for the physical pointer*/
-               status = acpi_os_map_memory (address->pointer.physical, sizeof (struct acpi_table_header),
--                                (void **) &header);
-+                                (void *) &header);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR (("Could not map memory at %8.8X%8.8X for length %X\n",
-                               ACPI_HIDWORD (address->pointer.physical),
-@@ -361,7 +361,7 @@ acpi_tb_get_this_table (
-                * into our address space.
-                */
-               status = acpi_os_map_memory (address->pointer.physical, (acpi_size) header->length,
--                                (void **) &full_table);
-+                                (void *) &full_table);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR (("Could not map memory for table [%4.4s] at %8.8X%8.8X for length %X\n",
-                               header->signature,
---- linux-2.6.0-test1/drivers/acpi/tables/tbinstal.c   2003-06-14 12:18:03.000000000 -0700
-+++ 25/drivers/acpi/tables/tbinstal.c  2003-07-19 17:03:49.000000000 -0700
-@@ -271,22 +271,40 @@ acpi_tb_init_table_descriptor (
-               if (list_head->next) {
-                       return_ACPI_STATUS (AE_ALREADY_EXISTS);
-               }
--      }
--      /*
--       * Link the new table in to the list of tables of this type.
--       * Just insert at the start of the list, order unimportant.
--       *
--       * table_desc->Prev is already NULL from calloc()
--       */
--      table_desc->next = list_head->next;
--      list_head->next = table_desc;
-+              table_desc->next = list_head->next;
-+              list_head->next = table_desc;
--      if (table_desc->next) {
--              table_desc->next->prev = table_desc;
-+              if (table_desc->next) {
-+                      table_desc->next->prev = table_desc;
-+              }
-+
-+              list_head->count++;
-       }
-+      else {
-+              /*
-+               * Link the new table in to the list of tables of this type.
-+               * Insert at the end of the list, order IS IMPORTANT.
-+               *
-+               * table_desc->Prev & Next are already NULL from calloc()
-+               */
-+              list_head->count++;
-+
-+              if (!list_head->next) {
-+                      list_head->next = table_desc;
-+              }
-+              else {
-+                      table_desc->next = list_head->next;
--      list_head->count++;
-+                      while (table_desc->next->next) {
-+                              table_desc->next = table_desc->next->next;
-+                      }
-+
-+                      table_desc->next->next = table_desc;
-+                      table_desc->prev = table_desc->next;
-+                      table_desc->next = NULL;
-+              }
-+      }
-       /* Finish initialization of the table descriptor */
---- linux-2.6.0-test1/drivers/acpi/tables/tbrsdt.c     2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/acpi/tables/tbrsdt.c    2003-07-19 17:03:49.000000000 -0700
-@@ -85,7 +85,7 @@ acpi_tb_verify_rsdp (
-                * Obtain access to the RSDP structure
-                */
-               status = acpi_os_map_memory (address->pointer.physical, sizeof (struct rsdp_descriptor),
--                                (void **) &rsdp);
-+                                (void *) &rsdp);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
-               }
---- linux-2.6.0-test1/drivers/acpi/tables/tbxfroot.c   2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/acpi/tables/tbxfroot.c  2003-07-19 17:03:49.000000000 -0700
-@@ -179,7 +179,7 @@ acpi_get_firmware_table (
-               if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) {
-                       status = acpi_os_map_memory (rsdp_address.pointer.physical, sizeof (struct rsdp_descriptor),
--                                        (void **) &acpi_gbl_RSDP);
-+                                        (void *) &acpi_gbl_RSDP);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
-                       }
-@@ -423,7 +423,7 @@ acpi_tb_find_rsdp (
-                * 1) Search EBDA (low memory) paragraphs
-                */
-               status = acpi_os_map_memory ((u64) ACPI_LO_RSDP_WINDOW_BASE, ACPI_LO_RSDP_WINDOW_SIZE,
--                                (void **) &table_ptr);
-+                                (void *) &table_ptr);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not map memory at %X for length %X\n",
-                               ACPI_LO_RSDP_WINDOW_BASE, ACPI_LO_RSDP_WINDOW_SIZE));
-@@ -447,7 +447,7 @@ acpi_tb_find_rsdp (
-                * 2) Search upper memory: 16-byte boundaries in E0000h-F0000h
-                */
-               status = acpi_os_map_memory ((u64) ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE,
--                                (void **) &table_ptr);
-+                                (void *) &table_ptr);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not map memory at %X for length %X\n",
-                               ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE));
---- linux-2.6.0-test1/drivers/acpi/thermal.c   2003-06-14 12:18:32.000000000 -0700
-+++ 25/drivers/acpi/thermal.c  2003-07-19 17:03:49.000000000 -0700
-@@ -84,11 +84,11 @@ static int acpi_thermal_remove (struct a
- static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
- static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
- static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
--static int acpi_thermal_write_trip_points (struct file*,const char *,size_t,loff_t *);
-+static ssize_t acpi_thermal_write_trip_points (struct file*,const char *,size_t,loff_t *);
- static int acpi_thermal_cooling_open_fs(struct inode *inode, struct file *file);
--static int acpi_thermal_write_cooling_mode (struct file*,const char *,size_t,loff_t *);
-+static ssize_t acpi_thermal_write_cooling_mode (struct file*,const char *,size_t,loff_t *);
- static int acpi_thermal_polling_open_fs(struct inode *inode, struct file *file);
--static int acpi_thermal_write_polling(struct file*,const char *,size_t,loff_t *);
-+static ssize_t acpi_thermal_write_polling(struct file*,const char *,size_t,loff_t *);
- static struct acpi_driver acpi_thermal_driver = {
-       .name =         ACPI_THERMAL_DRIVER_NAME,
-@@ -881,7 +881,7 @@ static int acpi_thermal_trip_open_fs(str
-       return single_open(file, acpi_thermal_trip_seq_show, PDE(inode)->data);
- }
--static int
-+static ssize_t
- acpi_thermal_write_trip_points (
-         struct file           *file,
-         const char            *buffer,
-@@ -950,7 +950,7 @@ static int acpi_thermal_cooling_open_fs(
-                                                       PDE(inode)->data);
- }
--static int
-+static ssize_t
- acpi_thermal_write_cooling_mode (
-       struct file             *file,
-       const char              *buffer,
-@@ -1011,7 +1011,7 @@ static int acpi_thermal_polling_open_fs(
-                                                       PDE(inode)->data);
- }
--static int
-+static ssize_t
- acpi_thermal_write_polling (
-       struct file             *file,
-       const char              *buffer,
---- linux-2.6.0-test1/drivers/acpi/utilities/utglobal.c        2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/acpi/utilities/utglobal.c       2003-07-19 17:03:49.000000000 -0700
-@@ -307,9 +307,9 @@ struct acpi_table_support           acpi
-       /***********    Name,   Signature, Global typed pointer     Signature size,      Type                  How many allowed?,    Contains valid AML? */
-       /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL,                    sizeof (RSDP_SIG)-1, ACPI_TABLE_ROOT     | ACPI_TABLE_SINGLE},
--      /* DSDT 1 */ {DSDT_SIG,  DSDT_SIG, (void **) &acpi_gbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE  | ACPI_TABLE_EXECUTABLE},
--      /* FADT 2 */ {FADT_SIG,  FADT_SIG, (void **) &acpi_gbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE},
--      /* FACS 3 */ {FACS_SIG,  FACS_SIG, (void **) &acpi_gbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE},
-+      /* DSDT 1 */ {DSDT_SIG,  DSDT_SIG, (void *) &acpi_gbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE  | ACPI_TABLE_EXECUTABLE},
-+      /* FADT 2 */ {FADT_SIG,  FADT_SIG, (void *) &acpi_gbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE},
-+      /* FACS 3 */ {FACS_SIG,  FACS_SIG, (void *) &acpi_gbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE},
-       /* PSDT 4 */ {PSDT_SIG,  PSDT_SIG, NULL,                    sizeof (PSDT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
-       /* SSDT 5 */ {SSDT_SIG,  SSDT_SIG, NULL,                    sizeof (SSDT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
-       /* XSDT 6 */ {XSDT_SIG,  XSDT_SIG, NULL,                    sizeof (RSDT_SIG)-1, ACPI_TABLE_ROOT     | ACPI_TABLE_SINGLE},
---- linux-2.6.0-test1/drivers/atm/atmtcp.c     2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/atm/atmtcp.c    2003-07-19 17:03:49.000000000 -0700
-@@ -66,7 +66,7 @@ static int atmtcp_send_control(struct at
-       *(struct atm_vcc **) &new_msg->vcc = vcc;
-       old_test = test_bit(flag,&vcc->flags);
-       out_vcc->push(out_vcc,skb);
--      add_wait_queue(&vcc->sleep,&wait);
-+      add_wait_queue(vcc->sk->sk_sleep, &wait);
-       while (test_bit(flag,&vcc->flags) == old_test) {
-               mb();
-               out_vcc = PRIV(vcc->dev) ? PRIV(vcc->dev)->vcc : NULL;
-@@ -78,7 +78,7 @@ static int atmtcp_send_control(struct at
-               schedule();
-       }
-       current->state = TASK_RUNNING;
--      remove_wait_queue(&vcc->sleep,&wait);
-+      remove_wait_queue(vcc->sk->sk_sleep, &wait);
-       return error;
- }
-@@ -90,7 +90,7 @@ static int atmtcp_recv_control(const str
-       vcc->vpi = msg->addr.sap_addr.vpi;
-       vcc->vci = msg->addr.sap_addr.vci;
-       vcc->qos = msg->qos;
--      vcc->reply = msg->result;
-+      vcc->sk->sk_err = -msg->result;
-       switch (msg->type) {
-           case ATMTCP_CTRL_OPEN:
-               change_bit(ATM_VF_READY,&vcc->flags);
-@@ -103,7 +103,7 @@ static int atmtcp_recv_control(const str
-                   msg->type);
-               return -EINVAL;
-       }
--      wake_up(&vcc->sleep);
-+      wake_up(vcc->sk->sk_sleep);
-       return 0;
- }
-@@ -134,7 +134,7 @@ static int atmtcp_v_open(struct atm_vcc 
-       clear_bit(ATM_VF_READY,&vcc->flags); /* just in case ... */
-       error = atmtcp_send_control(vcc,ATMTCP_CTRL_OPEN,&msg,ATM_VF_READY);
-       if (error) return error;
--      return vcc->reply;
-+      return -vcc->sk->sk_err;
- }
-@@ -257,7 +257,7 @@ static void atmtcp_c_close(struct atm_vc
-               walk = atm_sk(s);
-               if (walk->dev != atmtcp_dev)
-                       continue;
--              wake_up(&walk->sleep);
-+              wake_up(walk->sk->sk_sleep);
-       }
-       read_unlock(&vcc_sklist_lock);
- }
---- linux-2.6.0-test1/drivers/base/node.c      2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/base/node.c     2003-07-19 17:04:07.000000000 -0700
-@@ -7,6 +7,7 @@
- #include <linux/init.h>
- #include <linux/mm.h>
- #include <linux/node.h>
-+#include <linux/cpumask.h>
- #include <linux/topology.h>
- static struct sysdev_class node_class = {
-@@ -17,7 +18,17 @@ static struct sysdev_class node_class = 
- static ssize_t node_read_cpumap(struct sys_device * dev, char * buf)
- {
-       struct node *node_dev = to_node(dev);
--        return sprintf(buf,"%lx\n",node_dev->cpumap);
-+      cpumask_t tmp = node_dev->cpumap;
-+      int k, len = 0;
-+
-+      for (k = 0; k < sizeof(cpumask_t)/sizeof(u16); ++k) {
-+              int j = sprintf(buf, "%04hx", (u16)cpus_coerce(tmp));
-+              len += j;
-+              buf += j;
-+              cpus_shift_right(tmp, tmp, 16);
-+      }
-+        len += sprintf(buf, "\n");
-+      return len;
- }
- static SYSDEV_ATTR(cpumap,S_IRUGO,node_read_cpumap,NULL);
---- linux-2.6.0-test1/drivers/block/acsi.c     2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/block/acsi.c    2003-07-19 17:03:49.000000000 -0700
-@@ -55,7 +55,6 @@
- #include <linux/delay.h>
- #include <linux/mm.h>
- #include <linux/major.h>
--#include <linux/blk.h>
- #include <linux/slab.h>
- #include <linux/interrupt.h>
- #include <scsi/scsi.h> /* for SCSI_IOCTL_GET_IDLUN */
---- linux-2.6.0-test1/drivers/block/amiflop.c  2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/block/amiflop.c 2003-07-19 17:03:49.000000000 -0700
-@@ -79,7 +79,6 @@
- #include <asm/amigahw.h>
- #include <asm/amigaints.h>
- #include <asm/irq.h>
--#include <linux/blk.h>
- #undef DEBUG /* print _LOTS_ of infos */
---- linux-2.6.0-test1/drivers/block/as-iosched.c       2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/as-iosched.c      2003-07-19 17:03:49.000000000 -0700
-@@ -12,7 +12,6 @@
- #include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/slab.h>
-@@ -834,10 +833,11 @@ static void as_update_iohist(struct as_i
-                                                       + 2*1024*64);
-               aic->seek_samples += 256;
--              aic->seek_total += 256*seek_dist;
-+              aic->seek_total += (u64)256*seek_dist;
-               if (aic->seek_samples) {
--                      aic->seek_mean = aic->seek_total + 128;
--                      sector_div(aic->seek_mean, aic->seek_samples);
-+                      u64 total = aic->seek_total + (aic->seek_samples>>1);
-+                      do_div(total, aic->seek_samples);
-+                      aic->seek_mean = (sector_t)total;
-               }
-               aic->seek_samples = (aic->seek_samples>>1)
-                                       + (aic->seek_samples>>2);
-@@ -1306,6 +1306,15 @@ static void as_add_request(struct as_dat
-       as_update_arq(ad, arq); /* keep state machine up to date */
- }
-+/*
-+ * FIXME: HACK for AS requeue problems
-+ */
-+static void as_requeue_request(request_queue_t *q, struct request *rq)
-+{
-+      elv_completed_request(q, rq);
-+      __elv_add_request(q, rq, 0, 0);
-+}
-+
- static void
- as_insert_request(request_queue_t *q, struct request *rq,
-                       struct list_head *insert_here)
-@@ -1821,6 +1830,7 @@ elevator_t iosched_as = {
-       .elevator_next_req_fn =         as_next_request,
-       .elevator_add_req_fn =          as_insert_request,
-       .elevator_remove_req_fn =       as_remove_request,
-+      .elevator_requeue_req_fn =      as_requeue_request,
-       .elevator_queue_empty_fn =      as_queue_empty,
-       .elevator_completed_req_fn =    as_completed_request,
-       .elevator_former_req_fn =       as_former_request,
---- linux-2.6.0-test1/drivers/block/ataflop.c  2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/block/ataflop.c 2003-07-19 17:03:49.000000000 -0700
-@@ -91,7 +91,6 @@
- #include <asm/atariints.h>
- #include <asm/atari_stdma.h>
- #include <asm/atari_stram.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #define       FD_MAX_UNITS 2
---- linux-2.6.0-test1/drivers/block/cciss.c    2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/cciss.c   2003-07-19 17:03:49.000000000 -0700
-@@ -41,7 +41,6 @@
- #include <asm/uaccess.h>
- #include <asm/io.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/genhd.h>
- #include <linux/completion.h>
---- linux-2.6.0-test1/drivers/block/cciss_scsi.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/block/cciss_scsi.c      2003-07-19 17:03:49.000000000 -0700
-@@ -712,7 +712,8 @@ cciss_scsi_detect(int ctlr)
-       sh->hostdata[0] = (unsigned long) hba[ctlr];
-       sh->irq = hba[ctlr]->intr;
-       sh->unique_id = sh->irq;
--      scsi_add_host(sh, &hba[ctlr]->pdev->dev);
-+      scsi_add_host(sh, &hba[ctlr]->pdev->dev); /* XXX handle failure */
-+      scsi_scan_host(sh);
-       return 1;
- }
---- linux-2.6.0-test1/drivers/block/cpqarray.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/block/cpqarray.c        2003-07-19 17:03:49.000000000 -0700
-@@ -38,7 +38,6 @@
- #include <linux/init.h>
- #include <linux/hdreg.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/genhd.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/block/cryptoloop.c       2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/cryptoloop.c      2003-07-19 17:03:49.000000000 -0700
-@@ -26,7 +26,6 @@
- #include <linux/crypto.h>
- #include <linux/blkdev.h>
- #include <linux/loop.h>
--#include <linux/blk.h>
- #include <asm/semaphore.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/block/DAC960.c   2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/block/DAC960.c  2003-07-19 17:03:49.000000000 -0700
-@@ -23,7 +23,6 @@
- #include <linux/version.h>
- #include <linux/module.h>
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/bio.h>
- #include <linux/completion.h>
---- linux-2.6.0-test1/drivers/block/deadline-iosched.c 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/block/deadline-iosched.c        2003-07-19 17:03:49.000000000 -0700
-@@ -10,7 +10,6 @@
- #include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/slab.h>
---- linux-2.6.0-test1/drivers/block/elevator.c 2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/elevator.c        2003-07-19 17:03:49.000000000 -0700
-@@ -29,7 +29,6 @@
- #include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/slab.h>
-@@ -214,6 +213,18 @@ void elv_merge_requests(request_queue_t 
-               e->elevator_merge_req_fn(q, rq, next);
- }
-+void elv_requeue_request(request_queue_t *q, struct request *rq)
-+{
-+      /*
-+       * if iosched has an explicit requeue hook, then use that. otherwise
-+       * just put the request at the front of the queue
-+       */
-+      if (q->elevator.elevator_requeue_req_fn)
-+              q->elevator.elevator_requeue_req_fn(q, rq);
-+      else
-+              __elv_add_request(q, rq, 0, 0);
-+}
-+
- void __elv_add_request(request_queue_t *q, struct request *rq, int at_end,
-                      int plug)
- {
-@@ -417,6 +428,7 @@ EXPORT_SYMBOL(elevator_noop);
- EXPORT_SYMBOL(elv_add_request);
- EXPORT_SYMBOL(__elv_add_request);
-+EXPORT_SYMBOL(elv_requeue_request);
- EXPORT_SYMBOL(elv_next_request);
- EXPORT_SYMBOL(elv_remove_request);
- EXPORT_SYMBOL(elv_queue_empty);
---- linux-2.6.0-test1/drivers/block/floppy98.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/floppy98.c        2003-07-19 17:03:49.000000000 -0700
-@@ -277,7 +277,6 @@ static int irqdma_allocated;
- #define LOCAL_END_REQUEST
- #define DEVICE_NAME "floppy"
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h> /* for the compatibility eject ioctl */
- #include <linux/completion.h>
---- linux-2.6.0-test1/drivers/block/floppy.c   2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/floppy.c  2003-07-19 17:15:21.000000000 -0700
-@@ -242,7 +242,7 @@ static int irqdma_allocated;
- #define LOCAL_END_REQUEST
- #define DEVICE_NAME "floppy"
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h> /* for the compatibility eject ioctl */
- #include <linux/completion.h>
-@@ -4261,6 +4261,7 @@ int __init floppy_init(void)
-                       floppy_sizes[i] = MAX_DISK_SIZE << 1;
-       blk_init_queue(&floppy_queue, do_fd_request, &floppy_lock);
-+      blk_queue_max_hw_segments(&floppy_queue, 1);
-       reschedule_timeout(MAXTIMEOUT, "floppy init", MAXTIMEOUT);
-       config_types();
---- linux-2.6.0-test1/drivers/block/genhd.c    2003-07-10 18:50:30.000000000 -0700
-+++ 25/drivers/block/genhd.c   2003-07-19 17:06:13.000000000 -0700
-@@ -7,7 +7,7 @@
- #include <linux/fs.h>
- #include <linux/genhd.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/spinlock.h>
- #include <linux/seq_file.h>
-@@ -336,7 +336,7 @@ static struct sysfs_ops disk_sysfs_ops =
- static ssize_t disk_dev_read(struct gendisk * disk, char *page)
- {
-       dev_t base = MKDEV(disk->major, disk->first_minor); 
--      return sprintf(page, "%04x\n", (unsigned)base);
-+      return print_dev_t(page, base);
- }
- static ssize_t disk_range_read(struct gendisk * disk, char *page)
- {
---- linux-2.6.0-test1/drivers/block/ioctl.c    2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/block/ioctl.c   2003-07-19 17:03:49.000000000 -0700
-@@ -1,5 +1,5 @@
- #include <linux/sched.h>              /* for capable() */
--#include <linux/blk.h>                        /* for set_device_ro() */
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <linux/backing-dev.h>
- #include <linux/buffer_head.h>
-@@ -166,13 +166,11 @@ int blkdev_ioctl(struct inode *inode, st
-                       return -EINVAL;
-               if (get_user(n, (int *) arg))
-                       return -EFAULT;
--              if (n > PAGE_SIZE || n < 512 || (n & (n - 1)))
--                      return -EINVAL;
-               if (bd_claim(bdev, &holder) < 0)
-                       return -EBUSY;
--              set_blocksize(bdev, n);
-+              ret = set_blocksize(bdev, n);
-               bd_release(bdev);
--              return 0;
-+              return ret;
-       case BLKPG:
-               return blkpg_ioctl(bdev, (struct blkpg_ioctl_arg *) arg);
-       case BLKRRPART:
---- linux-2.6.0-test1/drivers/block/Kconfig    2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/Kconfig   2003-07-19 17:03:49.000000000 -0700
-@@ -264,6 +264,7 @@ config BLK_DEV_LOOP
- config BLK_DEV_CRYPTOLOOP
-       tristate "Cryptoloop Support"
-+      select CRYPTO
-       depends on BLK_DEV_LOOP
-       ---help---
-         Say Y here if you want to be able to use the ciphers that are 
-@@ -339,7 +340,7 @@ config BLK_DEV_INITRD
- config LBD
-       bool "Support for Large Block Devices"
--      depends on X86
-+      depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH
-       help
-         Say Y here if you want to attach large (bigger than 2TB) discs to
-         your machine, or if you want to have a raid or loopback device
---- linux-2.6.0-test1/drivers/block/ll_rw_blk.c        2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/ll_rw_blk.c       2003-07-19 17:06:49.000000000 -0700
-@@ -17,7 +17,7 @@
- #include <linux/module.h>
- #include <linux/backing-dev.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/highmem.h>
- #include <linux/mm.h>
- #include <linux/kernel_stat.h>
-@@ -371,6 +371,20 @@ void blk_queue_hardsect_size(request_que
- }
- /**
-+ * blk_queue_stack_limits - inherit underlying queue limits for stacked drivers
-+ * @t:        the stacking driver (top)
-+ * @b:  the underlying device (bottom)
-+ **/
-+void blk_queue_stack_limits(request_queue_t *t, request_queue_t *b)
-+{
-+      t->max_sectors = min(t->max_sectors,b->max_sectors);
-+      t->max_phys_segments = min(t->max_phys_segments,b->max_phys_segments);
-+      t->max_hw_segments = min(t->max_hw_segments,b->max_hw_segments);
-+      t->max_segment_size = min(t->max_segment_size,b->max_segment_size);
-+      t->hardsect_size = max(t->hardsect_size,b->hardsect_size);
-+}
-+
-+/**
-  * blk_queue_segment_boundary - set boundary rules for segment merging
-  * @q:  the request queue for the device
-  * @mask:  the memory boundary mask
-@@ -1494,6 +1508,23 @@ struct request *blk_get_request(request_
-       return rq;
- }
-+/**
-+ * blk_requeue_request - put a request back on queue
-+ * @q:                request queue where request should be inserted
-+ * @rq:               request to be inserted
-+ *
-+ * Description:
-+ *    Drivers often keep queueing requests until the hardware cannot accept
-+ *    more, when that condition happens we need to put the request back
-+ *    on the queue. Must be called with queue lock held.
-+ */
-+void blk_requeue_request(request_queue_t *q, struct request *rq)
-+{
-+      if (blk_rq_tagged(rq))
-+              blk_queue_end_tag(q, rq);
-+
-+      elv_requeue_request(q, rq);
-+}
- /**
-  * blk_insert_request - insert a special request in to a request queue
-@@ -1659,25 +1690,50 @@ void blk_put_request(struct request *req
- }
- /**
-- * blk_congestion_wait - wait for a queue to become uncongested
-+ * blk_congestion_wait_wq - wait for a queue to become uncongested,
-  * @rw: READ or WRITE
-  * @timeout: timeout in jiffies
-+ * @wait : wait queue entry to use for waiting or async notification
-+ * (NULL defaults to synchronous behaviour)
-  *
-  * Waits for up to @timeout jiffies for a queue (any queue) to exit congestion.
-  * If no queues are congested then just wait for the next request to be
-  * returned.
-+ *
-+ * If the wait queue parameter specifies an async i/o callback,
-+ * then instead of blocking, just register the callback on the wait
-+ * queue for async notification when the queue gets uncongested.
-  */
--void blk_congestion_wait(int rw, long timeout)
-+int blk_congestion_wait_wq(int rw, long timeout, wait_queue_t *wait)
- {
--      DEFINE_WAIT(wait);
-       wait_queue_head_t *wqh = &congestion_wqh[rw];
-+      DEFINE_WAIT(local_wait);
-+
-+      if (!wait)
-+              wait = &local_wait;
-       blk_run_queues();
--      prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
-+      prepare_to_wait(wqh, wait, TASK_UNINTERRUPTIBLE);
-+      if (!is_sync_wait(wait)) {
-+              /*
-+               * if we've queued an async wait queue
-+               * callback do not block; just tell the
-+               * caller to return and retry later when
-+               * the callback is notified
-+               */
-+              return -EIOCBRETRY;
-+      }
-       io_schedule_timeout(timeout);
--      finish_wait(wqh, &wait);
-+      finish_wait(wqh, wait);
-+      return 0;
-+}
-+
-+void blk_congestion_wait(int rw, long timeout)
-+{
-+      blk_congestion_wait_wq(rw, timeout, NULL);
- }
-+
- /*
-  * Has to be called with the request spinlock acquired
-  */
-@@ -2720,6 +2776,7 @@ EXPORT_SYMBOL(blk_queue_max_phys_segment
- EXPORT_SYMBOL(blk_queue_max_hw_segments);
- EXPORT_SYMBOL(blk_queue_max_segment_size);
- EXPORT_SYMBOL(blk_queue_hardsect_size);
-+EXPORT_SYMBOL(blk_queue_stack_limits);
- EXPORT_SYMBOL(blk_queue_segment_boundary);
- EXPORT_SYMBOL(blk_queue_dma_alignment);
- EXPORT_SYMBOL(blk_rq_map_sg);
-@@ -2730,6 +2787,7 @@ EXPORT_SYMBOL(blk_hw_contig_segment);
- EXPORT_SYMBOL(blk_get_request);
- EXPORT_SYMBOL(blk_put_request);
- EXPORT_SYMBOL(blk_insert_request);
-+EXPORT_SYMBOL(blk_requeue_request);
- EXPORT_SYMBOL(blk_queue_prep_rq);
- EXPORT_SYMBOL(blk_queue_merge_bvec);
---- linux-2.6.0-test1/drivers/block/nbd.c      2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/block/nbd.c     2003-07-19 17:03:49.000000000 -0700
-@@ -44,7 +44,6 @@
- #include <linux/major.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/module.h>
- #include <linux/init.h>
-@@ -55,8 +54,6 @@
- #include <linux/errno.h>
- #include <linux/file.h>
- #include <linux/ioctl.h>
--#include <linux/blkdev.h>
--#include <linux/blk.h>
- #include <net/sock.h>
- #include <linux/devfs_fs_kernel.h>
-@@ -261,7 +258,8 @@ void nbd_send_req(struct nbd_device *lo,
-       dprintk(DBG_TX, "%s: request %p: sending control (%s@%llu,%luB)\n",
-                       lo->disk->disk_name, req,
-                       nbdcmd_to_ascii(nbd_cmd(req)),
--                      req->sector << 9, req->nr_sectors << 9);
-+                      (unsigned long long)req->sector << 9,
-+                      req->nr_sectors << 9);
-       result = sock_xmit(sock, 1, &request, sizeof(request),
-                       (nbd_cmd(req) == NBD_CMD_WRITE)? MSG_MORE: 0);
-       if (result <= 0) {
---- linux-2.6.0-test1/drivers/block/paride/pcd.c       2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/block/paride/pcd.c      2003-07-19 17:03:49.000000000 -0700
-@@ -137,7 +137,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV,
- #include <linux/delay.h>
- #include <linux/cdrom.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/uaccess.h>
- static spinlock_t pcd_lock;
---- linux-2.6.0-test1/drivers/block/paride/pd.c        2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/block/paride/pd.c       2003-07-19 17:03:49.000000000 -0700
-@@ -150,7 +150,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_GEO,
- #include <linux/delay.h>
- #include <linux/hdreg.h>
- #include <linux/cdrom.h>      /* for the eject ioctl */
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/block/paride/pf.c        2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/block/paride/pf.c       2003-07-19 17:03:49.000000000 -0700
-@@ -150,7 +150,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV,
- #include <linux/hdreg.h>
- #include <linux/cdrom.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <asm/uaccess.h>
-@@ -222,9 +222,6 @@ MODULE_PARM(drive3, "1-7i");
- #define ATAPI_READ_10         0x28
- #define ATAPI_WRITE_10                0x2a
--#ifdef MODULE
--void cleanup_module(void);
--#endif
- static int pf_open(struct inode *inode, struct file *file);
- static void do_pf_request(request_queue_t * q);
- static int pf_ioctl(struct inode *inode, struct file *file,
---- linux-2.6.0-test1/drivers/block/ps2esdi.c  2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/block/ps2esdi.c 2003-07-19 17:03:49.000000000 -0700
-@@ -38,7 +38,7 @@
- #include <linux/kernel.h>
- #include <linux/genhd.h>
- #include <linux/ps2esdi.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/mca.h>
- #include <linux/init.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/block/swim3.c    2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/block/swim3.c   2003-07-19 17:03:49.000000000 -0700
-@@ -24,7 +24,6 @@
- #include <linux/delay.h>
- #include <linux/fd.h>
- #include <linux/ioctl.h>
--#include <linux/blk.h>
- #include <linux/devfs_fs_kernel.h>
- #include <asm/io.h>
- #include <asm/dbdma.h>
---- linux-2.6.0-test1/drivers/block/swim_iop.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/block/swim_iop.c        2003-07-19 17:03:49.000000000 -0700
-@@ -30,7 +30,6 @@
- #include <linux/timer.h>
- #include <linux/delay.h>
- #include <linux/fd.h>
--#include <linux/blk.h>
- #include <linux/ioctl.h>
- #include <asm/io.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/block/umem.c     2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/block/umem.c    2003-07-19 17:03:49.000000000 -0700
-@@ -99,7 +99,7 @@ static int pci_cmds;
- static int major_nr;
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- struct cardinfo {
---- linux-2.6.0-test1/drivers/block/xd.c       2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/block/xd.c      2003-07-19 17:03:49.000000000 -0700
-@@ -46,7 +46,7 @@
- #include <linux/init.h>
- #include <linux/wait.h>
- #include <linux/devfs_fs_kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/block/z2ram.c    2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/block/z2ram.c   2003-07-19 17:03:49.000000000 -0700
-@@ -30,7 +30,6 @@
- #include <linux/major.h>
- #include <linux/slab.h>
- #include <linux/vmalloc.h>
--#include <linux/blk.h>
- #include <linux/init.h>
- #include <linux/module.h>
---- linux-2.6.0-test1/drivers/cdrom/aztcd.c    2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/cdrom/aztcd.c   2003-07-19 17:03:49.000000000 -0700
-@@ -166,7 +166,7 @@
- */
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "aztcd.h"
- #include <linux/module.h>
---- linux-2.6.0-test1/drivers/cdrom/cdrom.c    2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/cdrom/cdrom.c   2003-07-19 17:03:49.000000000 -0700
-@@ -268,6 +268,7 @@
- #include <linux/init.h>
- #include <linux/fcntl.h>
- #include <linux/blkdev.h>
-+#include <linux/times.h>
- #include <asm/uaccess.h>
-@@ -2171,6 +2172,7 @@ static int mmc_ioctl(struct cdrom_device
-                       return -ENOSYS;
-               cdinfo(CD_DO_IOCTL, "entering CDROM_SEND_PACKET\n"); 
-               IOCTL_IN(arg, struct cdrom_generic_command, cgc);
-+              cgc.timeout = clock_t_to_jiffies(cgc.timeout);
-               return cdrom_do_cmd(cdi, &cgc);
-               }
-       case CDROM_NEXT_WRITABLE: {
---- linux-2.6.0-test1/drivers/cdrom/cdu31a.c   2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/cdrom/cdu31a.c  2003-07-19 17:03:49.000000000 -0700
-@@ -177,7 +177,7 @@
- #include "cdu31a.h"
- #define MAJOR_NR CDU31A_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #define CDU31A_READAHEAD 4    /* 128 sector, 64kB, 32 reads read-ahead */
- #define CDU31A_MAX_CONSECUTIVE_ATTENTIONS 10
---- linux-2.6.0-test1/drivers/cdrom/cm206.c    2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/cdrom/cm206.c   2003-07-19 17:03:49.000000000 -0700
-@@ -199,7 +199,7 @@ History:
- #define MAJOR_NR CM206_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #undef DEBUG
- #define STATISTICS            /* record times and frequencies of events */
---- linux-2.6.0-test1/drivers/cdrom/gscd.c     2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/cdrom/gscd.c    2003-07-19 17:03:49.000000000 -0700
-@@ -69,7 +69,7 @@
- #include <asm/uaccess.h>
- #define MAJOR_NR GOLDSTAR_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #define gscd_port gscd                /* for compatible parameter passing with "insmod" */
- #include "gscd.h"
---- linux-2.6.0-test1/drivers/cdrom/mcd.c      2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/cdrom/mcd.c     2003-07-19 17:03:49.000000000 -0700
-@@ -101,7 +101,7 @@
- #include <asm/io.h>
- #include <asm/current.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #define mcd_port mcd          /* for compatible parameter passing with "insmod" */
- #include "mcd.h"
---- linux-2.6.0-test1/drivers/cdrom/mcdx.c     2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/cdrom/mcdx.c    2003-07-19 17:03:49.000000000 -0700
-@@ -74,7 +74,7 @@ static const char *mcdx_c_version
- #include <linux/major.h>
- #define MAJOR_NR MITSUMI_X_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/devfs_fs_kernel.h>
- /* for compatible parameter passing with "insmod" */
---- linux-2.6.0-test1/drivers/cdrom/optcd.c    2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/cdrom/optcd.c   2003-07-19 17:03:49.000000000 -0700
-@@ -73,7 +73,7 @@
- #include <linux/init.h>
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/cdrom.h>
- #include "optcd.h"
---- linux-2.6.0-test1/drivers/cdrom/sbpcd.c    2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/cdrom/sbpcd.c   2003-07-19 17:03:49.000000000 -0700
-@@ -387,7 +387,7 @@
- #include "sbpcd.h"
- #define MAJOR_NR MATSUSHITA_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- /*==========================================================================*/
- #if SBPCD_DIS_IRQ
---- linux-2.6.0-test1/drivers/cdrom/sjcd.c     2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/cdrom/sjcd.c    2003-07-19 17:03:49.000000000 -0700
-@@ -74,7 +74,7 @@
- #include <asm/system.h>
- #include <asm/io.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "sjcd.h"
- static int sjcd_present = 0;
---- linux-2.6.0-test1/drivers/cdrom/sonycd535.c        2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/cdrom/sonycd535.c       2003-07-19 17:03:49.000000000 -0700
-@@ -134,7 +134,7 @@
- #include <linux/cdrom.h>
- #define MAJOR_NR CDU535_CDROM_MAJOR
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #define sony535_cd_base_io sonycd535 /* for compatible parameter passing with "insmod" */
- #include "sonycd535.h"
---- linux-2.6.0-test1/drivers/char/agp/i460-agp.c      2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/char/agp/i460-agp.c     2003-07-19 17:03:49.000000000 -0700
-@@ -608,7 +608,7 @@ static struct pci_driver agp_intel_i460_
-       .name           = "agpgart-intel-i460",
-       .id_table       = agp_intel_i460_pci_table,
-       .probe          = agp_intel_i460_probe,
--      .remove         = agp_intel_i460_remove,
-+      .remove         = __devexit_p(agp_intel_i460_remove),
- };
- static int __init agp_intel_i460_init(void)
---- linux-2.6.0-test1/drivers/char/busmouse.c  2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/char/busmouse.c 2003-07-19 17:03:49.000000000 -0700
-@@ -357,25 +357,23 @@ int register_busmouse(struct busmouse *o
- {
-       unsigned int msedev = MINOR_TO_MOUSE(ops->minor);
-       struct busmouse_data *mse;
--      int ret;
-+      int ret = -EINVAL;
-       if (msedev >= NR_MICE) {
-               printk(KERN_ERR "busmouse: trying to allocate mouse on minor %d\n",
-                      ops->minor);
--              return -EINVAL;
-+              goto out;
-       }
-+      ret = -ENOMEM;
-       mse = kmalloc(sizeof(*mse), GFP_KERNEL);
-       if (!mse)
--              return -ENOMEM;
-+              goto out;
-       down(&mouse_sem);
-+      ret = -EBUSY;
-       if (busmouse_data[msedev])
--      {
--              up(&mouse_sem);
--              kfree(mse);
--              return -EBUSY;
--      }
-+              goto freemem;
-       memset(mse, 0, sizeof(*mse));
-@@ -386,14 +384,22 @@ int register_busmouse(struct busmouse *o
-       mse->lock = (spinlock_t)SPIN_LOCK_UNLOCKED;
-       init_waitqueue_head(&mse->wait);
--      busmouse_data[msedev] = mse;
-       ret = misc_register(&mse->miscdev);
--      if (!ret)
--              ret = msedev;
-+
-+      if (ret < 0) 
-+              goto freemem;
-+
-+      busmouse_data[msedev] = mse;
-+      ret = msedev;
-+out:
-       up(&mouse_sem);
--      
-       return ret;
-+
-+
-+freemem:
-+      kfree(mse);
-+      goto out;
- }
- /**
---- linux-2.6.0-test1/drivers/char/drm/drm_memory.h    2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/char/drm/drm_memory.h   2003-07-19 17:07:16.000000000 -0700
-@@ -128,7 +128,7 @@ static inline unsigned long
- drm_follow_page (void *vaddr)
- {
-       pgd_t *pgd = pgd_offset_k((unsigned long) vaddr);
--      pmd_t *pmd = pmd_offset(pgd, (unsigned long) vaddr);
-+      pmd_t *pmd = pmd_offset_kernel(pgd, (unsigned long)vaddr);
-       pte_t *ptep = pte_offset_kernel(pmd, (unsigned long) vaddr);
-       return pte_pfn(*ptep) << PAGE_SHIFT;
- }
---- linux-2.6.0-test1/drivers/char/ftape/lowlevel/fdc-io.c     2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/char/ftape/lowlevel/fdc-io.c    2003-07-19 17:03:49.000000000 -0700
-@@ -66,6 +66,7 @@ int ft_mach2             = CONFIG_FT_MAC
- /*      Local vars.
-  */
-+static spinlock_t fdc_io_lock; 
- static unsigned int fdc_calibr_count;
- static unsigned int fdc_calibr_time;
- static int fdc_status;
-@@ -89,14 +90,13 @@ void fdc_catch_stray_interrupts(int coun
- {
-       unsigned long flags;
--      save_flags(flags);
--      cli();
-+      spin_lock_irqsave(&fdc_io_lock, flags);
-       if (count == 0) {
-               ft_expected_stray_interrupts = 0;
-       } else {
-               ft_expected_stray_interrupts += count;
-       }
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&fdc_io_lock, flags);
- }
- /*  Wait during a timeout period for a given FDC status.
-@@ -194,8 +194,7 @@ int fdc_command(const __u8 * cmd_data, i
-       TRACE_FUN(ft_t_any);
-       fdc_usec_wait(FT_RQM_DELAY);    /* wait for valid RQM status */
--      save_flags(flags);
--      cli();
-+      spin_lock_irqsave(&fdc_io_lock, flags);
-       if (!in_interrupt())
-               /* Yes, I know, too much comments inside this function
-                * ...
-@@ -242,12 +241,11 @@ int fdc_command(const __u8 * cmd_data, i
-                       }
-                       fdc_usec_wait(FT_RQM_DELAY);    /* wait for valid RQM status */
--                      save_flags(flags);
--                      cli();
-+                      spin_lock_irqsave(&fdc_io_lock, flags);
-               }
-       fdc_status = inb(fdc.msr);
-       if ((fdc_status & FDC_DATA_READY_MASK) != FDC_DATA_IN_READY) {
--              restore_flags(flags);
-+              spin_unlock_irqrestore(&fdc_io_lock, flags);
-               TRACE_ABORT(-EBUSY, ft_t_err, "fdc not ready");
-       } 
-       fdc_mode = *cmd_data;   /* used by isr */
-@@ -289,7 +287,7 @@ int fdc_command(const __u8 * cmd_data, i
-               last_time = ftape_timestamp();
-       }
- #endif
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&fdc_io_lock, flags);
-       TRACE_EXIT result;
- }
-@@ -305,15 +303,14 @@ int fdc_result(__u8 * res_data, int res_
-       int retry = 0;
-       TRACE_FUN(ft_t_any);
--      save_flags(flags);
--      cli();
-+      spin_lock_irqsave(&fdc_io_lock, flags);
-       fdc_status = inb(fdc.msr);
-       if ((fdc_status & FDC_DATA_READY_MASK) != FDC_DATA_OUT_READY) {
-               TRACE(ft_t_err, "fdc not ready");
-               result = -EBUSY;
-       } else while (count) {
-               if (!(fdc_status & FDC_BUSY)) {
--                      restore_flags(flags);
-+                      spin_unlock_irqrestore(&fdc_io_lock, flags);
-                       TRACE_ABORT(-EIO, ft_t_err, "premature end of result phase");
-               }
-               result = fdc_read(res_data);
-@@ -336,7 +333,7 @@ int fdc_result(__u8 * res_data, int res_
-                       ++res_data;
-               }
-       }
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&fdc_io_lock, flags);
-       fdc_usec_wait(FT_RQM_DELAY);    /* allow FDC to negate BSY */
-       TRACE_EXIT result;
- }
-@@ -609,8 +606,7 @@ void fdc_reset(void)
-       unsigned long flags;
-       TRACE_FUN(ft_t_any);
--      save_flags(flags);
--      cli();
-+      spin_lock_irqsave(&fdc_io_lock, flags);
-       fdc_dor_reset(1); /* keep unit selected */
-@@ -629,7 +625,7 @@ void fdc_reset(void)
-        */
-       fdc_update_dsr();               /* restore data rate and precomp */
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&fdc_io_lock, flags);
-         /*
-          *    Wait for first polling cycle to complete
-@@ -928,8 +924,7 @@ int fdc_setup_formatting(buffer_struct *
-        */
-         TRACE(ft_t_fdc_dma,
-             "phys. addr. = %lx", virt_to_bus((void*) buff->ptr));
--      save_flags(flags);
--      cli();                  /* could be called from ISR ! */
-+      spin_lock_irqsave(&fdc_io_lock, flags);
-       fdc_setup_dma(DMA_MODE_WRITE, buff->ptr, FT_SECTORS_PER_SEGMENT * 4);
-       /* Issue FDC command to start reading/writing.
-        */
-@@ -937,7 +932,7 @@ int fdc_setup_formatting(buffer_struct *
-       out[4] = buff->gap3;
-       TRACE_CATCH(fdc_setup_error = fdc_command(out, sizeof(out)),
-                   restore_flags(flags); fdc_mode = fdc_idle);
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&fdc_io_lock, flags);
-       TRACE_EXIT 0;
- }
-@@ -977,11 +972,10 @@ int fdc_setup_read_write(buffer_struct *
-               break;
-       default:
-               TRACE_ABORT(-EIO,
--                          ft_t_bug, "bug: illegal operation parameter");
-+                          ft_t_bug, "bug: invalid operation parameter");
-       }
-       TRACE(ft_t_fdc_dma, "phys. addr. = %lx",virt_to_bus((void*)buff->ptr));
--      save_flags(flags);
--      cli();                  /* could be called from ISR ! */
-+      spin_lock_irqsave(&fdc_io_lock, flags);
-       if (operation != FDC_VERIFY) {
-               fdc_setup_dma(dma_mode, buff->ptr,
-                             FT_SECTOR_SIZE * buff->sector_count);
-@@ -999,7 +993,7 @@ int fdc_setup_read_write(buffer_struct *
-       out[8] = 0xff;          /* No limit to transfer size. */
-       TRACE(ft_t_fdc_dma, "C: 0x%02x, H: 0x%02x, R: 0x%02x, cnt: 0x%02x",
-               out[2], out[3], out[4], out[6] - out[4] + 1);
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&fdc_io_lock, flags);
-       TRACE_CATCH(fdc_setup_error = fdc_command(out, 9),fdc_mode = fdc_idle);
-       TRACE_EXIT 0;
- }
---- linux-2.6.0-test1/drivers/char/ftape/lowlevel/ftape-calibr.c       2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/char/ftape/lowlevel/ftape-calibr.c      2003-07-19 17:03:49.000000000 -0700
-@@ -49,6 +49,8 @@
- static unsigned long ps_per_cycle = 0;
- #endif
-+static spinlock_t calibr_lock;
-+
- /*
-  * Note: On Intel PCs, the clock ticks at 100 Hz (HZ==100) which is
-  * too slow for certain timeouts (and that clock doesn't even tick
-@@ -75,13 +77,12 @@ unsigned int ftape_timestamp(void)
-       __u16 lo;
-       __u16 hi;
--      save_flags(flags);
--      cli();
-+      spin_lock_irqsave(&calibr_lock, flags);
-       outb_p(0x00, 0x43);     /* latch the count ASAP */
-       lo = inb_p(0x40);       /* read the latched count */
-       lo |= inb(0x40) << 8;
-       hi = jiffies;
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&calibr_lock, flags);
-       return ((hi + 1) * (unsigned int) LATCH) - lo;  /* downcounter ! */
- #endif
- }
-@@ -94,12 +95,11 @@ static unsigned int short_ftape_timestam
-       unsigned int count;
-       unsigned long flags;
-  
--      save_flags(flags);
--      cli();
-+      spin_lock_irqsave(&calibr_lock, flags);
-       outb_p(0x00, 0x43);     /* latch the count ASAP */
-       count = inb_p(0x40);    /* read the latched count */
-       count |= inb(0x40) << 8;
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&calibr_lock, flags);
-       return (LATCH - count); /* normal: downcounter */
- #endif
- }
-@@ -150,14 +150,13 @@ static void time_inb(void)
-       int status;
-       TRACE_FUN(ft_t_any);
--      save_flags(flags);
--      cli();
-+      spin_lock_irqsave(&calibr_lock, flags);
-       t0 = short_ftape_timestamp();
-       for (i = 0; i < 1000; ++i) {
-               status = inb(fdc.msr);
-       }
-       t1 = short_ftape_timestamp();
--      restore_flags(flags);
-+      spin_unlock_irqrestore(&calibr_lock, flags);
-       TRACE(ft_t_info, "inb() duration: %d nsec", ftape_timediff(t0, t1));
-       TRACE_EXIT;
- }
-@@ -241,8 +240,7 @@ void ftape_calibrate(char *name,
-               *calibr_count =
-               *calibr_time = count;   /* set TC to 1 */
--              save_flags(flags);
--              cli();
-+              spin_lock_irqsave(&calibr_lock, flags);
-               fun(0);         /* dummy, get code into cache */
-               t0 = short_ftape_timestamp();
-               fun(0);         /* overhead + one test */
-@@ -252,7 +250,7 @@ void ftape_calibrate(char *name,
-               fun(count);             /* overhead + count tests */
-               t1 = short_ftape_timestamp();
-               multiple = diff(t0, t1);
--              restore_flags(flags);
-+              spin_unlock_irqrestore(&calibr_lock, flags);
-               time = ftape_timediff(0, multiple - once);
-               tc = (1000 * time) / (count - 1);
-               TRACE(ft_t_any, "once:%3d us,%6d times:%6d us, TC:%5d ns",
---- linux-2.6.0-test1/drivers/char/ftape/lowlevel/ftape-format.c       2003-06-14 12:18:21.000000000 -0700
-+++ 25/drivers/char/ftape/lowlevel/ftape-format.c      2003-07-19 17:03:49.000000000 -0700
-@@ -44,6 +44,8 @@
- #define FT_FMT_SEGS_PER_BUF (FT_BUFF_SIZE/(4*FT_SECTORS_PER_SEGMENT))
- #endif
-+static spinlock_t ftape_format_lock;
-+
- /*
-  *  first segment of the new buffer
-  */
-@@ -129,9 +131,9 @@ int ftape_format_track(const unsigned in
-       head->status = formatting;
-       TRACE_CATCH(ftape_seek_head_to_track(track),);
-       TRACE_CATCH(ftape_command(QIC_LOGICAL_FORWARD),);
--      save_flags(flags); cli();
-+      spin_lock_irqsave(&ftape_format_lock, flags);
-       TRACE_CATCH(fdc_setup_formatting(head), restore_flags(flags));
--      restore_flags(flags);   
-+      spin_unlock_irqrestore(&ftape_format_lock, flags);
-       TRACE_EXIT 0;
- }
---- linux-2.6.0-test1/drivers/char/ftape/zftape/zftape-init.c  2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/char/ftape/zftape/zftape-init.c 2003-07-19 17:03:49.000000000 -0700
-@@ -118,7 +118,7 @@ static int zft_open(struct inode *ino, s
-            > 
-           FTAPE_SEL_D) {
-               clear_bit(0,&busy_flag);
--              TRACE_ABORT(-ENXIO, ft_t_err, "failed: illegal unit nr");
-+              TRACE_ABORT(-ENXIO, ft_t_err, "failed: invalid unit nr");
-       }
-       orig_sigmask = current->blocked;
-       sigfillset(&current->blocked);
---- linux-2.6.0-test1/drivers/char/ip2.c       2003-06-14 12:18:20.000000000 -0700
-+++ 25/drivers/char/ip2.c      2003-07-19 17:03:49.000000000 -0700
-@@ -38,16 +38,14 @@ static int irq[IP2_MAX_BOARDS] = { -1, -
- static int poll_only = 0;
--#     if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
--              MODULE_AUTHOR("Doug McNash");
--              MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
--              MODULE_PARM(irq,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
--              MODULE_PARM_DESC(irq,"Interrupts for IntelliPort Cards");
--              MODULE_PARM(io,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
--              MODULE_PARM_DESC(io,"I/O ports for IntelliPort Cards");
--              MODULE_PARM(poll_only,"1i");
--              MODULE_PARM_DESC(poll_only,"Do not use card interrupts");
--#     endif   /* LINUX_VERSION */
-+MODULE_AUTHOR("Doug McNash");
-+MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
-+MODULE_PARM(irq,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
-+MODULE_PARM_DESC(irq,"Interrupts for IntelliPort Cards");
-+MODULE_PARM(io,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i");
-+MODULE_PARM_DESC(io,"I/O ports for IntelliPort Cards");
-+MODULE_PARM(poll_only,"1i");
-+MODULE_PARM_DESC(poll_only,"Do not use card interrupts");
- //======================================================================
---- linux-2.6.0-test1/drivers/char/ip2/i2lib.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/char/ip2/i2lib.c        2003-07-19 17:03:49.000000000 -0700
-@@ -1089,7 +1089,7 @@ i2Output(i2ChanStrPtr pCh, const char *p
-                       // Move the data
-                       if ( user ) {
--                              COPY_FROM_USER(rc, (char*)(DATA_OF(pInsert)), pSource,
-+                              rc = copy_from_user((char*)(DATA_OF(pInsert)), pSource,
-                                               amountToMove );
-                       } else {
-                               memcpy( (char*)(DATA_OF(pInsert)), pSource, amountToMove );
---- linux-2.6.0-test1/drivers/char/ip2/i2os.h  2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/char/ip2/i2os.h 2003-07-19 17:03:49.000000000 -0700
-@@ -19,8 +19,6 @@
- #ifndef I2OS_H    /* To prevent multiple includes */
- #define I2OS_H 1
--#define VERSION(ver,rel,seq) (((ver)<<16) | ((rel)<<8) | (seq))
--
- //-------------------------------------------------
- // Required Includes
- //-------------------------------------------------
-@@ -46,22 +44,6 @@
- // Interrupt control
- //--------------------------------------------
--#if LINUX_VERSION_CODE < 0x00020100
--typedef int spinlock_t;
--#define spin_lock_init() 
--#define spin_lock(a)
--#define spin_unlock(a)
--#define spin_lock_irqsave(a,b)                        {save_flags((b));cli();}
--#define spin_unlock_irqrestore(a,b)           {restore_flags((b));}
--#define write_lock_irqsave(a,b)                       spin_lock_irqsave(a,b)
--#define write_unlock_irqrestore(a,b)  spin_unlock_irqrestore(a,b)
--#define read_lock_irqsave(a,b)                        spin_lock_irqsave(a,b)
--#define read_unlock_irqrestore(a,b)           spin_unlock_irqrestore(a,b)
--#endif
--
--//#define SAVE_AND_DISABLE_INTS(a,b)  spin_lock_irqsave(a,b)
--//#define RESTORE_INTS(a,b)           spin_unlock_irqrestore(a,b)
--
- #define LOCK_INIT(a)  rwlock_init(a)
- #define SAVE_AND_DISABLE_INTS(a,b) { \
---- linux-2.6.0-test1/drivers/char/ip2main.c   2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/char/ip2main.c  2003-07-19 17:03:49.000000000 -0700
-@@ -83,7 +83,6 @@
- /* Includes */
- /************/
- #include <linux/config.h>
--// Uncomment the following if you want it compiled with modversions
- #include <linux/version.h>
-@@ -120,82 +119,11 @@
- #include <asm/irq.h>
- #include <asm/bitops.h>
--#ifndef KERNEL_VERSION
--#define KERNEL_VERSION(ver,rel,seq) (((ver)<<16) | ((rel)<<8) | (seq))
--#endif
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
--#     include <linux/vmalloc.h>
--#     include <linux/init.h>
--#     include <asm/serial.h>
--#else
--#     include <linux/bios32.h>
--#endif
-+#include <linux/vmalloc.h>
-+#include <linux/init.h>
-+#include <asm/serial.h>
--// These VERSION switches maybe inexact because I simply don't know
--// when the various features appeared in the 2.1.XX kernels.
--// They are good enough for 2.0 vs 2.2 and if you are fooling with
--// the 2.1.XX stuff then it would be trivial for you to fix.
--// Most of these macros were stolen from some other drivers
--// so blame them.
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,4)
--#     define GET_USER(error,value,addr) error = get_user(value,addr)
--#     define COPY_FROM_USER(error,dest,src,size) error = copy_from_user(dest,src,size) ? -EFAULT : 0
--#     define PUT_USER(error,value,addr) error = put_user(value,addr)
--#     define COPY_TO_USER(error,dest,src,size) error = copy_to_user(dest,src,size) ? -EFAULT : 0
--
--#     if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,5)
--#             include <asm/uaccess.h>
--#             define          pcibios_strerror(status)        \
--                                      printk( KERN_ERR "IP2: PCI error 0x%x \n", status );
--#     endif
--
--#else  /* 2.0.x and 2.1.x before 2.1.4 */
--
--#     define          proc_register_dynamic(a,b) proc_register(a,b) 
--
--#     define GET_USER(error,value,addr)                                         \
--      do {                                                                      \
--              error = verify_area (VERIFY_READ, (void *) addr, sizeof (value)); \
--              if (error == 0)                                                   \
--                      value = get_user(addr);                                   \
--      } while (0)
--
--#     define COPY_FROM_USER(error,dest,src,size)                                \
--      do {                                                                      \
--              error = verify_area (VERIFY_READ, (void *) src, size);            \
--              if (error == 0)                                                   \
--                      memcpy_fromfs (dest, src, size);                          \
--      } while (0)
--
--#     define PUT_USER(error,value,addr)                                          \
--      do {                                                                       \
--              error = verify_area (VERIFY_WRITE, (void *) addr, sizeof (value)); \
--              if (error == 0)                                                    \
--                      put_user (value, addr);                                    \
--      } while (0)
--
--#     define COPY_TO_USER(error,dest,src,size)                                  \
--      do {                                                                      \
--              error = verify_area (VERIFY_WRITE, (void *) dest, size);                  \
--              if (error == 0)                                                   \
--                      memcpy_tofs (dest, src, size);                            \
--      } while (0)
--
--#endif
--
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
--#define __init
--#define __initfunc(a) a
--#define __initdata
--#define ioremap(a,b) vremap((a),(b))
--#define iounmap(a) vfree((a))
--#define SERIAL_TYPE_NORMAL    1
--#define schedule_timeout(a){current->timeout = jiffies + (a); schedule();}
--#define signal_pending(a) ((a)->signal & ~(a)->blocked)
--#define in_interrupt()        intr_count
--#endif
-+#include <asm/uaccess.h>
- #include "./ip2/ip2types.h"
- #include "./ip2/ip2trace.h"
-@@ -276,11 +204,7 @@ static int set_modem_info(i2ChanStrPtr, 
- static int get_serial_info(i2ChanStrPtr, struct serial_struct *);
- static int set_serial_info(i2ChanStrPtr, struct serial_struct *);
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
--static int     ip2_ipl_read(struct inode *, char *, size_t , loff_t *);
--#else
--static ssize_t ip2_ipl_read(struct file *, char *, size_t, loff_t *) ;
--#endif
-+static ssize_t ip2_ipl_read(struct file *, char *, size_t, loff_t *);
- static ssize_t ip2_ipl_write(struct file *, const char *, size_t, loff_t *);
- static int ip2_ipl_ioctl(struct inode *, struct file *, UINT, ULONG);
- static int ip2_ipl_open(struct inode *, struct file *);
-@@ -354,9 +278,6 @@ static int tracewrap;
- #define DBG_CNT(s)
- #endif
--#define MIN(a,b)      ( ( (a) < (b) ) ? (a) : (b) )
--#define MAX(a,b)      ( ( (a) > (b) ) ? (a) : (b) )
--
- /********/
- /* Code */
- /********/
-@@ -366,12 +287,9 @@ static int tracewrap;
- #include "./ip2/i2lib.c"      /* High level interface services */
- /* Configuration area for modprobe */
--#ifdef MODULE
--#     if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
--              MODULE_AUTHOR("Doug McNash");
--              MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
--#     endif   /* LINUX_VERSION */
--#endif        /* MODULE */
-+
-+MODULE_AUTHOR("Doug McNash");
-+MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
- static int poll_only = 0;
-@@ -660,53 +578,6 @@ ip2_loadmain(int *iop, int *irqp, unsign
-                       break;
-               case PCI:
- #ifdef CONFIG_PCI
--#if (LINUX_VERSION_CODE < 0x020163) /* 2.1.99 */
--                      if (pcibios_present()) {
--                              unsigned char pci_bus, pci_devfn;
--                              int Pci_index = 0;
--                              status = pcibios_find_device(PCI_VENDOR_ID_COMPUTONE,
--                                                        PCI_DEVICE_ID_COMPUTONE_IP2EX, Pci_index,
--                                                        &pci_bus, &pci_devfn);
--                              if (status == 0) {
--                                      unsigned int addr;
--                                      unsigned char pci_irq;
--
--                                      ip2config.type[i] = PCI;
--                                      /* 
--                                       * Update Pci_index, so that the next time we go
--                                       * searching for a PCI board we find a different
--                                       * one.
--                                       */
--                                      ++Pci_index;
--
--                                      pcibios_read_config_dword(pci_bus, pci_devfn,
--                                                                PCI_BASE_ADDRESS_1, &addr);
--                                      if ( addr & 1 ) {
--                                              ip2config.addr[i]=(USHORT)(addr&0xfffe);
--                                      } else {
--                                              printk( KERN_ERR "IP2: PCI I/O address error\n");
--                                      }
--                                      pcibios_read_config_byte(pci_bus, pci_devfn,
--                                                                PCI_INTERRUPT_LINE, &pci_irq);
--
--//            If the PCI BIOS assigned it, lets try and use it.  If we
--//            can't acquire it or it screws up, deal with it then.
--
--//                                    if (!is_valid_irq(pci_irq)) {
--//                                            printk( KERN_ERR "IP2: Bad PCI BIOS IRQ(%d)\n",pci_irq);
--//                                            pci_irq = 0;
--//                                    }
--                                      ip2config.irq[i] = pci_irq;
--                              } else {        // ann error
--                                      ip2config.addr[i] = 0;
--                                      if (status == PCIBIOS_DEVICE_NOT_FOUND) {
--                                              printk( KERN_ERR "IP2: PCI board %d not found\n", i );
--                                      } else {
--                                              pcibios_strerror(status);
--                                      }
--                              } 
--                      } 
--#else /* LINUX_VERSION_CODE > 2.1.99 */
-                       {
-                               struct pci_dev *pci_dev_i = NULL;
-                               pci_dev_i = pci_find_device(PCI_VENDOR_ID_COMPUTONE,
-@@ -739,11 +610,10 @@ ip2_loadmain(int *iop, int *irqp, unsign
-                                       if (status == PCIBIOS_DEVICE_NOT_FOUND) {
-                                               printk( KERN_ERR "IP2: PCI board %d not found\n", i );
-                                       } else {
--                                              pcibios_strerror(status);
-+                                              printk( KERN_ERR "IP2: PCI error 0x%x \n", status );
-                                       }
-                               } 
-                       }
--#endif        /* ! 2_0_X */
- #else
-                       printk( KERN_ERR "IP2: PCI card specified but PCI support not\n");
-                       printk( KERN_ERR "IP2: configured in this kernel.\n");
-@@ -2193,7 +2063,7 @@ ip2_ioctl ( PTTY tty, struct file *pFile
-               ip2trace (CHANN, ITRC_IOCTL, 6, 1, rc );
--                      PUT_USER(rc,C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg);
-+                      rc = put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg);
-               if (rc) 
-                       return rc;
-       break;
-@@ -2202,7 +2072,7 @@ ip2_ioctl ( PTTY tty, struct file *pFile
-               ip2trace (CHANN, ITRC_IOCTL, 7, 1, rc );
--              GET_USER(rc,arg,(unsigned long *) arg);
-+              rc = get_user(arg,(unsigned long *) arg);
-               if (rc) 
-                       return rc;
-               tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL)
-@@ -2243,7 +2113,7 @@ ip2_ioctl ( PTTY tty, struct file *pFile
-                       return -EINTR;
-               }
- #endif
--              PUT_USER(rc,
-+              rc = put_user(
-                                   ((pCh->dataSetOut & I2_RTS) ? TIOCM_RTS : 0)
-                                 | ((pCh->dataSetOut & I2_DTR) ? TIOCM_DTR : 0)
-                                 | ((pCh->dataSetIn  & I2_DCD) ? TIOCM_CAR : 0)
-@@ -2333,17 +2203,17 @@ ip2_ioctl ( PTTY tty, struct file *pFile
-               cnow = pCh->icount;
-               restore_flags(flags);
-               p_cuser = (struct serial_icounter_struct *) arg;
--              PUT_USER(rc,cnow.cts, &p_cuser->cts);
--              PUT_USER(rc,cnow.dsr, &p_cuser->dsr);
--              PUT_USER(rc,cnow.rng, &p_cuser->rng);
--              PUT_USER(rc,cnow.dcd, &p_cuser->dcd);
--              PUT_USER(rc,cnow.rx, &p_cuser->rx);
--              PUT_USER(rc,cnow.tx, &p_cuser->tx);
--              PUT_USER(rc,cnow.frame, &p_cuser->frame);
--              PUT_USER(rc,cnow.overrun, &p_cuser->overrun);
--              PUT_USER(rc,cnow.parity, &p_cuser->parity);
--              PUT_USER(rc,cnow.brk, &p_cuser->brk);
--              PUT_USER(rc,cnow.buf_overrun, &p_cuser->buf_overrun);
-+              rc = put_user(cnow.cts, &p_cuser->cts);
-+              rc = put_user(cnow.dsr, &p_cuser->dsr);
-+              rc = put_user(cnow.rng, &p_cuser->rng);
-+              rc = put_user(cnow.dcd, &p_cuser->dcd);
-+              rc = put_user(cnow.rx, &p_cuser->rx);
-+              rc = put_user(cnow.tx, &p_cuser->tx);
-+              rc = put_user(cnow.frame, &p_cuser->frame);
-+              rc = put_user(cnow.overrun, &p_cuser->overrun);
-+              rc = put_user(cnow.parity, &p_cuser->parity);
-+              rc = put_user(cnow.brk, &p_cuser->brk);
-+              rc = put_user(cnow.buf_overrun, &p_cuser->buf_overrun);
-               break;
-       /*
-@@ -2387,7 +2257,7 @@ set_modem_info(i2ChanStrPtr pCh, unsigne
-       int rc;
-       unsigned int arg;
--      GET_USER(rc,arg,value);
-+      rc = get_user(arg,value);
-       if (rc)
-               return rc;
-       switch(cmd) {
-@@ -2469,7 +2339,7 @@ get_serial_info ( i2ChanStrPtr pCh, stru
-       tmp.close_delay = pCh->ClosingDelay;
-       tmp.closing_wait = pCh->ClosingWaitTime;
-       tmp.custom_divisor = pCh->BaudDivisor;
--      COPY_TO_USER(rc,retinfo,&tmp,sizeof(*retinfo));
-+      rc = copy_to_user(retinfo,&tmp,sizeof(*retinfo));
-    return rc;
- }
-@@ -2489,15 +2359,15 @@ set_serial_info( i2ChanStrPtr pCh, struc
- {
-       struct serial_struct ns;
-       int   old_flags, old_baud_divisor;
--      int     rc = 0;
-       if ( !new_info ) {
-               return -EFAULT;
-       }
--      COPY_FROM_USER(rc, &ns, new_info, sizeof (ns) );
--      if (rc) {
--              return rc;
-+
-+      if (copy_from_user(&ns, new_info, sizeof (ns))) {
-+              return -EFAULT;
-       }
-+
-       /*
-        * We don't allow setserial to change IRQ, board address, type or baud
-        * base. Also line nunber as such is meaningless but we use it for our
-@@ -2537,7 +2407,7 @@ set_serial_info( i2ChanStrPtr pCh, struc
-               set_params( pCh, NULL );
-       }
--      return rc;
-+      return 0;
- }
- /******************************************************************************/
-@@ -2860,16 +2730,10 @@ service_it:
- /******************************************************************************/
- static 
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
--int
--ip2_ipl_read(struct inode *pInode, char *pData, size_t count, loff_t *off )
--      unsigned int minor = minor( pInode->i_rdev );
--#else
- ssize_t
- ip2_ipl_read(struct file *pFile, char *pData, size_t count, loff_t *off )
- {
-       unsigned int minor = minor( pFile->f_dentry->d_inode->i_rdev );
--#endif
-       int rc = 0;
- #ifdef IP2DEBUG_IPL
-@@ -2904,7 +2768,7 @@ DumpFifoBuffer ( char *pData, int count 
- {
- #ifdef DEBUG_FIFO
-       int rc;
--      COPY_TO_USER(rc, pData, DBGBuf, count);
-+      rc = copy_to_user(pData, DBGBuf, count);
-       printk(KERN_DEBUG "Last index %d\n", I );
-@@ -2925,10 +2789,10 @@ DumpTraceBuffer ( char *pData, int count
-       if ( count < (sizeof(int) * 6) ) {
-               return -EIO;
-       }
--      PUT_USER(rc, tracewrap, pIndex );
--      PUT_USER(rc, TRACEMAX, ++pIndex );
--      PUT_USER(rc, tracestrip, ++pIndex );
--      PUT_USER(rc, tracestuff, ++pIndex );
-+      rc = put_user(tracewrap, pIndex );
-+      rc = put_user(TRACEMAX, ++pIndex );
-+      rc = put_user(tracestrip, ++pIndex );
-+      rc = put_user(tracestuff, ++pIndex );
-       pData += sizeof(int) * 6;
-       count -= sizeof(int) * 6;
-@@ -2941,7 +2805,7 @@ DumpTraceBuffer ( char *pData, int count
-       }
-       chunk = TRACEMAX - tracestrip;
-       if ( dumpcount > chunk ) {
--              COPY_TO_USER(rc, pData, &tracebuf[tracestrip],
-+              rc = copy_to_user(pData, &tracebuf[tracestrip],
-                             chunk * sizeof(tracebuf[0]) );
-               pData += chunk * sizeof(tracebuf[0]);
-               tracestrip = 0;
-@@ -2949,13 +2813,13 @@ DumpTraceBuffer ( char *pData, int count
-       } else {
-               chunk = dumpcount;
-       }
--      COPY_TO_USER(rc, pData, &tracebuf[tracestrip],
-+      rc = copy_to_user(pData, &tracebuf[tracestrip],
-                     chunk * sizeof(tracebuf[0]) );
-       tracestrip += chunk;
-       tracewrap = 0;
--      PUT_USER(rc, tracestrip, ++pIndex );
--      PUT_USER(rc, tracestuff, ++pIndex );
-+      rc = put_user(tracestrip, ++pIndex );
-+      rc = put_user(tracestuff, ++pIndex );
-       return dumpcount;
- #else
-@@ -3019,15 +2883,15 @@ ip2_ipl_ioctl ( struct inode *pInode, st
-       case 13:
-               switch ( cmd ) {
-               case 64:        /* Driver - ip2stat */
--                      PUT_USER(rc, ip2_tty_driver->refcount, pIndex++ );
--                      PUT_USER(rc, irq_counter, pIndex++  );
--                      PUT_USER(rc, bh_counter, pIndex++  );
-+                      rc = put_user(ip2_tty_driver->refcount, pIndex++ );
-+                      rc = put_user(irq_counter, pIndex++  );
-+                      rc = put_user(bh_counter, pIndex++  );
-                       break;
-               case 65:        /* Board  - ip2stat */
-                       if ( pB ) {
--                              COPY_TO_USER(rc, (char*)arg, (char*)pB, sizeof(i2eBordStr) );
--                              PUT_USER(rc, INB(pB->i2eStatus),
-+                              rc = copy_to_user((char*)arg, (char*)pB, sizeof(i2eBordStr) );
-+                              rc = put_user(INB(pB->i2eStatus),
-                                       (ULONG*)(arg + (ULONG)(&pB->i2eStatus) - (ULONG)pB ) );
-                       } else {
-                               rc = -ENODEV;
-@@ -3039,7 +2903,7 @@ ip2_ipl_ioctl ( struct inode *pInode, st
-                               pCh = DevTable[cmd];
-                               if ( pCh )
-                               {
--                                      COPY_TO_USER(rc, (char*)arg, (char*)pCh, sizeof(i2ChanStr) );
-+                                      rc = copy_to_user((char*)arg, (char*)pCh, sizeof(i2ChanStr) );
-                               } else {
-                                       rc = -ENODEV;
-                               }
-@@ -3054,60 +2918,60 @@ ip2_ipl_ioctl ( struct inode *pInode, st
-               break;
-       case 3:     // Trace device
-               if ( cmd == 1 ) {
--                      PUT_USER(rc, iiSendPendingMail, pIndex++ );
--                      PUT_USER(rc, i2InitChannels, pIndex++ );
--                      PUT_USER(rc, i2QueueNeeds, pIndex++ );
--                      PUT_USER(rc, i2QueueCommands, pIndex++ );
--                      PUT_USER(rc, i2GetStatus, pIndex++ );
--                      PUT_USER(rc, i2Input, pIndex++ );
--                      PUT_USER(rc, i2InputFlush, pIndex++ );
--                      PUT_USER(rc, i2Output, pIndex++ );
--                      PUT_USER(rc, i2FlushOutput, pIndex++ );
--                      PUT_USER(rc, i2DrainWakeup, pIndex++ );
--                      PUT_USER(rc, i2DrainOutput, pIndex++ );
--                      PUT_USER(rc, i2OutputFree, pIndex++ );
--                      PUT_USER(rc, i2StripFifo, pIndex++ );
--                      PUT_USER(rc, i2StuffFifoBypass, pIndex++ );
--                      PUT_USER(rc, i2StuffFifoFlow, pIndex++ );
--                      PUT_USER(rc, i2StuffFifoInline, pIndex++ );
--                      PUT_USER(rc, i2ServiceBoard, pIndex++ );
--                      PUT_USER(rc, serviceOutgoingFifo, pIndex++ );
--                      // PUT_USER(rc, ip2_init, pIndex++ );
--                      PUT_USER(rc, ip2_init_board, pIndex++ );
--                      PUT_USER(rc, find_eisa_board, pIndex++ );
--                      PUT_USER(rc, set_irq, pIndex++ );
--                      PUT_USER(rc, ip2_interrupt, pIndex++ );
--                      PUT_USER(rc, ip2_poll, pIndex++ );
--                      PUT_USER(rc, service_all_boards, pIndex++ );
--                      PUT_USER(rc, do_input, pIndex++ );
--                      PUT_USER(rc, do_status, pIndex++ );
-+                      rc = put_user(iiSendPendingMail, pIndex++ );
-+                      rc = put_user(i2InitChannels, pIndex++ );
-+                      rc = put_user(i2QueueNeeds, pIndex++ );
-+                      rc = put_user(i2QueueCommands, pIndex++ );
-+                      rc = put_user(i2GetStatus, pIndex++ );
-+                      rc = put_user(i2Input, pIndex++ );
-+                      rc = put_user(i2InputFlush, pIndex++ );
-+                      rc = put_user(i2Output, pIndex++ );
-+                      rc = put_user(i2FlushOutput, pIndex++ );
-+                      rc = put_user(i2DrainWakeup, pIndex++ );
-+                      rc = put_user(i2DrainOutput, pIndex++ );
-+                      rc = put_user(i2OutputFree, pIndex++ );
-+                      rc = put_user(i2StripFifo, pIndex++ );
-+                      rc = put_user(i2StuffFifoBypass, pIndex++ );
-+                      rc = put_user(i2StuffFifoFlow, pIndex++ );
-+                      rc = put_user(i2StuffFifoInline, pIndex++ );
-+                      rc = put_user(i2ServiceBoard, pIndex++ );
-+                      rc = put_user(serviceOutgoingFifo, pIndex++ );
-+                      // rc = put_user(ip2_init, pIndex++ );
-+                      rc = put_user(ip2_init_board, pIndex++ );
-+                      rc = put_user(find_eisa_board, pIndex++ );
-+                      rc = put_user(set_irq, pIndex++ );
-+                      rc = put_user(ip2_interrupt, pIndex++ );
-+                      rc = put_user(ip2_poll, pIndex++ );
-+                      rc = put_user(service_all_boards, pIndex++ );
-+                      rc = put_user(do_input, pIndex++ );
-+                      rc = put_user(do_status, pIndex++ );
- #ifndef IP2DEBUG_OPEN
--                      PUT_USER(rc, 0, pIndex++ );
-+                      rc = put_user(0, pIndex++ );
- #else
--                      PUT_USER(rc, open_sanity_check, pIndex++ );
-+                      rc = put_user(open_sanity_check, pIndex++ );
- #endif
--                      PUT_USER(rc, ip2_open, pIndex++ );
--                      PUT_USER(rc, ip2_close, pIndex++ );
--                      PUT_USER(rc, ip2_hangup, pIndex++ );
--                      PUT_USER(rc, ip2_write, pIndex++ );
--                      PUT_USER(rc, ip2_putchar, pIndex++ );
--                      PUT_USER(rc, ip2_flush_chars, pIndex++ );
--                      PUT_USER(rc, ip2_write_room, pIndex++ );
--                      PUT_USER(rc, ip2_chars_in_buf, pIndex++ );
--                      PUT_USER(rc, ip2_flush_buffer, pIndex++ );
--
--                      //PUT_USER(rc, ip2_wait_until_sent, pIndex++ );
--                      PUT_USER(rc, 0, pIndex++ );
--
--                      PUT_USER(rc, ip2_throttle, pIndex++ );
--                      PUT_USER(rc, ip2_unthrottle, pIndex++ );
--                      PUT_USER(rc, ip2_ioctl, pIndex++ );
--                      PUT_USER(rc, set_modem_info, pIndex++ );
--                      PUT_USER(rc, get_serial_info, pIndex++ );
--                      PUT_USER(rc, set_serial_info, pIndex++ );
--                      PUT_USER(rc, ip2_set_termios, pIndex++ );
--                      PUT_USER(rc, ip2_set_line_discipline, pIndex++ );
--                      PUT_USER(rc, set_params, pIndex++ );
-+                      rc = put_user(ip2_open, pIndex++ );
-+                      rc = put_user(ip2_close, pIndex++ );
-+                      rc = put_user(ip2_hangup, pIndex++ );
-+                      rc = put_user(ip2_write, pIndex++ );
-+                      rc = put_user(ip2_putchar, pIndex++ );
-+                      rc = put_user(ip2_flush_chars, pIndex++ );
-+                      rc = put_user(ip2_write_room, pIndex++ );
-+                      rc = put_user(ip2_chars_in_buf, pIndex++ );
-+                      rc = put_user(ip2_flush_buffer, pIndex++ );
-+
-+                      //rc = put_user(ip2_wait_until_sent, pIndex++ );
-+                      rc = put_user(0, pIndex++ );
-+
-+                      rc = put_user(ip2_throttle, pIndex++ );
-+                      rc = put_user(ip2_unthrottle, pIndex++ );
-+                      rc = put_user(ip2_ioctl, pIndex++ );
-+                      rc = put_user(set_modem_info, pIndex++ );
-+                      rc = put_user(get_serial_info, pIndex++ );
-+                      rc = put_user(set_serial_info, pIndex++ );
-+                      rc = put_user(ip2_set_termios, pIndex++ );
-+                      rc = put_user(ip2_set_line_discipline, pIndex++ );
-+                      rc = put_user(set_params, pIndex++ );
-               } else {
-                       rc = -EINVAL;
-               }
---- linux-2.6.0-test1/drivers/char/istallion.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/char/istallion.c        2003-07-19 17:03:49.000000000 -0700
-@@ -650,8 +650,6 @@ static unsigned int        stli_baudrates[] = {
-  */
- #ifdef MODULE
--int           init_module(void);
--void          cleanup_module(void);
- static void   stli_argbrds(void);
- static int    stli_parsebrd(stlconf_t *confp, char **argp);
---- linux-2.6.0-test1/drivers/char/keyboard.c  2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/char/keyboard.c 2003-07-19 17:04:02.000000000 -0700
-@@ -1055,6 +1055,9 @@ void kbd_keycode(unsigned int keycode, i
-       }
-       if (sysrq_down && down && !rep) {
-               handle_sysrq(kbd_sysrq_xlate[keycode], regs, tty);
-+#ifdef CONFIG_KGDB_SYSRQ
-+                sysrq_down = 0;        /* in case we miss the "up" event */
-+#endif
-               return;
-       }
- #endif
---- linux-2.6.0-test1/drivers/char/moxa.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/char/moxa.c     2003-07-19 17:03:49.000000000 -0700
-@@ -216,10 +216,7 @@ static struct timer_list moxaEmptyTimer[
- static struct semaphore moxaBuffSem;
- int moxa_init(void);
--#ifdef MODULE
--int init_module(void);
--void cleanup_module(void);
--#endif
-+
- /*
-  * static functions:
-  */
---- linux-2.6.0-test1/drivers/char/nwbutton.h  2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/char/nwbutton.h 2003-07-19 17:03:49.000000000 -0700
-@@ -32,10 +32,6 @@ int button_init (void);
- int button_add_callback (void (*callback) (void), int count);
- int button_del_callback (void (*callback) (void));
- static void button_consume_callbacks (int bpcount);
--#ifdef MODULE
--int init_module (void);
--void cleanup_module (void);
--#endif /* MODULE */
- #else /* Not compiling the driver itself */
---- linux-2.6.0-test1/drivers/char/pcxx.c      2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/char/pcxx.c     2003-07-19 17:03:49.000000000 -0700
-@@ -209,17 +209,9 @@ static void cleanup_board_resources(void
- #ifdef MODULE
--/*
-- * pcxe_init() is our init_module():
-- */
--#define pcxe_init init_module
--
--void  cleanup_module(void);
--
--
- /*****************************************************************************/
--void cleanup_module()
-+static void pcxe_cleanup()
- {
-       unsigned long   flags;
-@@ -240,6 +232,12 @@ void cleanup_module()
-       kfree(digi_channels);
-       restore_flags(flags);
- }
-+
-+/*
-+ * pcxe_init() is our init_module():
-+ */
-+module_init(pcxe_init);
-+module_cleanup(pcxe_cleanup);
- #endif
- static inline struct channel *chan(register struct tty_struct *tty)
---- linux-2.6.0-test1/drivers/char/stallion.c  2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/char/stallion.c 2003-07-19 17:03:49.000000000 -0700
-@@ -472,8 +472,6 @@ static unsigned int        stl_baudrates[] = {
-  */
- #ifdef MODULE
--int           init_module(void);
--void          cleanup_module(void);
- static void   stl_argbrds(void);
- static int    stl_parsebrd(stlconf_t *confp, char **argp);
---- linux-2.6.0-test1/drivers/char/sysrq.c     2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/char/sysrq.c    2003-07-19 17:04:02.000000000 -0700
-@@ -35,6 +35,19 @@
- #include <linux/spinlock.h>
- #include <asm/ptrace.h>
-+#ifdef CONFIG_KGDB_SYSRQ
-+
-+#define  GDB_OP &kgdb_op
-+static struct sysrq_key_op kgdb_op={
-+      handler:        (void*)breakpoint,
-+      help_msg:       "kGdb ",
-+      action_msg:     "Debug breakpoint\n",
-+};
-+
-+#else
-+#define  GDB_OP NULL
-+#endif
-+
- extern void reset_vc(unsigned int);
- extern struct list_head super_blocks;
-@@ -240,7 +253,7 @@ static struct sysrq_key_op *sysrq_key_ta
- /* d */       NULL,
- /* e */       &sysrq_term_op,
- /* f */       NULL,
--/* g */       NULL,
-+/* g */       GDB_OP,
- /* h */       NULL,
- /* i */       &sysrq_kill_op,
- /* j */       NULL,
---- linux-2.6.0-test1/drivers/char/tty_io.c    2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/char/tty_io.c   2003-07-19 17:06:13.000000000 -0700
-@@ -2106,7 +2106,7 @@ static spinlock_t tty_dev_list_lock = SP
- static ssize_t show_dev(struct class_device *class_dev, char *buf)
- {
-       struct tty_dev *tty_dev = to_tty_dev(class_dev);
--      return sprintf(buf, "%04lx\n", (unsigned long)tty_dev->dev);
-+      return print_dev_t(buf, tty_dev->dev);
- }
- static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL);
---- linux-2.6.0-test1/drivers/char/watchdog/acquirewdt.c       2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/char/watchdog/acquirewdt.c      2003-07-19 17:03:49.000000000 -0700
-@@ -143,7 +143,7 @@ static int acq_open(struct inode *inode,
-                       return -EBUSY;
-               }
-               if (nowayout)
--                      MOD_INC_USE_COUNT;
-+                      __module_get(THIS_MODULE);
-               /* Activate */
-               acq_is_open=1;
---- linux-2.6.0-test1/drivers/char/watchdog/i810-tco.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/char/watchdog/i810-tco.c        2003-07-19 17:03:49.000000000 -0700
-@@ -25,7 +25,8 @@
-  *    82801AA & 82801AB  chip : document number 290655-003, 290677-004,
-  *    82801BA & 82801BAM chip : document number 290687-002, 298242-005,
-  *    82801CA & 82801CAM chip : document number 290716-001, 290718-001,
-- *    82801DB & 82801E   chip : document number 290744-001, 273599-001
-+ *    82801DB & 82801E   chip : document number 290744-001, 273599-001,
-+ *    82801EB & 82801ER  chip : document number 252516-001
-  *
-  *  20000710 Nils Faerber
-  *    Initial Version 0.01
-@@ -42,9 +43,11 @@
-  *         clean up ioctls (WDIOC_GETSTATUS, WDIOC_GETBOOTSTATUS and
-  *         WDIOC_SETOPTIONS), made i810tco_getdevice __init,
-  *         removed boot_status, removed tco_timer_read,
-- *         added support for 82801DB and 82801E chipset, general cleanup.
-+ *         added support for 82801DB and 82801E chipset,
-+ *         added support for 82801EB and 8280ER chipset,
-+ *         general cleanup.
-  */
-- 
-+
- #include <linux/module.h>
- #include <linux/types.h>
- #include <linux/miscdevice.h>
-@@ -164,7 +167,7 @@ static int tco_timer_settimer (unsigned 
-  * Reload (trigger) the timer. Lock is needed so we don't reload it during
-  * a reprogramming event
-  */
-- 
-+
- static void tco_timer_reload (void)
- {
-       spin_lock(&tco_lock);
-@@ -307,6 +310,7 @@ static struct pci_device_id i810tco_pci_
-       { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12,  PCI_ANY_ID, PCI_ANY_ID, },
-       { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0,   PCI_ANY_ID, PCI_ANY_ID, },
-       { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801E_0,    PCI_ANY_ID, PCI_ANY_ID, },
-+      { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0,   PCI_ANY_ID, PCI_ANY_ID, },
-       { 0, },
- };
- MODULE_DEVICE_TABLE (pci, i810tco_pci_tbl);
---- linux-2.6.0-test1/drivers/char/watchdog/i810-tco.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/char/watchdog/i810-tco.h        2003-07-19 17:03:49.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- *    i810-tco 0.05:  TCO timer driver for i8xx chipsets
-+ *    i810-tco:       TCO timer driver for i8xx chipsets
-  *
-  *    (c) Copyright 2000 kernel concepts <nils@kernelconcepts.de>, All Rights Reserved.
-  *                            http://www.kernelconcepts.de
-@@ -8,7 +8,7 @@
-  *    modify it under the terms of the GNU General Public License
-  *    as published by the Free Software Foundation; either version
-  *    2 of the License, or (at your option) any later version.
-- *    
-+ *
-  *    Neither kernel concepts nor Nils Faerber admit liability nor provide
-  *    warranty for any of this software. This material is provided
-  *    "AS-IS" and at no charge.
---- linux-2.6.0-test1/drivers/char/watchdog/ib700wdt.c 2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/char/watchdog/ib700wdt.c        2003-07-19 17:03:49.000000000 -0700
-@@ -230,7 +230,7 @@ ibwdt_open(struct inode *inode, struct f
-                       return -EBUSY;
-               }
-               if (nowayout)
--                      MOD_INC_USE_COUNT;
-+                      __module_get(THIS_MODULE);
-               /* Activate */
-               ibwdt_is_open = 1;
---- linux-2.6.0-test1/drivers/char/watchdog/indydog.c  2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/char/watchdog/indydog.c 2003-07-19 17:03:49.000000000 -0700
-@@ -54,7 +54,7 @@ static int indydog_open(struct inode *in
-               return -EBUSY;
-       if (nowayout)
--              MOD_INC_USE_COUNT;
-+              __module_get(THIS_MODULE);
-       /*
-        *      Activate timer
---- linux-2.6.0-test1/drivers/char/watchdog/machzwd.c  2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/char/watchdog/machzwd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -392,7 +392,7 @@ static int zf_open(struct inode *inode, 
-                       }
-                       if (nowayout)
--                              MOD_INC_USE_COUNT;
-+                              __module_get(THIS_MODULE);
-                       zf_is_open = 1;
---- linux-2.6.0-test1/drivers/char/watchdog/pcwd.c     2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/char/watchdog/pcwd.c    2003-07-19 17:03:49.000000000 -0700
-@@ -431,7 +431,7 @@ static int pcwd_open(struct inode *ino, 
-                       atomic_inc( &open_allowed );
-                       return -EBUSY;
-               }
--              MOD_INC_USE_COUNT;
-+              __module_get(THIS_MODULE);
-               /*  Enable the port  */
-               if (revision == PCWD_REVISION_C) {
-                       spin_lock(&io_lock);
---- linux-2.6.0-test1/drivers/char/watchdog/sbc60xxwdt.c       2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/char/watchdog/sbc60xxwdt.c      2003-07-19 17:03:49.000000000 -0700
-@@ -207,9 +207,8 @@ static int fop_open(struct inode * inode
-                       /* Just in case we're already talking to someone... */
-                       if(wdt_is_open)
-                               return -EBUSY;
--                      if (nowayout) {
--                              MOD_INC_USE_COUNT;
--                      }
-+                      if (nowayout) 
-+                              __module_get(THIS_MODULE);
-                       /* Good, fire up the show */
-                       wdt_is_open = 1;
-                       wdt_startup();
---- linux-2.6.0-test1/drivers/char/watchdog/sc520_wdt.c        2003-06-14 12:18:20.000000000 -0700
-+++ 25/drivers/char/watchdog/sc520_wdt.c       2003-07-19 17:03:49.000000000 -0700
-@@ -231,7 +231,7 @@ static int fop_open(struct inode * inode
-                       /* Good, fire up the show */
-                       wdt_startup();
-                       if (nowayout)
--                              MOD_INC_USE_COUNT;
-+                              __module_get(THIS_MODULE);
-                       return 0;
-               default:
---- linux-2.6.0-test1/drivers/char/watchdog/shwdt.c    2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/char/watchdog/shwdt.c   2003-07-19 17:03:49.000000000 -0700
-@@ -3,7 +3,7 @@
-  *
-  * Watchdog driver for integrated watchdog in the SuperH processors.
-  *
-- * Copyright (C) 2001, 2002 Paul Mundt <lethal@0xd6.org>
-+ * Copyright (C) 2001, 2002, 2003 Paul Mundt <lethal@linux-sh.org>
-  *
-  * This program is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU General Public License as published by the
-@@ -12,6 +12,10 @@
-  *
-  * 14-Dec-2001 Matt Domsch <Matt_Domsch@dell.com>
-  *     Added nowayout module option to override CONFIG_WATCHDOG_NOWAYOUT
-+ *
-+ * 19-Apr-2002 Rob Radez <rob@osinvestor.com>
-+ *     Added expect close support, made emulated timeout runtime changeable
-+ *     general cleanups, add some ioctls
-  */
- #include <linux/config.h>
- #include <linux/module.h>
-@@ -22,76 +26,50 @@
- #include <linux/reboot.h>
- #include <linux/notifier.h>
- #include <linux/ioport.h>
-+#include <linux/fs.h>
- #include <asm/io.h>
- #include <asm/uaccess.h>
--
--#if defined(CONFIG_CPU_SH5)
--  #define WTCNT               CPRC_BASE + 0x10
--  #define WTCSR               CPRC_BASE + 0x18
--#elif defined(CONFIG_CPU_SH4)
--  #define WTCNT               0xffc00008
--  #define WTCSR               0xffc0000c
--#elif defined(CONFIG_CPU_SH3)
--  #define WTCNT               0xffffff84
--  #define WTCSR               0xffffff86
--#else
--  #error "Can't use SuperH watchdog on this platform"
--#endif
--
--#define WTCNT_HIGH    0x5a00
--#define WTCSR_HIGH    0xa500
--
--#define WTCSR_TME     0x80
--#define WTCSR_WT      0x40
--#define WTCSR_RSTS    0x20
--#define WTCSR_WOVF    0x10
--#define WTCSR_IOVF    0x08
--#define WTCSR_CKS2    0x04
--#define WTCSR_CKS1    0x02
--#define WTCSR_CKS0    0x01
--
--/*
-- * CKS0-2 supports a number of clock division ratios. At the time the watchdog
-- * is enabled, it defaults to a 41 usec overflow period .. we overload this to
-- * something a little more reasonable, and really can't deal with anything
-- * lower than WTCSR_CKS_1024, else we drop back into the usec range.
-- *
-- * Clock Division Ratio         Overflow Period
-- * --------------------------------------------
-- *     1/32 (initial value)       41 usecs
-- *     1/64                       82 usecs
-- *     1/128                     164 usecs
-- *     1/256                     328 usecs
-- *     1/512                     656 usecs
-- *     1/1024                   1.31 msecs
-- *     1/2048                   2.62 msecs
-- *     1/4096                   5.25 msecs
-- */
--#define WTCSR_CKS_32  0x00
--#define WTCSR_CKS_64  0x01
--#define WTCSR_CKS_128 0x02
--#define WTCSR_CKS_256 0x03
--#define WTCSR_CKS_512 0x04
--#define WTCSR_CKS_1024        0x05
--#define WTCSR_CKS_2048        0x06
--#define WTCSR_CKS_4096        0x07
-+#include <asm/watchdog.h>
- /*
-- * Default clock division ratio is 5.25 msecs. Overload this at module load
-- * time. Any value not in the msec range will default to a timeout of one
-- * jiffy, which exceeds the usec overflow periods.
-+ * Default clock division ratio is 5.25 msecs. For an additional table of
-+ * values, consult the asm-sh/watchdog.h. Overload this at module load
-+ * time. 
-+ *
-+ * In order for this to work reliably we need to have HZ set to 1000 or
-+ * something quite higher than 100 (or we need a proper high-res timer
-+ * implementation that will deal with this properly), otherwise the 10ms
-+ * resolution of a jiffy is enough to trigger the overflow. For things like
-+ * the SH-4 and SH-5, this isn't necessarily that big of a problem, though
-+ * for the SH-2 and SH-3, this isn't recommended unless the WDT is absolutely
-+ * necssary.
-+ *
-+ * As a result of this timing problem, the only modes that are particularly
-+ * feasible are the 4096 and the 2048 divisors, which yeild 5.25 and 2.62ms
-+ * overflow periods respectively.
-+ *
-+ * Also, since we can't really expect userspace to be responsive enough
-+ * before the overflow happens, we maintain two seperate timers .. One in
-+ * the kernel for clearing out WOVF every 2ms or so (again, this depends on
-+ * HZ == 1000), and another for monitoring userspace writes to the WDT device.
-+ *
-+ * As such, we currently use a configurable heartbeat interval which defaults
-+ * to 30s. In this case, the userspace daemon is only responsible for periodic
-+ * writes to the device before the next heartbeat is scheduled. If the daemon
-+ * misses its deadline, the kernel timer will allow the WDT to overflow.
-  */
- static int clock_division_ratio = WTCSR_CKS_4096;
--#define msecs_to_jiffies(msecs)       (jiffies + ((HZ * msecs + 999) / 1000))
-+#define msecs_to_jiffies(msecs)       (jiffies + (HZ * msecs + 9999) / 10000)
- #define next_ping_period(cks) msecs_to_jiffies(cks - 4)
--#define user_ping_period(cks) (next_ping_period(cks) * 10)
--static unsigned long sh_is_open = 0;
-+static unsigned long shwdt_is_open;
- static struct watchdog_info sh_wdt_info;
-+static char shwdt_expect_close;
- static struct timer_list timer;
- static unsigned long next_heartbeat;
-+static int heartbeat = 30;
- #ifdef CONFIG_WATCHDOG_NOWAYOUT
- static int nowayout = 1;
-@@ -99,35 +77,6 @@ static int nowayout = 1;
- static int nowayout = 0;
- #endif
--MODULE_PARM(nowayout,"i");
--MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
--
--/**
-- *    sh_wdt_write_cnt - Write to Counter
-- *
-- *    @val: Value to write
-- *
-- *    Writes the given value @val to the lower byte of the timer counter.
-- *    The upper byte is set manually on each write.
-- */
--static void sh_wdt_write_cnt(__u8 val)
--{
--      ctrl_outw(WTCNT_HIGH | (__u16)val, WTCNT);
--}
--
--/**
-- *    sh_wdt_write_csr - Write to Control/Status Register
-- *
-- *    @val: Value to write
-- *
-- *    Writes the given value @val to the lower byte of the control/status
-- *    register. The upper byte is set manually on each write.
-- */
--static void sh_wdt_write_csr(__u8 val)
--{
--      ctrl_outw(WTCSR_HIGH | (__u16)val, WTCSR);
--}
--
- /**
-  *    sh_wdt_start - Start the Watchdog
-  *
-@@ -135,13 +84,44 @@ static void sh_wdt_write_csr(__u8 val)
-  */
- static void sh_wdt_start(void)
- {
--      timer.expires = next_ping_period(clock_division_ratio);
--      next_heartbeat = user_ping_period(clock_division_ratio);
--      add_timer(&timer);
-+      __u8 csr;
-+
-+      mod_timer(&timer, next_ping_period(clock_division_ratio));
-+      next_heartbeat = jiffies + (heartbeat * HZ);
-+
-+      csr = sh_wdt_read_csr();
-+      csr |= WTCSR_WT | clock_division_ratio;
-+      sh_wdt_write_csr(csr);
--      sh_wdt_write_csr(WTCSR_WT | WTCSR_CKS_4096);
-       sh_wdt_write_cnt(0);
--      sh_wdt_write_csr((ctrl_inb(WTCSR) | WTCSR_TME));
-+
-+      /*
-+       * These processors have a bit of an inconsistent initialization
-+       * process.. starting with SH-3, RSTS was moved to WTCSR, and the
-+       * RSTCSR register was removed.
-+       *
-+       * On the SH-2 however, in addition with bits being in different
-+       * locations, we must deal with RSTCSR outright..
-+       */
-+      csr = sh_wdt_read_csr();
-+      csr |= WTCSR_TME;
-+      csr &= ~WTCSR_RSTS;
-+      sh_wdt_write_csr(csr);
-+
-+#ifdef CONFIG_CPU_SH2
-+      /*
-+       * Whoever came up with the RSTCSR semantics must've been smoking
-+       * some of the good stuff, since in addition to the WTCSR/WTCNT write
-+       * brain-damage, it's managed to fuck things up one step further..
-+       *
-+       * If we need to clear the WOVF bit, the upper byte has to be 0xa5..
-+       * but if we want to touch RSTE or RSTS, the upper byte has to be
-+       * 0x5a..
-+       */
-+      csr = sh_wdt_read_rstcsr();
-+      csr &= ~RSTCSR_RSTS;
-+      sh_wdt_write_rstcsr(csr);
-+#endif        
- }
- /**
-@@ -151,9 +131,13 @@ static void sh_wdt_start(void)
-  */
- static void sh_wdt_stop(void)
- {
-+      __u8 csr;
-+
-       del_timer(&timer);
--      sh_wdt_write_csr((ctrl_inb(WTCSR) & ~WTCSR_TME));
-+      csr = sh_wdt_read_csr();
-+      csr &= ~WTCSR_TME;
-+      sh_wdt_write_csr(csr);
- }
- /**
-@@ -166,11 +150,15 @@ static void sh_wdt_stop(void)
- static void sh_wdt_ping(unsigned long data)
- {
-       if (time_before(jiffies, next_heartbeat)) {
--              sh_wdt_write_csr((ctrl_inb(WTCSR) & ~WTCSR_IOVF));
-+              __u8 csr;
-+
-+              csr = sh_wdt_read_csr();
-+              csr &= ~WTCSR_IOVF;
-+              sh_wdt_write_csr(csr);
-+
-               sh_wdt_write_cnt(0);
--              timer.expires = next_ping_period(clock_division_ratio);
--              add_timer(&timer);
-+              mod_timer(&timer, next_ping_period(clock_division_ratio));
-       }
- }
-@@ -184,21 +172,12 @@ static void sh_wdt_ping(unsigned long da
-  */
- static int sh_wdt_open(struct inode *inode, struct file *file)
- {
--      switch (minor(inode->i_rdev)) {
--              case WATCHDOG_MINOR:
--                      if (test_and_set_bit(0, &sh_is_open))
--                              return -EBUSY;
-+      if (test_and_set_bit(0, &shwdt_is_open))
-+              return -EBUSY;
-+      if (nowayout)
-+              __module_get(THIS_MODULE);
--                      if (nowayout) {
--                              MOD_INC_USE_COUNT;
--                      }
--
--                      sh_wdt_start();
--
--                      break;
--              default:
--                      return -ENODEV;
--      }
-+      sh_wdt_start();
-       return 0;
- }
-@@ -213,33 +192,20 @@ static int sh_wdt_open(struct inode *ino
-  */
- static int sh_wdt_close(struct inode *inode, struct file *file)
- {
--      if (minor(inode->i_rdev) == WATCHDOG_MINOR) {
--              if (!nowayout) {
--                      sh_wdt_stop();
--              }
--              clear_bit(0, &sh_is_open);
-+      if (!nowayout && shwdt_expect_close == 42) {
-+              sh_wdt_stop();
-+      } else {
-+              printk(KERN_CRIT "shwdt: Unexpected close, not stopping watchdog!\n");
-+              next_heartbeat = jiffies + (heartbeat * HZ);
-       }
-+
-+      clear_bit(0, &shwdt_is_open);
-+      shwdt_expect_close = 0;
-       
-       return 0;
- }
- /**
-- *    sh_wdt_read - Read from Device
-- *
-- *    @file: file handle of device
-- *    @buf: buffer to write to
-- *    @count: length of buffer
-- *    @ppos: offset
-- *
-- *    Unsupported.
-- */
--static ssize_t sh_wdt_read(struct file *file, char *buf,
--                         size_t count, loff_t *ppos)
--{
--      return -EINVAL;
--}
--
--/**
-  *    sh_wdt_write - Write to Device
-  *
-  *    @file: file handle of device
-@@ -257,11 +223,21 @@ static ssize_t sh_wdt_write(struct file 
-               return -ESPIPE;
-       if (count) {
--              next_heartbeat = user_ping_period(clock_division_ratio);
--              return 1;
-+              size_t i;
-+
-+              shwdt_expect_close = 0;
-+
-+              for (i = 0; i != count; i++) {
-+                      char c;
-+                      if (get_user(c, buf + i))
-+                              return -EFAULT;
-+                      if (c == 'V')
-+                              shwdt_expect_close = 42;
-+              }
-+              next_heartbeat = jiffies + (heartbeat * HZ);
-       }
--      return 0;
-+      return count;
- }
- /**
-@@ -278,6 +254,8 @@ static ssize_t sh_wdt_write(struct file 
- static int sh_wdt_ioctl(struct inode *inode, struct file *file,
-                       unsigned int cmd, unsigned long arg)
- {
-+      int new_timeout;
-+
-       switch (cmd) {
-               case WDIOC_GETSUPPORT:
-                       if (copy_to_user((struct watchdog_info *)arg,
-@@ -288,17 +266,41 @@ static int sh_wdt_ioctl(struct inode *in
-                       
-                       break;
-               case WDIOC_GETSTATUS:
--                      if (copy_to_user((int *)arg,
--                                       &sh_is_open,
--                                       sizeof(int))) {
-+              case WDIOC_GETBOOTSTATUS:
-+                      return put_user(0, (int *)arg);
-+              case WDIOC_KEEPALIVE:
-+                      next_heartbeat = jiffies + (heartbeat * HZ);
-+
-+                      break;
-+              case WDIOC_SETTIMEOUT:
-+                      if (get_user(new_timeout, (int *)arg))
-                               return -EFAULT;
-+                      if (new_timeout < 1 || new_timeout > 3600) /* arbitrary upper limit */
-+                              return -EINVAL;
-+                      heartbeat = new_timeout;
-+                      next_heartbeat = jiffies + (heartbeat * HZ);
-+                      /* Fall */
-+              case WDIOC_GETTIMEOUT:
-+                      return put_user(heartbeat, (int *)arg);
-+              case WDIOC_SETOPTIONS:
-+              {
-+                      int options, retval = -EINVAL;
-+
-+                      if (get_user(options, (int *)arg))
-+                              return -EFAULT;
-+
-+                      if (options & WDIOS_DISABLECARD) {
-+                              sh_wdt_stop();
-+                              retval = 0;
-                       }
--                      break;
--              case WDIOC_KEEPALIVE:
--                      next_heartbeat = user_ping_period(clock_division_ratio);
-+                      if (options & WDIOS_ENABLECARD) {
-+                              sh_wdt_start();
-+                              retval = 0;
-+                      }
-                       
--                      break;
-+                      return retval;
-+              }
-               default:
-                       return -ENOTTY;
-       }
-@@ -328,7 +330,7 @@ static int sh_wdt_notify_sys(struct noti
- static struct file_operations sh_wdt_fops = {
-       .owner          = THIS_MODULE,
--      .read           = sh_wdt_read,
-+      .llseek         = no_llseek,
-       .write          = sh_wdt_write,
-       .ioctl          = sh_wdt_ioctl,
-       .open           = sh_wdt_open,
-@@ -336,21 +338,20 @@ static struct file_operations sh_wdt_fop
- };
- static struct watchdog_info sh_wdt_info = {
--      .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
--      .firmware_version = 1,
--      .identity = "SH WDT",
-+      .options                = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
-+      .firmware_version       = 1,
-+      .identity               = "SH WDT",
- };
- static struct notifier_block sh_wdt_notifier = {
--      .notifier_call = sh_wdt_notify_sys,
--      .next = NULL,
--      .priority = 0
-+      .notifier_call          = sh_wdt_notify_sys,
-+      .priority               = 0,
- };
- static struct miscdevice sh_wdt_miscdev = {
--      .minor = WATCHDOG_MINOR,
--      .name = "watchdog",
--      .fops &sh_wdt_fops,
-+      .minor          = WATCHDOG_MINOR,
-+      .name           = "watchdog",
-+      .fops           = &sh_wdt_fops,
- };
- /**
-@@ -366,23 +367,8 @@ static int __init sh_wdt_init(void)
-               return -EINVAL;
-       }
--      if (!request_region(WTCNT, 1, "shwdt")) {
--              printk(KERN_ERR "shwdt: Can't request WTCNT region\n");
--              misc_deregister(&sh_wdt_miscdev);
--              return -ENXIO;
--      }
--
--      if (!request_region(WTCSR, 1, "shwdt")) {
--              printk(KERN_ERR "shwdt: Can't request WTCSR region\n");
--              release_region(WTCNT, 1);
--              misc_deregister(&sh_wdt_miscdev);
--              return -ENXIO;
--      }
--
-       if (register_reboot_notifier(&sh_wdt_notifier)) {
-               printk(KERN_ERR "shwdt: Can't register reboot notifier\n");
--              release_region(WTCSR, 1);
--              release_region(WTCNT, 1);
-               misc_deregister(&sh_wdt_miscdev);
-               return -EINVAL;
-       }
-@@ -403,16 +389,16 @@ static int __init sh_wdt_init(void)
- static void __exit sh_wdt_exit(void)
- {
-       unregister_reboot_notifier(&sh_wdt_notifier);
--      release_region(WTCSR, 1);
--      release_region(WTCNT, 1);
-       misc_deregister(&sh_wdt_miscdev);
- }
--MODULE_AUTHOR("Paul Mundt <lethal@0xd6.org>");
-+MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>");
- MODULE_DESCRIPTION("SuperH watchdog driver");
- MODULE_LICENSE("GPL");
- MODULE_PARM(clock_division_ratio, "i");
- MODULE_PARM_DESC(clock_division_ratio, "Clock division ratio. Valid ranges are from 0x5 (1.31ms) to 0x7 (5.25ms). Defaults to 0x7.");
-+MODULE_PARM(nowayout,"i");
-+MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT)");
- module_init(sh_wdt_init);
- module_exit(sh_wdt_exit);
---- linux-2.6.0-test1/drivers/char/watchdog/softdog.c  2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/char/watchdog/softdog.c 2003-07-19 17:03:49.000000000 -0700
-@@ -104,9 +104,8 @@ static int softdog_open(struct inode *in
- {
-       if(test_and_set_bit(0, &timer_alive))
-               return -EBUSY;
--      if (nowayout) {
--              MOD_INC_USE_COUNT;
--      }
-+      if (nowayout) 
-+              __module_get(THIS_MODULE);
-       /*
-        *      Activate timer
-        */
---- linux-2.6.0-test1/drivers/char/watchdog/wdt977.c   2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/char/watchdog/wdt977.c  2003-07-19 17:03:49.000000000 -0700
-@@ -16,6 +16,8 @@
-  *    19-Dec-2001 Woody Suwalski: Netwinder fixes, ioctl interface
-  *    06-Jan-2002 Woody Suwalski: For compatibility, convert all timeouts
-  *                                from minutes to seconds.
-+ *      07-Jul-2003 Daniele Bellucci: Audit return code of misc_register in
-+ *                                    nwwatchdog_init.
-  */
- #include <linux/module.h>
-@@ -99,7 +101,7 @@ static int wdt977_open(struct inode *ino
-       if (nowayout)
-       {
--              MOD_INC_USE_COUNT;
-+              __module_get(THIS_MODULE);
-               /* do not permit disabling the watchdog by writing 0 to reg. 0xF2 */
-               if (!timeoutM) timeoutM = DEFAULT_TIMEOUT;
-@@ -343,12 +345,14 @@ static struct miscdevice wdt977_miscdev=
- static int __init nwwatchdog_init(void)
- {
-+      int retval;
-       if (!machine_is_netwinder())
-               return -ENODEV;
--      misc_register(&wdt977_miscdev);
--      printk(KERN_INFO "Wdt977 Watchdog sleeping.\n");
--      return 0;
-+      retval = misc_register(&wdt977_miscdev);
-+      if (!retval)
-+              printk(KERN_INFO "Wdt977 Watchdog sleeping.\n");
-+      return retval;
- }
- static void __exit nwwatchdog_exit(void)
---- linux-2.6.0-test1/drivers/char/watchdog/wdt_pci.c  2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/char/watchdog/wdt_pci.c 2003-07-19 17:03:49.000000000 -0700
-@@ -367,7 +367,7 @@ static int wdtpci_open(struct inode *ino
-                               return -EBUSY;
-                       if (nowayout) {
--                              MOD_INC_USE_COUNT;
-+                              __module_get(THIS_MODULE);
-                       }
-                       /*
-                        *      Activate 
---- linux-2.6.0-test1/drivers/fc4/fc.c 2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/fc4/fc.c        2003-07-19 17:03:49.000000000 -0700
-@@ -33,7 +33,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/init.h>
--#include <linux/blk.h>
- #include <asm/pgtable.h>
- #include <asm/irq.h>
---- linux-2.6.0-test1/drivers/fc4/fcp_impl.h   2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/fc4/fcp_impl.h  2003-07-19 17:03:49.000000000 -0700
-@@ -8,7 +8,6 @@
- #define _FCP_SCSI_H
- #include <linux/types.h>
--#include <linux/blk.h>
- #include "../scsi/scsi.h"
- #include "fc.h"
---- linux-2.6.0-test1/drivers/i2c/i2c-dev.c    2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/i2c/i2c-dev.c   2003-07-19 17:06:13.000000000 -0700
-@@ -118,7 +118,7 @@ static void return_i2c_dev(struct i2c_de
- static ssize_t show_dev(struct class_device *class_dev, char *buf)
- {
-       struct i2c_dev *i2c_dev = to_i2c_dev(class_dev);
--      return sprintf(buf, "%04x\n", MKDEV(I2C_MAJOR, i2c_dev->minor));
-+      return print_dev_t(buf, MKDEV(I2C_MAJOR, i2c_dev->minor));
- }
- static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL);
---- linux-2.6.0-test1/drivers/ide/ide-disk.c   2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/ide/ide-disk.c  2003-07-19 17:07:19.000000000 -0700
-@@ -1665,6 +1665,10 @@ static void idedisk_setup (ide_drive_t *
-       drive->no_io_32bit = id->dword_io ? 1 : 0;
-       if (drive->id->cfs_enable_2 & 0x3000)
-               write_cache(drive, (id->cfs_enable_2 & 0x3000));
-+
-+#ifdef CONFIG_BLK_DEV_IDE_TCQ_DEFAULT
-+      HWIF(drive)->ide_dma_queued_on(drive);
-+#endif
- }
- static int idedisk_cleanup (ide_drive_t *drive)
---- linux-2.6.0-test1/drivers/ide/ide-dma.c    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ide/ide-dma.c   2003-07-19 17:07:19.000000000 -0700
-@@ -442,9 +442,10 @@ static int config_drive_for_dma (ide_dri
-  *    the driver to resolve the problem, if a DMA transfer is still
-  *    in progress we continue to wait (arguably we need to add a 
-  *    secondary 'I don't care what the drive thinks' timeout here)
-- *    Finally if we have an interrupt but for some reason got the
-- *    timeout first we complete the I/O. This can occur if an 
-- *    interrupt is lost or due to bugs.
-+ *    Finally if we have an interrupt we let it complete the I/O.
-+ *    But only one time - we clear expiry and if it's still not
-+ *    completed after WAIT_CMD, we error and retry in PIO.
-+ *    This can occur if an interrupt is lost or due to hang or bugs.
-  */
-  
- static int dma_timer_expiry (ide_drive_t *drive)
-@@ -461,19 +462,16 @@ static int dma_timer_expiry (ide_drive_t
-       HWGROUP(drive)->expiry = NULL;  /* one free ride for now */
-       /* 1 dmaing, 2 error, 4 intr */
--      
--      if (dma_stat & 2) {     /* ERROR */
--              (void) hwif->ide_dma_end(drive);
--              return DRIVER(drive)->error(drive,
--                      "dma_timer_expiry", hwif->INB(IDE_STATUS_REG));
--      }
-+      if (dma_stat & 2)       /* ERROR */
-+              return -1;
-+
-       if (dma_stat & 1)       /* DMAing */
-               return WAIT_CMD;
-       if (dma_stat & 4)       /* Got an Interrupt */
--              HWGROUP(drive)->handler(drive);
-+              return WAIT_CMD;
--      return 0;
-+      return 0;       /* Status is unknown -- reset the bus */
- }
- /**
-@@ -572,10 +570,6 @@ int __ide_dma_on (ide_drive_t *drive)
-       if (HWIF(drive)->ide_dma_host_on(drive))
-               return 1;
--#ifdef CONFIG_BLK_DEV_IDE_TCQ_DEFAULT
--      HWIF(drive)->ide_dma_queued_on(drive);
--#endif
--
-       return 0;
- }
---- linux-2.6.0-test1/drivers/ide/ide-io.c     2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ide/ide-io.c    2003-07-19 17:03:49.000000000 -0700
-@@ -949,14 +949,14 @@ queue_next:
-                * happens anyway when any interrupt comes in, IDE or otherwise
-                *  -- the kernel masks the IRQ while it is being handled.
-                */
--              if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)
-+              if (hwif->irq != masked_irq)
-                       disable_irq_nosync(hwif->irq);
-               spin_unlock(&ide_lock);
-               local_irq_enable();
-                       /* allow other IRQs while we start this request */
-               startstop = start_request(drive, rq);
-               spin_lock_irq(&ide_lock);
--              if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)
-+              if (hwif->irq != masked_irq)
-                       enable_irq(hwif->irq);
-               if (startstop == ide_released)
-                       goto queue_next;
-@@ -980,21 +980,25 @@ void do_ide_request(request_queue_t *q)
-  * retry the current request in pio mode instead of risking tossing it
-  * all away
-  */
--void ide_dma_timeout_retry(ide_drive_t *drive)
-+static ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error)
- {
-       ide_hwif_t *hwif = HWIF(drive);
-       struct request *rq;
-+      ide_startstop_t ret = ide_stopped;
-       /*
-        * end current dma transaction
-        */
--      (void) hwif->ide_dma_end(drive);
--      /*
--       * complain a little, later we might remove some of this verbosity
--       */
--      printk(KERN_WARNING "%s: timeout waiting for DMA\n", drive->name);
--      (void) hwif->ide_dma_timeout(drive);
-+      if (error < 0) {
-+              printk(KERN_WARNING "%s: DMA timeout error\n", drive->name);
-+              (void)HWIF(drive)->ide_dma_end(drive);
-+              ret = DRIVER(drive)->error(drive, "dma timeout error",
-+                                              hwif->INB(IDE_STATUS_REG));
-+      } else {
-+              printk(KERN_WARNING "%s: DMA timeout retry\n", drive->name);
-+              (void) hwif->ide_dma_timeout(drive);
-+      }
-       /*
-        * disable dma for now, but remember that we did so because of
-@@ -1018,9 +1022,9 @@ void ide_dma_timeout_retry(ide_drive_t *
-       rq->hard_cur_sectors = rq->current_nr_sectors;
-       if (rq->bio)
-               rq->buffer = NULL;
--}
--EXPORT_SYMBOL(ide_dma_timeout_retry);
-+      return ret;
-+}
- /**
-  *    ide_timer_expiry        -       handle lack of an IDE interrupt
-@@ -1041,11 +1045,10 @@ void ide_timer_expiry (unsigned long dat
-       ide_hwgroup_t   *hwgroup = (ide_hwgroup_t *) data;
-       ide_handler_t   *handler;
-       ide_expiry_t    *expiry;
--      unsigned long   flags;
--      unsigned long   wait;
-+      unsigned long   flags;
-+      unsigned long   wait = -1;
-       spin_lock_irqsave(&ide_lock, flags);
--      del_timer(&hwgroup->timer);
-       if ((handler = hwgroup->handler) == NULL) {
-               /*
-@@ -1072,7 +1075,7 @@ void ide_timer_expiry (unsigned long dat
-                       }
-                       if ((expiry = hwgroup->expiry) != NULL) {
-                               /* continue */
--                              if ((wait = expiry(drive)) != 0) {
-+                              if ((wait = expiry(drive)) > 0) {
-                                       /* reset timer */
-                                       hwgroup->timer.expires  = jiffies + wait;
-                                       add_timer(&hwgroup->timer);
-@@ -1107,15 +1110,15 @@ void ide_timer_expiry (unsigned long dat
-                               startstop = handler(drive);
-                       } else {
-                               if (drive->waiting_for_dma) {
--                                      startstop = ide_stopped;
--                                      ide_dma_timeout_retry(drive);
-+                                      startstop = ide_dma_timeout_retry(drive, wait);
-                               } else
--                                      startstop = DRIVER(drive)->error(drive, "irq timeout", hwif->INB(IDE_STATUS_REG));
-+                                      startstop =
-+                                      DRIVER(drive)->error(drive, "irq timeout", hwif->INB(IDE_STATUS_REG));
-                       }
-                       set_recovery_timer(hwif);
-                       drive->service_time = jiffies - drive->service_start;
--                      enable_irq(hwif->irq);
-                       spin_lock_irq(&ide_lock);
-+                      enable_irq(hwif->irq);
-                       if (startstop == ide_stopped)
-                               hwgroup->busy = 0;
-               }
---- linux-2.6.0-test1/drivers/ide/Kconfig      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ide/Kconfig     2003-07-19 17:03:49.000000000 -0700
-@@ -521,7 +521,7 @@ config BLK_DEV_ALI15X3
-         If you say Y here, you also need to say Y to "Use DMA by default
-         when available", above.  Please read the comments at the top of
--        <file:drivers/ide/alim15x3.c>.
-+        <file:drivers/ide/pci/alim15x3.c>.
-         If unsure, say N.
-@@ -608,7 +608,7 @@ config HPT34X_AUTODMA
-       depends on BLK_DEV_HPT34X && IDEDMA_PCI_WIP
-       help
-         This is a dangerous thing to attempt currently! Please read the
--        comments at the top of <file:drivers/ide/hpt34x.c>.  If you say Y
-+        comments at the top of <file:drivers/ide/pci/hpt34x.c>.  If you say Y
-         here, then say Y to "Use DMA by default when available" as well.
-         If unsure, say N.
-@@ -670,14 +670,14 @@ config BLK_DEV_NS87415
-         This driver adds detection and support for the NS87415 chip
-         (used in SPARC64, among others).
--        Please read the comments at the top of <file:drivers/ide/ns87415.c>.
-+        Please read the comments at the top of <file:drivers/ide/pci/ns87415.c>.
- config BLK_DEV_OPTI621
-       tristate "OPTi 82C621 chipset enhanced support (EXPERIMENTAL)"
-       depends on PCI && BLK_DEV_IDEPCI && EXPERIMENTAL
-       help
-         This is a driver for the OPTi 82C621 EIDE controller.
--        Please read the comments at the top of <file:drivers/ide/opti621.c>.
-+        Please read the comments at the top of <file:drivers/ide/pci/opti621.c>.
- config BLK_DEV_PDC202XX_OLD
-       tristate "PROMISE PDC202{46|62|65|67} support"
-@@ -696,7 +696,7 @@ config PDC202XX_BURST
-         when the PDC20265 BIOS has been disabled (for faster boot up).
-         Please read the comments at the top of
--        <file:drivers/ide/pdc202xx.c>.
-+        <file:drivers/ide/pci/pdc202xx_old.c>.
-         If unsure, say N.
-@@ -754,7 +754,7 @@ config BLK_DEV_SIS5513
-         If you say Y here, you need to say Y to "Use DMA by default when
-         available" as well.
--        Please read the comments at the top of <file:drivers/ide/sis5513.c>.
-+        Please read the comments at the top of <file:drivers/ide/pci/sis5513.c>.
- config BLK_DEV_SLC90E66
-       tristate "SLC90E66 chipset support"
-@@ -770,7 +770,7 @@ config BLK_DEV_SLC90E66
-         available" as well.
-         Please read the comments at the top of
--        drivers/ide/slc90e66.c.
-+        drivers/ide/pci/slc90e66.c.
- config BLK_DEV_TRM290
-       tristate "Tekram TRM290 chipset support"
-@@ -779,7 +779,7 @@ config BLK_DEV_TRM290
-         This driver adds support for bus master DMA transfers
-         using the Tekram TRM290 PCI IDE chip. Volunteers are
-         needed for further tweaking and development.
--        Please read the comments at the top of <file:drivers/ide/trm290.c>.
-+        Please read the comments at the top of <file:drivers/ide/pci/trm290.c>.
- config BLK_DEV_VIA82CXXX
-       tristate "VIA82CXXX chipset support"
-@@ -1010,7 +1010,7 @@ config BLK_DEV_ALI14XX
-         boot parameter.  It enables support for the secondary IDE interface
-         of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster
-         I/O speeds to be set as well.  See the files
--        <file:Documentation/ide.txt> and <file:drivers/ide/ali14xx.c> for
-+        <file:Documentation/ide.txt> and <file:drivers/ide/legacy/ali14xx.c> for
-         more info.
- config BLK_DEV_DTC2278
-@@ -1021,7 +1021,7 @@ config BLK_DEV_DTC2278
-         boot parameter. It enables support for the secondary IDE interface
-         of the DTC-2278 card, and permits faster I/O speeds to be set as
-         well. See the <file:Documentation/ide.txt> and
--        <file:drivers/ide/dtc2278.c> files for more info.
-+        <file:drivers/ide/legacy/dtc2278.c> files for more info.
- config BLK_DEV_HT6560B
-       tristate "Holtek HT6560B support"
-@@ -1031,7 +1031,7 @@ config BLK_DEV_HT6560B
-         boot parameter. It enables support for the secondary IDE interface
-         of the Holtek card, and permits faster I/O speeds to be set as well.
-         See the <file:Documentation/ide.txt> and
--        <file:drivers/ide/ht6560b.c> files for more info.
-+        <file:drivers/ide/legacy/ht6560b.c> files for more info.
- config BLK_DEV_PDC4030
-       tristate "PROMISE DC4030 support (EXPERIMENTAL)"
-@@ -1044,7 +1044,7 @@ config BLK_DEV_PDC4030
-         supported (and probably never will be since I don't think the cards
-         support them). This driver is enabled at runtime using the "ide0=dc4030"
-         or "ide1=dc4030" kernel boot parameter. See the
--        <file:drivers/ide/pdc4030.c> file for more info.
-+        <file:drivers/ide/legacy/pdc4030.c> file for more info.
- config BLK_DEV_QD65XX
-       tristate "QDI QD65xx support"
-@@ -1052,7 +1052,7 @@ config BLK_DEV_QD65XX
-       help
-         This driver is enabled at runtime using the "ide0=qd65xx" kernel
-         boot parameter.  It permits faster I/O speeds to be set.  See the
--        <file:Documentation/ide.txt> and <file:drivers/ide/qd65xx.c> for
-+        <file:Documentation/ide.txt> and <file:drivers/ide/legacy/qd65xx.c> for
-         more info.
- config BLK_DEV_UMC8672
-@@ -1063,7 +1063,7 @@ config BLK_DEV_UMC8672
-         boot parameter. It enables support for the secondary IDE interface
-         of the UMC-8672, and permits faster I/O speeds to be set as well.
-         See the files <file:Documentation/ide.txt> and
--        <file:drivers/ide/umc8672.c> for more info.
-+        <file:drivers/ide/legacy/umc8672.c> for more info.
- config BLK_DEV_HD_ONLY
-       bool "Old hard disk (MFM/RLL/IDE) driver"
-@@ -1132,7 +1132,7 @@ config BLK_DEV_PDC202XX
-         available" as well.
-         Please read the comments at the top of
--        <file:drivers/ide/pdc202xx.c>.
-+        <file:drivers/ide/pdc202xx_old.c>.
-         If unsure, say N.
---- linux-2.6.0-test1/drivers/ide/legacy/hd98.c        2003-06-14 12:18:28.000000000 -0700
-+++ 25/drivers/ide/legacy/hd98.c       2003-07-19 17:03:49.000000000 -0700
-@@ -46,8 +46,6 @@
- #include <asm/io.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
--
- #include "io_ports.h"
- #ifdef __arm__
---- linux-2.6.0-test1/drivers/ide/legacy/hd.c  2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/ide/legacy/hd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -26,7 +26,7 @@
- /* Uncomment the following if you want verbose error reports. */
- /* #define VERBOSE_ERRORS */
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/errno.h>
- #include <linux/signal.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/ide/ppc/mpc8xx.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/ide/ppc/mpc8xx.c        2003-07-19 17:03:49.000000000 -0700
-@@ -27,7 +27,6 @@
- #include <linux/interrupt.h>
- #include <linux/reboot.h>
- #include <linux/init.h>
--#include <linux/blk.h>
- #include <linux/ioport.h>
- #include <linux/ide.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/drivers/ieee1394/amdtp.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/ieee1394/amdtp.c        2003-07-19 17:03:49.000000000 -0700
-@@ -62,6 +62,12 @@
-  * - Maybe make an ALSA interface, that is, create a file_ops
-  *   implementation that recognizes ALSA ioctls and uses defaults for
-  *   things that can't be controlled through ALSA (iso channel).
-+ *
-+ *   Changes:
-+ *
-+ * - Audit copy_from_user in amdtp_write.
-+ *                           Daniele Bellucci <bellucda@tiscali.it>
-+ *
-  */
- #include <linux/module.h>
-@@ -1112,7 +1118,8 @@ static ssize_t amdtp_write(struct file *
-       for (i = 0; i < count; i += length) {
-               p = buffer_put_bytes(s->input, count - i, &length);
--              copy_from_user(p, buffer + i, length);
-+              if (copy_from_user(p, buffer + i, length))
-+                      return -EFAULT;
-               if (s->input->length < s->input->size)
-                       continue;
-               
---- linux-2.6.0-test1/drivers/ieee1394/sbp2.c  2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/ieee1394/sbp2.c 2003-07-19 17:03:49.000000000 -0700
-@@ -52,7 +52,7 @@
- #include <linux/delay.h>
- #include <linux/sched.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/smp_lock.h>
- #include <linux/init.h>
- #include <linux/version.h>
---- linux-2.6.0-test1/drivers/input/keyboard/sunkbd.c  2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/input/keyboard/sunkbd.c 2003-07-19 17:03:49.000000000 -0700
-@@ -80,8 +80,8 @@ struct sunkbd {
-       char name[64];
-       char phys[32];
-       char type;
--      char reset;
--      char layout;
-+      volatile char reset;
-+      volatile char layout;
- };
- /*
---- linux-2.6.0-test1/drivers/input/mouse/psmouse-base.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/input/mouse/psmouse-base.c      2003-07-19 17:07:16.000000000 -0700
-@@ -200,7 +200,7 @@ int psmouse_command(struct psmouse *psmo
-       psmouse->cmdcnt = receive;
-       if (command == PSMOUSE_CMD_RESET_BAT)
--                timeout = 2000000; /* 2 sec */
-+                timeout = 4000000; /* 4 sec */
-       if (command & 0xff)
-               if (psmouse_sendbyte(psmouse, command & 0xff))
---- linux-2.6.0-test1/drivers/md/dm.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/md/dm.c 2003-07-19 17:03:49.000000000 -0700
-@@ -8,7 +8,6 @@
- #include <linux/init.h>
- #include <linux/module.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/bio.h>
- #include <linux/mempool.h>
-@@ -63,6 +62,12 @@ struct mapped_device {
-        * io objects are allocated from here.
-        */
-       mempool_t *io_pool;
-+
-+      /*
-+       * Event handling.
-+       */
-+      uint32_t event_nr;
-+      wait_queue_head_t eventq;
- };
- #define MIN_IOS 256
-@@ -510,6 +515,11 @@ static int dm_request(request_queue_t *q
-               down_read(&md->lock);
-       }
-+      if (!md->map) {
-+              bio_io_error(bio, bio->bi_size);
-+              return 0;
-+      }
-+
-       __split_bio(md, bio);
-       up_read(&md->lock);
-       return 0;
-@@ -619,6 +629,8 @@ static struct mapped_device *alloc_dev(u
-       atomic_set(&md->pending, 0);
-       init_waitqueue_head(&md->wait);
-+      init_waitqueue_head(&md->eventq);
-+
-       return md;
- }
-@@ -634,6 +646,16 @@ static void free_dev(struct mapped_devic
- /*
-  * Bind a table to the device.
-  */
-+static void event_callback(void *context)
-+{
-+      struct mapped_device *md = (struct mapped_device *) context;
-+
-+      down_write(&md->lock);
-+      md->event_nr++;
-+      wake_up_interruptible(&md->eventq);
-+      up_write(&md->lock);
-+}
-+
- static int __bind(struct mapped_device *md, struct dm_table *t)
- {
-       request_queue_t *q = &md->queue;
-@@ -645,6 +667,8 @@ static int __bind(struct mapped_device *
-       if (size == 0)
-               return 0;
-+      dm_table_event_callback(md->map, event_callback, md);
-+
-       dm_table_get(t);
-       dm_table_set_restrictions(t, q);
-       return 0;
-@@ -652,6 +676,10 @@ static int __bind(struct mapped_device *
- static void __unbind(struct mapped_device *md)
- {
-+      if (!md->map)
-+              return;
-+
-+      dm_table_event_callback(md->map, NULL, NULL);
-       dm_table_put(md->map);
-       md->map = NULL;
-       set_capacity(md->disk, 0);
-@@ -661,35 +689,26 @@ static void __unbind(struct mapped_devic
-  * Constructor for a new device.
-  */
- static int create_aux(unsigned int minor, int persistent,
--                    struct dm_table *table, struct mapped_device **result)
-+                    struct mapped_device **result)
- {
--      int r;
-       struct mapped_device *md;
-       md = alloc_dev(minor, persistent);
-       if (!md)
-               return -ENXIO;
--      r = __bind(md, table);
--      if (r) {
--              free_dev(md);
--              return r;
--      }
--      dm_table_resume_targets(md->map);
--
-       *result = md;
-       return 0;
- }
--int dm_create(struct dm_table *table, struct mapped_device **result)
-+int dm_create(struct mapped_device **result)
- {
--      return create_aux(0, 0, table, result);
-+      return create_aux(0, 0, result);
- }
--int dm_create_with_minor(unsigned int minor,
--                       struct dm_table *table, struct mapped_device **result)
-+int dm_create_with_minor(unsigned int minor, struct mapped_device **result)
- {
--      return create_aux(minor, 1, table, result);
-+      return create_aux(minor, 1, result);
- }
- void dm_get(struct mapped_device *md)
-@@ -700,7 +719,7 @@ void dm_get(struct mapped_device *md)
- void dm_put(struct mapped_device *md)
- {
-       if (atomic_dec_and_test(&md->holders)) {
--              if (!test_bit(DMF_SUSPENDED, &md->flags))
-+              if (!test_bit(DMF_SUSPENDED, &md->flags) && md->map)
-                       dm_table_suspend_targets(md->map);
-               __unbind(md);
-               free_dev(md);
-@@ -790,7 +809,8 @@ int dm_suspend(struct mapped_device *md)
-       down_write(&md->lock);
-       remove_wait_queue(&md->wait, &wait);
-       set_bit(DMF_SUSPENDED, &md->flags);
--      dm_table_suspend_targets(md->map);
-+      if (md->map)
-+              dm_table_suspend_targets(md->map);
-       up_write(&md->lock);
-       return 0;
-@@ -801,7 +821,8 @@ int dm_resume(struct mapped_device *md)
-       struct deferred_io *def;
-       down_write(&md->lock);
--      if (!test_bit(DMF_SUSPENDED, &md->flags) ||
-+      if (!md->map ||
-+          !test_bit(DMF_SUSPENDED, &md->flags) ||
-           !dm_table_get_size(md->map)) {
-               up_write(&md->lock);
-               return -EINVAL;
-@@ -820,6 +841,42 @@ int dm_resume(struct mapped_device *md)
-       return 0;
- }
-+/*-----------------------------------------------------------------
-+ * Event notification.
-+ *---------------------------------------------------------------*/
-+uint32_t dm_get_event_nr(struct mapped_device *md)
-+{
-+      uint32_t r;
-+
-+      down_read(&md->lock);
-+      r = md->event_nr;
-+      up_read(&md->lock);
-+
-+      return r;
-+}
-+
-+int dm_add_wait_queue(struct mapped_device *md, wait_queue_t *wq,
-+                    uint32_t event_nr)
-+{
-+      down_write(&md->lock);
-+      if (event_nr != md->event_nr) {
-+              up_write(&md->lock);
-+              return 1;
-+      }
-+
-+      add_wait_queue(&md->eventq, wq);
-+      up_write(&md->lock);
-+
-+      return 0;
-+}
-+
-+void dm_remove_wait_queue(struct mapped_device *md, wait_queue_t *wq)
-+{
-+      down_write(&md->lock);
-+      remove_wait_queue(&md->eventq, wq);
-+      up_write(&md->lock);
-+}
-+
- /*
-  * The gendisk is only valid as long as you have a reference
-  * count on 'md'.
-@@ -835,7 +892,8 @@ struct dm_table *dm_get_table(struct map
-       down_read(&md->lock);
-       t = md->map;
--      dm_table_get(t);
-+      if (t)
-+              dm_table_get(t);
-       up_read(&md->lock);
-       return t;
---- linux-2.6.0-test1/drivers/md/dm.h  2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/md/dm.h 2003-07-19 17:03:49.000000000 -0700
-@@ -51,9 +51,8 @@ struct mapped_device;
-  * Functions for manipulating a struct mapped_device.
-  * Drop the reference with dm_put when you finish with the object.
-  *---------------------------------------------------------------*/
--int dm_create(struct dm_table *table, struct mapped_device **md);
--int dm_create_with_minor(unsigned int minor, struct dm_table *table,
--                       struct mapped_device **md);
-+int dm_create(struct mapped_device **md);
-+int dm_create_with_minor(unsigned int minor, struct mapped_device **md);
- /*
-  * Reference counting for md.
-@@ -79,6 +78,14 @@ int dm_swap_table(struct mapped_device *
- struct dm_table *dm_get_table(struct mapped_device *md);
- /*
-+ * Event functions.
-+ */
-+uint32_t dm_get_event_nr(struct mapped_device *md);
-+int dm_add_wait_queue(struct mapped_device *md, wait_queue_t *wq,
-+                    uint32_t event_nr);
-+void dm_remove_wait_queue(struct mapped_device *md, wait_queue_t *wq);
-+
-+/*
-  * Info functions.
-  */
- struct gendisk *dm_disk(struct mapped_device *md);
-@@ -96,6 +103,8 @@ void dm_table_put(struct dm_table *t);
- int dm_table_add_target(struct dm_table *t, const char *type,
-                       sector_t start, sector_t len, char *params);
- int dm_table_complete(struct dm_table *t);
-+void dm_table_event_callback(struct dm_table *t,
-+                           void (*fn)(void *), void *context);
- void dm_table_event(struct dm_table *t);
- sector_t dm_table_get_size(struct dm_table *t);
- struct dm_target *dm_table_get_target(struct dm_table *t, unsigned int index);
-@@ -104,7 +113,6 @@ void dm_table_set_restrictions(struct dm
- unsigned int dm_table_get_num_targets(struct dm_table *t);
- struct list_head *dm_table_get_devices(struct dm_table *t);
- int dm_table_get_mode(struct dm_table *t);
--void dm_table_add_wait_queue(struct dm_table *t, wait_queue_t *wq);
- void dm_table_suspend_targets(struct dm_table *t);
- void dm_table_resume_targets(struct dm_table *t);
---- linux-2.6.0-test1/drivers/md/dm-ioctl.c    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/md/dm-ioctl.c   2003-07-19 17:03:49.000000000 -0700
-@@ -1,1134 +1,13 @@
- /*
-- * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
-+ * Copyright (C) 2003 Sistina Software (UK) Limited.
-  *
-  * This file is released under the GPL.
-  */
--#include "dm.h"
--
--#include <linux/module.h>
--#include <linux/vmalloc.h>
--#include <linux/miscdevice.h>
- #include <linux/dm-ioctl.h>
--#include <linux/init.h>
--#include <linux/wait.h>
--#include <linux/blk.h>
--#include <linux/slab.h>
--#include <linux/devfs_fs_kernel.h>
--
--#include <asm/uaccess.h>
--
--#define DM_DRIVER_EMAIL "dm@uk.sistina.com"
--
--/*-----------------------------------------------------------------
-- * The ioctl interface needs to be able to look up devices by
-- * name or uuid.
-- *---------------------------------------------------------------*/
--struct hash_cell {
--      struct list_head name_list;
--      struct list_head uuid_list;
--
--      char *name;
--      char *uuid;
--      struct mapped_device *md;
--};
--
--#define NUM_BUCKETS 64
--#define MASK_BUCKETS (NUM_BUCKETS - 1)
--static struct list_head _name_buckets[NUM_BUCKETS];
--static struct list_head _uuid_buckets[NUM_BUCKETS];
--
--void dm_hash_remove_all(void);
--
--/*
-- * Guards access to all three tables.
-- */
--static DECLARE_RWSEM(_hash_lock);
--
--static void init_buckets(struct list_head *buckets)
--{
--      unsigned int i;
--
--      for (i = 0; i < NUM_BUCKETS; i++)
--              INIT_LIST_HEAD(buckets + i);
--}
--
--int dm_hash_init(void)
--{
--      init_buckets(_name_buckets);
--      init_buckets(_uuid_buckets);
--      devfs_mk_dir(DM_DIR);
--      return 0;
--}
--
--void dm_hash_exit(void)
--{
--      dm_hash_remove_all();
--      devfs_remove(DM_DIR);
--}
--
--/*-----------------------------------------------------------------
-- * Hash function:
-- * We're not really concerned with the str hash function being
-- * fast since it's only used by the ioctl interface.
-- *---------------------------------------------------------------*/
--static unsigned int hash_str(const char *str)
--{
--      const unsigned int hash_mult = 2654435387U;
--      unsigned int h = 0;
--
--      while (*str)
--              h = (h + (unsigned int) *str++) * hash_mult;
--
--      return h & MASK_BUCKETS;
--}
--
--/*-----------------------------------------------------------------
-- * Code for looking up a device by name
-- *---------------------------------------------------------------*/
--static struct hash_cell *__get_name_cell(const char *str)
--{
--      struct list_head *tmp;
--      struct hash_cell *hc;
--      unsigned int h = hash_str(str);
--
--      list_for_each (tmp, _name_buckets + h) {
--              hc = list_entry(tmp, struct hash_cell, name_list);
--              if (!strcmp(hc->name, str))
--                      return hc;
--      }
--
--      return NULL;
--}
--
--static struct hash_cell *__get_uuid_cell(const char *str)
--{
--      struct list_head *tmp;
--      struct hash_cell *hc;
--      unsigned int h = hash_str(str);
--
--      list_for_each (tmp, _uuid_buckets + h) {
--              hc = list_entry(tmp, struct hash_cell, uuid_list);
--              if (!strcmp(hc->uuid, str))
--                      return hc;
--      }
--
--      return NULL;
--}
--
--/*-----------------------------------------------------------------
-- * Inserting, removing and renaming a device.
-- *---------------------------------------------------------------*/
--static inline char *kstrdup(const char *str)
--{
--      char *r = kmalloc(strlen(str) + 1, GFP_KERNEL);
--      if (r)
--              strcpy(r, str);
--      return r;
--}
--
--static struct hash_cell *alloc_cell(const char *name, const char *uuid,
--                                  struct mapped_device *md)
--{
--      struct hash_cell *hc;
--
--      hc = kmalloc(sizeof(*hc), GFP_KERNEL);
--      if (!hc)
--              return NULL;
--
--      hc->name = kstrdup(name);
--      if (!hc->name) {
--              kfree(hc);
--              return NULL;
--      }
--
--      if (!uuid)
--              hc->uuid = NULL;
--
--      else {
--              hc->uuid = kstrdup(uuid);
--              if (!hc->uuid) {
--                      kfree(hc->name);
--                      kfree(hc);
--                      return NULL;
--              }
--      }
--
--      INIT_LIST_HEAD(&hc->name_list);
--      INIT_LIST_HEAD(&hc->uuid_list);
--      hc->md = md;
--      return hc;
--}
--
--static void free_cell(struct hash_cell *hc)
--{
--      if (hc) {
--              kfree(hc->name);
--              kfree(hc->uuid);
--              kfree(hc);
--      }
--}
--
--/*
-- * devfs stuff.
-- */
--static int register_with_devfs(struct hash_cell *hc)
--{
--      struct gendisk *disk = dm_disk(hc->md);
--
--      devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
--                     S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
--                     DM_DIR "/%s", hc->name);
--      return 0;
--}
--
--static int unregister_with_devfs(struct hash_cell *hc)
--{
--      devfs_remove(DM_DIR"/%s", hc->name);
--      return 0;
--}
--
--/*
-- * The kdev_t and uuid of a device can never change once it is
-- * initially inserted.
-- */
--int dm_hash_insert(const char *name, const char *uuid, struct mapped_device *md)
--{
--      struct hash_cell *cell;
--
--      /*
--       * Allocate the new cells.
--       */
--      cell = alloc_cell(name, uuid, md);
--      if (!cell)
--              return -ENOMEM;
--
--      /*
--       * Insert the cell into all three hash tables.
--       */
--      down_write(&_hash_lock);
--      if (__get_name_cell(name))
--              goto bad;
--
--      list_add(&cell->name_list, _name_buckets + hash_str(name));
--
--      if (uuid) {
--              if (__get_uuid_cell(uuid)) {
--                      list_del(&cell->name_list);
--                      goto bad;
--              }
--              list_add(&cell->uuid_list, _uuid_buckets + hash_str(uuid));
--      }
--      register_with_devfs(cell);
--      dm_get(md);
--      up_write(&_hash_lock);
--
--      return 0;
--
-- bad:
--      up_write(&_hash_lock);
--      free_cell(cell);
--      return -EBUSY;
--}
--
--void __hash_remove(struct hash_cell *hc)
--{
--      /* remove from the dev hash */
--      list_del(&hc->uuid_list);
--      list_del(&hc->name_list);
--      unregister_with_devfs(hc);
--      dm_put(hc->md);
--      free_cell(hc);
--}
--
--void dm_hash_remove_all(void)
--{
--      int i;
--      struct hash_cell *hc;
--      struct list_head *tmp, *n;
--
--      down_write(&_hash_lock);
--      for (i = 0; i < NUM_BUCKETS; i++) {
--              list_for_each_safe (tmp, n, _name_buckets + i) {
--                      hc = list_entry(tmp, struct hash_cell, name_list);
--                      __hash_remove(hc);
--              }
--      }
--      up_write(&_hash_lock);
--}
--
--int dm_hash_rename(const char *old, const char *new)
--{
--      char *new_name, *old_name;
--      struct hash_cell *hc;
--
--      /*
--       * duplicate new.
--       */
--      new_name = kstrdup(new);
--      if (!new_name)
--              return -ENOMEM;
--
--      down_write(&_hash_lock);
--
--      /*
--       * Is new free ?
--       */
--      hc = __get_name_cell(new);
--      if (hc) {
--              DMWARN("asked to rename to an already existing name %s -> %s",
--                     old, new);
--              up_write(&_hash_lock);
--              kfree(new_name);
--              return -EBUSY;
--      }
--
--      /*
--       * Is there such a device as 'old' ?
--       */
--      hc = __get_name_cell(old);
--      if (!hc) {
--              DMWARN("asked to rename a non existent device %s -> %s",
--                     old, new);
--              up_write(&_hash_lock);
--              kfree(new_name);
--              return -ENXIO;
--      }
--
--      /*
--       * rename and move the name cell.
--       */
--      unregister_with_devfs(hc);
--
--      list_del(&hc->name_list);
--      old_name = hc->name;
--      hc->name = new_name;
--      list_add(&hc->name_list, _name_buckets + hash_str(new_name));
--
--      /* rename the device node in devfs */
--      register_with_devfs(hc);
--
--      up_write(&_hash_lock);
--      kfree(old_name);
--      return 0;
--}
--
--
--/*-----------------------------------------------------------------
-- * Implementation of the ioctl commands
-- *---------------------------------------------------------------*/
--
--/*
-- * All the ioctl commands get dispatched to functions with this
-- * prototype.
-- */
--typedef int (*ioctl_fn)(struct dm_ioctl *param, struct dm_ioctl *user);
--
--/*
-- * Check a string doesn't overrun the chunk of
-- * memory we copied from userland.
-- */
--static int valid_str(char *str, void *begin, void *end)
--{
--      while (((void *) str >= begin) && ((void *) str < end))
--              if (!*str++)
--                      return 0;
--
--      return -EINVAL;
--}
--
--static int next_target(struct dm_target_spec *last, uint32_t next,
--                     void *begin, void *end,
--                     struct dm_target_spec **spec, char **params)
--{
--      *spec = (struct dm_target_spec *)
--          ((unsigned char *) last + next);
--      *params = (char *) (*spec + 1);
--
--      if (*spec < (last + 1) || ((void *) *spec > end))
--              return -EINVAL;
--
--      return valid_str(*params, begin, end);
--}
--
--static int populate_table(struct dm_table *table, struct dm_ioctl *args)
--{
--      int r, first = 1;
--      unsigned int i = 0;
--      struct dm_target_spec *spec;
--      char *params;
--      void *begin, *end;
--
--      if (!args->target_count) {
--              DMWARN("populate_table: no targets specified");
--              return -EINVAL;
--      }
--
--      begin = (void *) args;
--      end = begin + args->data_size;
--
--      for (i = 0; i < args->target_count; i++) {
--
--              if (first)
--                      r = next_target((struct dm_target_spec *) args,
--                                      args->data_start,
--                                      begin, end, &spec, &params);
--              else
--                      r = next_target(spec, spec->next, begin, end,
--                                      &spec, &params);
--
--              if (r) {
--                      DMWARN("unable to find target");
--                      return -EINVAL;
--              }
--
--              r = dm_table_add_target(table, spec->target_type,
--                                      (sector_t) spec->sector_start,
--                                      (sector_t) spec->length,
--                                      params);
--              if (r) {
--                      DMWARN("internal error adding target to table");
--                      return -EINVAL;
--              }
--
--              first = 0;
--      }
--
--      return dm_table_complete(table);
--}
--
--/*
-- * Round up the ptr to the next 'align' boundary.  Obviously
-- * 'align' must be a power of 2.
-- */
--static inline void *align_ptr(void *ptr, unsigned int align)
--{
--      align--;
--      return (void *) (((unsigned long) (ptr + align)) & ~align);
--}
--
--/*
-- * Copies a dm_ioctl and an optional additional payload to
-- * userland.
-- */
--static int results_to_user(struct dm_ioctl *user, struct dm_ioctl *param,
--                         void *data, uint32_t len)
--{
--      int r;
--      void *ptr = NULL;
--
--      if (data) {
--              ptr = align_ptr(user + 1, sizeof(unsigned long));
--              param->data_start = ptr - (void *) user;
--      }
--
--      /*
--       * The version number has already been filled in, so we
--       * just copy later fields.
--       */
--      r = copy_to_user(&user->data_size, &param->data_size,
--                       sizeof(*param) - sizeof(param->version));
--      if (r)
--              return -EFAULT;
--
--      if (data) {
--              if (param->data_start + len > param->data_size)
--                      return -ENOSPC;
--
--              if (copy_to_user(ptr, data, len))
--                      r = -EFAULT;
--      }
--
--      return r;
--}
--
--/*
-- * Fills in a dm_ioctl structure, ready for sending back to
-- * userland.
-- */
--static int __info(struct mapped_device *md, struct dm_ioctl *param)
--{
--      struct dm_table *table;
--      struct block_device *bdev;
--      struct gendisk *disk = dm_disk(md);
--
--      param->flags = DM_EXISTS_FLAG;
--      if (dm_suspended(md))
--              param->flags |= DM_SUSPEND_FLAG;
--
--      bdev = bdget_disk(disk, 0);
--      if (!bdev)
--              return -ENXIO;
--
--      param->dev = bdev->bd_dev;
--      param->open_count = bdev->bd_openers;
--      bdput(bdev);
--
--      if (disk->policy)
--              param->flags |= DM_READONLY_FLAG;
--
--      table = dm_get_table(md);
--      param->target_count = dm_table_get_num_targets(table);
--      dm_table_put(table);
--
--      return 0;
--}
--
--/*
-- * Always use UUID for lookups if it's present, otherwise use name.
-- */
--static inline struct mapped_device *find_device(struct dm_ioctl *param)
--{
--      struct hash_cell *hc;
--      struct mapped_device *md = NULL;
--
--      down_read(&_hash_lock);
--      hc = *param->uuid ? __get_uuid_cell(param->uuid) :
--              __get_name_cell(param->name);
--      if (hc) {
--              md = hc->md;
--
--              /*
--               * Sneakily write in both the name and the uuid
--               * while we have the cell.
--               */
--              strlcpy(param->name, hc->name, sizeof(param->name));
--              if (hc->uuid)
--                      strlcpy(param->uuid, hc->uuid, sizeof(param->uuid));
--              else
--                      param->uuid[0] = '\0';
--
--              dm_get(md);
--      }
--      up_read(&_hash_lock);
--
--      return md;
--}
--
--#define ALIGNMENT sizeof(int)
--static void *_align(void *ptr, unsigned int a)
--{
--      register unsigned long align = --a;
--
--      return (void *) (((unsigned long) ptr + align) & ~align);
--}
--
--/*
-- * Copies device info back to user space, used by
-- * the create and info ioctls.
-- */
--static int info(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      struct mapped_device *md;
--
--      param->flags = 0;
--
--      md = find_device(param);
--      if (!md)
--              /*
--               * Device not found - returns cleared exists flag.
--               */
--              goto out;
--
--      __info(md, param);
--      dm_put(md);
--
--      out:
--      return results_to_user(user, param, NULL, 0);
--}
--
--static inline int get_mode(struct dm_ioctl *param)
--{
--      int mode = FMODE_READ | FMODE_WRITE;
--
--      if (param->flags & DM_READONLY_FLAG)
--              mode = FMODE_READ;
--
--      return mode;
--}
--
--static int check_name(const char *name)
--{
--      if (name[0] == '/') {
--              DMWARN("invalid device name");
--              return -EINVAL;
--      }
--
--      return 0;
--}
--
--static int create(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      int r;
--      struct dm_table *t;
--      struct mapped_device *md;
--
--      r = check_name(param->name);
--      if (r)
--              return r;
--
--      r = dm_table_create(&t, get_mode(param));
--      if (r)
--              return r;
--
--      r = populate_table(t, param);
--      if (r) {
--              dm_table_put(t);
--              return r;
--      }
--
--      if (param->flags & DM_PERSISTENT_DEV_FLAG)
--              r = dm_create_with_minor(minor(to_kdev_t(param->dev)), t, &md);
--      else
--              r = dm_create(t, &md);
--
--      if (r) {
--              dm_table_put(t);
--              return r;
--      }
--      dm_table_put(t);        /* md will have grabbed its own reference */
--
--      set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
--      r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
--      dm_put(md);
--
--      return r ? r : info(param, user);
--}
--
--/*
-- * Build up the status struct for each target
-- */
--static int __status(struct mapped_device *md, struct dm_ioctl *param,
--                  char *outbuf, size_t *len)
--{
--      unsigned int i, num_targets;
--      struct dm_target_spec *spec;
--      char *outptr;
--      status_type_t type;
--      struct dm_table *table = dm_get_table(md);
--
--      if (param->flags & DM_STATUS_TABLE_FLAG)
--              type = STATUSTYPE_TABLE;
--      else
--              type = STATUSTYPE_INFO;
--
--      outptr = outbuf;
--
--      /* Get all the target info */
--      num_targets = dm_table_get_num_targets(table);
--      for (i = 0; i < num_targets; i++) {
--              struct dm_target *ti = dm_table_get_target(table, i);
--
--              if (outptr - outbuf +
--                  sizeof(struct dm_target_spec) > param->data_size) {
--                      dm_table_put(table);
--                      return -ENOMEM;
--              }
--
--              spec = (struct dm_target_spec *) outptr;
--
--              spec->status = 0;
--              spec->sector_start = ti->begin;
--              spec->length = ti->len;
--              strlcpy(spec->target_type, ti->type->name,
--                      sizeof(spec->target_type));
--
--              outptr += sizeof(struct dm_target_spec);
--
--              /* Get the status/table string from the target driver */
--              if (ti->type->status)
--                      ti->type->status(ti, type, outptr,
--                                       outbuf + param->data_size - outptr);
--              else
--                      outptr[0] = '\0';
--
--              outptr += strlen(outptr) + 1;
--              _align(outptr, ALIGNMENT);
--              spec->next = outptr - outbuf;
--      }
--
--      param->target_count = num_targets;
--      *len = outptr - outbuf;
--      dm_table_put(table);
--
--      return 0;
--}
--
--/*
-- * Return the status of a device as a text string for each
-- * target.
-- */
--static int get_status(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      struct mapped_device *md;
--      size_t len = 0;
--      int ret;
--      char *outbuf = NULL;
--
--      md = find_device(param);
--      if (!md)
--              /*
--               * Device not found - returns cleared exists flag.
--               */
--              goto out;
--
--      /* We haven't a clue how long the resultant data will be so
--         just allocate as much as userland has allowed us and make sure
--         we don't overun it */
--      outbuf = kmalloc(param->data_size, GFP_KERNEL);
--      if (!outbuf)
--              goto out;
--      /*
--       * Get the status of all targets
--       */
--      __status(md, param, outbuf, &len);
--
--      /*
--       * Setup the basic dm_ioctl structure.
--       */
--      __info(md, param);
--
--      out:
--      if (md)
--              dm_put(md);
--
--      ret = results_to_user(user, param, outbuf, len);
--
--      if (outbuf)
--              kfree(outbuf);
--
--      return ret;
--}
--
--/*
-- * Wait for a device to report an event
-- */
--static int wait_device_event(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      struct mapped_device *md;
--      struct dm_table *table;
--      DECLARE_WAITQUEUE(wq, current);
--
--      md = find_device(param);
--      if (!md)
--              /*
--               * Device not found - returns cleared exists flag.
--               */
--              goto out;
--
--      /*
--       * Setup the basic dm_ioctl structure.
--       */
--      __info(md, param);
--
--      /*
--       * Wait for a notification event
--       */
--      set_current_state(TASK_INTERRUPTIBLE);
--      table = dm_get_table(md);
--      dm_table_add_wait_queue(table, &wq);
--      dm_table_put(table);
--      dm_put(md);
--
--      schedule();
--
--      out:
--      return results_to_user(user, param, NULL, 0);
--}
--
--/*
-- * Retrieves a list of devices used by a particular dm device.
-- */
--static int dep(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      int r;
--      unsigned int count;
--      struct mapped_device *md;
--      struct list_head *tmp;
--      size_t len = 0;
--      struct dm_target_deps *deps = NULL;
--      struct dm_table *table;
--
--      md = find_device(param);
--      if (!md)
--              goto out;
--      table = dm_get_table(md);
--
--      /*
--       * Setup the basic dm_ioctl structure.
--       */
--      __info(md, param);
--
--      /*
--       * Count the devices.
--       */
--      count = 0;
--      list_for_each(tmp, dm_table_get_devices(table))
--          count++;
--
--      /*
--       * Allocate a kernel space version of the dm_target_status
--       * struct.
--       */
--      if (array_too_big(sizeof(*deps), sizeof(*deps->dev), count)) {
--              dm_table_put(table);
--              dm_put(md);
--              return -ENOMEM;
--      }
--
--      len = sizeof(*deps) + (sizeof(*deps->dev) * count);
--      deps = kmalloc(len, GFP_KERNEL);
--      if (!deps) {
--              dm_table_put(table);
--              dm_put(md);
--              return -ENOMEM;
--      }
--
--      /*
--       * Fill in the devices.
--       */
--      deps->count = count;
--      count = 0;
--      list_for_each(tmp, dm_table_get_devices(table)) {
--              struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
--              deps->dev[count++] = dd->bdev->bd_dev;
--      }
--      dm_table_put(table);
--      dm_put(md);
--
--      out:
--      r = results_to_user(user, param, deps, len);
--
--      kfree(deps);
--      return r;
--}
--
--static int remove(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      struct hash_cell *hc;
--
--      down_write(&_hash_lock);
--      hc = *param->uuid ? __get_uuid_cell(param->uuid) :
--              __get_name_cell(param->name);
--      if (!hc) {
--              DMWARN("device doesn't appear to be in the dev hash table.");
--              up_write(&_hash_lock);
--              return -EINVAL;
--      }
--
--      /*
--       * You may ask the interface to drop its reference to an
--       * in use device.  This is no different to unlinking a
--       * file that someone still has open.  The device will not
--       * actually be destroyed until the last opener closes it.
--       * The name and uuid of the device (both are interface
--       * properties) will be available for reuse immediately.
--       *
--       * You don't want to drop a _suspended_ device from the
--       * interface, since that will leave you with no way of
--       * resuming it.
--       */
--      if (dm_suspended(hc->md)) {
--              DMWARN("refusing to remove a suspended device.");
--              up_write(&_hash_lock);
--              return -EPERM;
--      }
--
--      __hash_remove(hc);
--      up_write(&_hash_lock);
--      return 0;
--}
--
--static int remove_all(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      dm_hash_remove_all();
--      return 0;
--}
--
--static int suspend(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      int r;
--      struct mapped_device *md;
--
--      md = find_device(param);
--      if (!md)
--              return -ENXIO;
--
--      if (param->flags & DM_SUSPEND_FLAG)
--              r = dm_suspend(md);
--      else
--              r = dm_resume(md);
--
--      dm_put(md);
--      return r;
--}
--
--static int reload(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      int r;
--      struct mapped_device *md;
--      struct dm_table *t;
--
--      r = dm_table_create(&t, get_mode(param));
--      if (r)
--              return r;
--
--      r = populate_table(t, param);
--      if (r) {
--              dm_table_put(t);
--              return r;
--      }
--
--      md = find_device(param);
--      if (!md) {
--              dm_table_put(t);
--              return -ENXIO;
--      }
--
--      r = dm_swap_table(md, t);
--      if (r) {
--              dm_put(md);
--              dm_table_put(t);
--              return r;
--      }
--      dm_table_put(t);        /* md will have taken its own reference */
--
--      set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
--      dm_put(md);
--
--      r = info(param, user);
--      return r;
--}
--
--static int rename(struct dm_ioctl *param, struct dm_ioctl *user)
--{
--      int r;
--      char *new_name = (char *) param + param->data_start;
--
--      if (valid_str(new_name, (void *) param,
--                    (void *) param + param->data_size)) {
--              DMWARN("Invalid new logical volume name supplied.");
--              return -EINVAL;
--      }
--
--      r = check_name(new_name);
--      if (r)
--              return r;
--
--      return dm_hash_rename(param->name, new_name);
--}
--
--
--/*-----------------------------------------------------------------
-- * Implementation of open/close/ioctl on the special char
-- * device.
-- *---------------------------------------------------------------*/
--static ioctl_fn lookup_ioctl(unsigned int cmd)
--{
--      static struct {
--              int cmd;
--              ioctl_fn fn;
--      } _ioctls[] = {
--              {DM_VERSION_CMD, NULL}, /* version is dealt with elsewhere */
--              {DM_REMOVE_ALL_CMD, remove_all},
--              {DM_DEV_CREATE_CMD, create},
--              {DM_DEV_REMOVE_CMD, remove},
--              {DM_DEV_RELOAD_CMD, reload},
--              {DM_DEV_RENAME_CMD, rename},
--              {DM_DEV_SUSPEND_CMD, suspend},
--              {DM_DEV_DEPS_CMD, dep},
--              {DM_DEV_STATUS_CMD, info},
--              {DM_TARGET_STATUS_CMD, get_status},
--              {DM_TARGET_WAIT_CMD, wait_device_event},
--      };
--
--      return (cmd >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[cmd].fn;
--}
--
--/*
-- * As well as checking the version compatibility this always
-- * copies the kernel interface version out.
-- */
--static int check_version(unsigned int cmd, struct dm_ioctl *user)
--{
--      uint32_t version[3];
--      int r = 0;
--
--      if (copy_from_user(version, user->version, sizeof(version)))
--              return -EFAULT;
--
--      if ((DM_VERSION_MAJOR != version[0]) ||
--          (DM_VERSION_MINOR < version[1])) {
--              DMWARN("ioctl interface mismatch: "
--                     "kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
--                     DM_VERSION_MAJOR, DM_VERSION_MINOR,
--                     DM_VERSION_PATCHLEVEL,
--                     version[0], version[1], version[2], cmd);
--              r = -EINVAL;
--      }
--
--      /*
--       * Fill in the kernel version.
--       */
--      version[0] = DM_VERSION_MAJOR;
--      version[1] = DM_VERSION_MINOR;
--      version[2] = DM_VERSION_PATCHLEVEL;
--      if (copy_to_user(user->version, version, sizeof(version)))
--              return -EFAULT;
--
--      return r;
--}
--
--static void free_params(struct dm_ioctl *param)
--{
--      vfree(param);
--}
--
--static int copy_params(struct dm_ioctl *user, struct dm_ioctl **param)
--{
--      struct dm_ioctl tmp, *dmi;
--
--      if (copy_from_user(&tmp, user, sizeof(tmp)))
--              return -EFAULT;
--
--      if (tmp.data_size < sizeof(tmp))
--              return -EINVAL;
--
--      dmi = (struct dm_ioctl *) vmalloc(tmp.data_size);
--      if (!dmi)
--              return -ENOMEM;
--
--      if (copy_from_user(dmi, user, tmp.data_size)) {
--              vfree(dmi);
--              return -EFAULT;
--      }
--
--      *param = dmi;
--      return 0;
--}
--
--static int validate_params(uint cmd, struct dm_ioctl *param)
--{
--      /* Ignores parameters */
--      if (cmd == DM_REMOVE_ALL_CMD)
--              return 0;
--
--      /* Unless creating, either name of uuid but not both */
--      if (cmd != DM_DEV_CREATE_CMD) {
--              if ((!*param->uuid && !*param->name) ||
--                  (*param->uuid && *param->name)) {
--                      DMWARN("one of name or uuid must be supplied");
--                      return -EINVAL;
--              }
--      }
--
--      /* Ensure strings are terminated */
--      param->name[DM_NAME_LEN - 1] = '\0';
--      param->uuid[DM_UUID_LEN - 1] = '\0';
--
--      return 0;
--}
--
--static int ctl_ioctl(struct inode *inode, struct file *file,
--                   uint command, ulong u)
--{
--      int r = 0;
--      unsigned int cmd;
--      struct dm_ioctl *param;
--      struct dm_ioctl *user = (struct dm_ioctl *) u;
--      ioctl_fn fn = NULL;
--
--      /* only root can play with this */
--      if (!capable(CAP_SYS_ADMIN))
--              return -EACCES;
--
--      if (_IOC_TYPE(command) != DM_IOCTL)
--              return -ENOTTY;
--
--      cmd = _IOC_NR(command);
--
--      /*
--       * Check the interface version passed in.  This also
--       * writes out the kernels interface version.
--       */
--      r = check_version(cmd, user);
--      if (r)
--              return r;
--
--      /*
--       * Nothing more to do for the version command.
--       */
--      if (cmd == DM_VERSION_CMD)
--              return 0;
--
--      fn = lookup_ioctl(cmd);
--      if (!fn) {
--              DMWARN("dm_ctl_ioctl: unknown command 0x%x", command);
--              return -ENOTTY;
--      }
--
--      /*
--       * Copy the parameters into kernel space.
--       */
--      r = copy_params(user, &param);
--      if (r)
--              return r;
--
--      r = validate_params(cmd, param);
--      if (r) {
--              free_params(param);
--              return r;
--      }
--
--      r = fn(param, user);
--      free_params(param);
--      return r;
--}
--
--static struct file_operations _ctl_fops = {
--      .ioctl   = ctl_ioctl,
--      .owner   = THIS_MODULE,
--};
--
--static struct miscdevice _dm_misc = {
--      .minor          = MISC_DYNAMIC_MINOR,
--      .name           = DM_NAME,
--      .devfs_name     = "mapper/control",
--      .fops           = &_ctl_fops
--};
--
--/*
-- * Create misc character device and link to DM_DIR/control.
-- */
--int __init dm_interface_init(void)
--{
--      int r;
--
--      r = dm_hash_init();
--      if (r)
--              return r;
--
--      r = misc_register(&_dm_misc);
--      if (r) {
--              DMERR("misc_register failed for control device");
--              dm_hash_exit();
--              return r;
--      }
--
--      DMINFO("%d.%d.%d%s initialised: %s", DM_VERSION_MAJOR,
--             DM_VERSION_MINOR, DM_VERSION_PATCHLEVEL, DM_VERSION_EXTRA,
--             DM_DRIVER_EMAIL);
--      return 0;
--
--      if (misc_deregister(&_dm_misc) < 0)
--              DMERR("misc_deregister failed for control device");
--      dm_hash_exit();
--      return r;
--}
--void dm_interface_exit(void)
--{
--      if (misc_deregister(&_dm_misc) < 0)
--              DMERR("misc_deregister failed for control device");
--      dm_hash_exit();
--}
-+#ifdef CONFIG_DM_IOCTL_V4
-+#include "dm-ioctl-v4.c"
-+#else
-+#include "dm-ioctl-v1.c"
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/md/dm-ioctl-v1.c        2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,1160 @@
-+/*
-+ * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the GPL.
-+ */
-+
-+#include "dm.h"
-+
-+#include <linux/module.h>
-+#include <linux/vmalloc.h>
-+#include <linux/miscdevice.h>
-+#include <linux/dm-ioctl.h>
-+#include <linux/init.h>
-+#include <linux/wait.h>
-+#include <linux/blk.h>
-+#include <linux/slab.h>
-+#include <linux/devfs_fs_kernel.h>
-+
-+#include <asm/uaccess.h>
-+
-+#define DM_DRIVER_EMAIL "dm@uk.sistina.com"
-+
-+/*-----------------------------------------------------------------
-+ * The ioctl interface needs to be able to look up devices by
-+ * name or uuid.
-+ *---------------------------------------------------------------*/
-+struct hash_cell {
-+      struct list_head name_list;
-+      struct list_head uuid_list;
-+
-+      char *name;
-+      char *uuid;
-+      struct mapped_device *md;
-+};
-+
-+#define NUM_BUCKETS 64
-+#define MASK_BUCKETS (NUM_BUCKETS - 1)
-+static struct list_head _name_buckets[NUM_BUCKETS];
-+static struct list_head _uuid_buckets[NUM_BUCKETS];
-+
-+void dm_hash_remove_all(void);
-+
-+/*
-+ * Guards access to all three tables.
-+ */
-+static DECLARE_RWSEM(_hash_lock);
-+
-+static void init_buckets(struct list_head *buckets)
-+{
-+      unsigned int i;
-+
-+      for (i = 0; i < NUM_BUCKETS; i++)
-+              INIT_LIST_HEAD(buckets + i);
-+}
-+
-+int dm_hash_init(void)
-+{
-+      init_buckets(_name_buckets);
-+      init_buckets(_uuid_buckets);
-+      devfs_mk_dir(DM_DIR);
-+      return 0;
-+}
-+
-+void dm_hash_exit(void)
-+{
-+      dm_hash_remove_all();
-+      devfs_remove(DM_DIR);
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Hash function:
-+ * We're not really concerned with the str hash function being
-+ * fast since it's only used by the ioctl interface.
-+ *---------------------------------------------------------------*/
-+static unsigned int hash_str(const char *str)
-+{
-+      const unsigned int hash_mult = 2654435387U;
-+      unsigned int h = 0;
-+
-+      while (*str)
-+              h = (h + (unsigned int) *str++) * hash_mult;
-+
-+      return h & MASK_BUCKETS;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Code for looking up a device by name
-+ *---------------------------------------------------------------*/
-+static struct hash_cell *__get_name_cell(const char *str)
-+{
-+      struct list_head *tmp;
-+      struct hash_cell *hc;
-+      unsigned int h = hash_str(str);
-+
-+      list_for_each (tmp, _name_buckets + h) {
-+              hc = list_entry(tmp, struct hash_cell, name_list);
-+              if (!strcmp(hc->name, str))
-+                      return hc;
-+      }
-+
-+      return NULL;
-+}
-+
-+static struct hash_cell *__get_uuid_cell(const char *str)
-+{
-+      struct list_head *tmp;
-+      struct hash_cell *hc;
-+      unsigned int h = hash_str(str);
-+
-+      list_for_each (tmp, _uuid_buckets + h) {
-+              hc = list_entry(tmp, struct hash_cell, uuid_list);
-+              if (!strcmp(hc->uuid, str))
-+                      return hc;
-+      }
-+
-+      return NULL;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Inserting, removing and renaming a device.
-+ *---------------------------------------------------------------*/
-+static inline char *kstrdup(const char *str)
-+{
-+      char *r = kmalloc(strlen(str) + 1, GFP_KERNEL);
-+      if (r)
-+              strcpy(r, str);
-+      return r;
-+}
-+
-+static struct hash_cell *alloc_cell(const char *name, const char *uuid,
-+                                  struct mapped_device *md)
-+{
-+      struct hash_cell *hc;
-+
-+      hc = kmalloc(sizeof(*hc), GFP_KERNEL);
-+      if (!hc)
-+              return NULL;
-+
-+      hc->name = kstrdup(name);
-+      if (!hc->name) {
-+              kfree(hc);
-+              return NULL;
-+      }
-+
-+      if (!uuid)
-+              hc->uuid = NULL;
-+
-+      else {
-+              hc->uuid = kstrdup(uuid);
-+              if (!hc->uuid) {
-+                      kfree(hc->name);
-+                      kfree(hc);
-+                      return NULL;
-+              }
-+      }
-+
-+      INIT_LIST_HEAD(&hc->name_list);
-+      INIT_LIST_HEAD(&hc->uuid_list);
-+      hc->md = md;
-+      return hc;
-+}
-+
-+static void free_cell(struct hash_cell *hc)
-+{
-+      if (hc) {
-+              kfree(hc->name);
-+              kfree(hc->uuid);
-+              kfree(hc);
-+      }
-+}
-+
-+/*
-+ * devfs stuff.
-+ */
-+static int register_with_devfs(struct hash_cell *hc)
-+{
-+      struct gendisk *disk = dm_disk(hc->md);
-+
-+      devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
-+                     S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
-+                     DM_DIR "/%s", hc->name);
-+      return 0;
-+}
-+
-+static int unregister_with_devfs(struct hash_cell *hc)
-+{
-+      devfs_remove(DM_DIR"/%s", hc->name);
-+      return 0;
-+}
-+
-+/*
-+ * The kdev_t and uuid of a device can never change once it is
-+ * initially inserted.
-+ */
-+int dm_hash_insert(const char *name, const char *uuid, struct mapped_device *md)
-+{
-+      struct hash_cell *cell;
-+
-+      /*
-+       * Allocate the new cells.
-+       */
-+      cell = alloc_cell(name, uuid, md);
-+      if (!cell)
-+              return -ENOMEM;
-+
-+      /*
-+       * Insert the cell into all three hash tables.
-+       */
-+      down_write(&_hash_lock);
-+      if (__get_name_cell(name))
-+              goto bad;
-+
-+      list_add(&cell->name_list, _name_buckets + hash_str(name));
-+
-+      if (uuid) {
-+              if (__get_uuid_cell(uuid)) {
-+                      list_del(&cell->name_list);
-+                      goto bad;
-+              }
-+              list_add(&cell->uuid_list, _uuid_buckets + hash_str(uuid));
-+      }
-+      register_with_devfs(cell);
-+      dm_get(md);
-+      up_write(&_hash_lock);
-+
-+      return 0;
-+
-+ bad:
-+      up_write(&_hash_lock);
-+      free_cell(cell);
-+      return -EBUSY;
-+}
-+
-+void __hash_remove(struct hash_cell *hc)
-+{
-+      /* remove from the dev hash */
-+      list_del(&hc->uuid_list);
-+      list_del(&hc->name_list);
-+      unregister_with_devfs(hc);
-+      dm_put(hc->md);
-+      free_cell(hc);
-+}
-+
-+void dm_hash_remove_all(void)
-+{
-+      int i;
-+      struct hash_cell *hc;
-+      struct list_head *tmp, *n;
-+
-+      down_write(&_hash_lock);
-+      for (i = 0; i < NUM_BUCKETS; i++) {
-+              list_for_each_safe (tmp, n, _name_buckets + i) {
-+                      hc = list_entry(tmp, struct hash_cell, name_list);
-+                      __hash_remove(hc);
-+              }
-+      }
-+      up_write(&_hash_lock);
-+}
-+
-+int dm_hash_rename(const char *old, const char *new)
-+{
-+      char *new_name, *old_name;
-+      struct hash_cell *hc;
-+
-+      /*
-+       * duplicate new.
-+       */
-+      new_name = kstrdup(new);
-+      if (!new_name)
-+              return -ENOMEM;
-+
-+      down_write(&_hash_lock);
-+
-+      /*
-+       * Is new free ?
-+       */
-+      hc = __get_name_cell(new);
-+      if (hc) {
-+              DMWARN("asked to rename to an already existing name %s -> %s",
-+                     old, new);
-+              up_write(&_hash_lock);
-+              kfree(new_name);
-+              return -EBUSY;
-+      }
-+
-+      /*
-+       * Is there such a device as 'old' ?
-+       */
-+      hc = __get_name_cell(old);
-+      if (!hc) {
-+              DMWARN("asked to rename a non existent device %s -> %s",
-+                     old, new);
-+              up_write(&_hash_lock);
-+              kfree(new_name);
-+              return -ENXIO;
-+      }
-+
-+      /*
-+       * rename and move the name cell.
-+       */
-+      unregister_with_devfs(hc);
-+
-+      list_del(&hc->name_list);
-+      old_name = hc->name;
-+      hc->name = new_name;
-+      list_add(&hc->name_list, _name_buckets + hash_str(new_name));
-+
-+      /* rename the device node in devfs */
-+      register_with_devfs(hc);
-+
-+      up_write(&_hash_lock);
-+      kfree(old_name);
-+      return 0;
-+}
-+
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of the ioctl commands
-+ *---------------------------------------------------------------*/
-+
-+/*
-+ * All the ioctl commands get dispatched to functions with this
-+ * prototype.
-+ */
-+typedef int (*ioctl_fn)(struct dm_ioctl *param, struct dm_ioctl *user);
-+
-+/*
-+ * Check a string doesn't overrun the chunk of
-+ * memory we copied from userland.
-+ */
-+static int valid_str(char *str, void *begin, void *end)
-+{
-+      while (((void *) str >= begin) && ((void *) str < end))
-+              if (!*str++)
-+                      return 0;
-+
-+      return -EINVAL;
-+}
-+
-+static int next_target(struct dm_target_spec *last, uint32_t next,
-+                     void *begin, void *end,
-+                     struct dm_target_spec **spec, char **params)
-+{
-+      *spec = (struct dm_target_spec *)
-+          ((unsigned char *) last + next);
-+      *params = (char *) (*spec + 1);
-+
-+      if (*spec < (last + 1) || ((void *) *spec > end))
-+              return -EINVAL;
-+
-+      return valid_str(*params, begin, end);
-+}
-+
-+static int populate_table(struct dm_table *table, struct dm_ioctl *args)
-+{
-+      int r, first = 1;
-+      unsigned int i = 0;
-+      struct dm_target_spec *spec;
-+      char *params;
-+      void *begin, *end;
-+
-+      if (!args->target_count) {
-+              DMWARN("populate_table: no targets specified");
-+              return -EINVAL;
-+      }
-+
-+      begin = (void *) args;
-+      end = begin + args->data_size;
-+
-+      for (i = 0; i < args->target_count; i++) {
-+
-+              if (first)
-+                      r = next_target((struct dm_target_spec *) args,
-+                                      args->data_start,
-+                                      begin, end, &spec, &params);
-+              else
-+                      r = next_target(spec, spec->next, begin, end,
-+                                      &spec, &params);
-+
-+              if (r) {
-+                      DMWARN("unable to find target");
-+                      return -EINVAL;
-+              }
-+
-+              r = dm_table_add_target(table, spec->target_type,
-+                                      (sector_t) spec->sector_start,
-+                                      (sector_t) spec->length,
-+                                      params);
-+              if (r) {
-+                      DMWARN("internal error adding target to table");
-+                      return -EINVAL;
-+              }
-+
-+              first = 0;
-+      }
-+
-+      return dm_table_complete(table);
-+}
-+
-+/*
-+ * Round up the ptr to the next 'align' boundary.  Obviously
-+ * 'align' must be a power of 2.
-+ */
-+static inline void *align_ptr(void *ptr, unsigned int align)
-+{
-+      align--;
-+      return (void *) (((unsigned long) (ptr + align)) & ~align);
-+}
-+
-+/*
-+ * Copies a dm_ioctl and an optional additional payload to
-+ * userland.
-+ */
-+static int results_to_user(struct dm_ioctl *user, struct dm_ioctl *param,
-+                         void *data, uint32_t len)
-+{
-+      int r;
-+      void *ptr = NULL;
-+
-+      if (data) {
-+              ptr = align_ptr(user + 1, sizeof(unsigned long));
-+              param->data_start = ptr - (void *) user;
-+      }
-+
-+      /*
-+       * The version number has already been filled in, so we
-+       * just copy later fields.
-+       */
-+      r = copy_to_user(&user->data_size, &param->data_size,
-+                       sizeof(*param) - sizeof(param->version));
-+      if (r)
-+              return -EFAULT;
-+
-+      if (data) {
-+              if (param->data_start + len > param->data_size)
-+                      return -ENOSPC;
-+
-+              if (copy_to_user(ptr, data, len))
-+                      r = -EFAULT;
-+      }
-+
-+      return r;
-+}
-+
-+/*
-+ * Fills in a dm_ioctl structure, ready for sending back to
-+ * userland.
-+ */
-+static int __info(struct mapped_device *md, struct dm_ioctl *param)
-+{
-+      struct dm_table *table;
-+      struct block_device *bdev;
-+      struct gendisk *disk = dm_disk(md);
-+
-+      param->flags = DM_EXISTS_FLAG;
-+      if (dm_suspended(md))
-+              param->flags |= DM_SUSPEND_FLAG;
-+
-+      bdev = bdget_disk(disk, 0);
-+      if (!bdev)
-+              return -ENXIO;
-+
-+      param->dev = bdev->bd_dev;
-+      param->open_count = bdev->bd_openers;
-+      bdput(bdev);
-+
-+      if (disk->policy)
-+              param->flags |= DM_READONLY_FLAG;
-+
-+      table = dm_get_table(md);
-+      param->target_count = dm_table_get_num_targets(table);
-+      dm_table_put(table);
-+
-+      return 0;
-+}
-+
-+/*
-+ * Always use UUID for lookups if it's present, otherwise use name.
-+ */
-+static inline struct mapped_device *find_device(struct dm_ioctl *param)
-+{
-+      struct hash_cell *hc;
-+      struct mapped_device *md = NULL;
-+
-+      down_read(&_hash_lock);
-+      hc = *param->uuid ? __get_uuid_cell(param->uuid) :
-+              __get_name_cell(param->name);
-+      if (hc) {
-+              md = hc->md;
-+
-+              /*
-+               * Sneakily write in both the name and the uuid
-+               * while we have the cell.
-+               */
-+              strlcpy(param->name, hc->name, sizeof(param->name));
-+              if (hc->uuid)
-+                      strlcpy(param->uuid, hc->uuid, sizeof(param->uuid));
-+              else
-+                      param->uuid[0] = '\0';
-+
-+              dm_get(md);
-+      }
-+      up_read(&_hash_lock);
-+
-+      return md;
-+}
-+
-+#define ALIGNMENT sizeof(int)
-+static void *_align(void *ptr, unsigned int a)
-+{
-+      register unsigned long align = --a;
-+
-+      return (void *) (((unsigned long) ptr + align) & ~align);
-+}
-+
-+/*
-+ * Copies device info back to user space, used by
-+ * the create and info ioctls.
-+ */
-+static int info(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      struct mapped_device *md;
-+
-+      param->flags = 0;
-+
-+      md = find_device(param);
-+      if (!md)
-+              /*
-+               * Device not found - returns cleared exists flag.
-+               */
-+              goto out;
-+
-+      __info(md, param);
-+      dm_put(md);
-+
-+      out:
-+      return results_to_user(user, param, NULL, 0);
-+}
-+
-+static inline int get_mode(struct dm_ioctl *param)
-+{
-+      int mode = FMODE_READ | FMODE_WRITE;
-+
-+      if (param->flags & DM_READONLY_FLAG)
-+              mode = FMODE_READ;
-+
-+      return mode;
-+}
-+
-+static int check_name(const char *name)
-+{
-+      if (name[0] == '/') {
-+              DMWARN("invalid device name");
-+              return -EINVAL;
-+      }
-+
-+      return 0;
-+}
-+
-+static int create(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      int r;
-+      struct dm_table *t;
-+      struct mapped_device *md;
-+
-+      r = check_name(param->name);
-+      if (r)
-+              return r;
-+
-+      r = dm_table_create(&t, get_mode(param));
-+      if (r)
-+              return r;
-+
-+      r = populate_table(t, param);
-+      if (r) {
-+              dm_table_put(t);
-+              return r;
-+      }
-+
-+      if (param->flags & DM_PERSISTENT_DEV_FLAG)
-+              r = dm_create_with_minor(minor(to_kdev_t(param->dev)), &md);
-+      else
-+              r = dm_create(&md);
-+
-+      if (r) {
-+              dm_table_put(t);
-+              return r;
-+      }
-+
-+      /* suspend the device */
-+      r = dm_suspend(md);
-+      if (r) {
-+              DMWARN("suspend failed");
-+              dm_table_put(t);
-+              dm_put(md);
-+              return r;
-+      }
-+      /* swap in the table */
-+      r = dm_swap_table(md, t);
-+      if (r) {
-+              DMWARN("table swap failed");
-+              dm_table_put(t);
-+              dm_put(md);
-+              return r;
-+      }
-+
-+      /* resume the device */
-+      r = dm_resume(md);
-+      if (r) {
-+              DMWARN("resume failed");
-+              dm_table_put(t);
-+              dm_put(md);
-+              return r;
-+      }
-+
-+      dm_table_put(t);        /* md will have grabbed its own reference */
-+
-+      set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
-+      r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
-+      dm_put(md);
-+
-+      return r ? r : info(param, user);
-+}
-+
-+/*
-+ * Build up the status struct for each target
-+ */
-+static int __status(struct mapped_device *md, struct dm_ioctl *param,
-+                  char *outbuf, size_t *len)
-+{
-+      unsigned int i, num_targets;
-+      struct dm_target_spec *spec;
-+      char *outptr;
-+      status_type_t type;
-+      struct dm_table *table = dm_get_table(md);
-+
-+      if (param->flags & DM_STATUS_TABLE_FLAG)
-+              type = STATUSTYPE_TABLE;
-+      else
-+              type = STATUSTYPE_INFO;
-+
-+      outptr = outbuf;
-+
-+      /* Get all the target info */
-+      num_targets = dm_table_get_num_targets(table);
-+      for (i = 0; i < num_targets; i++) {
-+              struct dm_target *ti = dm_table_get_target(table, i);
-+
-+              if (outptr - outbuf +
-+                  sizeof(struct dm_target_spec) > param->data_size) {
-+                      dm_table_put(table);
-+                      return -ENOMEM;
-+              }
-+
-+              spec = (struct dm_target_spec *) outptr;
-+
-+              spec->status = 0;
-+              spec->sector_start = ti->begin;
-+              spec->length = ti->len;
-+              strlcpy(spec->target_type, ti->type->name,
-+                      sizeof(spec->target_type));
-+
-+              outptr += sizeof(struct dm_target_spec);
-+
-+              /* Get the status/table string from the target driver */
-+              if (ti->type->status)
-+                      ti->type->status(ti, type, outptr,
-+                                       outbuf + param->data_size - outptr);
-+              else
-+                      outptr[0] = '\0';
-+
-+              outptr += strlen(outptr) + 1;
-+              _align(outptr, ALIGNMENT);
-+              spec->next = outptr - outbuf;
-+      }
-+
-+      param->target_count = num_targets;
-+      *len = outptr - outbuf;
-+      dm_table_put(table);
-+
-+      return 0;
-+}
-+
-+/*
-+ * Return the status of a device as a text string for each
-+ * target.
-+ */
-+static int get_status(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      struct mapped_device *md;
-+      size_t len = 0;
-+      int ret;
-+      char *outbuf = NULL;
-+
-+      md = find_device(param);
-+      if (!md)
-+              /*
-+               * Device not found - returns cleared exists flag.
-+               */
-+              goto out;
-+
-+      /* We haven't a clue how long the resultant data will be so
-+         just allocate as much as userland has allowed us and make sure
-+         we don't overun it */
-+      outbuf = kmalloc(param->data_size, GFP_KERNEL);
-+      if (!outbuf)
-+              goto out;
-+      /*
-+       * Get the status of all targets
-+       */
-+      __status(md, param, outbuf, &len);
-+
-+      /*
-+       * Setup the basic dm_ioctl structure.
-+       */
-+      __info(md, param);
-+
-+      out:
-+      if (md)
-+              dm_put(md);
-+
-+      ret = results_to_user(user, param, outbuf, len);
-+
-+      if (outbuf)
-+              kfree(outbuf);
-+
-+      return ret;
-+}
-+
-+/*
-+ * Wait for a device to report an event
-+ */
-+static int wait_device_event(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      struct mapped_device *md;
-+      DECLARE_WAITQUEUE(wq, current);
-+
-+      md = find_device(param);
-+      if (!md)
-+              /*
-+               * Device not found - returns cleared exists flag.
-+               */
-+              goto out;
-+
-+      /*
-+       * Setup the basic dm_ioctl structure.
-+       */
-+      __info(md, param);
-+
-+      /*
-+       * Wait for a notification event
-+       */
-+      set_current_state(TASK_INTERRUPTIBLE);
-+      if (!dm_add_wait_queue(md, &wq, dm_get_event_nr(md))) {
-+              schedule();
-+              dm_remove_wait_queue(md, &wq);
-+      }
-+      set_current_state(TASK_RUNNING);
-+      dm_put(md);
-+
-+      out:
-+      return results_to_user(user, param, NULL, 0);
-+}
-+
-+/*
-+ * Retrieves a list of devices used by a particular dm device.
-+ */
-+static int dep(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      int r;
-+      unsigned int count;
-+      struct mapped_device *md;
-+      struct list_head *tmp;
-+      size_t len = 0;
-+      struct dm_target_deps *deps = NULL;
-+      struct dm_table *table;
-+
-+      md = find_device(param);
-+      if (!md)
-+              goto out;
-+      table = dm_get_table(md);
-+
-+      /*
-+       * Setup the basic dm_ioctl structure.
-+       */
-+      __info(md, param);
-+
-+      /*
-+       * Count the devices.
-+       */
-+      count = 0;
-+      list_for_each(tmp, dm_table_get_devices(table))
-+          count++;
-+
-+      /*
-+       * Allocate a kernel space version of the dm_target_status
-+       * struct.
-+       */
-+      if (array_too_big(sizeof(*deps), sizeof(*deps->dev), count)) {
-+              dm_table_put(table);
-+              dm_put(md);
-+              return -ENOMEM;
-+      }
-+
-+      len = sizeof(*deps) + (sizeof(*deps->dev) * count);
-+      deps = kmalloc(len, GFP_KERNEL);
-+      if (!deps) {
-+              dm_table_put(table);
-+              dm_put(md);
-+              return -ENOMEM;
-+      }
-+
-+      /*
-+       * Fill in the devices.
-+       */
-+      deps->count = count;
-+      count = 0;
-+      list_for_each(tmp, dm_table_get_devices(table)) {
-+              struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
-+              deps->dev[count++] = dd->bdev->bd_dev;
-+      }
-+      dm_table_put(table);
-+      dm_put(md);
-+
-+      out:
-+      r = results_to_user(user, param, deps, len);
-+
-+      kfree(deps);
-+      return r;
-+}
-+
-+static int remove(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      struct hash_cell *hc;
-+
-+      down_write(&_hash_lock);
-+      hc = *param->uuid ? __get_uuid_cell(param->uuid) :
-+              __get_name_cell(param->name);
-+      if (!hc) {
-+              DMWARN("device doesn't appear to be in the dev hash table.");
-+              up_write(&_hash_lock);
-+              return -EINVAL;
-+      }
-+
-+      /*
-+       * You may ask the interface to drop its reference to an
-+       * in use device.  This is no different to unlinking a
-+       * file that someone still has open.  The device will not
-+       * actually be destroyed until the last opener closes it.
-+       * The name and uuid of the device (both are interface
-+       * properties) will be available for reuse immediately.
-+       *
-+       * You don't want to drop a _suspended_ device from the
-+       * interface, since that will leave you with no way of
-+       * resuming it.
-+       */
-+      if (dm_suspended(hc->md)) {
-+              DMWARN("refusing to remove a suspended device.");
-+              up_write(&_hash_lock);
-+              return -EPERM;
-+      }
-+
-+      __hash_remove(hc);
-+      up_write(&_hash_lock);
-+      return 0;
-+}
-+
-+static int remove_all(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      dm_hash_remove_all();
-+      return 0;
-+}
-+
-+static int suspend(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      int r;
-+      struct mapped_device *md;
-+
-+      md = find_device(param);
-+      if (!md)
-+              return -ENXIO;
-+
-+      if (param->flags & DM_SUSPEND_FLAG)
-+              r = dm_suspend(md);
-+      else
-+              r = dm_resume(md);
-+
-+      dm_put(md);
-+      return r;
-+}
-+
-+static int reload(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      int r;
-+      struct mapped_device *md;
-+      struct dm_table *t;
-+
-+      r = dm_table_create(&t, get_mode(param));
-+      if (r)
-+              return r;
-+
-+      r = populate_table(t, param);
-+      if (r) {
-+              dm_table_put(t);
-+              return r;
-+      }
-+
-+      md = find_device(param);
-+      if (!md) {
-+              dm_table_put(t);
-+              return -ENXIO;
-+      }
-+
-+      r = dm_swap_table(md, t);
-+      if (r) {
-+              dm_put(md);
-+              dm_table_put(t);
-+              return r;
-+      }
-+      dm_table_put(t);        /* md will have taken its own reference */
-+
-+      set_disk_ro(dm_disk(md), (param->flags & DM_READONLY_FLAG) ? 1 : 0);
-+      dm_put(md);
-+
-+      r = info(param, user);
-+      return r;
-+}
-+
-+static int rename(struct dm_ioctl *param, struct dm_ioctl *user)
-+{
-+      int r;
-+      char *new_name = (char *) param + param->data_start;
-+
-+      if (valid_str(new_name, (void *) param,
-+                    (void *) param + param->data_size)) {
-+              DMWARN("Invalid new logical volume name supplied.");
-+              return -EINVAL;
-+      }
-+
-+      r = check_name(new_name);
-+      if (r)
-+              return r;
-+
-+      return dm_hash_rename(param->name, new_name);
-+}
-+
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of open/close/ioctl on the special char
-+ * device.
-+ *---------------------------------------------------------------*/
-+static ioctl_fn lookup_ioctl(unsigned int cmd)
-+{
-+      static struct {
-+              int cmd;
-+              ioctl_fn fn;
-+      } _ioctls[] = {
-+              {DM_VERSION_CMD, NULL}, /* version is dealt with elsewhere */
-+              {DM_REMOVE_ALL_CMD, remove_all},
-+              {DM_DEV_CREATE_CMD, create},
-+              {DM_DEV_REMOVE_CMD, remove},
-+              {DM_DEV_RELOAD_CMD, reload},
-+              {DM_DEV_RENAME_CMD, rename},
-+              {DM_DEV_SUSPEND_CMD, suspend},
-+              {DM_DEV_DEPS_CMD, dep},
-+              {DM_DEV_STATUS_CMD, info},
-+              {DM_TARGET_STATUS_CMD, get_status},
-+              {DM_TARGET_WAIT_CMD, wait_device_event},
-+      };
-+
-+      return (cmd >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[cmd].fn;
-+}
-+
-+/*
-+ * As well as checking the version compatibility this always
-+ * copies the kernel interface version out.
-+ */
-+static int check_version(unsigned int cmd, struct dm_ioctl *user)
-+{
-+      uint32_t version[3];
-+      int r = 0;
-+
-+      if (copy_from_user(version, user->version, sizeof(version)))
-+              return -EFAULT;
-+
-+      if ((DM_VERSION_MAJOR != version[0]) ||
-+          (DM_VERSION_MINOR < version[1])) {
-+              DMWARN("ioctl interface mismatch: "
-+                     "kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
-+                     DM_VERSION_MAJOR, DM_VERSION_MINOR,
-+                     DM_VERSION_PATCHLEVEL,
-+                     version[0], version[1], version[2], cmd);
-+              r = -EINVAL;
-+      }
-+
-+      /*
-+       * Fill in the kernel version.
-+       */
-+      version[0] = DM_VERSION_MAJOR;
-+      version[1] = DM_VERSION_MINOR;
-+      version[2] = DM_VERSION_PATCHLEVEL;
-+      if (copy_to_user(user->version, version, sizeof(version)))
-+              return -EFAULT;
-+
-+      return r;
-+}
-+
-+static void free_params(struct dm_ioctl *param)
-+{
-+      vfree(param);
-+}
-+
-+static int copy_params(struct dm_ioctl *user, struct dm_ioctl **param)
-+{
-+      struct dm_ioctl tmp, *dmi;
-+
-+      if (copy_from_user(&tmp, user, sizeof(tmp)))
-+              return -EFAULT;
-+
-+      if (tmp.data_size < sizeof(tmp))
-+              return -EINVAL;
-+
-+      dmi = (struct dm_ioctl *) vmalloc(tmp.data_size);
-+      if (!dmi)
-+              return -ENOMEM;
-+
-+      if (copy_from_user(dmi, user, tmp.data_size)) {
-+              vfree(dmi);
-+              return -EFAULT;
-+      }
-+
-+      *param = dmi;
-+      return 0;
-+}
-+
-+static int validate_params(uint cmd, struct dm_ioctl *param)
-+{
-+      /* Ignores parameters */
-+      if (cmd == DM_REMOVE_ALL_CMD)
-+              return 0;
-+
-+      /* Unless creating, either name of uuid but not both */
-+      if (cmd != DM_DEV_CREATE_CMD) {
-+              if ((!*param->uuid && !*param->name) ||
-+                  (*param->uuid && *param->name)) {
-+                      DMWARN("one of name or uuid must be supplied");
-+                      return -EINVAL;
-+              }
-+      }
-+
-+      /* Ensure strings are terminated */
-+      param->name[DM_NAME_LEN - 1] = '\0';
-+      param->uuid[DM_UUID_LEN - 1] = '\0';
-+
-+      return 0;
-+}
-+
-+static int ctl_ioctl(struct inode *inode, struct file *file,
-+                   uint command, ulong u)
-+{
-+      int r = 0;
-+      unsigned int cmd;
-+      struct dm_ioctl *param;
-+      struct dm_ioctl *user = (struct dm_ioctl *) u;
-+      ioctl_fn fn = NULL;
-+
-+      /* only root can play with this */
-+      if (!capable(CAP_SYS_ADMIN))
-+              return -EACCES;
-+
-+      if (_IOC_TYPE(command) != DM_IOCTL)
-+              return -ENOTTY;
-+
-+      cmd = _IOC_NR(command);
-+
-+      /*
-+       * Check the interface version passed in.  This also
-+       * writes out the kernels interface version.
-+       */
-+      r = check_version(cmd, user);
-+      if (r)
-+              return r;
-+
-+      /*
-+       * Nothing more to do for the version command.
-+       */
-+      if (cmd == DM_VERSION_CMD)
-+              return 0;
-+
-+      fn = lookup_ioctl(cmd);
-+      if (!fn) {
-+              DMWARN("dm_ctl_ioctl: unknown command 0x%x", command);
-+              return -ENOTTY;
-+      }
-+
-+      /*
-+       * Copy the parameters into kernel space.
-+       */
-+      r = copy_params(user, &param);
-+      if (r)
-+              return r;
-+
-+      r = validate_params(cmd, param);
-+      if (r) {
-+              free_params(param);
-+              return r;
-+      }
-+
-+      r = fn(param, user);
-+      free_params(param);
-+      return r;
-+}
-+
-+static struct file_operations _ctl_fops = {
-+      .ioctl   = ctl_ioctl,
-+      .owner   = THIS_MODULE,
-+};
-+
-+static struct miscdevice _dm_misc = {
-+      .minor          = MISC_DYNAMIC_MINOR,
-+      .name           = DM_NAME,
-+      .devfs_name     = "mapper/control",
-+      .fops           = &_ctl_fops
-+};
-+
-+/*
-+ * Create misc character device and link to DM_DIR/control.
-+ */
-+int __init dm_interface_init(void)
-+{
-+      int r;
-+
-+      r = dm_hash_init();
-+      if (r)
-+              return r;
-+
-+      r = misc_register(&_dm_misc);
-+      if (r) {
-+              DMERR("misc_register failed for control device");
-+              dm_hash_exit();
-+              return r;
-+      }
-+
-+      DMINFO("%d.%d.%d%s initialised: %s", DM_VERSION_MAJOR,
-+             DM_VERSION_MINOR, DM_VERSION_PATCHLEVEL, DM_VERSION_EXTRA,
-+             DM_DRIVER_EMAIL);
-+      return 0;
-+
-+      if (misc_deregister(&_dm_misc) < 0)
-+              DMERR("misc_deregister failed for control device");
-+      dm_hash_exit();
-+      return r;
-+}
-+
-+void dm_interface_exit(void)
-+{
-+      if (misc_deregister(&_dm_misc) < 0)
-+              DMERR("misc_deregister failed for control device");
-+      dm_hash_exit();
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/md/dm-ioctl-v4.c        2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,1252 @@
-+/*
-+ * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the GPL.
-+ */
-+
-+#include "dm.h"
-+
-+#include <linux/module.h>
-+#include <linux/vmalloc.h>
-+#include <linux/miscdevice.h>
-+#include <linux/init.h>
-+#include <linux/wait.h>
-+#include <linux/blk.h>
-+#include <linux/slab.h>
-+#include <linux/devfs_fs_kernel.h>
-+
-+#include <asm/uaccess.h>
-+
-+#define DM_DRIVER_EMAIL "dm@uk.sistina.com"
-+
-+/*-----------------------------------------------------------------
-+ * The ioctl interface needs to be able to look up devices by
-+ * name or uuid.
-+ *---------------------------------------------------------------*/
-+struct hash_cell {
-+      struct list_head name_list;
-+      struct list_head uuid_list;
-+
-+      char *name;
-+      char *uuid;
-+      struct mapped_device *md;
-+      struct dm_table *new_map;
-+};
-+
-+#define NUM_BUCKETS 64
-+#define MASK_BUCKETS (NUM_BUCKETS - 1)
-+static struct list_head _name_buckets[NUM_BUCKETS];
-+static struct list_head _uuid_buckets[NUM_BUCKETS];
-+
-+void dm_hash_remove_all(void);
-+
-+/*
-+ * Guards access to both hash tables.
-+ */
-+static DECLARE_RWSEM(_hash_lock);
-+
-+static void init_buckets(struct list_head *buckets)
-+{
-+      unsigned int i;
-+
-+      for (i = 0; i < NUM_BUCKETS; i++)
-+              INIT_LIST_HEAD(buckets + i);
-+}
-+
-+int dm_hash_init(void)
-+{
-+      init_buckets(_name_buckets);
-+      init_buckets(_uuid_buckets);
-+      devfs_mk_dir(DM_DIR);
-+      return 0;
-+}
-+
-+void dm_hash_exit(void)
-+{
-+      dm_hash_remove_all();
-+      devfs_remove(DM_DIR);
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Hash function:
-+ * We're not really concerned with the str hash function being
-+ * fast since it's only used by the ioctl interface.
-+ *---------------------------------------------------------------*/
-+static unsigned int hash_str(const char *str)
-+{
-+      const unsigned int hash_mult = 2654435387U;
-+      unsigned int h = 0;
-+
-+      while (*str)
-+              h = (h + (unsigned int) *str++) * hash_mult;
-+
-+      return h & MASK_BUCKETS;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Code for looking up a device by name
-+ *---------------------------------------------------------------*/
-+static struct hash_cell *__get_name_cell(const char *str)
-+{
-+      struct list_head *tmp;
-+      struct hash_cell *hc;
-+      unsigned int h = hash_str(str);
-+
-+      list_for_each (tmp, _name_buckets + h) {
-+              hc = list_entry(tmp, struct hash_cell, name_list);
-+              if (!strcmp(hc->name, str))
-+                      return hc;
-+      }
-+
-+      return NULL;
-+}
-+
-+static struct hash_cell *__get_uuid_cell(const char *str)
-+{
-+      struct list_head *tmp;
-+      struct hash_cell *hc;
-+      unsigned int h = hash_str(str);
-+
-+      list_for_each (tmp, _uuid_buckets + h) {
-+              hc = list_entry(tmp, struct hash_cell, uuid_list);
-+              if (!strcmp(hc->uuid, str))
-+                      return hc;
-+      }
-+
-+      return NULL;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Inserting, removing and renaming a device.
-+ *---------------------------------------------------------------*/
-+static inline char *kstrdup(const char *str)
-+{
-+      char *r = kmalloc(strlen(str) + 1, GFP_KERNEL);
-+      if (r)
-+              strcpy(r, str);
-+      return r;
-+}
-+
-+static struct hash_cell *alloc_cell(const char *name, const char *uuid,
-+                                  struct mapped_device *md)
-+{
-+      struct hash_cell *hc;
-+
-+      hc = kmalloc(sizeof(*hc), GFP_KERNEL);
-+      if (!hc)
-+              return NULL;
-+
-+      hc->name = kstrdup(name);
-+      if (!hc->name) {
-+              kfree(hc);
-+              return NULL;
-+      }
-+
-+      if (!uuid)
-+              hc->uuid = NULL;
-+
-+      else {
-+              hc->uuid = kstrdup(uuid);
-+              if (!hc->uuid) {
-+                      kfree(hc->name);
-+                      kfree(hc);
-+                      return NULL;
-+              }
-+      }
-+
-+      INIT_LIST_HEAD(&hc->name_list);
-+      INIT_LIST_HEAD(&hc->uuid_list);
-+      hc->md = md;
-+      hc->new_map = NULL;
-+      return hc;
-+}
-+
-+static void free_cell(struct hash_cell *hc)
-+{
-+      if (hc) {
-+              kfree(hc->name);
-+              kfree(hc->uuid);
-+              kfree(hc);
-+      }
-+}
-+
-+/*
-+ * devfs stuff.
-+ */
-+static int register_with_devfs(struct hash_cell *hc)
-+{
-+      struct gendisk *disk = dm_disk(hc->md);
-+
-+      devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
-+                    S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
-+                    DM_DIR "/%s", hc->name);
-+      return 0;
-+}
-+
-+static int unregister_with_devfs(struct hash_cell *hc)
-+{
-+      devfs_remove(DM_DIR"/%s", hc->name);
-+      return 0;
-+}
-+
-+/*
-+ * The kdev_t and uuid of a device can never change once it is
-+ * initially inserted.
-+ */
-+int dm_hash_insert(const char *name, const char *uuid, struct mapped_device *md)
-+{
-+      struct hash_cell *cell;
-+
-+      /*
-+       * Allocate the new cells.
-+       */
-+      cell = alloc_cell(name, uuid, md);
-+      if (!cell)
-+              return -ENOMEM;
-+
-+      /*
-+       * Insert the cell into both hash tables.
-+       */
-+      down_write(&_hash_lock);
-+      if (__get_name_cell(name))
-+              goto bad;
-+
-+      list_add(&cell->name_list, _name_buckets + hash_str(name));
-+
-+      if (uuid) {
-+              if (__get_uuid_cell(uuid)) {
-+                      list_del(&cell->name_list);
-+                      goto bad;
-+              }
-+              list_add(&cell->uuid_list, _uuid_buckets + hash_str(uuid));
-+      }
-+      register_with_devfs(cell);
-+      dm_get(md);
-+      up_write(&_hash_lock);
-+
-+      return 0;
-+
-+ bad:
-+      up_write(&_hash_lock);
-+      free_cell(cell);
-+      return -EBUSY;
-+}
-+
-+void __hash_remove(struct hash_cell *hc)
-+{
-+      /* remove from the dev hash */
-+      list_del(&hc->uuid_list);
-+      list_del(&hc->name_list);
-+      unregister_with_devfs(hc);
-+      dm_put(hc->md);
-+      if (hc->new_map)
-+              dm_table_put(hc->new_map);
-+      free_cell(hc);
-+}
-+
-+void dm_hash_remove_all(void)
-+{
-+      int i;
-+      struct hash_cell *hc;
-+      struct list_head *tmp, *n;
-+
-+      down_write(&_hash_lock);
-+      for (i = 0; i < NUM_BUCKETS; i++) {
-+              list_for_each_safe (tmp, n, _name_buckets + i) {
-+                      hc = list_entry(tmp, struct hash_cell, name_list);
-+                      __hash_remove(hc);
-+              }
-+      }
-+      up_write(&_hash_lock);
-+}
-+
-+int dm_hash_rename(const char *old, const char *new)
-+{
-+      char *new_name, *old_name;
-+      struct hash_cell *hc;
-+
-+      /*
-+       * duplicate new.
-+       */
-+      new_name = kstrdup(new);
-+      if (!new_name)
-+              return -ENOMEM;
-+
-+      down_write(&_hash_lock);
-+
-+      /*
-+       * Is new free ?
-+       */
-+      hc = __get_name_cell(new);
-+      if (hc) {
-+              DMWARN("asked to rename to an already existing name %s -> %s",
-+                     old, new);
-+              up_write(&_hash_lock);
-+              kfree(new_name);
-+              return -EBUSY;
-+      }
-+
-+      /*
-+       * Is there such a device as 'old' ?
-+       */
-+      hc = __get_name_cell(old);
-+      if (!hc) {
-+              DMWARN("asked to rename a non existent device %s -> %s",
-+                     old, new);
-+              up_write(&_hash_lock);
-+              kfree(new_name);
-+              return -ENXIO;
-+      }
-+
-+      /*
-+       * rename and move the name cell.
-+       */
-+      unregister_with_devfs(hc);
-+
-+      list_del(&hc->name_list);
-+      old_name = hc->name;
-+      hc->name = new_name;
-+      list_add(&hc->name_list, _name_buckets + hash_str(new_name));
-+
-+      /* rename the device node in devfs */
-+      register_with_devfs(hc);
-+
-+      up_write(&_hash_lock);
-+      kfree(old_name);
-+      return 0;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of the ioctl commands
-+ *---------------------------------------------------------------*/
-+/*
-+ * All the ioctl commands get dispatched to functions with this
-+ * prototype.
-+ */
-+typedef int (*ioctl_fn)(struct dm_ioctl *param, size_t param_size);
-+
-+static int remove_all(struct dm_ioctl *param, size_t param_size)
-+{
-+      dm_hash_remove_all();
-+      param->data_size = 0;
-+      return 0;
-+}
-+
-+/*
-+ * Round up the ptr to an 8-byte boundary.
-+ */
-+#define ALIGN_MASK 7
-+static inline void *align_ptr(void *ptr)
-+{
-+      return (void *) (((size_t) (ptr + ALIGN_MASK)) & ~ALIGN_MASK);
-+}
-+
-+/*
-+ * Retrieves the data payload buffer from an already allocated
-+ * struct dm_ioctl.
-+ */
-+static void *get_result_buffer(struct dm_ioctl *param, size_t param_size,
-+                             size_t *len)
-+{
-+      param->data_start = align_ptr(param + 1) - (void *) param;
-+
-+      if (param->data_start < param_size)
-+              *len = param_size - param->data_start;
-+      else
-+              *len = 0;
-+
-+      return ((void *) param) + param->data_start;
-+}
-+
-+static int list_devices(struct dm_ioctl *param, size_t param_size)
-+{
-+      unsigned int i;
-+      struct hash_cell *hc;
-+      size_t len, needed = 0;
-+      struct gendisk *disk;
-+      struct dm_name_list *nl, *old_nl = NULL;
-+
-+      down_write(&_hash_lock);
-+
-+      /*
-+       * Loop through all the devices working out how much
-+       * space we need.
-+       */
-+      for (i = 0; i < NUM_BUCKETS; i++) {
-+              list_for_each_entry (hc, _name_buckets + i, name_list) {
-+                      needed += sizeof(struct dm_name_list);
-+                      needed += strlen(hc->name);
-+                      needed += ALIGN_MASK;
-+              }
-+      }
-+
-+      /*
-+       * Grab our output buffer.
-+       */
-+      nl = get_result_buffer(param, param_size, &len);
-+      if (len < needed) {
-+              param->flags |= DM_BUFFER_FULL_FLAG;
-+              goto out;
-+      }
-+      param->data_size = param->data_start + needed;
-+
-+      nl->dev = 0;    /* Flags no data */
-+
-+      /*
-+       * Now loop through filling out the names.
-+       */
-+      for (i = 0; i < NUM_BUCKETS; i++) {
-+              list_for_each_entry (hc, _name_buckets + i, name_list) {
-+                      if (old_nl)
-+                              old_nl->next = (uint32_t) ((void *) nl -
-+                                                         (void *) old_nl);
-+                      disk = dm_disk(hc->md);
-+                      nl->dev = MKDEV(disk->major, disk->first_minor);
-+                      nl->next = 0;
-+                      strcpy(nl->name, hc->name);
-+
-+                      old_nl = nl;
-+                      nl = align_ptr(((void *) ++nl) + strlen(hc->name) + 1);
-+              }
-+      }
-+
-+ out:
-+      up_write(&_hash_lock);
-+      return 0;
-+}
-+
-+static int check_name(const char *name)
-+{
-+      if (strchr(name, '/')) {
-+              DMWARN("invalid device name");
-+              return -EINVAL;
-+      }
-+
-+      return 0;
-+}
-+
-+/*
-+ * Fills in a dm_ioctl structure, ready for sending back to
-+ * userland.
-+ */
-+static int __dev_status(struct mapped_device *md, struct dm_ioctl *param)
-+{
-+      struct gendisk *disk = dm_disk(md);
-+      struct dm_table *table;
-+      struct block_device *bdev;
-+
-+      param->flags &= ~(DM_SUSPEND_FLAG | DM_READONLY_FLAG |
-+                        DM_ACTIVE_PRESENT_FLAG);
-+
-+      if (dm_suspended(md))
-+              param->flags |= DM_SUSPEND_FLAG;
-+
-+      bdev = bdget_disk(disk, 0);
-+      if (!bdev)
-+              return -ENXIO;
-+
-+      param->dev = MKDEV(disk->major, disk->first_minor);
-+
-+      /*
-+       * Yes, this will be out of date by the time it gets back
-+       * to userland, but it is still very useful ofr
-+       * debugging.
-+       */
-+      param->open_count = bdev->bd_openers;
-+      bdput(bdev);
-+
-+      if (disk->policy)
-+              param->flags |= DM_READONLY_FLAG;
-+
-+      param->event_nr = dm_get_event_nr(md);
-+
-+      table = dm_get_table(md);
-+      if (table) {
-+              param->flags |= DM_ACTIVE_PRESENT_FLAG;
-+              param->target_count = dm_table_get_num_targets(table);
-+              dm_table_put(table);
-+      } else
-+              param->target_count = 0;
-+
-+      return 0;
-+}
-+
-+static int dev_create(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      struct mapped_device *md;
-+
-+      r = check_name(param->name);
-+      if (r)
-+              return r;
-+
-+      if (param->flags & DM_PERSISTENT_DEV_FLAG)
-+              r = dm_create_with_minor(minor(to_kdev_t(param->dev)), &md);
-+      else
-+              r = dm_create(&md);
-+
-+      if (r)
-+              return r;
-+
-+      r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
-+      if (r) {
-+              dm_put(md);
-+              return r;
-+      }
-+
-+      param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+      r = __dev_status(md, param);
-+      dm_put(md);
-+
-+      return r;
-+}
-+
-+/*
-+ * Always use UUID for lookups if it's present, otherwise use name.
-+ */
-+static inline struct hash_cell *__find_device_hash_cell(struct dm_ioctl *param)
-+{
-+      return *param->uuid ?
-+          __get_uuid_cell(param->uuid) : __get_name_cell(param->name);
-+}
-+
-+static inline struct mapped_device *find_device(struct dm_ioctl *param)
-+{
-+      struct hash_cell *hc;
-+      struct mapped_device *md = NULL;
-+
-+      down_read(&_hash_lock);
-+      hc = __find_device_hash_cell(param);
-+      if (hc) {
-+              md = hc->md;
-+
-+              /*
-+               * Sneakily write in both the name and the uuid
-+               * while we have the cell.
-+               */
-+              strncpy(param->name, hc->name, sizeof(param->name));
-+              if (hc->uuid)
-+                      strncpy(param->uuid, hc->uuid, sizeof(param->uuid)-1);
-+              else
-+                      param->uuid[0] = '\0';
-+
-+              if (hc->new_map)
-+                      param->flags |= DM_INACTIVE_PRESENT_FLAG;
-+              else
-+                      param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+              dm_get(md);
-+      }
-+      up_read(&_hash_lock);
-+
-+      return md;
-+}
-+
-+static int dev_remove(struct dm_ioctl *param, size_t param_size)
-+{
-+      struct hash_cell *hc;
-+
-+      down_write(&_hash_lock);
-+      hc = __find_device_hash_cell(param);
-+
-+      if (!hc) {
-+              DMWARN("device doesn't appear to be in the dev hash table.");
-+              up_write(&_hash_lock);
-+              return -ENXIO;
-+      }
-+
-+      __hash_remove(hc);
-+      up_write(&_hash_lock);
-+      param->data_size = 0;
-+      return 0;
-+}
-+
-+/*
-+ * Check a string doesn't overrun the chunk of
-+ * memory we copied from userland.
-+ */
-+static int invalid_str(char *str, void *end)
-+{
-+      while ((void *) str < end)
-+              if (!*str++)
-+                      return 0;
-+
-+      return -EINVAL;
-+}
-+
-+static int dev_rename(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      char *new_name = (char *) param + param->data_start;
-+
-+      if (new_name < (char *) (param + 1) ||
-+          invalid_str(new_name, (void *) param + param_size)) {
-+              DMWARN("Invalid new logical volume name supplied.");
-+              return -EINVAL;
-+      }
-+
-+      r = check_name(new_name);
-+      if (r)
-+              return r;
-+
-+      param->data_size = 0;
-+      return dm_hash_rename(param->name, new_name);
-+}
-+
-+static int suspend(struct dm_ioctl *param)
-+{
-+      int r = 0;
-+      struct mapped_device *md;
-+
-+      md = find_device(param);
-+      if (!md)
-+              return -ENXIO;
-+
-+      if (!dm_suspended(md))
-+              r = dm_suspend(md);
-+
-+      if (!r)
-+              r = __dev_status(md, param);
-+
-+      dm_put(md);
-+      return r;
-+}
-+
-+static int resume(struct dm_ioctl *param)
-+{
-+      int r = 0;
-+      struct hash_cell *hc;
-+      struct mapped_device *md;
-+      struct dm_table *new_map;
-+
-+      down_write(&_hash_lock);
-+
-+      hc = __find_device_hash_cell(param);
-+      if (!hc) {
-+              DMWARN("device doesn't appear to be in the dev hash table.");
-+              up_write(&_hash_lock);
-+              return -ENXIO;
-+      }
-+
-+      md = hc->md;
-+      dm_get(md);
-+
-+      new_map = hc->new_map;
-+      hc->new_map = NULL;
-+      param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+      up_write(&_hash_lock);
-+
-+      /* Do we need to load a new map ? */
-+      if (new_map) {
-+              /* Suspend if it isn't already suspended */
-+              if (!dm_suspended(md))
-+                      dm_suspend(md);
-+
-+              r = dm_swap_table(md, new_map);
-+              if (r) {
-+                      dm_put(md);
-+                      dm_table_put(new_map);
-+                      return r;
-+              }
-+
-+              if (dm_table_get_mode(new_map) & FMODE_WRITE)
-+                      set_disk_ro(dm_disk(md), 0);
-+              else
-+                      set_disk_ro(dm_disk(md), 1);
-+
-+              dm_table_put(new_map);
-+      }
-+
-+      if (dm_suspended(md))
-+              r = dm_resume(md);
-+
-+      if (!r)
-+              r = __dev_status(md, param);
-+
-+      dm_put(md);
-+      return r;
-+}
-+
-+/*
-+ * Set or unset the suspension state of a device.
-+ * If the device already is in the requested state we just return its status.
-+ */
-+static int dev_suspend(struct dm_ioctl *param, size_t param_size)
-+{
-+      if (param->flags & DM_SUSPEND_FLAG)
-+              return suspend(param);
-+
-+      return resume(param);
-+}
-+
-+/*
-+ * Copies device info back to user space, used by
-+ * the create and info ioctls.
-+ */
-+static int dev_status(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      struct mapped_device *md;
-+
-+      md = find_device(param);
-+      if (!md)
-+              return -ENXIO;
-+
-+      r = __dev_status(md, param);
-+      dm_put(md);
-+      return r;
-+}
-+
-+/*
-+ * Wait for a device to report an event
-+ */
-+static int dev_wait(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      struct mapped_device *md;
-+      DECLARE_WAITQUEUE(wq, current);
-+
-+      md = find_device(param);
-+      if (!md)
-+              return -ENXIO;
-+
-+      /*
-+       * Wait for a notification event
-+       */
-+      set_current_state(TASK_INTERRUPTIBLE);
-+      if (!dm_add_wait_queue(md, &wq, param->event_nr)) {
-+              schedule();
-+              dm_remove_wait_queue(md, &wq);
-+      }
-+      set_current_state(TASK_RUNNING);
-+
-+      /*
-+       * The userland program is going to want to know what
-+       * changed to trigger the event, so we may as well tell
-+       * him and save an ioctl.
-+       */
-+      r = __dev_status(md, param);
-+
-+      dm_put(md);
-+      return r;
-+}
-+
-+static inline int get_mode(struct dm_ioctl *param)
-+{
-+      int mode = FMODE_READ | FMODE_WRITE;
-+
-+      if (param->flags & DM_READONLY_FLAG)
-+              mode = FMODE_READ;
-+
-+      return mode;
-+}
-+
-+static int next_target(struct dm_target_spec *last, uint32_t next, void *end,
-+                     struct dm_target_spec **spec, char **target_params)
-+{
-+      *spec = (struct dm_target_spec *) ((unsigned char *) last + next);
-+      *target_params = (char *) (*spec + 1);
-+
-+      if (*spec < (last + 1))
-+              return -EINVAL;
-+
-+      return invalid_str(*target_params, end);
-+}
-+
-+static int populate_table(struct dm_table *table,
-+                        struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      unsigned int i = 0;
-+      struct dm_target_spec *spec = (struct dm_target_spec *) param;
-+      uint32_t next = param->data_start;
-+      void *end = (void *) param + param_size;
-+      char *target_params;
-+
-+      if (!param->target_count) {
-+              DMWARN("populate_table: no targets specified");
-+              return -EINVAL;
-+      }
-+
-+      for (i = 0; i < param->target_count; i++) {
-+
-+              r = next_target(spec, next, end, &spec, &target_params);
-+              if (r) {
-+                      DMWARN("unable to find target");
-+                      return r;
-+              }
-+
-+              r = dm_table_add_target(table, spec->target_type,
-+                                      (sector_t) spec->sector_start,
-+                                      (sector_t) spec->length,
-+                                      target_params);
-+              if (r) {
-+                      DMWARN("error adding target to table");
-+                      return r;
-+              }
-+
-+              next = spec->next;
-+      }
-+
-+      return dm_table_complete(table);
-+}
-+
-+static int table_load(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      struct hash_cell *hc;
-+      struct dm_table *t;
-+
-+      r = dm_table_create(&t, get_mode(param));
-+      if (r)
-+              return r;
-+
-+      r = populate_table(t, param, param_size);
-+      if (r) {
-+              dm_table_put(t);
-+              return r;
-+      }
-+
-+      down_write(&_hash_lock);
-+      hc = __find_device_hash_cell(param);
-+      if (!hc) {
-+              DMWARN("device doesn't appear to be in the dev hash table.");
-+              up_write(&_hash_lock);
-+              return -ENXIO;
-+      }
-+
-+      hc->new_map = t;
-+      param->flags |= DM_INACTIVE_PRESENT_FLAG;
-+
-+      r = __dev_status(hc->md, param);
-+      up_write(&_hash_lock);
-+      return r;
-+}
-+
-+static int table_clear(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      struct hash_cell *hc;
-+
-+      down_write(&_hash_lock);
-+
-+      hc = __find_device_hash_cell(param);
-+      if (!hc) {
-+              DMWARN("device doesn't appear to be in the dev hash table.");
-+              up_write(&_hash_lock);
-+              return -ENXIO;
-+      }
-+
-+      if (hc->new_map) {
-+              dm_table_put(hc->new_map);
-+              hc->new_map = NULL;
-+      }
-+
-+      param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
-+
-+      r = __dev_status(hc->md, param);
-+      up_write(&_hash_lock);
-+      return r;
-+}
-+
-+/*
-+ * Retrieves a list of devices used by a particular dm device.
-+ */
-+static void retrieve_deps(struct dm_table *table,
-+                        struct dm_ioctl *param, size_t param_size)
-+{
-+      unsigned int count = 0;
-+      struct list_head *tmp;
-+      size_t len, needed;
-+      struct dm_target_deps *deps;
-+
-+      deps = get_result_buffer(param, param_size, &len);
-+
-+      /*
-+       * Count the devices.
-+       */
-+      list_for_each(tmp, dm_table_get_devices(table))
-+              count++;
-+
-+      /*
-+       * Check we have enough space.
-+       */
-+      needed = sizeof(*deps) + (sizeof(*deps->dev) * count);
-+      if (len < needed) {
-+              param->flags |= DM_BUFFER_FULL_FLAG;
-+              return;
-+      }
-+
-+      /*
-+       * Fill in the devices.
-+       */
-+      deps->count = count;
-+      count = 0;
-+      list_for_each(tmp, dm_table_get_devices(table)) {
-+              struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
-+              deps->dev[count++] = dd->bdev->bd_dev;
-+      }
-+
-+      param->data_size = param->data_start + needed;
-+}
-+
-+static int table_deps(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r = 0;
-+      struct mapped_device *md;
-+      struct dm_table *table;
-+
-+      md = find_device(param);
-+      if (!md)
-+              return -ENXIO;
-+
-+      r = __dev_status(md, param);
-+      if (r)
-+              goto out;
-+
-+      table = dm_get_table(md);
-+      if (table) {
-+              retrieve_deps(table, param, param_size);
-+              dm_table_put(table);
-+      }
-+
-+ out:
-+      dm_put(md);
-+      return r;
-+}
-+
-+/*
-+ * Build up the status struct for each target
-+ */
-+static void retrieve_status(struct dm_table *table,
-+                          struct dm_ioctl *param, size_t param_size)
-+{
-+      unsigned int i, num_targets;
-+      struct dm_target_spec *spec;
-+      char *outbuf, *outptr;
-+      status_type_t type;
-+      size_t remaining, len, used = 0;
-+
-+      outptr = outbuf = get_result_buffer(param, param_size, &len);
-+
-+      if (param->flags & DM_STATUS_TABLE_FLAG)
-+              type = STATUSTYPE_TABLE;
-+      else
-+              type = STATUSTYPE_INFO;
-+
-+      /* Get all the target info */
-+      num_targets = dm_table_get_num_targets(table);
-+      for (i = 0; i < num_targets; i++) {
-+              struct dm_target *ti = dm_table_get_target(table, i);
-+
-+              remaining = len - (outptr - outbuf);
-+              if (remaining < sizeof(struct dm_target_spec)) {
-+                      param->flags |= DM_BUFFER_FULL_FLAG;
-+                      break;
-+              }
-+
-+              spec = (struct dm_target_spec *) outptr;
-+
-+              spec->status = 0;
-+              spec->sector_start = ti->begin;
-+              spec->length = ti->len;
-+              strncpy(spec->target_type, ti->type->name,
-+                      sizeof(spec->target_type));
-+
-+              outptr += sizeof(struct dm_target_spec);
-+              remaining = len - (outptr - outbuf);
-+
-+              /* Get the status/table string from the target driver */
-+              if (ti->type->status) {
-+                      if (ti->type->status(ti, type, outptr, remaining)) {
-+                              param->flags |= DM_BUFFER_FULL_FLAG;
-+                              break;
-+                      }
-+              } else
-+                      outptr[0] = '\0';
-+
-+              outptr += strlen(outptr) + 1;
-+              used = param->data_start + (outptr - outbuf);
-+
-+              align_ptr(outptr);
-+              spec->next = outptr - outbuf;
-+      }
-+
-+      if (used)
-+              param->data_size = used;
-+
-+      param->target_count = num_targets;
-+}
-+
-+/*
-+ * Return the status of a device as a text string for each
-+ * target.
-+ */
-+static int table_status(struct dm_ioctl *param, size_t param_size)
-+{
-+      int r;
-+      struct mapped_device *md;
-+      struct dm_table *table;
-+
-+      md = find_device(param);
-+      if (!md)
-+              return -ENXIO;
-+
-+      r = __dev_status(md, param);
-+      if (r)
-+              goto out;
-+
-+      table = dm_get_table(md);
-+      if (table) {
-+              retrieve_status(table, param, param_size);
-+              dm_table_put(table);
-+      }
-+
-+ out:
-+      dm_put(md);
-+      return r;
-+}
-+
-+/*-----------------------------------------------------------------
-+ * Implementation of open/close/ioctl on the special char
-+ * device.
-+ *---------------------------------------------------------------*/
-+static ioctl_fn lookup_ioctl(unsigned int cmd)
-+{
-+      static struct {
-+              int cmd;
-+              ioctl_fn fn;
-+      } _ioctls[] = {
-+              {DM_VERSION_CMD, NULL}, /* version is dealt with elsewhere */
-+              {DM_REMOVE_ALL_CMD, remove_all},
-+              {DM_LIST_DEVICES_CMD, list_devices},
-+
-+              {DM_DEV_CREATE_CMD, dev_create},
-+              {DM_DEV_REMOVE_CMD, dev_remove},
-+              {DM_DEV_RENAME_CMD, dev_rename},
-+              {DM_DEV_SUSPEND_CMD, dev_suspend},
-+              {DM_DEV_STATUS_CMD, dev_status},
-+              {DM_DEV_WAIT_CMD, dev_wait},
-+
-+              {DM_TABLE_LOAD_CMD, table_load},
-+              {DM_TABLE_CLEAR_CMD, table_clear},
-+              {DM_TABLE_DEPS_CMD, table_deps},
-+              {DM_TABLE_STATUS_CMD, table_status}
-+      };
-+
-+      return (cmd >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[cmd].fn;
-+}
-+
-+/*
-+ * As well as checking the version compatibility this always
-+ * copies the kernel interface version out.
-+ */
-+static int check_version(unsigned int cmd, struct dm_ioctl *user)
-+{
-+      uint32_t version[3];
-+      int r = 0;
-+
-+      if (copy_from_user(version, user->version, sizeof(version)))
-+              return -EFAULT;
-+
-+      if ((DM_VERSION_MAJOR != version[0]) ||
-+          (DM_VERSION_MINOR < version[1])) {
-+              DMWARN("ioctl interface mismatch: "
-+                     "kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
-+                     DM_VERSION_MAJOR, DM_VERSION_MINOR,
-+                     DM_VERSION_PATCHLEVEL,
-+                     version[0], version[1], version[2], cmd);
-+              r = -EINVAL;
-+      }
-+
-+      /*
-+       * Fill in the kernel version.
-+       */
-+      version[0] = DM_VERSION_MAJOR;
-+      version[1] = DM_VERSION_MINOR;
-+      version[2] = DM_VERSION_PATCHLEVEL;
-+      if (copy_to_user(user->version, version, sizeof(version)))
-+              return -EFAULT;
-+
-+      return r;
-+}
-+
-+static void free_params(struct dm_ioctl *param)
-+{
-+      vfree(param);
-+}
-+
-+static int copy_params(struct dm_ioctl *user, struct dm_ioctl **param)
-+{
-+      struct dm_ioctl tmp, *dmi;
-+
-+      if (copy_from_user(&tmp, user, sizeof(tmp)))
-+              return -EFAULT;
-+
-+      if (tmp.data_size < sizeof(tmp))
-+              return -EINVAL;
-+
-+      dmi = (struct dm_ioctl *) vmalloc(tmp.data_size);
-+      if (!dmi)
-+              return -ENOMEM;
-+
-+      if (copy_from_user(dmi, user, tmp.data_size)) {
-+              vfree(dmi);
-+              return -EFAULT;
-+      }
-+
-+      *param = dmi;
-+      return 0;
-+}
-+
-+static int validate_params(uint cmd, struct dm_ioctl *param)
-+{
-+      /* Always clear this flag */
-+      param->flags &= ~DM_BUFFER_FULL_FLAG;
-+
-+      /* Ignores parameters */
-+      if (cmd == DM_REMOVE_ALL_CMD || cmd == DM_LIST_DEVICES_CMD)
-+              return 0;
-+
-+      /* Unless creating, either name or uuid but not both */
-+      if (cmd != DM_DEV_CREATE_CMD) {
-+              if ((!*param->uuid && !*param->name) ||
-+                  (*param->uuid && *param->name)) {
-+                      DMWARN("one of name or uuid must be supplied, cmd(%u)",
-+                             cmd);
-+                      return -EINVAL;
-+              }
-+      }
-+
-+      /* Ensure strings are terminated */
-+      param->name[DM_NAME_LEN - 1] = '\0';
-+      param->uuid[DM_UUID_LEN - 1] = '\0';
-+
-+      return 0;
-+}
-+
-+static int ctl_ioctl(struct inode *inode, struct file *file,
-+                   uint command, ulong u)
-+{
-+      int r = 0;
-+      unsigned int cmd;
-+      struct dm_ioctl *param;
-+      struct dm_ioctl *user = (struct dm_ioctl *) u;
-+      ioctl_fn fn = NULL;
-+      size_t param_size;
-+
-+      /* only root can play with this */
-+      if (!capable(CAP_SYS_ADMIN))
-+              return -EACCES;
-+
-+      if (_IOC_TYPE(command) != DM_IOCTL)
-+              return -ENOTTY;
-+
-+      cmd = _IOC_NR(command);
-+
-+      /*
-+       * Check the interface version passed in.  This also
-+       * writes out the kernel's interface version.
-+       */
-+      r = check_version(cmd, user);
-+      if (r)
-+              return r;
-+
-+      /*
-+       * Nothing more to do for the version command.
-+       */
-+      if (cmd == DM_VERSION_CMD)
-+              return 0;
-+
-+      fn = lookup_ioctl(cmd);
-+      if (!fn) {
-+              DMWARN("dm_ctl_ioctl: unknown command 0x%x", command);
-+              return -ENOTTY;
-+      }
-+
-+      /*
-+       * Trying to avoid low memory issues when a device is
-+       * suspended.
-+       */
-+      current->flags |= PF_MEMALLOC;
-+
-+      /*
-+       * Copy the parameters into kernel space.
-+       */
-+      r = copy_params(user, &param);
-+      if (r) {
-+              current->flags &= ~PF_MEMALLOC;
-+              return r;
-+      }
-+
-+      /*
-+       * FIXME: eventually we will remove the PF_MEMALLOC flag
-+       * here.  However the tools still do nasty things like
-+       * 'load' while a device is suspended.
-+       */
-+
-+      r = validate_params(cmd, param);
-+      if (r)
-+              goto out;
-+
-+      param_size = param->data_size;
-+      param->data_size = sizeof(*param);
-+      r = fn(param, param_size);
-+
-+      /*
-+       * Copy the results back to userland.
-+       */
-+      if (!r && copy_to_user(user, param, param->data_size))
-+              r = -EFAULT;
-+
-+ out:
-+      free_params(param);
-+      current->flags &= ~PF_MEMALLOC;
-+      return r;
-+}
-+
-+static struct file_operations _ctl_fops = {
-+      .ioctl   = ctl_ioctl,
-+      .owner   = THIS_MODULE,
-+};
-+
-+static struct miscdevice _dm_misc = {
-+      .minor          = MISC_DYNAMIC_MINOR,
-+      .name           = DM_NAME,
-+      .devfs_name     = "mapper/control",
-+      .fops           = &_ctl_fops
-+};
-+
-+/*
-+ * Create misc character device and link to DM_DIR/control.
-+ */
-+int __init dm_interface_init(void)
-+{
-+      int r;
-+
-+      r = dm_hash_init();
-+      if (r)
-+              return r;
-+
-+      r = misc_register(&_dm_misc);
-+      if (r) {
-+              DMERR("misc_register failed for control device");
-+              dm_hash_exit();
-+              return r;
-+      }
-+
-+      DMINFO("%d.%d.%d%s initialised: %s", DM_VERSION_MAJOR,
-+             DM_VERSION_MINOR, DM_VERSION_PATCHLEVEL, DM_VERSION_EXTRA,
-+             DM_DRIVER_EMAIL);
-+      return 0;
-+}
-+
-+void dm_interface_exit(void)
-+{
-+      if (misc_deregister(&_dm_misc) < 0)
-+              DMERR("misc_deregister failed for control device");
-+
-+      dm_hash_exit();
-+}
---- linux-2.6.0-test1/drivers/md/dm-table.c    2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/md/dm-table.c   2003-07-19 17:03:49.000000000 -0700
-@@ -48,11 +48,9 @@ struct dm_table {
-        */
-       struct io_restrictions limits;
--      /*
--       * A waitqueue for processes waiting for something
--       * interesting to happen to this table.
--       */
--      wait_queue_head_t eventq;
-+      /* events get handed up using this callback */
-+      void (*event_fn)(void *);
-+      void *event_context;
- };
- /*
-@@ -222,7 +220,6 @@ int dm_table_create(struct dm_table **re
-               return -ENOMEM;
-       }
--      init_waitqueue_head(&t->eventq);
-       t->mode = mode;
-       *result = t;
-       return 0;
-@@ -243,9 +240,6 @@ void table_destroy(struct dm_table *t)
- {
-       unsigned int i;
--      /* destroying the table counts as an event */
--      dm_table_event(t);
--
-       /* free the indexes (see dm_table_complete) */
-       if (t->depth >= 2)
-               vfree(t->index[t->depth - 2]);
-@@ -694,9 +688,22 @@ int dm_table_complete(struct dm_table *t
-       return r;
- }
-+static spinlock_t _event_lock = SPIN_LOCK_UNLOCKED;
-+void dm_table_event_callback(struct dm_table *t,
-+                           void (*fn)(void *), void *context)
-+{
-+      spin_lock_irq(&_event_lock);
-+      t->event_fn = fn;
-+      t->event_context = context;
-+      spin_unlock_irq(&_event_lock);
-+}
-+
- void dm_table_event(struct dm_table *t)
- {
--      wake_up_interruptible(&t->eventq);
-+      spin_lock(&_event_lock);
-+      if (t->event_fn)
-+              t->event_fn(t->event_context);
-+      spin_unlock(&_event_lock);
- }
- sector_t dm_table_get_size(struct dm_table *t)
-@@ -761,11 +768,6 @@ int dm_table_get_mode(struct dm_table *t
-       return t->mode;
- }
--void dm_table_add_wait_queue(struct dm_table *t, wait_queue_t *wq)
--{
--      add_wait_queue(&t->eventq, wq);
--}
--
- void dm_table_suspend_targets(struct dm_table *t)
- {
-       int i;
---- linux-2.6.0-test1/drivers/md/Kconfig       2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/md/Kconfig      2003-07-19 17:03:49.000000000 -0700
-@@ -145,5 +145,12 @@ config BLK_DEV_DM
-         If unsure, say N.
-+config DM_IOCTL_V4
-+      bool "ioctl interface version 4"
-+      depends on BLK_DEV_DM
-+      ---help---
-+        Recent tools use a new version of the ioctl interface, only
-+          select this option if you intend using such tools.
-+
- endmenu
---- linux-2.6.0-test1/drivers/md/linear.c      2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/md/linear.c     2003-07-19 17:04:58.000000000 -0700
-@@ -114,6 +114,8 @@ static int linear_run (mddev_t *mddev)
-               }
-               disk->rdev = rdev;
-+              blk_queue_stack_limits(&mddev->queue,
-+                                     rdev->bdev->bd_disk->queue);
-               disk->size = rdev->size;
-               mddev->array_size += rdev->size;
---- linux-2.6.0-test1/drivers/md/md.c  2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/md/md.c 2003-07-19 17:03:49.000000000 -0700
-@@ -52,8 +52,6 @@
- #define MD_DRIVER
- #define DEVICE_NR(device) (minor(device))
--#include <linux/blk.h>
--
- #define DEBUG 0
- #define dprintk(x...) ((void)(DEBUG && printk(x)))
---- linux-2.6.0-test1/drivers/md/multipath.c   2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/md/multipath.c  2003-07-19 17:04:58.000000000 -0700
-@@ -271,6 +271,8 @@ static int multipath_add_disk(mddev_t *m
-       for (path=0; path<mddev->raid_disks; path++) 
-               if ((p=conf->multipaths+path)->rdev == NULL) {
-                       p->rdev = rdev;
-+                      blk_queue_stack_limits(&mddev->queue,
-+                                             rdev->bdev->bd_disk->queue);
-                       conf->working_disks++;
-                       rdev->raid_disk = path;
-                       rdev->in_sync = 1;
-@@ -408,6 +410,8 @@ static int multipath_run (mddev_t *mddev
-               disk = conf->multipaths + disk_idx;
-               disk->rdev = rdev;
-+              blk_queue_stack_limits(&mddev->queue,
-+                                     rdev->bdev->bd_disk->queue);
-               if (!rdev->faulty) 
-                       conf->working_disks++;
-       }
---- linux-2.6.0-test1/drivers/md/raid0.c       2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/md/raid0.c      2003-07-19 17:04:58.000000000 -0700
-@@ -113,6 +113,8 @@ static int create_strip_zones (mddev_t *
-                       goto abort;
-               }
-               zone->dev[j] = rdev1;
-+              blk_queue_stack_limits(&mddev->queue,
-+                                     rdev1->bdev->bd_disk->queue);
-               if (!smallest || (rdev1->size <smallest->size))
-                       smallest = rdev1;
-               cnt++;
-@@ -293,7 +295,6 @@ static int raid0_run (mddev_t *mddev)
-               conf->hash_spacing++;
-       }
--      blk_queue_max_sectors(&mddev->queue, mddev->chunk_size >> 9);
-       blk_queue_merge_bvec(&mddev->queue, raid0_mergeable_bvec);
-       return 0;
---- linux-2.6.0-test1/drivers/md/raid1.c       2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/md/raid1.c      2003-07-19 17:04:58.000000000 -0700
-@@ -678,6 +678,8 @@ static int raid1_add_disk(mddev_t *mddev
-       for (mirror=0; mirror < mddev->raid_disks; mirror++)
-               if ( !(p=conf->mirrors+mirror)->rdev) {
-                       p->rdev = rdev;
-+                      blk_queue_stack_limits(&mddev->queue,
-+                                             rdev->bdev->bd_disk->queue);
-                       p->head_position = 0;
-                       rdev->raid_disk = mirror;
-                       found = 1;
-@@ -1076,6 +1078,8 @@ static int run(mddev_t *mddev)
-               disk = conf->mirrors + disk_idx;
-               disk->rdev = rdev;
-+              blk_queue_stack_limits(&mddev->queue,
-+                                     rdev->bdev->bd_disk->queue);
-               disk->head_position = 0;
-               if (!rdev->faulty && rdev->in_sync)
-                       conf->working_disks++;
---- linux-2.6.0-test1/drivers/media/common/Makefile    2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/media/common/Makefile   2003-07-19 17:03:49.000000000 -0700
-@@ -1,5 +1,5 @@
- saa7146-objs    := saa7146_i2c.o saa7146_core.o 
--saa7146_vv-objs := saa7146_fops.o saa7146_video.o saa7146_hlp.o saa7146_vbi.o  
-+saa7146_vv-objs := saa7146_vv_ksyms.o saa7146_fops.o saa7146_video.o saa7146_hlp.o saa7146_vbi.o  
- obj-$(CONFIG_VIDEO_SAA7146) += saa7146.o saa7146_vv.o
---- linux-2.6.0-test1/drivers/media/common/saa7146_core.c      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_core.c     2003-07-19 17:03:49.000000000 -0700
-@@ -373,6 +373,9 @@ static int saa7146_init_one(struct pci_d
-       dev->module = THIS_MODULE;
-       init_waitqueue_head(&dev->i2c_wq);
-+      /* set some default values */
-+      saa7146_write(dev, BCS_CTRL, 0x80400040);
-+
-       if( 0 != ext->probe) {
-               if( 0 != ext->probe(dev) ) {
-                       DEB_D(("ext->probe() failed for %p. skipping device.\n",dev));
-@@ -391,9 +394,6 @@ static int saa7146_init_one(struct pci_d
-       list_add_tail(&dev->item,&saa7146_devices);
-       saa7146_num++;
--      /* set some default values */
--      saa7146_write(dev, BCS_CTRL, 0x80400040);
--
-       err = 0;
-       goto out;
- attach_error:
---- linux-2.6.0-test1/drivers/media/common/saa7146_fops.c      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_fops.c     2003-07-19 17:03:49.000000000 -0700
-@@ -106,10 +106,21 @@ void saa7146_buffer_next(struct saa7146_
-                       // fixme: fix this for vflip != 0
-                       saa7146_write(dev, PROT_ADDR1, 0);
-+                      saa7146_write(dev, MC2, (MASK_02|MASK_18));             
-+
-                       /* write the address of the rps-program */
-                       saa7146_write(dev, RPS_ADDR0, dev->d_rps0.dma_handle);
-                       /* turn on rps */
-                       saa7146_write(dev, MC1, (MASK_12 | MASK_28));
-+                              
-+/*
-+                      printk("vdma%d.base_even:     0x%08x\n", 1,saa7146_read(dev,BASE_EVEN1));
-+                      printk("vdma%d.base_odd:      0x%08x\n", 1,saa7146_read(dev,BASE_ODD1));
-+                      printk("vdma%d.prot_addr:     0x%08x\n", 1,saa7146_read(dev,PROT_ADDR1));
-+                      printk("vdma%d.base_page:     0x%08x\n", 1,saa7146_read(dev,BASE_PAGE1));
-+                      printk("vdma%d.pitch:         0x%08x\n", 1,saa7146_read(dev,PITCH1));
-+                      printk("vdma%d.num_line_byte: 0x%08x\n", 1,saa7146_read(dev,NUM_LINE_BYTE1));
-+*/
-               }
-               del_timer(&q->timeout);
-       }
-@@ -374,7 +385,7 @@ static struct video_device device_templa
-       .minor          = -1,
- };
--int saa7146_vv_init(struct saa7146_dev* dev)
-+int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
- {
-       struct saa7146_vv *vv = kmalloc (sizeof(struct saa7146_vv),GFP_KERNEL);
-       if( NULL == vv ) {
-@@ -385,6 +396,11 @@ int saa7146_vv_init(struct saa7146_dev* 
-       DEB_EE(("dev:%p\n",dev));
-       
-+      /* save per-device extension data (one extension can
-+         handle different devices that might need different
-+         configuration data) */
-+      dev->ext_vv_data = ext_vv;
-+      
-       vv->video_minor = -1;
-       vv->vbi_minor = -1;
-@@ -475,13 +491,6 @@ static void __exit saa7146_vv_cleanup_mo
- module_init(saa7146_vv_init_module);
- module_exit(saa7146_vv_cleanup_module);
--EXPORT_SYMBOL_GPL(saa7146_set_hps_source_and_sync);
--EXPORT_SYMBOL_GPL(saa7146_register_device);
--EXPORT_SYMBOL_GPL(saa7146_unregister_device);
--
--EXPORT_SYMBOL_GPL(saa7146_vv_init);
--EXPORT_SYMBOL_GPL(saa7146_vv_release);
--
- MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
- MODULE_DESCRIPTION("video4linux driver for saa7146-based hardware");
- MODULE_LICENSE("GPL");
---- linux-2.6.0-test1/drivers/media/common/saa7146_hlp.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_hlp.c      2003-07-19 17:03:49.000000000 -0700
-@@ -242,7 +242,9 @@ static int calculate_v_scale_registers(s
-               if( 2*out_y >= in_y) {
-                       lpi = 1;
-               }
--      } else if (field == V4L2_FIELD_TOP || field == V4L2_FIELD_BOTTOM) {
-+      } else if (field == V4L2_FIELD_TOP
-+              || field == V4L2_FIELD_ALTERNATE
-+              || field == V4L2_FIELD_BOTTOM) {
-               if( 4*out_y >= in_y ) {
-                       lpi = 1;
-               }
-@@ -468,9 +470,7 @@ static void calculate_clipping_registers
-       *clip_format &= 0xfffffff7;
-       if (V4L2_FIELD_HAS_BOTH(field)) {
-               *clip_format |= 0x00000008;
--      } else if (field == V4L2_FIELD_TOP) {
--              *clip_format |= 0x00000000;
--      } else if (field == V4L2_FIELD_BOTTOM) {
-+      } else {
-               *clip_format |= 0x00000000;
-       }
- }
-@@ -593,6 +593,10 @@ static void saa7146_set_position(struct 
-       }
-       
-       if (V4L2_FIELD_HAS_BOTH(field)) {
-+      } else if (field == V4L2_FIELD_ALTERNATE) {
-+              /* fixme */
-+              vdma1.base_odd = vdma1.prot_addr;
-+              vdma1.pitch /= 2;
-       } else if (field == V4L2_FIELD_TOP) {
-               vdma1.base_odd = vdma1.prot_addr;
-               vdma1.pitch /= 2;
-@@ -706,7 +710,7 @@ void saa7146_write_out_dma(struct saa714
-       /* calculate starting address */
-       where  = (which-1)*0x18;
--      if( 0 != (dev->ext->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
-+      if( 0 != (dev->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
-               saa7146_write(dev, where,       vdma->base_even);
-               saa7146_write(dev, where+0x04,  vdma->base_odd);
-       } else {
-@@ -760,6 +764,16 @@ static int calculate_video_dma_grab_pack
-       }
-       if (V4L2_FIELD_HAS_BOTH(field)) {
-+      } else if (field == V4L2_FIELD_ALTERNATE) {
-+              /* fixme */
-+              if ( vv->last_field == V4L2_FIELD_TOP ) {
-+                      vdma1.base_odd  = vdma1.prot_addr;
-+                      vdma1.pitch /= 2;
-+              } else if ( vv->last_field == V4L2_FIELD_BOTTOM ) {
-+                      vdma1.base_odd  = vdma1.base_even;
-+                      vdma1.base_even = vdma1.prot_addr;
-+                      vdma1.pitch /= 2;
-+              }
-       } else if (field == V4L2_FIELD_TOP) {
-               vdma1.base_odd  = vdma1.prot_addr;
-               vdma1.pitch /= 2;
-@@ -896,6 +910,14 @@ static int calculate_video_dma_grab_plan
-       }
-       if (V4L2_FIELD_HAS_BOTH(field)) {
-+      } else if (field == V4L2_FIELD_ALTERNATE) {
-+              /* fixme */
-+              vdma1.base_odd  = vdma1.prot_addr;
-+              vdma1.pitch /= 2;
-+              vdma2.base_odd  = vdma2.prot_addr;
-+              vdma2.pitch /= 2;
-+              vdma3.base_odd  = vdma3.prot_addr;
-+              vdma3.pitch /= 2;
-       } else if (field == V4L2_FIELD_TOP) {
-               vdma1.base_odd  = vdma1.prot_addr;
-               vdma1.pitch /= 2;
-@@ -935,21 +957,22 @@ static int calculate_video_dma_grab_plan
- static void program_capture_engine(struct saa7146_dev *dev, int planar)
- {
-       struct saa7146_vv *vv = dev->vv_data;
-+      int count = 0;
-       unsigned long e_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_E_FID_A : CMD_E_FID_B;
-       unsigned long o_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_O_FID_A : CMD_O_FID_B;
--      if( 0 != (dev->ext->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
-+      if( 0 != (dev->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
-               unsigned long tmp = e_wait;
-               e_wait = o_wait;
-               o_wait = tmp;
-       }
--      /* wait for o_fid_a/b / e_fid_a/b toggle only if bit 0 is not set*/
--      WRITE_RPS0(CMD_PAUSE | CMD_OAN | CMD_SIG0 | e_wait);
-+      /* wait for o_fid_a/b / e_fid_a/b toggle only if rps register 0 is not set*/
-       WRITE_RPS0(CMD_PAUSE | CMD_OAN | CMD_SIG0 | o_wait);
-+      WRITE_RPS0(CMD_PAUSE | CMD_OAN | CMD_SIG0 | e_wait);
--      /* set bit 0 */
-+      /* set rps register 0 */
-       WRITE_RPS0(CMD_WR_REG | (1 << 8) | (MC2/4));    
-       WRITE_RPS0(MASK_27 | MASK_11);
-       
-@@ -970,8 +993,14 @@ static void program_capture_engine(struc
-       }
-       
-       /* wait for o_fid_a/b / e_fid_a/b toggle */
-+      if ( vv->last_field == V4L2_FIELD_INTERLACED ) {
-+              WRITE_RPS0(CMD_PAUSE | o_wait);
-       WRITE_RPS0(CMD_PAUSE | e_wait);
-+      } else if ( vv->last_field == V4L2_FIELD_TOP ) {
-       WRITE_RPS0(CMD_PAUSE | o_wait);
-+      } else if ( vv->last_field == V4L2_FIELD_BOTTOM ) {
-+              WRITE_RPS0(CMD_PAUSE | e_wait);
-+      }
-       /* turn off video-dma1 */
-       WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4));
-@@ -999,13 +1028,39 @@ static void program_capture_engine(struc
- void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next)
- {
-       struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat);
-+      struct saa7146_vv *vv = dev->vv_data;
-+      u32 vdma1_prot_addr;
-       DEB_CAP(("buf:%p, next:%p\n",buf,next));
-+/*
-+      printk("vdma%d.base_even:     0x%08x\n", 1,saa7146_read(dev,BASE_EVEN1));
-+      printk("vdma%d.base_odd:      0x%08x\n", 1,saa7146_read(dev,BASE_ODD1));
-+      printk("vdma%d.prot_addr:     0x%08x\n", 1,saa7146_read(dev,PROT_ADDR1));
-+      printk("vdma%d.base_page:     0x%08x\n", 1,saa7146_read(dev,BASE_PAGE1));
-+      printk("vdma%d.pitch:         0x%08x\n", 1,saa7146_read(dev,PITCH1));
-+      printk("vdma%d.num_line_byte: 0x%08x\n", 1,saa7146_read(dev,NUM_LINE_BYTE1));
-+      printk("vdma%d => vptr      : 0x%08x\n", 1,saa7146_read(dev,PCI_VDP1));
-+*/
-+
-+      vdma1_prot_addr = saa7146_read(dev, PROT_ADDR1);
-+      if( 0 == vdma1_prot_addr ) {
-+              /* clear out beginning of streaming bit (rps register 0)*/
-+              DEB_CAP(("forcing sync to new frame\n"));
-+              saa7146_write(dev, MC2, MASK_27 );
-+      }
-+
-       saa7146_set_window(dev, buf->fmt->width, buf->fmt->height, buf->fmt->field);
-       saa7146_set_output_format(dev, sfmt->trans);
-       saa7146_disable_clipping(dev);
-+      if ( vv->last_field == V4L2_FIELD_INTERLACED ) {
-+      } else if ( vv->last_field == V4L2_FIELD_TOP ) {
-+              vv->last_field = V4L2_FIELD_BOTTOM;
-+      } else if ( vv->last_field == V4L2_FIELD_BOTTOM ) {
-+              vv->last_field = V4L2_FIELD_TOP;
-+      }
-+
-       if( 0 != IS_PLANAR(sfmt->trans)) {
-               calculate_video_dma_grab_planar(dev, buf);
-               program_capture_engine(dev,1);
---- linux-2.6.0-test1/drivers/media/common/saa7146_i2c.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_i2c.c      2003-07-19 17:03:49.000000000 -0700
-@@ -181,9 +181,10 @@ static int saa7146_i2c_reset(struct saa7
- /* this functions writes out the data-byte 'dword' to the i2c-device.
-    it returns 0 if ok, -1 if the transfer failed, -2 if the transfer
-    failed badly (e.g. address error) */
--static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword)
-+static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_delay)
- {
-       u32 status = 0, mc2 = 0;
-+      int trial = 0;
-       int timeout;
-       /* write out i2c-command */
-@@ -224,10 +225,13 @@ static int saa7146_i2c_writeout(struct s
-               /* wait until we get a transfer done or error */
-               timeout = jiffies + HZ/100 + 1; /* 10ms */
-               while(1) {
-+                      /**
-+                       *  first read usually delivers bogus results...
-+                       */
-+                      saa7146_i2c_status(dev);
-                       status = saa7146_i2c_status(dev);
--                      if( (0x3 == (status & 0x3)) || (0 == (status & 0x1)) ) {
-+                      if ((status & 0x3) != 1)
-                               break;
--                      }
-                       if (jiffies > timeout) {
-                               /* this is normal when probing the bus
-                                * (no answer from nonexisistant device...)
-@@ -235,6 +239,9 @@ static int saa7146_i2c_writeout(struct s
-                               DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n"));
-                               return -EIO;
-                       }
-+                      if ((++trial < 20) && short_delay)
-+                              udelay(10);
-+                      else
-                       my_wait(dev,1);
-               }
-       }
-@@ -277,6 +284,7 @@ int saa7146_i2c_transfer(struct saa7146_
-       u32* buffer = dev->d_i2c.cpu_addr;
-       int err = 0;
-         int address_err = 0;
-+        int short_delay = 0;
-       
-       if (down_interruptible (&dev->i2c_lock))
-               return -ERESTARTSYS;
-@@ -292,6 +300,8 @@ int saa7146_i2c_transfer(struct saa7146_
-               goto out;
-       }
-+        if (count > 3) short_delay = 1;
-+  
-       do {
-               /* reset the i2c-device if necessary */
-               err = saa7146_i2c_reset(dev);
-@@ -302,7 +312,7 @@ int saa7146_i2c_transfer(struct saa7146_
-               /* write out the u32s one after another */
-               for(i = 0; i < count; i++) {
--                      err = saa7146_i2c_writeout(dev, &buffer[i] );
-+                      err = saa7146_i2c_writeout(dev, &buffer[i], short_delay);
-                       if ( 0 != err) {
-                               /* this one is unsatisfying: some i2c slaves on some
-                                  dvb cards don't acknowledge correctly, so the saa7146
-@@ -357,7 +367,7 @@ out:
-       if( 0 == dev->revision ) {
-               u32 zero = 0;
-               saa7146_i2c_reset(dev);
--              if( 0 != saa7146_i2c_writeout(dev, &zero)) {
-+              if( 0 != saa7146_i2c_writeout(dev, &zero, short_delay)) {
-                       INFO(("revision 0 error. this should never happen.\n"));
-               }
-       }
-@@ -397,8 +407,13 @@ int saa7146_i2c_adapter_prepare(struct s
-       if( NULL != i2c_adapter ) {
-               memset(i2c_adapter,0,sizeof(struct i2c_adapter));
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-+              strcpy(i2c_adapter->name, dev->name);   
-+              i2c_adapter->data = dev;
-+#else
-               strcpy(i2c_adapter->dev.name, dev->name);       
-               i2c_set_adapdata(i2c_adapter,dev);
-+#endif
-               i2c_adapter->algo          = &saa7146_algo;
-               i2c_adapter->algo_data     = NULL;
-               i2c_adapter->id            = I2C_ALGO_SAA7146;
---- linux-2.6.0-test1/drivers/media/common/saa7146_vbi.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_vbi.c      2003-07-19 17:03:49.000000000 -0700
-@@ -9,6 +9,7 @@ static int vbi_workaround(struct saa7146
-         u32          *cpu;
-         dma_addr_t   dma_addr;
-       
-+      int count = 0;
-       int i;
-       DECLARE_WAITQUEUE(wait, current);
-@@ -443,5 +444,3 @@ struct saa7146_use_ops saa7146_vbi_uops 
-       .irq_done       = vbi_irq_done,
-       .read           = vbi_read,
- };
--
--EXPORT_SYMBOL_GPL(saa7146_vbi_uops);
---- linux-2.6.0-test1/drivers/media/common/saa7146_video.c     2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/common/saa7146_video.c    2003-07-19 17:03:49.000000000 -0700
-@@ -137,6 +137,7 @@ static int try_win(struct saa7146_dev *d
-         switch (field) {
-         case V4L2_FIELD_TOP:
-         case V4L2_FIELD_BOTTOM:
-+        case V4L2_FIELD_ALTERNATE:
-                 maxh = maxh / 2;
-                 break;
-         case V4L2_FIELD_INTERLACED:
-@@ -186,11 +187,18 @@ static int try_fmt(struct saa7146_fh *fh
-                               : V4L2_FIELD_BOTTOM;
-               }
-               switch (field) {
-+              case V4L2_FIELD_ALTERNATE: {
-+                      vv->last_field = V4L2_FIELD_TOP;
-+                      maxh = maxh / 2;
-+                      break;
-+              }
-               case V4L2_FIELD_TOP:
-               case V4L2_FIELD_BOTTOM:
-+                      vv->last_field = V4L2_FIELD_INTERLACED;
-                       maxh = maxh / 2;
-                       break;
-               case V4L2_FIELD_INTERLACED:
-+                      vv->last_field = V4L2_FIELD_INTERLACED;
-                       break;
-               default: {
-                       DEB_D(("no known field mode '%d'.\n",field));
-@@ -220,7 +228,7 @@ static int try_fmt(struct saa7146_fh *fh
-       }
- }
--static int start_preview(struct saa7146_fh *fh)
-+int saa7146_start_preview(struct saa7146_fh *fh)
- {
-       struct saa7146_dev *dev = fh->dev;
-       struct saa7146_vv *vv = dev->vv_data;
-@@ -266,12 +274,12 @@ static int start_preview(struct saa7146_
-       return 0;
- }
--static int stop_preview(struct saa7146_fh *fh)
-+int saa7146_stop_preview(struct saa7146_fh *fh)
- {
-       struct saa7146_dev *dev = fh->dev;
-       struct saa7146_vv *vv = dev->vv_data;
--      DEB_EE(("saa7146.o: stop_preview()\n"));
-+      DEB_EE(("saa7146.o: saa7146_stop_preview()\n"));
-       /* check if overlay is running */
-       if( 0 == vv->ov_data ) {
-@@ -333,8 +341,8 @@ static int s_fmt(struct saa7146_fh *fh, 
-               if( vv->ov_data != NULL ) {
-                       if( fh == vv->ov_data->fh) {
-                               spin_lock_irqsave(&dev->slock,flags);
--                              stop_preview(fh);
--                              start_preview(fh);
-+                              saa7146_stop_preview(fh);
-+                              saa7146_start_preview(fh);
-                               spin_unlock_irqrestore(&dev->slock,flags);
-                       }
-               }
-@@ -522,8 +530,8 @@ static int set_control(struct saa7146_fh
-               if( 0 != vv->ov_data ) {
-                       if( fh == vv->ov_data->fh ) {
-                               spin_lock_irqsave(&dev->slock,flags);
--                              stop_preview(fh);
--                              start_preview(fh);
-+                              saa7146_stop_preview(fh);
-+                              saa7146_start_preview(fh);
-                               spin_unlock_irqrestore(&dev->slock,flags);
-                       }
-               }
-@@ -561,7 +569,7 @@ static int saa7146_pgtable_build(struct 
-                               m3 = ((size+(size/2)+PAGE_SIZE)/PAGE_SIZE)-1;
-                               o1 = size%PAGE_SIZE;
-                               o2 = (size+(size/4))%PAGE_SIZE;
--                              printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2);
-+                              DEB_CAP(("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2));
-                               break;
-                       }
-                       case 16: {
-@@ -571,7 +579,7 @@ static int saa7146_pgtable_build(struct 
-                               m3 = ((2*size+PAGE_SIZE)/PAGE_SIZE)-1;
-                               o1 = size%PAGE_SIZE;
-                               o2 = (size+(size/2))%PAGE_SIZE;
--                              printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2);
-+                              DEB_CAP(("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2));
-                               break;
-                       }
-                       default: {
-@@ -674,7 +682,7 @@ static int video_begin(struct saa7146_fh
-       spin_lock_irqsave(&dev->slock,flags);
--      /* clear out beginning of streaming bit */
-+      /* clear out beginning of streaming bit (rps register 0)*/
-       saa7146_write(dev, MC2, MASK_27 );
-       /* enable rps0 irqs */
-@@ -740,19 +748,19 @@ int saa7146_video_do_ioctl(struct inode 
-       struct videobuf_queue *q;
-       /* check if extension handles the command */
--      for(ee = 0; dev->ext->ext_vv_data->ioctls[ee].flags != 0; ee++) {
--              if( cmd == dev->ext->ext_vv_data->ioctls[ee].cmd )
-+      for(ee = 0; dev->ext_vv_data->ioctls[ee].flags != 0; ee++) {
-+              if( cmd == dev->ext_vv_data->ioctls[ee].cmd )
-                       break;
-       }
-       
--      if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) {
-+      if( 0 != (dev->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) {
-               DEB_D(("extension handles ioctl exclusive.\n"));
--              result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg);
-+              result = dev->ext_vv_data->ioctl(fh, cmd, arg);
-               return result;
-       }
--      if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_BEFORE) ) {
-+      if( 0 != (dev->ext_vv_data->ioctls[ee].flags & SAA7146_BEFORE) ) {
-               DEB_D(("extension handles ioctl before.\n"));
--              result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg);
-+              result = dev->ext_vv_data->ioctl(fh, cmd, arg);
-               if( -EAGAIN != result ) {
-                       return result;
-               }
-@@ -793,7 +801,7 @@ int saa7146_video_do_ioctl(struct inode 
-                       V4L2_CAP_VIDEO_OVERLAY |
-                       V4L2_CAP_READWRITE | 
-                       V4L2_CAP_STREAMING;
--              cap->capabilities |= dev->ext->ext_vv_data->capabilities;
-+              cap->capabilities |= dev->ext_vv_data->capabilities;
-               return 0;
-       }
-       case VIDIOC_G_FBUF:
-@@ -942,9 +950,10 @@ int saa7146_video_do_ioctl(struct inode 
-               struct v4l2_standard *e = arg;
-               if (e->index < 0 )
-                       return -EINVAL;
--              if( e->index < dev->ext->ext_vv_data->num_stds ) {
-+              if( e->index < dev->ext_vv_data->num_stds ) {
-                       DEB_EE(("VIDIOC_ENUMSTD: index:%d\n",e->index));
--                      return v4l2_video_std_construct(e, dev->ext->ext_vv_data->stds[e->index].id, dev->ext->ext_vv_data->stds[e->index].name);
-+                      v4l2_video_std_construct(e, dev->ext_vv_data->stds[e->index].id, dev->ext_vv_data->stds[e->index].name);
-+                      return 0;
-               }
-               return -EINVAL;
-       }
-@@ -968,22 +977,22 @@ int saa7146_video_do_ioctl(struct inode 
-               if( vv->ov_data != NULL ) {
-                       ov_fh = vv->ov_data->fh;
--                      stop_preview(ov_fh);
-+                      saa7146_stop_preview(ov_fh);
-                       restart_overlay = 1;
-               }
--              for(i = 0; i < dev->ext->ext_vv_data->num_stds; i++)
--                      if (*id & dev->ext->ext_vv_data->stds[i].id)
-+              for(i = 0; i < dev->ext_vv_data->num_stds; i++)
-+                      if (*id & dev->ext_vv_data->stds[i].id)
-                               break;
--              if (i != dev->ext->ext_vv_data->num_stds) {
--                      vv->standard = &dev->ext->ext_vv_data->stds[i];
--                      if( NULL != dev->ext->ext_vv_data->std_callback )
--                              dev->ext->ext_vv_data->std_callback(dev, vv->standard);
-+              if (i != dev->ext_vv_data->num_stds) {
-+                      vv->standard = &dev->ext_vv_data->stds[i];
-+                      if( NULL != dev->ext_vv_data->std_callback )
-+                              dev->ext_vv_data->std_callback(dev, vv->standard);
-                       found = 1;
-               }
-               if( 0 != restart_overlay ) {
--                      start_preview(ov_fh);
-+                      saa7146_start_preview(ov_fh);
-               }
-               up(&dev->lock);
-@@ -1000,7 +1009,7 @@ int saa7146_video_do_ioctl(struct inode 
-               int on = *(int *)arg;
-               int err = 0;
--              if( NULL == vv->ov_fmt ) {
-+              if( NULL == vv->ov_fmt && on != 0 ) {
-                       DEB_D(("VIDIOC_OVERLAY: no framebuffer informations. call S_FBUF first!\n"));
-                       return -EAGAIN;
-               }
-@@ -1013,7 +1022,7 @@ int saa7146_video_do_ioctl(struct inode 
-                               }
-                       }
-                       spin_lock_irqsave(&dev->slock,flags);
--                      err = start_preview(fh);
-+                      err = saa7146_start_preview(fh);
-                       spin_unlock_irqrestore(&dev->slock,flags);
-               } else {
-                       if( vv->ov_data != NULL ) {
-@@ -1022,7 +1031,7 @@ int saa7146_video_do_ioctl(struct inode 
-                               }
-                       }
-                       spin_lock_irqsave(&dev->slock,flags);
--                      err = stop_preview(fh);
-+                      err = saa7146_stop_preview(fh);
-                       spin_unlock_irqrestore(&dev->slock,flags);
-               }
-               return err;
-@@ -1036,12 +1045,18 @@ int saa7146_video_do_ioctl(struct inode 
-               return videobuf_querybuf(q,arg);
-       }
-       case VIDIOC_QBUF: {
--              DEB_D(("VIDIOC_QBUF \n"));
--              return videobuf_qbuf(file,q,arg);
-+              struct v4l2_buffer *b = arg;
-+              int ret = 0;
-+              ret = videobuf_qbuf(file,q,b);
-+              DEB_D(("VIDIOC_QBUF: ret:%d, index:%d\n",ret,b->index));
-+              return ret;
-       }
-       case VIDIOC_DQBUF: {
--              DEB_D(("VIDIOC_DQBUF \n"));
--              return videobuf_dqbuf(file,q,arg);
-+              struct v4l2_buffer *b = arg;
-+              int ret = 0;
-+              ret = videobuf_dqbuf(file,q,b);
-+              DEB_D(("VIDIOC_DQBUF: ret:%d, index:%d\n",ret,b->index));
-+              return ret;
-       }
-       case VIDIOC_STREAMON: {
-               DEB_D(("VIDIOC_STREAMON \n"));
-@@ -1075,7 +1090,7 @@ int saa7146_video_do_ioctl(struct inode 
-               q = &fh->video_q;
-               down(&q->lock);
--              err = videobuf_mmap_setup(file,q,gbuffers,gbufsize);
-+              err = videobuf_mmap_setup(file,q,gbuffers,gbufsize); // ,V4L2_MEMORY_MMAP);
-               if (err < 0) {
-                       up(&q->lock);
-                       return err;
-@@ -1250,7 +1265,7 @@ static void video_init(struct saa7146_de
-       vv->video_q.dev              = dev;
-       /* set some default values */
--      vv->standard = &dev->ext->ext_vv_data->stds[0];
-+      vv->standard = &dev->ext_vv_data->stds[0];
-       /* FIXME: what's this? */
-       vv->current_hps_source = SAA7146_HPS_SOURCE_PORT_A;
-@@ -1287,7 +1302,7 @@ static void video_close(struct saa7146_d
-       if( 0 != vv->ov_data ) {
-               if( fh == vv->ov_data->fh ) {
-                       spin_lock_irqsave(&dev->slock,flags);
--                      stop_preview(fh);
-+                      saa7146_stop_preview(fh);
-                       spin_unlock_irqrestore(&dev->slock,flags);
-               }
-       }
-@@ -1331,7 +1346,7 @@ static ssize_t video_read(struct file *f
-       if( vv->ov_data != NULL ) {
-               ov_fh = vv->ov_data->fh;
--              stop_preview(ov_fh);
-+              saa7146_stop_preview(ov_fh);
-               restart_overlay = 1;
-       }
-@@ -1343,7 +1358,7 @@ static ssize_t video_read(struct file *f
-       /* restart overlay if it was active before */
-       if( 0 != restart_overlay ) {
--              start_preview(ov_fh);
-+              saa7146_start_preview(ov_fh);
-       }
-       
-       return ret;
-@@ -1358,5 +1373,3 @@ struct saa7146_use_ops saa7146_video_uop
-       .capture_begin = video_begin,
-       .capture_end = video_end,
- };
--
--EXPORT_SYMBOL_GPL(saa7146_video_uops);
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/common/saa7146_vv_ksyms.c 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,15 @@
-+#include <linux/module.h>
-+#include <media/saa7146_vv.h>
-+
-+EXPORT_SYMBOL_GPL(saa7146_vbi_uops);
-+EXPORT_SYMBOL_GPL(saa7146_video_uops);
-+
-+EXPORT_SYMBOL_GPL(saa7146_start_preview);
-+EXPORT_SYMBOL_GPL(saa7146_stop_preview);
-+
-+EXPORT_SYMBOL_GPL(saa7146_set_hps_source_and_sync);
-+EXPORT_SYMBOL_GPL(saa7146_register_device);
-+EXPORT_SYMBOL_GPL(saa7146_unregister_device);
-+
-+EXPORT_SYMBOL_GPL(saa7146_vv_init);
-+EXPORT_SYMBOL_GPL(saa7146_vv_release);
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/b2c2/Kconfig  2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,8 @@
-+config DVB_B2C2_SKYSTAR
-+      tristate "Technisat Skystar2 PCI"
-+      depends on DVB_CORE
-+      help
-+        Support for the Skystar2 PCI DVB card by Technisat, which
-+        is equipped with the FlexCopII chipset by B2C2.
-+
-+        Say Y if you own such a device and want to use it.
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/b2c2/Makefile 2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,3 @@
-+obj-$(CONFIG_DVB_B2C2_SKYSTAR) += skystar2.o
-+
-+EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/b2c2/skystar2.c       2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,2506 @@
-+/*
-+ * skystar2.c - driver for the Technisat SkyStar2 PCI DVB card
-+ *              based on the FlexCopII by B2C2,Inc.
-+ *
-+ * Copyright (C) 2003  V.C. , skystar@moldova.cc
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public License
-+ * as published by the Free Software Foundation; either version 2.1
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-+ */
-+#include <linux/module.h>
-+#include <linux/delay.h>
-+#include <linux/pci.h>
-+
-+#include "dvb_i2c.h"
-+#include "dvb_frontend.h"
-+#include "dvb_functions.h"
-+
-+#include <linux/dvb/frontend.h>
-+#include <linux/dvb/dmx.h>
-+#include "dvb_demux.h"
-+#include "dmxdev.h"
-+#include "dvb_filter.h"
-+#include "dvbdev.h"
-+#include "demux.h"
-+#include "dvb_net.h"
-+
-+static int debug = 0;
-+#define dprintk(x...) do { if (debug) printk(x); } while (0)
-+
-+#define SizeOfBufDMA1 0x3AC00
-+#define SizeOfBufDMA2 0x758
-+
-+struct dmaq {
-+
-+      u32 bus_addr;
-+      u32 head;
-+      u32 tail;
-+      u32 buffer_size;
-+      u8 *buffer;
-+};
-+
-+struct packet_header {
-+
-+      u32 sync_byte;
-+      u32 transport_error_indicator;
-+      u32 payload_unit_start_indicator;
-+      u32 transport_priority;
-+      u32 pid;
-+      u32 transport_scrambling_control;
-+      u32 adaptation_field_control;
-+      u32 continuity_counter;
-+};
-+
-+struct adapter {
-+
-+      struct pci_dev *pdev;
-+
-+      u8 card_revision;
-+      u32 b2c2_revision;
-+      u32 PidFilterMax;
-+      u32 MacFilterMax;
-+      u32 irq;
-+      u32 io_mem;
-+      u32 io_port;
-+      u8 mac_addr[8];
-+      u32 dwSramType;
-+
-+      struct dvb_adapter *dvb_adapter;
-+      struct dvb_demux demux;
-+      struct dmxdev dmxdev;
-+      struct dmx_frontend hw_frontend;
-+      struct dmx_frontend mem_frontend;
-+      struct dvb_i2c_bus *i2c_bus;
-+      struct dvb_net dvbnet;
-+
-+      struct semaphore i2c_sem;
-+
-+      struct dmaq dmaq1;
-+      struct dmaq dmaq2;
-+
-+      u32 dma_ctrl;
-+      u32 dma_status;
-+
-+      u32 capturing;
-+
-+      spinlock_t lock;
-+
-+      u16 pids[0x27];
-+      u32 mac_filter;
-+};
-+
-+#define WriteRegDW(adapter,reg,value) writel(value, adapter->io_mem + reg)
-+#define ReadRegDW(adapter,reg) readl(adapter->io_mem + reg)
-+
-+static void WriteRegOp(struct adapter *adapter, u32 reg, u32 operation, u32 andvalue, u32 orvalue)
-+{
-+      u32 tmp;
-+
-+      tmp = ReadRegDW(adapter, reg);
-+
-+      if (operation == 1)
-+              tmp = tmp | orvalue;
-+      if (operation == 2)
-+              tmp = tmp & andvalue;
-+      if (operation == 3)
-+              tmp = (tmp & andvalue) | orvalue;
-+
-+      WriteRegDW(adapter, reg, tmp);
-+}
-+
-+/* i2c functions */
-+static int i2cMainWriteForFlex2(struct adapter * adapter, u32 command, u8 * buf, u32 retries)
-+{
-+      u32 i;
-+      u32 value;
-+
-+      WriteRegDW(adapter, 0x100, 0);
-+      WriteRegDW(adapter, 0x100, command);
-+
-+      for (i = 0; i < retries; i++) {
-+              value = ReadRegDW(adapter, 0x100);
-+
-+              if ((value & 0x40000000) == 0) {
-+                      if ((value & 0x81000000) == 0x80000000) {
-+                              if (buf != 0)
-+                                      *buf = (value >> 0x10) & 0xff;
-+
-+                              return 1;
-+                      }
-+
-+              } else {
-+
-+                      WriteRegDW(adapter, 0x100, 0);
-+                      WriteRegDW(adapter, 0x100, command);
-+              }
-+      }
-+
-+      return 0;
-+}
-+
-+/* device = 0x10000000 for tuner, 0x20000000 for eeprom */
-+static void i2cMainSetup(u32 device, u32 chip_addr, u8 op, u8 addr, u32 value, u32 len, u32 *command)
-+{
-+      *command = device | ((len - 1) << 26) | (value << 16) | (addr << 8) | chip_addr;
-+
-+      if (op != 0)
-+              *command = *command | 0x03000000;
-+      else
-+              *command = *command | 0x01000000;
-+}
-+
-+static int FlexI2cRead4(struct adapter * adapter, u32 device, u32 chip_addr, u16 addr, u8 * buf, u8 len)
-+{
-+      u32 command;
-+      u32 value;
-+
-+      int result, i;
-+
-+      i2cMainSetup(device, chip_addr, 1, addr, 0, len, &command);
-+
-+      result = i2cMainWriteForFlex2(adapter, command, buf, 100000);
-+
-+      if ((result & 0xff) != 0) {
-+              if (len > 1) {
-+                      value = ReadRegDW(adapter, 0x104);
-+
-+                      for (i = 1; i < len; i++) {
-+                              buf[i] = value & 0xff;
-+                              value = value >> 8;
-+                      }
-+              }
-+      }
-+
-+      return result;
-+}
-+
-+static int FlexI2cWrite4(struct adapter * adapter, u32 device, u32 chip_addr, u32 addr, u8 * buf, u8 len)
-+{
-+      u32 command;
-+      u32 value;
-+      int i;
-+
-+      if (len > 1) {
-+              value = 0;
-+
-+              for (i = len; i > 1; i--) {
-+                      value = value << 8;
-+                      value = value | buf[i - 1];
-+              }
-+
-+              WriteRegDW(adapter, 0x104, value);
-+      }
-+
-+      i2cMainSetup(device, chip_addr, 0, addr, buf[0], len, &command);
-+
-+      return i2cMainWriteForFlex2(adapter, command, 0, 100000);
-+}
-+
-+static void fixchipaddr(u32 device, u32 bus, u32 addr, u32 *ret)
-+{
-+      if (device == 0x20000000)
-+              *ret = bus | ((addr >> 8) & 3);
-+
-+      *ret = bus;
-+}
-+
-+static u32 FLEXI2C_read(struct adapter * adapter, u32 device, u32 bus, u32 addr, u8 * buf, u32 len)
-+{
-+      u32 chipaddr;
-+      u32 bytes_to_transfer;
-+      u8 *start;
-+
-+//  dprintk("%s:\n", __FUNCTION__);
-+
-+      start = buf;
-+
-+      while (len != 0) {
-+              bytes_to_transfer = len;
-+
-+              if (bytes_to_transfer > 4)
-+                      bytes_to_transfer = 4;
-+
-+              fixchipaddr(device, bus, addr, &chipaddr);
-+
-+              if (FlexI2cRead4(adapter, device, chipaddr, addr, buf, bytes_to_transfer) == 0)
-+                      return buf - start;
-+
-+              buf = buf + bytes_to_transfer;
-+              addr = addr + bytes_to_transfer;
-+              len = len - bytes_to_transfer;
-+      };
-+
-+      return buf - start;
-+}
-+
-+static u32 FLEXI2C_write(struct adapter * adapter, u32 device, u32 bus, u32 addr, u8 * buf, u32 len)
-+{
-+      u32 chipaddr;
-+      u32 bytes_to_transfer;
-+      u8 *start;
-+
-+//  dprintk("%s:\n", __FUNCTION__);
-+
-+      start = buf;
-+
-+      while (len != 0) {
-+              bytes_to_transfer = len;
-+
-+              if (bytes_to_transfer > 4)
-+                      bytes_to_transfer = 4;
-+
-+              fixchipaddr(device, bus, addr, &chipaddr);
-+
-+              if (FlexI2cWrite4(adapter, device, chipaddr, addr, buf, bytes_to_transfer) == 0)
-+                      return buf - start;
-+
-+              buf = buf + bytes_to_transfer;
-+              addr = addr + bytes_to_transfer;
-+              len = len - bytes_to_transfer;
-+      }
-+
-+      return buf - start;
-+}
-+
-+static int master_xfer(struct dvb_i2c_bus *i2c, const struct i2c_msg *msgs, int num)
-+{
-+      struct adapter *tmp = i2c->data;
-+      int i, ret = 0;
-+
-+      if (down_interruptible(&tmp->i2c_sem))
-+              return -ERESTARTSYS;
-+
-+      if (0) {
-+              dprintk("%s:\n", __FUNCTION__);
-+
-+              for (i = 0; i < num; i++) {
-+                      printk("message %d: flags=%x, addr=0x%04x, buf=%x, len=%d \n", i, msgs[i].flags, msgs[i].addr, (u32) msgs[i].buf, msgs[i].len);
-+              }
-+      }
-+      
-+      /* allow only the vp310 frontend to access the bus */
-+      if ((msgs[0].addr != 0x0E) && (msgs[0].addr != 0x61)) {
-+              up(&tmp->i2c_sem);
-+
-+              return -EREMOTEIO;
-+      }
-+
-+      if ((num == 1) && (msgs[0].buf != NULL)) {
-+              if (msgs[0].flags == I2C_M_RD) {
-+                      ret = -EINVAL;
-+
-+              } else {
-+
-+                      // single writes do have the reg addr in buf[0] and data in buf[1] to buf[n]
-+                      ret = FLEXI2C_write(tmp, 0x10000000, msgs[0].addr, msgs[0].buf[0], &msgs[0].buf[1], msgs[0].len - 1);
-+
-+                      if (ret != msgs[0].len - 1)
-+                              ret = -EREMOTEIO;
-+                      else
-+                              ret = num;
-+              }
-+
-+      } else if ((num == 2) && (msgs[1].buf != NULL)) {
-+
-+              // i2c reads consist of a reg addr _write_ followed by a data read, so msg[1].flags has to be examined
-+              if (msgs[1].flags == I2C_M_RD) {
-+                      ret = FLEXI2C_read(tmp, 0x10000000, msgs[0].addr, msgs[0].buf[0], msgs[1].buf, msgs[1].len);
-+
-+              } else {
-+
-+                      ret = FLEXI2C_write(tmp, 0x10000000, msgs[0].addr, msgs[0].buf[0], msgs[1].buf, msgs[1].len);
-+              }
-+
-+              if (ret != msgs[1].len)
-+                      ret = -EREMOTEIO;
-+              else
-+                      ret = num;
-+      }
-+
-+      up(&tmp->i2c_sem);
-+
-+      /* master xfer functions always return the number of successfully
-+         transmitted messages, not the number of transmitted bytes.
-+         return -EREMOTEIO in case of failure. */
-+      return ret;
-+}
-+
-+/* SRAM (Skystar2 rev2.3 has one "ISSI IS61LV256" chip on board,
-+   but it seems that FlexCopII can work with more than one chip) */
-+static void SRAMSetNetDest(struct adapter * adapter, u8 dest)
-+{
-+      u32 tmp;
-+
-+      udelay(1000);
-+
-+      tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFFFC) | (dest & 3);
-+
-+      udelay(1000);
-+
-+      WriteRegDW(adapter, 0x714, tmp);
-+      WriteRegDW(adapter, 0x714, tmp);
-+
-+      udelay(1000);
-+
-+      /* return value is never used? */
-+/*    return tmp; */
-+}
-+
-+static void SRAMSetCaiDest(struct adapter * adapter, u8 dest)
-+{
-+      u32 tmp;
-+
-+      udelay(1000);
-+
-+      tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFFF3) | ((dest & 3) << 2);
-+
-+      udelay(1000);
-+      udelay(1000);
-+
-+      WriteRegDW(adapter, 0x714, tmp);
-+      WriteRegDW(adapter, 0x714, tmp);
-+
-+      udelay(1000);
-+
-+      /* return value is never used? */
-+/*    return tmp; */
-+}
-+
-+static void SRAMSetCaoDest(struct adapter * adapter, u8 dest)
-+{
-+      u32 tmp;
-+
-+      udelay(1000);
-+
-+      tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFFCF) | ((dest & 3) << 4);
-+
-+      udelay(1000);
-+      udelay(1000);
-+
-+      WriteRegDW(adapter, 0x714, tmp);
-+      WriteRegDW(adapter, 0x714, tmp);
-+
-+      udelay(1000);
-+
-+      /* return value is never used? */
-+/*    return tmp; */
-+}
-+
-+static void SRAMSetMediaDest(struct adapter * adapter, u8 dest)
-+{
-+      u32 tmp;
-+
-+      udelay(1000);
-+
-+      tmp = (ReadRegDW(adapter, 0x714) & 0xFFFFFF3F) | ((dest & 3) << 6);
-+
-+      udelay(1000);
-+      udelay(1000);
-+
-+      WriteRegDW(adapter, 0x714, tmp);
-+      WriteRegDW(adapter, 0x714, tmp);
-+
-+      udelay(1000);
-+
-+      /* return value is never used? */
-+/*    return tmp; */
-+}
-+
-+/* SRAM memory is accessed through a buffer register in the FlexCop
-+   chip (0x700). This register has the following structure:
-+    bits 0-14  : address
-+    bit  15    : read/write flag
-+    bits 16-23 : 8-bit word to write
-+    bits 24-27 : = 4
-+    bits 28-29 : memory bank selector
-+    bit  31    : busy flag
-+*/
-+static void FlexSramWrite(struct adapter *adapter, u32 bank, u32 addr, u8 * buf, u32 len)
-+{
-+      u32 i, command, retries;
-+
-+      for (i = 0; i < len; i++) {
-+              command = bank | addr | 0x04000000 | (*buf << 0x10);
-+
-+              retries = 2;
-+
-+              while (((ReadRegDW(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
-+                      mdelay(1);
-+                      retries--;
-+              };
-+
-+              if (retries == 0)
-+                      printk("%s: SRAM timeout\n", __FUNCTION__);
-+
-+              WriteRegDW(adapter, 0x700, command);
-+
-+              buf++;
-+              addr++;
-+      }
-+}
-+
-+static void FlexSramRead(struct adapter *adapter, u32 bank, u32 addr, u8 * buf, u32 len)
-+{
-+      u32 i, command, value, retries;
-+
-+      for (i = 0; i < len; i++) {
-+              command = bank | addr | 0x04008000;
-+
-+              retries = 10000;
-+
-+              while (((ReadRegDW(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
-+                      mdelay(1);
-+                      retries--;
-+              };
-+
-+              if (retries == 0)
-+                      printk("%s: SRAM timeout\n", __FUNCTION__);
-+
-+              WriteRegDW(adapter, 0x700, command);
-+
-+              retries = 10000;
-+
-+              while (((ReadRegDW(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
-+                      mdelay(1);
-+                      retries--;
-+              };
-+
-+              if (retries == 0)
-+                      printk("%s: SRAM timeout\n", __FUNCTION__);
-+
-+              value = ReadRegDW(adapter, 0x700) >> 0x10;
-+
-+              *buf = (value & 0xff);
-+
-+              addr++;
-+              buf++;
-+      }
-+}
-+
-+static void SRAM_writeChunk(struct adapter *adapter, u32 addr, u8 * buf, u16 len)
-+{
-+      u32 bank;
-+
-+      bank = 0;
-+
-+      if (adapter->dwSramType == 0x20000) {
-+              bank = (addr & 0x18000) << 0x0D;
-+      }
-+
-+      if (adapter->dwSramType == 0x00000) {
-+              if ((addr >> 0x0F) == 0)
-+                      bank = 0x20000000;
-+              else
-+                      bank = 0x10000000;
-+      }
-+
-+      FlexSramWrite(adapter, bank, addr & 0x7FFF, buf, len);
-+}
-+
-+static void SRAM_readChunk(struct adapter *adapter, u32 addr, u8 * buf, u16 len)
-+{
-+      u32 bank;
-+
-+      bank = 0;
-+
-+      if (adapter->dwSramType == 0x20000) {
-+              bank = (addr & 0x18000) << 0x0D;
-+      }
-+
-+      if (adapter->dwSramType == 0x00000) {
-+              if ((addr >> 0x0F) == 0)
-+                      bank = 0x20000000;
-+              else
-+                      bank = 0x10000000;
-+      }
-+
-+      FlexSramRead(adapter, bank, addr & 0x7FFF, buf, len);
-+}
-+
-+static void SRAM_read(struct adapter *adapter, u32 addr, u8 * buf, u32 len)
-+{
-+      u32 length;
-+
-+      while (len != 0) {
-+              length = len;
-+
-+              // check if the address range belongs to the same 
-+              // 32K memory chip. If not, the data is read from 
-+              // one chip at a time.
-+              if ((addr >> 0x0F) != ((addr + len - 1) >> 0x0F)) {
-+                      length = (((addr >> 0x0F) + 1) << 0x0F) - addr;
-+              }
-+
-+              SRAM_readChunk(adapter, addr, buf, length);
-+
-+              addr = addr + length;
-+              buf = buf + length;
-+              len = len - length;
-+      }
-+}
-+
-+static void SRAM_write(struct adapter *adapter, u32 addr, u8 * buf, u32 len)
-+{
-+      u32 length;
-+
-+      while (len != 0) {
-+              length = len;
-+
-+              // check if the address range belongs to the same 
-+              // 32K memory chip. If not, the data is written to
-+              // one chip at a time.
-+              if ((addr >> 0x0F) != ((addr + len - 1) >> 0x0F)) {
-+                      length = (((addr >> 0x0F) + 1) << 0x0F) - addr;
-+              }
-+
-+              SRAM_writeChunk(adapter, addr, buf, length);
-+
-+              addr = addr + length;
-+              buf = buf + length;
-+              len = len - length;
-+      }
-+}
-+
-+static void SRAM_setSize(struct adapter *adapter, u32 mask)
-+{
-+      WriteRegDW(adapter, 0x71C, (mask | (~0x30000 & ReadRegDW(adapter, 0x71C))));
-+}
-+
-+static void SRAM_init(struct adapter *adapter)
-+{
-+      u32 tmp;
-+
-+      tmp = ReadRegDW(adapter, 0x71C);
-+
-+      WriteRegDW(adapter, 0x71C, 1);
-+
-+      if (ReadRegDW(adapter, 0x71C) != 0) {
-+              WriteRegDW(adapter, 0x71C, tmp);
-+
-+              adapter->dwSramType = tmp & 0x30000;
-+
-+              dprintk("%s: dwSramType = %x\n", __FUNCTION__, adapter->dwSramType);
-+
-+      } else {
-+
-+              adapter->dwSramType = 0x10000;
-+
-+              dprintk("%s: dwSramType = %x\n", __FUNCTION__, adapter->dwSramType);
-+      }
-+
-+      /* return value is never used? */
-+/*    return adapter->dwSramType; */
-+}
-+
-+static int SRAM_testLocation(struct adapter *adapter, u32 mask, u32 addr)
-+{
-+      u8 tmp1, tmp2;
-+
-+      dprintk("%s: mask = %x, addr = %x\n", __FUNCTION__, mask, addr);
-+
-+      SRAM_setSize(adapter, mask);
-+      SRAM_init(adapter);
-+
-+      tmp2 = 0xA5;
-+      tmp1 = 0x4F;
-+
-+      SRAM_write(adapter, addr, &tmp2, 1);
-+      SRAM_write(adapter, addr + 4, &tmp1, 1);
-+
-+      tmp2 = 0;
-+
-+      mdelay(20);
-+
-+      SRAM_read(adapter, addr, &tmp2, 1);
-+      SRAM_read(adapter, addr, &tmp2, 1);
-+
-+      dprintk("%s: wrote 0xA5, read 0x%2x\n", __FUNCTION__, tmp2);
-+
-+      if (tmp2 != 0xA5)
-+              return 0;
-+
-+      tmp2 = 0x5A;
-+      tmp1 = 0xF4;
-+
-+      SRAM_write(adapter, addr, &tmp2, 1);
-+      SRAM_write(adapter, addr + 4, &tmp1, 1);
-+
-+      tmp2 = 0;
-+
-+      mdelay(20);
-+
-+      SRAM_read(adapter, addr, &tmp2, 1);
-+      SRAM_read(adapter, addr, &tmp2, 1);
-+
-+      dprintk("%s: wrote 0x5A, read 0x%2x\n", __FUNCTION__, tmp2);
-+
-+      if (tmp2 != 0x5A)
-+              return 0;
-+
-+      return 1;
-+}
-+
-+static u32 SRAM_length(struct adapter * adapter)
-+{
-+      if (adapter->dwSramType == 0x10000)
-+              return 32768;   //  32K
-+      if (adapter->dwSramType == 0x00000)
-+              return 65536;   //  64K        
-+      if (adapter->dwSramType == 0x20000)
-+              return 131072;  // 128K
-+
-+      return 32768;           // 32K
-+}
-+
-+/* FlexcopII can work with 32K, 64K or 128K of external SRAM memory.
-+    - for 128K there are 4x32K chips at bank 0,1,2,3.
-+    - for  64K there are 2x32K chips at bank 1,2.
-+    - for  32K there is one 32K chip at bank 0.
-+
-+   FlexCop works only with one bank at a time. The bank is selected
-+   by bits 28-29 of the 0x700 register.
-+  
-+   bank 0 covers addresses 0x00000-0x07FFF
-+   bank 1 covers addresses 0x08000-0x0FFFF
-+   bank 2 covers addresses 0x10000-0x17FFF
-+   bank 3 covers addresses 0x18000-0x1FFFF
-+*/
-+static int SramDetectForFlex2(struct adapter *adapter)
-+{
-+      u32 tmp, tmp2, tmp3;
-+
-+      dprintk("%s:\n", __FUNCTION__);
-+
-+      tmp = ReadRegDW(adapter, 0x208);
-+      WriteRegDW(adapter, 0x208, 0);
-+
-+      tmp2 = ReadRegDW(adapter, 0x71C);
-+
-+      dprintk("%s: tmp2 = %x\n", __FUNCTION__, tmp2);
-+
-+      WriteRegDW(adapter, 0x71C, 1);
-+
-+      tmp3 = ReadRegDW(adapter, 0x71C);
-+
-+      dprintk("%s: tmp3 = %x\n", __FUNCTION__, tmp3);
-+
-+      WriteRegDW(adapter, 0x71C, tmp2);
-+
-+      // check for internal SRAM ???
-+      tmp3--;
-+      if (tmp3 != 0) {
-+              SRAM_setSize(adapter, 0x10000);
-+              SRAM_init(adapter);
-+              WriteRegDW(adapter, 0x208, tmp);
-+
-+              dprintk("%s: sram size = 32K\n", __FUNCTION__);
-+
-+              return 32;
-+      }
-+
-+      if (SRAM_testLocation(adapter, 0x20000, 0x18000) != 0) {
-+              SRAM_setSize(adapter, 0x20000);
-+              SRAM_init(adapter);
-+              WriteRegDW(adapter, 0x208, tmp);
-+
-+              dprintk("%s: sram size = 128K\n", __FUNCTION__);
-+
-+              return 128;
-+      }
-+
-+      if (SRAM_testLocation(adapter, 0x00000, 0x10000) != 0) {
-+              SRAM_setSize(adapter, 0x00000);
-+              SRAM_init(adapter);
-+              WriteRegDW(adapter, 0x208, tmp);
-+
-+              dprintk("%s: sram size = 64K\n", __FUNCTION__);
-+
-+              return 64;
-+      }
-+
-+      if (SRAM_testLocation(adapter, 0x10000, 0x00000) != 0) {
-+              SRAM_setSize(adapter, 0x10000);
-+              SRAM_init(adapter);
-+              WriteRegDW(adapter, 0x208, tmp);
-+
-+              dprintk("%s: sram size = 32K\n", __FUNCTION__);
-+
-+              return 32;
-+      }
-+
-+      SRAM_setSize(adapter, 0x10000);
-+      SRAM_init(adapter);
-+      WriteRegDW(adapter, 0x208, tmp);
-+
-+      dprintk("%s: SRAM detection failed. Set to 32K \n", __FUNCTION__);
-+
-+      return 0;
-+}
-+
-+static void SLL_detectSramSize(struct adapter *adapter)
-+{
-+      SramDetectForFlex2(adapter);
-+}
-+/* EEPROM (Skystar2 has one "24LC08B" chip on board) */
-+/*
-+static int EEPROM_write(struct adapter *adapter, u16 addr, u8 * buf, u16 len)
-+{
-+      return FLEXI2C_write(adapter, 0x20000000, 0x50, addr, buf, len);
-+}
-+*/
-+
-+static int EEPROM_read(struct adapter *adapter, u16 addr, u8 * buf, u16 len)
-+{
-+      return FLEXI2C_read(adapter, 0x20000000, 0x50, addr, buf, len);
-+}
-+
-+u8 calc_LRC(u8 * buf, u32 len)
-+{
-+      u32 i;
-+      u8 sum;
-+
-+      sum = 0;
-+
-+      for (i = 0; i < len; i++)
-+              sum = sum ^ buf[i];
-+
-+      return sum;
-+}
-+
-+static int EEPROM_LRC_read(struct adapter *adapter, u32 addr, u32 len, u8 * buf, u32 retries)
-+{
-+      int i;
-+
-+      for (i = 0; i < retries; i++) {
-+              if (EEPROM_read(adapter, addr, buf, len) == len) {
-+                      if (calc_LRC(buf, len - 1) == buf[len - 1])
-+                              return 1;
-+              }
-+      }
-+
-+      return 0;
-+}
-+
-+/*
-+static int EEPROM_LRC_write(struct adapter *adapter, u32 addr, u32 len, u8 * wbuf, u8 * rbuf, u32 retries)
-+{
-+      int i;
-+
-+      for (i = 0; i < retries; i++) {
-+              if (EEPROM_write(adapter, addr, wbuf, len) == len) {
-+                      if (EEPROM_LRC_read(adapter, addr, len, rbuf, retries) == 1)
-+                              return 1;
-+              }
-+      }
-+
-+      return 0;
-+}
-+*/
-+
-+/* These functions could be called from the initialization routine 
-+   to unlock SkyStar2 cards, locked by "Europe On Line".
-+        
-+   in cards from "Europe On Line" the key is:
-+
-+       u8 key[20] = {
-+          0xB2, 0x01, 0x00, 0x00,
-+          0x00, 0x00, 0x00, 0x00,
-+          0x00, 0x00, 0x00, 0x00,
-+          0x00, 0x00, 0x00, 0x00,
-+       };
-+
-+       LRC = 0xB3;
-+
-+  in unlocked cards the key is:
-+
-+       u8 key[20] = {
-+          0xB2, 0x00, 0x00, 0x00,
-+          0x00, 0x00, 0x00, 0x00,
-+          0x00, 0x00, 0x00, 0x00,
-+          0x00, 0x00, 0x00, 0x00,
-+       };
-+
-+      LRC = 0xB2;
-+*/
-+/*
-+static int EEPROM_writeKey(struct adapter *adapter, u8 * key, u32 len)
-+{
-+      u8 rbuf[20];
-+      u8 wbuf[20];
-+
-+      if (len != 16)
-+              return 0;
-+
-+      memcpy(wbuf, key, len);
-+
-+      wbuf[16] = 0;
-+      wbuf[17] = 0;
-+      wbuf[18] = 0;
-+      wbuf[19] = calc_LRC(wbuf, 19);
-+
-+      return EEPROM_LRC_write(adapter, 0x3E4, 20, wbuf, rbuf, 4);
-+}
-+*/
-+static int EEPROM_readKey(struct adapter *adapter, u8 * key, u32 len)
-+{
-+      u8 buf[20];
-+
-+      if (len != 16)
-+              return 0;
-+
-+      if (EEPROM_LRC_read(adapter, 0x3E4, 20, buf, 4) == 0)
-+              return 0;
-+
-+      memcpy(key, buf, len);
-+
-+      return 1;
-+}
-+
-+static int EEPROM_getMacAddr(struct adapter *adapter, char type, u8 * mac)
-+{
-+      u8 tmp[8];
-+
-+      if (EEPROM_LRC_read(adapter, 0x3F8, 8, tmp, 4) != 0) {
-+              if (type != 0) {
-+                      mac[0] = tmp[0];
-+                      mac[1] = tmp[1];
-+                      mac[2] = tmp[2];
-+                      mac[3] = 0xFE;
-+                      mac[4] = 0xFF;
-+                      mac[5] = tmp[3];
-+                      mac[6] = tmp[4];
-+                      mac[7] = tmp[5];
-+
-+              } else {
-+
-+                      mac[0] = tmp[0];
-+                      mac[1] = tmp[1];
-+                      mac[2] = tmp[2];
-+                      mac[3] = tmp[3];
-+                      mac[4] = tmp[4];
-+                      mac[5] = tmp[5];
-+              }
-+
-+              return 1;
-+
-+      } else {
-+
-+              if (type == 0) {
-+                      memset(mac, 0, 6);
-+
-+              } else {
-+
-+                      memset(mac, 0, 8);
-+              }
-+
-+              return 0;
-+      }
-+}
-+
-+/*
-+static char EEPROM_setMacAddr(struct adapter *adapter, char type, u8 * mac)
-+{
-+      u8 tmp[8];
-+
-+      if (type != 0) {
-+              tmp[0] = mac[0];
-+              tmp[1] = mac[1];
-+              tmp[2] = mac[2];
-+              tmp[3] = mac[5];
-+              tmp[4] = mac[6];
-+              tmp[5] = mac[7];
-+
-+      } else {
-+
-+              tmp[0] = mac[0];
-+              tmp[1] = mac[1];
-+              tmp[2] = mac[2];
-+              tmp[3] = mac[3];
-+              tmp[4] = mac[4];
-+              tmp[5] = mac[5];
-+      }
-+
-+      tmp[6] = 0;
-+      tmp[7] = calc_LRC(tmp, 7);
-+
-+      if (EEPROM_write(adapter, 0x3F8, tmp, 8) == 8)
-+              return 1;
-+
-+      return 0;
-+}
-+*/
-+
-+/* PID filter */
-+static void FilterEnableStream1Filter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000001, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000001);
-+      }
-+}
-+
-+static void FilterEnableStream2Filter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000002, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000002);
-+      }
-+}
-+
-+static void FilterEnablePcrFilter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000004, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000004);
-+      }
-+}
-+
-+static void FilterEnablePmtFilter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000008, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000008);
-+      }
-+}
-+
-+static void FilterEnableEmmFilter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000010, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000010);
-+      }
-+}
-+
-+static void FilterEnableEcmFilter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000020, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000020);
-+      }
-+}
-+
-+/*
-+static void FilterEnableNullFilter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000040, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000040);
-+      }
-+}
-+*/
-+
-+static void FilterEnableMaskFilter(struct adapter *adapter, u32 op)
-+{
-+      dprintk("%s: op=%x\n", __FUNCTION__, op);
-+
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000080, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000080);
-+      }
-+}
-+
-+
-+static void CtrlEnableMAC(struct adapter *adapter, u32 op)
-+{
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00004000, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00004000);
-+      }
-+}
-+
-+static int CASetMacDstAddrFilter(struct adapter *adapter, u8 * mac)
-+{
-+      u32 tmp1, tmp2;
-+
-+      tmp1 = (mac[3] << 0x18) | (mac[2] << 0x10) | (mac[1] << 0x08) | mac[0];
-+      tmp2 = (mac[5] << 0x08) | mac[4];
-+
-+      WriteRegDW(adapter, 0x418, tmp1);
-+      WriteRegDW(adapter, 0x41C, tmp2);
-+
-+      return 0;
-+}
-+
-+/*
-+static void SetIgnoreMACFilter(struct adapter *adapter, u8 op)
-+{
-+      if (op != 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00004000, 0);
-+
-+              adapter->mac_filter = 1;
-+
-+      } else {
-+
-+              if (adapter->mac_filter != 0) {
-+                      adapter->mac_filter = 0;
-+
-+                      WriteRegOp(adapter, 0x208, 1, 0, 0x00004000);
-+              }
-+      }
-+}
-+*/
-+
-+/*
-+static void CheckNullFilterEnable(struct adapter *adapter)
-+{
-+      FilterEnableNullFilter(adapter, 1);
-+      FilterEnableMaskFilter(adapter, 1);
-+}
-+*/
-+
-+static void InitPIDsInfo(struct adapter *adapter)
-+{
-+      int i;
-+
-+      for (i = 0; i < 0x27; i++)
-+              adapter->pids[i] = 0x1FFF;
-+}
-+
-+static int CheckPID(struct adapter *adapter, u16 pid)
-+{
-+      u32 i;
-+
-+      if (pid == 0x1FFF)
-+              return 0;
-+
-+      for (i = 0; i < 0x27; i++) {
-+              if (adapter->pids[i] == pid)
-+                      return 1;
-+      }
-+
-+      return 0;
-+}
-+
-+static void PidSetGroupPID(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = (pid & 0x3FFF) | (ReadRegDW(adapter, 0x30C) & 0xFFFF0000);
-+
-+      WriteRegDW(adapter, 0x30C, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static void PidSetGroupMASK(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = ((pid & 0x3FFF) << 0x10) | (ReadRegDW(adapter, 0x30C) & 0xFFFF);
-+
-+      WriteRegDW(adapter, 0x30C, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static void PidSetStream1PID(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = (pid & 0x3FFF) | (ReadRegDW(adapter, 0x300) & 0xFFFFC000);
-+
-+      WriteRegDW(adapter, 0x300, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static void PidSetStream2PID(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = ((pid & 0x3FFF) << 0x10) | (ReadRegDW(adapter, 0x300) & 0xFFFF);
-+
-+      WriteRegDW(adapter, 0x300, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static void PidSetPcrPID(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = (pid & 0x3FFF) | (ReadRegDW(adapter, 0x304) & 0xFFFFC000);
-+
-+      WriteRegDW(adapter, 0x304, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static void PidSetPmtPID(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = ((pid & 0x3FFF) << 0x10) | (ReadRegDW(adapter, 0x304) & 0x3FFF);
-+
-+      WriteRegDW(adapter, 0x304, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static void PidSetEmmPID(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = (pid & 0xFFFF) | (ReadRegDW(adapter, 0x308) & 0xFFFF0000);
-+
-+      WriteRegDW(adapter, 0x308, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static void PidSetEcmPID(struct adapter * adapter, u32 pid)
-+{
-+      u32 value;
-+
-+      dprintk("%s: pid=%x\n", __FUNCTION__, pid);
-+
-+      value = (pid << 0x10) | (ReadRegDW(adapter, 0x308) & 0xFFFF);
-+
-+      WriteRegDW(adapter, 0x308, value);
-+
-+      /* return value is never used? */
-+/*    return value; */
-+}
-+
-+static int PidGetStream1PID(struct adapter * adapter)
-+{
-+      return ReadRegDW(adapter, 0x300) & 0x00001FFF;
-+}
-+
-+static int PidGetStream2PID(struct adapter * adapter)
-+{
-+      return (ReadRegDW(adapter, 0x300) >> 0x10)& 0x00001FFF;
-+}
-+
-+static int PidGetPcrPID(struct adapter * adapter)
-+{
-+      return ReadRegDW(adapter, 0x304) & 0x00001FFF;
-+}
-+
-+static int PidGetPmtPID(struct adapter * adapter)
-+{
-+      return (ReadRegDW(adapter, 0x304) >> 0x10)& 0x00001FFF;
-+}
-+
-+static int PidGetEmmPID(struct adapter * adapter)
-+{
-+      return ReadRegDW(adapter, 0x308) & 0x00001FFF;
-+}
-+
-+static int PidGetEcmPID(struct adapter * adapter)
-+{
-+      return (ReadRegDW(adapter, 0x308) >> 0x10)& 0x00001FFF;
-+}
-+
-+static int PidGetGroupPID(struct adapter * adapter)
-+{
-+      return ReadRegDW(adapter, 0x30C) & 0x00001FFF;
-+}
-+
-+static int PidGetGroupMASK(struct adapter * adapter)
-+{
-+      return (ReadRegDW(adapter, 0x30C) >> 0x10)& 0x00001FFF;
-+}
-+
-+/*
-+static void ResetHardwarePIDFilter(struct adapter *adapter)
-+{
-+      PidSetStream1PID(adapter, 0x1FFF);
-+
-+      PidSetStream2PID(adapter, 0x1FFF);
-+      FilterEnableStream2Filter(adapter, 0);
-+
-+      PidSetPcrPID(adapter, 0x1FFF);
-+      FilterEnablePcrFilter(adapter, 0);
-+
-+      PidSetPmtPID(adapter, 0x1FFF);
-+      FilterEnablePmtFilter(adapter, 0);
-+
-+      PidSetEcmPID(adapter, 0x1FFF);
-+      FilterEnableEcmFilter(adapter, 0);
-+
-+      PidSetEmmPID(adapter, 0x1FFF);
-+      FilterEnableEmmFilter(adapter, 0);
-+}
-+*/
-+
-+static void OpenWholeBandwidth(struct adapter *adapter)
-+{
-+      PidSetGroupPID(adapter, 0);
-+
-+      PidSetGroupMASK(adapter, 0);
-+
-+      FilterEnableMaskFilter(adapter, 1);
-+}
-+
-+static int AddHwPID(struct adapter *adapter, u32 pid)
-+{
-+      dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+      if (pid <= 0x1F)
-+              return 1;
-+
-+      if ((PidGetGroupMASK(adapter) == 0) && (PidGetGroupPID(adapter) == 0))
-+              return 0;
-+
-+      if (PidGetStream1PID(adapter) == 0x1FFF) {
-+              PidSetStream1PID(adapter, pid & 0xFFFF);
-+
-+              FilterEnableStream1Filter(adapter, 1);
-+
-+              return 1;
-+      }
-+
-+      if (PidGetStream2PID(adapter) == 0x1FFF) {
-+              PidSetStream2PID(adapter, (pid & 0xFFFF));
-+
-+              FilterEnableStream2Filter(adapter, 1);
-+
-+              return 1;
-+      }
-+
-+      if (PidGetPcrPID(adapter) == 0x1FFF) {
-+              PidSetPcrPID(adapter, (pid & 0xFFFF));
-+
-+              FilterEnablePcrFilter(adapter, 1);
-+
-+              return 1;
-+      }
-+
-+      if ((PidGetPmtPID(adapter) & 0x1FFF) == 0x1FFF) {
-+              PidSetPmtPID(adapter, (pid & 0xFFFF));
-+
-+              FilterEnablePmtFilter(adapter, 1);
-+
-+              return 1;
-+      }
-+
-+      if ((PidGetEmmPID(adapter) & 0x1FFF) == 0x1FFF) {
-+              PidSetEmmPID(adapter, (pid & 0xFFFF));
-+
-+              FilterEnableEmmFilter(adapter, 1);
-+
-+              return 1;
-+      }
-+
-+      if ((PidGetEcmPID(adapter) & 0x1FFF) == 0x1FFF) {
-+              PidSetEcmPID(adapter, (pid & 0xFFFF));
-+
-+              FilterEnableEcmFilter(adapter, 1);
-+
-+              return 1;
-+      }
-+
-+      return -1;
-+}
-+
-+static int RemoveHwPID(struct adapter *adapter, u32 pid)
-+{
-+      dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+      if (pid <= 0x1F)
-+              return 1;
-+
-+      if (PidGetStream1PID(adapter) == pid) {
-+              PidSetStream1PID(adapter, 0x1FFF);
-+
-+              return 1;
-+      }
-+
-+      if (PidGetStream2PID(adapter) == pid) {
-+              PidSetStream2PID(adapter, 0x1FFF);
-+
-+              FilterEnableStream2Filter(adapter, 0);
-+
-+              return 1;
-+      }
-+
-+      if (PidGetPcrPID(adapter) == pid) {
-+              PidSetPcrPID(adapter, 0x1FFF);
-+
-+              FilterEnablePcrFilter(adapter, 0);
-+
-+              return 1;
-+      }
-+
-+      if (PidGetPmtPID(adapter) == pid) {
-+              PidSetPmtPID(adapter, 0x1FFF);
-+
-+              FilterEnablePmtFilter(adapter, 0);
-+
-+              return 1;
-+      }
-+
-+      if (PidGetEmmPID(adapter) == pid) {
-+              PidSetEmmPID(adapter, 0x1FFF);
-+
-+              FilterEnableEmmFilter(adapter, 0);
-+
-+              return 1;
-+      }
-+
-+      if (PidGetEcmPID(adapter) == pid) {
-+              PidSetEcmPID(adapter, 0x1FFF);
-+
-+              FilterEnableEcmFilter(adapter, 0);
-+
-+              return 1;
-+      }
-+
-+      return -1;
-+}
-+
-+static int AddPID(struct adapter *adapter, u32 pid)
-+{
-+      int i;
-+
-+      dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+      if (pid > 0x1FFE)
-+              return -1;
-+
-+      if (CheckPID(adapter, pid) == 1)
-+              return 1;
-+
-+      for (i = 0; i < 0x27; i++) {
-+              if (adapter->pids[i] == 0x1FFF) // find free pid filter
-+              {
-+                      adapter->pids[i] = pid;
-+
-+                      if (AddHwPID(adapter, pid) < 0)
-+                              OpenWholeBandwidth(adapter);
-+
-+                      return 1;
-+              }
-+      }
-+
-+      return -1;
-+}
-+
-+static int RemovePID(struct adapter *adapter, u32 pid)
-+{
-+      u32 i;
-+
-+      dprintk("%s: pid=%d\n", __FUNCTION__, pid);
-+
-+      if (pid > 0x1FFE)
-+              return -1;
-+
-+      for (i = 0; i < 0x27; i++) {
-+              if (adapter->pids[i] == pid) {
-+                      adapter->pids[i] = 0x1FFF;
-+
-+                      RemoveHwPID(adapter, pid);
-+
-+                      return 1;
-+              }
-+      }
-+
-+      return -1;
-+}
-+
-+/* dma & irq */
-+static void CtrlEnableSmc(struct adapter *adapter, u32 op)
-+{
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00000800, 0);
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00000800);
-+      }
-+}
-+
-+static void DmaEnableDisableIrq(struct adapter *adapter, u32 flag1, u32 flag2, u32 flag3)
-+{
-+      adapter->dma_ctrl = adapter->dma_ctrl & 0x000F0000;
-+
-+      if (flag1 == 0) {
-+              if (flag2 == 0)
-+                      adapter->dma_ctrl = adapter->dma_ctrl & ~0x00010000;
-+              else
-+                      adapter->dma_ctrl = adapter->dma_ctrl | 0x00010000;
-+
-+              if (flag3 == 0)
-+                      adapter->dma_ctrl = adapter->dma_ctrl & ~0x00020000;
-+              else
-+                      adapter->dma_ctrl = adapter->dma_ctrl | 0x00020000;
-+
-+      } else {
-+
-+              if (flag2 == 0)
-+                      adapter->dma_ctrl = adapter->dma_ctrl & ~0x00040000;
-+              else
-+                      adapter->dma_ctrl = adapter->dma_ctrl | 0x00040000;
-+
-+              if (flag3 == 0)
-+                      adapter->dma_ctrl = adapter->dma_ctrl & ~0x00080000;
-+              else
-+                      adapter->dma_ctrl = adapter->dma_ctrl | 0x00080000;
-+      }
-+}
-+
-+static void IrqDmaEnableDisableIrq(struct adapter * adapter, u32 op)
-+{
-+      u32 value;
-+
-+      value = ReadRegDW(adapter, 0x208) & 0xFFF0FFFF;
-+
-+      if (op != 0)
-+              value = value | (adapter->dma_ctrl & 0x000F0000);
-+
-+      WriteRegDW(adapter, 0x208, value);
-+}
-+
-+/* FlexCopII has 2 dma channels. DMA1 is used to transfer TS data to
-+   system memory.
-+
-+   The DMA1 buffer is divided in 2 subbuffers of equal size.
-+   FlexCopII will transfer TS data to one subbuffer, signal an interrupt
-+   when the subbuffer is full and continue fillig the second subbuffer.
-+
-+   For DMA1:
-+       subbuffer size in 32-bit words is stored in the first 24 bits of
-+       register 0x004. The last 8 bits of register 0x004 contain the number
-+       of subbuffers.
-+       
-+       the first 30 bits of register 0x000 contain the address of the first
-+       subbuffer. The last 2 bits contain 0, when dma1 is disabled and 1,
-+       when dma1 is enabled.
-+
-+       the first 30 bits of register 0x00C contain the address of the second
-+       subbuffer. the last 2 bits contain 1.
-+
-+       register 0x008 will contain the address of the subbuffer that was filled
-+       with TS data, when FlexCopII will generate an interrupt.
-+
-+   For DMA2:
-+       subbuffer size in 32-bit words is stored in the first 24 bits of
-+       register 0x014. The last 8 bits of register 0x014 contain the number
-+       of subbuffers.
-+       
-+       the first 30 bits of register 0x010 contain the address of the first
-+       subbuffer.  The last 2 bits contain 0, when dma1 is disabled and 1,
-+       when dma1 is enabled.
-+
-+       the first 30 bits of register 0x01C contain the address of the second
-+       subbuffer. the last 2 bits contain 1.
-+
-+       register 0x018 contains the address of the subbuffer that was filled
-+       with TS data, when FlexCopII generates an interrupt.
-+*/
-+static int DmaInitDMA(struct adapter *adapter, u32 dma_channel)
-+{
-+      u32 subbuffers, subbufsize, subbuf0, subbuf1;
-+
-+      if (dma_channel == 0) {
-+              dprintk("%s: Initializing DMA1 channel\n", __FUNCTION__);
-+
-+              subbuffers = 2;
-+
-+              subbufsize = (((adapter->dmaq1.buffer_size / 2) / 4) << 8) | subbuffers;
-+
-+              subbuf0 = adapter->dmaq1.bus_addr & 0xFFFFFFFC;
-+
-+              subbuf1 = ((adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) & 0xFFFFFFFC) | 1;
-+
-+              dprintk("%s: first subbuffer address = 0x%x\n", __FUNCTION__, subbuf0);
-+              udelay(1000);
-+              WriteRegDW(adapter, 0x000, subbuf0);
-+
-+              dprintk("%s: subbuffer size = 0x%x\n", __FUNCTION__, (subbufsize >> 8) * 4);
-+              udelay(1000);
-+              WriteRegDW(adapter, 0x004, subbufsize);
-+
-+              dprintk("%s: second subbuffer address = 0x%x\n", __FUNCTION__, subbuf1);
-+              udelay(1000);
-+              WriteRegDW(adapter, 0x00C, subbuf1);
-+
-+              dprintk("%s: counter = 0x%x\n", __FUNCTION__, adapter->dmaq1.bus_addr & 0xFFFFFFFC);
-+              WriteRegDW(adapter, 0x008, adapter->dmaq1.bus_addr & 0xFFFFFFFC);
-+              udelay(1000);
-+
-+              if (subbuffers == 0)
-+                      DmaEnableDisableIrq(adapter, 0, 1, 0);
-+              else
-+                      DmaEnableDisableIrq(adapter, 0, 1, 1);
-+
-+              IrqDmaEnableDisableIrq(adapter, 1);
-+
-+              SRAMSetMediaDest(adapter, 1);
-+              SRAMSetNetDest(adapter, 1);
-+              SRAMSetCaiDest(adapter, 2);
-+              SRAMSetCaoDest(adapter, 2);
-+      }
-+
-+      if (dma_channel == 1) {
-+              dprintk("%s: Initializing DMA2 channel\n", __FUNCTION__);
-+
-+              subbuffers = 2;
-+
-+              subbufsize = (((adapter->dmaq2.buffer_size / 2) / 4) << 8) | subbuffers;
-+
-+              subbuf0 = adapter->dmaq2.bus_addr & 0xFFFFFFFC;
-+
-+              subbuf1 = ((adapter->dmaq2.bus_addr + adapter->dmaq2.buffer_size / 2) & 0xFFFFFFFC) | 1;
-+
-+              dprintk("%s: first subbuffer address = 0x%x\n", __FUNCTION__, subbuf0);
-+              udelay(1000);
-+              WriteRegDW(adapter, 0x010, subbuf0);
-+
-+              dprintk("%s: subbuffer size = 0x%x\n", __FUNCTION__, (subbufsize >> 8) * 4);
-+              udelay(1000);
-+              WriteRegDW(adapter, 0x014, subbufsize);
-+
-+              dprintk("%s: second buffer address = 0x%x\n", __FUNCTION__, subbuf1);
-+              udelay(1000);
-+              WriteRegDW(adapter, 0x01C, subbuf1);
-+
-+              SRAMSetCaiDest(adapter, 2);
-+      }
-+
-+      return 0;
-+}
-+
-+static void CtrlEnableReceiveData(struct adapter *adapter, u32 op)
-+{
-+      if (op == 0) {
-+              WriteRegOp(adapter, 0x208, 2, ~0x00008000, 0);
-+
-+              adapter->dma_status = adapter->dma_status & ~0x00000004;
-+
-+      } else {
-+
-+              WriteRegOp(adapter, 0x208, 1, 0, 0x00008000);
-+
-+              adapter->dma_status = adapter->dma_status | 0x00000004;
-+      }
-+}
-+
-+/* bit 0 of dma_mask is set to 1 if dma1 channel has to be enabled/disabled
-+   bit 1 of dma_mask is set to 1 if dma2 channel has to be enabled/disabled
-+*/
-+static void DmaStartStop0x2102(struct adapter *adapter, u32 dma_mask, u32 start_stop)
-+{
-+      u32 dma_enable, dma1_enable, dma2_enable;
-+
-+      dprintk("%s: dma_mask=%x\n", __FUNCTION__, dma_mask);
-+
-+      if (start_stop == 1) {
-+              dprintk("%s: starting dma\n", __FUNCTION__);
-+
-+              dma1_enable = 0;
-+              dma2_enable = 0;
-+
-+              if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) == 0) && (adapter->dmaq1.bus_addr != 0)) {
-+                      adapter->dma_status = adapter->dma_status | 1;
-+                      dma1_enable = 1;
-+              }
-+
-+              if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) == 0) && (adapter->dmaq2.bus_addr != 0)) {
-+                      adapter->dma_status = adapter->dma_status | 2;
-+                      dma2_enable = 1;
-+              }
-+              // enable dma1 and dma2
-+              if ((dma1_enable == 1) && (dma2_enable == 1)) {
-+                      WriteRegDW(adapter, 0x000, adapter->dmaq1.bus_addr | 1);
-+                      WriteRegDW(adapter, 0x00C, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
-+                      WriteRegDW(adapter, 0x010, adapter->dmaq2.bus_addr | 1);
-+
-+                      CtrlEnableReceiveData(adapter, 1);
-+
-+                      return;
-+              }
-+              // enable dma1
-+              if ((dma1_enable == 1) && (dma2_enable == 0)) {
-+                      WriteRegDW(adapter, 0x000, adapter->dmaq1.bus_addr | 1);
-+                      WriteRegDW(adapter, 0x00C, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
-+
-+                      CtrlEnableReceiveData(adapter, 1);
-+
-+                      return;
-+              }
-+              // enable dma2
-+              if ((dma1_enable == 0) && (dma2_enable == 1)) {
-+                      WriteRegDW(adapter, 0x010, adapter->dmaq2.bus_addr | 1);
-+
-+                      CtrlEnableReceiveData(adapter, 1);
-+
-+                      return;
-+              }
-+              // start dma
-+              if ((dma1_enable == 0) && (dma2_enable == 0)) {
-+                      CtrlEnableReceiveData(adapter, 1);
-+
-+                      return;
-+              }
-+
-+      } else {
-+
-+              dprintk("%s: stoping dma\n", __FUNCTION__);
-+
-+              dma_enable = adapter->dma_status & 0x00000003;
-+
-+              if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) != 0)) {
-+                      dma_enable = dma_enable & 0xFFFFFFFE;
-+              }
-+
-+              if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) != 0)) {
-+                      dma_enable = dma_enable & 0xFFFFFFFD;
-+              }
-+              //stop dma
-+              if ((dma_enable == 0) && ((adapter->dma_status & 4) != 0)) {
-+                      CtrlEnableReceiveData(adapter, 0);
-+
-+                      udelay(3000);
-+              }
-+              //disable dma1
-+              if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) != 0) && (adapter->dmaq1.bus_addr != 0)) {
-+                      WriteRegDW(adapter, 0x000, adapter->dmaq1.bus_addr);
-+                      WriteRegDW(adapter, 0x00C, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
-+
-+                      adapter->dma_status = adapter->dma_status & ~0x00000001;
-+              }
-+              //disable dma2
-+              if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) != 0) && (adapter->dmaq2.bus_addr != 0)) {
-+                      WriteRegDW(adapter, 0x010, adapter->dmaq2.bus_addr);
-+
-+                      adapter->dma_status = adapter->dma_status & ~0x00000002;
-+              }
-+      }
-+}
-+
-+static void OpenStream(struct adapter *adapter, u32 pid)
-+{
-+      u32 dma_mask;
-+
-+      if (adapter->capturing == 0)
-+              adapter->capturing = 1;
-+
-+      FilterEnableMaskFilter(adapter, 1);
-+
-+      AddPID(adapter, pid);
-+
-+      dprintk("%s: adapter->dma_status=%x\n", __FUNCTION__, adapter->dma_status);
-+
-+      if ((adapter->dma_status & 7) != 7) {
-+              dma_mask = 0;
-+
-+              if (((adapter->dma_status & 0x10000000) != 0) && ((adapter->dma_status & 1) == 0)) {
-+                      dma_mask = dma_mask | 1;
-+
-+                      adapter->dmaq1.head = 0;
-+                      adapter->dmaq1.tail = 0;
-+
-+                      memset(adapter->dmaq1.buffer, 0, adapter->dmaq1.buffer_size);
-+              }
-+
-+              if (((adapter->dma_status & 0x20000000) != 0) && ((adapter->dma_status & 2) == 0)) {
-+                      dma_mask = dma_mask | 2;
-+
-+                      adapter->dmaq2.head = 0;
-+                      adapter->dmaq2.tail = 0;
-+              }
-+
-+              if (dma_mask != 0) {
-+                      IrqDmaEnableDisableIrq(adapter, 1);
-+
-+                      DmaStartStop0x2102(adapter, dma_mask, 1);
-+              }
-+      }
-+}
-+
-+static void CloseStream(struct adapter *adapter, u32 pid)
-+{
-+      u32 dma_mask;
-+
-+      if (adapter->capturing != 0)
-+              adapter->capturing = 0;
-+
-+      dprintk("%s: dma_status=%x\n", __FUNCTION__, adapter->dma_status);
-+
-+      dma_mask = 0;
-+
-+      if ((adapter->dma_status & 1) != 0)
-+              dma_mask = dma_mask | 0x00000001;
-+      if ((adapter->dma_status & 2) != 0)
-+              dma_mask = dma_mask | 0x00000002;
-+
-+      if (dma_mask != 0) {
-+              DmaStartStop0x2102(adapter, dma_mask, 0);
-+      }
-+
-+      RemovePID(adapter, pid);
-+}
-+
-+static void InterruptServiceDMA1(struct adapter *adapter)
-+{
-+      struct dvb_demux *dvbdmx = &adapter->demux;
-+      struct packet_header packet_header;
-+
-+      int nCurDmaCounter;
-+      u32 nNumBytesParsed;
-+      u32 nNumNewBytesTransferred;
-+      u32 dwDefaultPacketSize = 188;
-+      u8 gbTmpBuffer[188];
-+      u8 *pbDMABufCurPos;
-+
-+      nCurDmaCounter = readl(adapter->io_mem + 0x008) - adapter->dmaq1.bus_addr;
-+      nCurDmaCounter = (nCurDmaCounter / dwDefaultPacketSize) * dwDefaultPacketSize;
-+
-+      if ((nCurDmaCounter < 0) || (nCurDmaCounter > adapter->dmaq1.buffer_size)) {
-+              dprintk("%s: dma counter outside dma buffer\n", __FUNCTION__);
-+              return;
-+      }
-+
-+      adapter->dmaq1.head = nCurDmaCounter;
-+
-+      if (adapter->dmaq1.tail <= nCurDmaCounter) {
-+              nNumNewBytesTransferred = nCurDmaCounter - adapter->dmaq1.tail;
-+
-+      } else {
-+
-+              nNumNewBytesTransferred = (adapter->dmaq1.buffer_size - adapter->dmaq1.tail) + nCurDmaCounter;
-+      }
-+
-+//  dprintk("%s: nCurDmaCounter   = %d\n" , __FUNCTION__, nCurDmaCounter);
-+//    dprintk("%s: dmaq1.tail       = %d\n" , __FUNCTION__, adapter->dmaq1.tail):
-+//  dprintk("%s: BytesTransferred = %d\n" , __FUNCTION__, nNumNewBytesTransferred);
-+
-+      if (nNumNewBytesTransferred < dwDefaultPacketSize)
-+              return;
-+
-+      nNumBytesParsed = 0;
-+
-+      while (nNumBytesParsed < nNumNewBytesTransferred) {
-+              pbDMABufCurPos = adapter->dmaq1.buffer + adapter->dmaq1.tail;
-+
-+              if (adapter->dmaq1.buffer + adapter->dmaq1.buffer_size < adapter->dmaq1.buffer + adapter->dmaq1.tail + 188) {
-+                      memcpy(gbTmpBuffer, adapter->dmaq1.buffer + adapter->dmaq1.tail, adapter->dmaq1.buffer_size - adapter->dmaq1.tail);
-+                      memcpy(gbTmpBuffer + (adapter->dmaq1.buffer_size - adapter->dmaq1.tail), adapter->dmaq1.buffer, (188 - (adapter->dmaq1.buffer_size - adapter->dmaq1.tail)));
-+
-+                      pbDMABufCurPos = gbTmpBuffer;
-+              }
-+
-+              if (adapter->capturing != 0) {
-+                      u32 *dq = (u32 *) pbDMABufCurPos;
-+
-+                      packet_header.sync_byte = *dq & 0x000000FF;
-+                      packet_header.transport_error_indicator = *dq & 0x00008000;
-+                      packet_header.payload_unit_start_indicator = *dq & 0x00004000;
-+                      packet_header.transport_priority = *dq & 0x00002000;
-+                      packet_header.pid = ((*dq & 0x00FF0000) >> 0x10) | (*dq & 0x00001F00);
-+                      packet_header.transport_scrambling_control = *dq >> 0x1E;
-+                      packet_header.adaptation_field_control = (*dq & 0x30000000) >> 0x1C;
-+                      packet_header.continuity_counter = (*dq & 0x0F000000) >> 0x18;
-+
-+                      if ((packet_header.sync_byte == 0x47) && (packet_header.transport_error_indicator == 0) && (packet_header.pid != 0x1FFF)) {
-+                              if (CheckPID(adapter, packet_header.pid & 0x0000FFFF) != 0) {
-+                                      dvb_dmx_swfilter_packets(dvbdmx, pbDMABufCurPos, dwDefaultPacketSize / 188);
-+
-+                              } else {
-+
-+//                  dprintk("%s: pid=%x\n", __FUNCTION__, packet_header.pid);
-+                              }
-+                      }
-+              }
-+
-+              nNumBytesParsed = nNumBytesParsed + dwDefaultPacketSize;
-+
-+              adapter->dmaq1.tail = adapter->dmaq1.tail + dwDefaultPacketSize;
-+
-+              if (adapter->dmaq1.tail >= adapter->dmaq1.buffer_size)
-+                      adapter->dmaq1.tail = adapter->dmaq1.tail - adapter->dmaq1.buffer_size;
-+      };
-+}
-+
-+static void InterruptServiceDMA2(struct adapter *adapter)
-+{
-+      printk("%s:\n", __FUNCTION__);
-+}
-+
-+static irqreturn_t isr(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+      struct adapter *tmp = dev_id;
-+
-+      u32 value;
-+
-+//  dprintk("%s:\n", __FUNCTION__);
-+
-+      spin_lock_irq(&tmp->lock);
-+
-+      if (0 == ((value = ReadRegDW(tmp, 0x20C)) & 0x0F)) {
-+              spin_unlock_irq(&tmp->lock);
-+              return IRQ_NONE;
-+      }
-+      
-+      while (value != 0) {
-+              if ((value & 0x03) != 0)
-+                      InterruptServiceDMA1(tmp);
-+              if ((value & 0x0C) != 0)
-+                      InterruptServiceDMA2(tmp);
-+              value = ReadRegDW(tmp, 0x20C) & 0x0F;
-+      }
-+
-+      spin_unlock_irq(&tmp->lock);
-+      return IRQ_HANDLED;
-+}
-+
-+static void Initdmaqueue(struct adapter *adapter)
-+{
-+      dma_addr_t dma_addr;
-+
-+      if (adapter->dmaq1.buffer != 0)
-+              return;
-+
-+      adapter->dmaq1.head = 0;
-+      adapter->dmaq1.tail = 0;
-+      adapter->dmaq1.buffer = 0;
-+
-+      adapter->dmaq1.buffer = pci_alloc_consistent(adapter->pdev, SizeOfBufDMA1 + 0x80, &dma_addr);
-+
-+      if (adapter->dmaq1.buffer != 0) {
-+              memset(adapter->dmaq1.buffer, 0, SizeOfBufDMA1);
-+
-+              adapter->dmaq1.bus_addr = dma_addr;
-+              adapter->dmaq1.buffer_size = SizeOfBufDMA1;
-+
-+              DmaInitDMA(adapter, 0);
-+
-+              adapter->dma_status = adapter->dma_status | 0x10000000;
-+
-+              dprintk("%s: allocated dma buffer at 0x%x, length=%d\n", __FUNCTION__, (int) adapter->dmaq1.buffer, SizeOfBufDMA1);
-+
-+      } else {
-+
-+              adapter->dma_status = adapter->dma_status & ~0x10000000;
-+      }
-+
-+      if (adapter->dmaq2.buffer != 0)
-+              return;
-+
-+      adapter->dmaq2.head = 0;
-+      adapter->dmaq2.tail = 0;
-+      adapter->dmaq2.buffer = 0;
-+
-+      adapter->dmaq2.buffer = pci_alloc_consistent(adapter->pdev, SizeOfBufDMA2 + 0x80, &dma_addr);
-+
-+      if (adapter->dmaq2.buffer != 0) {
-+              memset(adapter->dmaq2.buffer, 0, SizeOfBufDMA2);
-+
-+              adapter->dmaq2.bus_addr = dma_addr;
-+              adapter->dmaq2.buffer_size = SizeOfBufDMA2;
-+
-+              DmaInitDMA(adapter, 1);
-+
-+              adapter->dma_status = adapter->dma_status | 0x20000000;
-+
-+              dprintk("%s: allocated dma buffer at 0x%x, length=%d\n", __FUNCTION__, (int) adapter->dmaq2.buffer, (int) SizeOfBufDMA2);
-+
-+      } else {
-+
-+              adapter->dma_status = adapter->dma_status & ~0x20000000;
-+      }
-+}
-+
-+static void Freedmaqueue(struct adapter *adapter)
-+{
-+      if (adapter->dmaq1.buffer != 0) {
-+              pci_free_consistent(adapter->pdev, SizeOfBufDMA1 + 0x80, adapter->dmaq1.buffer, adapter->dmaq1.bus_addr);
-+
-+              adapter->dmaq1.bus_addr = 0;
-+              adapter->dmaq1.head = 0;
-+              adapter->dmaq1.tail = 0;
-+              adapter->dmaq1.buffer_size = 0;
-+              adapter->dmaq1.buffer = 0;
-+      }
-+
-+      if (adapter->dmaq2.buffer != 0) {
-+              pci_free_consistent(adapter->pdev, SizeOfBufDMA2 + 0x80, adapter->dmaq2.buffer, adapter->dmaq2.bus_addr);
-+
-+              adapter->dmaq2.bus_addr = 0;
-+              adapter->dmaq2.head = 0;
-+              adapter->dmaq2.tail = 0;
-+              adapter->dmaq2.buffer_size = 0;
-+              adapter->dmaq2.buffer = 0;
-+      }
-+}
-+
-+static void FreeAdapterObject(struct adapter *adapter)
-+{
-+      dprintk("%s:\n", __FUNCTION__);
-+
-+      CloseStream(adapter, 0);
-+
-+      if (adapter->irq != 0)
-+              free_irq(adapter->irq, adapter);
-+
-+      Freedmaqueue(adapter);
-+
-+      if (adapter->io_mem != 0)
-+              iounmap((void *) adapter->io_mem);
-+
-+      if (adapter != 0)
-+              kfree(adapter);
-+}
-+
-+static struct pci_driver skystar2_pci_driver;
-+
-+static int ClaimAdapter(struct adapter *adapter)
-+{
-+      struct pci_dev *pdev = adapter->pdev;
-+
-+      u16 var;
-+
-+      if (!request_region(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1), skystar2_pci_driver.name))
-+              return -EBUSY;
-+
-+      if (!request_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0), skystar2_pci_driver.name))
-+              return -EBUSY;
-+
-+      pci_read_config_byte(pdev, PCI_CLASS_REVISION, &adapter->card_revision);
-+
-+      dprintk("%s: card revision %x \n", __FUNCTION__, adapter->card_revision);
-+
-+      if (pci_enable_device(pdev))
-+              return -EIO;
-+
-+      pci_read_config_word(pdev, 4, &var);
-+
-+      if ((var & 4) == 0)
-+              pci_set_master(pdev);
-+
-+      adapter->io_port = pdev->resource[1].start;
-+
-+      adapter->io_mem = (u32) ioremap(pdev->resource[0].start, 0x800);
-+
-+      if (adapter->io_mem == 0) {
-+              dprintk("%s: can not map io memory\n", __FUNCTION__);
-+
-+              return 2;
-+      }
-+
-+      dprintk("%s: io memory maped at %x\n", __FUNCTION__, adapter->io_mem);
-+
-+      return 1;
-+}
-+
-+/*
-+static int SLL_reset_FlexCOP(struct adapter *adapter)
-+{
-+      WriteRegDW(adapter, 0x208, 0);
-+      WriteRegDW(adapter, 0x210, 0xB2FF);
-+
-+      return 0;
-+}
-+*/
-+
-+static int DriverInitialize(struct pci_dev * pdev)
-+{
-+      struct adapter *adapter;
-+      u32 tmp;
-+      u8 key[16];
-+
-+      if (!(adapter = kmalloc(sizeof(struct adapter), GFP_KERNEL))) {
-+              dprintk("%s: out of memory!\n", __FUNCTION__);
-+
-+              return -ENOMEM;
-+      }
-+
-+      memset(adapter, 0, sizeof(struct adapter));
-+
-+      pci_set_drvdata(pdev,adapter);
-+
-+      adapter->pdev = pdev;
-+      adapter->irq = pdev->irq;
-+
-+      if ((ClaimAdapter(adapter)) != 1) {
-+              FreeAdapterObject(adapter);
-+
-+              return -ENODEV;
-+      }
-+
-+      IrqDmaEnableDisableIrq(adapter, 0);
-+
-+      if (request_irq(pdev->irq, isr, 0x4000000, "Skystar2", adapter) != 0) {
-+              dprintk("%s: unable to allocate irq=%d !\n", __FUNCTION__, pdev->irq);
-+
-+              FreeAdapterObject(adapter);
-+
-+              return -ENODEV;
-+      }
-+
-+      ReadRegDW(adapter, 0x208);
-+      WriteRegDW(adapter, 0x208, 0);
-+      WriteRegDW(adapter, 0x210, 0xB2FF);
-+      WriteRegDW(adapter, 0x208, 0x40);
-+
-+      InitPIDsInfo(adapter);
-+
-+      PidSetGroupPID(adapter, 0);
-+      PidSetGroupMASK(adapter, 0x1FE0);
-+      PidSetStream1PID(adapter, 0x1FFF);
-+      PidSetStream2PID(adapter, 0x1FFF);
-+      PidSetPmtPID(adapter, 0x1FFF);
-+      PidSetPcrPID(adapter, 0x1FFF);
-+      PidSetEcmPID(adapter, 0x1FFF);
-+      PidSetEmmPID(adapter, 0x1FFF);
-+
-+      Initdmaqueue(adapter);
-+
-+      if ((adapter->dma_status & 0x30000000) == 0) {
-+              FreeAdapterObject(adapter);
-+
-+              return -ENODEV;
-+      }
-+
-+      adapter->b2c2_revision = (ReadRegDW(adapter, 0x204) >> 0x18);
-+
-+      if ((adapter->b2c2_revision != 0x82) && (adapter->b2c2_revision != 0xC3))
-+              if (adapter->b2c2_revision != 0x82) {
-+                      dprintk("%s: The revision of the FlexCopII chip on your card is - %d\n", __FUNCTION__, adapter->b2c2_revision);
-+                      dprintk("%s: This driver works now only with FlexCopII(rev.130) and FlexCopIIB(rev.195).\n", __FUNCTION__);
-+
-+                      FreeAdapterObject(adapter);
-+
-+                      return -ENODEV;
-+              }
-+
-+      tmp = ReadRegDW(adapter, 0x204);
-+
-+      WriteRegDW(adapter, 0x204, 0);
-+      mdelay(20);
-+
-+      WriteRegDW(adapter, 0x204, tmp);
-+      mdelay(10);
-+
-+      tmp = ReadRegDW(adapter, 0x308);
-+      WriteRegDW(adapter, 0x308, 0x4000 | tmp);
-+
-+      adapter->dwSramType = 0x10000;
-+
-+      SLL_detectSramSize(adapter);
-+
-+      dprintk("%s sram length = %d, sram type= %x\n", __FUNCTION__, SRAM_length(adapter), adapter->dwSramType);
-+
-+      SRAMSetMediaDest(adapter, 1);
-+      SRAMSetNetDest(adapter, 1);
-+
-+      CtrlEnableSmc(adapter, 0);
-+
-+      SRAMSetCaiDest(adapter, 2);
-+      SRAMSetCaoDest(adapter, 2);
-+
-+      DmaEnableDisableIrq(adapter, 1, 0, 0);
-+
-+      if (EEPROM_getMacAddr(adapter, 0, adapter->mac_addr) != 0) {
-+              printk("%s MAC address = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x \n", __FUNCTION__, adapter->mac_addr[0], adapter->mac_addr[1], adapter->mac_addr[2], adapter->mac_addr[3], adapter->mac_addr[4], adapter->mac_addr[5], adapter->mac_addr[6], adapter->mac_addr[7]
-+                  );
-+
-+              CASetMacDstAddrFilter(adapter, adapter->mac_addr);
-+              CtrlEnableMAC(adapter, 1);
-+      }
-+
-+      EEPROM_readKey(adapter, key, 16);
-+
-+      printk("%s key = \n %02x %02x %02x %02x \n %02x %02x %02x %02x \n %02x %02x %02x %02x \n %02x %02x %02x %02x \n", __FUNCTION__, key[0], key[1], key[2], key[3], key[4], key[5], key[6], key[7], key[8], key[9], key[10], key[11], key[12], key[13], key[14], key[15]);
-+
-+      adapter->lock = SPIN_LOCK_UNLOCKED;
-+
-+      return 0;
-+}
-+
-+static void DriverHalt(struct pci_dev *pdev)
-+{
-+      struct adapter *adapter;
-+
-+      adapter = pci_get_drvdata(pdev);
-+
-+      IrqDmaEnableDisableIrq(adapter, 0);
-+
-+      CtrlEnableReceiveData(adapter, 0);
-+
-+      FreeAdapterObject(adapter);
-+
-+      pci_set_drvdata(pdev, NULL);
-+
-+      release_region(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1));
-+
-+      release_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
-+}
-+
-+static int dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+      struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-+      struct adapter *adapter = (struct adapter *) dvbdmx->priv;
-+
-+      dprintk("%s: PID=%d, type=%d\n", __FUNCTION__, dvbdmxfeed->pid, dvbdmxfeed->type);
-+
-+      OpenStream(adapter, dvbdmxfeed->pid);
-+
-+      return 0;
-+}
-+
-+static int dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+      struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-+      struct adapter *adapter = (struct adapter *) dvbdmx->priv;
-+
-+      dprintk("%s: PID=%d, type=%d\n", __FUNCTION__, dvbdmxfeed->pid, dvbdmxfeed->type);
-+
-+      CloseStream(adapter, dvbdmxfeed->pid);
-+
-+      return 0;
-+}
-+
-+/* lnb control */
-+static void set_tuner_tone(struct adapter *adapter, u8 tone)
-+{
-+      u16 wzHalfPeriodFor45MHz[] = { 0x01FF, 0x0154, 0x00FF, 0x00CC };
-+      u16 ax;
-+
-+      dprintk("%s: %u\n", __FUNCTION__, tone);
-+
-+      switch (tone) {
-+      case 1:
-+              ax = wzHalfPeriodFor45MHz[0];
-+              break;
-+      case 2:
-+              ax = wzHalfPeriodFor45MHz[1];
-+              break;
-+      case 3:
-+              ax = wzHalfPeriodFor45MHz[2];
-+              break;
-+      case 4:
-+              ax = wzHalfPeriodFor45MHz[3];
-+              break;
-+
-+      default:
-+              ax = 0;
-+      }
-+
-+      if (ax != 0) {
-+              WriteRegDW(adapter, 0x200, ((ax << 0x0F) + (ax & 0x7FFF)) | 0x40000000);
-+
-+      } else {
-+
-+              WriteRegDW(adapter, 0x200, 0x40FF8000);
-+      }
-+}
-+
-+static void set_tuner_polarity(struct adapter *adapter, u8 polarity)
-+{
-+      u32 var;
-+
-+      dprintk("%s : polarity = %u \n", __FUNCTION__, polarity);
-+
-+      var = ReadRegDW(adapter, 0x204);
-+
-+      if (polarity == 0) {
-+              dprintk("%s: LNB power off\n", __FUNCTION__);
-+              var = var | 1;
-+      };
-+
-+      if (polarity == 1) {
-+              var = var & ~1;
-+              var = var & ~4;
-+      };
-+
-+      if (polarity == 2) {
-+              var = var & ~1;
-+              var = var | 4;
-+      }
-+
-+      WriteRegDW(adapter, 0x204, var);
-+}
-+
-+static int flexcop_diseqc_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+      struct adapter *adapter = fe->before_after_data;
-+
-+      switch (cmd) {
-+      case FE_SLEEP:
-+              {
-+                      printk("%s: FE_SLEEP\n", __FUNCTION__);
-+
-+                      set_tuner_polarity(adapter, 0);
-+
-+                      // return -EOPNOTSUPP, to make DVB core also send "FE_SLEEP" command to frontend.
-+                      return -EOPNOTSUPP;
-+              }
-+
-+      case FE_SET_VOLTAGE:
-+              {
-+                      dprintk("%s: FE_SET_VOLTAGE\n", __FUNCTION__);
-+
-+                      switch ((fe_sec_voltage_t) arg) {
-+                      case SEC_VOLTAGE_13:
-+
-+                              printk("%s: SEC_VOLTAGE_13, %x\n", __FUNCTION__, SEC_VOLTAGE_13);
-+
-+                              set_tuner_polarity(adapter, 1);
-+
-+                              break;
-+
-+                      case SEC_VOLTAGE_18:
-+
-+                              printk("%s: SEC_VOLTAGE_18, %x\n", __FUNCTION__, SEC_VOLTAGE_18);
-+
-+                              set_tuner_polarity(adapter, 2);
-+
-+                              break;
-+
-+                      default:
-+
-+                              return -EINVAL;
-+                      };
-+
-+                      break;
-+              }
-+
-+      case FE_SET_TONE:
-+              {
-+                      dprintk("%s: FE_SET_TONE\n", __FUNCTION__);
-+
-+                      switch ((fe_sec_tone_mode_t) arg) {
-+                      case SEC_TONE_ON:
-+
-+                              printk("%s: SEC_TONE_ON, %x\n", __FUNCTION__, SEC_TONE_ON);
-+
-+                              set_tuner_tone(adapter, 1);
-+
-+                              break;
-+
-+                      case SEC_TONE_OFF:
-+
-+                              printk("%s: SEC_TONE_OFF, %x\n", __FUNCTION__, SEC_TONE_OFF);
-+
-+                              set_tuner_tone(adapter, 0);
-+
-+                              break;
-+
-+                      default:
-+
-+                              return -EINVAL;
-+                      };
-+
-+                      break;
-+              }
-+
-+      default:
-+
-+              return -EOPNOTSUPP;
-+      };
-+
-+      return 0;
-+}
-+
-+static int skystar2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+      struct adapter *adapter;
-+      struct dvb_adapter *dvb_adapter;
-+      struct dvb_demux *dvbdemux;
-+
-+      int ret;
-+
-+      if (pdev == NULL)
-+              return -ENODEV;
-+
-+      if (DriverInitialize(pdev) != 0)
-+              return -ENODEV;
-+
-+      dvb_register_adapter(&dvb_adapter, skystar2_pci_driver.name);
-+
-+      if (dvb_adapter == NULL) {
-+              printk("%s: Error registering DVB adapter\n", __FUNCTION__);
-+
-+              DriverHalt(pdev);
-+
-+              return -ENODEV;
-+      }
-+
-+      adapter = (struct adapter *) pci_get_drvdata(pdev);
-+
-+      adapter->dvb_adapter = dvb_adapter;
-+
-+      init_MUTEX(&adapter->i2c_sem);
-+
-+      adapter->i2c_bus = dvb_register_i2c_bus(master_xfer, adapter, adapter->dvb_adapter, 0);
-+
-+      if (!adapter->i2c_bus)
-+              return -ENOMEM;
-+
-+      dvb_add_frontend_ioctls(adapter->dvb_adapter, flexcop_diseqc_ioctl, NULL, adapter);
-+
-+      dvbdemux = &adapter->demux;
-+
-+      dvbdemux->priv = (void *) adapter;
-+      dvbdemux->filternum = 32;
-+      dvbdemux->feednum = 32;
-+      dvbdemux->start_feed = dvb_start_feed;
-+      dvbdemux->stop_feed = dvb_stop_feed;
-+      dvbdemux->write_to_decoder = 0;
-+      dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING);
-+
-+      dvb_dmx_init(&adapter->demux);
-+
-+      adapter->hw_frontend.source = DMX_FRONTEND_0;
-+
-+      adapter->dmxdev.filternum = 32;
-+      adapter->dmxdev.demux = &dvbdemux->dmx;
-+      adapter->dmxdev.capabilities = 0;
-+
-+      dvb_dmxdev_init(&adapter->dmxdev, adapter->dvb_adapter);
-+
-+      ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &adapter->hw_frontend);
-+      if (ret < 0)
-+              return ret;
-+
-+      adapter->mem_frontend.source = DMX_MEMORY_FE;
-+
-+      ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &adapter->mem_frontend);
-+      if (ret < 0)
-+              return ret;
-+
-+      ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &adapter->hw_frontend);
-+      if (ret < 0)
-+              return ret;
-+
-+      dvb_net_init(adapter->dvb_adapter, &adapter->dvbnet, &dvbdemux->dmx);
-+      return 0;
-+}
-+
-+static void skystar2_remove(struct pci_dev *pdev)
-+{
-+      struct adapter *adapter;
-+      struct dvb_demux *dvbdemux;
-+
-+      if (pdev == NULL)
-+              return;
-+
-+      adapter = pci_get_drvdata(pdev);
-+
-+      if (adapter != NULL) {
-+              dvb_net_release(&adapter->dvbnet);
-+              dvbdemux = &adapter->demux;
-+
-+              dvbdemux->dmx.close(&dvbdemux->dmx);
-+              dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &adapter->hw_frontend);
-+              dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &adapter->mem_frontend);
-+
-+              dvb_dmxdev_release(&adapter->dmxdev);
-+              dvb_dmx_release(&adapter->demux);
-+
-+              if (adapter->dvb_adapter != NULL) {
-+                      dvb_remove_frontend_ioctls(adapter->dvb_adapter, flexcop_diseqc_ioctl, NULL);
-+
-+                      if (adapter->i2c_bus != NULL)
-+                              dvb_unregister_i2c_bus(master_xfer, adapter->i2c_bus->adapter, adapter->i2c_bus->id);
-+
-+                      dvb_unregister_adapter(adapter->dvb_adapter);
-+              }
-+
-+              DriverHalt(pdev);
-+      }
-+}
-+
-+static struct pci_device_id skystar2_pci_tbl[] = {
-+      {0x000013D0, 0x00002103, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000},
-+      {0,},
-+};
-+
-+static struct pci_driver skystar2_pci_driver = {
-+      .name = "Technisat SkyStar2 driver",
-+      .id_table = skystar2_pci_tbl,
-+      .probe = skystar2_probe,
-+      .remove = skystar2_remove,
-+};
-+
-+static int skystar2_init(void)
-+{
-+      return pci_module_init(&skystar2_pci_driver);
-+}
-+
-+static void skystar2_cleanup(void)
-+{
-+      pci_unregister_driver(&skystar2_pci_driver);
-+}
-+
-+module_init(skystar2_init);
-+module_exit(skystar2_cleanup);
-+
-+MODULE_DESCRIPTION("Technisat SkyStar2 DVB PCI Driver");
-+MODULE_LICENSE("GPL");
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_demux.c   2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_demux.c  2003-07-19 17:03:49.000000000 -0700
-@@ -403,13 +403,16 @@ void dvb_dmx_swfilter(struct dvb_demux *
- {
-       int p = 0,i, j;
-       
-+      spin_lock(&demux->lock);
-+
-       if ((i = demux->tsbufp)) {
-               if (count < (j=188-i)) {
-                       memcpy(&demux->tsbuf[i], buf, count);
-                       demux->tsbufp += count;
--                      return;
-+                      goto bailout;
-               }
-               memcpy(&demux->tsbuf[i], buf, j);
-+              if (demux->tsbuf[0] == 0x47)
-               dvb_dmx_swfilter_packet(demux, demux->tsbuf);
-               demux->tsbufp = 0;
-               p += j;
-@@ -424,11 +427,14 @@ void dvb_dmx_swfilter(struct dvb_demux *
-                               i = count-p;
-                               memcpy(demux->tsbuf, buf+p, i);
-                               demux->tsbufp=i;
--                              return;
-+                              goto bailout;
-                       }
-               } else 
-                       p++;
-       }
-+
-+bailout:
-+      spin_unlock(&demux->lock);
- }
-@@ -1030,9 +1036,11 @@ static int dvbdmx_write(struct dmx_demux
-       if (down_interruptible (&dvbdemux->mutex))
-               return -ERESTARTSYS;
--
-       dvb_dmx_swfilter(dvbdemux, buf, count);
-       up(&dvbdemux->mutex);
-+
-+      if (signal_pending(current))
-+              return -EINTR;
-       return count;
- }
-@@ -1110,8 +1118,8 @@ static int dvbdmx_get_pes_pids(struct dm
-       return 0;
- }
--int 
--dvb_dmx_init(struct dvb_demux *dvbdemux)
-+
-+int dvb_dmx_init(struct dvb_demux *dvbdemux)
- {
-       int i, err;
-       struct dmx_demux *dmx = &dvbdemux->dmx;
-@@ -1181,8 +1189,8 @@ dvb_dmx_init(struct dvb_demux *dvbdemux)
-       return 0;
- }
--int 
--dvb_dmx_release(struct dvb_demux *dvbdemux)
-+
-+int dvb_dmx_release(struct dvb_demux *dvbdemux)
- {
-       struct dmx_demux *dmx = &dvbdemux->dmx;
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvbdev.c      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvbdev.c     2003-07-19 17:03:49.000000000 -0700
-@@ -29,8 +29,6 @@
- #include <linux/sched.h>
- #include <linux/init.h>
- #include <linux/slab.h>
--#include <linux/version.h>
--#include <asm/semaphore.h>
- #include "dvbdev.h"
- #include "dvb_functions.h"
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvbdev.h      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvbdev.h     2003-07-19 17:03:49.000000000 -0700
-@@ -27,8 +27,9 @@
- #include <linux/types.h>
- #include <linux/poll.h>
- #include <linux/fs.h>
--#include <linux/devfs_fs_kernel.h>
- #include <linux/list.h>
-+#include <linux/version.h>
-+#include <linux/devfs_fs_kernel.h>
- #define DVB_MAJOR 250
-@@ -48,6 +49,7 @@ struct dvb_adapter {
-       struct list_head list_head;
-       struct list_head device_list;
-       const char *name;
-+      u8 proposed_mac [6];
- };
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_frontend.c        2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_frontend.c       2003-07-19 17:03:49.000000000 -0700
-@@ -263,8 +263,14 @@ static int dvb_frontend_get_event (struc
-                 if (flags & O_NONBLOCK)
-                         return -EWOULDBLOCK;
-+              up(&fe->sem);
-+
-                 ret = wait_event_interruptible (events->wait_queue,
-                                                 events->eventw != events->eventr);
-+
-+              if (down_interruptible (&fe->sem))
-+                      return -ERESTARTSYS;
-+
-                 if (ret < 0)
-                         return ret;
-         }
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_functions.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_functions.c      2003-07-19 17:03:49.000000000 -0700
-@@ -1,11 +1,11 @@
- #include <linux/version.h>
--#include <linux/string.h>
--#include <linux/smp_lock.h>
--#include <linux/fs.h>
- #include <linux/errno.h>
-+#include <linux/fs.h>
-+#include <linux/string.h>
- #include <linux/module.h>
- #include <linux/ioctl.h>
- #include <linux/slab.h>
-+#include <linux/smp_lock.h>
- #include <asm/uaccess.h>
- void dvb_kernel_thread_setup (const char *thread_name)
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_functions.h       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_functions.h      2003-07-19 17:03:49.000000000 -0700
-@@ -1,6 +1,8 @@
- #ifndef __DVB_FUNCTIONS_H__
- #define __DVB_FUNCTIONS_H__
-+#include <linux/version.h>
-+
- /**
-  *  a sleeping delay function, waits i ms
-  *
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_net.c     2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_net.c    2003-07-19 17:03:49.000000000 -0700
-@@ -24,22 +24,25 @@
-  * 
-  */
--#include <linux/errno.h>
--#include <linux/kernel.h>
--#include <linux/string.h>
--#include <linux/ioctl.h>
--#include <linux/slab.h>
--#include <asm/uaccess.h>
--
- #include <linux/dvb/net.h>
-+#include <asm/uaccess.h>
- #include "dvb_demux.h"
- #include "dvb_net.h"
- #include "dvb_functions.h"
-+
-+#if 1
-+#define dprintk(x...) printk(x)
-+#else
-+#define dprintk(x...)
-+#endif
-+
-+
- #define DVB_NET_MULTICAST_MAX 10
- struct dvb_net_priv {
-+      int in_use;
-         struct net_device_stats stats;
-         char name[6];
-       u16 pid;
-@@ -49,10 +52,17 @@ struct dvb_net_priv {
-       int multi_num;
-       struct dmx_section_filter *multi_secfilter[DVB_NET_MULTICAST_MAX];
-       unsigned char multi_macs[DVB_NET_MULTICAST_MAX][6];
--      int mode;
-+      int rx_mode;
-+#define RX_MODE_UNI 0
-+#define RX_MODE_MULTI 1
-+#define RX_MODE_ALL_MULTI 2
-+#define RX_MODE_PROMISC 3
-+      struct work_struct set_multicast_list_wq;
-+      struct work_struct restart_net_feed_wq;
- };
--/*
-+
-+/**
-  *    Determine the packet's protocol ID. The rule here is that we 
-  *    assume 802.3 if the type field is short enough to be a length.
-  *    This is normal practice and works for any 'now in use' protocol.
-@@ -60,8 +70,8 @@ struct dvb_net_priv {
-  *  stolen from eth.c out of the linux kernel, hacked for dvb-device
-  *  by Michael Holzt <kju@debian.org>
-  */
-- 
--unsigned short my_eth_type_trans(struct sk_buff *skb, struct net_device *dev)
-+static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb,
-+                                    struct net_device *dev)
- {
-       struct ethhdr *eth;
-       unsigned char *rawp;
-@@ -70,8 +80,7 @@ unsigned short my_eth_type_trans(struct 
-       skb_pull(skb,dev->hard_header_len);
-       eth= skb->mac.ethernet;
-       
--      if(*eth->h_dest&1)
--      {
-+      if (*eth->h_dest & 1) {
-               if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)
-                       skb->pkt_type=PACKET_BROADCAST;
-               else
-@@ -83,7 +92,7 @@ unsigned short my_eth_type_trans(struct 
-               
-       rawp = skb->data;
-       
--      /*
-+      /**
-        *      This is a magic hack to spot IPX packets. Older Novell breaks
-        *      the protocol design and runs IPX over 802.3 without an 802.2 LLC
-        *      layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This
-@@ -92,42 +101,73 @@ unsigned short my_eth_type_trans(struct 
-       if (*(unsigned short *)rawp == 0xFFFF)
-               return htons(ETH_P_802_3);
-               
--      /*
-+      /**
-        *      Real 802.2 LLC
-        */
-       return htons(ETH_P_802_2);
- }
--static void dvb_net_sec(struct net_device *dev, const u8 *pkt, int pkt_len)
-+
-+static void dvb_net_sec(struct net_device *dev, u8 *pkt, int pkt_len)
- {
-         u8 *eth;
-         struct sk_buff *skb;
--        if (pkt_len<13) {
--                printk("%s: IP/MPE packet length = %d too small.\n", dev->name, pkt_len);
-+      /* note: pkt_len includes a 32bit checksum */
-+      if (pkt_len < 16) {
-+              printk("%s: IP/MPE packet length = %d too small.\n",
-+                      dev->name, pkt_len);
-+              ((struct dvb_net_priv *) dev->priv)->stats.rx_errors++;
-+              ((struct dvb_net_priv *) dev->priv)->stats.rx_length_errors++;
-+              return;
-+      }
-+      if ((pkt[5] & 0xfd) != 0xc1) {
-+              /* drop scrambled or broken packets */
-+              ((struct dvb_net_priv *) dev->priv)->stats.rx_errors++;
-+              ((struct dvb_net_priv *) dev->priv)->stats.rx_crc_errors++;
-               return;
-       }
--        skb = dev_alloc_skb(pkt_len+2);
--        if (skb == NULL) {
--                printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n",
--                       dev->name);
-+      if (pkt[5] & 0x02) {
-+              //FIXME: handle LLC/SNAP
-                 ((struct dvb_net_priv *)dev->priv)->stats.rx_dropped++;
-                 return;
-         }
--        eth=(u8 *) skb_put(skb, pkt_len+2);
--        memcpy(eth+14, (void*)pkt+12, pkt_len-12);
-+      if (pkt[7]) {
-+              /* FIXME: assemble datagram from multiple sections */
-+              ((struct dvb_net_priv *) dev->priv)->stats.rx_errors++;
-+              ((struct dvb_net_priv *) dev->priv)->stats.rx_frame_errors++;
-+              return;
-+      }
-+      /* we have 14 byte ethernet header (ip header follows);
-+       * 12 byte MPE header; 4 byte checksum; + 2 byte alignment
-+       */
-+      if (!(skb = dev_alloc_skb(pkt_len - 4 - 12 + 14 + 2))) {
-+              //printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name);
-+              ((struct dvb_net_priv *) dev->priv)->stats.rx_dropped++;
-+              return;
-+      }
-+      skb_reserve(skb, 2);    /* longword align L3 header */
-+      skb->dev = dev;
-+
-+      /* copy L3 payload */
-+      eth = (u8 *) skb_put(skb, pkt_len - 12 - 4 + 14);
-+      memcpy(eth + 14, pkt + 12, pkt_len - 12 - 4);
-+
-+      /* create ethernet header: */
-         eth[0]=pkt[0x0b];
-         eth[1]=pkt[0x0a];
-         eth[2]=pkt[0x09];
-         eth[3]=pkt[0x08];
-         eth[4]=pkt[0x04];
-         eth[5]=pkt[0x03];
-+
-         eth[6]=eth[7]=eth[8]=eth[9]=eth[10]=eth[11]=0;
--        eth[12]=0x08; eth[13]=0x00;
--      skb->protocol=my_eth_type_trans(skb,dev);
--        skb->dev=dev;
-+      eth[12] = 0x08; /* ETH_P_IP */
-+      eth[13] = 0x00;
-+
-+      skb->protocol = dvb_net_eth_type_trans(skb, dev);
-         
-         ((struct dvb_net_priv *)dev->priv)->stats.rx_packets++;
-         ((struct dvb_net_priv *)dev->priv)->stats.rx_bytes+=skb->len;
-@@ -141,9 +181,11 @@ static int dvb_net_callback(const u8 *bu
- {
-         struct net_device *dev=(struct net_device *) filter->priv;
--      /* FIXME: this only works if exactly one complete section is
--                delivered in buffer1 only */
--      dvb_net_sec(dev, buffer1, buffer1_len);
-+      /**
-+       * we rely on the DVB API definition where exactly one complete
-+       * section is delivered in buffer1
-+       */
-+      dvb_net_sec (dev, (u8*) buffer1, buffer1_len);
-       return 0;
- }
-@@ -178,24 +220,27 @@ static int dvb_net_filter_set(struct net
-       memset((*secfilter)->filter_mode,  0xff, DMX_MAX_FILTER_SIZE);
-       (*secfilter)->filter_value[0]=0x3e;
--      (*secfilter)->filter_mask[0]=0xff;
--
-       (*secfilter)->filter_value[3]=mac[5];
--      (*secfilter)->filter_mask[3]=mac_mask[5];
-       (*secfilter)->filter_value[4]=mac[4];
--      (*secfilter)->filter_mask[4]=mac_mask[4];
-       (*secfilter)->filter_value[8]=mac[3];
--      (*secfilter)->filter_mask[8]=mac_mask[3];
-       (*secfilter)->filter_value[9]=mac[2];
--      (*secfilter)->filter_mask[9]=mac_mask[2];
--
-       (*secfilter)->filter_value[10]=mac[1];
--      (*secfilter)->filter_mask[10]=mac_mask[1];
-       (*secfilter)->filter_value[11]=mac[0];
-+
-+      (*secfilter)->filter_mask[0] = 0xff;
-+      (*secfilter)->filter_mask[3] = mac_mask[5];
-+      (*secfilter)->filter_mask[4] = mac_mask[4];
-+      (*secfilter)->filter_mask[8] = mac_mask[3];
-+      (*secfilter)->filter_mask[9] = mac_mask[2];
-+      (*secfilter)->filter_mask[10] = mac_mask[1];
-       (*secfilter)->filter_mask[11]=mac_mask[0];
--      printk("%s: filter mac=%02x %02x %02x %02x %02x %02x\n", 
-+      dprintk("%s: filter mac=%02x %02x %02x %02x %02x %02x\n",
-              dev->name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+      dprintk("%s: filter mask=%02x %02x %02x %02x %02x %02x\n",
-+             dev->name, mac_mask[0], mac_mask[1], mac_mask[2],
-+             mac_mask[3], mac_mask[4], mac_mask[5]);
-+
-       return 0;
- }
-@@ -206,46 +251,57 @@ static int dvb_net_feed_start(struct net
-         struct dmx_demux *demux = priv->demux;
-         unsigned char *mac = (unsigned char *) dev->dev_addr;
-               
-+      dprintk("%s: rx_mode %i\n", __FUNCTION__, priv->rx_mode);
-+      if (priv->secfeed || priv->secfilter || priv->multi_secfilter[0])
-+              printk("%s: BUG %d\n", __FUNCTION__, __LINE__);
-+
-       priv->secfeed=0;
-       priv->secfilter=0;
-+      dprintk("%s: alloc secfeed\n", __FUNCTION__);
-       ret=demux->allocate_section_feed(demux, &priv->secfeed, 
-                                        dvb_net_callback);
-       if (ret<0) {
--              printk("%s: could not get section feed\n", dev->name);
-+              printk("%s: could not allocate section feed\n", dev->name);
-               return ret;
-       }
--      ret=priv->secfeed->set(priv->secfeed, priv->pid, 32768, 0, 0);
-+      ret = priv->secfeed->set(priv->secfeed, priv->pid, 32768, 0, 1);
-+
-       if (ret<0) {
-               printk("%s: could not set section feed\n", dev->name);
--              priv->demux->
--                      release_section_feed(priv->demux, priv->secfeed);
-+              priv->demux->release_section_feed(priv->demux, priv->secfeed);
-               priv->secfeed=0;
-               return ret;
-       }
--      /* fixme: is this correct? */
--      try_module_get(THIS_MODULE);
--      if (priv->mode<3) 
-+      if (priv->rx_mode != RX_MODE_PROMISC) {
-+              dprintk("%s: set secfilter\n", __FUNCTION__);
-               dvb_net_filter_set(dev, &priv->secfilter, mac, mask_normal);
-+      }
--      switch (priv->mode) {
--      case 1:
--              for (i=0; i<priv->multi_num; i++) 
-+      switch (priv->rx_mode) {
-+      case RX_MODE_MULTI:
-+              for (i = 0; i < priv->multi_num; i++) {
-+                      dprintk("%s: set multi_secfilter[%d]\n", __FUNCTION__, i);
-                       dvb_net_filter_set(dev, &priv->multi_secfilter[i],
-                                          priv->multi_macs[i], mask_normal);
-+              }
-               break;
--      case 2:
-+      case RX_MODE_ALL_MULTI:
-               priv->multi_num=1;
--              dvb_net_filter_set(dev, &priv->multi_secfilter[0], mac_allmulti, mask_allmulti);
-+              dprintk("%s: set multi_secfilter[0]\n", __FUNCTION__);
-+              dvb_net_filter_set(dev, &priv->multi_secfilter[0],
-+                                 mac_allmulti, mask_allmulti);
-               break;
--      case 3:
-+      case RX_MODE_PROMISC:
-               priv->multi_num=0;
-+              dprintk("%s: set secfilter\n", __FUNCTION__);
-               dvb_net_filter_set(dev, &priv->secfilter, mac, mask_promisc);
-               break;
-       }
-       
-+      dprintk("%s: start filtering\n", __FUNCTION__);
-       priv->secfeed->start_filtering(priv->secfeed);
-       return 0;
- }
-@@ -255,89 +311,93 @@ static void dvb_net_feed_stop(struct net
-       struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-       int i;
-+      dprintk("%s\n", __FUNCTION__);
-         if (priv->secfeed) {
--              if (priv->secfeed->is_filtering)
-+              if (priv->secfeed->is_filtering) {
-+                      dprintk("%s: stop secfeed\n", __FUNCTION__);
-                       priv->secfeed->stop_filtering(priv->secfeed);
--              if (priv->secfilter)
--                      priv->secfeed->
--                              release_filter(priv->secfeed, 
-+              }
-+
-+              if (priv->secfilter) {
-+                      dprintk("%s: release secfilter\n", __FUNCTION__);
-+                      priv->secfeed->release_filter(priv->secfeed,
-                                              priv->secfilter);
-               priv->secfilter=0;
-+              }
-               for (i=0; i<priv->multi_num; i++) {
--                      if (priv->multi_secfilter[i])
--                              priv->secfeed->
--                                      release_filter(priv->secfeed, 
-+                      if (priv->multi_secfilter[i]) {
-+                              dprintk("%s: release multi_filter[%d]\n", __FUNCTION__, i);
-+                              priv->secfeed->release_filter(priv->secfeed,
-                                                      priv->multi_secfilter[i]);
-                       priv->multi_secfilter[i]=0;
-               }
--              priv->demux->
--                      release_section_feed(priv->demux, priv->secfeed);
-+              }
-+
-+              priv->demux->release_section_feed(priv->demux, priv->secfeed);
-               priv->secfeed=0;
--              /* fixme: is this correct? */
--              module_put(THIS_MODULE);
-       } else
-               printk("%s: no feed to stop\n", dev->name);
- }
--static int dvb_add_mc_filter(struct net_device *dev, struct dev_mc_list *mc)
-+
-+static int dvb_set_mc_filter (struct net_device *dev, struct dev_mc_list *mc)
- {
-       struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
--      int ret;
--      if (priv->multi_num >= DVB_NET_MULTICAST_MAX)
-+      if (priv->multi_num == DVB_NET_MULTICAST_MAX)
-               return -ENOMEM;
--      ret = memcmp(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6);
-       memcpy(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6);
-       priv->multi_num++;
--
--      return ret;
-+      return 0;
- }
--static void dvb_net_set_multi(struct net_device *dev)
-+
-+static void wq_set_multicast_list (void *data)
- {
-+      struct net_device *dev = data;
-       struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
--      struct dev_mc_list *mc;
--      int mci;
--      int update = 0;
-+
-+      dvb_net_feed_stop(dev);
-+
-+      priv->rx_mode = RX_MODE_UNI;
-       
-       if(dev->flags & IFF_PROMISC) {
--//    printk("%s: promiscuous mode\n", dev->name);
--              if(priv->mode != 3)
--                      update = 1;
--              priv->mode = 3;
--      } else if(dev->flags & IFF_ALLMULTI) {
--//    printk("%s: allmulti mode\n", dev->name);
--              if(priv->mode != 2)
--                      update = 1;
--              priv->mode = 2;
--      } else if(dev->mc_count > 0) {
--//    printk("%s: set_mc_list, %d entries\n", 
--//           dev->name, dev->mc_count);
--              if(priv->mode != 1)
--                      update = 1;
--              priv->mode = 1;
-+              dprintk("%s: promiscuous mode\n", dev->name);
-+              priv->rx_mode = RX_MODE_PROMISC;
-+      } else if ((dev->flags & IFF_ALLMULTI)) {
-+              dprintk("%s: allmulti mode\n", dev->name);
-+              priv->rx_mode = RX_MODE_ALL_MULTI;
-+      } else if (dev->mc_count) {
-+              int mci;
-+              struct dev_mc_list *mc;
-+
-+              dprintk("%s: set_mc_list, %d entries\n",
-+                      dev->name, dev->mc_count);
-+
-+              priv->rx_mode = RX_MODE_MULTI;
-               priv->multi_num = 0;
-+
-               for (mci = 0, mc=dev->mc_list; 
-                    mci < dev->mc_count;
--                   mc=mc->next, mci++)
--                      if(dvb_add_mc_filter(dev, mc) != 0)
--                              update = 1;
--      } else {
--              if(priv->mode != 0)
--                      update = 1;
--              priv->mode = 0;
-+                   mc = mc->next, mci++) {
-+                      dvb_set_mc_filter(dev, mc);
-+              }
-       }
--      if(netif_running(dev) != 0 && update > 0)
--      {
--              dvb_net_feed_stop(dev);
-               dvb_net_feed_start(dev);
-       }
-+
-+
-+static void dvb_net_set_multicast_list (struct net_device *dev)
-+{
-+      struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+      schedule_work(&priv->set_multicast_list_wq);
- }
-+
- static int dvb_net_set_config(struct net_device *dev, struct ifmap *map)
- {
-       if (netif_running(dev))
-@@ -345,29 +405,47 @@ static int dvb_net_set_config(struct net
-       return 0;
- }
--static int dvb_net_set_mac(struct net_device *dev, void *p)
-+
-+static void wq_restart_net_feed (void *data)
- {
--      struct sockaddr *addr=p;
--      int update;
-+      struct net_device *dev = data;
--      update = memcmp(dev->dev_addr, addr->sa_data, dev->addr_len);
--      memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
--      if (netif_running(dev) != 0 && update > 0) {
-+      if (netif_running(dev)) {
-               dvb_net_feed_stop(dev);
-               dvb_net_feed_start(dev);
-       }
-+}
-+
-+
-+static int dvb_net_set_mac (struct net_device *dev, void *p)
-+{
-+      struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+      struct sockaddr *addr=p;
-+
-+      memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
-+
-+      if (netif_running(dev))
-+              schedule_work(&priv->restart_net_feed_wq);
-+
-       return 0;
- }
- static int dvb_net_open(struct net_device *dev)
- {
-+      struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+
-+      priv->in_use++;
-       dvb_net_feed_start(dev);
-       return 0;
- }
-+
- static int dvb_net_stop(struct net_device *dev)
- {
-+      struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;
-+
-+      priv->in_use--;
-         dvb_net_feed_stop(dev);
-       return 0;
- }
-@@ -386,16 +464,14 @@ static int dvb_net_init_dev(struct net_d
-       dev->stop               = dvb_net_stop;
-       dev->hard_start_xmit    = dvb_net_tx;
-       dev->get_stats          = dvb_net_get_stats;
--      dev->set_multicast_list = dvb_net_set_multi;
-+      dev->set_multicast_list = dvb_net_set_multicast_list;
-       dev->set_config         = dvb_net_set_config;
-       dev->set_mac_address    = dvb_net_set_mac;
-       dev->mtu                = 4096;
-       dev->mc_count           = 0;
--
--      dev->flags             |= IFF_NOARP;
-       dev->hard_header_cache  = NULL;
--      //SET_MODULE_OWNER(dev);
-+      dev->flags |= IFF_NOARP;
-       
-       return 0;
- }
-@@ -404,18 +480,19 @@ static int get_if(struct dvb_net *dvbnet
- {
-       int i;
--      for (i=0; i<dvbnet->dev_num; i++) 
-+      for (i=0; i<DVB_NET_DEVICES_MAX; i++)
-               if (!dvbnet->state[i])
-                       break;
--      if (i==dvbnet->dev_num)
-+
-+      if (i == DVB_NET_DEVICES_MAX)
-               return -1;
-+
-       dvbnet->state[i]=1;
-       return i;
- }
--int 
--dvb_net_add_if(struct dvb_net *dvbnet, u16 pid)
-+static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid)
- {
-         struct net_device *net;
-       struct dmx_demux *demux;
-@@ -423,59 +500,63 @@ dvb_net_add_if(struct dvb_net *dvbnet, u
-       int result;
-       int if_num;
-  
--      if_num=get_if(dvbnet);
--      if (if_num<0)
-+      if ((if_num = get_if(dvbnet)) < 0)
-               return -EINVAL;
-       net=&dvbnet->device[if_num];
-       demux=dvbnet->demux;
-       
--      net->base_addr = 0;
--      net->irq       = 0;
--      net->dma       = 0;
--      net->mem_start = 0;
-+      memset(net, 0, sizeof(struct net_device));
-+
-         memcpy(net->name, "dvb0_0", 7);
--        net->name[3]=dvbnet->card_num+0x30;
--        net->name[5]=if_num+0x30;
-+      net->name[3]   = dvbnet->dvbdev->adapter->num + '0';
-+      net->name[5]   = if_num + '0';
-+      net->addr_len  = 6;
-+      memcpy(net->dev_addr, dvbnet->dvbdev->adapter->proposed_mac, 6);
-         net->next      = NULL;
-         net->init      = dvb_net_init_dev;
--        net->priv      = kmalloc(sizeof(struct dvb_net_priv), GFP_KERNEL);
--      if (net->priv == NULL)
-+
-+      if (!(net->priv = kmalloc(sizeof(struct dvb_net_priv), GFP_KERNEL)))
-                       return -ENOMEM;
-       priv = net->priv;
-       memset(priv, 0, sizeof(struct dvb_net_priv));
-         priv->demux = demux;
-         priv->pid = pid;
--      priv->mode = 0;
-+      priv->rx_mode = RX_MODE_UNI;
-+
-+      INIT_WORK(&priv->set_multicast_list_wq, wq_set_multicast_list, net);
-+      INIT_WORK(&priv->restart_net_feed_wq, wq_restart_net_feed, net);
-         net->base_addr = pid;
-                 
-       if ((result = register_netdev(net)) < 0) {
-               return result;
-       }
--      /* fixme: is this correct? */
--      try_module_get(THIS_MODULE);
-         return if_num;
- }
--int 
--dvb_net_remove_if(struct dvb_net *dvbnet, int num)
-+
-+static int dvb_net_remove_if(struct dvb_net *dvbnet, int num)
- {
-+      struct dvb_net_priv *priv = dvbnet->device[num].priv;
-+
-       if (!dvbnet->state[num])
-               return -EINVAL;
-+      if (priv->in_use)
-+              return -EBUSY;
-+
-       dvb_net_stop(&dvbnet->device[num]);
--        kfree(dvbnet->device[num].priv);
-+      flush_scheduled_work();
-+      kfree(priv);
-         unregister_netdev(&dvbnet->device[num]);
-       dvbnet->state[num]=0;
--      /* fixme: is this correct? */
--      module_put(THIS_MODULE);
--
-       return 0;
- }
--int dvb_net_do_ioctl(struct inode *inode, struct file *file, 
-+
-+static int dvb_net_do_ioctl(struct inode *inode, struct file *file,
-                 unsigned int cmd, void *parg)
- {
-       struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;
-@@ -490,6 +571,8 @@ int dvb_net_do_ioctl(struct inode *inode
-               struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg;
-               int result;
-               
-+              if (!capable(CAP_SYS_ADMIN))
-+                      return -EPERM;
-               result=dvb_net_add_if(dvbnet, dvbnetif->pid);
-               if (result<0)
-                       return result;
-@@ -502,7 +585,7 @@ int dvb_net_do_ioctl(struct inode *inode
-               struct dvb_net_priv *priv_data;
-               struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg;
--              if (dvbnetif->if_num >= dvbnet->dev_num ||
-+              if (dvbnetif->if_num >= DVB_NET_DEVICES_MAX ||
-                   !dvbnet->state[dvbnetif->if_num])
-                       return -EFAULT;
-@@ -512,7 +595,9 @@ int dvb_net_do_ioctl(struct inode *inode
-               break;
-       }
-       case NET_REMOVE_IF:
--              return dvb_net_remove_if(dvbnet, (long) parg);
-+              if (!capable(CAP_SYS_ADMIN))
-+                      return -EPERM;
-+              return dvb_net_remove_if(dvbnet, (int) parg);
-       default:
-               return -EINVAL;
-       }
-@@ -542,28 +627,29 @@ static struct dvb_device dvbdev_net = {
-         .fops = &dvb_net_fops,
- };
--void
--dvb_net_release(struct dvb_net *dvbnet)
-+
-+void dvb_net_release (struct dvb_net *dvbnet)
- {
-       int i;
-       dvb_unregister_device(dvbnet->dvbdev);
--      for (i=0; i<dvbnet->dev_num; i++) {
-+
-+      for (i=0; i<DVB_NET_DEVICES_MAX; i++) {
-               if (!dvbnet->state[i])
-                       continue;
-               dvb_net_remove_if(dvbnet, i);
-       }
- }
--int
--dvb_net_init(struct dvb_adapter *adap, struct dvb_net *dvbnet, struct dmx_demux *dmx)
-+
-+int dvb_net_init (struct dvb_adapter *adap, struct dvb_net *dvbnet,
-+                struct dmx_demux *dmx)
- {
-       int i;
-               
-       dvbnet->demux = dmx;
--      dvbnet->dev_num = DVB_NET_DEVICES_MAX;
--      for (i=0; i<dvbnet->dev_num; i++) 
-+      for (i=0; i<DVB_NET_DEVICES_MAX; i++)
-               dvbnet->state[i] = 0;
-       dvb_register_device (adap, &dvbnet->dvbdev, &dvbdev_net,
---- linux-2.6.0-test1/drivers/media/dvb/dvb-core/dvb_net.h     2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/dvb-core/dvb_net.h    2003-07-19 17:03:49.000000000 -0700
-@@ -35,8 +35,6 @@
- struct dvb_net {
-       struct dvb_device *dvbdev;
--      int card_num;
--      int dev_num;
-       struct net_device device[DVB_NET_DEVICES_MAX];
-       int state[DVB_NET_DEVICES_MAX];
-       struct dmx_demux *demux;
---- linux-2.6.0-test1/drivers/media/dvb/frontends/alps_bsrv2.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/alps_bsrv2.c        2003-07-19 17:03:49.000000000 -0700
-@@ -55,7 +55,7 @@ static u8 init_1893_tab [] = {
-         0x01, 0xA4, 0x35, 0x81, 0x2A, 0x0d, 0x55, 0xC4,
-         0x09, 0x69, 0x00, 0x86, 0x4c, 0x28, 0x7F, 0x00,
-         0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,       
--        0x80, 0x00, 0x31, 0xb0, 0x14, 0x00, 0xDC, 0x20,
-+        0x80, 0x00, 0x31, 0xb0, 0x14, 0x00, 0xDC, 0x00,
-         0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x55, 0x00, 0x00, 0x7f, 0x00
-@@ -158,6 +158,11 @@ static int ves1893_set_inversion (struct
- {
-       u8 val;
-+      /*
-+       * inversion on/off are interchanged because i and q seem to
-+       * be swapped on the hardware
-+       */
-+
-       switch (inversion) {
-       case INVERSION_OFF:
-               val = 0xc0;
-@@ -166,13 +171,16 @@ static int ves1893_set_inversion (struct
-               val = 0x80;
-               break;
-       case INVERSION_AUTO:
--              val = 0x40;
-+              val = 0x00;
-               break;
-       default:
-               return -EINVAL;
-       }
--      return ves1893_writereg (i2c, 0x0c, (init_1893_tab[0x0c] & 0x3f) | val);
-+      /* needs to be saved for FE_GET_FRONTEND */
-+      init_1893_tab[0x0c] = (init_1893_tab[0x0c] & 0x3f) | val;
-+
-+      return ves1893_writereg (i2c, 0x0c, init_1893_tab[0x0c]);
- }
-@@ -383,8 +391,14 @@ static int bsrv2_ioctl (struct dvb_front
-               afc = (afc * (int)(p->u.qpsk.symbol_rate/1000/8))/16;
-               p->frequency -= afc;
-+
-+              /*
-+               * inversion indicator is only valid
-+               * if auto inversion was used
-+               */
-+              if (!(init_1893_tab[0x0c] & 0x80))
-               p->inversion = (ves1893_readreg (i2c, 0x0f) & 2) ? 
--                                      INVERSION_ON : INVERSION_OFF;
-+                                      INVERSION_OFF : INVERSION_ON;
-               p->u.qpsk.fec_inner = ves1893_get_fec (i2c);
-       /*  XXX FIXME: timing offset !! */
-               break;
---- linux-2.6.0-test1/drivers/media/dvb/frontends/alps_tdlb7.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/alps_tdlb7.c        2003-07-19 17:03:49.000000000 -0700
-@@ -349,6 +349,9 @@ static int tdlb7_ioctl (struct dvb_front
-               sp5659_set_tv_freq (i2c, p->frequency);
-+              // read status reg in order to clear pending irqs
-+              sp8870_readreg(i2c, 0x200);
-+
-               // sample rate correction bit [23..17]
-               sp8870_writereg(i2c,0x0319,0x000A);
-               
---- linux-2.6.0-test1/drivers/media/dvb/frontends/grundig_29504-401.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/grundig_29504-401.c 2003-07-19 17:03:49.000000000 -0700
-@@ -37,15 +37,15 @@ static int debug = 0;
- struct dvb_frontend_info grundig_29504_401_info = {
--      .name                   = "Grundig 29504-401",
--      .type                   = FE_OFDM,
--/*    .frequency_min          = ???,*/
--/*    .frequency_max          = ???,*/
--      .frequency_stepsize     = 166666,
--/*      .frequency_tolerance  = ???,*/
--/*      .symbol_rate_tolerance        = ???,*/
--      .notifier_delay =  0,
--      .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | 
-+      name: "Grundig 29504-401",
-+      type: FE_OFDM,
-+/*    frequency_min: ???,*/
-+/*    frequency_max: ???,*/
-+      frequency_stepsize: 166666,
-+/*      frequency_tolerance: ???,*/
-+/*      symbol_rate_tolerance: ???,*/
-+      notifier_delay: 0,
-+      caps: FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | 
-             FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 |
-             FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
-             FE_CAN_MUTE_TS /*| FE_CAN_CLEAN_SETUP*/
-@@ -109,15 +109,15 @@ static int tsa5060_set_tv_freq (struct d
-       div = (36125000 + freq) / 166666;
-       cfg = 0x88;
--      cpump = div < 175000000 ? 2 : div < 390000000 ? 1 :
--              div < 470000000 ? 2 : div < 750000000 ? 1 : 3;
-+      cpump = freq < 175000000 ? 2 : freq < 390000000 ? 1 :
-+              freq < 470000000 ? 2 : freq < 750000000 ? 1 : 3;
--      band_select = div < 175000000 ? 0x0e : div < 470000000 ? 0x05 : 0x03;
-+      band_select = freq < 175000000 ? 0x0e : freq < 470000000 ? 0x05 : 0x03;
-       buf [0] = (div >> 8) & 0x7f;
-       buf [1] = div & 0xff;
-       buf [2] = ((div >> 10) & 0x60) | cfg;
--      buf [3] = cpump | band_select;
-+      buf [3] = (cpump << 6) | band_select;
-       return tsa5060_write (i2c, buf);
- }
-@@ -267,12 +267,12 @@ static int apply_frontend_param (struct 
- }
--static void reset_and_configure (struct dvb_i2c_bus *i2c)
-+static int reset_and_configure (struct dvb_i2c_bus *i2c)
- {
-       u8 buf [] = { 0x06 };
-       struct i2c_msg msg = { .addr = 0x00, .flags = 0, .buf = buf, .len = 1 };
--      i2c->xfer (i2c, &msg, 1);
-+      return (i2c->xfer (i2c, &msg, 1) == 1) ? 0 : -ENODEV;
- }
-@@ -391,7 +391,7 @@ int grundig_29504_401_ioctl (struct dvb_
-               struct dvb_frontend_parameters *p = arg;
-               tsa5060_set_tv_freq (i2c, p->frequency);
--              apply_frontend_param (i2c, p);
-+              return apply_frontend_param (i2c, p);
-       }
-         case FE_GET_FRONTEND:
-               /*  we could correct the frequency here, but...
-@@ -417,25 +417,61 @@ int grundig_29504_401_ioctl (struct dvb_
- static int l64781_attach (struct dvb_i2c_bus *i2c)
- {
-+      u8 reg0x3e;
-       u8 b0 [] = { 0x1a };
-       u8 b1 [] = { 0x00 };
-       struct i2c_msg msg [] = { { .addr = 0x55, .flags = 0, .buf = b0, .len = 1 },
-                          { .addr = 0x55, .flags = I2C_M_RD, .buf = b1, .len = 1 } };
--      if (i2c->xfer (i2c, msg, 2) == 2)   /*  probably an EEPROM... */
-+      /**
-+       *  the L64781 won't show up before we send the reset_and_configure()
-+       *  broadcast. If nothing responds there is no L64781 on the bus...
-+       */
-+      if (reset_and_configure(i2c) < 0) {
-+              dprintk("no response on reset_and_configure() broadcast, bailing out...\n");
-               return -ENODEV;
-+      }
--      reset_and_configure (i2c);
--
--      if (i2c->xfer (i2c, msg, 2) != 2)   /*  nothing... */
-+      /* The chip always responds to reads */
-+      if (i2c->xfer(i2c, msg, 2) != 2) {  
-+              dprintk("no response to read on I2C bus\n");
-               return -ENODEV;
-+      }
--      if (b1[0] != 0xa1)
-+      /* Save current register contents for bailout */
-+      reg0x3e = l64781_readreg(i2c, 0x3e);
-+
-+      /* Reading the POWER_DOWN register always returns 0 */
-+      if (reg0x3e != 0) {
-+              dprintk("Device doesn't look like L64781\n");
-               return -ENODEV;
-+      }
-+
-+      /* Turn the chip off */
-+      l64781_writereg (i2c, 0x3e, 0x5a);
-+
-+      /* Responds to all reads with 0 */
-+      if (l64781_readreg(i2c, 0x1a) != 0) {
-+              dprintk("Read 1 returned unexpcted value\n");
-+              goto bailout;
-+      }         
-+
-+      /* Turn the chip on */
-+      l64781_writereg (i2c, 0x3e, 0xa5);
-+      
-+      /* Responds with register default value */
-+      if (l64781_readreg(i2c, 0x1a) != 0xa1) { 
-+              dprintk("Read 2 returned unexpcted value\n");
-+              goto bailout;
-+      }
-       dvb_register_frontend (grundig_29504_401_ioctl, i2c, NULL,
-                              &grundig_29504_401_info);
-       return 0;
-+
-+ bailout:
-+      l64781_writereg (i2c, 0x3e, reg0x3e);  /* restore reg 0x3e */
-+      return -ENODEV;
- }
---- linux-2.6.0-test1/drivers/media/dvb/frontends/grundig_29504-491.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/grundig_29504-491.c 2003-07-19 17:03:49.000000000 -0700
-@@ -179,10 +179,7 @@ static fe_code_rate_t tda8083_get_fec (s
-       static fe_code_rate_t fec_tab [] = { FEC_8_9, FEC_1_2, FEC_2_3, FEC_3_4,
-                                      FEC_4_5, FEC_5_6, FEC_6_7, FEC_7_8 };
--      index = tda8083_readreg (i2c, 0x0e) & 0x3;
--
--      if (index > 7)
--              return FEC_NONE;
-+      index = tda8083_readreg(i2c, 0x0e) & 0x07;
-       return fec_tab [index];
- }
---- linux-2.6.0-test1/drivers/media/dvb/frontends/Kconfig      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/Kconfig     2003-07-19 17:03:49.000000000 -0700
-@@ -93,6 +93,16 @@ config DVB_GRUNDIG_29504_401
-         DVB adapter simply enable all supported frontends, the 
-         right one will get autodetected.
-+config DVB_MT312
-+      tristate "Zarlink MT312 Satellite Channel Decoder (QPSK)"
-+      depends on DVB_CORE
-+      help
-+        A DVB-S tuner module. Say Y when you want to support this frontend.
-+
-+        If you don't know what tuner module is soldered on your 
-+        DVB adapter simply enable all supported frontends, the 
-+        right one will get autodetected.
-+
- config DVB_VES1820
-       tristate "Frontends with external VES1820 demodulator (QAM)"
-       depends on DVB_CORE
-@@ -105,3 +115,23 @@ config DVB_VES1820
-         DVB adapter simply enable all supported frontends, the 
-         right one will get autodetected.
-+config DVB_TDA1004X
-+      tristate "Frontends with external TDA1004X demodulators (OFDM)"
-+      depends on DVB_CORE
-+      help
-+        A DVB-T tuner module. Say Y when you want to support this frontend.
-+
-+        If you don't know what tuner module is soldered on your
-+        DVB adapter simply enable all supported frontends, the
-+        right one will get autodetected.
-+
-+config DVB_TDA1004X_FIRMWARE_FILE
-+        string "Full pathname of tda1004x.bin firmware file"
-+        depends on DVB_TDA1004X
-+        default "/etc/dvb/tda1004x.bin"
-+        help
-+          The TDA1004X requires additional firmware in order to function.
-+          The firmware file can obtained as follows:
-+            wget http://www.technotrend.de/new/215/TTweb_215a_budget_20_05_2003.zip
-+            unzip -j TTweb_215a_budget_20_05_2003.zip Software/Oem/PCI/App/ttlcdacc.dll
-+            mv ttlcdacc.dll /etc/dvb/tda1004x.bin
---- linux-2.6.0-test1/drivers/media/dvb/frontends/Makefile     2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/Makefile    2003-07-19 17:03:49.000000000 -0700
-@@ -12,4 +12,6 @@ obj-$(CONFIG_DVB_ATMEL_AT76C651) += at76
- obj-$(CONFIG_DVB_CX24110) += cx24110.o
- obj-$(CONFIG_DVB_GRUNDIG_29504_491) += grundig_29504-491.o
- obj-$(CONFIG_DVB_GRUNDIG_29504_401) += grundig_29504-401.o
-+obi-$(CONFIG_DVB_MT312) += mt312.o
- obj-$(CONFIG_DVB_VES1820) += ves1820.o
-+obj-$(CONFIG_DVB_TDA1004X) += tda1004x.o
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/mt312.c     2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,749 @@
-+/* 
-+    Driver for Zarlink MT312 Satellite Channel Decoder
-+
-+    Copyright (C) 2003 Andreas Oberritter <obi@saftware.de>
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+    References:
-+    http://products.zarlink.com/product_profiles/MT312.htm
-+    http://products.zarlink.com/product_profiles/SL1935.htm
-+*/
-+
-+#include <linux/delay.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+
-+#include "dvb_frontend.h"
-+#include "mt312.h"
-+
-+#define I2C_ADDR_MT312                0x0e
-+#define I2C_ADDR_SL1935               0x61
-+#define I2C_ADDR_TSA5059      0x61
-+
-+#define MT312_DEBUG           0
-+
-+#define MT312_SYS_CLK         90000000UL      /* 90 MHz */
-+#define MT312_PLL_CLK         10000000UL      /* 10 MHz */
-+
-+static struct dvb_frontend_info mt312_info = {
-+      .name = "Zarlink MT312",
-+      .type = FE_QPSK,
-+      .frequency_min = 950000,
-+      .frequency_max = 2150000,
-+      .frequency_stepsize = (MT312_PLL_CLK / 1000) / 128,
-+      /*.frequency_tolerance = 29500,         FIXME: binary compatibility waste? */
-+      .symbol_rate_min = MT312_SYS_CLK / 128,
-+      .symbol_rate_max = MT312_SYS_CLK / 2,
-+      /*.symbol_rate_tolerance = 500,         FIXME: binary compatibility waste? 2% */
-+      .notifier_delay = 0,
-+      .caps =
-+          FE_CAN_INVERSION_AUTO | FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 |
-+          FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 |
-+          FE_CAN_FEC_AUTO | FE_CAN_QPSK | FE_CAN_RECOVER |
-+          FE_CAN_CLEAN_SETUP | FE_CAN_MUTE_TS
-+};
-+
-+static int mt312_read(struct dvb_i2c_bus *i2c,
-+                    const enum mt312_reg_addr reg, void *buf,
-+                    const size_t count)
-+{
-+      int ret;
-+      struct i2c_msg msg[2];
-+      u8 regbuf[1] = { reg };
-+
-+      msg[0].addr = I2C_ADDR_MT312;
-+      msg[0].flags = 0;
-+      msg[0].buf = regbuf;
-+      msg[0].len = 1;
-+      msg[1].addr = I2C_ADDR_MT312;
-+      msg[1].flags = I2C_M_RD;
-+      msg[1].buf = buf;
-+      msg[1].len = count;
-+
-+      ret = i2c->xfer(i2c, msg, 2);
-+
-+      if (ret != 2) {
-+              printk(KERN_ERR "%s: ret == %d\n", __FUNCTION__, ret);
-+              return -EREMOTEIO;
-+      }
-+#ifdef MT312_DEBUG
-+      {
-+              int i;
-+              printk(KERN_INFO "R(%d):", reg & 0x7f);
-+              for (i = 0; i < count; i++)
-+                      printk(" %02x", ((const u8 *) buf)[i]);
-+              printk("\n");
-+      }
-+#endif
-+
-+      return 0;
-+}
-+
-+static int mt312_write(struct dvb_i2c_bus *i2c,
-+                     const enum mt312_reg_addr reg, const void *src,
-+                     const size_t count)
-+{
-+      int ret;
-+      u8 buf[count + 1];
-+      struct i2c_msg msg;
-+
-+#ifdef MT312_DEBUG
-+      {
-+              int i;
-+              printk(KERN_INFO "W(%d):", reg & 0x7f);
-+              for (i = 0; i < count; i++)
-+                      printk(" %02x", ((const u8 *) src)[i]);
-+              printk("\n");
-+      }
-+#endif
-+
-+      buf[0] = reg;
-+      memcpy(&buf[1], src, count);
-+
-+      msg.addr = I2C_ADDR_MT312;
-+      msg.flags = 0;
-+      msg.buf = buf;
-+      msg.len = count + 1;
-+
-+      ret = i2c->xfer(i2c, &msg, 1);
-+
-+      if (ret != 1) {
-+              printk(KERN_ERR "%s: ret == %d\n", __FUNCTION__, ret);
-+              return -EREMOTEIO;
-+      }
-+
-+      return 0;
-+}
-+
-+static inline int mt312_readreg(struct dvb_i2c_bus *i2c,
-+                              const enum mt312_reg_addr reg, u8 * val)
-+{
-+      return mt312_read(i2c, reg, val, 1);
-+}
-+
-+static inline int mt312_writereg(struct dvb_i2c_bus *i2c,
-+                               const enum mt312_reg_addr reg, const u8 val)
-+{
-+      return mt312_write(i2c, reg, &val, 1);
-+}
-+
-+static int mt312_pll_write(struct dvb_i2c_bus *i2c, const u8 addr,
-+                         u8 * buf, const u8 len)
-+{
-+      int ret;
-+      struct i2c_msg msg;
-+
-+      msg.addr = addr;
-+      msg.flags = 0;
-+      msg.buf = buf;
-+      msg.len = len;
-+
-+      if ((ret = mt312_writereg(i2c, GPP_CTRL, 0x40)) < 0)
-+              return ret;
-+
-+      if ((ret = i2c->xfer(i2c, &msg, 1)) != 1)
-+              printk(KERN_ERR "%s: i/o error (ret == %d)\n", __FUNCTION__, ret);
-+
-+      if ((ret = mt312_writereg(i2c, GPP_CTRL, 0x00)) < 0)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static inline u32 mt312_div(u32 a, u32 b)
-+{
-+      return (a + (b / 2)) / b;
-+}
-+
-+static int sl1935_set_tv_freq(struct dvb_i2c_bus *i2c, u32 freq, u32 sr)
-+{
-+      /* 155 uA, Baseband Path B */
-+      u8 buf[4] = { 0x00, 0x00, 0x80, 0x00 };
-+
-+      u8 exp;
-+      u32 ref;
-+      u32 div;
-+
-+      if (sr < 10000000) {    /* 1-10 MSym/s: ratio 2 ^ 3 */
-+              exp = 3;
-+              buf[2] |= 0x40; /* 690 uA */
-+      } else if (sr < 15000000) {     /* 10-15 MSym/s: ratio 2 ^ 4 */
-+              exp = 4;
-+              buf[2] |= 0x20; /* 330 uA */
-+      } else {                /* 15-45 MSym/s: ratio 2 ^ 7 */
-+              exp = 7;
-+              buf[3] |= 0x08; /* Baseband Path A */
-+      }
-+
-+      div = mt312_div(MT312_PLL_CLK, 1 << exp);
-+      ref = mt312_div(freq * 1000, div);
-+      mt312_info.frequency_stepsize = mt312_div(div, 1000);
-+
-+      buf[0] = (ref >> 8) & 0x7f;
-+      buf[1] = (ref >> 0) & 0xff;
-+      buf[2] |= (exp - 1);
-+
-+      if (freq < 1550000)
-+              buf[3] |= 0x10;
-+
-+      printk(KERN_INFO "synth dword = %02x%02x%02x%02x\n", buf[0],
-+             buf[1], buf[2], buf[3]);
-+
-+      return mt312_pll_write(i2c, I2C_ADDR_SL1935, buf, sizeof(buf));
-+}
-+
-+static int tsa5059_set_tv_freq(struct dvb_i2c_bus *i2c, u32 freq, u32 sr)
-+{
-+      u8 buf[4];
-+
-+      u32 ref = mt312_div(freq, 125);
-+
-+      buf[0] = (ref >> 8) & 0x7f;
-+      buf[1] = (ref >> 0) & 0xff;
-+      buf[2] = 0x84 | ((ref >> 10) & 0x60);
-+      buf[3] = 0x80;
-+      
-+      if (freq < 1550000)
-+              buf[3] |= 0x02;
-+
-+      printk(KERN_INFO "synth dword = %02x%02x%02x%02x\n", buf[0],
-+             buf[1], buf[2], buf[3]);
-+
-+      return mt312_pll_write(i2c, I2C_ADDR_TSA5059, buf, sizeof(buf));
-+}
-+
-+static int mt312_reset(struct dvb_i2c_bus *i2c, const u8 full)
-+{
-+      return mt312_writereg(i2c, RESET, full ? 0x80 : 0x40);
-+}
-+
-+static int mt312_init(struct dvb_i2c_bus *i2c, const long id)
-+{
-+      int ret;
-+      u8 buf[2];
-+
-+      /* wake up */
-+      if ((ret = mt312_writereg(i2c, CONFIG, 0x8c)) < 0)
-+              return ret;
-+
-+      /* wait at least 150 usec */
-+      udelay(150);
-+
-+      /* full reset */
-+      if ((ret = mt312_reset(i2c, 1)) < 0)
-+              return ret;
-+
-+      /* SYS_CLK */
-+      buf[0] = mt312_div(MT312_SYS_CLK * 2, 1000000);
-+
-+      /* DISEQC_RATIO */
-+      buf[1] = mt312_div(MT312_PLL_CLK, 15000 * 4);
-+
-+      if ((ret = mt312_write(i2c, SYS_CLK, buf, sizeof(buf))) < 0)
-+              return ret;
-+
-+      if ((ret = mt312_writereg(i2c, SNR_THS_HIGH, 0x32)) < 0)
-+              return ret;
-+
-+      if ((ret = mt312_writereg(i2c, OP_CTRL, 0x53)) < 0)
-+              return ret;
-+
-+      /* TS_SW_LIM */
-+      buf[0] = 0x8c;
-+      buf[1] = 0x98;
-+
-+      if ((ret = mt312_write(i2c, TS_SW_LIM_L, buf, sizeof(buf))) < 0)
-+              return ret;
-+
-+      if ((ret = mt312_writereg(i2c, CS_SW_LIM, 0x69)) < 0)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static int mt312_send_master_cmd(struct dvb_i2c_bus *i2c,
-+                               const struct dvb_diseqc_master_cmd *c)
-+{
-+      int ret;
-+      u8 diseqc_mode;
-+
-+      if ((c->msg_len == 0) || (c->msg_len > sizeof(c->msg)))
-+              return -EINVAL;
-+
-+      if ((ret = mt312_readreg(i2c, DISEQC_MODE, &diseqc_mode)) < 0)
-+              return ret;
-+
-+      if ((ret =
-+           mt312_write(i2c, (0x80 | DISEQC_INSTR), c->msg, c->msg_len)) < 0)
-+              return ret;
-+
-+      if ((ret =
-+           mt312_writereg(i2c, DISEQC_MODE,
-+                          (diseqc_mode & 0x40) | ((c->msg_len - 1) << 3)
-+                          | 0x04)) < 0)
-+              return ret;
-+
-+      /* set DISEQC_MODE[2:0] to zero if a return message is expected */
-+      if (c->msg[0] & 0x02)
-+              if ((ret =
-+                   mt312_writereg(i2c, DISEQC_MODE, (diseqc_mode & 0x40))) < 0)
-+                      return ret;
-+
-+      return 0;
-+}
-+
-+static int mt312_recv_slave_reply(struct dvb_i2c_bus *i2c,
-+                                struct dvb_diseqc_slave_reply *r)
-+{
-+      /* TODO */
-+      return -EOPNOTSUPP;
-+}
-+
-+static int mt312_send_burst(struct dvb_i2c_bus *i2c, const fe_sec_mini_cmd_t c)
-+{
-+      const u8 mini_tab[2] = { 0x02, 0x03 };
-+
-+      int ret;
-+      u8 diseqc_mode;
-+
-+      if (c > SEC_MINI_B)
-+              return -EINVAL;
-+
-+      if ((ret = mt312_readreg(i2c, DISEQC_MODE, &diseqc_mode)) < 0)
-+              return ret;
-+
-+      if ((ret =
-+           mt312_writereg(i2c, DISEQC_MODE,
-+                          (diseqc_mode & 0x40) | mini_tab[c])) < 0)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static int mt312_set_tone(struct dvb_i2c_bus *i2c, const fe_sec_tone_mode_t t)
-+{
-+      const u8 tone_tab[2] = { 0x01, 0x00 };
-+
-+      int ret;
-+      u8 diseqc_mode;
-+
-+      if (t > SEC_TONE_OFF)
-+              return -EINVAL;
-+
-+      if ((ret = mt312_readreg(i2c, DISEQC_MODE, &diseqc_mode)) < 0)
-+              return ret;
-+
-+      if ((ret =
-+           mt312_writereg(i2c, DISEQC_MODE,
-+                          (diseqc_mode & 0x40) | tone_tab[t])) < 0)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static int mt312_set_voltage(struct dvb_i2c_bus *i2c, const fe_sec_voltage_t v)
-+{
-+      const u8 volt_tab[3] = { 0x00, 0x40, 0x00 };
-+
-+      if (v > SEC_VOLTAGE_OFF)
-+              return -EINVAL;
-+
-+      return mt312_writereg(i2c, DISEQC_MODE, volt_tab[v]);
-+}
-+
-+static int mt312_read_status(struct dvb_i2c_bus *i2c, fe_status_t * s)
-+{
-+      int ret;
-+      u8 status[3];
-+
-+      *s = 0;
-+
-+      if ((ret = mt312_read(i2c, QPSK_STAT_H, status, sizeof(status))) < 0)
-+              return ret;
-+
-+      if (status[0] & 0xc0)
-+              *s |= FE_HAS_SIGNAL;    /* signal noise ratio */
-+      if (status[0] & 0x04)
-+              *s |= FE_HAS_CARRIER;   /* qpsk carrier lock */
-+      if (status[2] & 0x02)
-+              *s |= FE_HAS_VITERBI;   /* viterbi lock */
-+      if (status[2] & 0x04)
-+              *s |= FE_HAS_SYNC;      /* byte align lock */
-+      if (status[0] & 0x01)
-+              *s |= FE_HAS_LOCK;      /* qpsk lock */
-+
-+      return 0;
-+}
-+
-+static int mt312_read_bercnt(struct dvb_i2c_bus *i2c, u32 * ber)
-+{
-+      int ret;
-+      u8 buf[3];
-+
-+      if ((ret = mt312_read(i2c, RS_BERCNT_H, buf, 3)) < 0)
-+              return ret;
-+
-+      *ber = ((buf[0] << 16) | (buf[1] << 8) | buf[2]) * 64;
-+
-+      return 0;
-+}
-+
-+static int mt312_read_agc(struct dvb_i2c_bus *i2c, u16 * signal_strength)
-+{
-+      int ret;
-+      u8 buf[3];
-+      u16 agc;
-+      s16 err_db;
-+
-+      if ((ret = mt312_read(i2c, AGC_H, buf, sizeof(buf))) < 0)
-+              return ret;
-+
-+      agc = (buf[0] << 6) | (buf[1] >> 2);
-+      err_db = (s16) (((buf[1] & 0x03) << 14) | buf[2] << 6) >> 6;
-+
-+      *signal_strength = agc;
-+
-+      printk(KERN_DEBUG "agc=%08x err_db=%hd\n", agc, err_db);
-+
-+      return 0;
-+}
-+
-+static int mt312_read_snr(struct dvb_i2c_bus *i2c, u16 * snr)
-+{
-+      int ret;
-+      u8 buf[2];
-+
-+      if ((ret = mt312_read(i2c, M_SNR_H, &buf, sizeof(buf))) < 0)
-+              return ret;
-+
-+      *snr = 0xFFFF - ((((buf[0] & 0x7f) << 8) | buf[1]) << 1);
-+
-+      return 0;
-+}
-+
-+static int mt312_read_ubc(struct dvb_i2c_bus *i2c, u32 * ubc)
-+{
-+      int ret;
-+      u8 buf[2];
-+
-+      if ((ret = mt312_read(i2c, RS_UBC_H, &buf, sizeof(buf))) < 0)
-+              return ret;
-+
-+      *ubc = (buf[0] << 8) | buf[1];
-+
-+      return 0;
-+}
-+
-+static int mt312_set_frontend(struct dvb_i2c_bus *i2c,
-+                            const struct dvb_frontend_parameters *p,
-+                            const long id)
-+{
-+      int ret;
-+      u8 buf[5];
-+      u16 sr;
-+
-+      const u8 fec_tab[10] =
-+          { 0x00, 0x01, 0x02, 0x04, 0x3f, 0x08, 0x10, 0x20, 0x3f, 0x3f };
-+      const u8 inv_tab[3] = { 0x00, 0x40, 0x80 };
-+
-+      int (*set_tv_freq)(struct dvb_i2c_bus *i2c, u32 freq, u32 sr);
-+
-+      if ((p->frequency < mt312_info.frequency_min)
-+          || (p->frequency > mt312_info.frequency_max))
-+              return -EINVAL;
-+
-+      if ((p->inversion < INVERSION_OFF)
-+          || (p->inversion > INVERSION_AUTO))
-+              return -EINVAL;
-+
-+      if ((p->u.qpsk.symbol_rate < mt312_info.symbol_rate_min)
-+          || (p->u.qpsk.symbol_rate > mt312_info.symbol_rate_max))
-+              return -EINVAL;
-+
-+      if ((p->u.qpsk.fec_inner < FEC_NONE)
-+          || (p->u.qpsk.fec_inner > FEC_AUTO))
-+              return -EINVAL;
-+
-+      if ((p->u.qpsk.fec_inner == FEC_4_5)
-+          || (p->u.qpsk.fec_inner == FEC_8_9))
-+              return -EINVAL;
-+
-+      switch (id) {
-+      case ID_VP310:
-+              set_tv_freq = tsa5059_set_tv_freq;
-+              break;
-+      case ID_MT312:
-+              set_tv_freq = sl1935_set_tv_freq;
-+              break;
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      if ((ret = set_tv_freq(i2c, p->frequency, p->u.qpsk.symbol_rate)) < 0)
-+              return ret;
-+
-+      /* sr = (u16)(sr * 256.0 / 1000000.0) */
-+      sr = mt312_div(p->u.qpsk.symbol_rate * 4, 15625);
-+
-+      /* SYM_RATE */
-+      buf[0] = (sr >> 8) & 0x3f;
-+      buf[1] = (sr >> 0) & 0xff;
-+
-+      /* VIT_MODE */
-+      buf[2] = inv_tab[p->inversion] | fec_tab[p->u.qpsk.fec_inner];
-+
-+      /* QPSK_CTRL */
-+      buf[3] = 0x40;          /* swap I and Q before QPSK demodulation */
-+
-+      if (p->u.qpsk.symbol_rate < 10000000)
-+              buf[3] |= 0x04; /* use afc mode */
-+
-+      /* GO */
-+      buf[4] = 0x01;
-+
-+      if ((ret = mt312_write(i2c, SYM_RATE_H, buf, sizeof(buf))) < 0)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static int mt312_get_inversion(struct dvb_i2c_bus *i2c,
-+                             fe_spectral_inversion_t * i)
-+{
-+      int ret;
-+      u8 vit_mode;
-+
-+      if ((ret = mt312_readreg(i2c, VIT_MODE, &vit_mode)) < 0)
-+              return ret;
-+
-+      if (vit_mode & 0x80)    /* auto inversion was used */
-+              *i = (vit_mode & 0x40) ? INVERSION_ON : INVERSION_OFF;
-+
-+      return 0;
-+}
-+
-+static int mt312_get_symbol_rate(struct dvb_i2c_bus *i2c, u32 * sr)
-+{
-+      int ret;
-+      u8 sym_rate_h;
-+      u8 dec_ratio;
-+      u16 sym_rat_op;
-+      u16 monitor;
-+      u8 buf[2];
-+
-+      if ((ret = mt312_readreg(i2c, SYM_RATE_H, &sym_rate_h)) < 0)
-+              return ret;
-+
-+      if (sym_rate_h & 0x80) {        /* symbol rate search was used */
-+              if ((ret = mt312_writereg(i2c, MON_CTRL, 0x03)) < 0)
-+                      return ret;
-+
-+              if ((ret = mt312_read(i2c, MONITOR_H, buf, sizeof(buf))) < 0)
-+                      return ret;
-+
-+              monitor = (buf[0] << 8) | buf[1];
-+
-+              printk(KERN_DEBUG "sr(auto) = %u\n",
-+                     mt312_div(monitor * 15625, 4));
-+      } else {
-+              if ((ret = mt312_writereg(i2c, MON_CTRL, 0x05)) < 0)
-+                      return ret;
-+
-+              if ((ret = mt312_read(i2c, MONITOR_H, buf, sizeof(buf))) < 0)
-+                      return ret;
-+
-+              dec_ratio = ((buf[0] >> 5) & 0x07) * 32;
-+
-+              if ((ret = mt312_read(i2c, SYM_RAT_OP_H, buf, sizeof(buf))) < 0)
-+                      return ret;
-+
-+              sym_rat_op = (buf[0] << 8) | buf[1];
-+
-+              printk(KERN_DEBUG "sym_rat_op=%d dec_ratio=%d\n",
-+                     sym_rat_op, dec_ratio);
-+              printk(KERN_DEBUG "*sr(manual) = %lu\n",
-+                     (((MT312_PLL_CLK * 8192) / (sym_rat_op + 8192)) *
-+                      2) - dec_ratio);
-+      }
-+
-+      return 0;
-+}
-+
-+static int mt312_get_code_rate(struct dvb_i2c_bus *i2c, fe_code_rate_t * cr)
-+{
-+      const fe_code_rate_t fec_tab[8] =
-+          { FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_6_7, FEC_7_8,
-+              FEC_AUTO, FEC_AUTO };
-+
-+      int ret;
-+      u8 fec_status;
-+
-+      if ((ret = mt312_readreg(i2c, FEC_STATUS, &fec_status)) < 0)
-+              return ret;
-+
-+      *cr = fec_tab[(fec_status >> 4) & 0x07];
-+
-+      return 0;
-+}
-+
-+static int mt312_get_frontend(struct dvb_i2c_bus *i2c,
-+                            struct dvb_frontend_parameters *p)
-+{
-+      int ret;
-+
-+      if ((ret = mt312_get_inversion(i2c, &p->inversion)) < 0)
-+              return ret;
-+
-+      if ((ret = mt312_get_symbol_rate(i2c, &p->u.qpsk.symbol_rate)) < 0)
-+              return ret;
-+
-+      if ((ret = mt312_get_code_rate(i2c, &p->u.qpsk.fec_inner)) < 0)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static int mt312_sleep(struct dvb_i2c_bus *i2c)
-+{
-+      int ret;
-+      u8 config;
-+
-+      /* reset all registers to defaults */
-+      if ((ret = mt312_reset(i2c, 1)) < 0)
-+              return ret;
-+
-+      if ((ret = mt312_readreg(i2c, CONFIG, &config)) < 0)
-+              return ret;
-+
-+      /* enter standby */
-+      if ((ret = mt312_writereg(i2c, CONFIG, config & 0x7f)) < 0)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static int mt312_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+      struct dvb_i2c_bus *i2c = fe->i2c;
-+
-+      switch (cmd) {
-+      case FE_GET_INFO:
-+              memcpy(arg, &mt312_info, sizeof(struct dvb_frontend_info));
-+              break;
-+
-+      case FE_DISEQC_RESET_OVERLOAD:
-+              return -EOPNOTSUPP;
-+
-+      case FE_DISEQC_SEND_MASTER_CMD:
-+              return mt312_send_master_cmd(i2c, arg);
-+
-+      case FE_DISEQC_RECV_SLAVE_REPLY:
-+              if ((long) fe->data == ID_MT312)
-+                      return mt312_recv_slave_reply(i2c, arg);
-+              else
-+                      return -EOPNOTSUPP;
-+
-+      case FE_DISEQC_SEND_BURST:
-+              return mt312_send_burst(i2c, (fe_sec_mini_cmd_t) arg);
-+
-+      case FE_SET_TONE:
-+              return mt312_set_tone(i2c, (fe_sec_tone_mode_t) arg);
-+
-+      case FE_SET_VOLTAGE:
-+              return mt312_set_voltage(i2c, (fe_sec_voltage_t) arg);
-+
-+      case FE_ENABLE_HIGH_LNB_VOLTAGE:
-+              return -EOPNOTSUPP;
-+
-+      case FE_READ_STATUS:
-+              return mt312_read_status(i2c, arg);
-+
-+      case FE_READ_BER:
-+              return mt312_read_bercnt(i2c, arg);
-+
-+      case FE_READ_SIGNAL_STRENGTH:
-+              return mt312_read_agc(i2c, arg);
-+
-+      case FE_READ_SNR:
-+              return mt312_read_snr(i2c, arg);
-+
-+      case FE_READ_UNCORRECTED_BLOCKS:
-+              return mt312_read_ubc(i2c, arg);
-+
-+      case FE_SET_FRONTEND:
-+              return mt312_set_frontend(i2c, arg, (long) fe->data);
-+
-+      case FE_GET_FRONTEND:
-+              return mt312_get_frontend(i2c, arg);
-+
-+      case FE_GET_EVENT:
-+              return -EOPNOTSUPP;
-+
-+      case FE_SLEEP:
-+              return mt312_sleep(i2c);
-+
-+      case FE_INIT:
-+              return mt312_init(i2c, (long) fe->data);
-+
-+      case FE_RESET:
-+              return mt312_reset(i2c, 0);
-+
-+      default:
-+              return -ENOIOCTLCMD;
-+      }
-+
-+      return 0;
-+}
-+
-+static int mt312_attach(struct dvb_i2c_bus *i2c)
-+{
-+      int ret;
-+      u8 id;
-+
-+      if ((ret = mt312_readreg(i2c, ID, &id)) < 0)
-+              return ret;
-+
-+      if ((id != ID_VP310) && (id != ID_MT312))
-+              return -ENODEV;
-+
-+      return dvb_register_frontend(mt312_ioctl, i2c, (void *) (long) id,
-+                                   &mt312_info);
-+}
-+
-+static void mt312_detach(struct dvb_i2c_bus *i2c)
-+{
-+      dvb_unregister_frontend(mt312_ioctl, i2c);
-+}
-+
-+static int __init mt312_module_init(void)
-+{
-+      return dvb_register_i2c_device(THIS_MODULE, mt312_attach, mt312_detach);
-+}
-+
-+static void __exit mt312_module_exit(void)
-+{
-+      dvb_unregister_i2c_device(mt312_attach);
-+}
-+
-+module_init(mt312_module_init);
-+module_exit(mt312_module_exit);
-+
-+MODULE_DESCRIPTION("MT312 Satellite Channel Decoder Driver");
-+MODULE_AUTHOR("Andreas Oberritter <obi@saftware.de>");
-+MODULE_LICENSE("GPL");
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/mt312.h     2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,162 @@
-+/* 
-+    Driver for Zarlink MT312 QPSK Frontend
-+
-+    Copyright (C) 2003 Andreas Oberritter <obi@saftware.de>
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+#ifndef _DVB_FRONTENDS_MT312
-+#define _DVB_FRONTENDS_MT312
-+
-+enum mt312_reg_addr {
-+      QPSK_INT_H = 0,
-+      QPSK_INT_M = 1,
-+      QPSK_INT_L = 2,
-+      FEC_INT = 3,
-+      QPSK_STAT_H = 4,
-+      QPSK_STAT_L = 5,
-+      FEC_STATUS = 6,
-+      LNB_FREQ_H = 7,
-+      LNB_FREQ_L = 8,
-+      M_SNR_H = 9,
-+      M_SNR_L = 10,
-+      VIT_ERRCNT_H = 11,
-+      VIT_ERRCNT_M = 12,
-+      VIT_ERRCNT_L = 13,
-+      RS_BERCNT_H = 14,
-+      RS_BERCNT_M = 15,
-+      RS_BERCNT_L = 16,
-+      RS_UBC_H = 17,
-+      RS_UBC_L = 18,
-+      SIG_LEVEL = 19,
-+      GPP_CTRL = 20,
-+      RESET = 21,
-+      DISEQC_MODE = 22,
-+      SYM_RATE_H = 23,
-+      SYM_RATE_L = 24,
-+      VIT_MODE = 25,
-+      QPSK_CTRL = 26,
-+      GO = 27,
-+      IE_QPSK_H = 28,
-+      IE_QPSK_M = 29,
-+      IE_QPSK_L = 30,
-+      IE_FEC = 31,
-+      QPSK_STAT_EN = 32,
-+      FEC_STAT_EN = 33,
-+      SYS_CLK = 34,
-+      DISEQC_RATIO = 35,
-+      DISEQC_INSTR = 36,
-+      FR_LIM = 37,
-+      FR_OFF = 38,
-+      AGC_CTRL = 39,
-+      AGC_INIT = 40,
-+      AGC_REF = 41,
-+      AGC_MAX = 42,
-+      AGC_MIN = 43,
-+      AGC_LK_TH = 44,
-+      TS_AGC_LK_TH = 45,
-+      AGC_PWR_SET = 46,
-+      QPSK_MISC = 47,
-+      SNR_THS_LOW = 48,
-+      SNR_THS_HIGH = 49,
-+      TS_SW_RATE = 50,
-+      TS_SW_LIM_L = 51,
-+      TS_SW_LIM_H = 52,
-+      CS_SW_RATE_1 = 53,
-+      CS_SW_RATE_2 = 54,
-+      CS_SW_RATE_3 = 55,
-+      CS_SW_RATE_4 = 56,
-+      CS_SW_LIM = 57,
-+      TS_LPK = 58,
-+      TS_LPK_M = 59,
-+      TS_LPK_L = 60,
-+      CS_KPROP_H = 61,
-+      CS_KPROP_L = 62,
-+      CS_KINT_H = 63,
-+      CS_KINT_L = 64,
-+      QPSK_SCALE = 65,
-+      TLD_OUTCLK_TH = 66,
-+      TLD_INCLK_TH = 67,
-+      FLD_TH = 68,
-+      PLD_OUTLK3 = 69,
-+      PLD_OUTLK2 = 70,
-+      PLD_OUTLK1 = 71,
-+      PLD_OUTLK0 = 72,
-+      PLD_INLK3 = 73,
-+      PLD_INLK2 = 74,
-+      PLD_INLK1 = 75,
-+      PLD_INLK0 = 76,
-+      PLD_ACC_TIME = 77,
-+      SWEEP_PAR = 78,
-+      STARTUP_TIME = 79,
-+      LOSSLOCK_TH = 80,
-+      FEC_LOCK_TM = 81,
-+      LOSSLOCK_TM = 82,
-+      VIT_ERRPER_H = 83,
-+      VIT_ERRPER_M = 84,
-+      VIT_ERRPER_L = 85,
-+      VIT_SETUP = 86,
-+      VIT_REF0 = 87,
-+      VIT_REF1 = 88,
-+      VIT_REF2 = 89,
-+      VIT_REF3 = 90,
-+      VIT_REF4 = 91,
-+      VIT_REF5 = 92,
-+      VIT_REF6 = 93,
-+      VIT_MAXERR = 94,
-+      BA_SETUPT = 95,
-+      OP_CTRL = 96,
-+      FEC_SETUP = 97,
-+      PROG_SYNC = 98,
-+      AFC_SEAR_TH = 99,
-+      CSACC_DIF_TH = 100,
-+      QPSK_LK_CT = 101,
-+      QPSK_ST_CT = 102,
-+      MON_CTRL = 103,
-+      QPSK_RESET = 104,
-+      QPSK_TST_CT = 105,
-+      QPSK_TST_ST = 106,
-+      TEST_R = 107,
-+      AGC_H = 108,
-+      AGC_M = 109,
-+      AGC_L = 110,
-+      FREQ_ERR1_H = 111,
-+      FREQ_ERR1_M = 112,
-+      FREQ_ERR1_L = 113,
-+      FREQ_ERR2_H = 114,
-+      FREQ_ERR2_L = 115,
-+      SYM_RAT_OP_H = 116,
-+      SYM_RAT_OP_L = 117,
-+      DESEQC2_INT = 118,
-+      DISEQC2_STAT = 119,
-+      DISEQC2_FIFO = 120,
-+      DISEQC2_CTRL1 = 121,
-+      DISEQC2_CTRL2 = 122,
-+      MONITOR_H = 123,
-+      MONITOR_L = 124,
-+      TEST_MODE = 125,
-+      ID = 126,
-+      CONFIG = 127
-+};
-+
-+enum mt312_model_id {
-+      ID_VP310 = 1,
-+      ID_MT312 = 3
-+};
-+
-+#endif                                /* DVB_FRONTENDS_MT312 */
---- linux-2.6.0-test1/drivers/media/dvb/frontends/nxt6000.c    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/nxt6000.c   2003-07-19 17:03:49.000000000 -0700
-@@ -6,8 +6,10 @@
-       
-       Alps TDME7 (Tuner: MITEL SP5659)
-       Alps TDED4 (Tuner: TI ALP510, external Nxt6000)
-+      Comtech DVBT-6k07 (PLL IC: SP5730)
-     Copyright (C) 2002-2003 Florian Schirmer <schirmer@taytron.net>
-+    Copyright (C) 2003 Paul Andreassen <paul@andreassen.com.au>
-     This program is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published by
-@@ -78,6 +80,7 @@ struct nxt6000_config {
- #define TUNER_TYPE_ALP510     0
- #define TUNER_TYPE_SP5659     1
-+#define TUNER_TYPE_SP5730     2
- #define FE2NXT(fe) ((struct nxt6000_config *)&(fe->data))
- #define FREQ2DIV(freq) ((freq + 36166667) / 166667)
-@@ -212,6 +215,39 @@ static int alp510_set_tv_freq(struct dvb
-       
- }
-+static int sp5730_set_tv_freq(struct dvb_frontend *fe, u32 freq)
-+{
-+
-+      u8 buf[4];
-+      struct nxt6000_config *nxt = FE2NXT(fe);
-+
-+      buf[0] = (FREQ2DIV(freq) >> 8) & 0x7F;
-+      buf[1] = FREQ2DIV(freq) & 0xFF;
-+      buf[2] = 0x93;
-+
-+      if ((freq >= 51000000) && (freq < 132100000))
-+              buf[3] = 0x05;
-+      else if ((freq >= 132100000) && (freq < 143000000))
-+              buf[3] = 0x45;
-+      else if ((freq >= 146000000) && (freq < 349100000))
-+              buf[3] = 0x06;
-+      else if ((freq >= 349100000) && (freq < 397100000))
-+              buf[3] = 0x46;
-+      else if ((freq >= 397100000) && (freq < 426000000))
-+              buf[3] = 0x86;
-+      else if ((freq >= 430000000) && (freq < 659100000))
-+              buf[3] = 0x03;
-+      else if ((freq >= 659100000) && (freq < 759100000))
-+              buf[3] = 0x43;
-+      else if ((freq >= 759100000) && (freq < 858000000))
-+              buf[3] = 0x83;
-+      else
-+              return -EINVAL;
-+
-+      return pll_write(fe->i2c, nxt->demod_addr, nxt->tuner_addr, buf, 4);
-+      
-+}
-+
- static void nxt6000_reset(struct dvb_frontend *fe)
- {
-@@ -756,6 +792,13 @@ static int nxt6000_ioctl(struct dvb_fron
-                                               
-                                       break;
-                                       
-+                              case TUNER_TYPE_SP5730:
-+
-+                                      if ((result = sp5730_set_tv_freq(fe, param->frequency)) < 0)
-+                                              return result;
-+
-+                                      break;
-+
-                               default:
-                               
-                                       return -EFAULT;
-@@ -816,6 +859,14 @@ static int nxt6000_attach(struct dvb_i2c
-       
-                       dprintk("nxt6000: detected MITEL SP5659 tuner at 0x%02X\n", nxt.tuner_addr);
-               
-+              } else if (pll_write(i2c, demod_addr_tbl[addr_nr], 0xC0, NULL, 0) == 0) {
-+
-+                      nxt.tuner_addr = 0xC0;
-+                      nxt.tuner_type = TUNER_TYPE_SP5730;
-+                      nxt.clock_inversion = 0;
-+      
-+                      dprintk("nxt6000: detected SP5730 tuner at 0x%02X\n", nxt.tuner_addr);
-+              
-               } else {
-                       printk("nxt6000: unable to detect tuner\n");
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/tda1004x.c  2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,1158 @@
-+  /*
-+     Driver for Philips tda1004x OFDM Frontend
-+
-+     This program is free software; you can redistribute it and/or modify
-+     it under the terms of the GNU General Public License as published by
-+     the Free Software Foundation; either version 2 of the License, or
-+     (at your option) any later version.
-+
-+     This program is distributed in the hope that it will be useful,
-+     but WITHOUT ANY WARRANTY; without even the implied warranty of
-+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+
-+     GNU General Public License for more details.
-+
-+     You should have received a copy of the GNU General Public License
-+     along with this program; if not, write to the Free Software
-+     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+   */
-+
-+/*
-+    This driver needs a copy of the DLL "ttlcdacc.dll" from the Haupauge or Technotrend
-+    windows driver saved as '/etc/dvb/tda1004x.mc'.
-+    You can also pass the complete file name with the module parameter 'tda1004x_firmware'.
-+
-+    Currently the DLL from v2.15a of the technotrend driver is supported. Other versions can
-+    be added reasonably painlessly.
-+
-+    Windows driver URL: http://www.technotrend.de/
-+ */
-+
-+
-+#define __KERNEL_SYSCALLS__
-+#include <linux/kernel.h>
-+#include <linux/vmalloc.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/unistd.h>
-+#include <linux/fcntl.h>
-+#include <linux/errno.h>
-+#include "dvb_frontend.h"
-+#include "dvb_functions.h"
-+
-+#ifndef CONFIG_TDA1004X_MC_LOCATION
-+#define CONFIG_TDA1004X_MC_LOCATION "/etc/dvb/tda1004x.mc"
-+#endif
-+
-+static int tda1004x_debug = 0;
-+static char *tda1004x_firmware = CONFIG_TDA1004X_MC_LOCATION;
-+
-+
-+#define TDA10045H_ADDRESS        0x08
-+#define TD1344_ADDRESS           0x61
-+#define TDM1316L_ADDRESS         0x63
-+#define MC44BC374_ADDRESS        0x65
-+
-+#define TDA1004X_CHIPID          0x00
-+#define TDA1004X_AUTO            0x01
-+#define TDA1004X_IN_CONF1        0x02
-+#define TDA1004X_IN_CONF2        0x03
-+#define TDA1004X_OUT_CONF1       0x04
-+#define TDA1004X_OUT_CONF2       0x05
-+#define TDA1004X_STATUS_CD       0x06
-+#define TDA1004X_CONFC4          0x07
-+#define TDA1004X_DSSPARE2        0x0C
-+#define TDA1004X_CODE_IN         0x0D
-+#define TDA1004X_FWPAGE          0x0E
-+#define TDA1004X_SCAN_CPT        0x10
-+#define TDA1004X_DSP_CMD         0x11
-+#define TDA1004X_DSP_ARG         0x12
-+#define TDA1004X_DSP_DATA1       0x13
-+#define TDA1004X_DSP_DATA2       0x14
-+#define TDA1004X_CONFADC1        0x15
-+#define TDA1004X_CONFC1          0x16
-+#define TDA1004X_SIGNAL_STRENGTH 0x1a
-+#define TDA1004X_SNR             0x1c
-+#define TDA1004X_REG1E           0x1e
-+#define TDA1004X_REG1F           0x1f
-+#define TDA1004X_CBER_RESET      0x20
-+#define TDA1004X_CBER_MSB        0x21
-+#define TDA1004X_CBER_LSB        0x22
-+#define TDA1004X_CVBER_LUT       0x23
-+#define TDA1004X_VBER_MSB        0x24
-+#define TDA1004X_VBER_MID        0x25
-+#define TDA1004X_VBER_LSB        0x26
-+#define TDA1004X_UNCOR           0x27
-+#define TDA1004X_CONFPLL_P       0x2D
-+#define TDA1004X_CONFPLL_M_MSB   0x2E
-+#define TDA1004X_CONFPLL_M_LSB   0x2F
-+#define TDA1004X_CONFPLL_N       0x30
-+#define TDA1004X_UNSURW_MSB      0x31
-+#define TDA1004X_UNSURW_LSB      0x32
-+#define TDA1004X_WREF_MSB        0x33
-+#define TDA1004X_WREF_MID        0x34
-+#define TDA1004X_WREF_LSB        0x35
-+#define TDA1004X_MUXOUT          0x36
-+#define TDA1004X_CONFADC2        0x37
-+#define TDA1004X_IOFFSET         0x38
-+
-+#define dprintk if (tda1004x_debug) printk
-+
-+static struct dvb_frontend_info tda10045h_info = {
-+      .name = "Philips TDA10045H",
-+      .type = FE_OFDM,
-+      .frequency_min = 51000000,
-+      .frequency_max = 858000000,
-+      .frequency_stepsize = 166667,
-+      .caps = FE_CAN_INVERSION_AUTO |
-+          FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-+          FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-+          FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
-+          FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
-+};
-+
-+#pragma pack(1)
-+struct tda1004x_state {
-+      u8 tda1004x_address;
-+      u8 tuner_address;
-+      u8 initialised:1;
-+};
-+#pragma pack()
-+
-+struct fwinfo {
-+      int file_size;
-+      int fw_offset;
-+      int fw_size;
-+};
-+static struct fwinfo tda10045h_fwinfo[] = { {.file_size = 286720,.fw_offset = 0x34cc5,.fw_size = 30555} };
-+static int tda10045h_fwinfo_count = sizeof(tda10045h_fwinfo) / sizeof(struct fwinfo);
-+
-+static int errno;
-+
-+
-+static int tda1004x_write_byte(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, int data)
-+{
-+      int ret;
-+      u8 buf[] = { reg, data };
-+      struct i2c_msg msg = { .addr=0, .flags=0, .buf=buf, .len=2 };
-+
-+      dprintk("%s: reg=0x%x, data=0x%x\n", __FUNCTION__, reg, data);
-+
-+        msg.addr = tda_state->tda1004x_address;
-+      ret = i2c->xfer(i2c, &msg, 1);
-+
-+      if (ret != 1)
-+              dprintk("%s: error reg=0x%x, data=0x%x, ret=%i\n",
-+                     __FUNCTION__, reg, data, ret);
-+
-+      dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __FUNCTION__,
-+              reg, data, ret);
-+      return (ret != 1) ? -1 : 0;
-+}
-+
-+static int tda1004x_read_byte(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg)
-+{
-+      int ret;
-+      u8 b0[] = { reg };
-+      u8 b1[] = { 0 };
-+      struct i2c_msg msg[] = {{ .addr=0, .flags=0, .buf=b0, .len=1},
-+                              { .addr=0, .flags=I2C_M_RD, .buf=b1, .len = 1}};
-+
-+      dprintk("%s: reg=0x%x\n", __FUNCTION__, reg);
-+
-+        msg[0].addr = tda_state->tda1004x_address;
-+        msg[1].addr = tda_state->tda1004x_address;
-+      ret = i2c->xfer(i2c, msg, 2);
-+
-+      if (ret != 2) {
-+              dprintk("%s: error reg=0x%x, ret=%i\n", __FUNCTION__, reg,
-+                     ret);
-+              return -1;
-+      }
-+
-+      dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __FUNCTION__,
-+              reg, b1[0], ret);
-+      return b1[0];
-+}
-+
-+static int tda1004x_write_mask(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, int mask, int data)
-+{
-+        int val;
-+      dprintk("%s: reg=0x%x, mask=0x%x, data=0x%x\n", __FUNCTION__, reg,
-+              mask, data);
-+
-+      // read a byte and check
-+      val = tda1004x_read_byte(i2c, tda_state, reg);
-+      if (val < 0)
-+              return val;
-+
-+      // mask if off
-+      val = val & ~mask;
-+      val |= data & 0xff;
-+
-+      // write it out again
-+      return tda1004x_write_byte(i2c, tda_state, reg, val);
-+}
-+
-+static int tda1004x_write_buf(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state, int reg, unsigned char *buf, int len)
-+{
-+      int i;
-+      int result;
-+
-+      dprintk("%s: reg=0x%x, len=0x%x\n", __FUNCTION__, reg, len);
-+
-+      result = 0;
-+      for (i = 0; i < len; i++) {
-+              result = tda1004x_write_byte(i2c, tda_state, reg + i, buf[i]);
-+              if (result != 0)
-+                      break;
-+      }
-+
-+      return result;
-+}
-+
-+static int tda1004x_enable_tuner_i2c(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state)
-+{
-+        int result;
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      result = tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 2, 2);
-+      dvb_delay(1);
-+      return result;
-+}
-+
-+static int tda1004x_disable_tuner_i2c(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state)
-+{
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      return tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 2, 0);
-+}
-+
-+
-+static int tda10045h_set_bandwidth(struct dvb_i2c_bus *i2c,
-+                                 struct tda1004x_state *tda_state,
-+                                 fe_bandwidth_t bandwidth)
-+{
-+        static u8 bandwidth_6mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x60, 0x1e, 0xa7, 0x45, 0x4f };
-+        static u8 bandwidth_7mhz[] = { 0x02, 0x00, 0x37, 0x00, 0x4a, 0x2f, 0x6d, 0x76, 0xdb };
-+        static u8 bandwidth_8mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x48, 0x17, 0x89, 0xc7, 0x14 };
-+
-+        switch (bandwidth) {
-+      case BANDWIDTH_6_MHZ:
-+              tda1004x_write_byte(i2c, tda_state, TDA1004X_DSSPARE2, 0x14);
-+              tda1004x_write_buf(i2c, tda_state, TDA1004X_CONFPLL_P, bandwidth_6mhz, sizeof(bandwidth_6mhz));
-+              break;
-+
-+      case BANDWIDTH_7_MHZ:
-+              tda1004x_write_byte(i2c, tda_state, TDA1004X_DSSPARE2, 0x80);
-+              tda1004x_write_buf(i2c, tda_state, TDA1004X_CONFPLL_P, bandwidth_7mhz, sizeof(bandwidth_7mhz));
-+              break;
-+
-+      case BANDWIDTH_8_MHZ:
-+              tda1004x_write_byte(i2c, tda_state, TDA1004X_DSSPARE2, 0x14);
-+              tda1004x_write_buf(i2c, tda_state, TDA1004X_CONFPLL_P, bandwidth_8mhz, sizeof(bandwidth_8mhz));
-+              break;
-+
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      tda1004x_write_byte(i2c, tda_state, TDA1004X_IOFFSET, 0);
-+
-+        // done
-+        return 0;
-+}
-+
-+
-+static int tda1004x_init(struct dvb_i2c_bus *i2c, struct tda1004x_state *tda_state)
-+{
-+      u8 fw_buf[65];
-+      struct i2c_msg fw_msg = {.addr = 0,.flags = 0,.buf = fw_buf,.len = 0 };
-+      struct i2c_msg tuner_msg = {.addr = 0,.flags = 0,.buf = 0,.len = 0 };
-+      unsigned char *firmware = NULL;
-+      int filesize;
-+      int fd;
-+      int fwinfo_idx;
-+      int fw_size = 0;
-+      int fw_pos;
-+      int tx_size;
-+        static u8 disable_mc44BC374c[] = { 0x1d, 0x74, 0xa0, 0x68 };
-+      mm_segment_t fs = get_fs();
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // Load the firmware
-+      set_fs(get_ds());
-+      fd = open(tda1004x_firmware, 0, 0);
-+      if (fd < 0) {
-+              printk("%s: Unable to open firmware %s\n", __FUNCTION__,
-+                     tda1004x_firmware);
-+              return -EIO;
-+      }
-+      filesize = lseek(fd, 0L, 2);
-+      if (filesize <= 0) {
-+              printk("%s: Firmware %s is empty\n", __FUNCTION__,
-+                     tda1004x_firmware);
-+              sys_close(fd);
-+              return -EIO;
-+      }
-+
-+      // find extraction parameters
-+      for (fwinfo_idx = 0; fwinfo_idx < tda10045h_fwinfo_count; fwinfo_idx++) {
-+              if (tda10045h_fwinfo[fwinfo_idx].file_size == filesize)
-+                      break;
-+      }
-+      if (fwinfo_idx >= tda10045h_fwinfo_count) {
-+              printk("%s: Unsupported firmware %s\n", __FUNCTION__, tda1004x_firmware);
-+              sys_close(fd);
-+              return -EIO;
-+      }
-+      fw_size = tda10045h_fwinfo[fwinfo_idx].fw_size;
-+
-+      // allocate buffer for it
-+      firmware = vmalloc(fw_size);
-+      if (firmware == NULL) {
-+              printk("%s: Out of memory loading firmware\n",
-+                     __FUNCTION__);
-+              sys_close(fd);
-+              return -EIO;
-+      }
-+
-+      // read it!
-+      lseek(fd, tda10045h_fwinfo[fwinfo_idx].fw_offset, 0);
-+      if (read(fd, firmware, fw_size) != fw_size) {
-+              printk("%s: Failed to read firmware\n", __FUNCTION__);
-+              vfree(firmware);
-+              sys_close(fd);
-+              return -EIO;
-+      }
-+      sys_close(fd);
-+      set_fs(fs);
-+
-+      // Disable the MC44BC374C
-+      tda1004x_enable_tuner_i2c(i2c, tda_state);
-+      tuner_msg.addr = MC44BC374_ADDRESS;
-+      tuner_msg.buf = disable_mc44BC374c;
-+      tuner_msg.len = sizeof(disable_mc44BC374c);
-+      if (i2c->xfer(i2c, &tuner_msg, 1) != 1) {
-+              i2c->xfer(i2c, &tuner_msg, 1);
-+      }
-+      tda1004x_disable_tuner_i2c(i2c, tda_state);
-+
-+      // set some valid bandwith parameters
-+        switch(tda_state->tda1004x_address) {
-+        case TDA10045H_ADDRESS:
-+                tda10045h_set_bandwidth(i2c, tda_state, BANDWIDTH_8_MHZ);
-+                break;
-+        }
-+      dvb_delay(500);
-+
-+      // do the firmware upload
-+      tda1004x_write_byte(i2c, tda_state, TDA1004X_FWPAGE, 0);
-+        fw_msg.addr = tda_state->tda1004x_address;
-+      fw_pos = 0;
-+      while (fw_pos != fw_size) {
-+              // work out how much to send this time
-+              tx_size = fw_size - fw_pos;
-+              if (tx_size > 64) {
-+                      tx_size = 64;
-+              }
-+              // send the chunk
-+              fw_buf[0] = TDA1004X_CODE_IN;
-+              memcpy(fw_buf + 1, firmware + fw_pos, tx_size);
-+              fw_msg.len = tx_size + 1;
-+              if (i2c->xfer(i2c, &fw_msg, 1) != 1) {
-+                      vfree(firmware);
-+                      return -EIO;
-+              }
-+              fw_pos += tx_size;
-+
-+              dprintk("%s: fw_pos=0x%x\n", __FUNCTION__, fw_pos);
-+      }
-+      dvb_delay(100);
-+      vfree(firmware);
-+
-+      // Initialise the DSP and check upload was OK
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 0x10, 0);
-+      tda1004x_write_byte(i2c, tda_state, TDA1004X_DSP_CMD, 0x67);
-+      if ((tda1004x_read_byte(i2c, tda_state, TDA1004X_DSP_DATA1) != 0x67) ||
-+          (tda1004x_read_byte(i2c, tda_state, TDA1004X_DSP_DATA2) != 0x2c)) {
-+              printk("%s: firmware upload failed!\n", __FUNCTION__);
-+              return -EIO;
-+      }
-+
-+      // tda setup
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 8, 0);
-+        tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 0x10, 0x10);
-+        tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 0xC0, 0x0);
-+        tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 0x20, 0);
-+        tda1004x_write_byte(i2c, tda_state, TDA1004X_CONFADC1, 0x2e);
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x80, 0x80);
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x40, 0);
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x10, 0);
-+        tda1004x_write_byte(i2c, tda_state, TDA1004X_REG1E, 0);
-+      tda1004x_write_byte(i2c, tda_state, TDA1004X_REG1F, 0);
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_VBER_MSB, 0xe0, 0xa0);
-+
-+      // done
-+      return 0;
-+}
-+
-+static int tda1004x_encode_fec(int fec)
-+{
-+      // convert known FEC values
-+      switch (fec) {
-+      case FEC_1_2:
-+              return 0;
-+      case FEC_2_3:
-+              return 1;
-+      case FEC_3_4:
-+              return 2;
-+      case FEC_5_6:
-+              return 3;
-+      case FEC_7_8:
-+              return 4;
-+      }
-+
-+      // unsupported
-+      return -EINVAL;
-+}
-+
-+static int tda1004x_decode_fec(int tdafec)
-+{
-+      // convert known FEC values
-+      switch (tdafec) {
-+      case 0:
-+              return FEC_1_2;
-+      case 1:
-+              return FEC_2_3;
-+      case 2:
-+              return FEC_3_4;
-+      case 3:
-+              return FEC_5_6;
-+      case 4:
-+              return FEC_7_8;
-+      }
-+
-+      // unsupported
-+      return -1;
-+}
-+
-+static int tda1004x_set_frequency(struct dvb_i2c_bus *i2c,
-+                         struct tda1004x_state *tda_state,
-+                         struct dvb_frontend_parameters *fe_params)
-+{
-+      u8 tuner_buf[4];
-+      struct i2c_msg tuner_msg = {.addr=0, .flags=0, .buf=tuner_buf, .len=sizeof(tuner_buf) };
-+      int tuner_frequency;
-+        u8 band, cp, filter;
-+      int counter, counter2;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // setup the frequency buffer
-+      switch (tda_state->tuner_address) {
-+      case TD1344_ADDRESS:
-+
-+              // setup tuner buffer
-+              tuner_frequency =
-+                        (((fe_params->frequency / 1000) * 6) + 217502) / 1000;
-+              tuner_buf[0] = tuner_frequency >> 8;
-+              tuner_buf[1] = tuner_frequency & 0xff;
-+              tuner_buf[2] = 0x88;
-+              if (fe_params->frequency < 550000000) {
-+                      tuner_buf[3] = 0xab;
-+              } else {
-+                      tuner_buf[3] = 0xeb;
-+              }
-+
-+              // tune it
-+              tda1004x_enable_tuner_i2c(i2c, tda_state);
-+              tuner_msg.addr = tda_state->tuner_address;
-+              tuner_msg.len = 4;
-+              i2c->xfer(i2c, &tuner_msg, 1);
-+
-+              // wait for it to finish
-+              tuner_msg.len = 1;
-+              tuner_msg.flags = I2C_M_RD;
-+              counter = 0;
-+              counter2 = 0;
-+              while (counter++ < 100) {
-+                      if (i2c->xfer(i2c, &tuner_msg, 1) == 1) {
-+                              if (tuner_buf[0] & 0x40) {
-+                                      counter2++;
-+                              } else {
-+                                      counter2 = 0;
-+                              }
-+                      }
-+
-+                      if (counter2 > 10) {
-+                              break;
-+                      }
-+              }
-+              tda1004x_disable_tuner_i2c(i2c, tda_state);
-+              break;
-+
-+      case TDM1316L_ADDRESS:
-+              // determine charge pump
-+              tuner_frequency = fe_params->frequency + 36130000;
-+              if (tuner_frequency < 87000000) {
-+                      return -EINVAL;
-+              } else if (tuner_frequency < 130000000) {
-+                        cp = 3;
-+              } else if (tuner_frequency < 160000000) {
-+                      cp = 5;
-+              } else if (tuner_frequency < 200000000) {
-+                      cp = 6;
-+              } else if (tuner_frequency < 290000000) {
-+                      cp = 3;
-+              } else if (tuner_frequency < 420000000) {
-+                      cp = 5;
-+              } else if (tuner_frequency < 480000000) {
-+                      cp = 6;
-+              } else if (tuner_frequency < 620000000) {
-+                      cp = 3;
-+              } else if (tuner_frequency < 830000000) {
-+                      cp = 5;
-+              } else if (tuner_frequency < 895000000) {
-+                      cp = 7;
-+              } else {
-+                      return -EINVAL;
-+              }
-+
-+              // determine band
-+              if (fe_params->frequency < 49000000) {
-+                        return -EINVAL;
-+              } else if (fe_params->frequency < 159000000) {
-+                        band = 1;
-+              } else if (fe_params->frequency < 444000000) {
-+                      band = 2;
-+              } else if (fe_params->frequency < 861000000) {
-+                      band = 4;
-+              } else {
-+                      return -EINVAL;
-+              }
-+
-+              // work out filter
-+              switch (fe_params->u.ofdm.bandwidth) {
-+              case BANDWIDTH_6_MHZ:
-+                        // 6 MHz isn't supported directly, but set this to
-+                        // the 8 MHz setting in case we can fiddle it later
-+                        filter = 1;
-+                        break;
-+
-+                case BANDWIDTH_7_MHZ:
-+                      filter = 0;
-+                      break;
-+
-+              case BANDWIDTH_8_MHZ:
-+                      filter = 1;
-+                      break;
-+
-+              default:
-+                      return -EINVAL;
-+              }
-+
-+              // calculate tuner parameters
-+              tuner_frequency =
-+                        (((fe_params->frequency / 1000) * 6) + 217280) / 1000;
-+              tuner_buf[0] = tuner_frequency >> 8;
-+              tuner_buf[1] = tuner_frequency & 0xff;
-+              tuner_buf[2] = 0xca;
-+              tuner_buf[3] = (cp << 5) | (filter << 3) | band;
-+
-+              // tune it
-+              tda1004x_enable_tuner_i2c(i2c, tda_state);
-+              tuner_msg.addr = tda_state->tuner_address;
-+              tuner_msg.len = 4;
-+                if (i2c->xfer(i2c, &tuner_msg, 1) != 1) {
-+                      return -EIO;
-+              }
-+              dvb_delay(1);
-+              tda1004x_disable_tuner_i2c(i2c, tda_state);
-+              break;
-+
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      dprintk("%s: success\n", __FUNCTION__);
-+
-+      // done
-+      return 0;
-+}
-+
-+static int tda1004x_set_fe(struct dvb_i2c_bus *i2c,
-+                         struct tda1004x_state *tda_state,
-+                         struct dvb_frontend_parameters *fe_params)
-+{
-+      int tmp;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+
-+      // set frequency
-+      tmp = tda1004x_set_frequency(i2c, tda_state, fe_params);
-+      if (tmp < 0)
-+              return tmp;
-+
-+        // hardcoded to use auto as much as possible
-+        fe_params->u.ofdm.code_rate_HP = FEC_AUTO;
-+        fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_AUTO;
-+        fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO;
-+
-+      // Set standard params.. or put them to auto
-+      if ((fe_params->u.ofdm.code_rate_HP == FEC_AUTO) ||
-+          (fe_params->u.ofdm.code_rate_LP == FEC_AUTO) ||
-+          (fe_params->u.ofdm.constellation == QAM_AUTO) ||
-+          (fe_params->u.ofdm.hierarchy_information == HIERARCHY_AUTO)) {
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 1, 1);       // enable auto
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x03, 0);        // turn off constellation bits
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 0);        // turn off hierarchy bits
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 0x3f, 0);        // turn off FEC bits
-+      } else {
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 1, 0);       // disable auto
-+
-+              // set HP FEC
-+              tmp = tda1004x_encode_fec(fe_params->u.ofdm.code_rate_HP);
-+              if (tmp < 0) return tmp;
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 7, tmp);
-+
-+              // set LP FEC
-+              if (fe_params->u.ofdm.code_rate_LP != FEC_NONE) {
-+                      tmp = tda1004x_encode_fec(fe_params->u.ofdm.code_rate_LP);
-+                      if (tmp < 0) return tmp;
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF2, 0x38, tmp << 3);
-+              }
-+
-+              // set constellation
-+              switch (fe_params->u.ofdm.constellation) {
-+              case QPSK:
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 3, 0);
-+                      break;
-+
-+              case QAM_16:
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 3, 1);
-+                      break;
-+
-+              case QAM_64:
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 3, 2);
-+                      break;
-+
-+              default:
-+                      return -EINVAL;
-+              }
-+
-+              // set hierarchy
-+              switch (fe_params->u.ofdm.hierarchy_information) {
-+              case HIERARCHY_NONE:
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 0 << 5);
-+                      break;
-+
-+              case HIERARCHY_1:
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 1 << 5);
-+                      break;
-+
-+              case HIERARCHY_2:
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 2 << 5);
-+                      break;
-+
-+              case HIERARCHY_4:
-+                      tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x60, 3 << 5);
-+                      break;
-+
-+              default:
-+                      return -EINVAL;
-+              }
-+      }
-+
-+        // set bandwidth
-+        switch(tda_state->tda1004x_address) {
-+        case TDA10045H_ADDRESS:
-+                tda10045h_set_bandwidth(i2c, tda_state, fe_params->u.ofdm.bandwidth);
-+                break;
-+        }
-+
-+      // set inversion
-+      switch (fe_params->inversion) {
-+      case INVERSION_OFF:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x20, 0);
-+              break;
-+
-+      case INVERSION_ON:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC1, 0x20, 0x20);
-+              break;
-+
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      // set guard interval
-+      switch (fe_params->u.ofdm.guard_interval) {
-+      case GUARD_INTERVAL_1_32:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
-+              break;
-+
-+      case GUARD_INTERVAL_1_16:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 1 << 2);
-+              break;
-+
-+      case GUARD_INTERVAL_1_8:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 2 << 2);
-+              break;
-+
-+      case GUARD_INTERVAL_1_4:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 3 << 2);
-+              break;
-+
-+      case GUARD_INTERVAL_AUTO:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 2, 2);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
-+              break;
-+
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      // set transmission mode
-+      switch (fe_params->u.ofdm.transmission_mode) {
-+      case TRANSMISSION_MODE_2K:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 4, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x10, 0 << 4);
-+              break;
-+
-+      case TRANSMISSION_MODE_8K:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 4, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x10, 1 << 4);
-+              break;
-+
-+      case TRANSMISSION_MODE_AUTO:
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_AUTO, 4, 4);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_IN_CONF1, 0x10, 0);
-+              break;
-+
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      // reset DSP
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 8, 8);
-+      tda1004x_write_mask(i2c, tda_state, TDA1004X_CONFC4, 8, 0);
-+      dvb_delay(10);
-+
-+      // done
-+      return 0;
-+}
-+
-+
-+static int tda1004x_get_fe(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, struct dvb_frontend_parameters *fe_params)
-+{
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // inversion status
-+      fe_params->inversion = INVERSION_OFF;
-+      if (tda1004x_read_byte(i2c, tda_state, TDA1004X_CONFC1) & 0x20) {
-+              fe_params->inversion = INVERSION_ON;
-+      }
-+
-+      // bandwidth
-+      switch (tda1004x_read_byte(i2c, tda_state, TDA1004X_WREF_LSB)) {
-+      case 0x14:
-+              fe_params->u.ofdm.bandwidth = BANDWIDTH_8_MHZ;
-+              break;
-+      case 0xdb:
-+              fe_params->u.ofdm.bandwidth = BANDWIDTH_7_MHZ;
-+              break;
-+      case 0x4f:
-+              fe_params->u.ofdm.bandwidth = BANDWIDTH_6_MHZ;
-+              break;
-+      }
-+
-+      // FEC
-+      fe_params->u.ofdm.code_rate_HP =
-+          tda1004x_decode_fec(tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF2) & 7);
-+      fe_params->u.ofdm.code_rate_LP =
-+          tda1004x_decode_fec((tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF2) >> 3) & 7);
-+
-+      // constellation
-+      switch (tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 3) {
-+      case 0:
-+              fe_params->u.ofdm.constellation = QPSK;
-+              break;
-+      case 1:
-+              fe_params->u.ofdm.constellation = QAM_16;
-+              break;
-+      case 2:
-+              fe_params->u.ofdm.constellation = QAM_64;
-+              break;
-+      }
-+
-+      // transmission mode
-+      fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_2K;
-+      if (tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 0x10) {
-+              fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_8K;
-+      }
-+
-+      // guard interval
-+      switch ((tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 0x0c) >> 2) {
-+      case 0:
-+              fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_32;
-+              break;
-+      case 1:
-+              fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_16;
-+              break;
-+      case 2:
-+              fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_8;
-+              break;
-+      case 3:
-+              fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_1_4;
-+              break;
-+      }
-+
-+      // hierarchy
-+      switch ((tda1004x_read_byte(i2c, tda_state, TDA1004X_OUT_CONF1) & 0x60) >> 5) {
-+      case 0:
-+              fe_params->u.ofdm.hierarchy_information = HIERARCHY_NONE;
-+              break;
-+      case 1:
-+              fe_params->u.ofdm.hierarchy_information = HIERARCHY_1;
-+              break;
-+      case 2:
-+              fe_params->u.ofdm.hierarchy_information = HIERARCHY_2;
-+              break;
-+      case 3:
-+              fe_params->u.ofdm.hierarchy_information = HIERARCHY_4;
-+              break;
-+      }
-+
-+      // done
-+      return 0;
-+}
-+
-+
-+static int tda1004x_read_status(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, fe_status_t * fe_status)
-+{
-+      int status;
-+        int cber;
-+        int vber;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // read status
-+      status = tda1004x_read_byte(i2c, tda_state, TDA1004X_STATUS_CD);
-+      if (status == -1) {
-+              return -EIO;
-+      }
-+
-+        // decode
-+      *fe_status = 0;
-+        if (status & 4) *fe_status |= FE_HAS_SIGNAL;
-+        if (status & 2) *fe_status |= FE_HAS_CARRIER;
-+        if (status & 8) *fe_status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
-+
-+        // if we don't already have VITERBI (i.e. not LOCKED), see if the viterbi
-+        // is getting anything valid
-+        if (!(*fe_status & FE_HAS_VITERBI)) {
-+                // read the CBER
-+                cber = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_LSB);
-+                if (cber == -1) return -EIO;
-+                status = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_MSB);
-+                if (status == -1) return -EIO;
-+                cber |= (status << 8);
-+                tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_RESET);
-+
-+                if (cber != 65535) {
-+                        *fe_status |= FE_HAS_VITERBI;
-+                }
-+        }
-+
-+        // if we DO have some valid VITERBI output, but don't already have SYNC
-+        // bytes (i.e. not LOCKED), see if the RS decoder is getting anything valid.
-+        if ((*fe_status & FE_HAS_VITERBI) && (!(*fe_status & FE_HAS_SYNC))) {
-+                // read the VBER
-+                vber = tda1004x_read_byte(i2c, tda_state, TDA1004X_VBER_LSB);
-+                if (vber == -1) return -EIO;
-+                status = tda1004x_read_byte(i2c, tda_state, TDA1004X_VBER_MID);
-+                if (status == -1) return -EIO;
-+                vber |= (status << 8);
-+                status = tda1004x_read_byte(i2c, tda_state, TDA1004X_VBER_MSB);
-+                if (status == -1) return -EIO;
-+                vber |= ((status << 16) & 0x0f);
-+                tda1004x_read_byte(i2c, tda_state, TDA1004X_CVBER_LUT);
-+
-+                // if RS has passed some valid TS packets, then we must be
-+                // getting some SYNC bytes
-+                if (vber < 16632) {
-+                        *fe_status |= FE_HAS_SYNC;
-+                }
-+        }
-+
-+      // success
-+      dprintk("%s: fe_status=0x%x\n", __FUNCTION__, *fe_status);
-+      return 0;
-+}
-+
-+static int tda1004x_read_signal_strength(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u16 * signal)
-+{
-+      int tmp;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // read it
-+      tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_SIGNAL_STRENGTH);
-+      if (tmp < 0)
-+              return -EIO;
-+
-+      // done
-+      *signal = (tmp << 8) | tmp;
-+      dprintk("%s: signal=0x%x\n", __FUNCTION__, *signal);
-+      return 0;
-+}
-+
-+
-+static int tda1004x_read_snr(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u16 * snr)
-+{
-+      int tmp;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // read it
-+      tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_SNR);
-+      if (tmp < 0)
-+              return -EIO;
-+        if (tmp) {
-+                tmp = 255 - tmp;
-+        }
-+
-+        // done
-+      *snr = ((tmp << 8) | tmp);
-+      dprintk("%s: snr=0x%x\n", __FUNCTION__, *snr);
-+      return 0;
-+}
-+
-+static int tda1004x_read_ucblocks(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u32* ucblocks)
-+{
-+      int tmp;
-+      int tmp2;
-+      int counter;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // read the UCBLOCKS and reset
-+      counter = 0;
-+      tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_UNCOR);
-+      if (tmp < 0)
-+              return -EIO;
-+        tmp &= 0x7f;
-+      while (counter++ < 5) {
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_UNCOR, 0x80, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_UNCOR, 0x80, 0);
-+              tda1004x_write_mask(i2c, tda_state, TDA1004X_UNCOR, 0x80, 0);
-+
-+              tmp2 = tda1004x_read_byte(i2c, tda_state, TDA1004X_UNCOR);
-+              if (tmp2 < 0)
-+                      return -EIO;
-+              tmp2 &= 0x7f;
-+              if ((tmp2 < tmp) || (tmp2 == 0))
-+                      break;
-+      }
-+
-+      // done
-+      if (tmp != 0x7f) {
-+              *ucblocks = tmp;
-+      } else {
-+              *ucblocks = 0xffffffff;
-+      }
-+      dprintk("%s: ucblocks=0x%x\n", __FUNCTION__, *ucblocks);
-+      return 0;
-+}
-+
-+static int tda1004x_read_ber(struct dvb_i2c_bus *i2c, struct tda1004x_state* tda_state, u32* ber)
-+{
-+        int tmp;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // read it in
-+        tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_LSB);
-+        if (tmp < 0) return -EIO;
-+        *ber = tmp << 1;
-+        tmp = tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_MSB);
-+        if (tmp < 0) return -EIO;
-+        *ber |= (tmp << 9);
-+        tda1004x_read_byte(i2c, tda_state, TDA1004X_CBER_RESET);
-+
-+      // done
-+      dprintk("%s: ber=0x%x\n", __FUNCTION__, *ber);
-+      return 0;
-+}
-+
-+
-+static int tda1004x_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+      int status = 0;
-+      struct dvb_i2c_bus *i2c = fe->i2c;
-+      struct tda1004x_state *tda_state = (struct tda1004x_state *) &(fe->data);
-+
-+      dprintk("%s: cmd=0x%x\n", __FUNCTION__, cmd);
-+
-+      switch (cmd) {
-+      case FE_GET_INFO:
-+                switch(tda_state->tda1004x_address) {
-+                case TDA10045H_ADDRESS:
-+                      memcpy(arg, &tda10045h_info, sizeof(struct dvb_frontend_info));
-+                        break;
-+                }
-+              break;
-+
-+      case FE_READ_STATUS:
-+              return tda1004x_read_status(i2c, tda_state, (fe_status_t *) arg);
-+
-+      case FE_READ_BER:
-+              return tda1004x_read_ber(i2c, tda_state, (u32 *) arg);
-+
-+      case FE_READ_SIGNAL_STRENGTH:
-+              return tda1004x_read_signal_strength(i2c, tda_state, (u16 *) arg);
-+
-+      case FE_READ_SNR:
-+              return tda1004x_read_snr(i2c, tda_state, (u16 *) arg);
-+
-+      case FE_READ_UNCORRECTED_BLOCKS:
-+              return tda1004x_read_ucblocks(i2c, tda_state, (u32 *) arg);
-+
-+      case FE_SET_FRONTEND:
-+              return tda1004x_set_fe(i2c, tda_state, (struct dvb_frontend_parameters*) arg);
-+
-+      case FE_GET_FRONTEND:
-+              return tda1004x_get_fe(i2c, tda_state, (struct dvb_frontend_parameters*) arg);
-+
-+      case FE_INIT:
-+              // don't bother reinitialising
-+              if (tda_state->initialised)
-+                      return 0;
-+
-+              // OK, perform initialisation
-+                status = tda1004x_init(i2c, tda_state);
-+              if (status == 0)
-+                      tda_state->initialised = 1;
-+              return status;
-+
-+      default:
-+              return -EOPNOTSUPP;
-+      }
-+
-+      return 0;
-+}
-+
-+
-+static int tda1004x_attach(struct dvb_i2c_bus *i2c)
-+{
-+        int tda1004x_address = -1;
-+      int tuner_address = -1;
-+      struct tda1004x_state tda_state;
-+      struct i2c_msg tuner_msg = {.addr=0, .flags=0, .buf=0, .len=0 };
-+        static u8 td1344_init[] = { 0x0b, 0xf5, 0x88, 0xab };
-+        static u8 tdm1316l_init[] = { 0x0b, 0xf5, 0x85, 0xab };
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      // probe for frontend
-+        tda_state.tda1004x_address = TDA10045H_ADDRESS;
-+      if (tda1004x_read_byte(i2c, &tda_state, TDA1004X_CHIPID) == 0x25) {
-+                tda1004x_address = TDA10045H_ADDRESS;
-+                printk("tda1004x: Detected Philips TDA10045H.\n");
-+        }
-+
-+        // did we find a frontend?
-+        if (tda1004x_address == -1) {
-+              return -ENODEV;
-+        }
-+
-+      // supported tuner?
-+      tda1004x_enable_tuner_i2c(i2c, &tda_state);
-+      tuner_msg.addr = TD1344_ADDRESS;
-+      tuner_msg.buf = td1344_init;
-+      tuner_msg.len = sizeof(td1344_init);
-+      if (i2c->xfer(i2c, &tuner_msg, 1) == 1) {
-+                dvb_delay(1);
-+              tuner_address = TD1344_ADDRESS;
-+              printk("tda1004x: Detected Philips TD1344 tuner. PLEASE CHECK THIS AND REPORT BACK!.\n");
-+      } else {
-+              tuner_msg.addr = TDM1316L_ADDRESS;
-+                tuner_msg.buf = tdm1316l_init;
-+                tuner_msg.len = sizeof(tdm1316l_init);
-+                if (i2c->xfer(i2c, &tuner_msg, 1) == 1) {
-+                        dvb_delay(1);
-+                      tuner_address = TDM1316L_ADDRESS;
-+                      printk("tda1004x: Detected Philips TDM1316L tuner.\n");
-+              }
-+      }
-+      tda1004x_disable_tuner_i2c(i2c, &tda_state);
-+
-+      // did we find a tuner?
-+      if (tuner_address == -1) {
-+              printk("tda1004x: Detected, but with unknown tuner.\n");
-+              return -ENODEV;
-+      }
-+
-+        // create state
-+        tda_state.tda1004x_address = tda1004x_address;
-+      tda_state.tuner_address = tuner_address;
-+      tda_state.initialised = 0;
-+
-+      // register
-+        switch(tda_state.tda1004x_address) {
-+        case TDA10045H_ADDRESS:
-+              dvb_register_frontend(tda1004x_ioctl, i2c, (void *)(*((u32*) &tda_state)), &tda10045h_info);
-+                break;
-+        }
-+
-+      // success
-+      return 0;
-+}
-+
-+
-+static
-+void tda1004x_detach(struct dvb_i2c_bus *i2c)
-+{
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      dvb_unregister_frontend(tda1004x_ioctl, i2c);
-+}
-+
-+
-+static
-+int __init init_tda1004x(void)
-+{
-+      return dvb_register_i2c_device(THIS_MODULE, tda1004x_attach, tda1004x_detach);
-+}
-+
-+
-+static
-+void __exit exit_tda1004x(void)
-+{
-+      dvb_unregister_i2c_device(tda1004x_attach);
-+}
-+
-+module_init(init_tda1004x);
-+module_exit(exit_tda1004x);
-+
-+MODULE_DESCRIPTION("Philips TDA10045H DVB-T Frontend");
-+MODULE_AUTHOR("Andrew de Quincey & Robert Schlabbach");
-+MODULE_LICENSE("GPL");
-+
-+MODULE_PARM(tda1004x_debug, "i");
-+MODULE_PARM_DESC(tda1004x_debug, "enable verbose debug messages");
-+
-+MODULE_PARM(tda1004x_firmware, "s");
-+MODULE_PARM_DESC(tda1004x_firmware, "Where to find the firmware file");
---- linux-2.6.0-test1/drivers/media/dvb/frontends/ves1820.c    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/frontends/ves1820.c   2003-07-19 17:03:49.000000000 -0700
-@@ -95,7 +95,7 @@ static struct dvb_frontend_info ves1820_
- static u8 ves1820_inittab [] =
- {
--      0x69, 0x6A, 0x9B, 0x0A, 0x52, 0x46, 0x26, 0x1A,
-+      0x69, 0x6A, 0x9B, 0x12, 0x12, 0x46, 0x26, 0x1A,
-       0x43, 0x6A, 0xAA, 0xAA, 0x1E, 0x85, 0x43, 0x28,
-       0xE0, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-@@ -109,7 +109,7 @@ static int ves1820_writereg (struct dvb_
- {
-       u8 addr = GET_DEMOD_ADDR(fe->data);
-         u8 buf[] = { 0x00, reg, data };
--      struct i2c_msg msg = { addr: addr, .flags = 0, .buf = buf, .len = 3 };
-+      struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = buf, .len = 3 };
-       struct dvb_i2c_bus *i2c = fe->i2c;
-         int ret;
-@@ -130,8 +130,8 @@ static u8 ves1820_readreg (struct dvb_fr
-       u8 b0 [] = { 0x00, reg };
-       u8 b1 [] = { 0 };
-       u8 addr = GET_DEMOD_ADDR(fe->data);
--      struct i2c_msg msg [] = { { addr: addr, .flags = 0, .buf = b0, .len = 2 },
--                         { addr: addr, .flags = I2C_M_RD, .buf = b1, .len = 1 } };
-+      struct i2c_msg msg [] = { { .addr = addr, .flags = 0, .buf = b0, .len = 2 },
-+                         { .addr = addr, .flags = I2C_M_RD, .buf = b1, .len = 1 } };
-       struct dvb_i2c_bus *i2c = fe->i2c;
-       int ret;
-@@ -147,7 +147,7 @@ static u8 ves1820_readreg (struct dvb_fr
- static int tuner_write (struct dvb_i2c_bus *i2c, u8 addr, u8 data [4])
- {
-         int ret;
--        struct i2c_msg msg = { addr: addr, .flags = 0, .buf = data, .len = 4 };
-+        struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = data, .len = 4 };
-         ret = i2c->xfer (i2c, &msg, 1);
---- linux-2.6.0-test1/drivers/media/dvb/Kconfig        2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/media/dvb/Kconfig       2003-07-19 17:03:49.000000000 -0700
-@@ -33,9 +33,19 @@ source "drivers/media/dvb/dvb-core/Kconf
- source "drivers/media/dvb/frontends/Kconfig"
- comment "Supported SAA7146 based PCI Adapters"
--      depends on DVB
-+      depends on DVB && PCI
- source "drivers/media/dvb/ttpci/Kconfig"
-+comment "Supported USB Adapters"
-+      depends on DVB && USB
-+
-+source "drivers/media/dvb/ttusb-budget/Kconfig"
-+source "drivers/media/dvb/ttusb-dec/Kconfig"
-+
-+comment "Supported FlexCopII (B2C2) Adapters"
-+      depends on DVB && PCI
-+source "drivers/media/dvb/b2c2/Kconfig"
-+
- endmenu
---- linux-2.6.0-test1/drivers/media/dvb/Makefile       2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/media/dvb/Makefile      2003-07-19 17:03:49.000000000 -0700
-@@ -2,4 +2,5 @@
- # Makefile for the kernel multimedia device drivers.
- #
--obj-y        := dvb-core/ frontends/ ttpci/ # ttusb-budget/
-+obj-y        := dvb-core/ frontends/ ttpci/ ttusb-dec/ ttusb-budget/ b2c2/
-+
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/av7110.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/av7110.c        2003-07-19 17:03:49.000000000 -0700
-@@ -86,6 +86,7 @@
-       #define DEB_EE(x)
- #endif
-+#include "ttpci-eeprom.h"
- #include "av7110.h"
- #include "av7110_ipack.h"
-@@ -110,7 +111,8 @@ static int hw_sections = 1;
- int av7110_num = 0;
--#define FW_CI_LL_SUPPORT(arm_app) (((arm_app) >> 16) & 0x8000)
-+#define FW_CI_LL_SUPPORT(arm_app) ((arm_app) & 0x80000000)
-+#define FW_VERSION(arm_app)       ((arm_app) & 0x0000FFFF)
- /****************************************************************************
-  * DEBI functions
-@@ -1089,7 +1091,7 @@ static int OutCommand(struct av7110 *av7
-         u32 stat;
- #endif
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-       if (!av7110->arm_ready) {
-               DEB_D(("arm not ready.\n"));
-@@ -1166,7 +1168,7 @@ static inline int SOutCommand(struct av7
- {
-         int ret;
-         
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-         if (!av7110->arm_ready) {
-               DEB_D(("arm not ready.\n"));
-@@ -1190,7 +1192,7 @@ static int outcom(struct av7110 *av7110,
-         u16 buf[num+2];
-         int i, ret;
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-         buf[0]=(( type << 8 ) | com);
-         buf[1]=num;
-@@ -1332,7 +1334,7 @@ static inline int msp_writereg(struct av
- static inline int SendDAC(struct av7110 *av7110, u8 addr, u8 data)
- {
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-         return outcom(av7110, COMTYPE_AUDIODAC, AudioDAC, 2, addr, data);
- }
-@@ -1659,6 +1661,24 @@ static void OSDSetColor(struct av7110 *a
-                   color, ((blend>>4)&0x0f));
- }
-+static int OSDSetPalette(struct av7110 *av7110, u32 *colors, u8 first, u8 last)
-+{
-+       int i;
-+       int length = last - first + 1;
-+
-+       if (length * 4 > DATA_BUFF3_SIZE)
-+               return -1;
-+
-+       for (i=0; i<length; i++) {
-+               u32 blend = (colors[i] & 0xF0000000) >> 4;
-+               u32 yuv = blend ? RGB2YUV(colors[i] & 0xFF, (colors[i] >> 8) & 0xFF, (colors[i] >> 16) & 0xFF) | blend : 0;
-+               yuv = ((yuv & 0xFFFF0000) >> 16) | ((yuv & 0x0000FFFF) << 16); // TODO kls2003-06-15: not sure if this is endian-proof
-+               wdebi(av7110, DEBINOSWAP, DATA_BUFF3_BASE + i*4, yuv, 4);
-+       }
-+       return outcom(av7110, COMTYPE_OSD, Set_Palette, 4,
-+               av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], first, last);
-+}
-+
- static int OSDSetBlock(struct av7110 *av7110, int x0, int y0, int x1, int y1, int inc, u8 *data)
- {
-         uint w, h, bpp, bpl, size, lpb, bnum, brest;
-@@ -1721,6 +1741,9 @@ static int OSD_DrawCommand(struct av7110
-                 return 0;
-         case OSD_SetPalette:
-         {      
-+                if (FW_VERSION(av7110->arm_app) >= 0x2618)
-+                        OSDSetPalette(av7110, (u32 *)dc->data, dc->color, dc->x0);
-+                else {
-                 int i, len=dc->x0-dc->color+1;
-                 u8 *colors=(u8 *)dc->data;
-@@ -1728,6 +1751,7 @@ static int OSD_DrawCommand(struct av7110
-                         OSDSetColor(av7110, dc->color+i,
-                                     colors[i*4]  , colors[i*4+1],
-                                     colors[i*4+2], colors[i*4+3]);
-+                }
-                 return 0;
-         }
-         case OSD_SetTrans: 
-@@ -2087,28 +2111,28 @@ static void SetMode(struct av7110 *av711
- static inline void TestMode(struct av7110 *av7110, int mode)
- {
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-         outcom(av7110, COMTYPE_ENCODER, SetTestMode, 1, mode);
- }
- static inline void VidMode(struct av7110 *av7110, int mode)
- {
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-         outcom(av7110, COMTYPE_ENCODER, SetVidMode, 1, mode);
- }
-            
--static inline int vidcom(struct av7110 *av7110, u32 com, u32 arg)
-+static int inline vidcom(struct av7110 *av7110, u32 com, u32 arg)
- {
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-         return outcom(av7110, 0x80, 0x02, 4, 
-                       (com>>16), (com&0xffff), 
-                       (arg>>16), (arg&0xffff));
- }
--static inline int audcom(struct av7110 *av7110, u32 com)
-+static int inline audcom(struct av7110 *av7110, u32 com)
- {
--      DEB_EE(("av7110: %p\n",av7110));
-+//    DEB_EE(("av7110: %p\n",av7110));
-       return outcom(av7110, 0x80, 0x03, 4, 
-                       (com>>16), (com&0xffff));
- }
-@@ -2583,38 +2607,274 @@ void p_to_t(u8 const *buf, long int leng
-  * V4L SECTION
-  ****************************************************************************/
--int av7110_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) 
-+static struct v4l2_input inputs[2] = {
-+      { 0,    "DVB",          V4L2_INPUT_TYPE_CAMERA, 1, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, 
-+      { 1,    "ANALOG",       V4L2_INPUT_TYPE_TUNER,  2, 1, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+};
-+
-+/* taken from ves1820.c */
-+static int ves1820_writereg(struct saa7146_dev *dev, u8 reg, u8 data)
-+{
-+      u8 addr = 0x09;
-+        u8 buf[] = { 0x00, reg, data };
-+      struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = buf, .len = 3 };
-+
-+      DEB_EE(("av7710: dev: %p\n",dev));
-+
-+      if( 1 != saa7146_i2c_transfer(dev, &msg, 1, 1)) {
-+              return -1;
-+      }
-+      return 0;
-+}
-+
-+static int tuner_write(struct saa7146_dev *dev, u8 addr, u8 data [4])
-+{
-+        struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = data, .len = 4 };
-+
-+      DEB_EE(("av7710: dev: %p\n",dev));
-+
-+      if( 1 != saa7146_i2c_transfer(dev, &msg, 1, 1)) {
-+              return -1;
-+      }
-+      return 0;
-+}
-+
-+
-+/**
-+ *   set up the downconverter frequency divisor for a
-+ *   reference clock comparision frequency of 62.5 kHz.
-+ */
-+static int tuner_set_tv_freq (struct saa7146_dev *dev, u32 freq)
-+{
-+        u32 div;
-+      u8 config;
-+        u8 buf [4];
-+
-+      DEB_EE(("av7710: freq: 0x%08x\n",freq));
-+
-+      /* magic number: 56. tuning with the frequency given by v4l2
-+         is always off by 56*62.5 kHz...*/
-+      div = freq + 56;
-+
-+      buf[0] = (div >> 8) & 0x7f;
-+      buf[1] = div & 0xff;
-+      buf[2] = 0x8e;
-+
-+      if (freq < 16*168.25 ) 
-+              config = 0xa0;
-+      else if (freq < 16*447.25) 
-+              config = 0x90;
-+      else
-+              config = 0x30;
-+      config &= ~0x02;
-+
-+      buf[3] = config;
-+
-+        return tuner_write (dev, 0x61, buf);
-+}
-+
-+static struct saa7146_standard analog_standard[];
-+static struct saa7146_standard dvb_standard[];
-+static struct saa7146_standard standard[];
-+
-+int av7110_dvb_c_switch(struct saa7146_fh *fh)
-+{
-+      struct saa7146_dev *dev = fh->dev;
-+      struct saa7146_vv *vv = dev->vv_data;
-+      struct av7110 *av7110 = (struct av7110*)dev->ext_priv;
-+      u16 buf[3] = { ((COMTYPE_AUDIODAC << 8) + ADSwitch), 1, 1 };
-+
-+      u8 band = 0;
-+      int source, sync;
-+      struct saa7146_fh *ov_fh = NULL;
-+      int restart_overlay = 0;
-+
-+      DEB_EE(("av7110: %p\n",av7110));
-+
-+      if( vv->ov_data != NULL ) {
-+              ov_fh = vv->ov_data->fh;
-+              saa7146_stop_preview(ov_fh);
-+              restart_overlay = 1;
-+      }
-+
-+      if( 0 != av7110->current_input ) {
-+              buf[2] = 0;
-+              band = 0x68; /* analog band */
-+              source = SAA7146_HPS_SOURCE_PORT_B;
-+              sync = SAA7146_HPS_SYNC_PORT_B;
-+              memcpy(standard,analog_standard,sizeof(struct saa7146_standard)*2);
-+      } else {
-+              buf[2] = 1;
-+              band = 0x28; /* digital band */ 
-+              source = SAA7146_HPS_SOURCE_PORT_A;
-+              sync = SAA7146_HPS_SYNC_PORT_A;
-+              memcpy(standard,dvb_standard,sizeof(struct saa7146_standard)*2);
-+      }
-+
-+      /* hmm, this does not do anything!? */
-+      if (OutCommand(av7110, buf, 3)) {
-+              printk("ADSwitch error\n");
-+      }
-+
-+      if( 0 != ves1820_writereg(dev, 0x0f, band )) {
-+              printk("setting band in demodulator failed.\n");
-+      }
-+      saa7146_set_hps_source_and_sync(dev, source, sync);
-+
-+      /* restart overlay if it was active before */
-+      if( 0 != restart_overlay ) {
-+              saa7146_start_preview(ov_fh);
-+      }
-+
-+      return 0;
-+}
-+
-+int av7110_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) 
- {
-+      struct saa7146_dev *dev = fh->dev;
-+      struct av7110 *av7110 = (struct av7110*)dev->ext_priv;
-       DEB_EE(("saa7146_dev: %p\n",dev));
-       switch(cmd) {
-+      case VIDIOC_G_TUNER:
-+      {
-+              struct v4l2_tuner *t = arg;
-+
-+              DEB_EE(("VIDIOC_G_TUNER: %d\n", t->index));
-+
-+              if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+                      return -EINVAL;
-+              }
-+
-+              memset(t,0,sizeof(*t));
-+              strcpy(t->name, "Television");
-+
-+              t->type = V4L2_TUNER_ANALOG_TV;
-+              t->capability = V4L2_TUNER_CAP_NORM | V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 | V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP;
-+              t->rangelow = 772;      /* 48.25 MHZ / 62.5 kHz = 772, see fi1216mk2-specs, page 2 */
-+              t->rangehigh = 13684;   /* 855.25 MHz / 62.5 kHz = 13684 */
-+              /* FIXME: add the real signal strength here */
-+              t->signal = 0xffff;
-+              t->afc = 0;             
-+              /* fixme: real autodetection here */
-+              t->rxsubchans   = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_MONO;
-+
-+              return 0;
-+      }
-+      case VIDIOC_S_TUNER:
-+      {
-+              struct v4l2_tuner *t = arg;
-+              
-+              DEB_EE(("VIDIOC_S_TUNER: %d\n", t->index));
-+
-+              if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+                      return -EINVAL;
-+              }
-+
-+
-+              switch(t->audmode) {
-+                      case V4L2_TUNER_MODE_STEREO: {
-+                              DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_STEREO\n"));
-+                              break;
-+                      }
-+                      case V4L2_TUNER_MODE_LANG1: {
-+                              DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_LANG1\n"));
-+                              break;
-+                      }
-+                      case V4L2_TUNER_MODE_LANG2: {
-+                              DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_LANG2\n"));
-+                              break;
-+                      }
-+                      default: { /* case V4L2_TUNER_MODE_MONO: {*/
-+                              DEB_D(("VIDIOC_S_TUNER: TDA9840_SET_MONO\n"));
-+                              break;
-+                      }
-+              }
-+
-+              return 0;
-+      }
-+      case VIDIOC_G_FREQUENCY:
-+      {
-+              struct v4l2_frequency *f = arg;
-+
-+              DEB_EE(("VIDIOC_G_FREQ: freq:0x%08x.\n", f->frequency));
-+
-+              if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+                      return -EINVAL;
-+              }
-+
-+              memset(f,0,sizeof(*f));
-+              f->type = V4L2_TUNER_ANALOG_TV;
-+              f->frequency =  av7110->current_freq;
-+
-+              return 0;
-+      }
-+      case VIDIOC_S_FREQUENCY:
-+      {
-+              struct v4l2_frequency *f = arg;
-+
-+              DEB_EE(("VIDIOC_S_FREQUENCY: freq:0x%08x.\n",f->frequency));
-+
-+              if( 0 == av7110->has_analog_tuner || av7110->current_input != 1 ) {
-+                      return -EINVAL;
-+              }
-+
-+              if (V4L2_TUNER_ANALOG_TV != f->type)
-+                      return -EINVAL;
-+
-+              /* tune in desired frequency */                 
-+              tuner_set_tv_freq(dev, f->frequency);
-+              av7110->current_freq = f->frequency;
-+
-+              return 0;
-+      }
-       case VIDIOC_ENUMINPUT:
-       {
-               struct v4l2_input *i = arg;
-               
-+              DEB_EE(("VIDIOC_ENUMINPUT: %d\n", i->index));
-+
-+              if( 0 != av7110->has_analog_tuner ) {
-+                      if( i->index < 0 || i->index >= 2) {
-+                              return -EINVAL;
-+                      }
-+              } else {
-               if( i->index != 0 ) {
-                       return -EINVAL;
-               }
-+              }               
--              memset(i,0,sizeof(*i));
--              i->index = 0;
--              strcpy(i->name, "DVB");
--              i->type = V4L2_INPUT_TYPE_CAMERA;
--              i->audioset = 1;
-+              memcpy(i, &inputs[i->index], sizeof(struct v4l2_input));
-               
-               return 0;
-       }
-       case VIDIOC_G_INPUT:
-       {
-               int *input = (int *)arg;
--              *input = 0;
-+              *input = av7110->current_input;
-+              DEB_EE(("VIDIOC_G_INPUT: %d\n", *input));
-               return 0;               
-       }       
-       case VIDIOC_S_INPUT:
-       {
-+              int input = *(int *)arg;
-+
-+              DEB_EE(("VIDIOC_S_INPUT: %d\n", input));
-+
-+              if( 0 == av7110->has_analog_tuner ) {
-               return 0;               
-       }       
-+              
-+              if( input < 0 || input >= 2) {
-+                      return -EINVAL;
-+              }
-+              
-+              /* fixme: switch inputs here */
-+              av7110->current_input = input;
-+              return av7110_dvb_c_switch(fh);
-+      }       
-       default:
-+              printk("no such ioctl\n");
-               return -ENOIOCTLCMD;
-       }
-       return 0;
-@@ -2997,7 +3257,7 @@ static int dvb_get_stc(struct dmx_demux 
-       DEB_EE(("av7110: fwstc = %04hx %04hx %04hx %04hx\n",
-                       fwstc[0], fwstc[1], fwstc[2], fwstc[3]));
--      *stc =  (((uint64_t)fwstc[2] & 1) << 32) |
-+      *stc =  (((uint64_t)(~fwstc[2]) & 1) << 32) |
-               (((uint64_t)fwstc[1])     << 16) | ((uint64_t)fwstc[0]);
-       *base = 1;
-@@ -4006,7 +4266,6 @@ static int av7110_register(struct av7110
- #endif
- //        }
-         
--        av7110->dvb_net.card_num=av7110->dvb_adapter->num;
-         dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx);
-       return 0;
-@@ -4061,9 +4320,16 @@ struct saa7146_extension_ioctls ioctls[]
-       { VIDIOC_ENUMINPUT,     SAA7146_EXCLUSIVE },
-       { VIDIOC_G_INPUT,       SAA7146_EXCLUSIVE },
-       { VIDIOC_S_INPUT,       SAA7146_EXCLUSIVE },
-+      { VIDIOC_G_FREQUENCY,   SAA7146_EXCLUSIVE },
-+      { VIDIOC_S_FREQUENCY,   SAA7146_EXCLUSIVE },
-+      { VIDIOC_G_TUNER,       SAA7146_EXCLUSIVE },
-+      { VIDIOC_S_TUNER,       SAA7146_EXCLUSIVE },
-       { 0, 0 }
- };
-+static struct saa7146_ext_vv av7110_vv_data_st;
-+static struct saa7146_ext_vv av7110_vv_data_c;
-+
- static int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_data *pci_ext)
- {
-       struct av7110 *av7110 = NULL;
-@@ -4081,7 +4347,16 @@ static int av7110_attach (struct saa7146
-       DEB_EE(("dev: %p, av7110: %p\n",dev,av7110));
--      if (saa7146_vv_init(dev)) {
-+      /* special case DVB-C: these cards have an analog tuner
-+         plus need some special handling, so we have separate
-+         saa7146_ext_vv data for these... */
-+      if (dev->pci->subsystem_vendor == 0x110a) {
-+              ret = saa7146_vv_init(dev, &av7110_vv_data_c);
-+      } else {
-+              ret = saa7146_vv_init(dev, &av7110_vv_data_st);
-+      }
-+      
-+      if ( 0 != ret) {
-               ERR(("cannot init capture device. skipping.\n"));
-               kfree(av7110);
-               return -1;
-@@ -4114,6 +4389,8 @@ static int av7110_attach (struct saa7146
-               return -ENOMEM;
-       }
-+      ttpci_eeprom_parse_mac(av7110->i2c_bus);
-+
-       saa7146_write(dev, PCI_BT_V1, 0x1c00101f);
-       saa7146_write(dev, BCS_CTRL, 0x80400040);
-@@ -4186,9 +4463,9 @@ static int av7110_attach (struct saa7146
-       bootarm(av7110);
-       firmversion(av7110);
--      if ((av7110->arm_app&0xffff)<0x2501)
-+      if (FW_VERSION(av7110->arm_app)<0x2501)
-               printk ("av7110: Warning, firmware version 0x%04x is too old. "
--                      "System might be unstable!\n", av7110->arm_app&0xffff);
-+                      "System might be unstable!\n", FW_VERSION(av7110->arm_app));
-       kernel_thread(arm_thread, (void *) av7110, 0);
-@@ -4199,6 +4476,8 @@ static int av7110_attach (struct saa7146
-       VidMode(av7110, vidmode);
-       /* remaining inits according to card and frontend type */
-+      av7110->has_analog_tuner = 0;
-+      av7110->current_input = 0;
-       if (i2c_writereg(av7110, 0x20, 0x00, 0x00)==1) {
-               printk ("av7110(%d): Crystal audio DAC detected\n",
-                       av7110->dvb_adapter->num);
-@@ -4225,6 +4504,31 @@ static int av7110_attach (struct saa7146
-                       msp_writereg(av7110, 0x12, 0x000a, 0x0220); // SCART 1 source
-                       msp_writereg(av7110, 0x12, 0x0007, 0x7f00); // SCART 1 volume
-                       msp_writereg(av7110, 0x12, 0x000d, 0x4800); // prescale SCART
-+              
-+              if (i2c_writereg(av7110, 0x48, 0x01, 0x00)!=1) {
-+                      INFO(("saa7113 not accessible.\n"));
-+              } else {
-+                      av7110->has_analog_tuner = 1;
-+                      /* init the saa7113 */
-+                      i2c_writereg(av7110, 0x48, 0x02, 0xd0); i2c_writereg(av7110, 0x48, 0x03, 0x23); i2c_writereg(av7110, 0x48, 0x04, 0x00);
-+                      i2c_writereg(av7110, 0x48, 0x05, 0x00); i2c_writereg(av7110, 0x48, 0x06, 0xe9); i2c_writereg(av7110, 0x48, 0x07, 0x0d);
-+                      i2c_writereg(av7110, 0x48, 0x08, 0x98); i2c_writereg(av7110, 0x48, 0x09, 0x02); i2c_writereg(av7110, 0x48, 0x0a, 0x80);
-+                      i2c_writereg(av7110, 0x48, 0x0b, 0x40); i2c_writereg(av7110, 0x48, 0x0c, 0x40); i2c_writereg(av7110, 0x48, 0x0d, 0x00);
-+                      i2c_writereg(av7110, 0x48, 0x0e, 0x01); i2c_writereg(av7110, 0x48, 0x0f, 0x7c); i2c_writereg(av7110, 0x48, 0x10, 0x48);
-+                      i2c_writereg(av7110, 0x48, 0x11, 0x0c); i2c_writereg(av7110, 0x48, 0x12, 0x8b); i2c_writereg(av7110, 0x48, 0x13, 0x10);
-+                      i2c_writereg(av7110, 0x48, 0x14, 0x00); i2c_writereg(av7110, 0x48, 0x15, 0x00); i2c_writereg(av7110, 0x48, 0x16, 0x00);
-+                      i2c_writereg(av7110, 0x48, 0x17, 0x00); i2c_writereg(av7110, 0x48, 0x18, 0x00); i2c_writereg(av7110, 0x48, 0x19, 0x00);
-+                      i2c_writereg(av7110, 0x48, 0x1a, 0x00); i2c_writereg(av7110, 0x48, 0x1b, 0x00); i2c_writereg(av7110, 0x48, 0x1c, 0x00);
-+                      i2c_writereg(av7110, 0x48, 0x1d, 0x00); i2c_writereg(av7110, 0x48, 0x1e, 0x00);
-+              }       
-+
-+              memcpy(standard,dvb_standard,sizeof(struct saa7146_standard)*2);
-+              /* set dd1 stream a & b */
-+                      saa7146_write(dev, DD1_STREAM_B, 0x00000000);
-+              saa7146_write(dev, DD1_INIT, 0x0200700);
-+              saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
-+
-+
-       } else if (dev->pci->subsystem_vendor == 0x110a) {
-               printk("av7110(%d): DVB-C w/o analog module detected\n",
-                       av7110->dvb_adapter->num);
-@@ -4330,6 +4634,16 @@ static struct saa7146_standard standard[
-       { "NTSC", V4L2_STD_NTSC, 0x10, 244, 480, 0x40, 708, 709, 480, 640 },
- };
-+static struct saa7146_standard analog_standard[] = {
-+      { "PAL", V4L2_STD_PAL, 0x18, 288, 576, 0x08, 708, 709, 576, 768 },
-+      { "NTSC", V4L2_STD_NTSC, 0x10, 244, 480, 0x40, 708, 709, 480, 640 },
-+};
-+
-+static struct saa7146_standard dvb_standard[] = {
-+      { "PAL", V4L2_STD_PAL, 0x14, 288, 576, 0x4a, 708, 709, 576, 768 },
-+      { "NTSC", V4L2_STD_NTSC, 0x10, 244, 480, 0x40, 708, 709, 480, 640 },
-+};
-+
- static struct saa7146_extension av7110_extension;
- #define MAKE_AV7110_INFO(x_var,x_name) \
-@@ -4387,7 +4701,7 @@ static int std_callback(struct saa7146_d
- }
--static struct saa7146_ext_vv av7110_vv_data = {
-+static struct saa7146_ext_vv av7110_vv_data_st = {
-       .inputs         = 1,
-       .audios         = 1,
-       .capabilities   = 0,
-@@ -4401,9 +4715,23 @@ static struct saa7146_ext_vv av7110_vv_d
-       .ioctl          = av7110_ioctl,
- };
-+static struct saa7146_ext_vv av7110_vv_data_c = {
-+      .inputs         = 1,
-+      .audios         = 1,
-+      .capabilities   = V4L2_CAP_TUNER,
-+      .flags          = 0,
-+
-+      .stds           = &standard[0],
-+      .num_stds       = sizeof(standard)/sizeof(struct saa7146_standard),
-+      .std_callback   = &std_callback, 
-+
-+      .ioctls         = &ioctls[0],
-+      .ioctl          = av7110_ioctl,
-+};
-+
-+
- static struct saa7146_extension av7110_extension = {
-       .name           = "dvb\0",
--      .ext_vv_data    = &av7110_vv_data,
-       .module         = THIS_MODULE,
-       .pci_tbl        = &pci_tbl[0],
-@@ -4442,7 +4770,11 @@ MODULE_LICENSE("GPL");
- MODULE_PARM(av7110_debug,"i");
- MODULE_PARM(vidmode,"i");
-+MODULE_PARM_DESC(vidmode,"analog video out: 0 off, 1 CVBS+RGB (default), 2 CVBS+YC, 3 YC");
- MODULE_PARM(pids_off,"i");
-+MODULE_PARM_DESC(pids_off,"clear video/audio/PCR PID filters when demux is closed");
- MODULE_PARM(adac,"i");
-+MODULE_PARM_DESC(adac,"audio DAC type: 0 TI, 1 CRYSTAL, 2 MSP (use if autodetection fails)");
- MODULE_PARM(hw_sections, "i");
-+MODULE_PARM_DESC(hw_sections, "0 use software section filter, 1 use hardware");
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/av7110.h 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/av7110.h        2003-07-19 17:03:49.000000000 -0700
-@@ -153,7 +153,8 @@ enum av7110_osd_command {  
-       BlitBmp,
-       ReleaseBmp,
-       SetWTrans,
--      SetWNoTrans
-+        SetWNoTrans,
-+        Set_Palette
- };
- enum av7110_pid_command { 
-@@ -405,6 +406,11 @@ struct av7110 {
-       struct dvb_i2c_bus      *i2c_bus;       
-       char                    *card_name;
-+      /* support for analog module of dvb-c */
-+      int                     has_analog_tuner;
-+      int                     current_input;
-+      u32                     current_freq;
-+                              
-       struct tasklet_struct   debi_tasklet;
-       struct tasklet_struct   gpio_tasklet;
-@@ -572,6 +578,9 @@ struct av7110 {
- #define DATA_BUFF2_BASE       (DATA_BUFF1_BASE+DATA_BUFF1_SIZE)
- #define DATA_BUFF2_SIZE       0x0800
-+#define DATA_BUFF3_BASE (DATA_BUFF2_BASE+DATA_BUFF2_SIZE)
-+#define DATA_BUFF3_SIZE 0x0400
-+
- #define Reserved      (DPRAM_BASE + 0x1E00)
- #define Reserved_SIZE 0x1C0
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-av.c      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-av.c     2003-07-19 17:03:49.000000000 -0700
-@@ -170,6 +170,7 @@ static int budget_av_detach (struct saa7
-       return err;
- }
-+static struct saa7146_ext_vv vv_data;
- static int budget_av_attach (struct saa7146_dev* dev,
-                     struct saa7146_pci_extension_data *info)
-@@ -207,16 +208,22 @@ static int budget_av_attach (struct saa7
-       dvb_delay(500);
-       if ((err = saa7113_init (budget_av))) {
--              budget_av_detach(dev);
-+              /* fixme: proper cleanup here */
-+              ERR(("cannot init saa7113.\n"));
-+              return err;
-+      }
-+
-+      if ( 0 != saa7146_vv_init(dev,&vv_data)) {
-+              /* fixme: proper cleanup here */
-+              ERR(("cannot init vv subsystem.\n"));
-               return err;
-       }
--      saa7146_vv_init(dev);
-       if ((err = saa7146_register_device(&budget_av->vd, dev, "knc1",
-                                          VFL_TYPE_GRABBER)))
-       {
-+              /* fixme: proper cleanup here */
-               ERR(("cannot register capture v4l2 device.\n"));
--              budget_av_detach(dev);
-               return err;
-       }
-@@ -256,8 +263,9 @@ static struct saa7146_extension_ioctls i
- };
--static int av_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) 
-+static int av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) 
- {
-+      struct saa7146_dev *dev = fh->dev;
-       struct budget_av *budget_av = (struct budget_av*) dev->ext_priv;
- /*
-       struct saa7146_vv *vv = dev->vv_data; 
-@@ -299,11 +307,19 @@ static int av_ioctl(struct saa7146_dev *
- }
- static struct saa7146_standard standard[] = {
--      { "PAL",        V4L2_STD_PAL,   SAA7146_PAL_VALUES },
--      { "NTSC",       V4L2_STD_NTSC,  SAA7146_NTSC_VALUES },
-+      {
-+              .name   = "PAL",        .id     = V4L2_STD_PAL,
-+              .v_offset       = 0x17, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 680,  .h_calc         = 680+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }, {
-+              .name   = "NTSC",       .id     = V4L2_STD_NTSC,
-+              .v_offset       = 0x16, .v_field        = 240,  .v_calc         = 480,
-+              .h_offset       = 0x06, .h_pixels       = 708,  .h_calc         = 708+1,
-+              .v_max_out      = 480,  .h_max_out      = 640,
-+      }
- };
--
- static struct saa7146_ext_vv vv_data = {
-       .inputs         = 2,
-       .capabilities   = 0, // perhaps later: V4L2_CAP_VBI_CAPTURE, but that need tweaking with the saa7113
-@@ -338,8 +354,6 @@ static struct saa7146_extension budget_e
-       .attach         = budget_av_attach,
-       .detach         = budget_av_detach,
--      .ext_vv_data    = &vv_data,
--
-       .irq_mask       = MASK_10,
-       .irq_func       = ttpci_budget_irq10_handler,
- };    
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget.c 2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget.c        2003-07-19 17:03:49.000000000 -0700
-@@ -192,6 +192,7 @@ static struct saa7146_extension budget_e
- MAKE_BUDGET_INFO(ttbs,        "TT-Budget/WinTV-NOVA-S  PCI",  BUDGET_TT);
- MAKE_BUDGET_INFO(ttbc,        "TT-Budget/WinTV-NOVA-C  PCI",  BUDGET_TT);
- MAKE_BUDGET_INFO(ttbt,        "TT-Budget/WinTV-NOVA-T  PCI",  BUDGET_TT);
-+MAKE_BUDGET_INFO(ttbt2,       "TT-Budget/WinTV-NOVA-T  PCI",  BUDGET_TT);
- MAKE_BUDGET_INFO(satel,       "SATELCO Multimedia PCI",       BUDGET_TT_HW_DISEQC);
- /* Uncomment for Budget Patch */
- /*MAKE_BUDGET_INFO(fs_1_3,"Siemens/Technotrend/Hauppauge PCI rev1.3+Budget_Patch", BUDGET_PATCH);*/
-@@ -202,6 +203,7 @@ static struct pci_device_id pci_tbl[] = 
-       MAKE_EXTENSION_PCI(ttbs,  0x13c2, 0x1003),
-       MAKE_EXTENSION_PCI(ttbc,  0x13c2, 0x1004),
-       MAKE_EXTENSION_PCI(ttbt,  0x13c2, 0x1005),
-+      MAKE_EXTENSION_PCI(ttbt2,  0x13c2, 0x1011),     
-       MAKE_EXTENSION_PCI(satel, 0x13c2, 0x1013),
-       {
-               .vendor    = 0,
-@@ -213,7 +215,6 @@ MODULE_DEVICE_TABLE(pci, pci_tbl);
- static struct saa7146_extension budget_extension = {
-       .name           = "budget dvb\0",
-       .flags          = 0,
--      .ext_vv_data    = NULL,
-       
-       .module         = THIS_MODULE,
-       .pci_tbl        = pci_tbl,
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-ci.c      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-ci.c     2003-07-19 17:03:49.000000000 -0700
-@@ -371,7 +371,6 @@ MODULE_DEVICE_TABLE(pci, pci_tbl);
- static struct saa7146_extension budget_extension = {
-       .name           = "budget_ci dvb\0",
-       .flags          = 0,
--      .ext_vv_data    = NULL,
-       .module         = THIS_MODULE,
-       .pci_tbl        = &pci_tbl[0],
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-core.c    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-core.c   2003-07-19 17:03:49.000000000 -0700
-@@ -1,4 +1,5 @@
- #include "budget.h"
-+#include "ttpci-eeprom.h"
- int budget_debug = 0;
-@@ -165,7 +166,6 @@ static int budget_register(struct budget
-         if (ret < 0)
-                 return ret;
--        budget->dvb_net.card_num = budget->dvb_adapter->num;
-         dvb_net_init(budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx);
-       return 0;
-@@ -222,7 +222,7 @@ int ttpci_budget_init (struct budget *bu
-            get recognized before the main driver is loaded */
-         saa7146_write(dev, GPIO_CTRL, 0x500000);
-       
--      saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_3200);
-+      saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_120);
-       budget->i2c_bus = dvb_register_i2c_bus (master_xfer, dev,
-                                               budget->dvb_adapter, 0);
-@@ -232,6 +232,8 @@ int ttpci_budget_init (struct budget *bu
-               return -ENOMEM;
-       }
-+      ttpci_eeprom_parse_mac(budget->i2c_bus);
-+
-       if( NULL == (budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci,length,&budget->pt))) {
-               ret = -ENOMEM;
-               goto err;
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/budget-patch.c   2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/budget-patch.c  2003-07-19 17:03:49.000000000 -0700
-@@ -165,6 +165,7 @@ static int budget_patch_attach (struct s
- {
-         struct budget_patch *budget;
-         int err;
-+      int count = 0;
-         if (!(budget = kmalloc (sizeof(struct budget_patch), GFP_KERNEL)))
-                 return -ENOMEM;
-@@ -263,7 +264,6 @@ static void __exit budget_patch_exit(voi
- static struct saa7146_extension budget_extension = {
-         .name           = "budget_patch dvb\0",
-         .flags          = 0,
--        .ext_vv_data    = NULL,
-         
-         .module         = THIS_MODULE,
-         .pci_tbl        = pci_tbl,
---- linux-2.6.0-test1/drivers/media/dvb/ttpci/Makefile 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/Makefile        2003-07-19 17:03:49.000000000 -0700
-@@ -3,16 +3,12 @@
- # and the AV7110 DVB device driver
- #
--dvb-ttpci-budget-objs := budget.o
--dvb-ttpci-budget-av-objs := budget-av.o
--dvb-ttpci-budget-ci-objs := budget-ci.o
--dvb-ttpci-budget-patch-objs := budget-patch.o
- dvb-ttpci-objs := av7110.o av7110_ipack.o av7110_ir.o
--obj-$(CONFIG_DVB_BUDGET) += budget-core.o dvb-ttpci-budget.o
--obj-$(CONFIG_DVB_BUDGET_CI) += budget-core.o dvb-ttpci-budget-ci.o
--obj-$(CONFIG_DVB_BUDGET_AV) += budget-core.o dvb-ttpci-budget-av.o
--obj-$(CONFIG_DVB_BUDGET_PATCH) += budget-core.o dvb-ttpci-budget-patch.o
--obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o
-+obj-$(CONFIG_DVB_BUDGET) += budget-core.o budget.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_BUDGET_AV) += budget-core.o budget-av.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_BUDGET_CI) += budget-core.o budget-ci.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_BUDGET_PATCH) += budget-core.o budget-patch.o ttpci-eeprom.o
-+obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o ttpci-eeprom.o
- EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/ttpci-eeprom.c  2003-07-19 17:03:49.000000000 -0700
-@@ -0,0 +1,120 @@
-+/*
-+    Retrieve encoded MAC address from 24C16 serial 2-wire EEPROM,
-+    decode it and store it in the associated adapter struct for
-+    use by dvb_net.c
-+
-+    This code was tested on TT-Budget/WinTV-NOVA-CI PCI boards with
-+    Atmel and ST Microelectronics EEPROMs.
-+
-+    This card appear to have the 24C16 write protect held to ground,
-+    thus permitting normal read/write operation. Theoretically it
-+    would be possible to write routines to burn a different (encoded)
-+    MAC address into the EEPROM.
-+
-+    Robert Schlabbach GMX
-+    Michael Glaum     KVH Industries
-+    Holger Waechtler  Convergence
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+#include <asm/errno.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/string.h>
-+
-+#include "dvb_i2c.h"
-+#include "dvb_functions.h"
-+
-+#if 1
-+#define dprintk(x...) printk(x)
-+#else
-+#define dprintk(x...)
-+#endif
-+
-+
-+static int ttpci_eeprom_read_encodedMAC(struct dvb_i2c_bus *i2c, u8 * encodedMAC)
-+{
-+      int ret;
-+      u8 b0[] = { 0xd4 };
-+
-+      struct i2c_msg msg[] = {
-+              {.addr = 0x50,.flags = 0,.buf = b0,.len = 1},
-+              {.addr = 0x50,.flags = I2C_M_RD,.buf = encodedMAC,.len = 6}
-+      };
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      ret = i2c->xfer(i2c, msg, 2);
-+
-+      if (ret != 2)           /* Assume EEPROM isn't there */
-+              return (-ENODEV);
-+
-+      return 0;
-+}
-+
-+static void decodeMAC(u8 * decodedMAC, const u8 * encodedMAC)
-+{
-+      u8 ormask0[3] = { 0x54, 0x7B, 0x9E };
-+      u8 ormask1[3] = { 0xD3, 0xF1, 0x23 };
-+      u8 low;
-+      u8 high;
-+      u8 shift;
-+      int i;
-+
-+      decodedMAC[0] = 0x00;
-+      decodedMAC[1] = 0xD0;
-+      decodedMAC[2] = 0x5C;
-+
-+      for (i = 0; i < 3; i++) {
-+              low = encodedMAC[2 * i] ^ ormask0[i];
-+              high = encodedMAC[2 * i + 1] ^ ormask1[i];
-+              shift = (high >> 6) & 0x3;
-+
-+              decodedMAC[5 - i] = ((high << 8) | low) >> shift;
-+      }
-+
-+}
-+
-+
-+int ttpci_eeprom_parse_mac(struct dvb_i2c_bus *i2c)
-+{
-+      int ret;
-+      u8 encodedMAC[6];
-+      u8 decodedMAC[6];
-+
-+      ret = ttpci_eeprom_read_encodedMAC(i2c, encodedMAC);
-+
-+      if (ret != 0) {         /* Will only be -ENODEV */
-+              dprintk("Couldn't read from EEPROM: not there?\n");
-+              memset(i2c->adapter->proposed_mac, 0, 6);
-+              return ret;
-+      }
-+
-+      decodeMAC(decodedMAC, encodedMAC);
-+      memcpy(i2c->adapter->proposed_mac, decodedMAC, 6);
-+
-+      dprintk("%s adapter %i has MAC addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-+              i2c->adapter->name, i2c->adapter->num,
-+              decodedMAC[0], decodedMAC[1], decodedMAC[2],
-+              decodedMAC[3], decodedMAC[4], decodedMAC[5]);
-+      dprintk("encoded MAC was %02x:%02x:%02x:%02x:%02x:%02x\n",
-+              encodedMAC[0], encodedMAC[1], encodedMAC[2],
-+              encodedMAC[3], encodedMAC[4], encodedMAC[5]);
-+      return 0;
-+}
-+
-+EXPORT_SYMBOL(ttpci_eeprom_parse_mac);
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttpci/ttpci-eeprom.h  2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,32 @@
-+/*
-+    Retrieve encoded MAC address from ATMEL ttpci_eeprom serial 2-wire EEPROM,
-+    decode it and store it in associated adapter net device
-+
-+    Robert Schlabbach GMX
-+    Michael Glaum     KVH Industries
-+    Holger Waechtler  Convergence
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+
-+*/
-+
-+#ifndef __TTPCI_EEPROM_H__
-+#define __TTPCI_EEPROM_H__
-+
-+#include "dvb_i2c.h"
-+
-+extern int ttpci_eeprom_parse_mac(struct dvb_i2c_bus *i2c);
-+
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c       2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,1271 @@
-+/*
-+ * TTUSB DVB driver
-+ *
-+ * Copyright (c) 2002 Holger Waechtler <holger@convergence.de>
-+ * Copyright (c) 2003 Felix Domke <tmbinc@gmx.net>
-+ *
-+ *    This program is free software; you can redistribute it and/or
-+ *    modify it under the terms of the GNU General Public License as
-+ *    published by the Free Software Foundation; either version 2 of
-+ *    the License, or (at your option) any later version.
-+ */
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/wait.h>
-+#include <linux/module.h>
-+#include <linux/usb.h>
-+#include <linux/delay.h>
-+#include <linux/time.h>
-+#include <linux/errno.h>
-+#include <asm/semaphore.h>
-+
-+#include "dvb_frontend.h"
-+#include "dmxdev.h"
-+#include "dvb_demux.h"
-+#include "dvb_net.h"
-+
-+#include <linux/dvb/frontend.h>
-+#include <linux/dvb/dmx.h>
-+#include <linux/pci.h>
-+#include <linux/usb.h>
-+
-+#include "dvb_functions.h"
-+
-+/*
-+  TTUSB_HWSECTIONS:
-+    the DSP supports filtering in hardware, however, since the "muxstream"
-+    is a bit braindead (no matching channel masks or no matching filter mask),
-+    we won't support this - yet. it doesn't event support negative filters,
-+    so the best way is maybe to keep TTUSB_HWSECTIONS undef'd and just
-+    parse TS data. USB bandwith will be a problem when having large
-+    datastreams, especially for dvb-net, but hey, that's not my problem.
-+      
-+  TTUSB_DISEQC, TTUSB_TONE:
-+    let the STC do the diseqc/tone stuff. this isn't supported at least with
-+    my TTUSB, so let it undef'd unless you want to implement another
-+    frontend. never tested.
-+              
-+  DEBUG:
-+    define it to > 3 for really hardcore debugging. you probably don't want
-+    this unless the device doesn't load at all. > 2 for bandwidth statistics.
-+*/
-+
-+static int debug = 0;
-+
-+#define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0)
-+
-+#define ISO_BUF_COUNT      4
-+#define FRAMES_PER_ISO_BUF 4
-+#define ISO_FRAME_SIZE     912
-+#define TTUSB_MAXCHANNEL   32
-+#ifdef TTUSB_HWSECTIONS
-+#define TTUSB_MAXFILTER    16 /* ??? */
-+#endif
-+
-+#define TTUSB_BUDGET_NAME "ttusb_stc_fw"
-+
-+/**
-+ *  since we're casting (struct ttusb*) <-> (struct dvb_demux*) around
-+ *  the dvb_demux field must be the first in struct!!
-+ */
-+struct ttusb {
-+      struct dvb_demux dvb_demux;
-+      struct dmxdev dmxdev;
-+      struct dvb_net dvbnet;
-+
-+      /* our semaphore, for channel allocation/deallocation */
-+      struct semaphore sem;
-+      /* and one for USB access. */
-+      struct semaphore semusb;
-+
-+      struct dvb_adapter *adapter;
-+      struct usb_device *dev;
-+
-+      int disconnecting;
-+      int iso_streaming;
-+
-+      unsigned int bulk_out_pipe;
-+      unsigned int bulk_in_pipe;
-+      unsigned int isoc_in_pipe;
-+
-+      void *iso_buffer;
-+      dma_addr_t iso_dma_handle;
-+
-+      struct urb *iso_urb[ISO_BUF_COUNT];
-+
-+      int running_feed_count;
-+      int last_channel;
-+      int last_filter;
-+
-+      u8 c;                   /* transaction counter, wraps around...  */
-+      fe_sec_tone_mode_t tone;
-+      fe_sec_voltage_t voltage;
-+
-+      int mux_state;          // 0..2 - MuxSyncWord, 3 - nMuxPacks,    4 - muxpack
-+      u8 mux_npacks;
-+      u8 muxpack[256 + 8];
-+      int muxpack_ptr, muxpack_len;
-+
-+      int insync;
-+
-+      u16 cc;                 /* MuxCounter - will increment on EVERY MUX PACKET */
-+      /* (including stuffing. yes. really.) */
-+
-+      u8 last_result[32];
-+
-+      struct ttusb_channel {
-+              struct ttusb *ttusb;
-+              struct dvb_demux_feed *dvbdmxfeed;
-+
-+              int active;
-+              int id;
-+              int pid;
-+              int type;       /* 1 - TS, 2 - Filter */
-+#ifdef TTUSB_HWSECTIONS
-+              int filterstate[TTUSB_MAXFILTER];       /* 0: not busy, 1: busy */
-+#endif
-+      } channel[TTUSB_MAXCHANNEL];
-+#if 0
-+      devfs_handle_t stc_devfs_handle;
-+#endif
-+};
-+
-+/* ugly workaround ... don't know why it's neccessary to read */
-+/* all result codes. */
-+
-+#define DEBUG 0
-+static int ttusb_cmd(struct ttusb *ttusb,
-+            const u8 * data, int len, int needresult)
-+{
-+      int actual_len;
-+      int err;
-+#if DEBUG >= 3
-+      int i;
-+
-+      printk(">");
-+      for (i = 0; i < len; ++i)
-+              printk(" %02x", data[i]);
-+      printk("\n");
-+#endif
-+
-+      if (down_interruptible(&ttusb->semusb) < 0)
-+              return -EAGAIN;
-+
-+      err = usb_bulk_msg(ttusb->dev, ttusb->bulk_out_pipe,
-+                         (u8 *) data, len, &actual_len, HZ);
-+      if (err != 0) {
-+              dprintk("%s: usb_bulk_msg(send) failed, err == %i!\n",
-+                      __FUNCTION__, err);
-+              up(&ttusb->semusb);
-+              return err;
-+      }
-+      if (actual_len != len) {
-+              dprintk("%s: only wrote %d of %d bytes\n", __FUNCTION__,
-+                      actual_len, len);
-+              up(&ttusb->semusb);
-+              return -1;
-+      }
-+
-+      err = usb_bulk_msg(ttusb->dev, ttusb->bulk_in_pipe,
-+                         ttusb->last_result, 32, &actual_len, HZ);
-+
-+      if (err != 0) {
-+              printk("%s: failed, receive error %d\n", __FUNCTION__,
-+                     err);
-+              up(&ttusb->semusb);
-+              return err;
-+      }
-+#if DEBUG >= 3
-+      actual_len = ttusb->last_result[3] + 4;
-+      printk("<");
-+      for (i = 0; i < actual_len; ++i)
-+              printk(" %02x", ttusb->last_result[i]);
-+      printk("\n");
-+#endif
-+      if (!needresult)
-+              up(&ttusb->semusb);
-+      return 0;
-+}
-+
-+static int ttusb_result(struct ttusb *ttusb, u8 * data, int len)
-+{
-+      memcpy(data, ttusb->last_result, len);
-+      up(&ttusb->semusb);
-+      return 0;
-+}
-+
-+static int ttusb_i2c_msg(struct ttusb *ttusb,
-+                u8 addr, u8 * snd_buf, u8 snd_len, u8 * rcv_buf,
-+                u8 rcv_len)
-+{
-+      u8 b[0x28];
-+      u8 id = ++ttusb->c;
-+      int i, err;
-+
-+      if (snd_len > 0x28 - 7 || rcv_len > 0x20 - 7)
-+              return -EINVAL;
-+
-+      b[0] = 0xaa;
-+      b[1] = id;
-+      b[2] = 0x31;
-+      b[3] = snd_len + 3;
-+      b[4] = addr << 1;
-+      b[5] = snd_len;
-+      b[6] = rcv_len;
-+
-+      for (i = 0; i < snd_len; i++)
-+              b[7 + i] = snd_buf[i];
-+
-+      err = ttusb_cmd(ttusb, b, snd_len + 7, 1);
-+
-+      if (err)
-+              return -EREMOTEIO;
-+
-+      err = ttusb_result(ttusb, b, 0x20);
-+
-+      if (rcv_len > 0) {
-+
-+              if (err || b[0] != 0x55 || b[1] != id) {
-+                      dprintk
-+                          ("%s: usb_bulk_msg(recv) failed, err == %i, id == %02x, b == ",
-+                           __FUNCTION__, err, id);
-+                      return -EREMOTEIO;
-+              }
-+
-+              for (i = 0; i < rcv_len; i++)
-+                      rcv_buf[i] = b[7 + i];
-+      }
-+
-+      return rcv_len;
-+}
-+
-+static int ttusb_i2c_xfer(struct dvb_i2c_bus *i2c, const struct i2c_msg msg[],
-+                 int num)
-+{
-+      struct ttusb *ttusb = i2c->data;
-+      int i = 0;
-+      int inc;
-+
-+      if (down_interruptible(&ttusb->sem) < 0)
-+              return -EAGAIN;
-+
-+      while (i < num) {
-+              u8 addr, snd_len, rcv_len, *snd_buf, *rcv_buf;
-+              int err;
-+
-+              if (num > i + 1 && (msg[i + 1].flags & I2C_M_RD)) {
-+                      addr = msg[i].addr;
-+                      snd_buf = msg[i].buf;
-+                      snd_len = msg[i].len;
-+                      rcv_buf = msg[i + 1].buf;
-+                      rcv_len = msg[i + 1].len;
-+                      inc = 2;
-+              } else {
-+                      addr = msg[i].addr;
-+                      snd_buf = msg[i].buf;
-+                      snd_len = msg[i].len;
-+                      rcv_buf = NULL;
-+                      rcv_len = 0;
-+                      inc = 1;
-+              }
-+
-+              err = ttusb_i2c_msg(ttusb, addr,
-+                                  snd_buf, snd_len, rcv_buf, rcv_len);
-+
-+              if (err < rcv_len) {
-+                      printk("%s: i == %i\n", __FUNCTION__, i);
-+                      break;
-+              }
-+
-+              i += inc;
-+      }
-+
-+      up(&ttusb->sem);
-+      return i;
-+}
-+
-+#include "dvb-ttusb-dspbootcode.h"
-+
-+static int ttusb_boot_dsp(struct ttusb *ttusb)
-+{
-+      int i, err;
-+      u8 b[40];
-+
-+      /* BootBlock */
-+      b[0] = 0xaa;
-+      b[2] = 0x13;
-+      b[3] = 28;
-+
-+      /* upload dsp code in 32 byte steps (36 didn't work for me ...) */
-+      /* 32 is max packet size, no messages should be splitted. */
-+      for (i = 0; i < sizeof(dsp_bootcode); i += 28) {
-+              memcpy(&b[4], &dsp_bootcode[i], 28);
-+
-+              b[1] = ++ttusb->c;
-+
-+              err = ttusb_cmd(ttusb, b, 32, 0);
-+              if (err)
-+                      goto done;
-+      }
-+
-+      /* last block ... */
-+      b[1] = ++ttusb->c;
-+      b[2] = 0x13;
-+      b[3] = 0;
-+
-+      err = ttusb_cmd(ttusb, b, 4, 0);
-+      if (err)
-+              goto done;
-+
-+      /* BootEnd */
-+      b[1] = ++ttusb->c;
-+      b[2] = 0x14;
-+      b[3] = 0;
-+
-+      err = ttusb_cmd(ttusb, b, 4, 0);
-+
-+      done:
-+      if (err) {
-+              dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+                      __FUNCTION__, err);
-+      }
-+
-+      return err;
-+}
-+
-+static int ttusb_set_channel(struct ttusb *ttusb, int chan_id, int filter_type,
-+                    int pid)
-+{
-+      int err;
-+      /* SetChannel */
-+      u8 b[] = { 0xaa, ++ttusb->c, 0x22, 4, chan_id, filter_type,
-+              (pid >> 8) & 0xff, pid & 0xff
-+      };
-+
-+      err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+      return err;
-+}
-+
-+static int ttusb_del_channel(struct ttusb *ttusb, int channel_id)
-+{
-+      int err;
-+      /* DelChannel */
-+      u8 b[] = { 0xaa, ++ttusb->c, 0x23, 1, channel_id };
-+
-+      err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+      return err;
-+}
-+
-+#ifdef TTUSB_HWSECTIONS
-+static int ttusb_set_filter(struct ttusb *ttusb, int filter_id,
-+                   int associated_chan, u8 filter[8], u8 mask[8])
-+{
-+      int err;
-+      /* SetFilter */
-+      u8 b[] = { 0xaa, 0, 0x24, 0x1a, filter_id, associated_chan,
-+              filter[0], filter[1], filter[2], filter[3],
-+              filter[4], filter[5], filter[6], filter[7],
-+              filter[8], filter[9], filter[10], filter[11],
-+              mask[0], mask[1], mask[2], mask[3],
-+              mask[4], mask[5], mask[6], mask[7],
-+              mask[8], mask[9], mask[10], mask[11]
-+      };
-+
-+      err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+      return err;
-+}
-+
-+static int ttusb_del_filter(struct ttusb *ttusb, int filter_id)
-+{
-+      int err;
-+      /* DelFilter */
-+      u8 b[] = { 0xaa, ++ttusb->c, 0x25, 1, filter_id };
-+
-+      err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+      return err;
-+}
-+#endif
-+
-+static int ttusb_init_controller(struct ttusb *ttusb)
-+{
-+      u8 b0[] = { 0xaa, ++ttusb->c, 0x15, 1, 0 };
-+      u8 b1[] = { 0xaa, ++ttusb->c, 0x15, 1, 1 };
-+      u8 b2[] = { 0xaa, ++ttusb->c, 0x32, 1, 0 };
-+      /* i2c write read: 5 bytes, addr 0x10, 0x02 bytes write, 1 bytes read. */
-+      u8 b3[] =
-+          { 0xaa, ++ttusb->c, 0x31, 5, 0x10, 0x02, 0x01, 0x00, 0x1e };
-+      u8 b4[] =
-+          { 0x55, ttusb->c, 0x31, 4, 0x10, 0x02, 0x01, 0x00, 0x1e };
-+
-+      u8 get_version[] = { 0xaa, ++ttusb->c, 0x17, 5, 0, 0, 0, 0, 0 };
-+      u8 get_dsp_version[0x20] =
-+          { 0xaa, ++ttusb->c, 0x26, 28, 0, 0, 0, 0, 0 };
-+      int err;
-+
-+      /* reset board */
-+      if ((err = ttusb_cmd(ttusb, b0, sizeof(b0), 0)))
-+              return err;
-+
-+      /* reset board (again?) */
-+      if ((err = ttusb_cmd(ttusb, b1, sizeof(b1), 0)))
-+              return err;
-+
-+      ttusb_boot_dsp(ttusb);
-+
-+      /* set i2c bit rate */
-+      if ((err = ttusb_cmd(ttusb, b2, sizeof(b2), 0)))
-+              return err;
-+
-+      if ((err = ttusb_cmd(ttusb, b3, sizeof(b3), 1)))
-+              return err;
-+
-+      err = ttusb_result(ttusb, b4, sizeof(b4));
-+
-+      if ((err = ttusb_cmd(ttusb, get_version, sizeof(get_version), 1)))
-+              return err;
-+
-+      if ((err = ttusb_result(ttusb, get_version, sizeof(get_version))))
-+              return err;
-+
-+      dprintk("%s: stc-version: %c%c%c%c%c\n", __FUNCTION__,
-+              get_version[4], get_version[5], get_version[6],
-+              get_version[7], get_version[8]);
-+
-+      if (memcmp(get_version + 4, "V 0.0", 5) &&
-+          memcmp(get_version + 4, "V 1.1", 5)) {
-+              printk
-+                  ("%s: unknown STC version %c%c%c%c%c, please report!\n",
-+                   __FUNCTION__, get_version[4], get_version[5],
-+                   get_version[6], get_version[7], get_version[8]);
-+      }
-+
-+      err =
-+          ttusb_cmd(ttusb, get_dsp_version, sizeof(get_dsp_version), 1);
-+      if (err)
-+              return err;
-+
-+      err =
-+          ttusb_result(ttusb, get_dsp_version, sizeof(get_dsp_version));
-+      if (err)
-+              return err;
-+      printk("%s: dsp-version: %c%c%c\n", __FUNCTION__,
-+             get_dsp_version[4], get_dsp_version[5], get_dsp_version[6]);
-+      return 0;
-+}
-+
-+#ifdef TTUSB_DISEQC
-+static int ttusb_send_diseqc(struct ttusb *ttusb,
-+                    const struct dvb_diseqc_master_cmd *cmd)
-+{
-+      u8 b[12] = { 0xaa, ++ttusb->c, 0x18 };
-+
-+      int err;
-+
-+      b[3] = 4 + 2 + cmd->msg_len;
-+      b[4] = 0xFF;            /* send diseqc master, not burst */
-+      b[5] = cmd->msg_len;
-+
-+      memcpy(b + 5, cmd->msg, cmd->msg_len);
-+
-+      /* Diseqc */
-+      if ((err = ttusb_cmd(ttusb, b, 4 + b[3], 0))) {
-+              dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+                      __FUNCTION__, err);
-+      }
-+
-+      return err;
-+}
-+#endif
-+
-+static int ttusb_update_lnb(struct ttusb *ttusb)
-+{
-+      u8 b[] = { 0xaa, ++ttusb->c, 0x16, 5, /*power: */ 1,
-+              ttusb->voltage == SEC_VOLTAGE_18 ? 0 : 1,
-+              ttusb->tone == SEC_TONE_ON ? 1 : 0, 1, 1
-+      };
-+      int err;
-+
-+      /* SetLNB */
-+      if ((err = ttusb_cmd(ttusb, b, sizeof(b), 0))) {
-+              dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+                      __FUNCTION__, err);
-+      }
-+
-+      return err;
-+}
-+
-+static int ttusb_set_voltage(struct ttusb *ttusb, fe_sec_voltage_t voltage)
-+{
-+      ttusb->voltage = voltage;
-+      return ttusb_update_lnb(ttusb);
-+}
-+
-+#ifdef TTUSB_TONE
-+static int ttusb_set_tone(struct ttusb *ttusb, fe_sec_tone_mode_t tone)
-+{
-+      ttusb->tone = tone;
-+      return ttusb_update_lnb(ttusb);
-+}
-+#endif
-+
-+static int ttusb_lnb_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg)
-+{
-+      struct ttusb *ttusb = fe->i2c->data;
-+
-+      switch (cmd) {
-+      case FE_SET_VOLTAGE:
-+              return ttusb_set_voltage(ttusb, (fe_sec_voltage_t) arg);
-+#ifdef TTUSB_TONE
-+      case FE_SET_TONE:
-+              return ttusb_set_tone(ttusb, (fe_sec_tone_mode_t) arg);
-+#endif
-+#ifdef TTUSB_DISEQC
-+      case FE_DISEQC_SEND_MASTER_CMD:
-+              return ttusb_send_diseqc(ttusb,
-+                                       (struct dvb_diseqc_master_cmd *)
-+                                       arg);
-+#endif
-+      default:
-+              return -EOPNOTSUPP;
-+      };
-+}
-+
-+#if 0
-+static void ttusb_set_led_freq(struct ttusb *ttusb, u8 freq)
-+{
-+      u8 b[] = { 0xaa, ++ttusb->c, 0x19, 1, freq };
-+      int err, actual_len;
-+
-+      err = ttusb_cmd(ttusb, b, sizeof(b), 0);
-+      if (err) {
-+              dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
-+                      __FUNCTION__, err);
-+      }
-+}
-+#endif
-+
-+/*****************************************************************************/
-+
-+#ifdef TTUSB_HWSECTIONS
-+static void ttusb_handle_ts_data(struct ttusb_channel *channel,
-+                               const u8 * data, int len);
-+static void ttusb_handle_sec_data(struct ttusb_channel *channel,
-+                                const u8 * data, int len);
-+#endif
-+
-+int numpkt = 0, lastj, numts, numstuff, numsec, numinvalid;
-+
-+static void ttusb_process_muxpack(struct ttusb *ttusb, const u8 * muxpack,
-+                         int len)
-+{
-+      u16 csum = 0, cc;
-+      int i;
-+      for (i = 0; i < len; i += 2)
-+              csum ^= le16_to_cpup((u16 *) (muxpack + i));
-+      if (csum) {
-+              printk("%s: muxpack with incorrect checksum, ignoring\n",
-+                     __FUNCTION__);
-+              numinvalid++;
-+              return;
-+      }
-+
-+      cc = (muxpack[len - 4] << 8) | muxpack[len - 3];
-+      cc &= 0x7FFF;
-+      if (cc != ttusb->cc)
-+              printk("%s: cc discontinuity (%d frames missing)\n",
-+                     __FUNCTION__, (cc - ttusb->cc) & 0x7FFF);
-+      ttusb->cc = (cc + 1) & 0x7FFF;
-+      if (muxpack[0] & 0x80) {
-+#ifdef TTUSB_HWSECTIONS
-+              /* section data */
-+              int pusi = muxpack[0] & 0x40;
-+              int channel = muxpack[0] & 0x1F;
-+              int payload = muxpack[1];
-+              const u8 *data = muxpack + 2;
-+              /* check offset flag */
-+              if (muxpack[0] & 0x20)
-+                      data++;
-+
-+              ttusb_handle_sec_data(ttusb->channel + channel, data,
-+                                    payload);
-+              data += payload;
-+
-+              if ((!!(ttusb->muxpack[0] & 0x20)) ^
-+                  !!(ttusb->muxpack[1] & 1))
-+                      data++;
-+#warning TODO: pusi
-+              printk("cc: %04x\n", (data[0] << 8) | data[1]);
-+#endif
-+              numsec++;
-+      } else if (muxpack[0] == 0x47) {
-+#ifdef TTUSB_HWSECTIONS
-+              /* we have TS data here! */
-+              int pid = ((muxpack[1] & 0x0F) << 8) | muxpack[2];
-+              int channel;
-+              for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel)
-+                      if (ttusb->channel[channel].active
-+                          && (pid == ttusb->channel[channel].pid))
-+                              ttusb_handle_ts_data(ttusb->channel +
-+                                                   channel, muxpack,
-+                                                   188);
-+#endif
-+              numts++;
-+              dvb_dmx_swfilter_packets(&ttusb->dvb_demux, muxpack, 1);
-+      } else if (muxpack[0] != 0) {
-+              numinvalid++;
-+              printk("illegal muxpack type %02x\n", muxpack[0]);
-+      } else
-+              numstuff++;
-+}
-+
-+static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len)
-+{
-+      int maxwork = 1024;
-+      while (len) {
-+              if (!(maxwork--)) {
-+                      printk("%s: too much work\n", __FUNCTION__);
-+                      break;
-+              }
-+
-+              switch (ttusb->mux_state) {
-+              case 0:
-+              case 1:
-+              case 2:
-+                      len--;
-+                      if (*data++ == 0xAA)
-+                              ++ttusb->mux_state;
-+                      else {
-+                              ttusb->mux_state = 0;
-+#if DEBUG > 3
-+                              if (ttusb->insync)
-+                                      printk("%02x ", data[-1]);
-+#else
-+                              if (ttusb->insync) {
-+                                      printk("%s: lost sync.\n",
-+                                             __FUNCTION__);
-+                                      ttusb->insync = 0;
-+                              }
-+#endif
-+                      }
-+                      break;
-+              case 3:
-+                      ttusb->insync = 1;
-+                      len--;
-+                      ttusb->mux_npacks = *data++;
-+                      ++ttusb->mux_state;
-+                      ttusb->muxpack_ptr = 0;
-+                      /* maximum bytes, until we know the length */
-+                      ttusb->muxpack_len = 2;
-+                      break;
-+              case 4:
-+                      {
-+                              int avail;
-+                              avail = len;
-+                              if (avail >
-+                                  (ttusb->muxpack_len -
-+                                   ttusb->muxpack_ptr))
-+                                      avail =
-+                                          ttusb->muxpack_len -
-+                                          ttusb->muxpack_ptr;
-+                              memcpy(ttusb->muxpack + ttusb->muxpack_ptr,
-+                                     data, avail);
-+                              ttusb->muxpack_ptr += avail;
-+                              if (ttusb->muxpack_ptr > 264)
-+                                      BUG();
-+                              data += avail;
-+                              len -= avail;
-+                              /* determine length */
-+                              if (ttusb->muxpack_ptr == 2) {
-+                                      if (ttusb->muxpack[0] & 0x80) {
-+                                              ttusb->muxpack_len =
-+                                                  ttusb->muxpack[1] + 2;
-+                                              if (ttusb->
-+                                                  muxpack[0] & 0x20)
-+                                                      ttusb->
-+                                                          muxpack_len++;
-+                                              if ((!!
-+                                                   (ttusb->
-+                                                    muxpack[0] & 0x20)) ^
-+                                                  !!(ttusb->
-+                                                     muxpack[1] & 1))
-+                                                      ttusb->
-+                                                          muxpack_len++;
-+                                              ttusb->muxpack_len += 4;
-+                                      } else if (ttusb->muxpack[0] ==
-+                                                 0x47)
-+                                              ttusb->muxpack_len =
-+                                                  188 + 4;
-+                                      else if (ttusb->muxpack[0] == 0x00)
-+                                              ttusb->muxpack_len =
-+                                                  ttusb->muxpack[1] + 2 +
-+                                                  4;
-+                                      else {
-+                                              dprintk
-+                                                  ("%s: invalid state: first byte is %x\n",
-+                                                   __FUNCTION__,
-+                                                   ttusb->muxpack[0]);
-+                                              ttusb->mux_state = 0;
-+                                      }
-+                              }
-+
-+                      /**
-+                       * if length is valid and we reached the end:
-+                       * goto next muxpack
-+                       */
-+                              if ((ttusb->muxpack_ptr >= 2) &&
-+                                  (ttusb->muxpack_ptr ==
-+                                   ttusb->muxpack_len)) {
-+                                      ttusb_process_muxpack(ttusb,
-+                                                            ttusb->
-+                                                            muxpack,
-+                                                            ttusb->
-+                                                            muxpack_ptr);
-+                                      ttusb->muxpack_ptr = 0;
-+                                      /* maximum bytes, until we know the length */
-+                                      ttusb->muxpack_len = 2;
-+
-+                              /**
-+                               * no muxpacks left?
-+                               * return to search-sync state
-+                               */
-+                                      if (!ttusb->mux_npacks--) {
-+                                              ttusb->mux_state = 0;
-+                                              break;
-+                                      }
-+                              }
-+                              break;
-+                      }
-+              default:
-+                      BUG();
-+                      break;
-+              }
-+      }
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_iso_irq(struct urb *urb)
-+#else
-+static void ttusb_iso_irq(struct urb *urb, struct pt_regs *ptregs)
-+#endif
-+{
-+      struct ttusb *ttusb = urb->context;
-+
-+      if (!ttusb->iso_streaming)
-+              return;
-+
-+#if 0
-+      printk("%s: status %d, errcount == %d, length == %i\n",
-+             __FUNCTION__,
-+             urb->status, urb->error_count, urb->actual_length);
-+#endif
-+
-+      if (!urb->status) {
-+              int i;
-+              for (i = 0; i < urb->number_of_packets; ++i) {
-+                      struct usb_iso_packet_descriptor *d;
-+                      u8 *data;
-+                      int len;
-+                      numpkt++;
-+                      if ((jiffies - lastj) >= HZ) {
-+#if DEBUG > 2
-+                              printk
-+                                  ("frames/s: %d (ts: %d, stuff %d, sec: %d, invalid: %d, all: %d)\n",
-+                                   numpkt * HZ / (jiffies - lastj),
-+                                   numts, numstuff, numsec, numinvalid,
-+                                   numts + numstuff + numsec +
-+                                   numinvalid);
-+#endif
-+                              numts = numstuff = numsec = numinvalid = 0;
-+                              lastj = jiffies;
-+                              numpkt = 0;
-+                      }
-+                      d = &urb->iso_frame_desc[i];
-+                      data = urb->transfer_buffer + d->offset;
-+                      len = d->actual_length;
-+                      d->actual_length = 0;
-+                      d->status = 0;
-+                      ttusb_process_frame(ttusb, data, len);
-+              }
-+      }
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+      usb_submit_urb(urb, GFP_KERNEL);
-+#endif
-+}
-+
-+static void ttusb_free_iso_urbs(struct ttusb *ttusb)
-+{
-+      int i;
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++)
-+              if (ttusb->iso_urb[i])
-+                      usb_free_urb(ttusb->iso_urb[i]);
-+
-+      pci_free_consistent(NULL,
-+                          ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF *
-+                          ISO_BUF_COUNT, ttusb->iso_buffer,
-+                          ttusb->iso_dma_handle);
-+}
-+
-+static int ttusb_alloc_iso_urbs(struct ttusb *ttusb)
-+{
-+      int i;
-+
-+      ttusb->iso_buffer = pci_alloc_consistent(NULL,
-+                                               ISO_FRAME_SIZE *
-+                                               FRAMES_PER_ISO_BUF *
-+                                               ISO_BUF_COUNT,
-+                                               &ttusb->iso_dma_handle);
-+
-+      memset(ttusb->iso_buffer, 0,
-+             ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF * ISO_BUF_COUNT);
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++) {
-+              struct urb *urb;
-+
-+              if (!
-+                  (urb =
-+                   usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_KERNEL))) {
-+                      ttusb_free_iso_urbs(ttusb);
-+                      return -ENOMEM;
-+              }
-+
-+              ttusb->iso_urb[i] = urb;
-+      }
-+
-+      return 0;
-+}
-+
-+static void ttusb_stop_iso_xfer(struct ttusb *ttusb)
-+{
-+      int i;
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++)
-+              usb_unlink_urb(ttusb->iso_urb[i]);
-+
-+      ttusb->iso_streaming = 0;
-+}
-+
-+static int ttusb_start_iso_xfer(struct ttusb *ttusb)
-+{
-+      int i, j, err, buffer_offset = 0;
-+
-+      if (ttusb->iso_streaming) {
-+              printk("%s: iso xfer already running!\n", __FUNCTION__);
-+              return 0;
-+      }
-+
-+      ttusb->insync = 0;
-+      ttusb->mux_state = 0;
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++) {
-+              int frame_offset = 0;
-+              struct urb *urb = ttusb->iso_urb[i];
-+
-+              urb->dev = ttusb->dev;
-+              urb->context = ttusb;
-+              urb->complete = ttusb_iso_irq;
-+              urb->pipe = ttusb->isoc_in_pipe;
-+              urb->transfer_flags = URB_ISO_ASAP;
-+              urb->number_of_packets = FRAMES_PER_ISO_BUF;
-+              urb->transfer_buffer_length =
-+                  ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
-+              urb->transfer_buffer = ttusb->iso_buffer + buffer_offset;
-+              buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
-+
-+              for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
-+                      urb->iso_frame_desc[j].offset = frame_offset;
-+                      urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
-+                      frame_offset += ISO_FRAME_SIZE;
-+              }
-+      }
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      for (i = 0; i < ISO_BUF_COUNT; i++) {
-+              int next = (i + 1) % ISO_BUF_COUNT;
-+              ttusb->iso_urb[i]->next = ttusb->iso_urb[next];
-+      }
-+#endif
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++) {
-+              if ((err = usb_submit_urb(ttusb->iso_urb[i], GFP_KERNEL))) {
-+                      ttusb_stop_iso_xfer(ttusb);
-+                      printk
-+                          ("%s: failed urb submission (%i: err = %i)!\n",
-+                           __FUNCTION__, i, err);
-+                      return err;
-+              }
-+      }
-+
-+      ttusb->iso_streaming = 1;
-+
-+      return 0;
-+}
-+
-+#ifdef TTUSB_HWSECTIONS
-+static void ttusb_handle_ts_data(struct ttusb_channel *channel, const u8 * data,
-+                        int len)
-+{
-+      struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
-+
-+      dvbdmxfeed->cb.ts(data, len, 0, 0, &dvbdmxfeed->feed.ts, 0);
-+}
-+
-+static void ttusb_handle_sec_data(struct ttusb_channel *channel, const u8 * data,
-+                         int len)
-+{
-+//      struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
-+#error TODO: handle ugly stuff
-+//      dvbdmxfeed->cb.sec(data, len, 0, 0, &dvbdmxfeed->feed.sec, 0);
-+}
-+#endif
-+
-+static struct ttusb_channel *ttusb_channel_allocate(struct ttusb *ttusb)
-+{
-+      int i;
-+
-+      if (down_interruptible(&ttusb->sem))
-+              return NULL;
-+
-+      /* lock! */
-+      for (i = 0; i < TTUSB_MAXCHANNEL; ++i) {
-+              if (!ttusb->channel[i].active) {
-+                      ttusb->channel[i].active = 1;
-+                      up(&ttusb->sem);
-+                      return ttusb->channel + i;
-+              }
-+      }
-+
-+      up(&ttusb->sem);
-+
-+      return NULL;
-+}
-+
-+static int ttusb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+      struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
-+      struct ttusb_channel *channel;
-+
-+      printk("ttusb_start_feed\n");
-+
-+      switch (dvbdmxfeed->type) {
-+      case DMX_TYPE_TS:
-+              break;
-+      case DMX_TYPE_SEC:
-+              break;
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      if (dvbdmxfeed->type == DMX_TYPE_TS) {
-+              switch (dvbdmxfeed->pes_type) {
-+              case DMX_TS_PES_VIDEO:
-+              case DMX_TS_PES_AUDIO:
-+              case DMX_TS_PES_TELETEXT:
-+              case DMX_TS_PES_PCR:
-+              case DMX_TS_PES_OTHER:
-+                      channel = ttusb_channel_allocate(ttusb);
-+                      break;
-+              default:
-+                      return -EINVAL;
-+              }
-+      } else {
-+              channel = ttusb_channel_allocate(ttusb);
-+      }
-+
-+      if (!channel)
-+              return -EBUSY;
-+
-+      dvbdmxfeed->priv = channel;
-+      channel->dvbdmxfeed = dvbdmxfeed;
-+
-+      channel->pid = dvbdmxfeed->pid;
-+
-+#ifdef TTUSB_HWSECTIONS
-+      if (dvbdmxfeed->type == DMX_TYPE_TS) {
-+              channel->type = 1;
-+      } else if (dvbdmxfeed->type == DMX_TYPE_SEC) {
-+              channel->type = 2;
-+#error TODO: allocate filters
-+      }
-+#else
-+      channel->type = 1;
-+#endif
-+
-+      ttusb_set_channel(ttusb, channel->id, channel->type, channel->pid);
-+
-+      if (0 == ttusb->running_feed_count++)
-+              ttusb_start_iso_xfer(ttusb);
-+
-+      return 0;
-+}
-+
-+static int ttusb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+      struct ttusb_channel *channel =
-+          (struct ttusb_channel *) dvbdmxfeed->priv;
-+      struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
-+
-+      ttusb_del_channel(channel->ttusb, channel->id);
-+
-+      if (--ttusb->running_feed_count == 0)
-+              ttusb_stop_iso_xfer(ttusb);
-+
-+      channel->active = 0;
-+
-+      return 0;
-+}
-+
-+static int ttusb_setup_interfaces(struct ttusb *ttusb)
-+{
-+      usb_set_configuration(ttusb->dev, 1);
-+      usb_set_interface(ttusb->dev, 1, 1);
-+
-+      ttusb->bulk_out_pipe = usb_sndbulkpipe(ttusb->dev, 1);
-+      ttusb->bulk_in_pipe = usb_rcvbulkpipe(ttusb->dev, 1);
-+      ttusb->isoc_in_pipe = usb_rcvisocpipe(ttusb->dev, 2);
-+
-+      return 0;
-+}
-+
-+#if 0
-+static u8 stc_firmware[8192];
-+
-+static int stc_open(struct inode *inode, struct file *file)
-+{
-+      struct ttusb *ttusb = file->private_data;
-+      int addr;
-+
-+      for (addr = 0; addr < 8192; addr += 16) {
-+              u8 snd_buf[2] = { addr >> 8, addr & 0xFF };
-+              ttusb_i2c_msg(ttusb, 0x50, snd_buf, 2, stc_firmware + addr,
-+                            16);
-+      }
-+
-+      return 0;
-+}
-+
-+static ssize_t stc_read(struct file *file, char *buf, size_t count,
-+               loff_t * offset)
-+{
-+      int tc = count;
-+
-+      if ((tc + *offset) > 8192)
-+              tc = 8192 - *offset;
-+
-+      if (tc < 0)
-+              return 0;
-+
-+      copy_to_user(buf, stc_firmware + *offset, tc);
-+
-+      *offset += tc;
-+
-+      return tc;
-+}
-+
-+static int stc_release(struct inode *inode, struct file *file)
-+{
-+      return 0;
-+}
-+
-+static struct file_operations stc_fops = {
-+      .owner = THIS_MODULE,
-+      .read = stc_read,
-+      .open = stc_open,
-+      .release = stc_release,
-+};
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void *ttusb_probe(struct usb_device *udev, unsigned int ifnum,
-+                const struct usb_device_id *id)
-+{
-+      struct ttusb *ttusb;
-+      int result, channel;
-+
-+      if (ifnum != 0)
-+              return NULL;
-+
-+      dprintk("%s: TTUSB DVB connected\n", __FUNCTION__);
-+
-+      if (!(ttusb = kmalloc(sizeof(struct ttusb), GFP_KERNEL)))
-+              return NULL;
-+
-+#else
-+static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
-+{
-+      struct usb_device *udev;
-+      struct ttusb *ttusb;
-+      int result, channel;
-+
-+      dprintk("%s: TTUSB DVB connected\n", __FUNCTION__);
-+
-+      udev = interface_to_usbdev(intf);
-+
-+      if (!(ttusb = kmalloc(sizeof(struct ttusb), GFP_KERNEL)))
-+              return -ENOMEM;
-+
-+#endif
-+
-+      memset(ttusb, 0, sizeof(struct ttusb));
-+
-+      for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel) {
-+              ttusb->channel[channel].id = channel;
-+              ttusb->channel[channel].ttusb = ttusb;
-+      }
-+
-+      ttusb->dev = udev;
-+      ttusb->c = 0;
-+      ttusb->mux_state = 0;
-+      sema_init(&ttusb->sem, 0);
-+      sema_init(&ttusb->semusb, 1);
-+
-+      ttusb_setup_interfaces(ttusb);
-+
-+      ttusb_alloc_iso_urbs(ttusb);
-+      if (ttusb_init_controller(ttusb))
-+              printk("ttusb_init_controller: error\n");
-+
-+      up(&ttusb->sem);
-+
-+      dvb_register_adapter(&ttusb->adapter,
-+                           "Technotrend/Hauppauge Nova-USB");
-+
-+      dvb_register_i2c_bus(ttusb_i2c_xfer, ttusb, ttusb->adapter, 0);
-+      dvb_add_frontend_ioctls(ttusb->adapter, ttusb_lnb_ioctl, NULL,
-+                              ttusb);
-+
-+      memset(&ttusb->dvb_demux, 0, sizeof(ttusb->dvb_demux));
-+
-+      ttusb->dvb_demux.dmx.capabilities =
-+          DMX_TS_FILTERING | DMX_SECTION_FILTERING;
-+      ttusb->dvb_demux.priv = 0;
-+#ifdef TTUSB_HWSECTIONS
-+      ttusb->dvb_demux.filternum = TTUSB_MAXFILTER;
-+#else
-+      ttusb->dvb_demux.filternum = 32;
-+#endif
-+      ttusb->dvb_demux.feednum = TTUSB_MAXCHANNEL;
-+      ttusb->dvb_demux.start_feed = ttusb_start_feed;
-+      ttusb->dvb_demux.stop_feed = ttusb_stop_feed;
-+      ttusb->dvb_demux.write_to_decoder = 0;
-+
-+      if ((result = dvb_dmx_init(&ttusb->dvb_demux)) < 0) {
-+              printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n",
-+                     result);
-+              goto err;
-+      }
-+//FIXME dmxdev (nur WAS?)
-+      ttusb->dmxdev.filternum = ttusb->dvb_demux.filternum;
-+      ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx;
-+      ttusb->dmxdev.capabilities = 0;
-+
-+      if ((result = dvb_dmxdev_init(&ttusb->dmxdev, ttusb->adapter)) < 0) {
-+              printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n",
-+                     result);
-+              dvb_dmx_release(&ttusb->dvb_demux);
-+              goto err;
-+      }
-+
-+      if (dvb_net_init
-+          (ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) {
-+              printk("ttusb_dvb: dvb_net_init failed!\n");
-+      }
-+
-+      err:
-+#if 0
-+      ttusb->stc_devfs_handle =
-+          devfs_register(ttusb->adapter->devfs_handle, TTUSB_BUDGET_NAME,
-+                         DEVFS_FL_DEFAULT, 0, 192,
-+                         S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
-+                         | S_IROTH | S_IWOTH, &stc_fops, ttusb);
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      return (void *) ttusb;
-+#else
-+      usb_set_intfdata(intf, (void *) ttusb);
-+
-+      return 0;
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_disconnect(struct usb_device *udev, void *data)
-+{
-+      struct ttusb *ttusb = data;
-+#else
-+static void ttusb_disconnect(struct usb_interface *intf)
-+{
-+      struct ttusb *ttusb = usb_get_intfdata(intf);
-+
-+      usb_set_intfdata(intf, NULL);
-+#endif
-+
-+      ttusb->disconnecting = 1;
-+
-+      ttusb_stop_iso_xfer(ttusb);
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69))
-+#undef devfs_remove
-+#define devfs_remove(x)       devfs_unregister(ttusb->stc_devfs_handle);
-+#endif
-+#if 0
-+      devfs_remove(TTUSB_BUDGET_NAME);
-+#endif
-+      ttusb->dvb_demux.dmx.close(&ttusb->dvb_demux.dmx);
-+      dvb_net_release(&ttusb->dvbnet);
-+      dvb_dmxdev_release(&ttusb->dmxdev);
-+      dvb_dmx_release(&ttusb->dvb_demux);
-+
-+      dvb_unregister_i2c_bus(ttusb_i2c_xfer, ttusb->adapter, 0);
-+      dvb_unregister_adapter(ttusb->adapter);
-+
-+      ttusb_free_iso_urbs(ttusb);
-+
-+      kfree(ttusb);
-+
-+      dprintk("%s: TTUSB DVB disconnected\n", __FUNCTION__);
-+}
-+
-+static struct usb_device_id ttusb_table[] = {
-+      {USB_DEVICE(0xb48, 0x1003)},
-+      {USB_DEVICE(0xb48, 0x1004)},    /* to be confirmed ????  */
-+      {USB_DEVICE(0xb48, 0x1005)},    /* to be confirmed ????  */
-+      {}
-+};
-+
-+MODULE_DEVICE_TABLE(usb, ttusb_table);
-+
-+static struct usb_driver ttusb_driver = {
-+      .name           = "Technotrend/Hauppauge USB-Nova",
-+      .probe          = ttusb_probe,
-+      .disconnect     = ttusb_disconnect,
-+      .id_table       = ttusb_table,
-+};
-+
-+static int __init ttusb_init(void)
-+{
-+      int err;
-+
-+      if ((err = usb_register(&ttusb_driver)) < 0) {
-+              printk("%s: usb_register failed! Error number %d",
-+                     __FILE__, err);
-+              return -1;
-+      }
-+
-+      return 0;
-+}
-+
-+static void __exit ttusb_exit(void)
-+{
-+      usb_deregister(&ttusb_driver);
-+}
-+
-+module_init(ttusb_init);
-+module_exit(ttusb_exit);
-+
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "Debug or not");
-+
-+MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
-+MODULE_DESCRIPTION("TTUSB DVB Driver");
-+MODULE_LICENSE("GPL");
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h  2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,1644 @@
-+
-+#include <asm/types.h>
-+
-+u8 dsp_bootcode [] __initdata = {
-+      0x08, 0xaa, 0x00, 0x18, 0x00, 0x03, 0x08, 0x00, 
-+      0x00, 0x10, 0x00, 0x00, 0x01, 0x80, 0x18, 0x5f, 
-+      0x00, 0x00, 0x01, 0x80, 0x77, 0x18, 0x2a, 0xeb, 
-+      0x6b, 0xf8, 0x00, 0x18, 0x03, 0xff, 0x68, 0xf8, 
-+      0x00, 0x18, 0xff, 0xfe, 0xf7, 0xb8, 0xf7, 0xbe, 
-+      0xf6, 0xb9, 0xf4, 0xa0, 0xf6, 0xb7, 0xf6, 0xb5, 
-+      0xf6, 0xb6, 0xf0, 0x20, 0x19, 0xdf, 0xf1, 0x00, 
-+      0x00, 0x01, 0xf8, 0x4d, 0x01, 0xab, 0xf6, 0xb8, 
-+      0xf0, 0x20, 0x19, 0xdf, 0xf0, 0x73, 0x01, 0xa5, 
-+      0x7e, 0xf8, 0x00, 0x12, 0xf0, 0x00, 0x00, 0x01, 
-+      0x47, 0xf8, 0x00, 0x11, 0x7e, 0x92, 0x00, 0xf8, 
-+      0x00, 0x11, 0xf0, 0x00, 0x00, 0x01, 0x7e, 0xf8, 
-+      0x00, 0x11, 0xf0, 0x00, 0x00, 0x01, 0x6c, 0x89, 
-+      0x01, 0x9a, 0xf7, 0xb8, 0xee, 0xfc, 0xf0, 0x20, 
-+      0xff, 0xff, 0xf1, 0x00, 0x00, 0x01, 0xf8, 0x4d, 
-+      0x01, 0xbf, 0xf2, 0x73, 0x01, 0xb9, 0x4e, 0x02, 
-+      0xf4, 0x95, 0xf5, 0xe3, 0x56, 0x02, 0x7e, 0x00, 
-+      0x11, 0x00, 0xfa, 0x4c, 0x01, 0xb7, 0x6b, 0x03, 
-+      0x00, 0x01, 0xf6, 0xb8, 0xee, 0x04, 0xf0, 0x74, 
-+      0x0d, 0xa7, 0xf0, 0x74, 0x01, 0xc5, 0x4a, 0x11, 
-+      0x4a, 0x16, 0x72, 0x11, 0x2a, 0xe6, 0x10, 0xf8, 
-+      0x00, 0x11, 0xfa, 0x45, 0x01, 0xdb, 0xf4, 0x95, 
-+      0xee, 0xff, 0x48, 0x11, 0xf0, 0x00, 0x2a, 0xc6, 
-+      0x88, 0x16, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0xee, 
-+      0xff, 0xff, 0xf4, 0xe3, 0x6c, 0xe9, 0xff, 0xff, 
-+      0x01, 0xd5, 0x10, 0xf8, 0x2a, 0xe7, 0xf8, 0x45, 
-+      0x01, 0xe2, 0x10, 0xf8, 0x2a, 0xe7, 0xf4, 0xe3, 
-+      0xf0, 0x74, 0x01, 0xff, 0xee, 0x01, 0x8a, 0x16, 
-+      0x8a, 0x11, 0xfc, 0x00, 0xf7, 0xb8, 0xe9, 0x20, 
-+      0x4a, 0x11, 0x09, 0xf8, 0x2a, 0xe6, 0xf8, 0x4e, 
-+      0x01, 0xf3, 0xf2, 0x73, 0x01, 0xfd, 0xf4, 0x95, 
-+      0xe8, 0x01, 0x72, 0x11, 0x2a, 0xe6, 0x49, 0x11, 
-+      0x80, 0xe1, 0x2a, 0xc6, 0xf3, 0x00, 0x00, 0x01, 
-+      0xe8, 0x00, 0x81, 0xf8, 0x2a, 0xe6, 0x8a, 0x11, 
-+      0xfc, 0x00, 0xf4, 0x95, 0xf0, 0x73, 0x02, 0x00, 
-+      0x10, 0xf8, 0x2a, 0x0f, 0xfc, 0x00, 0x4a, 0x11, 
-+      0xf0, 0x74, 0x02, 0x02, 0x80, 0xf8, 0x2a, 0x10, 
-+      0x73, 0x08, 0x00, 0x09, 0x40, 0xf8, 0x2a, 0x15, 
-+      0x82, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0x77, 0x10, 
-+      0x03, 0xe8, 0xf5, 0xa9, 0xf8, 0x30, 0x02, 0x21, 
-+      0x71, 0xf8, 0x2a, 0x10, 0x2a, 0x15, 0x56, 0xf8, 
-+      0x2a, 0x0c, 0xf0, 0xe3, 0x4e, 0xf8, 0x2a, 0x16, 
-+      0xe8, 0x00, 0x4e, 0xf8, 0x2a, 0x0c, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1d, 
-+      0x68, 0xf8, 0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 
-+      0x00, 0x07, 0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 
-+      0xff, 0xfc, 0x6b, 0xf8, 0x2a, 0x0f, 0x00, 0x01, 
-+      0x8a, 0x1d, 0x8a, 0x07, 0x8a, 0x06, 0xf4, 0xeb, 
-+      0xee, 0xfd, 0x76, 0xf8, 0x2a, 0x0f, 0x00, 0x00, 
-+      0x76, 0x00, 0x00, 0x00, 0xfb, 0x80, 0x19, 0x4c, 
-+      0xf4, 0x95, 0xe8, 0x00, 0x80, 0xf8, 0x2a, 0x11, 
-+      0xf9, 0x80, 0x19, 0x07, 0x80, 0xf8, 0x2a, 0x0e, 
-+      0xf9, 0x80, 0x16, 0x66, 0x76, 0x00, 0x2a, 0x12, 
-+      0x10, 0xf8, 0x2a, 0x11, 0xf9, 0x80, 0x18, 0xe3, 
-+      0x10, 0xf8, 0x2a, 0x0e, 0xf9, 0x80, 0x16, 0x66, 
-+      0x10, 0xf8, 0x2a, 0x0e, 0xf9, 0x80, 0x16, 0x87, 
-+      0xee, 0x03, 0xfc, 0x00, 0x4a, 0x11, 0xf6, 0xb8, 
-+      0xf4, 0x95, 0xf0, 0x20, 0x80, 0x00, 0x11, 0xf8, 
-+      0x2a, 0x5a, 0xf8, 0x4d, 0x02, 0x93, 0x11, 0xf8, 
-+      0x2a, 0x9f, 0xf8, 0x4c, 0x02, 0x7c, 0x77, 0x12, 
-+      0x2a, 0x39, 0x49, 0x12, 0x01, 0xf8, 0x2a, 0x9f, 
-+      0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0x81, 
-+      0x00, 0x11, 0x6c, 0xe1, 0xff, 0xab, 0x02, 0x93, 
-+      0x6b, 0xf8, 0x2a, 0x9f, 0x00, 0x01, 0xe9, 0x05, 
-+      0x01, 0xe2, 0x00, 0x03, 0x81, 0xf8, 0x2a, 0xa0, 
-+      0xf0, 0x73, 0x02, 0x95, 0x72, 0x11, 0x2a, 0x9f, 
-+      0xf4, 0x95, 0x10, 0xe1, 0x2a, 0x39, 0x6b, 0xf8, 
-+      0x2a, 0x9f, 0x00, 0x01, 0x11, 0xf8, 0x2a, 0x9f, 
-+      0x09, 0xf8, 0x2a, 0xa0, 0xf8, 0x4c, 0x02, 0x93, 
-+      0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x00, 0x76, 0xf8, 
-+      0x2a, 0x9f, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa0, 
-+      0x00, 0x00, 0x88, 0x11, 0xf4, 0x95, 0x48, 0x11, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 
-+      0x10, 0xf8, 0x2a, 0x5a, 0xf8, 0x44, 0x02, 0xb2, 
-+      0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x01, 0xf0, 0x74, 
-+      0x02, 0x58, 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10, 
-+      0x80, 0x00, 0xf4, 0xa9, 0xf8, 0x30, 0x02, 0xb2, 
-+      0x48, 0x11, 0xf0, 0x30, 0x00, 0xff, 0x80, 0x00, 
-+      0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x18, 0xd6, 
-+      0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00, 0xf4, 0x95, 
-+      0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a, 0x4a, 0x0b, 
-+      0x4a, 0x0c, 0x4a, 0x0d, 0x4a, 0x10, 0x4a, 0x11, 
-+      0x4a, 0x12, 0x4a, 0x13, 0x4a, 0x14, 0x4a, 0x15, 
-+      0x4a, 0x16, 0x4a, 0x17, 0x4a, 0x17, 0x4a, 0x19, 
-+      0x4a, 0x0e, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1a, 
-+      0x4a, 0x1d, 0x4a, 0x1b, 0x4a, 0x1c, 0x68, 0xf8, 
-+      0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07, 
-+      0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc, 
-+      0x48, 0x18, 0x68, 0xf8, 0x00, 0x18, 0xff, 0xfe, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x4a, 0x08, 0xee, 0xfd, 
-+      0xf0, 0x74, 0x02, 0x58, 0x88, 0x11, 0xf4, 0x95, 
-+      0x77, 0x10, 0x80, 0x00, 0xf4, 0xa9, 0xf8, 0x30, 
-+      0x02, 0xef, 0x48, 0x11, 0xf0, 0x30, 0x00, 0xff, 
-+      0x80, 0x00, 0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 
-+      0x18, 0xd6, 0xee, 0x03, 0x8a, 0x18, 0xf4, 0x95, 
-+      0x8a, 0x1c, 0x8a, 0x1b, 0x8a, 0x1d, 0x8a, 0x1a, 
-+      0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0e, 0x8a, 0x19, 
-+      0x8a, 0x17, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x15, 
-+      0x8a, 0x14, 0x8a, 0x13, 0x8a, 0x12, 0x8a, 0x11, 
-+      0x8a, 0x10, 0x8a, 0x0d, 0x8a, 0x0c, 0x8a, 0x0b, 
-+      0x8a, 0x0a, 0x8a, 0x09, 0x8a, 0x08, 0xf4, 0xeb, 
-+      0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 
-+      0x00, 0x55, 0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2, 
-+      0x00, 0x01, 0x80, 0xe1, 0x00, 0x01, 0x10, 0xe2, 
-+      0x00, 0x02, 0x80, 0xe1, 0x00, 0x02, 0x76, 0xe1, 
-+      0x00, 0x03, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x04, 
-+      0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x10, 0x81, 0x6f, 0xf8, 0x2a, 0x9e, 
-+      0x0c, 0x88, 0xe8, 0xff, 0x18, 0xe1, 0x00, 0x01, 
-+      0x1a, 0xf8, 0x2a, 0x9e, 0xf0, 0x30, 0x1f, 0xff, 
-+      0x80, 0xf8, 0x2a, 0x9e, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 
-+      0x00, 0x55, 0x77, 0x12, 0x2a, 0x18, 0x11, 0xe2, 
-+      0x00, 0x01, 0x81, 0xe1, 0x00, 0x01, 0x11, 0xe2, 
-+      0x00, 0x02, 0x81, 0xe1, 0x00, 0x02, 0x76, 0xe1, 
-+      0x00, 0x03, 0x00, 0x02, 0x48, 0x08, 0x6f, 0xe1, 
-+      0x00, 0x04, 0x0c, 0x98, 0xf0, 0x30, 0x00, 0xff, 
-+      0x80, 0xe1, 0x00, 0x05, 0x76, 0xe1, 0x00, 0x06, 
-+      0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11, 0x2a, 0x39, 
-+      0x76, 0x81, 0x00, 0x55, 0x77, 0x12, 0x2a, 0x18, 
-+      0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1, 0x00, 0x01, 
-+      0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1, 0x00, 0x02, 
-+      0x76, 0xe1, 0x00, 0x03, 0x00, 0x04, 0x48, 0x11, 
-+      0xf0, 0x00, 0x00, 0x04, 0x88, 0x12, 0xf4, 0x95, 
-+      0x77, 0x13, 0x2a, 0x76, 0xe9, 0x00, 0xe5, 0x98, 
-+      0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8, 0x48, 0x0b, 
-+      0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 0x03, 0x71, 
-+      0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xf0, 
-+      0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0x81, 
-+      0x00, 0x14, 0x71, 0xe1, 0x00, 0x01, 0x00, 0x15, 
-+      0x49, 0x11, 0xf3, 0x00, 0x00, 0x02, 0x89, 0x11, 
-+      0xe7, 0x82, 0x6d, 0xea, 0x00, 0x04, 0xe7, 0x83, 
-+      0x6d, 0xeb, 0x00, 0x0a, 0x77, 0x1a, 0x00, 0x05, 
-+      0xf0, 0x72, 0x03, 0xaa, 0x11, 0x81, 0xf2, 0xe8, 
-+      0x80, 0x82, 0xe9, 0xff, 0x19, 0xe1, 0x00, 0x01, 
-+      0xf1, 0xa0, 0x81, 0x92, 0x11, 0xe1, 0x00, 0x0c, 
-+      0xf2, 0xe8, 0x80, 0x83, 0xe9, 0xff, 0x19, 0xe1, 
-+      0x00, 0x0d, 0xf1, 0xa0, 0x81, 0x93, 0x6d, 0xe9, 
-+      0x00, 0x02, 0x48, 0x18, 0x49, 0x18, 0x70, 0x00, 
-+      0x00, 0x15, 0xf0, 0x00, 0x00, 0x04, 0xf3, 0x00, 
-+      0x00, 0x0a, 0x80, 0x01, 0x81, 0x02, 0xf2, 0x74, 
-+      0x0e, 0x54, 0xf4, 0x95, 0x48, 0x14, 0xee, 0x10, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xf0, 0x74, 
-+      0x0c, 0x5e, 0x80, 0xf8, 0x2a, 0x5c, 0x77, 0x12, 
-+      0x2a, 0x39, 0x76, 0x82, 0x00, 0x55, 0x77, 0x11, 
-+      0x2a, 0x18, 0x10, 0xe1, 0x00, 0x01, 0x80, 0xe2, 
-+      0x00, 0x01, 0x10, 0xe1, 0x00, 0x02, 0x80, 0xe2, 
-+      0x00, 0x02, 0x76, 0xe2, 0x00, 0x03, 0x00, 0x1c, 
-+      0xf6, 0xb8, 0x56, 0xf8, 0x2a, 0x16, 0xf0, 0xf0, 
-+      0xf0, 0xf8, 0x80, 0xe2, 0x00, 0x07, 0x56, 0xf8, 
-+      0x2a, 0x16, 0xf1, 0xf0, 0xe8, 0xff, 0xf2, 0x80, 
-+      0x80, 0xe2, 0x00, 0x06, 0x56, 0xf8, 0x2a, 0x16, 
-+      0xf1, 0xf8, 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2, 
-+      0x00, 0x05, 0x57, 0xf8, 0x2a, 0x16, 0xe8, 0xff, 
-+      0xf2, 0x80, 0x80, 0xe2, 0x00, 0x04, 0x56, 0xf8, 
-+      0x27, 0x6c, 0xf0, 0xf0, 0xf0, 0xf8, 0x80, 0xe2, 
-+      0x00, 0x0b, 0x56, 0xf8, 0x27, 0x6c, 0xf1, 0xf0, 
-+      0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2, 0x00, 0x0a, 
-+      0x56, 0xf8, 0x27, 0x6c, 0xf1, 0xf8, 0xe8, 0xff, 
-+      0xf2, 0x80, 0x80, 0xe2, 0x00, 0x09, 0xe8, 0xff, 
-+      0x57, 0xf8, 0x27, 0x6c, 0xf2, 0x80, 0x80, 0xe2, 
-+      0x00, 0x08, 0x56, 0xf8, 0x27, 0x6a, 0xf0, 0xf0, 
-+      0xf0, 0xf8, 0x80, 0xe2, 0x00, 0x0f, 0x56, 0xf8, 
-+      0x27, 0x6a, 0xf1, 0xf0, 0xe8, 0xff, 0xf2, 0x80, 
-+      0x80, 0xe2, 0x00, 0x0e, 0x56, 0xf8, 0x27, 0x6a, 
-+      0xf1, 0xf8, 0xe8, 0xff, 0xf2, 0x80, 0x80, 0xe2, 
-+      0x00, 0x0d, 0x57, 0xf8, 0x27, 0x6a, 0xe8, 0xff, 
-+      0xf2, 0x80, 0x80, 0xe2, 0x00, 0x0c, 0x76, 0xe2, 
-+      0x00, 0x13, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x12, 
-+      0x00, 0x00, 0x6f, 0xf8, 0x2a, 0x5c, 0x0c, 0x58, 
-+      0x80, 0xe2, 0x00, 0x11, 0xe8, 0xff, 0x18, 0xf8, 
-+      0x2a, 0x5c, 0x80, 0xe2, 0x00, 0x10, 0x76, 0xe2, 
-+      0x00, 0x17, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x16, 
-+      0x00, 0x00, 0x6f, 0xf8, 0x2a, 0x9e, 0x0c, 0x58, 
-+      0x80, 0xe2, 0x00, 0x15, 0xe8, 0xff, 0x18, 0xf8, 
-+      0x2a, 0x9e, 0x80, 0xe2, 0x00, 0x14, 0x76, 0xe2, 
-+      0x00, 0x1b, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1a, 
-+      0x00, 0x00, 0x76, 0xe2, 0x00, 0x19, 0x00, 0x00, 
-+      0x70, 0xe2, 0x00, 0x18, 0x27, 0x6e, 0x76, 0xe2, 
-+      0x00, 0x1f, 0x00, 0x00, 0x76, 0xe2, 0x00, 0x1e, 
-+      0x00, 0x00, 0x76, 0xe2, 0x00, 0x1d, 0x00, 0x00, 
-+      0x76, 0xe2, 0x00, 0x1c, 0x00, 0x00, 0x76, 0xe2, 
-+      0x00, 0x20, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 
-+      0x10, 0xf8, 0x2a, 0x38, 0xf8, 0x45, 0x04, 0xed, 
-+      0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x02, 
-+      0x88, 0x11, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x08, 
-+      0x6d, 0xe9, 0xff, 0xdf, 0xf6, 0xa9, 0xf8, 0x20, 
-+      0x04, 0x75, 0xf0, 0x73, 0x04, 0x7d, 0xf0, 0x10, 
-+      0x00, 0x21, 0xf0, 0x00, 0x1a, 0x83, 0x48, 0x08, 
-+      0x7e, 0xf8, 0x00, 0x08, 0xf4, 0xe2, 0xf0, 0x74, 
-+      0x03, 0x0a, 0xf0, 0x73, 0x04, 0xea, 0x48, 0x12, 
-+      0xf2, 0x74, 0x03, 0x23, 0xf0, 0x00, 0x00, 0x04, 
-+      0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00, 
-+      0xf0, 0x73, 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18, 
-+      0xe8, 0xff, 0x6f, 0xe1, 0x00, 0x04, 0x0d, 0x48, 
-+      0x18, 0xe1, 0x00, 0x05, 0xf2, 0x74, 0x09, 0x69, 
-+      0xf4, 0x95, 0xf2, 0xa0, 0xf0, 0x74, 0x03, 0x36, 
-+      0xf0, 0x73, 0x04, 0xea, 0x77, 0x11, 0x2a, 0x18, 
-+      0xe8, 0xff, 0x6f, 0xe1, 0x00, 0x04, 0x0d, 0x48, 
-+      0x18, 0xe1, 0x00, 0x05, 0xf2, 0x74, 0x09, 0x41, 
-+      0xf4, 0x95, 0xf2, 0xa0, 0xf0, 0x74, 0x03, 0x36, 
-+      0xf0, 0x73, 0x04, 0xea, 0xf0, 0x74, 0x03, 0x57, 
-+      0xf0, 0x73, 0x04, 0xea, 0x10, 0xf8, 0x2a, 0x1c, 
-+      0xf0, 0x74, 0x12, 0xa4, 0xf2, 0x74, 0x03, 0x36, 
-+      0xf4, 0x95, 0xe8, 0x00, 0xf0, 0x73, 0x04, 0xea, 
-+      0x48, 0x12, 0xf2, 0x74, 0x03, 0x80, 0xf0, 0x00, 
-+      0x00, 0x04, 0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95, 
-+      0xe8, 0x00, 0xf0, 0x73, 0x04, 0xea, 0x10, 0xf8, 
-+      0x2a, 0x1c, 0xf0, 0x74, 0x12, 0xc5, 0xf2, 0x74, 
-+      0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00, 0xf0, 0x73, 
-+      0x04, 0xea, 0x77, 0x11, 0x2a, 0x18, 0xe8, 0xff, 
-+      0x6f, 0xe1, 0x00, 0x06, 0x0d, 0x48, 0x18, 0xe1, 
-+      0x00, 0x07, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0xf2, 0xa0, 0x70, 0x00, 0x00, 0x12, 0x80, 0x01, 
-+      0x10, 0xe1, 0x00, 0x04, 0xf0, 0x74, 0x0e, 0x7a, 
-+      0xf2, 0x74, 0x03, 0x36, 0xf4, 0x95, 0xe8, 0x00, 
-+      0xf0, 0x73, 0x04, 0xea, 0xf0, 0x74, 0x03, 0xbc, 
-+      0x76, 0xf8, 0x2a, 0x38, 0x00, 0x00, 0xee, 0x02, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11, 
-+      0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 0x77, 0x12, 
-+      0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1, 
-+      0x00, 0x01, 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1, 
-+      0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x09, 
-+      0x48, 0x11, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12, 
-+      0xf4, 0x95, 0x77, 0x13, 0x2a, 0x86, 0xe9, 0x00, 
-+      0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8, 
-+      0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 
-+      0x05, 0x0a, 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74, 
-+      0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 
-+      0x77, 0x13, 0x2a, 0x18, 0x10, 0xe3, 0x00, 0x01, 
-+      0x80, 0xe1, 0x00, 0x01, 0x10, 0xe3, 0x00, 0x02, 
-+      0x80, 0xe1, 0x00, 0x02, 0x13, 0xe3, 0x00, 0x03, 
-+      0x81, 0xe1, 0x00, 0x03, 0x48, 0x11, 0x77, 0x11, 
-+      0x00, 0x00, 0xf8, 0x4d, 0x05, 0x44, 0xf0, 0x00, 
-+      0x00, 0x04, 0x88, 0x12, 0x48, 0x13, 0xf0, 0x00, 
-+      0x00, 0x04, 0x88, 0x13, 0xf4, 0x95, 0xf4, 0x95, 
-+      0xe5, 0x98, 0x6d, 0x91, 0xf6, 0xb8, 0x48, 0x11, 
-+      0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 0x05, 0x3a, 
-+      0xf0, 0x20, 0x2a, 0x39, 0x49, 0x11, 0xf5, 0x00, 
-+      0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x76, 0xe1, 
-+      0x00, 0x04, 0x00, 0xaa, 0xf0, 0x74, 0x02, 0x98, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x77, 0x11, 
-+      0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 0x77, 0x12, 
-+      0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01, 0x80, 0xe1, 
-+      0x00, 0x01, 0x10, 0xe2, 0x00, 0x02, 0x80, 0xe1, 
-+      0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x0c, 
-+      0x48, 0x11, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x12, 
-+      0xf4, 0x95, 0x77, 0x13, 0x2a, 0x7a, 0xe9, 0x00, 
-+      0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01, 0xf6, 0xb8, 
-+      0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c, 0xf8, 0x43, 
-+      0x05, 0x6a, 0x76, 0x82, 0x00, 0xaa, 0xf0, 0x74, 
-+      0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0x77, 0x11, 0x2a, 0x39, 0x76, 0x81, 0x00, 0x55, 
-+      0x77, 0x12, 0x2a, 0x18, 0x10, 0xe2, 0x00, 0x01, 
-+      0x80, 0xe1, 0x00, 0x01, 0x10, 0xe2, 0x00, 0x02, 
-+      0x80, 0xe1, 0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 
-+      0x00, 0x19, 0x48, 0x11, 0xf0, 0x00, 0x00, 0x04, 
-+      0x88, 0x12, 0xf4, 0x95, 0x77, 0x13, 0x2a, 0x5d, 
-+      0xe9, 0x00, 0xe5, 0x98, 0xf3, 0x00, 0x00, 0x01, 
-+      0xf6, 0xb8, 0x48, 0x0b, 0x08, 0xf8, 0x2a, 0x3c, 
-+      0xf8, 0x43, 0x05, 0x93, 0x76, 0x82, 0x00, 0xaa, 
-+      0xf0, 0x74, 0x02, 0x98, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0x88, 0x11, 0x10, 0xf8, 0x2a, 0x38, 
-+      0xf8, 0x44, 0x05, 0xe3, 0x10, 0xf8, 0x2a, 0xa1, 
-+      0xf8, 0x44, 0x05, 0xba, 0x6c, 0xe1, 0xff, 0x56, 
-+      0x05, 0xe3, 0x72, 0x12, 0x2a, 0xa1, 0xf4, 0x95, 
-+      0x70, 0xe2, 0x2a, 0x18, 0x00, 0x11, 0x6b, 0xf8, 
-+      0x2a, 0xa1, 0x00, 0x01, 0xf0, 0x73, 0x05, 0xe3, 
-+      0x72, 0x12, 0x2a, 0xa1, 0xf4, 0x95, 0x70, 0xe2, 
-+      0x2a, 0x18, 0x00, 0x11, 0x10, 0xf8, 0x2a, 0xa1, 
-+      0xf0, 0x00, 0x00, 0x01, 0x88, 0x12, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x6e, 0xe2, 0xff, 0xfc, 0x05, 0xd1, 
-+      0x73, 0x12, 0x2a, 0xa1, 0x48, 0x11, 0xf0, 0x00, 
-+      0x00, 0x05, 0x80, 0xf8, 0x2a, 0xa2, 0x10, 0xf8, 
-+      0x2a, 0xa1, 0x08, 0xf8, 0x2a, 0xa2, 0xf8, 0x44, 
-+      0x05, 0xe3, 0x6c, 0xe1, 0xff, 0xab, 0x05, 0xdd, 
-+      0x76, 0xf8, 0x2a, 0x38, 0x00, 0x01, 0x76, 0xf8, 
-+      0x2a, 0xa1, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa2, 
-+      0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0xf4, 0x95, 
-+      0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a, 0x4a, 0x0b, 
-+      0x4a, 0x0c, 0x4a, 0x0d, 0x4a, 0x10, 0x4a, 0x11, 
-+      0x4a, 0x12, 0x4a, 0x13, 0x4a, 0x14, 0x4a, 0x15, 
-+      0x4a, 0x16, 0x4a, 0x17, 0x4a, 0x17, 0x4a, 0x19, 
-+      0x4a, 0x0e, 0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1a, 
-+      0x4a, 0x1d, 0x4a, 0x1b, 0x4a, 0x1c, 0x68, 0xf8, 
-+      0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07, 
-+      0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc, 
-+      0x48, 0x18, 0x68, 0xf8, 0x00, 0x18, 0xff, 0xfe, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x4a, 0x08, 0xee, 0xff, 
-+      0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x18, 0x04, 
-+      0xf0, 0x74, 0x05, 0xa2, 0xee, 0x01, 0x8a, 0x18, 
-+      0xf4, 0x95, 0x8a, 0x1c, 0x8a, 0x1b, 0x8a, 0x1d, 
-+      0x8a, 0x1a, 0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0e, 
-+      0x8a, 0x19, 0x8a, 0x17, 0x8a, 0x17, 0x8a, 0x16, 
-+      0x8a, 0x15, 0x8a, 0x14, 0x8a, 0x13, 0x8a, 0x12, 
-+      0x8a, 0x11, 0x8a, 0x10, 0x8a, 0x0d, 0x8a, 0x0c, 
-+      0x8a, 0x0b, 0x8a, 0x0a, 0x8a, 0x09, 0x8a, 0x08, 
-+      0xf4, 0xeb, 0xee, 0xfd, 0x76, 0xf8, 0x2a, 0x38, 
-+      0x00, 0x00, 0x76, 0xf8, 0x2a, 0x5a, 0x00, 0x00, 
-+      0xe8, 0x01, 0x4e, 0x00, 0xfb, 0x80, 0x17, 0xd6, 
-+      0xf4, 0x95, 0xe8, 0x01, 0x80, 0xf8, 0x2a, 0x5b, 
-+      0x76, 0x00, 0x2a, 0x8f, 0xf9, 0x80, 0x16, 0xaa, 
-+      0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x17, 0x5c, 
-+      0x10, 0xf8, 0x2a, 0x5b, 0xf9, 0x80, 0x17, 0x6f, 
-+      0xfb, 0x80, 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x1a, 
-+      0xfb, 0x80, 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x1a, 
-+      0xfb, 0x80, 0x16, 0x66, 0xf4, 0x95, 0xe8, 0x1b, 
-+      0xfb, 0x80, 0x16, 0x87, 0xf4, 0x95, 0xe8, 0x1b, 
-+      0xee, 0x03, 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 
-+      0x13, 0x02, 0x88, 0x11, 0xe8, 0x00, 0xf8, 0x4d, 
-+      0x06, 0x6a, 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a, 
-+      0xf4, 0x95, 0xf0, 0x72, 0x06, 0x69, 0x1c, 0x91, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11, 
-+      0x12, 0x03, 0x11, 0x02, 0xf8, 0x45, 0x06, 0x79, 
-+      0xf0, 0x10, 0x00, 0x01, 0x88, 0x1a, 0xf4, 0x95, 
-+      0xf0, 0x72, 0x06, 0x78, 0x81, 0x91, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 
-+      0x00, 0x11, 0x11, 0x03, 0x61, 0xf8, 0x00, 0x11, 
-+      0x00, 0x01, 0xf8, 0x30, 0x06, 0x91, 0xf6, 0xb8, 
-+      0x6f, 0xf8, 0x00, 0x11, 0x0c, 0x1f, 0x88, 0x11, 
-+      0xf3, 0xe8, 0xe8, 0xff, 0x18, 0x81, 0xf1, 0xa0, 
-+      0x81, 0x81, 0xf0, 0x73, 0x06, 0x9d, 0xf6, 0xb8, 
-+      0x6f, 0xf8, 0x00, 0x11, 0x0c, 0x1f, 0x88, 0x11, 
-+      0xf3, 0x30, 0x00, 0xff, 0xf0, 0x20, 0xff, 0x00, 
-+      0x18, 0x81, 0xf1, 0xa0, 0x81, 0x81, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x11, 0x02, 
-+      0x61, 0xf8, 0x00, 0x0b, 0x00, 0x01, 0xf8, 0x20, 
-+      0x06, 0xb1, 0x49, 0x0b, 0xf6, 0x1f, 0x88, 0x11, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xf2, 0x73, 
-+      0x06, 0xb8, 0xf0, 0x30, 0x00, 0xff, 0x49, 0x0b, 
-+      0xf6, 0x1f, 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 
-+      0x12, 0x81, 0xf4, 0x78, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x12, 
-+      0x13, 0x03, 0x88, 0x11, 0xe8, 0x00, 0xf8, 0x4d, 
-+      0x06, 0xcc, 0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a, 
-+      0xf4, 0x95, 0xf0, 0x72, 0x06, 0xcb, 0x11, 0x92, 
-+      0xf2, 0xc0, 0x81, 0x91, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x88, 0x12, 0x12, 0x02, 0x71, 0x01, 0x00, 0x13, 
-+      0xf8, 0x45, 0x06, 0xdb, 0xf0, 0x10, 0x00, 0x01, 
-+      0x88, 0x1a, 0xf4, 0x95, 0xf0, 0x72, 0x06, 0xda, 
-+      0xe5, 0x98, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 
-+      0x88, 0x11, 0x11, 0x04, 0x10, 0x06, 0x71, 0x05, 
-+      0x00, 0x12, 0x61, 0xf8, 0x00, 0x12, 0x00, 0x01, 
-+      0xf8, 0x20, 0x06, 0xea, 0xf0, 0x00, 0x00, 0x01, 
-+      0xf6, 0xb8, 0xf0, 0x00, 0x00, 0x01, 0x6f, 0xf8, 
-+      0x00, 0x12, 0x0f, 0x1f, 0x48, 0x08, 0x81, 0x00, 
-+      0xf4, 0x7f, 0x80, 0x01, 0xf2, 0x74, 0x06, 0xba, 
-+      0xf4, 0x95, 0x48, 0x11, 0xee, 0x02, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 0x88, 0x12, 
-+      0x11, 0x04, 0x10, 0x06, 0x71, 0x05, 0x00, 0x13, 
-+      0x61, 0xf8, 0x00, 0x13, 0x00, 0x01, 0xf8, 0x20, 
-+      0x07, 0x09, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00, 
-+      0x00, 0x01, 0x88, 0x11, 0xf6, 0xb8, 0x6f, 0xf8, 
-+      0x00, 0x13, 0x0f, 0x1f, 0x81, 0x00, 0x48, 0x11, 
-+      0xf4, 0x7f, 0x80, 0x01, 0xf2, 0x74, 0x06, 0xce, 
-+      0xf4, 0x95, 0x48, 0x12, 0x48, 0x11, 0xf0, 0x30, 
-+      0xff, 0xfe, 0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xfc, 
-+      0xf4, 0x95, 0x80, 0x02, 0x71, 0x08, 0x00, 0x16, 
-+      0x10, 0x09, 0x71, 0x0b, 0x00, 0x17, 0x80, 0x03, 
-+      0x71, 0x0a, 0x00, 0x11, 0x48, 0x17, 0xf8, 0x45, 
-+      0x07, 0x3f, 0x70, 0x00, 0x00, 0x11, 0x10, 0x03, 
-+      0xf0, 0x74, 0x06, 0x9f, 0x80, 0x01, 0x70, 0x00, 
-+      0x00, 0x16, 0x10, 0x02, 0xf0, 0x74, 0x06, 0x7b, 
-+      0x6d, 0x91, 0x6d, 0x96, 0x6c, 0xef, 0xff, 0xff, 
-+      0x07, 0x2f, 0xee, 0x04, 0x8a, 0x17, 0x8a, 0x16, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 
-+      0x10, 0xf8, 0x2a, 0xe8, 0x08, 0xf8, 0x2a, 0xe9, 
-+      0xf8, 0x45, 0x07, 0x64, 0x76, 0x00, 0x00, 0x01, 
-+      0x62, 0xf8, 0x2a, 0xe9, 0x00, 0x5e, 0xf2, 0x74, 
-+      0x12, 0x0b, 0xf0, 0x00, 0x30, 0x40, 0x72, 0x11, 
-+      0x2a, 0xe9, 0x77, 0x10, 0x00, 0x0f, 0xf5, 0xa9, 
-+      0xf8, 0x20, 0x07, 0x61, 0x6b, 0xf8, 0x2a, 0xe9, 
-+      0x00, 0x01, 0xf0, 0x73, 0x07, 0x64, 0x76, 0xf8, 
-+      0x2a, 0xe9, 0x00, 0x00, 0xee, 0x02, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0x88, 0x11, 0xe8, 0x00, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x08, 0xe8, 0x00, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x09, 0xf6, 0xb8, 
-+      0xf4, 0x95, 0xf0, 0x20, 0xfc, 0x3f, 0x75, 0xf8, 
-+      0x00, 0x08, 0x00, 0x0d, 0xf0, 0x20, 0x0c, 0x30, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x0c, 0x76, 0xf8, 
-+      0x2a, 0xe8, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xe9, 
-+      0x00, 0x00, 0x6c, 0x81, 0x07, 0x92, 0x76, 0xf8, 
-+      0x2a, 0xea, 0x00, 0x00, 0xfb, 0x80, 0x16, 0x76, 
-+      0xf4, 0x95, 0xe8, 0x10, 0xe8, 0x00, 0x75, 0xf8, 
-+      0x00, 0x08, 0x00, 0x00, 0xf0, 0x73, 0x07, 0xa8, 
-+      0x76, 0xf8, 0x2a, 0xea, 0x00, 0x01, 0xfb, 0x80, 
-+      0x16, 0x66, 0xf4, 0x95, 0xe8, 0x10, 0xfb, 0x80, 
-+      0x16, 0x87, 0xf4, 0x95, 0xe8, 0x10, 0xe8, 0x00, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x00, 0xf6, 0xb8, 
-+      0xf4, 0x95, 0xf0, 0x20, 0xff, 0xff, 0x75, 0xf8, 
-+      0x00, 0x08, 0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00, 
-+      0xf4, 0x95, 0x4a, 0x08, 0x4a, 0x09, 0x4a, 0x0a, 
-+      0x4a, 0x06, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8, 
-+      0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07, 
-+      0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc, 
-+      0x10, 0xf8, 0x2a, 0xea, 0xf8, 0x45, 0x07, 0xe1, 
-+      0x10, 0xf8, 0x2a, 0xe8, 0xf0, 0x00, 0x00, 0x01, 
-+      0xf0, 0x30, 0x00, 0x0f, 0x80, 0xf8, 0x2a, 0xe8, 
-+      0x10, 0xf8, 0x2a, 0xe8, 0xf8, 0x44, 0x07, 0xd6, 
-+      0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xfc, 0x3f, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x0d, 0xf0, 0x20, 
-+      0x0c, 0x30, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x0c, 
-+      0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x00, 
-+      0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xff, 0xff, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x00, 0x8a, 0x1d, 
-+      0x8a, 0x07, 0x8a, 0x06, 0x8a, 0x0a, 0x8a, 0x09, 
-+      0x8a, 0x08, 0xf4, 0xeb, 0xee, 0xff, 0xf2, 0x74, 
-+      0x07, 0x67, 0xf4, 0x95, 0xe8, 0x01, 0xee, 0x01, 
-+      0xfc, 0x00, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8, 
-+      0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07, 
-+      0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc, 
-+      0x8a, 0x1d, 0x8a, 0x07, 0xf4, 0xeb, 0x4a, 0x11, 
-+      0x77, 0x11, 0x00, 0x28, 0x76, 0x81, 0x24, 0x00, 
-+      0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 
-+      0xf2, 0x74, 0x07, 0x67, 0xf4, 0x95, 0xe8, 0x00, 
-+      0x77, 0x11, 0x00, 0x1d, 0x68, 0x81, 0x00, 0x7f, 
-+      0xf6, 0xb8, 0xf4, 0x95, 0xf0, 0x20, 0xff, 0x80, 
-+      0x77, 0x11, 0x00, 0x1d, 0xf0, 0x30, 0x01, 0x00, 
-+      0x1a, 0x81, 0x80, 0x81, 0xf0, 0x74, 0x0a, 0x33, 
-+      0xf0, 0x74, 0x11, 0xac, 0xf9, 0x80, 0x13, 0x25, 
-+      0xf9, 0x80, 0x16, 0x53, 0xf9, 0x80, 0x17, 0x82, 
-+      0xf0, 0x74, 0x06, 0x2f, 0xf9, 0x80, 0x14, 0xb2, 
-+      0xf9, 0x80, 0x19, 0x10, 0xf0, 0x74, 0x0d, 0xe3, 
-+      0xf0, 0x74, 0x07, 0xe8, 0xf0, 0x74, 0x02, 0x36, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x60, 0xf8, 
-+      0x27, 0x7b, 0xff, 0xff, 0xf8, 0x30, 0x08, 0x39, 
-+      0x71, 0xf8, 0x27, 0x7b, 0x27, 0x79, 0x60, 0xf8, 
-+      0x27, 0x79, 0xff, 0xff, 0xf8, 0x30, 0x08, 0xb2, 
-+      0x10, 0xf8, 0x29, 0x86, 0x08, 0xf8, 0x27, 0x79, 
-+      0xf0, 0x30, 0x7f, 0xff, 0x88, 0x11, 0xf4, 0x95, 
-+      0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x30, 
-+      0x08, 0x58, 0x10, 0xf8, 0x27, 0x79, 0x08, 0xf8, 
-+      0x27, 0x7a, 0xf0, 0x30, 0x7f, 0xff, 0x88, 0x11, 
-+      0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9, 
-+      0xf8, 0x20, 0x08, 0x63, 0x76, 0xf8, 0x27, 0x79, 
-+      0xff, 0xff, 0x76, 0xf8, 0x27, 0x7b, 0xff, 0xff, 
-+      0xf7, 0xb8, 0xf2, 0x73, 0x08, 0xd9, 0xf0, 0x20, 
-+      0xff, 0xff, 0xf6, 0xb8, 0x56, 0xf8, 0x27, 0x74, 
-+      0xf0, 0xf9, 0x88, 0x11, 0x56, 0xf8, 0x27, 0x72, 
-+      0xf0, 0xf9, 0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95, 
-+      0xe7, 0x20, 0xf4, 0xa9, 0xf8, 0x30, 0x08, 0x8f, 
-+      0xf1, 0x20, 0x27, 0x7c, 0x48, 0x11, 0xf6, 0x00, 
-+      0x88, 0x13, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x83, 
-+      0x08, 0xf8, 0x27, 0x79, 0xf0, 0x30, 0x7f, 0xff, 
-+      0x88, 0x13, 0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 
-+      0xf5, 0xab, 0xf8, 0x30, 0x08, 0x8f, 0x6d, 0x91, 
-+      0x48, 0x11, 0xf0, 0x30, 0x01, 0xff, 0x88, 0x11, 
-+      0xf4, 0x95, 0xe7, 0x20, 0xf7, 0xa9, 0xf8, 0x30, 
-+      0x08, 0x74, 0x6d, 0x89, 0x48, 0x11, 0xf0, 0x30, 
-+      0x01, 0xff, 0xf0, 0xe7, 0xf4, 0x95, 0x48, 0x08, 
-+      0x4e, 0xf8, 0x27, 0x74, 0x48, 0x08, 0xf1, 0xf9, 
-+      0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x71, 0xe1, 
-+      0x27, 0x7c, 0x27, 0x7a, 0x60, 0xf8, 0x27, 0x7b, 
-+      0xff, 0xff, 0xf8, 0x30, 0x08, 0xab, 0x48, 0x08, 
-+      0x4e, 0xf8, 0x27, 0x72, 0x76, 0xf8, 0x27, 0x7b, 
-+      0xff, 0xff, 0x76, 0xf8, 0x27, 0x79, 0xff, 0xff, 
-+      0xf2, 0x73, 0x08, 0xd9, 0xf4, 0x95, 0xe8, 0x00, 
-+      0x44, 0xf8, 0x27, 0x73, 0x40, 0xf8, 0x27, 0x75, 
-+      0x82, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0x77, 0x10, 
-+      0x80, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x08, 0xd8, 
-+      0xf6, 0xb8, 0x10, 0xf8, 0x27, 0x73, 0xf0, 0x00, 
-+      0x80, 0x00, 0x48, 0x08, 0x4e, 0xf8, 0x27, 0x74, 
-+      0x48, 0x08, 0xf0, 0xf9, 0x88, 0x11, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x71, 0xe1, 0x27, 0x7c, 0x27, 0x7a, 
-+      0xf7, 0xb8, 0x57, 0xf8, 0x27, 0x74, 0xf0, 0x62, 
-+      0xff, 0xff, 0xf0, 0x40, 0xff, 0x80, 0xf2, 0x80, 
-+      0x4e, 0xf8, 0x27, 0x74, 0xe8, 0x00, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 0xee, 0xfb, 
-+      0x11, 0xf8, 0x27, 0x71, 0x09, 0xf8, 0x27, 0x73, 
-+      0x89, 0x11, 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 
-+      0xf6, 0xa9, 0xf8, 0x20, 0x08, 0xed, 0xf2, 0x73, 
-+      0x09, 0x0e, 0xf4, 0x95, 0xe8, 0x00, 0xf6, 0x20, 
-+      0x76, 0x00, 0x00, 0x41, 0xf0, 0x74, 0x12, 0xee, 
-+      0x88, 0x16, 0xf4, 0x95, 0xf7, 0xb8, 0x6d, 0x96, 
-+      0x10, 0xf8, 0x00, 0x16, 0xf8, 0x47, 0x09, 0x0a, 
-+      0xe7, 0x61, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 
-+      0x00, 0x80, 0x76, 0x02, 0x00, 0xff, 0x76, 0x03, 
-+      0x00, 0x00, 0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95, 
-+      0xe8, 0x00, 0x6c, 0xe9, 0xff, 0xff, 0x08, 0xfb, 
-+      0x73, 0x16, 0x00, 0x0e, 0xf0, 0x66, 0x00, 0x41, 
-+      0xee, 0x05, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x13, 
-+      0xf6, 0xb8, 0x77, 0x11, 0x7f, 0xff, 0x57, 0xf8, 
-+      0x27, 0x72, 0x48, 0x11, 0xf2, 0x80, 0xf0, 0x00, 
-+      0x80, 0x00, 0x88, 0x11, 0xf6, 0x40, 0xf0, 0xe0, 
-+      0xf1, 0xf1, 0xe8, 0x01, 0xf2, 0x80, 0x80, 0xf8, 
-+      0x27, 0x78, 0x77, 0x12, 0x80, 0x00, 0x57, 0xf8, 
-+      0x27, 0x72, 0x48, 0x12, 0xf2, 0x80, 0x88, 0x12, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x82, 0x09, 0x38, 
-+      0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 
-+      0xf0, 0x73, 0x09, 0x3d, 0xf0, 0x20, 0x80, 0x01, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0x70, 0x81, 
-+      0x00, 0x13, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0xf0, 0x30, 0x7f, 0xff, 0x11, 0xf8, 0x29, 0x86, 
-+      0xf5, 0x20, 0xf3, 0x30, 0x7f, 0xff, 0x89, 0x11, 
-+      0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9, 
-+      0xf8, 0x20, 0x09, 0x54, 0xf2, 0x73, 0x09, 0x67, 
-+      0xf4, 0x95, 0xe8, 0x02, 0x6f, 0xf8, 0x27, 0x7a, 
-+      0x0d, 0x20, 0xf3, 0x30, 0x7f, 0xff, 0x89, 0x11, 
-+      0xf4, 0x95, 0x77, 0x10, 0x40, 0x00, 0xf6, 0xa9, 
-+      0xf8, 0x20, 0x09, 0x64, 0xf2, 0x73, 0x09, 0x67, 
-+      0xf4, 0x95, 0xe8, 0x01, 0x80, 0xf8, 0x27, 0x7b, 
-+      0xe8, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0x11, 0xf8, 0x29, 0x86, 0xf5, 0x20, 0xf3, 0x30, 
-+      0x7f, 0xff, 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10, 
-+      0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x09, 0x7a, 
-+      0xf2, 0x73, 0x09, 0x8d, 0xf4, 0x95, 0xe8, 0x02, 
-+      0x6f, 0xf8, 0x27, 0x7a, 0x0d, 0x20, 0xf3, 0x30, 
-+      0x7f, 0xff, 0x89, 0x11, 0xf4, 0x95, 0x77, 0x10, 
-+      0x40, 0x00, 0xf6, 0xa9, 0xf8, 0x20, 0x09, 0x8a, 
-+      0xf2, 0x73, 0x09, 0x8d, 0xf4, 0x95, 0xe8, 0x01, 
-+      0x80, 0xf8, 0x27, 0x79, 0xe8, 0x00, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 
-+      0x00, 0x12, 0x88, 0x11, 0xf6, 0xb8, 0x57, 0xf8, 
-+      0x27, 0x72, 0xf0, 0x20, 0x7f, 0xff, 0xf2, 0x80, 
-+      0xf0, 0x00, 0x80, 0x00, 0x80, 0x81, 0x57, 0xf8, 
-+      0x27, 0x72, 0xe8, 0x01, 0xf3, 0xf1, 0xf2, 0x80, 
-+      0x80, 0xf8, 0x27, 0x78, 0x77, 0x11, 0x80, 0x00, 
-+      0x48, 0x11, 0x57, 0xf8, 0x27, 0x72, 0xf2, 0x80, 
-+      0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 
-+      0x09, 0xb5, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 
-+      0x00, 0x01, 0xf0, 0x73, 0x09, 0xba, 0xf0, 0x20, 
-+      0x80, 0x01, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 
-+      0x45, 0xf8, 0x27, 0x71, 0x43, 0xf8, 0x27, 0x73, 
-+      0x83, 0xf8, 0x00, 0x11, 0xf4, 0x95, 0xe7, 0x20, 
-+      0xf6, 0xa9, 0xf8, 0x30, 0x09, 0xc9, 0xf2, 0x73, 
-+      0x09, 0xe4, 0x77, 0x12, 0x00, 0x00, 0x57, 0xf8, 
-+      0x27, 0x72, 0xf0, 0x20, 0x7f, 0xff, 0xf2, 0x80, 
-+      0x49, 0x12, 0xf5, 0x00, 0xf3, 0x00, 0x80, 0x00, 
-+      0x61, 0xf8, 0x00, 0x0b, 0x80, 0x00, 0xf8, 0x30, 
-+      0x09, 0xdc, 0xf1, 0x20, 0x80, 0x00, 0xf5, 0x20, 
-+      0x89, 0x12, 0xf4, 0x95, 0x48, 0x12, 0x6f, 0xf8, 
-+      0x27, 0x73, 0x0d, 0x00, 0xf4, 0x95, 0x49, 0x0b, 
-+      0x4f, 0xf8, 0x27, 0x72, 0x8a, 0x11, 0xfe, 0x00, 
-+      0x48, 0x12, 0xf4, 0x95, 0x4a, 0x11, 0x4a, 0x16, 
-+      0x4a, 0x17, 0xee, 0xfc, 0xf4, 0x95, 0x71, 0x08, 
-+      0x00, 0x16, 0x88, 0x17, 0xf0, 0x74, 0x08, 0x30, 
-+      0x48, 0x18, 0x70, 0x00, 0x00, 0x16, 0xf2, 0x74, 
-+      0x09, 0x8f, 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 0x0a, 0x0a, 
-+      0xf2, 0x74, 0x08, 0xdb, 0xf4, 0x95, 0x48, 0x16, 
-+      0x48, 0x18, 0x70, 0x00, 0x00, 0x16, 0xf2, 0x74, 
-+      0x09, 0x8f, 0xf0, 0x00, 0x00, 0x02, 0x88, 0x11, 
-+      0x10, 0x02, 0x70, 0x01, 0x00, 0x11, 0x80, 0x00, 
-+      0xf2, 0x74, 0x06, 0xce, 0xf4, 0x95, 0x48, 0x17, 
-+      0x49, 0x11, 0x48, 0x17, 0xf6, 0x00, 0x88, 0x17, 
-+      0xe7, 0x60, 0xf5, 0xa9, 0xf8, 0x20, 0x0a, 0x2d, 
-+      0x48, 0x16, 0xf6, 0x20, 0x88, 0x11, 0x48, 0x18, 
-+      0x70, 0x00, 0x00, 0x11, 0xf2, 0x74, 0x09, 0x8f, 
-+      0xf0, 0x00, 0x00, 0x02, 0x88, 0x11, 0x70, 0x01, 
-+      0x00, 0x11, 0x10, 0x02, 0x80, 0x00, 0xf2, 0x74, 
-+      0x06, 0xce, 0xf4, 0x95, 0x48, 0x17, 0xee, 0x04, 
-+      0x48, 0x16, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 
-+      0xfc, 0x00, 0xee, 0xfd, 0xe8, 0x00, 0x4e, 0xf8, 
-+      0x27, 0x70, 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x72, 
-+      0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x74, 0xe8, 0x00, 
-+      0x4e, 0xf8, 0x27, 0x76, 0x76, 0xf8, 0x27, 0x79, 
-+      0xff, 0xff, 0x76, 0xf8, 0x27, 0x7a, 0x00, 0x00, 
-+      0x76, 0xf8, 0x27, 0x7b, 0xff, 0xff, 0x76, 0xf8, 
-+      0x27, 0x78, 0x00, 0x00, 0xe8, 0x00, 0x75, 0xf8, 
-+      0x00, 0x08, 0x00, 0x01, 0x76, 0x00, 0x00, 0x00, 
-+      0x76, 0x01, 0x02, 0x00, 0xf2, 0x74, 0x12, 0xdc, 
-+      0xf0, 0x20, 0x27, 0x7c, 0xee, 0x03, 0xfc, 0x00, 
-+      0x4a, 0x11, 0xee, 0xfc, 0xf4, 0x95, 0x4e, 0x00, 
-+      0x77, 0x12, 0x7f, 0xff, 0xf6, 0xb8, 0x49, 0x12, 
-+      0xf1, 0x80, 0xf3, 0x00, 0x80, 0x00, 0x89, 0x12, 
-+      0xf0, 0xe0, 0xf1, 0xf1, 0x4f, 0x02, 0xe9, 0x01, 
-+      0xf4, 0x95, 0x48, 0x0b, 0xf5, 0x40, 0x56, 0x02, 
-+      0xf1, 0x80, 0x81, 0xf8, 0x27, 0x78, 0x77, 0x11, 
-+      0x80, 0x00, 0x56, 0x00, 0x49, 0x11, 0xf1, 0x80, 
-+      0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 
-+      0x0a, 0x81, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 
-+      0x00, 0x01, 0xf0, 0x73, 0x0a, 0x86, 0xf0, 0x20, 
-+      0x80, 0x01, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 
-+      0x10, 0x82, 0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0xee, 0xfe, 0xf4, 0x95, 0x4e, 0x00, 
-+      0x77, 0x11, 0x7f, 0xff, 0xf6, 0xb8, 0x49, 0x11, 
-+      0xf1, 0x80, 0xf3, 0x00, 0x80, 0x00, 0x89, 0x11, 
-+      0xf0, 0xe0, 0xf1, 0xf1, 0xe8, 0x01, 0xf2, 0x80, 
-+      0x80, 0xf8, 0x27, 0x78, 0x56, 0x00, 0xf1, 0x20, 
-+      0x80, 0x00, 0xf1, 0x80, 0xf4, 0x95, 0x49, 0x0b, 
-+      0xf8, 0x4d, 0x0a, 0xab, 0xf0, 0x20, 0x80, 0x01, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0xf0, 0x73, 
-+      0x0a, 0xaf, 0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 
-+      0x00, 0x01, 0xee, 0x02, 0x48, 0x11, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0x88, 0x12, 0x13, 0x02, 
-+      0x77, 0x11, 0x00, 0x00, 0xf8, 0x4d, 0x0a, 0xcb, 
-+      0xf3, 0x10, 0x00, 0x01, 0x89, 0x1a, 0xf4, 0x95, 
-+      0xf0, 0x72, 0x0a, 0xca, 0x48, 0x11, 0x1c, 0xf8, 
-+      0x29, 0x7e, 0x88, 0x11, 0x11, 0xf8, 0x29, 0x7e, 
-+      0xf2, 0x00, 0x00, 0x01, 0x80, 0xf8, 0x29, 0x7e, 
-+      0x81, 0x92, 0x48, 0x11, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0xf4, 0x95, 0x71, 0x02, 0x00, 0x11, 
-+      0x88, 0x12, 0xf6, 0xb8, 0xf0, 0x20, 0x7f, 0xff, 
-+      0x57, 0xf8, 0x27, 0x70, 0xf2, 0x80, 0xf0, 0x00, 
-+      0x80, 0x00, 0x80, 0x82, 0x57, 0xf8, 0x27, 0x70, 
-+      0xe8, 0x01, 0xf3, 0xf1, 0xf2, 0x80, 0x80, 0xf8, 
-+      0x27, 0x78, 0x77, 0x12, 0x80, 0x00, 0x48, 0x12, 
-+      0x57, 0xf8, 0x27, 0x70, 0xf2, 0x80, 0x88, 0x12, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x82, 0x0a, 0xf4, 
-+      0xe8, 0x00, 0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 
-+      0xf0, 0x73, 0x0a, 0xf9, 0xf0, 0x20, 0x80, 0x01, 
-+      0x75, 0xf8, 0x00, 0x08, 0x00, 0x01, 0x45, 0xf8, 
-+      0x27, 0x75, 0xe7, 0x10, 0x43, 0xf8, 0x27, 0x71, 
-+      0x83, 0xf8, 0x00, 0x12, 0x6d, 0xe8, 0x00, 0x04, 
-+      0x6d, 0x8a, 0xf6, 0xaa, 0xf8, 0x30, 0x0b, 0x0a, 
-+      0xf2, 0x73, 0x0b, 0x25, 0x77, 0x11, 0x00, 0x00, 
-+      0x57, 0xf8, 0x27, 0x70, 0xf0, 0x20, 0x7f, 0xff, 
-+      0xf2, 0x80, 0x49, 0x11, 0xf5, 0x00, 0xf3, 0x00, 
-+      0x80, 0x00, 0x61, 0xf8, 0x00, 0x0b, 0x80, 0x00, 
-+      0xf8, 0x30, 0x0b, 0x1d, 0xf1, 0x20, 0x80, 0x00, 
-+      0xf5, 0x20, 0x89, 0x11, 0xf4, 0x95, 0x48, 0x11, 
-+      0x6f, 0xf8, 0x27, 0x71, 0x0d, 0x00, 0xf4, 0x95, 
-+      0x49, 0x0b, 0x4f, 0xf8, 0x27, 0x70, 0x48, 0x11, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 
-+      0x4a, 0x17, 0xee, 0xf0, 0x88, 0x17, 0x10, 0x17, 
-+      0x80, 0x05, 0x10, 0x16, 0x80, 0x06, 0x10, 0x15, 
-+      0x80, 0x07, 0x71, 0x14, 0x00, 0x11, 0x10, 0x05, 
-+      0xf0, 0x30, 0x00, 0x01, 0x88, 0x10, 0x10, 0x06, 
-+      0xf0, 0x30, 0x00, 0x01, 0x80, 0x08, 0x49, 0x11, 
-+      0x10, 0x05, 0xf6, 0x01, 0x80, 0x09, 0x10, 0x06, 
-+      0x61, 0xf8, 0x00, 0x08, 0x00, 0x01, 0xf8, 0x20, 
-+      0x0b, 0x4b, 0x10, 0x09, 0xf0, 0x00, 0x00, 0x01, 
-+      0x80, 0x09, 0x71, 0x08, 0x00, 0x12, 0xf4, 0xaa, 
-+      0xf8, 0x30, 0x0b, 0x54, 0x10, 0x09, 0xf0, 0x00, 
-+      0x00, 0x01, 0x80, 0x09, 0x12, 0x09, 0x49, 0x11, 
-+      0xf4, 0x7f, 0x80, 0x09, 0xf6, 0x20, 0x80, 0x0a, 
-+      0x56, 0xf8, 0x27, 0x70, 0x4e, 0x0c, 0x10, 0x09, 
-+      0x80, 0x00, 0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce, 
-+      0xf0, 0x00, 0x00, 0x04, 0x88, 0x16, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x6c, 0x86, 0x0b, 0x6d, 0xf2, 0x73, 
-+      0x0c, 0x59, 0xf4, 0x95, 0xe8, 0x00, 0xf6, 0xb8, 
-+      0xf4, 0x95, 0x56, 0x0c, 0xf0, 0xf9, 0x88, 0x12, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x70, 0xe2, 0x27, 0x7c, 
-+      0x29, 0x86, 0xe8, 0x00, 0x80, 0x0e, 0x48, 0x11, 
-+      0xf8, 0x45, 0x0b, 0xcc, 0x77, 0x10, 0x00, 0x01, 
-+      0xf4, 0xa9, 0xf8, 0x30, 0x0b, 0x89, 0x6c, 0xe1, 
-+      0xff, 0xfd, 0x0b, 0x8b, 0x10, 0xe7, 0x00, 0x02, 
-+      0x80, 0x0e, 0xf0, 0x73, 0x0b, 0x8b, 0x10, 0x87, 
-+      0x80, 0x0e, 0xe7, 0x10, 0xf5, 0xae, 0xf8, 0x20, 
-+      0x0b, 0xb2, 0x70, 0x00, 0x00, 0x17, 0x70, 0x01, 
-+      0x00, 0x16, 0x10, 0x04, 0xf0, 0x74, 0x06, 0xce, 
-+      0x48, 0x17, 0x49, 0x16, 0xf6, 0x00, 0x88, 0x17, 
-+      0x48, 0x11, 0xf6, 0x20, 0x88, 0x11, 0x10, 0x09, 
-+      0xf6, 0x20, 0x80, 0x00, 0x48, 0x18, 0xf2, 0x74, 
-+      0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x16, 
-+      0x10, 0x04, 0x70, 0x00, 0x00, 0x17, 0x70, 0x01, 
-+      0x00, 0x11, 0xf0, 0x74, 0x06, 0xce, 0x48, 0x11, 
-+      0x00, 0x04, 0x80, 0x04, 0xf0, 0x73, 0x0b, 0xbc, 
-+      0x70, 0x00, 0x00, 0x17, 0x70, 0x01, 0x00, 0x11, 
-+      0x10, 0x04, 0xf0, 0x74, 0x06, 0xce, 0x48, 0x11, 
-+      0x00, 0x04, 0x80, 0x04, 0x49, 0x11, 0x48, 0x16, 
-+      0xf6, 0x20, 0x88, 0x16, 0xf4, 0x95, 0xf4, 0x95, 
-+      0x6c, 0x86, 0x0b, 0xcc, 0x10, 0x0a, 0x80, 0x00, 
-+      0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00, 
-+      0x00, 0x04, 0x88, 0x16, 0x12, 0x0a, 0xf8, 0x45, 
-+      0x0c, 0x33, 0x71, 0x0a, 0x00, 0x10, 0xf4, 0xae, 
-+      0xf8, 0x30, 0x0c, 0x1c, 0x48, 0x16, 0xf0, 0xe1, 
-+      0x88, 0x11, 0x12, 0x08, 0xf8, 0x45, 0x0b, 0xdb, 
-+      0x6d, 0x89, 0x12, 0x07, 0xf8, 0x45, 0x0b, 0xe9, 
-+      0x10, 0x07, 0x80, 0x00, 0x70, 0x02, 0x00, 0x11, 
-+      0x10, 0x06, 0x80, 0x01, 0x10, 0x04, 0xf0, 0x74, 
-+      0x06, 0xdc, 0xf0, 0x73, 0x0b, 0xef, 0x48, 0x11, 
-+      0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04, 0xf0, 0x74, 
-+      0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0, 0x81, 0x0e, 
-+      0x10, 0x06, 0x49, 0x11, 0xf6, 0x00, 0x80, 0x06, 
-+      0x10, 0x05, 0xf6, 0x20, 0x88, 0x11, 0xf0, 0x00, 
-+      0x00, 0x01, 0x48, 0x08, 0x6f, 0x00, 0x0c, 0x9f, 
-+      0x48, 0x18, 0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00, 
-+      0x00, 0x04, 0x12, 0x07, 0xf8, 0x45, 0x0c, 0x11, 
-+      0x10, 0x07, 0x80, 0x00, 0x70, 0x02, 0x00, 0x11, 
-+      0x10, 0x06, 0x80, 0x01, 0x10, 0x04, 0xf0, 0x74, 
-+      0x06, 0xdc, 0xf0, 0x73, 0x0c, 0x17, 0x48, 0x11, 
-+      0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04, 0xf0, 0x74, 
-+      0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0, 0x81, 0x0e, 
-+      0xf0, 0x73, 0x0c, 0x33, 0x12, 0x07, 0xf8, 0x45, 
-+      0x0c, 0x2a, 0x10, 0x07, 0x80, 0x00, 0x10, 0x06, 
-+      0x80, 0x01, 0x10, 0x05, 0x80, 0x02, 0x10, 0x04, 
-+      0xf0, 0x74, 0x06, 0xdc, 0xf0, 0x73, 0x0c, 0x30, 
-+      0x12, 0x05, 0x6f, 0x00, 0x0c, 0x9f, 0x10, 0x04, 
-+      0xf0, 0x74, 0x0a, 0xb3, 0x11, 0x0e, 0xf1, 0xc0, 
-+      0x81, 0x0e, 0x76, 0x00, 0x00, 0x01, 0x48, 0x18, 
-+      0xf2, 0x74, 0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04, 
-+      0x71, 0x04, 0x00, 0x11, 0x70, 0x81, 0x29, 0x86, 
-+      0x10, 0x0e, 0x1c, 0xf8, 0x29, 0x86, 0x80, 0x0e, 
-+      0x76, 0x00, 0x00, 0x01, 0x48, 0x18, 0xf2, 0x74, 
-+      0x0a, 0xce, 0xf0, 0x00, 0x00, 0x04, 0x10, 0x0e, 
-+      0x71, 0x04, 0x00, 0x11, 0x80, 0x81, 0x10, 0xf8, 
-+      0x29, 0x86, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x30, 
-+      0x7f, 0xff, 0x80, 0xf8, 0x29, 0x86, 0x10, 0x09, 
-+      0xf0, 0x00, 0x00, 0x02, 0x80, 0x09, 0xee, 0x10, 
-+      0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x10, 0xf8, 0x27, 0x75, 0x08, 0xf8, 0x27, 0x71, 
-+      0xf0, 0x10, 0x00, 0x01, 0x48, 0x08, 0xfc, 0x00, 
-+      0x4a, 0x11, 0x4a, 0x16, 0xee, 0xff, 0xf4, 0x95, 
-+      0x71, 0x04, 0x00, 0x16, 0xf0, 0x00, 0x00, 0x01, 
-+      0x48, 0x08, 0x4e, 0xf8, 0x29, 0x7c, 0x6d, 0xee, 
-+      0xff, 0xfd, 0x48, 0x16, 0xf8, 0x45, 0x0c, 0x99, 
-+      0x56, 0xf8, 0x29, 0x7c, 0xf0, 0x74, 0x0a, 0x5a, 
-+      0x88, 0x11, 0x10, 0xf8, 0x29, 0x7d, 0xf0, 0x00, 
-+      0x00, 0x01, 0x48, 0x08, 0x4e, 0xf8, 0x29, 0x7c, 
-+      0x10, 0xf8, 0x29, 0x82, 0xf0, 0x00, 0x00, 0x01, 
-+      0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xa9, 
-+      0xfa, 0x30, 0x0c, 0x96, 0x80, 0xf8, 0x29, 0x82, 
-+      0x56, 0xf8, 0x29, 0x80, 0xf0, 0x00, 0x00, 0x01, 
-+      0x4e, 0xf8, 0x29, 0x80, 0x73, 0x11, 0x29, 0x82, 
-+      0x6c, 0xee, 0xff, 0xff, 0x0c, 0x76, 0xee, 0x01, 
-+      0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0x76, 0xf8, 0x29, 0x84, 0x00, 0x00, 0x76, 0xf8, 
-+      0x29, 0x85, 0x00, 0x01, 0xe8, 0x00, 0x4e, 0xf8, 
-+      0x2a, 0x0c, 0x76, 0xf8, 0x29, 0x86, 0x00, 0x00, 
-+      0x76, 0xf8, 0x29, 0x87, 0x00, 0x00, 0x77, 0x11, 
-+      0x29, 0x88, 0x76, 0x81, 0xaa, 0xaa, 0x76, 0xe1, 
-+      0x00, 0x01, 0xaa, 0xaa, 0x76, 0xe1, 0x00, 0x02, 
-+      0x00, 0x00, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0xee, 0xfc, 0xf4, 0x95, 0x71, 0x06, 0x00, 0x14, 
-+      0x71, 0x07, 0x00, 0x13, 0x71, 0x08, 0x00, 0x12, 
-+      0x71, 0x09, 0x00, 0x15, 0x77, 0x10, 0x00, 0xff, 
-+      0xf4, 0xaa, 0xf8, 0x30, 0x0d, 0x44, 0x49, 0x13, 
-+      0x53, 0xf8, 0x2a, 0x0c, 0x4f, 0xf8, 0x2a, 0x0c, 
-+      0x73, 0x12, 0x00, 0x0e, 0xf1, 0x66, 0x00, 0x0d, 
-+      0x89, 0x11, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x01, 
-+      0x71, 0xe1, 0x24, 0x00, 0x00, 0x11, 0xf4, 0xa9, 
-+      0xf8, 0x30, 0x0d, 0x17, 0x77, 0x10, 0x00, 0x02, 
-+      0xf4, 0xa9, 0xf8, 0x30, 0x0c, 0xec, 0x77, 0x11, 
-+      0x29, 0x8a, 0x76, 0x81, 0x00, 0x00, 0xe8, 0x00, 
-+      0x77, 0x14, 0x00, 0x00, 0x77, 0x13, 0x00, 0x00, 
-+      0xf0, 0x73, 0x0d, 0x48, 0x6c, 0x83, 0x0c, 0xfa, 
-+      0x77, 0x11, 0x29, 0x8a, 0x48, 0x12, 0xf0, 0xe8, 
-+      0xf0, 0x40, 0x80, 0x00, 0x80, 0x81, 0xe8, 0x00, 
-+      0x77, 0x14, 0x00, 0x00, 0xf0, 0x73, 0x0d, 0x48, 
-+      0x49, 0x13, 0xf3, 0x40, 0x80, 0x00, 0x81, 0xf8, 
-+      0x29, 0x8a, 0x61, 0xf8, 0x00, 0x15, 0x00, 0x01, 
-+      0xf8, 0x20, 0x0d, 0x07, 0x69, 0xf8, 0x29, 0x8a, 
-+      0x40, 0x00, 0x61, 0xf8, 0x00, 0x14, 0x00, 0x01, 
-+      0xf8, 0x20, 0x0d, 0x0f, 0x69, 0xf8, 0x29, 0x8a, 
-+      0x20, 0x00, 0x77, 0x11, 0x29, 0x8a, 0x49, 0x12, 
-+      0xf3, 0xe8, 0x1b, 0x81, 0x81, 0x81, 0xf0, 0x73, 
-+      0x0d, 0x48, 0x11, 0xf8, 0x29, 0x84, 0xf8, 0x4c, 
-+      0x0d, 0x37, 0x77, 0x11, 0x29, 0x88, 0x76, 0x81, 
-+      0xaa, 0xaa, 0x11, 0xf8, 0x29, 0x85, 0xf3, 0x10, 
-+      0x00, 0x01, 0xf3, 0x40, 0xaa, 0x00, 0x81, 0xe1, 
-+      0x00, 0x01, 0x76, 0x00, 0x00, 0x02, 0x80, 0x01, 
-+      0x70, 0x02, 0x00, 0x14, 0x70, 0x03, 0x00, 0x13, 
-+      0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 0x48, 0x11, 
-+      0x71, 0xf8, 0x29, 0x85, 0x29, 0x84, 0xf0, 0x73, 
-+      0x0d, 0x73, 0x76, 0x00, 0x00, 0x00, 0x80, 0x01, 
-+      0x76, 0x02, 0x00, 0x00, 0x70, 0x03, 0x00, 0x13, 
-+      0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 0xe8, 0x00, 
-+      0xf0, 0x73, 0x0d, 0x73, 0x77, 0x11, 0x29, 0x8a, 
-+      0x70, 0x81, 0x00, 0x13, 0x11, 0xf8, 0x29, 0x84, 
-+      0xf8, 0x4c, 0x0d, 0x68, 0x77, 0x11, 0x29, 0x88, 
-+      0x76, 0x81, 0xaa, 0xaa, 0x11, 0xf8, 0x29, 0x85, 
-+      0xf3, 0x10, 0x00, 0x01, 0xf3, 0x40, 0xaa, 0x00, 
-+      0x81, 0xe1, 0x00, 0x01, 0x76, 0x00, 0x00, 0x03, 
-+      0x80, 0x01, 0x70, 0x02, 0x00, 0x14, 0x70, 0x03, 
-+      0x00, 0x13, 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 
-+      0x48, 0x11, 0x71, 0xf8, 0x29, 0x85, 0x29, 0x84, 
-+      0xf0, 0x73, 0x0d, 0x73, 0x76, 0x00, 0x00, 0x01, 
-+      0x80, 0x01, 0x70, 0x02, 0x00, 0x14, 0x70, 0x03, 
-+      0x00, 0x13, 0xf2, 0x74, 0x0b, 0x28, 0xf4, 0x95, 
-+      0x48, 0x11, 0x6b, 0xf8, 0x29, 0x84, 0xff, 0xff, 
-+      0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0xf5, 0x40, 0xf4, 0x95, 0x48, 0x0b, 0xf4, 0x78, 
-+      0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0xe1, 
-+      0xff, 0xb9, 0x0d, 0x88, 0xf2, 0x73, 0x0d, 0xa5, 
-+      0xf4, 0x95, 0xe8, 0x60, 0xf2, 0x00, 0x00, 0x06, 
-+      0x61, 0xf8, 0x00, 0x11, 0x00, 0x20, 0xf8, 0x30, 
-+      0x0d, 0x98, 0x61, 0xf8, 0x00, 0x0b, 0x00, 0x01, 
-+      0xf8, 0x20, 0x0d, 0xa3, 0xf2, 0x00, 0x00, 0x07, 
-+      0xf0, 0x73, 0x0d, 0xa3, 0x61, 0xf8, 0x00, 0x0b, 
-+      0x00, 0x01, 0xf8, 0x20, 0x0d, 0xa1, 0xf2, 0x73, 
-+      0x0d, 0xa3, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00, 
-+      0x00, 0x02, 0x48, 0x08, 0xf4, 0x7f, 0x8a, 0x11, 
-+      0xfc, 0x00, 0xee, 0xff, 0xf0, 0x74, 0x07, 0xfd, 
-+      0xf0, 0x74, 0x07, 0x44, 0xf0, 0x74, 0x0d, 0xb4, 
-+      0xf0, 0x74, 0x02, 0x05, 0xf0, 0x74, 0x04, 0x60, 
-+      0xf0, 0x73, 0x0d, 0xaa, 0xee, 0xfd, 0x10, 0xf8, 
-+      0x2a, 0xa3, 0xf8, 0x44, 0x0d, 0xcb, 0x10, 0xf8, 
-+      0x2a, 0xa4, 0xf8, 0x45, 0x0d, 0xd7, 0x76, 0x00, 
-+      0x02, 0x00, 0xf2, 0x74, 0x09, 0xe8, 0xf0, 0x20, 
-+      0x22, 0x00, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x00, 
-+      0x76, 0xf8, 0x2a, 0xa7, 0x00, 0x00, 0xf0, 0x73, 
-+      0x0d, 0xd7, 0x76, 0x00, 0x02, 0x00, 0xf2, 0x74, 
-+      0x09, 0xe8, 0xf0, 0x20, 0x20, 0x00, 0x76, 0xf8, 
-+      0x2a, 0xa3, 0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa7, 
-+      0x00, 0x01, 0xf0, 0x74, 0x0c, 0x5e, 0xf0, 0xe0, 
-+      0xf0, 0x10, 0x3a, 0x98, 0xf8, 0x47, 0x0d, 0xe1, 
-+      0x76, 0xf8, 0x27, 0x6e, 0x00, 0x00, 0xee, 0x03, 
-+      0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 0x77, 0x11, 
-+      0x20, 0x00, 0x76, 0x00, 0xaa, 0xaa, 0x76, 0x01, 
-+      0x02, 0x00, 0xf2, 0x74, 0x06, 0x6c, 0xf4, 0x95, 
-+      0x48, 0x11, 0x76, 0x00, 0x55, 0x55, 0x76, 0x01, 
-+      0x02, 0x00, 0x48, 0x11, 0xf2, 0x74, 0x06, 0x6c, 
-+      0xf0, 0x00, 0x02, 0x00, 0x76, 0xf8, 0x2a, 0xa3, 
-+      0x00, 0x00, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x00, 
-+      0xe8, 0x00, 0x4e, 0x00, 0xfb, 0x80, 0x15, 0x3e, 
-+      0xf4, 0x95, 0xe8, 0x04, 0x80, 0xf8, 0x2a, 0xa5, 
-+      0x76, 0x00, 0x2a, 0xa8, 0xf9, 0x80, 0x14, 0x87, 
-+      0x76, 0x00, 0x2a, 0xad, 0xfb, 0x80, 0x13, 0x62, 
-+      0xf4, 0x95, 0xe8, 0x02, 0x10, 0xf8, 0x2a, 0xa5, 
-+      0xf9, 0x80, 0x14, 0x63, 0xfb, 0x80, 0x16, 0x66, 
-+      0xf4, 0x95, 0xe8, 0x1c, 0xfb, 0x80, 0x16, 0x87, 
-+      0xf4, 0x95, 0xe8, 0x1c, 0xe8, 0x01, 0x4e, 0x00, 
-+      0xfb, 0x80, 0x17, 0xd6, 0xf4, 0x95, 0xe8, 0x00, 
-+      0x80, 0xf8, 0x2a, 0xa6, 0x76, 0x00, 0x2a, 0xb7, 
-+      0xf9, 0x80, 0x16, 0xaa, 0x10, 0xf8, 0x2a, 0xa6, 
-+      0xf9, 0x80, 0x17, 0x5c, 0x10, 0xf8, 0x2a, 0xa6, 
-+      0xf9, 0x80, 0x17, 0x6f, 0xee, 0x02, 0x8a, 0x11, 
-+      0xfc, 0x00, 0xf4, 0x95, 0x4a, 0x08, 0x4a, 0x09, 
-+      0x4a, 0x0a, 0x4a, 0x07, 0x4a, 0x1d, 0x68, 0xf8, 
-+      0x00, 0x07, 0x7d, 0x3f, 0x69, 0xf8, 0x00, 0x07, 
-+      0x40, 0x00, 0x68, 0xf8, 0x00, 0x1d, 0xff, 0xfc, 
-+      0x10, 0xf8, 0x2a, 0xa7, 0xf8, 0x44, 0x0e, 0x4b, 
-+      0x76, 0xf8, 0x2a, 0xa3, 0x00, 0x01, 0xf0, 0x73, 
-+      0x0e, 0x4e, 0x76, 0xf8, 0x2a, 0xa4, 0x00, 0x01, 
-+      0x8a, 0x1d, 0x8a, 0x07, 0x8a, 0x0a, 0x8a, 0x09, 
-+      0x8a, 0x08, 0xf4, 0xeb, 0x4a, 0x11, 0x4a, 0x16, 
-+      0x4a, 0x17, 0xee, 0xfe, 0x88, 0x0e, 0x71, 0x08, 
-+      0x00, 0x16, 0x71, 0x06, 0x00, 0x17, 0x11, 0x07, 
-+      0xf0, 0x66, 0x00, 0x0d, 0xf0, 0x00, 0x25, 0xa0, 
-+      0x88, 0x11, 0x76, 0x01, 0x00, 0x06, 0x81, 0x00, 
-+      0xf2, 0x74, 0x06, 0xce, 0xf0, 0x00, 0x00, 0x01, 
-+      0x76, 0x01, 0x00, 0x06, 0x70, 0x00, 0x00, 0x16, 
-+      0x48, 0x11, 0xf2, 0x74, 0x06, 0xce, 0xf0, 0x00, 
-+      0x00, 0x07, 0x70, 0x81, 0x00, 0x17, 0xee, 0x02, 
-+      0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xfc, 0x00, 
-+      0x4a, 0x11, 0x88, 0x0e, 0x71, 0x02, 0x00, 0x12, 
-+      0x11, 0x03, 0xf0, 0x66, 0x00, 0x0d, 0xf0, 0x00, 
-+      0x24, 0x00, 0x88, 0x11, 0xf4, 0x95, 0x70, 0x81, 
-+      0x00, 0x12, 0x6e, 0xe2, 0xff, 0xfe, 0x0e, 0x8d, 
-+      0xf4, 0x95, 0xe8, 0x00, 0xe8, 0x01, 0x80, 0xe1, 
-+      0x00, 0x02, 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff, 
-+      0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1, 
-+      0x00, 0x0b, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0c, 
-+      0x00, 0x00, 0x81, 0xe1, 0x00, 0x01, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfc, 0x88, 0x0e, 
-+      0xf4, 0x95, 0xf1, 0x66, 0x00, 0x0d, 0xf3, 0x00, 
-+      0x24, 0x00, 0x89, 0x11, 0xf4, 0x95, 0xf4, 0x95, 
-+      0x76, 0xe1, 0x00, 0x0c, 0x00, 0x00, 0x76, 0xe1, 
-+      0x00, 0x0b, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02, 
-+      0x00, 0x01, 0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 
-+      0x00, 0x00, 0x80, 0x02, 0x76, 0x03, 0x00, 0x00, 
-+      0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95, 0xe8, 0x00, 
-+      0xee, 0x04, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0x88, 0x19, 0xf4, 0x95, 0x73, 0x19, 0x00, 0x0e, 
-+      0xf1, 0x66, 0x00, 0x0d, 0xf2, 0x00, 0x24, 0x00, 
-+      0x77, 0x15, 0x25, 0xa0, 0x77, 0x14, 0x00, 0x00, 
-+      0x77, 0x1a, 0x00, 0x1f, 0xf0, 0x72, 0x0f, 0x14, 
-+      0xf6, 0xb8, 0x49, 0x19, 0x09, 0x85, 0xf8, 0x4c, 
-+      0x0f, 0x13, 0xf1, 0x00, 0x00, 0x05, 0x89, 0x11, 
-+      0x49, 0x15, 0xf3, 0x00, 0x00, 0x01, 0x89, 0x13, 
-+      0x49, 0x15, 0xf3, 0x00, 0x00, 0x07, 0x89, 0x12, 
-+      0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13, 
-+      0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13, 
-+      0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13, 
-+      0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13, 
-+      0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x10, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x80, 0x0f, 0x13, 
-+      0x11, 0x93, 0x1d, 0x91, 0x19, 0x92, 0x89, 0x11, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x6c, 0x81, 0x0f, 0x13, 
-+      0x6d, 0x94, 0x6d, 0xed, 0x00, 0x0d, 0x48, 0x14, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 
-+      0x4a, 0x17, 0xee, 0xf8, 0x88, 0x17, 0x10, 0x0d, 
-+      0x80, 0x04, 0x10, 0x0c, 0x80, 0x05, 0x71, 0x0e, 
-+      0x00, 0x16, 0x73, 0x17, 0x00, 0x0e, 0xf0, 0x66, 
-+      0x00, 0x0d, 0xf0, 0x00, 0x24, 0x00, 0x88, 0x11, 
-+      0x10, 0xf8, 0x27, 0x63, 0xf8, 0x45, 0x0f, 0x32, 
-+      0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17, 
-+      0x10, 0xf8, 0x27, 0x60, 0xf8, 0x44, 0x0f, 0x3d, 
-+      0x60, 0xe1, 0x00, 0x02, 0x00, 0x01, 0xf8, 0x20, 
-+      0x0f, 0x6d, 0xf0, 0x73, 0x11, 0x33, 0x10, 0x04, 
-+      0x80, 0x00, 0x10, 0x05, 0xf0, 0x74, 0x06, 0x9f, 
-+      0x11, 0x04, 0xf3, 0x00, 0x00, 0x01, 0x81, 0x04, 
-+      0x6d, 0x8e, 0x77, 0x10, 0x00, 0x01, 0x71, 0xe1, 
-+      0x00, 0x02, 0x00, 0x12, 0xf4, 0xaa, 0xf8, 0x30, 
-+      0x0f, 0x62, 0x77, 0x10, 0x00, 0x02, 0xf4, 0xaa, 
-+      0xf8, 0x30, 0x0f, 0x6d, 0x45, 0xe1, 0x00, 0x0b, 
-+      0x88, 0x10, 0x43, 0xe1, 0x00, 0x0c, 0x83, 0xf8, 
-+      0x00, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xaa, 
-+      0xf8, 0x30, 0x0f, 0x6d, 0xf0, 0x73, 0x0f, 0x96, 
-+      0xf5, 0x00, 0x81, 0x04, 0x49, 0x16, 0xf5, 0x20, 
-+      0x89, 0x16, 0x76, 0xe1, 0x00, 0x0c, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x48, 0x16, 
-+      0xf8, 0x45, 0x11, 0x33, 0xf7, 0xb8, 0x71, 0xe1, 
-+      0x00, 0x02, 0x00, 0x12, 0x10, 0xf8, 0x00, 0x12, 
-+      0xf0, 0x10, 0x00, 0x03, 0xf8, 0x46, 0x0f, 0x8c, 
-+      0x10, 0xf8, 0x00, 0x12, 0xf0, 0x10, 0x00, 0x03, 
-+      0xf8, 0x45, 0x10, 0x16, 0x77, 0x10, 0x00, 0x01, 
-+      0xf4, 0xaa, 0xf8, 0x30, 0x0f, 0x9c, 0x77, 0x10, 
-+      0x00, 0x02, 0xf4, 0xaa, 0xf8, 0x30, 0x0f, 0xa8, 
-+      0xf0, 0x73, 0x0f, 0x96, 0x77, 0x10, 0x00, 0x04, 
-+      0xf4, 0xaa, 0xf8, 0x30, 0x10, 0xb7, 0x77, 0x10, 
-+      0x00, 0x05, 0xf4, 0xaa, 0xf8, 0x30, 0x10, 0xbc, 
-+      0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17, 
-+      0xf0, 0x73, 0x11, 0x31, 0x76, 0xe1, 0x00, 0x0c, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 0x76, 0xe1, 
-+      0x00, 0x02, 0x00, 0x02, 0x11, 0xe1, 0x00, 0x0c, 
-+      0xe8, 0x03, 0xf6, 0x20, 0x89, 0x12, 0xf4, 0x95, 
-+      0x77, 0x10, 0x00, 0x03, 0xf5, 0xaa, 0xf8, 0x30, 
-+      0x0f, 0xb6, 0x6b, 0xf8, 0x27, 0x6f, 0x00, 0x01, 
-+      0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 0xf5, 0xae, 
-+      0xf8, 0x20, 0x0f, 0xbd, 0x48, 0x16, 0x80, 0x06, 
-+      0x88, 0x13, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x03, 
-+      0xf6, 0xab, 0xf8, 0x20, 0x0f, 0xc8, 0x6b, 0xf8, 
-+      0x27, 0x6f, 0x00, 0x01, 0x12, 0x06, 0xf8, 0x45, 
-+      0x10, 0x00, 0x10, 0xe1, 0x00, 0x04, 0x80, 0x00, 
-+      0x10, 0x05, 0x80, 0x01, 0x10, 0x04, 0x80, 0x02, 
-+      0x10, 0x06, 0x80, 0x03, 0x48, 0x11, 0xf2, 0x74, 
-+      0x07, 0x1e, 0xf0, 0x00, 0x00, 0x05, 0x10, 0x06, 
-+      0x00, 0xe1, 0x00, 0x04, 0x80, 0xe1, 0x00, 0x04, 
-+      0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1, 
-+      0x00, 0x0c, 0x88, 0x12, 0x11, 0x06, 0x10, 0x04, 
-+      0xf6, 0x00, 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20, 
-+      0x88, 0x16, 0x89, 0x13, 0xf4, 0x95, 0x77, 0x10, 
-+      0x00, 0x03, 0xf6, 0xab, 0xf8, 0x20, 0x0f, 0xf5, 
-+      0x6b, 0xf8, 0x27, 0x6f, 0x00, 0x01, 0x77, 0x10, 
-+      0x00, 0x0c, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x13, 
-+      0xf6, 0xab, 0xf8, 0x20, 0x10, 0x00, 0x6b, 0xf8, 
-+      0x27, 0x6f, 0x00, 0x01, 0x6c, 0xe2, 0xff, 0xfd, 
-+      0x11, 0x31, 0xf6, 0xb8, 0x6f, 0xe1, 0x00, 0x05, 
-+      0x0c, 0x48, 0x6f, 0xe1, 0x00, 0x06, 0x0c, 0x18, 
-+      0xf0, 0x30, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x03, 
-+      0x80, 0xe1, 0x00, 0x0b, 0x76, 0xe1, 0x00, 0x02, 
-+      0x00, 0x03, 0x48, 0x16, 0xf8, 0x45, 0x11, 0x33, 
-+      0x71, 0xe1, 0x00, 0x0c, 0x00, 0x12, 0x10, 0xe1, 
-+      0x00, 0x0b, 0x49, 0x12, 0xf6, 0x20, 0x88, 0x13, 
-+      0xe8, 0x0c, 0xf6, 0x20, 0x88, 0x10, 0xf4, 0x95, 
-+      0xf4, 0x95, 0xf5, 0xab, 0xf8, 0x20, 0x10, 0x27, 
-+      0x48, 0x13, 0x80, 0x06, 0x88, 0x10, 0xf4, 0x95, 
-+      0xf4, 0x95, 0xf5, 0xae, 0xf8, 0x20, 0x10, 0x30, 
-+      0x70, 0x06, 0x00, 0x16, 0x12, 0x06, 0xf8, 0x45, 
-+      0x10, 0x5f, 0x10, 0xe1, 0x00, 0x04, 0x80, 0x00, 
-+      0x10, 0x05, 0x80, 0x01, 0x10, 0x04, 0x80, 0x02, 
-+      0x10, 0x06, 0x80, 0x03, 0x48, 0x11, 0xf2, 0x74, 
-+      0x07, 0x1e, 0xf0, 0x00, 0x00, 0x05, 0x10, 0x06, 
-+      0x00, 0xe1, 0x00, 0x04, 0x80, 0xe1, 0x00, 0x04, 
-+      0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1, 
-+      0x00, 0x0c, 0x88, 0x12, 0x11, 0x06, 0x10, 0x04, 
-+      0xf6, 0x00, 0x80, 0x04, 0x48, 0x16, 0xf6, 0x20, 
-+      0x88, 0x16, 0xf4, 0x95, 0x77, 0x10, 0x00, 0x0c, 
-+      0x71, 0xe1, 0x00, 0x04, 0x00, 0x13, 0xf6, 0xab, 
-+      0xf8, 0x20, 0x10, 0x5f, 0x6b, 0xf8, 0x27, 0x6f, 
-+      0x00, 0x01, 0x77, 0x10, 0x00, 0x0c, 0xf6, 0xaa, 
-+      0xf8, 0x20, 0x10, 0x6b, 0xf2, 0x74, 0x0e, 0x9f, 
-+      0xf4, 0x95, 0x48, 0x17, 0x71, 0xe1, 0x00, 0x0c, 
-+      0x00, 0x12, 0x77, 0x10, 0x00, 0x0c, 0xf4, 0xaa, 
-+      0xf8, 0x30, 0x10, 0x7c, 0x77, 0x10, 0x00, 0x0c, 
-+      0x71, 0xe1, 0x00, 0x0b, 0x00, 0x13, 0xf6, 0xab, 
-+      0xf8, 0x30, 0x10, 0xb4, 0xe7, 0x30, 0xf7, 0xaa, 
-+      0xf8, 0x30, 0x10, 0xb4, 0xf2, 0x74, 0x0e, 0xc1, 
-+      0xf4, 0x95, 0x48, 0x17, 0x88, 0x12, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x6c, 0x82, 0x10, 0x8d, 0x76, 0xe1, 
-+      0x00, 0x04, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02, 
-+      0x00, 0x05, 0xf0, 0x73, 0x10, 0xb4, 0x76, 0xe1, 
-+      0x00, 0x02, 0x00, 0x04, 0x77, 0x10, 0x00, 0x0c, 
-+      0x71, 0xe1, 0x00, 0x0b, 0x00, 0x12, 0xf5, 0xaa, 
-+      0xf8, 0x20, 0x10, 0x9a, 0xf0, 0x73, 0x10, 0x9c, 
-+      0x77, 0x12, 0x00, 0x0c, 0x76, 0x00, 0x00, 0x00, 
-+      0x70, 0x01, 0x00, 0x12, 0x70, 0x02, 0x00, 0x17, 
-+      0x76, 0x03, 0x00, 0x01, 0x48, 0x11, 0xf2, 0x74, 
-+      0x0c, 0xb9, 0xf0, 0x00, 0x00, 0x05, 0x76, 0xe1, 
-+      0x00, 0x04, 0x00, 0x00, 0x77, 0x10, 0x00, 0x0c, 
-+      0x71, 0xe1, 0x00, 0x0b, 0x00, 0x12, 0xf6, 0xaa, 
-+      0xf8, 0x20, 0x11, 0x1c, 0x48, 0x16, 0xf8, 0x45, 
-+      0x11, 0x33, 0x60, 0xe1, 0x00, 0x02, 0x00, 0x05, 
-+      0xf8, 0x20, 0x10, 0xdf, 0x10, 0xe1, 0x00, 0x0b, 
-+      0x08, 0xe1, 0x00, 0x0c, 0x11, 0xe1, 0x00, 0x04, 
-+      0xf8, 0x4d, 0x10, 0xc7, 0x6b, 0xf8, 0x27, 0x6f, 
-+      0x00, 0x01, 0x88, 0x10, 0xf4, 0x95, 0xf4, 0x95, 
-+      0xf5, 0xae, 0xf8, 0x20, 0x10, 0xcf, 0x48, 0x16, 
-+      0xf4, 0x95, 0x48, 0x08, 0xf8, 0x45, 0x11, 0x16, 
-+      0x6f, 0xe1, 0x00, 0x0c, 0x0d, 0x00, 0x81, 0xe1, 
-+      0x00, 0x0c, 0x11, 0x04, 0xf5, 0x00, 0x81, 0x04, 
-+      0x49, 0x16, 0xf5, 0x20, 0x89, 0x16, 0xf0, 0x73, 
-+      0x11, 0x0e, 0x10, 0xe1, 0x00, 0x0b, 0x71, 0xe1, 
-+      0x00, 0x0c, 0x00, 0x12, 0x88, 0x10, 0xf4, 0x95, 
-+      0xf4, 0x95, 0xf6, 0xaa, 0xf8, 0x30, 0x11, 0x16, 
-+      0x49, 0x12, 0xf6, 0x20, 0x88, 0x10, 0xf4, 0x95, 
-+      0xf4, 0x95, 0xf5, 0xae, 0xf8, 0x20, 0x10, 0xf3, 
-+      0x48, 0x16, 0x80, 0x06, 0x48, 0x08, 0xf8, 0x45, 
-+      0x11, 0x16, 0x10, 0x04, 0x70, 0x02, 0x00, 0x17, 
-+      0x80, 0x00, 0x76, 0x03, 0x00, 0x00, 0x10, 0x06, 
-+      0x80, 0x01, 0x10, 0x05, 0xf0, 0x74, 0x0c, 0xb9, 
-+      0x10, 0x06, 0x00, 0xe1, 0x00, 0x0c, 0x80, 0xe1, 
-+      0x00, 0x0c, 0x11, 0x06, 0x10, 0x04, 0xf6, 0x00, 
-+      0x80, 0x04, 0x48, 0x16, 0xf6, 0x20, 0x88, 0x16, 
-+      0x10, 0xe1, 0x00, 0x0c, 0x08, 0xe1, 0x00, 0x0b, 
-+      0xf8, 0x45, 0x11, 0x1c, 0xf0, 0x73, 0x11, 0x31, 
-+      0xf2, 0x74, 0x0e, 0x9f, 0xf4, 0x95, 0x48, 0x17, 
-+      0xf0, 0x73, 0x11, 0x33, 0x76, 0xe1, 0x00, 0x0c, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0x02, 0x00, 0x01, 0x10, 0x04, 
-+      0x80, 0x00, 0x10, 0x05, 0xf0, 0x74, 0x06, 0x9f, 
-+      0x88, 0x12, 0xf4, 0x95, 0x77, 0x10, 0x00, 0xff, 
-+      0xf4, 0xaa, 0xf8, 0x30, 0x11, 0x33, 0x6c, 0x86, 
-+      0x0f, 0x70, 0xee, 0x08, 0x8a, 0x17, 0x8a, 0x16, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfc, 
-+      0xf4, 0x95, 0x71, 0x06, 0x00, 0x12, 0x88, 0x11, 
-+      0x73, 0x12, 0x00, 0x0e, 0xf1, 0x66, 0x00, 0x0d, 
-+      0xf3, 0x00, 0x24, 0x00, 0x89, 0x14, 0x13, 0x81, 
-+      0xf7, 0x7a, 0xf3, 0x30, 0x00, 0x01, 0x81, 0xf8, 
-+      0x27, 0x60, 0x13, 0xe1, 0x00, 0x01, 0xf7, 0x7c, 
-+      0xf3, 0x30, 0x00, 0x03, 0x81, 0xf8, 0x27, 0x61, 
-+      0xe9, 0x0f, 0x19, 0xe1, 0x00, 0x01, 0x81, 0xf8, 
-+      0x27, 0x62, 0x71, 0xe4, 0x00, 0x03, 0x00, 0x13, 
-+      0xf6, 0xb8, 0x49, 0x13, 0xf3, 0x00, 0x00, 0x01, 
-+      0xf3, 0x30, 0x00, 0x0f, 0x49, 0x0b, 0x09, 0xf8, 
-+      0x27, 0x62, 0xf8, 0x4d, 0x11, 0x75, 0x77, 0x10, 
-+      0x00, 0xff, 0xf4, 0xab, 0xf8, 0x30, 0x11, 0x75, 
-+      0x57, 0xf8, 0x27, 0x6c, 0xf3, 0x00, 0x00, 0x01, 
-+      0x4f, 0xf8, 0x27, 0x6c, 0x76, 0xf8, 0x27, 0x63, 
-+      0x00, 0x01, 0xf0, 0x73, 0x11, 0x78, 0x76, 0xf8, 
-+      0x27, 0x63, 0x00, 0x00, 0x70, 0xe4, 0x00, 0x03, 
-+      0x27, 0x62, 0x76, 0xf8, 0x27, 0x64, 0x00, 0x00, 
-+      0x11, 0xf8, 0x27, 0x61, 0x61, 0xf8, 0x00, 0x0b, 
-+      0x00, 0x02, 0xf8, 0x20, 0x11, 0x8d, 0xe9, 0x01, 
-+      0x6f, 0xe1, 0x00, 0x02, 0x0f, 0x18, 0x81, 0xf8, 
-+      0x27, 0x64, 0x11, 0xf8, 0x27, 0x61, 0x61, 0xf8, 
-+      0x00, 0x0b, 0x00, 0x01, 0xf8, 0x20, 0x11, 0xa9, 
-+      0x10, 0xf8, 0x27, 0x64, 0xf1, 0x00, 0x00, 0x04, 
-+      0x89, 0x13, 0xe9, 0xb8, 0xf5, 0x20, 0x81, 0xf8, 
-+      0x27, 0x65, 0x60, 0x84, 0x00, 0x02, 0xf8, 0x20, 
-+      0x11, 0xa9, 0x70, 0x00, 0x00, 0x11, 0x70, 0x01, 
-+      0x00, 0x13, 0x70, 0x02, 0x27, 0x65, 0xf2, 0x74, 
-+      0x0f, 0x18, 0xf4, 0x95, 0x48, 0x12, 0xee, 0x04, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 
-+      0x4a, 0x17, 0xee, 0xfc, 0xe8, 0x00, 0x4e, 0xf8, 
-+      0x27, 0x66, 0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x68, 
-+      0xe8, 0x00, 0x4e, 0xf8, 0x27, 0x6c, 0xe8, 0x00, 
-+      0x4e, 0xf8, 0x27, 0x6a, 0x77, 0x12, 0x27, 0x40, 
-+      0x77, 0x11, 0x24, 0x00, 0x77, 0x1a, 0x00, 0x1f, 
-+      0xf0, 0x72, 0x11, 0xdb, 0x70, 0x92, 0x00, 0x11, 
-+      0x76, 0xe1, 0x00, 0x01, 0xff, 0xff, 0x76, 0x81, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x02, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0x03, 0x00, 0xff, 0x76, 0xe1, 
-+      0x00, 0x0c, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 
-+      0x6d, 0xe9, 0x00, 0x0d, 0xf0, 0x20, 0x25, 0xa0, 
-+      0xf1, 0x00, 0x00, 0x07, 0x89, 0x11, 0xf1, 0x00, 
-+      0x00, 0x01, 0x81, 0x02, 0x88, 0x16, 0xf4, 0x95, 
-+      0x77, 0x17, 0x00, 0x20, 0x76, 0x86, 0x00, 0xff, 
-+      0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 
-+      0x10, 0x02, 0xf0, 0x74, 0x06, 0x6c, 0x76, 0x00, 
-+      0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0xf2, 0x74, 
-+      0x06, 0x6c, 0xf4, 0x95, 0x48, 0x11, 0x10, 0x02, 
-+      0xf0, 0x00, 0x00, 0x0d, 0x80, 0x02, 0x6d, 0xe9, 
-+      0x00, 0x0d, 0x6d, 0xee, 0x00, 0x0d, 0x6c, 0xef, 
-+      0xff, 0xff, 0x11, 0xe8, 0xf0, 0x74, 0x0c, 0x9d, 
-+      0xee, 0x04, 0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 
-+      0xfc, 0x00, 0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 
-+      0xee, 0xfa, 0x88, 0x11, 0x10, 0x0a, 0x49, 0x11, 
-+      0xf8, 0x4d, 0x12, 0x9f, 0x48, 0x08, 0xf8, 0x45, 
-+      0x12, 0x9f, 0x80, 0x04, 0x12, 0x81, 0xf5, 0x78, 
-+      0x89, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x6c, 0xe2, 
-+      0xff, 0xb9, 0x12, 0x8a, 0x61, 0xf8, 0x00, 0x08, 
-+      0x00, 0x80, 0xf8, 0x30, 0x12, 0x8a, 0x13, 0xe1, 
-+      0x00, 0x01, 0xf0, 0xe8, 0xf7, 0x78, 0xf1, 0xa0, 
-+      0xf2, 0x30, 0x1f, 0xff, 0x88, 0x17, 0xf4, 0x95, 
-+      0x77, 0x12, 0x24, 0x00, 0x77, 0x16, 0x00, 0x00, 
-+      0x77, 0x13, 0x00, 0x20, 0xf6, 0xb8, 0x48, 0x17, 
-+      0x08, 0xe2, 0x00, 0x01, 0xf8, 0x45, 0x12, 0x42, 
-+      0x6d, 0xea, 0x00, 0x0d, 0x6d, 0x96, 0x6c, 0xeb, 
-+      0xff, 0xff, 0x12, 0x34, 0xf0, 0x73, 0x12, 0x90, 
-+      0x56, 0xf8, 0x27, 0x6a, 0xf0, 0x00, 0x00, 0x01, 
-+      0x4e, 0xf8, 0x27, 0x6a, 0x60, 0x82, 0x00, 0x01, 
-+      0xf8, 0x30, 0x12, 0x54, 0x70, 0x00, 0x00, 0x16, 
-+      0xf2, 0x74, 0x11, 0x38, 0xf4, 0x95, 0x48, 0x11, 
-+      0xf0, 0x73, 0x12, 0x90, 0x70, 0x00, 0x00, 0x16, 
-+      0xf2, 0x74, 0x11, 0x38, 0xf4, 0x95, 0x48, 0x11, 
-+      0x72, 0x10, 0x2a, 0x9e, 0xf4, 0x95, 0xf4, 0xaf, 
-+      0xf8, 0x30, 0x12, 0x6e, 0x76, 0x00, 0x00, 0x00, 
-+      0x76, 0x01, 0x00, 0xbc, 0x70, 0x02, 0x00, 0x16, 
-+      0x76, 0x03, 0x00, 0x00, 0xf2, 0x74, 0x0c, 0xb9, 
-+      0xf4, 0x95, 0x48, 0x11, 0xf0, 0x73, 0x12, 0x90, 
-+      0x10, 0xf8, 0x27, 0x6e, 0xf8, 0x44, 0x12, 0x90, 
-+      0x76, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0xbc, 
-+      0x70, 0x02, 0x00, 0x16, 0x76, 0x03, 0x00, 0x00, 
-+      0xf2, 0x74, 0x0c, 0xb9, 0xf4, 0x95, 0x48, 0x11, 
-+      0xf0, 0x74, 0x0c, 0x5e, 0xf0, 0xe0, 0xf0, 0x10, 
-+      0x13, 0x88, 0xf8, 0x42, 0x12, 0x90, 0x76, 0xf8, 
-+      0x27, 0x6e, 0x00, 0x01, 0xf0, 0x73, 0x12, 0x90, 
-+      0x56, 0xf8, 0x27, 0x66, 0xf0, 0x00, 0x00, 0x01, 
-+      0x4e, 0xf8, 0x27, 0x66, 0x6d, 0xe9, 0x00, 0x5e, 
-+      0x56, 0xf8, 0x27, 0x68, 0xf0, 0x00, 0x00, 0x01, 
-+      0x4e, 0xf8, 0x27, 0x68, 0x71, 0x04, 0x00, 0x12, 
-+      0x6e, 0xea, 0xff, 0xff, 0x12, 0x18, 0x70, 0x04, 
-+      0x00, 0x12, 0xee, 0x06, 0x8a, 0x17, 0x8a, 0x16, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xee, 0xfe, 
-+      0x88, 0x0e, 0xf4, 0x95, 0xf0, 0x66, 0x00, 0x0d, 
-+      0xf0, 0x00, 0x25, 0xa0, 0x88, 0x11, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x76, 0x81, 0x00, 0xff, 0x76, 0x00, 
-+      0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0xf2, 0x74, 
-+      0x06, 0x6c, 0xf0, 0x00, 0x00, 0x01, 0x76, 0x00, 
-+      0x00, 0x00, 0x76, 0x01, 0x00, 0x06, 0x48, 0x11, 
-+      0xf2, 0x74, 0x06, 0x6c, 0xf0, 0x00, 0x00, 0x07, 
-+      0xee, 0x02, 0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 
-+      0x88, 0x0e, 0xf4, 0x95, 0xf0, 0x66, 0x00, 0x0d, 
-+      0xf0, 0x00, 0x24, 0x00, 0x88, 0x11, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x76, 0xe1, 0x00, 0x01, 0xff, 0xff, 
-+      0x76, 0x81, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x03, 0x00, 0xff, 
-+      0x8a, 0x11, 0xfc, 0x00, 0x4a, 0x11, 0xf4, 0x95, 
-+      0x13, 0x03, 0x88, 0x11, 0xfa, 0x4d, 0x12, 0xec, 
-+      0x71, 0x02, 0x00, 0x12, 0xf3, 0x10, 0x00, 0x01, 
-+      0x89, 0x1a, 0xf4, 0x95, 0xf0, 0x72, 0x12, 0xeb, 
-+      0x70, 0x91, 0x00, 0x12, 0x8a, 0x11, 0xfc, 0x00, 
-+      0xf4, 0x95, 0x4a, 0x0b, 0x4a, 0x0c, 0x4a, 0x0d, 
-+      0xf7, 0xb8, 0xee, 0xfe, 0x10, 0xf8, 0x00, 0x08, 
-+      0x11, 0x06, 0xf1, 0xc0, 0x83, 0x00, 0xf4, 0x85, 
-+      0x11, 0x06, 0xf7, 0x85, 0x81, 0x06, 0xf6, 0xb8, 
-+      0xec, 0x0f, 0x1e, 0x06, 0x61, 0x00, 0x80, 0x00, 
-+      0xf8, 0x20, 0x13, 0x05, 0xf4, 0x84, 0xee, 0x02, 
-+      0x8a, 0x0d, 0x8a, 0x0c, 0x8a, 0x0b, 0xfc, 0x00, 
-+      0xf4, 0x95, 0x4a, 0x0b, 0x4a, 0x0c, 0x4a, 0x0d, 
-+      0xee, 0xfe, 0xf7, 0xb8, 0x80, 0x00, 0x10, 0xf8, 
-+      0x00, 0x08, 0xf4, 0x85, 0x11, 0x06, 0xf7, 0x85, 
-+      0x81, 0x06, 0xf6, 0xb8, 0xec, 0x0f, 0x1e, 0x06, 
-+      0xf0, 0xf0, 0x61, 0x00, 0x80, 0x00, 0xf8, 0x20, 
-+      0x13, 0x20, 0xf4, 0x84, 0xee, 0x02, 0x8a, 0x0d, 
-+      0x8a, 0x0c, 0x8a, 0x0b, 0xfc, 0x00, 0x4a, 0x11, 
-+      0x77, 0x11, 0x00, 0x7b, 0x76, 0x81, 0x2e, 0xec, 
-+      0x77, 0x11, 0x00, 0x7b, 0xee, 0xff, 0x71, 0x81, 
-+      0x00, 0x11, 0xee, 0x01, 0x76, 0xe1, 0x00, 0x01, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x04, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0x06, 0x00, 0x00, 0x76, 0xe1, 
-+      0x00, 0x62, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x76, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x92, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0x94, 0x00, 0x00, 0x76, 0xe1, 
-+      0x00, 0xb0, 0x00, 0x00, 0x76, 0xe1, 0x00, 0xb3, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0xbe, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0xbf, 0x00, 0x00, 0x76, 0xe1, 
-+      0x00, 0xc1, 0x00, 0x00, 0x76, 0xe1, 0x00, 0xc3, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0xc5, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0xc7, 0x00, 0x00, 0x76, 0x81, 
-+      0x00, 0x00, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4, 
-+      0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xff, 
-+      0xf4, 0x95, 0x71, 0x06, 0x00, 0x16, 0xfb, 0x80, 
-+      0x16, 0xa2, 0x88, 0x17, 0xf4, 0x95, 0xf7, 0xb8, 
-+      0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x02, 
-+      0xfa, 0x46, 0x13, 0x88, 0x77, 0x11, 0x00, 0x00, 
-+      0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x02, 
-+      0xf8, 0x45, 0x13, 0xf9, 0x10, 0xf8, 0x00, 0x17, 
-+      0xf8, 0x45, 0x14, 0x39, 0x10, 0xf8, 0x00, 0x17, 
-+      0xf0, 0x10, 0x00, 0x01, 0xf8, 0x45, 0x14, 0x1f, 
-+      0xf0, 0x73, 0x14, 0x52, 0x10, 0xf8, 0x00, 0x17, 
-+      0xf0, 0x10, 0x00, 0x03, 0xf8, 0x45, 0x13, 0xd3, 
-+      0x10, 0xf8, 0x00, 0x17, 0xf0, 0x10, 0x00, 0x06, 
-+      0xf8, 0x44, 0x14, 0x52, 0x77, 0x12, 0x00, 0x7b, 
-+      0x71, 0x82, 0x00, 0x14, 0x61, 0xe4, 0x00, 0x07, 
-+      0x00, 0x40, 0xf8, 0x30, 0x14, 0x52, 0x49, 0x14, 
-+      0x48, 0x17, 0xf6, 0x00, 0x88, 0x12, 0xf4, 0x95, 
-+      0x77, 0x13, 0x00, 0x55, 0x77, 0x11, 0x00, 0x57, 
-+      0x6d, 0xea, 0x00, 0x3b, 0xe5, 0x01, 0x10, 0xe6, 
-+      0x00, 0x06, 0x80, 0x81, 0x48, 0x14, 0x00, 0xf8, 
-+      0x00, 0x17, 0x88, 0x12, 0xf4, 0x95, 0x77, 0x11, 
-+      0x00, 0x55, 0x10, 0xe2, 0x00, 0x40, 0x80, 0x81, 
-+      0x77, 0x11, 0x00, 0x57, 0x10, 0xe6, 0x00, 0x07, 
-+      0x80, 0x81, 0x77, 0x11, 0x00, 0x55, 0x10, 0xe2, 
-+      0x00, 0x45, 0x80, 0x81, 0x10, 0xe6, 0x00, 0x08, 
-+      0x77, 0x11, 0x00, 0x57, 0x80, 0x81, 0x77, 0x11, 
-+      0x00, 0x55, 0x10, 0xe2, 0x00, 0x4a, 0x80, 0x81, 
-+      0x77, 0x11, 0x00, 0x57, 0x10, 0xe6, 0x00, 0x09, 
-+      0x80, 0x81, 0xf2, 0x73, 0x14, 0x52, 0x77, 0x11, 
-+      0x03, 0xc0, 0x77, 0x12, 0x00, 0x7b, 0x10, 0x82, 
-+      0xf0, 0x00, 0x00, 0x07, 0x88, 0x13, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x96, 0x1b, 0xf8, 0x30, 0x14, 0x52, 
-+      0x10, 0xe3, 0x00, 0x35, 0x77, 0x12, 0x00, 0x55, 
-+      0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6, 
-+      0x00, 0x04, 0x80, 0x82, 0x77, 0x12, 0x00, 0x55, 
-+      0x10, 0xe3, 0x00, 0x37, 0x80, 0x82, 0x77, 0x12, 
-+      0x00, 0x57, 0x10, 0xe6, 0x00, 0x05, 0x80, 0x82, 
-+      0x48, 0x11, 0xf0, 0x40, 0x00, 0x10, 0xf2, 0x73, 
-+      0x14, 0x50, 0xf0, 0x40, 0x00, 0x20, 0x77, 0x12, 
-+      0x00, 0x7b, 0x10, 0x82, 0xf0, 0x00, 0x00, 0x07, 
-+      0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x96, 0x0d, 
-+      0xf8, 0x30, 0x14, 0x52, 0x10, 0xe2, 0x00, 0x34, 
-+      0x77, 0x13, 0x00, 0x55, 0x80, 0x83, 0x77, 0x13, 
-+      0x00, 0x57, 0x10, 0xe6, 0x00, 0x02, 0x80, 0x83, 
-+      0x10, 0xe2, 0x00, 0x36, 0x77, 0x12, 0x00, 0x55, 
-+      0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6, 
-+      0x00, 0x03, 0x80, 0x82, 0x48, 0x11, 0xf0, 0x40, 
-+      0x00, 0x04, 0xf2, 0x73, 0x14, 0x50, 0xf0, 0x40, 
-+      0x00, 0x08, 0x77, 0x12, 0x00, 0x7b, 0x10, 0x82, 
-+      0xf0, 0x00, 0x00, 0x07, 0x88, 0x12, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x96, 0x0e, 0xf8, 0x30, 0x14, 0x52, 
-+      0x10, 0xe2, 0x00, 0x33, 0x77, 0x12, 0x00, 0x55, 
-+      0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0x10, 0xe6, 
-+      0x00, 0x01, 0x80, 0x82, 0x48, 0x11, 0xf2, 0x73, 
-+      0x14, 0x50, 0xf0, 0x40, 0x00, 0x02, 0x77, 0x12, 
-+      0x00, 0x7b, 0x10, 0x82, 0xf0, 0x00, 0x00, 0x07, 
-+      0x88, 0x12, 0xf4, 0x95, 0xf4, 0x95, 0x96, 0x0f, 
-+      0xf8, 0x30, 0x14, 0x52, 0x10, 0xe2, 0x00, 0x32, 
-+      0x77, 0x12, 0x00, 0x55, 0x77, 0x13, 0x00, 0x57, 
-+      0x80, 0x82, 0x48, 0x11, 0xe7, 0x62, 0xf0, 0x40, 
-+      0x00, 0x01, 0xe5, 0x01, 0x88, 0x11, 0xf4, 0x95, 
-+      0x77, 0x12, 0x00, 0x7b, 0x48, 0x11, 0x71, 0x82, 
-+      0x00, 0x12, 0x1a, 0xe2, 0x00, 0x07, 0x80, 0xe2, 
-+      0x00, 0x07, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 
-+      0x8a, 0x17, 0x48, 0x11, 0x8a, 0x16, 0x8a, 0x11, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0x77, 0x0e, 
-+      0x00, 0x05, 0x77, 0x12, 0x00, 0x55, 0xe8, 0x04, 
-+      0xf6, 0xb8, 0x28, 0xe1, 0x00, 0x02, 0xee, 0xff, 
-+      0x80, 0x82, 0x77, 0x12, 0x00, 0x57, 0xf0, 0x20, 
-+      0x80, 0x00, 0xee, 0x01, 0x1a, 0x82, 0x77, 0x12, 
-+      0x00, 0x57, 0x80, 0x82, 0xe8, 0x01, 0x32, 0xe1, 
-+      0x00, 0x02, 0xf5, 0x82, 0x77, 0x11, 0x00, 0x54, 
-+      0xf6, 0x93, 0x18, 0x81, 0x77, 0x11, 0x00, 0x54, 
-+      0xf2, 0xa0, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95, 
-+      0x71, 0x04, 0x00, 0x11, 0xfb, 0x80, 0x16, 0xa2, 
-+      0x88, 0x16, 0xf4, 0x95, 0x77, 0x12, 0x00, 0x55, 
-+      0x10, 0xe6, 0x00, 0x03, 0x80, 0x82, 0x77, 0x12, 
-+      0x00, 0x56, 0x10, 0xe1, 0x00, 0x02, 0x77, 0x13, 
-+      0x00, 0x56, 0x80, 0x82, 0x77, 0x12, 0x00, 0x56, 
-+      0x10, 0xe1, 0x00, 0x03, 0x80, 0x82, 0x10, 0xe1, 
-+      0x00, 0x04, 0x77, 0x12, 0x00, 0x56, 0x80, 0x82, 
-+      0x77, 0x12, 0x00, 0x56, 0x10, 0xe1, 0x00, 0x01, 
-+      0x80, 0x82, 0xe7, 0x12, 0xe5, 0x01, 0xf9, 0x80, 
-+      0x16, 0x9a, 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4, 
-+      0x4a, 0x11, 0x4a, 0x16, 0x4a, 0x17, 0xee, 0xf9, 
-+      0x77, 0x11, 0x00, 0x7b, 0x76, 0x00, 0x00, 0x16, 
-+      0x76, 0x01, 0x00, 0x17, 0x76, 0x02, 0x00, 0x1a, 
-+      0x76, 0x03, 0x00, 0x1b, 0x76, 0x04, 0x00, 0x1c, 
-+      0x76, 0x05, 0x00, 0x1d, 0x71, 0x81, 0x00, 0x17, 
-+      0x71, 0xe7, 0x00, 0x06, 0x00, 0x11, 0x10, 0x81, 
-+      0xf8, 0x44, 0x14, 0xdf, 0xf9, 0x80, 0x16, 0x53, 
-+      0xf6, 0xb8, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x20, 
-+      0xff, 0xff, 0xf6, 0xb8, 0xfb, 0x80, 0x16, 0x08, 
-+      0xf0, 0x20, 0xff, 0xff, 0x77, 0x11, 0x00, 0x7b, 
-+      0x71, 0x81, 0x00, 0x17, 0x76, 0xe7, 0x00, 0x06, 
-+      0x00, 0x01, 0x48, 0x17, 0x77, 0x16, 0x00, 0x00, 
-+      0x77, 0x10, 0x00, 0x04, 0x77, 0x15, 0x00, 0x03, 
-+      0x77, 0x14, 0x00, 0x02, 0x77, 0x13, 0x00, 0x01, 
-+      0xf0, 0x00, 0x00, 0x39, 0x76, 0xe7, 0x00, 0x08, 
-+      0x00, 0x1f, 0x76, 0xe7, 0x00, 0x07, 0x00, 0x00, 
-+      0x88, 0x0e, 0x77, 0x1a, 0x00, 0x05, 0x48, 0x17, 
-+      0xf0, 0x00, 0x00, 0x09, 0x88, 0x12, 0x48, 0x18, 
-+      0x88, 0x19, 0xe8, 0x00, 0xf0, 0x72, 0x15, 0x2c, 
-+      0x73, 0x19, 0x00, 0x11, 0x76, 0x82, 0x00, 0x00, 
-+      0x11, 0x91, 0x73, 0x11, 0x00, 0x19, 0x70, 0xe2, 
-+      0x00, 0x03, 0x00, 0x16, 0x70, 0xe2, 0x00, 0x04, 
-+      0x00, 0x13, 0x70, 0xe2, 0x00, 0x05, 0x00, 0x14, 
-+      0x81, 0xe2, 0x00, 0x01, 0x70, 0xe2, 0x00, 0x06, 
-+      0x00, 0x15, 0x70, 0xe2, 0x00, 0x07, 0x00, 0x10, 
-+      0x80, 0xe2, 0x00, 0x02, 0x73, 0x0e, 0x00, 0x11, 
-+      0xf1, 0x00, 0x00, 0x1e, 0x6d, 0xee, 0x00, 0x05, 
-+      0x6d, 0xeb, 0x00, 0x05, 0x6d, 0xec, 0x00, 0x05, 
-+      0x6d, 0xed, 0x00, 0x05, 0x6d, 0xe8, 0x00, 0x05, 
-+      0xf0, 0x00, 0x00, 0x01, 0x81, 0x91, 0x6d, 0xea, 
-+      0x00, 0x08, 0x73, 0x11, 0x00, 0x0e, 0xee, 0x07, 
-+      0x76, 0xe7, 0x00, 0x41, 0x00, 0x24, 0x76, 0xe7, 
-+      0x00, 0x46, 0x00, 0x25, 0x76, 0xe7, 0x00, 0x4b, 
-+      0x00, 0x26, 0x76, 0xe7, 0x00, 0x50, 0x00, 0x27, 
-+      0x8a, 0x17, 0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4, 
-+      0x4a, 0x11, 0x4a, 0x16, 0xee, 0xfe, 0x88, 0x11, 
-+      0x56, 0x06, 0x4e, 0x00, 0xf9, 0x80, 0x16, 0xa2, 
-+      0xf7, 0xb8, 0x10, 0xf8, 0x00, 0x11, 0xf0, 0x10, 
-+      0xff, 0xff, 0xfa, 0x45, 0x15, 0x60, 0x77, 0x16, 
-+      0xff, 0xff, 0x77, 0x12, 0x00, 0x7b, 0x49, 0x11, 
-+      0x10, 0x82, 0xf6, 0x03, 0xf0, 0x00, 0x00, 0x09, 
-+      0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 
-+      0xf8, 0x44, 0x15, 0x71, 0xf2, 0x73, 0x15, 0x71, 
-+      0xf4, 0x95, 0xe7, 0x16, 0x77, 0x11, 0x00, 0x7b, 
-+      0x10, 0x81, 0xf0, 0x00, 0x00, 0x09, 0x88, 0x11, 
-+      0xf4, 0x95, 0x77, 0x12, 0x00, 0x06, 0x10, 0x81, 
-+      0xf8, 0x45, 0x15, 0x5c, 0x6e, 0xea, 0xff, 0xff, 
-+      0x15, 0x69, 0x6d, 0xe9, 0x00, 0x08, 0x76, 0x86, 
-+      0x00, 0x01, 0xe9, 0x01, 0x56, 0x00, 0xf1, 0x80, 
-+      0x10, 0xf8, 0x00, 0x0b, 0xf8, 0x45, 0x15, 0x7e, 
-+      0xfb, 0x80, 0x15, 0x85, 0xf4, 0x95, 0x48, 0x16, 
-+      0xf9, 0x80, 0x16, 0x9a, 0xee, 0x02, 0x48, 0x16, 
-+      0x8a, 0x16, 0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11, 
-+      0xee, 0xff, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 
-+      0xf4, 0x95, 0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9, 
-+      0xf8, 0x30, 0x15, 0xc4, 0x10, 0xe1, 0x00, 0x03, 
-+      0x77, 0x12, 0x00, 0x55, 0x80, 0x82, 0x77, 0x12, 
-+      0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12, 
-+      0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12, 
-+      0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12, 
-+      0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x77, 0x12, 
-+      0x00, 0x56, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1, 
-+      0x00, 0x02, 0xf0, 0x00, 0x00, 0x08, 0x32, 0xf8, 
-+      0x00, 0x08, 0x77, 0x12, 0x00, 0x54, 0xe8, 0x01, 
-+      0xf4, 0x82, 0xf4, 0x93, 0x18, 0x82, 0x77, 0x12, 
-+      0x00, 0x54, 0xf0, 0x40, 0x00, 0x00, 0x80, 0x82, 
-+      0x10, 0xe1, 0x00, 0x01, 0xf9, 0x80, 0x16, 0x76, 
-+      0x10, 0xe1, 0x00, 0x01, 0xf9, 0x80, 0x16, 0x66, 
-+      0xf0, 0x73, 0x16, 0x03, 0x77, 0x11, 0x00, 0x7b, 
-+      0x71, 0x81, 0x00, 0x11, 0x71, 0xe1, 0x00, 0x07, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1, 
-+      0x00, 0x09, 0xf9, 0x80, 0x15, 0x85, 0x77, 0x11, 
-+      0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1, 
-+      0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00, 
-+      0x00, 0x08, 0x77, 0x11, 0x00, 0x7b, 0x71, 0x81, 
-+      0x00, 0x11, 0x10, 0xe1, 0x00, 0x09, 0xfb, 0x80, 
-+      0x15, 0x85, 0xf0, 0x00, 0x00, 0x10, 0x77, 0x11, 
-+      0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1, 
-+      0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00, 
-+      0x00, 0x18, 0x77, 0x11, 0x00, 0x7b, 0x71, 0x81, 
-+      0x00, 0x11, 0x10, 0xe1, 0x00, 0x09, 0xfb, 0x80, 
-+      0x15, 0x85, 0xf0, 0x00, 0x00, 0x20, 0x77, 0x11, 
-+      0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x10, 0xe1, 
-+      0x00, 0x09, 0xfb, 0x80, 0x15, 0x85, 0xf0, 0x00, 
-+      0x00, 0x28, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 
-+      0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff, 
-+      0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95, 
-+      0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30, 
-+      0x16, 0x41, 0x77, 0x11, 0x00, 0x55, 0x76, 0x81, 
-+      0x00, 0x1e, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0x76, 0x81, 
-+      0x00, 0x00, 0x77, 0x11, 0x00, 0x56, 0xf2, 0x73, 
-+      0x16, 0x4e, 0x76, 0x81, 0x00, 0x00, 0x77, 0x11, 
-+      0x00, 0x7b, 0x71, 0x81, 0x00, 0x11, 0x71, 0xe1, 
-+      0x00, 0x07, 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 
-+      0x10, 0xe1, 0x00, 0x39, 0xf9, 0x80, 0x16, 0x08, 
-+      0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0x77, 0x11, 0x00, 0x7b, 
-+      0x10, 0x81, 0xf0, 0x00, 0x00, 0x04, 0x88, 0x11, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xfa, 0x44, 
-+      0x16, 0x63, 0xf4, 0x95, 0xee, 0xff, 0x76, 0x81, 
-+      0x00, 0x01, 0xee, 0x01, 0x8a, 0x11, 0xf4, 0xe4, 
-+      0xf0, 0x10, 0x00, 0x10, 0x4a, 0x11, 0x32, 0xf8, 
-+      0x00, 0x08, 0xee, 0xff, 0x77, 0x11, 0x00, 0x01, 
-+      0xe8, 0x01, 0xee, 0x01, 0xf4, 0x82, 0x1a, 0x81, 
-+      0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4, 
-+      0xf0, 0x10, 0x00, 0x10, 0x4a, 0x11, 0x32, 0xf8, 
-+      0x00, 0x08, 0xee, 0xff, 0xe8, 0x01, 0x77, 0x11, 
-+      0x00, 0x00, 0xf4, 0x82, 0xee, 0x01, 0xf4, 0x93, 
-+      0x18, 0x81, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0xf0, 0x10, 0x00, 0x10, 
-+      0x77, 0x11, 0x00, 0x00, 0x32, 0xf8, 0x00, 0x08, 
-+      0xee, 0xff, 0x11, 0x81, 0xe8, 0x01, 0xee, 0x01, 
-+      0x77, 0x11, 0x00, 0x00, 0xf4, 0x82, 0xf2, 0xa0, 
-+      0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4, 
-+      0xf2, 0x73, 0x16, 0x9e, 0xf6, 0xbb, 0xf4, 0x95, 
-+      0xf4, 0x95, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xe4, 
-+      0xf2, 0x73, 0x16, 0xa6, 0xf7, 0xbb, 0xf4, 0x95, 
-+      0xf4, 0x95, 0xf4, 0x95, 0xf4, 0x95, 0xf4, 0xe4, 
-+      0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95, 0x71, 0x04, 
-+      0x00, 0x16, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 
-+      0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x0e, 0x10, 0xe6, 0x00, 0x0e, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 
-+      0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x0d, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 
-+      0x10, 0xe6, 0x00, 0x0d, 0x80, 0x82, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0c, 
-+      0x10, 0xe6, 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x0b, 0x10, 0xe6, 
-+      0x00, 0x0b, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 
-+      0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x0a, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x10, 0xe6, 0x00, 0x0a, 0x80, 0x82, 
-+      0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x09, 0x10, 0xe6, 0x00, 0x09, 0x71, 0xe1, 
-+      0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x08, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6, 
-+      0x00, 0x08, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x07, 0x10, 0xe6, 
-+      0x00, 0x07, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 
-+      0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x06, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x10, 0xe6, 0x00, 0x06, 0x80, 0x82, 
-+      0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x05, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 
-+      0x10, 0xe6, 0x00, 0x05, 0x80, 0x82, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x04, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x10, 0xe6, 
-+      0x00, 0x04, 0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x03, 0x71, 0xe1, 
-+      0x00, 0x06, 0x00, 0x12, 0x10, 0xe6, 0x00, 0x03, 
-+      0x80, 0x82, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x02, 0x10, 0xe6, 0x00, 0x02, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 
-+      0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x01, 0x10, 0xe6, 0x00, 0x01, 0x71, 0xe1, 
-+      0x00, 0x06, 0x00, 0x12, 0x80, 0x82, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x13, 0xe7, 0x62, 
-+      0xe5, 0x01, 0xf9, 0x80, 0x16, 0x9a, 0x8a, 0x16, 
-+      0x8a, 0x11, 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05, 
-+      0x00, 0x12, 0xee, 0xff, 0x76, 0x82, 0x00, 0x00, 
-+      0xee, 0x01, 0x71, 0xe1, 0x00, 0x06, 0x00, 0x11, 
-+      0x69, 0x81, 0x00, 0x01, 0x8a, 0x11, 0xf4, 0x95, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0xee, 0xff, 0x76, 0x82, 0x00, 0x01, 0xee, 0x01, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x11, 0x69, 0x81, 
-+      0x00, 0x01, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4, 
-+      0x4a, 0x11, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 
-+      0xf0, 0x00, 0x00, 0x94, 0x88, 0x11, 0xf4, 0x95, 
-+      0xf4, 0x95, 0x10, 0x81, 0xfa, 0x44, 0x17, 0x9c, 
-+      0xf4, 0x95, 0xee, 0xff, 0xf9, 0x80, 0x16, 0x53, 
-+      0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 0xf0, 0x00, 
-+      0x00, 0x94, 0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 
-+      0x76, 0x81, 0x00, 0x01, 0xee, 0x01, 0x76, 0xe1, 
-+      0x00, 0x01, 0x00, 0x00, 0x76, 0xe1, 0x00, 0x02, 
-+      0x00, 0x21, 0x76, 0xe1, 0x00, 0x03, 0x00, 0x20, 
-+      0x76, 0xe1, 0x00, 0x04, 0x00, 0x23, 0x76, 0xe1, 
-+      0x00, 0x05, 0x00, 0x22, 0x76, 0xe1, 0x00, 0x06, 
-+      0x00, 0x38, 0x76, 0xe1, 0x00, 0x07, 0x00, 0x39, 
-+      0x76, 0xe1, 0x00, 0x08, 0x00, 0x15, 0x76, 0xe1, 
-+      0x00, 0x09, 0x00, 0x14, 0x76, 0xe1, 0x00, 0x0a, 
-+      0x00, 0x00, 0x76, 0xe1, 0x00, 0x0b, 0x00, 0x41, 
-+      0x76, 0xe1, 0x00, 0x0c, 0x00, 0x40, 0x76, 0xe1, 
-+      0x00, 0x0d, 0x00, 0x43, 0x76, 0xe1, 0x00, 0x0e, 
-+      0x00, 0x42, 0x76, 0xe1, 0x00, 0x0f, 0x00, 0x48, 
-+      0x76, 0xe1, 0x00, 0x10, 0x00, 0x49, 0x76, 0xe1, 
-+      0x00, 0x11, 0x00, 0x1b, 0x76, 0xe1, 0x00, 0x12, 
-+      0x00, 0x1a, 0x8a, 0x11, 0xf4, 0x95, 0xf4, 0xe4, 
-+      0x4a, 0x11, 0xee, 0xfd, 0x88, 0x11, 0x56, 0x06, 
-+      0x4e, 0x00, 0xf9, 0x80, 0x16, 0xa2, 0x77, 0x12, 
-+      0x00, 0x7b, 0x77, 0x0e, 0x00, 0x09, 0x10, 0x82, 
-+      0x28, 0xf8, 0x00, 0x11, 0xf0, 0x00, 0x00, 0x95, 
-+      0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 
-+      0xf8, 0x45, 0x17, 0xf0, 0xf2, 0x73, 0x17, 0xfd, 
-+      0x77, 0x11, 0xff, 0xff, 0x76, 0x81, 0x00, 0x01, 
-+      0xe9, 0x01, 0x56, 0x00, 0xf1, 0x80, 0x10, 0xf8, 
-+      0x00, 0x0b, 0xf8, 0x45, 0x17, 0xfd, 0xfb, 0x80, 
-+      0x18, 0x10, 0xf4, 0x95, 0x48, 0x11, 0xf9, 0x80, 
-+      0x16, 0x9a, 0xee, 0x03, 0x48, 0x11, 0x8a, 0x11, 
-+      0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 
-+      0xf4, 0x95, 0xee, 0xff, 0x71, 0xe1, 0x00, 0x01, 
-+      0x00, 0x11, 0xee, 0x01, 0x10, 0x81, 0x8a, 0x11, 
-+      0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff, 
-+      0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95, 
-+      0x77, 0x10, 0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30, 
-+      0x18, 0xc3, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x01, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x02, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x03, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x04, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x05, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x06, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x01, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x07, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82, 
-+      0x20, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x08, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x09, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x0a, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0b, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x0c, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x71, 0xe1, 
-+      0x00, 0x05, 0x00, 0x12, 0x76, 0x82, 0x00, 0x0d, 
-+      0x71, 0xe1, 0x00, 0x06, 0x00, 0x12, 0x76, 0x82, 
-+      0x00, 0x00, 0x71, 0xe1, 0x00, 0x05, 0x00, 0x12, 
-+      0x76, 0x82, 0x00, 0x0e, 0x71, 0xe1, 0x00, 0x06, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x00, 0x10, 0xe1, 
-+      0x00, 0x07, 0xf9, 0x80, 0x16, 0x76, 0x10, 0xe1, 
-+      0x00, 0x08, 0xf9, 0x80, 0x16, 0x76, 0x10, 0xe1, 
-+      0x00, 0x07, 0xf9, 0x80, 0x16, 0x66, 0x10, 0xe1, 
-+      0x00, 0x08, 0xf9, 0x80, 0x16, 0x66, 0xf0, 0x73, 
-+      0x18, 0xd1, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 
-+      0xfb, 0x80, 0x18, 0x10, 0xf0, 0x00, 0x00, 0x95, 
-+      0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 0xfb, 0x80, 
-+      0x18, 0x10, 0xf0, 0x00, 0x00, 0x9e, 0xf9, 0x80, 
-+      0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11, 0xf4, 0xe4, 
-+      0x4a, 0x11, 0x88, 0x11, 0xee, 0xff, 0xf4, 0x95, 
-+      0x10, 0x04, 0x71, 0xe1, 0x00, 0x03, 0x00, 0x11, 
-+      0xee, 0x01, 0x80, 0x81, 0x8a, 0x11, 0xf4, 0x95, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16, 0xf4, 0x95, 
-+      0x71, 0x04, 0x00, 0x16, 0xfb, 0x80, 0x16, 0xa2, 
-+      0x88, 0x11, 0xf4, 0x95, 0x71, 0xe1, 0x00, 0x02, 
-+      0x00, 0x12, 0x76, 0x82, 0x00, 0x10, 0x10, 0xe6, 
-+      0x00, 0x01, 0x71, 0xe1, 0x00, 0x03, 0x00, 0x12, 
-+      0x80, 0x82, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x12, 
-+      0x10, 0xe6, 0x00, 0x02, 0x80, 0x82, 0xe7, 0x62, 
-+      0x71, 0xe1, 0x00, 0x02, 0x00, 0x13, 0xe5, 0x01, 
-+      0xf9, 0x80, 0x16, 0x9a, 0x8a, 0x16, 0x8a, 0x11, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0x88, 0x11, 0xee, 0xff, 
-+      0xee, 0x01, 0x10, 0xe1, 0x00, 0x01, 0x8a, 0x11, 
-+      0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x77, 0x11, 
-+      0x00, 0x7b, 0x10, 0x81, 0xf0, 0x00, 0x00, 0xb3, 
-+      0x88, 0x11, 0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 
-+      0xfa, 0x44, 0x19, 0x2a, 0xf4, 0x95, 0xee, 0xff, 
-+      0xf9, 0x80, 0x16, 0x53, 0x77, 0x11, 0x00, 0x7b, 
-+      0x10, 0x81, 0xf0, 0x00, 0x00, 0xb3, 0x88, 0x11, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x76, 0x81, 0x00, 0x01, 
-+      0xee, 0x01, 0x76, 0xe1, 0x00, 0x01, 0x00, 0x00, 
-+      0x76, 0xe1, 0x00, 0x02, 0x00, 0x13, 0x76, 0xe1, 
-+      0x00, 0x03, 0x00, 0x26, 0x76, 0xe1, 0x00, 0x04, 
-+      0x00, 0x25, 0x76, 0xe1, 0x00, 0x05, 0x00, 0x24, 
-+      0x76, 0xe1, 0x00, 0x06, 0x00, 0x00, 0x76, 0xe1, 
-+      0x00, 0x07, 0x00, 0x17, 0x76, 0xe1, 0x00, 0x08, 
-+      0x00, 0x32, 0x76, 0xe1, 0x00, 0x09, 0x00, 0x31, 
-+      0x76, 0xe1, 0x00, 0x0a, 0x00, 0x30, 0x8a, 0x11, 
-+      0xf4, 0x95, 0xf4, 0xe4, 0x4a, 0x11, 0x4a, 0x16, 
-+      0x4a, 0x17, 0xee, 0xff, 0xf4, 0x95, 0x71, 0x06, 
-+      0x00, 0x17, 0xfb, 0x80, 0x16, 0xa2, 0x88, 0x11, 
-+      0xf4, 0x95, 0xf7, 0xb8, 0x10, 0xf8, 0x00, 0x11, 
-+      0xf0, 0x10, 0xff, 0xff, 0xfa, 0x45, 0x19, 0x73, 
-+      0x77, 0x16, 0xff, 0xff, 0x77, 0x12, 0x00, 0x7b, 
-+      0x77, 0x0e, 0x00, 0x05, 0x10, 0x82, 0x28, 0xf8, 
-+      0x00, 0x11, 0xf0, 0x00, 0x00, 0xb4, 0x88, 0x11, 
-+      0xf4, 0x95, 0xf4, 0x95, 0x10, 0x81, 0xf8, 0x44, 
-+      0x19, 0x84, 0xf2, 0x73, 0x19, 0x84, 0xf4, 0x95, 
-+      0xe7, 0x16, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 
-+      0xf0, 0x00, 0x00, 0xb4, 0x88, 0x11, 0xf4, 0x95, 
-+      0x77, 0x12, 0x00, 0x02, 0x10, 0x81, 0xf8, 0x45, 
-+      0x19, 0x6f, 0x6e, 0xea, 0xff, 0xff, 0x19, 0x7c, 
-+      0x6d, 0xe9, 0x00, 0x05, 0x61, 0xf8, 0x00, 0x17, 
-+      0x00, 0x01, 0xfa, 0x20, 0x19, 0x8f, 0x76, 0x86, 
-+      0x00, 0x01, 0xfb, 0x80, 0x19, 0x97, 0xf4, 0x95, 
-+      0x48, 0x16, 0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 
-+      0x8a, 0x17, 0x48, 0x16, 0x8a, 0x16, 0x8a, 0x11, 
-+      0xf4, 0xe4, 0x4a, 0x11, 0xee, 0xff, 0xfb, 0x80, 
-+      0x16, 0xa2, 0x88, 0x11, 0xf4, 0x95, 0x77, 0x10, 
-+      0xff, 0xff, 0xf4, 0xa9, 0xf8, 0x30, 0x19, 0xcc, 
-+      0x71, 0xe1, 0x00, 0x02, 0x00, 0x12, 0x69, 0x82, 
-+      0x00, 0x10, 0x71, 0xe1, 0x00, 0x02, 0x00, 0x12, 
-+      0x68, 0x82, 0xf7, 0xff, 0x71, 0xe1, 0x00, 0x02, 
-+      0x00, 0x12, 0x68, 0x82, 0xfb, 0xff, 0x71, 0xe1, 
-+      0x00, 0x02, 0x00, 0x12, 0x68, 0x82, 0xff, 0xf0, 
-+      0x71, 0xe1, 0x00, 0x03, 0x00, 0x12, 0x76, 0x82, 
-+      0xff, 0xff, 0x71, 0xe1, 0x00, 0x04, 0x00, 0x12, 
-+      0x76, 0x82, 0xff, 0xff, 0x71, 0xe1, 0x00, 0x02, 
-+      0x00, 0x12, 0x69, 0x82, 0x00, 0x20, 0x71, 0xe1, 
-+      0x00, 0x02, 0x00, 0x11, 0xf2, 0x73, 0x19, 0xda, 
-+      0x68, 0x81, 0xff, 0xef, 0x77, 0x11, 0x00, 0x7b, 
-+      0x10, 0x81, 0xfb, 0x80, 0x19, 0x97, 0xf0, 0x00, 
-+      0x00, 0xb4, 0x77, 0x11, 0x00, 0x7b, 0x10, 0x81, 
-+      0xfb, 0x80, 0x19, 0x97, 0xf0, 0x00, 0x00, 0xb9, 
-+      0xf9, 0x80, 0x16, 0x9a, 0xee, 0x01, 0x8a, 0x11, 
-+      0xf4, 0xe4, 0x00, 0xa4, 0x00, 0x00, 0x19, 0xdf, 
-+      0x00, 0x01, 0x2a, 0xe6, 0x00, 0x00, 0x00, 0x01, 
-+      0x2a, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x2a, 0x12, 
-+      0x0c, 0x01, 0xc3, 0x4f, 0x00, 0x00, 0x00, 0x01, 
-+      0x2a, 0x15, 0x00, 0x00, 0x00, 0x02, 0x2a, 0x16, 
-+      0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x2a, 0x5d, 
-+      0x00, 0x43, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 
-+      0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 
-+      0x00, 0x74, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65, 
-+      0x00, 0x63, 0x00, 0x68, 0x00, 0x6e, 0x00, 0x6f, 
-+      0x00, 0x54, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6e, 
-+      0x00, 0x64, 0x00, 0x20, 0x00, 0x41, 0x00, 0x47, 
-+      0x00, 0x00, 0x00, 0x04, 0x2a, 0x76, 0x00, 0x30, 
-+      0x00, 0x2e, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0c, 
-+      0x2a, 0x7a, 0x00, 0x46, 0x00, 0x65, 0x00, 0x62, 
-+      0x00, 0x20, 0x00, 0x32, 0x00, 0x37, 0x00, 0x20, 
-+      0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 
-+      0x00, 0x00, 0x00, 0x09, 0x2a, 0x86, 0x00, 0x31, 
-+      0x00, 0x34, 0x00, 0x3a, 0x00, 0x33, 0x00, 0x35, 
-+      0x00, 0x3a, 0x00, 0x33, 0x00, 0x33, 0x00, 0x00, 
-+      0x00, 0x0f, 0x2a, 0x8f, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 
-+      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x00, 0x00, 0x01, 0x2a, 0x9e, 0x00, 0x00, 
-+      0x00, 0x01, 0x2a, 0x9f, 0x00, 0x00, 0x00, 0x01, 
-+      0x2a, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x2a, 0xa1, 
-+      0x00, 0x00, 0x00, 0x01, 0x2a, 0xa2, 0x00, 0x00, 
-+      0x00, 0x01, 0x29, 0x7e, 0x00, 0x00, 0x00, 0x02, 
-+      0x29, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
-+      0x29, 0x82, 0xff, 0xff, 0x00, 0x01, 0x2a, 0xa7, 
-+      0x00, 0x00, 0x00, 0x05, 0x2a, 0xa8, 0x71, 0x41, 
-+      0x20, 0x00, 0x20, 0x00, 0x00, 0x23, 0x04, 0x00, 
-+      0x00, 0x0a, 0x2a, 0xad, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x0f, 0x2a, 0xb7, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x00, 0x00, 0x40, 0x00, 0xa0, 0x82, 0x40, 
-+      0x00, 0x08, 0x30, 0x7f, 0x00, 0x80, 0x01, 0x80, 
-+      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x00, 0x00, 0x01, 0x27, 0x6e, 0x00, 0x00, 
-+      0x00, 0x01, 0x27, 0x6f, 0x00, 0x00, 0x00, 0x00, 
-+      0x00, 0x09, 0x00, 0x00, 0x1a, 0x83, 0x04, 0xe8, 
-+      0x04, 0xcf, 0x04, 0xc5, 0x04, 0xba, 0x04, 0xb0, 
-+      0x04, 0xac, 0x04, 0x9c, 0x04, 0x8c, 0x04, 0x81, 
-+      0x00, 0x78, 0x00, 0x00, 0x01, 0x00, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xaa, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x02, 0x23, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x05, 0xe5, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x02, 0xb5, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x0e, 0x33, 0xf4, 0x95, 0xf4, 0x95, 0xf2, 0x73, 
-+      0x07, 0xef, 0xf4, 0x95, 0xf4, 0x95, 0x00, 0x00, 
-+};
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/Kconfig  2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,11 @@
-+config DVB_TTUSB_BUDGET
-+      tristate "Technotrend/Hauppauge Nova-USB devices"
-+      depends on DVB_CORE && USB
-+      help
-+        Support for external USB adapters designed by Technotrend and
-+        produced by Hauppauge, shipped under the brand name 'Nova-USB'.
-+
-+          These devices don't have a MPEG decoder built in, so you need
-+        an external software decoder to watch TV.       
-+
-+        Say Y if you own such a device and want to use it.
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-budget/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,3 @@
-+obj-$(CONFIG_DVB_TTUSB_BUDGET) += dvb-ttusb-budget.o
-+
-+EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/dec2000_frontend.c  2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,180 @@
-+/*
-+ * TTUSB DEC-2000-t Frontend
-+ *
-+ * Copyright (C) 2003 Alex Woods <linux-dvb@giblets.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+
-+#include "dvb_frontend.h"
-+#include "dvb_functions.h"
-+
-+static int debug = 0;
-+
-+#define dprintk       if (debug) printk
-+
-+static struct dvb_frontend_info dec2000_frontend_info = {
-+      name:                   "TechnoTrend/Hauppauge DEC-2000-t Frontend",
-+      type:                   FE_OFDM,
-+      frequency_min:          51000000,
-+      frequency_max:          858000000,
-+      frequency_stepsize:     62500,
-+      caps:   FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-+              FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-+              FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
-+              FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO |
-+              FE_CAN_HIERARCHY_AUTO,
-+};
-+
-+static int dec2000_frontend_ioctl(struct dvb_frontend *fe, unsigned int cmd,
-+                                void *arg)
-+{
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      switch (cmd) {
-+
-+      case FE_GET_INFO:
-+              dprintk("%s: FE_GET_INFO\n", __FUNCTION__);
-+              memcpy(arg, &dec2000_frontend_info,
-+                     sizeof (struct dvb_frontend_info));
-+              break;
-+
-+      case FE_READ_STATUS: {
-+                      fe_status_t *status = (fe_status_t *)arg;
-+                      dprintk("%s: FE_READ_STATUS\n", __FUNCTION__);
-+                      *status = FE_HAS_SIGNAL | FE_HAS_VITERBI |
-+                                FE_HAS_SYNC | FE_HAS_CARRIER | FE_HAS_LOCK;
-+                      break;
-+              }
-+
-+      case FE_READ_BER: {
-+                      u32 *ber = (u32 *)arg;
-+                      dprintk("%s: FE_READ_BER\n", __FUNCTION__);
-+                      *ber = 0;
-+                      return -ENOSYS;
-+                      break;
-+              }
-+
-+      case FE_READ_SIGNAL_STRENGTH: {
-+                      dprintk("%s: FE_READ_SIGNAL_STRENGTH\n", __FUNCTION__);
-+                      *(s32 *)arg = 0xFF;
-+                      return -ENOSYS;
-+                      break;
-+              }
-+
-+      case FE_READ_SNR:
-+              dprintk("%s: FE_READ_SNR\n", __FUNCTION__);
-+              *(s32 *)arg = 0;
-+              return -ENOSYS;
-+              break;
-+
-+      case FE_READ_UNCORRECTED_BLOCKS:
-+              dprintk("%s: FE_READ_UNCORRECTED_BLOCKS\n", __FUNCTION__);
-+              *(u32 *)arg = 0;
-+              return -ENOSYS;
-+              break;
-+
-+      case FE_SET_FRONTEND:{
-+                      struct dvb_frontend_parameters *p =
-+                              (struct dvb_frontend_parameters *)arg;
-+                      u8 b[] = { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-+                                 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
-+                                 0x00, 0xff, 0x00, 0x00, 0x00, 0xff };
-+                      u32 freq;
-+                      struct i2c_msg msg = { addr: 0x71, flags: 0, len:20 };
-+
-+                      dprintk("%s: FE_SET_FRONTEND\n", __FUNCTION__);
-+
-+                      dprintk("            frequency->%d\n", p->frequency);
-+                      dprintk("            symbol_rate->%d\n",
-+                              p->u.qam.symbol_rate);
-+                      dprintk("            inversion->%d\n", p->inversion);
-+
-+                      freq = htonl(p->frequency / 1000);
-+                      memcpy(&b[4], &freq, sizeof (int));
-+                      msg.buf = b;
-+                      fe->i2c->xfer(fe->i2c, &msg, 1);
-+
-+                      break;
-+              }
-+
-+      case FE_GET_FRONTEND:
-+              dprintk("%s: FE_GET_FRONTEND\n", __FUNCTION__);
-+              break;
-+
-+      case FE_SLEEP:
-+              dprintk("%s: FE_SLEEP\n", __FUNCTION__);
-+              return -ENOSYS;
-+              break;
-+
-+      case FE_INIT:
-+              dprintk("%s: FE_INIT\n", __FUNCTION__);
-+              break;
-+
-+      case FE_RESET:
-+              dprintk("%s: FE_RESET\n", __FUNCTION__);
-+              break;
-+
-+      default:
-+              dprintk("%s: unknown IOCTL (0x%X)\n", __FUNCTION__, cmd);
-+              return -EINVAL;
-+
-+      }
-+
-+      return 0;
-+}
-+
-+static int dec2000_frontend_attach(struct dvb_i2c_bus *i2c)
-+{
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      dvb_register_frontend(dec2000_frontend_ioctl, i2c, NULL,
-+                            &dec2000_frontend_info);
-+
-+      return 0;
-+}
-+
-+static void dec2000_frontend_detach(struct dvb_i2c_bus *i2c)
-+{
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      dvb_unregister_frontend(dec2000_frontend_ioctl, i2c);
-+}
-+
-+static int __init dec2000_frontend_init(void)
-+{
-+      return dvb_register_i2c_device(THIS_MODULE, dec2000_frontend_attach,
-+                                     dec2000_frontend_detach);
-+}
-+
-+static void __exit dec2000_frontend_exit(void)
-+{
-+      dvb_unregister_i2c_device(dec2000_frontend_attach);
-+}
-+
-+module_init(dec2000_frontend_init);
-+module_exit(dec2000_frontend_exit);
-+
-+MODULE_DESCRIPTION("TechnoTrend/Hauppauge DEC-2000-t Frontend");
-+MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org");
-+MODULE_LICENSE("GPL");
-+
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "Debug level");
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/fdump.c     2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,36 @@
-+#include <stdio.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+
-+
-+int main (int argc, char **argv)
-+{
-+      unsigned char buf[8];
-+      unsigned int i, count, bytes = 0;
-+      int fd;
-+
-+      if (argc != 3) {
-+              fprintf (stderr, "\n\tusage: %s <ucode.bin> <array_name>\n\n",
-+                       argv[0]);
-+              return -1;
-+      }
-+
-+      fd = open (argv[1], O_RDONLY);
-+
-+      printf ("\n#include <asm/types.h>\n\nu8 %s [] __initdata = {",
-+              argv[2]);
-+
-+      while ((count = read (fd, buf, 8)) > 0) {
-+              printf ("\n\t");
-+              for (i=0;i<count;i++, bytes++)
-+                      printf ("0x%02x, ", buf[i]);
-+      }
-+
-+      printf ("\n};\n\n");
-+      close (fd);
-+
-+      return 0;
-+}
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/Kconfig     2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,24 @@
-+config DVB_TTUSB_DEC
-+      tristate "Technotrend/Hauppauge USB DEC2000-T devices"
-+      depends on DVB_CORE && USB
-+      help
-+        Support for external USB adapters designed by Technotrend and
-+        produced by Hauppauge, shipped under the brand name 'DEC2000-T'.
-+
-+          Even if these devices have a MPEG decoder built in, they transmit
-+        only compressed MPEG data over the USB bus, so you need
-+        an external software decoder to watch TV on your computer.      
-+
-+        Say Y if you own such a device and want to use it.
-+
-+config DVB_TTUSB_DEC_FIRMWARE_FILE
-+      string "Full pathname of dec2000t.bin firmware file"
-+      depends on DVB_TTUSB_DEC
-+      default "/etc/dvb/dec2000t.bin"
-+      help
-+        The DEC2000-T requires a firmware in order to boot into a mode in
-+        which it is a slave to the PC.  The firmware file can obtained as
-+        follows:
-+          wget http://hauppauge.lightpath.net/de/dec215a.exe
-+          unzip -j dec215a.exe Software/Oem/STB/App/Boot/STB_PC_T.bin
-+          mv STB_PC_T.bin /etc/dvb/dec2000t.bin
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/Makefile    2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,11 @@
-+
-+obj-$(CONFIG_DVB_TTUSB_DEC) += ttusb_dec.o dec2000_frontend.o
-+
-+EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/
-+
-+host-progs    := fdump
-+
-+$(obj)/ttusb_dec.o: $(obj)/dsp_dec2000.h
-+
-+$(obj)/dsp_dec2000.h: $(patsubst "%", %, $(CONFIG_DVB_TTUSB_DEC_FIRMWARE_FILE)) $(obj)/fdump
-+      $(obj)/fdump $< dsp_dec2000 > $@
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/ttusb_dec.c 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,991 @@
-+/*
-+ * TTUSB DEC Driver
-+ *
-+ * Copyright (C) 2003 Alex Woods <linux-dvb@giblets.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/slab.h>
-+#include <linux/usb.h>
-+
-+#include "ttusb_dec.h"
-+#include "dvb_frontend.h"
-+
-+static int debug = 0;
-+
-+#define dprintk       if (debug) printk
-+
-+static int ttusb_dec_send_command(struct ttusb_dec *dec, const u8 command,
-+                                int param_length, const u8 params[],
-+                                int *result_length, u8 cmd_result[])
-+{
-+      int result, actual_len, i;
-+      u8 b[COMMAND_PACKET_SIZE + 4];
-+      u8 c[COMMAND_PACKET_SIZE + 4];
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      if ((result = down_interruptible(&dec->usb_sem))) {
-+              printk("%s: Failed to down usb semaphore.\n", __FUNCTION__);
-+              return result;
-+      }
-+
-+      b[0] = 0xaa;
-+      b[1] = ++dec->trans_count;
-+      b[2] = command;
-+      b[3] = param_length;
-+
-+      if (params)
-+              memcpy(&b[4], params, param_length);
-+
-+      if (debug) {
-+              printk("%s: command: ", __FUNCTION__);
-+              for (i = 0; i < param_length + 4; i++)
-+                      printk("0x%02X ", b[i]);
-+              printk("\n");
-+      }
-+
-+      result = usb_bulk_msg(dec->udev, dec->command_pipe, b, sizeof(b),
-+                            &actual_len, HZ);
-+
-+      if (result) {
-+              printk("%s: command bulk message failed: error %d\n",
-+                     __FUNCTION__, result);
-+              up(&dec->usb_sem);
-+              return result;
-+      }
-+
-+      result = usb_bulk_msg(dec->udev, dec->result_pipe, c, sizeof(c),
-+                            &actual_len, HZ);
-+
-+      if (result) {
-+              printk("%s: result bulk message failed: error %d\n",
-+                     __FUNCTION__, result);
-+              up(&dec->usb_sem);
-+              return result;
-+      } else {
-+              if (debug) {
-+                      printk("%s: result: ", __FUNCTION__);
-+                      for (i = 0; i < actual_len; i++)
-+                              printk("0x%02X ", c[i]);
-+                      printk("\n");
-+              }
-+
-+              if (result_length)
-+                      *result_length = c[3];
-+              if (cmd_result && c[3] > 0)
-+                      memcpy(cmd_result, &c[4], c[3]);
-+
-+              up(&dec->usb_sem);
-+
-+              return 0;
-+      }
-+}
-+
-+static int ttusb_dec_av_pes2ts_cb(void *priv, unsigned char *data)
-+{
-+      struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *)priv;
-+
-+      dvbdmxfeed->cb.ts(data, 188, 0, 0, &dvbdmxfeed->feed.ts, DMX_OK);
-+
-+      return 0;
-+}
-+
-+static void ttusb_dec_set_pids(struct ttusb_dec *dec)
-+{
-+      u8 b[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
-+                 0xff, 0xff };
-+
-+      u16 pcr = htons(dec->pid[DMX_PES_PCR]);
-+      u16 audio = htons(dec->pid[DMX_PES_AUDIO]);
-+      u16 video = htons(dec->pid[DMX_PES_VIDEO]);
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      memcpy(&b[0], &pcr, 2);
-+      memcpy(&b[2], &audio, 2);
-+      memcpy(&b[4], &video, 2);
-+
-+      ttusb_dec_send_command(dec, 0x50, sizeof(b), b, NULL, NULL);
-+
-+      if (!down_interruptible(&dec->pes2ts_sem)) {
-+              dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO],
-+                                     ttusb_dec_av_pes2ts_cb, dec->demux.feed);
-+              dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO],
-+                                     ttusb_dec_av_pes2ts_cb, dec->demux.feed);
-+
-+              up(&dec->pes2ts_sem);
-+      }
-+}
-+
-+static int ttusb_dec_i2c_master_xfer(struct dvb_i2c_bus *i2c,
-+                                   const struct i2c_msg msgs[], int num)
-+{
-+      int result, i;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      for (i = 0; i < num; i++)
-+              if ((result = ttusb_dec_send_command(i2c->data, msgs[i].addr,
-+                                                   msgs[i].len, msgs[i].buf,
-+                                                   NULL, NULL)))
-+                      return result;
-+
-+      return 0;
-+}
-+
-+static void ttusb_dec_process_av_pes(struct ttusb_dec * dec, u8 * av_pes,
-+                                   int length)
-+{
-+      int i;
-+      u16 csum = 0;
-+      u8 c;
-+
-+      if (length < 16) {
-+              printk("%s: packet too short.\n", __FUNCTION__);
-+              return;
-+      }
-+
-+      for (i = 0; i < length; i += 2) {
-+              csum ^= le16_to_cpup((u16 *)(av_pes + i));
-+              c = av_pes[i];
-+              av_pes[i] = av_pes[i + 1];
-+              av_pes[i + 1] = c;
-+      }
-+
-+      if (csum) {
-+              printk("%s: checksum failed.\n", __FUNCTION__);
-+              return;
-+      }
-+
-+      if (length > 8 + MAX_AV_PES_LENGTH + 4) {
-+              printk("%s: packet too long.\n", __FUNCTION__);
-+              return;
-+      }
-+
-+      if (!(av_pes[0] == 'A' && av_pes[1] == 'V')) {
-+              printk("%s: invalid AV_PES packet.\n", __FUNCTION__);
-+              return;
-+      }
-+
-+      switch (av_pes[2]) {
-+
-+      case 0x01: {            /* VideoStream */
-+                      int prebytes = av_pes[5] & 0x03;
-+                      int postbytes = (av_pes[5] & 0x0c) >> 2;
-+                      u16 v_pes_payload_length;
-+
-+                      if (dec->v_pes_postbytes > 0 &&
-+                          dec->v_pes_postbytes == prebytes) {
-+                              memcpy(&dec->v_pes[dec->v_pes_length],
-+                                     &av_pes[12], prebytes);
-+
-+                              if (!down_interruptible(&dec->pes2ts_sem)) {
-+                                      dvb_filter_pes2ts(&dec->v_pes2ts,
-+                                                        dec->v_pes,
-+                                                        dec->v_pes_length +
-+                                                        prebytes);
-+
-+                                      up(&dec->pes2ts_sem);
-+                              }
-+                      }
-+
-+                      if (av_pes[5] & 0x10) {
-+                              dec->v_pes[7] = 0x80;
-+                              dec->v_pes[8] = 0x05;
-+
-+                              dec->v_pes[9] = 0x21 |
-+                                              ((av_pes[8] & 0xc0) >> 5);
-+                              dec->v_pes[10] = ((av_pes[8] & 0x3f) << 2) |
-+                                               ((av_pes[9] & 0xc0) >> 6);
-+                              dec->v_pes[11] = 0x01 |
-+                                               ((av_pes[9] & 0x3f) << 2) |
-+                                               ((av_pes[10] & 0x80) >> 6);
-+                              dec->v_pes[12] = ((av_pes[10] & 0x7f) << 1) |
-+                                               ((av_pes[11] & 0xc0) >> 7);
-+                              dec->v_pes[13] = 0x01 |
-+                                               ((av_pes[11] & 0x7f) << 1);
-+
-+                              memcpy(&dec->v_pes[14], &av_pes[12 + prebytes],
-+                                     length - 16 - prebytes);
-+                              dec->v_pes_length = 14 + length - 16 - prebytes;
-+                      } else {
-+                              dec->v_pes[7] = 0x00;
-+                              dec->v_pes[8] = 0x00;
-+
-+                              memcpy(&dec->v_pes[9], &av_pes[8], length - 12);
-+                              dec->v_pes_length = 9 + length - 12;
-+                      }
-+
-+                      dec->v_pes_postbytes = postbytes;
-+
-+                      if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 &&
-+                          dec->v_pes[10 + dec->v_pes[8]] == 0x00 &&
-+                          dec->v_pes[11 + dec->v_pes[8]] == 0x01)
-+                              dec->v_pes[6] = 0x84;
-+                      else
-+                              dec->v_pes[6] = 0x80;
-+
-+                      v_pes_payload_length = htons(dec->v_pes_length - 6 +
-+                                                   postbytes);
-+                      memcpy(&dec->v_pes[4], &v_pes_payload_length, 2);
-+
-+                      if (postbytes == 0) {
-+                              if (!down_interruptible(&dec->pes2ts_sem)) {
-+                                      dvb_filter_pes2ts(&dec->v_pes2ts,
-+                                                        dec->v_pes,
-+                                                        dec->v_pes_length);
-+
-+                                      up(&dec->pes2ts_sem);
-+                              }
-+                      }
-+
-+                      break;
-+              }
-+
-+      case 0x02:              /* MainAudioStream */
-+              dvb_filter_pes2ts(&dec->a_pes2ts, &av_pes[8], length - 12);
-+              break;
-+
-+      default:
-+              printk("%s: unknown AV_PES type: %02x.\n", __FUNCTION__,
-+                     av_pes[2]);
-+              break;
-+
-+      }
-+}
-+
-+static void ttusb_dec_process_urb_frame(struct ttusb_dec * dec, u8 * b,
-+                                      int length)
-+{
-+      while (length) {
-+              switch (dec->av_pes_state) {
-+
-+              case 0:
-+              case 1:
-+              case 3:
-+                      if (*b++ == 0xaa) {
-+                              dec->av_pes_state++;
-+                              if (dec->av_pes_state == 4)
-+                                      dec->av_pes_length = 0;
-+                      } else {
-+                              dec->av_pes_state = 0;
-+                      }
-+
-+                      length--;
-+                      break;
-+
-+              case 2:
-+                      if (*b++ == 0x00) {
-+                              dec->av_pes_state++;
-+                      } else {
-+                              dec->av_pes_state = 0;
-+                      }
-+
-+                      length--;
-+                      break;
-+
-+              case 4:
-+                      dec->av_pes[dec->av_pes_length++] = *b++;
-+
-+                      if (dec->av_pes_length == 8) {
-+                              dec->av_pes_state++;
-+                              dec->av_pes_payload_length = le16_to_cpup(
-+                                              (u16 *)(dec->av_pes + 6));
-+                      }
-+
-+                      length--;
-+                      break;
-+
-+              case 5: {
-+                              int remainder = dec->av_pes_payload_length +
-+                                              8 - dec->av_pes_length;
-+
-+                              if (length >= remainder) {
-+                                      memcpy(dec->av_pes + dec->av_pes_length,
-+                                             b, remainder);
-+                                      dec->av_pes_length += remainder;
-+                                      b += remainder;
-+                                      length -= remainder;
-+                                      dec->av_pes_state++;
-+                              } else {
-+                                      memcpy(&dec->av_pes[dec->av_pes_length],
-+                                             b, length);
-+                                      dec->av_pes_length += length;
-+                                      length = 0;
-+                              }
-+
-+                              break;
-+                      }
-+
-+              case 6:
-+                      dec->av_pes[dec->av_pes_length++] = *b++;
-+
-+                      if (dec->av_pes_length ==
-+                          8 + dec->av_pes_payload_length + 4) {
-+                              ttusb_dec_process_av_pes(dec, dec->av_pes,
-+                                                       dec->av_pes_length);
-+                              dec->av_pes_state = 0;
-+                      }
-+
-+                      length--;
-+                      break;
-+
-+              default:
-+                      printk("%s: illegal packet state encountered.\n",
-+                             __FUNCTION__);
-+                      dec->av_pes_state = 0;
-+
-+              }
-+
-+      }
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_dec_process_urb(struct urb *urb)
-+#else
-+static void ttusb_dec_process_urb(struct urb *urb, struct pt_regs *ptregs)
-+#endif
-+{
-+      struct ttusb_dec *dec = urb->context;
-+
-+      if (!urb->status) {
-+              int i;
-+
-+              for (i = 0; i < FRAMES_PER_ISO_BUF; i++) {
-+                      struct usb_iso_packet_descriptor *d;
-+                      u8 *b;
-+                      int length;
-+
-+                      d = &urb->iso_frame_desc[i];
-+                      b = urb->transfer_buffer + d->offset;
-+                      length = d->actual_length;
-+
-+                      ttusb_dec_process_urb_frame(dec, b, length);
-+              }
-+      } else {
-+               /* -ENOENT is expected when unlinking urbs */
-+              if (urb->status != -ENOENT)
-+                      dprintk("%s: urb error: %d\n", __FUNCTION__,
-+                              urb->status);
-+      }
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+      if (dec->iso_stream_count)
-+              usb_submit_urb(urb, GFP_KERNEL);
-+#endif
-+}
-+
-+static void ttusb_dec_setup_urbs(struct ttusb_dec *dec)
-+{
-+      int i, j, buffer_offset = 0;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++) {
-+              int frame_offset = 0;
-+              struct urb *urb = dec->iso_urb[i];
-+
-+              urb->dev = dec->udev;
-+              urb->context = dec;
-+              urb->complete = ttusb_dec_process_urb;
-+              urb->pipe = dec->stream_pipe;
-+              urb->transfer_flags = URB_ISO_ASAP;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+              urb->interval = 1;
-+#endif
-+              urb->number_of_packets = FRAMES_PER_ISO_BUF;
-+              urb->transfer_buffer_length = ISO_FRAME_SIZE *
-+                                            FRAMES_PER_ISO_BUF;
-+              urb->transfer_buffer = dec->iso_buffer + buffer_offset;
-+              buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
-+
-+              for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
-+                      urb->iso_frame_desc[j].offset = frame_offset;
-+                      urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
-+                      frame_offset += ISO_FRAME_SIZE;
-+              }
-+      }
-+}
-+
-+static void ttusb_dec_stop_iso_xfer(struct ttusb_dec *dec)
-+{
-+      int i;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      if (down_interruptible(&dec->iso_sem))
-+              return;
-+
-+      dec->iso_stream_count--;
-+
-+      if (!dec->iso_stream_count) {
-+              u8 b0[] = { 0x00 };
-+
-+              for (i = 0; i < ISO_BUF_COUNT; i++)
-+                      usb_unlink_urb(dec->iso_urb[i]);
-+
-+              ttusb_dec_send_command(dec, 0x81, sizeof(b0), b0, NULL, NULL);
-+      }
-+
-+      up(&dec->iso_sem);
-+}
-+
-+/* Setting the interface of the DEC tends to take down the USB communications
-+ * for a short period, so it's important not to call this function just before
-+ * trying to talk to it.
-+ */
-+static void ttusb_dec_set_streaming_interface(struct ttusb_dec *dec)
-+{
-+      if (!dec->interface) {
-+              usb_set_interface(dec->udev, 0, 8);
-+              dec->interface = 8;
-+      }
-+}
-+
-+static int ttusb_dec_start_iso_xfer(struct ttusb_dec *dec)
-+{
-+      int i, result;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      if (down_interruptible(&dec->iso_sem))
-+              return -EAGAIN;
-+
-+      if (!dec->iso_stream_count) {
-+              u8 b0[] = { 0x05 };
-+
-+              ttusb_dec_send_command(dec, 0x80, sizeof(b0), b0, NULL, NULL);
-+
-+              ttusb_dec_setup_urbs(dec);
-+
-+              for (i = 0; i < ISO_BUF_COUNT; i++) {
-+                      if ((result = usb_submit_urb(dec->iso_urb[i]
-+                                                  , GFP_KERNEL))) {
-+                              printk("%s: failed urb submission %d: "
-+                                     "error %d\n", __FUNCTION__, i, result);
-+
-+                              while (i) {
-+                                      usb_unlink_urb(dec->iso_urb[i - 1]);
-+                                      i--;
-+                              }
-+
-+                              up(&dec->iso_sem);
-+                              return result;
-+                      }
-+              }
-+
-+              dec->av_pes_state = 0;
-+              dec->v_pes_postbytes = 0;
-+      }
-+
-+      dec->iso_stream_count++;
-+
-+      up(&dec->iso_sem);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      ttusb_dec_set_streaming_interface(dec);
-+#endif
-+
-+      return 0;
-+}
-+
-+static int ttusb_dec_start_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+      struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
-+      struct ttusb_dec *dec = dvbdmx->priv;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      if (!dvbdmx->dmx.frontend)
-+              return -EINVAL;
-+
-+      dprintk("  pid: 0x%04X\n", dvbdmxfeed->pid);
-+
-+      switch (dvbdmxfeed->type) {
-+
-+      case DMX_TYPE_TS:
-+              dprintk("  type: DMX_TYPE_TS\n");
-+              break;
-+
-+      case DMX_TYPE_SEC:
-+              dprintk("  type: DMX_TYPE_SEC\n");
-+              break;
-+
-+      default:
-+              dprintk("  type: unknown (%d)\n", dvbdmxfeed->type);
-+              return -EINVAL;
-+
-+      }
-+
-+      dprintk("  ts_type:");
-+
-+      if (dvbdmxfeed->ts_type & TS_DECODER)
-+              dprintk(" TS_DECODER");
-+
-+      if (dvbdmxfeed->ts_type & TS_PACKET)
-+              dprintk(" TS_PACKET");
-+
-+      if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)
-+              dprintk(" TS_PAYLOAD_ONLY");
-+
-+      dprintk("\n");
-+
-+      switch (dvbdmxfeed->pes_type) {
-+
-+      case DMX_TS_PES_VIDEO:
-+              dprintk("  pes_type: DMX_TS_PES_VIDEO\n");
-+              dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
-+              dec->pid[DMX_PES_VIDEO] = dvbdmxfeed->pid;
-+              ttusb_dec_set_pids(dec);
-+              break;
-+
-+      case DMX_TS_PES_AUDIO:
-+              dprintk("  pes_type: DMX_TS_PES_AUDIO\n");
-+              dec->pid[DMX_PES_AUDIO] = dvbdmxfeed->pid;
-+              ttusb_dec_set_pids(dec);
-+              break;
-+
-+      case DMX_TS_PES_TELETEXT:
-+              dec->pid[DMX_PES_TELETEXT] = dvbdmxfeed->pid;
-+              dprintk("  pes_type: DMX_TS_PES_TELETEXT\n");
-+              break;
-+
-+      case DMX_TS_PES_PCR:
-+              dprintk("  pes_type: DMX_TS_PES_PCR\n");
-+              dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
-+              ttusb_dec_set_pids(dec);
-+              break;
-+
-+      case DMX_TS_PES_OTHER:
-+              dprintk("  pes_type: DMX_TS_PES_OTHER\n");
-+              break;
-+
-+      default:
-+              dprintk("  pes_type: unknown (%d)\n", dvbdmxfeed->pes_type);
-+              return -EINVAL;
-+
-+      }
-+
-+      ttusb_dec_start_iso_xfer(dec);
-+
-+      return 0;
-+}
-+
-+static int ttusb_dec_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
-+{
-+      struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      ttusb_dec_stop_iso_xfer(dec);
-+
-+      return 0;
-+}
-+
-+static void ttusb_dec_free_iso_urbs(struct ttusb_dec *dec)
-+{
-+      int i;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++)
-+              if (dec->iso_urb[i])
-+                      usb_free_urb(dec->iso_urb[i]);
-+
-+      pci_free_consistent(NULL,
-+                          ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF *
-+                                            ISO_BUF_COUNT),
-+                          dec->iso_buffer, dec->iso_dma_handle);
-+}
-+
-+static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec *dec)
-+{
-+      int i;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      dec->iso_buffer = pci_alloc_consistent(NULL,
-+                                             ISO_FRAME_SIZE *
-+                                             (FRAMES_PER_ISO_BUF *
-+                                              ISO_BUF_COUNT),
-+                                             &dec->iso_dma_handle);
-+
-+      memset(dec->iso_buffer, 0,
-+             sizeof(ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * ISO_BUF_COUNT)));
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++) {
-+              struct urb *urb;
-+
-+              if (!(urb = usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_KERNEL))) {
-+                      ttusb_dec_free_iso_urbs(dec);
-+                      return -ENOMEM;
-+              }
-+
-+              dec->iso_urb[i] = urb;
-+      }
-+
-+      ttusb_dec_setup_urbs(dec);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      for (i = 0; i < ISO_BUF_COUNT; i++) {
-+              int next = (i + 1) % ISO_BUF_COUNT;
-+              dec->iso_urb[i]->next = dec->iso_urb[next];
-+      }
-+#endif
-+
-+      return 0;
-+}
-+
-+static void ttusb_dec_init_v_pes(struct ttusb_dec *dec)
-+{
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      dec->v_pes[0] = 0x00;
-+      dec->v_pes[1] = 0x00;
-+      dec->v_pes[2] = 0x01;
-+      dec->v_pes[3] = 0xe0;
-+}
-+
-+static void ttusb_dec_init_usb(struct ttusb_dec *dec)
-+{
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      sema_init(&dec->usb_sem, 1);
-+      sema_init(&dec->iso_sem, 1);
-+
-+      dec->command_pipe = usb_sndbulkpipe(dec->udev, COMMAND_PIPE);
-+      dec->result_pipe = usb_rcvbulkpipe(dec->udev, RESULT_PIPE);
-+      dec->stream_pipe = usb_rcvisocpipe(dec->udev, STREAM_PIPE);
-+
-+      ttusb_dec_alloc_iso_urbs(dec);
-+}
-+
-+#include "dsp_dec2000.h"
-+
-+static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
-+{
-+      int i, j, actual_len, result, size, trans_count;
-+      u8 b0[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xc8, 0x61,
-+                  0x00 };
-+      u8 b1[] = { 0x61 };
-+      u8 b[ARM_PACKET_SIZE];
-+      u32 dsp_length = htonl(sizeof(dsp_dec2000));
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      memcpy(b0, &dsp_length, 4);
-+
-+      result = ttusb_dec_send_command(dec, 0x41, sizeof(b0), b0, NULL, NULL);
-+
-+      if (result)
-+              return result;
-+
-+      trans_count = 0;
-+      j = 0;
-+
-+      for (i = 0; i < sizeof(dsp_dec2000); i += COMMAND_PACKET_SIZE) {
-+              size = sizeof(dsp_dec2000) - i;
-+              if (size > COMMAND_PACKET_SIZE)
-+                      size = COMMAND_PACKET_SIZE;
-+
-+              b[j + 0] = 0xaa;
-+              b[j + 1] = trans_count++;
-+              b[j + 2] = 0xf0;
-+              b[j + 3] = size;
-+              memcpy(&b[j + 4], &dsp_dec2000[i], size);
-+
-+              j += COMMAND_PACKET_SIZE + 4;
-+
-+              if (j >= ARM_PACKET_SIZE) {
-+                      result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
-+                                            ARM_PACKET_SIZE, &actual_len,
-+                                            HZ / 10);
-+                      j = 0;
-+              } else if (size < COMMAND_PACKET_SIZE) {
-+                      result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
-+                                            j - COMMAND_PACKET_SIZE + size,
-+                                            &actual_len, HZ / 10);
-+              }
-+      }
-+
-+      result = ttusb_dec_send_command(dec, 0x43, sizeof(b1), b1, NULL, NULL);
-+
-+      return result;
-+}
-+
-+static void ttusb_dec_init_stb(struct ttusb_dec *dec)
-+{
-+      u8 c[COMMAND_PACKET_SIZE];
-+      int c_length;
-+      int result;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      result = ttusb_dec_send_command(dec, 0x08, 0, NULL, &c_length, c);
-+
-+      if (!result)
-+              if (c_length != 0x0c || (c_length == 0x0c && c[9] != 0x63))
-+                      ttusb_dec_boot_dsp(dec);
-+}
-+
-+static int ttusb_dec_init_dvb(struct ttusb_dec *dec)
-+{
-+      int result;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      if ((result = dvb_register_adapter(&dec->adapter, "dec2000")) < 0) {
-+              printk("%s: dvb_register_adapter failed: error %d\n",
-+                     __FUNCTION__, result);
-+
-+              return result;
-+      }
-+
-+      if (!(dec->i2c_bus = dvb_register_i2c_bus(ttusb_dec_i2c_master_xfer,
-+                                                dec, dec->adapter, 0))) {
-+              printk("%s: dvb_register_i2c_bus failed\n", __FUNCTION__);
-+
-+              dvb_unregister_adapter(dec->adapter);
-+
-+              return -ENOMEM;
-+      }
-+
-+      dec->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
-+
-+      dec->demux.priv = (void *)dec;
-+      dec->demux.filternum = 31;
-+      dec->demux.feednum = 31;
-+      dec->demux.start_feed = ttusb_dec_start_feed;
-+      dec->demux.stop_feed = ttusb_dec_stop_feed;
-+      dec->demux.write_to_decoder = NULL;
-+
-+      if ((result = dvb_dmx_init(&dec->demux)) < 0) {
-+              printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__,
-+                     result);
-+
-+              dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+                                     0);
-+              dvb_unregister_adapter(dec->adapter);
-+
-+              return result;
-+      }
-+
-+      dec->dmxdev.filternum = 32;
-+      dec->dmxdev.demux = &dec->demux.dmx;
-+      dec->dmxdev.capabilities = 0;
-+
-+      if ((result = dvb_dmxdev_init(&dec->dmxdev, dec->adapter)) < 0) {
-+              printk("%s: dvb_dmxdev_init failed: error %d\n",
-+                     __FUNCTION__, result);
-+
-+              dvb_dmx_release(&dec->demux);
-+              dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+                                     0);
-+              dvb_unregister_adapter(dec->adapter);
-+
-+              return result;
-+      }
-+
-+      dec->frontend.source = DMX_FRONTEND_0;
-+
-+      if ((result = dec->demux.dmx.add_frontend(&dec->demux.dmx,
-+                                                &dec->frontend)) < 0) {
-+              printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__,
-+                     result);
-+
-+              dvb_dmxdev_release(&dec->dmxdev);
-+              dvb_dmx_release(&dec->demux);
-+              dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+                                     0);
-+              dvb_unregister_adapter(dec->adapter);
-+
-+              return result;
-+      }
-+
-+      if ((result = dec->demux.dmx.connect_frontend(&dec->demux.dmx,
-+                                                    &dec->frontend)) < 0) {
-+              printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__,
-+                     result);
-+
-+              dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
-+              dvb_dmxdev_release(&dec->dmxdev);
-+              dvb_dmx_release(&dec->demux);
-+              dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter,
-+                                     0);
-+              dvb_unregister_adapter(dec->adapter);
-+
-+              return result;
-+      }
-+
-+      sema_init(&dec->pes2ts_sem, 1);
-+
-+      dvb_net_init(dec->adapter, &dec->dvb_net, &dec->demux.dmx);
-+
-+      return 0;
-+}
-+
-+static void ttusb_dec_exit_dvb(struct ttusb_dec *dec)
-+{
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      dvb_net_release(&dec->dvb_net);
-+      dec->demux.dmx.close(&dec->demux.dmx);
-+      dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
-+      dvb_dmxdev_release(&dec->dmxdev);
-+      dvb_dmx_release(&dec->demux);
-+      dvb_unregister_i2c_bus(ttusb_dec_i2c_master_xfer, dec->adapter, 0);
-+      dvb_unregister_adapter(dec->adapter);
-+}
-+
-+static void ttusb_dec_exit_usb(struct ttusb_dec *dec)
-+{
-+      int i;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      dec->iso_stream_count = 0;
-+
-+      for (i = 0; i < ISO_BUF_COUNT; i++)
-+              usb_unlink_urb(dec->iso_urb[i]);
-+
-+      ttusb_dec_free_iso_urbs(dec);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void *ttusb_dec_probe(struct usb_device *udev, unsigned int ifnum,
-+                           const struct usb_device_id *id)
-+{
-+      struct ttusb_dec *dec;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      if (ifnum != 0)
-+              return NULL;
-+
-+      if (!(dec = kmalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
-+              printk("%s: couldn't allocate memory.\n", __FUNCTION__);
-+              return NULL;
-+      }
-+
-+      memset(dec, 0, sizeof(struct ttusb_dec));
-+
-+      dec->udev = udev;
-+
-+      ttusb_dec_init_usb(dec);
-+      ttusb_dec_init_stb(dec);
-+      ttusb_dec_init_dvb(dec);
-+      ttusb_dec_init_v_pes(dec);
-+
-+      return (void *)dec;
-+}
-+#else
-+static int ttusb_dec_probe(struct usb_interface *intf,
-+                         const struct usb_device_id *id)
-+{
-+      struct usb_device *udev;
-+      struct ttusb_dec *dec;
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      udev = interface_to_usbdev(intf);
-+
-+      if (!(dec = kmalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
-+              printk("%s: couldn't allocate memory.\n", __FUNCTION__);
-+              return -ENOMEM;
-+      }
-+
-+      memset(dec, 0, sizeof(struct ttusb_dec));
-+
-+      dec->udev = udev;
-+
-+      ttusb_dec_init_usb(dec);
-+      ttusb_dec_init_stb(dec);
-+      ttusb_dec_init_dvb(dec);
-+      ttusb_dec_init_v_pes(dec);
-+
-+      usb_set_intfdata(intf, (void *)dec);
-+      ttusb_dec_set_streaming_interface(dec);
-+
-+      return 0;
-+}
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+static void ttusb_dec_disconnect(struct usb_device *udev, void *data)
-+{
-+      struct ttusb_dec *dec = data;
-+#else
-+static void ttusb_dec_disconnect(struct usb_interface *intf)
-+{
-+      struct ttusb_dec *dec = usb_get_intfdata(intf);
-+
-+      usb_set_intfdata(intf, NULL);
-+#endif
-+
-+      dprintk("%s\n", __FUNCTION__);
-+
-+      ttusb_dec_exit_usb(dec);
-+      ttusb_dec_exit_dvb(dec);
-+
-+      kfree(dec);
-+}
-+
-+static struct usb_device_id ttusb_dec_table[] = {
-+      {USB_DEVICE(0x0b48, 0x1006)},   /* Unconfirmed */
-+      {USB_DEVICE(0x0b48, 0x1007)},   /* Unconfirmed */
-+      {USB_DEVICE(0x0b48, 0x1008)},   /* DEC 2000 t */
-+      {}
-+};
-+
-+static struct usb_driver ttusb_dec_driver = {
-+      name:           DRIVER_NAME,
-+      probe:          ttusb_dec_probe,
-+      disconnect:     ttusb_dec_disconnect,
-+      id_table:               ttusb_dec_table,
-+};
-+
-+static int __init ttusb_dec_init(void)
-+{
-+      int result;
-+
-+      if ((result = usb_register(&ttusb_dec_driver)) < 0) {
-+              printk("%s: initialisation failed: error %d.\n", __FUNCTION__,
-+                     result);
-+              return result;
-+      }
-+
-+      return 0;
-+}
-+
-+static void __exit ttusb_dec_exit(void)
-+{
-+      usb_deregister(&ttusb_dec_driver);
-+}
-+
-+module_init(ttusb_dec_init);
-+module_exit(ttusb_dec_exit);
-+
-+MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>");
-+MODULE_DESCRIPTION(DRIVER_NAME);
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(usb, ttusb_dec_table);
-+
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "Debug level");
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/dvb/ttusb-dec/ttusb_dec.h 2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,87 @@
-+/*
-+ * TTUSB DEC Driver
-+ *
-+ * Copyright (C) 2003 Alex Woods <linux-dvb@giblets.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#ifndef _TTUSB_DEC_H
-+#define _TTUSB_DEC_H
-+
-+#include "asm/semaphore.h"
-+#include "dmxdev.h"
-+#include "dvb_demux.h"
-+#include "dvb_filter.h"
-+#include "dvb_i2c.h"
-+#include "dvb_net.h"
-+
-+#define DRIVER_NAME           "TechnoTrend/Hauppauge DEC USB"
-+
-+#define COMMAND_PIPE          0x03
-+#define RESULT_PIPE           0x84
-+#define STREAM_PIPE           0x88
-+
-+#define COMMAND_PACKET_SIZE   0x3c
-+#define ARM_PACKET_SIZE               0x1000
-+
-+#define ISO_BUF_COUNT         0x04
-+#define FRAMES_PER_ISO_BUF    0x04
-+#define ISO_FRAME_SIZE                0x0380
-+
-+#define       MAX_AV_PES_LENGTH       6144
-+
-+struct ttusb_dec {
-+      /* DVB bits */
-+      struct dvb_adapter      *adapter;
-+      struct dmxdev           dmxdev;
-+      struct dvb_demux        demux;
-+      struct dmx_frontend     frontend;
-+      struct dvb_i2c_bus      *i2c_bus;
-+      struct dvb_net          dvb_net;
-+
-+      u16                     pid[DMX_PES_OTHER];
-+
-+      /* USB bits */
-+      struct usb_device       *udev;
-+      u8                      trans_count;
-+      unsigned int            command_pipe;
-+      unsigned int            result_pipe;
-+      unsigned int            stream_pipe;
-+      int                     interface;
-+      struct semaphore        usb_sem;
-+
-+      void                    *iso_buffer;
-+      dma_addr_t              iso_dma_handle;
-+      struct urb              *iso_urb[ISO_BUF_COUNT];
-+      int                     iso_stream_count;
-+      struct semaphore        iso_sem;
-+
-+      u8                      av_pes[MAX_AV_PES_LENGTH + 4];
-+      int                     av_pes_state;
-+      int                     av_pes_length;
-+      int                     av_pes_payload_length;
-+
-+      struct dvb_filter_pes2ts        a_pes2ts;
-+      struct dvb_filter_pes2ts        v_pes2ts;
-+      struct semaphore                pes2ts_sem;
-+
-+      u8                      v_pes[16 + MAX_AV_PES_LENGTH];
-+      int                     v_pes_length;
-+      int                     v_pes_postbytes;
-+};
-+
-+#endif
---- linux-2.6.0-test1/drivers/media/video/dpc7146.c    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/video/dpc7146.c   2003-07-19 17:03:50.000000000 -0700
-@@ -173,6 +173,8 @@ static int dpc_init_done(struct saa7146_
-       return 0;
- }
-+static struct saa7146_ext_vv vv_data;
-+
- /* this function only gets called when the probing was successful */
- static int dpc_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_data *info)
- {
-@@ -183,7 +185,7 @@ static int dpc_attach(struct saa7146_dev
-       /* checking for i2c-devices can be omitted here, because we
-          already did this in "dpc_vl42_probe" */
--      saa7146_vv_init(dev);
-+      saa7146_vv_init(dev,&vv_data);
-       if( 0 != saa7146_register_device(&dpc->video_dev, dev, "dpc", VFL_TYPE_GRABBER)) {
-               ERR(("cannot register capture v4l2 device. skipping.\n"));
-               return -1;
-@@ -246,8 +248,9 @@ int dpc_vbi_bypass(struct saa7146_dev* d
- }
- #endif
--static int dpc_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) 
-+static int dpc_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) 
- {
-+      struct saa7146_dev *dev = fh->dev;
-       struct dpc* dpc = (struct dpc*)dev->ext_priv;
- /*
-       struct saa7146_vv *vv = dev->vv_data; 
-@@ -307,23 +310,32 @@ static int std_callback(struct saa7146_d
- }
- static struct saa7146_standard standard[] = {
--      { "PAL-BG",     V4L2_STD_PAL_BG,        SAA7146_PAL_VALUES },
--      { "PAL-I",      V4L2_STD_PAL_I,         SAA7146_PAL_VALUES },
--      { "NTSC",       V4L2_STD_NTSC,          SAA7146_NTSC_VALUES },
--      { "SECAM",      V4L2_STD_SECAM,         SAA7146_SECAM_VALUES },
-+      {
-+              .name   = "PAL",        .id     = V4L2_STD_PAL,
-+              .v_offset       = 0x17, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 680,  .h_calc         = 680+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }, {
-+              .name   = "NTSC",       .id     = V4L2_STD_NTSC,
-+              .v_offset       = 0x16, .v_field        = 240,  .v_calc         = 480,
-+              .h_offset       = 0x06, .h_pixels       = 708,  .h_calc         = 708+1,
-+              .v_max_out      = 480,  .h_max_out      = 640,
-+      }, {
-+              .name   = "SECAM",      .id     = V4L2_STD_SECAM,
-+              .v_offset       = 0x14, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 720,  .h_calc         = 720+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }
- };
--static
--struct saa7146_extension extension;
-+static struct saa7146_extension extension;
--static
--struct saa7146_pci_extension_data dpc = {
-+static struct saa7146_pci_extension_data dpc = {
-         .ext_priv = "Multimedia eXtension Board",
-         .ext = &extension,
- };
--static
--struct pci_device_id pci_tbl[] = {
-+static struct pci_device_id pci_tbl[] = {
-       {
-               .vendor    = PCI_VENDOR_ID_PHILIPS,
-               .device    = PCI_DEVICE_ID_PHILIPS_SAA7146,
-@@ -337,8 +349,7 @@ struct pci_device_id pci_tbl[] = {
- MODULE_DEVICE_TABLE(pci, pci_tbl);
--static
--struct saa7146_ext_vv vv_data = {
-+static struct saa7146_ext_vv vv_data = {
-       .inputs         = DPC_INPUTS,
-       .capabilities   = V4L2_CAP_VBI_CAPTURE,
-       .stds           = &standard[0],
-@@ -348,14 +359,12 @@ struct saa7146_ext_vv vv_data = {
-       .ioctl          = dpc_ioctl,
- };
--static
--struct saa7146_extension extension = {
-+static struct saa7146_extension extension = {
-       .name           = "dpc7146 demonstration board",
-       .flags          = SAA7146_USE_I2C_IRQ,
-       
-       .pci_tbl        = &pci_tbl[0],
-       .module         = THIS_MODULE,
--      .ext_vv_data    = &vv_data,
-       .probe          = dpc_probe,
-       .attach         = dpc_attach,
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_gemini.c     2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,411 @@
-+/*
-+    hexium_gemini.c - v4l2 driver for Hexium Gemini frame grabber cards
-+               
-+    Visit http://www.mihu.de/linux/saa7146/ and follow the link
-+    to "hexium" for further details about this card.
-+    
-+    Copyright (C) 2003 Michael Hunold <michael@mihu.de>
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*/
-+
-+#define DEBUG_VARIABLE debug
-+
-+#include <media/saa7146_vv.h>
-+
-+static int debug = 255;
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "debug verbosity");
-+
-+/* global variables */
-+int hexium_num = 0;
-+
-+#include "hexium_gemini.h"
-+
-+/* bring hardware to a sane state. this has to be done, just in case someone
-+   wants to capture from this device before it has been properly initialized.
-+   the capture engine would badly fail, because no valid signal arrives on the
-+   saa7146, thus leading to timeouts and stuff. */
-+static int hexium_init_done(struct saa7146_dev *dev)
-+{
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+      union i2c_smbus_data data;
-+      int i = 0;
-+
-+      DEB_D(("hexium_init_done called.\n"));
-+
-+      /* initialize the helper ics to useful values */
-+      for (i = 0; i < sizeof(hexium_ks0127b); i++) {
-+              data.byte = hexium_ks0127b[i];
-+              if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, i, I2C_SMBUS_BYTE_DATA, &data)) {
-+                      printk("failed for address 0x%02x\n", i);
-+              }
-+      }
-+
-+      return 0;
-+}
-+
-+static int hexium_set_input(struct hexium *hexium, int input)
-+{
-+      union i2c_smbus_data data;
-+
-+      DEB_D((".\n"));
-+
-+      data.byte = hexium_input_select[input].byte;
-+      if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, hexium_input_select[input].adr, I2C_SMBUS_BYTE_DATA, &data)) {
-+              return -1;
-+      }
-+
-+      return 0;
-+}
-+
-+static int hexium_set_standard(struct hexium *hexium, struct hexium_data *vdec)
-+{
-+      union i2c_smbus_data data;
-+      int i = 0;
-+
-+      DEB_D((".\n"));
-+
-+      while (vdec[i].adr != -1) {
-+              data.byte = vdec[i].byte;
-+              if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, vdec[i].adr, I2C_SMBUS_BYTE_DATA, &data)) {
-+                      printk("failed for address 0x%02x\n", i);
-+                      return -1;
-+              }
-+              i++;
-+      }
-+      return 0;
-+}
-+
-+static struct saa7146_ext_vv vv_data;
-+
-+/* this function only gets called when the probing was successful */
-+static int hexium_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data *info)
-+{
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+      DEB_EE((".\n"));
-+
-+      hexium = (struct hexium *) kmalloc(sizeof(struct hexium), GFP_KERNEL);
-+      if (NULL == hexium) {
-+              printk("hexium_v4l2.o: hexium_probe: not enough kernel memory.\n");
-+              return -ENOMEM;
-+      }
-+      memset(hexium, 0x0, sizeof(struct hexium));
-+      (struct hexium *) dev->ext_priv = hexium;
-+
-+      /* FIXME: enable i2c-port pins, video-port-pins
-+         video port pins should be enabled here ?! */
-+      saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
-+
-+      saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, SAA7146_I2C_BUS_BIT_RATE_480);
-+      if (i2c_add_adapter(&hexium->i2c_adapter) < 0) {
-+              DEB_S(("cannot register i2c-device. skipping.\n"));
-+              kfree(hexium);
-+              return -EFAULT;
-+      }
-+
-+      /*  set HWControl GPIO number 2 */
-+      saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI);
-+
-+      saa7146_write(dev, DD1_INIT, 0x07000700);
-+      saa7146_write(dev, DD1_STREAM_B, 0x00000000);
-+      saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
-+
-+      /* the rest */
-+      hexium->cur_input = 0;
-+      hexium_init_done(dev);
-+
-+      hexium_set_standard(hexium, hexium_pal);
-+      hexium->cur_std = V4L2_STD_PAL;
-+
-+      hexium_set_input(hexium, 0);
-+      hexium->cur_input = 0;
-+
-+      saa7146_vv_init(dev, &vv_data);
-+      if (0 != saa7146_register_device(&hexium->video_dev, dev, "hexium", VFL_TYPE_GRABBER)) {
-+              ERR(("cannot register capture v4l2 device. skipping.\n"));
-+              return -1;
-+      }
-+
-+      printk("hexium: found 'hexium frame grabber'-%d.\n", hexium_num);
-+      hexium_num++;
-+
-+      return 0;
-+}
-+
-+static int hexium_detach(struct saa7146_dev *dev)
-+{
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+      DEB_EE(("dev:%p\n", dev));
-+
-+      saa7146_unregister_device(&hexium->video_dev, dev);
-+      saa7146_vv_release(dev);
-+
-+      hexium_num--;
-+
-+      i2c_del_adapter(&hexium->i2c_adapter);
-+      kfree(hexium);
-+      return 0;
-+}
-+
-+static int hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
-+{
-+      struct saa7146_dev *dev = fh->dev;
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+/*
-+      struct saa7146_vv *vv = dev->vv_data; 
-+*/
-+      switch (cmd) {
-+      case VIDIOC_ENUMINPUT:
-+              {
-+                      struct v4l2_input *i = arg;
-+                      DEB_EE(("VIDIOC_ENUMINPUT %d.\n", i->index));
-+
-+                      if (i->index < 0 || i->index >= HEXIUM_INPUTS) {
-+                              return -EINVAL;
-+                      }
-+
-+                      memcpy(i, &hexium_inputs[i->index], sizeof(struct v4l2_input));
-+
-+                      DEB_D(("v4l2_ioctl: VIDIOC_ENUMINPUT %d.\n", i->index));
-+                      return 0;
-+              }
-+      case VIDIOC_G_INPUT:
-+              {
-+                      int *input = (int *) arg;
-+                      *input = hexium->cur_input;
-+
-+                      DEB_D(("VIDIOC_G_INPUT: %d\n", *input));
-+                      return 0;
-+              }
-+      case VIDIOC_S_INPUT:
-+              {
-+                      int input = *(int *) arg;
-+
-+                      DEB_EE(("VIDIOC_S_INPUT %d.\n", input));
-+
-+                      if (input < 0 || input >= HEXIUM_INPUTS) {
-+                              return -EINVAL;
-+                      }
-+
-+                      hexium->cur_input = input;
-+                      hexium_set_input(hexium, input);
-+
-+                      return 0;
-+              }
-+              /* the saa7146 provides some controls (brightness, contrast, saturation)
-+                 which gets registered *after* this function. because of this we have
-+                 to return with a value != 0 even if the function succeded.. */
-+      case VIDIOC_QUERYCTRL:
-+              {
-+                      struct v4l2_queryctrl *qc = arg;
-+                      int i;
-+
-+                      for (i = HEXIUM_CONTROLS - 1; i >= 0; i--) {
-+                              if (hexium_controls[i].id == qc->id) {
-+                                      *qc = hexium_controls[i];
-+                                      DEB_D(("VIDIOC_QUERYCTRL %d.\n", qc->id));
-+                                      return 0;
-+                              }
-+                      }
-+                      return -EAGAIN;
-+              }
-+      case VIDIOC_G_CTRL:
-+              {
-+                      struct v4l2_control *vc = arg;
-+                      int i;
-+
-+                      for (i = HEXIUM_CONTROLS - 1; i >= 0; i--) {
-+                              if (hexium_controls[i].id == vc->id) {
-+                                      break;
-+                              }
-+                      }
-+
-+                      if (i < 0) {
-+                              return -EAGAIN;
-+                      }
-+
-+                      switch (vc->id) {
-+                      case V4L2_CID_PRIVATE_BASE:{
-+                                      vc->value = hexium->cur_bw;
-+                                      DEB_D(("VIDIOC_G_CTRL BW:%d.\n", vc->value));
-+                                      return 0;
-+                              }
-+                      }
-+                      return -EINVAL;
-+              }
-+
-+      case VIDIOC_S_CTRL:
-+              {
-+                      struct v4l2_control *vc = arg;
-+                      int i = 0;
-+
-+                      for (i = HEXIUM_CONTROLS - 1; i >= 0; i--) {
-+                              if (hexium_controls[i].id == vc->id) {
-+                                      break;
-+                              }
-+                      }
-+
-+                      if (i < 0) {
-+                              return -EAGAIN;
-+                      }
-+
-+                      switch (vc->id) {
-+                      case V4L2_CID_PRIVATE_BASE:{
-+                                      hexium->cur_bw = vc->value;
-+                                      break;
-+                              }
-+                      }
-+
-+                      DEB_D(("VIDIOC_S_CTRL BW:%d.\n", hexium->cur_bw));
-+
-+                      if (0 == hexium->cur_bw && V4L2_STD_PAL == hexium->cur_std) {
-+                              hexium_set_standard(hexium, hexium_pal);
-+                              return 0;
-+                      }
-+                      if (0 == hexium->cur_bw && V4L2_STD_NTSC == hexium->cur_std) {
-+                              hexium_set_standard(hexium, hexium_ntsc);
-+                              return 0;
-+                      }
-+                      if (0 == hexium->cur_bw && V4L2_STD_SECAM == hexium->cur_std) {
-+                              hexium_set_standard(hexium, hexium_secam);
-+                              return 0;
-+                      }
-+                      if (1 == hexium->cur_bw && V4L2_STD_PAL == hexium->cur_std) {
-+                              hexium_set_standard(hexium, hexium_pal_bw);
-+                              return 0;
-+                      }
-+                      if (1 == hexium->cur_bw && V4L2_STD_NTSC == hexium->cur_std) {
-+                              hexium_set_standard(hexium, hexium_ntsc_bw);
-+                              return 0;
-+                      }
-+                      if (1 == hexium->cur_bw && V4L2_STD_SECAM == hexium->cur_std) {
-+                              /* fixme: is there no bw secam mode? */
-+                              return -EINVAL;
-+                      }
-+
-+                      return -EINVAL;
-+              }
-+      default:
-+/*
-+              DEB_D(("v4l2_ioctl does not handle this ioctl.\n"));
-+*/
-+              return -ENOIOCTLCMD;
-+      }
-+      return 0;
-+}
-+
-+static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *std)
-+{
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+      if (V4L2_STD_PAL == std->id) {
-+              hexium_set_standard(hexium, hexium_pal);
-+              hexium->cur_std = V4L2_STD_PAL;
-+              return 0;
-+      } else if (V4L2_STD_NTSC == std->id) {
-+              hexium_set_standard(hexium, hexium_ntsc);
-+              hexium->cur_std = V4L2_STD_NTSC;
-+              return 0;
-+      } else if (V4L2_STD_SECAM == std->id) {
-+              hexium_set_standard(hexium, hexium_secam);
-+              hexium->cur_std = V4L2_STD_SECAM;
-+              return 0;
-+      }
-+
-+      return -1;
-+}
-+
-+static struct saa7146_extension hexium_extension;
-+
-+static struct saa7146_pci_extension_data hexium_gemini_4bnc = {
-+      .ext_priv = "Hexium Gemini (4 BNC)",
-+      .ext = &hexium_extension,
-+};
-+
-+static struct saa7146_pci_extension_data hexium_gemini_dual_4bnc = {
-+      .ext_priv = "Hexium Gemini Dual (4 BNC)",
-+      .ext = &hexium_extension,
-+};
-+
-+static struct pci_device_id pci_tbl[] = {
-+      {
-+       .vendor = PCI_VENDOR_ID_PHILIPS,
-+       .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+       .subvendor = 0x17c8,
-+       .subdevice = 0x2401,
-+       .driver_data = (unsigned long) &hexium_gemini_4bnc,
-+       },
-+      {
-+       .vendor = PCI_VENDOR_ID_PHILIPS,
-+       .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+       .subvendor = 0x17c8,
-+       .subdevice = 0x2402,
-+       .driver_data = (unsigned long) &hexium_gemini_dual_4bnc,
-+       },
-+      {
-+       .vendor = 0,
-+       }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, pci_tbl);
-+
-+static struct saa7146_ext_vv vv_data = {
-+      .inputs = HEXIUM_INPUTS,
-+      .capabilities = 0,
-+      .stds = &hexium_standards[0],
-+      .num_stds = sizeof(hexium_standards) / sizeof(struct saa7146_standard),
-+      .std_callback = &std_callback,
-+      .ioctls = &ioctls[0],
-+      .ioctl = hexium_ioctl,
-+};
-+
-+static struct saa7146_extension hexium_extension = {
-+      .name = "hexium gemini",
-+      .flags = SAA7146_USE_I2C_IRQ,
-+
-+      .pci_tbl = &pci_tbl[0],
-+      .module = THIS_MODULE,
-+
-+      .attach = hexium_attach,
-+      .detach = hexium_detach,
-+
-+      .irq_mask = 0,
-+      .irq_func = NULL,
-+};
-+
-+int __init hexium_init_module(void)
-+{
-+      if (0 != saa7146_register_extension(&hexium_extension)) {
-+              DEB_S(("failed to register extension.\n"));
-+              return -ENODEV;
-+      }
-+
-+      return 0;
-+}
-+
-+void __exit hexium_cleanup_module(void)
-+{
-+      saa7146_unregister_extension(&hexium_extension);
-+}
-+
-+module_init(hexium_init_module);
-+module_exit(hexium_cleanup_module);
-+
-+MODULE_DESCRIPTION("video4linux-2 driver for Hexium Gemini frame grabber cards");
-+MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
-+MODULE_LICENSE("GPL");
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_gemini.h     2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,103 @@
-+#ifndef __HEXIUM_GEMINI__
-+#define __HEXIUM_GEMINI__
-+
-+#include "hexium.h"
-+
-+static struct saa7146_extension_ioctls ioctls[] = {
-+      { VIDIOC_G_INPUT,       SAA7146_EXCLUSIVE },
-+      { VIDIOC_S_INPUT,       SAA7146_EXCLUSIVE },
-+      { VIDIOC_QUERYCTRL,     SAA7146_BEFORE },
-+      { VIDIOC_ENUMINPUT,     SAA7146_EXCLUSIVE },
-+      { VIDIOC_S_STD,         SAA7146_AFTER },
-+      { VIDIOC_G_CTRL,        SAA7146_BEFORE },
-+      { VIDIOC_S_CTRL,        SAA7146_BEFORE },
-+      { 0,                    0 }
-+};
-+
-+#define HEXIUM_CONTROLS       1
-+static struct v4l2_queryctrl hexium_controls[] = {
-+      { V4L2_CID_PRIVATE_BASE, V4L2_CTRL_TYPE_BOOLEAN, "B/W", 0, 1, 1, 0, 0 },
-+};
-+
-+#define HEXIUM_GEMUINI_V_1_0          1
-+#define HEXIUM_GEMUINI_DUAL_V_1_0     2
-+
-+struct hexium
-+{
-+      int type;
-+      struct video_device     video_dev;
-+      struct i2c_adapter      i2c_adapter;
-+              
-+      int             cur_input;      /* current input */
-+      v4l2_std_id     cur_std;        /* current standard */
-+      int             cur_bw;         /* current black/white status */
-+};
-+
-+/* Samsung KS0127B decoder default registers */
-+static u8 hexium_ks0127b[0x100]={
-+/*00*/ 0x00,0x52,0x30,0x40,0x01,0x0C,0x2A,0x10,
-+/*08*/ 0x00,0x00,0x00,0x60,0x00,0x00,0x0F,0x06,
-+/*10*/ 0x00,0x00,0xE4,0xC0,0x00,0x00,0x00,0x00,
-+/*18*/ 0x14,0x9B,0xFE,0xFF,0xFC,0xFF,0x03,0x22,
-+/*20*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*28*/ 0x00,0x00,0x00,0x00,0x00,0x2C,0x9B,0x00,
-+/*30*/ 0x00,0x00,0x10,0x80,0x80,0x10,0x80,0x80,
-+/*38*/ 0x01,0x04,0x00,0x00,0x00,0x29,0xC0,0x00,
-+/*40*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*48*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*50*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*58*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*60*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*68*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*70*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*78*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*80*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*88*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*90*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*98*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*A0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*A8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*B0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*B8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*C0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*C8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*D0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*D8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*E0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*E8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*F0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*F8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-+};
-+
-+static struct hexium_data hexium_pal[] = {
-+      { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_pal_bw[] = {
-+      { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_ntsc[] = {
-+      { 0x01, 0x53 }, { 0x12, 0x04 }, { 0x2D, 0x23 }, { 0x2E, 0x81 }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_ntsc_bw[] = {
-+      { 0x01, 0x53 }, { 0x12, 0x04 }, { 0x2D, 0x23 }, { 0x2E, 0x81 }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_secam[] = {
-+      { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
-+};
-+
-+static struct hexium_data hexium_input_select[] = {
-+      { 0x02, 0x60 },
-+      { 0x02, 0x64 },
-+      { 0x02, 0x61 },
-+      { 0x02, 0x65 },
-+      { 0x02, 0x62 },
-+      { 0x02, 0x66 },
-+      { 0x02, 0x68 },
-+      { 0x02, 0x69 },
-+      { 0x02, 0x6A },
-+};
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium.h    2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,51 @@
-+#ifndef __HEXIUM__
-+#define __HEXIUM__
-+
-+#define HEXIUM_HV_PCI6_ORION          1
-+#define HEXIUM_ORION_1SVHS_3BNC               2
-+#define HEXIUM_ORION_4BNC             3
-+#define HEXIUM_GEMUINI                        4
-+#define HEXIUM_GEMUINI_DUAL           5
-+
-+static struct saa7146_standard hexium_standards[] = {
-+      {
-+              .name   = "PAL",        .id     = V4L2_STD_PAL,
-+              .v_offset       = 0x17, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 680,  .h_calc         = 680+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }, {
-+              .name   = "NTSC",       .id     = V4L2_STD_NTSC,
-+              .v_offset       = 0x17, .v_field        = 240,  .v_calc         = 480,
-+              .h_offset       = 0x06, .h_pixels       = 640,  .h_calc         = 641+1,
-+              .v_max_out      = 480,  .h_max_out      = 640,
-+      }, {
-+              .name   = "SECAM",      .id     = V4L2_STD_SECAM,
-+              .v_offset       = 0x14, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 720,  .h_calc         = 720+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }
-+};            
-+
-+
-+#define HEXIUM_INPUTS 9
-+static struct v4l2_input hexium_inputs[HEXIUM_INPUTS] = {
-+      { 0, "CVBS 1",  V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 1, "CVBS 2",  V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 2, "CVBS 3",  V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 3, "CVBS 4",  V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 4, "CVBS 5",  V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 5, "CVBS 6",  V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 6, "Y/C 1",   V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 7, "Y/C 2",   V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+      { 8, "Y/C 3",   V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-+};
-+
-+#define HEXIUM_AUDIOS 0
-+
-+struct hexium_data
-+{
-+      s8 adr;
-+      u8 byte;
-+};
-+
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_orion.c      2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,328 @@
-+/*
-+    hexium_orion.c - v4l2 driver for the Hexium Orion frame grabber cards
-+
-+    Visit http://www.mihu.de/linux/saa7146/ and follow the link
-+    to "hexium" for further details about this card.
-+    
-+    Copyright (C) 2003 Michael Hunold <michael@mihu.de>
-+
-+    This program is free software; you can redistribute it and/or modify
-+    it under the terms of the GNU General Public License as published by
-+    the Free Software Foundation; either version 2 of the License, or
-+    (at your option) any later version.
-+
-+    This program is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+    GNU General Public License for more details.
-+
-+    You should have received a copy of the GNU General Public License
-+    along with this program; if not, write to the Free Software
-+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*/
-+
-+#define DEBUG_VARIABLE debug
-+
-+#include <media/saa7146_vv.h>
-+
-+static int debug = 255;
-+MODULE_PARM(debug, "i");
-+MODULE_PARM_DESC(debug, "debug verbosity");
-+
-+/* global variables */
-+int hexium_num = 0;
-+
-+#include "hexium_orion.h"
-+
-+/* this is only called for old HV-PCI6/Orion cards
-+   without eeprom */
-+static int hexium_probe(struct saa7146_dev *dev)
-+{
-+      struct hexium *hexium = 0;
-+      union i2c_smbus_data data;
-+      int err = 0;
-+
-+      DEB_EE((".\n"));
-+
-+      /* there are no hexium orion cards with revision 0 saa7146s */
-+      if (0 == dev->revision) {
-+              return -EFAULT;
-+      }
-+
-+      hexium = (struct hexium *) kmalloc(sizeof(struct hexium), GFP_KERNEL);
-+      if (NULL == hexium) {
-+              printk("hexium_orion.o: hexium_probe: not enough kernel memory.\n");
-+              return -ENOMEM;
-+      }
-+      memset(hexium, 0x0, sizeof(struct hexium));
-+
-+      /* FIXME: enable i2c-port pins, video-port-pins
-+         video port pins should be enabled here ?! */
-+      saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
-+
-+      saa7146_write(dev, DD1_INIT, 0x02000200);
-+      saa7146_write(dev, DD1_STREAM_B, 0x00000000);
-+      saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
-+
-+      saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, SAA7146_I2C_BUS_BIT_RATE_480);
-+      if (i2c_add_adapter(&hexium->i2c_adapter) < 0) {
-+              DEB_S(("cannot register i2c-device. skipping.\n"));
-+              kfree(hexium);
-+              return -EFAULT;
-+      }
-+
-+      /* set SAA7110 control GPIO 0 */
-+      saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTHI);
-+      /*  set HWControl GPIO number 2 */
-+      saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI);
-+
-+      mdelay(10);
-+
-+      /* detect newer Hexium Orion cards by subsystem ids */
-+      if (0x17c8 == dev->pci->subsystem_vendor && 0x0101 == dev->pci->subsystem_device) {
-+              printk("hexium_orion.o: device is a Hexium Orion w/ 1 SVHS + 3 BNC inputs.\n");
-+              /* we store the pointer in our private data field */
-+              (struct hexium *) dev->ext_priv = hexium;
-+              hexium->type = HEXIUM_ORION_1SVHS_3BNC;
-+              return 0;
-+      }
-+
-+      if (0x17c8 == dev->pci->subsystem_vendor && 0x2101 == dev->pci->subsystem_device) {
-+              printk("hexium_orion.o: device is a Hexium Orion w/ 4 BNC inputs.\n");
-+              /* we store the pointer in our private data field */
-+              (struct hexium *) dev->ext_priv = hexium;
-+              hexium->type = HEXIUM_ORION_4BNC;
-+              return 0;
-+      }
-+
-+      /* check if this is an old hexium Orion card by looking at 
-+         a saa7110 at address 0x4e */
-+      if (0 == (err = i2c_smbus_xfer(&hexium->i2c_adapter, 0x4e, 0, I2C_SMBUS_READ, 0x00, I2C_SMBUS_BYTE_DATA, &data))) {
-+              printk("hexium_orion.o: device is a Hexium HV-PCI6/Orion (old).\n");
-+              /* we store the pointer in our private data field */
-+              (struct hexium *) dev->ext_priv = hexium;
-+              hexium->type = HEXIUM_HV_PCI6_ORION;
-+              return 0;
-+      }
-+
-+      i2c_del_adapter(&hexium->i2c_adapter);
-+      kfree(hexium);
-+      return -EFAULT;
-+}
-+
-+/* bring hardware to a sane state. this has to be done, just in case someone
-+   wants to capture from this device before it has been properly initialized.
-+   the capture engine would badly fail, because no valid signal arrives on the
-+   saa7146, thus leading to timeouts and stuff. */
-+static int hexium_init_done(struct saa7146_dev *dev)
-+{
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+      union i2c_smbus_data data;
-+      int i = 0;
-+
-+      DEB_D(("hexium_init_done called.\n"));
-+
-+      /* initialize the helper ics to useful values */
-+      for (i = 0; i < sizeof(hexium_saa7110); i++) {
-+              data.byte = hexium_saa7110[i];
-+              if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x4e, 0, I2C_SMBUS_WRITE, i, I2C_SMBUS_BYTE_DATA, &data)) {
-+                      printk("hexium_orion: failed for address 0x%02x\n", i);
-+              }
-+      }
-+
-+      return 0;
-+}
-+
-+static struct saa7146_ext_vv vv_data;
-+
-+/* this function only gets called when the probing was successful */
-+static int hexium_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data *info)
-+{
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+      DEB_EE((".\n"));
-+
-+      saa7146_vv_init(dev, &vv_data);
-+      if (0 != saa7146_register_device(&hexium->video_dev, dev, "hexium", VFL_TYPE_GRABBER)) {
-+              ERR(("cannot register capture v4l2 device. skipping.\n"));
-+              return -1;
-+      }
-+
-+      printk("hexium_orion.o: found 'hexium orion' frame grabber-%d.\n", hexium_num);
-+      hexium_num++;
-+
-+      /* the rest */
-+      hexium->cur_input = 0;
-+      hexium_init_done(dev);
-+
-+      return 0;
-+}
-+
-+static int hexium_detach(struct saa7146_dev *dev)
-+{
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+
-+      DEB_EE(("dev:%p\n", dev));
-+
-+      saa7146_unregister_device(&hexium->video_dev, dev);
-+      saa7146_vv_release(dev);
-+
-+      hexium_num--;
-+
-+      i2c_del_adapter(&hexium->i2c_adapter);
-+      kfree(hexium);
-+      return 0;
-+}
-+
-+static int hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
-+{
-+      struct saa7146_dev *dev = fh->dev;
-+      struct hexium *hexium = (struct hexium *) dev->ext_priv;
-+/*
-+      struct saa7146_vv *vv = dev->vv_data; 
-+*/
-+      switch (cmd) {
-+      case VIDIOC_ENUMINPUT:
-+              {
-+                      struct v4l2_input *i = arg;
-+                      DEB_EE(("VIDIOC_ENUMINPUT %d.\n", i->index));
-+
-+                      if (i->index < 0 || i->index >= HEXIUM_INPUTS) {
-+                              return -EINVAL;
-+                      }
-+
-+                      memcpy(i, &hexium_inputs[i->index], sizeof(struct v4l2_input));
-+
-+                      DEB_D(("v4l2_ioctl: VIDIOC_ENUMINPUT %d.\n", i->index));
-+                      return 0;
-+              }
-+      case VIDIOC_G_INPUT:
-+              {
-+                      int *input = (int *) arg;
-+                      *input = hexium->cur_input;
-+
-+                      DEB_D(("VIDIOC_G_INPUT: %d\n", *input));
-+                      return 0;
-+              }
-+      case VIDIOC_S_INPUT:
-+              {
-+                      int input = *(int *) arg;
-+
-+                      if (input < 0 || input >= HEXIUM_INPUTS) {
-+                              return -EINVAL;
-+                      }
-+
-+                      hexium->cur_input = input;
-+
-+                      /* fixme: switch input here, switch audio, too! */
-+//              saa7146_set_hps_source_and_sync(dev, input_port_selection[input].hps_source, input_port_selection[input].hps_sync);
-+                      printk("hexium_orion.o: VIDIOC_S_INPUT: fixme switch input.\n");
-+
-+                      return 0;
-+              }
-+      default:
-+/*
-+              DEB_D(("v4l2_ioctl does not handle this ioctl.\n"));
-+*/
-+              return -ENOIOCTLCMD;
-+      }
-+      return 0;
-+}
-+
-+static int std_callback(struct saa7146_dev *dev, struct saa7146_standard *std)
-+{
-+      return 0;
-+}
-+
-+static struct saa7146_extension extension;
-+
-+static struct saa7146_pci_extension_data hexium_hv_pci6 = {
-+      .ext_priv = "Hexium HV-PCI6 / Orion",
-+      .ext = &extension,
-+};
-+
-+static struct saa7146_pci_extension_data hexium_orion_1svhs_3bnc = {
-+      .ext_priv = "Hexium HV-PCI6 / Orion (1 SVHS/3 BNC)",
-+      .ext = &extension,
-+};
-+
-+static struct saa7146_pci_extension_data hexium_orion_4bnc = {
-+      .ext_priv = "Hexium HV-PCI6 / Orion (4 BNC)",
-+      .ext = &extension,
-+};
-+
-+static struct pci_device_id pci_tbl[] = {
-+      {
-+       .vendor = PCI_VENDOR_ID_PHILIPS,
-+       .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+       .subvendor = 0x0000,
-+       .subdevice = 0x0000,
-+       .driver_data = (unsigned long) &hexium_hv_pci6,
-+       },
-+      {
-+       .vendor = PCI_VENDOR_ID_PHILIPS,
-+       .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+       .subvendor = 0x17c8,
-+       .subdevice = 0x0101,
-+       .driver_data = (unsigned long) &hexium_orion_1svhs_3bnc,
-+       },
-+      {
-+       .vendor = PCI_VENDOR_ID_PHILIPS,
-+       .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
-+       .subvendor = 0x17c8,
-+       .subdevice = 0x2101,
-+       .driver_data = (unsigned long) &hexium_orion_4bnc,
-+       },
-+      {
-+       .vendor = 0,
-+       }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, pci_tbl);
-+
-+static struct saa7146_ext_vv vv_data = {
-+      .inputs = HEXIUM_INPUTS,
-+      .capabilities = 0,
-+      .stds = &hexium_standards[0],
-+      .num_stds = sizeof(hexium_standards) / sizeof(struct saa7146_standard),
-+      .std_callback = &std_callback,
-+      .ioctls = &ioctls[0],
-+      .ioctl = hexium_ioctl,
-+};
-+
-+static struct saa7146_extension extension = {
-+      .name = "hexium HV-PCI6/Orion",
-+      .flags = 0,             // SAA7146_USE_I2C_IRQ,
-+
-+      .pci_tbl = &pci_tbl[0],
-+      .module = THIS_MODULE,
-+
-+      .probe = hexium_probe,
-+      .attach = hexium_attach,
-+      .detach = hexium_detach,
-+
-+      .irq_mask = 0,
-+      .irq_func = NULL,
-+};
-+
-+int __init hexium_init_module(void)
-+{
-+      if (0 != saa7146_register_extension(&extension)) {
-+              DEB_S(("failed to register extension.\n"));
-+              return -ENODEV;
-+      }
-+
-+      return 0;
-+}
-+
-+void __exit hexium_cleanup_module(void)
-+{
-+      saa7146_unregister_extension(&extension);
-+}
-+
-+module_init(hexium_init_module);
-+module_exit(hexium_cleanup_module);
-+
-+MODULE_DESCRIPTION("video4linux-2 driver for Hexium Orion frame grabber cards");
-+MODULE_AUTHOR("Michael Hunold <michael@mihu.de>");
-+MODULE_LICENSE("GPL");
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/media/video/hexium_orion.h      2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,138 @@
-+#ifndef __HEXIUM_ORION__
-+#define __HEXIUM_ORION__
-+
-+#include "hexium.h"
-+
-+static struct saa7146_extension_ioctls ioctls[] = {
-+      { VIDIOC_G_INPUT,       SAA7146_EXCLUSIVE },
-+      { VIDIOC_S_INPUT,       SAA7146_EXCLUSIVE },
-+      { VIDIOC_ENUMINPUT,     SAA7146_EXCLUSIVE },
-+      { VIDIOC_S_STD,         SAA7146_AFTER },
-+      { 0,                    0 }
-+};
-+
-+struct hexium
-+{
-+      int type;
-+      struct video_device     video_dev;
-+      struct i2c_adapter      i2c_adapter;    
-+      int cur_input;  /* current input */
-+};
-+
-+/* Philips SAA7110 decoder default registers */
-+static u8 hexium_saa7110[53]={
-+/*00*/ 0x4C,0x3C,0x0D,0xEF,0xBD,0xF0,0x00,0x00,
-+/*08*/ 0xF8,0xF8,0x60,0x60,0x40,0x86,0x18,0x90,
-+/*10*/ 0x00,0x2C,0x40,0x46,0x42,0x1A,0xFF,0xDA,
-+/*18*/ 0xF0,0x8B,0x00,0x00,0x00,0x00,0x00,0x00,
-+/*20*/ 0xD9,0x17,0x40,0x41,0x80,0x41,0x80,0x4F,
-+/*28*/ 0xFE,0x01,0x0F,0x0F,0x03,0x01,0x81,0x03,
-+/*30*/ 0x44,0x75,0x01,0x8C,0x03
-+};
-+
-+static struct {
-+      struct hexium_data data[8];     
-+} hexium_input_select[] = {
-+{
-+      { /* input 0 */
-+              { 0x06, 0x00 },
-+              { 0x20, 0xD9 },
-+              { 0x21, 0x17 }, // 0x16,
-+              { 0x22, 0x40 },
-+              { 0x2C, 0x03 },
-+              { 0x30, 0x44 },
-+              { 0x31, 0x75 }, // ??
-+              { 0x21, 0x16 }, // 0x03,
-+      }
-+}, {
-+      { /* input 1 */
-+              { 0x06, 0x00 },
-+              { 0x20, 0xD8 },
-+              { 0x21, 0x17 }, // 0x16,
-+              { 0x22, 0x40 },
-+              { 0x2C, 0x03 },
-+              { 0x30, 0x44 },
-+              { 0x31, 0x75 }, // ??
-+              { 0x21, 0x16 }, // 0x03,
-+      }
-+}, {
-+      { /* input 2 */
-+              { 0x06, 0x00 },
-+              { 0x20, 0xBA },
-+              { 0x21, 0x07 }, // 0x05,
-+              { 0x22, 0x91 },
-+              { 0x2C, 0x03 },
-+              { 0x30, 0x60 },
-+              { 0x31, 0xB5 }, // ??
-+              { 0x21, 0x05 }, // 0x03,
-+      }
-+}, {
-+      { /* input 3 */
-+              { 0x06, 0x00 },
-+              { 0x20, 0xB8 },
-+              { 0x21, 0x07 }, // 0x05,
-+              { 0x22, 0x91 },
-+              { 0x2C, 0x03 },
-+              { 0x30, 0x60 },
-+              { 0x31, 0xB5 }, // ??
-+              { 0x21, 0x05 }, // 0x03,
-+      }
-+}, {
-+      { /* input 4 */
-+              { 0x06, 0x00 },
-+              { 0x20, 0x7C },
-+              { 0x21, 0x07 }, // 0x03
-+              { 0x22, 0xD2 },
-+              { 0x2C, 0x83 },
-+              { 0x30, 0x60 },
-+              { 0x31, 0xB5 }, // ??
-+              { 0x21, 0x03 },
-+      } 
-+}, {
-+      { /* input 5 */
-+              { 0x06, 0x00 },
-+              { 0x20, 0x78 },
-+              { 0x21, 0x07 }, // 0x03,
-+              { 0x22, 0xD2 },
-+              { 0x2C, 0x83 },
-+              { 0x30, 0x60 },
-+              { 0x31, 0xB5 }, // ?
-+              { 0x21, 0x03 },
-+      }
-+}, {
-+      { /* input 6 */
-+              { 0x06, 0x80 },
-+              { 0x20, 0x59 },
-+              { 0x21, 0x17 },
-+              { 0x22, 0x42 },
-+              { 0x2C, 0xA3 },
-+              { 0x30, 0x44 },
-+              { 0x31, 0x75 },
-+              { 0x21, 0x12 },
-+      }
-+}, {
-+      { /* input 7 */
-+              { 0x06, 0x80 },
-+              { 0x20, 0x9A },
-+              { 0x21, 0x17 },
-+              { 0x22, 0xB1 },
-+              { 0x2C, 0x13 },
-+              { 0x30, 0x60 },
-+              { 0x31, 0xB5 },
-+              { 0x21, 0x14 },
-+      }
-+}, {
-+      { /* input 8 */
-+              { 0x06, 0x80 },
-+              { 0x20, 0x3C },
-+              { 0x21, 0x27 },
-+              { 0x22, 0xC1 },
-+              { 0x2C, 0x23 },
-+              { 0x30, 0x44 },
-+              { 0x31, 0x75 },
-+              { 0x21, 0x21 },
-+      }
-+}     
-+};
-+
-+#endif
---- linux-2.6.0-test1/drivers/media/video/Kconfig      2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/media/video/Kconfig     2003-07-19 17:03:50.000000000 -0700
-@@ -257,5 +257,30 @@ config VIDEO_DPC
-         whenever you want). If you want to compile it as a module, say M
-         here and read <file:Documentation/modules.txt>.
-+config VIDEO_HEXIUM_ORION
-+      tristate "Hexium HV-PCI6 and Orion frame grabber"
-+      depends on VIDEO_DEV && PCI
-+      ---help---
-+        This is a video4linux driver for the Hexium HV-PCI6 and
-+        Orion frame grabber cards by Hexium.
-+        
-+        This driver is available as a module called hexium_orion
-+        ( = code which can be inserted in and removed from the
-+        running kernel whenever you want). If you want to compile
-+        it as a module, say M here and read <file:Documentation/modules.txt>.
-+
-+config VIDEO_HEXIUM_GEMINI
-+      tristate "Hexium Gemini frame grabber"
-+      depends on VIDEO_DEV && PCI
-+      ---help---
-+        This is a video4linux driver for the Hexium Gemini frame
-+        grabber card by Hexium. Please note that the Gemini Dual
-+        card is *not* fully supported.
-+        
-+        This driver is available as a module called hexium_gemini
-+        ( = code which can be inserted in and removed from the
-+        running kernel whenever you want). If you want to compile
-+        it as a module, say M here and read <file:Documentation/modules.txt>.
-+
- endmenu
---- linux-2.6.0-test1/drivers/media/video/Makefile     2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/media/video/Makefile    2003-07-19 17:03:50.000000000 -0700
-@@ -31,6 +31,8 @@ obj-$(CONFIG_VIDEO_CPIA_USB) += cpia_usb
- obj-$(CONFIG_VIDEO_MEYE) += meye.o
- obj-$(CONFIG_VIDEO_SAA7134) += saa7134/
- obj-$(CONFIG_VIDEO_MXB) += saa7111.o tuner.o tda9840.o tea6415c.o tea6420.o mxb.o
-+obj-$(CONFIG_VIDEO_HEXIUM_ORION) += hexium_orion.o
-+obj-$(CONFIG_VIDEO_HEXIUM_GEMINI) += hexium_gemini.o
- obj-$(CONFIG_VIDEO_DPC) += saa7111.o dpc7146.o
- obj-$(CONFIG_TUNER_3036) += tuner-3036.o
---- linux-2.6.0-test1/drivers/media/video/mxb.c        2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/media/video/mxb.c       2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@ MODULE_PARM_DESC(debug, "debug verbosity
- enum { TUNER, AUX1, AUX3, AUX3_YC };
- static struct v4l2_input mxb_inputs[MXB_INPUTS] = {
--      { TUNER,        "Tuner",                V4L2_INPUT_TYPE_TUNER,  1, 1, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, 
-+      { TUNER,        "Tuner",                V4L2_INPUT_TYPE_TUNER,  1, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, 
-       { AUX1,         "AUX1",                 V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-       { AUX3,         "AUX3 Composite",       V4L2_INPUT_TYPE_CAMERA, 4, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-       { AUX3_YC,      "AUX3 S-Video",         V4L2_INPUT_TYPE_CAMERA, 4, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 },
-@@ -101,8 +101,8 @@ static struct {
- /* this array holds the information of the audio source (mxb_audios),
-    which has to be switched corresponding to the video source (mxb_channels) */
--static int video_audio_connect[MXB_AUDIOS] =
--      { 0, 1, 2, 3, 3 };
-+static int video_audio_connect[MXB_INPUTS] =
-+      { 0, 1, 3, 3 };
- /* these are the necessary input-output-pins for bringing one audio source
- (see above) to the CD-output */
-@@ -173,8 +173,7 @@ struct mxb
-       int     cur_mute;       /* current mute status */
- };
--static
--struct saa7146_extension extension;
-+static struct saa7146_extension extension;
- static int mxb_vbi_bypass(struct saa7146_dev* dev)
- {
-@@ -431,10 +430,11 @@ static int mxb_init_done(struct saa7146_
-                  polling method ... */
-               extension.flags &= ~SAA7146_USE_I2C_IRQ;
-               for(i = 1;;i++) {
--                      msg.len = mxb_saa7740_init[i].length;           
--                      if (msg.len == -1U) {
-+                      if( -1 == mxb_saa7740_init[i].length ) {
-                               break;
-                       }
-+
-+                      msg.len = mxb_saa7740_init[i].length;           
-                       msg.buf = &mxb_saa7740_init[i].data[0];
-                       if( 1 != (err = i2c_transfer(&mxb->i2c_adapter, &msg, 1))) {
-                               DEB_D(("failed to initialize 'sound arena module'.\n"));
-@@ -472,6 +472,8 @@ void mxb_irq_bh(struct saa7146_dev* dev,
- }
- */
-+static struct saa7146_ext_vv vv_data;
-+
- /* this function only gets called when the probing was successful */
- static int mxb_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_data *info)
- {
-@@ -482,7 +484,7 @@ static int mxb_attach(struct saa7146_dev
-       /* checking for i2c-devices can be omitted here, because we
-          already did this in "mxb_vl42_probe" */
--      saa7146_vv_init(dev);
-+      saa7146_vv_init(dev,&vv_data);
-       if( 0 != saa7146_register_device(&mxb->video_dev, dev, "mxb", VFL_TYPE_GRABBER)) {
-               ERR(("cannot register capture v4l2 device. skipping.\n"));
-               return -1;
-@@ -566,8 +568,9 @@ static int saa7111_set_gpio(struct saa71
-       return 0;
- }
--static int mxb_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) 
-+static int mxb_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) 
- {
-+      struct saa7146_dev *dev = fh->dev;
-       struct mxb* mxb = (struct mxb*)dev->ext_priv;
-       struct saa7146_vv *vv = dev->vv_data; 
-       
-@@ -1002,20 +1005,35 @@ static int std_callback(struct saa7146_d
- }
- static struct saa7146_standard standard[] = {
--      { "PAL-BG",     V4L2_STD_PAL_BG,        SAA7146_PAL_VALUES },
--      { "PAL-I",      V4L2_STD_PAL_I,         SAA7146_PAL_VALUES },
--      { "NTSC",       V4L2_STD_NTSC,          SAA7146_NTSC_VALUES },
--      { "SECAM",      V4L2_STD_SECAM,         SAA7146_SECAM_VALUES },
-+      {
-+              .name   = "PAL-BG",     .id     = V4L2_STD_PAL_BG,
-+              .v_offset       = 0x17, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 680,  .h_calc         = 680+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }, {
-+              .name   = "PAL-I",      .id     = V4L2_STD_PAL_I,
-+              .v_offset       = 0x17, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 680,  .h_calc         = 680+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }, {
-+              .name   = "NTSC",       .id     = V4L2_STD_NTSC,
-+              .v_offset       = 0x16, .v_field        = 240,  .v_calc         = 480,
-+              .h_offset       = 0x06, .h_pixels       = 708,  .h_calc         = 708+1,
-+              .v_max_out      = 480,  .h_max_out      = 640,
-+      }, {
-+              .name   = "SECAM",      .id     = V4L2_STD_SECAM,
-+              .v_offset       = 0x14, .v_field        = 288,  .v_calc         = 576,
-+              .h_offset       = 0x14, .h_pixels       = 720,  .h_calc         = 720+1,
-+              .v_max_out      = 576,  .h_max_out      = 768,
-+      }
- };
--static
--struct saa7146_pci_extension_data mxb = {
-+static struct saa7146_pci_extension_data mxb = {
-         .ext_priv = "Multimedia eXtension Board",
-         .ext = &extension,
- };
--static
--struct pci_device_id pci_tbl[] = {
-+static struct pci_device_id pci_tbl[] = {
-       {
-               .vendor    = PCI_VENDOR_ID_PHILIPS,
-               .device    = PCI_DEVICE_ID_PHILIPS_SAA7146,
-@@ -1029,8 +1047,7 @@ struct pci_device_id pci_tbl[] = {
- MODULE_DEVICE_TABLE(pci, pci_tbl);
--static
--struct saa7146_ext_vv vv_data = {
-+static struct saa7146_ext_vv vv_data = {
-       .inputs         = MXB_INPUTS,
-       .capabilities   = V4L2_CAP_TUNER | V4L2_CAP_VBI_CAPTURE,
-       .stds           = &standard[0],
-@@ -1040,14 +1057,12 @@ struct saa7146_ext_vv vv_data = {
-       .ioctl          = mxb_ioctl,
- };
--static
--struct saa7146_extension extension = {
-+static struct saa7146_extension extension = {
-       .name           = MXB_IDENTIFIER,
-       .flags          = SAA7146_USE_I2C_IRQ,
-       
-       .pci_tbl        = &pci_tbl[0],
-       .module         = THIS_MODULE,
--      .ext_vv_data    = &vv_data,
-       .probe          = mxb_probe,
-       .attach         = mxb_attach,
---- linux-2.6.0-test1/drivers/media/video/pms.c        2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/media/video/pms.c       2003-07-19 17:03:50.000000000 -0700
-@@ -12,6 +12,10 @@
-  *    Most of this code is directly derived from his userspace driver.
-  *    His driver works so send any reports to alan@redhat.com unless the
-  *    userspace driver also doesn't work for you...
-+ *      
-+ *      Changes:
-+ *      08/07/2003        Daniele Bellucci <bellucda@tiscali.it>
-+ *                        - pms_capture: report back -EFAULT 
-  */
- #include <linux/module.h>
-@@ -659,7 +663,8 @@ static int pms_capture(struct pms_device
-                       if(dt+len>count)
-                               dt=count-len;
-                       cnt += dev->height;
--                      copy_to_user(buf, tmp+32, dt);
-+                      if (copy_to_user(buf, tmp+32, dt))
-+                              return -EFAULT;
-                       buf += dt;    
-                       len += dt;
-               }
---- linux-2.6.0-test1/drivers/message/fusion/mptctl.c  2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/message/fusion/mptctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -88,7 +88,6 @@
- #include <linux/kdev_t.h>     /* needed for access to Scsi_Host struct */
- #include <linux/blkdev.h>
--#include <linux/blk.h>          /* for io_request_lock (spinlock) decl */
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
---- linux-2.6.0-test1/drivers/message/fusion/mptscsih.c        2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/message/fusion/mptscsih.c       2003-07-19 17:03:50.000000000 -0700
-@@ -72,7 +72,6 @@
- #include <linux/errno.h>
- #include <linux/kdev_t.h>
- #include <linux/blkdev.h>
--#include <linux/blk.h>                /* for io_request_lock (spinlock) decl */
- #include <linux/delay.h>      /* for mdelay */
- #include <linux/interrupt.h>  /* needed for in_interrupt() proto */
- #include <linux/reboot.h>     /* notifier code */
---- linux-2.6.0-test1/drivers/message/i2o/i2o_block.c  2003-06-14 12:18:28.000000000 -0700
-+++ 25/drivers/message/i2o/i2o_block.c 2003-07-19 17:03:50.000000000 -0700
-@@ -87,8 +87,6 @@
- #define MAJOR_NR I2O_MAJOR
--#include <linux/blk.h>
--
- #define MAX_I2OB      16
- #define MAX_I2OB_DEPTH        8
---- linux-2.6.0-test1/drivers/message/i2o/i2o_scsi.c   2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/message/i2o/i2o_scsi.c  2003-07-19 17:03:50.000000000 -0700
-@@ -54,7 +54,7 @@
- #include <asm/system.h>
- #include <asm/io.h>
- #include <asm/atomic.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/i2o.h>
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
---- linux-2.6.0-test1/drivers/mtd/devices/blkmtd.c     2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/mtd/devices/blkmtd.c    2003-07-19 17:07:03.000000000 -0700
-@@ -1189,6 +1189,7 @@ static int __init init_blkmtd(void)
-   INIT_LIST_HEAD(&mtd_rawdevice->as.locked_pages);
-   mtd_rawdevice->as.host = NULL;
-   init_MUTEX(&(mtd_rawdevice->as.i_shared_sem));
-+  atomic_set(&(mtd_rawdevice->as.truncate_count), 0);
-   mtd_rawdevice->as.a_ops = &blkmtd_aops;
-   INIT_LIST_HEAD(&mtd_rawdevice->as.i_mmap);
---- linux-2.6.0-test1/drivers/mtd/mtd_blkdevs.c        2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/mtd/mtd_blkdevs.c       2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,6 @@
- #include <linux/mtd/blktrans.h>
- #include <linux/mtd/mtd.h>
- #include <linux/blkdev.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/spinlock.h>
- #include <linux/hdreg.h>
---- linux-2.6.0-test1/drivers/net/3c59x.c      2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/net/3c59x.c     2003-07-19 17:06:13.000000000 -0700
-@@ -291,8 +291,6 @@ MODULE_PARM(global_full_duplex, "i");
- MODULE_PARM(full_duplex, "1-" __MODULE_STRING(8) "i");
- MODULE_PARM(hw_checksums, "1-" __MODULE_STRING(8) "i");
- MODULE_PARM(flow_ctrl, "1-" __MODULE_STRING(8) "i");
--MODULE_PARM(global_enable_wol, "i");
--MODULE_PARM(enable_wol, "1-" __MODULE_STRING(8) "i");
- MODULE_PARM(rx_copybreak, "i");
- MODULE_PARM(max_interrupt_work, "i");
- MODULE_PARM(compaq_ioaddr, "i");
-@@ -306,8 +304,6 @@ MODULE_PARM_DESC(full_duplex, "3c59x ful
- MODULE_PARM_DESC(global_full_duplex, "3c59x: same as full_duplex, but applies to all NICs if options is unset");
- MODULE_PARM_DESC(hw_checksums, "3c59x Hardware checksum checking by adapter(s) (0-1)");
- MODULE_PARM_DESC(flow_ctrl, "3c59x 802.3x flow control usage (PAUSE only) (0-1)");
--MODULE_PARM_DESC(enable_wol, "3c59x: Turn on Wake-on-LAN for adapter(s) (0-1)");
--MODULE_PARM_DESC(global_enable_wol, "3c59x: same as enable_wol, but applies to all NICs if options is unset");
- MODULE_PARM_DESC(rx_copybreak, "3c59x copy breakpoint for copy-only-tiny-frames");
- MODULE_PARM_DESC(max_interrupt_work, "3c59x maximum events handled per interrupt");
- MODULE_PARM_DESC(compaq_ioaddr, "3c59x PCI I/O base address (Compaq BIOS problem workaround)");
-@@ -484,10 +480,8 @@ static struct vortex_chip_info {
- } vortex_info_tbl[] __devinitdata = {
-       {"3c590 Vortex 10Mbps",
-        PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, },
--#define EISA_3C592_OFFSET 1           /* Offset of this entry for vortex_eisa_init */
-       {"3c592 EISA 10Mbps Demon/Vortex",                                      /* AKPM: from Don's 3c59x_cb.c 0.49H */
-        PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, },
--#define EISA_3C597_OFFSET 2           /* Offset of this entry for vortex_eisa_init */
-       {"3c597 EISA Fast Demon/Vortex",                                        /* AKPM: from Don's 3c59x_cb.c 0.49H */
-        PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, },
-       {"3c595 Vortex 100baseTx",
-@@ -819,7 +813,6 @@ struct vortex_private {
-               flow_ctrl:1,                                    /* Use 802.3x flow control (PAUSE only) */
-               partner_flow_ctrl:1,                    /* Partner supports flow control */
-               has_nway:1,
--              enable_wol:1,                                   /* Wake-on-LAN is enabled */
-               pm_state_valid:1,                               /* power_state[] has sane contents */
-               open:1,
-               medialock:1,
-@@ -915,10 +908,8 @@ static int options[MAX_UNITS] = { -1, -1
- static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
- static int hw_checksums[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
- static int flow_ctrl[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
--static int enable_wol[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
- static int global_options = -1;
- static int global_full_duplex = -1;
--static int global_enable_wol = -1;
- /* #define dev_alloc_skb dev_alloc_skb_debug */
-@@ -960,8 +951,8 @@ static int vortex_resume (struct pci_dev
- #ifdef CONFIG_EISA
- static struct eisa_device_id vortex_eisa_ids[] = {
--      { "TCM5920", EISA_3C592_OFFSET },
--      { "TCM5970", EISA_3C597_OFFSET },
-+      { "TCM5920", CH_3C592 },
-+      { "TCM5970", CH_3C597 },
-       { "" }
- };
-@@ -1138,8 +1129,6 @@ static int __devinit vortex_probe1(struc
-                       vortex_debug = 7;
-               if (option & 0x4000)
-                       vortex_debug = 2;
--              if (option & 0x0400)
--                      vp->enable_wol = 1;
-       }
-       print_info = (vortex_debug > 1);
-@@ -1227,16 +1216,12 @@ static int __devinit vortex_probe1(struc
-       if (global_full_duplex > 0)
-               vp->full_duplex = 1;
--      if (global_enable_wol > 0)
--              vp->enable_wol = 1;
-       if (card_idx < MAX_UNITS) {
-               if (full_duplex[card_idx] > 0)
-                       vp->full_duplex = 1;
-               if (flow_ctrl[card_idx] > 0)
-                       vp->flow_ctrl = 1;
--              if (enable_wol[card_idx] > 0)
--                      vp->enable_wol = 1;
-       }
-       vp->force_fd = vp->full_duplex;
-@@ -1379,7 +1364,7 @@ static int __devinit vortex_probe1(struc
-       } else
-               dev->if_port = vp->default_media;
--      if ((vp->available_media & 0x4b) || (vci->drv_flags & HAS_NWAY) ||
-+      if ((vp->available_media & 0x40) || (vci->drv_flags & HAS_NWAY) ||
-               dev->if_port == XCVR_MII || dev->if_port == XCVR_NWAY) {
-               int phy, phy_idx = 0;
-               EL3WINDOW(4);
-@@ -1463,7 +1448,7 @@ static int __devinit vortex_probe1(struc
-       dev->set_multicast_list = set_rx_mode;
-       dev->tx_timeout = vortex_tx_timeout;
-       dev->watchdog_timeo = (watchdog * HZ) / 1000;
--      if (pdev && vp->enable_wol) {
-+      if (pdev) {
-               vp->pm_state_valid = 1;
-               pci_save_state(VORTEX_PCI(vp), vp->power_state);
-               acpi_set_WOL(dev);
-@@ -1520,7 +1505,7 @@ vortex_up(struct net_device *dev)
-       unsigned int config;
-       int i;
--      if (VORTEX_PCI(vp) && vp->enable_wol) {
-+      if (VORTEX_PCI(vp)) {
-               pci_set_power_state(VORTEX_PCI(vp), 0); /* Go active */
-               pci_restore_state(VORTEX_PCI(vp), vp->power_state);
-       }
-@@ -2669,7 +2654,7 @@ vortex_down(struct net_device *dev)
-       if (vp->full_bus_master_tx)
-               outl(0, ioaddr + DownListPtr);
--      if (VORTEX_PCI(vp) && vp->enable_wol) {
-+      if (VORTEX_PCI(vp)) {
-               pci_save_state(VORTEX_PCI(vp), vp->power_state);
-               acpi_set_WOL(dev);
-       }
-@@ -3059,7 +3044,7 @@ static void __devexit vortex_remove_one 
-       /* Should really use issue_and_wait() here */
-       outw(TotalReset|0x14, dev->base_addr + EL3_CMD);
--      if (VORTEX_PCI(vp) && vp->enable_wol) {
-+      if (VORTEX_PCI(vp)) {
-               pci_set_power_state(VORTEX_PCI(vp), 0); /* Go active */
-               if (vp->pm_state_valid)
-                       pci_restore_state(VORTEX_PCI(vp), vp->power_state);
---- linux-2.6.0-test1/drivers/net/eql.c        2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/net/eql.c       2003-07-19 17:03:50.000000000 -0700
-@@ -162,22 +162,12 @@ static void eql_timer(unsigned long para
- static char version[] __initdata = 
-       "Equalizer2002: Simon Janes (simon@ncm.com) and David S. Miller (davem@redhat.com)\n";
--static int __init eql_init(struct net_device *dev)
-+static void __init eql_setup(struct net_device *dev)
- {
--      static unsigned int version_printed;
--      equalizer_t *eql;
-+      equalizer_t *eql = dev->priv;
-       SET_MODULE_OWNER(dev);
--      if (version_printed++ == 0)
--              printk(version);
--
--      dev->priv = kmalloc(sizeof (equalizer_t), GFP_KERNEL);
--      if (dev->priv == NULL)
--              return -ENOMEM;
--      memset(dev->priv, 0, sizeof (equalizer_t));
--      eql = dev->priv;
--
-       init_timer(&eql->timer);
-       eql->timer.data         = (unsigned long) dev->priv;
-       eql->timer.expires      = jiffies + EQL_DEFAULT_RESCHED_IVAL;
-@@ -203,8 +193,6 @@ static int __init eql_init(struct net_de
-       dev->type               = ARPHRD_SLIP;
-       dev->tx_queue_len       = 5;            /* Hands them off fast */
--
--      return 0;
- }
- static int eql_open(struct net_device *dev)
-@@ -598,23 +586,28 @@ static int eql_s_master_cfg(struct net_d
-       return -EINVAL;
- }
--static struct net_device dev_eql;
-+static struct net_device *dev_eql;
- static int __init eql_init_module(void)
- {
--      strcpy(dev_eql.name, "eql");
--      dev_eql.init = eql_init;
--      if (register_netdev(&dev_eql) != 0) {
--              printk("eql: register_netdev() returned non-zero.\n");
--              return -EIO;
--      }
--      return 0;
-+      int err;
-+
-+      printk(version);
-+
-+      dev_eql = alloc_netdev(sizeof(equalizer_t), "eql", eql_setup);
-+      if (!dev_eql)
-+              return -ENOMEM;
-+
-+      err = register_netdev(dev_eql);
-+      if (err) 
-+              kfree(dev_eql);
-+      return err;
- }
- static void __exit eql_cleanup_module(void)
- {
--      kfree(dev_eql.priv);
--      unregister_netdev(&dev_eql);
-+      unregister_netdev(dev_eql);
-+      kfree(dev_eql);
- }
- module_init(eql_init_module);
---- linux-2.6.0-test1/drivers/net/fc/iph5526.c 2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/net/fc/iph5526.c        2003-07-19 17:03:50.000000000 -0700
-@@ -48,7 +48,6 @@ static const char *version =
- #include <linux/timer.h>
- #include <linux/spinlock.h>
- #include <linux/netdevice.h>
--#include <linux/blk.h>
- #include <linux/fcdevice.h> /* had the declarations for init_fcdev among
-                              others + includes if_fcdevice.h */
---- linux-2.6.0-test1/drivers/net/irda/vlsi_ir.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/net/irda/vlsi_ir.c      2003-07-19 17:03:50.000000000 -0700
-@@ -474,10 +474,8 @@ static ssize_t vlsi_proc_read(struct fil
-       if (pos + nbytes > size)
-               nbytes = size - pos;
--      if (!access_ok(VERIFY_WRITE, buf, nbytes))
--              return -EINVAL;
--
--      copy_to_user(buf, procdata->data + pos, nbytes);
-+      if (copy_to_user(buf, procdata->data + pos, nbytes))
-+              return -EFAULT;
-       *ppos += nbytes;
---- linux-2.6.0-test1/drivers/net/Kconfig      2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/net/Kconfig     2003-07-19 17:03:50.000000000 -0700
-@@ -1153,7 +1153,7 @@ config ZNET
- config SEEQ8005
-       tristate "SEEQ8005 support (EXPERIMENTAL)"
--      depends on NET_ISA && OBSOLETE && EXPERIMENTAL
-+      depends on NET_ISA && EXPERIMENTAL
-       help
-         This is a driver for the SEEQ 8005 network (Ethernet) card.  If this
-         is for you, read the Ethernet-HOWTO, available from
---- linux-2.6.0-test1/drivers/net/ni65.c       2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/net/ni65.c      2003-07-19 17:03:50.000000000 -0700
-@@ -245,6 +245,7 @@ struct priv
-       int cmdr_addr;
-       int cardno;
-       int features;
-+      spinlock_t ring_lock;
- };
- static int  ni65_probe1(struct net_device *dev,int);
-@@ -299,7 +300,7 @@ static int ni65_open(struct net_device *
-       int irqval = request_irq(dev->irq, &ni65_interrupt,0,
-                         cards[p->cardno].cardname,dev);
-       if (irqval) {
--              printk ("%s: unable to get IRQ %d (irqval=%d).\n",
-+              printk(KERN_ERR "%s: unable to get IRQ %d (irqval=%d).\n",
-                         dev->name,dev->irq, irqval);
-               return -EAGAIN;
-       }
-@@ -409,12 +410,14 @@ static int __init ni65_probe1(struct net
-       p = (struct priv *) dev->priv;
-       p->cmdr_addr = ioaddr + cards[i].cmd_offset;
-       p->cardno = i;
-+      spin_lock_init(&p->ring_lock);
--      printk("%s: %s found at %#3x, ", dev->name, cards[p->cardno].cardname , ioaddr);
-+      printk(KERN_INFO "%s: %s found at %#3x, ", dev->name, cards[p->cardno].cardname , ioaddr);
-       outw(inw(PORT+L_RESET),PORT+L_RESET); /* first: reset the card */
-       if( (j=readreg(CSR0)) != 0x4) {
--               printk(KERN_ERR "can't RESET card: %04x\n",j);
-+               printk("failed.\n");
-+               printk(KERN_ERR "%s: Can't RESET card: %04x\n", dev->name, j);
-                ni65_free_buffer(p);
-                release_region(ioaddr, cards[p->cardno].total_size);
-                return -EAGAIN;
-@@ -467,7 +470,8 @@ static int __init ni65_probe1(struct net
-                                       break;
-                       }
-                       if(i == 5) {
--                              printk("Can't detect DMA channel!\n");
-+                              printk("failed.\n");
-+                              printk(KERN_ERR "%s: Can't detect DMA channel!\n", dev->name);
-                               ni65_free_buffer(p);
-                               release_region(ioaddr, cards[p->cardno].total_size);
-                               return -EAGAIN;
-@@ -480,13 +484,13 @@ static int __init ni65_probe1(struct net
-               if(dev->irq < 2)
-               {
--                      unsigned long irq_mask, delay;
-+                      unsigned long irq_mask;
-                       ni65_init_lance(p,dev->dev_addr,0,0);
-                       irq_mask = probe_irq_on();
-                       writereg(CSR0_INIT|CSR0_INEA,CSR0); /* trigger interrupt */
--                      delay = jiffies + HZ/50;
--                      while (time_before(jiffies, delay)) ;
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-+                      schedule_timeout(HZ/50);
-                       dev->irq = probe_irq_off(irq_mask);
-                       if(!dev->irq)
-                       {
-@@ -503,7 +507,7 @@ static int __init ni65_probe1(struct net
-       if(request_dma(dev->dma, cards[p->cardno].cardname ) != 0)
-       {
--              printk("%s: Can't request dma-channel %d\n",dev->name,(int) dev->dma);
-+              printk(KERN_ERR "%s: Can't request dma-channel %d\n",dev->name,(int) dev->dma);
-               ni65_free_buffer(p);
-               release_region(ioaddr, cards[p->cardno].total_size);
-               return -EAGAIN;
-@@ -570,7 +574,7 @@ static void *ni65_alloc_mem(struct net_d
-       if(type) {
-               ret = skb = alloc_skb(2+16+size,GFP_KERNEL|GFP_DMA);
-               if(!skb) {
--                      printk("%s: unable to allocate %s memory.\n",dev->name,what);
-+                      printk(KERN_WARNING "%s: unable to allocate %s memory.\n",dev->name,what);
-                       return NULL;
-               }
-               skb->dev = dev;
-@@ -581,12 +585,12 @@ static void *ni65_alloc_mem(struct net_d
-       else {
-               ret = ptr = kmalloc(T_BUF_SIZE,GFP_KERNEL | GFP_DMA);
-               if(!ret) {
--                      printk("%s: unable to allocate %s memory.\n",dev->name,what);
-+                      printk(KERN_WARNING "%s: unable to allocate %s memory.\n",dev->name,what);
-                       return NULL;
-               }
-       }
-       if( (u32) virt_to_phys(ptr+size) > 0x1000000) {
--              printk("%s: unable to allocate %s memory in lower 16MB!\n",dev->name,what);
-+              printk(KERN_WARNING "%s: unable to allocate %s memory in lower 16MB!\n",dev->name,what);
-               if(type)
-                       kfree_skb(skb);
-               else
-@@ -692,7 +696,7 @@ static void ni65_stop_start(struct net_d
-       writedatareg(CSR0_STOP);
-       if(debuglevel > 1)
--              printk("ni65_stop_start\n");
-+              printk(KERN_DEBUG "ni65_stop_start\n");
-       if(p->features & INIT_RING_BEFORE_START) {
-               int i;
-@@ -846,6 +850,8 @@ static irqreturn_t ni65_interrupt(int ir
-       p = (struct priv *) dev->priv;
-+      spin_lock(&p->ring_lock);
-+      
-       while(--bcnt) {
-               csr0 = inw(PORT+L_DATAREG);
-@@ -867,7 +873,7 @@ static irqreturn_t ni65_interrupt(int ir
-               {
-                       struct priv *p = (struct priv *) dev->priv;
-                       if(debuglevel > 1)
--                              printk("%s: general error: %04x.\n",dev->name,csr0);
-+                              printk(KERN_ERR "%s: general error: %04x.\n",dev->name,csr0);
-                       if(csr0 & CSR0_BABL)
-                               p->stats.tx_errors++;
-                       if(csr0 & CSR0_MISS) {
-@@ -879,7 +885,7 @@ static irqreturn_t ni65_interrupt(int ir
-                       }
-                       if(csr0 & CSR0_MERR) {
-                               if(debuglevel > 1)
--                                      printk("%s: Ooops .. memory error: %04x.\n",dev->name,csr0);
-+                                      printk(KERN_ERR "%s: Ooops .. memory error: %04x.\n",dev->name,csr0);
-                               ni65_stop_start(dev,p);
-                       }
-               }
-@@ -932,12 +938,13 @@ static irqreturn_t ni65_interrupt(int ir
- #endif
-       if( (csr0 & (CSR0_RXON | CSR0_TXON)) != (CSR0_RXON | CSR0_TXON) ) {
--              printk("%s: RX or TX was offline -> restart\n",dev->name);
-+              printk(KERN_DEBUG "%s: RX or TX was offline -> restart\n",dev->name);
-               ni65_stop_start(dev,p);
-       }
-       else
-               writedatareg(CSR0_INEA);
-+      spin_unlock(&p->ring_lock);
-       return IRQ_HANDLED;
- }
-@@ -1147,9 +1154,7 @@ static int ni65_send_packet(struct sk_bu
-                               memset((char *)p->tmdbounce[p->tmdbouncenum]+skb->len, 0, len-skb->len);
-                       dev_kfree_skb (skb);
--                      save_flags(flags);
--                      cli();
--
-+                      spin_lock_irqsave(&p->ring_lock, flags);
-                       tmdp = p->tmdhead + p->tmdnum;
-                       tmdp->u.buffer = (u32) isa_virt_to_bus(p->tmdbounce[p->tmdbouncenum]);
-                       p->tmdbouncenum = (p->tmdbouncenum + 1) & (TMDNUM - 1);
-@@ -1157,8 +1162,7 @@ static int ni65_send_packet(struct sk_bu
- #ifdef XMT_VIA_SKB
-               }
-               else {
--                      save_flags(flags);
--                      cli();
-+                      spin_lock_irqsave(&p->ring_lock, flags);
-                       tmdp = p->tmdhead + p->tmdnum;
-                       tmdp->u.buffer = (u32) isa_virt_to_bus(skb->data);
-@@ -1178,8 +1182,8 @@ static int ni65_send_packet(struct sk_bu
-                       
-               p->lock = 0;
-               dev->trans_start = jiffies;
--
--              restore_flags(flags);
-+              
-+              spin_unlock_irqrestore(&p->ring_lock, flags);
-       }
-       return 0;
-@@ -1238,10 +1242,8 @@ void cleanup_module(void)
- {
-       struct priv *p;
-       p = (struct priv *) dev_ni65.priv;
--      if(!p) {
--              printk("Ooops .. no private struct\n");
--              return;
--      }
-+      if(!p)
-+              BUG();
-       disable_dma(dev_ni65.dma);
-       free_dma(dev_ni65.dma);
-       unregister_netdev(&dev_ni65);
-@@ -1250,6 +1252,7 @@ void cleanup_module(void)
-       dev_ni65.priv = NULL;
- }
- #endif /* MODULE */
-+
- MODULE_LICENSE("GPL");
- /*
---- linux-2.6.0-test1/drivers/net/ni65.h       2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/net/ni65.h      2003-07-19 17:03:50.000000000 -0700
-@@ -20,32 +20,32 @@
- #define CSR0_BABL     0x4000  /* Babble transmitter timeout error (RC) */
- #define CSR0_CERR     0x2000  /* Collision Error (RC) */
- #define CSR0_MISS     0x1000  /* Missed packet (RC) */
--#define CSR0_MERR     0x0800  /* Memory Error (RC) */ 
-+#define CSR0_MERR     0x0800  /* Memory Error (RC) */
- #define CSR0_RINT     0x0400  /* Receiver Interrupt (RC) */
--#define CSR0_TINT       0x0200        /* Transmit Interrupt (RC) */ 
-+#define CSR0_TINT       0x0200        /* Transmit Interrupt (RC) */
- #define CSR0_IDON     0x0100  /* Initialization Done (RC) */
- #define CSR0_INTR     0x0080  /* Interrupt Flag (R) */
- #define CSR0_INEA     0x0040  /* Interrupt Enable (RW) */
- #define CSR0_RXON     0x0020  /* Receiver on (R) */
--#define CSR0_TXON     0x0010  /* Transmitter on (R) */
-+#define CSR0_TXON     0x0010  /* Transmitter on (R) */
- #define CSR0_TDMD     0x0008  /* Transmit Demand (RS) */
--#define CSR0_STOP     0x0004  /* Stop (RS) */
-+#define CSR0_STOP     0x0004  /* Stop (RS) */
- #define CSR0_STRT     0x0002  /* Start (RS) */
- #define CSR0_INIT     0x0001  /* Initialize (RS) */
--#define CSR0_CLRALL    0x7f00  /* mask for all clearable bits */
-+#define CSR0_CLRALL    0x7f00 /* mask for all clearable bits */
- /*
-  *    Initialization Block  Mode operation Bit Definitions.
-  */
- #define M_PROM                0x8000  /* Promiscuous Mode */
--#define M_INTL                0x0040  /* Internal Loopback */
--#define M_DRTY                0x0020  /* Disable Retry */ 
-+#define M_INTL                0x0040  /* Internal Loopback */
-+#define M_DRTY                0x0020  /* Disable Retry */
- #define M_COLL                0x0010  /* Force Collision */
- #define M_DTCR                0x0008  /* Disable Transmit CRC) */
- #define M_LOOP                0x0004  /* Loopback */
--#define M_DTX         0x0002  /* Disable the Transmitter */ 
--#define M_DRX         0x0001  /* Disable the Receiver */
-+#define M_DTX         0x0002  /* Disable the Transmitter */
-+#define M_DRX         0x0001  /* Disable the Receiver */
- /*
-@@ -56,7 +56,7 @@
- #define RCV_ERR               0x40    /* Error Summary */
- #define RCV_FRAM      0x20    /* Framing Error */
- #define RCV_OFLO      0x10    /* Overflow Error */
--#define RCV_CRC               0x08    /* CRC Error */ 
-+#define RCV_CRC               0x08    /* CRC Error */
- #define RCV_BUF_ERR   0x04    /* Buffer Error */
- #define RCV_START     0x02    /* Start of Packet */
- #define RCV_END               0x01    /* End of Packet */
-@@ -67,7 +67,7 @@
-  */
- #define XMIT_OWN      0x80    /* owner bit 0 = host, 1 = lance */
--#define XMIT_ERR      0x40    /* Error Summary */
-+#define XMIT_ERR      0x40    /* Error Summary */
- #define XMIT_RETRY    0x10    /* more the 1 retry needed to Xmit */
- #define XMIT_1_RETRY  0x08    /* one retry needed to Xmit */
- #define XMIT_DEF      0x04    /* Deferred */
-@@ -78,53 +78,44 @@
-  * transmit status (2) (valid if XMIT_ERR == 1)
-  */
--#define XMIT_TDRMASK    0x03ff  /* time-domain-reflectometer-value */
--#define XMIT_RTRY     0x0400  /* Failed after 16 retransmissions  */
--#define XMIT_LCAR     0x0800  /* Loss of Carrier */
--#define XMIT_LCOL     0x1000  /* Late collision */
--#define XMIT_RESERV   0x2000  /* Reserved */
--#define XMIT_UFLO     0x4000  /* Underflow (late memory) */
--#define XMIT_BUFF     0x8000  /* Buffering error (no ENP) */
--
--struct init_block 
--{
--  unsigned short mode;
--  unsigned char eaddr[6];
--  unsigned char filter[8];
--  /* bit 29-31: number of rmd's (power of 2) */
--  u32 rrp;   /* receive ring pointer (align 8) */
--  /* bit 29-31: number of tmd's (power of 2) */
--  u32 trp;   /* transmit ring pointer (align 8) */
-+#define XMIT_TDRMASK    0x03ff        /* time-domain-reflectometer-value */
-+#define XMIT_RTRY     0x0400  /* Failed after 16 retransmissions  */
-+#define XMIT_LCAR     0x0800  /* Loss of Carrier */
-+#define XMIT_LCOL     0x1000  /* Late collision */
-+#define XMIT_RESERV   0x2000  /* Reserved */
-+#define XMIT_UFLO     0x4000  /* Underflow (late memory) */
-+#define XMIT_BUFF     0x8000  /* Buffering error (no ENP) */
-+
-+struct init_block {
-+      unsigned short mode;
-+      unsigned char eaddr[6];
-+      unsigned char filter[8];
-+      /* bit 29-31: number of rmd's (power of 2) */
-+      u32 rrp;                /* receive ring pointer (align 8) */
-+      /* bit 29-31: number of tmd's (power of 2) */
-+      u32 trp;                /* transmit ring pointer (align 8) */
- };
--struct rmd /* Receive Message Descriptor */
--{ 
--  union
--  {
--    volatile u32 buffer;
--    struct 
--    {
--      volatile unsigned char dummy[3];
--      volatile unsigned char status; 
--    } s;
--  } u;
--  volatile short blen;
--  volatile unsigned short mlen;
-+struct rmd {                  /* Receive Message Descriptor */
-+      union {
-+              volatile u32 buffer;
-+              struct {
-+                      volatile unsigned char dummy[3];
-+                      volatile unsigned char status;
-+              } s;
-+      } u;
-+      volatile short blen;
-+      volatile unsigned short mlen;
- };
--struct tmd
--{
--  union 
--  {
--    volatile u32 buffer;
--    struct 
--    {
--      volatile unsigned char dummy[3];
--      volatile unsigned char status;
--    } s;
--  } u;
--  volatile unsigned short blen;
--  volatile unsigned short status2;
-+struct tmd {
-+      union {
-+              volatile u32 buffer;
-+              struct {
-+                      volatile unsigned char dummy[3];
-+                      volatile unsigned char status;
-+              } s;
-+      } u;
-+      volatile unsigned short blen;
-+      volatile unsigned short status2;
- };
--
--
---- linux-2.6.0-test1/drivers/net/pcmcia/Kconfig       2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/net/pcmcia/Kconfig      2003-07-19 17:03:50.000000000 -0700
-@@ -113,7 +113,7 @@ config PCMCIA_XIRC2PS
-         If unsure, say N.
- config PCMCIA_AXNET
--      tristate "broken NS8390-cards support"
-+      tristate "Asix AX88190 PCMCIA support"
-       depends on NET_PCMCIA && PCMCIA
-       ---help---
-         Say Y here if you intend to attach an Asix AX88190-based PCMCIA
---- linux-2.6.0-test1/drivers/net/seeq8005.c   2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/net/seeq8005.c  2003-07-19 17:03:50.000000000 -0700
-@@ -700,7 +700,8 @@ static void hardware_send_packet(struct 
-  * wait_for_buffer
-  *
-  * This routine waits for the SEEQ chip to assert that the FIFO is ready
-- * by checking for a window interrupt, and then clearing it
-+ * by checking for a window interrupt, and then clearing it. This has to
-+ * occur in the interrupt handler!
-  */
- inline void wait_for_buffer(struct net_device * dev)
- {
-@@ -710,7 +711,7 @@ inline void wait_for_buffer(struct net_d
-       
-       tmp = jiffies + HZ;
-       while ( ( ((status=inw(SEEQ_STATUS)) & SEEQSTAT_WINDOW_INT) != SEEQSTAT_WINDOW_INT) && time_before(jiffies, tmp))
--              mb();
-+              cpu_relax();
-               
-       if ( (status & SEEQSTAT_WINDOW_INT) == SEEQSTAT_WINDOW_INT)
-               outw( SEEQCMD_WINDOW_INT_ACK | (status & SEEQCMD_INT_MASK), SEEQ_CMD);
---- linux-2.6.0-test1/drivers/net/wan/comx-hw-comx.c   2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/net/wan/comx-hw-comx.c  2003-07-19 17:03:50.000000000 -0700
-@@ -11,6 +11,7 @@
-  *
-  * Contributors:
-  * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 0.86
-+ * Daniele Bellucci         <bellucda@tiscali.it>   - 0.87
-  *
-  * This program is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU General Public License
-@@ -42,9 +43,12 @@
-  *            - printk cleanups
-  * Version 0.86 (00/08/15):
-  *            - resource release on failure at COMX_init
-+ *
-+ * Version 0.87 (03/07/09)
-+ *              - audit copy_from_user in comxhw_write_proc
-  */
--#define VERSION "0.86"
-+#define VERSION "0.87"
- #include <linux/module.h>
- #include <linux/version.h>
-@@ -1084,7 +1088,8 @@ static int comxhw_write_proc(struct file
-               if (hw->firmware->data) {
-                       kfree(hw->firmware->data);
-               }
--              copy_from_user(tmp + file->f_pos, buffer, count);
-+              if (copy_from_user(tmp + file->f_pos, buffer, count))
-+                      return -EFAULT;
-               hw->firmware->len = entry->size = file->f_pos + count;
-               hw->firmware->data = tmp;
-               file->f_pos += count;
---- linux-2.6.0-test1/drivers/net/wan/sdladrv.c        2003-06-14 12:18:03.000000000 -0700
-+++ 25/drivers/net/wan/sdladrv.c       2003-07-19 17:03:50.000000000 -0700
-@@ -160,10 +160,6 @@
- /****** Function Prototypes *************************************************/
--/* Module entry points. These are called by the OS and must be public. */
--int init_module (void);
--void cleanup_module (void);
--
- /* Hardware-specific functions */
- static int sdla_detect        (sdlahw_t* hw);
- static int sdla_autodpm       (sdlahw_t* hw);
-@@ -325,11 +321,7 @@ static int pci_slot_ar[MAX_S514_CARDS];
-  * Context:   process
-  */
--#ifdef MODULE
--int init_module (void)
--#else
- int sdladrv_init(void)
--#endif
- {
-       int i=0;
-@@ -354,9 +346,12 @@ int sdladrv_init(void)
-  * Module 'remove' entry point.
-  * o release all remaining system resources
-  */
--void cleanup_module (void)
-+static void sdladrv_cleanup(void)
- {
- }
-+
-+module_init(sdladrv_init);
-+module_cleanup(sdladrv_cleanup);
- #endif
- /******* Kernel APIs ********************************************************/
---- linux-2.6.0-test1/drivers/net/wan/sdlamain.c       2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/net/wan/sdlamain.c      2003-07-19 17:03:50.000000000 -0700
-@@ -177,10 +177,6 @@ static void dbg_kfree(void * v, int line
- extern void disable_irq(unsigned int);
- extern void enable_irq(unsigned int);
-  
--/* Module entry points */
--int init_module (void);
--void cleanup_module (void);
--
- /* WAN link driver entry points */
- static int setup(struct wan_device* wandev, wandev_conf_t* conf);
- static int shutdown(struct wan_device* wandev);
-@@ -246,11 +242,7 @@ static int wanpipe_bh_critical=0;
-  * Context:   process
-  */
-  
--#ifdef MODULE
--int init_module (void)
--#else
- int wanpipe_init(void)
--#endif
- {
-       int cnt, err = 0;
-@@ -313,7 +305,7 @@ int wanpipe_init(void)
-  * o unregister all adapters from the WAN router
-  * o release all remaining system resources
-  */
--void cleanup_module (void)
-+static void wanpipe_cleanup(void)
- {
-       int i;
-@@ -329,6 +321,8 @@ void cleanup_module (void)
-       printk(KERN_INFO "\nwanpipe: WANPIPE Modules Unloaded.\n");
- }
-+module_init(wanpipe_init);
-+module_exit(wanpipe_cleanup);
- #endif
- /******* WAN Device Driver Entry Points *************************************/
---- linux-2.6.0-test1/drivers/net/wan/syncppp.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/net/wan/syncppp.c       2003-07-19 17:03:50.000000000 -0700
-@@ -161,7 +161,7 @@ static int debug;
-  * then put the packet into tx_queue, and call sppp_flush_xmit()
-  * after spinlock is released.
-  */
--static void sppp_flush_xmit()
-+static void sppp_flush_xmit(void)
- {
-       struct sk_buff *skb;
-       while ((skb = skb_dequeue(&tx_queue)) != NULL)
---- linux-2.6.0-test1/drivers/net/wireless/airo.c      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/net/wireless/airo.c     2003-07-19 17:06:31.000000000 -0700
-@@ -927,9 +927,8 @@ static int enable_MAC( struct airo_info 
- static void disable_MAC(struct airo_info *ai);
- static void enable_interrupts(struct airo_info*);
- static void disable_interrupts(struct airo_info*);
--static u16 issuecommand(struct airo_info*, Cmd *pCmd, Resp *pRsp);
--static u16 sendcommand(struct airo_info *ai, Cmd *pCmd);
--static void completecommand(struct airo_info *ai, Resp *pRsp);
-+static int issuecommand(struct airo_info*, Cmd *pCmd, Resp *pRsp);
-+static int issuecommand_nolock(struct airo_info*, Cmd *pCmd, Resp *pRsp);
- static int bap_setup(struct airo_info*, u16 rid, u16 offset, int whichbap);
- static int aux_bap_read(struct airo_info*, u16 *pu16Dst, int bytelen,
-                       int whichbap);
-@@ -939,13 +938,14 @@ static int bap_write(struct airo_info*, 
-                    int whichbap);
- static int PC4500_accessrid(struct airo_info*, u16 rid, u16 accmd);
- static int PC4500_readrid(struct airo_info*, u16 rid, void *pBuf, int len);
-+static int PC4500_readrid_nolock(struct airo_info*, u16 rid, void *pBuf, int len);
- static int PC4500_writerid(struct airo_info*, u16 rid, const void
-                          *pBuf, int len);
- static int do_writerid( struct airo_info*, u16 rid, const void *rid_data,
-                       int len );
- static u16 transmit_allocate(struct airo_info*, int lenPayload, int raw);
--static int transmit_802_3_packet(struct airo_info*, int len, char *pPacket);
--static int transmit_802_11_packet(struct airo_info*, int len, char *pPacket);
-+static int transmit_802_3_packet(struct airo_info*, u16 txFid, char *pPacket, int len);
-+static int transmit_802_11_packet(struct airo_info*, u16 txFid, char *pPacket, int len);
- static irqreturn_t airo_interrupt( int irq, void* dev_id, struct pt_regs
-                           *regs);
-@@ -981,12 +981,11 @@ struct airo_info {
-       struct timer_list timer;
-       struct proc_dir_entry *proc_entry;
-       struct airo_info *next;
--        spinlock_t aux_lock;
-+      spinlock_t main_lock;
-         unsigned long flags;
- #define FLAG_PROMISC   IFF_PROMISC    /* 0x100 - include/linux/if.h */
- #define FLAG_RADIO_OFF 0x02           /* User disabling of MAC */
- #define FLAG_RADIO_DOWN 0x08          /* ifup/ifdown disabling of MAC */
--#define FLAG_LOCKED    2              /* 0x04 - use as a bit offset */
- #define FLAG_FLASHING  0x10
- #define FLAG_ADHOC        0x01 /* Needed by MIC */
- #define FLAG_MIC_CAPABLE  0x20
-@@ -997,14 +996,8 @@ struct airo_info {
-                       int whichbap);
-       unsigned short *flash;
-       tdsRssiEntry *rssi;
--      struct semaphore sem;
-       struct task_struct *task;
-       struct work_struct promisc_task;
--      struct {
--              struct sk_buff *skb;
--              int fid;
--              struct work_struct task;
--      } xmit, xmit11;
-       struct net_device *wifidev;
- #ifdef WIRELESS_EXT
-       struct iw_statistics    wstats;         // wireless stats
-@@ -1045,10 +1038,8 @@ static int readBSSListRid(struct airo_in
-       if (first == 1) {
-                       memset(&cmd, 0, sizeof(cmd));
-                       cmd.cmd=CMD_LISTBSS;
--                      if (down_interruptible(&ai->sem))
--                              return -ERESTARTSYS;
-                       issuecommand(ai, &cmd, &rsp);
--                      up(&ai->sem);
-+
-                       /* Let the command take effect */
-                       set_current_state (TASK_INTERRUPTIBLE);
-                       ai->task = current;
-@@ -1193,7 +1184,7 @@ static int readStatusRid(struct airo_inf
-       statr->len = le16_to_cpu(statr->len);
-       for(s = &statr->mode; s <= &statr->SSIDlen; s++) *s = le16_to_cpu(*s);
--      for(s = &statr->beaconPeriod; s <= &statr->_reserved[9]; s++)
-+      for(s = &statr->beaconPeriod; s <= &statr->_reserved1; s++)
-               *s = le16_to_cpu(*s);
-       return rc;
-@@ -1306,44 +1297,15 @@ static void get_tx_error(struct airo_inf
-       }
- }
--static void airo_do_xmit(struct net_device *dev) {
--      u16 status;
--      int i;
--      struct airo_info *priv = dev->priv;
--      struct sk_buff *skb = priv->xmit.skb;
--      int fid = priv->xmit.fid;
--      u32 *fids = priv->fids;
--
--      if (down_trylock(&priv->sem) != 0) {
--              netif_stop_queue(dev);
--              priv->xmit.task.func = (void (*)(void *))airo_do_xmit;
--              priv->xmit.task.data = (void *)dev;
--              schedule_work(&priv->xmit.task);
--              return;
--      }
--      status = transmit_802_3_packet (priv, fids[fid], skb->data);
--      up(&priv->sem);
--
--      i = 0;
--      if ( status == SUCCESS ) {
--              dev->trans_start = jiffies;
--              for (; i < MAX_FIDS / 2 && (priv->fids[i] & 0xffff0000); i++);
--      } else {
--              priv->fids[fid] &= 0xffff;
--              priv->stats.tx_window_errors++;
--      }
--      if (i < MAX_FIDS / 2)
--              netif_wake_queue(dev);
--      else
--              netif_stop_queue(dev);
--      dev_kfree_skb(skb);
--}
--
--static int airo_start_xmit(struct sk_buff *skb, struct net_device *dev) {
--      s16 len;
-+static int airo_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      int len;
-       int i;
-+      int ret = 0;
-+      int status;
-+      unsigned long flags;
-       struct airo_info *priv = dev->priv;
--      u32 *fids = priv->fids;
-+      int *fids = priv->fids;
-       if ( skb == NULL ) {
-               printk( KERN_ERR "airo:  skb == NULL!!!\n" );
-@@ -1351,61 +1313,50 @@ static int airo_start_xmit(struct sk_buf
-       }
-       /* Find a vacant FID */
--      for( i = 0; i < MAX_FIDS / 2 && (fids[i] & 0xffff0000); i++ );
--
--      if ( i == MAX_FIDS / 2 ) {
--              priv->stats.tx_fifo_errors++;
--              dev_kfree_skb(skb);
--      } else {
--              /* check min length*/
--              len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
--              /* Mark fid as used & save length for later */
--              fids[i] |= (len << 16);
--              priv->xmit.skb = skb;
--              priv->xmit.fid = i;
--              airo_do_xmit(dev);
--      }
--      return 0;
--}
-+      spin_lock_irqsave(&priv->main_lock, flags);
-+      for (i = 0; i < MAX_FIDS / 2 && (fids[i] & 0xffff0000); i++);
--static void airo_do_xmit11(struct net_device *dev) {
--      u16 status;
--      int i;
--      struct airo_info *priv = dev->priv;
--      struct sk_buff *skb = priv->xmit11.skb;
--      int fid = priv->xmit11.fid;
--      u32 *fids = priv->fids;
--
--      if (down_trylock(&priv->sem) != 0) {
-+      if (i + 1 >= MAX_FIDS / 2) {
-               netif_stop_queue(dev);
--              priv->xmit11.task.func = (void (*)(void *))airo_do_xmit11;
--              priv->xmit11.task.data = (void *)dev;
--              schedule_work(&priv->xmit11.task);
--              return;
-+
-+              /* we cannot transmit */
-+              if (i == MAX_FIDS / 2) {
-+                      priv->stats.tx_fifo_errors++;
-+                      ret = 1;
-+                      goto tx_done;
-+              }
-       }
--      status = transmit_802_11_packet (priv, fids[fid], skb->data);
--      up(&priv->sem);
--      i = MAX_FIDS / 2;
--      if ( status == SUCCESS ) {
-+      /* check min length*/
-+      len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
-+      status = transmit_802_3_packet (priv, fids[i], skb->data, len);
-+
-+      if (status == SUCCESS) {
-+              /* Mark fid as used & save length for later */
-+              fids[i] |= (len << 16);
-               dev->trans_start = jiffies;
--              for (; i < MAX_FIDS && (priv->fids[i] & 0xffff0000); i++);
--      } else {
--              priv->fids[fid] &= 0xffff;
-+      }
-+      else {
-               priv->stats.tx_window_errors++;
-+              ret = 1;
-       }
--      if (i < MAX_FIDS)
--              netif_wake_queue(dev);
--      else
--              netif_stop_queue(dev);
--      dev_kfree_skb(skb);
-+
-+tx_done:
-+      spin_unlock_irqrestore(&priv->main_lock, flags);
-+      if (!ret)
-+              dev_kfree_skb(skb);
-+      return ret;
- }
--static int airo_start_xmit11(struct sk_buff *skb, struct net_device *dev) {
--      s16 len;
-+static int airo_start_xmit11(struct sk_buff *skb, struct net_device *dev)
-+{
-+      int len;
-       int i;
-+      int ret = 0;
-+      int status;
-+      unsigned long flags;
-       struct airo_info *priv = dev->priv;
--      u32 *fids = priv->fids;
-+      int *fids = priv->fids;
-       if ( skb == NULL ) {
-               printk( KERN_ERR "airo:  skb == NULL!!!\n" );
-@@ -1413,21 +1364,39 @@ static int airo_start_xmit11(struct sk_b
-       }
-       /* Find a vacant FID */
-+      spin_lock_irqsave(&priv->main_lock, flags);
-       for( i = MAX_FIDS / 2; i < MAX_FIDS && (fids[i] & 0xffff0000); i++ );
--      if ( i == MAX_FIDS ) {
--              priv->stats.tx_fifo_errors++;
--              dev_kfree_skb(skb);
--      } else {
--              /* check min length*/
--              len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
--              /* Mark fid as used & save length for later */
-+      if (i + 1 >= MAX_FIDS) {
-+              netif_stop_queue(dev);
-+
-+              /* we cannot transmit */
-+              if (i == MAX_FIDS) {
-+                      priv->stats.tx_fifo_errors++;
-+                      ret = 1;
-+                      goto tx_done;
-+              }
-+      }
-+
-+      /* check min length*/
-+      len = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
-+      status = transmit_802_11_packet (priv, fids[i], skb->data, len);
-+
-+      if (status == SUCCESS) {
-+              /* Mark fid as used & save length for later */
-               fids[i] |= (len << 16);
--              priv->xmit11.skb = skb;
--              priv->xmit11.fid = i;
--              airo_do_xmit11(dev);
-+              dev->trans_start = jiffies;
-       }
--      return 0;
-+      else {
-+              priv->stats.tx_window_errors++;
-+              ret = 1;
-+      }
-+
-+tx_done:
-+      spin_unlock_irqrestore(&priv->main_lock, flags);
-+      if (!ret)
-+              dev_kfree_skb(skb);
-+      return ret;
- }
- struct net_device_stats *airo_get_stats(struct net_device *dev)
-@@ -1457,36 +1426,19 @@ struct net_device_stats *airo_get_stats(
-       return &local->stats;
- }
--static void airo_end_promisc(struct airo_info *ai) {
--      Resp rsp;
--
--      if ((IN4500(ai, EVSTAT) & EV_CMD) != 0) {
--              completecommand(ai, &rsp);
--              up(&ai->sem);
--      } else {
--              ai->promisc_task.func = (void (*)(void *))airo_end_promisc;
--              ai->promisc_task.data = (void *)ai;
--              schedule_work(&ai->promisc_task);
--      }
--}
--
--static void airo_set_promisc(struct airo_info *ai) {
-+static void airo_set_promisc(struct airo_info *ai)
-+{
-       Cmd cmd;
-+      Resp rsp;
--      if (down_trylock(&ai->sem) == 0) {
--              memset(&cmd, 0, sizeof(cmd));
--              cmd.cmd=CMD_SETMODE;
--              cmd.parm0=(ai->flags&IFF_PROMISC) ? PROMISC : NOPROMISC;
--              sendcommand(ai, &cmd);
--              airo_end_promisc(ai);
--      } else {
--              ai->promisc_task.func = (void (*)(void *))airo_set_promisc;
--              ai->promisc_task.data = (void *)ai;
--              schedule_work(&ai->promisc_task);
--      }
-+      memset(&cmd, 0, sizeof(cmd));
-+      cmd.cmd = CMD_SETMODE;
-+      cmd.parm0 = (ai->flags & IFF_PROMISC) ? PROMISC : NOPROMISC;
-+      issuecommand(ai, &cmd, &rsp);
- }
--static void airo_set_multicast_list(struct net_device *dev) {
-+static void airo_set_multicast_list(struct net_device *dev)
-+{
-       struct airo_info *ai = dev->priv;
-       if ((dev->flags ^ ai->flags) & IFF_PROMISC) {
-@@ -1551,11 +1503,10 @@ void stop_airo_card( struct net_device *
- {
-       struct airo_info *ai = dev->priv;
-       flush_scheduled_work();
--      if (ai->flash)
--              kfree(ai->flash);
--      if (ai->rssi)
--              kfree(ai->rssi);
--      takedown_proc_entry( dev, ai );
-+
-+      disable_interrupts(ai);
-+      free_irq(dev->irq, dev);
-+
-       if (ai->registered) {
-               unregister_netdev( dev );
-               if (ai->wifidev) {
-@@ -1565,9 +1516,15 @@ void stop_airo_card( struct net_device *
-               }
-               ai->registered = 0;
-       }
--      disable_interrupts(ai);
--      free_irq( dev->irq, dev );
--      if (auto_wep) del_timer_sync(&ai->timer);
-+
-+      if (ai->flash)
-+              kfree(ai->flash);
-+      if (ai->rssi)
-+              kfree(ai->rssi);
-+      takedown_proc_entry( dev, ai );
-+
-+      if (auto_wep)
-+              del_timer_sync(&ai->timer);
-       if (freeres) {
-               /* PCMCIA frees this stuff, so only for PCI and ISA */
-               release_region( dev->base_addr, 64 );
-@@ -1664,8 +1621,7 @@ struct net_device *init_airo_card( unsig
-       ai->wifidev = 0;
-       ai->registered = 0;
-         ai->dev = dev;
--      ai->aux_lock = SPIN_LOCK_UNLOCKED;
--      sema_init(&ai->sem, 1);
-+      ai->main_lock = SPIN_LOCK_UNLOCKED;
-       ai->need_commit = 0;
-       ai->config.len = 0;
-       rc = add_airo_dev( dev );
-@@ -1730,7 +1686,6 @@ struct net_device *init_airo_card( unsig
-                       ai->fids[i] = transmit_allocate(ai,2312,i>=MAX_FIDS/2);
-       setup_proc_entry( dev, dev->priv ); /* XXX check for failure */
--      netif_start_queue(dev);
-       SET_MODULE_OWNER(dev);
-       return dev;
-@@ -1794,47 +1749,31 @@ int reset_airo_card( struct net_device *
- EXPORT_SYMBOL(reset_airo_card);
- #if WIRELESS_EXT > 13
-+/* must be called with lock held */
- static void airo_send_event(struct net_device *dev) {
-       struct airo_info *ai = dev->priv;
-       union iwreq_data wrqu;
-       StatusRid status_rid;
--      if (down_trylock(&ai->sem) == 0) {
--              __set_bit(FLAG_LOCKED, &ai->flags);
--              PC4500_readrid(ai, RID_STATUS, &status_rid, sizeof(status_rid));
--              clear_bit(FLAG_LOCKED, &ai->flags);
--              up(&ai->sem);
--              wrqu.data.length = 0;
--              wrqu.data.flags = 0;
--              memcpy(wrqu.ap_addr.sa_data, status_rid.bssid[0], ETH_ALEN);
--              wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+      PC4500_readrid_nolock(ai, RID_STATUS, &status_rid, sizeof(status_rid));
--              /* Send event to user space */
--              wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
--      } else {
--              ai->event_task.func = (void (*)(void *))airo_send_event;
--              ai->event_task.data = (void *)dev;
--              schedule_work(&ai->event_task);
--      }
-+      wrqu.data.length = 0;
-+      wrqu.data.flags = 0;
-+      memcpy(wrqu.ap_addr.sa_data, status_rid.bssid[0], ETH_ALEN);
-+      wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+
-+      /* Send event to user space */
-+      wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
- }
- #endif
- static void airo_read_mic(struct airo_info *ai) {
-+#ifdef MICSUPPORT
-       MICRid mic_rid;
--      if (down_trylock(&ai->sem) == 0) {
--              __set_bit(FLAG_LOCKED, &ai->flags);
--              PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid));
--              clear_bit(FLAG_LOCKED, &ai->flags);
--              up(&ai->sem);
--#ifdef MICSUPPORT
--              micinit (ai, &mic_rid);
-+      PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid));
-+      micinit (ai, &mic_rid);
- #endif
--      } else {
--              ai->mic_task.func = (void (*)(void *))airo_read_mic;
--              ai->mic_task.data = (void *)ai;
--              schedule_work(&ai->mic_task);
--      }
- }
- static irqreturn_t airo_interrupt ( int irq, void* dev_id, struct pt_regs *regs) {
-@@ -1848,6 +1787,7 @@ static irqreturn_t airo_interrupt ( int 
-       if (!netif_device_present(dev))
-               return IRQ_NONE;
-+      spin_lock(&apriv->main_lock);
-       for (;;) {
-               status = IN4500( apriv, EVSTAT );
-               if ( !(status & STATUS_INTS) || status == 0xffff ) break;
-@@ -1866,7 +1806,8 @@ static irqreturn_t airo_interrupt ( int 
-               if ( status & EV_MIC ) {
-                       OUT4500( apriv, EVACK, EV_MIC );
--                      airo_read_mic( apriv );
-+                      if (apriv->flags & FLAG_MIC_CAPABLE)
-+                              airo_read_mic( apriv );
-               }
-               if ( status & EV_LINK ) {
- #if WIRELESS_EXT > 13
-@@ -2115,10 +2056,14 @@ static irqreturn_t airo_interrupt ( int 
-                                       index = i;
-                                       /* Set up to be used again */
-                                       apriv->fids[i] &= 0xffff;
-+
-+                                      if (i < MAX_FIDS / 2)
-+                                              netif_wake_queue(dev);
-+                                      else
-+                                              netif_wake_queue(apriv->wifidev);
-                               }
-                       }
-                       if (index != -1) {
--                              netif_wake_queue(dev);
-                               if (status & EV_TXEXC)
-                                       get_tx_error(apriv, index);
-                       }
-@@ -2134,6 +2079,7 @@ static irqreturn_t airo_interrupt ( int 
-       if (savedInterrupts)
-               OUT4500( apriv, EVINTEN, savedInterrupts );
-+      spin_unlock(&apriv->main_lock);
-       /* done.. */
-       return IRQ_RETVAL(handled);
-@@ -2169,8 +2115,8 @@ static u16 IN4500( struct airo_info *ai,
-       return rc;
- }
--static int enable_MAC( struct airo_info *ai, Resp *rsp ) {
--      int rc;
-+static int enable_MAC( struct airo_info *ai, Resp *rsp )
-+{
-         Cmd cmd;
-       /* FLAG_RADIO_OFF : Radio disabled via /proc or Wireless Extensions
-@@ -2182,45 +2128,41 @@ static int enable_MAC( struct airo_info 
-       if (ai->flags & (FLAG_RADIO_OFF|FLAG_RADIO_DOWN)) return SUCCESS;
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.cmd = MAC_ENABLE;
--      if (test_bit(FLAG_LOCKED, &ai->flags) != 0)
--              return issuecommand(ai, &cmd, rsp);
--
--      if (down_interruptible(&ai->sem))
--              return -ERESTARTSYS;
--      rc = issuecommand(ai, &cmd, rsp);
--      up(&ai->sem);
--      return rc;
-+      return issuecommand(ai, &cmd, rsp);
- }
--static void disable_MAC( struct airo_info *ai ) {
-+static void disable_MAC(struct airo_info *ai)
-+{
-         Cmd cmd;
-       Resp rsp;
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.cmd = MAC_DISABLE; // disable in case already enabled
--      if (test_bit(FLAG_LOCKED, &ai->flags) != 0) {
--              issuecommand(ai, &cmd, &rsp);
--              return;
--      }
--
--      if (down_interruptible(&ai->sem))
--              return;
-       issuecommand(ai, &cmd, &rsp);
--      up(&ai->sem);
- }
--static void enable_interrupts( struct airo_info *ai ) {
-+static void enable_interrupts(struct airo_info *ai)
-+{
-+      unsigned long flags;
-+      u16 status;
-+      spin_lock_irqsave(&ai->main_lock, flags);
-+
-       /* Reset the status register */
--      u16 status = IN4500( ai, EVSTAT );
-+      status = IN4500( ai, EVSTAT );
-       OUT4500( ai, EVACK, status );
-+
-       /* Enable the interrupts */
-       OUT4500( ai, EVINTEN, STATUS_INTS );
--      /* Note there is a race condition between the last two lines that
--         I don't know how to get rid of right now... */
-+
-+      spin_unlock_irqrestore(&ai->main_lock, flags);
- }
--static void disable_interrupts( struct airo_info *ai ) {
-+static void disable_interrupts(struct airo_info *ai)
-+{
-+      unsigned long flags;
-+      spin_lock_irqsave(&ai->main_lock, flags);
-       OUT4500( ai, EVINTEN, 0 );
-+      spin_unlock_irqrestore(&ai->main_lock, flags);
- }
- static u16 setup_card(struct airo_info *ai, u8 *mac)
-@@ -2243,23 +2185,20 @@ static u16 setup_card(struct airo_info *
-       /* The NOP is the first step in getting the card going */
-       cmd.cmd = NOP;
-       cmd.parm0 = cmd.parm1 = cmd.parm2 = 0;
--      if (down_interruptible(&ai->sem))
-+      if (spin_is_locked(&ai->main_lock))
-               return ERROR;
--      if ( issuecommand( ai, &cmd, &rsp ) != SUCCESS ) {
--              up(&ai->sem);
-+      if (issuecommand(ai, &cmd, &rsp) != SUCCESS)
-               return ERROR;
--      }
-+
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.cmd = MAC_DISABLE; // disable in case already enabled
--      if ( issuecommand( ai, &cmd, &rsp ) != SUCCESS ) {
--              up(&ai->sem);
-+      if (issuecommand( ai, &cmd, &rsp) != SUCCESS )
-               return ERROR;
--      }
-+
-       // Let's figure out if we need to use the AUX port
-       cmd.cmd = CMD_ENABLEAUX;
-       if (issuecommand(ai, &cmd, &rsp) != SUCCESS) {
--              up(&ai->sem);
-               printk(KERN_ERR "airo: Error checking for AUX port\n");
-               return ERROR;
-       }
-@@ -2270,7 +2209,7 @@ static u16 setup_card(struct airo_info *
-               ai->bap_read = aux_bap_read;
-               printk(KERN_DEBUG "airo: Doing AUX bap_reads\n");
-       }
--      up(&ai->sem);
-+
-       if (ai->config.len == 0) {
-               tdsRssiRid rssi_rid;
-               CapabilityRid cap_rid;
-@@ -2375,50 +2314,35 @@ static u16 setup_card(struct airo_info *
-       }
-       return SUCCESS;
- }
-+static int issuecommand(struct airo_info *ai, Cmd *pCmd, Resp *pRsp) {
-+      int rc;
-+      unsigned long flags;
--static u16 issuecommand(struct airo_info *ai, Cmd *pCmd, Resp *pRsp) {
--        // Im really paranoid about letting it run forever!
--      int max_tries = 600000;
--
--      if (sendcommand(ai, pCmd) == (u16)ERROR)
--              return ERROR;
--
--      while (max_tries-- && (IN4500(ai, EVSTAT) & EV_CMD) == 0) {
--              if (!in_interrupt() && (max_tries & 255) == 0)
--                      schedule();
--      }
--      if ( max_tries == -1 ) {
--              printk( KERN_ERR
--                      "airo: Max tries exceeded waiting for command\n" );
--                return ERROR;
--      }
--      completecommand(ai, pRsp);
--      return SUCCESS;
-+      spin_lock_irqsave(&ai->main_lock, flags);
-+      rc = issuecommand_nolock(ai, pCmd, pRsp);
-+      spin_unlock_irqrestore(&ai->main_lock, flags);
-+      return rc;
- }
--static u16 sendcommand(struct airo_info *ai, Cmd *pCmd) {
--        // Im really paranoid about letting it run forever!
-+static int issuecommand_nolock(struct airo_info *ai, Cmd *pCmd, Resp *pRsp) {
-+      // Im really paranoid about letting it run forever!
-       int max_tries = 600000;
--      u16 cmd;
-       OUT4500(ai, PARAM0, pCmd->parm0);
-       OUT4500(ai, PARAM1, pCmd->parm1);
-       OUT4500(ai, PARAM2, pCmd->parm2);
-       OUT4500(ai, COMMAND, pCmd->cmd);
--      while ( max_tries-- && (IN4500(ai, EVSTAT) & EV_CMD) == 0 &&
--              (cmd = IN4500(ai, COMMAND)) != 0 )
--                      if (cmd == pCmd->cmd)
--                              // PC4500 didn't notice command, try again
--                              OUT4500(ai, COMMAND, pCmd->cmd);
--      if ( max_tries == -1 ) {
-+      while (max_tries-- && (IN4500(ai, EVSTAT) & EV_CMD) == 0) {
-+              if (IN4500(ai, COMMAND) == pCmd->cmd) {
-+                      // PC4500 didn't notice command, try again
-+                      OUT4500(ai, COMMAND, pCmd->cmd);
-+              }
-+      }
-+      if (max_tries == -1) {
-               printk( KERN_ERR
-                       "airo: Max tries exceeded when issueing command\n" );
-                 return ERROR;
-       }
--      return SUCCESS;
--}
--
--static void completecommand(struct airo_info *ai, Resp *pRsp) {
-       // command completed
-       pRsp->status = IN4500(ai, STATUS);
-       pRsp->rsp0 = IN4500(ai, RESP0);
-@@ -2431,8 +2355,10 @@ static void completecommand(struct airo_
-       }
-       // acknowledge processing the status/response
-       OUT4500(ai, EVACK, EV_CMD);
-+      return SUCCESS;
- }
-+
- /* Sets up the bap to start exchange data.  whichbap should
-  * be one of the BAP0 or BAP1 defines.  Locks should be held before
-  * calling! */
-@@ -2497,9 +2423,7 @@ static int aux_bap_read(struct airo_info
-       u16 next;
-       int words;
-       int i;
--      unsigned long flags;
--      spin_lock_irqsave(&ai->aux_lock, flags);
-       page = IN4500(ai, SWS0+whichbap);
-       offset = IN4500(ai, SWS2+whichbap);
-       next = aux_setup(ai, page, offset, &len);
-@@ -2519,7 +2443,6 @@ static int aux_bap_read(struct airo_info
-                       next = aux_setup(ai, next, 4, &len);
-               }
-       }
--      spin_unlock_irqrestore(&ai->aux_lock, flags);
-       return SUCCESS;
- }
-@@ -2558,7 +2481,7 @@ static int PC4500_accessrid(struct airo_
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.cmd = accmd;
-       cmd.parm0 = rid;
--      status = issuecommand(ai, &cmd, &rsp);
-+      status = issuecommand_nolock(ai, &cmd, &rsp);
-       if (status != 0) return status;
-       if ( (rsp.status & 0x7F00) != 0) {
-               return (accmd << 8) + (rsp.rsp0 & 0xFF);
-@@ -2567,25 +2490,16 @@ static int PC4500_accessrid(struct airo_
- }
- /*  Note, that we are using BAP1 which is also used by transmit, so
-- *  we must get a lock. */
--static int PC4500_readrid(struct airo_info *ai, u16 rid, void *pBuf, int len)
-+ *  it must be called with main_lock held. */
-+static int PC4500_readrid_nolock(struct airo_info *ai, u16 rid, void *pBuf, int len)
- {
--      u16 status, dolock = 0;
--        int rc = SUCCESS;
-+      u16 status;
-+
-+      if ((status = PC4500_accessrid(ai, rid, CMD_ACCESS)) != SUCCESS)
-+                return status;
-+      if (bap_setup(ai, rid, 0, BAP1) != SUCCESS)
-+                return ERROR;
--      if (test_bit(FLAG_LOCKED, &ai->flags) == 0) {
--              dolock = 1;
--              if (down_interruptible(&ai->sem))
--                      return ERROR;
--      }
--      if ( (status = PC4500_accessrid(ai, rid, CMD_ACCESS)) != SUCCESS) {
--                rc = status;
--                goto done;
--        }
--      if (bap_setup(ai, rid, 0, BAP1) != SUCCESS) {
--              rc = ERROR;
--                goto done;
--        }
-       // read the rid length field
-       bap_read(ai, pBuf, 2, BAP1);
-       // length for remaining part of rid
-@@ -2596,30 +2510,34 @@ static int PC4500_readrid(struct airo_in
-                       "airo: Rid %x has a length of %d which is too short\n",
-                       (int)rid,
-                       (int)len );
--              rc = ERROR;
--                goto done;
-+              return ERROR;
-       }
-       // read remainder of the rid
--      rc = bap_read(ai, ((u16*)pBuf)+1, len, BAP1);
--done:
--      if (dolock)
--              up(&ai->sem);
--      return rc;
-+      return bap_read(ai, ((u16*)pBuf)+1, len, BAP1);
- }
-+static int PC4500_readrid(struct airo_info *ai, u16 rid, void *pBuf, int len)
-+{
-+      unsigned long flags;
-+      int rc;
-+
-+      spin_lock_irqsave(&ai->main_lock, flags);
-+      rc = PC4500_readrid_nolock(ai, rid, pBuf, len);
-+      spin_unlock_irqrestore(&ai->main_lock, flags);
-+      return rc;
-+}
- /*  Note, that we are using BAP1 which is also used by transmit, so
-  *  make sure this isnt called when a transmit is happening */
- static int PC4500_writerid(struct airo_info *ai, u16 rid,
-                          const void *pBuf, int len)
- {
--      u16 status, dolock = 0;
-+      u16 status;
-+      unsigned long flags;
-       int rc = SUCCESS;
--      if (test_bit(FLAG_LOCKED, &ai->flags) == 0) {
--              dolock = 1;
--              if (down_interruptible(&ai->sem))
--                      return ERROR;
--      }
-+      *(u16*)pBuf = cpu_to_le16((u16)len);
-+
-+      spin_lock_irqsave(&ai->main_lock, flags);
-       // --- first access so that we can write the rid data
-       if ( (status = PC4500_accessrid(ai, rid, CMD_ACCESS)) != 0) {
-                 rc = status;
-@@ -2633,9 +2551,8 @@ static int PC4500_writerid(struct airo_i
-       bap_write(ai, pBuf, len, BAP1);
-       // ---now commit the rid data
-       rc = PC4500_accessrid(ai, rid, 0x100|CMD_ACCESS);
-- done:
--      if (dolock)
--              up(&ai->sem);
-+done:
-+      spin_unlock_irqrestore(&ai->main_lock, flags);
-         return rc;
- }
-@@ -2643,6 +2560,8 @@ static int PC4500_writerid(struct airo_i
-    one for now. */
- static u16 transmit_allocate(struct airo_info *ai, int lenPayload, int raw)
- {
-+      unsigned long flags;
-+      unsigned int loop = 3000;
-       Cmd cmd;
-       Resp rsp;
-       u16 txFid;
-@@ -2650,20 +2569,25 @@ static u16 transmit_allocate(struct airo
-       cmd.cmd = CMD_ALLOCATETX;
-       cmd.parm0 = lenPayload;
--      if (down_interruptible(&ai->sem))
--              return ERROR;
--      if (issuecommand(ai, &cmd, &rsp) != SUCCESS) {
--              txFid = 0;
-+      spin_lock_irqsave(&ai->main_lock, flags);
-+      if (issuecommand_nolock(ai, &cmd, &rsp) != SUCCESS) {
-+              txFid = ERROR;
-               goto done;
-       }
-       if ( (rsp.status & 0xFF00) != 0) {
--              txFid = 0;
-+              txFid = ERROR;
-               goto done;
-       }
-+
-       /* wait for the allocate event/indication
--       * It makes me kind of nervous that this can just sit here and spin,
--       * but in practice it only loops like four times. */
--      while ( (IN4500(ai, EVSTAT) & EV_ALLOC) == 0) ;
-+       * in practice it only loops like four times. */
-+      while (((IN4500(ai, EVSTAT) & EV_ALLOC) == 0) && --loop)
-+             ; /* nada */
-+      if (!loop) {
-+              txFid = ERROR;
-+              goto done;
-+      }
-+
-       // get the allocated fid and acknowledge
-       txFid = IN4500(ai, TXALLOCFID);
-       OUT4500(ai, EVACK, EV_ALLOC);
-@@ -2685,7 +2609,7 @@ static u16 transmit_allocate(struct airo
-               bap_write(ai, &txControl, sizeof(txControl), BAP1);
- done:
--      up(&ai->sem);
-+      spin_unlock_irqrestore(&ai->main_lock, flags);
-       return txFid;
- }
-@@ -2693,17 +2617,14 @@ done:
- /* In general BAP1 is dedicated to transmiting packets.  However,
-    since we need a BAP when accessing RIDs, we also use BAP1 for that.
-    Make sure the BAP1 spinlock is held when this is called. */
--static int transmit_802_3_packet(struct airo_info *ai, int len, char *pPacket)
-+static int transmit_802_3_packet(struct airo_info *ai, u16 txFid, char *pPacket, int len)
- {
-       u16 payloadLen;
-       Cmd cmd;
-       Resp rsp;
-       int miclen = 0;
--      u16 txFid = len;
-       MICBuffer pMic;
--      len >>= 16;
--
-       if (len < ETH_ALEN * 2) {
-               printk( KERN_WARNING "Short packet %d\n", len );
-               return ERROR;
-@@ -2734,12 +2655,12 @@ static int transmit_802_3_packet(struct 
-       memset( &cmd, 0, sizeof( cmd ) );
-       cmd.cmd = CMD_TRANSMIT;
-       cmd.parm0 = txFid;
--      if (issuecommand(ai, &cmd, &rsp) != SUCCESS) return ERROR;
-+      if (issuecommand_nolock(ai, &cmd, &rsp) != SUCCESS) return ERROR;
-       if ( (rsp.status & 0xFF00) != 0) return ERROR;
-       return SUCCESS;
- }
--static int transmit_802_11_packet(struct airo_info *ai, int len, char *pPacket)
-+static int transmit_802_11_packet(struct airo_info *ai, u16 txFid, char *pPacket, int len)
- {
-       u16 fc, payloadLen;
-       Cmd cmd;
-@@ -2750,8 +2671,6 @@ static int transmit_802_11_packet(struct
-               u16 gaplen;
-               u8 gap[6];
-       } gap;
--      u16 txFid = len;
--      len >>= 16;
-       gap.gaplen = 6;
-       fc = le16_to_cpu(*(const u16*)pPacket);
-@@ -2793,7 +2712,7 @@ static int transmit_802_11_packet(struct
-       memset( &cmd, 0, sizeof( cmd ) );
-       cmd.cmd = CMD_TRANSMIT;
-       cmd.parm0 = txFid;
--      if (issuecommand(ai, &cmd, &rsp) != SUCCESS) return ERROR;
-+      if (issuecommand_nolock(ai, &cmd, &rsp) != SUCCESS) return ERROR;
-       if ( (rsp.status & 0xFF00) != 0) return ERROR;
-       return SUCCESS;
- }
-@@ -3857,10 +3776,7 @@ static int proc_BSSList_open( struct ino
-                       memset(&cmd, 0, sizeof(cmd));
-                       cmd.cmd=CMD_LISTBSS;
--                      if (down_interruptible(&ai->sem))
--                              return -ERESTARTSYS;
-                       issuecommand(ai, &cmd, &rsp);
--                      up(&ai->sem);
-                       data->readlen = 0;
-                       return 0;
-               }
-@@ -3923,13 +3839,6 @@ static void timer_func( u_long data ) {
-       if (!(apriv->flags & FLAG_FLASHING) && (linkstat != 0x400)) {
- /* We don't have a link so try changing the authtype */
--              if (down_trylock(&apriv->sem) != 0) {
--                      apriv->timer.expires = RUN_AT(1);
--                      add_timer(&apriv->timer);
--                      return;
--              }
--              __set_bit(FLAG_LOCKED, &apriv->flags);
--
-               readConfigRid(apriv);
-               disable_MAC(apriv);
-               switch(apriv->config.authType) {
-@@ -3955,8 +3864,6 @@ static void timer_func( u_long data ) {
-               apriv->need_commit = 1;
-               writeConfigRid(apriv);
-               enable_MAC(apriv, &rsp);
--              clear_bit(FLAG_LOCKED, &apriv->flags);
--              up(&apriv->sem);
- /* Schedule check to see if the change worked */
-               apriv->timer.expires = RUN_AT(HZ*3);
-@@ -4135,7 +4042,11 @@ static int airo_get_freq(struct net_devi
-       struct airo_info *local = dev->priv;
-       StatusRid status_rid;           /* Card status info */
--      readStatusRid(local, &status_rid);
-+      if (local->config.opmode & MODE_STA_ESS)
-+              status_rid.channel = local->config.channelSet;
-+      else
-+              readStatusRid(local, &status_rid);
-+
-       /* Will return zero in infrastructure mode */
- #ifdef WEXT_USECHANNELS
-@@ -4246,11 +4157,8 @@ static int airo_set_wap(struct net_devic
-               return -EINVAL;
-       else if (!memcmp(bcast, awrq->sa_data, ETH_ALEN)) {
-               memset(&cmd, 0, sizeof(cmd));
--              cmd.cmd=CMD_LOSE_SYNC;
--              if (down_interruptible(&local->sem))
--                      return -ERESTARTSYS;
-+              cmd.cmd = CMD_LOSE_SYNC;
-               issuecommand(local, &cmd, &rsp);
--              up(&local->sem);
-       } else {
-               memset(&APList_rid, 0, sizeof(APList_rid));
-               APList_rid.len = sizeof(APList_rid);
-@@ -5132,11 +5040,8 @@ static int airo_set_scan(struct net_devi
-       /* Initiate a scan command */
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.cmd=CMD_LISTBSS;
--      if (down_interruptible(&ai->sem))
--              return -ERESTARTSYS;
-       issuecommand(ai, &cmd, &rsp);
-       ai->scan_timestamp = jiffies;
--      up(&ai->sem);
-       /* At this point, just return to the user. */
---- linux-2.6.0-test1/drivers/net/wireless/ray_cs.c    2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/net/wireless/ray_cs.c   2003-07-19 17:03:50.000000000 -0700
-@@ -25,6 +25,8 @@
-  * - reorganize kmallocs in ray_attach, checking all for failure
-  *   and releasing the previous allocations if one fails
-  *
-+ * Daniele Bellucci <bellucda@tiscali.it> - 07/10/2003
-+ * - Audit copy_to_user in ioctl(SIOCGIWESSID)
-  * 
- =============================================================================*/
-@@ -1315,7 +1317,8 @@ static int ray_dev_ioctl(struct net_devi
-         /* Push it out ! */
-         wrq->u.data.length = strlen(essid) + 1;
-         wrq->u.data.flags = 1; /* active */
--        copy_to_user(wrq->u.data.pointer, essid, sizeof(essid));
-+        if (copy_to_user(wrq->u.data.pointer, essid, sizeof(essid)))
-+                err = -EFAULT;
-       }
-       break;
---- linux-2.6.0-test1/drivers/parisc/led.c     2003-06-16 22:32:21.000000000 -0700
-+++ 25/drivers/parisc/led.c    2003-07-19 17:03:50.000000000 -0700
-@@ -14,6 +14,10 @@
-  * TODO:
-  *    - speed-up calculations with inlined assembler
-  *    - interface to write to second row of LCD from /proc (if technically possible)
-+ *
-+ * Changes:
-+ *      - Audit copy_from_user in led_proc_write.
-+ *                                Daniele Bellucci <bellucda@tiscali.it>
-  */
- #include <linux/config.h>
-@@ -160,7 +164,9 @@ static int led_proc_write(struct file *f
-       memset(lbuf, 0, count);
--      copy_from_user(lbuf, buf, count);
-+      if (copy_from_user(lbuf, buf, count))
-+              return -EFAULT;
-+
-       cur = lbuf;
-       /* skip initial spaces */
---- linux-2.6.0-test1/drivers/parport/parport_pc.c     2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/parport/parport_pc.c    2003-07-19 17:03:50.000000000 -0700
-@@ -94,7 +94,8 @@ static struct superio_struct {       /* For Su
- } superios[NR_SUPERIOS] __devinitdata = { {0,},};
- static int user_specified __devinitdata = 0;
--#if defined(CONFIG_PARPORT_PC_FIFO) || defined(CONFIG_PARPORT_PC_SUPERIO)
-+#if defined(CONFIG_PARPORT_PC_SUPERIO) || \
-+       (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
- static int verbose_probing;
- #endif
- static int registered_parport;
-@@ -3116,7 +3117,8 @@ MODULE_PARM_DESC(irq, "IRQ line");
- MODULE_PARM(irq, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "s");
- MODULE_PARM_DESC(dma, "DMA channel");
- MODULE_PARM(dma, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "s");
--#if defined(CONFIG_PARPORT_PC_FIFO) || defined(CONFIG_PARPORT_PC_SUPERIO)
-+#if defined(CONFIG_PARPORT_PC_SUPERIO) || \
-+       (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
- MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation");
- MODULE_PARM(verbose_probing, "i");
- #endif
---- linux-2.6.0-test1/drivers/pci/hotplug/acpiphp_glue.c       2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/pci/hotplug/acpiphp_glue.c      2003-07-19 17:03:50.000000000 -0700
-@@ -607,7 +607,7 @@ find_p2p_bridge (acpi_handle handle, u32
-       /* check if this bridge has ejectable slots */
-       if (detect_ejectable_slots(handle) > 0) {
--              dbg("found PCI-to-PCI bridge at PCI %s\n", dev->slot_name);
-+              dbg("found PCI-to-PCI bridge at PCI %s\n", pci_name(dev));
-               add_p2p_bridge(handle, seg, bus, device, function);
-       }
-@@ -693,7 +693,7 @@ static int power_on_slot (struct acpiphp
-               if (func->flags & FUNC_HAS_PS0) {
-                       dbg("%s: executing _PS0 on %s\n", __FUNCTION__,
--                          func->pci_dev->slot_name);
-+                          pci_name(func->pci_dev));
-                       status = acpi_evaluate_object(func->handle, "_PS0", NULL, NULL);
-                       if (ACPI_FAILURE(status)) {
-                               warn("%s: _PS0 failed\n", __FUNCTION__);
---- linux-2.6.0-test1/drivers/pci/hotplug/acpiphp_pci.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/pci/hotplug/acpiphp_pci.c       2003-07-19 17:03:50.000000000 -0700
-@@ -212,7 +212,7 @@ static int detect_used_resource (struct 
-       int count;
-       struct pci_resource *res;
--      dbg("Device %s\n", dev->slot_name);
-+      dbg("Device %s\n", pci_name(dev));
-       for (count = 0; address[count]; count++) {      /* for 6 BARs */
-               pci_read_config_dword(dev, address[count], &bar);
-@@ -337,7 +337,7 @@ int acpiphp_init_func_resource (struct a
-       struct pci_dev *dev;
-       dev = func->pci_dev;
--      dbg("Hot-pluggable device %s\n", dev->slot_name);
-+      dbg("Hot-pluggable device %s\n", pci_name(dev));
-       for (count = 0; address[count]; count++) {      /* for 6 BARs */
-               pci_read_config_dword(dev, address[count], &bar);
---- linux-2.6.0-test1/drivers/pci/hotplug.c    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/hotplug.c   2003-07-19 17:03:50.000000000 -0700
-@@ -10,8 +10,6 @@
- #define DBG(x...)
- #endif
--static void pci_free_resources(struct pci_dev *dev);
--
- int pci_hotplug (struct device *dev, char **envp, int num_envp,
-                char *buffer, int buffer_size)
- {
-@@ -57,7 +55,7 @@ int pci_hotplug (struct device *dev, cha
-       envp[i++] = scratch;
-       length += snprintf (scratch, buffer_size - length, "PCI_SLOT_NAME=%s",
--                          pdev->slot_name);
-+                          pci_name(pdev));
-       if ((buffer_size - length <= 0) || (i >= num_envp))
-               return -ENOMEM;
-@@ -172,105 +170,3 @@ int pci_visit_dev (struct pci_visit *fn,
- }
- EXPORT_SYMBOL(pci_visit_dev);
--static void pci_destroy_dev(struct pci_dev *dev)
--{
--      pci_proc_detach_device(dev);
--      device_unregister(&dev->dev);
--
--      /* Remove the device from the device lists, and prevent any further
--       * list accesses from this device */
--      spin_lock(&pci_bus_lock);
--      list_del(&dev->bus_list);
--      list_del(&dev->global_list);
--      dev->bus_list.next = dev->bus_list.prev = NULL;
--      dev->global_list.next = dev->global_list.prev = NULL;
--      spin_unlock(&pci_bus_lock);
--
--      pci_free_resources(dev);
--      pci_dev_put(dev);
--}
--
--/**
-- * pci_remove_device_safe - remove an unused hotplug device
-- * @dev: the device to remove
-- *
-- * Delete the device structure from the device lists and 
-- * notify userspace (/sbin/hotplug), but only if the device
-- * in question is not being used by a driver.
-- * Returns 0 on success.
-- */
--int pci_remove_device_safe(struct pci_dev *dev)
--{
--      if (pci_dev_driver(dev))
--              return -EBUSY;
--      pci_destroy_dev(dev);
--      return 0;
--}
--EXPORT_SYMBOL(pci_remove_device_safe);
--
--static void
--pci_free_resources(struct pci_dev *dev)
--{
--      int i;
--
--      for (i = 0; i < PCI_NUM_RESOURCES; i++) {
--              struct resource *res = dev->resource + i;
--              if (res->parent)
--                      release_resource(res);
--      }
--}
--
--/**
-- * pci_remove_bus_device - remove a PCI device and any children
-- * @dev: the device to remove
-- *
-- * Remove a PCI device from the device lists, informing the drivers
-- * that the device has been removed.  We also remove any subordinate
-- * buses and children in a depth-first manner.
-- *
-- * For each device we remove, delete the device structure from the
-- * device lists, remove the /proc entry, and notify userspace
-- * (/sbin/hotplug).
-- */
--void pci_remove_bus_device(struct pci_dev *dev)
--{
--      if (dev->subordinate) {
--              struct pci_bus *b = dev->subordinate;
--
--              pci_remove_behind_bridge(dev);
--              pci_proc_detach_bus(b);
--
--              spin_lock(&pci_bus_lock);
--              list_del(&b->node);
--              spin_unlock(&pci_bus_lock);
--
--              kfree(b);
--              dev->subordinate = NULL;
--      }
--
--      pci_destroy_dev(dev);
--}
--
--/**
-- * pci_remove_behind_bridge - remove all devices behind a PCI bridge
-- * @dev: PCI bridge device
-- *
-- * Remove all devices on the bus, except for the parent bridge.
-- * This also removes any child buses, and any devices they may
-- * contain in a depth-first manner.
-- */
--void pci_remove_behind_bridge(struct pci_dev *dev)
--{
--      struct list_head *l, *n;
--
--      if (dev->subordinate) {
--              list_for_each_safe(l, n, &dev->subordinate->devices) {
--                      struct pci_dev *dev = pci_dev_b(l);
--
--                      pci_remove_bus_device(dev);
--              }
--      }
--}
--
--EXPORT_SYMBOL(pci_remove_bus_device);
--EXPORT_SYMBOL(pci_remove_behind_bridge);
---- linux-2.6.0-test1/drivers/pci/hotplug/cpci_hotplug_core.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/hotplug/cpci_hotplug_core.c 2003-07-19 17:03:50.000000000 -0700
-@@ -427,34 +427,6 @@ cpci_hp_unregister_bus(struct pci_bus *b
-       return 0;
- }
--struct slot *
--cpci_find_slot(struct pci_bus *bus, unsigned int devfn)
--{
--      struct slot *slot;
--      struct slot *found;
--      struct list_head *tmp;
--
--      if(!bus) {
--              return NULL;
--      }
--
--      spin_lock(&list_lock);
--      if(!slots) {
--              spin_unlock(&list_lock);
--              return NULL;
--      }
--      found = NULL;
--      list_for_each(tmp, &slot_list) {
--              slot = list_entry(tmp, struct slot, slot_list);
--              if(slot->bus == bus && slot->devfn == devfn) {
--                      found = slot;
--                      break;
--              }
--      }
--      spin_unlock(&list_lock);
--      return found;
--}
--
- /* This is the interrupt mode interrupt handler */
- irqreturn_t
- cpci_hp_intr(int irq, void *data, struct pt_regs *regs)
-@@ -924,6 +896,5 @@ EXPORT_SYMBOL_GPL(cpci_hp_register_contr
- EXPORT_SYMBOL_GPL(cpci_hp_unregister_controller);
- EXPORT_SYMBOL_GPL(cpci_hp_register_bus);
- EXPORT_SYMBOL_GPL(cpci_hp_unregister_bus);
--EXPORT_SYMBOL_GPL(cpci_find_slot);
- EXPORT_SYMBOL_GPL(cpci_hp_start);
- EXPORT_SYMBOL_GPL(cpci_hp_stop);
---- linux-2.6.0-test1/drivers/pci/hotplug/cpci_hotplug.h       2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/pci/hotplug/cpci_hotplug.h      2003-07-19 17:03:50.000000000 -0700
-@@ -75,7 +75,6 @@ extern int cpci_hp_register_controller(s
- extern int cpci_hp_unregister_controller(struct cpci_hp_controller *controller);
- extern int cpci_hp_register_bus(struct pci_bus *bus, u8 first, u8 last);
- extern int cpci_hp_unregister_bus(struct pci_bus *bus);
--extern struct slot *cpci_find_slot(struct pci_bus *bus, unsigned int devfn);
- extern int cpci_hp_start(void);
- extern int cpci_hp_stop(void);
---- linux-2.6.0-test1/drivers/pci/hotplug/cpci_hotplug_pci.c   2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/pci/hotplug/cpci_hotplug_pci.c  2003-07-19 17:03:50.000000000 -0700
-@@ -448,7 +448,7 @@ static int cpci_configure_bridge(struct 
- }
- static int configure_visit_pci_dev(struct pci_dev_wrapped *wrapped_dev,
--                      struct pci_bus_wrapped *wrapped_bus)
-+                                 struct pci_bus_wrapped *wrapped_bus)
- {
-       int rc;
-       struct pci_dev *dev = wrapped_dev->dev;
-@@ -461,8 +461,8 @@ static int configure_visit_pci_dev(struc
-        * We need to fix up the hotplug representation with the Linux
-        * representation.
-        */
--      slot = cpci_find_slot(dev->bus, dev->devfn);
--      if(slot) {
-+      if(wrapped_dev->data) {
-+              slot = (struct slot*) wrapped_dev->data;
-               slot->dev = dev;
-       }
-@@ -494,9 +494,7 @@ static int unconfigure_visit_pci_dev_pha
-               return -ENODEV;
-       /* Remove the Linux representation */
--      if(pci_remove_device_safe(dev) == 0) {
--              kfree(dev);
--      } else {
-+      if(pci_remove_device_safe(dev)) {
-               err("Could not remove device\n");
-               return -1;
-       }
-@@ -504,8 +502,8 @@ static int unconfigure_visit_pci_dev_pha
-       /*
-        * Now remove the hotplug representation.
-        */
--      slot = cpci_find_slot(dev->bus, dev->devfn);
--      if(slot) {
-+      if(wrapped_dev->data) {
-+              slot = (struct slot*) wrapped_dev->data;
-               slot->dev = NULL;
-       } else {
-               dbg("No hotplug representation for %02x:%02x.%x",
-@@ -574,13 +572,18 @@ int cpci_configure_slot(struct slot* slo
-       /* Still NULL? Well then scan for it! */
-       if(slot->dev == NULL) {
-+              int n;
-               dbg("pci_dev still null");
-               /*
-                * This will generate pci_dev structures for all functions, but
-                * we will only call this case when lookup fails.
-                */
--              slot->dev = pci_scan_slot(slot->bus, slot->devfn);
-+              n = pci_scan_slot(slot->bus, slot->devfn);
-+              dbg("%s: pci_scan_slot returned %d", __FUNCTION__, n);
-+              if(n > 0)
-+                      pci_bus_add_devices(slot->bus);
-+              slot->dev = pci_find_slot(slot->bus->number, slot->devfn);
-               if(slot->dev == NULL) {
-                       err("Could not find PCI device for slot %02x", slot->number);
-                       return 0;
-@@ -603,6 +606,10 @@ int cpci_configure_slot(struct slot* slo
-                               continue;
-                       wrapped_dev.dev = dev;
-                       wrapped_bus.bus = slot->dev->bus;
-+                      if(i)
-+                              wrapped_dev.data = NULL;
-+                      else
-+                              wrapped_dev.data = (void*) slot;
-                       rc = pci_visit_dev(&configure_functions, &wrapped_dev, &wrapped_bus);
-               }
-       }
-@@ -635,9 +642,14 @@ int cpci_unconfigure_slot(struct slot* s
-               if(dev) {
-                       wrapped_dev.dev = dev;
-                       wrapped_bus.bus = dev->bus;
-+                      if(i)
-+                              wrapped_dev.data = NULL;
-+                      else
-+                              wrapped_dev.data = (void*) slot;
-                       dbg("%s - unconfigure phase 2", __FUNCTION__);
-                       rc = pci_visit_dev(&unconfigure_functions_phase2,
--                                         &wrapped_dev, &wrapped_bus);
-+                                         &wrapped_dev,
-+                                         &wrapped_bus);
-                       if(rc)
-                               break;
-               }
---- linux-2.6.0-test1/drivers/pci/hotplug/Kconfig      2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/hotplug/Kconfig     2003-07-19 17:03:50.000000000 -0700
-@@ -99,22 +99,17 @@ config HOTPLUG_PCI_ACPI
-         When in doubt, say N.
- config HOTPLUG_PCI_CPCI
--      tristate "CompactPCI Hotplug driver"
-+      bool "CompactPCI Hotplug driver"
-       depends on HOTPLUG_PCI
-       help
-         Say Y here if you have a CompactPCI system card with CompactPCI
-         hotswap support per the PICMG 2.1 specification.
--        This code is also available as a module ( = code which can be
--        inserted in and removed from the running kernel whenever you want).
--        The module will be called cpci_hotplug. If you want to compile it
--        as a module, say M here and read <file:Documentation/modules.txt>.
--
-         When in doubt, say N.
- config HOTPLUG_PCI_CPCI_ZT5550
-       tristate "Ziatech ZT5550 CompactPCI Hotplug driver"
--      depends on HOTPLUG_PCI_CPCI && X86
-+      depends on HOTPLUG_PCI && HOTPLUG_PCI_CPCI && X86
-       help
-         Say Y here if you have an Performance Technologies (formerly Intel,
-           formerly just Ziatech) Ziatech ZT5550 CompactPCI system card.
-@@ -128,7 +123,7 @@ config HOTPLUG_PCI_CPCI_ZT5550
- config HOTPLUG_PCI_CPCI_GENERIC
-       tristate "Generic port I/O CompactPCI Hotplug driver"
--      depends on HOTPLUG_PCI_CPCI && X86
-+      depends on HOTPLUG_PCI && HOTPLUG_PCI_CPCI && X86
-       help
-         Say Y here if you have a CompactPCI system card that exposes the #ENUM
-         hotswap signal as a bit in a system register that can be read through
---- linux-2.6.0-test1/drivers/pci/Makefile     2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/Makefile    2003-07-19 17:03:50.000000000 -0700
-@@ -2,7 +2,7 @@
- # Makefile for the PCI bus specific drivers.
- #
--obj-y         += access.o bus.o probe.o pci.o pool.o quirks.o \
-+obj-y         += access.o bus.o probe.o remove.o pci.o pool.o quirks.o \
-                       names.o pci-driver.o search.o pci-sysfs.o
- obj-$(CONFIG_PM)  += power.o
- obj-$(CONFIG_PROC_FS) += proc.o
---- linux-2.6.0-test1/drivers/pci/pci.c        2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pci/pci.c       2003-07-19 17:03:50.000000000 -0700
-@@ -506,7 +506,7 @@ err_out:
-               pci_resource_flags(pdev, bar) & IORESOURCE_IO ? "I/O" : "mem",
-               bar + 1, /* PCI BAR # */
-               pci_resource_len(pdev, bar), pci_resource_start(pdev, bar),
--              pdev->slot_name);
-+              pci_name(pdev));
-       return -EBUSY;
- }
-@@ -555,7 +555,7 @@ err_out:
-               pci_resource_flags(pdev, i) & IORESOURCE_IO ? "I/O" : "mem",
-               i + 1, /* PCI BAR # */
-               pci_resource_len(pdev, i), pci_resource_start(pdev, i),
--              pdev->slot_name);
-+              pci_name(pdev));
-       while(--i >= 0)
-               pci_release_region(pdev, i);
-               
-@@ -576,7 +576,7 @@ pci_set_master(struct pci_dev *dev)
-       pci_read_config_word(dev, PCI_COMMAND, &cmd);
-       if (! (cmd & PCI_COMMAND_MASTER)) {
--              DBG("PCI: Enabling bus mastering for device %s\n", dev->slot_name);
-+              DBG("PCI: Enabling bus mastering for device %s\n", pci_name(dev));
-               cmd |= PCI_COMMAND_MASTER;
-               pci_write_config_word(dev, PCI_COMMAND, cmd);
-       }
-@@ -620,7 +620,7 @@ pci_generic_prep_mwi(struct pci_dev *dev
-               return 0;
-       printk(KERN_WARNING "PCI: cache line size of %d is not supported "
--             "by device %s\n", pci_cache_line_size << 2, dev->slot_name);
-+             "by device %s\n", pci_cache_line_size << 2, pci_name(dev));
-       return -EINVAL;
- }
-@@ -653,7 +653,7 @@ pci_set_mwi(struct pci_dev *dev)
-       pci_read_config_word(dev, PCI_COMMAND, &cmd);
-       if (! (cmd & PCI_COMMAND_INVALIDATE)) {
--              DBG("PCI: Enabling Mem-Wr-Inval for device %s\n", dev->slot_name);
-+              DBG("PCI: Enabling Mem-Wr-Inval for device %s\n", pci_name(dev));
-               cmd |= PCI_COMMAND_INVALIDATE;
-               pci_write_config_word(dev, PCI_COMMAND, cmd);
-       }
---- linux-2.6.0-test1/drivers/pci/pool.c       2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/pci/pool.c      2003-07-19 17:03:50.000000000 -0700
-@@ -233,7 +233,7 @@ pci_pool_destroy (struct pci_pool *pool)
-                               struct pci_page, page_list);
-               if (is_page_busy (pool->blocks_per_page, page->bitmap)) {
-                       printk (KERN_ERR "pci_pool_destroy %s/%s, %p busy\n",
--                              pool->dev ? pool->dev->slot_name : NULL,
-+                              pool->dev ? pci_name(pool->dev) : NULL,
-                               pool->name, page->vaddr);
-                       /* leak the still-in-use consistent memory */
-                       list_del (&page->page_list);
-@@ -359,7 +359,7 @@ pci_pool_free (struct pci_pool *pool, vo
-       if ((page = pool_find_page (pool, dma)) == 0) {
-               printk (KERN_ERR "pci_pool_free %s/%s, %p/%lx (bad dma)\n",
--                      pool->dev ? pool->dev->slot_name : NULL,
-+                      pool->dev ? pci_name(pool->dev) : NULL,
-                       pool->name, vaddr, (unsigned long) dma);
-               return;
-       }
-@@ -372,13 +372,13 @@ pci_pool_free (struct pci_pool *pool, vo
- #ifdef        CONFIG_DEBUG_SLAB
-       if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
-               printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%Lx\n",
--                      pool->dev ? pool->dev->slot_name : NULL,
-+                      pool->dev ? pci_name(pool->dev) : NULL,
-                       pool->name, vaddr, (unsigned long long) dma);
-               return;
-       }
-       if (page->bitmap [map] & (1UL << block)) {
-               printk (KERN_ERR "pci_pool_free %s/%s, dma %Lx already free\n",
--                      pool->dev ? pool->dev->slot_name : NULL,
-+                      pool->dev ? pci_name(pool->dev) : NULL,
-                       pool->name, (unsigned long long)dma);
-               return;
-       }
---- linux-2.6.0-test1/drivers/pci/probe.c      2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/pci/probe.c     2003-07-19 17:04:50.000000000 -0700
-@@ -176,7 +176,7 @@ void __devinit pci_read_bridge_bases(str
-               limit |= (io_limit_hi << 16);
-       }
--      if (base && base <= limit) {
-+      if (base <= limit) {
-               res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
-               res->start = base;
-               res->end = limit + 0xfff;
-@@ -187,7 +187,7 @@ void __devinit pci_read_bridge_bases(str
-       pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
-       base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
-       limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
--      if (base && base <= limit) {
-+      if (base <= limit) {
-               res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
-               res->start = base;
-               res->end = limit + 0xfffff;
-@@ -213,7 +213,7 @@ void __devinit pci_read_bridge_bases(str
-               }
- #endif
-       }
--      if (base && base <= limit) {
-+      if (base <= limit) {
-               res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH;
-               res->start = base;
-               res->end = limit + 0xfffff;
---- linux-2.6.0-test1/drivers/pci/quirks.c     2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/pci/quirks.c    2003-07-19 17:03:50.000000000 -0700
-@@ -33,7 +33,7 @@ static void __devinit quirk_passive_rele
-       while ((d = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, d))) {
-               pci_read_config_byte(d, 0x82, &dlc);
-               if (!(dlc & 1<<1)) {
--                      printk(KERN_ERR "PCI: PIIX3: Enabling Passive Release on %s\n", d->slot_name);
-+                      printk(KERN_ERR "PCI: PIIX3: Enabling Passive Release on %s\n", pci_name(d));
-                       dlc |= 1<<1;
-                       pci_write_config_byte(d, 0x82, dlc);
-               }
-@@ -437,7 +437,7 @@ static void __devinit quirk_via_irqpic(s
-       if (new_irq != irq) {
-               printk(KERN_INFO "PCI: Via IRQ fixup for %s, from %d to %d\n",
--                     dev->slot_name, irq, new_irq);
-+                     pci_name(dev), irq, new_irq);
-               udelay(15);
-               pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
-@@ -598,7 +598,7 @@ static void __devinit quirk_ide_bases(st
-                return;
-        printk(KERN_INFO "PCI: Ignoring BAR%d-%d of IDE controller %s\n",
--              first_bar, last_bar, dev->slot_name);
-+              first_bar, last_bar, pci_name(dev));
- }
- /*
-@@ -856,7 +856,7 @@ static void pci_do_fixups(struct pci_dev
-                   (f->vendor == dev->vendor || f->vendor == (u16) PCI_ANY_ID) &&
-                   (f->device == dev->device || f->device == (u16) PCI_ANY_ID)) {
- #ifdef DEBUG
--                      printk(KERN_INFO "PCI: Calling quirk %p for %s\n", f->hook, dev->slot_name);
-+                      printk(KERN_INFO "PCI: Calling quirk %p for %s\n", f->hook, pci_name(dev));
- #endif
-                       f->hook(dev);
-               }
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/pci/remove.c    2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,113 @@
-+#include <linux/pci.h>
-+#include <linux/module.h>
-+#include "pci.h"
-+
-+#undef DEBUG
-+
-+#ifdef DEBUG
-+#define DBG(x...) printk(x)
-+#else
-+#define DBG(x...)
-+#endif
-+
-+static void pci_free_resources(struct pci_dev *dev)
-+{
-+      int i;
-+
-+      for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-+              struct resource *res = dev->resource + i;
-+              if (res->parent)
-+                      release_resource(res);
-+      }
-+}
-+
-+static void pci_destroy_dev(struct pci_dev *dev)
-+{
-+      pci_proc_detach_device(dev);
-+      device_unregister(&dev->dev);
-+
-+      /* Remove the device from the device lists, and prevent any further
-+       * list accesses from this device */
-+      spin_lock(&pci_bus_lock);
-+      list_del(&dev->bus_list);
-+      list_del(&dev->global_list);
-+      dev->bus_list.next = dev->bus_list.prev = NULL;
-+      dev->global_list.next = dev->global_list.prev = NULL;
-+      spin_unlock(&pci_bus_lock);
-+
-+      pci_free_resources(dev);
-+      pci_dev_put(dev);
-+}
-+
-+/**
-+ * pci_remove_device_safe - remove an unused hotplug device
-+ * @dev: the device to remove
-+ *
-+ * Delete the device structure from the device lists and 
-+ * notify userspace (/sbin/hotplug), but only if the device
-+ * in question is not being used by a driver.
-+ * Returns 0 on success.
-+ */
-+int pci_remove_device_safe(struct pci_dev *dev)
-+{
-+      if (pci_dev_driver(dev))
-+              return -EBUSY;
-+      pci_destroy_dev(dev);
-+      return 0;
-+}
-+EXPORT_SYMBOL(pci_remove_device_safe);
-+
-+/**
-+ * pci_remove_bus_device - remove a PCI device and any children
-+ * @dev: the device to remove
-+ *
-+ * Remove a PCI device from the device lists, informing the drivers
-+ * that the device has been removed.  We also remove any subordinate
-+ * buses and children in a depth-first manner.
-+ *
-+ * For each device we remove, delete the device structure from the
-+ * device lists, remove the /proc entry, and notify userspace
-+ * (/sbin/hotplug).
-+ */
-+void pci_remove_bus_device(struct pci_dev *dev)
-+{
-+      if (dev->subordinate) {
-+              struct pci_bus *b = dev->subordinate;
-+
-+              pci_remove_behind_bridge(dev);
-+              pci_proc_detach_bus(b);
-+
-+              spin_lock(&pci_bus_lock);
-+              list_del(&b->node);
-+              spin_unlock(&pci_bus_lock);
-+
-+              kfree(b);
-+              dev->subordinate = NULL;
-+      }
-+
-+      pci_destroy_dev(dev);
-+}
-+
-+/**
-+ * pci_remove_behind_bridge - remove all devices behind a PCI bridge
-+ * @dev: PCI bridge device
-+ *
-+ * Remove all devices on the bus, except for the parent bridge.
-+ * This also removes any child buses, and any devices they may
-+ * contain in a depth-first manner.
-+ */
-+void pci_remove_behind_bridge(struct pci_dev *dev)
-+{
-+      struct list_head *l, *n;
-+
-+      if (dev->subordinate) {
-+              list_for_each_safe(l, n, &dev->subordinate->devices) {
-+                      struct pci_dev *dev = pci_dev_b(l);
-+
-+                      pci_remove_bus_device(dev);
-+              }
-+      }
-+}
-+
-+EXPORT_SYMBOL(pci_remove_bus_device);
-+EXPORT_SYMBOL(pci_remove_behind_bridge);
---- linux-2.6.0-test1/drivers/pci/setup-bus.c  2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/pci/setup-bus.c 2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@ pci_setup_cardbus(struct pci_bus *bus)
-       struct pci_bus_region region;
-       printk("PCI: Bus %d, cardbus bridge: %s\n",
--              bus->number, bridge->slot_name);
-+              bus->number, pci_name(bridge));
-       pcibios_resource_to_bus(bridge, &region, bus->resource[0]);
-       if (bus->resource[0]->flags & IORESOURCE_IO) {
-@@ -344,7 +344,7 @@ pbus_size_mem(struct pci_bus *bus, unsig
-                       if (order > 11) {
-                               printk(KERN_WARNING "PCI: region %s/%d "
-                                      "too large: %lx-%lx\n",
--                                     dev->slot_name, i, r->start, r->end);
-+                                     pci_name(dev), i, r->start, r->end);
-                               r->flags = 0;
-                               continue;
-                       }
-@@ -513,7 +513,7 @@ pci_bus_assign_resources(struct pci_bus 
-               default:
-                       printk(KERN_INFO "PCI: not setting up bridge %s "
--                             "for bus %d\n", dev->slot_name, b->number);
-+                             "for bus %d\n", pci_name(dev), b->number);
-                       break;
-               }
-       }
---- linux-2.6.0-test1/drivers/pci/setup-res.c  2003-06-14 12:18:32.000000000 -0700
-+++ 25/drivers/pci/setup-res.c 2003-07-19 17:03:50.000000000 -0700
-@@ -68,7 +68,7 @@ pci_update_resource(struct pci_dev *dev,
-       if ((new ^ check) & mask) {
-               printk(KERN_ERR "PCI: Error while updating region "
--                     "%s/%d (%08x != %08x)\n", dev->slot_name, resno,
-+                     "%s/%d (%08x != %08x)\n", pci_name(dev), resno,
-                      new, check);
-       }
-@@ -80,7 +80,7 @@ pci_update_resource(struct pci_dev *dev,
-               if (check != new) {
-                       printk(KERN_ERR "PCI: Error updating region "
-                              "%s/%d (high %08x != %08x)\n",
--                             dev->slot_name, resno, new, check);
-+                             pci_name(dev), resno, new, check);
-               }
-       }
- }
-@@ -101,7 +101,7 @@ pci_claim_resource(struct pci_dev *dev, 
-               printk(KERN_ERR "PCI: %s region %d of %s %s [%lx:%lx]\n",
-                      root ? "Address space collision on" :
-                             "No parent found for",
--                     resource, dtype, dev->slot_name, res->start, res->end);
-+                     resource, dtype, pci_name(dev), res->start, res->end);
-       }
-       return err;
-@@ -139,7 +139,7 @@ int pci_assign_resource(struct pci_dev *
-       if (ret) {
-               printk(KERN_ERR "PCI: Failed to allocate resource %d(%lx-%lx) for %s\n",
--                     resno, res->start, res->end, dev->slot_name);
-+                     resno, res->start, res->end, pci_name(dev));
-       } else if (resno < PCI_BRIDGE_RESOURCES) {
-               pci_update_resource(dev, res, resno);
-       }
---- linux-2.6.0-test1/drivers/pcmcia/hd64465_ss.c      2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/pcmcia/hd64465_ss.c     2003-07-19 17:03:50.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * $Id$
-+ * $Id: hd64465_ss.c,v 1.7 2003/07/06 14:42:50 lethal Exp $
-  *
-  * Device driver for the PCMCIA controller module of the
-  * Hitachi HD64465 handheld companion chip.
-@@ -24,7 +24,6 @@
-  *
-  * by Greg Banks <gbanks@pocketpenguins.com>
-  * (c) 2000 PocketPenguins Inc
-- *
-  */
- #include <linux/types.h>
-@@ -37,28 +36,26 @@
- #include <linux/vmalloc.h>
- #include <asm/errno.h>
- #include <linux/irq.h>
--#include <linux/workqueue.h>
-+#include <linux/interrupt.h>
- #include <linux/device.h>
- #include <asm/io.h>
--#include <asm/hd64465.h>
-+#include <asm/hd64465/hd64465.h>
-+#include <asm/hd64465/io.h>
- #include <pcmcia/version.h>
- #include <pcmcia/cs_types.h>
- #include <pcmcia/cs.h>
-+#include <pcmcia/cistpl.h>
-+#include <pcmcia/ds.h>
- #include <pcmcia/ss.h>
- #include <pcmcia/bulkmem.h>
--#include <pcmcia/cistpl.h>
- #include "cs_internal.h"
- #define MODNAME "hd64465_ss"
- /* #define HD64465_DEBUG 1 */
--#ifndef HD64465_DEBUG
--#define HD64465_DEBUG 0
--#endif
--
- #if HD64465_DEBUG
- #define DPRINTK(args...)      printk(MODNAME ": " args)
- #else
-@@ -66,7 +63,8 @@
- #endif
- extern int hd64465_io_debug;
--
-+extern void * p3_ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags);
-+extern void p3_iounmap(void *addr);
- /*============================================================*/
-@@ -74,37 +72,22 @@ extern int hd64465_io_debug;
- typedef struct hs_socket_t
- {
-+    unsigned int      number;
-     u_int             irq;
-     u_long            mem_base;
-+    void              *io_base;
-     u_long            mem_length;
--    void              (*handler)(void *info, u_int events);
--    void              *handler_info;
--    u_int             pending_events;
-     u_int             ctrl_base;
-     socket_state_t    state;
-     pccard_io_map             io_maps[MAX_IO_WIN];
-     pccard_mem_map    mem_maps[MAX_WIN];
--    struct vm_struct  *io_vma;    /* allocated kernel vm for mapping IO space */
-+    struct pcmcia_socket      socket;
- } hs_socket_t;
--#define HS_MAX_SOCKETS 2
--static hs_socket_t hs_sockets[HS_MAX_SOCKETS];
--static spinlock_t hs_pending_event_lock = SPIN_LOCK_UNLOCKED;
--/* Calculate socket number from ptr into hs_sockets[] */
--#define hs_sockno(sp)         (sp - hs_sockets)
--static socket_cap_t hs_socket_cap =
--{
--    SS_CAP_PCCARD         /* support 16 bit cards */
--    |SS_CAP_STATIC_MAP      /* mappings are fixed in host memory */
--    ,
--    0xffde/*0xffff*/,             /* IRQs mapped in s/w so can do any, really */
--    HD64465_PCC_WINDOW,     /* 16MB fixed window size */
--    0,                            /* no PCI support */
--    0,                            /* no CardBus support */
--    0                     /* no bus operations needed */
--};
-+#define HS_MAX_SOCKETS 2
-+static hs_socket_t hs_sockets[HS_MAX_SOCKETS];
- #define hs_in(sp, r)      inb((sp)->ctrl_base + (r))
- #define hs_out(sp, v, r)    outb(v, (sp)->ctrl_base + (r))
-@@ -179,7 +162,7 @@ static void hs_socket_enable_ireq(hs_soc
- {
-       unsigned short cscier;
-       
--      DPRINTK("hs_socket_enable_ireq(sock=%d)\n", hs_sockno(sp));
-+      DPRINTK("hs_socket_enable_ireq(sock=%d)\n", sp->number);
-       cscier = hs_in(sp, CSCIER);
-       cscier &= ~HD64465_PCCCSCIER_PIREQE_MASK;
-@@ -191,7 +174,7 @@ static void hs_socket_disable_ireq(hs_so
- {
-       unsigned short cscier;
-       
--      DPRINTK("hs_socket_disable_ireq(sock=%d)\n", hs_sockno(sp));
-+      DPRINTK("hs_socket_disable_ireq(sock=%d)\n", sp->number);
-       
-       cscier = hs_in(sp, CSCIER);
-       cscier &= ~HD64465_PCCCSCIER_PIREQE_MASK;
-@@ -255,7 +238,7 @@ static struct hw_interrupt_type hd64465_
-  */
- static void hs_map_irq(hs_socket_t *sp, unsigned int irq)
- {
--      DPRINTK("hs_map_irq(sock=%d irq=%d)\n", hs_sockno(sp), irq);
-+      DPRINTK("hs_map_irq(sock=%d irq=%d)\n", sp->number, irq);
-       
-       if (irq >= HS_NUM_MAPPED_IRQS)
-           return;
-@@ -272,7 +255,7 @@ static void hs_map_irq(hs_socket_t *sp, 
-  */
- static void hs_unmap_irq(hs_socket_t *sp, unsigned int irq)
- {
--      DPRINTK("hs_unmap_irq(sock=%d irq=%d)\n", hs_sockno(sp), irq);
-+      DPRINTK("hs_unmap_irq(sock=%d irq=%d)\n", sp->number, irq);
-       
-       if (irq >= HS_NUM_MAPPED_IRQS)
-           return;
-@@ -301,7 +284,7 @@ static int hs_set_voltages(hs_socket_t *
- {
-       u_int psr;
-       u_int vcci = 0;
--      u_int sock = hs_sockno(sp);
-+      u_int sock = sp->number;
-       
-       DPRINTK("hs_set_voltage(%d, %d, %d)\n", sock, Vcc, Vpp);
-@@ -359,13 +342,12 @@ static void hs_reset_socket(hs_socket_t 
- /*============================================================*/
--static int hs_init(unsigned int sock)
-+static int hs_init(struct pcmcia_socket *s)
- {
--      hs_socket_t *sp = &hs_sockets[sock];
-+      hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-       
--      DPRINTK("hs_init(%d)\n", sock);
-+      DPRINTK("hs_init(%d)\n", sp->number);
-       
--      sp->pending_events = 0;
-       sp->state.Vcc = 0;
-       sp->state.Vpp = 0;
-       hs_set_voltages(sp, 0, 0);
-@@ -375,9 +357,12 @@ static int hs_init(unsigned int sock)
- /*============================================================*/
--static int hs_suspend(unsigned int sock)
-+static int hs_suspend(struct pcmcia_socket *s)
- {
--      DPRINTK("hs_suspend(%d)\n", sock);
-+#ifdef HD64465_DEBUG
-+      hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-+      DPRINTK("hs_suspend(%d)\n", sp->number);
-+#endif
-       /* TODO */
-       
-@@ -386,32 +371,10 @@ static int hs_suspend(unsigned int sock)
- /*============================================================*/
--static int hs_register_callback(unsigned int sock,
--          void (*handler)(void *, unsigned int), void * info)
--{
--      hs_socket_t *sp = &hs_sockets[sock];
--      
--      DPRINTK("hs_register_callback(%d)\n", sock);
--      sp->handler = handler;
--      sp->handler_info = info;
--      return 0;
--}
--
--/*============================================================*/
--static int hs_inquire_socket(unsigned int sock, socket_cap_t *cap)
-+static int hs_get_status(struct pcmcia_socket *s, u_int *value)
- {
--      DPRINTK("hs_inquire_socket(%d)\n", sock);
--
--      *cap = hs_socket_cap;
--      return 0;
--}
--
--/*============================================================*/
--
--static int hs_get_status(unsigned int sock, u_int *value)
--{
--      hs_socket_t *sp = &hs_sockets[sock];
-+      hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-       unsigned int isr;
-       u_int status = 0;
-       
-@@ -473,9 +436,9 @@ static int hs_get_status(unsigned int so
- /*============================================================*/
--static int hs_get_socket(unsigned int sock, socket_state_t *state)
-+static int hs_get_socket(struct pcmcia_socket *s, socket_state_t *state)
- {
--      hs_socket_t *sp = &hs_sockets[sock];
-+      hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-       DPRINTK("hs_get_socket(%d)\n", sock);
-       
-@@ -485,9 +448,9 @@ static int hs_get_socket(unsigned int so
- /*============================================================*/
--static int hs_set_socket(unsigned int sock, socket_state_t *state)
-+static int hs_set_socket(struct pcmcia_socket *s, socket_state_t *state)
- {
--      hs_socket_t *sp = &hs_sockets[sock];
-+      hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-       u_long flags;
-       u_int changed;
-       unsigned short cscier;
-@@ -495,12 +458,12 @@ static int hs_set_socket(unsigned int so
-       DPRINTK("hs_set_socket(sock=%d, flags=%x, csc_mask=%x, Vcc=%d, Vpp=%d, io_irq=%d)\n",
-           sock, state->flags, state->csc_mask, state->Vcc, state->Vpp, state->io_irq);
-       
--      save_and_cli(flags);    /* Don't want interrupts happening here */
-+      local_irq_save(flags);  /* Don't want interrupts happening here */
-       if (state->Vpp != sp->state.Vpp ||
-           state->Vcc != sp->state.Vcc) {
-           if (!hs_set_voltages(sp, state->Vcc, state->Vpp)) {
--              restore_flags(flags);
-+              local_irq_restore(flags);
-               return -EINVAL;
-           }
-       }
-@@ -588,7 +551,7 @@ static int hs_set_socket(unsigned int so
- /*            hd64465_io_debug = 0; */
-       sp->state = *state;
-           
--      restore_flags(flags);
-+      local_irq_restore(flags);
- #if HD64465_DEBUG > 10
-       if (state->flags & SS_OUTPUT_ENA)   
-@@ -599,10 +562,11 @@ static int hs_set_socket(unsigned int so
- /*============================================================*/
--static int hs_set_io_map(unsigned int sock, struct pccard_io_map *io)
-+static int hs_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
- {
--      hs_socket_t *sp = &hs_sockets[sock];
-+      hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-       int map = io->map;
-+      int sock = sp->number;
-       struct pccard_io_map *sio;
-       pgprot_t prot;
-@@ -639,10 +603,9 @@ static int hs_set_io_map(unsigned int so
-           printk(KERN_INFO MODNAME ": MAP_0WS unimplemented\n");
-       if (io->flags & MAP_ACTIVE) {
--          unsigned long pstart, psize, paddrbase, vaddrbase;
-+          unsigned long pstart, psize, paddrbase;
-           
-           paddrbase = virt_to_phys((void*)(sp->mem_base + 2 * HD64465_PCC_WINDOW));
--          vaddrbase = (unsigned long)sp->io_vma->addr;
-           pstart = io->start & PAGE_MASK;
-           psize = ((io->stop + PAGE_SIZE) & PAGE_MASK) - pstart;
-@@ -653,26 +616,17 @@ static int hs_set_io_map(unsigned int so
-            * page will be mapped.  But the code allows for weird cards
-            * that might want IO ports > 4K.
-            */
--          DPRINTK("remap_page_range(vaddr=0x%08lx, paddr=0x%08lx, size=0x%08lxx)\n",
--              vaddrbase + pstart, paddrbase + pstart, psize);
--#error This does not work.  Firstly remap_page_range() uses current->mm for
--#error the address space, which is wrong for kernel mappings.  remap_page_range
--#error also does flush_{cache,tlb}_range() which ONLY works for user mappings.
--#error Next, remap_page_range() now wants to take a vm_area_struct arg.
--          remap_page_range(vaddrbase + pstart, paddrbase + pstart, psize, prot);
-+          sp->io_base = p3_ioremap(paddrbase + pstart, psize, pgprot_val(prot));
-           
-           /*
-            * Change the mapping used by inb() outb() etc
-            */
--          hd64465_port_map(
--              io->start,
-+          hd64465_port_map(io->start,
-               io->stop - io->start + 1,
--              vaddrbase + io->start,0);
-+              (unsigned long)sp->io_base + io->start, 0);
-       } else {
--          hd64465_port_unmap(
--              sio->start,
--              sio->stop - sio->start + 1);
--          /* TODO: remap_page_range() to mark pages not present ? */
-+          hd64465_port_unmap(sio->start, sio->stop - sio->start + 1);
-+          p3_iounmap(sp->io_base);
-       }
-       
-       *sio = *io;
-@@ -681,9 +635,9 @@ static int hs_set_io_map(unsigned int so
- /*============================================================*/
--static int hs_set_mem_map(unsigned int sock, struct pccard_mem_map *mem)
-+static int hs_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
- {
--      hs_socket_t *sp = &hs_sockets[sock];
-+      hs_socket_t *sp = container_of(s, struct hs_socket_t, socket);
-       struct pccard_mem_map *smem;
-       int map = mem->map;
-       unsigned long paddr, size;
-@@ -722,13 +676,6 @@ static int hs_set_mem_map(unsigned int s
- /*============================================================*/
--static void hs_proc_setup(unsigned int sock, struct proc_dir_entry *base)
--{
--      DPRINTK("hs_proc_setup(%d)\n", sock);
--}
--
--/*============================================================*/
--
- /*
-  * This function is registered with the HD64465 glue code to do a
-  * secondary demux step on the PCMCIA interrupts.  It handles 
-@@ -756,35 +703,9 @@ static int hs_irq_demux(int irq, void *d
- /*
-  * Interrupt handling routine.
-- *
-- * This uses the schedule_work() technique to cause reportable events
-- * such as card insertion and removal to be handled in keventd's
-- * process context.
-  */
-  
--
--static void hs_events_bh(void *dummy)
--{
--      hs_socket_t *sp;
--      u_int events;
--      int i;
--
--      for (i=0; i<HS_MAX_SOCKETS; i++) {
--          sp = &hs_sockets[i];
--
--          spin_lock_irq(&hs_pending_event_lock);
--          events = sp->pending_events;
--          sp->pending_events = 0;
--          spin_unlock_irq(&hs_pending_event_lock);
--          
--          if (sp->handler)
--              sp->handler(sp->handler_info, events);
--      }
--}
--
--static DECLARE_WORK(hs_events_task, hs_events_bh, NULL);
--
--static void hs_interrupt(int irq, void *dev, struct pt_regs *regs)
-+static irqreturn_t hs_interrupt(int irq, void *dev, struct pt_regs *regs)
- {
-       hs_socket_t *sp = (hs_socket_t *)dev;
-       u_int events = 0;
-@@ -801,7 +722,7 @@ static void hs_interrupt(int irq, void *
-           if ((hs_in(sp, ISR) & HD64465_PCCISR_PCD_MASK) != 0) {
-               printk(KERN_NOTICE MODNAME
-                   ": socket %d, card not a supported card type or not inserted correctly\n",
--                  hs_sockno(sp));
-+                  sp->number);
-               /* Don't do the rest unless a card is present */
-               cscr &= ~(HD64465_PCCCSCR_PCDC|
-                         HD64465_PCCCSCR_PRC|
-@@ -839,34 +760,22 @@ static void hs_interrupt(int irq, void *
-       hs_out(sp, cscr, CSCR);
--      if (events) {
--          /*
--           * Arrange for events to be reported to the registered
--           * event handler function (from CardServices) in a process
--           * context (keventd) "soon".
--           */
--          spin_lock(&hs_pending_event_lock);
--          sp->pending_events |= events;
--          spin_unlock(&hs_pending_event_lock);
--          
--          schedule_work(&hs_events_task);
--      }
-+      if (events)
-+              pcmcia_parse_events(&sp->socket, events);
-+
-+      return IRQ_HANDLED;
- }
- /*============================================================*/
- static struct pccard_operations hs_operations = {
--      .owner                  = THIS_MODULE,
-       .init                   = hs_init,
-       .suspend                = hs_suspend,
--      .register_callback      = hs_register_callback,
--      .inquire_socket         = hs_inquire_socket,
-       .get_status             = hs_get_status,
-       .get_socket             = hs_get_socket,
-       .set_socket             = hs_set_socket,
-       .set_io_map             = hs_set_io_map,
-       .set_mem_map            = hs_set_mem_map,
--      .proc_setup             = hs_proc_setup,
- };
- static int hs_init_socket(hs_socket_t *sp, int irq, unsigned long mem_base,
-@@ -886,9 +795,6 @@ static int hs_init_socket(hs_socket_t *s
-       for (i=0 ; i<MAX_WIN ; i++)
-           sp->mem_maps[i].map = i;
-       
--      if ((sp->io_vma = get_vm_area(HS_IO_MAP_SIZE, VM_IOREMAP)) == 0)
--          return -ENOMEM;
--
-       hd64465_register_irq_demux(sp->irq, hs_irq_demux, sp);
-       
-       if ((err = request_irq(sp->irq, hs_interrupt, SA_INTERRUPT, MODNAME, sp)) < 0)
-@@ -925,9 +831,8 @@ static int hs_init_socket(hs_socket_t *s
-       
-       hs_reset_socket(sp, 1);
--      printk(KERN_INFO "HD64465 PCMCIA bridge socket %d at 0x%08lx irq %d io window %ldK@0x%08lx\n",
--              i, sp->mem_base, sp->irq,
--              sp->io_vma->size>>10, (unsigned long)sp->io_vma->addr);
-+      printk(KERN_INFO "HD64465 PCMCIA bridge socket %d at 0x%08lx irq %d\n",
-+              i, sp->mem_base, sp->irq);
-       return 0;
- }
-@@ -935,7 +840,10 @@ static int hs_init_socket(hs_socket_t *s
- static void hs_exit_socket(hs_socket_t *sp)
- {
-       unsigned short cscier, gcr;
-+      unsigned long flags;
-       
-+      local_irq_save(flags);
-+
-       /* turn off interrupts in hardware */
-       cscier = hs_in(sp, CSCIER);
-       cscier = (cscier & IER_MASK) | IER_OFF;
-@@ -955,19 +863,13 @@ static void hs_exit_socket(hs_socket_t *
-           free_irq(sp->irq, hs_interrupt);
-           hd64465_unregister_irq_demux(sp->irq);
-       }
--      if (sp->io_vma != 0)
--          vfree(sp->io_vma->addr);
--}
--static struct pcmcia_socket_class_data hd64465_data = {
--      .nsock = HS_MAX_SOCKETS,
--      .ops = &hs_operations,
--};
-+      local_irq_restore(flags);
-+}
- static struct device_driver hd64465_driver = {
-       .name = "hd64465-pcmcia",
-       .bus = &platform_bus_type,
--      .devclass = &pcmcia_socket_class,
-       .suspend = pcmcia_socket_dev_suspend,
-       .resume = pcmcia_socket_dev_resume,
- };
-@@ -996,7 +898,8 @@ static int __init init_hs(void)
-       }
- /*    hd64465_io_debug = 1; */
--      register_driver(&hd64465_driver);
-+      if (driver_register(&hd64465_driver))
-+              return -EINVAL;
-       
-       /* Wake both sockets out of STANDBY mode */
-       /* TODO: wait 15ms */
-@@ -1014,14 +917,22 @@ static int __init init_hs(void)
-       v |= HD64465_PCCCSCR_PSWSEL;
-       outb(v, HD64465_REG_PCC0CSCR);
--      hs_set_voltages(&hs_sockets[0], 0, 0);
--      hs_set_voltages(&hs_sockets[1], 0, 0);
--      
-       /*
-        * Setup hs_sockets[] structures and request system resources.
-        * TODO: on memory allocation failure, power down the socket
-        *       before quitting.
-        */
-+      for (i=0; i<HS_MAX_SOCKETS; i++) {
-+              hs_set_voltages(&hs_sockets[i], 0, 0);
-+
-+              hs_sockets[i].socket.features |=  SS_CAP_PCCARD | SS_CAP_STATIC_MAP;      /* mappings are fixed in host memory */
-+              hs_sockets[i].socket.irq_mask =  0xffde;/*0xffff*/          /* IRQs mapped in s/w so can do any, really */
-+              hs_sockets[i].socket.map_size = HD64465_PCC_WINDOW;     /* 16MB fixed window size */
-+
-+              hs_sockets[i].socket.owner = THIS_MODULE;
-+              hs_sockets[i].socket.ss_entry = &hs_operations;
-+      }
-+
-       i = hs_init_socket(&hs_sockets[0],
-           HD64465_IRQ_PCMCIA0,
-           HD64465_PCC0_BASE,
-@@ -1040,27 +951,31 @@ static int __init init_hs(void)
-       }
- /*    hd64465_io_debug = 0; */
--      hd64465_device.dev.class_data = &hd64465_data;
-+
-       platform_device_register(&hd64465_device);
--      return 0;
-+      for (i=0; i<HS_MAX_SOCKETS; i++) {
-+              unsigned int ret;
-+              hs_sockets[i].socket.dev.dev = &hd64465_device.dev;             
-+              hs_sockets[i].number = i;
-+              ret = pcmcia_register_socket(&hs_sockets[i].socket);
-+              if (ret && i)
-+                      pcmcia_unregister_socket(&hs_sockets[0].socket);
-+      }
-+
-+      return 0;
- }
- static void __exit exit_hs(void)
- {
--      u_long flags;
-       int i;
--      
--      save_and_cli(flags);
--      /*
--       * Release kernel resources
--       */
--      for (i=0 ; i<HS_MAX_SOCKETS ; i++)
--          hs_exit_socket(&hs_sockets[i]);
-+      for (i=0 ; i<HS_MAX_SOCKETS ; i++) {
-+              pcmcia_unregister_socket(&hs_sockets[i].socket);
-+              hs_exit_socket(&hs_sockets[i]);
-+      }
-+
-       platform_device_unregister(&hd64465_device);
--      
--      restore_flags(flags);
-       unregister_driver(&hd64465_driver);
- }
---- linux-2.6.0-test1/drivers/pcmcia/ricoh.h   2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/pcmcia/ricoh.h  2003-07-19 17:03:50.000000000 -0700
-@@ -116,6 +116,8 @@
- #define  RL5C4XX_CMD_SHIFT            4
- #define  RL5C4XX_HOLD_MASK            0x1c00
- #define  RL5C4XX_HOLD_SHIFT           10
-+#define  RL5C4XX_MISC_CONTROL           0x2F /* 8 bit */
-+#define  RL5C4XX_ZV_ENABLE              0x08
- #ifdef __YENTA_H
-@@ -125,10 +127,41 @@
- #define rl_mem(socket)                ((socket)->private[3])
- #define rl_config(socket)     ((socket)->private[4])
-+static void ricoh_zoom_video(struct pcmcia_socket *sock, int onoff)
-+{
-+        u8 reg;
-+      struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+
-+        reg = config_readb(socket, RL5C4XX_MISC_CONTROL);
-+        if (onoff)
-+                /* Zoom zoom, we will all go together, zoom zoom, zoom zoom */
-+                reg |=  RL5C4XX_ZV_ENABLE;
-+        else
-+                reg &= ~RL5C4XX_ZV_ENABLE;
-+      
-+        config_writeb(socket, RL5C4XX_MISC_CONTROL, reg);
-+}
-+
-+static void ricoh_set_zv(struct pcmcia_socket *sock)
-+{
-+      struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+        if(socket->dev->vendor == PCI_VENDOR_ID_RICOH)
-+        {
-+                switch(socket->dev->device)
-+                {
-+                        /* There may be more .. */
-+              case  PCI_DEVICE_ID_RICOH_RL5C478:
-+                      sock->zoom_video = ricoh_zoom_video;
-+                      break;  
-+                }
-+        }
-+}
-+
- static int ricoh_init(struct pcmcia_socket *sock)
- {
-       struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-       yenta_init(sock);
-+      ricoh_set_zv(sock);
-       config_writew(socket, RL5C4XX_MISC, rl_misc(socket));
-       config_writew(socket, RL5C4XX_16BIT_CTL, rl_ctl(socket));
---- linux-2.6.0-test1/drivers/pcmcia/ti113x.h  2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/pcmcia/ti113x.h 2003-07-19 17:03:50.000000000 -0700
-@@ -148,14 +148,96 @@ static int ti_intctl(struct yenta_socket
-       return 0;
- }
-+/*
-+ *    Zoom video control for TI122x/113x chips
-+ */
-+
-+static void ti_zoom_video(struct pcmcia_socket *sock, int onoff)
-+{
-+      u8 reg;
-+      struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+
-+      /* If we don't have a Zoom Video switch this is harmless,
-+         we just tristate the unused (ZV) lines */
-+      reg = config_readb(socket, TI113X_CARD_CONTROL);
-+      if (onoff)
-+              /* Zoom zoom, we will all go together, zoom zoom, zoom zoom */
-+              reg |= TI113X_CCR_ZVENABLE;
-+      else
-+              reg &= ~TI113X_CCR_ZVENABLE;
-+      config_writeb(socket, TI113X_CARD_CONTROL, reg);
-+}
-+
-+/*
-+ *    The 145x series can also use this. They have an additional
-+ *    ZV autodetect mode we don't use but don't actually need.
-+ *    FIXME: manual says its in func0 and func1 but disagrees with
-+ *    itself about this - do we need to force func0, if so we need
-+ *    to know a lot more about socket pairings in pcmcia_socket than
-+ *    we do now.. uggh.
-+ */
-+ 
-+static void ti1250_zoom_video(struct pcmcia_socket *sock, int onoff)
-+{     
-+      struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+      int shift = 0;
-+      u8 reg;
-+
-+      ti_zoom_video(sock, onoff);
-+
-+      reg = config_readb(socket, 0x84);
-+      reg |= (1<<7);  /* ZV bus enable */
-+
-+      if(PCI_FUNC(socket->dev->devfn)==1)
-+              shift = 1;
-+      
-+      if(onoff)
-+      {
-+              reg &= ~(1<<6);         /* Clear select bit */
-+              reg |= shift<<6;        /* Favour our socket */
-+              reg |= 1<<shift;        /* Socket zoom video on */
-+      }
-+      else
-+      {
-+              reg &= ~(1<<6);         /* Clear select bit */
-+              reg |= (1^shift)<<6;    /* Favour other socket */
-+              reg &= ~(1<<shift);     /* Socket zoon video off */
-+      }
-+
-+      config_writeb(socket, 0x84, reg);
-+}
-+
-+static void ti_set_zv(struct pcmcia_socket *sock)
-+{
-+      struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-+      if(socket->dev->vendor == PCI_VENDOR_ID_TI)
-+      {
-+              switch(socket->dev->device)
-+              {
-+                      /* There may be more .. */
-+                      case PCI_DEVICE_ID_TI_1220:
-+                      case PCI_DEVICE_ID_TI_1221:
-+                      case PCI_DEVICE_ID_TI_1225:
-+                              sock->zoom_video = ti_zoom_video;
-+                              break;  
-+                      case PCI_DEVICE_ID_TI_1250:
-+                      case PCI_DEVICE_ID_TI_1251A:
-+                      case PCI_DEVICE_ID_TI_1251B:
-+                      case PCI_DEVICE_ID_TI_1450:
-+                              sock->zoom_video = ti1250_zoom_video;
-+              }
-+      }
-+}
- static int ti_init(struct pcmcia_socket *sock)
- {
-       struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-       yenta_init(sock);
-+      ti_set_zv(sock);
-       ti_intctl(socket);
-       return 0;
- }
-+
- /*
-  * Generic TI init - TI has an extension for the
-  * INTCTL register that sets the PCI CSC interrupt.
-@@ -176,9 +258,6 @@ static int ti_override(struct yenta_sock
-       if (new != reg)
-               exca_writeb(socket, I365_INTCTL, new);
--#if 0
--      /* THIS CAUSES HANGS! Disabled for now, do not know why */
--
-       /*
-        * If ISA interrupts don't work, then fall back to routing card
-        * interrupts to the PCI interrupt of the socket.
-@@ -190,7 +269,7 @@ static int ti_override(struct yenta_sock
-               u8 irqmux, devctl;
-               devctl = config_readb(socket, TI113X_DEVICE_CONTROL);
--              if (devctl & TI113X_DCR_IMODE_MASK != TI12XX_DCR_IMODE_ALL_SERIAL) {
-+              if ((devctl & TI113X_DCR_IMODE_MASK) != TI12XX_DCR_IMODE_ALL_SERIAL) {
-                       printk (KERN_INFO "ti113x: Routing card interrupts to PCI\n");
-                       devctl &= ~TI113X_DCR_IMODE_MASK;
-@@ -203,7 +282,6 @@ static int ti_override(struct yenta_sock
-                       config_writeb(socket, TI113X_DEVICE_CONTROL, devctl);
-               }
-       }
--#endif
-       socket->socket.ops->init = ti_init;
-       return 0;
-@@ -220,6 +298,7 @@ static int ti113x_init(struct pcmcia_soc
- {
-       struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-       yenta_init(sock);
-+      ti_set_zv(sock);
-       config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket));
-       config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket));
-@@ -248,6 +327,7 @@ static int ti1250_init(struct pcmcia_soc
-       struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-       yenta_init(sock);
-       ti113x_init(sock);
-+      ti_set_zv(sock);
-       ti_irqmux(socket) = config_readl(socket, TI122X_IRQMUX);
-       ti_irqmux(socket) = (ti_irqmux(socket) & ~0x0f) | 0x02; /* route INTA */
-       if (!(ti_sysctl(socket) & TI122X_SCR_INTRTIE))
---- linux-2.6.0-test1/drivers/pcmcia/yenta_socket.c    2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/pcmcia/yenta_socket.c   2003-07-19 17:03:50.000000000 -0700
-@@ -297,6 +297,8 @@ static int yenta_set_socket(struct pcmci
-               }
-               exca_writeb(socket, I365_CSCINT, reg);
-               exca_readb(socket, I365_CSC);
-+              if(sock->zoom_video)
-+                      sock->zoom_video(sock, state->flags & SS_ZVCARD);
-       }
-       config_writew(socket, CB_BRIDGE_CONTROL, bridge);
-       /* Socket event mask: get card insert/remove events.. */
---- linux-2.6.0-test1/drivers/pnp/isapnp/core.c        2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/pnp/isapnp/core.c       2003-07-19 17:03:50.000000000 -0700
-@@ -255,14 +255,22 @@ static void __init isapnp_peek(unsigned 
- static int isapnp_next_rdp(void)
- {
-       int rdp = isapnp_rdp;
-+      static int old_rdp = 0;
-+      
-+      if(old_rdp)
-+      {
-+              release_region(old_rdp, 1);
-+              old_rdp = 0;
-+      }
-       while (rdp <= 0x3ff) {
-               /*
-                *      We cannot use NE2000 probe spaces for ISAPnP or we
-                *      will lock up machines.
-                */
--              if ((rdp < 0x280 || rdp >  0x380) && !check_region(rdp, 1))
-+              if ((rdp < 0x280 || rdp >  0x380) && request_region(rdp, 1, "ISAPnP"))
-               {
-                       isapnp_rdp = rdp;
-+                      old_rdp = rdp;
-                       return 0;
-               }
-               rdp += RDP_STEP;
---- linux-2.6.0-test1/drivers/s390/block/dasd.c        2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/dasd.c       2003-07-19 17:03:50.000000000 -0700
-@@ -16,7 +16,6 @@
- #include <linux/interrupt.h>
- #include <linux/ctype.h>
- #include <linux/major.h>
--#include <linux/blk.h>
- #include <linux/slab.h>
- #include <linux/buffer_head.h>
---- linux-2.6.0-test1/drivers/s390/block/dasd_genhd.c  2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/s390/block/dasd_genhd.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
-  *
-  * Dealing with devices registered to multiple major numbers.
-  *
-- * $Revision: 1.29 $
-+ * $Revision: 1.31 $
-  */
- #include <linux/config.h>
-@@ -17,7 +17,6 @@
- #include <linux/interrupt.h>
- #include <linux/fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
- #include <asm/uaccess.h>
-@@ -200,7 +199,6 @@ void
- dasd_destroy_partitions(struct dasd_device * device)
- {
-       del_gendisk(device->gdp);
--      put_disk(device->gdp);
- }
- int
---- linux-2.6.0-test1/drivers/s390/block/dasd_int.h    2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/dasd_int.h   2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,8 @@
- #ifdef __KERNEL__
--#define DASD_PER_MAJOR ( 1U<<(MINORBITS-DASD_PARTN_BITS))
-+#define DASD_MINORBITS 8
-+#define DASD_PER_MAJOR ( 1U<<(DASD_MINORBITS-DASD_PARTN_BITS))
- #define DASD_PARTN_MASK ((1 << DASD_PARTN_BITS) - 1)
- /*
---- linux-2.6.0-test1/drivers/s390/block/dasd_ioctl.c  2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/dasd_ioctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -14,7 +14,6 @@
- #include <linux/major.h>
- #include <linux/fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
- #include <asm/ccwdev.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/s390/block/xpram.c       2003-07-02 14:53:14.000000000 -0700
-+++ 25/drivers/s390/block/xpram.c      2003-07-19 17:03:50.000000000 -0700
-@@ -31,7 +31,6 @@
- #include <linux/errno.h>
- #include <linux/init.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
- #include <linux/blkpg.h>
- #include <linux/hdreg.h>  /* HDIO_GETGEO */
- #include <linux/sysdev.h>
---- linux-2.6.0-test1/drivers/s390/char/sclp.c 2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/s390/char/sclp.c        2003-07-19 17:04:07.000000000 -0700
-@@ -468,17 +468,17 @@ static struct sclp_register sclp_state_c
-  * SCLP quiesce event handler
-  */
- #ifdef CONFIG_SMP
--static volatile unsigned long cpu_quiesce_map;
-+static cpumask_t cpu_quiesce_map;
- static void
- do_load_quiesce_psw(void * __unused)
- {
-       psw_t quiesce_psw;
--      clear_bit(smp_processor_id(), &cpu_quiesce_map);
-+      cpu_clear(smp_processor_id(), cpu_quiesce_map);
-       if (smp_processor_id() == 0) {
-               /* Wait for all other cpus to enter do_load_quiesce_psw */
--              while (cpu_quiesce_map != 0);
-+              while (!cpus_empty(cpu_quiesce_map));
-               /* Quiesce the last cpu with the special psw */
-               quiesce_psw.mask = PSW_BASE_BITS | PSW_MASK_WAIT;
-               quiesce_psw.addr = 0xfff;
---- linux-2.6.0-test1/drivers/s390/char/tape_block.c   2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/s390/char/tape_block.c  2003-07-19 17:03:50.000000000 -0700
-@@ -13,7 +13,6 @@
- #include <linux/version.h>
- #include <linux/module.h>
- #include <linux/blkdev.h>
--#include <linux/blk.h>
- #include <linux/interrupt.h>
- #include <linux/buffer_head.h>
---- linux-2.6.0-test1/drivers/s390/cio/chsc.c  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/chsc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  *  drivers/s390/cio/chsc.c
-  *   S/390 common I/O routines -- channel subsystem call
-- *   $Revision: 1.73 $
-+ *   $Revision: 1.74 $
-  *
-  *    Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH,
-  *                          IBM Corporation
-@@ -206,6 +206,7 @@ chsc_get_sch_descriptions(void)
-       if (!page)
-               return -ENOMEM;
-+      err = 0;
-       for (irq = 0; irq <= highest_subchannel; irq++) {
-               /*
-                * retrieve information for each sch
-@@ -222,13 +223,14 @@ chsc_get_sch_descriptions(void)
-                                      "not work\n", err);
-                               cio_chsc_err_msg = 1;
-                       }
--                      return err;
-+                      goto out;
-               }
-               clear_page(page);
-       }
-       cio_chsc_desc_avail = 1;
-+out:
-       free_page((unsigned long)page);
--      return 0;
-+      return err;
- }
- __initcall(chsc_get_sch_descriptions);
-@@ -428,7 +430,7 @@ s390_process_res_acc (u8 chpid, __u16 fl
-                       ret = css_probe_device(irq);
-                       if (ret == -ENXIO)
-                               /* We're through */
--                              return;
-+                              break;
-                       continue;
-               }
-       
---- linux-2.6.0-test1/drivers/s390/cio/cio.c   2003-06-14 12:18:48.000000000 -0700
-+++ 25/drivers/s390/cio/cio.c  2003-07-19 17:03:50.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  *  drivers/s390/cio/cio.c
-  *   S/390 common I/O routines -- low level i/o calls
-- *   $Revision: 1.98 $
-+ *   $Revision: 1.100 $
-  *
-  *    Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH,
-  *                          IBM Corporation
-@@ -16,10 +16,12 @@
- #include <linux/init.h>
- #include <linux/slab.h>
- #include <linux/device.h>
-+#include <linux/kernel_stat.h>
- #include <asm/hardirq.h>
- #include <asm/cio.h>
- #include <asm/delay.h>
-+#include <asm/irq.h>
- #include "airq.h"
- #include "cio.h"
-@@ -442,6 +444,11 @@ cio_enable_subchannel (struct subchannel
-                       if (sch->schib.pmcw.ena)
-                               break;
-               }
-+              if (ret == -EBUSY) {
-+                      struct irb irb;
-+                      if (tsch(sch->irq, &irb) != 0)
-+                              break;
-+              }
-       }
-       sprintf (dbf_txt, "ret:%d", ret);
-       CIO_TRACE_EVENT (2, dbf_txt);
-@@ -608,6 +615,7 @@ do_IRQ (struct pt_regs regs)
-       tpi_info = (struct tpi_info *) __LC_SUBCHANNEL_ID;
-       irb = (struct irb *) __LC_IRB;
-       do {
-+              kstat_cpu(smp_processor_id()).irqs[IO_INTERRUPT]++;
-               /*
-                * Non I/O-subchannel thin interrupts are processed differently
-                */
---- linux-2.6.0-test1/drivers/s390/cio/device.c        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/device.c       2003-07-19 17:03:50.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  *  drivers/s390/cio/device.c
-  *  bus driver for ccw devices
-- *   $Revision: 1.58 $
-+ *   $Revision: 1.60 $
-  *
-  *    Copyright (C) 2002 IBM Deutschland Entwicklung GmbH,
-  *                     IBM Corporation
-@@ -434,6 +434,13 @@ ccw_device_register(struct ccw_device *c
-       return ret;
- }
-+void
-+ccw_device_unregister(void *data)
-+{
-+      device_unregister((struct device *)data);
-+}
-+      
-+
- static void
- ccw_device_release(struct device *dev)
- {
-@@ -513,17 +520,11 @@ io_subchannel_recog_done(struct ccw_devi
-               wake_up(&ccw_device_init_wq);
- }
--static void
-+static int
- io_subchannel_recog(struct ccw_device *cdev, struct subchannel *sch)
- {
-       int rc;
--      if (!get_device(&sch->dev)) {
--              if (cdev->dev.release)
--                      cdev->dev.release(&cdev->dev);
--              return;
--      }
--
-       sch->dev.driver_data = cdev;
-       sch->driver = &io_subchannel_driver;
-       cdev->ccwlock = &sch->lock;
-@@ -540,9 +541,6 @@ io_subchannel_recog(struct ccw_device *c
-       snprintf (cdev->dev.bus_id, DEVICE_ID_SIZE, "0:%04x",
-                 sch->schib.pmcw.dev);
--      /* Do first half of device_register. */
--      device_initialize(&cdev->dev);
--
-       /* Increase counter of devices currently in recognition. */
-       atomic_inc(&ccw_device_init_count);
-@@ -551,13 +549,10 @@ io_subchannel_recog(struct ccw_device *c
-       rc = ccw_device_recognition(cdev);
-       spin_unlock_irq(cdev->ccwlock);
-       if (rc) {
--              sch->dev.driver_data = 0;
--              put_device(&sch->dev);
--              if (cdev->dev.release)
--                      cdev->dev.release(&cdev->dev);
-               if (atomic_dec_and_test(&ccw_device_init_count))
-                       wake_up(&ccw_device_init_wq);
-       }
-+      return rc;
- }
- static int
-@@ -565,6 +560,7 @@ io_subchannel_probe (struct device *pdev
- {
-       struct subchannel *sch;
-       struct ccw_device *cdev;
-+      int rc;
-       sch = to_subchannel(pdev);
-       if (sch->dev.driver_data) {
-@@ -573,8 +569,20 @@ io_subchannel_probe (struct device *pdev
-                * Register it and exit. This happens for all early
-                * device, e.g. the console.
-                */
--              ccw_device_register(sch->dev.driver_data);
-+              cdev = sch->dev.driver_data;
-+              device_initialize(&cdev->dev);
-+              ccw_device_register(cdev);
-               subchannel_add_files(&sch->dev);
-+              /*
-+               * Check if the device is already online. If it is
-+               * the reference count needs to be corrected
-+               * (see ccw_device_online and css_init_done for the
-+               * ugly details).
-+               */
-+              if (cdev->private->state != DEV_STATE_NOT_OPER &&
-+                  cdev->private->state != DEV_STATE_OFFLINE &&
-+                  cdev->private->state != DEV_STATE_BOXED)
-+                      get_device(&cdev->dev);
-               return 0;
-       }
-       cdev  = kmalloc (sizeof(*cdev), GFP_KERNEL);
-@@ -592,7 +600,23 @@ io_subchannel_probe (struct device *pdev
-               .parent = pdev,
-               .release = ccw_device_release,
-       };
--      io_subchannel_recog(cdev, to_subchannel(pdev));
-+      /* Do first half of device_register. */
-+      device_initialize(&cdev->dev);
-+
-+      if (!get_device(&sch->dev)) {
-+              if (cdev->dev.release)
-+                      cdev->dev.release(&cdev->dev);
-+              return 0;
-+      }
-+
-+      rc = io_subchannel_recog(cdev, to_subchannel(pdev));
-+      if (rc) {
-+              sch->dev.driver_data = 0;
-+              put_device(&sch->dev);
-+              if (cdev->dev.release)
-+                      cdev->dev.release(&cdev->dev);
-+      }
-+
-       return 0;
- }
-@@ -604,6 +628,8 @@ static int console_cdev_in_use;
- static int
- ccw_device_console_enable (struct ccw_device *cdev, struct subchannel *sch)
- {
-+      int rc;
-+
-       /* Initialize the ccw_device structure. */
-       cdev->dev = (struct device) {
-               .parent = &sch->dev,
-@@ -613,7 +639,11 @@ ccw_device_console_enable (struct ccw_de
-               .parent = &css_bus_device,
-               .bus    = &css_bus_type,
-       };
--      io_subchannel_recog(cdev, sch);
-+
-+      rc = io_subchannel_recog(cdev, sch);
-+      if (rc)
-+              return rc;
-+
-       /* Now wait for the async. recognition to come to an end. */
-       while (!dev_fsm_final_state(cdev))
-               wait_cons_dev();
---- linux-2.6.0-test1/drivers/s390/cio/device_fsm.c    2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/device_fsm.c   2003-07-19 17:03:50.000000000 -0700
-@@ -188,7 +188,7 @@ ccw_device_done(struct ccw_device *cdev,
-       wake_up(&cdev->private->wait_q);
--      if (state != DEV_STATE_ONLINE)
-+      if (css_init_done && state != DEV_STATE_ONLINE)
-               put_device (&cdev->dev);
- }
-@@ -293,7 +293,7 @@ ccw_device_online(struct ccw_device *cde
-       if (cdev->private->state != DEV_STATE_OFFLINE)
-               return -EINVAL;
-       sch = to_subchannel(cdev->dev.parent);
--      if (!get_device(&cdev->dev))
-+      if (css_init_done && !get_device(&cdev->dev))
-               return -ENODEV;
-       if (cio_enable_subchannel(sch, sch->schib.pmcw.isc) != 0) {
-               /* Couldn't enable the subchannel for i/o. Sick device. */
-@@ -384,7 +384,9 @@ static void
- ccw_device_offline_notoper(struct ccw_device *cdev, enum dev_event dev_event)
- {
-       cdev->private->state = DEV_STATE_NOT_OPER;
--      device_unregister(&cdev->dev);
-+      INIT_WORK(&cdev->private->kick_work,
-+                ccw_device_unregister, (void *) &cdev->dev);
-+      queue_work(ccw_device_work, &cdev->private->kick_work);
-       wake_up(&cdev->private->wait_q);
- }
-@@ -403,8 +405,10 @@ ccw_device_online_notoper(struct ccw_dev
-               // FIXME: not-oper indication to device driver ?
-               ccw_device_call_handler(cdev);
-       }
-+      INIT_WORK(&cdev->private->kick_work,
-+                ccw_device_unregister, (void *) &cdev->dev);
-+      queue_work(ccw_device_work, &cdev->private->kick_work);
-       wake_up(&cdev->private->wait_q);
--      device_unregister(&cdev->dev);
- }
- /*
---- linux-2.6.0-test1/drivers/s390/cio/device.h        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/device.h       2003-07-19 17:03:50.000000000 -0700
-@@ -65,6 +65,8 @@ extern struct workqueue_struct *ccw_devi
- void io_subchannel_recog_done(struct ccw_device *cdev);
-+void ccw_device_unregister(void *);
-+
- int ccw_device_recognition(struct ccw_device *);
- int ccw_device_online(struct ccw_device *);
- int ccw_device_offline(struct ccw_device *);
---- linux-2.6.0-test1/drivers/s390/cio/qdio.c  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/cio/qdio.c 2003-07-19 17:03:50.000000000 -0700
-@@ -55,7 +55,7 @@
- #include "ioasm.h"
- #include "chsc.h"
--#define VERSION_QDIO_C "$Revision: 1.51 $"
-+#define VERSION_QDIO_C "$Revision: 1.55 $"
- /****************** MODULE PARAMETER VARIABLES ********************/
- MODULE_AUTHOR("Utz Bacher <utz.bacher@de.ibm.com>");
-@@ -1643,6 +1643,7 @@ qdio_timeout_handler(struct ccw_device *
-       default:
-               BUG();
-       }
-+      ccw_device_set_timeout(cdev, 0);
-       wake_up(&cdev->private->wait_q);
- }
-@@ -1891,26 +1892,25 @@ tiqdio_check_chsc_availability(void)
-               result=-EIO;
-               goto exit;
-       }
--      /* 4: request block
--       * 2: general char
--       * 512: chsc char */
--      if ((scsc_area->general_char[1] & 0x00800000) != 0x00800000) {
-+      /* Check for bit 41. */
-+      if ((scsc_area->general_char[1] & 0x00400000) != 0x00400000) {
-               QDIO_PRINT_WARN("Adapter interruption facility not " \
-                               "installed.\n");
-               result=-ENOENT;
-               goto exit;
-       }
--      if ((scsc_area->chsc_char[2] & 0x00180000) != 0x00180000) {
-+      /* Check for bits 107 and 108. */
-+      if ((scsc_area->chsc_char[3] & 0x00180000) != 0x00180000) {
-               QDIO_PRINT_WARN("Set Chan Subsys. Char. & Fast-CHSCs " \
-                               "not available.\n");
-               result=-ENOENT;
-               goto exit;
-       }
--      /* Check for hydra thin interrupts. */
-+      /* Check for hydra thin interrupts (bit 67). */
-       hydra_thinints = ((scsc_area->general_char[2] & 0x10000000)
-               == 0x10000000);
--      sprintf(dbf_text,"hydra_ti%1x", hydra_thinints);
-+      sprintf(dbf_text,"hydrati%1x", hydra_thinints);
-       QDIO_DBF_TEXT0(0,setup,dbf_text);
- exit:
-       free_page ((unsigned long) scsc_area);
-@@ -2413,8 +2413,10 @@ qdio_establish_handle_irq(struct ccw_dev
-       QDIO_DBF_TEXT0(0,setup,dbf_text);
-       QDIO_DBF_TEXT0(0,trace,dbf_text);
--      if (qdio_establish_irq_check_for_errors(cdev, cstat, dstat))
-+      if (qdio_establish_irq_check_for_errors(cdev, cstat, dstat)) {
-+              ccw_device_set_timeout(cdev, 0);
-               return;
-+      }
-       irq_ptr = cdev->private->qdio_data;
-@@ -2439,7 +2441,7 @@ qdio_establish_handle_irq(struct ccw_dev
-       qdio_initialize_set_siga_flags_output(irq_ptr);
-       qdio_set_state(irq_ptr,QDIO_IRQ_STATE_ESTABLISHED);
--
-+      ccw_device_set_timeout(cdev, 0);
- }
- int
-@@ -2698,6 +2700,8 @@ qdio_establish(struct ccw_device *cdev)
-                            "returned %i, next try returned %i\n",
-                            irq_ptr->irq,result,result2);
-               result=result2;
-+              if (result)
-+                      ccw_device_set_timeout(cdev, 0);
-       }
-       spin_unlock_irqrestore(get_ccwdev_lock(cdev),saveflags);
-@@ -3000,7 +3004,6 @@ qdio_perf_procfile_read(char *buffer, ch
-                       int buffer_length, int *eof, void *data)
- {
-         int c=0;
--      int irq;
-         /* we are always called with buffer_length=4k, so we all
-            deliver on the first read */
-@@ -3020,7 +3023,7 @@ qdio_perf_procfile_read(char *buffer, ch
-                perf_stats.siga_ins);
-       _OUTP_IT("Number of SIGA out's issued                     : %u\n",
-                perf_stats.siga_outs);
--      _OUTP_IT("Number of PCIs caught                          : %u\n",
-+      _OUTP_IT("Number of PCIs caught                           : %u\n",
-                perf_stats.pcis);
-       _OUTP_IT("Number of adapter interrupts caught             : %u\n",
-                perf_stats.thinints);
-@@ -3037,27 +3040,6 @@ qdio_perf_procfile_read(char *buffer, ch
-                perf_stats.outbound_cnt);
-       _OUTP_IT("\n");
--      /* 
--       * FIXME: Rather use driver_for_each_dev, if we had it. 
--       * I know this loop destroys our layering, but at least gets the 
--       * performance stats out...
--       */
--      for (irq=0;irq <= highest_subchannel; irq++) {
--              struct qdio_irq *irq_ptr;
--              struct ccw_device *cdev;
--
--              if (!ioinfo[irq])
--                      continue;
--              cdev = ioinfo[irq]->dev.driver_data;
--              if (!cdev)
--                      continue;
--              irq_ptr = cdev->private->qdio_data;
--              if (!irq_ptr)
--                      continue;
--              _OUTP_IT("Polling time on irq %4x                        " \
--                       ": %u\n",
--                       irq_ptr->irq,irq_ptr->input_qs[0]->timing.threshold);
--      }
-         return c;
- }
---- linux-2.6.0-test1/drivers/s390/net/qeth.c  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/net/qeth.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- /*
-  *
-- * linux/drivers/s390/net/qeth.c ($Revision: 1.118 $)
-+ * linux/drivers/s390/net/qeth.c ($Revision: 1.126 $)
-  *
-  * Linux on zSeries OSA Express and HiperSockets support
-  *
-@@ -165,7 +165,7 @@ MODULE_PARM_DESC(qeth_sparebufs, "the nu
-                "reserved for low memory situations");
- /****************** MODULE STUFF **********************************/
--#define VERSION_QETH_C "$Revision: 1.118 $"
-+#define VERSION_QETH_C "$Revision: 1.126 $"
- static const char *version = "qeth S/390 OSA-Express driver ("
-     VERSION_QETH_C "/" VERSION_QETH_H "/" VERSION_QETH_MPC_H
-     QETH_VERSION_IPV6 QETH_VERSION_VLAN ")";
-@@ -1156,7 +1156,7 @@ qeth_get_skb(unsigned int len)
-       return skb;
- }
--static struct sk_buff *
-+static inline struct sk_buff *
- qeth_get_next_skb(struct qeth_card *card,
-                 int *element_ptr, int *pos_in_el_ptr,
-                 void **hdr_ptr, struct qdio_buffer *buffer)
-@@ -1464,8 +1464,21 @@ __qeth_rebuild_skb(struct qeth_card *car
-       skb->ip_summed = card->options.checksum_type;
-       if (card->options.checksum_type == HW_CHECKSUMMING) {
-               /* do we have a checksummed packet? */
--              if (*(__u8 *) (hdr_ptr + 11) & QETH_EXT_HEADER_CSUM_TRANSP_REQ) {
--                      /* skb->ip_summed is set already */
-+
-+              /* 
-+               * we only check for TCP/UDP checksums when the pseudo
-+               * header was also checked successfully -- for the
-+               * rest of the packets, it's not clear, whether the
-+               * upper layer csum is alright. And they shouldn't
-+               * occur too often anyway in real life 
-+               */
-+
-+              if ((*(__u8*)(hdr_ptr+11) & (QETH_EXT_HEADER_CSUM_HDR_REQ |
-+                                           QETH_EXT_HEADER_CSUM_TRANSP_REQ)) ==
-+                  (QETH_EXT_HEADER_CSUM_HDR_REQ |
-+                   QETH_EXT_HEADER_CSUM_TRANSP_REQ)) {
-+#if 0
-+                      /* csum does not need to be set inbound anyway */
-                       
-                       /* 
-                        * vlan is not an issue here, it's still in
-@@ -1485,11 +1498,15 @@ __qeth_rebuild_skb(struct qeth_card *car
-                                       (&skb->data[ip_len +
-                                                   QETH_TCP_CSUM_OFFSET]);
-                       }
-+#endif /* 0 */
-+                      skb->ip_summed=CHECKSUM_UNNECESSARY;
-               } else {
-                       /* make the stack check it */
-                       skb->ip_summed = SW_CHECKSUMMING;
-               }
--      }
-+      } else
-+              skb->ip_summed=card->options.checksum_type;
-+
-       __qeth_rebuild_skb_vlan(card, skb, hdr_ptr);
- }
-@@ -1596,7 +1613,7 @@ __qeth_fill_header_add_vlan(struct qeth_
- #endif
- }
--static __u8
-+static inline __u8
- __qeth_get_flags_v4(int multicast)
- {
-       if (multicast == RTN_MULTICAST)
-@@ -1606,7 +1623,7 @@ __qeth_get_flags_v4(int multicast)
-       return QETH_CAST_UNICAST;
- }
--static __u8
-+static inline __u8
- __qeth_get_flags_v6(int multicast)
- {
-       if (multicast == RTN_MULTICAST)
-@@ -1625,7 +1642,7 @@ __qeth_get_flags_v6(int multicast)
-               QETH_HEADER_IPV6;
- }
--static void
-+static inline void
- qeth_fill_header(struct qeth_hdr *hdr, struct sk_buff *skb,
-                int version, int multicast)
- {
-@@ -1681,7 +1698,7 @@ qeth_fill_header(struct qeth_hdr *hdr, s
-                     __max(QETH_DBF_DATA_LEN, QETH_DBF_DATA_LEN));
- }
--static int inline
-+static inline int
- qeth_fill_buffer(struct qdio_buffer *buffer, char *dataptr,
-                int length, int element)
- {
-@@ -1735,7 +1752,7 @@ qeth_fill_buffer(struct qdio_buffer *buf
-       return element;
- }
--static void
-+static inline void
- qeth_flush_packed_packets(struct qeth_card *card, int queue, int under_int)
- {
-       struct qdio_buffer *buffer;
-@@ -1900,7 +1917,7 @@ qeth_determine_send_error(int cc, int qd
-       return ERROR_LINK_FAILURE;      /* should never happen */
- }
--static void
-+static inline void
- qeth_free_buffer(struct qeth_card *card, int queue, int bufno,
-                int qdio_error, int siga_error)
- {
-@@ -2013,7 +2030,7 @@ qeth_free_buffer(struct qeth_card *card,
-       card->send_retries[queue][bufno] = 0;
- }
--static void
-+static inline void
- qeth_free_all_skbs(struct qeth_card *card)
- {
-       int q, b;
-@@ -2049,7 +2066,7 @@ qeth_flush_buffer(struct qeth_card *card
- }
- #ifdef QETH_VLAN
--void
-+static inline void
- qeth_insert_ipv6_vlan_tag(struct sk_buff *__skb)
- {
-@@ -2088,7 +2105,7 @@ __qeth_add_vlan_tag(struct qeth_card *ca
- #endif
- }
--static void
-+static inline void
- qeth_send_packet_fast(struct qeth_card *card, struct sk_buff *skb,
-                     struct net_device *dev,
-                     int queue, int version, int multicast)
-@@ -2183,7 +2200,7 @@ qeth_send_packet_fast(struct qeth_card *
- /* no checks, if all elements are used, as then we would not be here (at most
-    127 buffers are enqueued) */
--static void
-+static inline void
- qeth_send_packet_packed(struct qeth_card *card, struct sk_buff *skb,
-                       struct net_device *dev,
-                       int queue, int version, int multicast)
-@@ -2391,7 +2408,7 @@ __qeth_switch_state_if_needed(struct qet
-       }
- }
--static int
-+static inline int
- qeth_do_send_packet(struct qeth_card *card, struct sk_buff *skb,
-                   struct net_device *dev)
- {
-@@ -2829,23 +2846,27 @@ qeth_send_ipa_cmd(struct qeth_card *card
-       if (!buffer) {
-               if (atomic_read(&card->escape_softsetup))
--                      result = 0;
-+                      return 0;
-               else
--                      result = -1;
--      } else {
--              reply = (struct ipa_cmd *) PDU_ENCAPSULATION(buffer);
--              if ((update_cmd) && (reply))
--                      memcpy(cmd, reply, sizeof (struct ipa_cmd));
--              result = reply->return_code;
--
--              /* some special sausages: */
--              if ((ipa_cmd == IPA_CMD_SETASSPARMS) && (result == 0)) {
--                      result = reply->data.setassparms.return_code;
--              }
--              if ((ipa_cmd == IPA_CMD_SETADAPTERPARMS) && (result == 0)) {
--                      result = reply->data.setadapterparms.return_code;
--              }
-+                      return -1;
-+      }
-+      reply = (struct ipa_cmd *) PDU_ENCAPSULATION(buffer);
-+      if ((update_cmd) && (reply))
-+              memcpy(cmd, reply, sizeof (struct ipa_cmd));
-+      result = reply->return_code;
-+
-+      /* some special sausages: */
-+      if ((ipa_cmd == IPA_CMD_SETASSPARMS) && (result == 0)) {
-+              result = reply->data.setassparms.return_code;
-+              if ((reply->data.setassparms.assist_no==IPA_INBOUND_CHECKSUM) &&
-+                  (reply->data.setassparms.command_code == IPA_CMD_ASS_START))
-+                      card->csum_enable_mask =
-+                              reply->data.setassparms.data.flags_32bit;
-+      }
-+      if ((ipa_cmd == IPA_CMD_SETADAPTERPARMS) && (result == 0)) {
-+              result = reply->data.setadapterparms.return_code;
-       }
-+
-       return result;
- }
-@@ -5599,7 +5620,7 @@ go_on_filt:
-                       }
-                       result=qeth_send_setassparms_simple_with_data
-                               (card,IPA_INBOUND_CHECKSUM,
--                               IPA_CMD_ASS_ENABLE, IPA_CHECKSUM_ENABLE_MASK);
-+                               IPA_CMD_ASS_ENABLE, card->csum_enable_mask);
-                       if (result) {
-                               PRINT_WARN("Could not enable inbound " \
-                                          "checksumming on %s: 0x%x, " \
-@@ -6881,6 +6902,14 @@ qeth_peer_func_level(int level)
-       return level;           /* hmmm... don't know what to do with that level. */
- }
-+/* returns last four digits of bus_id */
-+static inline __u16
-+__raw_devno_from_bus_id(char *id)
-+{
-+      id += (strlen(id) - 4); 
-+      return (__u16) simple_strtoul(id, &id, 16);
-+}
-+
- static int
- qeth_idx_activate_read(struct qeth_card *card)
- {
-@@ -6905,7 +6934,7 @@ qeth_idx_activate_read(struct qeth_card 
-       memcpy(QETH_IDX_ACT_FUNC_LEVEL(card->dma_stuff->sendbuf),
-              &card->func_level, 2);
--      temp = _ccw_device_get_device_number(card->ddev);
-+      temp = __raw_devno_from_bus_id(card->ddev->dev.bus_id);
-       memcpy(QETH_IDX_ACT_QDIO_DEV_CUA(card->dma_stuff->sendbuf), &temp, 2);
-       temp = (card->cula << 8) + card->unit_addr2;
-       memcpy(QETH_IDX_ACT_QDIO_DEV_REALADDR(card->dma_stuff->sendbuf),
-@@ -7501,10 +7530,8 @@ qeth_verify_dev(struct net_device *dev)
-       for (; tmp && (!result); tmp = tmp->next) {
-               if (atomic_read(&tmp->shutdown_phase))
-                       continue;
--              if (dev == tmp->dev) {
--                      result = QETH_VERIFY_IS_REAL_DEV;
--              }
--              result = __qeth_verify_dev_vlan(dev, tmp);
-+              result = (dev == tmp->dev)?
-+                      QETH_VERIFY_IS_REAL_DEV:__qeth_verify_dev_vlan(dev, tmp);
-       }
-       read_unlock(&list_lock);
-       return result;
-@@ -8547,6 +8574,8 @@ qeth_alloc_card(void)
-       card->ip_mc_new_state.ipm6_ifa = NULL;
- #endif /* QETH_IPV6 */
-+      card->csum_enable_mask = IPA_CHECKSUM_DEFAULT_ENABLE_MASK;
-+
-       /* setup net_device stuff */
-       card->dev->priv = card;
-@@ -9087,21 +9116,19 @@ qeth_procfile_open(struct inode *inode, 
-               /* FIXME: this is really a mess... */
- #ifdef QETH_IPV6
--              if (atomic_read(&card->rt4fld) && atomic_read(&card->rt6fld))
--                      strcpy(router_str, "no");
--              else if (atomic_read(&card->rt4fld)
--                       || atomic_read(&card->rt6fld))
--                      strcpy(router_str, "mix");
-+              if (atomic_read(&card->rt4fld) || atomic_read(&card->rt6fld))
-+                      strcpy(router_str, "FLD");
- #else/* QETH_IPV6 */
-               if (atomic_read(&card->rt4fld))
--                      strcpy(router_str, "no");
-+                      strcpy(router_str, "FLD");
- #endif /* QETH_IPV6 */
-               else if (((card->options.routing_type4 & ROUTER_MASK) ==
-                         PRIMARY_ROUTER)
- #ifdef QETH_IPV6
-                        &&
--                       ((card->options.routing_type6 & ROUTER_MASK) ==
--                        PRIMARY_ROUTER)
-+                       (((card->options.routing_type6 & ROUTER_MASK) ==
-+                        PRIMARY_ROUTER) ||
-+                        (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
-                   ) {
-                       strcpy(router_str, "pri");
-@@ -9110,8 +9137,9 @@ qeth_procfile_open(struct inode *inode, 
-                        SECONDARY_ROUTER)
- #ifdef QETH_IPV6
-                       &&
--                      ((card->options.routing_type6 & ROUTER_MASK) ==
--                       SECONDARY_ROUTER)
-+                      (((card->options.routing_type6 & ROUTER_MASK) ==
-+                       SECONDARY_ROUTER) ||
-+                       (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
-                   ) {
-                       strcpy(router_str, "sec");
-@@ -9120,8 +9148,9 @@ qeth_procfile_open(struct inode *inode, 
-                        MULTICAST_ROUTER)
- #ifdef QETH_IPV6
-                       &&
--                      ((card->options.routing_type6 & ROUTER_MASK) ==
--                       MULTICAST_ROUTER)
-+                      (((card->options.routing_type6 & ROUTER_MASK) ==
-+                       MULTICAST_ROUTER) ||
-+                       (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
-                   ) {
-                       strcpy(router_str, "mc");
-@@ -9130,8 +9159,9 @@ qeth_procfile_open(struct inode *inode, 
-                        PRIMARY_CONNECTOR)
- #ifdef QETH_IPV6
-                       &&
--                      ((card->options.routing_type6 & ROUTER_MASK) ==
--                       PRIMARY_CONNECTOR)
-+                      (((card->options.routing_type6 & ROUTER_MASK) ==
-+                       PRIMARY_CONNECTOR) ||
-+                       (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
-                   ) {
-                       strcpy(router_str, "p.c");
-@@ -9140,8 +9170,9 @@ qeth_procfile_open(struct inode *inode, 
-                        SECONDARY_CONNECTOR)
- #ifdef QETH_IPV6
-                       &&
--                      ((card->options.routing_type6 & ROUTER_MASK) ==
--                       SECONDARY_CONNECTOR)
-+                      (((card->options.routing_type6 & ROUTER_MASK) ==
-+                       SECONDARY_CONNECTOR) ||
-+                       (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
-                   ) {
-                       strcpy(router_str, "s.c");
-@@ -9150,8 +9181,9 @@ qeth_procfile_open(struct inode *inode, 
-                        NO_ROUTER)
- #ifdef QETH_IPV6
-                       &&
--                      ((card->options.routing_type6 & ROUTER_MASK) ==
--                       NO_ROUTER)
-+                      (((card->options.routing_type6 & ROUTER_MASK) ==
-+                       NO_ROUTER) ||
-+                       (!qeth_is_supported(IPA_IPv6)))
- #endif /* QETH_IPV6 */
-                   ) {
-                       strcpy(router_str, "no");
-@@ -10115,7 +10147,7 @@ qeth_route4_show(struct device *dev, cha
-               return -EINVAL;
-       if (atomic_read(&card->rt4fld))
--              return sprintf(buf, "%s\n", "no");
-+              return sprintf(buf, "%s\n", "FLD");
-       switch (card->options.routing_type4 & ROUTER_MASK) {
-       case PRIMARY_ROUTER:
-@@ -10202,7 +10234,10 @@ qeth_route6_show(struct device *dev, cha
-               return -EINVAL;
-       if (atomic_read(&card->rt6fld))
--              return sprintf(buf, "%s\n", "no");
-+              return sprintf(buf, "%s\n", "FLD");
-+
-+      if (!qeth_is_supported(IPA_IPv6))
-+              return sprintf(buf, "%s\n", "n/a");
-       switch (card->options.routing_type6 & ROUTER_MASK) {
-       case PRIMARY_ROUTER:
-@@ -11061,6 +11096,10 @@ qeth_set_offline(struct ccwgroup_device 
-       QETH_DBF_TEXT4(0, trace, "freecard");
-+      memset(card->dev, 0, sizeof (struct net_device));
-+      card->dev->priv = card;
-+      strncpy(card->dev->name, card->dev_name, IFNAMSIZ);
-+
-       ccw_device_set_offline(card->ddev);
-       ccw_device_set_offline(card->wdev);
-       ccw_device_set_offline(card->rdev);
---- linux-2.6.0-test1/drivers/s390/net/qeth.h  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/net/qeth.h 2003-07-19 17:03:50.000000000 -0700
-@@ -14,7 +14,7 @@
- #define QETH_NAME " qeth"
--#define VERSION_QETH_H "$Revision: 1.47 $"
-+#define VERSION_QETH_H "$Revision: 1.49 $"
- /******************** CONFIG STUFF ***********************/
- //#define QETH_DBF_LIKE_HELL
-@@ -938,6 +938,8 @@ struct qeth_card { /* pointed to by dev-
-       __u32 ipa6_enabled;
-       __u32 adp_supported;
-+      __u32 csum_enable_mask;
-+
-       atomic_t startlan_attempts;
-       atomic_t enable_routing_attempts4;
-       atomic_t rt4fld;
-@@ -1021,7 +1023,7 @@ qeth_get_arphrd_type(int cardtype, int l
-               case QETH_MPC_LINK_TYPE_LANE_TR:
-                       /* fallthrough */
-               case QETH_MPC_LINK_TYPE_HSTR:
--                      return ARPHRD_IEEE802;
-+                      return ARPHRD_IEEE802_TR;
-               default:
-                       return ARPHRD_ETHER;
-               }
---- linux-2.6.0-test1/drivers/s390/net/qeth_mpc.h      2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/s390/net/qeth_mpc.h     2003-07-19 17:03:50.000000000 -0700
-@@ -10,7 +10,7 @@
- #ifndef __QETH_MPC_H__
- #define __QETH_MPC_H__
--#define VERSION_QETH_MPC_H "$Revision: 1.15 $"
-+#define VERSION_QETH_MPC_H "$Revision: 1.16 $"
- #define QETH_IPA_TIMEOUT (card->ipa_timeout)
- #define QETH_MPC_TIMEOUT 2000
-@@ -188,7 +188,7 @@ extern unsigned char DM_ACT[];
- #define IPA_CMD_ASS_ARP_QUERY_INFO 0x0104
- #define IPA_CMD_ASS_ARP_QUERY_STATS 0x0204
--#define IPA_CHECKSUM_ENABLE_MASK 0x001a
-+#define IPA_CHECKSUM_DEFAULT_ENABLE_MASK 0x001a
- #define IPA_CMD_ASS_FILTER_SET_TYPES 0x0003
---- linux-2.6.0-test1/drivers/sbus/char/envctrl.c      2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/sbus/char/envctrl.c     2003-07-19 17:03:50.000000000 -0700
-@@ -14,6 +14,9 @@
-  *
-  * EB - Added support for CP1500 Global Address and PS/Voltage monitoring.
-  *            Eric Brower <ebrower@usa.net>
-+ *
-+ * DB - Audit every copy_to_user in envctrl_read.
-+ *              Daniele Bellucci <bellucda@tiscali.it>
-  */
- #include <linux/config.h>
-@@ -571,7 +574,8 @@ envctrl_read(struct file *file, char *bu
-               data[0] = (unsigned char)(warning_temperature);
-               ret = 1;
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_SHUTDOWN_TEMPERATURE:
-@@ -580,14 +584,16 @@ envctrl_read(struct file *file, char *bu
-               data[0] = (unsigned char)(shutdown_temperature);
-               ret = 1;
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_MTHRBD_TEMPERATURE:
-               if (!(pchild = envctrl_get_i2c_child(ENVCTRL_MTHRBDTEMP_MON)))
-                       return 0;
-               ret = envctrl_read_noncpu_info(pchild, ENVCTRL_MTHRBDTEMP_MON, data);
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_CPU_TEMPERATURE:
-@@ -596,7 +602,8 @@ envctrl_read(struct file *file, char *bu
-               ret = envctrl_read_cpu_info(read_cpu, pchild, ENVCTRL_CPUTEMP_MON, data);
-               /* Reset cpu to the default cpu0. */
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_CPU_VOLTAGE:
-@@ -605,21 +612,24 @@ envctrl_read(struct file *file, char *bu
-               ret = envctrl_read_cpu_info(read_cpu, pchild, ENVCTRL_CPUVOLTAGE_MON, data);
-               /* Reset cpu to the default cpu0. */
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_SCSI_TEMPERATURE:
-               if (!(pchild = envctrl_get_i2c_child(ENVCTRL_SCSITEMP_MON)))
-                       return 0;
-               ret = envctrl_read_noncpu_info(pchild, ENVCTRL_SCSITEMP_MON, data);
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_ETHERNET_TEMPERATURE:
-               if (!(pchild = envctrl_get_i2c_child(ENVCTRL_ETHERTEMP_MON)))
-                       return 0;
-               ret = envctrl_read_noncpu_info(pchild, ENVCTRL_ETHERTEMP_MON, data);
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_FAN_STATUS:
-@@ -627,7 +637,8 @@ envctrl_read(struct file *file, char *bu
-                       return 0;
-               data[0] = envctrl_i2c_read_8574(pchild->addr);
-               ret = envctrl_i2c_fan_status(pchild,data[0], data);
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       
-       case ENVCTRL_RD_GLOBALADDRESS:
-@@ -635,7 +646,8 @@ envctrl_read(struct file *file, char *bu
-                       return 0;
-               data[0] = envctrl_i2c_read_8574(pchild->addr);
-               ret = envctrl_i2c_globaladdr(pchild, data[0], data);
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       case ENVCTRL_RD_VOLTAGE_STATUS:
-@@ -645,7 +657,8 @@ envctrl_read(struct file *file, char *bu
-                               return 0;
-               data[0] = envctrl_i2c_read_8574(pchild->addr);
-               ret = envctrl_i2c_voltage_status(pchild, data[0], data);
--              copy_to_user((unsigned char *)buf, data, ret);
-+              if (copy_to_user((unsigned char *)buf, data, ret))
-+                      ret = -EFAULT;
-               break;
-       default:
---- linux-2.6.0-test1/drivers/sbus/char/jsflash.c      2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/sbus/char/jsflash.c     2003-07-19 17:03:50.000000000 -0700
-@@ -38,12 +38,8 @@
- #include <linux/smp_lock.h>
- #include <linux/genhd.h>
--/*
-- * <linux/blk.h> is controlled from the outside with these definitions.
-- */
- #define MAJOR_NR      JSFD_MAJOR
--#include <linux/blk.h>
- #include <asm/uaccess.h>
- #include <asm/pgtable.h>
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/3w-xxxx.c   2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/3w-xxxx.c  2003-07-19 17:03:50.000000000 -0700
-@@ -187,7 +187,7 @@ MODULE_LICENSE("GPL");
- #include <linux/proc_fs.h>
- #include <linux/sched.h>
- #include <linux/ioport.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/hdreg.h>
- #include <linux/string.h>
- #include <linux/delay.h>
---- linux-2.6.0-test1/drivers/scsi/53c700.c    2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/53c700.c   2003-07-19 17:03:50.000000000 -0700
-@@ -131,7 +131,7 @@
- #include <asm/io.h>
- #include <asm/pgtable.h>
- #include <asm/byteorder.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/module.h>
- #include <linux/interrupt.h>
-@@ -172,7 +172,7 @@ STATIC void NCR_700_chip_reset(struct Sc
- STATIC int NCR_700_slave_configure(Scsi_Device *SDpnt);
- STATIC void NCR_700_slave_destroy(Scsi_Device *SDpnt);
--static struct device_attribute **NCR_700_dev_attrs = NULL;
-+STATIC struct device_attribute *NCR_700_dev_attrs[];
- static char *NCR_700_phase[] = {
-       "",
-@@ -2027,25 +2027,12 @@ static struct device_attribute NCR_700_a
-       .show = NCR_700_show_active_tags,
- };
--STATIC int __init
--NCR_700_init(void)
--{
--      scsi_sysfs_modify_sdev_attribute(&NCR_700_dev_attrs,
--                                       &NCR_700_queue_depth_attr);
--      scsi_sysfs_modify_sdev_attribute(&NCR_700_dev_attrs,
--                                       &NCR_700_active_tags_attr);
--      return 0;
--}
--
--/* NULL exit routine to keep modutils happy */
--STATIC void __exit
--NCR_700_exit(void)
--{
--}
-+STATIC struct device_attribute *NCR_700_dev_attrs[] = {
-+      &NCR_700_queue_depth_attr,
-+      &NCR_700_active_tags_attr,
-+      NULL,
-+};
- EXPORT_SYMBOL(NCR_700_detect);
- EXPORT_SYMBOL(NCR_700_release);
- EXPORT_SYMBOL(NCR_700_intr);
--
--module_init(NCR_700_init);
--module_exit(NCR_700_exit);
---- linux-2.6.0-test1/drivers/scsi/53c7xx.c    2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/53c7xx.c   2003-07-19 17:03:50.000000000 -0700
-@@ -249,7 +249,7 @@
- #include <linux/mm.h>
- #include <linux/ioport.h>
- #include <linux/time.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/interrupt.h>
- #include <asm/pgtable.h>
---- linux-2.6.0-test1/drivers/scsi/a2091.c     2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/scsi/a2091.c    2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/a3000.c     2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/a3000.c    2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/aacraid/aachba.c    2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/aacraid/aachba.c   2003-07-19 17:03:50.000000000 -0700
-@@ -33,7 +33,7 @@
- #include <linux/completion.h>
- #include <asm/semaphore.h>
- #include <asm/uaccess.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/aacraid/commctrl.c  2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/aacraid/commctrl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -37,7 +37,7 @@
- #include <linux/spinlock.h>
- #include <linux/slab.h>
- #include <linux/completion.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/semaphore.h>
- #include <asm/uaccess.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/aacraid/comminit.c  2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/aacraid/comminit.c 2003-07-19 17:03:50.000000000 -0700
-@@ -37,7 +37,7 @@
- #include <linux/pci.h>
- #include <linux/spinlock.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/completion.h>
- #include <linux/mm.h>
- #include <asm/semaphore.h>
---- linux-2.6.0-test1/drivers/scsi/aacraid/commsup.c   2003-06-14 12:18:28.000000000 -0700
-+++ 25/drivers/scsi/aacraid/commsup.c  2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #include <linux/slab.h>
- #include <linux/completion.h>
- #include <asm/semaphore.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/aacraid/dpcsup.c    2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/scsi/aacraid/dpcsup.c   2003-07-19 17:03:50.000000000 -0700
-@@ -38,7 +38,7 @@
- #include <linux/spinlock.h>
- #include <linux/slab.h>
- #include <linux/completion.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/semaphore.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/aacraid/linit.c     2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/aacraid/linit.c    2003-07-19 17:05:05.000000000 -0700
-@@ -50,7 +50,7 @@
- #include <linux/completion.h>
- #include <linux/interrupt.h>
- #include <asm/semaphore.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsicam.h>
-@@ -295,7 +295,6 @@ static int aac_detect(Scsi_Host_Template
-                       printk(KERN_WARNING "aacraid: unable to register \"aac\" device.\n");
-       }
--      template->present = aac_count; /* # of cards of this type found */
-       return aac_count;
- }
---- linux-2.6.0-test1/drivers/scsi/aacraid/rx.c        2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/aacraid/rx.c       2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,7 @@
- #include <linux/pci.h>
- #include <linux/spinlock.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/completion.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/aacraid/sa.c        2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/aacraid/sa.c       2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,7 @@
- #include <linux/pci.h>
- #include <linux/spinlock.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/completion.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/advansys.c  2003-06-14 12:18:06.000000000 -0700
-+++ 25/drivers/scsi/advansys.c 2003-07-19 17:03:50.000000000 -0700
-@@ -798,7 +798,7 @@
- #include <linux/mm.h>
- #include <linux/proc_fs.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
- #include <linux/spinlock.h>
---- linux-2.6.0-test1/drivers/scsi/aha152x.c   2003-06-26 22:07:24.000000000 -0700
-+++ 25/drivers/scsi/aha152x.c  2003-07-19 17:03:50.000000000 -0700
-@@ -225,7 +225,7 @@
- #include <asm/irq.h>
- #include <asm/io.h>
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <asm/system.h>
-@@ -241,9 +241,7 @@
- #include <linux/isapnp.h>
- #include <linux/spinlock.h>
- #include <linux/workqueue.h>
--#include <linux/blk.h>
- #include <asm/semaphore.h>
--#include <asm/io.h>
- #include <scsi/scsicam.h>
- #include "scsi.h"
-@@ -941,7 +939,8 @@ static irqreturn_t swintr(int irqno, voi
-       struct Scsi_Host *shpnt = lookup_irq(irqno);
-       if (!shpnt) {
--              printk(KERN_ERR "aha152x%d: catched software interrupt %d for unknown controller.\n", HOSTNO, irqno);
-+              /* no point using HOSTNO here! */
-+              printk(KERN_ERR "aha152x: catched software interrupt %d for unknown controller.\n", irqno);
-               return IRQ_NONE;
-       }
-@@ -1049,6 +1048,10 @@ struct Scsi_Host *aha152x_probe_one(stru
-       printk(KERN_INFO "aha152x%d: trying software interrupt, ",
-                        shost->host_no);
-+
-+      /* need to have host registered before triggering any interrupt */
-+      aha152x_host[registered_count] = shost;
-+      mb();
-       SETPORT(DMACNTRL0, SWINT|INTEN);
-       mdelay(1000);
-       free_irq(shost->irq, shost);
-@@ -1064,7 +1067,7 @@ struct Scsi_Host *aha152x_probe_one(stru
-               printk(KERN_ERR "aha152x%d: IRQ %d possibly wrong.  "
-                               "Please verify.\n", shost->host_no, shost->irq);
--              goto out_release_region;
-+              goto out_unregister_host;
-       }
-       printk("ok.\n");
-@@ -1077,12 +1080,12 @@ struct Scsi_Host *aha152x_probe_one(stru
-                               "aha152x", shost) < 0) {
-               printk(KERN_ERR "aha152x%d: failed to reassign interrupt.\n",
-                               shost->host_no);
--              goto out_release_region;
-+              goto out_unregister_host;
-       }
--
--      aha152x_host[registered_count] = shost;
-       return shost;   /* the pcmcia stub needs the return value; */
-+out_unregister_host:
-+      aha152x_host[registered_count] = NULL;
- out_release_region:
-       release_region(shost->io_port, IO_RANGE);
- out_unregister:
---- linux-2.6.0-test1/drivers/scsi/aha1542.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/aha1542.c  2003-07-19 17:03:50.000000000 -0700
-@@ -38,7 +38,7 @@
- #include <linux/spinlock.h>
- #include <linux/pci.h>
- #include <linux/isapnp.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/mca.h>
- #include <linux/mca-legacy.h>
---- linux-2.6.0-test1/drivers/scsi/aha1542.h   2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/aha1542.h  2003-07-19 17:03:50.000000000 -0700
-@@ -130,7 +130,6 @@ struct ccb {                       /* Command Control Block 
- };
- static int aha1542_detect(Scsi_Host_Template *);
--static int aha1542_command(Scsi_Cmnd *);
- static int aha1542_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
- static int aha1542_abort(Scsi_Cmnd * SCpnt);
- static int aha1542_bus_reset(Scsi_Cmnd * SCpnt);
---- linux-2.6.0-test1/drivers/scsi/aha1740.c   2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/aha1740.c  2003-07-19 17:03:50.000000000 -0700
-@@ -34,7 +34,7 @@
-  * are deemed to be part of the source code.
-  */
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
-@@ -375,7 +375,7 @@ static int aha1740_queuecommand(Scsi_Cmn
- #endif
-       /* locate an available ecb */
--      spin_lock_irqsave(&SCpnt->device->host->host_lock, flags);
-+      spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
-       ecbno = host->last_ecb_used + 1; /* An optimization */
-       if (ecbno >= AHA1740_ECBS)
-               ecbno = 0;
-@@ -394,7 +394,7 @@ static int aha1740_queuecommand(Scsi_Cmn
-                                                   doubles as reserved flag */
-       host->last_ecb_used = ecbno;    
--      spin_unlock_irqrestore(&SCpnt->device->host->host_lock, flags);
-+      spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
- #ifdef DEBUG
-       printk("Sending command (%d %x)...", ecbno, done);
-@@ -491,7 +491,7 @@ static int aha1740_queuecommand(Scsi_Cmn
-               unsigned int base = SCpnt->device->host->io_port;
-               DEB(printk("aha1740[%d] critical section\n",ecbno));
--              spin_lock_irqsave(&SCpnt->device->host->host_lock, flags);
-+              spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
-               for (loopcnt = 0; ; loopcnt++) {
-                       if (inb(G2STAT(base)) & G2STAT_MBXOUT) break;
-                       if (loopcnt == LOOPCNT_WARN) {
-@@ -511,7 +511,7 @@ static int aha1740_queuecommand(Scsi_Cmn
-                               panic("aha1740.c: attn wait failed!\n");
-               }
-               outb(ATTN_START | (target & 7), ATTN(base)); /* Start it up */
--              spin_unlock_irqrestore(&SCpnt->device->host->host_lock, flags);
-+              spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
-               DEB(printk("aha1740[%d] request queued.\n",ecbno));
-       } else
-               printk(KERN_ALERT "aha1740_queuecommand: done can't be NULL\n");
-@@ -594,7 +594,7 @@ static int aha1740_probe (struct device 
-       if (!request_region(slotbase, SLOTSIZE, "aha1740")) /* See if in use */
-               return -EBUSY;
-       if (!aha1740_test_port(slotbase))
--              goto err_release;
-+              goto err_release_region;
-       aha1740_getconfig(slotbase,&irq_level,&translation);
-       if ((inb(G2STAT(slotbase)) &
-            (G2STAT_MBXOUT|G2STAT_BUSY)) != G2STAT_MBXOUT) {
-@@ -609,7 +609,7 @@ static int aha1740_probe (struct device 
-       shpnt = scsi_host_alloc(&aha1740_template,
-                             sizeof(struct aha1740_hostdata));
-       if(shpnt == NULL)
--              goto err_release;
-+              goto err_release_region;
-       shpnt->base = 0;
-       shpnt->io_port = slotbase;
-@@ -625,21 +625,27 @@ static int aha1740_probe (struct device 
-       if (!host->ecb_dma_addr) {
-               printk (KERN_ERR "aha1740_probe: Couldn't map ECB, giving up\n");
-               scsi_unregister (shpnt);
--              goto err_release;
-+              goto err_host_put;
-       }
-       
-       DEB(printk("aha1740_probe: enable interrupt channel %d\n",irq_level));
-       if (request_irq(irq_level,aha1740_intr_handle,0,"aha1740",shpnt)) {
-               printk(KERN_ERR "aha1740_probe: Unable to allocate IRQ %d.\n",
-                      irq_level);
--              goto err_release;
-+              goto err_unmap;
-       }
-       eisa_set_drvdata (edev, shpnt);
--      scsi_add_host (shpnt, dev);
-+      scsi_add_host (shpnt, dev); /* XXX handle failure */
-+      scsi_scan_host (shpnt);
-       return 0;
-- err_release:
-+ err_unmap:
-+      dma_unmap_single (&edev->dev, host->ecb_dma_addr,
-+                        sizeof (host->ecb), DMA_BIDIRECTIONAL);
-+ err_host_put:
-+      scsi_host_put (shpnt);
-+ err_release_region:
-       release_region(slotbase, SLOTSIZE);
-       return -ENODEV;
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic79xx_osm.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic79xx_osm.c      2003-07-19 17:03:50.000000000 -0700
-@@ -2173,7 +2173,8 @@ ahd_linux_register_host(struct ahd_softc
-       ahd_unlock(ahd, &s);
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--      scsi_add_host(host, &ahd->dev_softc->dev);
-+      scsi_add_host(host, &ahd->dev_softc->dev); /* XXX handle failure */
-+      scsi_scan_host(host);
- #endif
-       return (0);
- }
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic79xx_osm.h       2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic79xx_osm.h      2003-07-19 17:03:50.000000000 -0700
-@@ -43,7 +43,6 @@
- #define _AIC79XX_LINUX_H_
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic7xxx_osm.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic7xxx_osm.c      2003-07-19 17:03:50.000000000 -0700
-@@ -139,7 +139,7 @@
- #endif
- #include <linux/mm.h>         /* For fetching system memory size */
--#include <linux/blk.h>                /* For block_size() */
-+#include <linux/blkdev.h>             /* For block_size() */
- /*
-  * Lock protecting manipulation of the ahc softc list.
-@@ -1811,7 +1811,8 @@ ahc_linux_register_host(struct ahc_softc
-       ahc_unlock(ahc, &s);
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--      scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL));
-+      scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL)); /* XXX handle failure */
-+      scsi_scan_host(host);
- #endif
-       return (0);
- }
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aic7xxx_osm.h       2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aic7xxx_osm.h      2003-07-19 17:03:50.000000000 -0700
-@@ -60,7 +60,6 @@
- #define _AIC7XXX_LINUX_H_
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/aic7xxx/aiclib.c    2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx/aiclib.c   2003-07-19 17:03:50.000000000 -0700
-@@ -30,7 +30,6 @@
-  * $Id$
-  */
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/version.h>
---- linux-2.6.0-test1/drivers/scsi/aic7xxx_old.c       2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/scsi/aic7xxx_old.c      2003-07-19 17:03:50.000000000 -0700
-@@ -233,11 +233,10 @@
- #include <linux/sched.h>
- #include <linux/pci.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/spinlock.h>
- #include <linux/smp.h>
--#include <linux/blk.h>
- #include <linux/interrupt.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/AM53C974.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/AM53C974.c 2003-07-19 17:03:50.000000000 -0700
-@@ -7,7 +7,7 @@
- #include <linux/errno.h>
- #include <linux/pci.h>
- #include <linux/string.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/spinlock.h>
---- linux-2.6.0-test1/drivers/scsi/amiga7xx.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/amiga7xx.c 2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
-  */
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/config.h>
---- linux-2.6.0-test1/drivers/scsi/arm/acornscsi.c     2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/acornscsi.c    2003-07-19 17:03:50.000000000 -0700
-@@ -138,7 +138,7 @@
- #include <linux/errno.h>
- #include <linux/proc_fs.h>
- #include <linux/ioport.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/init.h>
-@@ -3043,9 +3043,13 @@ acornscsi_probe(struct expansion_card *e
-       acornscsi_resetcard(ashost);
-       ret = scsi_add_host(host, &ec->dev);
--      if (ret == 0)
--              goto out;
-+      if (ret)
-+              goto err_7;
-+
-+      scsi_scan_host(host);
-+      goto out;
-+ err_7:
-       free_irq(host->irq, ashost);
-  err_6:
-       release_region(host->io_port, 2048);
---- linux-2.6.0-test1/drivers/scsi/arm/arxescsi.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/arxescsi.c     2003-07-19 17:03:50.000000000 -0700
-@@ -19,7 +19,7 @@
-  *  22-10-2000  SH            Updated for new registering scheme.
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/cumana_1.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/cumana_1.c     2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <asm/ecard.h>
-@@ -297,9 +297,13 @@ cumanascsi1_probe(struct expansion_card 
-       printk("\n");
-       ret = scsi_add_host(host, &ec->dev);
--      if (ret == 0)
--              goto out;
-+      if (ret)
-+              goto out_free_irq;
-+
-+      scsi_scan_host(host);
-+      goto out;
-+ out_free_irq:
-       free_irq(host->irq, host);
-  out_release:
-       release_region(host->io_port, host->n_io_port);
---- linux-2.6.0-test1/drivers/scsi/arm/cumana_2.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/cumana_2.c     2003-07-19 17:03:50.000000000 -0700
-@@ -17,7 +17,7 @@
-  *   02-04-2000       RMK     0.0.4   Updated for new error handling code.
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/ecoscsi.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/ecoscsi.c      2003-07-19 17:03:50.000000000 -0700
-@@ -27,7 +27,7 @@
- #include <linux/ioport.h>
- #include <linux/delay.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include <asm/system.h>
-@@ -205,7 +205,8 @@ static int __init ecoscsi_init(void)
-       NCR5380_print_options(host);
-       printk("\n");
--      scsi_add_host(host, NULL);
-+      scsi_add_host(host, NULL); /* XXX handle failure */
-+      scsi_scan_host(host);
-       return 0;
- release_reg:
---- linux-2.6.0-test1/drivers/scsi/arm/eesox.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/eesox.c        2003-07-19 17:03:50.000000000 -0700
-@@ -23,7 +23,7 @@
-  *                            error handling code.
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/fas216.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/fas216.c       2003-07-19 17:03:50.000000000 -0700
-@@ -35,7 +35,7 @@
-  *                    condition status from targets.
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
-@@ -2861,6 +2861,8 @@ int fas216_add(struct Scsi_Host *host, s
-       ret = scsi_add_host(host, dev);
-       if (ret)
-               fas216_writeb(info, REG_CMD, CMD_RESETCHIP);
-+      else
-+              scsi_scan_host(host);
-       return ret;
- }
---- linux-2.6.0-test1/drivers/scsi/arm/oak.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/oak.c  2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <asm/ecard.h>
-@@ -158,9 +158,13 @@ oakscsi_probe(struct expansion_card *ec,
-       printk("\n");
-       ret = scsi_add_host(host, &ec->dev);
--      if (ret == 0)
--              goto out;
-+      if (ret)
-+              goto out_release;
-+
-+      scsi_scan_host(host);
-+      goto out;
-+ out_release:
-       release_region(host->io_port, host->n_io_port);
-  unreg:
-       scsi_host_put(host);
---- linux-2.6.0-test1/drivers/scsi/arm/powertec.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/arm/powertec.c     2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
-  * published by the Free Software Foundation.
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/arm/queue.c 2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/scsi/arm/queue.c        2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
-  *   30-Aug-2000 RMK  Use Linux list handling and spinlocks
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/slab.h>
---- linux-2.6.0-test1/drivers/scsi/atari_scsi.c        2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/scsi/atari_scsi.c       2003-07-19 17:03:50.000000000 -0700
-@@ -86,7 +86,7 @@
- #include <linux/ctype.h>
- #include <linux/delay.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/interrupt.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/atp870u.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/atp870u.c  2003-07-19 17:03:50.000000000 -0700
-@@ -26,7 +26,7 @@
- #include <linux/proc_fs.h>
- #include <linux/spinlock.h>
- #include <linux/pci.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/scsi/blz1230.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/blz1230.c  2003-07-19 17:03:50.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/blz2060.c   2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/scsi/blz2060.c  2003-07-19 17:03:50.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/BusLogic.c  2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/BusLogic.c 2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,6 @@
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/types.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/bvme6000.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/bvme6000.c 2003-07-19 17:03:50.000000000 -0700
-@@ -5,7 +5,7 @@
-  */
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/zorro.h>
---- linux-2.6.0-test1/drivers/scsi/constants.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/constants.c        2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/module.h>
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/cpqfcTScontrol.c    2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/cpqfcTScontrol.c   2003-07-19 17:03:50.000000000 -0700
-@@ -30,7 +30,7 @@
- #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>  // request_region() prototype
---- linux-2.6.0-test1/drivers/scsi/cpqfcTSinit.c       2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/cpqfcTSinit.c      2003-07-19 17:03:50.000000000 -0700
-@@ -35,7 +35,7 @@
- #include <linux/interrupt.h>  
- #include <linux/module.h>
- #include <linux/version.h> 
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/types.h>
---- linux-2.6.0-test1/drivers/scsi/cpqfcTSworker.c     2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/cpqfcTSworker.c    2003-07-19 17:03:50.000000000 -0700
-@@ -26,7 +26,7 @@
- #include <linux/ioport.h>
- #include <linux/kernel.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/delay.h>
- #include <linux/smp_lock.h>
---- linux-2.6.0-test1/drivers/scsi/cyberstorm.c        2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/cyberstorm.c       2003-07-19 17:03:50.000000000 -0700
-@@ -25,7 +25,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/cyberstormII.c      2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/scsi/cyberstormII.c     2003-07-19 17:03:50.000000000 -0700
-@@ -21,7 +21,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/dc395x.c    2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/dc395x.c   2003-07-19 17:03:50.000000000 -0700
-@@ -50,7 +50,7 @@
- #include <linux/moduleparam.h>
- #include <linux/delay.h>
- #include <linux/ctype.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include "scsi.h"
- #include "hosts.h"
-@@ -6214,7 +6214,8 @@ int __devinit dc395x_init_one(struct pci
-       pci_set_drvdata(pdev, scsi_host);
-       /* get the scsi mid level to scan for new devices on the bus */
--      scsi_add_host(scsi_host, &pdev->dev);
-+      scsi_add_host(scsi_host, &pdev->dev);   /* XXX handle failure */
-+      scsi_scan_host(scsi_host);
-       return 0;
- }
---- linux-2.6.0-test1/drivers/scsi/dec_esp.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/dec_esp.c  2003-07-19 17:03:50.000000000 -0700
-@@ -24,7 +24,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
---- linux-2.6.0-test1/drivers/scsi/dmx3191d.c  2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/dmx3191d.c 2003-07-19 17:03:50.000000000 -0700
-@@ -22,7 +22,7 @@
- #include <asm/io.h>
- #include <asm/system.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/ioport.h>
- #include <linux/module.h>
---- linux-2.6.0-test1/drivers/scsi/dpt_i2o.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/dpt_i2o.c  2003-07-19 17:03:50.000000000 -0700
-@@ -47,7 +47,7 @@ MODULE_DESCRIPTION("Adaptec I2O RAID Dri
- #include <linux/config.h>     /* for CONFIG_PCI */
- #include <linux/pci.h>                /* for PCI support */
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>      /* for udelay */
- #include <linux/interrupt.h>
- #include <linux/kernel.h>     /* for printk */
---- linux-2.6.0-test1/drivers/scsi/dtc.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/dtc.c      2003-07-19 17:03:50.000000000 -0700
-@@ -76,7 +76,7 @@
- #include <linux/module.h>
- #include <linux/signal.h>
- #include <linux/sched.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/stat.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/eata.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/eata.c     2003-07-19 17:03:50.000000000 -0700
-@@ -486,7 +486,7 @@
- #include <asm/system.h>
- #include <asm/byteorder.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/drivers/scsi/eata_pio.c  2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/scsi/eata_pio.c 2003-07-19 17:03:50.000000000 -0700
-@@ -58,7 +58,7 @@
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/esp.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/esp.c      2003-07-19 17:03:50.000000000 -0700
-@@ -19,7 +19,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/fastlane.c  2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/fastlane.c 2003-07-19 17:03:50.000000000 -0700
-@@ -30,7 +30,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/fcal.c      2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/fcal.c     2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/fd_mcs.c    2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/fd_mcs.c   2003-07-19 17:03:50.000000000 -0700
-@@ -79,7 +79,7 @@
- #include <linux/module.h>
- #include <linux/interrupt.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/errno.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/fdomain.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/fdomain.c  2003-07-19 17:03:50.000000000 -0700
-@@ -270,7 +270,7 @@
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/errno.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/gdth.c      2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/gdth.c     2003-07-19 17:03:50.000000000 -0700
-@@ -357,11 +357,8 @@
- #include <asm/spinlock.h>
- #endif
--#if LINUX_VERSION_CODE >= 0x010300
--#include <linux/blk.h>
--#else
--#include "../block/blk.h"
--#endif
-+#include <linux/blkdev.h>
-+
- #include "scsi.h"
- #include "hosts.h"
- #if LINUX_VERSION_CODE < 0x020503
---- linux-2.6.0-test1/drivers/scsi/g_NCR5380.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/scsi/g_NCR5380.c        2003-07-19 17:03:50.000000000 -0700
-@@ -105,7 +105,7 @@
- #include <asm/io.h>
- #include <linux/signal.h>
- #include <linux/sched.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include "g_NCR5380.h"
---- linux-2.6.0-test1/drivers/scsi/gvp11.c     2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/gvp11.c    2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/hosts.c     2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/hosts.c    2003-07-19 17:05:05.000000000 -0700
-@@ -81,19 +81,15 @@ int scsi_add_host(struct Scsi_Host *shos
-       printk(KERN_INFO "scsi%d : %s\n", shost->host_no,
-                       sht->info ? sht->info(shost) : sht->name);
--      error = scsi_sysfs_add_host(shost, dev);
--
-       if (!shost->can_queue) {
-               printk(KERN_ERR "%s: can_queue = 0 no longer supported\n",
-                               sht->name);
-               error = -EINVAL;
-       }
--      if (!error) {
-+      error = scsi_sysfs_add_host(shost, dev);
-+      if (!error)
-               scsi_proc_host_add(shost);
--              scsi_scan_host(shost);
--      }
--                      
-       return error;
- }
-@@ -112,7 +108,7 @@ void scsi_free_shost(struct Scsi_Host *s
-               shost->eh_notify = NULL;
-       }
--      shost->hostt->present--;
-+      scsi_proc_hostdir_rm(shost->hostt);
-       scsi_destroy_command_freelist(shost);
-       kfree(shost);
- }
-@@ -151,12 +147,6 @@ struct Scsi_Host *scsi_host_alloc(struct
-               dump_stack();
-         }
--      /* if its not set in the template, use the default */
--      if (!sht->shost_attrs)
--               sht->shost_attrs = scsi_sysfs_shost_attrs;
--      if (!sht->sdev_attrs)
--               sht->sdev_attrs = scsi_sysfs_sdev_attrs;
--
-       shost = kmalloc(sizeof(struct Scsi_Host) + privsize, gfp_mask);
-       if (!shost)
-               return NULL;
-@@ -219,7 +209,7 @@ struct Scsi_Host *scsi_host_alloc(struct
-       kernel_thread((int (*)(void *))scsi_error_handler, shost, 0);
-       wait_for_completion(&complete);
-       shost->eh_notify = NULL;
--      shost->hostt->present++;
-+      scsi_proc_hostdir_add(shost->hostt);
-       return shost;
-  fail:
-       kfree(shost);
-@@ -283,8 +273,8 @@ struct Scsi_Host *scsi_host_lookup(unsig
-  **/
- void scsi_host_get(struct Scsi_Host *shost)
- {
--      get_device(&shost->host_gendev);
--      class_device_get(&shost->class_dev);
-+      get_device(&shost->shost_gendev);
-+      class_device_get(&shost->shost_classdev);
- }
- /**
-@@ -293,6 +283,6 @@ void scsi_host_get(struct Scsi_Host *sho
-  **/
- void scsi_host_put(struct Scsi_Host *shost)
- {
--      class_device_put(&shost->class_dev);
--      put_device(&shost->host_gendev);
-+      class_device_put(&shost->shost_classdev);
-+      put_device(&shost->shost_gendev);
- }
---- linux-2.6.0-test1/drivers/scsi/i91uscsi.c  2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/scsi/i91uscsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@
- #include <linux/jiffies.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include "i91uscsi.h"
---- linux-2.6.0-test1/drivers/scsi/ibmmca.c    2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/ibmmca.c   2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,7 @@
- #include <linux/interrupt.h>
- #include <linux/ioport.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/mca.h>
---- linux-2.6.0-test1/drivers/scsi/ide-scsi.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ide-scsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -978,8 +978,10 @@ static int idescsi_attach(ide_drive_t *d
-               idescsi_setup (drive, idescsi);
-               drive->disk->fops = &idescsi_ops;
-               err = scsi_add_host(host, &idescsi_primary);
--              if (!err)
-+              if (!err) {
-+                      scsi_scan_host(host);
-                       return 0;
-+              }
-               /* fall through on error */
-               ide_unregister_subdriver(drive);
-       }
---- linux-2.6.0-test1/drivers/scsi/imm.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/imm.c      2003-07-19 17:03:50.000000000 -0700
-@@ -24,7 +24,7 @@
- void imm_reset_pulse(unsigned int base);
- static int device_check(int host_no);
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include <linux/parport.h>
- #include <linux/workqueue.h>
---- linux-2.6.0-test1/drivers/scsi/imm.h       2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/scsi/imm.h      2003-07-19 17:03:50.000000000 -0700
-@@ -75,7 +75,7 @@
- #include  <linux/delay.h>
- #include  <linux/proc_fs.h>
- #include  <linux/stat.h>
--#include  <linux/blk.h>
-+#include  <linux/blkdev.h>
- #include  <linux/sched.h>
- #include  <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/in2000.c    2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/in2000.c   2003-07-19 17:03:50.000000000 -0700
-@@ -114,7 +114,6 @@
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
- #include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/ini9100u.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ini9100u.c 2003-07-19 17:03:50.000000000 -0700
-@@ -119,7 +119,7 @@
- #include <linux/delay.h>
- #include <linux/pci.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/stat.h>
- #include <linux/config.h>
---- linux-2.6.0-test1/drivers/scsi/inia100.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/inia100.c  2003-07-19 17:03:50.000000000 -0700
-@@ -74,7 +74,7 @@
- #include <linux/interrupt.h>
- #include <linux/pci.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include <linux/stat.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/drivers/scsi/ips.c       2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/ips.c      2003-07-19 17:03:50.000000000 -0700
-@@ -167,7 +167,7 @@
- #include <linux/reboot.h>
- #include <linux/interrupt.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/types.h>
- #include <scsi/sg.h>
---- linux-2.6.0-test1/drivers/scsi/ips.h       2003-06-14 12:18:03.000000000 -0700
-+++ 25/drivers/scsi/ips.h      2003-07-19 17:03:50.000000000 -0700
-@@ -111,7 +111,7 @@
-    #else
-       #define IPS_REGISTER_HOSTS(SHT)      (!ips_detect(SHT))
-       #define IPS_UNREGISTER_HOSTS(SHT)
--      #define IPS_ADD_HOST(shost,device)   scsi_add_host(shost,device)
-+      #define IPS_ADD_HOST(shost,device)   do { scsi_add_host(shost,device); scsi_scan_host(shost); } while (0)
-       #define IPS_REMOVE_HOST(shost)       scsi_remove_host(shost)
-       #define IPS_SCSI_SET_DEVICE(sh,ha)   scsi_set_device(sh, &(ha)->pcidev->dev)
-       #define IPS_PRINTK(level, pcidev, format, arg...)                 \
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_1000.h     2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,3224 @@
-+/* @(#)asm_1000.h 1.2 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */ 
-+
-+#ifndef       ISP_TARGET_MODE
-+/*
-+ *    Firmware Version 1.37.00 (11:28 Aug 28, 2000)
-+ */
-+static const u_int16_t isp_1000_risc_code[] = {
-+      0x0078, 0x1041, 0x0000, 0x2757, 0x0000, 0x12ff, 0x2043, 0x4f50,
-+      0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932,
-+      0x2c31, 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749,
-+      0x4320, 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049,
-+      0x5350, 0x3130, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520,
-+      0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3337, 0x2020,
-+      0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3135,
-+      0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2000, 0x3030,
-+      0x2024, 0x20b9, 0x1212, 0x20c1, 0x0008, 0x2071, 0x0010, 0x70c3,
-+      0x0004, 0x20c9, 0x5cff, 0x2089, 0x10ee, 0x70c7, 0x4953, 0x70cb,
-+      0x5020, 0x70cf, 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2031,
-+      0x0030, 0x2079, 0x3800, 0x7863, 0x0000, 0x2fa0, 0x2009, 0x031b,
-+      0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x1062,
-+      0x789b, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0bb8,
-+      0x2009, 0x3835, 0x200b, 0x0003, 0x78bb, 0x0000, 0x78bf, 0x0000,
-+      0x78c3, 0x0000, 0x2069, 0x3840, 0x00a8, 0x1085, 0x681b, 0x003c,
-+      0x2009, 0x1313, 0x21b8, 0x0078, 0x1087, 0x681b, 0x0028, 0x6807,
-+      0x0007, 0x680b, 0x00fa, 0x680f, 0x0008, 0x6813, 0x0005, 0x681f,
-+      0x0000, 0x6823, 0x0006, 0x6817, 0x0008, 0x6827, 0x0000, 0x2069,
-+      0x3a80, 0x2011, 0x0020, 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f,
-+      0x0019, 0x6803, 0xdd00, 0x6807, 0x001a, 0x6a1a, 0x2d00, 0xa0e8,
-+      0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x109d, 0x2069, 0x3b00,
-+      0x2009, 0x0002, 0x20a9, 0x0100, 0x683f, 0x0000, 0x2001, 0x0008,
-+      0x8007, 0x6832, 0x6837, 0x000a, 0x680b, 0x0040, 0x6817, 0x0100,
-+      0x681f, 0x0064, 0xade8, 0x0010, 0x0070, 0x10c8, 0x0078, 0x10b4,
-+      0x8109, 0x00c0, 0x10b2, 0x1078, 0x1b64, 0x1078, 0x31c0, 0x1078,
-+      0x1747, 0x1078, 0x368b, 0x3200, 0xa085, 0x000d, 0x2090, 0x70c3,
-+      0x0000, 0x0090, 0x10e2, 0x70c0, 0xa086, 0x0002, 0x00c0, 0x10e2,
-+      0x1078, 0x11e0, 0x1078, 0x1112, 0x1078, 0x18f2, 0x1078, 0x1aaf,
-+      0x1078, 0x34fd, 0x1078, 0x184d, 0x0078, 0x10e2, 0x10f6, 0x10f8,
-+      0x1d05, 0x1d05, 0x321e, 0x321e, 0x1d05, 0x1d05, 0x0078, 0x10f6,
-+      0x0078, 0x10f8, 0x0078, 0x10fa, 0x0078, 0x10fc, 0x7008, 0x800c,
-+      0x00c8, 0x110d, 0x7007, 0x0002, 0xa08c, 0x000c, 0x00c0, 0x110e,
-+      0x8004, 0x8004, 0x00c8, 0x110d, 0x087a, 0x097a, 0x70c3, 0x4002,
-+      0x0078, 0x11e3, 0x7814, 0xa005, 0x00c0, 0x111a, 0x0010, 0x1156,
-+      0x0078, 0x1155, 0x2009, 0x3868, 0x2104, 0xa005, 0x00c0, 0x1155,
-+      0x7814, 0xa086, 0x0001, 0x00c0, 0x1127, 0x1078, 0x15ae, 0x7817,
-+      0x0000, 0x2009, 0x386f, 0x2104, 0xa065, 0x0040, 0x1143, 0x2009,
-+      0x386a, 0x211c, 0x8108, 0x2114, 0x8108, 0x2104, 0xa210, 0xa399,
-+      0x0000, 0x2009, 0x0018, 0x6083, 0x0103, 0x1078, 0x16d7, 0x00c0,
-+      0x114f, 0x1078, 0x173e, 0x2009, 0x386f, 0x200b, 0x0000, 0x2009,
-+      0x3869, 0x2104, 0x200b, 0x0000, 0xa005, 0x0040, 0x1153, 0x2001,
-+      0x4005, 0x0078, 0x11e2, 0x0078, 0x11e0, 0x007c, 0x2061, 0x0000,
-+      0x6018, 0xa084, 0x0001, 0x0040, 0x115e, 0x007c, 0x70c3, 0x0000,
-+      0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000, 0x70c0, 0xa0bc,
-+      0xffc0, 0x00c0, 0x11ae, 0x2038, 0x0079, 0x116e, 0x11e0, 0x122e,
-+      0x11fc, 0x122e, 0x127f, 0x127f, 0x11f3, 0x1608, 0x128a, 0x11ef,
-+      0x1200, 0x1202, 0x1204, 0x1206, 0x160d, 0x11ef, 0x1292, 0x12ba,
-+      0x15bc, 0x1602, 0x1208, 0x14e3, 0x1505, 0x151f, 0x1548, 0x149c,
-+      0x14aa, 0x14be, 0x14d2, 0x1357, 0x1332, 0x12e2, 0x12e9, 0x12ee,
-+      0x12f3, 0x12f9, 0x12fe, 0x1303, 0x1308, 0x130d, 0x1311, 0x1326,
-+      0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x1363, 0x136c, 0x137b,
-+      0x13a1, 0x13ab, 0x13b2, 0x13d8, 0x13e7, 0x13f6, 0x1408, 0x147a,
-+      0x11ef, 0x148a, 0x11ef, 0x11ef, 0x11ef, 0x1491, 0xa0bc, 0xffa0,
-+      0x00c0, 0x11ef, 0x2038, 0xa084, 0x001f, 0x0079, 0x11b7, 0x11ef,
-+      0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef,
-+      0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x1665, 0x1674, 0x11ef,
-+      0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef, 0x11ef,
-+      0x11ef, 0x16b3, 0x16bd, 0x16c1, 0x16cf, 0x167f, 0x169c, 0x72ca,
-+      0x71c6, 0x2001, 0x4006, 0x0078, 0x11e2, 0x73ce, 0x72ca, 0x71c6,
-+      0x2001, 0x4000, 0x70c2, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091,
-+      0x5000, 0x2091, 0x4080, 0x007c, 0x71c6, 0x0078, 0x11e2, 0x70c3,
-+      0x4001, 0x0078, 0x11e3, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9,
-+      0x0005, 0x53a3, 0x0078, 0x11e0, 0x70c4, 0x70c3, 0x0004, 0x007a,
-+      0x0078, 0x11e0, 0x0078, 0x11e0, 0x0078, 0x11e0, 0x0078, 0x11e0,
-+      0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020,
-+      0x70cf, 0x2020, 0x70d3, 0x0001, 0x3f00, 0x70d6, 0x2079, 0x0000,
-+      0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457,
-+      0x2051, 0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000,
-+      0x2091, 0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x71d0, 0x72c8,
-+      0x73cc, 0x70c4, 0x20a0, 0x2098, 0x2031, 0x0030, 0x81ff, 0x0040,
-+      0x11e0, 0x7007, 0x0004, 0x731a, 0x721e, 0x2051, 0x0012, 0x2049,
-+      0x125d, 0x2041, 0x11e0, 0x7003, 0x0002, 0xa786, 0x0001, 0x00c0,
-+      0x124f, 0x2049, 0x126b, 0x2041, 0x1277, 0x7003, 0x0003, 0x7017,
-+      0x0000, 0x810b, 0x7112, 0x00c8, 0x1257, 0x7017, 0x0001, 0x7007,
-+      0x0001, 0xa786, 0x0001, 0x0040, 0x126b, 0x700c, 0xa084, 0x007f,
-+      0x8004, 0x2009, 0x0020, 0xa102, 0x0942, 0x094a, 0x20a8, 0x26a0,
-+      0x53a6, 0x0078, 0x10fe, 0x700c, 0xa084, 0x007f, 0x0040, 0x126b,
-+      0x80ac, 0x0048, 0x126b, 0x2698, 0x53a5, 0x0078, 0x10fe, 0x700c,
-+      0xa084, 0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x11e0, 0x71c4,
-+      0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1287, 0x200a, 0x72ca,
-+      0x0078, 0x11df, 0x70c7, 0x0125, 0x70cb, 0x0000, 0x70cf, 0x0f00,
-+      0x0078, 0x11e0, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca,
-+      0x73ce, 0x74d2, 0xa005, 0x0040, 0x12b4, 0x8001, 0x7872, 0xa084,
-+      0xfc00, 0x0040, 0x12ab, 0x7898, 0xa085, 0x0001, 0x789a, 0x2001,
-+      0x4005, 0x0078, 0x11e2, 0x7a7a, 0x7b7e, 0x7c76, 0x7898, 0xa084,
-+      0xfffc, 0x789a, 0x0078, 0x12b8, 0x7898, 0xa085, 0x0001, 0x789a,
-+      0x0078, 0x11e0, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca,
-+      0x73ce, 0x74d6, 0xa005, 0x0040, 0x12dc, 0x8001, 0x7886, 0xa084,
-+      0xfc00, 0x0040, 0x12d3, 0x7898, 0xa085, 0x0100, 0x789a, 0x2001,
-+      0x4005, 0x0078, 0x11e2, 0x7a8e, 0x7b92, 0x7c8a, 0x7898, 0xa084,
-+      0xfcff, 0x789a, 0x0078, 0x12e0, 0x7898, 0xa085, 0x0100, 0x789a,
-+      0x0078, 0x11e0, 0x2009, 0x3859, 0x210c, 0x2011, 0x0372, 0x0078,
-+      0x11de, 0x2009, 0x3841, 0x210c, 0x0078, 0x11df, 0x2009, 0x3842,
-+      0x210c, 0x0078, 0x11df, 0x2061, 0x3840, 0x610c, 0x6210, 0x0078,
-+      0x11de, 0x2009, 0x3845, 0x210c, 0x0078, 0x11df, 0x2009, 0x3846,
-+      0x210c, 0x0078, 0x11df, 0x2009, 0x3847, 0x210c, 0x0078, 0x11df,
-+      0x2009, 0x3848, 0x210c, 0x0078, 0x11df, 0x7908, 0x7a0c, 0x0078,
-+      0x11de, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xa0e8, 0x3a80, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1323,
-+      0x6b08, 0x0078, 0x1324, 0x6b0c, 0x0078, 0x11dd, 0x77c4, 0x1078,
-+      0x1758, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+      0x0078, 0x11dd, 0x2091, 0x8000, 0x7848, 0xa005, 0x00c0, 0x1346,
-+      0x2061, 0x3b00, 0x20a9, 0x0100, 0x603c, 0xa005, 0x00c0, 0x1346,
-+      0xace0, 0x0010, 0x00f0, 0x133c, 0x0078, 0x134e, 0x2019, 0x0000,
-+      0x2011, 0x0000, 0x2009, 0x0000, 0x0078, 0x1353, 0x7bb8, 0x7abc,
-+      0x79c0, 0x78c3, 0x0000, 0x2091, 0x8001, 0x0078, 0x11dd, 0x77c4,
-+      0x1078, 0x1758, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091,
-+      0x8001, 0x0078, 0x11dd, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x11d8,
-+      0x1078, 0x1be8, 0x0078, 0x11dd, 0x71c4, 0xa182, 0x0010, 0x00c8,
-+      0x11d8, 0x2011, 0x3841, 0x2204, 0x007e, 0x2112, 0x1078, 0x1ba1,
-+      0x017f, 0x0078, 0x11df, 0x71c4, 0x2011, 0x1399, 0x20a9, 0x0008,
-+      0x2204, 0xa106, 0x0040, 0x138b, 0x8210, 0x0070, 0x1389, 0x0078,
-+      0x1380, 0x0078, 0x11d8, 0xa292, 0x1399, 0x027e, 0x2011, 0x3842,
-+      0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x1bad, 0x017f, 0x0078,
-+      0x11df, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032,
-+      0x004b, 0x2061, 0x3840, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8,
-+      0x6012, 0x0078, 0x11de, 0x2061, 0x3840, 0x6114, 0x70c4, 0x6016,
-+      0x0078, 0x11df, 0x71c4, 0x2011, 0x0004, 0x2019, 0x1212, 0xa186,
-+      0x0028, 0x0040, 0x13cb, 0x2011, 0x0005, 0x2019, 0x1212, 0xa186,
-+      0x0032, 0x0040, 0x13cb, 0x2011, 0x0006, 0x2019, 0x1313, 0xa186,
-+      0x003c, 0x00c0, 0x11d8, 0x2061, 0x3840, 0x6018, 0x007e, 0x611a,
-+      0x23b8, 0x1078, 0x1bbe, 0x1078, 0x368b, 0x017f, 0x0078, 0x11df,
-+      0x71c4, 0xa184, 0xffcf, 0x00c0, 0x11d8, 0x2011, 0x3847, 0x2204,
-+      0x2112, 0x007e, 0x1078, 0x1be0, 0x017f, 0x0078, 0x11df, 0x71c4,
-+      0xa182, 0x0010, 0x00c8, 0x11d8, 0x2011, 0x3848, 0x2204, 0x007e,
-+      0x2112, 0x1078, 0x1bcf, 0x017f, 0x0078, 0x11df, 0x71c4, 0x72c8,
-+      0xa184, 0xfffd, 0x00c0, 0x11d7, 0xa284, 0xfffd, 0x00c0, 0x11d7,
-+      0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x11de,
-+      0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+      0x3a80, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e, 0xa226, 0x0040,
-+      0x1440, 0xa284, 0x0001, 0x0040, 0x1422, 0x2220, 0xa39d, 0x0002,
-+      0xa294, 0xfffe, 0x6a02, 0xa484, 0x2000, 0x0040, 0x1429, 0xa39d,
-+      0x0010, 0xa484, 0x1000, 0x0040, 0x142f, 0xa39d, 0x0008, 0xa484,
-+      0x4000, 0x0040, 0x1440, 0x810f, 0xa284, 0x4000, 0x0040, 0x143c,
-+      0x1078, 0x1c02, 0x0078, 0x1440, 0x1078, 0x1bf4, 0x0078, 0x1440,
-+      0x72cc, 0x82ff, 0x0040, 0x1472, 0x6808, 0xa206, 0x0040, 0x1472,
-+      0xa2a4, 0x00ff, 0x2061, 0x3840, 0x6118, 0xa186, 0x0028, 0x0040,
-+      0x1459, 0xa186, 0x0032, 0x0040, 0x145f, 0xa186, 0x003c, 0x0040,
-+      0x1465, 0xa482, 0x0064, 0x0048, 0x146f, 0x0078, 0x1469, 0xa482,
-+      0x0050, 0x0048, 0x146f, 0x0078, 0x1469, 0xa482, 0x0043, 0x0048,
-+      0x146f, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x11d9, 0x6a0a,
-+      0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4,
-+      0x0078, 0x11dd, 0x77c4, 0x1078, 0x1758, 0x2091, 0x8000, 0x6a14,
-+      0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708,
-+      0x0078, 0x11dd, 0x2011, 0x3835, 0x220c, 0x70c4, 0x2012, 0x0078,
-+      0x11df, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x11d8,
-+      0x1078, 0x1c10, 0x0078, 0x11dd, 0x77c4, 0x1078, 0x1758, 0x2091,
-+      0x8000, 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708,
-+      0x0078, 0x11de, 0x77c4, 0x1078, 0x1758, 0x2091, 0x8000, 0x6a08,
-+      0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x14b9, 0x1078,
-+      0x1b49, 0x2091, 0x8001, 0x2708, 0x0078, 0x11de, 0x77c4, 0x1078,
-+      0x1758, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804,
-+      0xa005, 0x0040, 0x14cd, 0x1078, 0x1b49, 0x2091, 0x8001, 0x2708,
-+      0x0078, 0x11de, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051,
-+      0x0020, 0x2091, 0x8000, 0x1078, 0x1765, 0x2091, 0x8001, 0x2708,
-+      0x6a08, 0x0078, 0x11de, 0x77c4, 0x72c8, 0x73cc, 0x77c6, 0x72ca,
-+      0x73ce, 0x1078, 0x17e6, 0x00c0, 0x1501, 0x6818, 0xa005, 0x0040,
-+      0x14fb, 0x2708, 0x1078, 0x1c20, 0x00c0, 0x14fb, 0x7817, 0xffff,
-+      0x2091, 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078,
-+      0x11e2, 0x2091, 0x8001, 0x0078, 0x11e0, 0x77c4, 0x77c6, 0x2041,
-+      0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+      0x1765, 0x2061, 0x3840, 0x60a3, 0x0003, 0x67b6, 0x60a7, 0x0000,
-+      0x7817, 0xffff, 0x1078, 0x1b49, 0x2091, 0x8001, 0x007c, 0x77c8,
-+      0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061,
-+      0x3840, 0x60a3, 0x0002, 0x60a7, 0x0000, 0x67b6, 0x7817, 0xffff,
-+      0x1078, 0x1b49, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0004,
-+      0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x1765, 0x70c8, 0x683e,
-+      0x8738, 0xa784, 0x001f, 0x00c0, 0x153c, 0x2091, 0x8001, 0x007c,
-+      0x7898, 0xa084, 0x0003, 0x00c0, 0x156c, 0x2039, 0x0000, 0x2041,
-+      0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x1758, 0x2091,
-+      0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x1555, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f,
-+      0xa784, 0x0f00, 0x00c0, 0x1555, 0x2091, 0x8000, 0x2069, 0x0100,
-+      0x6830, 0xa084, 0x0040, 0x0040, 0x1595, 0x684b, 0x0004, 0x20a9,
-+      0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x1582, 0x0070, 0x1582,
-+      0x0078, 0x1579, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084,
-+      0x0001, 0x0040, 0x158f, 0x0070, 0x158f, 0x0078, 0x1586, 0x20a9,
-+      0x00fa, 0x0070, 0x1595, 0x0078, 0x1591, 0x2079, 0x3800, 0x7817,
-+      0x0001, 0x2061, 0x3840, 0x60a3, 0x0001, 0x60a7, 0x0000, 0x60c3,
-+      0x000f, 0x7898, 0xa085, 0x0002, 0x789a, 0x6808, 0xa084, 0xfffd,
-+      0x680a, 0x681b, 0x0046, 0x2091, 0x8001, 0x007c, 0x7898, 0xa084,
-+      0xfffd, 0x789a, 0xa084, 0x0001, 0x00c0, 0x15b8, 0x1078, 0x1830,
-+      0x71c4, 0x71c6, 0x794a, 0x007c, 0x74c4, 0x73c8, 0x72cc, 0x74c6,
-+      0x73ca, 0x72ce, 0x2079, 0x3800, 0x2009, 0x0040, 0x1078, 0x1735,
-+      0x0040, 0x15fe, 0x1078, 0x1705, 0x0040, 0x15d2, 0x1078, 0x173e,
-+      0x0078, 0x15fe, 0x6010, 0x2091, 0x8000, 0x7817, 0xffff, 0x2009,
-+      0x3868, 0x200b, 0x0005, 0x8108, 0x200b, 0x0000, 0x8108, 0x230a,
-+      0x8108, 0x220a, 0x8108, 0x240a, 0x8108, 0x200a, 0x8108, 0x200b,
-+      0x0000, 0x8108, 0x2c0a, 0xa02e, 0x2530, 0x0e7e, 0x1078, 0x3199,
-+      0x0e7f, 0x6592, 0x65a2, 0x6696, 0x66a6, 0x60ab, 0x0000, 0x60af,
-+      0x0000, 0x1078, 0x1b49, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005,
-+      0x0078, 0x11e3, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x11e0,
-+      0x71c4, 0x71c6, 0x2168, 0x0078, 0x160f, 0x2069, 0x1000, 0x690c,
-+      0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1611, 0xa285,
-+      0x0000, 0x00c0, 0x161f, 0x70c3, 0x4000, 0x0078, 0x1621, 0x70c3,
-+      0x4003, 0x70ca, 0x0078, 0x11e3, 0x71c4, 0x72c8, 0x73cc, 0x2100,
-+      0xa184, 0xfffc, 0x00c0, 0x11ef, 0x2100, 0x0079, 0x162f, 0x1646,
-+      0x165b, 0x165d, 0x165f, 0x70c3, 0x4003, 0x71ce, 0x72d2, 0x73d6,
-+      0x0078, 0x1642, 0x70c3, 0x4000, 0x70cf, 0x0000, 0x70d3, 0x0000,
-+      0x70d7, 0x0000, 0x77c6, 0x71ca, 0x0078, 0x11e0, 0x2031, 0x1661,
-+      0x2624, 0x8630, 0x2412, 0x2204, 0xa446, 0x00c0, 0x1633, 0xa484,
-+      0xffff, 0x00c0, 0x1648, 0x2031, 0x1661, 0x8210, 0x8319, 0xa384,
-+      0xffff, 0x00c0, 0x1648, 0x0078, 0x163a, 0x0078, 0x163a, 0x0078,
-+      0x163a, 0x5555, 0xaaaa, 0xffff, 0x0000, 0x77c4, 0x1078, 0x1758,
-+      0x2091, 0x8000, 0x6830, 0xa084, 0xff00, 0x8007, 0x2010, 0x2091,
-+      0x8001, 0x2708, 0x0078, 0x11de, 0x77c4, 0x1078, 0x1758, 0x2091,
-+      0x8000, 0x6a34, 0x2091, 0x8001, 0x2708, 0x0078, 0x11de, 0x77c4,
-+      0x077e, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0x72c8, 0x8217, 0xa294,
-+      0xff00, 0x1078, 0x1758, 0x2091, 0x8000, 0x6c30, 0x6a32, 0x2091,
-+      0x8001, 0x8738, 0x00f0, 0x1689, 0x077f, 0x2708, 0x8427, 0xa4a4,
-+      0x00ff, 0x2410, 0x0078, 0x11de, 0x77c4, 0x077e, 0xa7bc, 0xff00,
-+      0x20a9, 0x0020, 0x72c8, 0x1078, 0x1758, 0x2091, 0x8000, 0x6c34,
-+      0x6a36, 0x2091, 0x8001, 0x8738, 0x00f0, 0x16a3, 0x077f, 0x2708,
-+      0x2410, 0x0078, 0x11de, 0x7960, 0x71c6, 0x71c4, 0xa182, 0x0003,
-+      0x00c8, 0x11d8, 0x7962, 0x0078, 0x11e0, 0x7960, 0x71c6, 0x0078,
-+      0x11e0, 0x7954, 0x71c6, 0x71c4, 0x7956, 0x7958, 0x71ca, 0x71c8,
-+      0x795a, 0x795c, 0x71ce, 0x71cc, 0x795e, 0x0078, 0x11e0, 0x7954,
-+      0x71c6, 0x7958, 0x71ca, 0x795c, 0x71ce, 0x0078, 0x11e0, 0x700c,
-+      0xa084, 0x007f, 0x0040, 0x16e3, 0x7007, 0x0004, 0x7004, 0xa084,
-+      0x0004, 0x00c0, 0x16de, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e,
-+      0x8108, 0x810c, 0x81a9, 0x8c98, 0x20a1, 0x0030, 0x6080, 0x20a2,
-+      0x53a6, 0x780c, 0xa085, 0x0000, 0x7002, 0x7007, 0x0001, 0x7108,
-+      0x8104, 0x00c8, 0x16f7, 0x7007, 0x0002, 0xa184, 0x000c, 0x710c,
-+      0xa184, 0x0300, 0x7003, 0x0000, 0x007c, 0x700c, 0xa084, 0x007f,
-+      0x0040, 0x1711, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+      0x170c, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e, 0x2099, 0x0030,
-+      0x8108, 0x81ac, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+      0x7008, 0x800c, 0x00c8, 0x1720, 0x7007, 0x0002, 0xa08c, 0x000c,
-+      0x00c0, 0x1732, 0x710c, 0xa184, 0x0300, 0x00c0, 0x1732, 0x2ca0,
-+      0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x7850, 0xa065, 0x0040,
-+      0x173d, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079,
-+      0x3800, 0x7850, 0x2062, 0x2c00, 0x7852, 0x0f7f, 0x007c, 0x2011,
-+      0x5d00, 0x7a52, 0x2019, 0x0372, 0x8319, 0x0040, 0x1755, 0xa280,
-+      0x002f, 0x2012, 0x2010, 0x0078, 0x174c, 0x2013, 0x0000, 0x007c,
-+      0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003,
-+      0x8003, 0xa105, 0xa0e8, 0x3b00, 0x007c, 0x1078, 0x1758, 0x2900,
-+      0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, 0xa80d, 0x690a,
-+      0x2091, 0x8000, 0x2009, 0x384f, 0x210c, 0x6804, 0xa005, 0x0040,
-+      0x1784, 0xa116, 0x00c0, 0x1784, 0x2060, 0x6000, 0x6806, 0x017e,
-+      0x200b, 0x0000, 0x0078, 0x1787, 0x2009, 0x0000, 0x017e, 0x6804,
-+      0xa065, 0x0040, 0x1798, 0x6000, 0x6806, 0x1078, 0x17ad, 0x1078,
-+      0x18a4, 0x1078, 0x2b27, 0x6810, 0x8001, 0x6812, 0x00c0, 0x1787,
-+      0x1078, 0x2b27, 0x017f, 0x6902, 0x6906, 0x2091, 0x8001, 0x007c,
-+      0xa065, 0x0040, 0x17ac, 0x6098, 0x609b, 0x0000, 0x2008, 0x1078,
-+      0x173e, 0x2100, 0x0078, 0x17a0, 0x007c, 0x6003, 0x0103, 0x20a9,
-+      0x001c, 0xac80, 0x0004, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+      0x6016, 0x682c, 0x601e, 0x007c, 0x0e7e, 0x2071, 0x3840, 0x7040,
-+      0xa08c, 0x0200, 0x00c0, 0x17ca, 0xa088, 0x3880, 0x2d0a, 0x8000,
-+      0x7042, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x3840, 0x2009,
-+      0x3880, 0x7240, 0x8221, 0x8211, 0x0048, 0x17e4, 0x2104, 0x8108,
-+      0xad06, 0x00c0, 0x17d3, 0x8119, 0x211e, 0x8108, 0x8318, 0x8211,
-+      0x00c8, 0x17dc, 0x7442, 0xa006, 0x0e7f, 0x007c, 0x1078, 0x1758,
-+      0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040, 0x182f, 0x0078,
-+      0x17f7, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040, 0x182f, 0x600c,
-+      0xa306, 0x00c0, 0x17f1, 0x6008, 0xa206, 0x00c0, 0x17f1, 0x2c28,
-+      0x2001, 0x384f, 0x2004, 0xac06, 0x0040, 0x182f, 0x6804, 0xac06,
-+      0x00c0, 0x1814, 0x6000, 0x2060, 0x6806, 0xa005, 0x00c0, 0x1814,
-+      0x6803, 0x0000, 0x0078, 0x181e, 0x6400, 0x781c, 0x2060, 0x6402,
-+      0xa486, 0x0000, 0x00c0, 0x181e, 0x2c00, 0x6802, 0x2560, 0x1078,
-+      0x17ad, 0x6017, 0x0005, 0x601f, 0x0020, 0x1078, 0x18a4, 0x1078,
-+      0x2b27, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff, 0xa005, 0x007c,
-+      0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
-+      0x2091, 0x8000, 0x1078, 0x1765, 0x8738, 0xa784, 0x001f, 0x00c0,
-+      0x183a, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00,
-+      0x00c0, 0x183a, 0x2091, 0x8001, 0x007c, 0x0068, 0x185c, 0x2061,
-+      0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x185c, 0x78ac, 0x78af,
-+      0x0000, 0xa005, 0x00c0, 0x185d, 0x007c, 0xa08c, 0xfff0, 0x0040,
-+      0x1863, 0x1078, 0x1ce7, 0x0079, 0x1865, 0x1875, 0x1877, 0x187d,
-+      0x1881, 0x1875, 0x1885, 0x1875, 0x1875, 0x188b, 0x1875, 0x1892,
-+      0x1896, 0x1875, 0x1875, 0x1875, 0x1875, 0x1078, 0x1ce7, 0x1078,
-+      0x1830, 0x2001, 0x8001, 0x0078, 0x189c, 0x2001, 0x8003, 0x0078,
-+      0x189c, 0x2001, 0x8004, 0x0078, 0x189c, 0x1078, 0x1830, 0x2001,
-+      0x8006, 0x0078, 0x189c, 0x2001, 0x8009, 0x2011, 0x382c, 0x220c,
-+      0x0078, 0x11ec, 0x2001, 0x800c, 0x0078, 0x189c, 0x1078, 0x1830,
-+      0x2001, 0x800d, 0x0078, 0x189c, 0x70c2, 0x2061, 0x0000, 0x601b,
-+      0x0001, 0x2091, 0x4080, 0x007c, 0x2c04, 0x6082, 0x2c08, 0x2063,
-+      0x0000, 0x7864, 0x8000, 0x7866, 0x7868, 0xa005, 0x796a, 0x0040,
-+      0x18b4, 0x2c02, 0x0078, 0x18b5, 0x796e, 0x007c, 0x0c7e, 0x2061,
-+      0x3800, 0x6883, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6064, 0x8000,
-+      0x6066, 0x6068, 0xa005, 0x616a, 0x0040, 0x18c9, 0x2d02, 0x0078,
-+      0x18cc, 0x616e, 0x1078, 0x2b41, 0x0c7f, 0x007c, 0x1078, 0x18df,
-+      0x0040, 0x18de, 0x0c7e, 0x6098, 0xa065, 0x0040, 0x18d9, 0x1078,
-+      0x17a0, 0x0c7f, 0x609b, 0x0000, 0x1078, 0x173e, 0x007c, 0x786c,
-+      0xa065, 0x0040, 0x18f1, 0x2091, 0x8000, 0x7864, 0x8001, 0x7866,
-+      0x2c04, 0x786e, 0xa005, 0x00c0, 0x18ef, 0x786a, 0x8000, 0x2091,
-+      0x8001, 0x007c, 0x7898, 0xa005, 0x00c0, 0x194d, 0x7974, 0x70d0,
-+      0x0005, 0x0005, 0x72d0, 0xa206, 0x00c0, 0x18f7, 0x2200, 0xa106,
-+      0x00c0, 0x190e, 0x7804, 0xa005, 0x0040, 0x194d, 0x7807, 0x0000,
-+      0x0068, 0x194d, 0x2091, 0x4080, 0x0078, 0x194d, 0x1078, 0x1735,
-+      0x0040, 0x194d, 0x7a7c, 0x7b78, 0xa184, 0xff00, 0x0040, 0x1921,
-+      0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078,
-+      0x1924, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0x2009,
-+      0x0040, 0x1078, 0x1705, 0x0040, 0x1944, 0x1078, 0x173e, 0x7880,
-+      0x8000, 0x7882, 0xa086, 0x0002, 0x00c0, 0x194d, 0x2091, 0x8000,
-+      0x78af, 0x0002, 0x7883, 0x0000, 0x7898, 0xa085, 0x0003, 0x789a,
-+      0x2091, 0x8001, 0x0078, 0x194d, 0x7883, 0x0000, 0x1078, 0x1a99,
-+      0x6000, 0xa084, 0x0007, 0x0079, 0x194e, 0x007c, 0x1956, 0x1965,
-+      0x1985, 0x1956, 0x1997, 0x1956, 0x1956, 0x1956, 0x2039, 0x0400,
-+      0x78a8, 0xa705, 0x78aa, 0x6004, 0xa705, 0x6006, 0x1078, 0x19e2,
-+      0x6018, 0x78a6, 0x1078, 0x1a81, 0x007c, 0x78a8, 0xa084, 0x0100,
-+      0x0040, 0x196c, 0x0078, 0x1956, 0x78ab, 0x0000, 0x6000, 0x8007,
-+      0xa084, 0x00ff, 0x789e, 0x8001, 0x609b, 0x0000, 0x0040, 0x1982,
-+      0x1078, 0x19e2, 0x0040, 0x1982, 0x78a8, 0xa085, 0x0100, 0x78aa,
-+      0x0078, 0x1984, 0x1078, 0x1a06, 0x007c, 0x78a8, 0xa08c, 0x0e00,
-+      0x00c0, 0x198e, 0xa084, 0x0100, 0x00c0, 0x1990, 0x0078, 0x1956,
-+      0x1078, 0x19e2, 0x00c0, 0x1996, 0x1078, 0x1a06, 0x007c, 0x78a8,
-+      0xa084, 0x0100, 0x0040, 0x199e, 0x0078, 0x1956, 0x78ab, 0x0000,
-+      0x6710, 0x2011, 0x0001, 0x20a9, 0x0001, 0x6014, 0xa084, 0x00ff,
-+      0xa005, 0x0040, 0x19c1, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9,
-+      0x0020, 0xa08e, 0x0001, 0x0040, 0x19c1, 0x2039, 0x0000, 0x2011,
-+      0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0040, 0x19c1, 0x0078,
-+      0x19df, 0x1078, 0x1758, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000,
-+      0x682f, 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, 0x2d00, 0xa080,
-+      0x0010, 0x2068, 0x2091, 0x8001, 0x0070, 0x19d8, 0x0078, 0x19c4,
-+      0x8211, 0x0040, 0x19df, 0x20a9, 0x0100, 0x0078, 0x19c4, 0x1078,
-+      0x173e, 0x007c, 0x78a0, 0xa06d, 0x00c0, 0x19ed, 0x2c00, 0x78a2,
-+      0x78a6, 0x609b, 0x0000, 0x0078, 0x19f9, 0x2c00, 0x689a, 0x609b,
-+      0x0000, 0x78a2, 0x2d00, 0x6002, 0x78a4, 0xad06, 0x00c0, 0x19f9,
-+      0x6002, 0x789c, 0x8001, 0x789e, 0x00c0, 0x1a05, 0x78a8, 0xa084,
-+      0x0000, 0x78aa, 0x78a4, 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530,
-+      0x6118, 0xa184, 0x0060, 0x619e, 0x0040, 0x1a12, 0x0e7e, 0x1078,
-+      0x3199, 0x0e7f, 0x6592, 0x65a2, 0x6696, 0x66a6, 0x60ab, 0x0000,
-+      0x60af, 0x0000, 0x6710, 0x1078, 0x1758, 0x2091, 0x8000, 0x6808,
-+      0xa084, 0x0001, 0x0040, 0x1a34, 0x2091, 0x8001, 0x1078, 0x17ad,
-+      0x2091, 0x8000, 0x1078, 0x18a4, 0x2091, 0x8001, 0x78a3, 0x0000,
-+      0x78a7, 0x0000, 0x0078, 0x1a80, 0x6020, 0xa096, 0x0001, 0x00c0,
-+      0x1a3b, 0x8000, 0x6022, 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202,
-+      0x0048, 0x1a4a, 0x0040, 0x1a4a, 0x2039, 0x0200, 0x1078, 0x1a81,
-+      0x0078, 0x1a80, 0x2c08, 0x2091, 0x8000, 0x6800, 0xa065, 0x0040,
-+      0x1a52, 0x6102, 0x6902, 0x00c0, 0x1a56, 0x6906, 0x2160, 0x6003,
-+      0x0000, 0x6810, 0x8000, 0x6812, 0x78b8, 0x8000, 0x78ba, 0x2091,
-+      0x8001, 0x6808, 0xa08c, 0x0040, 0x0040, 0x1a76, 0xa086, 0x0040,
-+      0x680a, 0x1078, 0x17bc, 0x017e, 0x007e, 0x6930, 0x2100, 0x810f,
-+      0xa105, 0x6832, 0x6934, 0x693a, 0x007f, 0x017f, 0x2091, 0x8000,
-+      0x1078, 0x1b49, 0x2091, 0x8001, 0x78a7, 0x0000, 0x78a3, 0x0000,
-+      0x007c, 0x6004, 0xa705, 0x6006, 0x2091, 0x8000, 0x1078, 0x18a4,
-+      0x2091, 0x8001, 0x78a4, 0xa065, 0x0040, 0x1a94, 0x6098, 0x78a6,
-+      0x609b, 0x0000, 0x0078, 0x1a84, 0x78a3, 0x0000, 0x78a7, 0x0000,
-+      0x007c, 0x7970, 0x7874, 0x8000, 0xa10a, 0x00c8, 0x1aa0, 0xa006,
-+      0x7876, 0x70d2, 0x7804, 0xa005, 0x0040, 0x1aae, 0x8001, 0x7806,
-+      0x00c0, 0x1aae, 0x0068, 0x1aae, 0x2091, 0x4080, 0x007c, 0x0068,
-+      0x1ac9, 0x2029, 0x0000, 0x786c, 0xa065, 0x0040, 0x1ac4, 0x1078,
-+      0x1aca, 0x0040, 0x1ac4, 0x057e, 0x1078, 0x1ae8, 0x057f, 0x00c0,
-+      0x1ac4, 0x8528, 0x0078, 0x1ab3, 0x85ff, 0x0040, 0x1ac9, 0x2091,
-+      0x4080, 0x007c, 0x2091, 0x8000, 0x7b84, 0x7988, 0x72d4, 0x0005,
-+      0x0005, 0x70d4, 0xa206, 0x00c0, 0x1ace, 0x2200, 0xa102, 0x00c0,
-+      0x1ade, 0x2300, 0x2091, 0x8001, 0xa005, 0x007c, 0x0048, 0x1ae4,
-+      0xa302, 0x2091, 0x8001, 0x007c, 0x8002, 0x2091, 0x8001, 0x007c,
-+      0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1b3f,
-+      0x7008, 0x7208, 0xa206, 0x00c0, 0x1b3f, 0xa286, 0x0002, 0x00c0,
-+      0x1b3f, 0x2071, 0x0010, 0xa184, 0xff00, 0x0040, 0x1b08, 0x810f,
-+      0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, 0x1b0b,
-+      0x8107, 0x8004, 0x8004, 0x7a90, 0x7b8c, 0xa210, 0xa399, 0x0000,
-+      0x2009, 0x0018, 0x6024, 0xa005, 0x0040, 0x1b18, 0x2009, 0x0040,
-+      0x1078, 0x16d7, 0x0040, 0x1b31, 0x7894, 0x8000, 0x7896, 0xa086,
-+      0x0002, 0x00c0, 0x1b3f, 0x2091, 0x8000, 0x78af, 0x0003, 0x7897,
-+      0x0000, 0x7898, 0xa085, 0x0300, 0x789a, 0x2091, 0x8001, 0x0078,
-+      0x1b3f, 0x7897, 0x0000, 0x1078, 0x18ce, 0x7984, 0x7888, 0x8000,
-+      0xa10a, 0x00c8, 0x1b3c, 0xa006, 0x788a, 0x70d6, 0xa006, 0x2071,
-+      0x0010, 0x2091, 0x8001, 0x007c, 0x2009, 0x3868, 0x2091, 0x8000,
-+      0x200a, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3840, 0x2104, 0xa086,
-+      0x0000, 0x00c0, 0x1b62, 0x2009, 0x3812, 0x2104, 0xa005, 0x00c0,
-+      0x1b62, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1b62, 0x0018, 0x1b62,
-+      0x781b, 0x0044, 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2071,
-+      0x3840, 0x2079, 0x0100, 0x2019, 0x305e, 0x20a1, 0x012b, 0x2304,
-+      0xa005, 0x0040, 0x1b7c, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398,
-+      0x53a6, 0x3318, 0x0078, 0x1b6f, 0x789b, 0x0020, 0x20a9, 0x0010,
-+      0x78af, 0x0000, 0x78af, 0x0220, 0x0070, 0x1b88, 0x0078, 0x1b80,
-+      0x7003, 0x0000, 0x1078, 0x1c87, 0x7004, 0xa084, 0x000f, 0xa085,
-+      0x6280, 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080,
-+      0x780b, 0x0008, 0x7047, 0x387f, 0x7043, 0x0000, 0x127f, 0x2000,
-+      0x007c, 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0,
-+      0xa105, 0x2012, 0x1078, 0x1c87, 0x007c, 0x2011, 0x0101, 0x20a9,
-+      0x0009, 0x810b, 0x0070, 0x1bb6, 0x0078, 0x1bb1, 0xa18c, 0x0e00,
-+      0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101,
-+      0x20a9, 0x0005, 0x8213, 0x0070, 0x1bc7, 0x0078, 0x1bc2, 0xa294,
-+      0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011,
-+      0x0101, 0x20a9, 0x000c, 0x810b, 0x0070, 0x1bd8, 0x0078, 0x1bd3,
-+      0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c,
-+      0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c,
-+      0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a,
-+      0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022,
-+      0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae,
-+      0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061,
-+      0x0100, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c,
-+      0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a,
-+      0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c,
-+      0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x1c65,
-+      0x2061, 0x5c00, 0x1078, 0x1c6d, 0x0040, 0x1c53, 0x20a9, 0x0000,
-+      0x2061, 0x5b00, 0x0c7e, 0x1078, 0x1c6d, 0x0040, 0x1c3f, 0x0c7f,
-+      0x8c60, 0x0070, 0x1c3d, 0x0078, 0x1c32, 0x0078, 0x1c65, 0x007f,
-+      0xa082, 0x5b00, 0x2071, 0x3840, 0x70ba, 0x601c, 0xa085, 0x0800,
-+      0x601e, 0x71b6, 0x60a7, 0x0000, 0x2001, 0x0004, 0x70a2, 0x1078,
-+      0x1b44, 0x0078, 0x1c61, 0x2071, 0x3840, 0x601c, 0xa085, 0x0800,
-+      0x601e, 0x71b6, 0x60a7, 0x0000, 0x2001, 0x0006, 0x70a2, 0x1078,
-+      0x1b44, 0x2001, 0x0000, 0x0078, 0x1c67, 0x2001, 0x0001, 0x2091,
-+      0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040,
-+      0x1c84, 0x2060, 0x600c, 0xa306, 0x00c0, 0x1c81, 0x6008, 0xa206,
-+      0x00c0, 0x1c81, 0x6010, 0xa106, 0x00c0, 0x1c81, 0xa006, 0x0078,
-+      0x1c86, 0x6000, 0x0078, 0x1c6e, 0xa085, 0x0001, 0x007c, 0x2011,
-+      0x3841, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084,
-+      0x0100, 0x0040, 0x1c96, 0x2021, 0xff00, 0x2122, 0x007c, 0x0e7e,
-+      0x68e4, 0xa08c, 0x0020, 0x0040, 0x1ce5, 0xa084, 0x0006, 0x00c0,
-+      0x1ce5, 0x6010, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xa0f0, 0x3a80, 0x7004, 0xa084, 0x000a, 0x00c0, 0x1ce5, 0x7108,
-+      0xa194, 0xff00, 0x0040, 0x1ce5, 0xa18c, 0x00ff, 0x7104, 0xa084,
-+      0x0014, 0x00c0, 0x1cd2, 0x017e, 0x611c, 0xa18d, 0x0002, 0x611e,
-+      0x017f, 0xa085, 0x0014, 0x7006, 0x2001, 0x000c, 0xa106, 0x0040,
-+      0x1cce, 0x2100, 0x8003, 0x2008, 0x0078, 0x1ce2, 0x2009, 0x0019,
-+      0x0078, 0x1ce2, 0x2011, 0x0000, 0x7000, 0xa084, 0xdfff, 0x7002,
-+      0x7004, 0xa084, 0xffef, 0x7006, 0x017e, 0x611c, 0xa18d, 0x0002,
-+      0x611e, 0x017f, 0x2100, 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068,
-+      0x1ce7, 0x007e, 0x2071, 0x0000, 0x7018, 0xa084, 0x0001, 0x00c0,
-+      0x1cec, 0x007f, 0x2e08, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6,
-+      0x70c3, 0x8002, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x007f, 0x2070, 0x007f, 0x0078, 0x1d03, 0x107e, 0x007e, 0x127e,
-+      0x2091, 0x2300, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0xa594, 0x003f,
-+      0xa484, 0x4000, 0x0040, 0x1d1a, 0xa784, 0x007c, 0x00c0, 0x3022,
-+      0x1078, 0x1ce7, 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x1d22,
-+      0x1078, 0x1ce7, 0x8507, 0xa084, 0x000f, 0x0079, 0x1d27, 0x21a1,
-+      0x2251, 0x2277, 0x24cf, 0x2787, 0x27cf, 0x2808, 0x2883, 0x28dd,
-+      0x2962, 0x1d4d, 0x1d37, 0x1fb8, 0x208d, 0x2766, 0x1d37, 0x1078,
-+      0x1ce7, 0x0018, 0x1d0a, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f,
-+      0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030, 0xa005, 0x0040,
-+      0x1d4b, 0x7033, 0x0000, 0x0018, 0x1d0a, 0x705c, 0xa005, 0x00c0,
-+      0x1df8, 0x70a0, 0xa084, 0x001f, 0x0079, 0x1d56, 0x1e18, 0x1d5e,
-+      0x1d6c, 0x1d8d, 0x1db3, 0x1ddf, 0x1ddd, 0x1d5e, 0x7808, 0xa084,
-+      0xfffd, 0x780a, 0x2009, 0x0046, 0x1078, 0x260f, 0x00c0, 0x1d6a,
-+      0x7003, 0x0004, 0x0078, 0x1d39, 0x1078, 0x2fe4, 0x00c0, 0x1d8b,
-+      0x70b4, 0x8007, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0x78ab,
-+      0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009,
-+      0x00f7, 0x1078, 0x260d, 0x00c0, 0x1d8b, 0x7003, 0x0004, 0x70c3,
-+      0x000f, 0x7033, 0x3870, 0x0078, 0x1d39, 0x1078, 0x2fe4, 0x00c0,
-+      0x1db1, 0x71b4, 0x8107, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010,
-+      0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b,
-+      0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009, 0x00f7, 0x1078,
-+      0x260d, 0x00c0, 0x1db1, 0x7003, 0x0004, 0x70c3, 0x000f, 0x7033,
-+      0x3870, 0x0078, 0x1d39, 0x1078, 0x2fe4, 0x00c0, 0x1ddb, 0x71b4,
-+      0x8107, 0x789b, 0x007e, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x0007,
-+      0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab,
-+      0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009,
-+      0x00f7, 0x1078, 0x260d, 0x00c0, 0x1ddb, 0x7003, 0x0004, 0x70c3,
-+      0x000f, 0x7033, 0x3870, 0x0078, 0x1d39, 0x0078, 0x1d8d, 0x1078,
-+      0x2fe4, 0x00c0, 0x1d39, 0x70bc, 0x2068, 0x789b, 0x0010, 0x6f10,
-+      0x1078, 0x2f11, 0x2c50, 0x6810, 0xa084, 0x001f, 0xa085, 0x0080,
-+      0x78aa, 0x6e18, 0x2041, 0x0001, 0x2001, 0x0004, 0x0078, 0x1f41,
-+      0x1078, 0x2fe4, 0x00c0, 0x1d39, 0x789b, 0x0010, 0x705c, 0x2068,
-+      0x6f10, 0x1078, 0x2f11, 0x2c50, 0x6008, 0xa085, 0x0010, 0x600a,
-+      0x6810, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x2031, 0x0020,
-+      0x2041, 0x0001, 0x1078, 0x304b, 0x2001, 0x0003, 0x0078, 0x1f2c,
-+      0x0018, 0x1d0a, 0x7440, 0xa485, 0x0000, 0x0040, 0x1e32, 0xa080,
-+      0x3880, 0x2030, 0x7144, 0x8108, 0xa12a, 0x0048, 0x1e29, 0x2009,
-+      0x3880, 0x2164, 0x6504, 0x85ff, 0x00c0, 0x1e3f, 0x8421, 0x00c0,
-+      0x1e23, 0x7146, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1d39,
-+      0x7640, 0xa6b0, 0x3880, 0x7144, 0x2600, 0x0078, 0x1e2e, 0x7146,
-+      0x2568, 0x2558, 0x753e, 0x2c50, 0x603c, 0xa085, 0x0000, 0x00c0,
-+      0x1e3c, 0x6708, 0x7736, 0xa784, 0x033f, 0x0040, 0x1e75, 0xa784,
-+      0x0021, 0x00c0, 0x1e3c, 0xa784, 0x0002, 0x0040, 0x1e5e, 0xa784,
-+      0x0004, 0x0040, 0x1e3c, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008,
-+      0x00c0, 0x1e3c, 0xa784, 0x0010, 0x00c0, 0x1e3c, 0xa184, 0x0200,
-+      0x00c0, 0x1e3c, 0xa784, 0x0100, 0x0040, 0x1e75, 0x6018, 0xa005,
-+      0x00c0, 0x1e3c, 0xa7bc, 0xfeff, 0x670a, 0x681f, 0x0000, 0x6e18,
-+      0xa684, 0x000e, 0x6118, 0x0040, 0x1e85, 0x601c, 0xa102, 0x0048,
-+      0x1e92, 0x0040, 0x1e92, 0x0078, 0x1e38, 0x81ff, 0x0040, 0x1e92,
-+      0x6828, 0x8007, 0xa084, 0x00ff, 0xa082, 0x0003, 0x0040, 0x1e92,
-+      0x00c0, 0x1e38, 0xa184, 0x0400, 0x00c0, 0x1ea1, 0x6130, 0xa18c,
-+      0xff00, 0x810f, 0x6030, 0xa084, 0xff00, 0xa105, 0x6032, 0x0078,
-+      0x1ea5, 0x6034, 0x603a, 0xa7bc, 0xfbff, 0xa784, 0x0080, 0x00c0,
-+      0x1eab, 0x700c, 0x6022, 0xa7bc, 0xff7f, 0x670a, 0x6b10, 0x8307,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2060,
-+      0x2048, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0x2a60, 0x0018,
-+      0x1d0a, 0x789b, 0x0010, 0xa046, 0x1078, 0x2fe4, 0x00c0, 0x1d39,
-+      0x6b10, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000,
-+      0x0040, 0x1ed6, 0xa684, 0x0001, 0x0040, 0x1ed8, 0xa39c, 0xffbf,
-+      0xa684, 0x0010, 0x0040, 0x1ede, 0xa39d, 0x0020, 0x7baa, 0x8840,
-+      0xa684, 0x000e, 0x00c0, 0x1ee9, 0xa7bd, 0x0010, 0x670a, 0x0078,
-+      0x1f2a, 0x714c, 0xa18c, 0x0800, 0x0040, 0x2b74, 0x2011, 0x0021,
-+      0x8004, 0x8004, 0x0048, 0x1f00, 0x2011, 0x0022, 0x8004, 0x0048,
-+      0x1f00, 0x2011, 0x0020, 0x8004, 0x0048, 0x1f00, 0x0040, 0x1f2a,
-+      0x7aaa, 0x8840, 0x1078, 0x2ffd, 0x6a10, 0x610c, 0x8108, 0xa18c,
-+      0x00ff, 0xa1e0, 0x5b00, 0x2c64, 0x8cff, 0x0040, 0x1f21, 0x6010,
-+      0xa206, 0x00c0, 0x1f0b, 0x60b4, 0x8001, 0x60b6, 0x00c0, 0x1f06,
-+      0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078,
-+      0x1e18, 0x1078, 0x2fe4, 0x00c0, 0x1d39, 0x2a60, 0x610e, 0x79aa,
-+      0x8840, 0x712e, 0x2001, 0x0001, 0x007e, 0x7150, 0xa184, 0x0018,
-+      0x0040, 0x1f40, 0xa184, 0x0010, 0x0040, 0x1f3a, 0x1078, 0x2d3d,
-+      0x00c0, 0x1f40, 0xa184, 0x0008, 0x0040, 0x1f40, 0x1078, 0x2c58,
-+      0x007f, 0x7002, 0xa68c, 0x0060, 0x88ff, 0x0040, 0x1f49, 0xa18d,
-+      0x0004, 0x795a, 0x69b2, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b,
-+      0x0061, 0x6814, 0xa085, 0x8000, 0x6816, 0x78aa, 0x157e, 0x137e,
-+      0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+      0x000a, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6810, 0x8007,
-+      0x789b, 0x007e, 0x78aa, 0x6d90, 0x7dd6, 0x7dde, 0x6e94, 0x7ed2,
-+      0x7eda, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x1f78, 0x0098, 0x1f80,
-+      0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2ffd, 0x0078, 0x1d41,
-+      0x7200, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x1f8d, 0x781b,
-+      0x0049, 0x1078, 0x2ffd, 0x0078, 0x1f9e, 0x6ab0, 0xa295, 0x2000,
-+      0x7a5a, 0x781b, 0x0049, 0x1078, 0x2ffd, 0x7200, 0x2500, 0xa605,
-+      0x0040, 0x1f9e, 0xa284, 0x0007, 0x1079, 0x1fae, 0xad80, 0x0008,
-+      0x7032, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x1fac, 0x6018,
-+      0x8000, 0x601a, 0x1078, 0x2b4b, 0x0078, 0x1d39, 0x1fb6, 0x3376,
-+      0x3376, 0x3365, 0x3376, 0x1fb6, 0x1fb6, 0x1fb6, 0x1078, 0x1ce7,
-+      0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x3800, 0x7898,
-+      0x0f7f, 0xa084, 0x0001, 0x0040, 0x1fde, 0x70a0, 0xa086, 0x0001,
-+      0x00c0, 0x1fcd, 0x70a2, 0x0078, 0x2071, 0x70a0, 0xa086, 0x0005,
-+      0x00c0, 0x1fdc, 0x70bc, 0x2068, 0x6817, 0x0004, 0x6813, 0x0000,
-+      0x681c, 0xa085, 0x0008, 0x681e, 0x70a3, 0x0000, 0x157e, 0x2011,
-+      0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, 0x2000, 0xa186, 0x0007,
-+      0x00c0, 0x1ff0, 0x2009, 0x382b, 0x200b, 0x0005, 0x0078, 0x2000,
-+      0x2009, 0x3813, 0x2104, 0x2009, 0x3812, 0x200a, 0x2009, 0x382b,
-+      0x200b, 0x0001, 0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x2002,
-+      0x70a3, 0x0000, 0x1078, 0x314d, 0x20a9, 0x0010, 0x2039, 0x0000,
-+      0x1078, 0x2e16, 0xa7b8, 0x0100, 0x0070, 0x2010, 0x0078, 0x2008,
-+      0x7000, 0x2020, 0x0079, 0x2014, 0x2042, 0x202b, 0x202b, 0x201e,
-+      0x2042, 0x2042, 0x201c, 0x201c, 0x1078, 0x1ce7, 0x2021, 0x3857,
-+      0x2404, 0xa005, 0x0040, 0x202b, 0xad06, 0x00c0, 0x202b, 0x6800,
-+      0x2022, 0x0078, 0x203b, 0x681c, 0xa084, 0x0001, 0x00c0, 0x2037,
-+      0x6f10, 0x1078, 0x2f11, 0x1078, 0x2b06, 0x0078, 0x203b, 0x7054,
-+      0x2060, 0x6800, 0x6002, 0x6a16, 0x681c, 0xa085, 0x0008, 0x681e,
-+      0x1078, 0x18b6, 0x2021, 0x5c00, 0x1078, 0x2077, 0x2021, 0x3857,
-+      0x1078, 0x2077, 0x20a9, 0x0000, 0x2021, 0x5b00, 0x1078, 0x2077,
-+      0x8420, 0x0070, 0x2055, 0x0078, 0x204e, 0x1078, 0x2b55, 0x2061,
-+      0x3b00, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0xa102,
-+      0x6012, 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x2069, 0x0078,
-+      0x205d, 0x2009, 0x382f, 0x200b, 0x0000, 0x8421, 0x00c0, 0x205b,
-+      0x157f, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1d39, 0x047e,
-+      0x2404, 0xa005, 0x0040, 0x2089, 0x2068, 0x6800, 0x007e, 0x6a16,
-+      0x681c, 0xa085, 0x0008, 0x681e, 0x1078, 0x18b6, 0x007f, 0x0078,
-+      0x2079, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050,
-+      0x2093, 0x1078, 0x1ce7, 0x2300, 0x0079, 0x2096, 0x2099, 0x210c,
-+      0x211a, 0xa282, 0x0002, 0x0040, 0x209f, 0x1078, 0x1ce7, 0x70a0,
-+      0x70a3, 0x0000, 0x70c3, 0x0000, 0x0079, 0x20a6, 0x20ae, 0x20ae,
-+      0x20b0, 0x20e4, 0x2b7a, 0x20ae, 0x20e4, 0x20ae, 0x1078, 0x1ce7,
-+      0x77b4, 0x1078, 0x2e16, 0x77b4, 0xa7bc, 0x0f00, 0x1078, 0x2f11,
-+      0x6018, 0xa005, 0x0040, 0x20db, 0x2021, 0x5c00, 0x2009, 0x0004,
-+      0x2011, 0x0010, 0x1078, 0x216a, 0x0040, 0x20db, 0x157e, 0x20a9,
-+      0x0000, 0x2021, 0x5b00, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010,
-+      0x1078, 0x216a, 0x047f, 0x0040, 0x20da, 0x8420, 0x0070, 0x20da,
-+      0x0078, 0x20cb, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0, 0x20b6,
-+      0x0078, 0x1d41, 0x0078, 0x1d41, 0x77b4, 0x1078, 0x2f11, 0x6018,
-+      0xa005, 0x0040, 0x210a, 0x2021, 0x5c00, 0x2009, 0x0005, 0x2011,
-+      0x0020, 0x1078, 0x216a, 0x0040, 0x210a, 0x157e, 0x20a9, 0x0000,
-+      0x2021, 0x5b00, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078,
-+      0x216a, 0x047f, 0x0040, 0x2109, 0x8420, 0x0070, 0x2109, 0x0078,
-+      0x20fa, 0x157f, 0x0078, 0x1d41, 0x2200, 0x0079, 0x210f, 0x2112,
-+      0x2114, 0x2114, 0x1078, 0x1ce7, 0x70a3, 0x0000, 0x70a7, 0x0001,
-+      0x0078, 0x1d39, 0x2200, 0x0079, 0x211d, 0x2122, 0x2114, 0x2120,
-+      0x1078, 0x1ce7, 0x1078, 0x261c, 0x70a0, 0xa086, 0x0002, 0x00c0,
-+      0x2159, 0x77b4, 0x1078, 0x2e16, 0x77b4, 0xa7bc, 0x0f00, 0x1078,
-+      0x2f11, 0x6018, 0xa005, 0x0040, 0x2154, 0x2021, 0x5c00, 0x2009,
-+      0x0005, 0x2011, 0x0020, 0x1078, 0x216a, 0x0040, 0x2154, 0x157e,
-+      0x20a9, 0x0000, 0x2021, 0x5b00, 0x047e, 0x2009, 0x0005, 0x2011,
-+      0x0020, 0x1078, 0x216a, 0x047f, 0x0040, 0x2153, 0x8420, 0x0070,
-+      0x2153, 0x0078, 0x2144, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0,
-+      0x212f, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2acd, 0x1078, 0x2b1e,
-+      0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2ac0, 0x0040, 0x2acd,
-+      0x0078, 0x1e18, 0x2404, 0xa005, 0x0040, 0x219d, 0x2068, 0x2d04,
-+      0x007e, 0x6810, 0xa706, 0x0040, 0x2179, 0x2d20, 0x007f, 0x0078,
-+      0x216b, 0x007f, 0x2022, 0x6916, 0x6814, 0xa086, 0x0050, 0x00c0,
-+      0x218c, 0x6817, 0x0006, 0x2200, 0xa086, 0x0010, 0x00c0, 0x218c,
-+      0x681c, 0xa084, 0xffef, 0x681e, 0x681c, 0xa205, 0x681e, 0x1078,
-+      0x18b6, 0x1078, 0x2b27, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084,
-+      0xffef, 0x600a, 0x1078, 0x2b1e, 0x007c, 0xa085, 0x0001, 0x0078,
-+      0x219c, 0x2300, 0x0079, 0x21a4, 0x21a9, 0x21a7, 0x21ec, 0x1078,
-+      0x1ce7, 0x78e4, 0xa005, 0x00d0, 0x21cc, 0x0018, 0x21cc, 0x2008,
-+      0xa084, 0x0030, 0x00c0, 0x21b8, 0x781b, 0x0049, 0x0078, 0x1d39,
-+      0x78ec, 0xa084, 0x0003, 0x0040, 0x21b4, 0x2100, 0xa084, 0x0007,
-+      0x0079, 0x21c2, 0x21da, 0x21e0, 0x21d4, 0x21ca, 0x2fde, 0x2fde,
-+      0x21ca, 0x21e6, 0x1078, 0x1ce7, 0x7000, 0xa005, 0x0040, 0x1d41,
-+      0x2001, 0x0003, 0x0078, 0x24e3, 0x1078, 0x2df9, 0x781b, 0x0055,
-+      0x0078, 0x1d39, 0x1078, 0x2df9, 0x781b, 0x00dc, 0x0078, 0x1d39,
-+      0x1078, 0x2df9, 0x781b, 0x00e3, 0x0078, 0x1d39, 0x1078, 0x2df9,
-+      0x781b, 0x009d, 0x0078, 0x1d39, 0xa584, 0x000f, 0x00c0, 0x2216,
-+      0x1078, 0x261c, 0x7000, 0x0079, 0x21f5, 0x21fd, 0x220a, 0x21fd,
-+      0x2acd, 0x21ff, 0x2acd, 0x21fd, 0x21fd, 0x1078, 0x1ce7, 0x71a0,
-+      0x70a3, 0x0000, 0xa186, 0x0004, 0x00c0, 0x2208, 0x0078, 0x2b7a,
-+      0x0078, 0x2acd, 0x1078, 0x2b1e, 0x6008, 0xa084, 0xffef, 0x600a,
-+      0x1078, 0x2ac0, 0x0040, 0x2acd, 0x0078, 0x1e18, 0x78e4, 0xa005,
-+      0x00d0, 0x21cc, 0x0018, 0x21cc, 0x2008, 0xa084, 0x0030, 0x00c0,
-+      0x2225, 0x781b, 0x0049, 0x0078, 0x1d39, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x2221, 0x2100, 0xa184, 0x0007, 0x0079, 0x222f, 0x223f,
-+      0x2245, 0x2239, 0x2237, 0x2fde, 0x2fde, 0x2237, 0x2fd6, 0x1078,
-+      0x1ce7, 0x1078, 0x2e01, 0x781b, 0x0055, 0x0078, 0x1d39, 0x1078,
-+      0x2e01, 0x781b, 0x00dc, 0x0078, 0x1d39, 0x1078, 0x2e01, 0x781b,
-+      0x00e3, 0x0078, 0x1d39, 0x1078, 0x2e01, 0x781b, 0x009d, 0x0078,
-+      0x1d39, 0x2300, 0x0079, 0x2254, 0x2259, 0x2257, 0x225b, 0x1078,
-+      0x1ce7, 0x0078, 0x2883, 0x6817, 0x0008, 0x78a3, 0x0000, 0x79e4,
-+      0xa184, 0x0030, 0x0040, 0x2883, 0x78ec, 0xa084, 0x0003, 0x0040,
-+      0x2883, 0xa184, 0x0007, 0x0079, 0x226d, 0x21da, 0x21e0, 0x21d4,
-+      0x2fb6, 0x2fde, 0x2fde, 0x2275, 0x2fd6, 0x1078, 0x1ce7, 0xa282,
-+      0x0005, 0x0050, 0x227d, 0x1078, 0x1ce7, 0x2300, 0x0079, 0x2280,
-+      0x2283, 0x24b7, 0x24c3, 0x2200, 0x0079, 0x2286, 0x228b, 0x228d,
-+      0x22a0, 0x228b, 0x249c, 0x1078, 0x1ce7, 0x789b, 0x0018, 0x78a8,
-+      0xa084, 0x00ff, 0xa082, 0x0020, 0x0048, 0x2dda, 0xa08a, 0x0004,
-+      0x00c8, 0x2dda, 0x0079, 0x229c, 0x2dda, 0x2dda, 0x2dda, 0x2d7c,
-+      0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x22b5, 0xa184,
-+      0x0018, 0x0040, 0x22b1, 0x0078, 0x2dda, 0x7000, 0xa005, 0x00c0,
-+      0x22ab, 0x2011, 0x0003, 0x0078, 0x2970, 0xa184, 0x00ff, 0xa08c,
-+      0x0080, 0x0040, 0x22e9, 0x7000, 0xa086, 0x0001, 0x00c0, 0x22c8,
-+      0x1078, 0x2b1e, 0x1078, 0x314d, 0x7034, 0x600a, 0x0078, 0x22cd,
-+      0x7000, 0xa086, 0x0003, 0x0040, 0x22c2, 0x7003, 0x0005, 0x2001,
-+      0x5c10, 0x2068, 0x703e, 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003,
-+      0x0000, 0x8000, 0x0070, 0x22de, 0x0078, 0x22d7, 0x157f, 0x6813,
-+      0x0000, 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823, 0x0003, 0x0078,
-+      0x2dda, 0xa08a, 0x0010, 0x00c8, 0x2dda, 0x0079, 0x22ef, 0x2301,
-+      0x22ff, 0x2317, 0x2319, 0x23ab, 0x2dda, 0x2dda, 0x23ad, 0x2dda,
-+      0x2dda, 0x2498, 0x2498, 0x2dda, 0x2dda, 0x2dda, 0x249a, 0x1078,
-+      0x1ce7, 0xa684, 0x1000, 0x0040, 0x230e, 0x2001, 0x0300, 0x8000,
-+      0x8000, 0x783a, 0x781b, 0x009a, 0x0078, 0x1d39, 0x6814, 0xa084,
-+      0x8000, 0x0040, 0x2315, 0x6817, 0x0003, 0x0078, 0x2fb6, 0x1078,
-+      0x1ce7, 0x691c, 0x691e, 0xa684, 0x1800, 0x00c0, 0x2333, 0x681c,
-+      0xa084, 0x0001, 0x00c0, 0x233b, 0x6814, 0xa086, 0x0008, 0x00c0,
-+      0x232b, 0x6817, 0x0000, 0xa684, 0x0400, 0x0040, 0x23a7, 0x781b,
-+      0x0058, 0x0078, 0x1d39, 0xa684, 0x1000, 0x0040, 0x233b, 0x781b,
-+      0x0058, 0x0078, 0x1d39, 0xa684, 0x0060, 0x0040, 0x23a3, 0xa684,
-+      0x0800, 0x0040, 0x23a3, 0xa684, 0x8000, 0x00c0, 0x2349, 0x0078,
-+      0x2363, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb2, 0x789b, 0x0074, 0x7aac,
-+      0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2356, 0x8000, 0xa084, 0x003f,
-+      0xa108, 0xa291, 0x0000, 0x6b94, 0x2100, 0xa302, 0x68ae, 0x6b90,
-+      0x2200, 0xa303, 0x68aa, 0xa684, 0x4000, 0x0040, 0x236b, 0xa6b4,
-+      0xbfff, 0x7e5a, 0x6eb2, 0x7000, 0xa086, 0x0003, 0x00c0, 0x2378,
-+      0x1078, 0x31c0, 0x1078, 0x3365, 0x781b, 0x0067, 0x0078, 0x1d39,
-+      0xa006, 0x1078, 0x3414, 0x6aac, 0x69a8, 0x6c94, 0x6b90, 0x2200,
-+      0xa105, 0x0040, 0x2387, 0x2200, 0xa422, 0x2100, 0xa31b, 0x7cd2,
-+      0x7bd6, 0x2300, 0xa405, 0x00c0, 0x2395, 0xa6b5, 0x4000, 0x7e5a,
-+      0x6eb2, 0x781b, 0x0067, 0x0078, 0x1d39, 0x781b, 0x0067, 0x2200,
-+      0xa115, 0x00c0, 0x239f, 0x1078, 0x3376, 0x0078, 0x1d39, 0x1078,
-+      0x339d, 0x0078, 0x1d39, 0x781b, 0x006a, 0x0078, 0x1d39, 0x781b,
-+      0x0058, 0x0078, 0x1d39, 0x1078, 0x1ce7, 0x0078, 0x240a, 0x691c,
-+      0xa184, 0x0100, 0x0040, 0x23c5, 0xa18c, 0xfeff, 0x691e, 0x0c7e,
-+      0x7048, 0x2060, 0x6000, 0xa084, 0xefff, 0x6002, 0x6004, 0xa084,
-+      0xfff5, 0x6006, 0x0c7f, 0x0078, 0x23f9, 0xa184, 0x0200, 0x0040,
-+      0x23f9, 0xa18c, 0xfdff, 0x691e, 0x0c7e, 0x7048, 0x2060, 0x6000,
-+      0xa084, 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef, 0x6006, 0x2008,
-+      0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x23f9, 0x1078, 0x2f0d,
-+      0x1078, 0x2c58, 0x88ff, 0x0040, 0x23f9, 0x789b, 0x0060, 0x2800,
-+      0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+      0x23f5, 0x781b, 0x0055, 0x0078, 0x1d39, 0x781b, 0x0069, 0x0078,
-+      0x1d39, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2402, 0x781b, 0x0058,
-+      0x0078, 0x1d39, 0x781b, 0x006a, 0x0078, 0x1d39, 0x0078, 0x2de0,
-+      0x0078, 0x2de0, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040,
-+      0x2408, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001,
-+      0x00c0, 0x242d, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040,
-+      0x2425, 0x0048, 0x2425, 0x0078, 0x2427, 0x0078, 0x23af, 0x24a8,
-+      0x7aa8, 0x00f0, 0x2427, 0x0078, 0x2413, 0xa284, 0x00f0, 0xa086,
-+      0x0020, 0x00c0, 0x2489, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040,
-+      0x243d, 0x0048, 0x243d, 0x0078, 0x2486, 0xa286, 0x0023, 0x0040,
-+      0x2408, 0x6818, 0xa084, 0xfff1, 0x681a, 0x7e58, 0xa684, 0xfff1,
-+      0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008, 0xa085, 0x0010, 0x600a,
-+      0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184,
-+      0x0010, 0x0040, 0x2461, 0x1078, 0x2f0d, 0x1078, 0x2d3d, 0x0078,
-+      0x2470, 0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f,
-+      0xa184, 0x0008, 0x0040, 0x23f9, 0x1078, 0x2f0d, 0x1078, 0x2c58,
-+      0x88ff, 0x0040, 0x23f9, 0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5,
-+      0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2482, 0x781b, 0x0055,
-+      0x0078, 0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39, 0x7aa8, 0x0078,
-+      0x2413, 0x8318, 0x2300, 0xa102, 0x0040, 0x2492, 0x0048, 0x2492,
-+      0x0078, 0x2413, 0xa284, 0x0080, 0x00c0, 0x2de6, 0x0078, 0x2de0,
-+      0x0078, 0x2de6, 0x0078, 0x2dda, 0x789b, 0x0018, 0x78a8, 0xa084,
-+      0x00ff, 0xa08e, 0x0001, 0x0040, 0x24a7, 0x1078, 0x1ce7, 0x7aa8,
-+      0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8,
-+      0x2dda, 0x0079, 0x24b3, 0x2dda, 0x2bab, 0x2dda, 0x2cd8, 0xa282,
-+      0x0000, 0x00c0, 0x24bd, 0x1078, 0x1ce7, 0x1078, 0x2df9, 0x781b,
-+      0x0069, 0x0078, 0x1d39, 0xa282, 0x0003, 0x00c0, 0x24c9, 0x1078,
-+      0x1ce7, 0x1078, 0x2e09, 0x781b, 0x0069, 0x0078, 0x1d39, 0xa282,
-+      0x0004, 0x0050, 0x24d5, 0x1078, 0x1ce7, 0x2300, 0x0079, 0x24d8,
-+      0x24db, 0x25c6, 0x25f7, 0xa286, 0x0003, 0x0040, 0x24e1, 0x1078,
-+      0x1ce7, 0x2001, 0x0000, 0x703a, 0x7000, 0xa084, 0x0007, 0x0079,
-+      0x24e9, 0x24f1, 0x24f3, 0x24f3, 0x2703, 0x274c, 0x26cd, 0x24f1,
-+      0x24f1, 0x1078, 0x1ce7, 0xa684, 0x1000, 0x00c0, 0x24fb, 0x1078,
-+      0x314d, 0x0040, 0x25a0, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2557,
-+      0xa186, 0x0008, 0x00c0, 0x2512, 0x6008, 0xa084, 0xffef, 0x600a,
-+      0x1078, 0x2ac0, 0x0040, 0x2557, 0x1078, 0x2b1e, 0x1078, 0x314d,
-+      0x0078, 0x253e, 0xa186, 0x0028, 0x00c0, 0x2557, 0x1078, 0x314d,
-+      0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2b34, 0x6018, 0xa005,
-+      0x0040, 0x253e, 0x8001, 0x601a, 0xa005, 0x0040, 0x2534, 0x8001,
-+      0xa005, 0x0040, 0x2534, 0x601e, 0x0078, 0x253e, 0x6813, 0x0028,
-+      0x6817, 0x0000, 0x0078, 0x25b5, 0x6030, 0xa084, 0x00ff, 0xa005,
-+      0x0040, 0x252e, 0x6008, 0xa085, 0x0200, 0x600a, 0x681c, 0xa084,
-+      0x0001, 0x0040, 0x1d41, 0x681c, 0xa084, 0xfffe, 0x681e, 0x7054,
-+      0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005,
-+      0x2d00, 0x00c0, 0x2554, 0x6002, 0x6006, 0x0078, 0x1d41, 0x017e,
-+      0x1078, 0x261c, 0x017f, 0xa684, 0xdf00, 0x681a, 0x6827, 0x0000,
-+      0x6f10, 0x81ff, 0x0040, 0x25a0, 0xa186, 0x0002, 0x00c0, 0x2598,
-+      0xa684, 0x0800, 0x00c0, 0x2574, 0xa684, 0x0060, 0x0040, 0x2574,
-+      0x78d8, 0x7adc, 0x682e, 0x6a2a, 0x8717, 0xa294, 0x000f, 0x8213,
-+      0x8213, 0x8213, 0xa290, 0x3a80, 0xa290, 0x0000, 0x221c, 0xa384,
-+      0x0100, 0x00c0, 0x2585, 0x0078, 0x258b, 0x8210, 0x2204, 0xa085,
-+      0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2598, 0x689c,
-+      0xa084, 0x0100, 0x00c0, 0x2598, 0x1078, 0x268c, 0x0078, 0x1d41,
-+      0xa186, 0x0018, 0x0040, 0x25a0, 0xa186, 0x0014, 0x0040, 0x1d41,
-+      0x6912, 0x6814, 0xa084, 0x8000, 0x0040, 0x25a8, 0x7038, 0x6816,
-+      0xa68c, 0xdf00, 0x691a, 0x1078, 0x2b0d, 0x1078, 0x2b1e, 0x00c0,
-+      0x25b5, 0x6008, 0xa084, 0xffef, 0x600a, 0x681c, 0xa084, 0x0001,
-+      0x00c0, 0x25be, 0x1078, 0x2b06, 0x0078, 0x25c2, 0x7054, 0x2060,
-+      0x6800, 0x6002, 0x1078, 0x18b6, 0x0078, 0x1d41, 0xa282, 0x0004,
-+      0x0048, 0x25cc, 0x1078, 0x1ce7, 0x2200, 0x0079, 0x25cf, 0x25d3,
-+      0x25d5, 0x25e2, 0x25d5, 0x1078, 0x1ce7, 0x7000, 0xa086, 0x0005,
-+      0x0040, 0x25de, 0x1078, 0x2df9, 0x781b, 0x0069, 0x781b, 0x006a,
-+      0x0078, 0x1d39, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080,
-+      0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0040,
-+      0x25f3, 0x0078, 0x2dda, 0x781b, 0x006a, 0x0078, 0x1d39, 0x681c,
-+      0xa085, 0x0004, 0x681e, 0x82ff, 0x00c0, 0x2602, 0x1078, 0x2df9,
-+      0x0078, 0x2609, 0x8211, 0x0040, 0x2607, 0x1078, 0x1ce7, 0x1078,
-+      0x2e09, 0x781b, 0x0069, 0x0078, 0x1d39, 0x1078, 0x2ffd, 0x7830,
-+      0xa084, 0x00c0, 0x00c0, 0x2619, 0x0018, 0x2619, 0x791a, 0xa006,
-+      0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0, 0x2626,
-+      0x682f, 0x0000, 0x682b, 0x0000, 0x0078, 0x268b, 0xa684, 0x0800,
-+      0x00c0, 0x2635, 0x68b0, 0xa084, 0x4800, 0xa635, 0xa684, 0x0800,
-+      0x00c0, 0x2635, 0x1078, 0x314d, 0x007c, 0xa684, 0x0020, 0x0040,
-+      0x265f, 0x78d0, 0x8003, 0x00c8, 0x2643, 0xa006, 0x1078, 0x3414,
-+      0x78d4, 0x1078, 0x3479, 0xa684, 0x4000, 0x0040, 0x264d, 0x682f,
-+      0x0000, 0x682b, 0x0000, 0x0078, 0x2632, 0x68b0, 0xa084, 0x4800,
-+      0xa635, 0xa684, 0x4000, 0x00c0, 0x2647, 0x7038, 0xa005, 0x00c0,
-+      0x2659, 0x79d8, 0x7adc, 0x692e, 0x6a2a, 0x0078, 0x2632, 0xa684,
-+      0x4000, 0x0040, 0x2669, 0x682f, 0x0000, 0x682b, 0x0000, 0x0078,
-+      0x2632, 0x68b0, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0,
-+      0x2663, 0x7038, 0xa005, 0x00c0, 0x2675, 0x79d8, 0x7adc, 0x78d0,
-+      0x80f3, 0x00c8, 0x267c, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+      0x0000, 0x692e, 0x6a2a, 0x2100, 0xa205, 0x00c0, 0x2689, 0x0078,
-+      0x2632, 0x1078, 0x3414, 0x007c, 0xa384, 0x0200, 0x0040, 0x2694,
-+      0x6008, 0xa085, 0x0002, 0x600a, 0x6817, 0x0006, 0x6a28, 0x692c,
-+      0x6a3a, 0x693e, 0x682b, 0x0300, 0x682f, 0x0000, 0x6833, 0x2000,
-+      0x6893, 0x0000, 0x6897, 0x0020, 0x7000, 0x0079, 0x26a7, 0x26af,
-+      0x26b1, 0x26ba, 0x26af, 0x26af, 0x26af, 0x26af, 0x26af, 0x1078,
-+      0x1ce7, 0x681c, 0xa084, 0x0001, 0x00c0, 0x26ba, 0x1078, 0x2b06,
-+      0x0078, 0x26c0, 0x7054, 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60,
-+      0x2021, 0x3857, 0x2404, 0xa005, 0x0040, 0x26c9, 0x2020, 0x0078,
-+      0x26c2, 0x2d22, 0x206b, 0x0000, 0x007c, 0x77b4, 0x1078, 0x2e16,
-+      0xa7bc, 0x0f00, 0x1078, 0x2f11, 0x6018, 0xa005, 0x0040, 0x26fc,
-+      0x0d7e, 0x2001, 0x5c10, 0x2068, 0x0d7f, 0x2021, 0x5c00, 0x2009,
-+      0x0004, 0x2011, 0x0010, 0x1078, 0x216a, 0x0040, 0x26fc, 0x157e,
-+      0x20a9, 0x0000, 0x2021, 0x5b00, 0x047e, 0x2009, 0x0004, 0x2011,
-+      0x0010, 0x1078, 0x216a, 0x047f, 0x0040, 0x26fb, 0x8420, 0x0070,
-+      0x26fb, 0x0078, 0x26ec, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0,
-+      0x26d2, 0x0078, 0x1d41, 0x1078, 0x2b0d, 0x1078, 0x2b1e, 0x6827,
-+      0x0000, 0x789b, 0x000e, 0x6f10, 0x1078, 0x344a, 0x017e, 0xad88,
-+      0x0010, 0xa188, 0x0006, 0x2104, 0x017f, 0x8007, 0xa084, 0x00ff,
-+      0xa082, 0x0047, 0x0040, 0x271e, 0x0078, 0x272f, 0x0c7e, 0x6810,
-+      0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0, 0x3a80,
-+      0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x1078, 0x2f6b, 0x6813,
-+      0x0002, 0xa684, 0x0800, 0x0040, 0x2739, 0x6918, 0xa18d, 0x2000,
-+      0x691a, 0x6814, 0xa084, 0x8000, 0x0040, 0x2740, 0x6817, 0x0000,
-+      0x2021, 0x3857, 0x6800, 0x2022, 0x6a38, 0x693c, 0x6a2a, 0x692e,
-+      0x1078, 0x18b6, 0x0078, 0x1d41, 0x1078, 0x261c, 0x6827, 0x0000,
-+      0x789b, 0x000e, 0x6f10, 0x1078, 0x3002, 0xa08c, 0x00ff, 0x6912,
-+      0x6814, 0xa084, 0x8000, 0x0040, 0x275f, 0x7038, 0x6816, 0xa68c,
-+      0xdf00, 0x691a, 0x70a3, 0x0000, 0x0078, 0x1d41, 0xa006, 0x1078,
-+      0x314d, 0x6813, 0x0000, 0x6817, 0x0001, 0xa68c, 0xdf00, 0x691a,
-+      0x6827, 0x0000, 0x7000, 0x0079, 0x2775, 0x277d, 0x277f, 0x277f,
-+      0x2781, 0x2781, 0x2781, 0x277d, 0x277d, 0x1078, 0x1ce7, 0x1078,
-+      0x2b1e, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x2ad8, 0x2300,
-+      0x0079, 0x278a, 0x278d, 0x278f, 0x27cd, 0x1078, 0x1ce7, 0x7000,
-+      0x0079, 0x2792, 0x279a, 0x279c, 0x279c, 0x27a7, 0x279c, 0x27ae,
-+      0x279a, 0x279a, 0x1078, 0x1ce7, 0xa684, 0x2000, 0x00c0, 0x27a7,
-+      0xa6b5, 0x2000, 0x7e5a, 0x1078, 0x3376, 0x0078, 0x2fb6, 0x6814,
-+      0xa084, 0x8000, 0x0040, 0x27ae, 0x6817, 0x0007, 0x2009, 0x3818,
-+      0x210c, 0xa186, 0x0000, 0x0040, 0x27c3, 0xa186, 0x0001, 0x0040,
-+      0x27c7, 0x2009, 0x382b, 0x200b, 0x000b, 0x70a3, 0x0001, 0x781b,
-+      0x0046, 0x0078, 0x1d39, 0x781b, 0x00dd, 0x0078, 0x1d39, 0x2009,
-+      0x382b, 0x200b, 0x000a, 0x0078, 0x1d39, 0x1078, 0x1ce7, 0x2300,
-+      0x0079, 0x27d2, 0x27d5, 0x27d7, 0x27fa, 0x1078, 0x1ce7, 0x7000,
-+      0x0079, 0x27da, 0x27e2, 0x27e4, 0x27e4, 0x27ef, 0x27e4, 0x27f6,
-+      0x27e2, 0x27e2, 0x1078, 0x1ce7, 0xa684, 0x2000, 0x00c0, 0x27ef,
-+      0xa6b5, 0x2000, 0x7e5a, 0x1078, 0x3376, 0x0078, 0x2fb6, 0x6814,
-+      0xa084, 0x8000, 0x0040, 0x27f6, 0x6817, 0x0007, 0x781b, 0x00e4,
-+      0x0078, 0x1d39, 0x681c, 0xa085, 0x0004, 0x681e, 0x1078, 0x2f6b,
-+      0xa6b5, 0x0800, 0x1078, 0x2df9, 0x781b, 0x0069, 0x0078, 0x1d39,
-+      0x2300, 0x0079, 0x280b, 0x280e, 0x2810, 0x2812, 0x1078, 0x1ce7,
-+      0x1078, 0x1ce7, 0xa684, 0x0400, 0x00c0, 0x2831, 0x782b, 0x3009,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4,
-+      0xa184, 0x0020, 0x0040, 0x2829, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+      0x282d, 0x2001, 0x0014, 0x0078, 0x24e3, 0xa184, 0x0007, 0x0079,
-+      0x2869, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff,
-+      0x0040, 0x2867, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0,
-+      0x2858, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x284b, 0x2009,
-+      0xfff7, 0x0078, 0x2851, 0xa386, 0x0003, 0x00c0, 0x2858, 0x2009,
-+      0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b,
-+      0x3009, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x691e, 0x0078,
-+      0x2fb6, 0x21da, 0x21e0, 0x2873, 0x287b, 0x2871, 0x2871, 0x2871,
-+      0x2fb6, 0x1078, 0x1ce7, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+      0x691e, 0x0078, 0x2fbe, 0x691c, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+      0x691e, 0x0078, 0x2fb6, 0x79e4, 0xa184, 0x0030, 0x0040, 0x288d,
-+      0x78ec, 0xa084, 0x0003, 0x00c0, 0x2895, 0x6814, 0xa085, 0x8000,
-+      0x6816, 0x2001, 0x0014, 0x0078, 0x24e3, 0xa184, 0x0007, 0x0079,
-+      0x2899, 0x2fb6, 0x2fb6, 0x28a1, 0x2fb6, 0x2fde, 0x2fde, 0x2fb6,
-+      0x2fb6, 0xa684, 0x0400, 0x00c0, 0x28d2, 0x681c, 0xa084, 0x0001,
-+      0x0040, 0x2fbe, 0xa68c, 0x2060, 0xa18c, 0xfffb, 0x795a, 0x69b2,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6814, 0xa085,
-+      0x8000, 0x6816, 0x78aa, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012c,
-+      0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000a, 0x2098, 0x53a6,
-+      0x147f, 0x137f, 0x157f, 0x6810, 0x8007, 0x789b, 0x007e, 0x78aa,
-+      0x0078, 0x2fbe, 0x6814, 0xa084, 0x8000, 0x0040, 0x28d9, 0x6817,
-+      0x0008, 0x781b, 0x00d8, 0x0078, 0x1d39, 0x2300, 0x0079, 0x28e0,
-+      0x28e5, 0x2960, 0x28e3, 0x1078, 0x1ce7, 0x7000, 0xa084, 0x0007,
-+      0x0079, 0x28ea, 0x28f2, 0x28f4, 0x2910, 0x28f2, 0x28f2, 0x26cd,
-+      0x28f2, 0x28f2, 0x1078, 0x1ce7, 0x691c, 0xa18d, 0x0001, 0x691e,
-+      0x6800, 0x6006, 0xa005, 0x00c0, 0x28fe, 0x6002, 0x6818, 0xa084,
-+      0x000e, 0x0040, 0x290a, 0x7014, 0x68b6, 0x712c, 0xa188, 0x5b00,
-+      0x0078, 0x290c, 0x2009, 0x5c00, 0x2104, 0x6802, 0x2d0a, 0x7156,
-+      0x6eb2, 0xa684, 0x0060, 0x0040, 0x295e, 0xa684, 0x0800, 0x00c0,
-+      0x2922, 0xa684, 0x7fff, 0x68b2, 0x6890, 0x6894, 0x1078, 0x314d,
-+      0x0078, 0x295e, 0xa684, 0x0020, 0x0040, 0x2934, 0xa006, 0x1078,
-+      0x3414, 0x78d0, 0x8003, 0x00c8, 0x2930, 0x78d4, 0x1078, 0x3479,
-+      0x79d8, 0x7adc, 0x0078, 0x2938, 0x1078, 0x2f1e, 0x1078, 0x3414,
-+      0xa684, 0x8000, 0x0040, 0x295e, 0xa684, 0x7fff, 0x68b2, 0x789b,
-+      0x0074, 0x1078, 0x3002, 0x2010, 0x1078, 0x3002, 0x2008, 0xa684,
-+      0x0020, 0x00c0, 0x2956, 0x1078, 0x3002, 0x801b, 0x00c8, 0x2951,
-+      0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b94, 0x2100,
-+      0xa302, 0x68ae, 0x6b90, 0x2200, 0xa303, 0x68aa, 0x0078, 0x1d41,
-+      0x0078, 0x2de6, 0x7033, 0x0000, 0xa282, 0x0005, 0x0050, 0x296a,
-+      0x1078, 0x1ce7, 0x2300, 0x0079, 0x296d, 0x2970, 0x297a, 0x299d,
-+      0x2200, 0x0079, 0x2973, 0x2978, 0x2de6, 0x2978, 0x29c6, 0x2a17,
-+      0x1078, 0x1ce7, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2987, 0x1078,
-+      0x2b1e, 0x1078, 0x314d, 0x7034, 0x600a, 0x0078, 0x298c, 0x7000,
-+      0xa086, 0x0003, 0x0040, 0x2981, 0x7003, 0x0005, 0x2001, 0x5c10,
-+      0x2068, 0x703e, 0x7032, 0x2200, 0x0079, 0x2996, 0x2de6, 0x299b,
-+      0x29c6, 0x299b, 0x2de6, 0x1078, 0x1ce7, 0x7000, 0xa086, 0x0001,
-+      0x00c0, 0x29aa, 0x1078, 0x2b1e, 0x1078, 0x314d, 0x7034, 0x600a,
-+      0x0078, 0x29af, 0x7000, 0xa086, 0x0003, 0x0040, 0x29a4, 0x7003,
-+      0x0005, 0x2001, 0x5c10, 0x2068, 0x703e, 0x7032, 0x2200, 0x0079,
-+      0x29b9, 0x29c0, 0x29be, 0x29c0, 0x29be, 0x29c0, 0x1078, 0x1ce7,
-+      0x1078, 0x2e09, 0x781b, 0x0069, 0x0078, 0x1d39, 0x7000, 0xa086,
-+      0x0001, 0x00c0, 0x29d3, 0x1078, 0x2b1e, 0x1078, 0x314d, 0x7034,
-+      0x600a, 0x0078, 0x29d8, 0x7000, 0xa086, 0x0003, 0x0040, 0x29cd,
-+      0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+      0xa484, 0x001f, 0xa215, 0x2069, 0x5c00, 0x2d04, 0x2d08, 0x7156,
-+      0x2068, 0xa005, 0x0040, 0x29f3, 0x6810, 0xa206, 0x0040, 0x2a0c,
-+      0x6800, 0x0078, 0x29e6, 0x7003, 0x0005, 0x2001, 0x5c10, 0x2068,
-+      0x703e, 0x7032, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000,
-+      0x0070, 0x2a04, 0x0078, 0x29fd, 0x157f, 0x6a12, 0x68b3, 0x0700,
-+      0x681f, 0x0800, 0x6823, 0x0003, 0x6eb0, 0x7e5a, 0x681c, 0xa084,
-+      0x0c00, 0x0040, 0x2a6d, 0x1078, 0x2e01, 0x0078, 0x2a6d, 0x7000,
-+      0xa086, 0x0001, 0x00c0, 0x2a24, 0x1078, 0x2b1e, 0x1078, 0x314d,
-+      0x7034, 0x600a, 0x0078, 0x2a29, 0x7000, 0xa086, 0x0003, 0x0040,
-+      0x2a1e, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+      0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff,
-+      0xa1e8, 0x5b00, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040,
-+      0x2a48, 0x6810, 0xa206, 0x0040, 0x2a61, 0x6800, 0x0078, 0x2a3b,
-+      0x7003, 0x0005, 0x2001, 0x5c10, 0x2068, 0x703e, 0x7032, 0x157e,
-+      0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2a59, 0x0078,
-+      0x2a52, 0x157f, 0x6a12, 0x68b3, 0x0700, 0x681f, 0x0800, 0x6823,
-+      0x0003, 0x6eb0, 0x7e5a, 0x681c, 0xa084, 0x0c00, 0x0040, 0x2a6d,
-+      0x1078, 0x2dfd, 0x7e58, 0x0078, 0x2a6d, 0x027e, 0x8207, 0xa084,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2060, 0x704a,
-+      0x6000, 0x704e, 0x6004, 0x7052, 0xa684, 0x0060, 0x0040, 0x2aa4,
-+      0x6b94, 0x6c90, 0x69a8, 0x68ac, 0xa105, 0x00c0, 0x2a92, 0x7bd2,
-+      0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a, 0x1078, 0x3376,
-+      0x0078, 0x2aa4, 0x68ac, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305,
-+      0x0040, 0x2aa4, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68ac, 0xa6b4,
-+      0xbfff, 0x7e5a, 0x1078, 0x339d, 0x077f, 0x1078, 0x2f11, 0x2009,
-+      0x006a, 0xa684, 0x0008, 0x0040, 0x2aaf, 0x2009, 0x0069, 0xa6b5,
-+      0x2000, 0x7e5a, 0x791a, 0x2d00, 0x703e, 0x8207, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2048, 0x0078, 0x1d39,
-+      0x6020, 0xa005, 0x0040, 0x2acc, 0x8001, 0x6022, 0x6008, 0xa085,
-+      0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078, 0x314d,
-+      0x6813, 0x0000, 0x6817, 0x0001, 0x681f, 0x0040, 0x681b, 0x0100,
-+      0x7000, 0xa084, 0x0007, 0x0079, 0x2add, 0x2ae5, 0x2ae7, 0x2ae7,
-+      0x2b02, 0x2aef, 0x2ae5, 0x2ae5, 0x2ae5, 0x1078, 0x1ce7, 0x1078,
-+      0x2b0d, 0x1078, 0x2b06, 0x1078, 0x18b6, 0x0078, 0x1d41, 0x70a0,
-+      0x70a3, 0x0000, 0x0079, 0x2af4, 0x2afe, 0x2afe, 0x2afc, 0x2afc,
-+      0x2afc, 0x2afe, 0x2afc, 0x2afe, 0x0079, 0x20a6, 0x70a3, 0x0000,
-+      0x0078, 0x1d41, 0x6817, 0x0000, 0x0078, 0x2703, 0x6800, 0xa005,
-+      0x00c0, 0x2b0b, 0x6002, 0x6006, 0x007c, 0x1078, 0x2b27, 0x6010,
-+      0xa005, 0x0040, 0x2b18, 0x8001, 0x00d0, 0x2b18, 0x1078, 0x1ce7,
-+      0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x1078, 0x2b34,
-+      0x6018, 0xa005, 0x0040, 0x2b26, 0x8001, 0x601a, 0x007c, 0x017e,
-+      0x007e, 0x2009, 0x382e, 0x2104, 0xa005, 0x0040, 0x2b31, 0x8001,
-+      0x200a, 0x007f, 0x017f, 0x007c, 0x017e, 0x007e, 0x2009, 0x382f,
-+      0x2104, 0xa005, 0x0040, 0x2b3e, 0x8001, 0x200a, 0x007f, 0x017f,
-+      0x007c, 0x017e, 0x007e, 0x2009, 0x3830, 0x2104, 0x8000, 0x200a,
-+      0x007f, 0x017f, 0x007c, 0x017e, 0x007e, 0x2009, 0x382f, 0x2104,
-+      0x8000, 0x200a, 0x007f, 0x017f, 0x007c, 0x027e, 0x037e, 0x007e,
-+      0x2009, 0x382e, 0x2114, 0x2019, 0x382f, 0x2304, 0xa202, 0x200a,
-+      0x201b, 0x0000, 0x2009, 0x3830, 0x007f, 0x037f, 0x027f, 0x007c,
-+      0x1078, 0x2ffd, 0x6817, 0x0018, 0x0078, 0x2b98, 0x1078, 0x2ffd,
-+      0x6817, 0x0019, 0x0078, 0x2b98, 0x1078, 0x2ffd, 0x6817, 0x001a,
-+      0x0078, 0x2b98, 0x77b4, 0x1078, 0x2f11, 0x71b8, 0xa18c, 0x00ff,
-+      0xa1e8, 0x5b00, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x2b8a,
-+      0x0078, 0x1d41, 0x6810, 0x72b4, 0xa206, 0x0040, 0x2b92, 0x6800,
-+      0x0078, 0x2b83, 0x6800, 0x200a, 0x6817, 0x0005, 0x70bf, 0x0000,
-+      0x1078, 0x2b0d, 0x681c, 0xa084, 0x0001, 0x00c0, 0x2ba1, 0x1078,
-+      0x2b06, 0x1078, 0x2b1e, 0x681b, 0x0000, 0x681f, 0x0020, 0x1078,
-+      0x18b6, 0x0078, 0x1d41, 0xa282, 0x0003, 0x00c0, 0x2dda, 0x7da8,
-+      0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x691c, 0xa18d, 0x0080,
-+      0x691e, 0xa184, 0x0100, 0x0040, 0x2c0b, 0xa18c, 0xfeff, 0x691e,
-+      0xa6b4, 0x00ff, 0x0040, 0x2bf5, 0xa682, 0x000f, 0x0048, 0x2bcc,
-+      0x0040, 0x2bcc, 0x2031, 0x000f, 0x852b, 0x852b, 0x1078, 0x2e94,
-+      0x0040, 0x2bd6, 0x1078, 0x2ca4, 0x0078, 0x2bfe, 0x1078, 0x2e4f,
-+      0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x2cc8,
-+      0x0c7f, 0x691c, 0xa18d, 0x0100, 0x691e, 0x7e58, 0xa6b5, 0x0004,
-+      0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2bf1, 0x781b, 0x0055, 0x0078,
-+      0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39, 0x0c7e, 0x2960, 0x6004,
-+      0xa084, 0xfff5, 0x6006, 0x1078, 0x2cc8, 0x0c7f, 0x7e58, 0xa684,
-+      0x0400, 0x00c0, 0x2c07, 0x781b, 0x0058, 0x0078, 0x1d39, 0x781b,
-+      0x006a, 0x0078, 0x1d39, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c,
-+      0x1000, 0x0040, 0x2c4b, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282,
-+      0x000f, 0x0048, 0x2c1f, 0x0040, 0x2c1f, 0x2011, 0x000f, 0x2600,
-+      0xa202, 0x00c8, 0x2c24, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018,
-+      0xa086, 0x0028, 0x00c0, 0x2c34, 0xa282, 0x0019, 0x00c8, 0x2c3a,
-+      0x2011, 0x0019, 0x0078, 0x2c3a, 0xa282, 0x000c, 0x00c8, 0x2c3a,
-+      0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x2c3f, 0x2228, 0x1078,
-+      0x2e53, 0x852b, 0x852b, 0x1078, 0x2e94, 0x0040, 0x2c4b, 0x1078,
-+      0x2ca4, 0x0078, 0x2c4f, 0x1078, 0x2e4f, 0x1078, 0x2cc8, 0x7858,
-+      0xa085, 0x0004, 0x785a, 0x0c7f, 0x781b, 0x0069, 0x0078, 0x1d39,
-+      0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x2c72, 0xa084,
-+      0x0040, 0x00c0, 0x2c6c, 0xa18c, 0x0002, 0x00c0, 0x2c6c, 0xa18c,
-+      0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000,
-+      0x0078, 0x2c94, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086, 0x0028,
-+      0x00c0, 0x2c82, 0xa282, 0x0019, 0x00c8, 0x2c88, 0x2011, 0x0019,
-+      0x0078, 0x2c88, 0xa282, 0x000c, 0x00c8, 0x2c88, 0x2011, 0x000c,
-+      0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000f, 0x0048, 0x2c94,
-+      0x0040, 0x2c94, 0x2019, 0x000f, 0x78ab, 0x0001, 0x78ab, 0x0003,
-+      0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x681c, 0xa085,
-+      0x0100, 0x681e, 0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008,
-+      0xa084, 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612,
-+      0x78a4, 0xa084, 0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016,
-+      0x788a, 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff,
-+      0xa605, 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c,
-+      0x0c7e, 0x7048, 0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0,
-+      0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c,
-+      0xa282, 0x0002, 0x00c0, 0x2dda, 0x7aa8, 0x691c, 0xa18d, 0x0080,
-+      0x691e, 0xa184, 0x0200, 0x0040, 0x2d1d, 0xa18c, 0xfdff, 0x691e,
-+      0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x2dda, 0x1078, 0x2d63,
-+      0x1078, 0x2cc8, 0xa980, 0x0001, 0x200c, 0x1078, 0x2f0d, 0x1078,
-+      0x2c58, 0x88ff, 0x0040, 0x2d10, 0x789b, 0x0060, 0x2800, 0x78aa,
-+      0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2d0c,
-+      0x781b, 0x0055, 0x0078, 0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39,
-+      0x7e58, 0xa684, 0x0400, 0x00c0, 0x2d19, 0x781b, 0x0058, 0x0078,
-+      0x1d39, 0x781b, 0x006a, 0x0078, 0x1d39, 0xa282, 0x0002, 0x00c8,
-+      0x2d25, 0xa284, 0x0001, 0x0040, 0x2d2f, 0x7148, 0xa188, 0x0000,
-+      0x210c, 0xa18c, 0x2000, 0x00c0, 0x2d2f, 0x2011, 0x0000, 0x1078,
-+      0x2e41, 0x1078, 0x2d63, 0x1078, 0x2cc8, 0x7858, 0xa085, 0x0004,
-+      0x785a, 0x781b, 0x0069, 0x0078, 0x1d39, 0x0c7e, 0x027e, 0x2960,
-+      0x6000, 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x2d53, 0xa084,
-+      0x0080, 0x00c0, 0x2d51, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078,
-+      0x2d60, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+      0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x681c, 0xa085, 0x0200, 0x681e,
-+      0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040,
-+      0x2d6b, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4,
-+      0xa084, 0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084,
-+      0xffef, 0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003,
-+      0x0040, 0x2d85, 0x007f, 0x0078, 0x2d88, 0x007f, 0x0078, 0x2dd6,
-+      0xa684, 0x0020, 0x0040, 0x2dd6, 0x7888, 0xa084, 0x0040, 0x0040,
-+      0x2dd6, 0x78a8, 0x8001, 0x0040, 0x2d95, 0x7bb8, 0xa384, 0x003f,
-+      0x831b, 0x00c8, 0x2d9c, 0x8000, 0xa005, 0x0040, 0x2dbd, 0x831b,
-+      0x00c8, 0x2da5, 0x8001, 0x0040, 0x2dd2, 0xa006, 0x1078, 0x3414,
-+      0x78b4, 0x1078, 0x3479, 0x0078, 0x2dd6, 0xa684, 0x4000, 0x0040,
-+      0x2dbd, 0x78b8, 0x801b, 0x00c8, 0x2db6, 0x8000, 0xa084, 0x003f,
-+      0x00c0, 0x2dd2, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, 0x2001,
-+      0x0001, 0xa108, 0x00c8, 0x2dc6, 0xa291, 0x0000, 0x79d2, 0x79da,
-+      0x7ad6, 0x7ade, 0x1078, 0x3414, 0x781b, 0x0067, 0x1078, 0x32e4,
-+      0x0078, 0x1d39, 0x781b, 0x0067, 0x0078, 0x1d39, 0x781b, 0x006a,
-+      0x0078, 0x1d39, 0x1078, 0x2e0d, 0x781b, 0x0069, 0x0078, 0x1d39,
-+      0x1078, 0x2df9, 0x781b, 0x0069, 0x0078, 0x1d39, 0x6823, 0x0002,
-+      0x1078, 0x2e01, 0x691c, 0xa18d, 0x0020, 0x691e, 0x6814, 0xa084,
-+      0x8000, 0x0040, 0x2df5, 0x6817, 0x0005, 0x781b, 0x0069, 0x0078,
-+      0x1d39, 0x2001, 0x0005, 0x0078, 0x2e0f, 0x2001, 0x000c, 0x0078,
-+      0x2e0f, 0x2001, 0x0006, 0x0078, 0x2e0f, 0x2001, 0x000d, 0x0078,
-+      0x2e0f, 0x2001, 0x0009, 0x0078, 0x2e0f, 0x2001, 0x0007, 0x789b,
-+      0x007f, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, 0x007c, 0x077e, 0x873f,
-+      0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0, 0x3a80, 0xa7b8,
-+      0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040, 0x2e2f, 0xa184,
-+      0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008, 0x6006, 0x8738,
-+      0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040, 0x2e3f, 0xa184,
-+      0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010, 0x6006, 0x077f,
-+      0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+      0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x007c, 0x2031,
-+      0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab,
-+      0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab,
-+      0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003,
-+      0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0, 0x2001, 0x3846,
-+      0x2004, 0xa082, 0x0028, 0x0040, 0x2e7d, 0x2021, 0x2ef4, 0x2019,
-+      0x0014, 0x20a9, 0x000c, 0x0078, 0x2e83, 0x2021, 0x2f00, 0x2019,
-+      0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404, 0xa084, 0xfff0,
-+      0xa106, 0x0040, 0x2e92, 0x8420, 0x2300, 0xa210, 0x0070, 0x2e92,
-+      0x0078, 0x2e85, 0x157f, 0x007c, 0x157e, 0x2011, 0x3846, 0x2214,
-+      0xa282, 0x0032, 0x0048, 0x2ea8, 0x0040, 0x2eac, 0x2021, 0x2ee6,
-+      0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x0078, 0x2ebc,
-+      0xa282, 0x0028, 0x0040, 0x2eb4, 0x2021, 0x2ef4, 0x2019, 0x0014,
-+      0x20a9, 0x000c, 0x0078, 0x2eba, 0x2021, 0x2f00, 0x2019, 0x0019,
-+      0x20a9, 0x000d, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x2ecc,
-+      0x0048, 0x2ecc, 0x8420, 0x2300, 0xa210, 0x0070, 0x2ec9, 0x0078,
-+      0x2ebc, 0x157f, 0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8,
-+      0x2ed5, 0x7808, 0xa085, 0x0070, 0x780a, 0x78ec, 0xa084, 0x0300,
-+      0x0040, 0x2ee3, 0x2404, 0xa09e, 0x1201, 0x00c0, 0x2ee3, 0x2001,
-+      0x2101, 0x0078, 0x2ee4, 0x2404, 0xa005, 0x007c, 0x1201, 0x3002,
-+      0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806,
-+      0x7a06, 0x0a07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202,
-+      0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05,
-+      0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604,
-+      0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046,
-+      0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003,
-+      0x8003, 0x8003, 0xa105, 0xa0e0, 0x3b00, 0x007c, 0x79d8, 0x7adc,
-+      0x78d0, 0x801b, 0x00c8, 0x2f25, 0x8000, 0xa084, 0x003f, 0xa108,
-+      0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3840,
-+      0x2091, 0x8000, 0x2104, 0x0079, 0x2f35, 0x2f67, 0x2f3f, 0x2f3f,
-+      0x2f3f, 0x2f3f, 0x2f3f, 0x2f3d, 0x2f3d, 0x1078, 0x1ce7, 0x784b,
-+      0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, 0x2f41, 0x784b, 0x0008,
-+      0x7848, 0xa084, 0x0008, 0x00c0, 0x2f48, 0x68b0, 0xa085, 0x4000,
-+      0x68b2, 0x7858, 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080,
-+      0x00c0, 0x2f67, 0x0018, 0x2f67, 0x6818, 0xa084, 0x0020, 0x00c0,
-+      0x2f65, 0x781b, 0x00dd, 0x0078, 0x2f67, 0x781b, 0x00e4, 0x2091,
-+      0x8001, 0x0f7f, 0x007c, 0x0c7e, 0x6810, 0x8007, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa0e0, 0x3a80, 0x6004, 0xa084, 0x000a,
-+      0x00c0, 0x2fb4, 0x6108, 0xa194, 0xff00, 0x0040, 0x2fb4, 0xa18c,
-+      0x00ff, 0x6004, 0xa084, 0x0014, 0x00c0, 0x2f9d, 0xa085, 0x0014,
-+      0x6006, 0x017e, 0x691c, 0xa18d, 0x0002, 0x691e, 0x017f, 0x2001,
-+      0x000c, 0xa106, 0x0040, 0x2f99, 0x2100, 0x8003, 0x2008, 0x0078,
-+      0x2fad, 0x2009, 0x0019, 0x0078, 0x2fad, 0x2011, 0x0000, 0x6000,
-+      0xa084, 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef, 0x6006, 0x017e,
-+      0x691c, 0xa18d, 0x0002, 0x691e, 0x017f, 0x2100, 0xa205, 0x600a,
-+      0x6004, 0xa085, 0x000a, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x006a,
-+      0x0078, 0x1d39, 0x781b, 0x0069, 0x0078, 0x1d39, 0x781b, 0x0058,
-+      0x0078, 0x1d39, 0x781b, 0x0055, 0x0078, 0x1d39, 0x781b, 0x00dd,
-+      0x0078, 0x1d39, 0x781b, 0x00dc, 0x0078, 0x1d39, 0x781b, 0x00e4,
-+      0x0078, 0x1d39, 0x781b, 0x00e3, 0x0078, 0x1d39, 0x781b, 0x009e,
-+      0x0078, 0x1d39, 0x781b, 0x009d, 0x0078, 0x1d39, 0x70a3, 0x0001,
-+      0x781b, 0x0046, 0x0078, 0x1d39, 0x007e, 0x7830, 0xa084, 0x00c0,
-+      0x00c0, 0x2ffb, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005,
-+      0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x2ffb, 0x7808,
-+      0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0x7808, 0xa085, 0x0002,
-+      0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3002, 0x0098,
-+      0x300b, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005,
-+      0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x301a,
-+      0x0098, 0x3018, 0x78ac, 0x007e, 0x7808, 0xa085, 0x0002, 0x780a,
-+      0x007f, 0x007c, 0xa784, 0x0070, 0x0040, 0x302e, 0x0c7e, 0x2d60,
-+      0x2f68, 0x1078, 0x1c97, 0x2d78, 0x2c68, 0x0c7f, 0x6817, 0x0003,
-+      0x7858, 0xa084, 0x3f00, 0x681a, 0x682f, 0x0000, 0x682b, 0x0000,
-+      0x784b, 0x0008, 0x78e4, 0xa005, 0x00d0, 0x21cc, 0xa084, 0x0020,
-+      0x0040, 0x21cc, 0x78ec, 0xa084, 0x0003, 0x0040, 0x21cc, 0x0018,
-+      0x21cc, 0x0078, 0x2de0, 0x0c7e, 0x6810, 0x8007, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa080, 0x3a80, 0x2060, 0x2048, 0x704a,
-+      0x6000, 0x704e, 0x6004, 0x7052, 0x0c7f, 0x007c, 0x0020, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0062, 0x0009, 0x0014, 0x0014, 0x9847, 0x0014, 0x0014, 0x98f5,
-+      0x98e7, 0x0014, 0x0014, 0x0080, 0x00bf, 0x0100, 0x0402, 0x2008,
-+      0xf880, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0xa200, 0x8838,
-+      0x817e, 0x842a, 0x84a0, 0x3806, 0x8839, 0x28c2, 0x9cc3, 0xa805,
-+      0x0864, 0xa83b, 0x3008, 0x28c1, 0x9cc3, 0xa201, 0x300c, 0x2847,
-+      0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2,
-+      0x9ca0, 0xa8f3, 0x0864, 0xa829, 0x300c, 0xa801, 0x3008, 0x28e1,
-+      0x9ca0, 0x280d, 0xa204, 0x64c0, 0x67a0, 0x6fc0, 0x1814, 0x883b,
-+      0x7023, 0x8576, 0x8677, 0xa80f, 0x786e, 0x883e, 0xa80c, 0x282b,
-+      0xa205, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576,
-+      0x8677, 0xa801, 0x883e, 0x2069, 0x28c1, 0x9cc3, 0x2044, 0x2103,
-+      0x20a2, 0x2081, 0xa8dc, 0xa207, 0x0014, 0xa203, 0x8000, 0x84a8,
-+      0x85a4, 0x1872, 0x849a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e,
-+      0x866f, 0x0704, 0x3008, 0x9ca0, 0x0014, 0xa202, 0x8000, 0x85a4,
-+      0x3009, 0x84a8, 0x19e2, 0xf848, 0x8174, 0x86eb, 0x85eb, 0x872e,
-+      0x87a9, 0x883f, 0x08e6, 0xa8f1, 0xf861, 0xa8e8, 0xf801, 0x0014,
-+      0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014,
-+      0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014,
-+      0xa206, 0x6865, 0x817f, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042,
-+      0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, 0x3008,
-+      0x84a8, 0x1dc6, 0x20d7, 0x8822, 0x0016, 0x8000, 0x2848, 0x1011,
-+      0xa8fc, 0x3008, 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa887,
-+      0x3008, 0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017, 0x300c, 0x8000,
-+      0x85a4, 0x1de2, 0xdac1, 0x0014, 0x26e0, 0x873a, 0xfaa2, 0x19f2,
-+      0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x817e, 0x842a, 0x84a0,
-+      0x3806, 0x0210, 0x9ccd, 0x0704, 0x0000, 0x127e, 0x2091, 0x2200,
-+      0x2049, 0x314d, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008,
-+      0xa084, 0xfffd, 0xa205, 0x0040, 0x315f, 0x0078, 0x3164, 0x7003,
-+      0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, 0x0001, 0x00c0,
-+      0x3192, 0x7108, 0x8104, 0x00c8, 0x3171, 0x1078, 0x322e, 0x0078,
-+      0x3169, 0x700c, 0xa08c, 0x007f, 0x0040, 0x3192, 0x7004, 0x8004,
-+      0x00c8, 0x3189, 0x7014, 0xa005, 0x00c0, 0x3185, 0x7010, 0xa005,
-+      0x0040, 0x3189, 0xa102, 0x00c8, 0x3169, 0x7007, 0x0010, 0x0078,
-+      0x3192, 0x8aff, 0x0040, 0x3192, 0x1078, 0x33eb, 0x00c0, 0x318c,
-+      0x0040, 0x3169, 0x1078, 0x31dc, 0x7003, 0x0000, 0x127f, 0x2000,
-+      0x007c, 0x6424, 0x84ff, 0x0040, 0x31b6, 0x2c70, 0x2039, 0x31bb,
-+      0x2704, 0xae68, 0x680c, 0xa630, 0x6808, 0xa529, 0x8421, 0x0040,
-+      0x31b6, 0x8738, 0x2704, 0xa005, 0x00c0, 0x31a1, 0x7098, 0xa075,
-+      0x0040, 0x31b6, 0x2039, 0x31b8, 0x0078, 0x31a0, 0x007c, 0x0000,
-+      0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, 0x001c, 0x0000,
-+      0x127e, 0x2091, 0x2200, 0x2079, 0x3800, 0x2071, 0x0010, 0x7007,
-+      0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071, 0x0020, 0x7007,
-+      0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049, 0x0000, 0x78b7,
-+      0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x31dc, 0x7004, 0x8004,
-+      0x00c8, 0x3208, 0x7007, 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0,
-+      0x31e4, 0xa184, 0x0030, 0x0040, 0x31f1, 0xa086, 0x0030, 0x00c0,
-+      0x31e4, 0x7000, 0xa084, 0x0001, 0x00c0, 0x3208, 0x7008, 0xa084,
-+      0x000c, 0x00c0, 0x3206, 0x710c, 0xa184, 0x0300, 0x00c0, 0x3206,
-+      0xa184, 0x007f, 0x00c0, 0x31dc, 0x0078, 0x3208, 0x6817, 0x0003,
-+      0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0,
-+      0x320c, 0x7007, 0x0012, 0x7108, 0x8104, 0x0048, 0x3211, 0x78b7,
-+      0x0000, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e,
-+      0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x322e, 0x157f,
-+      0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x2118,
-+      0x7108, 0x700c, 0xa084, 0x0300, 0x00c0, 0x3270, 0xa184, 0x000c,
-+      0x00c0, 0x3270, 0x8213, 0x8213, 0x8213, 0x8213, 0xa284, 0x0100,
-+      0xa10d, 0x810b, 0x810b, 0x810f, 0xa184, 0x0007, 0x0079, 0x3248,
-+      0x3252, 0x3262, 0x3270, 0x3262, 0x3284, 0x3284, 0x3270, 0x3282,
-+      0x1078, 0x1ce7, 0x7007, 0x0002, 0x8aff, 0x00c0, 0x325b, 0x2049,
-+      0x0000, 0x0078, 0x325f, 0x1078, 0x33eb, 0x00c0, 0x325b, 0x78b7,
-+      0x0000, 0x007c, 0x7007, 0x0002, 0x8aff, 0x00c0, 0x3269, 0x0078,
-+      0x326d, 0x1078, 0x33eb, 0x00c0, 0x3269, 0x78b7, 0x0000, 0x007c,
-+      0x7007, 0x0002, 0x1078, 0x31dc, 0x1078, 0x2f2b, 0x6814, 0xa084,
-+      0x8000, 0x0040, 0x327d, 0x6817, 0x0002, 0x007c, 0x1078, 0x1ce7,
-+      0x1078, 0x1ce7, 0x1078, 0x32d6, 0x7210, 0x7114, 0x700c, 0xa09c,
-+      0x007f, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x78b4, 0xa005,
-+      0x0040, 0x3296, 0x78b7, 0x0000, 0x0078, 0x32b9, 0x1078, 0x32d6,
-+      0x2704, 0x2c58, 0xac60, 0x630c, 0x2200, 0xa322, 0x6308, 0x2100,
-+      0xa31b, 0x2400, 0xa305, 0x0040, 0x32af, 0x00c8, 0x32af, 0x8412,
-+      0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x3296, 0x2b60,
-+      0x8a07, 0xa7ba, 0x31b8, 0xa73d, 0x2c00, 0x6882, 0x6f86, 0x6c8e,
-+      0x6b8a, 0x7007, 0x0012, 0x1078, 0x31dc, 0x007c, 0x8738, 0x2704,
-+      0xa005, 0x00c0, 0x32ca, 0x6098, 0xa005, 0x0040, 0x32d3, 0x2060,
-+      0x2039, 0x31b8, 0x8a51, 0x0040, 0x32d2, 0x7008, 0xa084, 0x00c0,
-+      0xa086, 0x00c0, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, 0x8739,
-+      0x2704, 0xa004, 0x00c0, 0x32e3, 0x2039, 0x31be, 0x6000, 0xa064,
-+      0x00c0, 0x32e3, 0x2d60, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200,
-+      0x0d7f, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c, 0x8057, 0xaad4,
-+      0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x31b8, 0x7e08, 0xa6b5, 0x000c,
-+      0x6818, 0xa084, 0x0040, 0x0040, 0x32ff, 0xa6b5, 0x0001, 0x0f7e,
-+      0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040, 0x0040, 0x330e,
-+      0xa684, 0x0001, 0x00c0, 0x330e, 0xa6b5, 0x0001, 0x7007, 0x0004,
-+      0x7004, 0xa084, 0x0004, 0x00c0, 0x3310, 0x7000, 0xa005, 0x0040,
-+      0x331b, 0x1078, 0x1ce7, 0x2400, 0xa305, 0x00c0, 0x3321, 0x0078,
-+      0x335e, 0x2c58, 0x2704, 0xac60, 0x6004, 0xa400, 0x007e, 0x701a,
-+      0x6000, 0xa301, 0x701e, 0x2009, 0x04fd, 0x2104, 0xa086, 0x04fd,
-+      0x007f, 0x00c0, 0x334e, 0xa084, 0x0001, 0x0040, 0x334e, 0xa684,
-+      0x0001, 0x00c0, 0x334e, 0x7013, 0x0001, 0x7017, 0x0000, 0x7602,
-+      0x7007, 0x0001, 0x78b7, 0x0001, 0xa4a0, 0x0001, 0xa399, 0x0000,
-+      0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e, 0x620c, 0x2400,
-+      0xa202, 0x7012, 0x6208, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007,
-+      0x0001, 0x2b60, 0x1078, 0x32be, 0x0078, 0x3360, 0x1078, 0x33eb,
-+      0x00c0, 0x335e, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091,
-+      0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+      0x336c, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e,
-+      0x2091, 0x2200, 0x0d7f, 0x2049, 0x3376, 0x7007, 0x0004, 0x7004,
-+      0xa084, 0x0004, 0x00c0, 0x337f, 0x7e08, 0xa6b5, 0x000c, 0x6818,
-+      0xa084, 0x0040, 0x0040, 0x338e, 0xa6b5, 0x0001, 0x6824, 0xa005,
-+      0x0040, 0x339a, 0x2050, 0x2039, 0x31bb, 0x2d60, 0x1078, 0x33eb,
-+      0x00c0, 0x3396, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+      0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5,
-+      0x000c, 0x6818, 0xa084, 0x0040, 0x0040, 0x33b0, 0xa6b5, 0x0001,
-+      0x2049, 0x339d, 0x6824, 0xa055, 0x0040, 0x33e8, 0x2d70, 0x2e60,
-+      0x2039, 0x31bb, 0x2704, 0xae68, 0x680c, 0xa422, 0x6808, 0xa31b,
-+      0x0048, 0x33d5, 0x8a51, 0x00c0, 0x33c7, 0x1078, 0x1ce7, 0x8738,
-+      0x2704, 0xa005, 0x00c0, 0x33bb, 0x7098, 0xa075, 0x2060, 0x0040,
-+      0x33e8, 0x2039, 0x31b8, 0x0078, 0x33ba, 0x8422, 0x8420, 0x831a,
-+      0xa399, 0x0000, 0x690c, 0x2400, 0xa122, 0x6908, 0x2300, 0xa11b,
-+      0x00c8, 0x33e4, 0x1078, 0x1ce7, 0x2071, 0x0020, 0x0078, 0x330e,
-+      0x127f, 0x2000, 0x007c, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0,
-+      0x0040, 0x3413, 0x2704, 0xac08, 0x2104, 0x701e, 0x8108, 0x2104,
-+      0x701a, 0x8108, 0x2104, 0x7016, 0x8108, 0x2104, 0x7012, 0x0f7e,
-+      0x2079, 0x0100, 0x7858, 0x0f7f, 0xa084, 0x0040, 0x0040, 0x340e,
-+      0xa684, 0x0001, 0x00c0, 0x340e, 0xa6b5, 0x0001, 0x7602, 0x7007,
-+      0x0001, 0x1078, 0x32be, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091,
-+      0x2200, 0x2049, 0x3414, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x00c0,
-+      0x00c0, 0x342a, 0x6824, 0xa005, 0x0040, 0x343a, 0x0078, 0x3164,
-+      0x0078, 0x343a, 0x7108, 0x8104, 0x00c8, 0x3432, 0x1078, 0x322e,
-+      0x0078, 0x341d, 0x7007, 0x0010, 0x7108, 0x8104, 0x00c8, 0x3434,
-+      0x1078, 0x322e, 0x7008, 0xa086, 0x0002, 0x00c0, 0x341d, 0x7000,
-+      0xa005, 0x00c0, 0x341d, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f,
-+      0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0d7e, 0x2091,
-+      0x2200, 0x0d7f, 0x2049, 0x344a, 0xad80, 0x0010, 0x20a0, 0x2099,
-+      0x0031, 0x700c, 0xa084, 0x007f, 0x6826, 0x7007, 0x0008, 0x7007,
-+      0x0002, 0x7003, 0x0001, 0x0040, 0x3468, 0x8000, 0x80ac, 0x53a5,
-+      0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x346a, 0x2049,
-+      0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000,
-+      0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049,
-+      0x3479, 0x6880, 0x2060, 0x6884, 0x6b88, 0x6c8c, 0x8057, 0xaad4,
-+      0x00ff, 0xa084, 0x00ff, 0xa0b8, 0x31b8, 0x7e08, 0xa6b5, 0x0004,
-+      0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3492, 0x2c58,
-+      0x2704, 0xac60, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301, 0x701e,
-+      0x7013, 0x0001, 0x7017, 0x0000, 0x7602, 0x7007, 0x0001, 0x007f,
-+      0x8007, 0x2009, 0x0031, 0x200a, 0x00a0, 0x34ac, 0x7108, 0x7007,
-+      0x0002, 0x810c, 0x00c8, 0x34ac, 0x810c, 0x0048, 0x34b9, 0x0078,
-+      0x3270, 0xa4a0, 0x0001, 0xa399, 0x0000, 0x6b8a, 0x6c8e, 0x7007,
-+      0x0004, 0x2049, 0x0000, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c,
-+      0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x34d1,
-+      0xa200, 0x00f0, 0x34cc, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9,
-+      0x0010, 0xa005, 0x0040, 0x34f7, 0xa11a, 0x00c8, 0x34f7, 0x8213,
-+      0x818d, 0x0048, 0x34ea, 0xa11a, 0x00c8, 0x34eb, 0x00f0, 0x34df,
-+      0x0078, 0x34ef, 0xa11a, 0x2308, 0x8210, 0x00f0, 0x34df, 0x007e,
-+      0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e,
-+      0x3200, 0xa085, 0x0800, 0x0078, 0x34f3, 0x00e0, 0x3563, 0x2091,
-+      0x6000, 0x7820, 0x8001, 0x7822, 0x00c0, 0x355b, 0x7824, 0x7822,
-+      0x2009, 0x3834, 0x2104, 0xa005, 0x00c0, 0x3510, 0x2001, 0x0010,
-+      0x8001, 0x200a, 0x077e, 0x803f, 0x1078, 0x2f11, 0x077f, 0x20a9,
-+      0x0020, 0x601f, 0x0064, 0xace0, 0x0010, 0x00f0, 0x3519, 0x2091,
-+      0x8000, 0x2069, 0x3840, 0x6800, 0xa084, 0x0007, 0x0040, 0x3538,
-+      0xa086, 0x0002, 0x0040, 0x3538, 0x6830, 0xa00d, 0x0040, 0x3538,
-+      0x2104, 0xa005, 0x0040, 0x3538, 0x8001, 0x200a, 0x0040, 0x3640,
-+      0x2061, 0x3b00, 0x2009, 0x0002, 0x20a9, 0x0100, 0x603c, 0xa005,
-+      0x0040, 0x354e, 0x8001, 0x603e, 0x00c0, 0x354e, 0x6010, 0xa005,
-+      0x0040, 0x354e, 0x017e, 0x1078, 0x1b49, 0x017f, 0xace0, 0x0010,
-+      0x0070, 0x3554, 0x0078, 0x353e, 0x8109, 0x0040, 0x355b, 0x20a9,
-+      0x0100, 0x0078, 0x353e, 0x1078, 0x3578, 0x1078, 0x3566, 0x1078,
-+      0x359d, 0x1078, 0x3707, 0x2091, 0x8001, 0x007c, 0x783c, 0x8001,
-+      0x783e, 0x00c0, 0x3577, 0x7840, 0x783e, 0x7848, 0xa005, 0x0040,
-+      0x3577, 0x8001, 0x784a, 0x00c0, 0x3577, 0x1078, 0x1b49, 0x007c,
-+      0x7834, 0x8001, 0x7836, 0x00c0, 0x359c, 0x7838, 0x7836, 0x2091,
-+      0x8000, 0x7844, 0xa005, 0x00c0, 0x3587, 0x2001, 0x0101, 0x8001,
-+      0x7846, 0xa080, 0x5b00, 0x2040, 0x2004, 0xa065, 0x0040, 0x359c,
-+      0x6020, 0xa005, 0x0040, 0x3598, 0x8001, 0x6022, 0x0040, 0x35cc,
-+      0x6000, 0x2c40, 0x0078, 0x358d, 0x007c, 0x7828, 0x8001, 0x782a,
-+      0x00c0, 0x35cb, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x35aa,
-+      0x2001, 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003,
-+      0xa090, 0x3b00, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040,
-+      0x35cb, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x35c3, 0x8001,
-+      0x2012, 0x00c0, 0x35cb, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080,
-+      0x201a, 0x1078, 0x1b49, 0x007c, 0x2069, 0x3840, 0x6800, 0xa005,
-+      0x0040, 0x35d6, 0x683c, 0xac06, 0x0040, 0x3640, 0x6710, 0x6fb6,
-+      0x1078, 0x1758, 0x6808, 0xa084, 0x0020, 0x00c0, 0x363d, 0x2009,
-+      0x382b, 0x2104, 0xa005, 0x0040, 0x35e9, 0x6023, 0x0001, 0x0078,
-+      0x363d, 0x6808, 0xa084, 0xffef, 0xa085, 0x0021, 0x6017, 0x0006,
-+      0x60b0, 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff, 0xa085,
-+      0x0060, 0x601e, 0x6000, 0x2042, 0x6710, 0x6fb6, 0x1078, 0x1758,
-+      0x6818, 0xa005, 0x0040, 0x3606, 0x8001, 0x681a, 0x6808, 0xa084,
-+      0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x3610, 0x1078, 0x1ce7,
-+      0x6812, 0x602f, 0x0000, 0x602b, 0x0000, 0x2c68, 0x1078, 0x18b6,
-+      0x2069, 0x3840, 0x6710, 0xa784, 0x0f00, 0x68b6, 0x2001, 0x0002,
-+      0x1078, 0x1b44, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0030,
-+      0x1078, 0x1765, 0x2011, 0x3835, 0x2214, 0x6a3e, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x3622, 0x2009, 0x382b, 0x200b, 0x0008, 0x2009,
-+      0x382c, 0x2069, 0x3840, 0x68b4, 0x200a, 0x2091, 0x8001, 0x007c,
-+      0x2009, 0x384f, 0x2164, 0x2069, 0x0100, 0x1078, 0x1c97, 0x6017,
-+      0x0006, 0x6858, 0xa084, 0x3f00, 0x601a, 0x601c, 0xa084, 0x00ff,
-+      0xa085, 0x0048, 0x601e, 0x602f, 0x0000, 0x602b, 0x0000, 0x6830,
-+      0xa084, 0x0040, 0x0040, 0x367c, 0x684b, 0x0004, 0x20a9, 0x0014,
-+      0x6848, 0xa084, 0x0004, 0x0040, 0x3669, 0x0070, 0x3669, 0x0078,
-+      0x3660, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001,
-+      0x0040, 0x3676, 0x0070, 0x3676, 0x0078, 0x366d, 0x20a9, 0x00fa,
-+      0x0070, 0x367c, 0x0078, 0x3678, 0x6808, 0xa084, 0xfffd, 0x680a,
-+      0x681b, 0x0046, 0x2009, 0x3868, 0x200b, 0x0007, 0x784c, 0x784a,
-+      0x2091, 0x8001, 0x007c, 0x2079, 0x3800, 0x1078, 0x36de, 0x1078,
-+      0x36a6, 0x1078, 0x36b4, 0x1078, 0x36c9, 0x1078, 0x36f3, 0x2009,
-+      0x3833, 0x200b, 0x0000, 0x2009, 0x3834, 0x200b, 0x0000, 0x7833,
-+      0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x007c, 0x2019, 0x0003,
-+      0x2011, 0x3846, 0x2204, 0xa086, 0x003c, 0x0040, 0x36b1, 0x2019,
-+      0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019, 0x0030, 0x2011, 0x3846,
-+      0x2204, 0xa086, 0x0032, 0x0040, 0x36c6, 0x2019, 0x0039, 0x2204,
-+      0xa086, 0x003c, 0x0040, 0x36c6, 0x2019, 0x0027, 0x7b36, 0x7b3a,
-+      0x007c, 0x2019, 0x000f, 0x2011, 0x3846, 0x2204, 0xa086, 0x003c,
-+      0x0040, 0x36db, 0x2019, 0x000d, 0x2204, 0xa086, 0x0032, 0x0040,
-+      0x36db, 0x2019, 0x000a, 0x7b3e, 0x7b42, 0x007c, 0x2019, 0x2faf,
-+      0x2011, 0x3846, 0x2204, 0xa086, 0x0032, 0x0040, 0x36f0, 0x2019,
-+      0x3971, 0x2204, 0xa086, 0x003c, 0x0040, 0x36f0, 0x2019, 0x2626,
-+      0x7b22, 0x7b26, 0x007c, 0x2019, 0x0001, 0x2011, 0x3846, 0x2204,
-+      0xa086, 0x003c, 0x0040, 0x36fe, 0x2019, 0x0001, 0x017e, 0x2009,
-+      0x3831, 0x230a, 0x2009, 0x3832, 0x230a, 0x017f, 0x007c, 0x2009,
-+      0x3831, 0x2104, 0x8001, 0x200a, 0xa005, 0x00c0, 0x3755, 0x2009,
-+      0x3832, 0x2104, 0x2009, 0x3831, 0x200a, 0x2009, 0x3833, 0x2104,
-+      0xa005, 0x00c0, 0x371d, 0x2001, 0x0200, 0x8001, 0x200a, 0x8003,
-+      0x8003, 0x8003, 0x8003, 0xa090, 0x3b00, 0x2208, 0xa298, 0x0002,
-+      0x2304, 0xa084, 0x0200, 0x0040, 0x3755, 0xa290, 0x000e, 0x2204,
-+      0xa005, 0x0040, 0x3740, 0x8001, 0x0040, 0x3740, 0x8001, 0x0040,
-+      0x3740, 0x8001, 0x0040, 0x3740, 0x8001, 0x2012, 0x00c0, 0x3755,
-+      0x2012, 0x2304, 0xa084, 0xfdff, 0xa085, 0x0400, 0x201a, 0xa188,
-+      0x000c, 0x2104, 0x007e, 0xa084, 0x00ff, 0x8001, 0x027f, 0xa294,
-+      0xff00, 0xa205, 0x200a, 0x1078, 0x1b49, 0x007c, 0x6ed0
-+};
-+#else
-+/*
-+ * Flakey, not quite functional, target mode code for ISP1000
-+ * hacked out of PCI 7.55 initiator/target mode code.
-+ */
-+static const u_int16_t isp_1000_risc_code[] = {
-+      0x0078, 0x103a, 0x0000, 0x3c1f, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+      0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+      0x3130, 0x3030, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+      0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x372e, 0x3535,
-+      0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+      0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+      0x3031, 0x2024, 0x3700, 0xa086, 0xffff, 0x0040, 0x1043, 0x2079,
-+      0x4d00, 0x7803, 0x0001, 0x20c1, 0x0008, 0x2071, 0x0010, 0x70c3,
-+      0x0004, 0x20c9, 0x73ff, 0x2089, 0x116f, 0x70c7, 0x4953, 0x70cb,
-+      0x5020, 0x70cf, 0x2020, 0x70d3, 0x0007, 0x3f00, 0x70d6, 0x20c1,
-+      0x0008, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5,
-+      0xa1ec, 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54,
-+      0x205b, 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10b5, 0xa386,
-+      0x000f, 0x0040, 0x107b, 0x2c6a, 0x2a5a, 0x20c1, 0x0000, 0x2019,
-+      0x000f, 0x0078, 0x105b, 0x2c6a, 0x2a5a, 0x20c1, 0x0008, 0x2009,
-+      0x7fff, 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc, 0x3fff, 0x2734,
-+      0x203b, 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040, 0x109f, 0x284a,
-+      0x263a, 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134, 0x200b, 0x5050,
-+      0x2114, 0xa286, 0x5050, 0x0040, 0x10a0, 0x0078, 0x1177, 0x284a,
-+      0x263a, 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b, 0xa5a5, 0x2114,
-+      0xa286, 0xa5a5, 0x0040, 0x10b2, 0x250a, 0xa18a, 0x1000, 0x98c1,
-+      0x0078, 0x10b7, 0x250a, 0x0078, 0x10b7, 0x2c6a, 0x2a5a, 0x2130,
-+      0xa18a, 0x0040, 0x2128, 0xa1a2, 0x4d00, 0x8424, 0x8424, 0x8424,
-+      0x8424, 0x8424, 0x8424, 0xa192, 0x7400, 0x2009, 0x0000, 0x2001,
-+      0x0031, 0x1078, 0x1bd8, 0x2218, 0x2079, 0x4d00, 0x2fa0, 0x2408,
-+      0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10d2,
-+      0x7ef2, 0x8528, 0x7de6, 0x7cea, 0x7bee, 0x7883, 0x0000, 0x2031,
-+      0x0030, 0x78cf, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f,
-+      0x0003, 0x2069, 0x4d40, 0x00a8, 0x10f1, 0x681b, 0x003c, 0x0078,
-+      0x10f3, 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f,
-+      0x0008, 0x6813, 0x0005, 0x6823, 0x0000, 0x6827, 0x0006, 0x6817,
-+      0x0008, 0x682b, 0x0000, 0x681f, 0x0019, 0x2069, 0x4f80, 0x2011,
-+      0x0020, 0x2009, 0x0010, 0x680b, 0x080c, 0x680f, 0x0019, 0x6803,
-+      0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290,
-+      0x0004, 0x8109, 0x00c0, 0x110b, 0x2069, 0x5000, 0x2009, 0x0002,
-+      0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bf0, 0xa386,
-+      0xfeff, 0x00c0, 0x1131, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078,
-+      0x1135, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x0070,
-+      0x113b, 0x0078, 0x1122, 0x8109, 0x00c0, 0x1120, 0x1078, 0x20d8,
-+      0x1078, 0x43d1, 0x1078, 0x18a9, 0x1078, 0x48d9, 0x3200, 0xa085,
-+      0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x1155, 0x70c0, 0xa086,
-+      0x0002, 0x00c0, 0x1155, 0x1078, 0x126d, 0x1078, 0x117f, 0x78cc,
-+      0xa005, 0x00c0, 0x1163, 0x1078, 0x1c01, 0x0010, 0x1169, 0x0068,
-+      0x1169, 0x1078, 0x1fbd, 0x0010, 0x1169, 0x0068, 0x1169, 0x1078,
-+      0x198e, 0x00e0, 0x1155, 0x1078, 0x4760, 0x0078, 0x1155, 0x1177,
-+      0x1179, 0x22cc, 0x22cc, 0x4452, 0x4452, 0x22cc, 0x22cc, 0x0078,
-+      0x1177, 0x0078, 0x1179, 0x0078, 0x117b, 0x0078, 0x117d, 0x0068,
-+      0x11ea, 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x11ea,
-+      0x7814, 0xa005, 0x00c0, 0x1190, 0x0010, 0x11eb, 0x0078, 0x11ea,
-+      0x2009, 0x4d5b, 0x2104, 0xa005, 0x00c0, 0x11ea, 0x2009, 0x4d64,
-+      0x200b, 0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11b5, 0x7816,
-+      0x2009, 0x4d62, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014,
-+      0x70ca, 0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105,
-+      0x70ce, 0x1078, 0x188e, 0x0078, 0x11e8, 0x7814, 0xa086, 0x0018,
-+      0x00c0, 0x11bc, 0x1078, 0x15e0, 0x7817, 0x0000, 0x2009, 0x4d62,
-+      0x2104, 0xa065, 0x0040, 0x11d8, 0x0c7e, 0x609c, 0x2060, 0x1078,
-+      0x18f9, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x16a2, 0x2009, 0x000e,
-+      0x6007, 0x0103, 0x1078, 0x186a, 0x00c0, 0x11e4, 0x1078, 0x188e,
-+      0x2009, 0x4d62, 0x200b, 0x0000, 0x2009, 0x4d5c, 0x2104, 0x200b,
-+      0x0000, 0xa005, 0x0040, 0x11e8, 0x2001, 0x4005, 0x0078, 0x126f,
-+      0x0078, 0x126d, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb,
-+      0x0000, 0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x123b,
-+      0x2038, 0x0079, 0x11fb, 0x126d, 0x12c4, 0x1292, 0x12d3, 0x12e2,
-+      0x12e8, 0x1289, 0x16ba, 0x12ec, 0x1281, 0x1296, 0x1298, 0x129a,
-+      0x129c, 0x16bf, 0x1281, 0x12f4, 0x1313, 0x15ee, 0x16b4, 0x129e,
-+      0x1517, 0x1533, 0x154f, 0x157a, 0x14d0, 0x14de, 0x14f2, 0x1506,
-+      0x1384, 0x1281, 0x1332, 0x1338, 0x133d, 0x1342, 0x1348, 0x134d,
-+      0x1352, 0x1357, 0x135c, 0x1360, 0x1375, 0x1381, 0x1281, 0x1281,
-+      0x1281, 0x1281, 0x1390, 0x1399, 0x13a8, 0x13ce, 0x13d8, 0x13df,
-+      0x141a, 0x1429, 0x1438, 0x144a, 0x14b0, 0x14c0, 0x1281, 0x1281,
-+      0x1281, 0x1281, 0x14c5, 0xa0bc, 0xffa0, 0x00c0, 0x1281, 0x2038,
-+      0xa084, 0x001f, 0x0079, 0x1244, 0x16f8, 0x16fb, 0x170b, 0x1281,
-+      0x1281, 0x1846, 0x1858, 0x1281, 0x1281, 0x1281, 0x185c, 0x1864,
-+      0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281,
-+      0x1281, 0x16d6, 0x16ea, 0x1281, 0x1797, 0x1281, 0x1822, 0x182c,
-+      0x1830, 0x183e, 0x1281, 0x1281, 0x72ca, 0x71c6, 0x2001, 0x4006,
-+      0x0078, 0x126f, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2,
-+      0x0068, 0x1270, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000,
-+      0x00e0, 0x1278, 0x00e0, 0x127a, 0x0068, 0x127a, 0x2091, 0x4080,
-+      0x007c, 0x70c3, 0x4001, 0x0078, 0x1270, 0x70c3, 0x4006, 0x0078,
-+      0x1270, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3,
-+      0x0078, 0x126d, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x126d,
-+      0x0078, 0x126d, 0x0078, 0x126d, 0x0078, 0x126d, 0x2091, 0x8000,
-+      0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020,
-+      0x70d3, 0x0007, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001,
-+      0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, 0x0470,
-+      0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000,
-+      0x2091, 0x4080, 0x0078, 0x0455, 0x2029, 0x0000, 0x2520, 0x71d0,
-+      0x73c8, 0x72cc, 0x70c4, 0x1078, 0x19d3, 0x0040, 0x126d, 0x70c3,
-+      0x4002, 0x0078, 0x126d, 0x2029, 0x0000, 0x2520, 0x71d0, 0x73c8,
-+      0x72cc, 0x70c4, 0x1078, 0x1a1f, 0x0040, 0x126d, 0x70c3, 0x4002,
-+      0x0078, 0x126d, 0x71c4, 0x70c8, 0x2114, 0x200a, 0x0078, 0x126b,
-+      0x71c4, 0x2114, 0x0078, 0x126b, 0x70c7, 0x0007, 0x70cb, 0x0037,
-+      0x70cf, 0x0000, 0x0078, 0x126d, 0x2029, 0x0000, 0x2530, 0x70c4,
-+      0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005,
-+      0x0040, 0x130d, 0x8001, 0x7892, 0x7a9a, 0x7b9e, 0x7c96, 0x78cc,
-+      0xa084, 0xfffc, 0x78ce, 0x0078, 0x1311, 0x78cc, 0xa085, 0x0001,
-+      0x78ce, 0x0078, 0x126d, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8,
-+      0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040,
-+      0x132c, 0x8001, 0x78ae, 0x7ab6, 0x7bba, 0x7cb2, 0x78cc, 0xa084,
-+      0xfcff, 0x78ce, 0x0078, 0x1330, 0x78cc, 0xa085, 0x0100, 0x78ce,
-+      0x0078, 0x126d, 0x2009, 0x4d61, 0x210c, 0x7aec, 0x0078, 0x126b,
-+      0x2009, 0x4d41, 0x210c, 0x0078, 0x126c, 0x2009, 0x4d42, 0x210c,
-+      0x0078, 0x126c, 0x2061, 0x4d40, 0x610c, 0x6210, 0x0078, 0x126b,
-+      0x2009, 0x4d45, 0x210c, 0x0078, 0x126c, 0x2009, 0x4d46, 0x210c,
-+      0x0078, 0x126c, 0x2009, 0x4d48, 0x210c, 0x0078, 0x126c, 0x2009,
-+      0x4d49, 0x210c, 0x0078, 0x126c, 0x7908, 0x7a0c, 0x0078, 0x126b,
-+      0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+      0x4f80, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1372, 0x6b08,
-+      0x0078, 0x1373, 0x6b0c, 0x0078, 0x126a, 0x77c4, 0x1078, 0x18b9,
-+      0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078,
-+      0x126a, 0x794c, 0x0078, 0x126c, 0x77c4, 0x1078, 0x18b9, 0x2091,
-+      0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078, 0x126a,
-+      0x71c4, 0xa182, 0x0010, 0x00c8, 0x1265, 0x1078, 0x21a3, 0x0078,
-+      0x126a, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x1265, 0x2011, 0x4d41,
-+      0x2204, 0x007e, 0x2112, 0x1078, 0x215c, 0x017f, 0x0078, 0x126c,
-+      0x71c4, 0x2011, 0x13c6, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0040,
-+      0x13b8, 0x8210, 0x0070, 0x13b6, 0x0078, 0x13ad, 0x0078, 0x1265,
-+      0xa292, 0x13c6, 0x027e, 0x2011, 0x4d42, 0x2204, 0x2112, 0x017f,
-+      0x007e, 0x1078, 0x2168, 0x017f, 0x0078, 0x126c, 0x03e8, 0x00fa,
-+      0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x4d40,
-+      0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078, 0x126b,
-+      0x2061, 0x4d40, 0x6114, 0x70c4, 0x6016, 0x0078, 0x126c, 0x2061,
-+      0x4d40, 0x71c4, 0x2011, 0x0004, 0x601f, 0x0019, 0x2019, 0x1212,
-+      0xa186, 0x0028, 0x0040, 0x1400, 0x2011, 0x0005, 0x601f, 0x0019,
-+      0x2019, 0x1212, 0xa186, 0x0032, 0x0040, 0x1400, 0x2011, 0x0006,
-+      0x601f, 0x000c, 0x2019, 0x2222, 0xa186, 0x003c, 0x00c0, 0x1265,
-+      0x6018, 0x007e, 0x611a, 0x7800, 0xa084, 0x0001, 0x00c0, 0x1410,
-+      0x0028, 0x140c, 0x0078, 0x1410, 0x2019, 0x2222, 0x0078, 0x1412,
-+      0x2019, 0x1212, 0x23b8, 0x1078, 0x2179, 0x1078, 0x48d9, 0x017f,
-+      0x0078, 0x126c, 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x1265, 0x2011,
-+      0x4d48, 0x2204, 0x2112, 0x007e, 0x1078, 0x219b, 0x017f, 0x0078,
-+      0x126c, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x1265, 0x2011, 0x4d49,
-+      0x2204, 0x007e, 0x2112, 0x1078, 0x218a, 0x017f, 0x0078, 0x126c,
-+      0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x1264, 0xa284, 0xfffd,
-+      0x00c0, 0x1264, 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e,
-+      0x0078, 0x126b, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003,
-+      0x8003, 0xa0e8, 0x4f80, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e,
-+      0xa226, 0x0040, 0x1479, 0x6a02, 0xa484, 0x2000, 0x0040, 0x1462,
-+      0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1468, 0xa39d, 0x0008,
-+      0xa484, 0x4000, 0x0040, 0x1479, 0x810f, 0xa284, 0x4000, 0x0040,
-+      0x1475, 0x1078, 0x21bd, 0x0078, 0x1479, 0x1078, 0x21af, 0x0078,
-+      0x1479, 0x72cc, 0x6808, 0xa206, 0x0040, 0x14a8, 0xa2a4, 0x00ff,
-+      0x2061, 0x4d40, 0x6118, 0xa186, 0x0028, 0x0040, 0x148f, 0xa186,
-+      0x0032, 0x0040, 0x1495, 0xa186, 0x003c, 0x0040, 0x149b, 0xa482,
-+      0x0064, 0x0048, 0x14a5, 0x0078, 0x149f, 0xa482, 0x0050, 0x0048,
-+      0x14a5, 0x0078, 0x149f, 0xa482, 0x0043, 0x0048, 0x14a5, 0x71c4,
-+      0x71c6, 0x027f, 0x72ca, 0x0078, 0x1266, 0x6a0a, 0xa39d, 0x000a,
-+      0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078, 0x126a,
-+      0x77c4, 0x1078, 0x18b9, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091,
-+      0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x126a,
-+      0x70c4, 0x794c, 0x784e, 0x0078, 0x126c, 0x71c4, 0x72c8, 0x73cc,
-+      0xa182, 0x0010, 0x00c8, 0x1265, 0x1078, 0x21cb, 0x0078, 0x126a,
-+      0x77c4, 0x1078, 0x18b9, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002,
-+      0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x126b, 0x77c4, 0x1078,
-+      0x18b9, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804,
-+      0xa005, 0x0040, 0x14ed, 0x1078, 0x20a0, 0x2091, 0x8001, 0x2708,
-+      0x0078, 0x126b, 0x77c4, 0x1078, 0x18b9, 0x2091, 0x8000, 0x6a08,
-+      0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1501, 0x1078,
-+      0x20a0, 0x2091, 0x8001, 0x2708, 0x0078, 0x126b, 0x77c4, 0x2041,
-+      0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+      0x18c6, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x126b, 0x77c4,
-+      0x72c8, 0x73cc, 0x77c6, 0x72ca, 0x73ce, 0x1078, 0x1927, 0x00c0,
-+      0x152f, 0x6818, 0xa005, 0x0040, 0x152f, 0x2708, 0x1078, 0x21db,
-+      0x00c0, 0x152f, 0x7817, 0x0015, 0x2091, 0x8001, 0x007c, 0x2091,
-+      0x8001, 0x0078, 0x126d, 0x77c4, 0x77c6, 0x2041, 0x0021, 0x2049,
-+      0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x18c6, 0x2061,
-+      0x4d40, 0x606f, 0x0003, 0x6782, 0x6093, 0x000f, 0x6073, 0x0000,
-+      0x7817, 0x0016, 0x1078, 0x20a0, 0x2091, 0x8001, 0x007c, 0x77c8,
-+      0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2061,
-+      0x4d40, 0x606f, 0x0002, 0x6073, 0x0000, 0x6782, 0x6093, 0x000f,
-+      0x7817, 0x0017, 0x1078, 0x20a0, 0x2091, 0x8001, 0x2041, 0x0021,
-+      0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000, 0x1078, 0x18c6,
-+      0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, 0x156e, 0x2091,
-+      0x8001, 0x007c, 0x78cc, 0xa084, 0x0003, 0x00c0, 0x159e, 0x2039,
-+      0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078,
-+      0x18b9, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091, 0x8001,
-+      0x8738, 0xa784, 0x001f, 0x00c0, 0x1587, 0xa7bc, 0xff00, 0x873f,
-+      0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1587, 0x2091, 0x8000,
-+      0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040, 0x15c7, 0x684b,
-+      0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x15b4,
-+      0x0070, 0x15b4, 0x0078, 0x15ab, 0x684b, 0x0009, 0x20a9, 0x0014,
-+      0x6848, 0xa084, 0x0001, 0x0040, 0x15c1, 0x0070, 0x15c1, 0x0078,
-+      0x15b8, 0x20a9, 0x00fa, 0x0070, 0x15c7, 0x0078, 0x15c3, 0x2079,
-+      0x4d00, 0x7817, 0x0018, 0x2061, 0x4d40, 0x606f, 0x0001, 0x6073,
-+      0x0000, 0x6093, 0x000f, 0x78cc, 0xa085, 0x0002, 0x78ce, 0x6808,
-+      0xa084, 0xfffd, 0x680a, 0x681b, 0x0048, 0x2091, 0x8001, 0x007c,
-+      0x78cc, 0xa084, 0xfffd, 0x78ce, 0xa084, 0x0001, 0x00c0, 0x15ea,
-+      0x1078, 0x1971, 0x71c4, 0x71c6, 0x794a, 0x007c, 0x2029, 0x0000,
-+      0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079,
-+      0x4d00, 0x1078, 0x1874, 0x0040, 0x169e, 0x20a9, 0x0005, 0x20a1,
-+      0x4d18, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0020,
-+      0x1078, 0x186f, 0x0040, 0x1610, 0x1078, 0x188e, 0x0078, 0x169e,
-+      0x6004, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x166d, 0x0c7e,
-+      0x2c68, 0x1078, 0x1874, 0x0040, 0x163e, 0x2c00, 0x689e, 0x8109,
-+      0x00c0, 0x1618, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7218, 0x731c,
-+      0x2c68, 0x689c, 0xa065, 0x0040, 0x166c, 0x2009, 0x0020, 0x1078,
-+      0x186f, 0x00c0, 0x1655, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002,
-+      0x00c0, 0x163e, 0x2d00, 0x6002, 0x0078, 0x1626, 0x0c7f, 0x0c7e,
-+      0x609c, 0x2060, 0x1078, 0x18f9, 0x0c7f, 0x609f, 0x0000, 0x1078,
-+      0x16a2, 0x2009, 0x000e, 0x6008, 0xa085, 0x0200, 0x600a, 0x1078,
-+      0x186a, 0x1078, 0x188e, 0x0078, 0x169e, 0x0c7f, 0x0c7e, 0x609c,
-+      0x2060, 0x1078, 0x18f9, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x16a2,
-+      0x2009, 0x000e, 0x6007, 0x0103, 0x601b, 0x0003, 0x1078, 0x186a,
-+      0x1078, 0x188e, 0x0078, 0x169e, 0x0c7f, 0x74c4, 0x73c8, 0x72cc,
-+      0x6014, 0x2091, 0x8000, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x4d40,
-+      0x706f, 0x0005, 0x7073, 0x0000, 0x7376, 0x727a, 0x747e, 0x7082,
-+      0x7087, 0x0000, 0x2c00, 0x708a, 0x708f, 0x0000, 0xa02e, 0x2530,
-+      0x611c, 0x61a2, 0xa184, 0x0060, 0x0040, 0x1690, 0x1078, 0x4367,
-+      0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3,
-+      0x0000, 0x1078, 0x20a0, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005,
-+      0x0078, 0x1270, 0x20a9, 0x0005, 0x2099, 0x4d18, 0x2091, 0x8000,
-+      0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1,
-+      0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7906,
-+      0x0078, 0x126d, 0x71c4, 0x71c6, 0x2168, 0x0078, 0x16c1, 0x2069,
-+      0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0,
-+      0x16c3, 0xa285, 0x0000, 0x00c0, 0x16d1, 0x70c3, 0x4000, 0x0078,
-+      0x16d3, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x1270, 0x2011, 0x4d67,
-+      0x220c, 0x70c4, 0x8003, 0x0048, 0x16e3, 0x1078, 0x398d, 0xa184,
-+      0x7fff, 0x0078, 0x16e7, 0x1078, 0x3980, 0xa185, 0x8000, 0x2012,
-+      0x0078, 0x126c, 0x71c4, 0x1078, 0x3977, 0x6100, 0x2001, 0x4d67,
-+      0x2004, 0xa084, 0x8000, 0xa10d, 0x6204, 0x6308, 0x0078, 0x126a,
-+      0x79e4, 0x0078, 0x126c, 0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042,
-+      0x20a9, 0x0004, 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004,
-+      0x53a3, 0x0078, 0x126d, 0x70c4, 0x2068, 0x2079, 0x4d00, 0x1078,
-+      0x1874, 0x0040, 0x1793, 0x6007, 0x0001, 0x600b, 0x0000, 0x602b,
-+      0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f, 0xa284, 0x00f0,
-+      0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, 0xa284, 0x0800,
-+      0x0040, 0x172e, 0x601b, 0x000a, 0x0078, 0x1734, 0xa284, 0x1000,
-+      0x0040, 0x1734, 0x601b, 0x000c, 0xa284, 0x0300, 0x0040, 0x173d,
-+      0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, 0x0001, 0x601e,
-+      0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400, 0x0040, 0x174a,
-+      0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, 0x20a0, 0xad80,
-+      0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, 0x175f, 0x604a,
-+      0x6046, 0x6052, 0x604e, 0x6096, 0x609a, 0x0078, 0x1769, 0x6800,
-+      0x604a, 0x6804, 0x6046, 0x6e08, 0x6652, 0x6d0c, 0x654e, 0x6596,
-+      0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042, 0x2c08, 0x2061,
-+      0x4d40, 0x606f, 0x0005, 0x6073, 0x0000, 0x6077, 0x0000, 0x607b,
-+      0x0000, 0x607f, 0x0000, 0x6082, 0x618a, 0xa284, 0x0400, 0x608e,
-+      0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007,
-+      0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000, 0x1078, 0x20a0,
-+      0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1270, 0x0c7e,
-+      0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x2071, 0x4d40, 0x2079,
-+      0x0100, 0x2061, 0x0010, 0x70a0, 0xa06d, 0x0040, 0x1818, 0x6a04,
-+      0xa294, 0x00ff, 0xa286, 0x0007, 0x0040, 0x17b2, 0xa286, 0x000f,
-+      0x00c0, 0x1818, 0x6920, 0xa184, 0x0080, 0x00c0, 0x1818, 0x6824,
-+      0xa18c, 0xff00, 0xa085, 0x0019, 0x6826, 0x71b8, 0x81ff, 0x0040,
-+      0x17d3, 0x0d7e, 0x2069, 0x0020, 0x6908, 0x6808, 0xa106, 0x00c0,
-+      0x17c4, 0x690c, 0x680c, 0xa106, 0x00c0, 0x17c9, 0xa184, 0x00ff,
-+      0x00c0, 0x17c9, 0x0d7f, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x17d3,
-+      0x7848, 0xa085, 0x000c, 0x784a, 0x71b8, 0x81ff, 0x0040, 0x17f6,
-+      0x70bb, 0x0000, 0x0d7e, 0x2069, 0x0020, 0x6807, 0x0008, 0x6804,
-+      0xa084, 0x0008, 0x00c0, 0x17e7, 0x6807, 0x0008, 0x6804, 0xa084,
-+      0x0008, 0x00c0, 0x17ee, 0x6807, 0x0002, 0x0d7f, 0x61c4, 0x62c8,
-+      0x63cc, 0x61c6, 0x62ca, 0x63ce, 0x0e7e, 0x2071, 0x4d00, 0x7266,
-+      0x736a, 0xae80, 0x0019, 0x0e7f, 0x1078, 0x42b7, 0x78a3, 0x0000,
-+      0x7858, 0xa084, 0xedff, 0x785a, 0x70bc, 0xa080, 0x00da, 0x781a,
-+      0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x0078, 0x126d,
-+      0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x2001, 0x4005,
-+      0x0078, 0x126f, 0x7980, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8,
-+      0x1265, 0x7982, 0x0078, 0x126d, 0x7980, 0x71c6, 0x0078, 0x126d,
-+      0x7974, 0x71c6, 0x71c4, 0x7976, 0x7978, 0x71ca, 0x71c8, 0x797a,
-+      0x797c, 0x71ce, 0x71cc, 0x797e, 0x0078, 0x126d, 0x7974, 0x71c6,
-+      0x7978, 0x71ca, 0x797c, 0x71ce, 0x0078, 0x126d, 0x7900, 0x71c6,
-+      0x71c4, 0x7902, 0x00a8, 0x1856, 0xa18c, 0x0001, 0x00c0, 0x1854,
-+      0x20b9, 0x2222, 0x0078, 0x1856, 0x20b9, 0x1212, 0x0078, 0x126d,
-+      0x7900, 0x71c6, 0x0078, 0x126d, 0x2009, 0x4d74, 0x2104, 0x70c6,
-+      0x70c4, 0x200a, 0x0078, 0x126d, 0x2009, 0x4d74, 0x2104, 0x70c6,
-+      0x0078, 0x126d, 0xac80, 0x0001, 0x1078, 0x1a3d, 0x007c, 0xac80,
-+      0x0001, 0x1078, 0x19f1, 0x007c, 0x7850, 0xa065, 0x0040, 0x187c,
-+      0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x4d00,
-+      0x7850, 0xa06d, 0x0040, 0x188c, 0x2d04, 0x7852, 0x6803, 0x0000,
-+      0x6807, 0x0000, 0x680b, 0x0000, 0x0f7f, 0x007c, 0x2091, 0x8000,
-+      0x0f7e, 0x2079, 0x4d00, 0x7850, 0x2062, 0x2c00, 0xa005, 0x00c0,
-+      0x189b, 0x1078, 0x22ac, 0x7852, 0x0f7f, 0x2091, 0x8001, 0x007c,
-+      0x0f7e, 0x2079, 0x4d00, 0x7850, 0x206a, 0x2d00, 0x7852, 0x0f7f,
-+      0x007c, 0x2011, 0x7400, 0x7a52, 0x7bec, 0x8319, 0x0040, 0x18b6,
-+      0xa280, 0x0031, 0x2012, 0x2010, 0x0078, 0x18ad, 0x2013, 0x0000,
-+      0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003,
-+      0x8003, 0x8003, 0xa105, 0xa0e8, 0x5000, 0x007c, 0x1078, 0x18b9,
-+      0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, 0xa80d,
-+      0x690a, 0x2009, 0x4d52, 0x210c, 0x6804, 0xa005, 0x0040, 0x18f8,
-+      0xa116, 0x00c0, 0x18e3, 0x2060, 0x6000, 0x6806, 0x017e, 0x200b,
-+      0x0000, 0x0078, 0x18e6, 0x2009, 0x0000, 0x017e, 0x6804, 0xa065,
-+      0x0040, 0x18f5, 0x6000, 0x6806, 0x1078, 0x1906, 0x1078, 0x1b7d,
-+      0x6810, 0x8001, 0x6812, 0x00c0, 0x18e6, 0x017f, 0x6902, 0x6906,
-+      0x007c, 0xa065, 0x0040, 0x1905, 0x609c, 0x609f, 0x0000, 0x2008,
-+      0x1078, 0x188e, 0x2100, 0x0078, 0x18f9, 0x007c, 0x6007, 0x0103,
-+      0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001,
-+      0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e,
-+      0x2071, 0x4d40, 0x704c, 0xa08c, 0x0200, 0x00c0, 0x1925, 0xa088,
-+      0x4d80, 0x2d0a, 0x8000, 0x704e, 0xa006, 0x0e7f, 0x007c, 0x1078,
-+      0x18b9, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040, 0x1970,
-+      0x0078, 0x1938, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040, 0x1970,
-+      0x6010, 0xa306, 0x00c0, 0x1932, 0x600c, 0xa206, 0x00c0, 0x1932,
-+      0x2c28, 0x2001, 0x4d52, 0x2004, 0xac06, 0x00c0, 0x1949, 0x0078,
-+      0x196e, 0x6804, 0xac06, 0x00c0, 0x1956, 0x6000, 0xa065, 0x6806,
-+      0x00c0, 0x1960, 0x6803, 0x0000, 0x0078, 0x1960, 0x6400, 0x781c,
-+      0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1960, 0x2c00, 0x6802,
-+      0x2560, 0x1078, 0x1906, 0x601b, 0x0005, 0x6023, 0x0020, 0x1078,
-+      0x1b7d, 0x6810, 0x8001, 0x1050, 0x22ac, 0x6812, 0xa085, 0xffff,
-+      0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+      0x0008, 0x2091, 0x8000, 0x1078, 0x18c6, 0x8738, 0xa784, 0x001f,
-+      0x00c0, 0x197b, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784,
-+      0x0f00, 0x00c0, 0x197b, 0x2091, 0x8001, 0x007c, 0x2061, 0x0000,
-+      0x6018, 0xa084, 0x0001, 0x00c0, 0x199f, 0x2091, 0x8000, 0x78e0,
-+      0x78e3, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x19a0, 0x007c,
-+      0xa08c, 0xfff0, 0x0040, 0x19a6, 0x1078, 0x22ac, 0x0079, 0x19a8,
-+      0x19b8, 0x19bb, 0x19c1, 0x19c5, 0x19b9, 0x19c9, 0x19cf, 0x19b9,
-+      0x19b9, 0x1b47, 0x1b6b, 0x1b6f, 0x19b9, 0x19b9, 0x19b9, 0x19b9,
-+      0x007c, 0x1078, 0x22ac, 0x1078, 0x1971, 0x2001, 0x8001, 0x0078,
-+      0x1b75, 0x2001, 0x8003, 0x0078, 0x1b75, 0x2001, 0x8004, 0x0078,
-+      0x1b75, 0x1078, 0x1971, 0x2001, 0x8006, 0x0078, 0x1b75, 0x2001,
-+      0x8007, 0x0078, 0x1b75, 0x2030, 0x2138, 0xa782, 0x0021, 0x0048,
-+      0x19db, 0x2009, 0x0020, 0x2600, 0x1078, 0x19f1, 0x00c0, 0x19f0,
-+      0xa7ba, 0x0020, 0x0048, 0x19ef, 0x0040, 0x19ef, 0x2708, 0xa6b0,
-+      0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0x0078, 0x19d5, 0xa006,
-+      0x007c, 0x81ff, 0x0040, 0x1a1c, 0x2099, 0x0030, 0x20a0, 0x700c,
-+      0xa084, 0x00ff, 0x0040, 0x1a03, 0x7007, 0x0004, 0x7004, 0xa084,
-+      0x0004, 0x00c0, 0x19fe, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112,
-+      0x721a, 0x731e, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+      0x7008, 0x800c, 0x00c8, 0x1a10, 0x7007, 0x0002, 0xa08c, 0x000c,
-+      0x00c0, 0x1a1c, 0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030,
-+      0x2138, 0xa782, 0x0021, 0x0048, 0x1a27, 0x2009, 0x0020, 0x2600,
-+      0x1078, 0x1a3d, 0x00c0, 0x1a3c, 0xa7ba, 0x0020, 0x0048, 0x1a3b,
-+      0x0040, 0x1a3b, 0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399,
-+      0x0000, 0x0078, 0x1a21, 0xa006, 0x007c, 0x81ff, 0x0040, 0x1a6e,
-+      0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x00ff, 0x0040, 0x1a4f,
-+      0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x1a4a, 0x21a8,
-+      0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e, 0x780c, 0xa085,
-+      0x0000, 0x7002, 0x53a6, 0x7007, 0x0001, 0x7010, 0xa084, 0xf000,
-+      0x0040, 0x1a66, 0x7007, 0x0008, 0x0078, 0x1a6a, 0x7108, 0x8104,
-+      0x00c8, 0x1a5d, 0x7007, 0x0002, 0xa184, 0x000c, 0x7003, 0x0000,
-+      0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0004, 0x00c8, 0x1a7a,
-+      0x0078, 0x1a7d, 0xa006, 0x0078, 0x1a7f, 0xa085, 0x0001, 0x007c,
-+      0x0e7e, 0x2071, 0x4d00, 0x2d08, 0x7058, 0x6802, 0xa005, 0x00c0,
-+      0x1a8a, 0x715e, 0x715a, 0x0e7f, 0x007c, 0x2c08, 0x7858, 0x6002,
-+      0xa005, 0x00c0, 0x1a94, 0x795e, 0x795a, 0x007c, 0x2091, 0x8000,
-+      0x6003, 0x0000, 0x2c08, 0x785c, 0xa065, 0x00c0, 0x1aa2, 0x795a,
-+      0x0078, 0x1aa3, 0x6102, 0x795e, 0x2091, 0x8001, 0x1078, 0x20bd,
-+      0x007c, 0x0e7e, 0x2071, 0x4d00, 0x7058, 0xa06d, 0x0040, 0x1ab7,
-+      0x6800, 0x705a, 0xa005, 0x00c0, 0x1ab6, 0x705e, 0x8dff, 0x0e7f,
-+      0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x4d00, 0xaf80, 0x0016,
-+      0x2060, 0x6000, 0xa005, 0x0040, 0x1ae7, 0x2068, 0x6814, 0xa306,
-+      0x00c0, 0x1ad0, 0x6828, 0xa084, 0x00ff, 0xa406, 0x0040, 0x1ad3,
-+      0x2d60, 0x0078, 0x1ac1, 0x6800, 0xa005, 0x6002, 0x00c0, 0x1adf,
-+      0xaf80, 0x0016, 0xac06, 0x0040, 0x1ade, 0x2c00, 0x785e, 0x0d7e,
-+      0x689c, 0xa005, 0x0040, 0x1ae6, 0x1078, 0x18f9, 0x007f, 0x0f7f,
-+      0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079,
-+      0x4d00, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, 0x0040, 0x1b16,
-+      0x2068, 0x6814, 0xa084, 0x00ff, 0xa306, 0x0040, 0x1b02, 0x2d60,
-+      0x0078, 0x1af4, 0x6800, 0xa005, 0x6002, 0x00c0, 0x1b0e, 0xaf80,
-+      0x0016, 0xac06, 0x0040, 0x1b0d, 0x2c00, 0x785e, 0x0d7e, 0x689c,
-+      0xa005, 0x0040, 0x1b15, 0x1078, 0x18f9, 0x007f, 0x0f7f, 0x0c7f,
-+      0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x4d00,
-+      0xaf80, 0x0016, 0x2060, 0x6000, 0xa06d, 0x0040, 0x1b42, 0x6814,
-+      0xa306, 0x0040, 0x1b2e, 0x2d60, 0x0078, 0x1b23, 0x6800, 0xa005,
-+      0x6002, 0x00c0, 0x1b3a, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1b39,
-+      0x2c00, 0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040, 0x1b41, 0x1078,
-+      0x18f9, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x2091,
-+      0x8000, 0x2069, 0x4d40, 0x6800, 0xa086, 0x0000, 0x0040, 0x1b55,
-+      0x2091, 0x8001, 0x78e3, 0x0009, 0x007c, 0x6880, 0xa0bc, 0xff00,
-+      0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, 0x18c6,
-+      0x8738, 0xa784, 0x001f, 0x00c0, 0x1b5e, 0x2091, 0x8001, 0x2001,
-+      0x800a, 0x0078, 0x1b75, 0x2001, 0x800c, 0x0078, 0x1b75, 0x1078,
-+      0x1971, 0x2001, 0x800d, 0x0078, 0x1b75, 0x70c2, 0x2061, 0x0000,
-+      0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x6004, 0x2c08, 0x2063,
-+      0x0000, 0x7884, 0x8000, 0x7886, 0x7888, 0xa005, 0x798a, 0x0040,
-+      0x1b8c, 0x2c02, 0x0078, 0x1b8d, 0x798e, 0x007c, 0x6807, 0x0103,
-+      0x0c7e, 0x2061, 0x4d00, 0x2d08, 0x206b, 0x0000, 0x6084, 0x8000,
-+      0x6086, 0x6088, 0xa005, 0x618a, 0x0040, 0x1ba1, 0x2d02, 0x0078,
-+      0x1ba2, 0x618e, 0x0c7f, 0x007c, 0x1078, 0x1bb5, 0x0040, 0x1bb4,
-+      0x0c7e, 0x609c, 0xa065, 0x0040, 0x1baf, 0x1078, 0x18f9, 0x0c7f,
-+      0x609f, 0x0000, 0x1078, 0x188e, 0x007c, 0x788c, 0xa065, 0x0040,
-+      0x1bc7, 0x2091, 0x8000, 0x7884, 0x8001, 0x7886, 0x2c04, 0x788e,
-+      0xa005, 0x00c0, 0x1bc5, 0x788a, 0x8000, 0x2091, 0x8001, 0x007c,
-+      0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x1bd1,
-+      0xa200, 0x0070, 0x1bd5, 0x0078, 0x1bcc, 0x8086, 0x818e, 0x007c,
-+      0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1bfb, 0xa11a, 0x00c8,
-+      0x1bfb, 0x8213, 0x818d, 0x0048, 0x1bec, 0xa11a, 0x00c8, 0x1bed,
-+      0x0070, 0x1bf3, 0x0078, 0x1be1, 0xa11a, 0x2308, 0x8210, 0x0070,
-+      0x1bf3, 0x0078, 0x1be1, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080,
-+      0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078,
-+      0x1bf7, 0x7994, 0x70d0, 0xa106, 0x0040, 0x1c6d, 0x2091, 0x8000,
-+      0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1c6d, 0x7008, 0x7208,
-+      0xa206, 0x00c0, 0x1c6d, 0xa286, 0x0002, 0x00c0, 0x1c6d, 0x2071,
-+      0x0010, 0x1078, 0x1874, 0x0040, 0x1c6d, 0x7a9c, 0x7b98, 0xa184,
-+      0xff00, 0x0040, 0x1c3b, 0x2031, 0x0000, 0x810b, 0x86b5, 0x810b,
-+      0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b,
-+      0x86b5, 0x2100, 0xa210, 0x2600, 0xa319, 0xa4a1, 0x0000, 0xa5a9,
-+      0x0000, 0x0078, 0x1c45, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399,
-+      0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x2009, 0x0020, 0x1078,
-+      0x186f, 0x2091, 0x8001, 0x0040, 0x1c64, 0x1078, 0x188e, 0x78a8,
-+      0x8000, 0x78aa, 0xa086, 0x0002, 0x00c0, 0x1c6d, 0x2091, 0x8000,
-+      0x78e3, 0x0002, 0x78ab, 0x0000, 0x78cc, 0xa085, 0x0003, 0x78ce,
-+      0x2091, 0x8001, 0x0078, 0x1c6d, 0x78ab, 0x0000, 0x1078, 0x1fa1,
-+      0x6004, 0xa084, 0x000f, 0x0079, 0x1c72, 0x2071, 0x0010, 0x2091,
-+      0x8001, 0x007c, 0x1c82, 0x1c91, 0x1cb1, 0x1c82, 0x1cce, 0x1c82,
-+      0x1e29, 0x1e40, 0x1c82, 0x1c82, 0x1c82, 0x1d16, 0x1d7f, 0x1dcf,
-+      0x1de1, 0x1c82, 0x2039, 0x0400, 0x78dc, 0xa705, 0x78de, 0x6008,
-+      0xa705, 0x600a, 0x1078, 0x1ebc, 0x609c, 0x78da, 0x1078, 0x1f89,
-+      0x007c, 0x78dc, 0xa084, 0x0100, 0x0040, 0x1c98, 0x0078, 0x1c82,
-+      0x78df, 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001,
-+      0x609f, 0x0000, 0x0040, 0x1cae, 0x1078, 0x1ebc, 0x0040, 0x1cae,
-+      0x78dc, 0xa085, 0x0100, 0x78de, 0x0078, 0x1cb0, 0x1078, 0x1ee0,
-+      0x007c, 0x78dc, 0xa08c, 0x0e00, 0x00c0, 0x1cba, 0xa084, 0x0100,
-+      0x00c0, 0x1cbc, 0x0078, 0x1c82, 0x1078, 0x1ebc, 0x00c0, 0x1ccd,
-+      0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x1e72, 0xa186,
-+      0x000f, 0x0040, 0x1e72, 0x1078, 0x1ee0, 0x007c, 0x78dc, 0xa084,
-+      0x0100, 0x0040, 0x1cd5, 0x0078, 0x1c82, 0x78df, 0x0000, 0x6714,
-+      0x2011, 0x0001, 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005,
-+      0x0040, 0x1cf8, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020,
-+      0xa08e, 0x0001, 0x0040, 0x1cf8, 0x2039, 0x0000, 0x2011, 0x0002,
-+      0x20a9, 0x0100, 0xa08e, 0x0002, 0x0040, 0x1cf8, 0x0078, 0x1d13,
-+      0x1078, 0x18b9, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+      0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001,
-+      0x0070, 0x1d0c, 0x0078, 0x1cfa, 0x8211, 0x0040, 0x1d13, 0x20a9,
-+      0x0100, 0x0078, 0x1cfa, 0x1078, 0x188e, 0x007c, 0x2001, 0x4d67,
-+      0x2004, 0xa084, 0x8000, 0x0040, 0x1ea1, 0x6114, 0x1078, 0x1fb7,
-+      0x6900, 0xa184, 0x0001, 0x0040, 0x1d37, 0x6028, 0xa084, 0x00ff,
-+      0x00c0, 0x1e99, 0x6800, 0xa084, 0x0001, 0x0040, 0x1ea1, 0x6803,
-+      0x0000, 0x680b, 0x0000, 0x6807, 0x0000, 0x0078, 0x1ea9, 0x2011,
-+      0x0001, 0x601c, 0xa084, 0x4000, 0x0040, 0x1d40, 0xa295, 0x0002,
-+      0x601c, 0xa084, 0x0100, 0x0040, 0x1d47, 0xa295, 0x0008, 0x6020,
-+      0xa084, 0x0002, 0x0040, 0x1d4e, 0xa295, 0x0004, 0x602c, 0xa08c,
-+      0x00ff, 0xa182, 0x0002, 0x0048, 0x1ea5, 0xa182, 0x0019, 0x00c8,
-+      0x1ea5, 0x690e, 0x602c, 0x8007, 0xa08c, 0x00ff, 0xa182, 0x0002,
-+      0x0048, 0x1ea5, 0xa182, 0x0019, 0x00c8, 0x1ea5, 0x6912, 0x6030,
-+      0xa005, 0x00c0, 0x1d6d, 0x2001, 0x001e, 0x8000, 0x6816, 0x6028,
-+      0xa084, 0x00ff, 0x0040, 0x1ea1, 0x6806, 0x6028, 0x8007, 0xa084,
-+      0x00ff, 0x0040, 0x1ea1, 0x680a, 0x6a02, 0x0078, 0x1ea9, 0x2001,
-+      0x4d67, 0x2004, 0xa084, 0x8000, 0x0040, 0x1ea1, 0x6114, 0x1078,
-+      0x1fb7, 0x2091, 0x8000, 0x6a04, 0x6b08, 0x6418, 0xa484, 0x0003,
-+      0x0040, 0x1da5, 0x6128, 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x1d9e,
-+      0x2100, 0xa210, 0x0048, 0x1dcb, 0x0078, 0x1da5, 0x8001, 0x00c0,
-+      0x1dcb, 0x2100, 0xa212, 0x0048, 0x1dcb, 0xa484, 0x000c, 0x0040,
-+      0x1dbf, 0x6128, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0,
-+      0x1db7, 0x2100, 0xa318, 0x0048, 0x1dcb, 0x0078, 0x1dbf, 0xa082,
-+      0x0004, 0x00c0, 0x1dcb, 0x2100, 0xa31a, 0x0048, 0x1dcb, 0x6030,
-+      0xa005, 0x0040, 0x1dc5, 0x8000, 0x6816, 0x6a06, 0x6b0a, 0x2091,
-+      0x8001, 0x0078, 0x1ea9, 0x2091, 0x8001, 0x0078, 0x1ea5, 0x6114,
-+      0x1078, 0x1fb7, 0x2091, 0x8000, 0x6b08, 0x8318, 0x0048, 0x1ddd,
-+      0x6b0a, 0x2091, 0x8001, 0x0078, 0x1eb8, 0x2091, 0x8001, 0x0078,
-+      0x1ea5, 0x6024, 0x8007, 0xa084, 0x00ff, 0x0040, 0x1dff, 0xa086,
-+      0x0080, 0x00c0, 0x1e27, 0x20a9, 0x0008, 0x2069, 0x7110, 0x2091,
-+      0x8000, 0x6800, 0xa084, 0xfcff, 0x6802, 0xade8, 0x0008, 0x0070,
-+      0x1dfb, 0x0078, 0x1df1, 0x2091, 0x8001, 0x0078, 0x1ea9, 0x6028,
-+      0xa015, 0x0040, 0x1e27, 0x6114, 0x1078, 0x1fb7, 0x0d7e, 0xade8,
-+      0x0007, 0x2091, 0x8000, 0x6800, 0xa00d, 0x0040, 0x1e24, 0xa206,
-+      0x0040, 0x1e15, 0x2168, 0x0078, 0x1e0b, 0x0c7e, 0x2160, 0x6000,
-+      0x6802, 0x1078, 0x188e, 0x0c7f, 0x0d7f, 0x6808, 0x8000, 0x680a,
-+      0x2091, 0x8001, 0x0078, 0x1eb8, 0x2091, 0x8001, 0x0d7f, 0x0078,
-+      0x1ea1, 0x6114, 0x1078, 0x1fb7, 0x6800, 0xa084, 0x0001, 0x0040,
-+      0x1e91, 0x2091, 0x8000, 0x6a04, 0x8210, 0x0048, 0x1e3c, 0x6a06,
-+      0x2091, 0x8001, 0x0078, 0x1eb8, 0x2091, 0x8001, 0x0078, 0x1ea5,
-+      0x6114, 0x1078, 0x1fb7, 0x60be, 0x6900, 0xa184, 0x0008, 0x0040,
-+      0x1e4d, 0x601c, 0xa085, 0x0100, 0x601e, 0xa184, 0x0001, 0x0040,
-+      0x1ea1, 0xa184, 0x0100, 0x00c0, 0x1e8d, 0xa184, 0x0200, 0x00c0,
-+      0x1e89, 0x681c, 0xa005, 0x00c0, 0x1e95, 0x78df, 0x0000, 0x6004,
-+      0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f, 0x0000, 0x0040,
-+      0x1e72, 0x1078, 0x1ebc, 0x0040, 0x1e72, 0x78dc, 0xa085, 0x0100,
-+      0x78de, 0x007c, 0x78d7, 0x0000, 0x78db, 0x0000, 0x6024, 0xa084,
-+      0xff00, 0x6026, 0x6020, 0xa084, 0x8000, 0x0040, 0x1e85, 0x1078,
-+      0x37e7, 0x0040, 0x1c01, 0x0078, 0x1e91, 0x1078, 0x1a96, 0x0078,
-+      0x1c01, 0x2009, 0x0017, 0x0078, 0x1eab, 0x2009, 0x000e, 0x0078,
-+      0x1eab, 0x2009, 0x0007, 0x0078, 0x1eab, 0x2009, 0x0035, 0x0078,
-+      0x1eab, 0x2009, 0x003e, 0x0078, 0x1eab, 0x2009, 0x0004, 0x0078,
-+      0x1eab, 0x2009, 0x0006, 0x0078, 0x1eab, 0x2009, 0x0016, 0x0078,
-+      0x1eab, 0x2009, 0x0001, 0x6024, 0xa084, 0xff00, 0xa105, 0x6026,
-+      0x2091, 0x8000, 0x1078, 0x1b7d, 0x2091, 0x8001, 0x0078, 0x1c01,
-+      0x1078, 0x188e, 0x0078, 0x1c01, 0x78d4, 0xa06d, 0x00c0, 0x1ec7,
-+      0x2c00, 0x78d6, 0x78da, 0x609f, 0x0000, 0x0078, 0x1ed3, 0x2c00,
-+      0x689e, 0x609f, 0x0000, 0x78d6, 0x2d00, 0x6002, 0x78d8, 0xad06,
-+      0x00c0, 0x1ed3, 0x6002, 0x78d0, 0x8001, 0x78d2, 0x00c0, 0x1edf,
-+      0x78dc, 0xa084, 0xfeff, 0x78de, 0x78d8, 0x2060, 0xa006, 0x007c,
-+      0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0xe1ff, 0x601e, 0xa184,
-+      0x0060, 0x0040, 0x1eef, 0x0e7e, 0x1078, 0x4367, 0x0e7f, 0x6596,
-+      0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714,
-+      0x1078, 0x18b9, 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x00c0,
-+      0x1f16, 0x6808, 0xa084, 0x0001, 0x0040, 0x1f16, 0x2091, 0x8001,
-+      0x1078, 0x1906, 0x2091, 0x8000, 0x1078, 0x1b7d, 0x2091, 0x8001,
-+      0x78d7, 0x0000, 0x78db, 0x0000, 0x0078, 0x1f88, 0x6024, 0xa096,
-+      0x0001, 0x00c0, 0x1f1d, 0x8000, 0x6026, 0x6a10, 0x6814, 0x2091,
-+      0x8001, 0xa202, 0x0048, 0x1f2c, 0x0040, 0x1f2c, 0x2039, 0x0200,
-+      0x1078, 0x1f89, 0x0078, 0x1f88, 0x2c08, 0x2091, 0x8000, 0x60a0,
-+      0xa084, 0x8000, 0x0040, 0x1f59, 0x6800, 0xa065, 0x0040, 0x1f5e,
-+      0x6a04, 0x0e7e, 0x2071, 0x4d40, 0x7000, 0xa084, 0x0001, 0x0040,
-+      0x1f53, 0x7048, 0xa206, 0x00c0, 0x1f53, 0x6b04, 0x231c, 0x2160,
-+      0x6302, 0x2300, 0xa005, 0x00c0, 0x1f4e, 0x6902, 0x2260, 0x6102,
-+      0x0e7f, 0x0078, 0x1f65, 0x2160, 0x6202, 0x6906, 0x0e7f, 0x0078,
-+      0x1f65, 0x6800, 0xa065, 0x0040, 0x1f5e, 0x6102, 0x6902, 0x00c0,
-+      0x1f62, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160, 0x60a0, 0xa084,
-+      0x8000, 0x0040, 0x1f6f, 0x6808, 0xa084, 0xfffc, 0x680a, 0x6810,
-+      0x8000, 0x6812, 0x2091, 0x8001, 0x6808, 0xa08c, 0x0040, 0x0040,
-+      0x1f7e, 0xa086, 0x0040, 0x680a, 0x1078, 0x1917, 0x2091, 0x8000,
-+      0x1078, 0x20a0, 0x2091, 0x8001, 0x78db, 0x0000, 0x78d7, 0x0000,
-+      0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x1b7d,
-+      0x2091, 0x8001, 0x78d8, 0xa065, 0x0040, 0x1f9c, 0x609c, 0x78da,
-+      0x609f, 0x0000, 0x0078, 0x1f8c, 0x78d7, 0x0000, 0x78db, 0x0000,
-+      0x007c, 0x7990, 0x7894, 0x8000, 0xa10a, 0x00c8, 0x1fa8, 0xa006,
-+      0x7896, 0x70d2, 0x7804, 0xa005, 0x0040, 0x1fb6, 0x8001, 0x7806,
-+      0x00c0, 0x1fb6, 0x0068, 0x1fb6, 0x2091, 0x4080, 0x007c, 0x0c7e,
-+      0x1078, 0x3977, 0x2c68, 0x0c7f, 0x007c, 0x0010, 0x202e, 0x0068,
-+      0x202e, 0x2029, 0x0000, 0x78cb, 0x0000, 0x788c, 0xa065, 0x0040,
-+      0x2027, 0x2009, 0x4d74, 0x2104, 0xa084, 0x0001, 0x0040, 0x1ff5,
-+      0x6004, 0xa086, 0x0103, 0x00c0, 0x1ff5, 0x6018, 0xa005, 0x00c0,
-+      0x1ff5, 0x6014, 0xa005, 0x00c0, 0x1ff5, 0x0d7e, 0x2069, 0x0000,
-+      0x6818, 0xa084, 0x0001, 0x00c0, 0x1ff4, 0x6010, 0x70c6, 0x600c,
-+      0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, 0x0d7f,
-+      0x1078, 0x1ba4, 0x0078, 0x202c, 0x0d7f, 0x1078, 0x202f, 0x0040,
-+      0x2027, 0x6204, 0xa294, 0x00ff, 0xa296, 0x0003, 0x0040, 0x2007,
-+      0x6204, 0xa296, 0x0110, 0x00c0, 0x2015, 0x78cb, 0x0001, 0x6204,
-+      0xa294, 0xff00, 0x8217, 0x8211, 0x0040, 0x2015, 0x85ff, 0x00c0,
-+      0x2027, 0x8210, 0xa202, 0x00c8, 0x2027, 0x057e, 0x1078, 0x203e,
-+      0x057f, 0x0040, 0x2022, 0x78e0, 0xa086, 0x0003, 0x0040, 0x2027,
-+      0x0078, 0x2015, 0x8528, 0x78c8, 0xa005, 0x0040, 0x1fc5, 0x85ff,
-+      0x0040, 0x202e, 0x2091, 0x4080, 0x78b0, 0x70d6, 0x007c, 0x7bac,
-+      0x79b0, 0x70d4, 0xa102, 0x00c0, 0x2038, 0x2300, 0xa005, 0x007c,
-+      0x0048, 0x203c, 0xa302, 0x007c, 0x8002, 0x007c, 0x2001, 0x04fd,
-+      0x2004, 0xa082, 0x0005, 0x00c8, 0x2058, 0x2091, 0x8000, 0x2071,
-+      0x0020, 0x7004, 0xa005, 0x00c0, 0x208d, 0x7008, 0x7208, 0xa206,
-+      0x00c0, 0x208d, 0xa286, 0x0002, 0x00c0, 0x208d, 0x2071, 0x0010,
-+      0x1078, 0x2092, 0x2009, 0x0020, 0x6004, 0xa086, 0x0103, 0x00c0,
-+      0x2067, 0x6028, 0xa005, 0x00c0, 0x2067, 0x2009, 0x000e, 0x1078,
-+      0x186a, 0x0040, 0x2080, 0x78c4, 0x8000, 0x78c6, 0xa086, 0x0002,
-+      0x00c0, 0x208d, 0x2091, 0x8000, 0x78e3, 0x0003, 0x78c7, 0x0000,
-+      0x78cc, 0xa085, 0x0300, 0x78ce, 0x2091, 0x8001, 0x0078, 0x208d,
-+      0x78c7, 0x0000, 0x1078, 0x1ba4, 0x79ac, 0x78b0, 0x8000, 0xa10a,
-+      0x00c8, 0x208b, 0xa006, 0x78b2, 0xa006, 0x2071, 0x0010, 0x2091,
-+      0x8001, 0x007c, 0x8107, 0x8004, 0x8004, 0x7ab8, 0x7bb4, 0xa210,
-+      0xa399, 0x0000, 0x007c, 0x2009, 0x4d5b, 0x2091, 0x8000, 0x200a,
-+      0x0f7e, 0x0e7e, 0x2071, 0x4d40, 0x7000, 0xa086, 0x0000, 0x00c0,
-+      0x20ba, 0x2009, 0x4d12, 0x2104, 0xa005, 0x00c0, 0x20ba, 0x2079,
-+      0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x20ba, 0x0018, 0x20ba,
-+      0x781b, 0x004b, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x2071,
-+      0x4d40, 0x2091, 0x8000, 0x7000, 0xa086, 0x0000, 0x00c0, 0x20d3,
-+      0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x20d3, 0x0018,
-+      0x20d3, 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, 0x0f7f, 0x007c,
-+      0x127e, 0x2091, 0x2300, 0x2071, 0x4d40, 0x2079, 0x0100, 0x784b,
-+      0x000f, 0x0098, 0x20e6, 0x7838, 0x0078, 0x20df, 0x20a9, 0x0040,
-+      0x7800, 0xa082, 0x0004, 0x0048, 0x20ef, 0x20a9, 0x0060, 0x789b,
-+      0x0000, 0x78af, 0x0000, 0x78af, 0x0000, 0x0070, 0x20f9, 0x0078,
-+      0x20f1, 0x7800, 0xa082, 0x0004, 0x0048, 0x2108, 0x70bf, 0x009f,
-+      0x2019, 0x4ab1, 0x1078, 0x2137, 0x702f, 0x8001, 0x0078, 0x2114,
-+      0x70bf, 0x0000, 0x2019, 0x4916, 0x1078, 0x2137, 0x2019, 0x4955,
-+      0x1078, 0x2137, 0x702f, 0x8000, 0x7003, 0x0000, 0x1078, 0x2240,
-+      0x7004, 0xa084, 0x000f, 0x017e, 0x0028, 0x2122, 0xa085, 0x6280,
-+      0x0078, 0x2124, 0xa085, 0x62c0, 0x017f, 0x7806, 0x780f, 0xb204,
-+      0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7047, 0x0008,
-+      0x7053, 0x4d7f, 0x704f, 0x0000, 0x127f, 0x2000, 0x007c, 0x137e,
-+      0x147e, 0x157e, 0x047e, 0x20a1, 0x012b, 0x2304, 0xa005, 0x789a,
-+      0x0040, 0x2157, 0x8318, 0x2324, 0x8318, 0x2398, 0x24a8, 0xa484,
-+      0xff00, 0x0040, 0x214f, 0xa482, 0x0100, 0x20a9, 0x0100, 0x2020,
-+      0x53a6, 0xa005, 0x00c0, 0x2146, 0x3318, 0x0078, 0x213d, 0x047f,
-+      0x157f, 0x147f, 0x137f, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101,
-+      0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x2240, 0x007c,
-+      0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x2171, 0x0078,
-+      0x216c, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012,
-+      0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x2182,
-+      0x0078, 0x217d, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205,
-+      0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070,
-+      0x2193, 0x0078, 0x218e, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff,
-+      0xa105, 0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf,
-+      0xa105, 0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e,
-+      0x2061, 0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103,
-+      0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4,
-+      0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080,
-+      0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085, 0x0020,
-+      0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e,
-+      0x2061, 0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae,
-+      0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818,
-+      0xa005, 0x0040, 0x221e, 0x2061, 0x7100, 0x1078, 0x2226, 0x0040,
-+      0x220a, 0x20a9, 0x0000, 0x2061, 0x7000, 0x0c7e, 0x1078, 0x2226,
-+      0x0040, 0x21fa, 0x0c7f, 0x8c60, 0x0070, 0x21f8, 0x0078, 0x21ed,
-+      0x0078, 0x221e, 0x007f, 0xa082, 0x7000, 0x2071, 0x4d40, 0x7086,
-+      0x7182, 0x2001, 0x0004, 0x706e, 0x7093, 0x000f, 0x1078, 0x209b,
-+      0x0078, 0x221a, 0x60c0, 0xa005, 0x00c0, 0x221e, 0x2071, 0x4d40,
-+      0x7182, 0x2c00, 0x708a, 0x2001, 0x0006, 0x706e, 0x7093, 0x000f,
-+      0x1078, 0x209b, 0x2001, 0x0000, 0x0078, 0x2220, 0x2001, 0x0001,
-+      0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005,
-+      0x0040, 0x223d, 0x2060, 0x6010, 0xa306, 0x00c0, 0x223a, 0x600c,
-+      0xa206, 0x00c0, 0x223a, 0x6014, 0xa106, 0x00c0, 0x223a, 0xa006,
-+      0x0078, 0x223f, 0x6000, 0x0078, 0x2227, 0xa085, 0x0001, 0x007c,
-+      0x2011, 0x4d41, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204,
-+      0xa084, 0x0100, 0x0040, 0x2256, 0x2021, 0xff04, 0x2122, 0x810b,
-+      0x810b, 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e,
-+      0x68e4, 0xa08c, 0x0020, 0x0040, 0x22aa, 0xa084, 0x0006, 0x00c0,
-+      0x22aa, 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xa0f0, 0x4f80, 0x7004, 0xa084, 0x000a, 0x00c0, 0x22aa, 0x7108,
-+      0xa194, 0xff00, 0x0040, 0x22aa, 0xa18c, 0x00ff, 0x2001, 0x000c,
-+      0xa106, 0x0040, 0x2291, 0x2001, 0x0012, 0xa106, 0x0040, 0x2295,
-+      0x2001, 0x0014, 0xa106, 0x0040, 0x2299, 0x2001, 0x0019, 0xa106,
-+      0x0040, 0x229d, 0x2001, 0x0032, 0xa106, 0x0040, 0x22a1, 0x0078,
-+      0x22a5, 0x2009, 0x0012, 0x0078, 0x22a7, 0x2009, 0x0014, 0x0078,
-+      0x22a7, 0x2009, 0x0019, 0x0078, 0x22a7, 0x2009, 0x0020, 0x0078,
-+      0x22a7, 0x2009, 0x003f, 0x0078, 0x22a7, 0x2011, 0x0000, 0x2100,
-+      0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, 0x22ac, 0x2091, 0x8000,
-+      0x2071, 0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x22b3,
-+      0x007f, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002,
-+      0x70db, 0x0737, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001,
-+      0x2091, 0x4080, 0x0078, 0x22ca, 0x107e, 0x007e, 0x127e, 0x2091,
-+      0x2300, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x77c2, 0x74c6, 0x76ca,
-+      0x75ce, 0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0079,
-+      0x22e1, 0x22f3, 0x22f3, 0x22f3, 0x2624, 0x3741, 0x22f1, 0x2322,
-+      0x232c, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22f1,
-+      0x22f1, 0x1078, 0x22ac, 0x8507, 0xa084, 0x001f, 0x0079, 0x22f8,
-+      0x2336, 0x2624, 0x27d8, 0x28d5, 0x28fd, 0x2b6d, 0x2e18, 0x2e5b,
-+      0x2ea6, 0x2f2b, 0x2fb1, 0x3056, 0x2322, 0x26fc, 0x2ded, 0x2318,
-+      0x3a92, 0x3ab2, 0x3be5, 0x3bf1, 0x3ca2, 0x2318, 0x2318, 0x3d53,
-+      0x3d57, 0x3a90, 0x2318, 0x3b8c, 0x2318, 0x399a, 0x232c, 0x2318,
-+      0x1078, 0x22ac, 0x0018, 0x22d1, 0x127f, 0x2091, 0x8001, 0x007f,
-+      0x107f, 0x007c, 0x2019, 0x4a07, 0x1078, 0x2137, 0x702f, 0x0001,
-+      0x781b, 0x004f, 0x0078, 0x231a, 0x2019, 0x4955, 0x1078, 0x2137,
-+      0x702f, 0x8000, 0x781b, 0x00e1, 0x0078, 0x231a, 0x7242, 0x2009,
-+      0x4d0f, 0x200b, 0x0000, 0xa584, 0x0001, 0x00c0, 0x39a6, 0x0040,
-+      0x2353, 0x1078, 0x22ac, 0x7003, 0x0000, 0x704b, 0x0000, 0x7043,
-+      0x0000, 0x7037, 0x0000, 0x1078, 0x371d, 0x0018, 0x22d1, 0x2009,
-+      0x4d0f, 0x200b, 0x0000, 0x7068, 0xa005, 0x00c0, 0x2426, 0x706c,
-+      0xa084, 0x0007, 0x0079, 0x235c, 0x245d, 0x2364, 0x2370, 0x238f,
-+      0x23b3, 0x2404, 0x23db, 0x2364, 0x1078, 0x3705, 0x2009, 0x0048,
-+      0x1078, 0x2cc3, 0x00c0, 0x236e, 0x7003, 0x0004, 0x0078, 0x231a,
-+      0x1078, 0x3705, 0x00c0, 0x238d, 0x7080, 0x8007, 0x789b, 0x0080,
-+      0x78aa, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab,
-+      0x0001, 0x785b, 0x0004, 0x2009, 0x00f2, 0x1078, 0x2cb7, 0x00c0,
-+      0x238d, 0x7003, 0x0004, 0x7093, 0x000f, 0x0078, 0x231a, 0x1078,
-+      0x3705, 0x00c0, 0x23b1, 0x7180, 0x8107, 0x789b, 0x0080, 0x78aa,
-+      0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
-+      0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
-+      0x00f2, 0x1078, 0x2cb7, 0x00c0, 0x23b1, 0x7003, 0x0004, 0x7093,
-+      0x000f, 0x0078, 0x231a, 0x1078, 0x3705, 0x00c0, 0x23d9, 0x7180,
-+      0x8107, 0x789b, 0x0080, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x001f,
-+      0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x7184, 0x79aa, 0x78ab,
-+      0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009,
-+      0x00f2, 0x1078, 0x2cb7, 0x00c0, 0x23d9, 0x7003, 0x0004, 0x7093,
-+      0x000f, 0x0078, 0x231a, 0x1078, 0x3705, 0x00c0, 0x2402, 0x7180,
-+      0x8107, 0x789b, 0x0080, 0x78aa, 0x789b, 0x0010, 0xa18c, 0x001f,
-+      0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab,
-+      0x0002, 0x785b, 0x0004, 0x2009, 0x00f2, 0x1078, 0x2cb7, 0x00c0,
-+      0x2402, 0x7088, 0x708b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0002,
-+      0x7093, 0x000f, 0x0078, 0x231a, 0x1078, 0x3705, 0x00c0, 0x231a,
-+      0x7088, 0x2068, 0x6f14, 0x1078, 0x35fc, 0x2c50, 0x1078, 0x37b5,
-+      0x789b, 0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa,
-+      0x6e1c, 0x2041, 0x0001, 0x708c, 0xa084, 0x0400, 0x2001, 0x0004,
-+      0x0040, 0x2424, 0x2001, 0x0006, 0x0078, 0x2545, 0x1078, 0x3705,
-+      0x00c0, 0x231a, 0x789b, 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078,
-+      0x35fc, 0x2c50, 0x1078, 0x37b5, 0x6008, 0xa085, 0x0010, 0x600a,
-+      0x6824, 0xa005, 0x0040, 0x2444, 0xa082, 0x0006, 0x0048, 0x2442,
-+      0x0078, 0x2444, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f, 0xa39d,
-+      0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, 0x2452, 0xa684, 0x0001,
-+      0x0040, 0x2454, 0xa39c, 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041,
-+      0x0001, 0x2001, 0x0003, 0x0078, 0x2545, 0x0018, 0x22d1, 0x744c,
-+      0xa485, 0x0000, 0x0040, 0x2477, 0xa080, 0x4d80, 0x2030, 0x7150,
-+      0x8108, 0xa12a, 0x0048, 0x246e, 0x2009, 0x4d80, 0x2164, 0x6504,
-+      0x85ff, 0x00c0, 0x2488, 0x8421, 0x00c0, 0x2468, 0x7152, 0x7003,
-+      0x0000, 0x704b, 0x0000, 0x7040, 0xa005, 0x0040, 0x39a6, 0x0078,
-+      0x231a, 0x764c, 0xa6b0, 0x4d80, 0x7150, 0x2600, 0x0078, 0x2473,
-+      0x7152, 0x2568, 0x2558, 0x754a, 0x2c50, 0x6034, 0xa085, 0x0000,
-+      0x00c0, 0x2485, 0x6708, 0x773a, 0xa784, 0x033f, 0x0040, 0x24be,
-+      0xa784, 0x0021, 0x00c0, 0x2485, 0xa784, 0x0002, 0x0040, 0x24a7,
-+      0xa784, 0x0004, 0x0040, 0x2485, 0xa7bc, 0xfffb, 0x670a, 0xa784,
-+      0x0008, 0x00c0, 0x2485, 0xa784, 0x0010, 0x00c0, 0x2485, 0xa784,
-+      0x0200, 0x00c0, 0x2485, 0xa784, 0x0100, 0x0040, 0x24be, 0x6018,
-+      0xa005, 0x00c0, 0x2485, 0xa7bc, 0xfeff, 0x670a, 0x6823, 0x0000,
-+      0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, 0x24ce, 0x601c, 0xa102,
-+      0x0048, 0x24d1, 0x0040, 0x24d1, 0x0078, 0x2481, 0x81ff, 0x00c0,
-+      0x2481, 0x68c3, 0x0000, 0xa784, 0x0080, 0x00c0, 0x24d9, 0x700c,
-+      0x6022, 0xa7bc, 0xff7f, 0x670a, 0x1078, 0x37b5, 0x0018, 0x22d1,
-+      0x789b, 0x0010, 0xa046, 0x1078, 0x3705, 0x00c0, 0x231a, 0x6b14,
-+      0xa39c, 0x001f, 0xa39d, 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040,
-+      0x24f5, 0xa684, 0x0001, 0x0040, 0x24f7, 0xa39c, 0xffbf, 0xa684,
-+      0x0010, 0x0040, 0x24fd, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684,
-+      0x000e, 0x00c0, 0x2508, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x2543,
-+      0x7158, 0xa18c, 0x0800, 0x0040, 0x322a, 0x2011, 0x0020, 0xa684,
-+      0x0008, 0x00c0, 0x2519, 0x8210, 0xa684, 0x0002, 0x00c0, 0x2519,
-+      0x8210, 0x7aaa, 0x8840, 0x1078, 0x371d, 0x6a14, 0x610c, 0x8108,
-+      0xa18c, 0x00ff, 0xa1e0, 0x7000, 0x2c64, 0x8cff, 0x0040, 0x253a,
-+      0x6014, 0xa206, 0x00c0, 0x2524, 0x60b8, 0x8001, 0x60ba, 0x00c0,
-+      0x251f, 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f,
-+      0x0078, 0x245d, 0x1078, 0x3705, 0x00c0, 0x231a, 0x2a60, 0x610e,
-+      0x79aa, 0x8840, 0x7132, 0x2001, 0x0001, 0x007e, 0x715c, 0xa184,
-+      0x0018, 0x0040, 0x2560, 0xa184, 0x0010, 0x0040, 0x2553, 0x1078,
-+      0x3429, 0x00c0, 0x2583, 0xa184, 0x0008, 0x0040, 0x2560, 0x69a0,
-+      0xa184, 0x0600, 0x00c0, 0x2560, 0x1078, 0x331a, 0x0078, 0x2583,
-+      0x69a0, 0xa184, 0x0800, 0x0040, 0x2577, 0x0c7e, 0x027e, 0x2960,
-+      0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106,
-+      0x027f, 0x0c7f, 0x1078, 0x3429, 0x00c0, 0x2583, 0x69a0, 0xa184,
-+      0x0200, 0x0040, 0x257f, 0x1078, 0x3369, 0x0078, 0x2583, 0xa184,
-+      0x0400, 0x00c0, 0x255c, 0x69a0, 0xa184, 0x1000, 0x0040, 0x258e,
-+      0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x21af, 0x007f, 0x7002,
-+      0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x259c, 0xa086, 0x0060,
-+      0x00c0, 0x259c, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x25a1, 0xa18d,
-+      0x0004, 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b,
-+      0x0061, 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c,
-+      0x0040, 0x3230, 0xa18c, 0x00f8, 0x00c0, 0x3230, 0x157e, 0x137e,
-+      0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+      0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007,
-+      0x789b, 0x0080, 0x78aa, 0x6d94, 0x7dd6, 0x7dde, 0x6e98, 0x7ed2,
-+      0x7eda, 0x1078, 0x3705, 0x00c0, 0x25e6, 0x702c, 0x8003, 0x0048,
-+      0x25df, 0x2019, 0x4955, 0x1078, 0x2137, 0x702f, 0x8000, 0x7830,
-+      0xa084, 0x00c0, 0x00c0, 0x25e6, 0x0098, 0x25ee, 0x6008, 0xa084,
-+      0xffef, 0x600a, 0x1078, 0x371d, 0x0078, 0x2343, 0x7200, 0xa284,
-+      0x0007, 0xa086, 0x0001, 0x00c0, 0x25fb, 0x781b, 0x004f, 0x1078,
-+      0x371d, 0x0078, 0x260c, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b,
-+      0x004f, 0x1078, 0x371d, 0x7200, 0x2500, 0xa605, 0x0040, 0x260c,
-+      0xa284, 0x0007, 0x1079, 0x261a, 0xad80, 0x0009, 0x7036, 0xa284,
-+      0x0007, 0xa086, 0x0001, 0x00c0, 0x231a, 0x6018, 0x8000, 0x601a,
-+      0x0078, 0x231a, 0x2622, 0x45ed, 0x45ed, 0x45dc, 0x45ed, 0x2622,
-+      0x45dc, 0x2622, 0x1078, 0x22ac, 0x1078, 0x3705, 0x0f7e, 0x2079,
-+      0x4d00, 0x78cc, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2648, 0x706c,
-+      0xa086, 0x0001, 0x00c0, 0x2637, 0x706e, 0x0078, 0x26d9, 0x706c,
-+      0xa086, 0x0005, 0x00c0, 0x2646, 0x7088, 0x2068, 0x681b, 0x0004,
-+      0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x706f, 0x0000,
-+      0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, 0x2669, 0xa186,
-+      0x0007, 0x00c0, 0x2659, 0x2009, 0x4d38, 0x200b, 0x0005, 0x0078,
-+      0x2669, 0x2009, 0x4d13, 0x2104, 0x2009, 0x4d12, 0x200a, 0x2009,
-+      0x4d38, 0x200b, 0x0001, 0x706f, 0x0000, 0x7073, 0x0001, 0x0078,
-+      0x266b, 0x706f, 0x0000, 0x1078, 0x431b, 0x157e, 0x20a9, 0x0010,
-+      0x2039, 0x0000, 0x1078, 0x34f9, 0xa7b8, 0x0100, 0x0070, 0x267a,
-+      0x0078, 0x2672, 0x157f, 0x7000, 0x0079, 0x267e, 0x26aa, 0x2693,
-+      0x2693, 0x2686, 0x26aa, 0x26aa, 0x26aa, 0x26aa, 0x2021, 0x4d5a,
-+      0x2404, 0xa005, 0x0040, 0x26aa, 0xad06, 0x00c0, 0x2693, 0x6800,
-+      0x2022, 0x0078, 0x26a3, 0x6820, 0xa084, 0x0001, 0x00c0, 0x269f,
-+      0x6f14, 0x1078, 0x35fc, 0x1078, 0x3201, 0x0078, 0x26a3, 0x7060,
-+      0x2060, 0x6800, 0x6002, 0x6a1a, 0x6820, 0xa085, 0x0008, 0x6822,
-+      0x1078, 0x1b8e, 0x2021, 0x7100, 0x1078, 0x26e6, 0x2021, 0x4d5a,
-+      0x1078, 0x26e6, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7000, 0x1078,
-+      0x26e6, 0x8420, 0x0070, 0x26be, 0x0078, 0x26b7, 0x2061, 0x5000,
-+      0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0x81ff, 0x0040,
-+      0x26cd, 0xa102, 0x0050, 0x26cd, 0x6012, 0x601b, 0x0000, 0xace0,
-+      0x0010, 0x0070, 0x26d5, 0x0078, 0x26c4, 0x8421, 0x00c0, 0x26c2,
-+      0x157f, 0x709c, 0xa084, 0x8000, 0x0040, 0x26e0, 0x1078, 0x3810,
-+      0x7003, 0x0000, 0x704b, 0x0000, 0x0078, 0x231a, 0x047e, 0x2404,
-+      0xa005, 0x0040, 0x26f8, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6820,
-+      0xa085, 0x0008, 0x6822, 0x1078, 0x1b8e, 0x007f, 0x0078, 0x26e8,
-+      0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x2702,
-+      0x1078, 0x22ac, 0x2300, 0x0079, 0x2705, 0x2708, 0x277b, 0x2798,
-+      0xa282, 0x0002, 0x0040, 0x270e, 0x1078, 0x22ac, 0x706c, 0x706f,
-+      0x0000, 0x7093, 0x0000, 0x0079, 0x2715, 0x271d, 0x271d, 0x271f,
-+      0x2753, 0x3236, 0x271d, 0x2753, 0x271d, 0x1078, 0x22ac, 0x7780,
-+      0x1078, 0x34f9, 0x7780, 0xa7bc, 0x0f00, 0x1078, 0x35fc, 0x6018,
-+      0xa005, 0x0040, 0x274a, 0x2021, 0x7100, 0x2009, 0x0004, 0x2011,
-+      0x0010, 0x1078, 0x27b3, 0x0040, 0x274a, 0x157e, 0x20a9, 0x0000,
-+      0x2021, 0x7000, 0x047e, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078,
-+      0x27b3, 0x047f, 0x0040, 0x2749, 0x8420, 0x0070, 0x2749, 0x0078,
-+      0x273a, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0, 0x2725, 0x0078,
-+      0x2343, 0x0078, 0x2343, 0x7780, 0x1078, 0x35fc, 0x6018, 0xa005,
-+      0x0040, 0x2779, 0x2021, 0x7100, 0x2009, 0x0005, 0x2011, 0x0020,
-+      0x1078, 0x27b3, 0x0040, 0x2779, 0x157e, 0x20a9, 0x0000, 0x2021,
-+      0x7000, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x27b3,
-+      0x047f, 0x0040, 0x2778, 0x8420, 0x0070, 0x2778, 0x0078, 0x2769,
-+      0x157f, 0x0078, 0x2343, 0x2200, 0x0079, 0x277e, 0x2781, 0x2783,
-+      0x2783, 0x1078, 0x22ac, 0x2009, 0x0012, 0x706c, 0xa086, 0x0002,
-+      0x0040, 0x278c, 0x2009, 0x000e, 0x6818, 0xa084, 0x8000, 0x0040,
-+      0x2792, 0x691a, 0x706f, 0x0000, 0x7073, 0x0001, 0x0078, 0x3693,
-+      0x2200, 0x0079, 0x279b, 0x27a0, 0x2783, 0x279e, 0x1078, 0x22ac,
-+      0x1078, 0x431b, 0x7000, 0xa086, 0x0001, 0x00c0, 0x31c6, 0x1078,
-+      0x3217, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x31b9, 0x0040,
-+      0x31c6, 0x0078, 0x245d, 0x2404, 0xa005, 0x0040, 0x27d4, 0x2068,
-+      0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x27c2, 0x2d20, 0x007f,
-+      0x0078, 0x27b4, 0x007f, 0x2022, 0x691a, 0x6820, 0xa205, 0x6822,
-+      0x1078, 0x1b8e, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef,
-+      0x600a, 0x1078, 0x3217, 0x007c, 0xa085, 0x0001, 0x0078, 0x27d3,
-+      0x2300, 0x0079, 0x27db, 0x27e0, 0x27de, 0x2879, 0x1078, 0x22ac,
-+      0x78ec, 0xa084, 0x0001, 0x00c0, 0x27f4, 0x7000, 0xa086, 0x0004,
-+      0x00c0, 0x27ec, 0x0078, 0x2817, 0x1078, 0x3217, 0x6008, 0xa084,
-+      0xffef, 0x600a, 0x0078, 0x31c6, 0x78e4, 0xa005, 0x00d0, 0x2817,
-+      0x0018, 0x2817, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2803, 0x781b,
-+      0x004f, 0x0078, 0x231a, 0x78ec, 0xa084, 0x0003, 0x0040, 0x27ff,
-+      0x2100, 0xa084, 0x0007, 0x0079, 0x280d, 0x2850, 0x285b, 0x2841,
-+      0x2815, 0x36f8, 0x36f8, 0x2815, 0x286a, 0x1078, 0x22ac, 0x7000,
-+      0xa086, 0x0004, 0x00c0, 0x2831, 0x706c, 0xa086, 0x0002, 0x00c0,
-+      0x2827, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x26fc, 0x706c,
-+      0xa086, 0x0006, 0x0040, 0x2821, 0x706c, 0xa086, 0x0004, 0x0040,
-+      0x2821, 0x79e4, 0xa184, 0x0030, 0x0040, 0x283b, 0x78ec, 0xa084,
-+      0x0003, 0x00c0, 0x283d, 0x0078, 0x2ded, 0x2001, 0x0003, 0x0078,
-+      0x2b81, 0x6818, 0xa084, 0x8000, 0x0040, 0x2848, 0x681b, 0x001d,
-+      0x1078, 0x34d8, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x2857, 0x681b, 0x001d, 0x1078,
-+      0x34d8, 0x0078, 0x36c3, 0x6818, 0xa084, 0x8000, 0x0040, 0x2862,
-+      0x681b, 0x001d, 0x1078, 0x34d8, 0x782b, 0x3008, 0x781b, 0x00de,
-+      0x0078, 0x231a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2871, 0x681b,
-+      0x001d, 0x1078, 0x34d8, 0x782b, 0x3008, 0x781b, 0x009c, 0x0078,
-+      0x231a, 0xa584, 0x000f, 0x00c0, 0x2896, 0x7000, 0x0079, 0x2880,
-+      0x2343, 0x288a, 0x2888, 0x31c6, 0x31c6, 0x31c6, 0x31c6, 0x2888,
-+      0x1078, 0x22ac, 0x1078, 0x3217, 0x6008, 0xa084, 0xffef, 0x600a,
-+      0x1078, 0x31b9, 0x0040, 0x31c6, 0x0078, 0x245d, 0x78e4, 0xa005,
-+      0x00d0, 0x2817, 0x0018, 0x2817, 0x2008, 0xa084, 0x0030, 0x00c0,
-+      0x28a5, 0x781b, 0x004f, 0x0078, 0x231a, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x28a1, 0x2100, 0xa184, 0x0007, 0x0079, 0x28af, 0x28c1,
-+      0x28c5, 0x28b9, 0x28b7, 0x36f8, 0x36f8, 0x28b7, 0x36ee, 0x1078,
-+      0x22ac, 0x1078, 0x34e0, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078,
-+      0x231a, 0x1078, 0x34e0, 0x0078, 0x36c3, 0x1078, 0x34e0, 0x782b,
-+      0x3008, 0x781b, 0x00de, 0x0078, 0x231a, 0x1078, 0x34e0, 0x782b,
-+      0x3008, 0x781b, 0x009c, 0x0078, 0x231a, 0x2300, 0x0079, 0x28d8,
-+      0x28dd, 0x28db, 0x28df, 0x1078, 0x22ac, 0x0078, 0x2f2b, 0x681b,
-+      0x0008, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x2f2b,
-+      0x78ec, 0xa084, 0x0003, 0x0040, 0x2f2b, 0xa184, 0x0007, 0x0079,
-+      0x28f1, 0x28f9, 0x28c5, 0x2841, 0x3693, 0x36f8, 0x36f8, 0x28f9,
-+      0x36ee, 0x1078, 0x36a7, 0x0078, 0x231a, 0xa282, 0x0005, 0x0050,
-+      0x2903, 0x1078, 0x22ac, 0x2300, 0x0079, 0x2906, 0x2909, 0x2b2e,
-+      0x2b3c, 0x2200, 0x0079, 0x290c, 0x2926, 0x2913, 0x2926, 0x2911,
-+      0x2b13, 0x1078, 0x22ac, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
-+      0xa082, 0x0020, 0x0048, 0x34be, 0xa08a, 0x0004, 0x00c8, 0x34be,
-+      0x0079, 0x2922, 0x34be, 0x34be, 0x34be, 0x346c, 0x789b, 0x0018,
-+      0x79a8, 0xa184, 0x0080, 0x0040, 0x2937, 0x0078, 0x34be, 0x7000,
-+      0xa005, 0x00c0, 0x292d, 0x2011, 0x0004, 0x0078, 0x3069, 0xa184,
-+      0x00ff, 0xa08a, 0x0010, 0x00c8, 0x34be, 0x0079, 0x293f, 0x2951,
-+      0x294f, 0x2969, 0x296d, 0x29ff, 0x34be, 0x34be, 0x2a01, 0x34be,
-+      0x34be, 0x2b0f, 0x2b0f, 0x34be, 0x34be, 0x34be, 0x2b11, 0x1078,
-+      0x22ac, 0xa684, 0x1000, 0x0040, 0x295e, 0x2001, 0x0500, 0x8000,
-+      0x8000, 0x783a, 0x781b, 0x009a, 0x0078, 0x231a, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x2967, 0x681b, 0x001d, 0x0078, 0x2955, 0x0078,
-+      0x3693, 0x681b, 0x001d, 0x0078, 0x34ce, 0x6920, 0x6922, 0xa684,
-+      0x1800, 0x00c0, 0x2987, 0x6820, 0xa084, 0x0001, 0x00c0, 0x298d,
-+      0x6818, 0xa086, 0x0008, 0x00c0, 0x297f, 0x681b, 0x0000, 0xa684,
-+      0x0400, 0x0040, 0x29fb, 0x781b, 0x005d, 0x0078, 0x231a, 0xa684,
-+      0x1000, 0x0040, 0x298d, 0x0078, 0x231a, 0xa684, 0x0060, 0x0040,
-+      0x29f7, 0xa684, 0x0800, 0x0040, 0x29f7, 0xa684, 0x8000, 0x00c0,
-+      0x299b, 0x0078, 0x29b5, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b,
-+      0x0076, 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x29a8, 0x8000,
-+      0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302,
-+      0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040,
-+      0x29bd, 0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003,
-+      0x00c0, 0x29ca, 0x1078, 0x43d1, 0x1078, 0x45dc, 0x781b, 0x006c,
-+      0x0078, 0x231a, 0xa006, 0x1078, 0x46d8, 0x6ab0, 0x69ac, 0x6c98,
-+      0x6b94, 0x2200, 0xa105, 0x0040, 0x29d9, 0x2200, 0xa422, 0x2100,
-+      0xa31b, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6, 0x2300, 0xa405, 0x00c0,
-+      0x29e9, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x006c, 0x0078,
-+      0x231a, 0x781b, 0x006c, 0x2200, 0xa115, 0x00c0, 0x29f3, 0x1078,
-+      0x45ed, 0x0078, 0x231a, 0x1078, 0x4638, 0x0078, 0x231a, 0x781b,
-+      0x006d, 0x0078, 0x231a, 0x781b, 0x005d, 0x0078, 0x231a, 0x1078,
-+      0x22ac, 0x0078, 0x2a62, 0x6920, 0xa184, 0x0100, 0x0040, 0x2a19,
-+      0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084,
-+      0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078,
-+      0x2a51, 0xa184, 0x0200, 0x0040, 0x2a51, 0xa18c, 0xfdff, 0x6922,
-+      0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, 0x6004,
-+      0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008,
-+      0x0040, 0x2a51, 0x1078, 0x35f8, 0x1078, 0x331a, 0x88ff, 0x0040,
-+      0x2a51, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004,
-+      0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2a4b, 0x782b, 0x3008, 0x781b,
-+      0x005b, 0x0078, 0x231a, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078,
-+      0x231a, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2a5a, 0x781b, 0x005d,
-+      0x0078, 0x231a, 0x781b, 0x006d, 0x0078, 0x231a, 0x0078, 0x34c6,
-+      0x0078, 0x34c6, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040,
-+      0x2a60, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001,
-+      0x00c0, 0x2aa0, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040,
-+      0x2a98, 0x0048, 0x2a7d, 0x0078, 0x2a9a, 0xa380, 0x0002, 0xa102,
-+      0x00c8, 0x2a98, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7054,
-+      0x2060, 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5,
-+      0x6006, 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x2a52,
-+      0x0078, 0x2a03, 0x24a8, 0x7aa8, 0x00f0, 0x2a9a, 0x0078, 0x2a6b,
-+      0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x2b00, 0x8318, 0x8318,
-+      0x2300, 0xa102, 0x0040, 0x2ab0, 0x0048, 0x2ab0, 0x0078, 0x2afd,
-+      0xa286, 0x0023, 0x0040, 0x2a60, 0x681c, 0xa084, 0xfff1, 0x681e,
-+      0x7e58, 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008,
-+      0xa085, 0x0010, 0x600a, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008,
-+      0x2c48, 0x0c7f, 0xa184, 0x0010, 0x0040, 0x2ad4, 0x1078, 0x35f8,
-+      0x1078, 0x3429, 0x0078, 0x2ae3, 0x0c7e, 0x7054, 0x2060, 0x6004,
-+      0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2a51, 0x1078,
-+      0x35f8, 0x1078, 0x331a, 0x88ff, 0x0040, 0x2a51, 0x789b, 0x0060,
-+      0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+      0x2af7, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a, 0x782b,
-+      0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x7aa8, 0x0078, 0x2a6b,
-+      0x8318, 0x2300, 0xa102, 0x0040, 0x2b09, 0x0048, 0x2b09, 0x0078,
-+      0x2a6b, 0xa284, 0x0080, 0x00c0, 0x34ce, 0x0078, 0x34c6, 0x0078,
-+      0x34ce, 0x0078, 0x34be, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
-+      0xa08e, 0x0001, 0x0040, 0x2b1e, 0x1078, 0x22ac, 0x7aa8, 0xa294,
-+      0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x34be,
-+      0x0079, 0x2b2a, 0x34be, 0x3267, 0x34be, 0x33be, 0xa282, 0x0000,
-+      0x00c0, 0x2b34, 0x1078, 0x22ac, 0x1078, 0x34d8, 0x782b, 0x3008,
-+      0x781b, 0x006d, 0x0078, 0x231a, 0xa282, 0x0003, 0x00c0, 0x2b42,
-+      0x1078, 0x22ac, 0xa484, 0x8000, 0x00c0, 0x2b65, 0x706c, 0xa005,
-+      0x0040, 0x2b4c, 0x1078, 0x22ac, 0x6f14, 0x7782, 0xa7bc, 0x0f00,
-+      0x1078, 0x35fc, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x2b50, 0x1078, 0x34dc, 0x706f, 0x0002, 0x2009,
-+      0x4d38, 0x200b, 0x0009, 0x0078, 0x2b67, 0x1078, 0x34e8, 0x782b,
-+      0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0xa282, 0x0004, 0x0050,
-+      0x2b73, 0x1078, 0x22ac, 0x2300, 0x0079, 0x2b76, 0x2b79, 0x2c6c,
-+      0x2c9f, 0xa286, 0x0003, 0x0040, 0x2b7f, 0x1078, 0x22ac, 0x2001,
-+      0x0000, 0x007e, 0x68c0, 0xa005, 0x0040, 0x2b88, 0x7003, 0x0003,
-+      0x68a0, 0xa084, 0x2000, 0x0040, 0x2b91, 0x6008, 0xa085, 0x0002,
-+      0x600a, 0x007f, 0x703e, 0x7000, 0xa084, 0x0007, 0x0079, 0x2b98,
-+      0x2343, 0x2ba2, 0x2ba2, 0x2d97, 0x2dd3, 0x2343, 0x2dd3, 0x2ba0,
-+      0x1078, 0x22ac, 0xa684, 0x1000, 0x00c0, 0x2baa, 0x1078, 0x431b,
-+      0x0040, 0x2c46, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2bf2, 0xa186,
-+      0x0008, 0x00c0, 0x2bc1, 0x1078, 0x3217, 0x6008, 0xa084, 0xffef,
-+      0x600a, 0x1078, 0x31b9, 0x0040, 0x2bf2, 0x1078, 0x431b, 0x0078,
-+      0x2bd9, 0xa186, 0x0028, 0x00c0, 0x2bf2, 0x1078, 0x431b, 0x6008,
-+      0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2bd9, 0x8001,
-+      0x601a, 0xa005, 0x0040, 0x2bd9, 0x8001, 0xa005, 0x0040, 0x2bd9,
-+      0x601e, 0x6820, 0xa084, 0x0001, 0x0040, 0x2343, 0x6820, 0xa084,
-+      0xfffe, 0x6822, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f,
-+      0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2bef, 0x6002, 0x6006,
-+      0x0078, 0x2343, 0x017e, 0x1078, 0x2cd0, 0x017f, 0xa684, 0xdf00,
-+      0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2c46, 0xa186,
-+      0x0002, 0x00c0, 0x2c3e, 0xa684, 0x0800, 0x00c0, 0x2c0f, 0xa684,
-+      0x0060, 0x0040, 0x2c0f, 0x78d8, 0x7adc, 0x6832, 0x6a2e, 0x6820,
-+      0xa084, 0x0800, 0x00c0, 0x2c46, 0x8717, 0xa294, 0x000f, 0x8213,
-+      0x8213, 0x8213, 0xa290, 0x4f80, 0xa290, 0x0000, 0x221c, 0xa384,
-+      0x0100, 0x00c0, 0x2c25, 0x0078, 0x2c2b, 0x8210, 0x2204, 0xa085,
-+      0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2c38, 0x68a0,
-+      0xa084, 0x0100, 0x00c0, 0x2c38, 0x1078, 0x2d4a, 0x0078, 0x2343,
-+      0x6008, 0xa085, 0x0002, 0x600a, 0x0078, 0x2c46, 0xa186, 0x0018,
-+      0x0040, 0x2c46, 0xa186, 0x0014, 0x0040, 0x2343, 0x6916, 0x6818,
-+      0xa084, 0x8000, 0x0040, 0x2c4e, 0x703c, 0x681a, 0xa68c, 0xdf00,
-+      0x691e, 0x1078, 0x3208, 0x1078, 0x3217, 0x00c0, 0x2c5b, 0x6008,
-+      0xa084, 0xffef, 0x600a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2c64,
-+      0x1078, 0x3201, 0x0078, 0x2c68, 0x7060, 0x2060, 0x6800, 0x6002,
-+      0x1078, 0x1b8e, 0x0078, 0x2343, 0xa282, 0x0004, 0x0048, 0x2c72,
-+      0x1078, 0x22ac, 0x2200, 0x0079, 0x2c75, 0x2c70, 0x2c79, 0x2c86,
-+      0x2c79, 0x7000, 0xa086, 0x0005, 0x0040, 0x2c82, 0x1078, 0x34d8,
-+      0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x7890, 0x8007,
-+      0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c,
-+      0x00ff, 0xa186, 0x0003, 0x0040, 0x2c9b, 0xa186, 0x0000, 0x0040,
-+      0x2c9b, 0x0078, 0x34be, 0x781b, 0x006d, 0x0078, 0x231a, 0x6820,
-+      0xa085, 0x0004, 0x6822, 0x82ff, 0x00c0, 0x2caa, 0x1078, 0x34d8,
-+      0x0078, 0x2cb1, 0x8211, 0x0040, 0x2caf, 0x1078, 0x22ac, 0x1078,
-+      0x34e8, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x702c,
-+      0x8003, 0x0048, 0x2cc1, 0x2019, 0x4955, 0x1078, 0x2137, 0x702f,
-+      0x8000, 0x1078, 0x371d, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2ccd,
-+      0x0018, 0x2ccd, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c,
-+      0xa684, 0x0060, 0x00c0, 0x2cda, 0x6833, 0x0000, 0x682f, 0x0000,
-+      0x0078, 0x2d49, 0xa684, 0x0800, 0x00c0, 0x2cf2, 0x68b4, 0xa084,
-+      0x4800, 0xa635, 0xa684, 0x0800, 0x00c0, 0x2cf2, 0x6998, 0x6a94,
-+      0x6932, 0x6a2e, 0x7000, 0xa086, 0x0006, 0x0040, 0x2cf1, 0x1078,
-+      0x431b, 0x007c, 0xa684, 0x0020, 0x0040, 0x2d14, 0xa684, 0x4000,
-+      0x0040, 0x2d00, 0x6833, 0x0000, 0x682f, 0x0000, 0x0078, 0x2cea,
-+      0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2cfa,
-+      0x703c, 0xa005, 0x00c0, 0x2d0e, 0x703f, 0x0015, 0x79d8, 0x7adc,
-+      0x6932, 0x6a2e, 0x0078, 0x2cea, 0xa684, 0x4000, 0x0040, 0x2d1e,
-+      0x6833, 0x0000, 0x682f, 0x0000, 0x0078, 0x2cea, 0x68b4, 0xa084,
-+      0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2d18, 0x703c, 0xa005,
-+      0x00c0, 0x2d2c, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb,
-+      0x00c8, 0x2d33, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+      0x6932, 0x6a2e, 0x2100, 0xa205, 0x00c0, 0x2d40, 0x0078, 0x2cea,
-+      0x7000, 0xa086, 0x0006, 0x0040, 0x2d49, 0x1078, 0x46d8, 0x0078,
-+      0x2cea, 0x007c, 0x6008, 0xa085, 0x0200, 0x600a, 0xa384, 0x0200,
-+      0x0040, 0x2d56, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006,
-+      0x688f, 0x0000, 0x6893, 0x0000, 0x6a2c, 0x6930, 0x6a3e, 0x6942,
-+      0x682f, 0x0300, 0x6833, 0x0000, 0x6837, 0x2000, 0x6897, 0x0000,
-+      0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079,
-+      0x2d71, 0x2343, 0x2d7b, 0x2d84, 0x2d79, 0x2d79, 0x2d79, 0x2d79,
-+      0x2d79, 0x1078, 0x22ac, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2d84,
-+      0x1078, 0x3201, 0x0078, 0x2d8a, 0x7060, 0x2c50, 0x2060, 0x6800,
-+      0x6002, 0x2a60, 0x2021, 0x4d5a, 0x2404, 0xa005, 0x0040, 0x2d93,
-+      0x2020, 0x0078, 0x2d8c, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078,
-+      0x3208, 0x1078, 0x3217, 0x6008, 0xa084, 0xfdff, 0x600a, 0x682b,
-+      0x0000, 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x472f,
-+      0xa684, 0x0800, 0x0040, 0x2db0, 0x691c, 0xa18d, 0x2000, 0x691e,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x2dc0, 0x7868, 0xa08c, 0x00ff,
-+      0x0040, 0x2dbe, 0x681b, 0x001e, 0x0078, 0x2dc0, 0x681b, 0x0000,
-+      0x2021, 0x4d5a, 0x2404, 0xad06, 0x0040, 0x2dc7, 0x7460, 0x6800,
-+      0x2022, 0x68c3, 0x0000, 0x6a3c, 0x6940, 0x6a2e, 0x6932, 0x1078,
-+      0x1b8e, 0x0078, 0x2343, 0x1078, 0x2cd0, 0x682b, 0x0000, 0x789b,
-+      0x000e, 0x6f14, 0x1078, 0x3723, 0xa08c, 0x00ff, 0x6916, 0x6818,
-+      0xa084, 0x8000, 0x0040, 0x2de6, 0x703c, 0x681a, 0xa68c, 0xdf00,
-+      0x691e, 0x706f, 0x0000, 0x0078, 0x2343, 0x7000, 0xa005, 0x00c0,
-+      0x2df3, 0x0078, 0x2343, 0xa006, 0x1078, 0x431b, 0x6817, 0x0000,
-+      0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820,
-+      0xa085, 0x00ff, 0x6822, 0x7000, 0x0079, 0x2e06, 0x2343, 0x2e10,
-+      0x2e10, 0x2e12, 0x2e12, 0x2e12, 0x2e12, 0x2e0e, 0x1078, 0x22ac,
-+      0x1078, 0x3217, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x31d1,
-+      0x2300, 0x0079, 0x2e1b, 0x2e1e, 0x2e20, 0x2e59, 0x1078, 0x22ac,
-+      0x7000, 0x0079, 0x2e23, 0x2343, 0x2e2d, 0x2e2d, 0x2e48, 0x2e2d,
-+      0x2e55, 0x2e48, 0x2e2b, 0x1078, 0x22ac, 0xa684, 0x0060, 0xa086,
-+      0x0060, 0x00c0, 0x2e44, 0xa6b4, 0xffdf, 0xa6b4, 0xbfff, 0xa6b5,
-+      0x2000, 0x7e5a, 0x681c, 0xa084, 0xffdf, 0x681e, 0x1078, 0x431b,
-+      0x1078, 0x45ed, 0x0078, 0x3693, 0xa684, 0x2000, 0x0040, 0x2e37,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x2e55, 0x681b, 0x0015, 0xa684,
-+      0x4000, 0x0040, 0x2e55, 0x681b, 0x0007, 0x1078, 0x36a7, 0x0078,
-+      0x231a, 0x1078, 0x22ac, 0x2300, 0x0079, 0x2e5e, 0x2e61, 0x2e63,
-+      0x2e96, 0x1078, 0x22ac, 0x7000, 0x0079, 0x2e66, 0x2343, 0x2e70,
-+      0x2e70, 0x2e8b, 0x2e70, 0x2e92, 0x2e8b, 0x2e6e, 0x1078, 0x22ac,
-+      0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2e87, 0xa6b4, 0xffbf,
-+      0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffbf,
-+      0x681e, 0x1078, 0x431b, 0x1078, 0x45ed, 0x0078, 0x3693, 0xa684,
-+      0x2000, 0x0040, 0x2e7a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2e92,
-+      0x681b, 0x0007, 0x781b, 0x00de, 0x0078, 0x231a, 0x6820, 0xa085,
-+      0x0004, 0x6822, 0x1078, 0x365e, 0xa6b5, 0x0800, 0x1078, 0x34d8,
-+      0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x2300, 0x0079,
-+      0x2ea9, 0x2eac, 0x2eae, 0x2eb0, 0x1078, 0x22ac, 0x1078, 0x22ac,
-+      0xa684, 0x0400, 0x00c0, 0x2ed9, 0x79e4, 0xa184, 0x0020, 0x0040,
-+      0x2ec0, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2ec0, 0x782b, 0x3009,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4,
-+      0xa184, 0x0020, 0x0040, 0x2ed1, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+      0x2ed5, 0x2001, 0x0014, 0x0078, 0x2b81, 0xa184, 0x0007, 0x0079,
-+      0x2f11, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff,
-+      0x0040, 0x2f0f, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0,
-+      0x2f00, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x2ef3, 0x2009,
-+      0xfff7, 0x0078, 0x2ef9, 0xa386, 0x0003, 0x00c0, 0x2f00, 0x2009,
-+      0xffef, 0x0c7e, 0x7054, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b,
-+      0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078,
-+      0x3693, 0x2850, 0x285b, 0x2f1b, 0x2f23, 0x2f19, 0x2f19, 0x2f19,
-+      0x3693, 0x1078, 0x22ac, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+      0x6922, 0x0078, 0x369d, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+      0x6922, 0x0078, 0x3693, 0x79e4, 0xa184, 0x0030, 0x0040, 0x2f35,
-+      0x78ec, 0xa084, 0x0003, 0x00c0, 0x2f57, 0x7000, 0xa086, 0x0004,
-+      0x00c0, 0x2f4f, 0x706c, 0xa086, 0x0002, 0x00c0, 0x2f45, 0x2011,
-+      0x0002, 0x2019, 0x0000, 0x0078, 0x26fc, 0x706c, 0xa086, 0x0006,
-+      0x0040, 0x2f3f, 0x706c, 0xa086, 0x0004, 0x0040, 0x2f3f, 0x6818,
-+      0xa085, 0x8000, 0x681a, 0x2001, 0x0014, 0x0078, 0x2b81, 0xa184,
-+      0x0007, 0x0079, 0x2f5b, 0x3693, 0x3693, 0x2f63, 0x3693, 0x36f8,
-+      0x36f8, 0x3693, 0x3693, 0xa684, 0x0400, 0x00c0, 0x2fa6, 0x6820,
-+      0xa084, 0x0001, 0x0040, 0x369d, 0xa68c, 0x0060, 0xa684, 0x0060,
-+      0x0040, 0x2f78, 0xa086, 0x0060, 0x00c0, 0x2f78, 0xa18d, 0x4000,
-+      0xa18c, 0xfffb, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000,
-+      0x789b, 0x0061, 0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008,
-+      0x810c, 0x0040, 0x3230, 0xa18c, 0x00f8, 0x00c0, 0x3230, 0x157e,
-+      0x137e, 0x147e, 0x20a1, 0x012c, 0x789b, 0x0000, 0x8000, 0x80ac,
-+      0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814,
-+      0x8007, 0x789b, 0x0080, 0x78aa, 0x0078, 0x369d, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x2fad, 0x681b, 0x0008, 0x781b, 0x00d4, 0x0078,
-+      0x231a, 0x2300, 0x0079, 0x2fb4, 0x2fb9, 0x3054, 0x2fb7, 0x1078,
-+      0x22ac, 0x7000, 0xa084, 0x0007, 0x0079, 0x2fbe, 0x2343, 0x2fc8,
-+      0x2ffd, 0x2fd3, 0x2fc6, 0x2343, 0x2fc6, 0x2fc6, 0x1078, 0x22ac,
-+      0x681c, 0xa084, 0x2000, 0x0040, 0x2fe1, 0x6008, 0xa085, 0x0002,
-+      0x600a, 0x0078, 0x2fe1, 0x68c0, 0xa005, 0x00c0, 0x2ffd, 0x6920,
-+      0xa18d, 0x0001, 0x6922, 0x68c3, 0x0001, 0x6800, 0x706a, 0x0078,
-+      0x2ff7, 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800, 0x6006, 0xa005,
-+      0x00c0, 0x2feb, 0x6002, 0x681c, 0xa084, 0x000e, 0x0040, 0x2ff7,
-+      0x7014, 0x68ba, 0x7130, 0xa188, 0x7000, 0x0078, 0x2ff9, 0x2009,
-+      0x7100, 0x2104, 0x6802, 0x2d0a, 0x7162, 0x6eb6, 0xa684, 0x0060,
-+      0x0040, 0x3052, 0xa684, 0x0800, 0x00c0, 0x3011, 0xa684, 0x7fff,
-+      0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x431b, 0x0078,
-+      0x3052, 0xa684, 0x0020, 0x0040, 0x3026, 0x68c0, 0xa005, 0x0040,
-+      0x301d, 0x1078, 0x472f, 0x0078, 0x3020, 0xa006, 0x1078, 0x46d8,
-+      0x79d8, 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x302c, 0x1078, 0x3609,
-+      0x69aa, 0x6aa6, 0x1078, 0x46d8, 0xa684, 0x8000, 0x0040, 0x3052,
-+      0xa684, 0x7fff, 0x68b6, 0x789b, 0x0076, 0x1078, 0x3723, 0x2010,
-+      0x1078, 0x3723, 0x2008, 0xa684, 0x0020, 0x00c0, 0x304a, 0x1078,
-+      0x3723, 0x801b, 0x00c8, 0x3045, 0x8000, 0xa084, 0x003f, 0xa108,
-+      0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+      0xa303, 0x68ae, 0x0078, 0x2343, 0x0078, 0x34ce, 0x7037, 0x0000,
-+      0xa282, 0x0006, 0x0050, 0x305e, 0x1078, 0x22ac, 0x7000, 0xa084,
-+      0x0007, 0x10c0, 0x37c7, 0x2300, 0x0079, 0x3066, 0x3069, 0x308f,
-+      0x30a1, 0x2200, 0x0079, 0x306c, 0x308d, 0x34ce, 0x3072, 0x308d,
-+      0x30bb, 0x30fa, 0x7003, 0x0005, 0x2001, 0x7210, 0x2068, 0x704a,
-+      0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3082,
-+      0x0078, 0x307b, 0x157f, 0x6817, 0x0000, 0x68b7, 0x0700, 0x6823,
-+      0x0800, 0x6827, 0x0003, 0x0078, 0x34be, 0x1078, 0x22ac, 0x7003,
-+      0x0005, 0x2001, 0x7210, 0x2068, 0x704a, 0x7036, 0x2200, 0x0079,
-+      0x3099, 0x34ce, 0x309f, 0x309f, 0x30bb, 0x309f, 0x34ce, 0x1078,
-+      0x22ac, 0x7003, 0x0005, 0x2001, 0x7210, 0x2068, 0x704a, 0x7036,
-+      0x2200, 0x0079, 0x30ab, 0x30b3, 0x30b1, 0x30b1, 0x30b3, 0x30b1,
-+      0x30b3, 0x1078, 0x22ac, 0x1078, 0x34e8, 0x782b, 0x3008, 0x781b,
-+      0x006d, 0x0078, 0x231a, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00,
-+      0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x7100,
-+      0x2d04, 0x2d08, 0x7162, 0x2068, 0xa005, 0x0040, 0x30d6, 0x6814,
-+      0xa206, 0x0040, 0x30ef, 0x6800, 0x0078, 0x30c9, 0x7003, 0x0005,
-+      0x2001, 0x7210, 0x2068, 0x704a, 0x7036, 0x157e, 0x20a9, 0x0031,
-+      0x2003, 0x0000, 0x8000, 0x0070, 0x30e7, 0x0078, 0x30e0, 0x157f,
-+      0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4,
-+      0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3146, 0x1078, 0x34e0,
-+      0x0078, 0x3146, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b,
-+      0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c,
-+      0x00ff, 0xa1e8, 0x7000, 0x2d04, 0x2d08, 0x7162, 0x2068, 0xa005,
-+      0x0040, 0x3119, 0x6814, 0xa206, 0x0040, 0x3131, 0x6800, 0x0078,
-+      0x310c, 0x7003, 0x0005, 0x2001, 0x7210, 0x2068, 0x704a, 0x157e,
-+      0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3129, 0x0078,
-+      0x3122, 0x157f, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
-+      0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3146,
-+      0xa084, 0x0800, 0x0040, 0x3140, 0x1078, 0x34e4, 0x0078, 0x3146,
-+      0x1078, 0x34e0, 0x708b, 0x0000, 0x0078, 0x3146, 0x027e, 0x8207,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x4f80, 0x2060,
-+      0x7056, 0x6000, 0x705a, 0x6004, 0x705e, 0xa684, 0x0060, 0x0040,
-+      0x319e, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3180,
-+      0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0x7e5a, 0xa684,
-+      0x0060, 0xa086, 0x0060, 0x0040, 0x319e, 0x68c0, 0xa005, 0x0040,
-+      0x3179, 0x7003, 0x0003, 0x682b, 0x0000, 0x1078, 0x45dc, 0x0078,
-+      0x317b, 0x1078, 0x45ed, 0xa6b5, 0x2000, 0x7e5a, 0x0078, 0x319e,
-+      0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x319e,
-+      0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xa6b4, 0xbfff, 0x7e5a,
-+      0x007e, 0x68c0, 0xa005, 0x007f, 0x0040, 0x319c, 0x7003, 0x0003,
-+      0x1078, 0x45dc, 0x0078, 0x319e, 0x1078, 0x4638, 0x077f, 0x1078,
-+      0x35fc, 0x2009, 0x006d, 0xa684, 0x0004, 0x0040, 0x31ab, 0x782b,
-+      0x3008, 0x2009, 0x006d, 0x791a, 0x2d00, 0x704a, 0x8207, 0xa084,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x4f80, 0x2048, 0x0078,
-+      0x231a, 0x6020, 0xa005, 0x0040, 0x31c5, 0x8001, 0x6022, 0x6008,
-+      0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078,
-+      0x431b, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f,
-+      0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x31d6, 0x2343, 0x31e0,
-+      0x31e0, 0x31fd, 0x31e8, 0x31e6, 0x31e8, 0x31de, 0x1078, 0x22ac,
-+      0x1078, 0x3208, 0x1078, 0x3201, 0x1078, 0x1b8e, 0x0078, 0x2343,
-+      0x706c, 0x706f, 0x0000, 0x7093, 0x0000, 0x0079, 0x31ef, 0x31f9,
-+      0x31f9, 0x31f7, 0x31f7, 0x31f7, 0x31f9, 0x31f7, 0x31f9, 0x0079,
-+      0x2715, 0x706f, 0x0000, 0x0078, 0x2343, 0x681b, 0x0000, 0x0078,
-+      0x2d97, 0x6800, 0xa005, 0x00c0, 0x3206, 0x6002, 0x6006, 0x007c,
-+      0x6010, 0xa005, 0x0040, 0x3211, 0x8001, 0x00d0, 0x3211, 0x1078,
-+      0x22ac, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018,
-+      0xa005, 0x0040, 0x321d, 0x8001, 0x601a, 0x007c, 0x1078, 0x371d,
-+      0x681b, 0x0018, 0x0078, 0x3254, 0x1078, 0x371d, 0x681b, 0x0019,
-+      0x0078, 0x3254, 0x1078, 0x371d, 0x681b, 0x001a, 0x0078, 0x3254,
-+      0x1078, 0x371d, 0x681b, 0x0003, 0x0078, 0x3254, 0x7780, 0x1078,
-+      0x35fc, 0x7184, 0xa18c, 0x00ff, 0xa1e8, 0x7000, 0x2d04, 0x2d08,
-+      0x2068, 0xa005, 0x00c0, 0x3246, 0x0078, 0x2343, 0x6814, 0x7280,
-+      0xa206, 0x0040, 0x324e, 0x6800, 0x0078, 0x323f, 0x6800, 0x200a,
-+      0x681b, 0x0005, 0x708b, 0x0000, 0x1078, 0x3208, 0x6820, 0xa084,
-+      0x0001, 0x00c0, 0x325d, 0x1078, 0x3201, 0x1078, 0x3217, 0x681f,
-+      0x0000, 0x6823, 0x0020, 0x1078, 0x1b8e, 0x0078, 0x2343, 0xa282,
-+      0x0003, 0x00c0, 0x34be, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4,
-+      0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100, 0x0040,
-+      0x32cb, 0xa18c, 0xfeff, 0x6922, 0xa4a4, 0x00ff, 0x0040, 0x32b5,
-+      0xa482, 0x000c, 0x0048, 0x3288, 0x0040, 0x3288, 0x2021, 0x000c,
-+      0x852b, 0x852b, 0x1078, 0x3577, 0x0040, 0x3292, 0x1078, 0x3384,
-+      0x0078, 0x32be, 0x1078, 0x3532, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+      0xfff5, 0x6006, 0x1078, 0x33ab, 0x0c7f, 0x6920, 0xa18d, 0x0100,
-+      0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+      0x32af, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a, 0x782b,
-+      0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x0c7e, 0x2960, 0x6004,
-+      0xa084, 0xfff5, 0x6006, 0x1078, 0x33ab, 0x0c7f, 0x7e58, 0xa684,
-+      0x0400, 0x00c0, 0x32c7, 0x781b, 0x005d, 0x0078, 0x231a, 0x781b,
-+      0x006d, 0x0078, 0x231a, 0x0c7e, 0x7054, 0x2060, 0x6100, 0xa18c,
-+      0x1000, 0x0040, 0x330b, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282,
-+      0x000c, 0x0048, 0x32df, 0x0040, 0x32df, 0x2011, 0x000c, 0x2400,
-+      0xa202, 0x00c8, 0x32e4, 0x2220, 0x6208, 0xa294, 0x00ff, 0x7018,
-+      0xa086, 0x0028, 0x00c0, 0x32f4, 0xa282, 0x0019, 0x00c8, 0x32fa,
-+      0x2011, 0x0019, 0x0078, 0x32fa, 0xa282, 0x000c, 0x00c8, 0x32fa,
-+      0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x32ff, 0x2228, 0x1078,
-+      0x3536, 0x852b, 0x852b, 0x1078, 0x3577, 0x0040, 0x330b, 0x1078,
-+      0x3384, 0x0078, 0x330f, 0x1078, 0x3532, 0x1078, 0x33ab, 0x7858,
-+      0xa085, 0x0004, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b, 0x006d,
-+      0x0078, 0x231a, 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0,
-+      0x3332, 0x6010, 0xa084, 0x000f, 0x00c0, 0x332c, 0x6104, 0xa18c,
-+      0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000,
-+      0x0078, 0x3359, 0x68a0, 0xa084, 0x0200, 0x00c0, 0x332c, 0x6208,
-+      0xa294, 0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, 0x3347, 0xa282,
-+      0x0019, 0x00c8, 0x334d, 0x2011, 0x0019, 0x0078, 0x334d, 0xa282,
-+      0x000c, 0x00c8, 0x334d, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c,
-+      0x00ff, 0xa382, 0x000c, 0x0048, 0x3359, 0x0040, 0x3359, 0x2019,
-+      0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa,
-+      0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f,
-+      0x007c, 0x0c7e, 0x2960, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032,
-+      0x2019, 0x0000, 0x0078, 0x3374, 0x78ab, 0x0001, 0x78ab, 0x0003,
-+      0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085,
-+      0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7154, 0x2160, 0x1078,
-+      0x338b, 0x0c7f, 0x007c, 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86,
-+      0x6018, 0x789a, 0x7cae, 0x6412, 0x78a4, 0xa084, 0xfff8, 0xa18c,
-+      0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, 0xa4a4, 0x000f, 0x8427,
-+      0x8204, 0x8004, 0xa084, 0x00ff, 0xa405, 0x600e, 0x6004, 0xa084,
-+      0xfff5, 0x6006, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x33b2,
-+      0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6,
-+      0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x007c, 0xa282, 0x0002,
-+      0x00c0, 0x34be, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184,
-+      0x0200, 0x0040, 0x3407, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff,
-+      0xa282, 0x0002, 0x00c8, 0x34be, 0x1078, 0x3450, 0x1078, 0x33ab,
-+      0xa980, 0x0001, 0x200c, 0x1078, 0x35f8, 0x1078, 0x331a, 0x88ff,
-+      0x0040, 0x33fa, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-+      0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x33f4, 0x782b, 0x3008,
-+      0x781b, 0x005b, 0x0078, 0x231a, 0x782b, 0x3008, 0x781b, 0x006d,
-+      0x0078, 0x231a, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x3403, 0x781b,
-+      0x005d, 0x0078, 0x231a, 0x781b, 0x006d, 0x0078, 0x231a, 0xa282,
-+      0x0002, 0x00c8, 0x340f, 0xa284, 0x0001, 0x0040, 0x3419, 0x7154,
-+      0xa188, 0x0000, 0x210c, 0xa18c, 0x2000, 0x00c0, 0x3419, 0x2011,
-+      0x0000, 0x1078, 0x3524, 0x1078, 0x3450, 0x1078, 0x33ab, 0x7858,
-+      0xa085, 0x0004, 0x785a, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078,
-+      0x231a, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xa084,
-+      0x2000, 0x00c0, 0x3440, 0x6014, 0xa084, 0x0040, 0x00c0, 0x343e,
-+      0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x344d, 0x2011, 0x0000,
-+      0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0,
-+      0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f, 0x007c,
-+      0x0c7e, 0x7054, 0x2060, 0x1078, 0x3457, 0x0c7f, 0x007c, 0x82ff,
-+      0x0040, 0x345c, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a,
-+      0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6, 0x788a, 0x6016, 0x6004,
-+      0xa084, 0xffef, 0x6006, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003,
-+      0x0040, 0x3475, 0x007f, 0x0078, 0x3478, 0x007f, 0x0078, 0x34ba,
-+      0xa684, 0x0020, 0x0040, 0x34ba, 0x7888, 0xa084, 0x0040, 0x0040,
-+      0x34ba, 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x3488, 0x8000,
-+      0xa005, 0x0040, 0x349e, 0x831b, 0x00c8, 0x3491, 0x8001, 0x0040,
-+      0x34b6, 0xa684, 0x4000, 0x0040, 0x349e, 0x78b8, 0x801b, 0x00c8,
-+      0x349a, 0x8000, 0xa084, 0x003f, 0x00c0, 0x34b6, 0xa6b4, 0xbfff,
-+      0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x34aa,
-+      0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x46d8,
-+      0x781b, 0x006c, 0x1078, 0x4568, 0x0078, 0x231a, 0x781b, 0x006c,
-+      0x0078, 0x231a, 0x781b, 0x006d, 0x0078, 0x231a, 0x1078, 0x34ec,
-+      0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x1078, 0x34d8,
-+      0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x6827, 0x0002,
-+      0x1078, 0x34e0, 0x782b, 0x3008, 0x781b, 0x006d, 0x0078, 0x231a,
-+      0x2001, 0x0005, 0x0078, 0x34ee, 0x2001, 0x000c, 0x0078, 0x34ee,
-+      0x2001, 0x0006, 0x0078, 0x34ee, 0x2001, 0x000d, 0x0078, 0x34ee,
-+      0x2001, 0x0009, 0x0078, 0x34ee, 0x2001, 0x0007, 0x789b, 0x0010,
-+      0x78aa, 0x789b, 0x0060, 0x78ab, 0x0001, 0xa6b5, 0x0004, 0x7e5a,
-+      0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703,
-+      0xa0e0, 0x4f80, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f,
-+      0x0040, 0x3512, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085,
-+      0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040,
-+      0x0040, 0x3522, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085,
-+      0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001,
-+      0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab,
-+      0x0004, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010,
-+      0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa,
-+      0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084,
-+      0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c,
-+      0xfff0, 0x2001, 0x4d46, 0x2004, 0xa082, 0x0028, 0x0040, 0x3560,
-+      0x2021, 0x35df, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x3566,
-+      0x2021, 0x35eb, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064,
-+      0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x3575, 0x8420, 0x2300,
-+      0xa210, 0x0070, 0x3575, 0x0078, 0x3568, 0x157f, 0x007c, 0x157e,
-+      0x2009, 0x4d46, 0x210c, 0xa182, 0x0032, 0x0048, 0x358b, 0x0040,
-+      0x358f, 0x2009, 0x35d1, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011,
-+      0x0032, 0x0078, 0x35a1, 0xa182, 0x0028, 0x0040, 0x3599, 0x2009,
-+      0x35df, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, 0x0078,
-+      0x35a1, 0x2009, 0x35eb, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011,
-+      0x0064, 0x2200, 0xa502, 0x0040, 0x35b1, 0x0048, 0x35b1, 0x8108,
-+      0x2300, 0xa210, 0x0070, 0x35ae, 0x0078, 0x35a1, 0x157f, 0xa006,
-+      0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x35c0, 0x7808, 0xa085,
-+      0x0070, 0x780a, 0x7044, 0xa085, 0x0070, 0x7046, 0x0078, 0x35c0,
-+      0x78ec, 0xa084, 0x0300, 0x0040, 0x35ce, 0x2104, 0xa09e, 0x1201,
-+      0x00c0, 0x35ce, 0x2001, 0x2101, 0x0078, 0x35cf, 0x2104, 0xa005,
-+      0x007c, 0x1201, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, 0x5604,
-+      0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x3202,
-+      0x4202, 0x5202, 0x6202, 0x7202, 0x6605, 0x7605, 0x7805, 0x7a05,
-+      0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202, 0x4202, 0x5202, 0x5404,
-+      0x6404, 0x7404, 0x7604, 0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04,
-+      0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784,
-+      0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e0, 0x5000,
-+      0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b, 0x00c8, 0x3610, 0x8000,
-+      0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079,
-+      0x0100, 0x2009, 0x4d40, 0x2091, 0x8000, 0x2104, 0x0079, 0x3620,
-+      0x3656, 0x362a, 0x362a, 0x362a, 0x362a, 0x362a, 0x362a, 0x365a,
-+      0x1078, 0x22ac, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0,
-+      0x362c, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3633,
-+      0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858, 0xa085, 0x4000, 0x785a,
-+      0x7830, 0xa084, 0x0080, 0x00c0, 0x3656, 0x0018, 0x3656, 0x681c,
-+      0xa084, 0x0020, 0x00c0, 0x3654, 0x0e7e, 0x2071, 0x4d40, 0x1078,
-+      0x36a7, 0x0e7f, 0x0078, 0x3656, 0x781b, 0x00de, 0x2091, 0x8001,
-+      0x0f7f, 0x007c, 0x1078, 0x3886, 0x0078, 0x3656, 0x0c7e, 0x6814,
-+      0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0, 0x4f80,
-+      0x6004, 0xa084, 0x000a, 0x00c0, 0x3691, 0x6108, 0xa194, 0xff00,
-+      0x0040, 0x3691, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106, 0x0040,
-+      0x3680, 0x2001, 0x0032, 0xa106, 0x0040, 0x3684, 0x0078, 0x3688,
-+      0x2009, 0x0020, 0x0078, 0x368a, 0x2009, 0x003f, 0x0078, 0x368a,
-+      0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002,
-+      0x6006, 0x0c7f, 0x007c, 0x781b, 0x006d, 0x0078, 0x231a, 0x782b,
-+      0x3008, 0x781b, 0x006d, 0x0078, 0x231a, 0x781b, 0x005d, 0x0078,
-+      0x231a, 0x782b, 0x3008, 0x781b, 0x005b, 0x0078, 0x231a, 0x2009,
-+      0x4d20, 0x210c, 0xa186, 0x0000, 0x0040, 0x36bb, 0xa186, 0x0001,
-+      0x0040, 0x36be, 0x2009, 0x4d38, 0x200b, 0x000b, 0x706f, 0x0001,
-+      0x781b, 0x0048, 0x007c, 0x781b, 0x00d8, 0x007c, 0x2009, 0x4d38,
-+      0x200b, 0x000a, 0x007c, 0x2009, 0x4d20, 0x210c, 0xa186, 0x0000,
-+      0x0040, 0x36de, 0xa186, 0x0001, 0x0040, 0x36d8, 0x2009, 0x4d38,
-+      0x200b, 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x0078, 0x231a,
-+      0x2009, 0x4d38, 0x200b, 0x000a, 0x0078, 0x231a, 0x782b, 0x3008,
-+      0x781b, 0x00d8, 0x0078, 0x231a, 0x781b, 0x00de, 0x0078, 0x231a,
-+      0x782b, 0x3008, 0x781b, 0x00de, 0x0078, 0x231a, 0x781b, 0x009c,
-+      0x0078, 0x231a, 0x782b, 0x3008, 0x781b, 0x009c, 0x0078, 0x231a,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x36ff, 0x681b, 0x001d, 0x706f,
-+      0x0001, 0x781b, 0x0048, 0x0078, 0x231a, 0x007e, 0x7830, 0xa084,
-+      0x00c0, 0x00c0, 0x371b, 0x7808, 0xa084, 0xfffc, 0x780a, 0x0005,
-+      0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x371b,
-+      0x7044, 0x780a, 0xa005, 0x007f, 0x007c, 0x7044, 0xa085, 0x0002,
-+      0x7046, 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3723,
-+      0x0098, 0x372c, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a,
-+      0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040,
-+      0x373b, 0x0098, 0x3739, 0x78ac, 0x007e, 0x7044, 0x780a, 0x007f,
-+      0x007c, 0xa784, 0x007d, 0x00c0, 0x3748, 0x2700, 0x1078, 0x22ac,
-+      0xa784, 0x0001, 0x00c0, 0x2ded, 0xa784, 0x0070, 0x0040, 0x3758,
-+      0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x2257, 0x2d78, 0x2c68, 0x0c7f,
-+      0xa784, 0x0008, 0x0040, 0x3765, 0x784b, 0x0008, 0x78ec, 0xa084,
-+      0x0003, 0x0040, 0x2343, 0x0078, 0x3693, 0xa784, 0x0004, 0x0040,
-+      0x3798, 0x78b8, 0xa084, 0x4001, 0x0040, 0x3798, 0x784b, 0x0008,
-+      0x78ec, 0xa084, 0x0003, 0x0040, 0x2343, 0x78e4, 0xa084, 0x0007,
-+      0xa086, 0x0001, 0x00c0, 0x3798, 0x78c0, 0xa085, 0x4800, 0x2030,
-+      0x7e5a, 0x781b, 0x00de, 0x0078, 0x231a, 0x784b, 0x0008, 0x6818,
-+      0xa084, 0x8000, 0x0040, 0x3794, 0x681b, 0x0015, 0xa684, 0x4000,
-+      0x0040, 0x3794, 0x681b, 0x0007, 0x1078, 0x36a7, 0x0078, 0x231a,
-+      0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x6833, 0x0000,
-+      0x682f, 0x0000, 0x784b, 0x0008, 0x78e4, 0xa005, 0x00d0, 0x2817,
-+      0xa084, 0x0020, 0x0040, 0x2817, 0x78ec, 0xa084, 0x0003, 0x0040,
-+      0x2817, 0x0018, 0x2817, 0x0078, 0x34c6, 0x6b14, 0x8307, 0xa084,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x4f80, 0x2060, 0x2048,
-+      0x7056, 0x6000, 0x705a, 0x6004, 0x705e, 0x2a60, 0x007c, 0x0079,
-+      0x37c9, 0x37d1, 0x37d2, 0x37d1, 0x37d4, 0x37d1, 0x37d1, 0x37d1,
-+      0x37d9, 0x007c, 0x1078, 0x3217, 0x1078, 0x431b, 0x7038, 0x600a,
-+      0x007c, 0x70a0, 0xa005, 0x0040, 0x37e6, 0x2068, 0x1078, 0x1a80,
-+      0x1078, 0x42d4, 0x1078, 0x42db, 0x70a3, 0x0000, 0x007c, 0x0e7e,
-+      0x2091, 0x8000, 0x2071, 0x4d40, 0x7000, 0xa086, 0x0007, 0x00c0,
-+      0x3804, 0x6114, 0x70ac, 0xa106, 0x00c0, 0x3804, 0x6128, 0x70b0,
-+      0xa106, 0x00c0, 0x3804, 0x2c00, 0x70a2, 0x0e7f, 0x1078, 0x1a8d,
-+      0x1078, 0x380a, 0xa006, 0x007c, 0x2091, 0x8001, 0x0e7f, 0xa085,
-+      0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x4d40, 0x0078, 0x20c8,
-+      0x785b, 0x0000, 0x70b7, 0x000e, 0x2009, 0x0100, 0x017e, 0x70a0,
-+      0xa06d, 0x0040, 0x381f, 0x70a3, 0x0000, 0x0078, 0x3825, 0x70bb,
-+      0x0000, 0x1078, 0x1aa9, 0x0040, 0x382b, 0x70b4, 0x6826, 0x1078,
-+      0x3906, 0x0078, 0x381f, 0x017f, 0x157e, 0x0c7e, 0x0d7e, 0x20a9,
-+      0x0008, 0x2061, 0x7110, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d,
-+      0x0040, 0x3843, 0x6800, 0x601e, 0x1078, 0x18a0, 0x6008, 0x8000,
-+      0x600a, 0x0078, 0x3836, 0x6018, 0xa06d, 0x0040, 0x384d, 0x6800,
-+      0x601a, 0x1078, 0x18a0, 0x0078, 0x3843, 0xace0, 0x0008, 0x0070,
-+      0x3853, 0x0078, 0x3833, 0x709c, 0xa084, 0x8000, 0x0040, 0x385a,
-+      0x1078, 0x3980, 0x0d7f, 0x0c7f, 0x157f, 0x007c, 0x127e, 0x2091,
-+      0x2300, 0x6804, 0xa084, 0x000f, 0x0079, 0x3866, 0x3876, 0x3876,
-+      0x3876, 0x3876, 0x3876, 0x3876, 0x3878, 0x387e, 0x3876, 0x3876,
-+      0x3876, 0x3876, 0x3876, 0x3880, 0x3876, 0x3878, 0x1078, 0x22ac,
-+      0x1078, 0x4172, 0x1078, 0x18a0, 0x0078, 0x3884, 0x6827, 0x000b,
-+      0x1078, 0x4172, 0x1078, 0x3906, 0x127f, 0x007c, 0x127e, 0x2091,
-+      0x2300, 0x0098, 0x38a2, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x38a2,
-+      0x0d7e, 0x1078, 0x42e4, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001,
-+      0x0000, 0x6827, 0x0084, 0x1078, 0x429c, 0x1078, 0x3906, 0x0d7f,
-+      0x0078, 0x38d4, 0x7948, 0xa185, 0x4000, 0x784a, 0x0098, 0x38ab,
-+      0x794a, 0x0078, 0x3890, 0x7828, 0xa086, 0x1834, 0x00c0, 0x38b4,
-+      0xa185, 0x0004, 0x0078, 0x38bb, 0x7828, 0xa186, 0x1814, 0x00c0,
-+      0x38a8, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab, 0x0002,
-+      0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a, 0x70bc, 0xa080,
-+      0x008d, 0x781a, 0x6827, 0x0002, 0x6827, 0x0084, 0x2009, 0x0004,
-+      0x2001, 0x0000, 0x1078, 0x429c, 0x127f, 0x007c, 0x0d7e, 0x6b14,
-+      0x1078, 0x1b1b, 0x0040, 0x38e3, 0x2068, 0x6827, 0x0002, 0x1078,
-+      0x3906, 0x0078, 0x38d8, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0x6c28,
-+      0xa4a4, 0x00ff, 0x1078, 0x1ab9, 0x0040, 0x38f3, 0x2068, 0x6827,
-+      0x0002, 0x1078, 0x3906, 0x0d7f, 0x007c, 0x0d7e, 0x6b14, 0xa39c,
-+      0x00ff, 0x1078, 0x1aec, 0x0040, 0x3904, 0x2068, 0x6827, 0x0002,
-+      0x1078, 0x3906, 0x0078, 0x38f9, 0x0d7f, 0x007c, 0x0c7e, 0x6914,
-+      0x1078, 0x3977, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0006, 0x0040,
-+      0x3921, 0xa186, 0x000d, 0x0040, 0x3940, 0xa186, 0x0017, 0x00c0,
-+      0x391d, 0x1078, 0x18a0, 0x0078, 0x391f, 0x1078, 0x1b90, 0x0c7f,
-+      0x007c, 0x6004, 0x8001, 0x0048, 0x393e, 0x6006, 0x2009, 0x0000,
-+      0xa684, 0x0001, 0x00c0, 0x392e, 0xa18d, 0x8000, 0xa684, 0x0004,
-+      0x0040, 0x3934, 0xa18d, 0x0002, 0x6922, 0x681f, 0x0000, 0x7104,
-+      0x810f, 0x6818, 0xa105, 0x681a, 0x0078, 0x391d, 0x1078, 0x22ac,
-+      0x6018, 0xa005, 0x00c0, 0x394f, 0x6008, 0x8001, 0x0048, 0x394f,
-+      0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078, 0x3965, 0xac88,
-+      0x0006, 0x2104, 0xa005, 0x0040, 0x3958, 0x2008, 0x0078, 0x3951,
-+      0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x391f, 0x600a, 0x6018,
-+      0x2068, 0x6800, 0x601a, 0x0078, 0x3949, 0x157e, 0x137e, 0x147e,
-+      0x0c7e, 0x0d7e, 0x1078, 0x187d, 0x2da0, 0x137f, 0x20a9, 0x0031,
-+      0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x0078, 0x391d, 0xa184,
-+      0x001f, 0x8003, 0x8003, 0x8003, 0xa080, 0x7110, 0x2060, 0x007c,
-+      0x2019, 0x4d51, 0x2304, 0xa085, 0x0001, 0x201a, 0x2019, 0x0102,
-+      0x2304, 0xa085, 0x0001, 0x201a, 0x007c, 0x2019, 0x4d51, 0x2304,
-+      0xa084, 0xfffe, 0x201a, 0x2019, 0x0102, 0x2304, 0xa084, 0xfffe,
-+      0x201a, 0x007c, 0x0078, 0x231a, 0x70a3, 0x0000, 0x7003, 0x0000,
-+      0x7043, 0x0001, 0x7037, 0x0000, 0x0018, 0x22d1, 0x1078, 0x1aa9,
-+      0x0040, 0x39cf, 0x2009, 0x4d0f, 0x200b, 0x0000, 0x68bc, 0x2060,
-+      0x6100, 0xa184, 0x0300, 0x0040, 0x39c1, 0x6827, 0x000e, 0xa084,
-+      0x0200, 0x0040, 0x39bd, 0x6827, 0x0017, 0x1078, 0x3906, 0x0078,
-+      0x399c, 0x6820, 0xa084, 0x8000, 0x0040, 0x3a11, 0x7000, 0xa086,
-+      0x0007, 0x10c0, 0x22ac, 0x2d00, 0x70a2, 0x0078, 0x39d6, 0x7040,
-+      0xa086, 0x0001, 0x0040, 0x2353, 0x0078, 0x231a, 0x2031, 0x0000,
-+      0x6920, 0xa184, 0x0002, 0x0040, 0x39df, 0xa6b5, 0x0004, 0xa184,
-+      0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x3a8c, 0x2004, 0xa635,
-+      0x681c, 0xa084, 0x0400, 0x0040, 0x39f7, 0x789b, 0x0018, 0x78ab,
-+      0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0x681c,
-+      0xa084, 0x8000, 0x0040, 0x3a03, 0xa6b5, 0x0400, 0x789b, 0x000e,
-+      0x6824, 0x8007, 0x78aa, 0xa684, 0x0200, 0x0040, 0x3a0d, 0x6830,
-+      0x78d2, 0x682c, 0x78d6, 0x1078, 0x42cc, 0x7e5a, 0x6eb6, 0x0078,
-+      0x4303, 0x1078, 0x3705, 0x00c0, 0x3a86, 0x702c, 0x8004, 0x0048,
-+      0x3a1f, 0x2019, 0x4a07, 0x1078, 0x2137, 0x702f, 0x0001, 0x2011,
-+      0x0001, 0x2031, 0x1000, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f,
-+      0xa085, 0x0080, 0x78aa, 0x6920, 0xa184, 0x0002, 0x0040, 0x3a38,
-+      0xa6b5, 0x0004, 0x78ab, 0x0020, 0x6828, 0x78aa, 0xa290, 0x0002,
-+      0x681c, 0xa084, 0x8000, 0x0040, 0x3a46, 0xa6b5, 0x0400, 0x789b,
-+      0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x3a54, 0x6820, 0xa084,
-+      0x8000, 0x00c0, 0x3a54, 0xa6b5, 0x0800, 0x681c, 0xa084, 0x0100,
-+      0x0040, 0x3a54, 0xa6b5, 0x4000, 0x6820, 0xa084, 0x00c0, 0x8003,
-+      0x8003, 0x8007, 0xa080, 0x3a8c, 0x2004, 0xa635, 0x789b, 0x007e,
-+      0x7eae, 0x6eb6, 0x6814, 0x8007, 0x78aa, 0x7aaa, 0x7830, 0xa084,
-+      0x00c0, 0x00c0, 0x3a86, 0x0018, 0x3a86, 0x70bc, 0xa080, 0x00dd,
-+      0x781a, 0x1078, 0x371d, 0xa684, 0x0200, 0x0040, 0x3a7d, 0x6830,
-+      0x78d2, 0x682c, 0x78d6, 0x1078, 0x42cc, 0x2d00, 0x70a2, 0x7003,
-+      0x0007, 0xad80, 0x000f, 0x7036, 0x0078, 0x231a, 0x1078, 0x1a80,
-+      0x1078, 0x371d, 0x0078, 0x231a, 0x0000, 0x0300, 0x0200, 0x0000,
-+      0x1078, 0x22ac, 0x2300, 0x0079, 0x3a95, 0x3a98, 0x3a98, 0x3a9a,
-+      0x1078, 0x22ac, 0x1078, 0x42db, 0x6924, 0xa184, 0x00ff, 0xa086,
-+      0x000a, 0x0040, 0x3aac, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826,
-+      0x1078, 0x1a80, 0x0078, 0x399c, 0x2001, 0x000a, 0x1078, 0x4254,
-+      0x0078, 0x399c, 0xa282, 0x0005, 0x0050, 0x3ab8, 0x1078, 0x22ac,
-+      0x7000, 0xa084, 0x0007, 0x10c0, 0x37c7, 0x1078, 0x187d, 0x6807,
-+      0x0106, 0x680b, 0x0000, 0x689f, 0x0000, 0x6827, 0x0000, 0x1078,
-+      0x3e02, 0x2d00, 0x70a2, 0x7003, 0x0007, 0x6014, 0x68ba, 0xad80,
-+      0x002e, 0x7036, 0x6824, 0xa084, 0x0080, 0x0040, 0x3adb, 0x1078,
-+      0x3ea9, 0x0078, 0x231a, 0x2300, 0x0079, 0x3ade, 0x3ae1, 0x3b59,
-+      0x3b78, 0x2200, 0x0079, 0x3ae4, 0x3ae9, 0x3af9, 0x3b1f, 0x3b29,
-+      0x3b4a, 0x2029, 0x0001, 0xa026, 0x2011, 0x0000, 0x1078, 0x3f97,
-+      0x0079, 0x3af2, 0x3af7, 0x231a, 0x399c, 0x3af7, 0x3af7, 0x1078,
-+      0x22ac, 0x7990, 0xa18c, 0x0007, 0x00c0, 0x3b00, 0x2009, 0x0008,
-+      0x2011, 0x0001, 0xa684, 0x0004, 0x0040, 0x3b08, 0x2011, 0x0003,
-+      0x2220, 0xa12a, 0x2011, 0x0001, 0x1078, 0x3f97, 0x0079, 0x3b10,
-+      0x3b15, 0x231a, 0x399c, 0x3b1d, 0x3b17, 0x0078, 0x4309, 0x70ab,
-+      0x3b1b, 0x0078, 0x231a, 0x0078, 0x3b15, 0x1078, 0x22ac, 0xa684,
-+      0x0010, 0x0040, 0x3b27, 0x1078, 0x3e79, 0x0078, 0x231a, 0x0078,
-+      0x3eda, 0x6000, 0xa084, 0x0002, 0x0040, 0x3b44, 0x70bc, 0xa080,
-+      0x00c4, 0x781a, 0x0d7e, 0x1078, 0x42e4, 0x2d00, 0x682e, 0x6827,
-+      0x0000, 0x1078, 0x3906, 0x0d7f, 0x1078, 0x18a0, 0x7003, 0x0000,
-+      0x7037, 0x0000, 0x0078, 0x399c, 0xa684, 0x0004, 0x00c0, 0x3b4a,
-+      0x0078, 0x4309, 0x6000, 0xa084, 0x0004, 0x00c0, 0x3b57, 0x70ab,
-+      0x3b57, 0x2001, 0x0007, 0x1078, 0x424c, 0x0078, 0x430f, 0x0078,
-+      0x4309, 0x2200, 0x0079, 0x3b5c, 0x3b61, 0x3b61, 0x3b61, 0x3b63,
-+      0x3b61, 0x1078, 0x22ac, 0x70a7, 0x3b67, 0x0078, 0x4315, 0x2011,
-+      0x0018, 0x1078, 0x3f91, 0x0079, 0x3b6d, 0x3b72, 0x231a, 0x399c,
-+      0x3b74, 0x3b76, 0x1078, 0x22ac, 0x1078, 0x22ac, 0x1078, 0x22ac,
-+      0x2200, 0x0079, 0x3b7b, 0x3b80, 0x3b80, 0x3b82, 0x3b80, 0x3b80,
-+      0x1078, 0x22ac, 0x70ab, 0x3b8a, 0x2001, 0x0003, 0x1078, 0x424c,
-+      0x0078, 0x430f, 0x0078, 0x4309, 0xa282, 0x0003, 0x0050, 0x3b92,
-+      0x1078, 0x22ac, 0xa684, 0x0008, 0x0040, 0x3b98, 0x1078, 0x3e57,
-+      0x7003, 0x0007, 0x2300, 0x0079, 0x3b9d, 0x3ba0, 0x3bcb, 0x3bd3,
-+      0x2200, 0x0079, 0x3ba3, 0x3ba8, 0x3ba6, 0x3bc1, 0x1078, 0x22ac,
-+      0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078, 0x3f97,
-+      0x0079, 0x3bb2, 0x3bb7, 0x231a, 0x399c, 0x3bbf, 0x3bb9, 0x0078,
-+      0x4309, 0x70ab, 0x3bbd, 0x0078, 0x231a, 0x0078, 0x3bb7, 0x1078,
-+      0x22ac, 0xa684, 0x0010, 0x0040, 0x3bc9, 0x1078, 0x3e79, 0x0078,
-+      0x231a, 0x0078, 0x3eda, 0x2200, 0x0079, 0x3bce, 0x3bd1, 0x3bd1,
-+      0x3bd1, 0x1078, 0x22ac, 0x2200, 0x0079, 0x3bd6, 0x3bd9, 0x3bd9,
-+      0x3bdb, 0x1078, 0x22ac, 0x70ab, 0x3be3, 0x2001, 0x0003, 0x1078,
-+      0x424c, 0x0078, 0x430f, 0x0078, 0x4309, 0x2300, 0x0079, 0x3be8,
-+      0x3bed, 0x3bef, 0x3beb, 0x1078, 0x22ac, 0x70a4, 0x007a, 0x70a4,
-+      0x007a, 0xa282, 0x0002, 0x0050, 0x3bf7, 0x1078, 0x22ac, 0xa684,
-+      0x0200, 0x0040, 0x3c01, 0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078,
-+      0x42db, 0x2300, 0x0079, 0x3c04, 0x3c07, 0x3c1d, 0x3c77, 0xa286,
-+      0x0001, 0x0040, 0x3c0d, 0x1078, 0x22ac, 0xa684, 0x0200, 0x0040,
-+      0x3c15, 0x1078, 0x42d4, 0x1078, 0x42db, 0x2001, 0x0001, 0x1078,
-+      0x4254, 0x7003, 0x0000, 0x0078, 0x399c, 0x2200, 0x0079, 0x3c20,
-+      0x3c22, 0x3c47, 0x70a7, 0x3c26, 0x0078, 0x4315, 0x2011, 0x000d,
-+      0x1078, 0x3f91, 0x0079, 0x3c2c, 0x3c31, 0x231a, 0x399c, 0x3c39,
-+      0x3c41, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078,
-+      0x4303, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078,
-+      0x4303, 0x70ab, 0x3c45, 0x0078, 0x231a, 0x0078, 0x3c31, 0x70a7,
-+      0x3c4b, 0x0078, 0x4315, 0x2011, 0x0012, 0x1078, 0x3f91, 0x0079,
-+      0x3c51, 0x3c57, 0x231a, 0x399c, 0x3c63, 0x3c6b, 0x3c71, 0xa6b4,
-+      0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70bc, 0xa080, 0x00a1,
-+      0x781a, 0x0078, 0x231a, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6,
-+      0x7e5a, 0x0078, 0x4303, 0x70ab, 0x3c6f, 0x0078, 0x231a, 0x0078,
-+      0x3c57, 0x70ab, 0x3c75, 0x0078, 0x231a, 0x0078, 0x3c63, 0xa286,
-+      0x0001, 0x0040, 0x3c7d, 0x1078, 0x22ac, 0x70a7, 0x3c81, 0x0078,
-+      0x4315, 0x2011, 0x0015, 0x1078, 0x3f91, 0x0079, 0x3c87, 0x3c8c,
-+      0x231a, 0x399c, 0x3c94, 0x3c9c, 0xa6b4, 0x00ff, 0xa6b5, 0x0400,
-+      0x6eb6, 0x7e5a, 0x0078, 0x4303, 0xa6b4, 0x00ff, 0xa6b5, 0x0400,
-+      0x6eb6, 0x7e5a, 0x0078, 0x4303, 0x70ab, 0x3ca0, 0x0078, 0x231a,
-+      0x0078, 0x3c8c, 0xa282, 0x0002, 0x0050, 0x3ca8, 0x1078, 0x22ac,
-+      0x2300, 0x0079, 0x3cab, 0x3cae, 0x3cd7, 0x3d26, 0xa286, 0x0001,
-+      0x0040, 0x3cb4, 0x1078, 0x22ac, 0x6804, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x00c0, 0x3cc1, 0x1078, 0x3906, 0x7003, 0x0000, 0x0078,
-+      0x399c, 0x6837, 0x0000, 0x683b, 0x0000, 0xa684, 0x0200, 0x0040,
-+      0x3ccf, 0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078, 0x42db, 0x2001,
-+      0x0001, 0x1078, 0x4254, 0x7003, 0x0000, 0x0078, 0x399c, 0x2200,
-+      0x0079, 0x3cda, 0x3cdc, 0x3d01, 0x70a7, 0x3ce0, 0x0078, 0x4315,
-+      0x2011, 0x000d, 0x1078, 0x3f91, 0x0079, 0x3ce6, 0x3ceb, 0x231a,
-+      0x399c, 0x3cf3, 0x3cfb, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+      0x7e5a, 0x0078, 0x4303, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+      0x7e5a, 0x0078, 0x4303, 0x70ab, 0x3cff, 0x0078, 0x231a, 0x0078,
-+      0x3ceb, 0x70a7, 0x3d05, 0x0078, 0x4315, 0x2011, 0x0005, 0x1078,
-+      0x3f91, 0x0079, 0x3d0b, 0x3d10, 0x231a, 0x399c, 0x3d18, 0x3d20,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4303,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4303,
-+      0x70ab, 0x3d24, 0x0078, 0x231a, 0x0078, 0x3d10, 0xa286, 0x0001,
-+      0x0040, 0x3d2c, 0x1078, 0x22ac, 0x70a7, 0x3d30, 0x0078, 0x4315,
-+      0x2011, 0x0006, 0x1078, 0x3f91, 0x0079, 0x3d36, 0x3d3b, 0x231a,
-+      0x399c, 0x3d41, 0x3d43, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078,
-+      0x4303, 0x1078, 0x22ac, 0x70ab, 0x3d47, 0x0078, 0x231a, 0x0078,
-+      0x3d3b, 0x2300, 0x0079, 0x3d4c, 0x3d51, 0x3d4f, 0x3d4f, 0x1078,
-+      0x22ac, 0x1078, 0x22ac, 0x2300, 0x71a8, 0xa005, 0x017a, 0xa282,
-+      0x0002, 0x0050, 0x3d5d, 0x1078, 0x22ac, 0x2300, 0x0079, 0x3d60,
-+      0x3d63, 0x3d76, 0x3d94, 0x82ff, 0x00c0, 0x3d68, 0x1078, 0x22ac,
-+      0xa684, 0x0200, 0x0040, 0x3d70, 0x1078, 0x42d4, 0x1078, 0x42db,
-+      0x2001, 0x0001, 0x1078, 0x4254, 0x0078, 0x231a, 0x82ff, 0x0040,
-+      0x3d7b, 0x1078, 0x22ac, 0x70a7, 0x3d7f, 0x0078, 0x4315, 0x2011,
-+      0x0018, 0x1078, 0x3f91, 0x0079, 0x3d85, 0x3d8a, 0x231a, 0x399c,
-+      0x3d8c, 0x3d8e, 0x0078, 0x4303, 0x0078, 0x4303, 0x70ab, 0x3d92,
-+      0x0078, 0x231a, 0x0078, 0x3d8a, 0x2200, 0x0079, 0x3d97, 0x3d99,
-+      0x3db2, 0x70a7, 0x3d9d, 0x0078, 0x4315, 0x2011, 0x0018, 0x1078,
-+      0x3f91, 0x0079, 0x3da3, 0x3da8, 0x231a, 0x399c, 0x3daa, 0x3dac,
-+      0x0078, 0x4303, 0x0078, 0x4303, 0x70ab, 0x3db0, 0x0078, 0x231a,
-+      0x0078, 0x3da8, 0xa484, 0x8000, 0x00c0, 0x3df0, 0xa684, 0x0100,
-+      0x0040, 0x3dc6, 0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078, 0x42db,
-+      0x7848, 0xa085, 0x000c, 0x784a, 0x0078, 0x3dca, 0x78d8, 0x78d2,
-+      0x78dc, 0x78d6, 0xa6b4, 0xefff, 0x7e5a, 0x70a7, 0x3dd1, 0x0078,
-+      0x4315, 0x2011, 0x000d, 0x1078, 0x3f91, 0x0079, 0x3dd7, 0x3ddc,
-+      0x231a, 0x399c, 0x3ddc, 0x3dea, 0xa684, 0x0100, 0x0040, 0x3de8,
-+      0x1078, 0x4291, 0x6830, 0x78d2, 0x682c, 0x78d6, 0x1078, 0x42cc,
-+      0x0078, 0x4303, 0x70ab, 0x3dee, 0x0078, 0x231a, 0x0078, 0x3ddc,
-+      0x1078, 0x42db, 0x70ab, 0x3dfa, 0x2001, 0x0003, 0x1078, 0x424c,
-+      0x0078, 0x430f, 0x1078, 0x42cc, 0x6830, 0x78d2, 0x682c, 0x78d6,
-+      0x0078, 0x4303, 0x681b, 0x0000, 0xa684, 0x0008, 0x0040, 0x3e20,
-+      0x157e, 0x137e, 0x147e, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004,
-+      0xa084, 0x000f, 0x681a, 0x80ac, 0x789b, 0x0000, 0xaf80, 0x002c,
-+      0x2098, 0xad80, 0x000b, 0x20a0, 0x53a5, 0x147f, 0x137f, 0x157f,
-+      0xa6c4, 0x0f00, 0xa684, 0x0002, 0x00c0, 0x3e2d, 0x692c, 0x810f,
-+      0x810d, 0x810d, 0x810d, 0x0078, 0x3e3a, 0x789b, 0x0010, 0x79ac,
-+      0x0078, 0x3e3a, 0x017e, 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078,
-+      0x429c, 0x017f, 0xa184, 0x001f, 0xa805, 0x6816, 0x1078, 0x3977,
-+      0x68be, 0xa684, 0x0004, 0x0040, 0x3e4b, 0xa18c, 0xff00, 0x78a8,
-+      0xa084, 0x00ff, 0xa105, 0x682a, 0xa6b4, 0x00ff, 0x6000, 0xa084,
-+      0x0008, 0x0040, 0x3e55, 0xa6b5, 0x4000, 0x6eb6, 0x007c, 0x157e,
-+      0x137e, 0x147e, 0x6918, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004,
-+      0xa084, 0x000f, 0x007e, 0xa100, 0x681a, 0x007f, 0x8004, 0x0040,
-+      0x3e75, 0x20a8, 0x8104, 0xa080, 0x000b, 0xad00, 0x20a0, 0x789b,
-+      0x0000, 0xaf80, 0x002c, 0x2098, 0x53a5, 0x147f, 0x137f, 0x157f,
-+      0x007c, 0x682c, 0xa084, 0x2000, 0x00c0, 0x3e81, 0x620c, 0x0078,
-+      0x3e82, 0x6210, 0x6b18, 0x2300, 0xa202, 0x0040, 0x3ea0, 0x2018,
-+      0xa382, 0x000e, 0x0048, 0x3e92, 0x0040, 0x3e92, 0x2019, 0x000e,
-+      0x0078, 0x3e96, 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b02,
-+      0x7893, 0x0000, 0x7ba2, 0x70bc, 0xa080, 0x008a, 0x781a, 0x007c,
-+      0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b02, 0x7893, 0x0000,
-+      0x007c, 0x6807, 0x0117, 0x6914, 0x1078, 0x3977, 0x6100, 0x8104,
-+      0x00c8, 0x3ec6, 0x601c, 0xa005, 0x0040, 0x3eba, 0x2001, 0x0800,
-+      0x0078, 0x3ec8, 0x0d7e, 0x6824, 0x007e, 0x1078, 0x42e4, 0x007f,
-+      0x6826, 0x2d00, 0x682e, 0x1078, 0x3906, 0x0d7f, 0x2001, 0x0200,
-+      0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x681c, 0xa085, 0x8000,
-+      0x681e, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71bc, 0xa188, 0x008d,
-+      0x791a, 0x007c, 0x6914, 0x1078, 0x3977, 0x6100, 0x8104, 0x00c8,
-+      0x3f27, 0xa184, 0x0300, 0x0040, 0x3ee9, 0x6807, 0x0117, 0x0078,
-+      0x3f07, 0x6004, 0xa005, 0x00c0, 0x3f10, 0x6807, 0x0117, 0x601c,
-+      0xa005, 0x00c0, 0x3efd, 0x0d7e, 0x1078, 0x42e4, 0x6827, 0x0034,
-+      0x2d00, 0x682e, 0x1078, 0x3906, 0x0d7f, 0xa684, 0x0004, 0x0040,
-+      0x3f07, 0x2031, 0x0400, 0x2001, 0x2800, 0x0078, 0x3f0b, 0x2031,
-+      0x0400, 0x2001, 0x0800, 0x71bc, 0xa188, 0x008d, 0x0078, 0x3f56,
-+      0x6018, 0xa005, 0x00c0, 0x3efd, 0x601c, 0xa005, 0x00c0, 0x3efd,
-+      0x689f, 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x3f64,
-+      0xa6b5, 0x0800, 0x71bc, 0xa188, 0x00a5, 0x0078, 0x3f5f, 0x6807,
-+      0x0117, 0x2031, 0x0400, 0x692c, 0x810f, 0xa18c, 0x00ff, 0xa186,
-+      0x0012, 0x00c0, 0x3f39, 0x2001, 0x3f6f, 0x2009, 0x0001, 0x0078,
-+      0x3f4a, 0xa186, 0x0003, 0x00c0, 0x3f43, 0x2001, 0x3f70, 0x2009,
-+      0x0012, 0x0078, 0x3f4a, 0x2001, 0x0200, 0x71bc, 0xa188, 0x008d,
-+      0x0078, 0x3f56, 0x1078, 0x42b7, 0x78a3, 0x0000, 0x6820, 0xa085,
-+      0x0040, 0x6822, 0x71bc, 0xa188, 0x00da, 0xa006, 0x6826, 0x8007,
-+      0x789b, 0x000e, 0x78aa, 0x681c, 0xa085, 0x8000, 0x681e, 0x6eb6,
-+      0x7e5a, 0x791a, 0x0078, 0x231a, 0x6eb6, 0x1078, 0x3906, 0x6814,
-+      0x70ae, 0x6828, 0x70b2, 0x7003, 0x0007, 0x0078, 0x231a, 0x0023,
-+      0x0070, 0x0005, 0x0000, 0x0a00, 0x0000, 0x0000, 0x0025, 0x0000,
-+      0x0000, 0x6837, 0x0000, 0x683b, 0x0000, 0xa684, 0x0200, 0x0040,
-+      0x3f90, 0x78b8, 0xa08c, 0x001f, 0xa084, 0x8000, 0x0040, 0x3f89,
-+      0x8108, 0x78d8, 0xa100, 0x683a, 0x78dc, 0xa081, 0x0000, 0x6836,
-+      0x007c, 0x7990, 0x810f, 0xa5ac, 0x0007, 0x2021, 0x0000, 0xa480,
-+      0x0010, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa184, 0x0080, 0x00c0,
-+      0x3fbf, 0xa182, 0x0020, 0x00c8, 0x3fd9, 0xa182, 0x0012, 0x00c8,
-+      0x4241, 0x2100, 0x1079, 0x3fad, 0x007c, 0x4241, 0x418a, 0x4241,
-+      0x4241, 0x3fe6, 0x3fe9, 0x4023, 0x4063, 0x4093, 0x4096, 0x4241,
-+      0x4241, 0x4045, 0x40b8, 0x40f3, 0x4241, 0x4241, 0x411b, 0xa18c,
-+      0x001f, 0x6814, 0xa084, 0x001f, 0xa106, 0x0040, 0x3fd6, 0x70bc,
-+      0xa080, 0x00c4, 0x781a, 0x2001, 0x0014, 0x1078, 0x4254, 0x1078,
-+      0x42db, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000,
-+      0x007c, 0xa182, 0x0024, 0x00c8, 0x4241, 0xa184, 0x0003, 0x1079,
-+      0x3fad, 0x007c, 0x4241, 0x4241, 0x4241, 0x4241, 0x1078, 0x4241,
-+      0x007c, 0x2200, 0x0079, 0x3fec, 0x411e, 0x411e, 0x4010, 0x4010,
-+      0x4010, 0x4010, 0x4010, 0x4010, 0x4010, 0x4010, 0x400e, 0x4010,
-+      0x4005, 0x4010, 0x4010, 0x4010, 0x4010, 0x4010, 0x4018, 0x401b,
-+      0x411e, 0x401b, 0x4010, 0x4010, 0x4010, 0x0c7e, 0x077e, 0x6f14,
-+      0x1078, 0x34f9, 0x077f, 0x0c7f, 0x0078, 0x4010, 0x1078, 0x41df,
-+      0x6827, 0x02b3, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x414e,
-+      0x1078, 0x4236, 0x007c, 0x6827, 0x0293, 0x2009, 0x000b, 0x2001,
-+      0x4800, 0x0078, 0x413a, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x00c0, 0x402d, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078,
-+      0x42e4, 0x6827, 0x0036, 0x810f, 0x6932, 0x2d00, 0x682e, 0x0d7e,
-+      0x1078, 0x38d6, 0x1078, 0x4172, 0x2b68, 0x1078, 0x3906, 0x0d7f,
-+      0x1078, 0x3906, 0x2001, 0x0002, 0x007c, 0x1078, 0x4172, 0x6904,
-+      0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4056, 0xa186, 0x000f,
-+      0x0040, 0x4056, 0x1078, 0x18a0, 0x70a3, 0x0000, 0x2009, 0x4d38,
-+      0x200b, 0x0006, 0x70b7, 0x0017, 0x2009, 0x0200, 0x1078, 0x3816,
-+      0x2001, 0x0001, 0x007c, 0x2200, 0x0079, 0x4066, 0x411e, 0x414b,
-+      0x414b, 0x414b, 0x4085, 0x415b, 0x415b, 0x415b, 0x415b, 0x415e,
-+      0x415e, 0x4163, 0x4163, 0x407f, 0x407f, 0x414b, 0x414b, 0x415b,
-+      0x414b, 0x408b, 0x411e, 0x408b, 0x408b, 0x415b, 0x408b, 0x2009,
-+      0x000b, 0x2001, 0x4300, 0x0078, 0x416d, 0x2009, 0x000b, 0x2001,
-+      0x4300, 0x0078, 0x414e, 0x6827, 0x0293, 0x2009, 0x000b, 0x2001,
-+      0x4300, 0x0078, 0x413a, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079,
-+      0x4099, 0x411e, 0x40b2, 0x40b2, 0x40b2, 0x40b2, 0x415b, 0x415b,
-+      0x415b, 0x415b, 0x415b, 0x415b, 0x415b, 0x415b, 0x40b2, 0x40b2,
-+      0x40b2, 0x40b2, 0x415b, 0x40b2, 0x40b2, 0x415b, 0x415b, 0x415b,
-+      0x415b, 0x411e, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078, 0x413a,
-+      0xa684, 0x0004, 0x00c0, 0x40cc, 0x6804, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x00c0, 0x4241, 0x1078, 0x4172, 0x6807, 0x0117, 0x1078,
-+      0x3906, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040,
-+      0x4241, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+      0x40db, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, 0x42e4, 0x6827,
-+      0x0036, 0x810f, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x38e5,
-+      0x1078, 0x4172, 0x2b68, 0x1078, 0x3906, 0x0d7f, 0x1078, 0x3906,
-+      0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040, 0x4241,
-+      0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x00c0, 0x4102,
-+      0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078, 0x42e4, 0x6827,
-+      0x0036, 0x810f, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x38f5,
-+      0x1078, 0x4172, 0x2b68, 0x1078, 0x3906, 0x0d7f, 0x1078, 0x3906,
-+      0x2001, 0x0002, 0x007c, 0x1078, 0x4241, 0x007c, 0x70bc, 0xa080,
-+      0x00c4, 0x781a, 0x2001, 0x0001, 0x1078, 0x4254, 0x1078, 0x42db,
-+      0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x429c, 0x1078,
-+      0x42d4, 0x1078, 0x3f79, 0x1078, 0x3ea9, 0x1078, 0x42db, 0x2001,
-+      0x0001, 0x007c, 0x1078, 0x429c, 0x1078, 0x42d4, 0x1078, 0x3f79,
-+      0x70bc, 0xa080, 0x00c4, 0x781a, 0x1078, 0x42db, 0x7003, 0x0000,
-+      0x2001, 0x0002, 0x007c, 0x1078, 0x4241, 0x007c, 0x1078, 0x429c,
-+      0x1078, 0x42d4, 0x1078, 0x3f79, 0x1078, 0x3ea9, 0x1078, 0x42db,
-+      0x2001, 0x0001, 0x007c, 0x2001, 0x0003, 0x007c, 0x1078, 0x41df,
-+      0x2001, 0x0000, 0x007c, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x34f9,
-+      0x077f, 0x0c7f, 0x2001, 0x0000, 0x007c, 0x1078, 0x429c, 0x1078,
-+      0x4241, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040,
-+      0x417d, 0xa186, 0x000f, 0x00c0, 0x4181, 0x1078, 0x42d4, 0x1078,
-+      0x3f79, 0x70bc, 0xa080, 0x00c4, 0x781a, 0x1078, 0x42db, 0x7003,
-+      0x0000, 0x007c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff,
-+      0xa08a, 0x0004, 0x00c8, 0x4241, 0x1079, 0x4197, 0x007c, 0x4241,
-+      0x419b, 0x4241, 0x41ed, 0xa282, 0x0003, 0x0040, 0x41a2, 0x1078,
-+      0x4241, 0x007c, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff,
-+      0xa482, 0x000c, 0x0048, 0x41b0, 0x0040, 0x41b0, 0x2021, 0x000c,
-+      0x701c, 0xa502, 0x00c8, 0x41b5, 0x751c, 0x1078, 0x4227, 0x852b,
-+      0x852b, 0x1078, 0x3577, 0x0040, 0x41c1, 0x1078, 0x41d1, 0x0078,
-+      0x41c5, 0x1078, 0x4223, 0x1078, 0x41df, 0xa6b5, 0x1000, 0x789b,
-+      0x007e, 0x7ea6, 0x70bc, 0xa080, 0x00b0, 0x781a, 0x2001, 0x0004,
-+      0x007c, 0x0c7e, 0x6914, 0x810f, 0xa18c, 0x000f, 0x810b, 0x810b,
-+      0x810b, 0xa1e0, 0x4f80, 0x1078, 0x338b, 0x0c7f, 0x007c, 0x0c7e,
-+      0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+      0x4f80, 0x1078, 0x33b2, 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0,
-+      0x4241, 0x7aa8, 0xa294, 0x00ff, 0xa284, 0xfffe, 0x0040, 0x41fa,
-+      0x2011, 0x0001, 0x1078, 0x4215, 0x1078, 0x4207, 0x1078, 0x41df,
-+      0x70bc, 0xa080, 0x00b0, 0x781a, 0x2001, 0x0004, 0x007c, 0x0c7e,
-+      0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+      0x4f80, 0x1078, 0x3457, 0x0c7f, 0x007c, 0x789b, 0x0018, 0x78ab,
-+      0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0081,
-+      0x78ab, 0x0004, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b,
-+      0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+      0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x007c, 0x2001, 0x0003,
-+      0x1078, 0x424c, 0x70bc, 0xa080, 0x00b0, 0x781a, 0x2001, 0x0005,
-+      0x007c, 0x2001, 0x0007, 0x1078, 0x424c, 0x70bc, 0xa080, 0x00b0,
-+      0x781a, 0x2001, 0x0004, 0x007c, 0x789b, 0x0018, 0x78aa, 0x789b,
-+      0x0081, 0x78ab, 0x0001, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa196,
-+      0x0007, 0x0040, 0x4262, 0xa196, 0x000f, 0x0040, 0x4262, 0x1078,
-+      0x18a0, 0x007c, 0x6924, 0xa194, 0x003f, 0x00c0, 0x426b, 0xa18c,
-+      0xffc0, 0xa105, 0x6826, 0x1078, 0x3906, 0x6920, 0xa184, 0x0100,
-+      0x0040, 0x4290, 0x6824, 0xa084, 0x0001, 0x0040, 0x4290, 0x6b14,
-+      0xa184, 0x0002, 0x00c0, 0x4280, 0x1078, 0x1b1b, 0x0078, 0x4285,
-+      0x6c28, 0xa4a4, 0x00ff, 0x1078, 0x1ab9, 0x0d7e, 0x2068, 0x1078,
-+      0x18a0, 0x0d7f, 0x6914, 0x1078, 0x3977, 0x6204, 0x8210, 0x6206,
-+      0x007c, 0x6930, 0x6838, 0x6832, 0xa112, 0x692c, 0x6834, 0x682e,
-+      0xa11b, 0xa200, 0xa301, 0x007c, 0x0c7e, 0xade0, 0x0018, 0x6003,
-+      0x7000, 0x810f, 0x6106, 0x600b, 0x0000, 0x600f, 0x000a, 0x6013,
-+      0x0000, 0x6017, 0x0000, 0x8007, 0x601a, 0x601f, 0x0000, 0x6023,
-+      0x0000, 0x0c7f, 0x6824, 0xa085, 0x0080, 0x6826, 0x007c, 0x157e,
-+      0x137e, 0x147e, 0x2098, 0xaf80, 0x002d, 0x20a0, 0x81ac, 0x0040,
-+      0x42c2, 0x53a6, 0xa184, 0x0001, 0x0040, 0x42c8, 0x3304, 0x78be,
-+      0x147f, 0x137f, 0x157f, 0x007c, 0x70b8, 0xa005, 0x10c0, 0x22ac,
-+      0x70bb, 0x8000, 0x0078, 0x45ed, 0x71b8, 0x81ff, 0x0040, 0x42da,
-+      0x1078, 0x46d8, 0x007c, 0x71b8, 0x81ff, 0x0040, 0x42e3, 0x70bb,
-+      0x0000, 0x1078, 0x431b, 0x007c, 0x0c7e, 0x0d7e, 0x1078, 0x187d,
-+      0x0c7f, 0x157e, 0x137e, 0x147e, 0x2da0, 0x2c98, 0x20a9, 0x0031,
-+      0x53a3, 0x147f, 0x137f, 0x157f, 0x6807, 0x010d, 0x680b, 0x0000,
-+      0x7004, 0x8007, 0x681a, 0x681f, 0x0000, 0x6823, 0x0000, 0x689f,
-+      0x0000, 0x0c7f, 0x007c, 0x70bc, 0xa080, 0x008d, 0x781a, 0x0078,
-+      0x231a, 0x70bc, 0xa080, 0x007d, 0x781a, 0x0078, 0x231a, 0x70bc,
-+      0xa080, 0x00b0, 0x781a, 0x0078, 0x231a, 0x70bc, 0xa080, 0x00ba,
-+      0x781a, 0x0078, 0x231a, 0x127e, 0x2091, 0x2200, 0x2049, 0x431b,
-+      0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008, 0xa084, 0xfffd,
-+      0xa205, 0x0040, 0x432d, 0x0078, 0x4332, 0x7003, 0x0000, 0x127f,
-+      0x2000, 0x007c, 0x7000, 0xa084, 0x0001, 0x00c0, 0x4360, 0x7108,
-+      0x8104, 0x00c8, 0x433f, 0x1078, 0x4462, 0x0078, 0x4337, 0x700c,
-+      0xa08c, 0x00ff, 0x0040, 0x4360, 0x7004, 0x8004, 0x00c8, 0x4357,
-+      0x7014, 0xa005, 0x00c0, 0x4353, 0x7010, 0xa005, 0x0040, 0x4357,
-+      0xa102, 0x00c8, 0x4337, 0x7007, 0x0010, 0x0078, 0x4360, 0x8aff,
-+      0x0040, 0x4360, 0x1078, 0x46ba, 0x00c0, 0x435a, 0x0040, 0x4337,
-+      0x1078, 0x43eb, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x017e,
-+      0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4373, 0xa18e,
-+      0x000f, 0x00c0, 0x4376, 0x6040, 0x0078, 0x4377, 0x6428, 0x017f,
-+      0x84ff, 0x0040, 0x43a1, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8,
-+      0x43b1, 0x273c, 0x87fb, 0x00c0, 0x438f, 0x0048, 0x4389, 0x1078,
-+      0x22ac, 0x609c, 0xa075, 0x0040, 0x43a1, 0x0078, 0x437c, 0x2704,
-+      0xae68, 0x680c, 0xa630, 0x6808, 0xa529, 0x8421, 0x0040, 0x43a1,
-+      0x8738, 0x2704, 0xa005, 0x00c0, 0x4390, 0x709c, 0xa075, 0x00c0,
-+      0x437c, 0x007c, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011, 0x0015,
-+      0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b,
-+      0x0000, 0x0000, 0x43a6, 0x43a3, 0x0000, 0x0000, 0x8000, 0x0000,
-+      0x43a6, 0x0000, 0x43ae, 0x43ab, 0x0000, 0x0000, 0x0000, 0x0000,
-+      0x43ae, 0x0000, 0x43a9, 0x43a9, 0x0000, 0x0000, 0x8000, 0x0000,
-+      0x43a9, 0x0000, 0x43af, 0x43af, 0x0000, 0x0000, 0x0000, 0x0000,
-+      0x43af, 0x127e, 0x2091, 0x2200, 0x2079, 0x4d00, 0x2071, 0x0010,
-+      0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071, 0x0020,
-+      0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049, 0x0000,
-+      0x127f, 0x2000, 0x007c, 0x2049, 0x43eb, 0x2019, 0x0000, 0x7004,
-+      0x8004, 0x00c8, 0x443e, 0x7007, 0x0012, 0x7108, 0x7008, 0xa106,
-+      0x00c0, 0x43f5, 0xa184, 0x000c, 0x0040, 0x4400, 0x1078, 0x22ac,
-+      0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x440b, 0xa184,
-+      0x0000, 0x00c0, 0x43f5, 0xa19c, 0x0032, 0xa386, 0x0030, 0x0040,
-+      0x4419, 0xa386, 0x0002, 0x0040, 0x4424, 0xa386, 0x0032, 0x00c0,
-+      0x43f5, 0x7200, 0x8204, 0x0048, 0x4424, 0x730c, 0xa384, 0x00ff,
-+      0x0040, 0x4424, 0x1078, 0x22ac, 0x7007, 0x0012, 0x7000, 0xa084,
-+      0x0001, 0x00c0, 0x443e, 0x7008, 0xa084, 0x000c, 0x00c0, 0x443e,
-+      0x7310, 0x7014, 0xa305, 0x0040, 0x443e, 0x710c, 0xa184, 0x0300,
-+      0x00c0, 0x443e, 0xa184, 0x00ff, 0x00c0, 0x43eb, 0x7007, 0x0012,
-+      0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x4442, 0x7007,
-+      0x0012, 0x7108, 0x8104, 0x0048, 0x4447, 0x7003, 0x0000, 0x2049,
-+      0x0000, 0x007c, 0x107e, 0x007e, 0x127e, 0x157e, 0x2091, 0x2200,
-+      0x7108, 0x1078, 0x4462, 0x157f, 0x127f, 0x2091, 0x8001, 0x007f,
-+      0x107f, 0x007c, 0x7204, 0x7500, 0x730c, 0xa384, 0x0300, 0x00c0,
-+      0x4497, 0xa184, 0x000c, 0x00c0, 0x44bb, 0x7108, 0xa184, 0x000c,
-+      0x00c0, 0x44bb, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8,
-+      0x447d, 0xa184, 0x0000, 0x00c0, 0x446d, 0xa184, 0x00c0, 0x8004,
-+      0x8004, 0x8004, 0x8004, 0x8004, 0x8004, 0xa18c, 0x0030, 0xa18e,
-+      0x0030, 0x00c0, 0x448d, 0xa085, 0x0004, 0x0079, 0x448f, 0x4499,
-+      0x44ab, 0x4497, 0x44ab, 0x4497, 0x44f7, 0x4497, 0x44f5, 0x1078,
-+      0x22ac, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff,
-+      0x00c0, 0x44a6, 0x2049, 0x0000, 0x0078, 0x44aa, 0x1078, 0x46ba,
-+      0x00c0, 0x44a6, 0x007c, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002,
-+      0x7006, 0x8aff, 0x00c0, 0x44b6, 0x0078, 0x44ba, 0x1078, 0x46ba,
-+      0x00c0, 0x44b6, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x44be,
-+      0x2091, 0x6000, 0x00e0, 0x44c2, 0x2091, 0x6000, 0x7007, 0x0012,
-+      0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x44ca, 0x7007,
-+      0x0012, 0x7108, 0x8104, 0x0048, 0x44cf, 0x7003, 0x0000, 0x7000,
-+      0xa005, 0x00c0, 0x44e3, 0x7004, 0xa005, 0x00c0, 0x44e3, 0x700c,
-+      0xa005, 0x0040, 0x44e5, 0x0078, 0x44c6, 0x2049, 0x0000, 0x1078,
-+      0x3616, 0x6818, 0xa084, 0x8000, 0x0040, 0x44f0, 0x681b, 0x0002,
-+      0x007c, 0x1078, 0x22ac, 0x1078, 0x22ac, 0x1078, 0x4553, 0x7210,
-+      0x7114, 0x700c, 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189,
-+      0x0000, 0x1078, 0x4553, 0x2704, 0x2c58, 0xac60, 0x630c, 0x2200,
-+      0xa322, 0x6308, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x451a,
-+      0x00c8, 0x451a, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60,
-+      0x0078, 0x4501, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008,
-+      0x0040, 0x4526, 0xa7ba, 0x43ab, 0x0078, 0x4528, 0xa7ba, 0x43a3,
-+      0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007,
-+      0x0012, 0x1078, 0x43eb, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0,
-+      0x4547, 0x609c, 0xa005, 0x0040, 0x4550, 0x2060, 0x6004, 0xa084,
-+      0x000f, 0xa080, 0x43b1, 0x203c, 0x87fb, 0x1040, 0x22ac, 0x8a51,
-+      0x0040, 0x454f, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0, 0x007c,
-+      0x2051, 0x0000, 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0,
-+      0x4567, 0x6000, 0xa064, 0x00c0, 0x455e, 0x2d60, 0x6004, 0xa084,
-+      0x000f, 0xa080, 0x43c1, 0x203c, 0x87fb, 0x1040, 0x22ac, 0x007c,
-+      0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888,
-+      0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e,
-+      0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x4582, 0xa0b8, 0x43ab,
-+      0x0078, 0x4584, 0xa0b8, 0x43a3, 0x7e08, 0xa6b5, 0x000c, 0x6904,
-+      0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4592, 0xa18e, 0x000f,
-+      0x00c0, 0x459b, 0x6820, 0xa084, 0x0040, 0x0040, 0x45a2, 0xa6b5,
-+      0x0001, 0x0078, 0x45a2, 0x681c, 0xa084, 0x0040, 0x0040, 0x45a2,
-+      0xa6b5, 0x0001, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+      0x45a4, 0x2400, 0xa305, 0x00c0, 0x45af, 0x0078, 0x45d5, 0x2c58,
-+      0x2704, 0x6104, 0xac60, 0x6004, 0xa400, 0x701a, 0x6000, 0xa301,
-+      0x701e, 0xa184, 0x0008, 0x0040, 0x45c5, 0x6014, 0xa081, 0x0000,
-+      0x7022, 0x6010, 0xa081, 0x0000, 0x7026, 0x620c, 0x2400, 0xa202,
-+      0x7012, 0x6208, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001,
-+      0x2b60, 0x1078, 0x4534, 0x0078, 0x45d7, 0x1078, 0x46ba, 0x00c0,
-+      0x45d5, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200,
-+      0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x45e3,
-+      0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091,
-+      0x2200, 0x0d7f, 0x2049, 0x45ed, 0x7007, 0x0004, 0x7004, 0xa084,
-+      0x0004, 0x00c0, 0x45f6, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c,
-+      0x00ff, 0xa186, 0x0007, 0x0040, 0x4609, 0xa18e, 0x000f, 0x00c0,
-+      0x4614, 0x6820, 0xa084, 0x0040, 0x0040, 0x4610, 0xa6b5, 0x0001,
-+      0x6840, 0x2050, 0x0078, 0x461d, 0x681c, 0xa084, 0x0020, 0x00c0,
-+      0x461b, 0xa6b5, 0x0001, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc,
-+      0x000f, 0xa7b8, 0x43b1, 0x273c, 0x87fb, 0x00c0, 0x4631, 0x0048,
-+      0x462b, 0x1078, 0x22ac, 0x689c, 0xa065, 0x0040, 0x4635, 0x0078,
-+      0x461e, 0x1078, 0x46ba, 0x00c0, 0x4631, 0x127f, 0x2000, 0x007c,
-+      0x127e, 0x007e, 0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f,
-+      0x047f, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+      0x0007, 0x0040, 0x464f, 0xa18e, 0x000f, 0x00c0, 0x4658, 0x6820,
-+      0xa084, 0x0040, 0x0040, 0x465f, 0xa6b5, 0x0001, 0x0078, 0x465f,
-+      0x681c, 0xa084, 0x0040, 0x0040, 0x465f, 0xa6b5, 0x0001, 0x2049,
-+      0x4638, 0x017e, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040,
-+      0x466d, 0xa18e, 0x000f, 0x00c0, 0x4670, 0x6840, 0x0078, 0x4671,
-+      0x6828, 0x017f, 0xa055, 0x0040, 0x46b7, 0x2d70, 0x2e60, 0x7004,
-+      0xa0bc, 0x000f, 0xa7b8, 0x43b1, 0x273c, 0x87fb, 0x00c0, 0x468b,
-+      0x0048, 0x4684, 0x1078, 0x22ac, 0x709c, 0xa075, 0x2060, 0x0040,
-+      0x46b7, 0x0078, 0x4677, 0x2704, 0xae68, 0x680c, 0xa422, 0x6808,
-+      0xa31b, 0x0048, 0x46a4, 0x8a51, 0x00c0, 0x4698, 0x1078, 0x22ac,
-+      0x8738, 0x2704, 0xa005, 0x00c0, 0x468c, 0x709c, 0xa075, 0x2060,
-+      0x0040, 0x46b7, 0x0078, 0x4677, 0x8422, 0x8420, 0x831a, 0xa399,
-+      0x0000, 0x690c, 0x2400, 0xa122, 0x6908, 0x2300, 0xa11b, 0x00c8,
-+      0x46b3, 0x1078, 0x22ac, 0x2071, 0x0020, 0x0078, 0x45a2, 0x127f,
-+      0x2000, 0x007c, 0x7008, 0xa084, 0x00c0, 0xa086, 0x00c0, 0x0040,
-+      0x46d7, 0x2704, 0xac08, 0x2104, 0x701e, 0x8108, 0x2104, 0x701a,
-+      0x8108, 0x2104, 0x7016, 0x8108, 0x2104, 0x7012, 0x7602, 0x7004,
-+      0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x4534, 0x007c,
-+      0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x46d8, 0x0d7f,
-+      0x087f, 0x7108, 0xa184, 0x00c0, 0x00c0, 0x4702, 0x017e, 0x6904,
-+      0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x46f2, 0xa18e, 0x000f,
-+      0x00c0, 0x46f5, 0x6840, 0x0078, 0x46f6, 0x6828, 0x017f, 0xa005,
-+      0x0040, 0x471f, 0x0078, 0x4332, 0x0020, 0x4702, 0x1078, 0x44f7,
-+      0x0078, 0x471f, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4702, 0x017e,
-+      0x017f, 0x810c, 0x00c8, 0x4711, 0x7108, 0x1078, 0x4462, 0x0078,
-+      0x46e1, 0x7007, 0x0010, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4713,
-+      0x017e, 0x017f, 0x810c, 0x00c8, 0x4713, 0x1078, 0x4462, 0x7008,
-+      0xa086, 0x0002, 0x00c0, 0x46e1, 0x7000, 0xa005, 0x00c0, 0x46e1,
-+      0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x127e,
-+      0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, 0x2200, 0x0d7f,
-+      0x2049, 0x472f, 0xad80, 0x0011, 0x20a0, 0x2099, 0x0031, 0x700c,
-+      0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003,
-+      0x0001, 0x0040, 0x474e, 0x8000, 0x80ac, 0x53a5, 0x7007, 0x0004,
-+      0x7004, 0xa084, 0x0004, 0x00c0, 0x4750, 0x0c7f, 0x2049, 0x0000,
-+      0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000, 0x007c,
-+      0x2091, 0x6000, 0x2091, 0x8000, 0x78cc, 0xa005, 0x0040, 0x4777,
-+      0x7994, 0x70d0, 0xa106, 0x00c0, 0x4777, 0x7804, 0xa005, 0x0040,
-+      0x4777, 0x7807, 0x0000, 0x0068, 0x4777, 0x2091, 0x4080, 0x7820,
-+      0x8001, 0x7822, 0x00c0, 0x47d2, 0x7824, 0x7822, 0x2069, 0x4d40,
-+      0x6800, 0xa084, 0x0007, 0x0040, 0x4795, 0xa086, 0x0002, 0x0040,
-+      0x4795, 0x6834, 0xa00d, 0x0040, 0x4795, 0x2104, 0xa005, 0x0040,
-+      0x4795, 0x8001, 0x200a, 0x0040, 0x487a, 0x7848, 0xa005, 0x0040,
-+      0x47a3, 0x8001, 0x784a, 0x00c0, 0x47a3, 0x2009, 0x0102, 0x6844,
-+      0x200a, 0x1078, 0x20a0, 0x6890, 0xa005, 0x0040, 0x47af, 0x8001,
-+      0x6892, 0x00c0, 0x47af, 0x686f, 0x0000, 0x6873, 0x0001, 0x2061,
-+      0x5000, 0x20a9, 0x0100, 0x2009, 0x0002, 0x6034, 0xa005, 0x0040,
-+      0x47c5, 0x8001, 0x6036, 0x00c0, 0x47c5, 0x6010, 0xa005, 0x0040,
-+      0x47c5, 0x017e, 0x1078, 0x20a0, 0x017f, 0xace0, 0x0010, 0x0070,
-+      0x47cb, 0x0078, 0x47b5, 0x8109, 0x0040, 0x47d2, 0x20a9, 0x0100,
-+      0x0078, 0x47b5, 0x1078, 0x47df, 0x1078, 0x4804, 0x2009, 0x4d51,
-+      0x2104, 0x2009, 0x0102, 0x200a, 0x2091, 0x8001, 0x007c, 0x7834,
-+      0x8001, 0x7836, 0x00c0, 0x4803, 0x7838, 0x7836, 0x2091, 0x8000,
-+      0x7844, 0xa005, 0x00c0, 0x47ee, 0x2001, 0x0101, 0x8001, 0x7846,
-+      0xa080, 0x7000, 0x2040, 0x2004, 0xa065, 0x0040, 0x4803, 0x6024,
-+      0xa005, 0x0040, 0x47ff, 0x8001, 0x6026, 0x0040, 0x4833, 0x6000,
-+      0x2c40, 0x0078, 0x47f4, 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0,
-+      0x4832, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x4811, 0x2001,
-+      0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003, 0xa090,
-+      0x5000, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040, 0x4832,
-+      0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x482a, 0x8001, 0x2012,
-+      0x00c0, 0x4832, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a,
-+      0x1078, 0x20a0, 0x007c, 0x2069, 0x4d40, 0x6800, 0xa005, 0x0040,
-+      0x483d, 0x6848, 0xac06, 0x0040, 0x487a, 0x601b, 0x0006, 0x60b4,
-+      0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060,
-+      0x6022, 0x6000, 0x2042, 0x6714, 0x6f82, 0x1078, 0x18b9, 0x6818,
-+      0xa005, 0x0040, 0x4855, 0x8001, 0x681a, 0x6808, 0xa084, 0xffef,
-+      0x680a, 0x6810, 0x8001, 0x00d0, 0x485f, 0x1078, 0x22ac, 0x6812,
-+      0x6033, 0x0000, 0x602f, 0x0000, 0x2c68, 0x1078, 0x1b8e, 0x2069,
-+      0x4d40, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006, 0x686e, 0x00c0,
-+      0x4875, 0x6986, 0x2001, 0x0004, 0x686e, 0x1078, 0x209b, 0x2091,
-+      0x8001, 0x007c, 0x2069, 0x0100, 0x2009, 0x4d40, 0x2104, 0xa084,
-+      0x0007, 0x0040, 0x48d6, 0xa086, 0x0007, 0x00c0, 0x4890, 0x0d7e,
-+      0x2009, 0x4d52, 0x216c, 0x1078, 0x385e, 0x0d7f, 0x0078, 0x48d6,
-+      0x2009, 0x4d52, 0x2164, 0x1078, 0x2257, 0x601b, 0x0006, 0x6858,
-+      0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048,
-+      0x6022, 0x6033, 0x0000, 0x602f, 0x0000, 0x6830, 0xa084, 0x0040,
-+      0x0040, 0x48ca, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084,
-+      0x0004, 0x0040, 0x48b7, 0x0070, 0x48b7, 0x0078, 0x48ae, 0x684b,
-+      0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, 0x48c4,
-+      0x0070, 0x48c4, 0x0078, 0x48bb, 0x20a9, 0x00fa, 0x0070, 0x48ca,
-+      0x0078, 0x48c6, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048,
-+      0x2009, 0x4d5b, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091, 0x8001,
-+      0x007c, 0x2079, 0x4d00, 0x1078, 0x4904, 0x1078, 0x48e8, 0x1078,
-+      0x48f6, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x007c,
-+      0x2019, 0x0003, 0x2011, 0x4d46, 0x2204, 0xa086, 0x003c, 0x0040,
-+      0x48f3, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019, 0x0039,
-+      0x2011, 0x4d46, 0x2204, 0xa086, 0x003c, 0x0040, 0x4901, 0x2019,
-+      0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, 0x2011, 0x4d46,
-+      0x2204, 0xa086, 0x003c, 0x0040, 0x490f, 0x2019, 0x2626, 0x7b22,
-+      0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, 0x0020, 0x002b,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x0014, 0x0014,
-+      0x0014, 0x0014, 0x0014, 0x0080, 0x000f, 0x0000, 0x0201, 0x0604,
-+      0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201, 0x0014,
-+      0xa200, 0x0014, 0xa200, 0x0214, 0x0000, 0x006c, 0x0002, 0x0014,
-+      0x98e1, 0x009e, 0x00ab, 0xa202, 0x8838, 0x8180, 0x842a, 0x84a0,
-+      0x3806, 0x8839, 0x28c2, 0x9cc1, 0x985d, 0x0864, 0x9891, 0x28c1,
-+      0x9cc1, 0xa203, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4,
-+      0x1856, 0x883a, 0x986d, 0x28e2, 0x9c9e, 0x985d, 0x0864, 0x9891,
-+      0x300c, 0x28e1, 0x9c9e, 0x2809, 0xa206, 0x64c0, 0x67a0, 0x6fc0,
-+      0x1814, 0x883b, 0x782c, 0x786d, 0x9881, 0x282b, 0xa207, 0x64a0,
-+      0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7822, 0x883e, 0x9885, 0x8576,
-+      0x8677, 0x206b, 0x28c1, 0x9cc1, 0x2044, 0x2103, 0x20a2, 0x2081,
-+      0x986d, 0xa209, 0x2901, 0x989a, 0x0014, 0xa205, 0x8000, 0x85a4,
-+      0x1872, 0x879a, 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704,
-+      0x9c9e, 0x0014, 0xa204, 0x8000, 0x85a4, 0x84a8, 0x3009, 0x19e2,
-+      0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9, 0x883f, 0x08e6,
-+      0x989e, 0xf881, 0x9899, 0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2,
-+      0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014,
-+      0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008,
-+      0x1dc1, 0x0016, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf041, 0x3008,
-+      0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, 0x0016,
-+      0x8000, 0x2847, 0x1011, 0x98d4, 0x8000, 0xa000, 0x2802, 0x1011,
-+      0x98da, 0x986d, 0x283e, 0x1011, 0x98de, 0xa20b, 0x0017, 0x300c,
-+      0x8000, 0x85a4, 0x1de2, 0xdb81, 0x0014, 0x0210, 0x98ec, 0x0014,
-+      0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x8180,
-+      0x842a, 0x84a0, 0x3806, 0x0210, 0x9cc6, 0x0704, 0x0000, 0x006c,
-+      0x0002, 0x984f, 0x0014, 0x009e, 0x00a3, 0x0017, 0x60ff, 0x300c,
-+      0x8720, 0xa211, 0x9cc7, 0x8772, 0x8837, 0x2007, 0x10d2, 0x78e2,
-+      0x9ccb, 0x9858, 0xd984, 0xf0e2, 0xf0a1, 0x98c4, 0x0014, 0x8831,
-+      0xd167, 0x8830, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820,
-+      0x9878, 0x2301, 0x9878, 0x10d2, 0x78e2, 0x9ccb, 0x986d, 0xf123,
-+      0xf142, 0xf101, 0x98bd, 0x10d2, 0x70f8, 0x8832, 0x8203, 0x6001,
-+      0x0014, 0x6845, 0x0214, 0xa21b, 0x9cc7, 0x2001, 0x98bc, 0x8202,
-+      0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0x9889, 0x3027, 0x84a8,
-+      0x1856, 0x8833, 0x0014, 0xa218, 0x6981, 0x9cb3, 0x6b2a, 0x6902,
-+      0x1834, 0x9899, 0x1814, 0x8010, 0x8592, 0x8026, 0x84b9, 0x7021,
-+      0x0014, 0x8000, 0x85a4, 0x84a8, 0x6946, 0xa213, 0x1462, 0xa213,
-+      0x8000, 0x16e1, 0x98ac, 0x6969, 0xa214, 0x61c2, 0x8002, 0x14e1,
-+      0x8004, 0x16e1, 0x0101, 0x300a, 0x8827, 0x0014, 0xa217, 0x9cb3,
-+      0x0014, 0x8000, 0x85a4, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x0016,
-+      0xa212, 0x9cc7, 0x10d2, 0x70e4, 0x0004, 0x8007, 0x9424, 0xcc1a,
-+      0x9ccb, 0x98bc, 0x8827, 0x300a, 0x0013, 0x8000, 0x84a4, 0x84a8,
-+      0x0016, 0x2002, 0x10d2, 0x98cb, 0x870e, 0xa21d, 0x0012, 0x878e,
-+      0x85b2, 0x80f8, 0x9424, 0xa532, 0x84a4, 0x8000, 0x84a8, 0x0016,
-+      0xa21c, 0x1035, 0x988d, 0xa210, 0x8180, 0x842a, 0x84a0, 0xa000,
-+      0x8010, 0x8592, 0x853b, 0xd044, 0x8022, 0x3807, 0x84bb, 0x98ed,
-+      0x8021, 0x3807, 0x84b9, 0x300c, 0x817e, 0x872b, 0x8772, 0x988d,
-+      0x0000, 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014,
-+      0x0014, 0x98ee, 0x98d9, 0x0014, 0x0014, 0x0014, 0x0080, 0x013d,
-+      0x0000, 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018,
-+      0x300b, 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202,
-+      0x8838, 0x3806, 0x8839, 0x28c2, 0x9cba, 0xa804, 0x0864, 0xa835,
-+      0x28c1, 0x9cba, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300,
-+      0x1856, 0x883a, 0xa806, 0x28e2, 0x9c99, 0xa8f4, 0x0864, 0xa825,
-+      0x300c, 0x28e1, 0x9c99, 0x2809, 0xa206, 0x64c0, 0x67a0, 0x6fc0,
-+      0x1814, 0x883b, 0x782c, 0x786d, 0xa808, 0x282b, 0xa207, 0x64a0,
-+      0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7822, 0x883e, 0xa802, 0x8576,
-+      0x8677, 0x206b, 0x28c1, 0x9cba, 0x2044, 0x2103, 0x20a2, 0x2081,
-+      0xa8e0, 0xa209, 0x2901, 0xa809, 0x0014, 0xa205, 0xa300, 0x1872,
-+      0x879a, 0x883c, 0x1fe2, 0xc601, 0xa20a, 0x856e, 0x0704, 0x9c99,
-+      0x0014, 0xa204, 0xa300, 0x3009, 0x19e2, 0xf868, 0x8176, 0x86eb,
-+      0x85eb, 0x872e, 0x87a9, 0x883f, 0x08e6, 0xa8f3, 0xf881, 0xa8ec,
-+      0xc801, 0x0014, 0xf8c1, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02,
-+      0x1de2, 0x0014, 0x8532, 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0,
-+      0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300,
-+      0x8160, 0x842a, 0xf041, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd,
-+      0x0011, 0x20d5, 0x8822, 0x0016, 0x8000, 0x2847, 0x1011, 0xa8fc,
-+      0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa893, 0x283e, 0x1011,
-+      0xa8fd, 0xa20b, 0x0017, 0x300c, 0xa300, 0x1de2, 0xdb81, 0x0014,
-+      0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2,
-+      0x0014, 0xa20d, 0x3806, 0x0210, 0x9cbf, 0x0704, 0x0017, 0x60ff,
-+      0x300c, 0x8720, 0xa211, 0x9d63, 0x8772, 0x8837, 0x2007, 0x10d2,
-+      0x78e2, 0x9d66, 0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa861, 0x0014,
-+      0x8831, 0xd167, 0x8830, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802,
-+      0x8820, 0xa80d, 0x2301, 0xa80b, 0x10d2, 0x78e2, 0x9d66, 0xa8fc,
-+      0xf123, 0xf142, 0xf101, 0xa845, 0x10d2, 0x70f8, 0x8832, 0x8203,
-+      0x6001, 0x0014, 0x6845, 0x0214, 0xa21b, 0x9d63, 0x2001, 0xa838,
-+      0x8202, 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0xa801, 0x3027,
-+      0x84a8, 0x1856, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d50, 0x6b2a,
-+      0x6902, 0x1834, 0xa805, 0x1814, 0x8010, 0x8592, 0x8026, 0x84b9,
-+      0x7021, 0x0014, 0xa300, 0x6946, 0xa213, 0x1462, 0xa213, 0x8000,
-+      0x16e1, 0xa807, 0x6969, 0xa214, 0x61c2, 0x8002, 0x14e1, 0x8004,
-+      0x16e1, 0x0101, 0x300a, 0x8827, 0x0014, 0xa217, 0x9d50, 0x0014,
-+      0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x0016, 0xa212, 0x9d63,
-+      0x10d2, 0x70e4, 0x0004, 0x8007, 0x9424, 0xcc1a, 0x9d66, 0xa8f8,
-+      0x8827, 0x300a, 0x0013, 0x8000, 0x84a4, 0x0016, 0x2002, 0x10d2,
-+      0xa8fd, 0x870e, 0xa21d, 0x0012, 0x878e, 0x85b2, 0x80f8, 0x9424,
-+      0xa532, 0x84a4, 0x0016, 0xa21c, 0x1035, 0xa8b6, 0xa210, 0x3807,
-+      0x300c, 0x817e, 0x872b, 0x8772, 0xa8af, 0x0000, 0xd66f
-+};
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_1040.h     2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,3545 @@
-+/* @(#)asm_1040.h 1.2 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */ 
-+
-+/************************************************************************
-+ *                                                                    *
-+ *                --- ISP1040 Initiator Firmware ---                  *
-+ *                         32 LUN Support                             *
-+ *                                                                    *
-+ ************************************************************************/
-+#ifndef       ISP_TARGET_MODE
-+/*
-+ *    Firmware Version 4.66.00 (14:49 Sep 05, 2000)
-+ */
-+static const u_int16_t isp_1040_risc_code[] = {
-+      0x0078, 0x1041, 0x0000, 0x2cd0, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
-+      0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
-+      0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
-+      0x3130, 0x3230, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+      0x6572, 0x7369, 0x6f6e, 0x2030, 0x342e, 0x3636, 0x2020, 0x2043,
-+      0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
-+      0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
-+      0x2400, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x104c,
-+      0x0038, 0x1052, 0x0078, 0x104e, 0x0028, 0x1052, 0x20b9, 0x1212,
-+      0x0078, 0x1054, 0x20b9, 0x1313, 0x2071, 0x0010, 0x70c3, 0x0004,
-+      0x20c9, 0x62ff, 0x2089, 0x1185, 0x70c7, 0x4953, 0x70cb, 0x5020,
-+      0x70cf, 0x2020, 0x70d3, 0x0004, 0x3f00, 0x70d6, 0x20c1, 0x0008,
-+      0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec,
-+      0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b,
-+      0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10c4, 0xa386, 0x000f,
-+      0x0040, 0x108a, 0x2c6a, 0x2a5a, 0x20c1, 0x0000, 0x2019, 0x000f,
-+      0x0078, 0x106a, 0x2c6a, 0x2a5a, 0x20c1, 0x0008, 0x2009, 0x7fff,
-+      0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc, 0x3fff, 0x2734, 0x203b,
-+      0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040, 0x10ae, 0x284a, 0x263a,
-+      0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134, 0x200b, 0x5050, 0x2114,
-+      0xa286, 0x5050, 0x0040, 0x10af, 0x0078, 0x118d, 0x284a, 0x263a,
-+      0x98c0, 0xa188, 0x1000, 0x212c, 0x200b, 0xa5a5, 0x2114, 0xa286,
-+      0xa5a5, 0x0040, 0x10c1, 0x250a, 0xa18a, 0x1000, 0x98c1, 0x0078,
-+      0x10c6, 0x250a, 0x0078, 0x10c6, 0x2c6a, 0x2a5a, 0x2130, 0xa18a,
-+      0x0040, 0x2128, 0xa1a2, 0x3d00, 0x8424, 0x8424, 0x8424, 0x8424,
-+      0x8424, 0x8424, 0xa192, 0x6300, 0x2009, 0x0000, 0x2001, 0x002f,
-+      0x1078, 0x1bc9, 0x2218, 0x2079, 0x3d00, 0x2fa0, 0x2408, 0x2011,
-+      0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10e1, 0x7ee6,
-+      0x8528, 0x7dda, 0x7cde, 0x7be2, 0x787b, 0x0000, 0x2031, 0x0030,
-+      0x78c3, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0003,
-+      0x7803, 0x0002, 0x2069, 0x3d40, 0x2001, 0x04fd, 0x2004, 0xa082,
-+      0x0005, 0x0048, 0x1107, 0x0038, 0x1109, 0x0078, 0x110d, 0x00a8,
-+      0x110d, 0x681b, 0x003c, 0x0078, 0x110f, 0x681b, 0x0028, 0x6807,
-+      0x0007, 0x680b, 0x00fa, 0x680f, 0x0008, 0x6813, 0x0005, 0x681f,
-+      0x0000, 0x6823, 0x0006, 0x6817, 0x0008, 0x6827, 0x0000, 0x2069,
-+      0x3f80, 0x2011, 0x0020, 0x2009, 0x0010, 0x680b, 0x0c19, 0x680f,
-+      0x0019, 0x6803, 0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8,
-+      0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x1125, 0x2069, 0x4000,
-+      0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040,
-+      0x7be4, 0xa386, 0xfeff, 0x00c0, 0x114b, 0x6817, 0x0100, 0x681f,
-+      0x0064, 0x0078, 0x114f, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8,
-+      0x0010, 0x0070, 0x1155, 0x0078, 0x113c, 0x8109, 0x00c0, 0x113a,
-+      0x1078, 0x1f20, 0x1078, 0x3792, 0x1078, 0x19e0, 0x1078, 0x3c4a,
-+      0x3200, 0xa085, 0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x116f,
-+      0x70c0, 0xa086, 0x0002, 0x00c0, 0x116f, 0x1078, 0x12a4, 0x1078,
-+      0x11b6, 0x78c0, 0xa005, 0x00c0, 0x117b, 0x1078, 0x1bf2, 0x0068,
-+      0x117f, 0x1078, 0x1e44, 0x0068, 0x117f, 0x1078, 0x1adf, 0x00e0,
-+      0x116f, 0x1078, 0x3ac1, 0x0078, 0x116f, 0x118d, 0x1192, 0x20e8,
-+      0x20e8, 0x380c, 0x380c, 0x20e8, 0x20e8, 0x0088, 0x118d, 0x2091,
-+      0x8001, 0x007c, 0x0088, 0x1192, 0x2091, 0x8001, 0x007c, 0x0078,
-+      0x1197, 0x0078, 0x1199, 0x2009, 0x0022, 0x2104, 0xa086, 0x4000,
-+      0x0040, 0x11b1, 0x7008, 0x800b, 0x00c8, 0x11b1, 0x7007, 0x0002,
-+      0xa08c, 0x01e0, 0x00c0, 0x11b2, 0xa084, 0x0008, 0x0040, 0x11b1,
-+      0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x12a7, 0x0068, 0x1221,
-+      0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1221, 0x7814,
-+      0xa005, 0x00c0, 0x11c7, 0x0010, 0x1222, 0x0078, 0x1221, 0x2009,
-+      0x3d68, 0x2104, 0xa005, 0x00c0, 0x1221, 0x2009, 0x3d71, 0x200b,
-+      0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11ec, 0x7816, 0x2009,
-+      0x3d6f, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca,
-+      0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce,
-+      0x1078, 0x19d2, 0x0078, 0x121f, 0x7814, 0xa086, 0x0018, 0x00c0,
-+      0x11f3, 0x1078, 0x16cd, 0x7817, 0x0000, 0x2009, 0x3d6f, 0x2104,
-+      0xa065, 0x0040, 0x120f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x1a30,
-+      0x0c7f, 0x609f, 0x0000, 0x1078, 0x17b3, 0x2009, 0x0018, 0x6087,
-+      0x0103, 0x1078, 0x1959, 0x00c0, 0x121b, 0x1078, 0x19d2, 0x2009,
-+      0x3d6f, 0x200b, 0x0000, 0x2009, 0x3d69, 0x2104, 0x200b, 0x0000,
-+      0xa005, 0x0040, 0x121f, 0x2001, 0x4005, 0x0078, 0x12a6, 0x0078,
-+      0x12a4, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000,
-+      0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1272, 0x2038,
-+      0x0079, 0x1232, 0x12a4, 0x12ff, 0x12c3, 0x12ff, 0x1368, 0x1368,
-+      0x12ba, 0x17cb, 0x1373, 0x12b2, 0x12c7, 0x12c9, 0x12cb, 0x12cd,
-+      0x17d0, 0x12b2, 0x1385, 0x13c1, 0x16e5, 0x17c5, 0x12cf, 0x15fa,
-+      0x161c, 0x163a, 0x1667, 0x15b3, 0x15c1, 0x15d5, 0x15e9, 0x1445,
-+      0x12b2, 0x13f3, 0x13f9, 0x13fe, 0x1403, 0x1409, 0x140e, 0x1413,
-+      0x1418, 0x141d, 0x1421, 0x1436, 0x1442, 0x12b2, 0x12b2, 0x12b2,
-+      0x12b2, 0x1451, 0x145a, 0x1469, 0x148f, 0x1499, 0x14a0, 0x14e0,
-+      0x14ef, 0x14fe, 0x1510, 0x1593, 0x15a3, 0x12b2, 0x12b2, 0x12b2,
-+      0x12b2, 0x15a8, 0xa0bc, 0xffa0, 0x00c0, 0x12b2, 0x2038, 0xa084,
-+      0x001f, 0x0079, 0x127b, 0x17e7, 0x17ea, 0x17fa, 0x189f, 0x18d8,
-+      0x1914, 0x1931, 0x1886, 0x12b2, 0x12b2, 0x1935, 0x193d, 0x12b2,
-+      0x12b2, 0x12b2, 0x12b2, 0x12f5, 0x135e, 0x137b, 0x13b7, 0x16db,
-+      0x12b2, 0x12b2, 0x12b2, 0x12b2, 0x1943, 0x18f0, 0x18fa, 0x18fe,
-+      0x190c, 0x12b2, 0x12b2, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078,
-+      0x12a6, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068,
-+      0x12a7, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091,
-+      0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x12a7, 0x70c3, 0x4006,
-+      0x0078, 0x12a7, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005,
-+      0x53a3, 0x0078, 0x12a4, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078,
-+      0x12a4, 0x0078, 0x12a4, 0x0078, 0x12a4, 0x0078, 0x12a4, 0x2091,
-+      0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf,
-+      0x2020, 0x70d3, 0x0004, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b,
-+      0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051,
-+      0x0470, 0x2061, 0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091,
-+      0x5000, 0x2091, 0x4080, 0x0078, 0x0455, 0x1078, 0x1b4c, 0x00c0,
-+      0x12b6, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1302, 0x2029,
-+      0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2098,
-+      0x2031, 0x0030, 0x81ff, 0x0040, 0x12a4, 0x7007, 0x0004, 0x731a,
-+      0x721e, 0x7422, 0x7526, 0x2051, 0x0012, 0x2049, 0x133d, 0x2041,
-+      0x12a4, 0x7003, 0x0002, 0xa786, 0x0001, 0x0040, 0x1325, 0xa786,
-+      0x0050, 0x0040, 0x1325, 0x0078, 0x132b, 0x2049, 0x134a, 0x2041,
-+      0x1356, 0x7003, 0x0003, 0x7017, 0x0000, 0x810b, 0x7112, 0x00c8,
-+      0x1333, 0x7017, 0x0001, 0x7007, 0x0001, 0xa786, 0x0001, 0x0040,
-+      0x134a, 0xa786, 0x0050, 0x0040, 0x134a, 0x700c, 0xa084, 0x007f,
-+      0x2009, 0x0040, 0xa102, 0x8004, 0x094a, 0x20a8, 0x26a0, 0x53a6,
-+      0x0078, 0x119b, 0x700c, 0xa084, 0x007f, 0x0040, 0x134a, 0x80ac,
-+      0x0048, 0x134a, 0x2698, 0x53a5, 0x0078, 0x119b, 0x700c, 0xa084,
-+      0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x12a4, 0x1078, 0x1b4c,
-+      0x00c0, 0x12b6, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1302,
-+      0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1370, 0x200a,
-+      0x72ca, 0x0078, 0x12a3, 0x70c7, 0x0004, 0x70cb, 0x0042, 0x70cf,
-+      0x0000, 0x0078, 0x12a4, 0x1078, 0x1b4c, 0x00c0, 0x12b6, 0x75d8,
-+      0x76dc, 0x75da, 0x76de, 0x0078, 0x1388, 0x2029, 0x0000, 0x2530,
-+      0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2,
-+      0xa005, 0x0040, 0x13b1, 0xa40a, 0x0040, 0x1398, 0x00c8, 0x13a2,
-+      0x8001, 0x788a, 0xa084, 0xfc00, 0x0040, 0x13a6, 0x78c0, 0xa085,
-+      0x0001, 0x78c2, 0x2001, 0x4005, 0x0078, 0x12a6, 0x7a92, 0x7b96,
-+      0x7d9a, 0x7e9e, 0x7c8e, 0x78c0, 0xa084, 0xfffc, 0x78c2, 0x0078,
-+      0x13b5, 0x78c0, 0xa085, 0x0001, 0x78c2, 0x0078, 0x12a4, 0x1078,
-+      0x1b4c, 0x00c0, 0x12b6, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078,
-+      0x13c4, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4,
-+      0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x13ed, 0xa40a,
-+      0x0040, 0x13d4, 0x00c8, 0x13de, 0x8001, 0x78a6, 0xa084, 0xfc00,
-+      0x0040, 0x13e2, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x2001, 0x4005,
-+      0x0078, 0x12a6, 0x7aae, 0x7bb2, 0x7db6, 0x7eba, 0x7caa, 0x78c0,
-+      0xa084, 0xfcff, 0x78c2, 0x0078, 0x13f1, 0x78c0, 0xa085, 0x0100,
-+      0x78c2, 0x0078, 0x12a4, 0x2009, 0x3d5f, 0x210c, 0x7ae0, 0x0078,
-+      0x12a2, 0x2009, 0x3d41, 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d42,
-+      0x210c, 0x0078, 0x12a3, 0x2061, 0x3d40, 0x610c, 0x6210, 0x0078,
-+      0x12a2, 0x2009, 0x3d45, 0x210c, 0x0078, 0x12a3, 0x2009, 0x3d46,
-+      0x210c, 0x0078, 0x12a3, 0x2009, 0x3d47, 0x210c, 0x0078, 0x12a3,
-+      0x2009, 0x3d48, 0x210c, 0x0078, 0x12a3, 0x7908, 0x7a0c, 0x0078,
-+      0x12a2, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xa0e8, 0x3f80, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1433,
-+      0x6b08, 0x0078, 0x1434, 0x6b0c, 0x0078, 0x12a1, 0x77c4, 0x1078,
-+      0x19f0, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+      0x0078, 0x12a1, 0x794c, 0x0078, 0x12a3, 0x77c4, 0x1078, 0x19f0,
-+      0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078,
-+      0x12a1, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x129c, 0x1078, 0x1fb7,
-+      0x0078, 0x12a1, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x129c, 0x2011,
-+      0x3d41, 0x2204, 0x007e, 0x2112, 0x1078, 0x1f70, 0x017f, 0x0078,
-+      0x12a3, 0x71c4, 0x2011, 0x1487, 0x20a9, 0x0008, 0x2204, 0xa106,
-+      0x0040, 0x1479, 0x8210, 0x0070, 0x1477, 0x0078, 0x146e, 0x0078,
-+      0x129c, 0xa292, 0x1487, 0x027e, 0x2011, 0x3d42, 0x2204, 0x2112,
-+      0x017f, 0x007e, 0x1078, 0x1f7c, 0x017f, 0x0078, 0x12a3, 0x03e8,
-+      0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061,
-+      0x3d40, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078,
-+      0x12a2, 0x2061, 0x3d40, 0x6114, 0x70c4, 0x6016, 0x0078, 0x12a3,
-+      0x71c4, 0x2011, 0x0004, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040,
-+      0x14b9, 0x2011, 0x0005, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040,
-+      0x14b9, 0x2011, 0x0006, 0x2019, 0x1313, 0xa186, 0x003c, 0x00c0,
-+      0x129c, 0x2061, 0x3d40, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084,
-+      0x0001, 0x00c0, 0x14d6, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+      0x0048, 0x14ce, 0x0038, 0x14d2, 0x0078, 0x14d6, 0x0028, 0x14d2,
-+      0x0078, 0x14d6, 0x2019, 0x1313, 0x0078, 0x14d8, 0x2019, 0x1212,
-+      0x23b8, 0x1078, 0x1f8d, 0x1078, 0x3c4a, 0x017f, 0x0078, 0x12a3,
-+      0x71c4, 0xa184, 0xffcf, 0x00c0, 0x129c, 0x2011, 0x3d47, 0x2204,
-+      0x2112, 0x007e, 0x1078, 0x1faf, 0x017f, 0x0078, 0x12a3, 0x71c4,
-+      0xa182, 0x0010, 0x00c8, 0x129c, 0x2011, 0x3d48, 0x2204, 0x007e,
-+      0x2112, 0x1078, 0x1f9e, 0x017f, 0x0078, 0x12a3, 0x71c4, 0x72c8,
-+      0xa184, 0xfffd, 0x00c0, 0x129b, 0xa284, 0xfffd, 0x00c0, 0x129b,
-+      0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x12a2,
-+      0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+      0x3f80, 0x2019, 0x0000, 0x72c8, 0xa284, 0x0080, 0x0040, 0x1526,
-+      0x6c14, 0x84ff, 0x00c0, 0x1526, 0x6817, 0x0040, 0xa284, 0x0040,
-+      0x0040, 0x1530, 0x6c10, 0x84ff, 0x00c0, 0x1530, 0x6813, 0x0001,
-+      0x6800, 0x007e, 0xa226, 0x0040, 0x155c, 0xa284, 0x0001, 0x0040,
-+      0x153e, 0x2220, 0xa39d, 0x0002, 0xa294, 0xfffe, 0x6a02, 0xa484,
-+      0x2000, 0x0040, 0x1545, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040,
-+      0x154b, 0xa39d, 0x0008, 0xa484, 0x4000, 0x0040, 0x155c, 0x810f,
-+      0xa284, 0x4000, 0x0040, 0x1558, 0x1078, 0x1fd1, 0x0078, 0x155c,
-+      0x1078, 0x1fc3, 0x0078, 0x155c, 0x72cc, 0x6808, 0xa206, 0x0040,
-+      0x158b, 0xa2a4, 0x00ff, 0x2061, 0x3d40, 0x6118, 0xa186, 0x0028,
-+      0x0040, 0x1572, 0xa186, 0x0032, 0x0040, 0x1578, 0xa186, 0x003c,
-+      0x0040, 0x157e, 0xa482, 0x0064, 0x0048, 0x1588, 0x0078, 0x1582,
-+      0xa482, 0x0050, 0x0048, 0x1588, 0x0078, 0x1582, 0xa482, 0x0043,
-+      0x0048, 0x1588, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x129d,
-+      0x6a0a, 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c,
-+      0x71c4, 0x0078, 0x12a1, 0x77c4, 0x1078, 0x19f0, 0x2091, 0x8000,
-+      0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e,
-+      0x2708, 0x0078, 0x12a1, 0x70c4, 0x794c, 0x784e, 0x0078, 0x12a3,
-+      0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x129c, 0x1078,
-+      0x1fdf, 0x0078, 0x12a1, 0x77c4, 0x1078, 0x19f0, 0x2091, 0x8000,
-+      0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078,
-+      0x12a2, 0x77c4, 0x1078, 0x19f0, 0x2091, 0x8000, 0x6a08, 0xa294,
-+      0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x15d0, 0x1078, 0x1f05,
-+      0x2091, 0x8001, 0x2708, 0x0078, 0x12a2, 0x77c4, 0x1078, 0x19f0,
-+      0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005,
-+      0x0040, 0x15e4, 0x1078, 0x1f05, 0x2091, 0x8001, 0x2708, 0x0078,
-+      0x12a2, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020,
-+      0x2091, 0x8000, 0x1078, 0x19fd, 0x2091, 0x8001, 0x2708, 0x6a08,
-+      0x0078, 0x12a2, 0x77c4, 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce,
-+      0x1078, 0x1a78, 0x00c0, 0x1618, 0x6818, 0xa005, 0x0040, 0x1612,
-+      0x2708, 0x1078, 0x1fef, 0x00c0, 0x1612, 0x7817, 0x0015, 0x2091,
-+      0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x12a6,
-+      0x2091, 0x8001, 0x0078, 0x12a4, 0x77c4, 0x77c6, 0x2041, 0x0021,
-+      0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x19fd,
-+      0x2061, 0x3d40, 0x60a3, 0x0003, 0x67b6, 0x60c7, 0x000f, 0x60a7,
-+      0x0000, 0x7817, 0x0016, 0x2091, 0x8000, 0x1078, 0x1f05, 0x2091,
-+      0x8001, 0x007c, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00,
-+      0x2091, 0x8000, 0x2061, 0x3d40, 0x60a3, 0x0002, 0x60a7, 0x0000,
-+      0x67b6, 0x60c7, 0x000f, 0x7817, 0x0017, 0x2091, 0x8000, 0x1078,
-+      0x1f05, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+      0x0010, 0x2091, 0x8000, 0x1078, 0x19fd, 0x70c8, 0x6836, 0x8738,
-+      0xa784, 0x001f, 0x00c0, 0x165b, 0x2091, 0x8001, 0x007c, 0x78c0,
-+      0xa084, 0x0003, 0x00c0, 0x168b, 0x2039, 0x0000, 0x2041, 0x0021,
-+      0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x19f0, 0x2091, 0x8000,
-+      0x6808, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f,
-+      0x00c0, 0x1674, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784,
-+      0x0f00, 0x00c0, 0x1674, 0x2091, 0x8000, 0x2069, 0x0100, 0x6830,
-+      0xa084, 0x0040, 0x0040, 0x16b4, 0x684b, 0x0004, 0x20a9, 0x0014,
-+      0x6848, 0xa084, 0x0004, 0x0040, 0x16a1, 0x0070, 0x16a1, 0x0078,
-+      0x1698, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001,
-+      0x0040, 0x16ae, 0x0070, 0x16ae, 0x0078, 0x16a5, 0x20a9, 0x00fa,
-+      0x0070, 0x16b4, 0x0078, 0x16b0, 0x2079, 0x3d00, 0x7817, 0x0018,
-+      0x2061, 0x3d40, 0x60a3, 0x0001, 0x60a7, 0x0000, 0x60c7, 0x000f,
-+      0x78c0, 0xa085, 0x0002, 0x78c2, 0x6808, 0xa084, 0xfffd, 0x680a,
-+      0x681b, 0x0047, 0x2091, 0x8001, 0x007c, 0x78c0, 0xa084, 0xfffd,
-+      0x78c2, 0xa084, 0x0001, 0x00c0, 0x16d7, 0x1078, 0x1ac2, 0x71c4,
-+      0x71c6, 0x794a, 0x007c, 0x1078, 0x1b4c, 0x00c0, 0x12b6, 0x75d8,
-+      0x74dc, 0x75da, 0x74de, 0x0078, 0x16e8, 0x2029, 0x0000, 0x2520,
-+      0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x3d00,
-+      0x1078, 0x19c9, 0x0040, 0x17af, 0x20a9, 0x0005, 0x20a1, 0x3d16,
-+      0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x1078,
-+      0x1993, 0x0040, 0x1707, 0x1078, 0x19d2, 0x0078, 0x17af, 0x6004,
-+      0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, 0x1712, 0x007e, 0x1078,
-+      0x1e27, 0x007f, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x177d,
-+      0x0c7e, 0x2c68, 0x1078, 0x19c9, 0x0040, 0x174c, 0x2c00, 0x689e,
-+      0x8109, 0x00c0, 0x1719, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7218,
-+      0x731c, 0x7420, 0x7524, 0x2c68, 0x689c, 0xa065, 0x0040, 0x177c,
-+      0x2009, 0x0040, 0x1078, 0x1993, 0x00c0, 0x1765, 0x6004, 0xa084,
-+      0x00ff, 0xa086, 0x0002, 0x00c0, 0x174c, 0x6004, 0xa084, 0x00ff,
-+      0xa086, 0x000a, 0x00c0, 0x1748, 0x017e, 0x1078, 0x1e23, 0x017f,
-+      0x2d00, 0x6002, 0x0078, 0x1727, 0x0c7f, 0x0c7e, 0x609c, 0x2060,
-+      0x1078, 0x1a30, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x17b3, 0x2009,
-+      0x0018, 0x6008, 0xa085, 0x0200, 0x600a, 0x6004, 0x6086, 0x1078,
-+      0x1959, 0x1078, 0x19d2, 0x0078, 0x17af, 0x0c7f, 0x0c7e, 0x609c,
-+      0x2060, 0x1078, 0x1a30, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x17b3,
-+      0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003, 0x1078, 0x1959,
-+      0x1078, 0x19d2, 0x0078, 0x17af, 0x0c7f, 0x74c4, 0x73c8, 0x72cc,
-+      0x6014, 0x2091, 0x8000, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x3d40,
-+      0x70a3, 0x0005, 0x70a7, 0x0000, 0x73aa, 0x72ae, 0x74b2, 0x70b6,
-+      0x70bb, 0x0000, 0x2c00, 0x70be, 0x70c3, 0x0000, 0xa02e, 0x2530,
-+      0x611c, 0xa184, 0x0060, 0x0040, 0x179f, 0x1078, 0x3736, 0x0e7f,
-+      0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000,
-+      0x2091, 0x8000, 0x1078, 0x1f05, 0x2091, 0x8001, 0x007c, 0x70c3,
-+      0x4005, 0x0078, 0x12a7, 0x20a9, 0x0005, 0x2099, 0x3d16, 0x2091,
-+      0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000,
-+      0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000,
-+      0x7906, 0x0078, 0x12a4, 0x71c4, 0x71c6, 0x2168, 0x0078, 0x17d2,
-+      0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109,
-+      0x00c0, 0x17d4, 0xa285, 0x0000, 0x00c0, 0x17e2, 0x70c3, 0x4000,
-+      0x0078, 0x17e4, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x12a7, 0x79d8,
-+      0x0078, 0x12a3, 0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9,
-+      0x0004, 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3,
-+      0x0078, 0x12a4, 0x70c4, 0x2068, 0x2079, 0x3d00, 0x1078, 0x19c9,
-+      0x00c0, 0x1806, 0x70c3, 0x4005, 0x0078, 0x12a7, 0x6007, 0x0001,
-+      0x600b, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c,
-+      0x000f, 0xa284, 0x00f0, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+      0x6016, 0xa284, 0x0800, 0x0040, 0x1821, 0x601b, 0x000a, 0x0078,
-+      0x1827, 0xa284, 0x1000, 0x0040, 0x1827, 0x601b, 0x000c, 0xa284,
-+      0x0300, 0x0040, 0x1830, 0x602b, 0x0001, 0x8004, 0x8004, 0x8004,
-+      0xa085, 0x0001, 0x601e, 0x6023, 0x0000, 0x6027, 0x0000, 0xa284,
-+      0x0400, 0x0040, 0x183d, 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80,
-+      0x000b, 0x20a0, 0xad80, 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300,
-+      0x00c0, 0x1852, 0x6046, 0x604a, 0x604e, 0x6052, 0x6096, 0x609a,
-+      0x0078, 0x185c, 0x6800, 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e,
-+      0x6d0c, 0x6552, 0x6596, 0x669a, 0x6014, 0x2091, 0x8000, 0x7817,
-+      0x0042, 0x2c08, 0x2061, 0x3d40, 0x60a3, 0x0005, 0x60a7, 0x0000,
-+      0x60ab, 0x0000, 0x60af, 0x0000, 0x60b3, 0x0000, 0x60b6, 0x61be,
-+      0xa284, 0x0400, 0x60c2, 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020,
-+      0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091,
-+      0x8000, 0x1078, 0x1f05, 0x2091, 0x8001, 0x007c, 0x70c4, 0x2068,
-+      0x2079, 0x3d00, 0x1078, 0x19c9, 0x0040, 0x189b, 0x6007, 0x0001,
-+      0x600b, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x70c8, 0x6016,
-+      0x6a10, 0x0078, 0x1819, 0x70c3, 0x4005, 0x0078, 0x12a7, 0x78ec,
-+      0xa005, 0x0040, 0x12b2, 0x2091, 0x8000, 0x70c4, 0x800a, 0x2011,
-+      0x0010, 0x810c, 0x0048, 0x18b1, 0x3a00, 0xa084, 0xfff7, 0x0078,
-+      0x18b4, 0x3a00, 0xa085, 0x0008, 0x20d0, 0x0005, 0x0005, 0xa084,
-+      0xfffb, 0x20d0, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
-+      0x0005, 0x0005, 0xa085, 0x0004, 0x20d0, 0x0005, 0x0005, 0x0005,
-+      0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x8211, 0x00c0, 0x18a9,
-+      0x3a00, 0xa085, 0x0008, 0x20d0, 0x2091, 0x8001, 0x0078, 0x12a4,
-+      0x2011, 0x04fd, 0x2204, 0xa082, 0x0004, 0x0048, 0x18ec, 0x78ef,
-+      0x0001, 0x2009, 0xff01, 0x200a, 0x2001, 0x000c, 0x20d8, 0x2001,
-+      0x000c, 0x20d0, 0x0078, 0x12a4, 0x2001, 0x4005, 0x0078, 0x12a6,
-+      0x7978, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x129c, 0x797a,
-+      0x0078, 0x12a4, 0x7978, 0x71c6, 0x0078, 0x12a4, 0x796c, 0x71c6,
-+      0x71c4, 0x796e, 0x7970, 0x71ca, 0x71c8, 0x7972, 0x7974, 0x71ce,
-+      0x71cc, 0x7976, 0x0078, 0x12a4, 0x796c, 0x71c6, 0x7970, 0x71ca,
-+      0x7974, 0x71ce, 0x0078, 0x12a4, 0x7900, 0x71c6, 0x71c4, 0x7902,
-+      0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x1923, 0x0038,
-+      0x1925, 0x0078, 0x192f, 0x00a8, 0x192f, 0xa18c, 0x0001, 0x00c0,
-+      0x192d, 0x20b9, 0x1313, 0x0078, 0x192f, 0x20b9, 0x1212, 0x0078,
-+      0x12a4, 0x7900, 0x71c6, 0x0078, 0x12a4, 0x2009, 0x3d79, 0x2104,
-+      0x70c6, 0x70c4, 0x200a, 0x0078, 0x12a4, 0x2009, 0x3d79, 0x2104,
-+      0x70c6, 0x0078, 0x12a4, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003,
-+      0x8003, 0x8003, 0xa0e8, 0x3f80, 0x6a14, 0xd2b4, 0x0040, 0x1954,
-+      0x2011, 0x0001, 0x0078, 0x1956, 0x2011, 0x0000, 0x6b0c, 0x0078,
-+      0x12a1, 0x700c, 0xa084, 0x00ff, 0x0040, 0x1965, 0x7007, 0x0004,
-+      0x7004, 0xa084, 0x0004, 0x00c0, 0x1960, 0x7017, 0x0000, 0x7112,
-+      0x721a, 0x731e, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c,
-+      0x81a9, 0x8098, 0x20a1, 0x0030, 0x6084, 0x20a2, 0x53a6, 0x780c,
-+      0xa085, 0x0000, 0x7002, 0x7007, 0x0001, 0x2009, 0x0022, 0x2104,
-+      0xa084, 0x4000, 0x00c0, 0x197d, 0x7108, 0x8103, 0x00c8, 0x197d,
-+      0x7014, 0xa005, 0x0040, 0x197d, 0x7007, 0x0002, 0xa184, 0x01e0,
-+      0x7003, 0x0000, 0x007c, 0x700c, 0xa084, 0x00ff, 0x0040, 0x199f,
-+      0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x199a, 0x7017,
-+      0x0000, 0x7112, 0x721a, 0x7422, 0x7526, 0x731e, 0x2099, 0x0030,
-+      0x8108, 0x81ac, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+      0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x19b0, 0x7008,
-+      0x800b, 0x00c8, 0x19b0, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0,
-+      0x19c6, 0xac80, 0x0001, 0x20a0, 0x53a5, 0xa006, 0x7003, 0x0000,
-+      0x007c, 0x7850, 0xa065, 0x0040, 0x19d1, 0x2c04, 0x7852, 0x2063,
-+      0x0000, 0x007c, 0x0f7e, 0x2079, 0x3d00, 0x7850, 0x2062, 0x2c00,
-+      0xa005, 0x00c0, 0x19dd, 0x1078, 0x20c8, 0x7852, 0x0f7f, 0x007c,
-+      0x2011, 0x6300, 0x7a52, 0x7be0, 0x8319, 0x0040, 0x19ed, 0xa280,
-+      0x002f, 0x2012, 0x2010, 0x0078, 0x19e4, 0x2013, 0x0000, 0x007c,
-+      0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003,
-+      0x8003, 0xa105, 0xa0e8, 0x4000, 0x007c, 0x1078, 0x19f0, 0x2900,
-+      0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xffef, 0xa80d, 0x690a,
-+      0x2009, 0x3d4f, 0x210c, 0x6804, 0xa005, 0x0040, 0x1a1a, 0xa116,
-+      0x00c0, 0x1a1a, 0x2060, 0x6000, 0x6806, 0x017e, 0x200b, 0x0000,
-+      0x0078, 0x1a1d, 0x2009, 0x0000, 0x017e, 0x6804, 0xa065, 0x0040,
-+      0x1a2c, 0x6000, 0x6806, 0x1078, 0x1a3d, 0x1078, 0x1b6d, 0x6810,
-+      0x8001, 0x6812, 0x00c0, 0x1a1d, 0x017f, 0x6902, 0x6906, 0x007c,
-+      0xa065, 0x0040, 0x1a3c, 0x609c, 0x609f, 0x0000, 0x2008, 0x1078,
-+      0x19d2, 0x2100, 0x0078, 0x1a30, 0x007c, 0x6007, 0x0103, 0x608f,
-+      0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000,
-+      0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, 0x2071,
-+      0x3d40, 0x7040, 0xa08c, 0x0200, 0x00c0, 0x1a5c, 0xa088, 0x3d80,
-+      0x2d0a, 0x8000, 0x7042, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+      0x3d40, 0x2009, 0x3d80, 0x7240, 0x8221, 0x8211, 0x0048, 0x1a76,
-+      0x2104, 0x8108, 0xad06, 0x00c0, 0x1a65, 0x8119, 0x211e, 0x8108,
-+      0x8318, 0x8211, 0x00c8, 0x1a6e, 0x7442, 0xa006, 0x0e7f, 0x007c,
-+      0x1078, 0x19f0, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065, 0x0040,
-+      0x1ac1, 0x0078, 0x1a89, 0x2c00, 0x781e, 0x6000, 0xa065, 0x0040,
-+      0x1ac1, 0x6010, 0xa306, 0x00c0, 0x1a83, 0x600c, 0xa206, 0x00c0,
-+      0x1a83, 0x2c28, 0x2001, 0x3d4f, 0x2004, 0xac06, 0x00c0, 0x1a9a,
-+      0x0078, 0x1abe, 0x6804, 0xac06, 0x00c0, 0x1aa8, 0x6000, 0x2060,
-+      0x6806, 0xa005, 0x00c0, 0x1aa8, 0x6803, 0x0000, 0x0078, 0x1ab2,
-+      0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1ab2,
-+      0x2c00, 0x6802, 0x2560, 0x1078, 0x1a3d, 0x601b, 0x0005, 0x6023,
-+      0x0020, 0x1078, 0x1b6d, 0x6810, 0x8001, 0x6812, 0x2001, 0xffff,
-+      0xa005, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004,
-+      0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x19fd, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x1acc, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f,
-+      0xa784, 0x0f00, 0x00c0, 0x1acc, 0x2091, 0x8001, 0x007c, 0x2061,
-+      0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1af0, 0x2091, 0x8000,
-+      0x78d4, 0x78d7, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1af1,
-+      0x007c, 0xa08c, 0xfff0, 0x0040, 0x1af7, 0x1078, 0x20c8, 0x0079,
-+      0x1af9, 0x1b09, 0x1b0c, 0x1b12, 0x1b16, 0x1b0a, 0x1b1a, 0x1b0a,
-+      0x1b20, 0x1b24, 0x1b28, 0x1b5b, 0x1b5f, 0x1b0a, 0x1b0a, 0x1b0a,
-+      0x1b0a, 0x007c, 0x1078, 0x20c8, 0x1078, 0x1ac2, 0x2001, 0x8001,
-+      0x0078, 0x1b65, 0x2001, 0x8003, 0x0078, 0x1b65, 0x2001, 0x8004,
-+      0x0078, 0x1b65, 0x1078, 0x1ac2, 0x2001, 0x8006, 0x0078, 0x1b65,
-+      0x2001, 0x8008, 0x0078, 0x1b65, 0x2001, 0x8009, 0x0078, 0x1b65,
-+      0x2091, 0x8000, 0x2069, 0x3d40, 0x6800, 0xa086, 0x0000, 0x0040,
-+      0x1b36, 0x2091, 0x8001, 0x78d7, 0x0009, 0x007c, 0x68b4, 0xa0bc,
-+      0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078,
-+      0x19fd, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1b3f, 0x2091, 0x8001,
-+      0x2001, 0x800a, 0x0078, 0x1b65, 0x2001, 0x04fd, 0x2004, 0xa082,
-+      0x0004, 0x00c8, 0x1b55, 0x0078, 0x1b58, 0xa006, 0x0078, 0x1b5a,
-+      0xa085, 0x0001, 0x007c, 0x2001, 0x800c, 0x0078, 0x1b65, 0x1078,
-+      0x1ac2, 0x2001, 0x800d, 0x0078, 0x1b65, 0x70c2, 0x2061, 0x0000,
-+      0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x6004, 0x6086, 0x2c08,
-+      0x2063, 0x0000, 0x787c, 0x8000, 0x787e, 0x7880, 0xa005, 0x7982,
-+      0x0040, 0x1b7d, 0x2c02, 0x0078, 0x1b7e, 0x7986, 0x007c, 0x0c7e,
-+      0x2061, 0x3d00, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x607c,
-+      0x8000, 0x607e, 0x6080, 0xa005, 0x6182, 0x0040, 0x1b92, 0x2d02,
-+      0x0078, 0x1b93, 0x6186, 0x0c7f, 0x007c, 0x1078, 0x1ba6, 0x0040,
-+      0x1ba5, 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1ba0, 0x1078, 0x1a30,
-+      0x0c7f, 0x609f, 0x0000, 0x1078, 0x19d2, 0x007c, 0x7884, 0xa065,
-+      0x0040, 0x1bb8, 0x2091, 0x8000, 0x787c, 0x8001, 0x787e, 0x2c04,
-+      0x7886, 0xa005, 0x00c0, 0x1bb6, 0x7882, 0x8000, 0x2091, 0x8001,
-+      0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8,
-+      0x1bc2, 0xa200, 0x0070, 0x1bc6, 0x0078, 0x1bbd, 0x8086, 0x818e,
-+      0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1bec, 0xa11a,
-+      0x00c8, 0x1bec, 0x8213, 0x818d, 0x0048, 0x1bdd, 0xa11a, 0x00c8,
-+      0x1bde, 0x0070, 0x1be4, 0x0078, 0x1bd2, 0xa11a, 0x2308, 0x8210,
-+      0x0070, 0x1be4, 0x0078, 0x1bd2, 0x007e, 0x3200, 0xa084, 0xf7ff,
-+      0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800,
-+      0x0078, 0x1be8, 0x798c, 0x70d0, 0x007e, 0x007f, 0xa106, 0x0040,
-+      0x1c6e, 0x7800, 0xa084, 0x0002, 0x0040, 0x1c05, 0x2011, 0x04fd,
-+      0x2204, 0xa082, 0x0005, 0x00c8, 0x1c18, 0x2091, 0x8000, 0x2071,
-+      0x0020, 0x7004, 0xa005, 0x00c0, 0x1c6e, 0x7008, 0x7208, 0xa206,
-+      0x00c0, 0x1c6e, 0xa286, 0x0008, 0x00c0, 0x1c6e, 0x2071, 0x0010,
-+      0x1078, 0x19c9, 0x0040, 0x1c6e, 0x7a94, 0x7b90, 0x7c9c, 0x7d98,
-+      0xa184, 0xff00, 0x0040, 0x1c3c, 0x2031, 0x0000, 0x810b, 0x86b5,
-+      0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5,
-+      0x810b, 0x86b5, 0x2100, 0xa210, 0x2600, 0xa319, 0xa4a1, 0x0000,
-+      0xa5a9, 0x0000, 0x0078, 0x1c46, 0x8107, 0x8004, 0x8004, 0xa210,
-+      0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x2009, 0x0040,
-+      0x1078, 0x1993, 0x2091, 0x8001, 0x0040, 0x1c65, 0x1078, 0x19d2,
-+      0x78a0, 0x8000, 0x78a2, 0xa086, 0x0002, 0x00c0, 0x1c6e, 0x2091,
-+      0x8000, 0x78d7, 0x0002, 0x78a3, 0x0000, 0x78c0, 0xa085, 0x0003,
-+      0x78c2, 0x2091, 0x8001, 0x0078, 0x1c6e, 0x78a3, 0x0000, 0x1078,
-+      0x1e0d, 0x6004, 0xa084, 0x000f, 0x0079, 0x1c73, 0x2071, 0x0010,
-+      0x2091, 0x8001, 0x007c, 0x1c83, 0x1ca5, 0x1ccb, 0x1c83, 0x1cdd,
-+      0x1c92, 0x1c83, 0x1c83, 0x1c83, 0x1c9f, 0x1cc5, 0x1c83, 0x1c83,
-+      0x1c83, 0x1c83, 0x1c83, 0x2039, 0x0400, 0x78d0, 0xa705, 0x78d2,
-+      0x6008, 0xa705, 0x600a, 0x1078, 0x1d28, 0x609c, 0x78ce, 0x1078,
-+      0x1df5, 0x007c, 0x78d0, 0xa084, 0x0100, 0x0040, 0x1c99, 0x0078,
-+      0x1c83, 0x601c, 0xa085, 0x0080, 0x601e, 0x0078, 0x1cac, 0x1078,
-+      0x1b4c, 0x00c0, 0x1c83, 0x1078, 0x1e27, 0x78d0, 0xa084, 0x0100,
-+      0x0040, 0x1cac, 0x0078, 0x1c83, 0x78d3, 0x0000, 0x6004, 0x8007,
-+      0xa084, 0x00ff, 0x78c6, 0x8001, 0x609f, 0x0000, 0x0040, 0x1cc2,
-+      0x1078, 0x1d28, 0x0040, 0x1cc2, 0x78d0, 0xa085, 0x0100, 0x78d2,
-+      0x0078, 0x1cc4, 0x1078, 0x1d4c, 0x007c, 0x1078, 0x1b4c, 0x00c0,
-+      0x1c83, 0x1078, 0x1e23, 0x78d0, 0xa08c, 0x0e00, 0x00c0, 0x1cd4,
-+      0xa084, 0x0100, 0x00c0, 0x1cd6, 0x0078, 0x1c83, 0x1078, 0x1d28,
-+      0x00c0, 0x1cdc, 0x1078, 0x1d4c, 0x007c, 0x78d0, 0xa084, 0x0100,
-+      0x0040, 0x1ce4, 0x0078, 0x1c83, 0x78d3, 0x0000, 0x6714, 0x2011,
-+      0x0001, 0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040,
-+      0x1d07, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e,
-+      0x0001, 0x0040, 0x1d07, 0x2039, 0x0000, 0x2011, 0x0002, 0x20a9,
-+      0x0100, 0xa08e, 0x0002, 0x0040, 0x1d07, 0x0078, 0x1d25, 0x1078,
-+      0x19f0, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+      0x6808, 0xa084, 0xffde, 0x680a, 0x2d00, 0xa080, 0x0010, 0x2068,
-+      0x2091, 0x8001, 0x0070, 0x1d1e, 0x0078, 0x1d0a, 0x8211, 0x0040,
-+      0x1d25, 0x20a9, 0x0100, 0x0078, 0x1d0a, 0x1078, 0x19d2, 0x007c,
-+      0x78c8, 0xa06d, 0x00c0, 0x1d33, 0x2c00, 0x78ca, 0x78ce, 0x609f,
-+      0x0000, 0x0078, 0x1d3f, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78ca,
-+      0x2d00, 0x6002, 0x78cc, 0xad06, 0x00c0, 0x1d3f, 0x6002, 0x78c4,
-+      0x8001, 0x78c6, 0x00c0, 0x1d4b, 0x78d0, 0xa084, 0x0000, 0x78d2,
-+      0x78cc, 0x2060, 0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2,
-+      0xa184, 0xe1ff, 0x601e, 0xa184, 0x0060, 0x0040, 0x1d5b, 0x0e7e,
-+      0x1078, 0x3736, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af,
-+      0x0000, 0x60b3, 0x0000, 0x6714, 0x1078, 0x19f0, 0x2091, 0x8000,
-+      0x60a0, 0xa084, 0x8000, 0x00c0, 0x1d82, 0x6808, 0xa084, 0x0001,
-+      0x0040, 0x1d82, 0x2091, 0x8001, 0x1078, 0x1a3d, 0x2091, 0x8000,
-+      0x1078, 0x1b6d, 0x2091, 0x8001, 0x78cb, 0x0000, 0x78cf, 0x0000,
-+      0x0078, 0x1df4, 0x6024, 0xa096, 0x0001, 0x00c0, 0x1d89, 0x8000,
-+      0x6026, 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048, 0x1d98,
-+      0x0040, 0x1d98, 0x2039, 0x0200, 0x1078, 0x1df5, 0x0078, 0x1df4,
-+      0x2c08, 0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x0040, 0x1dc5,
-+      0x6800, 0xa065, 0x0040, 0x1dca, 0x6a04, 0x0e7e, 0x2071, 0x3d40,
-+      0x7000, 0xa084, 0x0001, 0x0040, 0x1dbf, 0x703c, 0xa206, 0x00c0,
-+      0x1dbf, 0x6b04, 0x231c, 0x2160, 0x6302, 0x2300, 0xa005, 0x00c0,
-+      0x1dba, 0x6902, 0x2260, 0x6102, 0x0e7f, 0x0078, 0x1dd1, 0x2160,
-+      0x6202, 0x6906, 0x0e7f, 0x0078, 0x1dd1, 0x6800, 0xa065, 0x0040,
-+      0x1dca, 0x6102, 0x6902, 0x00c0, 0x1dce, 0x6906, 0x2160, 0x6003,
-+      0x0000, 0x2160, 0x60a0, 0xa084, 0x8000, 0x0040, 0x1ddb, 0x6808,
-+      0xa084, 0xfffc, 0x680a, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001,
-+      0x6808, 0xa08c, 0x0040, 0x0040, 0x1dea, 0xa086, 0x0040, 0x680a,
-+      0x1078, 0x1a4e, 0x2091, 0x8000, 0x1078, 0x1f05, 0x2091, 0x8001,
-+      0x78cf, 0x0000, 0x78cb, 0x0000, 0x007c, 0x6008, 0xa705, 0x600a,
-+      0x2091, 0x8000, 0x1078, 0x1b6d, 0x2091, 0x8001, 0x78cc, 0xa065,
-+      0x0040, 0x1e08, 0x609c, 0x78ce, 0x609f, 0x0000, 0x0078, 0x1df8,
-+      0x78cb, 0x0000, 0x78cf, 0x0000, 0x007c, 0x7988, 0x788c, 0x8000,
-+      0xa10a, 0x00c8, 0x1e14, 0xa006, 0x788e, 0x70d2, 0x7804, 0xa005,
-+      0x0040, 0x1e22, 0x8001, 0x7806, 0x00c0, 0x1e22, 0x0068, 0x1e22,
-+      0x2091, 0x4080, 0x007c, 0x2039, 0x1e3b, 0x0078, 0x1e29, 0x2039,
-+      0x1e41, 0x2704, 0xa005, 0x0040, 0x1e3a, 0xac00, 0x2068, 0x6b08,
-+      0x6c0c, 0x6910, 0x6a14, 0x690a, 0x6a0e, 0x6b12, 0x6c16, 0x8738,
-+      0x0078, 0x1e29, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b,
-+      0x0000, 0x0015, 0x001b, 0x0000, 0x0068, 0x1e8a, 0x2029, 0x0000,
-+      0x7884, 0xa065, 0x0040, 0x1e85, 0x2009, 0x3d79, 0x2104, 0xa084,
-+      0x0001, 0x0040, 0x1e78, 0x6084, 0xa086, 0x0103, 0x00c0, 0x1e78,
-+      0x6018, 0xa005, 0x00c0, 0x1e78, 0x6014, 0xa005, 0x00c0, 0x1e78,
-+      0x0d7e, 0x2069, 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0, 0x1e77,
-+      0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001,
-+      0x2091, 0x4080, 0x0d7f, 0x1078, 0x1b95, 0x0078, 0x1e85, 0x0d7f,
-+      0x1078, 0x1e8b, 0x0040, 0x1e85, 0x057e, 0x1078, 0x1e9c, 0x057f,
-+      0x00c0, 0x1e85, 0x8528, 0x0078, 0x1e48, 0x85ff, 0x0040, 0x1e8a,
-+      0x2091, 0x4080, 0x007c, 0x7ba4, 0x79a8, 0x70d4, 0x007e, 0x007f,
-+      0xa102, 0x00c0, 0x1e96, 0x2300, 0xa005, 0x007c, 0x0048, 0x1e9a,
-+      0xa302, 0x007c, 0x8002, 0x007c, 0x7800, 0xa084, 0x0002, 0x0040,
-+      0x1ea8, 0x2011, 0x04fd, 0x2204, 0xa082, 0x0005, 0x00c8, 0x1ebb,
-+      0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1eec,
-+      0x7008, 0x7208, 0xa206, 0x00c0, 0x1eec, 0xa286, 0x0008, 0x00c0,
-+      0x1eec, 0x2071, 0x0010, 0x1078, 0x1ef1, 0x2009, 0x0018, 0x6028,
-+      0xa005, 0x0040, 0x1ec5, 0x2009, 0x0040, 0x1078, 0x1959, 0x0040,
-+      0x1ede, 0x78bc, 0x8000, 0x78be, 0xa086, 0x0002, 0x00c0, 0x1eec,
-+      0x2091, 0x8000, 0x78d7, 0x0003, 0x78bf, 0x0000, 0x78c0, 0xa085,
-+      0x0300, 0x78c2, 0x2091, 0x8001, 0x0078, 0x1eec, 0x78bf, 0x0000,
-+      0x1078, 0x1b95, 0x79a4, 0x78a8, 0x8000, 0xa10a, 0x00c8, 0x1ee9,
-+      0xa006, 0x78aa, 0x70d6, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001,
-+      0x007c, 0x8107, 0x8004, 0x8004, 0x7ab0, 0x7bac, 0x7cb8, 0x7db4,
-+      0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c,
-+      0x2009, 0x3d68, 0x2091, 0x8000, 0x200a, 0x0f7e, 0x2079, 0x0100,
-+      0x2009, 0x3d40, 0x2104, 0xa086, 0x0000, 0x00c0, 0x1f1e, 0x2009,
-+      0x3d12, 0x2104, 0xa005, 0x00c0, 0x1f1e, 0x7830, 0xa084, 0x00c0,
-+      0x00c0, 0x1f1e, 0x0018, 0x1f1e, 0x781b, 0x0045, 0x0f7f, 0x007c,
-+      0x127e, 0x2091, 0x2300, 0x2071, 0x3d40, 0x2079, 0x0100, 0x784b,
-+      0x000f, 0x2019, 0x35fc, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040,
-+      0x1f3a, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318,
-+      0x0078, 0x1f2d, 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000,
-+      0x78af, 0x0020, 0x0070, 0x1f46, 0x0078, 0x1f3e, 0x7003, 0x0000,
-+      0x1078, 0x205c, 0x7004, 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd,
-+      0x210c, 0xa18a, 0x0005, 0x0048, 0x1f5d, 0x0038, 0x1f59, 0x0078,
-+      0x1f5d, 0xa085, 0x62c0, 0x0078, 0x1f5f, 0xa085, 0x6280, 0x017f,
-+      0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b,
-+      0x0008, 0x7047, 0x3d7f, 0x7043, 0x0000, 0x127f, 0x2000, 0x007c,
-+      0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, 0xa084, 0xfff0, 0xa105,
-+      0x2012, 0x1078, 0x205c, 0x007c, 0x2011, 0x0101, 0x20a9, 0x0009,
-+      0x810b, 0x0070, 0x1f85, 0x0078, 0x1f80, 0xa18c, 0x0e00, 0x2204,
-+      0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009, 0x0101, 0x20a9,
-+      0x0005, 0x8213, 0x0070, 0x1f96, 0x0078, 0x1f91, 0xa294, 0x00e0,
-+      0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c, 0x2011, 0x0101,
-+      0x20a9, 0x000c, 0x810b, 0x0070, 0x1fa7, 0x0078, 0x1fa2, 0xa18c,
-+      0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, 0x2011,
-+      0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x8103,
-+      0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x62ac,
-+      0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e,
-+      0x2061, 0x0100, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f,
-+      0x007c, 0x8103, 0x8003, 0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100,
-+      0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x8103,
-+      0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4,
-+      0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091,
-+      0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x203a, 0x2061,
-+      0x6100, 0x1078, 0x2042, 0x0040, 0x2024, 0x20a9, 0x0000, 0x2061,
-+      0x6000, 0x0c7e, 0x1078, 0x2042, 0x0040, 0x200e, 0x0c7f, 0x8c60,
-+      0x0070, 0x200c, 0x0078, 0x2001, 0x0078, 0x203a, 0x007f, 0xa082,
-+      0x6000, 0x2071, 0x3d40, 0x70ba, 0x6020, 0xa085, 0x0800, 0x6022,
-+      0x71b6, 0x2001, 0x0004, 0x70a2, 0x70c7, 0x000f, 0x70a7, 0x0000,
-+      0x1078, 0x1f00, 0x0078, 0x2036, 0x2071, 0x3d40, 0x6020, 0xa085,
-+      0x0800, 0x6022, 0x71b6, 0x2c00, 0x70be, 0x2001, 0x0006, 0x70a2,
-+      0x70c7, 0x000f, 0x70a7, 0x0000, 0x1078, 0x1f00, 0x2001, 0x0000,
-+      0x0078, 0x203c, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f,
-+      0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040, 0x2059, 0x2060, 0x6010,
-+      0xa306, 0x00c0, 0x2056, 0x600c, 0xa206, 0x00c0, 0x2056, 0x6014,
-+      0xa106, 0x00c0, 0x2056, 0xa006, 0x0078, 0x205b, 0x6000, 0x0078,
-+      0x2043, 0xa085, 0x0001, 0x007c, 0x2011, 0x3d41, 0x220c, 0xa18c,
-+      0x000f, 0x2011, 0x013b, 0x2204, 0xa084, 0x0100, 0x0040, 0x2072,
-+      0x2021, 0xff04, 0x2122, 0x810b, 0x810b, 0x810b, 0x810b, 0xa18d,
-+      0x0f00, 0x2104, 0x007c, 0x0e7e, 0x68e4, 0xa08c, 0x0020, 0x0040,
-+      0x20c6, 0xa084, 0x0006, 0x00c0, 0x20c6, 0x6014, 0x8007, 0xa084,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0, 0x3f80, 0x7004, 0xa084,
-+      0x000a, 0x00c0, 0x20c6, 0x7108, 0xa194, 0xff00, 0x0040, 0x20c6,
-+      0xa18c, 0x00ff, 0x2001, 0x000c, 0xa106, 0x0040, 0x20ad, 0x2001,
-+      0x0012, 0xa106, 0x0040, 0x20b1, 0x2001, 0x0014, 0xa106, 0x0040,
-+      0x20b5, 0x2001, 0x0019, 0xa106, 0x0040, 0x20b9, 0x2001, 0x0032,
-+      0xa106, 0x0040, 0x20bd, 0x0078, 0x20c1, 0x2009, 0x0012, 0x0078,
-+      0x20c3, 0x2009, 0x0014, 0x0078, 0x20c3, 0x2009, 0x0019, 0x0078,
-+      0x20c3, 0x2009, 0x0020, 0x0078, 0x20c3, 0x2009, 0x003f, 0x0078,
-+      0x20c3, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x0e7f, 0x007c,
-+      0x0068, 0x20c8, 0x2091, 0x8000, 0x2071, 0x0000, 0x007e, 0x7018,
-+      0xa084, 0x0001, 0x00c0, 0x20cf, 0x007f, 0x2071, 0x0010, 0x70ca,
-+      0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x0442, 0x70df, 0x0000,
-+      0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x20e6,
-+      0x107e, 0x007e, 0x127e, 0x2091, 0x2300, 0x7f3c, 0x7e58, 0x7c30,
-+      0x7d38, 0x2009, 0x3d74, 0x78a0, 0x200a, 0x8108, 0x250a, 0x8108,
-+      0x240a, 0x8108, 0x260a, 0x8108, 0x270a, 0xa594, 0x003f, 0xa484,
-+      0x4000, 0x0040, 0x210c, 0xa784, 0x007d, 0x00c0, 0x3585, 0xd784,
-+      0x00c0, 0x2d06, 0x1078, 0x20c8, 0xa49c, 0x000f, 0xa382, 0x0004,
-+      0x0050, 0x2114, 0x1078, 0x20c8, 0x8507, 0xa084, 0x000f, 0x0079,
-+      0x2119, 0x25cf, 0x268a, 0x26b2, 0x2946, 0x2bc0, 0x2c23, 0x2c81,
-+      0x2d06, 0x2dad, 0x2e33, 0x2141, 0x2129, 0x2418, 0x24ef, 0x2b9b,
-+      0x2129, 0x1078, 0x20c8, 0x0018, 0x20ed, 0x127f, 0x2091, 0x8001,
-+      0x007f, 0x107f, 0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030,
-+      0xa005, 0x0040, 0x213d, 0x7033, 0x0000, 0x1078, 0x355b, 0x0018,
-+      0x20ed, 0x2009, 0x3d0f, 0x200b, 0x0000, 0x705c, 0xa005, 0x00c0,
-+      0x2216, 0x70a0, 0xa084, 0x0007, 0x0079, 0x214e, 0x2242, 0x2156,
-+      0x2164, 0x2181, 0x21a3, 0x21f0, 0x21c9, 0x2156, 0x7808, 0xa084,
-+      0xfffd, 0x780a, 0x2009, 0x0047, 0x1078, 0x2a7a, 0x00c0, 0x2162,
-+      0x7003, 0x0004, 0x0078, 0x212b, 0x1078, 0x3542, 0x00c0, 0x217f,
-+      0x70b4, 0x8007, 0x7882, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b,
-+      0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009, 0x00fa, 0x1078,
-+      0x2a78, 0x00c0, 0x217f, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078,
-+      0x212b, 0x1078, 0x3542, 0x00c0, 0x21a1, 0x71b4, 0x8107, 0x7882,
-+      0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
-+      0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
-+      0x00fa, 0x1078, 0x2a78, 0x00c0, 0x21a1, 0x7003, 0x0004, 0x70c7,
-+      0x000f, 0x0078, 0x212b, 0x1078, 0x3542, 0x00c0, 0x21c7, 0x71b4,
-+      0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0,
-+      0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab, 0x000d, 0x789b,
-+      0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009, 0x00fa, 0x1078,
-+      0x2a78, 0x00c0, 0x21c7, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078,
-+      0x212b, 0x1078, 0x3542, 0x00c0, 0x21ee, 0x71b4, 0x8107, 0x7882,
-+      0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
-+      0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
-+      0x00fa, 0x1078, 0x2a78, 0x00c0, 0x21ee, 0x70bc, 0x70bf, 0x0000,
-+      0x2068, 0x703e, 0x7003, 0x0002, 0x70c7, 0x000f, 0x0078, 0x212b,
-+      0x1078, 0x3542, 0x00c0, 0x212b, 0x70bc, 0x2068, 0x6f14, 0x1078,
-+      0x3449, 0x2c50, 0x1078, 0x35ea, 0x789b, 0x0010, 0x6814, 0xa084,
-+      0x001f, 0xa085, 0x0080, 0x007e, 0x007f, 0x78aa, 0x6e1c, 0x067e,
-+      0x067f, 0x2041, 0x0001, 0x70c0, 0xa084, 0x0400, 0x2001, 0x0004,
-+      0x0040, 0x2214, 0x2001, 0x0006, 0x0078, 0x2334, 0x1078, 0x3542,
-+      0x00c0, 0x212b, 0x789b, 0x0010, 0x705c, 0x2068, 0x6f14, 0x1078,
-+      0x3449, 0x2c50, 0x1078, 0x35ea, 0x6008, 0xa085, 0x0010, 0x600a,
-+      0x6824, 0xa005, 0x0040, 0x2234, 0xa082, 0x0006, 0x0048, 0x2232,
-+      0x0078, 0x2234, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f, 0xa085,
-+      0x0080, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003,
-+      0x0078, 0x2334, 0x0018, 0x20ed, 0x7440, 0xa485, 0x0000, 0x0040,
-+      0x226c, 0xa080, 0x3d80, 0x2030, 0x7144, 0x0018, 0x20ed, 0x8108,
-+      0xa12a, 0x0048, 0x2255, 0x2009, 0x3d80, 0x2164, 0x6504, 0x85ff,
-+      0x00c0, 0x2279, 0x8421, 0x00c0, 0x224d, 0x017e, 0x2009, 0x3d0f,
-+      0x2104, 0xa005, 0x00c0, 0x226a, 0x017e, 0x2009, 0x3d10, 0x2104,
-+      0x017f, 0x200a, 0x017f, 0x7146, 0x7003, 0x0000, 0x703f, 0x0000,
-+      0x0078, 0x212b, 0x7640, 0xa6b0, 0x3d80, 0x7144, 0x2600, 0x0078,
-+      0x225a, 0x7146, 0x2568, 0x2558, 0x753e, 0x2c50, 0x6034, 0xa085,
-+      0x0000, 0x00c0, 0x2276, 0x6708, 0x7736, 0xa784, 0x013f, 0x0040,
-+      0x22a7, 0xa784, 0x0021, 0x00c0, 0x2276, 0xa784, 0x0002, 0x0040,
-+      0x2298, 0xa784, 0x0004, 0x0040, 0x2276, 0xa7bc, 0xfffb, 0x670a,
-+      0xa784, 0x0018, 0x00c0, 0x2276, 0xa784, 0x0100, 0x0040, 0x22a7,
-+      0x6018, 0xa005, 0x00c0, 0x2276, 0xa7bc, 0xfeff, 0x670a, 0x6823,
-+      0x0000, 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, 0x22b7, 0x601c,
-+      0xa102, 0x0048, 0x22ba, 0x0040, 0x22ba, 0x0078, 0x2272, 0x81ff,
-+      0x00c0, 0x2272, 0xa784, 0x0080, 0x00c0, 0x22c0, 0x700c, 0x6022,
-+      0xa7bc, 0xff7f, 0x670a, 0x1078, 0x35ea, 0x0018, 0x20ed, 0x789b,
-+      0x0010, 0xa046, 0x1078, 0x3542, 0x00c0, 0x212b, 0x6b14, 0xa39c,
-+      0x001f, 0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000, 0x0040, 0x22dc,
-+      0xa684, 0x0001, 0x0040, 0x22de, 0xa39c, 0xffbf, 0xa684, 0x0010,
-+      0x0040, 0x22e4, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e,
-+      0x00c0, 0x22ef, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x2330, 0x714c,
-+      0xa18c, 0x0800, 0x0040, 0x304e, 0x2011, 0x0021, 0x8004, 0x8004,
-+      0x0048, 0x2306, 0x2011, 0x0022, 0x8004, 0x0048, 0x2306, 0x2011,
-+      0x0020, 0x8004, 0x0048, 0x2306, 0x0040, 0x2330, 0x7aaa, 0x8840,
-+      0x1078, 0x355b, 0x6a14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0xa1e0,
-+      0x6000, 0x2c64, 0x8cff, 0x0040, 0x2327, 0x6014, 0xa206, 0x00c0,
-+      0x2311, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x230c, 0x0c7e, 0x2a60,
-+      0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, 0x2242, 0x1078,
-+      0x3542, 0x00c0, 0x212b, 0x2a60, 0x610e, 0x79aa, 0x8840, 0x712e,
-+      0x0018, 0x20ed, 0x2001, 0x0001, 0x007e, 0x7150, 0xa184, 0x0018,
-+      0x0040, 0x234f, 0xa184, 0x0010, 0x0040, 0x2342, 0x1078, 0x3273,
-+      0x00c0, 0x2372, 0xa184, 0x0008, 0x0040, 0x234f, 0x69a0, 0xa184,
-+      0x0600, 0x00c0, 0x234f, 0x1078, 0x316f, 0x0078, 0x2372, 0x69a0,
-+      0xa184, 0x0800, 0x0040, 0x2366, 0x0c7e, 0x027e, 0x2960, 0x6000,
-+      0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, 0x027f,
-+      0x0c7f, 0x1078, 0x3273, 0x00c0, 0x2372, 0x69a0, 0xa184, 0x0200,
-+      0x0040, 0x236e, 0x1078, 0x31be, 0x0078, 0x2372, 0xa184, 0x0400,
-+      0x00c0, 0x234b, 0x69a0, 0xa184, 0x1000, 0x0040, 0x237d, 0x6914,
-+      0xa18c, 0xff00, 0x810f, 0x1078, 0x1fc3, 0x007f, 0x0018, 0x20ed,
-+      0x7002, 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x238d, 0xa086,
-+      0x0060, 0x00c0, 0x238d, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x2392,
-+      0xa18d, 0x0004, 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa,
-+      0x789b, 0x0061, 0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff, 0x691a,
-+      0xa68c, 0x0080, 0x0040, 0x23b1, 0x70cb, 0x0000, 0xa08a, 0x000d,
-+      0x0050, 0x23af, 0xa08a, 0x000c, 0x71ca, 0x2001, 0x000c, 0x800c,
-+      0x71ce, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3054, 0xa18c, 0x00f8,
-+      0x00c0, 0x3054, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b,
-+      0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f,
-+      0x137f, 0x157f, 0x6814, 0x8007, 0x7882, 0x6d94, 0x7dd6, 0x7dde,
-+      0x6e98, 0x7ed2, 0x7eda, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x23da,
-+      0x0098, 0x23e2, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x355b,
-+      0x0078, 0x2133, 0x7200, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0,
-+      0x23ef, 0x781b, 0x004a, 0x1078, 0x355b, 0x0078, 0x2400, 0x6ab4,
-+      0xa295, 0x2000, 0x7a5a, 0x781b, 0x004a, 0x1078, 0x355b, 0x7200,
-+      0x2500, 0xa605, 0x0040, 0x2400, 0xa284, 0x0007, 0x1079, 0x240e,
-+      0xad80, 0x0009, 0x7032, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0,
-+      0x212b, 0x6018, 0x8000, 0x601a, 0x0078, 0x212b, 0x2416, 0x39a0,
-+      0x39a0, 0x398f, 0x39a0, 0x2416, 0x398f, 0x2416, 0x1078, 0x20c8,
-+      0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x3d00, 0x78c0,
-+      0x0f7f, 0xa084, 0x0001, 0x0040, 0x243e, 0x70a0, 0xa086, 0x0001,
-+      0x00c0, 0x242d, 0x70a2, 0x0078, 0x24d1, 0x70a0, 0xa086, 0x0005,
-+      0x00c0, 0x243c, 0x70bc, 0x2068, 0x681b, 0x0004, 0x6817, 0x0000,
-+      0x6820, 0xa085, 0x0008, 0x6822, 0x70a3, 0x0000, 0x157e, 0x2011,
-+      0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, 0x2460, 0xa186, 0x0007,
-+      0x00c0, 0x2450, 0x2009, 0x3d35, 0x200b, 0x0005, 0x0078, 0x2460,
-+      0x2009, 0x3d13, 0x2104, 0x2009, 0x3d12, 0x200a, 0x2009, 0x3d35,
-+      0x200b, 0x0001, 0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x2462,
-+      0x70a3, 0x0000, 0x1078, 0x36ec, 0x20a9, 0x0010, 0x2039, 0x0000,
-+      0x1078, 0x3340, 0xa7b8, 0x0100, 0x0070, 0x2470, 0x0078, 0x2468,
-+      0x7000, 0x0079, 0x2473, 0x24a3, 0x248a, 0x248a, 0x247d, 0x24a3,
-+      0x24a3, 0x24a3, 0x247b, 0x1078, 0x20c8, 0x2021, 0x3d57, 0x2404,
-+      0xa005, 0x0040, 0x24a3, 0xad06, 0x00c0, 0x248a, 0x6800, 0x2022,
-+      0x0078, 0x249a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2496, 0x6f14,
-+      0x1078, 0x3449, 0x1078, 0x3025, 0x0078, 0x249a, 0x7054, 0x2060,
-+      0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008,
-+      0x6822, 0x1078, 0x1b7f, 0x2021, 0x6100, 0x1078, 0x24d7, 0x2021,
-+      0x3d57, 0x1078, 0x24d7, 0x20a9, 0x0000, 0x2021, 0x6000, 0x1078,
-+      0x24d7, 0x8420, 0x0070, 0x24b6, 0x0078, 0x24af, 0x2061, 0x4000,
-+      0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0x81ff, 0x0040,
-+      0x24c5, 0xa102, 0x0050, 0x24c5, 0x6012, 0x601b, 0x0000, 0xace0,
-+      0x0010, 0x0070, 0x24cd, 0x0078, 0x24bc, 0x8421, 0x00c0, 0x24ba,
-+      0x157f, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x212b, 0x047e,
-+      0x2404, 0xa005, 0x0040, 0x24eb, 0x2068, 0x6800, 0x007e, 0x6a1a,
-+      0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, 0x1b7f,
-+      0x007f, 0x0078, 0x24d9, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282,
-+      0x0003, 0x0050, 0x24f5, 0x1078, 0x20c8, 0x2300, 0x0079, 0x24f8,
-+      0x24fb, 0x256e, 0x258b, 0xa282, 0x0002, 0x0040, 0x2501, 0x1078,
-+      0x20c8, 0x70a0, 0x70a3, 0x0000, 0x70c7, 0x0000, 0x0079, 0x2508,
-+      0x2510, 0x2510, 0x2512, 0x2546, 0x305a, 0x2510, 0x2546, 0x2510,
-+      0x1078, 0x20c8, 0x77b4, 0x1078, 0x3340, 0x77b4, 0xa7bc, 0x0f00,
-+      0x1078, 0x3449, 0x6018, 0xa005, 0x0040, 0x253d, 0x2021, 0x6100,
-+      0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x25a8, 0x0040, 0x253d,
-+      0x157e, 0x20a9, 0x0000, 0x2021, 0x6000, 0x047e, 0x2009, 0x0004,
-+      0x2011, 0x0010, 0x1078, 0x25a8, 0x047f, 0x0040, 0x253c, 0x8420,
-+      0x0070, 0x253c, 0x0078, 0x252d, 0x157f, 0x8738, 0xa784, 0x001f,
-+      0x00c0, 0x2518, 0x0078, 0x2133, 0x0078, 0x2133, 0x77b4, 0x1078,
-+      0x3449, 0x6018, 0xa005, 0x0040, 0x256c, 0x2021, 0x6100, 0x2009,
-+      0x0005, 0x2011, 0x0020, 0x1078, 0x25a8, 0x0040, 0x256c, 0x157e,
-+      0x20a9, 0x0000, 0x2021, 0x6000, 0x047e, 0x2009, 0x0005, 0x2011,
-+      0x0020, 0x1078, 0x25a8, 0x047f, 0x0040, 0x256b, 0x8420, 0x0070,
-+      0x256b, 0x0078, 0x255c, 0x157f, 0x0078, 0x2133, 0x2200, 0x0079,
-+      0x2571, 0x2574, 0x2576, 0x2576, 0x1078, 0x20c8, 0x2009, 0x0012,
-+      0x70a0, 0xa086, 0x0002, 0x0040, 0x257f, 0x2009, 0x000e, 0x6818,
-+      0xa084, 0x8000, 0x0040, 0x2585, 0x691a, 0x70a3, 0x0000, 0x70a7,
-+      0x0001, 0x0078, 0x34da, 0x2200, 0x0079, 0x258e, 0x2593, 0x2576,
-+      0x2591, 0x1078, 0x20c8, 0x7000, 0xa086, 0x0001, 0x00c0, 0x25a4,
-+      0x1078, 0x303b, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2fdd,
-+      0x0040, 0x25a4, 0x0078, 0x2242, 0x1078, 0x2a87, 0x0078, 0x2fea,
-+      0x2404, 0xa005, 0x0040, 0x25cb, 0x2068, 0x2d04, 0x007e, 0x6814,
-+      0xa706, 0x0040, 0x25b7, 0x2d20, 0x007f, 0x0078, 0x25a9, 0x007f,
-+      0x2022, 0x691a, 0x6817, 0x0000, 0x6820, 0xa205, 0x6822, 0x1078,
-+      0x1b7f, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a,
-+      0x1078, 0x303b, 0x007c, 0xa085, 0x0001, 0x0078, 0x25ca, 0x2300,
-+      0x0079, 0x25d2, 0x25d7, 0x25d5, 0x2630, 0x1078, 0x20c8, 0x78e4,
-+      0xa005, 0x00d0, 0x25fa, 0x0018, 0x212b, 0x2008, 0xa084, 0x0030,
-+      0x00c0, 0x25e6, 0x781b, 0x004a, 0x0078, 0x212b, 0x78ec, 0xa084,
-+      0x0003, 0x0040, 0x25e2, 0x2100, 0xa084, 0x0007, 0x0079, 0x25f0,
-+      0x260b, 0x2616, 0x25fe, 0x25f8, 0x3535, 0x3535, 0x25f8, 0x2623,
-+      0x1078, 0x20c8, 0x2001, 0x0003, 0x0078, 0x295a, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x2605, 0x681b, 0x001d, 0x1078, 0x3323, 0x781b,
-+      0x0053, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000, 0x0040, 0x2612,
-+      0x681b, 0x001d, 0x1078, 0x3323, 0x0078, 0x3506, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x261d, 0x681b, 0x001d, 0x1078, 0x3323, 0x781b,
-+      0x00e3, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000, 0x0040, 0x262a,
-+      0x681b, 0x001d, 0x1078, 0x3323, 0x781b, 0x009e, 0x0078, 0x212b,
-+      0xa584, 0x000f, 0x00c0, 0x2651, 0x7000, 0x0079, 0x2637, 0x263f,
-+      0x2641, 0x263f, 0x264d, 0x264d, 0x264d, 0x264d, 0x263f, 0x1078,
-+      0x20c8, 0x1078, 0x303b, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
-+      0x2fdd, 0x0040, 0x264d, 0x0078, 0x2242, 0x1078, 0x2a87, 0x0078,
-+      0x2fea, 0x78e4, 0xa005, 0x00d0, 0x25fa, 0x0018, 0x25fa, 0x2008,
-+      0xa084, 0x0030, 0x00c0, 0x2660, 0x781b, 0x004a, 0x0078, 0x212b,
-+      0x78ec, 0xa084, 0x0003, 0x0040, 0x265c, 0x2100, 0xa184, 0x0007,
-+      0x0079, 0x266a, 0x267a, 0x267e, 0x2674, 0x2672, 0x3535, 0x3535,
-+      0x2672, 0x352d, 0x1078, 0x20c8, 0x1078, 0x332b, 0x781b, 0x0053,
-+      0x0078, 0x212b, 0x1078, 0x332b, 0x0078, 0x3506, 0x1078, 0x332b,
-+      0x781b, 0x00e3, 0x0078, 0x212b, 0x1078, 0x332b, 0x781b, 0x009e,
-+      0x0078, 0x212b, 0x2300, 0x0079, 0x268d, 0x2692, 0x2690, 0x2694,
-+      0x1078, 0x20c8, 0x0078, 0x2d06, 0x681b, 0x0008, 0x78a3, 0x0000,
-+      0x79e4, 0xa184, 0x0030, 0x0040, 0x2d06, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x2d06, 0xa184, 0x0007, 0x0079, 0x26a6, 0x26ae, 0x267e,
-+      0x25fe, 0x34da, 0x3535, 0x3535, 0x26ae, 0x352d, 0x1078, 0x34ea,
-+      0x0078, 0x212b, 0xa282, 0x0005, 0x0050, 0x26b8, 0x1078, 0x20c8,
-+      0x2300, 0x0079, 0x26bb, 0x26be, 0x290b, 0x2917, 0x2200, 0x0079,
-+      0x26c1, 0x26db, 0x26c8, 0x26db, 0x26c6, 0x28f0, 0x1078, 0x20c8,
-+      0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048,
-+      0x3305, 0xa08a, 0x0004, 0x00c8, 0x3305, 0x0079, 0x26d7, 0x3305,
-+      0x3305, 0x3305, 0x32b3, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080,
-+      0x0040, 0x26ec, 0x0078, 0x3305, 0x7000, 0xa005, 0x00c0, 0x26e2,
-+      0x2011, 0x0004, 0x0078, 0x2e41, 0xa184, 0x00ff, 0xa08a, 0x0010,
-+      0x00c8, 0x3305, 0x0079, 0x26f4, 0x2706, 0x2704, 0x271e, 0x2722,
-+      0x27dd, 0x3305, 0x3305, 0x27df, 0x3305, 0x3305, 0x28ec, 0x28ec,
-+      0x3305, 0x3305, 0x3305, 0x28ee, 0x1078, 0x20c8, 0xa684, 0x1000,
-+      0x0040, 0x2713, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a, 0x781b,
-+      0x009b, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000, 0x0040, 0x271c,
-+      0x681b, 0x001d, 0x0078, 0x270a, 0x0078, 0x34da, 0x681b, 0x001d,
-+      0x0078, 0x3311, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, 0x2763,
-+      0x6820, 0xa084, 0x0001, 0x00c0, 0x276b, 0x6818, 0xa086, 0x0008,
-+      0x00c0, 0x2734, 0x681b, 0x0000, 0xa684, 0x0400, 0x0040, 0x27d9,
-+      0xa684, 0x0080, 0x0040, 0x275f, 0x70cb, 0x0000, 0x6818, 0xa084,
-+      0x003f, 0xa08a, 0x000d, 0x0050, 0x275f, 0xa08a, 0x000c, 0x71ca,
-+      0x2001, 0x000c, 0x800c, 0x71ce, 0x789b, 0x0061, 0x78aa, 0x157e,
-+      0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac,
-+      0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x781b,
-+      0x0056, 0x0078, 0x212b, 0xa684, 0x1000, 0x0040, 0x276b, 0x781b,
-+      0x0068, 0x0078, 0x212b, 0xa684, 0x0060, 0x0040, 0x27d5, 0xa684,
-+      0x0800, 0x0040, 0x27d5, 0xa684, 0x8000, 0x00c0, 0x2779, 0x0078,
-+      0x2791, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0,
-+      0x801b, 0x00c8, 0x2784, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+      0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303,
-+      0x68ae, 0xa684, 0x4000, 0x0040, 0x2799, 0xa6b4, 0xbfff, 0x7e5a,
-+      0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0, 0x27a6, 0x1078, 0x3792,
-+      0x1078, 0x398f, 0x781b, 0x0065, 0x0078, 0x212b, 0xa006, 0x1078,
-+      0x3a5e, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040,
-+      0x27b5, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda,
-+      0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x27c7, 0xa6b5,
-+      0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0065, 0x0078, 0x212b, 0x781b,
-+      0x0065, 0x2200, 0xa115, 0x00c0, 0x27d1, 0x1078, 0x39a0, 0x0078,
-+      0x212b, 0x1078, 0x39d5, 0x0078, 0x212b, 0x781b, 0x0068, 0x0078,
-+      0x212b, 0x781b, 0x0056, 0x0078, 0x212b, 0x1078, 0x20c8, 0x0078,
-+      0x283c, 0x6920, 0xa184, 0x0100, 0x0040, 0x27f7, 0xa18c, 0xfeff,
-+      0x6922, 0x0c7e, 0x7048, 0x2060, 0x6000, 0xa084, 0xefff, 0x6002,
-+      0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x282b, 0xa184,
-+      0x0200, 0x0040, 0x282b, 0xa18c, 0xfdff, 0x6922, 0x0c7e, 0x7048,
-+      0x2060, 0x6000, 0xa084, 0xdfff, 0x6002, 0x6004, 0xa084, 0xffef,
-+      0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x282b,
-+      0x1078, 0x3445, 0x1078, 0x316f, 0x88ff, 0x0040, 0x282b, 0x789b,
-+      0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684,
-+      0x0400, 0x00c0, 0x2827, 0x781b, 0x0053, 0x0078, 0x212b, 0x781b,
-+      0x0067, 0x0078, 0x212b, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2834,
-+      0x781b, 0x0056, 0x0078, 0x212b, 0x781b, 0x0068, 0x0078, 0x212b,
-+      0x0078, 0x330b, 0x0078, 0x330b, 0x2019, 0x0000, 0x7990, 0xa18c,
-+      0x0007, 0x00c0, 0x284a, 0x6820, 0xa084, 0x0100, 0x0040, 0x283a,
-+      0x2009, 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286,
-+      0x0001, 0x00c0, 0x2881, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102,
-+      0x0040, 0x2879, 0x0048, 0x285e, 0x0078, 0x287b, 0xa380, 0x0002,
-+      0xa102, 0x00c8, 0x2879, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e,
-+      0x7048, 0x2060, 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084,
-+      0xffe5, 0x6006, 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078,
-+      0x282c, 0x0078, 0x27e1, 0x24a8, 0x7aa8, 0x00f0, 0x287b, 0x0078,
-+      0x284c, 0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x28dd, 0x8318,
-+      0x8318, 0x2300, 0xa102, 0x0040, 0x2891, 0x0048, 0x2891, 0x0078,
-+      0x28da, 0xa286, 0x0023, 0x0040, 0x283a, 0x681c, 0xa084, 0xfff1,
-+      0x681e, 0x7e58, 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a,
-+      0x6008, 0xa085, 0x0010, 0x600a, 0x0c7e, 0x7048, 0x2060, 0x6004,
-+      0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0010, 0x0040, 0x28b5, 0x1078,
-+      0x3445, 0x1078, 0x3273, 0x0078, 0x28c4, 0x0c7e, 0x7048, 0x2060,
-+      0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x282b,
-+      0x1078, 0x3445, 0x1078, 0x316f, 0x88ff, 0x0040, 0x282b, 0x789b,
-+      0x0060, 0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400,
-+      0x00c0, 0x28d6, 0x781b, 0x0053, 0x0078, 0x212b, 0x781b, 0x0067,
-+      0x0078, 0x212b, 0x7aa8, 0x0078, 0x284c, 0x8318, 0x2300, 0xa102,
-+      0x0040, 0x28e6, 0x0048, 0x28e6, 0x0078, 0x284c, 0xa284, 0x0080,
-+      0x00c0, 0x3311, 0x0078, 0x330b, 0x0078, 0x3311, 0x0078, 0x3305,
-+      0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040,
-+      0x28fb, 0x1078, 0x20c8, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084,
-+      0x00ff, 0xa08a, 0x0004, 0x00c8, 0x3305, 0x0079, 0x2907, 0x308b,
-+      0x30c2, 0x3305, 0x320e, 0xa282, 0x0000, 0x00c0, 0x2911, 0x1078,
-+      0x20c8, 0x1078, 0x3323, 0x781b, 0x0067, 0x0078, 0x212b, 0xa282,
-+      0x0003, 0x00c0, 0x291d, 0x1078, 0x20c8, 0xa484, 0x8000, 0x00c0,
-+      0x2940, 0x70a0, 0xa005, 0x0040, 0x2927, 0x1078, 0x20c8, 0x6f14,
-+      0x77b6, 0xa7bc, 0x0f00, 0x1078, 0x3449, 0x6008, 0xa085, 0x0021,
-+      0x600a, 0x8738, 0xa784, 0x001f, 0x00c0, 0x292b, 0x1078, 0x3327,
-+      0x70a3, 0x0002, 0x2009, 0x3d35, 0x200b, 0x0009, 0x0078, 0x2942,
-+      0x1078, 0x3333, 0x781b, 0x0067, 0x0078, 0x212b, 0xa282, 0x0004,
-+      0x0050, 0x294c, 0x1078, 0x20c8, 0x2300, 0x0079, 0x294f, 0x2952,
-+      0x2a33, 0x2a62, 0xa286, 0x0003, 0x0040, 0x2958, 0x1078, 0x20c8,
-+      0x2001, 0x0000, 0x007e, 0x68a0, 0xa084, 0x2000, 0x0040, 0x2964,
-+      0x6008, 0xa085, 0x0002, 0x600a, 0x007f, 0x703a, 0x7000, 0xa084,
-+      0x0007, 0x0079, 0x296b, 0x2133, 0x2975, 0x2975, 0x2b50, 0x2b81,
-+      0x2133, 0x2b81, 0x2973, 0x1078, 0x20c8, 0xa684, 0x1000, 0x00c0,
-+      0x297d, 0x1078, 0x36ec, 0x0040, 0x2a0d, 0x7868, 0xa08c, 0x00ff,
-+      0x0040, 0x29c3, 0xa186, 0x0008, 0x00c0, 0x2994, 0x6008, 0xa084,
-+      0xffef, 0x600a, 0x1078, 0x2fdd, 0x0040, 0x29c3, 0x1078, 0x303b,
-+      0x1078, 0x36ec, 0x0078, 0x29aa, 0xa186, 0x0028, 0x00c0, 0x29c3,
-+      0x1078, 0x36ec, 0x6008, 0xa084, 0xffef, 0x600a, 0x6018, 0xa005,
-+      0x0040, 0x29aa, 0x8001, 0x601a, 0x6008, 0xa085, 0x0008, 0x600a,
-+      0x7010, 0x6026, 0x6820, 0xa084, 0x0001, 0x0040, 0x2133, 0x6820,
-+      0xa084, 0xfffe, 0x6822, 0x7054, 0x0c7e, 0x2060, 0x6800, 0x6002,
-+      0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x29c0, 0x6002,
-+      0x6006, 0x0078, 0x2133, 0x017e, 0x1078, 0x2a87, 0x017f, 0xa684,
-+      0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2a0d,
-+      0xa186, 0x0002, 0x00c0, 0x2a0d, 0xa684, 0x0800, 0x00c0, 0x29e0,
-+      0xa684, 0x0060, 0x0040, 0x29e0, 0x78d8, 0x7adc, 0x682e, 0x6a32,
-+      0x6820, 0xa084, 0x0800, 0x00c0, 0x2a0d, 0x8717, 0xa294, 0x000f,
-+      0x8213, 0x8213, 0x8213, 0xa290, 0x3f80, 0xa290, 0x0000, 0x221c,
-+      0xa384, 0x0100, 0x00c0, 0x29f6, 0x0078, 0x29fc, 0x8210, 0x2204,
-+      0xa085, 0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2a09,
-+      0x68a0, 0xa084, 0x0100, 0x00c0, 0x2a09, 0x1078, 0x2b0b, 0x0078,
-+      0x2133, 0x6008, 0xa085, 0x0002, 0x600a, 0x6916, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x2a15, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e,
-+      0x1078, 0x302c, 0x1078, 0x303b, 0x00c0, 0x2a22, 0x6008, 0xa084,
-+      0xffef, 0x600a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2a2b, 0x1078,
-+      0x3025, 0x0078, 0x2a2f, 0x7054, 0x2060, 0x6800, 0x6002, 0x1078,
-+      0x1b7f, 0x0078, 0x2133, 0xa282, 0x0004, 0x0048, 0x2a39, 0x1078,
-+      0x20c8, 0x2200, 0x0079, 0x2a3c, 0x2a37, 0x2a40, 0x2a4d, 0x2a40,
-+      0x7000, 0xa086, 0x0005, 0x0040, 0x2a49, 0x1078, 0x3323, 0x781b,
-+      0x0067, 0x781b, 0x0068, 0x0078, 0x212b, 0x7890, 0x8007, 0x8001,
-+      0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+      0xa186, 0x0003, 0x0040, 0x2a5e, 0x0078, 0x3305, 0x781b, 0x0068,
-+      0x0078, 0x212b, 0x6820, 0xa085, 0x0004, 0x6822, 0x82ff, 0x00c0,
-+      0x2a6d, 0x1078, 0x3323, 0x0078, 0x2a74, 0x8211, 0x0040, 0x2a72,
-+      0x1078, 0x20c8, 0x1078, 0x3333, 0x781b, 0x0067, 0x0078, 0x212b,
-+      0x1078, 0x355b, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2a84, 0x0018,
-+      0x2a84, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684,
-+      0x0060, 0x00c0, 0x2a91, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+      0x2b0a, 0xa684, 0x0800, 0x00c0, 0x2ab3, 0x68b4, 0xa084, 0x4800,
-+      0xa635, 0xa684, 0x0800, 0x00c0, 0x2ab3, 0x6998, 0x6a94, 0x692e,
-+      0x6a32, 0x7038, 0xa005, 0x00c0, 0x2aab, 0x2200, 0xa105, 0x0040,
-+      0x2ab2, 0x703b, 0x0015, 0x7000, 0xa086, 0x0006, 0x0040, 0x2ab2,
-+      0x1078, 0x36ec, 0x007c, 0xa684, 0x0020, 0x0040, 0x2ad5, 0xa684,
-+      0x4000, 0x0040, 0x2ac1, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+      0x2aab, 0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0,
-+      0x2abb, 0x7038, 0xa005, 0x00c0, 0x2acf, 0x703b, 0x0015, 0x79d8,
-+      0x7adc, 0x692e, 0x6a32, 0x0078, 0x2aab, 0xa684, 0x4000, 0x0040,
-+      0x2adf, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2aab, 0x68b4,
-+      0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2ad9, 0x7038,
-+      0xa005, 0x00c0, 0x2aed, 0x703b, 0x0015, 0x79d8, 0x7adc, 0x78d0,
-+      0x80fb, 0x00c8, 0x2af4, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+      0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x2b01, 0x0078,
-+      0x2aab, 0x7000, 0xa086, 0x0006, 0x0040, 0x2b0a, 0x1078, 0x3a5e,
-+      0x0078, 0x2aab, 0x007c, 0xa384, 0x0200, 0x0040, 0x2b13, 0x6008,
-+      0xa085, 0x0002, 0x600a, 0x681b, 0x0006, 0x688f, 0x0000, 0x6893,
-+      0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833,
-+      0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x7000,
-+      0x0079, 0x2b2a, 0x2b32, 0x2b34, 0x2b3d, 0x2b32, 0x2b32, 0x2b32,
-+      0x2b32, 0x2b32, 0x1078, 0x20c8, 0x6820, 0xa084, 0x0001, 0x00c0,
-+      0x2b3d, 0x1078, 0x3025, 0x0078, 0x2b43, 0x7054, 0x2c50, 0x2060,
-+      0x6800, 0x6002, 0x2a60, 0x2021, 0x3d57, 0x2404, 0xa005, 0x0040,
-+      0x2b4c, 0x2020, 0x0078, 0x2b45, 0x2d22, 0x206b, 0x0000, 0x007c,
-+      0x1078, 0x302c, 0x1078, 0x303b, 0x682b, 0x0000, 0x789b, 0x000e,
-+      0x6f14, 0x1078, 0x3a90, 0x6817, 0x0002, 0xa684, 0x0800, 0x0040,
-+      0x2b65, 0x691c, 0xa18d, 0x2000, 0x691e, 0x6818, 0xa084, 0x8000,
-+      0x0040, 0x2b75, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2b73, 0x681b,
-+      0x001e, 0x0078, 0x2b75, 0x681b, 0x0000, 0x2021, 0x3d57, 0x6800,
-+      0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x1b7f, 0x0078,
-+      0x2133, 0x1078, 0x2a87, 0x682b, 0x0000, 0x2001, 0x000e, 0x6f14,
-+      0x1078, 0x3560, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xa084, 0x8000,
-+      0x0040, 0x2b94, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x70a3,
-+      0x0000, 0x0078, 0x2133, 0xa006, 0x1078, 0x36ec, 0x6817, 0x0000,
-+      0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820,
-+      0xa085, 0x00ff, 0x6822, 0x7000, 0x0079, 0x2bae, 0x2bb6, 0x2bb8,
-+      0x2bb8, 0x2bba, 0x2bba, 0x2bba, 0x2bba, 0x2bb6, 0x1078, 0x20c8,
-+      0x1078, 0x303b, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x2ff5,
-+      0x2300, 0x0079, 0x2bc3, 0x2bc6, 0x2bc8, 0x2c21, 0x1078, 0x20c8,
-+      0xa684, 0x8000, 0x00c0, 0x2c06, 0x7000, 0x0079, 0x2bcf, 0x2bd7,
-+      0x2bd9, 0x2bd9, 0x2bf5, 0x2bd9, 0x2c02, 0x2bf5, 0x2bd7, 0x1078,
-+      0x20c8, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2bf1, 0xa6b4,
-+      0xffdf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x6eb6, 0x681c,
-+      0xa084, 0xffdf, 0x681e, 0x1078, 0x36ec, 0x1078, 0x39a0, 0x0078,
-+      0x34da, 0xa684, 0x2000, 0x0040, 0x2be3, 0x6818, 0xa084, 0x8000,
-+      0x0040, 0x2c02, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x2c02,
-+      0x681b, 0x0007, 0x1078, 0x34ea, 0x0078, 0x212b, 0xa6b4, 0x7fff,
-+      0x7e5a, 0x7adc, 0x79d8, 0x78d0, 0x79d2, 0x801b, 0x00c8, 0x2c11,
-+      0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100,
-+      0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0068,
-+      0x007c, 0x1078, 0x20c8, 0x2300, 0x0079, 0x2c26, 0x2c29, 0x2c2b,
-+      0x2c73, 0x1078, 0x20c8, 0xa684, 0x8000, 0x00c0, 0x2c62, 0x7000,
-+      0x0079, 0x2c32, 0x2c39, 0x2c3b, 0x2c3b, 0x2c57, 0x2c3b, 0x2c57,
-+      0x2c39, 0x1078, 0x20c8, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0,
-+      0x2c53, 0xa6b4, 0xffbf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a,
-+      0x6eb6, 0x681c, 0xa084, 0xffbf, 0x681e, 0x1078, 0x36ec, 0x1078,
-+      0x39a0, 0x0078, 0x34da, 0xa684, 0x2000, 0x0040, 0x2c45, 0x6818,
-+      0xa084, 0x8000, 0x0040, 0x2c5e, 0x681b, 0x0007, 0x781b, 0x00e4,
-+      0x0078, 0x212b, 0xa6b4, 0x7fff, 0x7e5a, 0x7adc, 0x79d8, 0x6b98,
-+      0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2,
-+      0x781b, 0x0068, 0x007c, 0x6820, 0xa085, 0x0004, 0x6822, 0x1078,
-+      0x34a7, 0xa6b5, 0x0800, 0x1078, 0x3323, 0x781b, 0x0067, 0x0078,
-+      0x212b, 0x2300, 0x0079, 0x2c84, 0x2c87, 0x2c89, 0x2c8b, 0x1078,
-+      0x20c8, 0x0078, 0x3311, 0xa684, 0x0400, 0x00c0, 0x2cb4, 0x79e4,
-+      0xa184, 0x0020, 0x0040, 0x2c9b, 0x78ec, 0xa084, 0x0003, 0x0040,
-+      0x2c9b, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
-+      0xfffb, 0x785a, 0x79e4, 0xa184, 0x0020, 0x0040, 0x2cac, 0x78ec,
-+      0xa084, 0x0003, 0x00c0, 0x2cb0, 0x2001, 0x0014, 0x0078, 0x295a,
-+      0xa184, 0x0007, 0x0079, 0x2cec, 0x7a90, 0xa294, 0x0007, 0x789b,
-+      0x0060, 0x79a8, 0x81ff, 0x0040, 0x2cea, 0x789b, 0x0010, 0x7ba8,
-+      0xa384, 0x0001, 0x00c0, 0x2cdb, 0x7ba8, 0x7ba8, 0xa386, 0x0001,
-+      0x00c0, 0x2cce, 0x2009, 0xfff7, 0x0078, 0x2cd4, 0xa386, 0x0003,
-+      0x00c0, 0x2cdb, 0x2009, 0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004,
-+      0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
-+      0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c,
-+      0xfeff, 0x6922, 0x0078, 0x34da, 0x260b, 0x2616, 0x2cf6, 0x2cfe,
-+      0x2cf4, 0x2cf4, 0x34da, 0x34da, 0x1078, 0x20c8, 0x6920, 0xa18c,
-+      0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x34e2, 0x6920, 0xa18c,
-+      0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078, 0x34da, 0x79e4, 0xa184,
-+      0x0030, 0x0040, 0x2d10, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x2d26,
-+      0x70a0, 0xa086, 0x0002, 0x00c0, 0x2d19, 0x2011, 0x0002, 0x0078,
-+      0x24ef, 0x7000, 0xa086, 0x0000, 0x0040, 0x212b, 0x6818, 0xa085,
-+      0x8000, 0x681a, 0x2001, 0x0014, 0x0078, 0x295a, 0xa184, 0x0007,
-+      0x0079, 0x2d2a, 0x34da, 0x34da, 0x2d32, 0x34da, 0x3535, 0x3535,
-+      0x34da, 0x34da, 0xa684, 0x0080, 0x0040, 0x2d61, 0x71c8, 0x81ff,
-+      0x0040, 0x2d61, 0xa182, 0x000d, 0x00d0, 0x2d42, 0x70cb, 0x0000,
-+      0x0078, 0x2d47, 0xa182, 0x000c, 0x70ca, 0x2009, 0x000c, 0x789b,
-+      0x0061, 0x79aa, 0x157e, 0x137e, 0x147e, 0x70cc, 0x8114, 0xa210,
-+      0x72ce, 0xa080, 0x000b, 0xad00, 0x2098, 0x20a1, 0x012b, 0x789b,
-+      0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078,
-+      0x34e2, 0xa684, 0x0400, 0x00c0, 0x2da2, 0x6820, 0xa084, 0x0001,
-+      0x0040, 0x34e2, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x2d76,
-+      0xa086, 0x0060, 0x00c0, 0x2d76, 0xa18d, 0x4000, 0xa18c, 0xfffb,
-+      0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061,
-+      0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040,
-+      0x3054, 0xa18c, 0x00f8, 0x00c0, 0x3054, 0x157e, 0x137e, 0x147e,
-+      0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b,
-+      0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882,
-+      0x0078, 0x34e2, 0x6818, 0xa084, 0x8000, 0x0040, 0x2da9, 0x681b,
-+      0x0008, 0x781b, 0x00d8, 0x0078, 0x212b, 0x2300, 0x0079, 0x2db0,
-+      0x2db5, 0x2e31, 0x2db3, 0x1078, 0x20c8, 0x7000, 0xa084, 0x0007,
-+      0x0079, 0x2dba, 0x2dc2, 0x2dc4, 0x2de9, 0x2958, 0x2dc2, 0x2133,
-+      0x2dc2, 0x2dc2, 0x1078, 0x20c8, 0x681c, 0xa084, 0x2000, 0x0040,
-+      0x2dcd, 0x6008, 0xa085, 0x0002, 0x600a, 0x6920, 0xa18d, 0x0001,
-+      0x6922, 0x6800, 0x6006, 0xa005, 0x00c0, 0x2dd7, 0x6002, 0x681c,
-+      0xa084, 0x000e, 0x0040, 0x2de3, 0x7014, 0x68ba, 0x712c, 0xa188,
-+      0x6000, 0x0078, 0x2de5, 0x2009, 0x6100, 0x2104, 0x6802, 0x2d0a,
-+      0x7156, 0x6eb6, 0xa684, 0x0060, 0x0040, 0x2e2f, 0xa684, 0x0800,
-+      0x00c0, 0x2dfd, 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898,
-+      0x68aa, 0x1078, 0x36ec, 0x0078, 0x2e2f, 0xa684, 0x0020, 0x0040,
-+      0x2e0a, 0xa006, 0x1078, 0x3a5e, 0x79d8, 0x7adc, 0x69aa, 0x6aa6,
-+      0x0078, 0x2e10, 0x1078, 0x3456, 0x69aa, 0x6aa6, 0x1078, 0x3a5e,
-+      0xa684, 0x8000, 0x0040, 0x2e2f, 0xa684, 0x7fff, 0x68b6, 0x7adc,
-+      0x79d8, 0xa684, 0x0020, 0x00c0, 0x2e27, 0x78d0, 0x801b, 0x00c8,
-+      0x2e22, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98,
-+      0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078,
-+      0x2133, 0x0078, 0x3311, 0x7033, 0x0000, 0xa282, 0x0006, 0x0050,
-+      0x2e3b, 0x1078, 0x20c8, 0x2300, 0x0079, 0x2e3e, 0x2e41, 0x2e6a,
-+      0x2e90, 0x2200, 0x0079, 0x2e44, 0x2e4a, 0x3311, 0x2e4c, 0x2e4a,
-+      0x2ebc, 0x2f0f, 0x1078, 0x20c8, 0x7003, 0x0005, 0x2001, 0x6110,
-+      0x2068, 0x703e, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000,
-+      0x0070, 0x2e5c, 0x0078, 0x2e55, 0x157f, 0xad80, 0x0009, 0x7032,
-+      0x6817, 0x0000, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003,
-+      0x0078, 0x3305, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2e77, 0x1078,
-+      0x303b, 0x1078, 0x36ec, 0x7034, 0x600a, 0x0078, 0x2e7c, 0x7000,
-+      0xa086, 0x0003, 0x0040, 0x2e71, 0x7003, 0x0005, 0x2001, 0x6110,
-+      0x2068, 0x703e, 0xad80, 0x0009, 0x7032, 0x2200, 0x0079, 0x2e88,
-+      0x3311, 0x2e8e, 0x2e8e, 0x2ebc, 0x2e8e, 0x3311, 0x1078, 0x20c8,
-+      0x7000, 0xa086, 0x0001, 0x00c0, 0x2e9d, 0x1078, 0x303b, 0x1078,
-+      0x36ec, 0x7034, 0x600a, 0x0078, 0x2ea2, 0x7000, 0xa086, 0x0003,
-+      0x0040, 0x2e97, 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e,
-+      0xad80, 0x0009, 0x7032, 0x2200, 0x0079, 0x2eae, 0x2eb6, 0x2eb4,
-+      0x2eb4, 0x2eb6, 0x2eb4, 0x2eb6, 0x1078, 0x20c8, 0x1078, 0x3333,
-+      0x781b, 0x0067, 0x0078, 0x212b, 0x7000, 0xa086, 0x0001, 0x00c0,
-+      0x2ec9, 0x1078, 0x303b, 0x1078, 0x36ec, 0x7034, 0x600a, 0x0078,
-+      0x2ece, 0x7000, 0xa086, 0x0003, 0x0040, 0x2ec3, 0x7003, 0x0002,
-+      0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f,
-+      0xa215, 0x2069, 0x6100, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005,
-+      0x0040, 0x2ee9, 0x6814, 0xa206, 0x0040, 0x2f04, 0x6800, 0x0078,
-+      0x2edc, 0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e, 0x157e,
-+      0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2ef9, 0x0078,
-+      0x2ef2, 0x157f, 0xad80, 0x0009, 0x7032, 0x6a16, 0x68b7, 0x0700,
-+      0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084,
-+      0x0c00, 0x0040, 0x2f70, 0x1078, 0x332b, 0x0078, 0x2f70, 0x7000,
-+      0xa086, 0x0001, 0x00c0, 0x2f1c, 0x1078, 0x303b, 0x1078, 0x36ec,
-+      0x7034, 0x600a, 0x0078, 0x2f21, 0x7000, 0xa086, 0x0003, 0x0040,
-+      0x2f16, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+      0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff,
-+      0xa1e8, 0x6000, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040,
-+      0x2f40, 0x6814, 0xa206, 0x0040, 0x2f5b, 0x6800, 0x0078, 0x2f33,
-+      0x7003, 0x0005, 0x2001, 0x6110, 0x2068, 0x703e, 0x157e, 0x20a9,
-+      0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2f50, 0x0078, 0x2f49,
-+      0x157f, 0xad80, 0x0009, 0x7032, 0x6a16, 0x68b7, 0x0700, 0x6823,
-+      0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00,
-+      0x0040, 0x2f70, 0xa084, 0x0800, 0x0040, 0x2f6a, 0x1078, 0x332f,
-+      0x0078, 0x2f70, 0x1078, 0x332b, 0x70bf, 0x0000, 0x0078, 0x2f70,
-+      0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080,
-+      0x3f80, 0x2060, 0x704a, 0x6000, 0x704e, 0x6004, 0x7052, 0xa684,
-+      0x0060, 0x0040, 0x2fb0, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105,
-+      0x00c0, 0x2f9e, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff,
-+      0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x2fb0, 0x1078,
-+      0x39a0, 0xa6b5, 0x2000, 0x7e5a, 0x0078, 0x2fb0, 0x68b0, 0xa31a,
-+      0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x2fb0, 0x7bd2, 0x7bda,
-+      0x7cd6, 0x7cde, 0x68b0, 0xa6b4, 0xbfff, 0x7e5a, 0x1078, 0x39d5,
-+      0x077f, 0x1078, 0x3449, 0x2009, 0x0068, 0xa684, 0x0008, 0x0040,
-+      0x2fcf, 0x78e4, 0xa084, 0x0030, 0x0040, 0x2fc7, 0x78ec, 0xa084,
-+      0x0003, 0x0040, 0x2fc7, 0x2009, 0x0067, 0x0078, 0x2fcf, 0x0f7e,
-+      0x2079, 0x3d00, 0x1078, 0x36ec, 0x0f7f, 0x0078, 0x2133, 0x791a,
-+      0x2d00, 0x703e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xa080, 0x3f80, 0x2048, 0x0078, 0x212b, 0x6020, 0xa005, 0x0040,
-+      0x2fe9, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, 0x7010,
-+      0x6026, 0x007c, 0xa006, 0x1078, 0x36ec, 0x6817, 0x0000, 0x681b,
-+      0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x0007,
-+      0x0079, 0x2ffa, 0x3002, 0x3004, 0x3004, 0x3021, 0x300c, 0x3002,
-+      0x300c, 0x3002, 0x1078, 0x20c8, 0x1078, 0x302c, 0x1078, 0x3025,
-+      0x1078, 0x1b7f, 0x0078, 0x2133, 0x70a0, 0x70a3, 0x0000, 0x70c7,
-+      0x0000, 0x0079, 0x3013, 0x301d, 0x301d, 0x301b, 0x301b, 0x301b,
-+      0x301d, 0x301b, 0x301d, 0x0079, 0x2508, 0x70a3, 0x0000, 0x0078,
-+      0x2133, 0x681b, 0x0000, 0x0078, 0x2b50, 0x6800, 0xa005, 0x00c0,
-+      0x302a, 0x6002, 0x6006, 0x007c, 0x6010, 0xa005, 0x0040, 0x3035,
-+      0x8001, 0x00d0, 0x3035, 0x1078, 0x20c8, 0x6012, 0x6008, 0xa084,
-+      0xffef, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x3041, 0x8001,
-+      0x601a, 0x007c, 0x1078, 0x355b, 0x681b, 0x0018, 0x0078, 0x3078,
-+      0x1078, 0x355b, 0x681b, 0x0019, 0x0078, 0x3078, 0x1078, 0x355b,
-+      0x681b, 0x001a, 0x0078, 0x3078, 0x1078, 0x355b, 0x681b, 0x0003,
-+      0x0078, 0x3078, 0x77b4, 0x1078, 0x3449, 0x71b8, 0xa18c, 0x00ff,
-+      0xa1e8, 0x6000, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x306a,
-+      0x0078, 0x2133, 0x6814, 0x72b4, 0xa206, 0x0040, 0x3072, 0x6800,
-+      0x0078, 0x3063, 0x6800, 0x200a, 0x681b, 0x0005, 0x70bf, 0x0000,
-+      0x1078, 0x302c, 0x6820, 0xa084, 0x0001, 0x00c0, 0x3081, 0x1078,
-+      0x3025, 0x1078, 0x303b, 0x681f, 0x0000, 0x6823, 0x0020, 0x1078,
-+      0x1b7f, 0x0078, 0x2133, 0xa282, 0x0005, 0x00c0, 0x3305, 0x78a8,
-+      0xa084, 0x00ff, 0x802f, 0x78a8, 0xa084, 0x00ff, 0xa52d, 0x78a8,
-+      0xa084, 0x00ff, 0x8037, 0x78a8, 0xa084, 0x00ff, 0xa635, 0x7cd8,
-+      0x2600, 0xa420, 0x7bdc, 0x2500, 0xa319, 0x0048, 0x3305, 0x7cda,
-+      0x7bde, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6, 0x1078, 0x3792, 0x1078,
-+      0x398f, 0x781b, 0x0065, 0x0078, 0x212b, 0xa006, 0x1078, 0x3a5e,
-+      0x781b, 0x0065, 0x0078, 0x212b, 0x78d0, 0x79d4, 0x1078, 0x39d5,
-+      0x0078, 0x212b, 0xa282, 0x0003, 0x00c0, 0x3305, 0x7da8, 0xa5ac,
-+      0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922,
-+      0xa184, 0x0100, 0x0040, 0x3122, 0xa18c, 0xfeff, 0x6922, 0xa6b4,
-+      0x00ff, 0x0040, 0x310c, 0xa682, 0x000c, 0x0048, 0x30e3, 0x0040,
-+      0x30e3, 0x2031, 0x000c, 0x852b, 0x852b, 0x1078, 0x33be, 0x0040,
-+      0x30ed, 0x1078, 0x31da, 0x0078, 0x3115, 0x1078, 0x3379, 0x0c7e,
-+      0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x31fe, 0x0c7f,
-+      0x6920, 0xa18d, 0x0100, 0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a,
-+      0xa684, 0x0400, 0x00c0, 0x3108, 0x781b, 0x0053, 0x0078, 0x212b,
-+      0x781b, 0x0067, 0x0078, 0x212b, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+      0xfff5, 0x6006, 0x1078, 0x31fe, 0x0c7f, 0x7e58, 0xa684, 0x0400,
-+      0x00c0, 0x311e, 0x781b, 0x0056, 0x0078, 0x212b, 0x781b, 0x0068,
-+      0x0078, 0x212b, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, 0x1000,
-+      0x0040, 0x3162, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c,
-+      0x0048, 0x3136, 0x0040, 0x3136, 0x2011, 0x000c, 0x2600, 0xa202,
-+      0x00c8, 0x313b, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086,
-+      0x0028, 0x00c0, 0x314b, 0xa282, 0x0019, 0x00c8, 0x3151, 0x2011,
-+      0x0019, 0x0078, 0x3151, 0xa282, 0x000c, 0x00c8, 0x3151, 0x2011,
-+      0x000c, 0x2200, 0xa502, 0x00c8, 0x3156, 0x2228, 0x1078, 0x337d,
-+      0x852b, 0x852b, 0x1078, 0x33be, 0x0040, 0x3162, 0x1078, 0x31da,
-+      0x0078, 0x3166, 0x1078, 0x3379, 0x1078, 0x31fe, 0x7858, 0xa085,
-+      0x0004, 0x785a, 0x0c7f, 0x781b, 0x0067, 0x0078, 0x212b, 0x0c7e,
-+      0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x3187, 0x6010, 0xa084,
-+      0x000f, 0x00c0, 0x3181, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f,
-+      0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x31ae, 0x68a0,
-+      0xa084, 0x0200, 0x00c0, 0x3181, 0x6208, 0xa294, 0x00ff, 0x7018,
-+      0xa086, 0x0028, 0x00c0, 0x319c, 0xa282, 0x0019, 0x00c8, 0x31a2,
-+      0x2011, 0x0019, 0x0078, 0x31a2, 0xa282, 0x000c, 0x00c8, 0x31a2,
-+      0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c,
-+      0x0048, 0x31ae, 0x0040, 0x31ae, 0x2019, 0x000c, 0x78ab, 0x0001,
-+      0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005,
-+      0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x2960,
-+      0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000,
-+      0x0078, 0x31ca, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001,
-+      0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822,
-+      0x0c7f, 0x007c, 0x0c7e, 0x7148, 0x2160, 0x2008, 0xa084, 0xfff0,
-+      0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084,
-+      0xfff8, 0xa18c, 0x0007, 0xa105, 0x78a6, 0x6016, 0x788a, 0xa6b4,
-+      0x000f, 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, 0x600e,
-+      0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, 0x7048,
-+      0x2060, 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012,
-+      0x7884, 0xa084, 0xfff0, 0x7886, 0x0c7f, 0x007c, 0xa282, 0x0002,
-+      0x00c0, 0x3305, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184,
-+      0x0200, 0x0040, 0x3253, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff,
-+      0xa282, 0x0002, 0x00c8, 0x3305, 0x1078, 0x329a, 0x1078, 0x31fe,
-+      0xa980, 0x0001, 0x200c, 0x1078, 0x3445, 0x1078, 0x316f, 0x88ff,
-+      0x0040, 0x3246, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-+      0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x3242, 0x781b, 0x0053,
-+      0x0078, 0x212b, 0x781b, 0x0067, 0x0078, 0x212b, 0x7e58, 0xa684,
-+      0x0400, 0x00c0, 0x324f, 0x781b, 0x0056, 0x0078, 0x212b, 0x781b,
-+      0x0068, 0x0078, 0x212b, 0xa282, 0x0002, 0x00c8, 0x325b, 0xa284,
-+      0x0001, 0x0040, 0x3265, 0x7148, 0xa188, 0x0000, 0x210c, 0xa18c,
-+      0x2000, 0x00c0, 0x3265, 0x2011, 0x0000, 0x1078, 0x336b, 0x1078,
-+      0x329a, 0x1078, 0x31fe, 0x7858, 0xa085, 0x0004, 0x785a, 0x781b,
-+      0x0067, 0x0078, 0x212b, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011,
-+      0x0001, 0xa084, 0x2000, 0x00c0, 0x328a, 0x6014, 0xa084, 0x0040,
-+      0x00c0, 0x3288, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x3297,
-+      0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003,
-+      0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f,
-+      0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040, 0x32a2,
-+      0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084,
-+      0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, 0xffef,
-+      0x6006, 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040,
-+      0x32bc, 0x007f, 0x0078, 0x32bf, 0x007f, 0x0078, 0x3301, 0xa684,
-+      0x0020, 0x0040, 0x3301, 0x7888, 0xa084, 0x0040, 0x0040, 0x3301,
-+      0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x32cf, 0x8000, 0xa005,
-+      0x0040, 0x32e5, 0x831b, 0x00c8, 0x32d8, 0x8001, 0x0040, 0x32fd,
-+      0xa684, 0x4000, 0x0040, 0x32e5, 0x78b8, 0x801b, 0x00c8, 0x32e1,
-+      0x8000, 0xa084, 0x003f, 0x00c0, 0x32fd, 0xa6b4, 0xbfff, 0x7e5a,
-+      0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x32f1, 0xa291,
-+      0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x3a5e, 0x781b,
-+      0x0065, 0x1078, 0x392f, 0x0078, 0x212b, 0x781b, 0x0065, 0x0078,
-+      0x212b, 0x781b, 0x0068, 0x0078, 0x212b, 0x1078, 0x3337, 0x781b,
-+      0x0067, 0x0078, 0x212b, 0x1078, 0x3323, 0x781b, 0x0067, 0x0078,
-+      0x212b, 0x6827, 0x0002, 0x1078, 0x332b, 0x78e4, 0xa084, 0x0030,
-+      0x0040, 0x2133, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2133, 0x781b,
-+      0x0067, 0x0078, 0x212b, 0x2001, 0x0005, 0x0078, 0x3339, 0x2001,
-+      0x000c, 0x0078, 0x3339, 0x2001, 0x0006, 0x0078, 0x3339, 0x2001,
-+      0x000d, 0x0078, 0x3339, 0x2001, 0x0009, 0x0078, 0x3339, 0x2001,
-+      0x0007, 0x789b, 0x007e, 0x78aa, 0xa6b5, 0x0008, 0x7e5a, 0x007c,
-+      0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0,
-+      0x3f80, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040,
-+      0x3359, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xa085, 0x0008,
-+      0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040,
-+      0x3369, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0010,
-+      0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab,
-+      0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004,
-+      0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab,
-+      0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, 0x789b,
-+      0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff,
-+      0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0,
-+      0x2001, 0x3d46, 0x2004, 0xa082, 0x0028, 0x0040, 0x33a7, 0x2021,
-+      0x342c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078, 0x33ad, 0x2021,
-+      0x3438, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064, 0x2404,
-+      0xa084, 0xfff0, 0xa106, 0x0040, 0x33bc, 0x8420, 0x2300, 0xa210,
-+      0x0070, 0x33bc, 0x0078, 0x33af, 0x157f, 0x007c, 0x157e, 0x2011,
-+      0x3d46, 0x2214, 0xa282, 0x0032, 0x0048, 0x33d2, 0x0040, 0x33d6,
-+      0x2021, 0x341e, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032,
-+      0x0078, 0x33e8, 0xa282, 0x0028, 0x0040, 0x33e0, 0x2021, 0x342c,
-+      0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064, 0x0078, 0x33e8,
-+      0x2021, 0x3438, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011, 0x0064,
-+      0x2200, 0xa502, 0x0040, 0x33f8, 0x0048, 0x33f8, 0x8420, 0x2300,
-+      0xa210, 0x0070, 0x33f5, 0x0078, 0x33e8, 0x157f, 0xa006, 0x007c,
-+      0x157f, 0xa582, 0x0064, 0x00c8, 0x3403, 0x7808, 0xa085, 0x0070,
-+      0x780a, 0x0078, 0x3403, 0x78ec, 0xa084, 0x0300, 0x0040, 0x340b,
-+      0x2404, 0x0078, 0x341c, 0x2404, 0xa09e, 0x1102, 0x00c0, 0x341c,
-+      0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048, 0x341b, 0x2001,
-+      0x1201, 0x0078, 0x341c, 0x2404, 0xa005, 0x007c, 0x1102, 0x3002,
-+      0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806,
-+      0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202,
-+      0x7202, 0x6605, 0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05,
-+      0x2202, 0x3202, 0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604,
-+      0x7804, 0x7a04, 0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046,
-+      0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003,
-+      0x8003, 0x8003, 0xa105, 0xa0e0, 0x4000, 0x007c, 0x79d8, 0x7adc,
-+      0x78d0, 0x801b, 0x00c8, 0x345d, 0x8000, 0xa084, 0x003f, 0xa108,
-+      0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3d40,
-+      0x2091, 0x8000, 0x2104, 0x0079, 0x346d, 0x34a3, 0x3477, 0x3477,
-+      0x3477, 0x3477, 0x3477, 0x3477, 0x3475, 0x1078, 0x20c8, 0x784b,
-+      0x0004, 0x7848, 0xa084, 0x0004, 0x00c0, 0x3479, 0x784b, 0x0008,
-+      0x7848, 0xa084, 0x0008, 0x00c0, 0x3480, 0x68b4, 0xa085, 0x4000,
-+      0x68b6, 0x7858, 0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080,
-+      0x00c0, 0x34a3, 0x0018, 0x34a3, 0x681c, 0xa084, 0x0020, 0x00c0,
-+      0x34a1, 0x0e7e, 0x2071, 0x3d40, 0x1078, 0x34ea, 0x0e7f, 0x0078,
-+      0x34a3, 0x781b, 0x00e4, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x0c7e,
-+      0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+      0x3f80, 0x6004, 0xa084, 0x000a, 0x00c0, 0x34d8, 0x6108, 0xa194,
-+      0xff00, 0x0040, 0x34d8, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106,
-+      0x0040, 0x34c9, 0x2001, 0x0032, 0xa106, 0x0040, 0x34cd, 0x0078,
-+      0x34d1, 0x2009, 0x0020, 0x0078, 0x34d3, 0x2009, 0x003f, 0x0078,
-+      0x34d3, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0x6006,
-+      0x0c7f, 0x007c, 0x781b, 0x0068, 0x0078, 0x212b, 0x781b, 0x0067,
-+      0x0078, 0x212b, 0x781b, 0x0056, 0x0078, 0x212b, 0x781b, 0x0053,
-+      0x0078, 0x212b, 0x2009, 0x3d1e, 0x210c, 0xa186, 0x0000, 0x0040,
-+      0x34fe, 0xa186, 0x0001, 0x0040, 0x3501, 0x2009, 0x3d35, 0x200b,
-+      0x000b, 0x70a3, 0x0001, 0x781b, 0x0047, 0x007c, 0x781b, 0x00dd,
-+      0x007c, 0x2009, 0x3d35, 0x200b, 0x000a, 0x007c, 0x2009, 0x3d1e,
-+      0x210c, 0xa186, 0x0000, 0x0040, 0x3521, 0xa186, 0x0001, 0x0040,
-+      0x351b, 0x2009, 0x3d35, 0x200b, 0x000b, 0x70a3, 0x0001, 0x781b,
-+      0x0047, 0x0078, 0x212b, 0x2009, 0x3d35, 0x200b, 0x000a, 0x0078,
-+      0x212b, 0x781b, 0x00dc, 0x0078, 0x212b, 0x781b, 0x00e4, 0x0078,
-+      0x212b, 0x781b, 0x00e3, 0x0078, 0x212b, 0x781b, 0x009f, 0x0078,
-+      0x212b, 0x781b, 0x009e, 0x0078, 0x212b, 0x6818, 0xa084, 0x8000,
-+      0x0040, 0x353c, 0x681b, 0x001d, 0x70a3, 0x0001, 0x781b, 0x0047,
-+      0x0078, 0x212b, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3559,
-+      0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005,
-+      0x78ec, 0xa084, 0x0021, 0x0040, 0x3559, 0x7808, 0xa085, 0x0002,
-+      0x780a, 0x007f, 0x007c, 0x7808, 0xa085, 0x0002, 0x780a, 0x007c,
-+      0x007e, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3561, 0x0098, 0x356c,
-+      0x007f, 0x789a, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a,
-+      0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040,
-+      0x357b, 0x0098, 0x3579, 0x007f, 0x789a, 0x78ac, 0x007e, 0x7808,
-+      0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, 0x00c0,
-+      0x2b9b, 0xa784, 0x0070, 0x0040, 0x3595, 0x0c7e, 0x2d60, 0x2f68,
-+      0x1078, 0x2073, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040,
-+      0x35a2, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2133,
-+      0x0078, 0x34da, 0xa784, 0x0004, 0x0040, 0x35d5, 0x78b8, 0xa084,
-+      0x4001, 0x0040, 0x35d5, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x2133, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0,
-+      0x35d5, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00e4,
-+      0x0078, 0x212b, 0x784b, 0x0008, 0x6818, 0xa084, 0x8000, 0x0040,
-+      0x35d1, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x35d1, 0x681b,
-+      0x0007, 0x1078, 0x34ea, 0x0078, 0x212b, 0x681b, 0x0003, 0x7858,
-+      0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b,
-+      0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x25fa, 0x0018, 0x212b,
-+      0x0078, 0x330b, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003,
-+      0x8003, 0xa080, 0x3f80, 0x2060, 0x2048, 0x704a, 0x6000, 0x704e,
-+      0x6004, 0x7052, 0x2a60, 0x007c, 0x0020, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, 0x000a,
-+      0x0014, 0x0014, 0x9848, 0x0014, 0x0014, 0x98f8, 0x98e7, 0x0014,
-+      0x0014, 0x0014, 0x0080, 0x00bf, 0x0100, 0x0402, 0x2008, 0xf880,
-+      0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0xa200, 0x8838,
-+      0x3806, 0x8839, 0x28c2, 0x9cc0, 0xa805, 0x0864, 0xa83f, 0x3008,
-+      0x28c1, 0x9cc0, 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000,
-+      0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, 0x9ca1, 0xa8f3, 0x0864,
-+      0xa82d, 0x300c, 0xa801, 0x3008, 0x28e1, 0x9ca1, 0x280e, 0xa204,
-+      0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576,
-+      0x8677, 0xa810, 0x7861, 0x883e, 0xa80d, 0x282c, 0xa205, 0x64a0,
-+      0x6de0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677,
-+      0xa801, 0x883e, 0x206b, 0x28c1, 0x9cc0, 0x2044, 0x2103, 0x20a2,
-+      0x2081, 0xa8da, 0xa207, 0x2901, 0xa80a, 0x0014, 0xa203, 0x8000,
-+      0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e,
-+      0x866f, 0x0704, 0x3008, 0x9ca1, 0x0014, 0xa202, 0x8000, 0x85a4,
-+      0x3009, 0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, 0x08e6, 0xa8f5,
-+      0xf861, 0xa8ec, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0,
-+      0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2,
-+      0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0xa206, 0x6865, 0x817e, 0x842a,
-+      0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4,
-+      0x8160, 0x842a, 0xf021, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd,
-+      0x0011, 0x20d4, 0x8822, 0x0016, 0x8000, 0x2848, 0x1011, 0xa8fc,
-+      0x3008, 0x8000, 0xa000, 0x2802, 0x1011, 0xa8fd, 0xa885, 0x3008,
-+      0x283d, 0x1011, 0xa8fd, 0xa209, 0x0017, 0x300c, 0x8000, 0x85a4,
-+      0x1de2, 0xdac1, 0x0014, 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a,
-+      0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806,
-+      0x0210, 0x9cca, 0x0704, 0x0000, 0x127e, 0x2091, 0x2200, 0x2049,
-+      0x36ec, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008, 0xa084,
-+      0xfff7, 0xa205, 0x0040, 0x36fe, 0x0078, 0x3701, 0x127f, 0x2000,
-+      0x007c, 0x7000, 0xa084, 0x0001, 0x00c0, 0x372f, 0x7108, 0x8103,
-+      0x00c8, 0x370e, 0x1078, 0x381c, 0x0078, 0x3706, 0x700c, 0xa08c,
-+      0x00ff, 0x0040, 0x372f, 0x7004, 0x8004, 0x00c8, 0x3726, 0x7014,
-+      0xa005, 0x00c0, 0x3722, 0x7010, 0xa005, 0x0040, 0x3726, 0xa102,
-+      0x00c8, 0x3706, 0x7007, 0x0010, 0x0078, 0x372f, 0x8aff, 0x0040,
-+      0x372f, 0x1078, 0x3a35, 0x00c0, 0x3729, 0x0040, 0x3706, 0x1078,
-+      0x37ac, 0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x6428, 0x84ff,
-+      0x0040, 0x3762, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3772,
-+      0x273c, 0x87fb, 0x00c0, 0x3750, 0x0048, 0x3748, 0x1078, 0x20c8,
-+      0x609c, 0xa075, 0x0040, 0x3762, 0x0078, 0x373b, 0x2039, 0x3767,
-+      0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0040,
-+      0x3762, 0x8738, 0x2704, 0xa005, 0x00c0, 0x3751, 0x709c, 0xa075,
-+      0x00c0, 0x373b, 0x007c, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011,
-+      0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015,
-+      0x001b, 0x0000, 0x0000, 0x3767, 0x3764, 0x0000, 0x0000, 0x8000,
-+      0x0000, 0x3767, 0x0000, 0x376f, 0x376c, 0x0000, 0x0000, 0x0000,
-+      0x0000, 0x376f, 0x0000, 0x376a, 0x376a, 0x0000, 0x0000, 0x8000,
-+      0x0000, 0x376a, 0x0000, 0x3770, 0x3770, 0x0000, 0x0000, 0x0000,
-+      0x0000, 0x3770, 0x127e, 0x2091, 0x2200, 0x2079, 0x3d00, 0x2071,
-+      0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2071,
-+      0x0020, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2049,
-+      0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x37ac, 0x2019, 0x0000,
-+      0x7004, 0x8004, 0x00c8, 0x37f8, 0x7007, 0x0012, 0x7108, 0x7008,
-+      0xa106, 0x00c0, 0x37b6, 0xa184, 0x01e0, 0x0040, 0x37c1, 0x1078,
-+      0x20c8, 0xa184, 0x4000, 0x00c0, 0x37b6, 0xa19c, 0x300c, 0xa386,
-+      0x2004, 0x0040, 0x37d3, 0xa386, 0x0008, 0x0040, 0x37de, 0xa386,
-+      0x200c, 0x00c0, 0x37b6, 0x7200, 0x8204, 0x0048, 0x37de, 0x730c,
-+      0xa384, 0x00ff, 0x0040, 0x37de, 0x1078, 0x20c8, 0x7007, 0x0012,
-+      0x7000, 0xa084, 0x0001, 0x00c0, 0x37f8, 0x7008, 0xa084, 0x01e0,
-+      0x00c0, 0x37f8, 0x7310, 0x7014, 0xa305, 0x0040, 0x37f8, 0x710c,
-+      0xa184, 0x0300, 0x00c0, 0x37f8, 0xa184, 0x00ff, 0x00c0, 0x37ac,
-+      0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0,
-+      0x37fc, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, 0x3801, 0x7003,
-+      0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e, 0x127e, 0x157e,
-+      0x2091, 0x2200, 0x7108, 0x1078, 0x381c, 0x157f, 0x127f, 0x2091,
-+      0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500, 0x730c, 0xa384,
-+      0x0300, 0x00c0, 0x385e, 0xa184, 0x01e0, 0x00c0, 0x3882, 0x7108,
-+      0xa184, 0x01e0, 0x00c0, 0x3882, 0x2001, 0x04fd, 0x2004, 0xa082,
-+      0x0005, 0x00c8, 0x3852, 0xa184, 0x4000, 0x00c0, 0x3827, 0xa986,
-+      0x3a5e, 0x00c0, 0x3852, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040,
-+      0x3849, 0xa386, 0x0008, 0x0040, 0x3852, 0xa386, 0x200c, 0x00c0,
-+      0x3827, 0x7200, 0x8204, 0x0048, 0x3852, 0x730c, 0xa384, 0x00ff,
-+      0x00c0, 0x385e, 0xa184, 0x0007, 0x0079, 0x3856, 0x3860, 0x3872,
-+      0x385e, 0x3872, 0x385e, 0x38be, 0x385e, 0x38bc, 0x1078, 0x20c8,
-+      0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0,
-+      0x386d, 0x2049, 0x0000, 0x0078, 0x3871, 0x1078, 0x3a35, 0x00c0,
-+      0x386d, 0x007c, 0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006,
-+      0x8aff, 0x00c0, 0x387d, 0x0078, 0x3881, 0x1078, 0x3a35, 0x00c0,
-+      0x387d, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x3885, 0x2091,
-+      0x6000, 0x00e0, 0x3889, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007,
-+      0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x3891, 0x7007, 0x0012,
-+      0x7108, 0x8103, 0x0048, 0x3896, 0x7003, 0x0000, 0x7000, 0xa005,
-+      0x00c0, 0x38aa, 0x7004, 0xa005, 0x00c0, 0x38aa, 0x700c, 0xa005,
-+      0x0040, 0x38ac, 0x0078, 0x388d, 0x2049, 0x0000, 0x1078, 0x3463,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x38b7, 0x681b, 0x0002, 0x007c,
-+      0x1078, 0x20c8, 0x1078, 0x20c8, 0x1078, 0x391a, 0x7210, 0x7114,
-+      0x700c, 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000,
-+      0x1078, 0x391a, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322,
-+      0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x38e1, 0x00c8,
-+      0x38e1, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078,
-+      0x38c8, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040,
-+      0x38ed, 0xa7ba, 0x376c, 0x0078, 0x38ef, 0xa7ba, 0x3764, 0x007f,
-+      0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012,
-+      0x1078, 0x37ac, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x390e,
-+      0x609c, 0xa005, 0x0040, 0x3917, 0x2060, 0x6004, 0xa084, 0x000f,
-+      0xa080, 0x3772, 0x203c, 0x87fb, 0x1040, 0x20c8, 0x8a51, 0x0040,
-+      0x3916, 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051,
-+      0x0000, 0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x392e,
-+      0x6000, 0xa064, 0x00c0, 0x3925, 0x2d60, 0x6004, 0xa084, 0x000f,
-+      0xa080, 0x3782, 0x203c, 0x87fb, 0x1040, 0x20c8, 0x007c, 0x127e,
-+      0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c,
-+      0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804,
-+      0xa084, 0x0008, 0x007f, 0x0040, 0x3949, 0xa0b8, 0x376c, 0x0078,
-+      0x394b, 0xa0b8, 0x3764, 0x7e08, 0xa6b5, 0x000c, 0x681c, 0xa084,
-+      0x0040, 0x0040, 0x3955, 0xa6b5, 0x0001, 0x7007, 0x0004, 0x7004,
-+      0xa084, 0x0004, 0x00c0, 0x3957, 0x2400, 0xa305, 0x00c0, 0x3962,
-+      0x0078, 0x3988, 0x2c58, 0x2704, 0x6104, 0xac60, 0x6000, 0xa400,
-+      0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008, 0x0040, 0x3978,
-+      0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, 0x0000, 0x7026,
-+      0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, 0xa203, 0x7016,
-+      0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x38fb, 0x0078, 0x398a,
-+      0x1078, 0x3a35, 0x00c0, 0x3988, 0x127f, 0x2000, 0x007c, 0x127e,
-+      0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084,
-+      0x0004, 0x00c0, 0x3996, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c,
-+      0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x39a0, 0x7007,
-+      0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x39a9, 0x7e08, 0xa6b5,
-+      0x000c, 0x681c, 0xa084, 0x0020, 0x00c0, 0x39b8, 0xa6b5, 0x0001,
-+      0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x3772,
-+      0x273c, 0x87fb, 0x00c0, 0x39ce, 0x0048, 0x39c8, 0x1078, 0x20c8,
-+      0x689c, 0xa065, 0x0040, 0x39d2, 0x0078, 0x39bb, 0x1078, 0x3a35,
-+      0x00c0, 0x39ce, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+      0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5,
-+      0x000c, 0x681c, 0xa084, 0x0040, 0x0040, 0x39e8, 0xa6b5, 0x0001,
-+      0x2049, 0x39d5, 0x6828, 0xa055, 0x0040, 0x3a32, 0x2d70, 0x2e60,
-+      0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3772, 0x273c, 0x87fb, 0x00c0,
-+      0x3a04, 0x0048, 0x39fd, 0x1078, 0x20c8, 0x709c, 0xa075, 0x2060,
-+      0x0040, 0x3a32, 0x0078, 0x39f0, 0x2704, 0xae68, 0x6808, 0xa422,
-+      0x680c, 0xa31b, 0x0048, 0x3a1f, 0x8a51, 0x00c0, 0x3a11, 0x1078,
-+      0x20c8, 0x8738, 0x2704, 0xa005, 0x00c0, 0x3a05, 0x709c, 0xa075,
-+      0x2060, 0x0040, 0x3a32, 0x2039, 0x3764, 0x0078, 0x39f0, 0x8422,
-+      0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c,
-+      0x2300, 0xa11b, 0x00c8, 0x3a2e, 0x1078, 0x20c8, 0x2071, 0x0020,
-+      0x0078, 0x3955, 0x127f, 0x2000, 0x007c, 0x7008, 0xa084, 0x0003,
-+      0xa086, 0x0003, 0x0040, 0x3a5d, 0x2704, 0xac08, 0x2104, 0x701a,
-+      0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012, 0x8108, 0x2104,
-+      0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x3a54, 0x8108, 0x2104,
-+      0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010,
-+      0xa085, 0x0001, 0x7006, 0x1078, 0x38fb, 0x007c, 0x127e, 0x007e,
-+      0x0d7e, 0x2091, 0x2200, 0x2049, 0x3a5e, 0x0d7f, 0x087f, 0x7108,
-+      0xa184, 0x0003, 0x00c0, 0x3a72, 0x6828, 0xa005, 0x0040, 0x3a80,
-+      0x0078, 0x3701, 0x00a0, 0x3a79, 0x7108, 0x1078, 0x381c, 0x0078,
-+      0x3a67, 0x7007, 0x0010, 0x00a0, 0x3a7b, 0x7108, 0x1078, 0x381c,
-+      0x7008, 0xa086, 0x0008, 0x00c0, 0x3a67, 0x7000, 0xa005, 0x00c0,
-+      0x3a67, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+      0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, 0x2200,
-+      0x0d7f, 0x2049, 0x3a90, 0xad80, 0x0011, 0x20a0, 0x2099, 0x0031,
-+      0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002,
-+      0x7003, 0x0001, 0x0040, 0x3aaf, 0x8000, 0x80ac, 0x53a5, 0x7007,
-+      0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3ab1, 0x0c7f, 0x2049,
-+      0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000,
-+      0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78c0, 0xa005, 0x00c0,
-+      0x3ad8, 0x798c, 0x70d0, 0xa106, 0x00c0, 0x3ad8, 0x7804, 0xa005,
-+      0x0040, 0x3ad8, 0x7807, 0x0000, 0x0068, 0x3ad8, 0x2091, 0x4080,
-+      0x7820, 0x8001, 0x7822, 0x00c0, 0x3b5d, 0x7824, 0x7822, 0x783c,
-+      0xa005, 0x0040, 0x3ae9, 0x8001, 0x783e, 0x00c0, 0x3ae9, 0x1078,
-+      0x3c87, 0x78ec, 0xa005, 0x0040, 0x3b0d, 0x78d4, 0xa005, 0x00c0,
-+      0x3b0d, 0x3a10, 0xa284, 0x0002, 0x00c0, 0x3afd, 0x78d7, 0x0007,
-+      0x2009, 0xff01, 0x200a, 0x0078, 0x3b0d, 0xa284, 0x0001, 0x00c0,
-+      0x3b05, 0x78eb, 0x0000, 0x0078, 0x3b0d, 0x78e8, 0xa005, 0x00c0,
-+      0x3b0d, 0x78d7, 0x0008, 0x78eb, 0x0001, 0x2069, 0x3d40, 0x6800,
-+      0xa084, 0x0007, 0x0040, 0x3b24, 0xa086, 0x0002, 0x0040, 0x3b24,
-+      0x6830, 0xa00d, 0x0040, 0x3b24, 0x2104, 0xa005, 0x0040, 0x3b24,
-+      0x8001, 0x200a, 0x0040, 0x3bff, 0x7848, 0xa005, 0x0040, 0x3b2e,
-+      0x8001, 0x784a, 0x00c0, 0x3b2e, 0x1078, 0x1f05, 0x68c4, 0xa005,
-+      0x0040, 0x3b3a, 0x8001, 0x68c6, 0x00c0, 0x3b3a, 0x68a3, 0x0000,
-+      0x68a7, 0x0001, 0x2061, 0x4000, 0x2009, 0x0002, 0x20a9, 0x0100,
-+      0x6034, 0xa005, 0x0040, 0x3b50, 0x8001, 0x6036, 0x00c0, 0x3b50,
-+      0x6010, 0xa005, 0x0040, 0x3b50, 0x017e, 0x1078, 0x1f05, 0x017f,
-+      0xace0, 0x0010, 0x0070, 0x3b56, 0x0078, 0x3b40, 0x8109, 0x0040,
-+      0x3b5d, 0x20a9, 0x0100, 0x0078, 0x3b40, 0x1078, 0x3b64, 0x1078,
-+      0x3b89, 0x2091, 0x8001, 0x007c, 0x7834, 0x8001, 0x7836, 0x00c0,
-+      0x3b88, 0x7838, 0x7836, 0x2091, 0x8000, 0x7844, 0xa005, 0x00c0,
-+      0x3b73, 0x2001, 0x0101, 0x8001, 0x7846, 0xa080, 0x6000, 0x2040,
-+      0x2004, 0xa065, 0x0040, 0x3b88, 0x6024, 0xa005, 0x0040, 0x3b84,
-+      0x8001, 0x6026, 0x0040, 0x3bb8, 0x6000, 0x2c40, 0x0078, 0x3b79,
-+      0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, 0x3bb7, 0x782c, 0x782a,
-+      0x7830, 0xa005, 0x00c0, 0x3b96, 0x2001, 0x0200, 0x8001, 0x7832,
-+      0x8003, 0x8003, 0x8003, 0x8003, 0xa090, 0x4000, 0xa298, 0x0002,
-+      0x2304, 0xa084, 0x0008, 0x0040, 0x3bb7, 0xa290, 0x0009, 0x2204,
-+      0xa005, 0x0040, 0x3baf, 0x8001, 0x2012, 0x00c0, 0x3bb7, 0x2304,
-+      0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, 0x1078, 0x1f05, 0x007c,
-+      0x2069, 0x3d40, 0x6800, 0xa005, 0x0040, 0x3bc2, 0x683c, 0xac06,
-+      0x0040, 0x3bff, 0x601b, 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e,
-+      0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042,
-+      0x6714, 0x6fb6, 0x1078, 0x19f0, 0x6818, 0xa005, 0x0040, 0x3bda,
-+      0x8001, 0x681a, 0x6808, 0xa084, 0xffef, 0x680a, 0x6810, 0x8001,
-+      0x00d0, 0x3be4, 0x1078, 0x20c8, 0x6812, 0x602f, 0x0000, 0x6033,
-+      0x0000, 0x2c68, 0x1078, 0x1b7f, 0x2069, 0x3d40, 0x7944, 0xa184,
-+      0x0100, 0x2001, 0x0006, 0x68a2, 0x00c0, 0x3bfa, 0x69ba, 0x2001,
-+      0x0004, 0x68a2, 0x1078, 0x1f00, 0x2091, 0x8001, 0x007c, 0x2009,
-+      0x3d4f, 0x2164, 0x2069, 0x0100, 0x1078, 0x2073, 0x601b, 0x0006,
-+      0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+      0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830, 0xa084,
-+      0x0040, 0x0040, 0x3c3b, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+      0xa084, 0x0004, 0x0040, 0x3c28, 0x0070, 0x3c28, 0x0078, 0x3c1f,
-+      0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040,
-+      0x3c35, 0x0070, 0x3c35, 0x0078, 0x3c2c, 0x20a9, 0x00fa, 0x0070,
-+      0x3c3b, 0x0078, 0x3c37, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b,
-+      0x0047, 0x2009, 0x3d68, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091,
-+      0x8001, 0x007c, 0x2079, 0x3d00, 0x1078, 0x3c75, 0x1078, 0x3c59,
-+      0x1078, 0x3c67, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000,
-+      0x007c, 0x2019, 0x0003, 0x2011, 0x3d46, 0x2204, 0xa086, 0x003c,
-+      0x0040, 0x3c64, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019,
-+      0x0039, 0x2011, 0x3d46, 0x2204, 0xa086, 0x003c, 0x0040, 0x3c72,
-+      0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, 0x2011,
-+      0x3d46, 0x2204, 0xa086, 0x003c, 0x0040, 0x3c80, 0x2019, 0x2626,
-+      0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, 0x2069,
-+      0x3d40, 0x6a40, 0xa285, 0x0000, 0x0040, 0x3cce, 0x6944, 0xa080,
-+      0x3d80, 0x2164, 0x6304, 0x83ff, 0x00c0, 0x3ca1, 0x8211, 0x0040,
-+      0x3ca4, 0x8108, 0xa11a, 0x0048, 0x3c91, 0x2009, 0x3d80, 0x0078,
-+      0x3c91, 0x7940, 0x793e, 0x007c, 0x2011, 0x0002, 0x2039, 0x0000,
-+      0x20a9, 0x0100, 0x1078, 0x19f0, 0x2d00, 0xa088, 0x0002, 0x2168,
-+      0x682b, 0x0000, 0x682f, 0x0000, 0x2104, 0xa085, 0x0040, 0x200a,
-+      0x2100, 0xa088, 0x0010, 0x0070, 0x3cbf, 0x0078, 0x3caf, 0x8211,
-+      0x0040, 0x3cc6, 0x20a9, 0x0100, 0x0078, 0x3caf, 0x2009, 0x3d51,
-+      0x200b, 0x3d7f, 0x2009, 0x3d50, 0x200b, 0x0000, 0x007c, 0x4de2
-+};
-+#else
-+/************************************************************************
-+ *                                                                    *
-+ *            --- ISP1040 Initiator/Target Firmware ---               *
-+ *                        32 LUN Support                              *
-+ *                                                                    *
-+ ************************************************************************/
-+/*
-+ *    Firmware Version 7.65.00 (14:17 Jul 20, 1999)
-+ */
-+static const u_int16_t isp_1040_risc_code[] = {
-+      0x0078, 0x103a, 0x0000, 0x4057, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+      0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+      0x3130, 0x3230, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+      0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x372e, 0x3635,
-+      0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+      0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+      0x3031, 0x2024, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x0048,
-+      0x1045, 0x0038, 0x104b, 0x0078, 0x1047, 0x0028, 0x104b, 0x20b9,
-+      0x1212, 0x0078, 0x104d, 0x20b9, 0x2222, 0x20c1, 0x0008, 0x2071,
-+      0x0010, 0x70c3, 0x0004, 0x20c9, 0x77ff, 0x2089, 0x1186, 0x70c7,
-+      0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0007, 0x3f00,
-+      0x70d6, 0x20c1, 0x0008, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100,
-+      0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, 0x206b, 0x0a0a, 0xaddc,
-+      0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114, 0xa286, 0xa5a5, 0x0040,
-+      0x10bf, 0xa386, 0x000f, 0x0040, 0x1085, 0x2c6a, 0x2a5a, 0x20c1,
-+      0x0000, 0x2019, 0x000f, 0x0078, 0x1065, 0x2c6a, 0x2a5a, 0x20c1,
-+      0x0008, 0x2009, 0x7fff, 0x2148, 0x2944, 0x204b, 0x0a0a, 0xa9bc,
-+      0x3fff, 0x2734, 0x203b, 0x5050, 0x2114, 0xa286, 0x0a0a, 0x0040,
-+      0x10a9, 0x284a, 0x263a, 0x20c1, 0x0004, 0x2009, 0x3fff, 0x2134,
-+      0x200b, 0x5050, 0x2114, 0xa286, 0x5050, 0x0040, 0x10aa, 0x0078,
-+      0x118e, 0x284a, 0x263a, 0x98c0, 0xa188, 0x1000, 0x212c, 0x200b,
-+      0xa5a5, 0x2114, 0xa286, 0xa5a5, 0x0040, 0x10bc, 0x250a, 0xa18a,
-+      0x1000, 0x98c1, 0x0078, 0x10c1, 0x250a, 0x0078, 0x10c1, 0x2c6a,
-+      0x2a5a, 0x2130, 0xa18a, 0x0040, 0x2128, 0xa1a2, 0x5100, 0x8424,
-+      0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0xa192, 0x7800, 0x2009,
-+      0x0000, 0x2001, 0x0031, 0x1078, 0x1cba, 0x2218, 0x2079, 0x5100,
-+      0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109,
-+      0x00c0, 0x10dc, 0x7ef2, 0x8528, 0x7de6, 0x7cea, 0x7bee, 0x7883,
-+      0x0000, 0x2031, 0x0030, 0x78cf, 0x0101, 0x780b, 0x0002, 0x780f,
-+      0x0002, 0x784f, 0x0003, 0x2069, 0x5140, 0x2001, 0x04fd, 0x2004,
-+      0xa082, 0x0005, 0x0048, 0x1104, 0x0038, 0x1100, 0x0078, 0x1108,
-+      0x681b, 0x003c, 0x0078, 0x110a, 0x00a8, 0x1108, 0x681b, 0x003c,
-+      0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008,
-+      0x6813, 0x0005, 0x6823, 0x0000, 0x6827, 0x0006, 0x6817, 0x0008,
-+      0x682b, 0x0000, 0x681f, 0x0019, 0x2069, 0x5380, 0x2011, 0x0020,
-+      0x2009, 0x0010, 0x680b, 0x080c, 0x680f, 0x0019, 0x6803, 0xfd00,
-+      0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004,
-+      0x8109, 0x00c0, 0x1122, 0x2069, 0x5400, 0x2009, 0x0002, 0x20a9,
-+      0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bf0, 0xa386, 0xfeff,
-+      0x00c0, 0x1148, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078, 0x114c,
-+      0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x0070, 0x1152,
-+      0x0078, 0x1139, 0x8109, 0x00c0, 0x1137, 0x1078, 0x220a, 0x1078,
-+      0x482c, 0x1078, 0x1963, 0x1078, 0x4d22, 0x3200, 0xa085, 0x000d,
-+      0x2090, 0x70c3, 0x0000, 0x0090, 0x116c, 0x70c0, 0xa086, 0x0002,
-+      0x00c0, 0x116c, 0x1078, 0x1284, 0x1078, 0x1196, 0x78cc, 0xa005,
-+      0x00c0, 0x117a, 0x1078, 0x1ce3, 0x0010, 0x1180, 0x0068, 0x1180,
-+      0x1078, 0x20e9, 0x0010, 0x1180, 0x0068, 0x1180, 0x1078, 0x1a48,
-+      0x00e0, 0x116c, 0x1078, 0x4ba9, 0x0078, 0x116c, 0x118e, 0x1190,
-+      0x240b, 0x240b, 0x48ad, 0x48ad, 0x240b, 0x240b, 0x0078, 0x118e,
-+      0x0078, 0x1190, 0x0078, 0x1192, 0x0078, 0x1194, 0x0068, 0x1201,
-+      0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1201, 0x7814,
-+      0xa005, 0x00c0, 0x11a7, 0x0010, 0x1202, 0x0078, 0x1201, 0x2009,
-+      0x515b, 0x2104, 0xa005, 0x00c0, 0x1201, 0x2009, 0x5164, 0x200b,
-+      0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11cc, 0x7816, 0x2009,
-+      0x5162, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca,
-+      0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce,
-+      0x1078, 0x1948, 0x0078, 0x11ff, 0x7814, 0xa086, 0x0018, 0x00c0,
-+      0x11d3, 0x1078, 0x165a, 0x7817, 0x0000, 0x2009, 0x5162, 0x2104,
-+      0xa065, 0x0040, 0x11ef, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x19b3,
-+      0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009, 0x000c, 0x6007,
-+      0x0103, 0x1078, 0x1924, 0x00c0, 0x11fb, 0x1078, 0x1948, 0x2009,
-+      0x5162, 0x200b, 0x0000, 0x2009, 0x515c, 0x2104, 0x200b, 0x0000,
-+      0xa005, 0x0040, 0x11ff, 0x2001, 0x4005, 0x0078, 0x1286, 0x0078,
-+      0x1284, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000,
-+      0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1252, 0x2038,
-+      0x0079, 0x1212, 0x1284, 0x12e5, 0x12a9, 0x12fe, 0x130d, 0x1313,
-+      0x12a0, 0x1748, 0x1317, 0x1298, 0x12ad, 0x12af, 0x12b1, 0x12b3,
-+      0x174d, 0x1298, 0x1329, 0x1360, 0x1672, 0x1742, 0x12b5, 0x1591,
-+      0x15ad, 0x15c9, 0x15f4, 0x154a, 0x1558, 0x156c, 0x1580, 0x13df,
-+      0x1298, 0x138d, 0x1393, 0x1398, 0x139d, 0x13a3, 0x13a8, 0x13ad,
-+      0x13b2, 0x13b7, 0x13bb, 0x13d0, 0x13dc, 0x1298, 0x1298, 0x1298,
-+      0x1298, 0x13eb, 0x13f4, 0x1403, 0x1429, 0x1433, 0x143a, 0x1480,
-+      0x148f, 0x149e, 0x14b0, 0x152a, 0x153a, 0x1298, 0x1298, 0x1298,
-+      0x1298, 0x153f, 0xa0bc, 0xffa0, 0x00c0, 0x1298, 0x2038, 0xa084,
-+      0x001f, 0x0079, 0x125b, 0x1786, 0x1789, 0x1799, 0x1298, 0x1298,
-+      0x18df, 0x18fc, 0x1298, 0x1298, 0x1298, 0x1900, 0x1908, 0x1298,
-+      0x1298, 0x1298, 0x1298, 0x12db, 0x12f4, 0x131f, 0x1356, 0x1668,
-+      0x1764, 0x1778, 0x1298, 0x1829, 0x190e, 0x18bb, 0x18c5, 0x18c9,
-+      0x18d7, 0x1298, 0x1298, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078,
-+      0x1286, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068,
-+      0x1287, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x00e0,
-+      0x128f, 0x00e0, 0x1291, 0x0068, 0x1291, 0x2091, 0x4080, 0x007c,
-+      0x70c3, 0x4001, 0x0078, 0x1287, 0x70c3, 0x4006, 0x0078, 0x1287,
-+      0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078,
-+      0x1284, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x1284, 0x0078,
-+      0x1284, 0x0078, 0x1284, 0x0078, 0x1284, 0x2091, 0x8000, 0x70c3,
-+      0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
-+      0x0007, 0x3f00, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031,
-+      0x0030, 0x2059, 0x1000, 0x2029, 0x0457, 0x2051, 0x0470, 0x2061,
-+      0x0472, 0x20b9, 0xffff, 0x20c1, 0x0000, 0x2091, 0x5000, 0x2091,
-+      0x4080, 0x0078, 0x0455, 0x1078, 0x1b53, 0x00c0, 0x129c, 0x75d8,
-+      0x74dc, 0x75da, 0x74de, 0x0078, 0x12e8, 0x2029, 0x0000, 0x2520,
-+      0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1a8d, 0x0040, 0x1284,
-+      0x70c3, 0x4002, 0x0078, 0x1284, 0x1078, 0x1b53, 0x00c0, 0x129c,
-+      0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1301, 0x2029, 0x0000,
-+      0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1aed, 0x0040,
-+      0x1284, 0x70c3, 0x4002, 0x0078, 0x1284, 0x71c4, 0x70c8, 0x2114,
-+      0x200a, 0x0078, 0x1282, 0x71c4, 0x2114, 0x0078, 0x1282, 0x70c7,
-+      0x0007, 0x70cb, 0x0041, 0x70cf, 0x0000, 0x0078, 0x1284, 0x1078,
-+      0x1b53, 0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078,
-+      0x132c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0,
-+      0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x1350, 0x8001,
-+      0x7892, 0xa084, 0xfc00, 0x0040, 0x1345, 0x78cc, 0xa085, 0x0001,
-+      0x78ce, 0x2001, 0x4005, 0x0078, 0x1286, 0x7a9a, 0x7b9e, 0x7da2,
-+      0x7ea6, 0x7c96, 0x78cc, 0xa084, 0xfffc, 0x78ce, 0x0078, 0x1354,
-+      0x78cc, 0xa085, 0x0001, 0x78ce, 0x0078, 0x1284, 0x1078, 0x1b53,
-+      0x00c0, 0x129c, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1363,
-+      0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6,
-+      0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x1387, 0x8001, 0x78ae,
-+      0xa084, 0xfc00, 0x0040, 0x137c, 0x78cc, 0xa085, 0x0100, 0x78ce,
-+      0x2001, 0x4005, 0x0078, 0x1286, 0x7ab6, 0x7bba, 0x7dbe, 0x7ec2,
-+      0x7cb2, 0x78cc, 0xa084, 0xfcff, 0x78ce, 0x0078, 0x138b, 0x78cc,
-+      0xa085, 0x0100, 0x78ce, 0x0078, 0x1284, 0x2009, 0x5161, 0x210c,
-+      0x7aec, 0x0078, 0x1282, 0x2009, 0x5141, 0x210c, 0x0078, 0x1283,
-+      0x2009, 0x5142, 0x210c, 0x0078, 0x1283, 0x2061, 0x5140, 0x610c,
-+      0x6210, 0x0078, 0x1282, 0x2009, 0x5145, 0x210c, 0x0078, 0x1283,
-+      0x2009, 0x5146, 0x210c, 0x0078, 0x1283, 0x2009, 0x5148, 0x210c,
-+      0x0078, 0x1283, 0x2009, 0x5149, 0x210c, 0x0078, 0x1283, 0x7908,
-+      0x7a0c, 0x0078, 0x1282, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003,
-+      0x8003, 0x8003, 0xa0e8, 0x5380, 0x6a00, 0x6804, 0xa084, 0x0008,
-+      0x0040, 0x13cd, 0x6b08, 0x0078, 0x13ce, 0x6b0c, 0x0078, 0x1281,
-+      0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091,
-+      0x8001, 0x2708, 0x0078, 0x1281, 0x794c, 0x0078, 0x1283, 0x77c4,
-+      0x1078, 0x1973, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x2091,
-+      0x8001, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x127c,
-+      0x1078, 0x22e2, 0x0078, 0x1281, 0x71c4, 0xa182, 0x0010, 0x00c8,
-+      0x127c, 0x2011, 0x5141, 0x2204, 0x007e, 0x2112, 0x1078, 0x229b,
-+      0x017f, 0x0078, 0x1283, 0x71c4, 0x2011, 0x1421, 0x20a9, 0x0008,
-+      0x2204, 0xa106, 0x0040, 0x1413, 0x8210, 0x0070, 0x1411, 0x0078,
-+      0x1408, 0x0078, 0x127c, 0xa292, 0x1421, 0x027e, 0x2011, 0x5142,
-+      0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x22a7, 0x017f, 0x0078,
-+      0x1283, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032,
-+      0x004b, 0x2061, 0x5140, 0x610c, 0x6210, 0x70c4, 0x600e, 0x70c8,
-+      0x6012, 0x0078, 0x1282, 0x2061, 0x5140, 0x6114, 0x70c4, 0x6016,
-+      0x0078, 0x1283, 0x2061, 0x5140, 0x71c4, 0x2011, 0x0004, 0x601f,
-+      0x0019, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x145b, 0x2011,
-+      0x0005, 0x601f, 0x0019, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040,
-+      0x145b, 0x2011, 0x0006, 0x601f, 0x000c, 0x2019, 0x2222, 0xa186,
-+      0x003c, 0x00c0, 0x127c, 0x6018, 0x007e, 0x611a, 0x7800, 0xa084,
-+      0x0001, 0x00c0, 0x1476, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+      0x0048, 0x146e, 0x0038, 0x1472, 0x0078, 0x1476, 0x0028, 0x1472,
-+      0x0078, 0x1476, 0x2019, 0x2222, 0x0078, 0x1478, 0x2019, 0x1212,
-+      0x23b8, 0x1078, 0x22b8, 0x1078, 0x4d22, 0x017f, 0x0078, 0x1283,
-+      0x71c4, 0xa184, 0xffcf, 0x00c0, 0x127c, 0x2011, 0x5148, 0x2204,
-+      0x2112, 0x007e, 0x1078, 0x22da, 0x017f, 0x0078, 0x1283, 0x71c4,
-+      0xa182, 0x0010, 0x00c8, 0x127c, 0x2011, 0x5149, 0x2204, 0x007e,
-+      0x2112, 0x1078, 0x22c9, 0x017f, 0x0078, 0x1283, 0x71c4, 0x72c8,
-+      0xa184, 0xfffd, 0x00c0, 0x127b, 0xa284, 0xfffd, 0x00c0, 0x127b,
-+      0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e, 0x0078, 0x1282,
-+      0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8,
-+      0x5380, 0x2019, 0x0000, 0x72c8, 0xa284, 0x0080, 0x0040, 0x14c6,
-+      0x6c14, 0x84ff, 0x00c0, 0x14c6, 0x6817, 0x0040, 0xa284, 0x0040,
-+      0x0040, 0x14d0, 0x6c10, 0x84ff, 0x00c0, 0x14d0, 0x6813, 0x0001,
-+      0x6800, 0x007e, 0xa226, 0x0040, 0x14f3, 0x6a02, 0xa484, 0x2000,
-+      0x0040, 0x14dc, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x14e2,
-+      0xa39d, 0x0008, 0xa484, 0x4000, 0x0040, 0x14f3, 0x810f, 0xa284,
-+      0x4000, 0x0040, 0x14ef, 0x1078, 0x22fc, 0x0078, 0x14f3, 0x1078,
-+      0x22ee, 0x0078, 0x14f3, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1522,
-+      0xa2a4, 0x00ff, 0x2061, 0x5140, 0x6118, 0xa186, 0x0028, 0x0040,
-+      0x1509, 0xa186, 0x0032, 0x0040, 0x150f, 0xa186, 0x003c, 0x0040,
-+      0x1515, 0xa482, 0x0064, 0x0048, 0x151f, 0x0078, 0x1519, 0xa482,
-+      0x0050, 0x0048, 0x151f, 0x0078, 0x1519, 0xa482, 0x0043, 0x0048,
-+      0x151f, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x127d, 0x6a0a,
-+      0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4,
-+      0x0078, 0x1281, 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a14,
-+      0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708,
-+      0x0078, 0x1281, 0x70c4, 0x794c, 0x784e, 0x0078, 0x1283, 0x71c4,
-+      0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x127c, 0x1078, 0x230a,
-+      0x0078, 0x1281, 0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a08,
-+      0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282,
-+      0x77c4, 0x1078, 0x1973, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9,
-+      0x6a0a, 0x6804, 0xa005, 0x0040, 0x1567, 0x1078, 0x21d2, 0x2091,
-+      0x8001, 0x2708, 0x0078, 0x1282, 0x77c4, 0x1078, 0x1973, 0x2091,
-+      0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040,
-+      0x157b, 0x1078, 0x21d2, 0x2091, 0x8001, 0x2708, 0x0078, 0x1282,
-+      0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091,
-+      0x8000, 0x1078, 0x1980, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078,
-+      0x1282, 0x77c4, 0x72c8, 0x73cc, 0x77c6, 0x72ca, 0x73ce, 0x1078,
-+      0x19e1, 0x00c0, 0x15a9, 0x6818, 0xa005, 0x0040, 0x15a9, 0x2708,
-+      0x1078, 0x231a, 0x00c0, 0x15a9, 0x7817, 0x0015, 0x2091, 0x8001,
-+      0x007c, 0x2091, 0x8001, 0x0078, 0x1284, 0x77c4, 0x77c6, 0x2041,
-+      0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+      0x1980, 0x2061, 0x5140, 0x606f, 0x0003, 0x6782, 0x6093, 0x000f,
-+      0x6073, 0x0000, 0x7817, 0x0016, 0x1078, 0x21d2, 0x2091, 0x8001,
-+      0x007c, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2091,
-+      0x8000, 0x2061, 0x5140, 0x606f, 0x0002, 0x6073, 0x0000, 0x6782,
-+      0x6093, 0x000f, 0x7817, 0x0017, 0x1078, 0x21d2, 0x2091, 0x8001,
-+      0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x2091, 0x8000,
-+      0x1078, 0x1980, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0,
-+      0x15e8, 0x2091, 0x8001, 0x007c, 0x78cc, 0xa084, 0x0003, 0x00c0,
-+      0x1618, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+      0x0008, 0x1078, 0x1973, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a,
-+      0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1601, 0xa7bc,
-+      0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1601,
-+      0x2091, 0x8000, 0x2069, 0x0100, 0x6830, 0xa084, 0x0040, 0x0040,
-+      0x1641, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004,
-+      0x0040, 0x162e, 0x0070, 0x162e, 0x0078, 0x1625, 0x684b, 0x0009,
-+      0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040, 0x163b, 0x0070,
-+      0x163b, 0x0078, 0x1632, 0x20a9, 0x00fa, 0x0070, 0x1641, 0x0078,
-+      0x163d, 0x2079, 0x5100, 0x7817, 0x0018, 0x2061, 0x5140, 0x606f,
-+      0x0001, 0x6073, 0x0000, 0x6093, 0x000f, 0x78cc, 0xa085, 0x0002,
-+      0x78ce, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0048, 0x2091,
-+      0x8001, 0x007c, 0x78cc, 0xa084, 0xfffd, 0x78ce, 0xa084, 0x0001,
-+      0x00c0, 0x1664, 0x1078, 0x1a2b, 0x71c4, 0x71c6, 0x794a, 0x007c,
-+      0x1078, 0x1b53, 0x00c0, 0x129c, 0x75d8, 0x74dc, 0x75da, 0x74de,
-+      0x0078, 0x1675, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc,
-+      0x71c6, 0x73ca, 0x72ce, 0x2079, 0x5100, 0x2091, 0x8000, 0x1078,
-+      0x192e, 0x2091, 0x8001, 0x0040, 0x172c, 0x20a9, 0x0005, 0x20a1,
-+      0x5118, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0020,
-+      0x1078, 0x1929, 0x0040, 0x1698, 0x1078, 0x1948, 0x0078, 0x172c,
-+      0x6004, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x16fb, 0x0c7e,
-+      0x2c68, 0x2091, 0x8000, 0x1078, 0x192e, 0x2091, 0x8001, 0x0040,
-+      0x16cc, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x16a0, 0x609f, 0x0000,
-+      0x0c7f, 0x0c7e, 0x7218, 0x731c, 0x7420, 0x7524, 0x2c68, 0x689c,
-+      0xa065, 0x0040, 0x16fa, 0x2009, 0x0020, 0x1078, 0x1929, 0x00c0,
-+      0x16e3, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x16cc,
-+      0x2d00, 0x6002, 0x0078, 0x16b2, 0x0c7f, 0x0c7e, 0x609c, 0x2060,
-+      0x1078, 0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009,
-+      0x000c, 0x6008, 0xa085, 0x0200, 0x600a, 0x1078, 0x1924, 0x1078,
-+      0x1948, 0x0078, 0x172c, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078,
-+      0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1730, 0x2009, 0x000c,
-+      0x6007, 0x0103, 0x601b, 0x0003, 0x1078, 0x1924, 0x1078, 0x1948,
-+      0x0078, 0x172c, 0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091,
-+      0x8000, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x5140, 0x706f, 0x0005,
-+      0x7073, 0x0000, 0x7376, 0x727a, 0x747e, 0x7082, 0x7087, 0x0000,
-+      0x2c00, 0x708a, 0x708f, 0x0000, 0xa02e, 0x2530, 0x611c, 0x61a2,
-+      0xa184, 0x0060, 0x0040, 0x171e, 0x1078, 0x47c2, 0x0e7f, 0x6596,
-+      0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x1078,
-+      0x21d2, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1287,
-+      0x20a9, 0x0005, 0x2099, 0x5118, 0x2091, 0x8000, 0x530a, 0x2091,
-+      0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+      0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078, 0x1284,
-+      0x71c4, 0x71c6, 0x2168, 0x0078, 0x174f, 0x2069, 0x1000, 0x690c,
-+      0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1751, 0xa285,
-+      0x0000, 0x00c0, 0x175f, 0x70c3, 0x4000, 0x0078, 0x1761, 0x70c3,
-+      0x4003, 0x70ca, 0x0078, 0x1287, 0x2011, 0x5167, 0x220c, 0x70c4,
-+      0x8003, 0x0048, 0x1771, 0x1078, 0x3b7f, 0xa184, 0x7fff, 0x0078,
-+      0x1775, 0x1078, 0x3b72, 0xa185, 0x8000, 0x2012, 0x0078, 0x1283,
-+      0x71c4, 0x1078, 0x3b69, 0x6100, 0x2001, 0x5167, 0x2004, 0xa084,
-+      0x8000, 0xa10d, 0x6204, 0x6308, 0x0078, 0x1281, 0x79e4, 0x0078,
-+      0x1283, 0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9, 0x0004,
-+      0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x0078,
-+      0x1284, 0x70c4, 0x2068, 0x2079, 0x5100, 0x2091, 0x8000, 0x1078,
-+      0x192e, 0x2091, 0x8001, 0x0040, 0x1825, 0x6007, 0x0001, 0x600b,
-+      0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x000f,
-+      0xa284, 0x00f0, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016,
-+      0xa284, 0x0800, 0x0040, 0x17c0, 0x601b, 0x000a, 0x0078, 0x17c6,
-+      0xa284, 0x1000, 0x0040, 0x17c6, 0x601b, 0x000c, 0xa284, 0x0300,
-+      0x0040, 0x17cf, 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085,
-+      0x0001, 0x601e, 0x6023, 0x0000, 0x6027, 0x0000, 0xa284, 0x0400,
-+      0x0040, 0x17dc, 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b,
-+      0x20a0, 0xad80, 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0,
-+      0x17f1, 0x6046, 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078,
-+      0x17fb, 0x6800, 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c,
-+      0x6552, 0x6596, 0x669a, 0x6014, 0x2091, 0x8000, 0x7817, 0x0042,
-+      0x2c08, 0x2061, 0x5140, 0x606f, 0x0005, 0x6073, 0x0000, 0x6077,
-+      0x0000, 0x607b, 0x0000, 0x607f, 0x0000, 0x6082, 0x618a, 0xa284,
-+      0x0400, 0x608e, 0x2091, 0x8001, 0x0e7e, 0x2071, 0x0020, 0x7007,
-+      0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x0e7f, 0x2091, 0x8000,
-+      0x1078, 0x21d2, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078,
-+      0x1287, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000, 0x2071,
-+      0x5140, 0x2079, 0x0100, 0x2061, 0x0010, 0x70a0, 0xa06d, 0x0040,
-+      0x18b1, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040, 0x1844,
-+      0xa286, 0x000f, 0x00c0, 0x18b1, 0x691c, 0xa184, 0x0080, 0x00c0,
-+      0x18b1, 0x6824, 0xa18c, 0xff00, 0xa085, 0x0019, 0x6826, 0x71b0,
-+      0x81ff, 0x0040, 0x1867, 0x0d7e, 0x2069, 0x0020, 0x6807, 0x0010,
-+      0x6908, 0x6808, 0xa106, 0x00c0, 0x1858, 0x690c, 0x680c, 0xa106,
-+      0x00c0, 0x185d, 0xa184, 0x00ff, 0x00c0, 0x185d, 0x0d7f, 0x78b8,
-+      0xa084, 0x801f, 0x00c0, 0x1867, 0x7848, 0xa085, 0x000c, 0x784a,
-+      0x71b0, 0x81ff, 0x0040, 0x188a, 0x70b3, 0x0000, 0x0d7e, 0x2069,
-+      0x0020, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, 0x00c0, 0x187b,
-+      0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1882, 0x6807,
-+      0x0002, 0x0d7f, 0x61c4, 0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce,
-+      0x0e7e, 0x2071, 0x5100, 0x7266, 0x736a, 0xae80, 0x0019, 0x0e7f,
-+      0x7848, 0xa084, 0x000c, 0x00c0, 0x1898, 0x1078, 0x46db, 0x78a3,
-+      0x0000, 0x7858, 0xa084, 0xedff, 0x785a, 0x70b4, 0xa080, 0x00df,
-+      0x781a, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x0078,
-+      0x1284, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x2001,
-+      0x4005, 0x0078, 0x1286, 0x7980, 0x71c6, 0x71c4, 0xa182, 0x0003,
-+      0x00c8, 0x127c, 0x7982, 0x0078, 0x1284, 0x7980, 0x71c6, 0x0078,
-+      0x1284, 0x7974, 0x71c6, 0x71c4, 0x7976, 0x7978, 0x71ca, 0x71c8,
-+      0x797a, 0x797c, 0x71ce, 0x71cc, 0x797e, 0x0078, 0x1284, 0x7974,
-+      0x71c6, 0x7978, 0x71ca, 0x797c, 0x71ce, 0x0078, 0x1284, 0x7900,
-+      0x71c6, 0x71c4, 0x7902, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+      0x0048, 0x18ee, 0x0038, 0x18f0, 0x0078, 0x18fa, 0x00a8, 0x18fa,
-+      0xa18c, 0x0001, 0x00c0, 0x18f8, 0x20b9, 0x2222, 0x0078, 0x18fa,
-+      0x20b9, 0x1212, 0x0078, 0x1284, 0x7900, 0x71c6, 0x0078, 0x1284,
-+      0x2009, 0x5174, 0x2104, 0x70c6, 0x70c4, 0x200a, 0x0078, 0x1284,
-+      0x2009, 0x5174, 0x2104, 0x70c6, 0x0078, 0x1284, 0x71c4, 0x8107,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x5380, 0x6a14,
-+      0xd2b4, 0x0040, 0x191f, 0x2011, 0x0001, 0x0078, 0x1921, 0x2011,
-+      0x0000, 0x6b0c, 0x0078, 0x1281, 0xac80, 0x0001, 0x1078, 0x1b0f,
-+      0x007c, 0xac80, 0x0001, 0x1078, 0x1aaf, 0x007c, 0x7850, 0xa065,
-+      0x0040, 0x1936, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e,
-+      0x2079, 0x5100, 0x7850, 0xa06d, 0x0040, 0x1946, 0x2d04, 0x7852,
-+      0x6803, 0x0000, 0x6807, 0x0000, 0x680b, 0x0000, 0x0f7f, 0x007c,
-+      0x2091, 0x8000, 0x0f7e, 0x2079, 0x5100, 0x7850, 0x2062, 0x2c00,
-+      0xa005, 0x00c0, 0x1955, 0x1078, 0x23eb, 0x7852, 0x0f7f, 0x2091,
-+      0x8001, 0x007c, 0x0f7e, 0x2079, 0x5100, 0x7850, 0x206a, 0x2d00,
-+      0x7852, 0x0f7f, 0x007c, 0x2011, 0x7800, 0x7a52, 0x7bec, 0x8319,
-+      0x0040, 0x1970, 0xa280, 0x0031, 0x2012, 0x2010, 0x0078, 0x1967,
-+      0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
-+      0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x5400, 0x007c,
-+      0x1078, 0x1973, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084,
-+      0xffef, 0xa80d, 0x690a, 0x2009, 0x5152, 0x210c, 0x6804, 0xa005,
-+      0x0040, 0x19b2, 0xa116, 0x00c0, 0x199d, 0x2060, 0x6000, 0x6806,
-+      0x017e, 0x200b, 0x0000, 0x0078, 0x19a0, 0x2009, 0x0000, 0x017e,
-+      0x6804, 0xa065, 0x0040, 0x19af, 0x6000, 0x6806, 0x1078, 0x19c0,
-+      0x1078, 0x1c5f, 0x6810, 0x8001, 0x6812, 0x00c0, 0x19a0, 0x017f,
-+      0x6902, 0x6906, 0x007c, 0xa065, 0x0040, 0x19bf, 0x609c, 0x609f,
-+      0x0000, 0x2008, 0x1078, 0x1948, 0x2100, 0x0078, 0x19b3, 0x007c,
-+      0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005,
-+      0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022,
-+      0x007c, 0x0e7e, 0x2071, 0x5140, 0x704c, 0xa08c, 0x0200, 0x00c0,
-+      0x19df, 0xa088, 0x5180, 0x2d0a, 0x8000, 0x704e, 0xa006, 0x0e7f,
-+      0x007c, 0x1078, 0x1973, 0x2091, 0x8000, 0x6804, 0x781e, 0xa065,
-+      0x0040, 0x1a2a, 0x0078, 0x19f2, 0x2c00, 0x781e, 0x6000, 0xa065,
-+      0x0040, 0x1a2a, 0x600c, 0xa306, 0x00c0, 0x19ec, 0x6010, 0xa206,
-+      0x00c0, 0x19ec, 0x2c28, 0x2001, 0x5152, 0x2004, 0xac06, 0x00c0,
-+      0x1a03, 0x0078, 0x1a28, 0x6804, 0xac06, 0x00c0, 0x1a10, 0x6000,
-+      0xa065, 0x6806, 0x00c0, 0x1a1a, 0x6803, 0x0000, 0x0078, 0x1a1a,
-+      0x6400, 0x781c, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1a1a,
-+      0x2c00, 0x6802, 0x2560, 0x1078, 0x19c0, 0x601b, 0x0005, 0x6023,
-+      0x0020, 0x1078, 0x1c5f, 0x6810, 0x8001, 0x1050, 0x23eb, 0x6812,
-+      0xa085, 0xffff, 0x007c, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049,
-+      0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1980, 0x8738,
-+      0xa784, 0x001f, 0x00c0, 0x1a35, 0xa7bc, 0xff00, 0x873f, 0x8738,
-+      0x873f, 0xa784, 0x0f00, 0x00c0, 0x1a35, 0x2091, 0x8001, 0x007c,
-+      0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1a59, 0x2091,
-+      0x8000, 0x78e0, 0x78e3, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0,
-+      0x1a5a, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1a60, 0x1078, 0x23eb,
-+      0x0079, 0x1a62, 0x1a72, 0x1a75, 0x1a7b, 0x1a7f, 0x1a73, 0x1a83,
-+      0x1a89, 0x1a73, 0x1a73, 0x1c29, 0x1c4d, 0x1c51, 0x1a73, 0x1a73,
-+      0x1a73, 0x1a73, 0x007c, 0x1078, 0x23eb, 0x1078, 0x1a2b, 0x2001,
-+      0x8001, 0x0078, 0x1c57, 0x2001, 0x8003, 0x0078, 0x1c57, 0x2001,
-+      0x8004, 0x0078, 0x1c57, 0x1078, 0x1a2b, 0x2001, 0x8006, 0x0078,
-+      0x1c57, 0x2001, 0x8007, 0x0078, 0x1c57, 0x2030, 0x2138, 0xa782,
-+      0x0021, 0x0048, 0x1a95, 0x2009, 0x0020, 0x2600, 0x1078, 0x1aaf,
-+      0x00c0, 0x1aae, 0xa7ba, 0x0020, 0x0048, 0x1aad, 0x0040, 0x1aad,
-+      0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
-+      0x0000, 0xa5a9, 0x0000, 0x0078, 0x1a8f, 0xa006, 0x007c, 0x81ff,
-+      0x0040, 0x1aea, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x00ff,
-+      0x0040, 0x1ac1, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+      0x1abc, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e,
-+      0x7422, 0x7526, 0x780c, 0xa085, 0x0001, 0x7002, 0x7007, 0x0001,
-+      0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1ade, 0x2009,
-+      0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1ad0, 0x7008, 0x800b,
-+      0x00c8, 0x1ad0, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x1aea,
-+      0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138, 0xa782,
-+      0x0021, 0x0048, 0x1af5, 0x2009, 0x0020, 0x2600, 0x1078, 0x1b0f,
-+      0x00c0, 0x1b0e, 0xa7ba, 0x0020, 0x0048, 0x1b0d, 0x0040, 0x1b0d,
-+      0x2708, 0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
-+      0x0000, 0xa5a9, 0x0000, 0x0078, 0x1aef, 0xa006, 0x007c, 0x81ff,
-+      0x0040, 0x1b50, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x00ff,
-+      0x0040, 0x1b21, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-+      0x1b1c, 0x21a8, 0x7017, 0x0000, 0x810b, 0x7112, 0x721a, 0x731e,
-+      0x7422, 0x7526, 0x780c, 0xa085, 0x0000, 0x7002, 0x53a6, 0x7007,
-+      0x0001, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8, 0x1b3f,
-+      0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1b31, 0x7010,
-+      0xa084, 0xf000, 0x0040, 0x1b48, 0x7007, 0x0008, 0x0078, 0x1b4c,
-+      0x7108, 0x8103, 0x00c8, 0x1b31, 0x7007, 0x0002, 0xa184, 0x01e0,
-+      0x7003, 0x0000, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0004,
-+      0x00c8, 0x1b5c, 0x0078, 0x1b5f, 0xa006, 0x0078, 0x1b61, 0xa085,
-+      0x0001, 0x007c, 0x0e7e, 0x2071, 0x5100, 0x2d08, 0x7058, 0x6802,
-+      0xa005, 0x00c0, 0x1b6c, 0x715e, 0x715a, 0x0e7f, 0x007c, 0x2c08,
-+      0x7858, 0x6002, 0xa005, 0x00c0, 0x1b76, 0x795e, 0x795a, 0x007c,
-+      0x2091, 0x8000, 0x6003, 0x0000, 0x2c08, 0x785c, 0xa065, 0x00c0,
-+      0x1b84, 0x795a, 0x0078, 0x1b85, 0x6102, 0x795e, 0x2091, 0x8001,
-+      0x1078, 0x21ef, 0x007c, 0x0e7e, 0x2071, 0x5100, 0x7058, 0xa06d,
-+      0x0040, 0x1b99, 0x6800, 0x705a, 0xa005, 0x00c0, 0x1b98, 0x705e,
-+      0x8dff, 0x0e7f, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0x2079, 0x5100,
-+      0xaf80, 0x0016, 0x2060, 0x6000, 0xa005, 0x0040, 0x1bc9, 0x2068,
-+      0x6814, 0xa306, 0x00c0, 0x1bb2, 0x6828, 0xa084, 0x00ff, 0xa406,
-+      0x0040, 0x1bb5, 0x2d60, 0x0078, 0x1ba3, 0x6800, 0xa005, 0x6002,
-+      0x00c0, 0x1bc1, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1bc0, 0x2c00,
-+      0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040, 0x1bc8, 0x1078, 0x19b3,
-+      0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e,
-+      0x0f7e, 0x2079, 0x5100, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa005,
-+      0x0040, 0x1bf8, 0x2068, 0x6814, 0xa084, 0x00ff, 0xa306, 0x0040,
-+      0x1be4, 0x2d60, 0x0078, 0x1bd6, 0x6800, 0xa005, 0x6002, 0x00c0,
-+      0x1bf0, 0xaf80, 0x0016, 0xac06, 0x0040, 0x1bef, 0x2c00, 0x785e,
-+      0x0d7e, 0x689c, 0xa005, 0x0040, 0x1bf7, 0x1078, 0x19b3, 0x007f,
-+      0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e,
-+      0x2079, 0x5100, 0xaf80, 0x0016, 0x2060, 0x6000, 0xa06d, 0x0040,
-+      0x1c24, 0x6814, 0xa306, 0x0040, 0x1c10, 0x2d60, 0x0078, 0x1c05,
-+      0x6800, 0xa005, 0x6002, 0x00c0, 0x1c1c, 0xaf80, 0x0016, 0xac06,
-+      0x0040, 0x1c1b, 0x2c00, 0x785e, 0x0d7e, 0x689c, 0xa005, 0x0040,
-+      0x1c23, 0x1078, 0x19b3, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005,
-+      0x007c, 0x2091, 0x8000, 0x2069, 0x5140, 0x6800, 0xa086, 0x0000,
-+      0x0040, 0x1c37, 0x2091, 0x8001, 0x78e3, 0x0009, 0x007c, 0x6880,
-+      0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010,
-+      0x1078, 0x1980, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1c40, 0x2091,
-+      0x8001, 0x2001, 0x800a, 0x0078, 0x1c57, 0x2001, 0x800c, 0x0078,
-+      0x1c57, 0x1078, 0x1a2b, 0x2001, 0x800d, 0x0078, 0x1c57, 0x70c2,
-+      0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0x6004,
-+      0x2c08, 0x2063, 0x0000, 0x7884, 0x8000, 0x7886, 0x7888, 0xa005,
-+      0x798a, 0x0040, 0x1c6e, 0x2c02, 0x0078, 0x1c6f, 0x798e, 0x007c,
-+      0x6807, 0x0103, 0x0c7e, 0x2061, 0x5100, 0x2d08, 0x206b, 0x0000,
-+      0x6084, 0x8000, 0x6086, 0x6088, 0xa005, 0x618a, 0x0040, 0x1c83,
-+      0x2d02, 0x0078, 0x1c84, 0x618e, 0x0c7f, 0x007c, 0x1078, 0x1c97,
-+      0x0040, 0x1c96, 0x0c7e, 0x609c, 0xa065, 0x0040, 0x1c91, 0x1078,
-+      0x19b3, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1948, 0x007c, 0x788c,
-+      0xa065, 0x0040, 0x1ca9, 0x2091, 0x8000, 0x7884, 0x8001, 0x7886,
-+      0x2c04, 0x788e, 0xa005, 0x00c0, 0x1ca7, 0x788a, 0x8000, 0x2091,
-+      0x8001, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e,
-+      0x00c8, 0x1cb3, 0xa200, 0x0070, 0x1cb7, 0x0078, 0x1cae, 0x8086,
-+      0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1cdd,
-+      0xa11a, 0x00c8, 0x1cdd, 0x8213, 0x818d, 0x0048, 0x1cce, 0xa11a,
-+      0x00c8, 0x1ccf, 0x0070, 0x1cd5, 0x0078, 0x1cc3, 0xa11a, 0x2308,
-+      0x8210, 0x0070, 0x1cd5, 0x0078, 0x1cc3, 0x007e, 0x3200, 0xa084,
-+      0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085,
-+      0x0800, 0x0078, 0x1cd9, 0x7994, 0x70d0, 0xa106, 0x0040, 0x1d51,
-+      0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1d51,
-+      0x7008, 0x7208, 0xa206, 0x00c0, 0x1d51, 0xa286, 0x0008, 0x00c0,
-+      0x1d51, 0x2071, 0x0010, 0x1078, 0x192e, 0x0040, 0x1d51, 0x7a9c,
-+      0x7b98, 0x7ca4, 0x7da0, 0xa184, 0xff00, 0x0040, 0x1d1f, 0x2031,
-+      0x0000, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x810b,
-+      0x86b5, 0x810b, 0x86b5, 0x810b, 0x86b5, 0x2100, 0xa210, 0x2600,
-+      0xa319, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1d29, 0x8107,
-+      0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+      0x0000, 0x2009, 0x0020, 0x1078, 0x1929, 0x2091, 0x8001, 0x0040,
-+      0x1d48, 0x1078, 0x1948, 0x78a8, 0x8000, 0x78aa, 0xa086, 0x0002,
-+      0x00c0, 0x1d51, 0x2091, 0x8000, 0x78e3, 0x0002, 0x78ab, 0x0000,
-+      0x78cc, 0xa085, 0x0003, 0x78ce, 0x2091, 0x8001, 0x0078, 0x1d51,
-+      0x78ab, 0x0000, 0x1078, 0x20ac, 0x6004, 0xa084, 0x000f, 0x0079,
-+      0x1d56, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x1d66, 0x1d88,
-+      0x1dae, 0x1d66, 0x1dcb, 0x1d75, 0x1f2c, 0x1f47, 0x1d66, 0x1d82,
-+      0x1da8, 0x1e13, 0x1e82, 0x1ed2, 0x1ee4, 0x1f43, 0x2039, 0x0400,
-+      0x78dc, 0xa705, 0x78de, 0x6008, 0xa705, 0x600a, 0x1078, 0x1fc7,
-+      0x609c, 0x78da, 0x1078, 0x2094, 0x007c, 0x78dc, 0xa084, 0x0100,
-+      0x0040, 0x1d7c, 0x0078, 0x1d66, 0x601c, 0xa085, 0x0080, 0x601e,
-+      0x0078, 0x1d8f, 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x1078, 0x20c6,
-+      0x78dc, 0xa084, 0x0100, 0x0040, 0x1d8f, 0x0078, 0x1d66, 0x78df,
-+      0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f,
-+      0x0000, 0x0040, 0x1da5, 0x1078, 0x1fc7, 0x0040, 0x1da5, 0x78dc,
-+      0xa085, 0x0100, 0x78de, 0x0078, 0x1da7, 0x1078, 0x1feb, 0x007c,
-+      0x1078, 0x1b53, 0x00c0, 0x1d66, 0x1078, 0x20c2, 0x78dc, 0xa08c,
-+      0x0e00, 0x00c0, 0x1db7, 0xa084, 0x0100, 0x00c0, 0x1db9, 0x0078,
-+      0x1d66, 0x1078, 0x1fc7, 0x00c0, 0x1dca, 0x6104, 0xa18c, 0x00ff,
-+      0xa186, 0x0007, 0x0040, 0x1f84, 0xa186, 0x000f, 0x0040, 0x1f84,
-+      0x1078, 0x1feb, 0x007c, 0x78dc, 0xa084, 0x0100, 0x0040, 0x1dd2,
-+      0x0078, 0x1d66, 0x78df, 0x0000, 0x6714, 0x2011, 0x0001, 0x20a9,
-+      0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x1df5, 0x2011,
-+      0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040,
-+      0x1df5, 0x2039, 0x0000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e,
-+      0x0002, 0x0040, 0x1df5, 0x0078, 0x1e10, 0x1078, 0x1973, 0x2091,
-+      0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde,
-+      0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x0070, 0x1e09, 0x0078,
-+      0x1df7, 0x8211, 0x0040, 0x1e10, 0x20a9, 0x0100, 0x0078, 0x1df7,
-+      0x1078, 0x1948, 0x007c, 0x2001, 0x5167, 0x2004, 0xa084, 0x8000,
-+      0x0040, 0x1fac, 0x6114, 0x1078, 0x20e3, 0x6900, 0xa184, 0x0001,
-+      0x0040, 0x1e34, 0x6028, 0xa084, 0x00ff, 0x00c0, 0x1fa4, 0x6800,
-+      0xa084, 0x0001, 0x0040, 0x1fac, 0x6803, 0x0000, 0x680b, 0x0000,
-+      0x6807, 0x0000, 0x0078, 0x1fb4, 0x2011, 0x0001, 0x6020, 0xd0f4,
-+      0x0040, 0x1e3c, 0xa295, 0x0002, 0xd0c4, 0x0040, 0x1e41, 0xa295,
-+      0x0008, 0xd0cc, 0x0040, 0x1e46, 0xa295, 0x0400, 0x601c, 0xa084,
-+      0x0002, 0x0040, 0x1e4d, 0xa295, 0x0004, 0x602c, 0xa08c, 0x00ff,
-+      0xa182, 0x0002, 0x0048, 0x1fb0, 0xa182, 0x001b, 0x00c8, 0x1fb0,
-+      0x0040, 0x1fb0, 0x690e, 0x602c, 0x8007, 0xa08c, 0x00ff, 0xa182,
-+      0x0002, 0x0048, 0x1fb0, 0xa182, 0x001b, 0x00c8, 0x1fb0, 0x0040,
-+      0x1fb0, 0x6912, 0x6030, 0xa005, 0x00c0, 0x1e70, 0x2001, 0x001e,
-+      0x8000, 0x6816, 0x6028, 0xa084, 0x00ff, 0x0040, 0x1fac, 0x6806,
-+      0x6028, 0x8007, 0xa084, 0x00ff, 0x0040, 0x1fac, 0x680a, 0x6a02,
-+      0x0078, 0x1fb4, 0x2001, 0x5167, 0x2004, 0xa084, 0x8000, 0x0040,
-+      0x1fac, 0x6114, 0x1078, 0x20e3, 0x2091, 0x8000, 0x6a04, 0x6b08,
-+      0x6418, 0xa484, 0x0003, 0x0040, 0x1ea8, 0x6128, 0xa18c, 0x00ff,
-+      0x8001, 0x00c0, 0x1ea1, 0x2100, 0xa210, 0x0048, 0x1ece, 0x0078,
-+      0x1ea8, 0x8001, 0x00c0, 0x1ece, 0x2100, 0xa212, 0x0048, 0x1ece,
-+      0xa484, 0x000c, 0x0040, 0x1ec2, 0x6128, 0x810f, 0xa18c, 0x00ff,
-+      0xa082, 0x0004, 0x00c0, 0x1eba, 0x2100, 0xa318, 0x0048, 0x1ece,
-+      0x0078, 0x1ec2, 0xa082, 0x0004, 0x00c0, 0x1ece, 0x2100, 0xa31a,
-+      0x0048, 0x1ece, 0x6030, 0xa005, 0x0040, 0x1ec8, 0x8000, 0x6816,
-+      0x6a06, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x1fb4, 0x2091, 0x8001,
-+      0x0078, 0x1fb0, 0x6114, 0x1078, 0x20e3, 0x2091, 0x8000, 0x6b08,
-+      0x8318, 0x0048, 0x1ee0, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x1fc3,
-+      0x2091, 0x8001, 0x0078, 0x1fb0, 0x6024, 0x8007, 0xa084, 0x00ff,
-+      0x0040, 0x1f02, 0xa086, 0x0080, 0x00c0, 0x1f2a, 0x20a9, 0x0008,
-+      0x2069, 0x7510, 0x2091, 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802,
-+      0xade8, 0x0008, 0x0070, 0x1efe, 0x0078, 0x1ef4, 0x2091, 0x8001,
-+      0x0078, 0x1fb4, 0x6028, 0xa015, 0x0040, 0x1f2a, 0x6114, 0x1078,
-+      0x20e3, 0x0d7e, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d,
-+      0x0040, 0x1f27, 0xa206, 0x0040, 0x1f18, 0x2168, 0x0078, 0x1f0e,
-+      0x0c7e, 0x2160, 0x6000, 0x6802, 0x1078, 0x1948, 0x0c7f, 0x0d7f,
-+      0x6808, 0x8000, 0x680a, 0x2091, 0x8001, 0x0078, 0x1fc3, 0x2091,
-+      0x8001, 0x0d7f, 0x0078, 0x1fac, 0x6114, 0x1078, 0x20e3, 0x6800,
-+      0xa084, 0x0001, 0x0040, 0x1f9c, 0x2091, 0x8000, 0x6a04, 0x8210,
-+      0x0048, 0x1f3f, 0x6a06, 0x2091, 0x8001, 0x0078, 0x1fc3, 0x2091,
-+      0x8001, 0x0078, 0x1fb0, 0x1078, 0x1b53, 0x00c0, 0x1d66, 0x6114,
-+      0x1078, 0x20e3, 0x60be, 0x60bb, 0x0000, 0x6900, 0xa184, 0x0008,
-+      0x0040, 0x1f56, 0x6020, 0xa085, 0x0100, 0x6022, 0xa184, 0x0001,
-+      0x0040, 0x1fac, 0xa184, 0x0100, 0x00c0, 0x1f98, 0xa184, 0x0200,
-+      0x00c0, 0x1f94, 0x681c, 0xa005, 0x00c0, 0x1fa0, 0x6004, 0xa084,
-+      0x00ff, 0xa086, 0x000f, 0x00c0, 0x1f6f, 0x1078, 0x20c6, 0x78df,
-+      0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78d2, 0x8001, 0x609f,
-+      0x0000, 0x0040, 0x1f84, 0x1078, 0x1fc7, 0x0040, 0x1f84, 0x78dc,
-+      0xa085, 0x0100, 0x78de, 0x007c, 0x78d7, 0x0000, 0x78db, 0x0000,
-+      0x6024, 0xa084, 0xff00, 0x6026, 0x1078, 0x39de, 0x0040, 0x1ce3,
-+      0x1078, 0x1b78, 0x0078, 0x1ce3, 0x2009, 0x0017, 0x0078, 0x1fb6,
-+      0x2009, 0x000e, 0x0078, 0x1fb6, 0x2009, 0x0007, 0x0078, 0x1fb6,
-+      0x2009, 0x0035, 0x0078, 0x1fb6, 0x2009, 0x003e, 0x0078, 0x1fb6,
-+      0x2009, 0x0004, 0x0078, 0x1fb6, 0x2009, 0x0006, 0x0078, 0x1fb6,
-+      0x2009, 0x0016, 0x0078, 0x1fb6, 0x2009, 0x0001, 0x6024, 0xa084,
-+      0xff00, 0xa105, 0x6026, 0x2091, 0x8000, 0x1078, 0x1c5f, 0x2091,
-+      0x8001, 0x0078, 0x1ce3, 0x1078, 0x1948, 0x0078, 0x1ce3, 0x78d4,
-+      0xa06d, 0x00c0, 0x1fd2, 0x2c00, 0x78d6, 0x78da, 0x609f, 0x0000,
-+      0x0078, 0x1fde, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78d6, 0x2d00,
-+      0x6002, 0x78d8, 0xad06, 0x00c0, 0x1fde, 0x6002, 0x78d0, 0x8001,
-+      0x78d2, 0x00c0, 0x1fea, 0x78dc, 0xa084, 0xfeff, 0x78de, 0x78d8,
-+      0x2060, 0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184,
-+      0xe1ff, 0x601e, 0xa184, 0x0060, 0x0040, 0x1ffa, 0x0e7e, 0x1078,
-+      0x47c2, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000,
-+      0x60b3, 0x0000, 0x6714, 0x1078, 0x1973, 0x2091, 0x8000, 0x60a0,
-+      0xa084, 0x8000, 0x00c0, 0x2021, 0x6808, 0xa084, 0x0001, 0x0040,
-+      0x2021, 0x2091, 0x8001, 0x1078, 0x19c0, 0x2091, 0x8000, 0x1078,
-+      0x1c5f, 0x2091, 0x8001, 0x78d7, 0x0000, 0x78db, 0x0000, 0x0078,
-+      0x2093, 0x6024, 0xa096, 0x0001, 0x00c0, 0x2028, 0x8000, 0x6026,
-+      0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048, 0x2037, 0x0040,
-+      0x2037, 0x2039, 0x0200, 0x1078, 0x2094, 0x0078, 0x2093, 0x2c08,
-+      0x2091, 0x8000, 0x60a0, 0xa084, 0x8000, 0x0040, 0x2064, 0x6800,
-+      0xa065, 0x0040, 0x2069, 0x6a04, 0x0e7e, 0x2071, 0x5140, 0x7000,
-+      0xa084, 0x0001, 0x0040, 0x205e, 0x7048, 0xa206, 0x00c0, 0x205e,
-+      0x6b04, 0x231c, 0x2160, 0x6302, 0x2300, 0xa005, 0x00c0, 0x2059,
-+      0x6902, 0x2260, 0x6102, 0x0e7f, 0x0078, 0x2070, 0x2160, 0x6202,
-+      0x6906, 0x0e7f, 0x0078, 0x2070, 0x6800, 0xa065, 0x0040, 0x2069,
-+      0x6102, 0x6902, 0x00c0, 0x206d, 0x6906, 0x2160, 0x6003, 0x0000,
-+      0x2160, 0x60a0, 0xa084, 0x8000, 0x0040, 0x207a, 0x6808, 0xa084,
-+      0xfffc, 0x680a, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0x6808,
-+      0xa08c, 0x0040, 0x0040, 0x2089, 0xa086, 0x0040, 0x680a, 0x1078,
-+      0x19d1, 0x2091, 0x8000, 0x1078, 0x21d2, 0x2091, 0x8001, 0x78db,
-+      0x0000, 0x78d7, 0x0000, 0x007c, 0x6008, 0xa705, 0x600a, 0x2091,
-+      0x8000, 0x1078, 0x1c5f, 0x2091, 0x8001, 0x78d8, 0xa065, 0x0040,
-+      0x20a7, 0x609c, 0x78da, 0x609f, 0x0000, 0x0078, 0x2097, 0x78d7,
-+      0x0000, 0x78db, 0x0000, 0x007c, 0x7990, 0x7894, 0x8000, 0xa10a,
-+      0x00c8, 0x20b3, 0xa006, 0x7896, 0x70d2, 0x7804, 0xa005, 0x0040,
-+      0x20c1, 0x8001, 0x7806, 0x00c0, 0x20c1, 0x0068, 0x20c1, 0x2091,
-+      0x4080, 0x007c, 0x2039, 0x20da, 0x0078, 0x20c8, 0x2039, 0x20e0,
-+      0x2704, 0xa005, 0x0040, 0x20d9, 0xac00, 0x2068, 0x6b08, 0x6c0c,
-+      0x6910, 0x6a14, 0x690a, 0x6a0e, 0x6b12, 0x6c16, 0x8738, 0x0078,
-+      0x20c8, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000,
-+      0x0015, 0x001b, 0x0000, 0x0c7e, 0x1078, 0x3b69, 0x2c68, 0x0c7f,
-+      0x007c, 0x0010, 0x215a, 0x0068, 0x215a, 0x2029, 0x0000, 0x78cb,
-+      0x0000, 0x788c, 0xa065, 0x0040, 0x2153, 0x2009, 0x5174, 0x2104,
-+      0xa084, 0x0001, 0x0040, 0x2121, 0x6004, 0xa086, 0x0103, 0x00c0,
-+      0x2121, 0x6018, 0xa005, 0x00c0, 0x2121, 0x6014, 0xa005, 0x00c0,
-+      0x2121, 0x0d7e, 0x2069, 0x0000, 0x6818, 0xa084, 0x0001, 0x00c0,
-+      0x2120, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b,
-+      0x0001, 0x2091, 0x4080, 0x0d7f, 0x1078, 0x1c86, 0x0078, 0x2158,
-+      0x0d7f, 0x1078, 0x215b, 0x0040, 0x2153, 0x6204, 0xa294, 0x00ff,
-+      0xa296, 0x0003, 0x0040, 0x2133, 0x6204, 0xa296, 0x0110, 0x00c0,
-+      0x2141, 0x78cb, 0x0001, 0x6204, 0xa294, 0xff00, 0x8217, 0x8211,
-+      0x0040, 0x2141, 0x85ff, 0x00c0, 0x2153, 0x8210, 0xa202, 0x00c8,
-+      0x2153, 0x057e, 0x1078, 0x216a, 0x057f, 0x0040, 0x214e, 0x78e0,
-+      0xa086, 0x0003, 0x0040, 0x2153, 0x0078, 0x2141, 0x8528, 0x78c8,
-+      0xa005, 0x0040, 0x20f1, 0x85ff, 0x0040, 0x215a, 0x2091, 0x4080,
-+      0x78b0, 0x70d6, 0x007c, 0x7bac, 0x79b0, 0x70d4, 0xa102, 0x00c0,
-+      0x2164, 0x2300, 0xa005, 0x007c, 0x0048, 0x2168, 0xa302, 0x007c,
-+      0x8002, 0x007c, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x00c8,
-+      0x2184, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0,
-+      0x21b9, 0x7008, 0x7208, 0xa206, 0x00c0, 0x21b9, 0xa286, 0x0008,
-+      0x00c0, 0x21b9, 0x2071, 0x0010, 0x1078, 0x21be, 0x2009, 0x0020,
-+      0x6004, 0xa086, 0x0103, 0x00c0, 0x2193, 0x6028, 0xa005, 0x00c0,
-+      0x2193, 0x2009, 0x000c, 0x1078, 0x1924, 0x0040, 0x21ac, 0x78c4,
-+      0x8000, 0x78c6, 0xa086, 0x0002, 0x00c0, 0x21b9, 0x2091, 0x8000,
-+      0x78e3, 0x0003, 0x78c7, 0x0000, 0x78cc, 0xa085, 0x0300, 0x78ce,
-+      0x2091, 0x8001, 0x0078, 0x21b9, 0x78c7, 0x0000, 0x1078, 0x1c86,
-+      0x79ac, 0x78b0, 0x8000, 0xa10a, 0x00c8, 0x21b7, 0xa006, 0x78b2,
-+      0xa006, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x8107, 0x8004,
-+      0x8004, 0x7ab8, 0x7bb4, 0x7cc0, 0x7dbc, 0xa210, 0xa399, 0x0000,
-+      0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x2009, 0x515b, 0x2091,
-+      0x8000, 0x200a, 0x0f7e, 0x0e7e, 0x2071, 0x5140, 0x7000, 0xa086,
-+      0x0000, 0x00c0, 0x21ec, 0x2009, 0x5112, 0x2104, 0xa005, 0x00c0,
-+      0x21ec, 0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x21ec,
-+      0x0018, 0x21ec, 0x781b, 0x004b, 0x0e7f, 0x0f7f, 0x007c, 0x0f7e,
-+      0x0e7e, 0x2071, 0x5140, 0x2091, 0x8000, 0x7000, 0xa086, 0x0000,
-+      0x00c0, 0x2205, 0x2079, 0x0100, 0x7830, 0xa084, 0x00c0, 0x00c0,
-+      0x2205, 0x0018, 0x2205, 0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f,
-+      0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2071, 0x5140, 0x2079,
-+      0x0100, 0x784b, 0x000f, 0x0098, 0x2218, 0x7838, 0x0078, 0x2211,
-+      0x20a9, 0x0040, 0x7800, 0xa082, 0x0004, 0x0048, 0x2221, 0x20a9,
-+      0x0060, 0x789b, 0x0000, 0x78af, 0x0000, 0x78af, 0x0000, 0x0070,
-+      0x222b, 0x0078, 0x2223, 0x7800, 0xa082, 0x0004, 0x0048, 0x223a,
-+      0x70b7, 0x0096, 0x2019, 0x4ee7, 0x1078, 0x2276, 0x702f, 0x8001,
-+      0x0078, 0x2246, 0x70b7, 0x0000, 0x2019, 0x4d5f, 0x1078, 0x2276,
-+      0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x7003, 0x0000,
-+      0x1078, 0x237f, 0x7004, 0xa084, 0x000f, 0x017e, 0x2009, 0x04fd,
-+      0x210c, 0xa18a, 0x0005, 0x0048, 0x225b, 0x0038, 0x2261, 0xa085,
-+      0x6280, 0x0078, 0x2263, 0x0028, 0x2261, 0xa085, 0x6280, 0x0078,
-+      0x2263, 0xa085, 0x62c0, 0x017f, 0x7806, 0x780f, 0xb204, 0x7843,
-+      0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7047, 0x0008, 0x7053,
-+      0x517f, 0x704f, 0x0000, 0x127f, 0x2000, 0x007c, 0x137e, 0x147e,
-+      0x157e, 0x047e, 0x20a1, 0x012b, 0x2304, 0xa005, 0x789a, 0x0040,
-+      0x2296, 0x8318, 0x2324, 0x8318, 0x2398, 0x24a8, 0xa484, 0xff00,
-+      0x0040, 0x228e, 0xa482, 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6,
-+      0xa005, 0x00c0, 0x2285, 0x3318, 0x0078, 0x227c, 0x047f, 0x157f,
-+      0x147f, 0x137f, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204,
-+      0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x237f, 0x007c, 0x2011,
-+      0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x22b0, 0x0078, 0x22ab,
-+      0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c,
-+      0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x22c1, 0x0078,
-+      0x22bc, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a,
-+      0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070, 0x22d2,
-+      0x0078, 0x22cd, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105,
-+      0x2012, 0x007c, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105,
-+      0x2012, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061,
-+      0x0100, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x8103, 0x8003,
-+      0xa080, 0x0022, 0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa084,
-+      0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0022,
-+      0x0c7e, 0x2061, 0x0100, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae,
-+      0x0c7f, 0x007c, 0x8103, 0x8003, 0xa080, 0x0020, 0x0c7e, 0x2061,
-+      0x0100, 0x609a, 0x60a4, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018,
-+      0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005,
-+      0x0040, 0x235d, 0x2061, 0x7500, 0x1078, 0x2365, 0x0040, 0x2349,
-+      0x20a9, 0x0000, 0x2061, 0x7400, 0x0c7e, 0x1078, 0x2365, 0x0040,
-+      0x2339, 0x0c7f, 0x8c60, 0x0070, 0x2337, 0x0078, 0x232c, 0x0078,
-+      0x235d, 0x007f, 0xa082, 0x7400, 0x2071, 0x5140, 0x7086, 0x7182,
-+      0x2001, 0x0004, 0x706e, 0x7093, 0x000f, 0x1078, 0x21cd, 0x0078,
-+      0x2359, 0x60c0, 0xa005, 0x00c0, 0x235d, 0x2071, 0x5140, 0x7182,
-+      0x2c00, 0x708a, 0x2001, 0x0006, 0x706e, 0x7093, 0x000f, 0x1078,
-+      0x21cd, 0x2001, 0x0000, 0x0078, 0x235f, 0x2001, 0x0001, 0x2091,
-+      0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040,
-+      0x237c, 0x2060, 0x600c, 0xa306, 0x00c0, 0x2379, 0x6010, 0xa206,
-+      0x00c0, 0x2379, 0x6014, 0xa106, 0x00c0, 0x2379, 0xa006, 0x0078,
-+      0x237e, 0x6000, 0x0078, 0x2366, 0xa085, 0x0001, 0x007c, 0x2011,
-+      0x5141, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084,
-+      0x0100, 0x0040, 0x2395, 0x2021, 0xff04, 0x2122, 0x810b, 0x810b,
-+      0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e, 0x68e4,
-+      0xa08c, 0x0020, 0x0040, 0x23e9, 0xa084, 0x0006, 0x00c0, 0x23e9,
-+      0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0,
-+      0x5380, 0x7004, 0xa084, 0x000a, 0x00c0, 0x23e9, 0x7108, 0xa194,
-+      0xff00, 0x0040, 0x23e9, 0xa18c, 0x00ff, 0x2001, 0x000c, 0xa106,
-+      0x0040, 0x23d0, 0x2001, 0x0012, 0xa106, 0x0040, 0x23d4, 0x2001,
-+      0x0014, 0xa106, 0x0040, 0x23d8, 0x2001, 0x0019, 0xa106, 0x0040,
-+      0x23dc, 0x2001, 0x0032, 0xa106, 0x0040, 0x23e0, 0x0078, 0x23e4,
-+      0x2009, 0x0012, 0x0078, 0x23e6, 0x2009, 0x0014, 0x0078, 0x23e6,
-+      0x2009, 0x0019, 0x0078, 0x23e6, 0x2009, 0x0020, 0x0078, 0x23e6,
-+      0x2009, 0x003f, 0x0078, 0x23e6, 0x2011, 0x0000, 0x2100, 0xa205,
-+      0x700a, 0x0e7f, 0x007c, 0x0068, 0x23eb, 0x2091, 0x8000, 0x2071,
-+      0x0000, 0x007e, 0x7018, 0xa084, 0x0001, 0x00c0, 0x23f2, 0x007f,
-+      0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db,
-+      0x0741, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
-+      0x4080, 0x0078, 0x2409, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300,
-+      0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x77c2, 0x74c6, 0x76ca, 0x75ce,
-+      0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0079, 0x2420,
-+      0x2432, 0x2432, 0x2432, 0x276c, 0x393b, 0x2430, 0x2461, 0x246b,
-+      0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430, 0x2430,
-+      0x1078, 0x23eb, 0x8507, 0xa084, 0x001f, 0x0079, 0x2437, 0x2475,
-+      0x276c, 0x2926, 0x2a23, 0x2a4b, 0x2ced, 0x2f98, 0x2fdb, 0x3026,
-+      0x30ab, 0x3163, 0x320c, 0x2461, 0x2848, 0x2f6d, 0x2457, 0x3cc8,
-+      0x3ce8, 0x3eae, 0x3eba, 0x3f8f, 0x2457, 0x2457, 0x4062, 0x4066,
-+      0x3cc6, 0x2457, 0x3e19, 0x2457, 0x3b8c, 0x246b, 0x2457, 0x1078,
-+      0x23eb, 0x0018, 0x2410, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f,
-+      0x007c, 0x2019, 0x4e3b, 0x1078, 0x2276, 0x702f, 0x0001, 0x781b,
-+      0x004f, 0x0078, 0x2459, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f,
-+      0x8000, 0x781b, 0x00d0, 0x0078, 0x2459, 0x7242, 0x2009, 0x510f,
-+      0x200b, 0x0000, 0xa584, 0x0001, 0x00c0, 0x3ba0, 0x0040, 0x2492,
-+      0x1078, 0x23eb, 0x7003, 0x0000, 0x704b, 0x0000, 0x7043, 0x0000,
-+      0x7037, 0x0000, 0x1078, 0x3912, 0x0018, 0x2410, 0x2009, 0x510f,
-+      0x200b, 0x0000, 0x7068, 0xa005, 0x00c0, 0x255d, 0x706c, 0xa084,
-+      0x0007, 0x0079, 0x249b, 0x2594, 0x24a3, 0x24af, 0x24cc, 0x24ee,
-+      0x253b, 0x2514, 0x24a3, 0x1078, 0x38fa, 0x2009, 0x0048, 0x1078,
-+      0x2e39, 0x00c0, 0x24ad, 0x7003, 0x0004, 0x0078, 0x2459, 0x1078,
-+      0x38fa, 0x00c0, 0x24ca, 0x7080, 0x8007, 0x7882, 0x789b, 0x0010,
-+      0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab, 0x0001, 0x785b, 0x0004,
-+      0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x24ca, 0x7003, 0x0004,
-+      0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x24ec,
-+      0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d,
-+      0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002,
-+      0x785b, 0x0004, 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x24ec,
-+      0x7003, 0x0004, 0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa,
-+      0x00c0, 0x2512, 0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c,
-+      0x001f, 0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x7184, 0x79aa,
-+      0x78ab, 0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004,
-+      0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x2512, 0x7003, 0x0004,
-+      0x7093, 0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x2539,
-+      0x7180, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x001f, 0xa18d,
-+      0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab, 0x0002,
-+      0x785b, 0x0004, 0x2009, 0x00e0, 0x1078, 0x2e2d, 0x00c0, 0x2539,
-+      0x7088, 0x708b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0002, 0x7093,
-+      0x000f, 0x0078, 0x2459, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x7088,
-+      0x2068, 0x6f14, 0x1078, 0x37ef, 0x2c50, 0x1078, 0x39ac, 0x789b,
-+      0x0010, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x6e1c,
-+      0x2041, 0x0001, 0x708c, 0xa084, 0x0400, 0x2001, 0x0004, 0x0040,
-+      0x255b, 0x2001, 0x0006, 0x0078, 0x267c, 0x1078, 0x38fa, 0x00c0,
-+      0x2459, 0x789b, 0x0010, 0x7068, 0x2068, 0x6f14, 0x1078, 0x37ef,
-+      0x2c50, 0x1078, 0x39ac, 0x6008, 0xa085, 0x0010, 0x600a, 0x6824,
-+      0xa005, 0x0040, 0x257b, 0xa082, 0x0006, 0x0048, 0x2579, 0x0078,
-+      0x257b, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0,
-+      0x7058, 0xa084, 0x8000, 0x0040, 0x2589, 0xa684, 0x0001, 0x0040,
-+      0x258b, 0xa39c, 0xffbf, 0x7baa, 0x2031, 0x0020, 0x2041, 0x0001,
-+      0x2001, 0x0003, 0x0078, 0x267c, 0x0018, 0x2410, 0x744c, 0xa485,
-+      0x0000, 0x0040, 0x25ae, 0xa080, 0x5180, 0x2030, 0x7150, 0x8108,
-+      0xa12a, 0x0048, 0x25a5, 0x2009, 0x5180, 0x2164, 0x6504, 0x85ff,
-+      0x00c0, 0x25bf, 0x8421, 0x00c0, 0x259f, 0x7152, 0x7003, 0x0000,
-+      0x704b, 0x0000, 0x7040, 0xa005, 0x0040, 0x3ba0, 0x0078, 0x2459,
-+      0x764c, 0xa6b0, 0x5180, 0x7150, 0x2600, 0x0078, 0x25aa, 0x7152,
-+      0x2568, 0x2558, 0x754a, 0x2c50, 0x6034, 0xa085, 0x0000, 0x00c0,
-+      0x25bc, 0x6708, 0x773a, 0xa784, 0x033f, 0x0040, 0x25f5, 0xa784,
-+      0x0021, 0x00c0, 0x25bc, 0xa784, 0x0002, 0x0040, 0x25de, 0xa784,
-+      0x0004, 0x0040, 0x25bc, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008,
-+      0x00c0, 0x25bc, 0xa784, 0x0010, 0x00c0, 0x25bc, 0xa784, 0x0200,
-+      0x00c0, 0x25bc, 0xa784, 0x0100, 0x0040, 0x25f5, 0x6018, 0xa005,
-+      0x00c0, 0x25bc, 0xa7bc, 0xfeff, 0x670a, 0x6823, 0x0000, 0x6e1c,
-+      0xa684, 0x000e, 0x6118, 0x0040, 0x2605, 0x601c, 0xa102, 0x0048,
-+      0x2608, 0x0040, 0x2608, 0x0078, 0x25b8, 0x81ff, 0x00c0, 0x25b8,
-+      0x68c3, 0x0000, 0xa784, 0x0080, 0x00c0, 0x2610, 0x700c, 0x6022,
-+      0xa7bc, 0xff7f, 0x670a, 0x1078, 0x39ac, 0x0018, 0x2410, 0x789b,
-+      0x0010, 0xa046, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x6b14, 0xa39c,
-+      0x001f, 0xa39d, 0x00c0, 0x7058, 0xa084, 0x8000, 0x0040, 0x262c,
-+      0xa684, 0x0001, 0x0040, 0x262e, 0xa39c, 0xffbf, 0xa684, 0x0010,
-+      0x0040, 0x2634, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e,
-+      0x00c0, 0x263f, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x267a, 0x7158,
-+      0xa18c, 0x0800, 0x0040, 0x3401, 0x2011, 0x0020, 0xa684, 0x0008,
-+      0x00c0, 0x2650, 0x8210, 0xa684, 0x0002, 0x00c0, 0x2650, 0x8210,
-+      0x7aaa, 0x8840, 0x1078, 0x3912, 0x6a14, 0x610c, 0x8108, 0xa18c,
-+      0x00ff, 0xa1e0, 0x7400, 0x2c64, 0x8cff, 0x0040, 0x2671, 0x6014,
-+      0xa206, 0x00c0, 0x265b, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2656,
-+      0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078,
-+      0x2594, 0x1078, 0x38fa, 0x00c0, 0x2459, 0x2a60, 0x610e, 0x79aa,
-+      0x8840, 0x7132, 0x2001, 0x0001, 0x007e, 0x715c, 0xa184, 0x0018,
-+      0x0040, 0x2697, 0xa184, 0x0010, 0x0040, 0x268a, 0x1078, 0x3604,
-+      0x00c0, 0x26ba, 0xa184, 0x0008, 0x0040, 0x2697, 0x69a0, 0xa184,
-+      0x0600, 0x00c0, 0x2697, 0x1078, 0x34f1, 0x0078, 0x26ba, 0x69a0,
-+      0xa184, 0x0800, 0x0040, 0x26ae, 0x0c7e, 0x027e, 0x2960, 0x6000,
-+      0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, 0x027f,
-+      0x0c7f, 0x1078, 0x3604, 0x00c0, 0x26ba, 0x69a0, 0xa184, 0x0200,
-+      0x0040, 0x26b6, 0x1078, 0x3540, 0x0078, 0x26ba, 0xa184, 0x0400,
-+      0x00c0, 0x2693, 0x69a0, 0xa184, 0x1000, 0x0040, 0x26c5, 0x6914,
-+      0xa18c, 0xff00, 0x810f, 0x1078, 0x22ee, 0x007f, 0x7002, 0xa68c,
-+      0x00e0, 0xa684, 0x0060, 0x0040, 0x26d3, 0xa086, 0x0060, 0x00c0,
-+      0x26d3, 0xa18d, 0x4000, 0x88ff, 0x0040, 0x26d8, 0xa18d, 0x0004,
-+      0x795a, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x789b, 0x0061,
-+      0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff, 0x691a, 0xa68c, 0x0080,
-+      0x0040, 0x26f7, 0x7097, 0x0000, 0xa08a, 0x000d, 0x0050, 0x26f5,
-+      0xa08a, 0x000c, 0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x78aa,
-+      0x8008, 0x810c, 0x0040, 0x3407, 0xa18c, 0x00f8, 0x00c0, 0x3407,
-+      0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000,
-+      0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f,
-+      0x6814, 0x8007, 0x7882, 0x6d94, 0x7dd6, 0x7dde, 0x6e98, 0x7ed2,
-+      0x7eda, 0x1078, 0x38fa, 0x00c0, 0x272e, 0x702c, 0x8003, 0x0048,
-+      0x2727, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x7830,
-+      0xa084, 0x00c0, 0x00c0, 0x272e, 0x0098, 0x2736, 0x6008, 0xa084,
-+      0xffef, 0x600a, 0x1078, 0x3912, 0x0078, 0x2482, 0x7200, 0xa284,
-+      0x0007, 0xa086, 0x0001, 0x00c0, 0x2743, 0x781b, 0x004f, 0x1078,
-+      0x3912, 0x0078, 0x2754, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b,
-+      0x004f, 0x1078, 0x3912, 0x7200, 0x2500, 0xa605, 0x0040, 0x2754,
-+      0xa284, 0x0007, 0x1079, 0x2762, 0xad80, 0x0009, 0x7036, 0xa284,
-+      0x0007, 0xa086, 0x0001, 0x00c0, 0x2459, 0x6018, 0x8000, 0x601a,
-+      0x0078, 0x2459, 0x276a, 0x4a3a, 0x4a3a, 0x4a29, 0x4a3a, 0x276a,
-+      0x4a29, 0x276a, 0x1078, 0x23eb, 0x1078, 0x38fa, 0x0f7e, 0x2079,
-+      0x5100, 0x78cc, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x2790, 0x706c,
-+      0xa086, 0x0001, 0x00c0, 0x277f, 0x706e, 0x0078, 0x2823, 0x706c,
-+      0xa086, 0x0005, 0x00c0, 0x278e, 0x7088, 0x2068, 0x681b, 0x0004,
-+      0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x706f, 0x0000,
-+      0x2011, 0x0004, 0x716c, 0xa186, 0x0001, 0x0040, 0x27b1, 0xa186,
-+      0x0007, 0x00c0, 0x27a1, 0x2009, 0x5138, 0x200b, 0x0005, 0x0078,
-+      0x27b1, 0x2009, 0x5113, 0x2104, 0x2009, 0x5112, 0x200a, 0x2009,
-+      0x5138, 0x200b, 0x0001, 0x706f, 0x0000, 0x7073, 0x0001, 0x0078,
-+      0x27b3, 0x706f, 0x0000, 0x1078, 0x4776, 0x157e, 0x20a9, 0x0010,
-+      0x2039, 0x0000, 0x1078, 0x36e2, 0xa7b8, 0x0100, 0x0070, 0x27c2,
-+      0x0078, 0x27ba, 0x157f, 0x7000, 0x0079, 0x27c6, 0x27f4, 0x27db,
-+      0x27db, 0x27ce, 0x27f4, 0x27f4, 0x27f4, 0x27f4, 0x2021, 0x515a,
-+      0x2404, 0xa005, 0x0040, 0x27f4, 0xad06, 0x00c0, 0x27db, 0x6800,
-+      0x2022, 0x0078, 0x27eb, 0x6820, 0xa084, 0x0001, 0x00c0, 0x27e7,
-+      0x6f14, 0x1078, 0x37ef, 0x1078, 0x33d8, 0x0078, 0x27eb, 0x7060,
-+      0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085,
-+      0x0008, 0x6822, 0x1078, 0x1c70, 0x2021, 0x7500, 0x1078, 0x2830,
-+      0x2021, 0x515a, 0x1078, 0x2830, 0x157e, 0x20a9, 0x0000, 0x2021,
-+      0x7400, 0x1078, 0x2830, 0x8420, 0x0070, 0x2808, 0x0078, 0x2801,
-+      0x2061, 0x5400, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110,
-+      0x81ff, 0x0040, 0x2817, 0xa102, 0x0050, 0x2817, 0x6012, 0x601b,
-+      0x0000, 0xace0, 0x0010, 0x0070, 0x281f, 0x0078, 0x280e, 0x8421,
-+      0x00c0, 0x280c, 0x157f, 0x709c, 0xa084, 0x8000, 0x0040, 0x282a,
-+      0x1078, 0x3a00, 0x7003, 0x0000, 0x704b, 0x0000, 0x0078, 0x2459,
-+      0x047e, 0x2404, 0xa005, 0x0040, 0x2844, 0x2068, 0x6800, 0x007e,
-+      0x6a1a, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078,
-+      0x1c70, 0x007f, 0x0078, 0x2832, 0x047f, 0x2023, 0x0000, 0x007c,
-+      0xa282, 0x0003, 0x0050, 0x284e, 0x1078, 0x23eb, 0x2300, 0x0079,
-+      0x2851, 0x2854, 0x28c7, 0x28e4, 0xa282, 0x0002, 0x0040, 0x285a,
-+      0x1078, 0x23eb, 0x706c, 0x706f, 0x0000, 0x7093, 0x0000, 0x0079,
-+      0x2861, 0x2869, 0x2869, 0x286b, 0x289f, 0x340d, 0x2869, 0x289f,
-+      0x2869, 0x1078, 0x23eb, 0x7780, 0x1078, 0x36e2, 0x7780, 0xa7bc,
-+      0x0f00, 0x1078, 0x37ef, 0x6018, 0xa005, 0x0040, 0x2896, 0x2021,
-+      0x7500, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x28ff, 0x0040,
-+      0x2896, 0x157e, 0x20a9, 0x0000, 0x2021, 0x7400, 0x047e, 0x2009,
-+      0x0004, 0x2011, 0x0010, 0x1078, 0x28ff, 0x047f, 0x0040, 0x2895,
-+      0x8420, 0x0070, 0x2895, 0x0078, 0x2886, 0x157f, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x2871, 0x0078, 0x2482, 0x0078, 0x2482, 0x7780,
-+      0x1078, 0x37ef, 0x6018, 0xa005, 0x0040, 0x28c5, 0x2021, 0x7500,
-+      0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x28ff, 0x0040, 0x28c5,
-+      0x157e, 0x20a9, 0x0000, 0x2021, 0x7400, 0x047e, 0x2009, 0x0005,
-+      0x2011, 0x0020, 0x1078, 0x28ff, 0x047f, 0x0040, 0x28c4, 0x8420,
-+      0x0070, 0x28c4, 0x0078, 0x28b5, 0x157f, 0x0078, 0x2482, 0x2200,
-+      0x0079, 0x28ca, 0x28cd, 0x28cf, 0x28cf, 0x1078, 0x23eb, 0x2009,
-+      0x0012, 0x706c, 0xa086, 0x0002, 0x0040, 0x28d8, 0x2009, 0x000e,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x28de, 0x691a, 0x706f, 0x0000,
-+      0x7073, 0x0001, 0x0078, 0x3888, 0x2200, 0x0079, 0x28e7, 0x28ec,
-+      0x28cf, 0x28ea, 0x1078, 0x23eb, 0x1078, 0x4776, 0x7000, 0xa086,
-+      0x0001, 0x00c0, 0x339d, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef,
-+      0x600a, 0x1078, 0x3390, 0x0040, 0x339d, 0x0078, 0x2594, 0x2404,
-+      0xa005, 0x0040, 0x2922, 0x2068, 0x2d04, 0x007e, 0x6814, 0xa706,
-+      0x0040, 0x290e, 0x2d20, 0x007f, 0x0078, 0x2900, 0x007f, 0x2022,
-+      0x691a, 0x6817, 0x0000, 0x6820, 0xa205, 0x6822, 0x1078, 0x1c70,
-+      0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
-+      0x33ee, 0x007c, 0xa085, 0x0001, 0x0078, 0x2921, 0x2300, 0x0079,
-+      0x2929, 0x292e, 0x292c, 0x29c7, 0x1078, 0x23eb, 0x78ec, 0xa084,
-+      0x0001, 0x00c0, 0x2942, 0x7000, 0xa086, 0x0004, 0x00c0, 0x293a,
-+      0x0078, 0x2965, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a,
-+      0x0078, 0x339d, 0x78e4, 0xa005, 0x00d0, 0x2965, 0x0018, 0x2459,
-+      0x2008, 0xa084, 0x0030, 0x00c0, 0x2951, 0x781b, 0x004f, 0x0078,
-+      0x2459, 0x78ec, 0xa084, 0x0003, 0x0040, 0x294d, 0x2100, 0xa084,
-+      0x0007, 0x0079, 0x295b, 0x299e, 0x29a9, 0x298f, 0x2963, 0x38ed,
-+      0x38ed, 0x2963, 0x29b8, 0x1078, 0x23eb, 0x7000, 0xa086, 0x0004,
-+      0x00c0, 0x297f, 0x706c, 0xa086, 0x0002, 0x00c0, 0x2975, 0x2011,
-+      0x0002, 0x2019, 0x0000, 0x0078, 0x2848, 0x706c, 0xa086, 0x0006,
-+      0x0040, 0x296f, 0x706c, 0xa086, 0x0004, 0x0040, 0x296f, 0x79e4,
-+      0xa184, 0x0030, 0x0040, 0x2989, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+      0x298b, 0x0078, 0x2f6d, 0x2001, 0x0003, 0x0078, 0x2d01, 0x6818,
-+      0xa084, 0x8000, 0x0040, 0x2996, 0x681b, 0x001d, 0x1078, 0x36c1,
-+      0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x29a5, 0x681b, 0x001d, 0x1078, 0x36c1, 0x0078,
-+      0x38b8, 0x6818, 0xa084, 0x8000, 0x0040, 0x29b0, 0x681b, 0x001d,
-+      0x1078, 0x36c1, 0x782b, 0x3008, 0x781b, 0x00cd, 0x0078, 0x2459,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x29bf, 0x681b, 0x001d, 0x1078,
-+      0x36c1, 0x782b, 0x3008, 0x781b, 0x008e, 0x0078, 0x2459, 0xa584,
-+      0x000f, 0x00c0, 0x29e4, 0x7000, 0x0079, 0x29ce, 0x2482, 0x29d8,
-+      0x29d6, 0x339d, 0x339d, 0x339d, 0x339d, 0x29d6, 0x1078, 0x23eb,
-+      0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x3390,
-+      0x0040, 0x339d, 0x0078, 0x2594, 0x78e4, 0xa005, 0x00d0, 0x2965,
-+      0x0018, 0x2965, 0x2008, 0xa084, 0x0030, 0x00c0, 0x29f3, 0x781b,
-+      0x004f, 0x0078, 0x2459, 0x78ec, 0xa084, 0x0003, 0x0040, 0x29ef,
-+      0x2100, 0xa184, 0x0007, 0x0079, 0x29fd, 0x2a0f, 0x2a13, 0x2a07,
-+      0x2a05, 0x38ed, 0x38ed, 0x2a05, 0x38e3, 0x1078, 0x23eb, 0x1078,
-+      0x36c9, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x1078,
-+      0x36c9, 0x0078, 0x38b8, 0x1078, 0x36c9, 0x782b, 0x3008, 0x781b,
-+      0x00cd, 0x0078, 0x2459, 0x1078, 0x36c9, 0x782b, 0x3008, 0x781b,
-+      0x008e, 0x0078, 0x2459, 0x2300, 0x0079, 0x2a26, 0x2a2b, 0x2a29,
-+      0x2a2d, 0x1078, 0x23eb, 0x0078, 0x30ab, 0x681b, 0x0008, 0x78a3,
-+      0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x30ab, 0x78ec, 0xa084,
-+      0x0003, 0x0040, 0x30ab, 0xa184, 0x0007, 0x0079, 0x2a3f, 0x2a47,
-+      0x2a13, 0x298f, 0x3888, 0x38ed, 0x38ed, 0x2a47, 0x38e3, 0x1078,
-+      0x389c, 0x0078, 0x2459, 0xa282, 0x0005, 0x0050, 0x2a51, 0x1078,
-+      0x23eb, 0x2300, 0x0079, 0x2a54, 0x2a57, 0x2cae, 0x2cbc, 0x2200,
-+      0x0079, 0x2a5a, 0x2a74, 0x2a61, 0x2a74, 0x2a5f, 0x2c93, 0x1078,
-+      0x23eb, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020,
-+      0x0048, 0x369d, 0xa08a, 0x0004, 0x00c8, 0x369d, 0x0079, 0x2a70,
-+      0x369d, 0x369d, 0x369d, 0x364b, 0x789b, 0x0018, 0x79a8, 0xa184,
-+      0x0080, 0x0040, 0x2a85, 0x0078, 0x369d, 0x7000, 0xa005, 0x00c0,
-+      0x2a7b, 0x2011, 0x0004, 0x0078, 0x321f, 0xa184, 0x00ff, 0xa08a,
-+      0x0010, 0x00c8, 0x369d, 0x0079, 0x2a8d, 0x2a9f, 0x2a9d, 0x2ab7,
-+      0x2abb, 0x2b78, 0x369d, 0x369d, 0x2b7a, 0x369d, 0x369d, 0x2c8f,
-+      0x2c8f, 0x369d, 0x369d, 0x369d, 0x2c91, 0x1078, 0x23eb, 0xa684,
-+      0x1000, 0x0040, 0x2aac, 0x2001, 0x0500, 0x8000, 0x8000, 0x783a,
-+      0x781b, 0x008c, 0x0078, 0x2459, 0x6818, 0xa084, 0x8000, 0x0040,
-+      0x2ab5, 0x681b, 0x001d, 0x0078, 0x2aa3, 0x0078, 0x3888, 0x681b,
-+      0x001d, 0x0078, 0x36ad, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0,
-+      0x2afc, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2b04, 0x6818, 0xa086,
-+      0x0008, 0x00c0, 0x2acd, 0x681b, 0x0000, 0xa684, 0x0400, 0x0040,
-+      0x2b74, 0xa684, 0x0080, 0x0040, 0x2af8, 0x7097, 0x0000, 0x6818,
-+      0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x2af8, 0xa08a, 0x000c,
-+      0x7196, 0x2001, 0x000c, 0x800c, 0x719a, 0x789b, 0x0061, 0x78aa,
-+      0x157e, 0x137e, 0x147e, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8000,
-+      0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f,
-+      0x781b, 0x0058, 0x0078, 0x2459, 0xa684, 0x1000, 0x0040, 0x2b04,
-+      0x781b, 0x0065, 0x0078, 0x2459, 0xa684, 0x0060, 0x0040, 0x2b70,
-+      0xa684, 0x0800, 0x0040, 0x2b70, 0xa684, 0x8000, 0x00c0, 0x2b12,
-+      0x0078, 0x2b2c, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b, 0x0076,
-+      0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2b1f, 0x8000, 0xa084,
-+      0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+      0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, 0x2b34,
-+      0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003, 0x00c0,
-+      0x2b41, 0x1078, 0x482c, 0x1078, 0x4a29, 0x781b, 0x0064, 0x0078,
-+      0x2459, 0xa006, 0x1078, 0x4b30, 0x6ab0, 0x69ac, 0x6c98, 0x6b94,
-+      0x2200, 0xa105, 0x0040, 0x2b50, 0x2200, 0xa422, 0x2100, 0xa31b,
-+      0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405,
-+      0x00c0, 0x2b62, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0064,
-+      0x0078, 0x2459, 0x781b, 0x0064, 0x2200, 0xa115, 0x00c0, 0x2b6c,
-+      0x1078, 0x4a3a, 0x0078, 0x2459, 0x1078, 0x4a85, 0x0078, 0x2459,
-+      0x781b, 0x0065, 0x0078, 0x2459, 0x781b, 0x0058, 0x0078, 0x2459,
-+      0x1078, 0x23eb, 0x0078, 0x2bdb, 0x6920, 0xa184, 0x0100, 0x0040,
-+      0x2b92, 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000,
-+      0xa084, 0xefff, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f,
-+      0x0078, 0x2bca, 0xa184, 0x0200, 0x0040, 0x2bca, 0xa18c, 0xfdff,
-+      0x6922, 0x0c7e, 0x7054, 0x2060, 0x6000, 0xa084, 0xdfff, 0x6002,
-+      0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184,
-+      0x0008, 0x0040, 0x2bca, 0x1078, 0x37eb, 0x1078, 0x34f1, 0x88ff,
-+      0x0040, 0x2bca, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-+      0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2bc4, 0x782b, 0x3008,
-+      0x781b, 0x0056, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x0065,
-+      0x0078, 0x2459, 0x7e58, 0xa684, 0x0400, 0x00c0, 0x2bd3, 0x781b,
-+      0x0058, 0x0078, 0x2459, 0x781b, 0x0065, 0x0078, 0x2459, 0x0078,
-+      0x36a5, 0x0078, 0x36a5, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007,
-+      0x00c0, 0x2be9, 0x6820, 0xa084, 0x0100, 0x0040, 0x2bd9, 0x2009,
-+      0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001,
-+      0x00c0, 0x2c20, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040,
-+      0x2c18, 0x0048, 0x2bfd, 0x0078, 0x2c1a, 0xa380, 0x0002, 0xa102,
-+      0x00c8, 0x2c18, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x7054,
-+      0x2060, 0x6000, 0xa084, 0xefef, 0x6002, 0x6004, 0xa084, 0xffe5,
-+      0x6006, 0x0c7f, 0x7e58, 0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x2bcb,
-+      0x0078, 0x2b7c, 0x24a8, 0x7aa8, 0x00f0, 0x2c1a, 0x0078, 0x2beb,
-+      0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x2c80, 0x8318, 0x8318,
-+      0x2300, 0xa102, 0x0040, 0x2c30, 0x0048, 0x2c30, 0x0078, 0x2c7d,
-+      0xa286, 0x0023, 0x0040, 0x2bd9, 0x681c, 0xa084, 0xfff1, 0x681e,
-+      0x7e58, 0xa684, 0xfff1, 0xa085, 0x0010, 0x2030, 0x7e5a, 0x6008,
-+      0xa085, 0x0010, 0x600a, 0x0c7e, 0x7054, 0x2060, 0x6004, 0x2008,
-+      0x2c48, 0x0c7f, 0xa184, 0x0010, 0x0040, 0x2c54, 0x1078, 0x37eb,
-+      0x1078, 0x3604, 0x0078, 0x2c63, 0x0c7e, 0x7054, 0x2060, 0x6004,
-+      0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040, 0x2bca, 0x1078,
-+      0x37eb, 0x1078, 0x34f1, 0x88ff, 0x0040, 0x2bca, 0x789b, 0x0060,
-+      0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+      0x2c77, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b,
-+      0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x7aa8, 0x0078, 0x2beb,
-+      0x8318, 0x2300, 0xa102, 0x0040, 0x2c89, 0x0048, 0x2c89, 0x0078,
-+      0x2beb, 0xa284, 0x0080, 0x00c0, 0x36ad, 0x0078, 0x36a5, 0x0078,
-+      0x36ad, 0x0078, 0x369d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
-+      0xa08e, 0x0001, 0x0040, 0x2c9e, 0x1078, 0x23eb, 0x7aa8, 0xa294,
-+      0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x369d,
-+      0x0079, 0x2caa, 0x369d, 0x343e, 0x369d, 0x3599, 0xa282, 0x0000,
-+      0x00c0, 0x2cb4, 0x1078, 0x23eb, 0x1078, 0x36c1, 0x782b, 0x3008,
-+      0x781b, 0x0065, 0x0078, 0x2459, 0xa282, 0x0003, 0x00c0, 0x2cc2,
-+      0x1078, 0x23eb, 0xa484, 0x8000, 0x00c0, 0x2ce5, 0x706c, 0xa005,
-+      0x0040, 0x2ccc, 0x1078, 0x23eb, 0x6f14, 0x7782, 0xa7bc, 0x0f00,
-+      0x1078, 0x37ef, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x2cd0, 0x1078, 0x36c5, 0x706f, 0x0002, 0x2009,
-+      0x5138, 0x200b, 0x0009, 0x0078, 0x2ce7, 0x1078, 0x36d1, 0x782b,
-+      0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0xa282, 0x0004, 0x0050,
-+      0x2cf3, 0x1078, 0x23eb, 0x2300, 0x0079, 0x2cf6, 0x2cf9, 0x2de2,
-+      0x2e15, 0xa286, 0x0003, 0x0040, 0x2cff, 0x1078, 0x23eb, 0x2001,
-+      0x0000, 0x007e, 0x68c0, 0xa005, 0x0040, 0x2d08, 0x7003, 0x0003,
-+      0x68a0, 0xa084, 0x2000, 0x0040, 0x2d11, 0x6008, 0xa085, 0x0002,
-+      0x600a, 0x007f, 0x703e, 0x7000, 0xa084, 0x0007, 0x0079, 0x2d18,
-+      0x2482, 0x2d22, 0x2d22, 0x2f17, 0x2f53, 0x2482, 0x2f53, 0x2d20,
-+      0x1078, 0x23eb, 0xa684, 0x1000, 0x00c0, 0x2d2a, 0x1078, 0x4776,
-+      0x0040, 0x2dbc, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2d72, 0xa186,
-+      0x0008, 0x00c0, 0x2d41, 0x1078, 0x33ee, 0x6008, 0xa084, 0xffef,
-+      0x600a, 0x1078, 0x3390, 0x0040, 0x2d72, 0x1078, 0x4776, 0x0078,
-+      0x2d59, 0xa186, 0x0028, 0x00c0, 0x2d72, 0x1078, 0x4776, 0x6008,
-+      0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2d59, 0x8001,
-+      0x601a, 0xa005, 0x0040, 0x2d59, 0x8001, 0xa005, 0x0040, 0x2d59,
-+      0x601e, 0x6820, 0xa084, 0x0001, 0x0040, 0x2482, 0x6820, 0xa084,
-+      0xfffe, 0x6822, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f,
-+      0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2d6f, 0x6002, 0x6006,
-+      0x0078, 0x2482, 0x017e, 0x1078, 0x2e46, 0x017f, 0xa684, 0xdf00,
-+      0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x2dbc, 0xa186,
-+      0x0002, 0x00c0, 0x2dbc, 0xa684, 0x0800, 0x00c0, 0x2d8f, 0xa684,
-+      0x0060, 0x0040, 0x2d8f, 0x78d8, 0x7adc, 0x682e, 0x6a32, 0x6820,
-+      0xa084, 0x0800, 0x00c0, 0x2dbc, 0x8717, 0xa294, 0x000f, 0x8213,
-+      0x8213, 0x8213, 0xa290, 0x5380, 0xa290, 0x0000, 0x221c, 0xa384,
-+      0x0100, 0x00c0, 0x2da5, 0x0078, 0x2dab, 0x8210, 0x2204, 0xa085,
-+      0x0018, 0x2012, 0x8211, 0xa384, 0x0400, 0x0040, 0x2db8, 0x68a0,
-+      0xa084, 0x0100, 0x00c0, 0x2db8, 0x1078, 0x2eca, 0x0078, 0x2482,
-+      0x6008, 0xa085, 0x0002, 0x600a, 0x6916, 0x6818, 0xa084, 0x8000,
-+      0x0040, 0x2dc4, 0x703c, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078,
-+      0x33df, 0x1078, 0x33ee, 0x00c0, 0x2dd1, 0x6008, 0xa084, 0xffef,
-+      0x600a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2dda, 0x1078, 0x33d8,
-+      0x0078, 0x2dde, 0x7060, 0x2060, 0x6800, 0x6002, 0x1078, 0x1c70,
-+      0x0078, 0x2482, 0xa282, 0x0004, 0x0048, 0x2de8, 0x1078, 0x23eb,
-+      0x2200, 0x0079, 0x2deb, 0x2de6, 0x2def, 0x2dfc, 0x2def, 0x7000,
-+      0xa086, 0x0005, 0x0040, 0x2df8, 0x1078, 0x36c1, 0x782b, 0x3008,
-+      0x781b, 0x0065, 0x0078, 0x2459, 0x7890, 0x8007, 0x8001, 0xa084,
-+      0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186,
-+      0x0003, 0x0040, 0x2e11, 0xa186, 0x0000, 0x0040, 0x2e11, 0x0078,
-+      0x369d, 0x781b, 0x0065, 0x0078, 0x2459, 0x6820, 0xa085, 0x0004,
-+      0x6822, 0x82ff, 0x00c0, 0x2e20, 0x1078, 0x36c1, 0x0078, 0x2e27,
-+      0x8211, 0x0040, 0x2e25, 0x1078, 0x23eb, 0x1078, 0x36d1, 0x782b,
-+      0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x702c, 0x8003, 0x0048,
-+      0x2e37, 0x2019, 0x4d9e, 0x1078, 0x2276, 0x702f, 0x8000, 0x1078,
-+      0x3912, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2e43, 0x0018, 0x2e43,
-+      0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060,
-+      0x00c0, 0x2e50, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2ec9,
-+      0xa684, 0x0800, 0x00c0, 0x2e72, 0x68b4, 0xa084, 0x4800, 0xa635,
-+      0xa684, 0x0800, 0x00c0, 0x2e72, 0x6998, 0x6a94, 0x692e, 0x6a32,
-+      0x703c, 0xa005, 0x00c0, 0x2e6a, 0x2200, 0xa105, 0x0040, 0x2e71,
-+      0x703f, 0x0015, 0x7000, 0xa086, 0x0006, 0x0040, 0x2e71, 0x1078,
-+      0x4776, 0x007c, 0xa684, 0x0020, 0x0040, 0x2e94, 0xa684, 0x4000,
-+      0x0040, 0x2e80, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2e6a,
-+      0x68b4, 0xa084, 0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2e7a,
-+      0x703c, 0xa005, 0x00c0, 0x2e8e, 0x703f, 0x0015, 0x79d8, 0x7adc,
-+      0x692e, 0x6a32, 0x0078, 0x2e6a, 0xa684, 0x4000, 0x0040, 0x2e9e,
-+      0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x2e6a, 0x68b4, 0xa084,
-+      0x4800, 0xa635, 0xa684, 0x4000, 0x00c0, 0x2e98, 0x703c, 0xa005,
-+      0x00c0, 0x2eac, 0x703f, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb,
-+      0x00c8, 0x2eb3, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+      0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x2ec0, 0x0078, 0x2e6a,
-+      0x7000, 0xa086, 0x0006, 0x0040, 0x2ec9, 0x1078, 0x4b30, 0x0078,
-+      0x2e6a, 0x007c, 0x6008, 0xa085, 0x0200, 0x600a, 0xa384, 0x0200,
-+      0x0040, 0x2ed6, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006,
-+      0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942,
-+      0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000,
-+      0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079,
-+      0x2ef1, 0x2482, 0x2efb, 0x2f04, 0x2ef9, 0x2ef9, 0x2ef9, 0x2ef9,
-+      0x2ef9, 0x1078, 0x23eb, 0x6820, 0xa084, 0x0001, 0x00c0, 0x2f04,
-+      0x1078, 0x33d8, 0x0078, 0x2f0a, 0x7060, 0x2c50, 0x2060, 0x6800,
-+      0x6002, 0x2a60, 0x2021, 0x515a, 0x2404, 0xa005, 0x0040, 0x2f13,
-+      0x2020, 0x0078, 0x2f0c, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078,
-+      0x33df, 0x1078, 0x33ee, 0x6008, 0xa084, 0xfdff, 0x600a, 0x682b,
-+      0x0000, 0x789b, 0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x4b78,
-+      0xa684, 0x0800, 0x0040, 0x2f30, 0x691c, 0xa18d, 0x2000, 0x691e,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x2f40, 0x7868, 0xa08c, 0x00ff,
-+      0x0040, 0x2f3e, 0x681b, 0x001e, 0x0078, 0x2f40, 0x681b, 0x0000,
-+      0x2021, 0x515a, 0x2404, 0xad06, 0x0040, 0x2f47, 0x7460, 0x6800,
-+      0x2022, 0x68c3, 0x0000, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078,
-+      0x1c70, 0x0078, 0x2482, 0x1078, 0x2e46, 0x682b, 0x0000, 0x2001,
-+      0x000e, 0x6f14, 0x1078, 0x3918, 0xa08c, 0x00ff, 0x6916, 0x6818,
-+      0xa084, 0x8000, 0x0040, 0x2f66, 0x703c, 0x681a, 0xa68c, 0xdf00,
-+      0x691e, 0x706f, 0x0000, 0x0078, 0x2482, 0x7000, 0xa005, 0x00c0,
-+      0x2f73, 0x0078, 0x2482, 0xa006, 0x1078, 0x4776, 0x6817, 0x0000,
-+      0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820,
-+      0xa085, 0x00ff, 0x6822, 0x7000, 0x0079, 0x2f86, 0x2482, 0x2f90,
-+      0x2f90, 0x2f92, 0x2f92, 0x2f92, 0x2f92, 0x2f8e, 0x1078, 0x23eb,
-+      0x1078, 0x33ee, 0x6008, 0xa084, 0xffef, 0x600a, 0x0078, 0x33a8,
-+      0x2300, 0x0079, 0x2f9b, 0x2f9e, 0x2fa0, 0x2fd9, 0x1078, 0x23eb,
-+      0x7000, 0x0079, 0x2fa3, 0x2482, 0x2fad, 0x2fad, 0x2fc8, 0x2fad,
-+      0x2fd5, 0x2fc8, 0x2fab, 0x1078, 0x23eb, 0xa684, 0x0060, 0xa086,
-+      0x0060, 0x00c0, 0x2fc4, 0xa6b4, 0xffdf, 0xa6b4, 0xbfff, 0xa6b5,
-+      0x2000, 0x7e5a, 0x681c, 0xa084, 0xffdf, 0x681e, 0x1078, 0x4776,
-+      0x1078, 0x4a3a, 0x0078, 0x3888, 0xa684, 0x2000, 0x0040, 0x2fb7,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x2fd5, 0x681b, 0x0015, 0xa684,
-+      0x4000, 0x0040, 0x2fd5, 0x681b, 0x0007, 0x1078, 0x389c, 0x0078,
-+      0x2459, 0x1078, 0x23eb, 0x2300, 0x0079, 0x2fde, 0x2fe1, 0x2fe3,
-+      0x3016, 0x1078, 0x23eb, 0x7000, 0x0079, 0x2fe6, 0x2482, 0x2ff0,
-+      0x2ff0, 0x300b, 0x2ff0, 0x3012, 0x300b, 0x2fee, 0x1078, 0x23eb,
-+      0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x3007, 0xa6b4, 0xffbf,
-+      0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffbf,
-+      0x681e, 0x1078, 0x4776, 0x1078, 0x4a3a, 0x0078, 0x3888, 0xa684,
-+      0x2000, 0x0040, 0x2ffa, 0x6818, 0xa084, 0x8000, 0x0040, 0x3012,
-+      0x681b, 0x0007, 0x781b, 0x00cd, 0x0078, 0x2459, 0x6820, 0xa085,
-+      0x0004, 0x6822, 0x1078, 0x3853, 0xa6b5, 0x0800, 0x1078, 0x36c1,
-+      0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x2300, 0x0079,
-+      0x3029, 0x302c, 0x302e, 0x3030, 0x1078, 0x23eb, 0x0078, 0x36ad,
-+      0xa684, 0x0400, 0x00c0, 0x3059, 0x79e4, 0xa184, 0x0020, 0x0040,
-+      0x3040, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3040, 0x782b, 0x3009,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4,
-+      0xa184, 0x0020, 0x0040, 0x3051, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+      0x3055, 0x2001, 0x0014, 0x0078, 0x2d01, 0xa184, 0x0007, 0x0079,
-+      0x3091, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff,
-+      0x0040, 0x308f, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0,
-+      0x3080, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x3073, 0x2009,
-+      0xfff7, 0x0078, 0x3079, 0xa386, 0x0003, 0x00c0, 0x3080, 0x2009,
-+      0xffef, 0x0c7e, 0x7054, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b,
-+      0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff, 0x6922, 0x0078,
-+      0x3888, 0x299e, 0x29a9, 0x309b, 0x30a3, 0x3099, 0x3099, 0x3888,
-+      0x3888, 0x1078, 0x23eb, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+      0x6922, 0x0078, 0x3892, 0x6920, 0xa18c, 0xfdff, 0xa18c, 0xfeff,
-+      0x6922, 0x0078, 0x3888, 0x79e4, 0xa184, 0x0030, 0x0040, 0x30b5,
-+      0x78ec, 0xa084, 0x0003, 0x00c0, 0x30dc, 0x7000, 0xa086, 0x0004,
-+      0x00c0, 0x30cf, 0x706c, 0xa086, 0x0002, 0x00c0, 0x30c5, 0x2011,
-+      0x0002, 0x2019, 0x0000, 0x0078, 0x2848, 0x706c, 0xa086, 0x0006,
-+      0x0040, 0x30bf, 0x706c, 0xa086, 0x0004, 0x0040, 0x30bf, 0x7000,
-+      0xa086, 0x0000, 0x0040, 0x2459, 0x6818, 0xa085, 0x8000, 0x681a,
-+      0x2001, 0x0014, 0x0078, 0x2d01, 0xa184, 0x0007, 0x0079, 0x30e0,
-+      0x3888, 0x3888, 0x30e8, 0x3888, 0x38ed, 0x38ed, 0x3888, 0x3888,
-+      0xa684, 0x0080, 0x0040, 0x3117, 0x7194, 0x81ff, 0x0040, 0x3117,
-+      0xa182, 0x000d, 0x00d0, 0x30f8, 0x7097, 0x0000, 0x0078, 0x30fd,
-+      0xa182, 0x000c, 0x7096, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa,
-+      0x157e, 0x137e, 0x147e, 0x7098, 0x8114, 0xa210, 0x729a, 0xa080,
-+      0x000b, 0xad00, 0x2098, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108,
-+      0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078, 0x3892, 0xa684,
-+      0x0400, 0x00c0, 0x3158, 0x6820, 0xa084, 0x0001, 0x0040, 0x3892,
-+      0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x312c, 0xa086, 0x0060,
-+      0x00c0, 0x312c, 0xa18d, 0x4000, 0xa18c, 0xfffb, 0x795a, 0x69b6,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xa085,
-+      0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3407, 0xa18c,
-+      0x00f8, 0x00c0, 0x3407, 0x157e, 0x137e, 0x147e, 0x20a1, 0x012b,
-+      0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6,
-+      0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, 0x0078, 0x3892,
-+      0x6818, 0xa084, 0x8000, 0x0040, 0x315f, 0x681b, 0x0008, 0x781b,
-+      0x00c3, 0x0078, 0x2459, 0x2300, 0x0079, 0x3166, 0x316b, 0x320a,
-+      0x3169, 0x1078, 0x23eb, 0x7000, 0xa084, 0x0007, 0x0079, 0x3170,
-+      0x2482, 0x317a, 0x31af, 0x3185, 0x3178, 0x2482, 0x3178, 0x3178,
-+      0x1078, 0x23eb, 0x681c, 0xa084, 0x2000, 0x0040, 0x3193, 0x6008,
-+      0xa085, 0x0002, 0x600a, 0x0078, 0x3193, 0x68c0, 0xa005, 0x00c0,
-+      0x31af, 0x6920, 0xa18d, 0x0001, 0x6922, 0x68c3, 0x0001, 0x6800,
-+      0x706a, 0x0078, 0x31a9, 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800,
-+      0x6006, 0xa005, 0x00c0, 0x319d, 0x6002, 0x681c, 0xa084, 0x000e,
-+      0x0040, 0x31a9, 0x7014, 0x68ba, 0x7130, 0xa188, 0x7400, 0x0078,
-+      0x31ab, 0x2009, 0x7500, 0x2104, 0x6802, 0x2d0a, 0x7162, 0x6eb6,
-+      0xa684, 0x0060, 0x0040, 0x3208, 0xa684, 0x0800, 0x00c0, 0x31c3,
-+      0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078,
-+      0x4776, 0x0078, 0x3208, 0xa684, 0x0020, 0x0040, 0x31d8, 0x68c0,
-+      0xa005, 0x0040, 0x31cf, 0x1078, 0x4b78, 0x0078, 0x31d2, 0xa006,
-+      0x1078, 0x4b30, 0x79d8, 0x7adc, 0x69aa, 0x6aa6, 0x0078, 0x31de,
-+      0x1078, 0x37fc, 0x69aa, 0x6aa6, 0x1078, 0x4b30, 0xa684, 0x8000,
-+      0x0040, 0x3208, 0xa684, 0x7fff, 0x68b6, 0x2001, 0x0076, 0x1078,
-+      0x3918, 0x2010, 0x2001, 0x0078, 0x1078, 0x3918, 0x2008, 0xa684,
-+      0x0020, 0x00c0, 0x3200, 0x2001, 0x007a, 0x1078, 0x3918, 0x801b,
-+      0x00c8, 0x31fb, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+      0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae,
-+      0x0078, 0x2482, 0x0078, 0x36ad, 0x7037, 0x0000, 0xa282, 0x0006,
-+      0x0050, 0x3214, 0x1078, 0x23eb, 0x7000, 0xa084, 0x0007, 0x10c0,
-+      0x39be, 0x2300, 0x0079, 0x321c, 0x321f, 0x3248, 0x325c, 0x2200,
-+      0x0079, 0x3222, 0x3246, 0x36ad, 0x3228, 0x3246, 0x3278, 0x32ba,
-+      0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0x157e, 0x20a9,
-+      0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x3238, 0x0078, 0x3231,
-+      0x157f, 0xad80, 0x0009, 0x7036, 0x6817, 0x0000, 0x68b7, 0x0700,
-+      0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x369d, 0x1078, 0x23eb,
-+      0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0xad80, 0x0009,
-+      0x7036, 0x2200, 0x0079, 0x3254, 0x36ad, 0x325a, 0x325a, 0x3278,
-+      0x325a, 0x36ad, 0x1078, 0x23eb, 0x7003, 0x0005, 0x2001, 0x7610,
-+      0x2068, 0x704a, 0xad80, 0x0009, 0x7036, 0x2200, 0x0079, 0x3268,
-+      0x3270, 0x326e, 0x326e, 0x3270, 0x326e, 0x3270, 0x1078, 0x23eb,
-+      0x1078, 0x36d1, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078, 0x2459,
-+      0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+      0xa484, 0x001f, 0xa215, 0x2069, 0x7500, 0x2d04, 0x2d08, 0x7162,
-+      0x2068, 0xa005, 0x0040, 0x3293, 0x6814, 0xa206, 0x0040, 0x32af,
-+      0x6800, 0x0078, 0x3286, 0x7003, 0x0005, 0x2001, 0x7610, 0x2068,
-+      0x704a, 0x7036, 0x157e, 0x20a9, 0x0031, 0x2003, 0x0000, 0x8000,
-+      0x0070, 0x32a4, 0x0078, 0x329d, 0x157f, 0xad80, 0x0009, 0x7036,
-+      0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4,
-+      0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3309, 0x1078, 0x36c9,
-+      0x0078, 0x3309, 0x7003, 0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b,
-+      0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x79a8, 0x79a8, 0xa18c,
-+      0x00ff, 0xa1e8, 0x7400, 0x2d04, 0x2d08, 0x7162, 0x2068, 0xa005,
-+      0x0040, 0x32d9, 0x6814, 0xa206, 0x0040, 0x32f4, 0x6800, 0x0078,
-+      0x32cc, 0x7003, 0x0005, 0x2001, 0x7610, 0x2068, 0x704a, 0x157e,
-+      0x20a9, 0x0031, 0x2003, 0x0000, 0x8000, 0x0070, 0x32e9, 0x0078,
-+      0x32e2, 0x157f, 0xad80, 0x0009, 0x7036, 0x6a16, 0x68b7, 0x0700,
-+      0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084,
-+      0x0c00, 0x0040, 0x3309, 0xa084, 0x0800, 0x0040, 0x3303, 0x1078,
-+      0x36cd, 0x0078, 0x3309, 0x1078, 0x36c9, 0x708b, 0x0000, 0x0078,
-+      0x3309, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xa080, 0x5380, 0x2060, 0x7056, 0x6000, 0x705a, 0x6004, 0x705e,
-+      0xa684, 0x0060, 0x0040, 0x3361, 0x6b98, 0x6c94, 0x69ac, 0x68b0,
-+      0xa105, 0x00c0, 0x3343, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4,
-+      0xb7ff, 0x7e5a, 0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x3361,
-+      0x68c0, 0xa005, 0x0040, 0x333c, 0x7003, 0x0003, 0x682b, 0x0000,
-+      0x1078, 0x4a29, 0x0078, 0x333e, 0x1078, 0x4a3a, 0xa6b5, 0x2000,
-+      0x7e5a, 0x0078, 0x3361, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400,
-+      0xa305, 0x0040, 0x3361, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0,
-+      0xa6b4, 0xbfff, 0x7e5a, 0x007e, 0x68c0, 0xa005, 0x007f, 0x0040,
-+      0x335f, 0x7003, 0x0003, 0x1078, 0x4a29, 0x0078, 0x3361, 0x1078,
-+      0x4a85, 0x077f, 0x1078, 0x37ef, 0x2009, 0x0065, 0xa684, 0x0004,
-+      0x0040, 0x3382, 0x78e4, 0xa084, 0x0030, 0x0040, 0x337a, 0x78ec,
-+      0xa084, 0x0003, 0x0040, 0x337a, 0x782b, 0x3008, 0x2009, 0x0065,
-+      0x0078, 0x3382, 0x0f7e, 0x2079, 0x5100, 0x1078, 0x4776, 0x0f7f,
-+      0x0040, 0x2482, 0x791a, 0x2d00, 0x704a, 0x8207, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa080, 0x5380, 0x2048, 0x0078, 0x2459,
-+      0x6020, 0xa005, 0x0040, 0x339c, 0x8001, 0x6022, 0x6008, 0xa085,
-+      0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078, 0x4776,
-+      0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100,
-+      0x7000, 0xa084, 0x0007, 0x0079, 0x33ad, 0x2482, 0x33b7, 0x33b7,
-+      0x33d4, 0x33bf, 0x33bd, 0x33bf, 0x33b5, 0x1078, 0x23eb, 0x1078,
-+      0x33df, 0x1078, 0x33d8, 0x1078, 0x1c70, 0x0078, 0x2482, 0x706c,
-+      0x706f, 0x0000, 0x7093, 0x0000, 0x0079, 0x33c6, 0x33d0, 0x33d0,
-+      0x33ce, 0x33ce, 0x33ce, 0x33d0, 0x33ce, 0x33d0, 0x0079, 0x2861,
-+      0x706f, 0x0000, 0x0078, 0x2482, 0x681b, 0x0000, 0x0078, 0x2f17,
-+      0x6800, 0xa005, 0x00c0, 0x33dd, 0x6002, 0x6006, 0x007c, 0x6010,
-+      0xa005, 0x0040, 0x33e8, 0x8001, 0x00d0, 0x33e8, 0x1078, 0x23eb,
-+      0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018, 0xa005,
-+      0x0040, 0x33f4, 0x8001, 0x601a, 0x007c, 0x1078, 0x3912, 0x681b,
-+      0x0018, 0x0078, 0x342b, 0x1078, 0x3912, 0x681b, 0x0019, 0x0078,
-+      0x342b, 0x1078, 0x3912, 0x681b, 0x001a, 0x0078, 0x342b, 0x1078,
-+      0x3912, 0x681b, 0x0003, 0x0078, 0x342b, 0x7780, 0x1078, 0x37ef,
-+      0x7184, 0xa18c, 0x00ff, 0xa1e8, 0x7400, 0x2d04, 0x2d08, 0x2068,
-+      0xa005, 0x00c0, 0x341d, 0x0078, 0x2482, 0x6814, 0x7280, 0xa206,
-+      0x0040, 0x3425, 0x6800, 0x0078, 0x3416, 0x6800, 0x200a, 0x681b,
-+      0x0005, 0x708b, 0x0000, 0x1078, 0x33df, 0x6820, 0xa084, 0x0001,
-+      0x00c0, 0x3434, 0x1078, 0x33d8, 0x1078, 0x33ee, 0x681f, 0x0000,
-+      0x6823, 0x0020, 0x1078, 0x1c70, 0x0078, 0x2482, 0xa282, 0x0003,
-+      0x00c0, 0x369d, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff,
-+      0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100, 0x0040, 0x34a2,
-+      0xa18c, 0xfeff, 0x6922, 0xa4a4, 0x00ff, 0x0040, 0x348c, 0xa482,
-+      0x000c, 0x0048, 0x345f, 0x0040, 0x345f, 0x2021, 0x000c, 0x852b,
-+      0x852b, 0x1078, 0x3760, 0x0040, 0x3469, 0x1078, 0x355b, 0x0078,
-+      0x3495, 0x1078, 0x371b, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5,
-+      0x6006, 0x1078, 0x3586, 0x0c7f, 0x6920, 0xa18d, 0x0100, 0x6922,
-+      0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x3486,
-+      0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b, 0x3008,
-+      0x781b, 0x0065, 0x0078, 0x2459, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+      0xfff5, 0x6006, 0x1078, 0x3586, 0x0c7f, 0x7e58, 0xa684, 0x0400,
-+      0x00c0, 0x349e, 0x781b, 0x0058, 0x0078, 0x2459, 0x781b, 0x0065,
-+      0x0078, 0x2459, 0x0c7e, 0x7054, 0x2060, 0x6100, 0xa18c, 0x1000,
-+      0x0040, 0x34e2, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c,
-+      0x0048, 0x34b6, 0x0040, 0x34b6, 0x2011, 0x000c, 0x2400, 0xa202,
-+      0x00c8, 0x34bb, 0x2220, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086,
-+      0x0028, 0x00c0, 0x34cb, 0xa282, 0x0019, 0x00c8, 0x34d1, 0x2011,
-+      0x0019, 0x0078, 0x34d1, 0xa282, 0x000c, 0x00c8, 0x34d1, 0x2011,
-+      0x000c, 0x2200, 0xa502, 0x00c8, 0x34d6, 0x2228, 0x1078, 0x371f,
-+      0x852b, 0x852b, 0x1078, 0x3760, 0x0040, 0x34e2, 0x1078, 0x355b,
-+      0x0078, 0x34e6, 0x1078, 0x371b, 0x1078, 0x3586, 0x7858, 0xa085,
-+      0x0004, 0x785a, 0x0c7f, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078,
-+      0x2459, 0x0c7e, 0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x3509,
-+      0x6010, 0xa084, 0x000f, 0x00c0, 0x3503, 0x6104, 0xa18c, 0xfff5,
-+      0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078,
-+      0x3530, 0x68a0, 0xa084, 0x0200, 0x00c0, 0x3503, 0x6208, 0xa294,
-+      0x00ff, 0x7018, 0xa086, 0x0028, 0x00c0, 0x351e, 0xa282, 0x0019,
-+      0x00c8, 0x3524, 0x2011, 0x0019, 0x0078, 0x3524, 0xa282, 0x000c,
-+      0x00c8, 0x3524, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff,
-+      0xa382, 0x000c, 0x0048, 0x3530, 0x0040, 0x3530, 0x2019, 0x000c,
-+      0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa,
-+      0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100, 0x6822, 0x0c7f, 0x007c,
-+      0x0c7e, 0x2960, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019,
-+      0x0000, 0x0078, 0x354b, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+      0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xa085, 0x0100,
-+      0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7154, 0x2160, 0x1078, 0x3562,
-+      0x0c7f, 0x007c, 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86, 0x6018,
-+      0x789a, 0x7cae, 0x6412, 0x78a4, 0xa084, 0xfff8, 0xa18c, 0x0007,
-+      0xa105, 0x78a6, 0x6016, 0x788a, 0xa4a4, 0x000f, 0x8427, 0x8204,
-+      0x8004, 0xa084, 0x00ff, 0xa405, 0x600e, 0x78ec, 0xd08c, 0x00c0,
-+      0x3585, 0x6004, 0xa084, 0xfff5, 0x6006, 0x007c, 0x0c7e, 0x7054,
-+      0x2060, 0x1078, 0x358d, 0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4,
-+      0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886,
-+      0x007c, 0xa282, 0x0002, 0x00c0, 0x369d, 0x7aa8, 0x6920, 0xa18d,
-+      0x0080, 0x6922, 0xa184, 0x0200, 0x0040, 0x35e2, 0xa18c, 0xfdff,
-+      0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x369d, 0x1078,
-+      0x362b, 0x1078, 0x3586, 0xa980, 0x0001, 0x200c, 0x1078, 0x37eb,
-+      0x1078, 0x34f1, 0x88ff, 0x0040, 0x35d5, 0x789b, 0x0060, 0x2800,
-+      0x78aa, 0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0,
-+      0x35cf, 0x782b, 0x3008, 0x781b, 0x0056, 0x0078, 0x2459, 0x782b,
-+      0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x7e58, 0xa684, 0x0400,
-+      0x00c0, 0x35de, 0x781b, 0x0058, 0x0078, 0x2459, 0x781b, 0x0065,
-+      0x0078, 0x2459, 0xa282, 0x0002, 0x00c8, 0x35ea, 0xa284, 0x0001,
-+      0x0040, 0x35f4, 0x7154, 0xa188, 0x0000, 0x210c, 0xa18c, 0x2000,
-+      0x00c0, 0x35f4, 0x2011, 0x0000, 0x1078, 0x370d, 0x1078, 0x362b,
-+      0x1078, 0x3586, 0x7858, 0xa085, 0x0004, 0x785a, 0x782b, 0x3008,
-+      0x781b, 0x0065, 0x0078, 0x2459, 0x0c7e, 0x027e, 0x2960, 0x6000,
-+      0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x361b, 0x6014, 0xa084,
-+      0x0040, 0x00c0, 0x3619, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078,
-+      0x3628, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+      0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822,
-+      0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7054, 0x2060, 0x1078, 0x3632,
-+      0x0c7f, 0x007c, 0x82ff, 0x0040, 0x3637, 0x2011, 0x0040, 0x6018,
-+      0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0x78a6,
-+      0x788a, 0x6016, 0x78ec, 0xd08c, 0x00c0, 0x364a, 0x6004, 0xa084,
-+      0xffef, 0x6006, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040,
-+      0x3654, 0x007f, 0x0078, 0x3657, 0x007f, 0x0078, 0x3699, 0xa684,
-+      0x0020, 0x0040, 0x3699, 0x7888, 0xa084, 0x0040, 0x0040, 0x3699,
-+      0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x3667, 0x8000, 0xa005,
-+      0x0040, 0x367d, 0x831b, 0x00c8, 0x3670, 0x8001, 0x0040, 0x3695,
-+      0xa684, 0x4000, 0x0040, 0x367d, 0x78b8, 0x801b, 0x00c8, 0x3679,
-+      0x8000, 0xa084, 0x003f, 0x00c0, 0x3695, 0xa6b4, 0xbfff, 0x7e5a,
-+      0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x3689, 0xa291,
-+      0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x4b30, 0x781b,
-+      0x0064, 0x1078, 0x49b5, 0x0078, 0x2459, 0x781b, 0x0064, 0x0078,
-+      0x2459, 0x781b, 0x0065, 0x0078, 0x2459, 0x1078, 0x36d5, 0x782b,
-+      0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x1078, 0x36c1, 0x782b,
-+      0x3008, 0x781b, 0x0065, 0x0078, 0x2459, 0x6827, 0x0002, 0x1078,
-+      0x36c9, 0x78e4, 0xa084, 0x0030, 0x0040, 0x2482, 0x78ec, 0xa084,
-+      0x0003, 0x0040, 0x2482, 0x782b, 0x3008, 0x781b, 0x0065, 0x0078,
-+      0x2459, 0x2001, 0x0005, 0x0078, 0x36d7, 0x2001, 0x000c, 0x0078,
-+      0x36d7, 0x2001, 0x0006, 0x0078, 0x36d7, 0x2001, 0x000d, 0x0078,
-+      0x36d7, 0x2001, 0x0009, 0x0078, 0x36d7, 0x2001, 0x0007, 0x789b,
-+      0x0010, 0x78aa, 0x789b, 0x0060, 0x78ab, 0x0001, 0xa6b5, 0x0004,
-+      0x7e5a, 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b,
-+      0x8703, 0xa0e0, 0x5380, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184,
-+      0x000f, 0x0040, 0x36fb, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004,
-+      0xa085, 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184,
-+      0x0040, 0x0040, 0x370b, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004,
-+      0xa085, 0x0010, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab,
-+      0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060,
-+      0x78ab, 0x0004, 0x007c, 0x2021, 0x0000, 0x2029, 0x0032, 0x789b,
-+      0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+      0x7caa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x007c, 0x157e, 0x8007,
-+      0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4,
-+      0xa18c, 0xfff0, 0x2001, 0x5146, 0x2004, 0xa082, 0x0028, 0x0040,
-+      0x3749, 0x2021, 0x37d2, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078,
-+      0x374f, 0x2021, 0x37de, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011,
-+      0x0064, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x375e, 0x8420,
-+      0x2300, 0xa210, 0x0070, 0x375e, 0x0078, 0x3751, 0x157f, 0x007c,
-+      0x157e, 0x2009, 0x5146, 0x210c, 0xa182, 0x0032, 0x0048, 0x3774,
-+      0x0040, 0x3778, 0x2009, 0x37c4, 0x2019, 0x0011, 0x20a9, 0x000e,
-+      0x2011, 0x0032, 0x0078, 0x378a, 0xa182, 0x0028, 0x0040, 0x3782,
-+      0x2009, 0x37d2, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064,
-+      0x0078, 0x378a, 0x2009, 0x37de, 0x2019, 0x0019, 0x20a9, 0x000d,
-+      0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x379a, 0x0048, 0x379a,
-+      0x8108, 0x2300, 0xa210, 0x0070, 0x3797, 0x0078, 0x378a, 0x157f,
-+      0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x37a9, 0x7808,
-+      0xa085, 0x0070, 0x780a, 0x7044, 0xa085, 0x0070, 0x7046, 0x0078,
-+      0x37a9, 0x78ec, 0xa084, 0x0300, 0x0040, 0x37b1, 0x2104, 0x0078,
-+      0x37c2, 0x2104, 0xa09e, 0x1102, 0x00c0, 0x37c2, 0x2001, 0x04fd,
-+      0x2004, 0xa082, 0x0005, 0x0048, 0x37c1, 0x2001, 0x1201, 0x0078,
-+      0x37c2, 0x2104, 0xa005, 0x007c, 0x1102, 0x3002, 0x3202, 0x4203,
-+      0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07,
-+      0x0c07, 0x0e07, 0x3202, 0x4202, 0x5202, 0x6202, 0x7202, 0x6605,
-+      0x7605, 0x7805, 0x7a05, 0x7c05, 0x7e05, 0x7f05, 0x2202, 0x3202,
-+      0x4202, 0x5202, 0x5404, 0x6404, 0x7404, 0x7604, 0x7804, 0x7a04,
-+      0x7c04, 0x7e04, 0x7f04, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784,
-+      0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003,
-+      0xa105, 0xa0e0, 0x5400, 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b,
-+      0x00c8, 0x3803, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+      0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x5140, 0x2091, 0x8000,
-+      0x2104, 0x0079, 0x3813, 0x3849, 0x381d, 0x381d, 0x381d, 0x381d,
-+      0x381d, 0x381d, 0x384d, 0x1078, 0x23eb, 0x784b, 0x0004, 0x7848,
-+      0xa084, 0x0004, 0x00c0, 0x381f, 0x784b, 0x0008, 0x7848, 0xa084,
-+      0x0008, 0x00c0, 0x3826, 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858,
-+      0xa085, 0x4000, 0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x3849,
-+      0x0018, 0x3849, 0x681c, 0xa084, 0x0020, 0x00c0, 0x3847, 0x0e7e,
-+      0x2071, 0x5140, 0x1078, 0x389c, 0x0e7f, 0x0078, 0x3849, 0x781b,
-+      0x00cd, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x70b3, 0x0000, 0x1078,
-+      0x3a76, 0x0078, 0x3849, 0x0c7e, 0x6814, 0x8007, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa0e0, 0x5380, 0x6004, 0xa084, 0x000a,
-+      0x00c0, 0x3886, 0x6108, 0xa194, 0xff00, 0x0040, 0x3886, 0xa18c,
-+      0x00ff, 0x2001, 0x0019, 0xa106, 0x0040, 0x3875, 0x2001, 0x0032,
-+      0xa106, 0x0040, 0x3879, 0x0078, 0x387d, 0x2009, 0x0020, 0x0078,
-+      0x387f, 0x2009, 0x003f, 0x0078, 0x387f, 0x2011, 0x0000, 0x2100,
-+      0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, 0x007c,
-+      0x781b, 0x0065, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x0065,
-+      0x0078, 0x2459, 0x781b, 0x0058, 0x0078, 0x2459, 0x782b, 0x3008,
-+      0x781b, 0x0056, 0x0078, 0x2459, 0x2009, 0x5120, 0x210c, 0xa186,
-+      0x0000, 0x0040, 0x38b0, 0xa186, 0x0001, 0x0040, 0x38b3, 0x2009,
-+      0x5138, 0x200b, 0x000b, 0x706f, 0x0001, 0x781b, 0x0048, 0x007c,
-+      0x781b, 0x00c7, 0x007c, 0x2009, 0x5138, 0x200b, 0x000a, 0x007c,
-+      0x2009, 0x5120, 0x210c, 0xa186, 0x0000, 0x0040, 0x38d3, 0xa186,
-+      0x0001, 0x0040, 0x38cd, 0x2009, 0x5138, 0x200b, 0x000b, 0x706f,
-+      0x0001, 0x781b, 0x0048, 0x0078, 0x2459, 0x2009, 0x5138, 0x200b,
-+      0x000a, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b, 0x00c7, 0x0078,
-+      0x2459, 0x781b, 0x00cd, 0x0078, 0x2459, 0x782b, 0x3008, 0x781b,
-+      0x00cd, 0x0078, 0x2459, 0x781b, 0x008e, 0x0078, 0x2459, 0x782b,
-+      0x3008, 0x781b, 0x008e, 0x0078, 0x2459, 0x6818, 0xa084, 0x8000,
-+      0x0040, 0x38f4, 0x681b, 0x001d, 0x706f, 0x0001, 0x781b, 0x0048,
-+      0x0078, 0x2459, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3910,
-+      0x7808, 0xa084, 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005,
-+      0x78ec, 0xa084, 0x0021, 0x0040, 0x3910, 0x7044, 0x780a, 0xa005,
-+      0x007f, 0x007c, 0x7044, 0xa085, 0x0002, 0x7046, 0x780a, 0x007c,
-+      0x007e, 0x7830, 0xa084, 0x0040, 0x00c0, 0x3919, 0x0098, 0x3924,
-+      0x007f, 0x789a, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a,
-+      0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040,
-+      0x3933, 0x0098, 0x3931, 0x007f, 0x789a, 0x78ac, 0x007e, 0x7044,
-+      0x780a, 0x007f, 0x007c, 0x78ec, 0xa084, 0x0002, 0x00c0, 0x4760,
-+      0xa784, 0x007d, 0x00c0, 0x3947, 0x2700, 0x1078, 0x23eb, 0xa784,
-+      0x0001, 0x00c0, 0x2f6d, 0xa784, 0x0070, 0x0040, 0x3957, 0x0c7e,
-+      0x2d60, 0x2f68, 0x1078, 0x2396, 0x2d78, 0x2c68, 0x0c7f, 0xa784,
-+      0x0008, 0x0040, 0x3964, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x2482, 0x0078, 0x3888, 0xa784, 0x0004, 0x0040, 0x3997,
-+      0x78b8, 0xa084, 0x4001, 0x0040, 0x3997, 0x784b, 0x0008, 0x78ec,
-+      0xa084, 0x0003, 0x0040, 0x2482, 0x78e4, 0xa084, 0x0007, 0xa086,
-+      0x0001, 0x00c0, 0x3997, 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a,
-+      0x781b, 0x00cd, 0x0078, 0x2459, 0x784b, 0x0008, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x3993, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040,
-+      0x3993, 0x681b, 0x0007, 0x1078, 0x389c, 0x0078, 0x2459, 0x681b,
-+      0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833,
-+      0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2965,
-+      0x0018, 0x2459, 0x0078, 0x36a5, 0x6b14, 0x8307, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa080, 0x5380, 0x2060, 0x2048, 0x7056,
-+      0x6000, 0x705a, 0x6004, 0x705e, 0x2a60, 0x007c, 0x0079, 0x39c0,
-+      0x39c8, 0x39c9, 0x39c8, 0x39cb, 0x39c8, 0x39c8, 0x39c8, 0x39d0,
-+      0x007c, 0x1078, 0x33ee, 0x1078, 0x4776, 0x7038, 0x600a, 0x007c,
-+      0x70a0, 0xa005, 0x0040, 0x39dd, 0x2068, 0x1078, 0x1b62, 0x1078,
-+      0x46f8, 0x1078, 0x46ff, 0x70a3, 0x0000, 0x007c, 0x0e7e, 0x2091,
-+      0x8000, 0x2071, 0x5140, 0x7000, 0xa086, 0x0007, 0x00c0, 0x39f4,
-+      0x6110, 0x70bc, 0xa106, 0x00c0, 0x39f4, 0x0e7f, 0x1078, 0x1b6f,
-+      0x1078, 0x39fa, 0xa006, 0x007c, 0x2091, 0x8001, 0x0e7f, 0xa085,
-+      0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x5140, 0x0078, 0x21fa,
-+      0x785b, 0x0000, 0x70af, 0x000e, 0x2009, 0x0100, 0x017e, 0x70a0,
-+      0xa06d, 0x0040, 0x3a0f, 0x70a3, 0x0000, 0x0078, 0x3a15, 0x70b3,
-+      0x0000, 0x1078, 0x1b8b, 0x0040, 0x3a1b, 0x70ac, 0x6826, 0x1078,
-+      0x3af8, 0x0078, 0x3a0f, 0x017f, 0x157e, 0x0c7e, 0x0d7e, 0x20a9,
-+      0x0008, 0x2061, 0x7510, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d,
-+      0x0040, 0x3a33, 0x6800, 0x601e, 0x1078, 0x195a, 0x6008, 0x8000,
-+      0x600a, 0x0078, 0x3a26, 0x6018, 0xa06d, 0x0040, 0x3a3d, 0x6800,
-+      0x601a, 0x1078, 0x195a, 0x0078, 0x3a33, 0xace0, 0x0008, 0x0070,
-+      0x3a43, 0x0078, 0x3a23, 0x709c, 0xa084, 0x8000, 0x0040, 0x3a4a,
-+      0x1078, 0x3b72, 0x0d7f, 0x0c7f, 0x157f, 0x007c, 0x127e, 0x2091,
-+      0x2300, 0x6804, 0xa084, 0x000f, 0x0079, 0x3a56, 0x3a66, 0x3a66,
-+      0x3a66, 0x3a66, 0x3a66, 0x3a66, 0x3a68, 0x3a6e, 0x3a66, 0x3a66,
-+      0x3a66, 0x3a66, 0x3a66, 0x3a70, 0x3a66, 0x3a68, 0x1078, 0x23eb,
-+      0x1078, 0x44d0, 0x1078, 0x195a, 0x0078, 0x3a74, 0x6827, 0x000b,
-+      0x1078, 0x44d0, 0x1078, 0x3af8, 0x127f, 0x007c, 0x127e, 0x2091,
-+      0x2300, 0x0098, 0x3a92, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3a92,
-+      0x0d7e, 0x1078, 0x4708, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001,
-+      0x0000, 0x6827, 0x0084, 0x1078, 0x46c1, 0x1078, 0x3af8, 0x0d7f,
-+      0x0078, 0x3ac6, 0x7948, 0xa185, 0x4000, 0x784a, 0x0098, 0x3a9b,
-+      0x794a, 0x0078, 0x3a80, 0x7828, 0xa086, 0x1834, 0x00c0, 0x3aa4,
-+      0xa185, 0x0004, 0x0078, 0x3aab, 0x7828, 0xa086, 0x1814, 0x00c0,
-+      0x3a98, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab, 0x0002,
-+      0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a, 0x70b4, 0xa080,
-+      0x0091, 0x781a, 0x6827, 0x0284, 0x682c, 0x6836, 0x6830, 0x683a,
-+      0x2009, 0x0004, 0x2001, 0x0000, 0x1078, 0x46c1, 0x127f, 0x007c,
-+      0x0d7e, 0x6b14, 0x1078, 0x1bfd, 0x0040, 0x3ad5, 0x2068, 0x6827,
-+      0x0002, 0x1078, 0x3af8, 0x0078, 0x3aca, 0x0d7f, 0x007c, 0x0d7e,
-+      0x6b14, 0x6c28, 0xa4a4, 0x00ff, 0x1078, 0x1b9b, 0x0040, 0x3ae5,
-+      0x2068, 0x6827, 0x0002, 0x1078, 0x3af8, 0x0d7f, 0x007c, 0x0d7e,
-+      0x6b14, 0xa39c, 0x00ff, 0x1078, 0x1bce, 0x0040, 0x3af6, 0x2068,
-+      0x6827, 0x0002, 0x1078, 0x3af8, 0x0078, 0x3aeb, 0x0d7f, 0x007c,
-+      0x0c7e, 0x6914, 0x1078, 0x3b69, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+      0x0006, 0x0040, 0x3b13, 0xa186, 0x000d, 0x0040, 0x3b32, 0xa186,
-+      0x0017, 0x00c0, 0x3b0f, 0x1078, 0x195a, 0x0078, 0x3b11, 0x1078,
-+      0x1c72, 0x0c7f, 0x007c, 0x6004, 0x8001, 0x0048, 0x3b30, 0x6006,
-+      0x2009, 0x0000, 0xa684, 0x0001, 0x00c0, 0x3b20, 0xa18d, 0x8000,
-+      0xa684, 0x0004, 0x0040, 0x3b26, 0xa18d, 0x0002, 0x691e, 0x6823,
-+      0x0000, 0x7104, 0x810f, 0x6818, 0xa105, 0x681a, 0x0078, 0x3b0f,
-+      0x1078, 0x23eb, 0x6018, 0xa005, 0x00c0, 0x3b41, 0x6008, 0x8001,
-+      0x0048, 0x3b41, 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078,
-+      0x3b57, 0xac88, 0x0006, 0x2104, 0xa005, 0x0040, 0x3b4a, 0x2008,
-+      0x0078, 0x3b43, 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x3b11,
-+      0x600a, 0x6018, 0x2068, 0x6800, 0x601a, 0x0078, 0x3b3b, 0x157e,
-+      0x137e, 0x147e, 0x0c7e, 0x0d7e, 0x1078, 0x1937, 0x2da0, 0x137f,
-+      0x20a9, 0x0031, 0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x0078,
-+      0x3b0f, 0xa184, 0x001f, 0x8003, 0x8003, 0x8003, 0xa080, 0x7510,
-+      0x2060, 0x007c, 0x2019, 0x5151, 0x2304, 0xa085, 0x0001, 0x201a,
-+      0x2019, 0x0102, 0x2304, 0xa085, 0x0001, 0x201a, 0x007c, 0x2019,
-+      0x5151, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2019, 0x0102, 0x2304,
-+      0xa084, 0xfffe, 0x201a, 0x007c, 0x7990, 0xa18c, 0xfff8, 0x7992,
-+      0x70b4, 0xa080, 0x00dd, 0x781a, 0x0078, 0x2459, 0x70a3, 0x0000,
-+      0x7003, 0x0000, 0x7043, 0x0001, 0x7037, 0x0000, 0x0018, 0x2410,
-+      0x1078, 0x1b8b, 0x0040, 0x3bc7, 0x2009, 0x510f, 0x200b, 0x0000,
-+      0x68bc, 0x2060, 0x6100, 0xa184, 0x0300, 0x0040, 0x3bbb, 0x6827,
-+      0x000e, 0xa084, 0x0200, 0x0040, 0x3bb7, 0x6827, 0x0017, 0x1078,
-+      0x3af8, 0x0078, 0x3b96, 0x7000, 0xa086, 0x0007, 0x00c0, 0x3c29,
-+      0x2d00, 0x70a2, 0xad80, 0x000f, 0x7036, 0x0078, 0x3bce, 0x7040,
-+      0xa086, 0x0001, 0x0040, 0x2492, 0x0078, 0x2459, 0x2031, 0x0000,
-+      0x691c, 0xa184, 0x0002, 0x0040, 0x3bd7, 0xa6b5, 0x0004, 0xa184,
-+      0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x3cc2, 0x2004, 0xa635,
-+      0x6820, 0xa084, 0x0400, 0x0040, 0x3bef, 0x789b, 0x0018, 0x78ab,
-+      0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0x6820,
-+      0xa084, 0x8000, 0x00c0, 0x3bfd, 0x681c, 0xa084, 0x8000, 0x00c0,
-+      0x3c04, 0xa6b5, 0x0800, 0x0078, 0x3c04, 0xa6b5, 0x0400, 0x789b,
-+      0x000e, 0x6824, 0x8007, 0x78aa, 0x6820, 0xa084, 0x0100, 0x0040,
-+      0x3c0b, 0xa6b5, 0x4000, 0xa684, 0x0200, 0x0040, 0x3c25, 0x682c,
-+      0x78d2, 0x6830, 0x78d6, 0xa684, 0x0100, 0x0040, 0x3c23, 0x682c,
-+      0xa084, 0x0001, 0x0040, 0x3c23, 0x7888, 0xa084, 0x0040, 0x0040,
-+      0x3c23, 0xa6b5, 0x8000, 0x1078, 0x46f0, 0x7e5a, 0x6eb6, 0x0078,
-+      0x4727, 0x1078, 0x38fa, 0x00c0, 0x3cbc, 0x702c, 0x8004, 0x0048,
-+      0x3c37, 0x2019, 0x4e3b, 0x1078, 0x2276, 0x702f, 0x0001, 0x2041,
-+      0x0001, 0x2031, 0x1000, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f,
-+      0xa085, 0x0080, 0x78aa, 0x691c, 0xa184, 0x0002, 0x0040, 0x3c50,
-+      0xa6b5, 0x0004, 0x78ab, 0x0020, 0x6828, 0x78aa, 0xa8c0, 0x0002,
-+      0x681c, 0xd0f4, 0x0040, 0x3c59, 0x2c50, 0x1078, 0x39ac, 0x1078,
-+      0x45ff, 0x6820, 0xa084, 0x8000, 0x0040, 0x3c67, 0xa6b5, 0x0400,
-+      0x789b, 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x3c6e, 0x681c,
-+      0xa084, 0x8000, 0x00c0, 0x3c6e, 0xa6b5, 0x0800, 0x6820, 0xa084,
-+      0x0100, 0x0040, 0x3c75, 0xa6b5, 0x4000, 0x681c, 0xa084, 0x00c0,
-+      0x8003, 0x8003, 0x8007, 0xa080, 0x3cc2, 0x2004, 0xa635, 0xa684,
-+      0x0100, 0x0040, 0x3c8f, 0x682c, 0xa084, 0x0001, 0x0040, 0x3c8f,
-+      0x7888, 0xa084, 0x0040, 0x0040, 0x3c8f, 0xa6b5, 0x8000, 0x789b,
-+      0x007e, 0x7eae, 0x6eb6, 0x6814, 0x8007, 0x78aa, 0x7882, 0x2810,
-+      0x7aaa, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3cbc, 0x0018, 0x3cbc,
-+      0x70b4, 0xa080, 0x00e2, 0x781a, 0x1078, 0x3912, 0xa684, 0x0200,
-+      0x0040, 0x3cb0, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x1078, 0x46f0,
-+      0x2d00, 0x70a2, 0x704a, 0x6810, 0x70be, 0x7003, 0x0007, 0xad80,
-+      0x000f, 0x7036, 0x0078, 0x2459, 0x1078, 0x1b62, 0x1078, 0x3912,
-+      0x0078, 0x2459, 0x0000, 0x0300, 0x0200, 0x0000, 0x1078, 0x23eb,
-+      0x2300, 0x0079, 0x3ccb, 0x3cce, 0x3cce, 0x3cd0, 0x1078, 0x23eb,
-+      0x1078, 0x46ff, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x0040,
-+      0x3ce2, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x1078, 0x1b62,
-+      0x0078, 0x3b96, 0x2001, 0x000a, 0x1078, 0x4691, 0x0078, 0x3b96,
-+      0xa282, 0x0005, 0x0050, 0x3cee, 0x1078, 0x23eb, 0x7000, 0xa084,
-+      0x0007, 0x10c0, 0x39be, 0x1078, 0x1937, 0x00c0, 0x3d0d, 0xa684,
-+      0x0004, 0x0040, 0x3cff, 0x2001, 0x2800, 0x0078, 0x3d01, 0x2001,
-+      0x0800, 0x71b4, 0xa188, 0x0091, 0x789b, 0x000e, 0x78aa, 0x2031,
-+      0x0400, 0x7e5a, 0x791a, 0x0078, 0x2459, 0x6807, 0x0106, 0x680b,
-+      0x0000, 0x689f, 0x0000, 0x6827, 0x0000, 0xa386, 0x0002, 0x00c0,
-+      0x3d2e, 0xa286, 0x0002, 0x00c0, 0x3d2e, 0x78a0, 0xa005, 0x00c0,
-+      0x3d2e, 0xa484, 0x8000, 0x00c0, 0x3d2e, 0x78e4, 0xa084, 0x0008,
-+      0x0040, 0x3d2e, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x1078, 0x411e,
-+      0x2d00, 0x70a2, 0x704a, 0x7003, 0x0007, 0x7037, 0x0000, 0x6824,
-+      0xa084, 0x0080, 0x0040, 0x3d40, 0x1078, 0x41d0, 0x0078, 0x2459,
-+      0x2300, 0x0079, 0x3d43, 0x3d46, 0x3dc7, 0x3de6, 0x2200, 0x0079,
-+      0x3d49, 0x3d4e, 0x3d5e, 0x3d84, 0x3d90, 0x3db3, 0x2029, 0x0001,
-+      0xa026, 0x2011, 0x0000, 0x1078, 0x42f1, 0x0079, 0x3d57, 0x3d5c,
-+      0x2459, 0x3b96, 0x3d5c, 0x3d5c, 0x1078, 0x23eb, 0x7990, 0xa18c,
-+      0x0007, 0x00c0, 0x3d65, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684,
-+      0x0004, 0x0040, 0x3d6d, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011,
-+      0x0001, 0x1078, 0x42f1, 0x0079, 0x3d75, 0x3d7a, 0x2459, 0x3b96,
-+      0x3d82, 0x3d7c, 0x0078, 0x472d, 0x70ab, 0x3d80, 0x0078, 0x2459,
-+      0x0078, 0x3d7a, 0x1078, 0x23eb, 0xa684, 0x0010, 0x0040, 0x3d8e,
-+      0x1078, 0x419f, 0x0040, 0x3d8e, 0x0078, 0x2459, 0x0078, 0x420c,
-+      0x6000, 0xa084, 0x0002, 0x0040, 0x3dad, 0x70b4, 0xa080, 0x00d2,
-+      0x781a, 0x0d7e, 0x1078, 0x4708, 0x2d00, 0x682e, 0x6827, 0x0000,
-+      0x1078, 0x3af8, 0x0d7f, 0x1078, 0x195a, 0x7003, 0x0000, 0x7037,
-+      0x0000, 0x704b, 0x0000, 0x0078, 0x3b96, 0xa684, 0x0004, 0x00c0,
-+      0x3db3, 0x0078, 0x472d, 0x6000, 0xa084, 0x0004, 0x00c0, 0x3dc5,
-+      0x6000, 0xa084, 0x0001, 0x0040, 0x3dc5, 0x70ab, 0x3dc5, 0x2001,
-+      0x0007, 0x1078, 0x4689, 0x0078, 0x4733, 0x0078, 0x472d, 0x2200,
-+      0x0079, 0x3dca, 0x3dcf, 0x3dcf, 0x3dcf, 0x3dd1, 0x3dcf, 0x1078,
-+      0x23eb, 0x70a7, 0x3dd5, 0x0078, 0x4739, 0x2011, 0x0018, 0x1078,
-+      0x42eb, 0x0079, 0x3ddb, 0x3de0, 0x2459, 0x3b96, 0x3de2, 0x3de4,
-+      0x1078, 0x23eb, 0x1078, 0x23eb, 0x1078, 0x23eb, 0x2200, 0x0079,
-+      0x3de9, 0x3dee, 0x3df0, 0x3df0, 0x3dee, 0x3dee, 0x1078, 0x23eb,
-+      0x78e4, 0xa084, 0x0008, 0x0040, 0x3e05, 0x70a7, 0x3df9, 0x0078,
-+      0x4739, 0x2011, 0x0004, 0x1078, 0x42eb, 0x0079, 0x3dff, 0x3e05,
-+      0x2459, 0x3b96, 0x3e05, 0x3e0f, 0x3e13, 0x70ab, 0x3e0d, 0x2001,
-+      0x0003, 0x1078, 0x4689, 0x0078, 0x4733, 0x0078, 0x472d, 0x70ab,
-+      0x3e05, 0x0078, 0x2459, 0x70ab, 0x3e17, 0x0078, 0x2459, 0x0078,
-+      0x3e0d, 0xa282, 0x0003, 0x0050, 0x3e1f, 0x1078, 0x23eb, 0xa386,
-+      0x0002, 0x00c0, 0x3e38, 0xa286, 0x0002, 0x00c0, 0x3e3e, 0x78a0,
-+      0xa005, 0x00c0, 0x3e3e, 0xa484, 0x8000, 0x00c0, 0x3e3e, 0x78e4,
-+      0xa084, 0x0008, 0x0040, 0x3e38, 0xa6b5, 0x0008, 0x2019, 0x0000,
-+      0xa684, 0x0008, 0x0040, 0x3e3e, 0x1078, 0x417c, 0x6810, 0x70be,
-+      0x7003, 0x0007, 0x2300, 0x0079, 0x3e45, 0x3e48, 0x3e75, 0x3e7d,
-+      0x2200, 0x0079, 0x3e4b, 0x3e50, 0x3e4e, 0x3e69, 0x1078, 0x23eb,
-+      0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001, 0x1078, 0x42f1,
-+      0x0079, 0x3e5a, 0x3e5f, 0x2459, 0x3b96, 0x3e67, 0x3e61, 0x0078,
-+      0x472d, 0x70ab, 0x3e65, 0x0078, 0x2459, 0x0078, 0x3e5f, 0x1078,
-+      0x23eb, 0xa684, 0x0010, 0x0040, 0x3e73, 0x1078, 0x419f, 0x0040,
-+      0x3e73, 0x0078, 0x2459, 0x0078, 0x420c, 0x2200, 0x0079, 0x3e78,
-+      0x3e7b, 0x3e7b, 0x3e7b, 0x1078, 0x23eb, 0x2200, 0x0079, 0x3e80,
-+      0x3e83, 0x3e85, 0x3e85, 0x1078, 0x23eb, 0x78e4, 0xa084, 0x0008,
-+      0x0040, 0x3e9a, 0x70a7, 0x3e8e, 0x0078, 0x4739, 0x2011, 0x0004,
-+      0x1078, 0x42eb, 0x0079, 0x3e94, 0x3e9a, 0x2459, 0x3b96, 0x3e9a,
-+      0x3ea4, 0x3ea8, 0x70ab, 0x3ea2, 0x2001, 0x0003, 0x1078, 0x4689,
-+      0x0078, 0x4733, 0x0078, 0x472d, 0x70ab, 0x3e9a, 0x0078, 0x2459,
-+      0x70ab, 0x3eac, 0x0078, 0x2459, 0x0078, 0x3ea2, 0x2300, 0x0079,
-+      0x3eb1, 0x3eb6, 0x3eb8, 0x3eb4, 0x1078, 0x23eb, 0x70a4, 0x007a,
-+      0x70a4, 0x007a, 0xa282, 0x0002, 0x0050, 0x3ec0, 0x1078, 0x23eb,
-+      0xa684, 0x0200, 0x0040, 0x3eca, 0x1078, 0x46f8, 0x1078, 0x42d3,
-+      0x1078, 0x46ff, 0x2300, 0x0079, 0x3ecd, 0x3ed0, 0x3ef4, 0x3f5a,
-+      0xa286, 0x0001, 0x0040, 0x3ed6, 0x1078, 0x23eb, 0xa684, 0x0200,
-+      0x0040, 0x3ede, 0x1078, 0x46f8, 0x1078, 0x46ff, 0x2001, 0x0001,
-+      0x1078, 0x4691, 0x78b8, 0xa084, 0xc001, 0x0040, 0x3ef0, 0x7848,
-+      0xa085, 0x0008, 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3eeb,
-+      0x7003, 0x0000, 0x0078, 0x3b96, 0x2200, 0x0079, 0x3ef7, 0x3ef9,
-+      0x3f2a, 0x70a7, 0x3efd, 0x0078, 0x4739, 0x2011, 0x000d, 0x1078,
-+      0x42eb, 0x0079, 0x3f03, 0x3f0a, 0x2459, 0x3b96, 0x3f12, 0x3f1a,
-+      0x3f20, 0x3f22, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x0078, 0x4727, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x0078, 0x4727, 0x70ab, 0x3f1e, 0x0078, 0x2459, 0x0078, 0x3f0a,
-+      0x1078, 0x23eb, 0x70ab, 0x3f26, 0x0078, 0x2459, 0x1078, 0x473f,
-+      0x0078, 0x2459, 0x70a7, 0x3f2e, 0x0078, 0x4739, 0x2011, 0x0012,
-+      0x1078, 0x42eb, 0x0079, 0x3f34, 0x3f3a, 0x2459, 0x3b96, 0x3f46,
-+      0x3f4e, 0x3f54, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x70b4, 0xa080, 0x00a6, 0x781a, 0x0078, 0x2459, 0xa6b4, 0x00ff,
-+      0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0x70ab, 0x3f52,
-+      0x0078, 0x2459, 0x0078, 0x3f3a, 0x70ab, 0x3f58, 0x0078, 0x2459,
-+      0x0078, 0x3f46, 0xa286, 0x0001, 0x0040, 0x3f60, 0x1078, 0x23eb,
-+      0x70a7, 0x3f64, 0x0078, 0x4739, 0x2011, 0x0015, 0x1078, 0x42eb,
-+      0x0079, 0x3f6a, 0x3f6f, 0x2459, 0x3b96, 0x3f7d, 0x3f89, 0xa6b4,
-+      0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x783b, 0x1301, 0x70b4,
-+      0xa080, 0x00b4, 0x781a, 0x0078, 0x2459, 0xa6b4, 0x00ff, 0xa6b5,
-+      0x0400, 0x6eb6, 0x7e5a, 0x70b4, 0xa080, 0x00a6, 0x781a, 0x0078,
-+      0x2459, 0x70ab, 0x3f8d, 0x0078, 0x2459, 0x0078, 0x3f6f, 0xa282,
-+      0x0003, 0x0050, 0x3f95, 0x1078, 0x23eb, 0x2300, 0x0079, 0x3f98,
-+      0x3f9b, 0x3fd2, 0x402d, 0xa286, 0x0001, 0x0040, 0x3fa1, 0x1078,
-+      0x23eb, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x3fae,
-+      0x1078, 0x3af8, 0x7003, 0x0000, 0x0078, 0x3b96, 0x683b, 0x0000,
-+      0x6837, 0x0000, 0xa684, 0x0200, 0x0040, 0x3fbc, 0x1078, 0x46f8,
-+      0x1078, 0x42d3, 0x1078, 0x46ff, 0x2001, 0x0001, 0x1078, 0x4691,
-+      0x78b8, 0xa084, 0xc001, 0x0040, 0x3fce, 0x7848, 0xa085, 0x0008,
-+      0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x3fc9, 0x7003, 0x0000,
-+      0x0078, 0x3b96, 0x2200, 0x0079, 0x3fd5, 0x3fd7, 0x4008, 0x70a7,
-+      0x3fdb, 0x0078, 0x4739, 0x2011, 0x000d, 0x1078, 0x42eb, 0x0079,
-+      0x3fe1, 0x3fe8, 0x2459, 0x3b96, 0x3ff0, 0x3ff8, 0x3ffe, 0x4000,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727,
-+      0x70ab, 0x3ffc, 0x0078, 0x2459, 0x0078, 0x3fe8, 0x1078, 0x23eb,
-+      0x70ab, 0x4004, 0x0078, 0x2459, 0x1078, 0x473f, 0x0078, 0x2459,
-+      0x70a7, 0x400c, 0x0078, 0x4739, 0x2011, 0x0005, 0x1078, 0x42eb,
-+      0x0079, 0x4012, 0x4017, 0x2459, 0x3b96, 0x401f, 0x4027, 0xa6b4,
-+      0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0xa6b4,
-+      0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727, 0x70ab,
-+      0x402b, 0x0078, 0x2459, 0x0078, 0x4017, 0xa286, 0x0001, 0x0040,
-+      0x4033, 0x1078, 0x23eb, 0x70a7, 0x4037, 0x0078, 0x4739, 0x2011,
-+      0x0006, 0x1078, 0x42eb, 0x0079, 0x403d, 0x4042, 0x2459, 0x3b96,
-+      0x4048, 0x4052, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0078, 0x4727,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0xa6b5, 0x4000, 0x7e5a,
-+      0x0078, 0x4727, 0x70ab, 0x4056, 0x0078, 0x2459, 0x0078, 0x4042,
-+      0x2300, 0x0079, 0x405b, 0x4060, 0x405e, 0x405e, 0x1078, 0x23eb,
-+      0x1078, 0x23eb, 0x2300, 0x71a8, 0xa005, 0x017a, 0x6810, 0x70be,
-+      0xa282, 0x0003, 0x0050, 0x406e, 0x1078, 0x23eb, 0x2300, 0x0079,
-+      0x4071, 0x4074, 0x4082, 0x40a4, 0xa684, 0x0200, 0x0040, 0x407c,
-+      0x1078, 0x46f8, 0x1078, 0x46ff, 0x2001, 0x0001, 0x1078, 0x4691,
-+      0x0078, 0x2459, 0xa296, 0x0002, 0x0040, 0x408b, 0x82ff, 0x0040,
-+      0x408b, 0x1078, 0x23eb, 0x70a7, 0x408f, 0x0078, 0x4739, 0x2011,
-+      0x0018, 0x1078, 0x42eb, 0x0079, 0x4095, 0x409a, 0x2459, 0x3b96,
-+      0x409c, 0x409e, 0x0078, 0x4727, 0x0078, 0x4727, 0x70ab, 0x40a2,
-+      0x0078, 0x2459, 0x0078, 0x409a, 0x2200, 0x0079, 0x40a7, 0x40a9,
-+      0x40c2, 0x70a7, 0x40ad, 0x0078, 0x4739, 0x2011, 0x0017, 0x1078,
-+      0x42eb, 0x0079, 0x40b3, 0x40b8, 0x2459, 0x3b96, 0x40ba, 0x40bc,
-+      0x0078, 0x4727, 0x0078, 0x4727, 0x70ab, 0x40c0, 0x0078, 0x2459,
-+      0x0078, 0x40b8, 0xa484, 0x8000, 0x00c0, 0x410c, 0xa684, 0x0100,
-+      0x0040, 0x40d6, 0x1078, 0x46f8, 0x1078, 0x42d3, 0x1078, 0x46ff,
-+      0x7848, 0xa085, 0x000c, 0x784a, 0x0078, 0x40da, 0x78d8, 0x78d2,
-+      0x78dc, 0x78d6, 0xa6b4, 0xefff, 0x7e5a, 0x70a7, 0x40e1, 0x0078,
-+      0x4739, 0x2011, 0x000d, 0x1078, 0x42eb, 0x0079, 0x40e7, 0x40ee,
-+      0x2459, 0x3b96, 0x40ee, 0x40fc, 0x4102, 0x4104, 0xa684, 0x0100,
-+      0x0040, 0x40fa, 0x1078, 0x46b6, 0x682c, 0x78d2, 0x6830, 0x78d6,
-+      0x1078, 0x46f0, 0x0078, 0x4727, 0x70ab, 0x4100, 0x0078, 0x2459,
-+      0x0078, 0x40ee, 0x1078, 0x23eb, 0x70ab, 0x4108, 0x0078, 0x2459,
-+      0x1078, 0x473f, 0x0078, 0x2459, 0x1078, 0x46ff, 0x70ab, 0x4116,
-+      0x2001, 0x0003, 0x1078, 0x4689, 0x0078, 0x4733, 0x1078, 0x46f0,
-+      0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078, 0x4727, 0x70b8, 0x6812,
-+      0x70be, 0x8000, 0x70ba, 0x681b, 0x0000, 0xa684, 0x0008, 0x0040,
-+      0x4141, 0x157e, 0x137e, 0x147e, 0x7890, 0x8004, 0x8004, 0x8004,
-+      0x8004, 0xa084, 0x000f, 0x681a, 0x80ac, 0x789b, 0x0000, 0xaf80,
-+      0x002b, 0x2098, 0xad80, 0x000b, 0x20a0, 0x53a5, 0x147f, 0x137f,
-+      0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002, 0x00c0, 0x4150, 0x692c,
-+      0x810d, 0x810d, 0x810d, 0xa184, 0x0007, 0x2008, 0x0078, 0x415f,
-+      0x789b, 0x0010, 0x79ac, 0xa184, 0x0020, 0x0040, 0x415f, 0x017e,
-+      0x2009, 0x0005, 0x2001, 0x3d00, 0x1078, 0x46c1, 0x017f, 0xa184,
-+      0x001f, 0xa805, 0x6816, 0x1078, 0x3b69, 0x68be, 0xa684, 0x0004,
-+      0x0040, 0x4170, 0xa18c, 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105,
-+      0x682a, 0xa6b4, 0x00ff, 0x6000, 0xa084, 0x0008, 0x0040, 0x417a,
-+      0xa6b5, 0x4000, 0x6eb6, 0x007c, 0x157e, 0x137e, 0x147e, 0x6918,
-+      0x7890, 0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x007e,
-+      0xa100, 0x681a, 0x007f, 0x8000, 0x8004, 0x0040, 0x419b, 0x20a8,
-+      0x8104, 0xa080, 0x000b, 0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80,
-+      0x002b, 0x2098, 0x53a5, 0x147f, 0x137f, 0x157f, 0x007c, 0x682c,
-+      0xa084, 0x0020, 0x00c0, 0x41a7, 0x620c, 0x0078, 0x41a8, 0x6210,
-+      0x6b18, 0x2300, 0xa202, 0x0040, 0x41c8, 0x2018, 0xa382, 0x000e,
-+      0x0048, 0x41b8, 0x0040, 0x41b8, 0x2019, 0x000e, 0x0078, 0x41bc,
-+      0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893, 0x0000,
-+      0x7ba2, 0x70b4, 0xa080, 0x008e, 0x781a, 0xa085, 0x0001, 0x007c,
-+      0x7858, 0xa084, 0xffef, 0x785a, 0x7893, 0x0000, 0xa006, 0x007c,
-+      0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x41dd, 0xa196,
-+      0x000f, 0x0040, 0x41dd, 0x6807, 0x0117, 0x6914, 0x1078, 0x3b69,
-+      0x6100, 0x8104, 0x00c8, 0x41f8, 0x601c, 0xa005, 0x0040, 0x41ec,
-+      0x2001, 0x0800, 0x0078, 0x41fa, 0x0d7e, 0x6824, 0x007e, 0x1078,
-+      0x4708, 0x007f, 0x6826, 0x2d00, 0x682e, 0x1078, 0x3af8, 0x0d7f,
-+      0x2001, 0x0200, 0x6826, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820,
-+      0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71b4,
-+      0xa188, 0x0091, 0x791a, 0x007c, 0xa6c4, 0x0f00, 0xa684, 0x0002,
-+      0x00c0, 0x4220, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007,
-+      0x2008, 0xa805, 0x6816, 0x1078, 0x3b69, 0x68be, 0x0078, 0x4223,
-+      0x6914, 0x1078, 0x3b69, 0x6100, 0x8104, 0x00c8, 0x4280, 0xa184,
-+      0x0300, 0x0040, 0x422f, 0x6807, 0x0117, 0x0078, 0x424d, 0x6004,
-+      0xa005, 0x00c0, 0x4256, 0x6807, 0x0117, 0x601c, 0xa005, 0x00c0,
-+      0x4243, 0x0d7e, 0x1078, 0x4708, 0x6827, 0x0034, 0x2d00, 0x682e,
-+      0x1078, 0x3af8, 0x0d7f, 0xa684, 0x0004, 0x0040, 0x424d, 0x2031,
-+      0x0400, 0x2001, 0x2800, 0x0078, 0x4251, 0x2031, 0x0400, 0x2001,
-+      0x0800, 0x71b4, 0xa188, 0x0091, 0x0078, 0x42ae, 0x6018, 0xa005,
-+      0x00c0, 0x4243, 0x601c, 0xa005, 0x00c0, 0x4243, 0x689f, 0x0000,
-+      0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x42bc, 0xd694, 0x00c0,
-+      0x4279, 0x6100, 0xd1d4, 0x0040, 0x4279, 0x692c, 0x81ff, 0x0040,
-+      0x42bc, 0xa186, 0x0003, 0x0040, 0x42bc, 0xa186, 0x0012, 0x0040,
-+      0x42bc, 0xa6b5, 0x0800, 0x71b4, 0xa188, 0x00af, 0x0078, 0x42b7,
-+      0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c, 0x00ff, 0xa186,
-+      0x0012, 0x00c0, 0x4291, 0x2001, 0x42c9, 0x2009, 0x0001, 0x0078,
-+      0x42a2, 0xa186, 0x0003, 0x00c0, 0x429b, 0x2001, 0x42ca, 0x2009,
-+      0x0012, 0x0078, 0x42a2, 0x2001, 0x0200, 0x71b4, 0xa188, 0x0091,
-+      0x0078, 0x42ae, 0x1078, 0x46db, 0x78a3, 0x0000, 0x681c, 0xa085,
-+      0x0040, 0x681e, 0x71b4, 0xa188, 0x00df, 0xa006, 0x6826, 0x8007,
-+      0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x6eb6,
-+      0x7e5a, 0x791a, 0x0078, 0x2459, 0x6eb6, 0x1078, 0x3af8, 0x6810,
-+      0x70be, 0x7003, 0x0007, 0x70a3, 0x0000, 0x704b, 0x0000, 0x0078,
-+      0x2459, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000, 0x0000,
-+      0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684,
-+      0x0200, 0x0040, 0x42ea, 0x78b8, 0xa08c, 0x001f, 0xa084, 0x8000,
-+      0x0040, 0x42e3, 0x8108, 0x78d8, 0xa100, 0x6836, 0x78dc, 0xa081,
-+      0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac, 0x0007, 0x2021,
-+      0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa184,
-+      0x0080, 0x00c0, 0x4319, 0xa182, 0x0020, 0x00c8, 0x4337, 0xa182,
-+      0x0012, 0x00c8, 0x467b, 0x2100, 0x1079, 0x4307, 0x007c, 0x467b,
-+      0x44e8, 0x467b, 0x467b, 0x4344, 0x4347, 0x4381, 0x43b7, 0x43eb,
-+      0x43ee, 0x467b, 0x467b, 0x43a2, 0x4412, 0x444c, 0x467b, 0x467b,
-+      0x4473, 0xa184, 0x0020, 0x00c0, 0x44a7, 0xa18c, 0x001f, 0x6814,
-+      0xa084, 0x001f, 0xa106, 0x0040, 0x4334, 0x70b4, 0xa080, 0x00d2,
-+      0x781a, 0x2001, 0x0014, 0x1078, 0x4691, 0x1078, 0x46ff, 0x7003,
-+      0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000, 0x007c, 0xa182,
-+      0x0024, 0x00c8, 0x467b, 0xa184, 0x0003, 0x1079, 0x4307, 0x007c,
-+      0x467b, 0x467b, 0x467b, 0x467b, 0x1078, 0x467b, 0x007c, 0x2200,
-+      0x0079, 0x434a, 0x4476, 0x4476, 0x436e, 0x436e, 0x436e, 0x436e,
-+      0x436e, 0x436e, 0x436e, 0x436e, 0x436c, 0x436e, 0x4363, 0x436e,
-+      0x436e, 0x436e, 0x436e, 0x436e, 0x4376, 0x4379, 0x4476, 0x4379,
-+      0x436e, 0x436e, 0x436e, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x36e2,
-+      0x077f, 0x0c7f, 0x0078, 0x436e, 0x1078, 0x458b, 0x6827, 0x02b3,
-+      0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x44aa, 0x1078, 0x4670,
-+      0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078,
-+      0x4492, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+      0x438b, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078, 0x4708, 0x6827,
-+      0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x3ac8, 0x1078,
-+      0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x3af8, 0x2001,
-+      0x0002, 0x007c, 0x1078, 0x44d0, 0x2001, 0x0017, 0x1078, 0x4691,
-+      0x70a3, 0x0000, 0x2009, 0x5138, 0x200b, 0x0006, 0x70af, 0x0017,
-+      0x2009, 0x0200, 0x1078, 0x3a06, 0x2001, 0x0001, 0x007c, 0x2200,
-+      0x0079, 0x43ba, 0x4476, 0x44a7, 0x44a7, 0x44a7, 0x43db, 0x44b7,
-+      0x43e3, 0x44b7, 0x44b7, 0x44ba, 0x44ba, 0x44bf, 0x44bf, 0x43d3,
-+      0x43d3, 0x44a7, 0x44a7, 0x44b7, 0x44a7, 0x43e3, 0x4476, 0x43e3,
-+      0x43e3, 0x43e3, 0x43e3, 0x6827, 0x0084, 0x2009, 0x000b, 0x2001,
-+      0x4300, 0x0078, 0x44c9, 0x6827, 0x000d, 0x2009, 0x000b, 0x2001,
-+      0x4300, 0x0078, 0x44aa, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001,
-+      0x4300, 0x0078, 0x4492, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079,
-+      0x43f1, 0x4476, 0x440a, 0x440a, 0x440a, 0x440a, 0x44b7, 0x44b7,
-+      0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x44b7, 0x440a, 0x440a,
-+      0x440a, 0x440a, 0x44b7, 0x440a, 0x440a, 0x44b7, 0x44b7, 0x44b7,
-+      0x44b7, 0x4476, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4300,
-+      0x0078, 0x4492, 0xa684, 0x0004, 0x00c0, 0x4426, 0x6804, 0xa084,
-+      0x00ff, 0xa086, 0x0006, 0x00c0, 0x467b, 0x1078, 0x44d0, 0x6807,
-+      0x0117, 0x1078, 0x3af8, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084,
-+      0x0004, 0x0040, 0x467b, 0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x00c0, 0x4435, 0x6807, 0x0117, 0x6827, 0x0002, 0x1078,
-+      0x4708, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078,
-+      0x3ad7, 0x1078, 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078,
-+      0x3af8, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004, 0x0040,
-+      0x467b, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x00c0,
-+      0x445b, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078, 0x4708,
-+      0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078, 0x3ae7,
-+      0x1078, 0x44d0, 0x2b68, 0x1078, 0x3af8, 0x0d7f, 0x1078, 0x3af8,
-+      0x2001, 0x0002, 0x007c, 0x1078, 0x467b, 0x007c, 0x70b4, 0xa080,
-+      0x00d2, 0x781a, 0x2001, 0x0001, 0x1078, 0x4691, 0x1078, 0x46ff,
-+      0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x46c1, 0x1078,
-+      0x46f8, 0x1078, 0x42d3, 0x1078, 0x41d0, 0x1078, 0x46ff, 0x2001,
-+      0x0001, 0x007c, 0x1078, 0x46c1, 0x1078, 0x46f8, 0x1078, 0x42d3,
-+      0x70b4, 0xa080, 0x00d2, 0x781a, 0x2001, 0x0013, 0x1078, 0x4691,
-+      0x1078, 0x46ff, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078,
-+      0x467b, 0x007c, 0x1078, 0x46c1, 0x1078, 0x46f8, 0x1078, 0x42d3,
-+      0x1078, 0x41d0, 0x1078, 0x46ff, 0x2001, 0x0001, 0x007c, 0x2001,
-+      0x0003, 0x007c, 0x1078, 0x458b, 0x2001, 0x0000, 0x007c, 0x0c7e,
-+      0x077e, 0x6f14, 0x1078, 0x36e2, 0x077f, 0x0c7f, 0x2001, 0x0000,
-+      0x007c, 0x1078, 0x46c1, 0x1078, 0x467b, 0x2001, 0x0006, 0x007c,
-+      0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x44db, 0xa186,
-+      0x000f, 0x00c0, 0x44df, 0x1078, 0x46f8, 0x1078, 0x42d3, 0x70b4,
-+      0xa080, 0x00d2, 0x781a, 0x1078, 0x46ff, 0x7003, 0x0000, 0x007c,
-+      0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004,
-+      0x00c8, 0x467b, 0x1079, 0x44f5, 0x007c, 0x467b, 0x44f9, 0x467b,
-+      0x4592, 0xa282, 0x0003, 0x0040, 0x4500, 0x1078, 0x467b, 0x007c,
-+      0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4, 0x00ff, 0x69b8, 0xa184,
-+      0x0100, 0x0040, 0x453f, 0xa18c, 0xfeff, 0x69ba, 0x78a0, 0xa005,
-+      0x00c0, 0x453f, 0xa4a4, 0x00ff, 0x0040, 0x4533, 0xa482, 0x000c,
-+      0x0040, 0x451c, 0x00c8, 0x4526, 0x852b, 0x852b, 0x1078, 0x3760,
-+      0x0040, 0x4526, 0x1078, 0x355b, 0x0078, 0x4535, 0x1078, 0x465d,
-+      0x1078, 0x3586, 0x69b8, 0xa18d, 0x0100, 0x69ba, 0xa6b5, 0x1000,
-+      0x7e5a, 0x0078, 0x4538, 0x1078, 0x3586, 0xa6b4, 0xefff, 0x7e5a,
-+      0x70b4, 0xa080, 0x0091, 0x781a, 0x2001, 0x0001, 0x007c, 0x0c7e,
-+      0x1078, 0x457f, 0x6200, 0xd2e4, 0x0040, 0x4570, 0x6208, 0x8217,
-+      0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x4552, 0x0040, 0x4552,
-+      0x2011, 0x000c, 0x2400, 0xa202, 0x00c8, 0x4557, 0x2220, 0x6208,
-+      0xa294, 0x00ff, 0x701c, 0xa202, 0x00c8, 0x455f, 0x721c, 0x2200,
-+      0xa502, 0x00c8, 0x4564, 0x2228, 0x1078, 0x4661, 0x852b, 0x852b,
-+      0x1078, 0x3760, 0x0040, 0x4570, 0x1078, 0x3562, 0x0078, 0x4574,
-+      0x1078, 0x465d, 0x1078, 0x358d, 0xa6b5, 0x1000, 0x7e5a, 0x70b4,
-+      0xa080, 0x00be, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, 0x007e,
-+      0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-+      0x5380, 0x007f, 0x007c, 0x0c7e, 0x1078, 0x457f, 0x1078, 0x358d,
-+      0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0, 0x467b, 0x7aa8, 0xa294,
-+      0x00ff, 0x69b8, 0xa184, 0x0200, 0x0040, 0x45c9, 0xa18c, 0xfdff,
-+      0x69ba, 0x78a0, 0xa005, 0x00c0, 0x45c9, 0xa282, 0x0002, 0x00c8,
-+      0x369d, 0x1078, 0x4627, 0x1078, 0x362b, 0x1078, 0x3586, 0xa684,
-+      0x0100, 0x0040, 0x45bf, 0x682c, 0xa084, 0x0001, 0x0040, 0x45bf,
-+      0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, 0x45bf, 0xc6fd, 0xa6b5,
-+      0x1000, 0x7e5a, 0x70b4, 0xa080, 0x0091, 0x781a, 0x2001, 0x0001,
-+      0x007c, 0x0c7e, 0x1078, 0x457f, 0xa284, 0xfffe, 0x0040, 0x45d4,
-+      0x2011, 0x0001, 0x0078, 0x45d8, 0xa284, 0x0001, 0x0040, 0x45de,
-+      0x6100, 0xd1ec, 0x00c0, 0x45de, 0x2011, 0x0000, 0x1078, 0x4619,
-+      0x1078, 0x3632, 0x1078, 0x358d, 0xa684, 0x0100, 0x0040, 0x45f4,
-+      0x682c, 0xa084, 0x0001, 0x0040, 0x45f4, 0xc6fc, 0x7888, 0xa084,
-+      0x0040, 0x0040, 0x45f4, 0xc6fd, 0xa6b5, 0x1000, 0x7e5a, 0x70b4,
-+      0xa080, 0x00be, 0x781a, 0x2001, 0x0004, 0x0c7f, 0x007c, 0x0c7e,
-+      0x2960, 0x6000, 0x2011, 0x0001, 0xa084, 0x2000, 0x00c0, 0x460a,
-+      0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003,
-+      0x7aaa, 0xa8c0, 0x0004, 0x68b8, 0xa085, 0x0200, 0x68ba, 0x0c7f,
-+      0x007c, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+      0x0003, 0x7aaa, 0x789b, 0x0081, 0x78ab, 0x0004, 0x007c, 0x0c7e,
-+      0x7054, 0x2060, 0x6000, 0xa084, 0x1000, 0x00c0, 0x4635, 0x2029,
-+      0x0032, 0x2021, 0x0000, 0x0078, 0x4655, 0x6508, 0xa5ac, 0x00ff,
-+      0x7018, 0xa086, 0x0028, 0x00c0, 0x4645, 0xa582, 0x0019, 0x00c8,
-+      0x464b, 0x2029, 0x0019, 0x0078, 0x464b, 0xa582, 0x000c, 0x00c8,
-+      0x464b, 0x2029, 0x000c, 0x6408, 0x8427, 0xa4a4, 0x00ff, 0xa482,
-+      0x000c, 0x0048, 0x4655, 0x2021, 0x000c, 0x1078, 0x4661, 0x68b8,
-+      0xa085, 0x0100, 0x68ba, 0x0c7f, 0x007c, 0x2021, 0x0000, 0x2029,
-+      0x0032, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+      0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x007c,
-+      0x2001, 0x0003, 0x1078, 0x4689, 0x70b4, 0xa080, 0x00be, 0x781a,
-+      0x2001, 0x0005, 0x007c, 0x2001, 0x0007, 0x1078, 0x4689, 0xa6b5,
-+      0x1000, 0x7e5a, 0x70b4, 0xa080, 0x00be, 0x781a, 0x2001, 0x0004,
-+      0x007c, 0x789b, 0x0018, 0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001,
-+      0x007c, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x469f,
-+      0xa196, 0x000f, 0x0040, 0x469f, 0x1078, 0x195a, 0x007c, 0x6924,
-+      0xa194, 0x003f, 0x00c0, 0x46a8, 0xa18c, 0xffc0, 0xa105, 0x6826,
-+      0x1078, 0x3af8, 0x691c, 0xa184, 0x0100, 0x0040, 0x46b5, 0x6914,
-+      0x1078, 0x3b69, 0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834,
-+      0x682e, 0xa112, 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301,
-+      0x007c, 0x0c7e, 0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b,
-+      0x0000, 0x600f, 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007,
-+      0x601a, 0x601f, 0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085,
-+      0x0080, 0x6826, 0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80,
-+      0x002d, 0x20a0, 0x81ac, 0x0040, 0x46e6, 0x53a6, 0xa184, 0x0001,
-+      0x0040, 0x46ec, 0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c,
-+      0x70b0, 0xa005, 0x10c0, 0x23eb, 0x70b3, 0x8000, 0x0078, 0x4a3a,
-+      0x71b0, 0x81ff, 0x0040, 0x46fe, 0x1078, 0x4b30, 0x007c, 0x71b0,
-+      0x81ff, 0x0040, 0x4707, 0x70b3, 0x0000, 0x1078, 0x4776, 0x007c,
-+      0x0c7e, 0x0d7e, 0x1078, 0x1937, 0x0c7f, 0x157e, 0x137e, 0x147e,
-+      0x2da0, 0x2c98, 0x20a9, 0x0031, 0x53a3, 0x147f, 0x137f, 0x157f,
-+      0x6807, 0x010d, 0x680b, 0x0000, 0x7004, 0x8007, 0x681a, 0x6823,
-+      0x0000, 0x681f, 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c, 0x70b4,
-+      0xa080, 0x0091, 0x781a, 0x0078, 0x2459, 0x70b4, 0xa080, 0x0081,
-+      0x781a, 0x0078, 0x2459, 0x70b4, 0xa080, 0x00be, 0x781a, 0x0078,
-+      0x2459, 0x70b4, 0xa080, 0x00c8, 0x781a, 0x0078, 0x2459, 0x6904,
-+      0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x474c, 0xa196, 0x000f,
-+      0x0040, 0x474c, 0x6807, 0x0117, 0x2001, 0x0200, 0x6826, 0x8007,
-+      0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x2031,
-+      0x0400, 0x6eb6, 0x7e5a, 0x71b4, 0xa188, 0x0091, 0x791a, 0x007c,
-+      0x1078, 0x46ff, 0x7848, 0xa085, 0x000c, 0x784a, 0x70b4, 0xa080,
-+      0x00d2, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, 0x1078, 0x46c1,
-+      0x2001, 0x0013, 0x1078, 0x4691, 0x0078, 0x3b96, 0x127e, 0x2091,
-+      0x2200, 0x2049, 0x4776, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215,
-+      0x7008, 0xa084, 0xfff7, 0xa205, 0x0040, 0x4788, 0x0078, 0x478d,
-+      0x7003, 0x0000, 0x127f, 0x2000, 0x007c, 0x7000, 0xa084, 0x0001,
-+      0x00c0, 0x47bb, 0x7108, 0x8103, 0x00c8, 0x479a, 0x1078, 0x48bd,
-+      0x0078, 0x4792, 0x700c, 0xa08c, 0x00ff, 0x0040, 0x47bb, 0x7004,
-+      0x8004, 0x00c8, 0x47b2, 0x7014, 0xa005, 0x00c0, 0x47ae, 0x7010,
-+      0xa005, 0x0040, 0x47b2, 0xa102, 0x00c8, 0x4792, 0x7007, 0x0010,
-+      0x0078, 0x47bb, 0x8aff, 0x0040, 0x47bb, 0x1078, 0x4b07, 0x00c0,
-+      0x47b5, 0x0040, 0x4792, 0x1078, 0x4846, 0x7003, 0x0000, 0x127f,
-+      0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+      0x0040, 0x47ce, 0xa18e, 0x000f, 0x00c0, 0x47d1, 0x6040, 0x0078,
-+      0x47d2, 0x6428, 0x017f, 0x84ff, 0x0040, 0x47fc, 0x2c70, 0x7004,
-+      0xa0bc, 0x000f, 0xa7b8, 0x480c, 0x273c, 0x87fb, 0x00c0, 0x47ea,
-+      0x0048, 0x47e4, 0x1078, 0x23eb, 0x609c, 0xa075, 0x0040, 0x47fc,
-+      0x0078, 0x47d7, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529,
-+      0x8421, 0x0040, 0x47fc, 0x8738, 0x2704, 0xa005, 0x00c0, 0x47eb,
-+      0x709c, 0xa075, 0x00c0, 0x47d7, 0x007c, 0x0000, 0x0005, 0x0009,
-+      0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009,
-+      0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4801, 0x47fe, 0x0000,
-+      0x0000, 0x8000, 0x0000, 0x4801, 0x0000, 0x4809, 0x4806, 0x0000,
-+      0x0000, 0x0000, 0x0000, 0x4809, 0x0000, 0x4804, 0x4804, 0x0000,
-+      0x0000, 0x8000, 0x0000, 0x4804, 0x0000, 0x480a, 0x480a, 0x0000,
-+      0x0000, 0x0000, 0x0000, 0x480a, 0x127e, 0x2091, 0x2200, 0x2079,
-+      0x5100, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003,
-+      0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003,
-+      0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x2049, 0x4846,
-+      0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x4899, 0x7007, 0x0012,
-+      0x7108, 0x7008, 0xa106, 0x00c0, 0x4850, 0xa184, 0x01e0, 0x0040,
-+      0x485b, 0x1078, 0x23eb, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005,
-+      0x00c8, 0x4866, 0xa184, 0x4000, 0x00c0, 0x4850, 0xa19c, 0x300c,
-+      0xa386, 0x2004, 0x0040, 0x4874, 0xa386, 0x0008, 0x0040, 0x487f,
-+      0xa386, 0x200c, 0x00c0, 0x4850, 0x7200, 0x8204, 0x0048, 0x487f,
-+      0x730c, 0xa384, 0x00ff, 0x0040, 0x487f, 0x1078, 0x23eb, 0x7007,
-+      0x0012, 0x7000, 0xa084, 0x0001, 0x00c0, 0x4899, 0x7008, 0xa084,
-+      0x01e0, 0x00c0, 0x4899, 0x7310, 0x7014, 0xa305, 0x0040, 0x4899,
-+      0x710c, 0xa184, 0x0300, 0x00c0, 0x4899, 0xa184, 0x00ff, 0x00c0,
-+      0x4846, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084, 0x0008,
-+      0x00c0, 0x489d, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048, 0x48a2,
-+      0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e, 0x127e,
-+      0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x48bd, 0x157f, 0x127f,
-+      0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500, 0x730c,
-+      0xa384, 0x0300, 0x00c0, 0x48e4, 0xa184, 0x01e0, 0x00c0, 0x4908,
-+      0x7108, 0xa184, 0x01e0, 0x00c0, 0x4908, 0x2001, 0x04fd, 0x2004,
-+      0xa082, 0x0005, 0x00c8, 0x48d8, 0xa184, 0x4000, 0x00c0, 0x48c8,
-+      0xa184, 0x0007, 0x0079, 0x48dc, 0x48e6, 0x48f8, 0x48e4, 0x48f8,
-+      0x48e4, 0x4944, 0x48e4, 0x4942, 0x1078, 0x23eb, 0x7004, 0xa084,
-+      0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0, 0x48f3, 0x2049,
-+      0x0000, 0x0078, 0x48f7, 0x1078, 0x4b07, 0x00c0, 0x48f3, 0x007c,
-+      0x7004, 0xa084, 0x0010, 0xa085, 0x0002, 0x7006, 0x8aff, 0x00c0,
-+      0x4903, 0x0078, 0x4907, 0x1078, 0x4b07, 0x00c0, 0x4903, 0x007c,
-+      0x7007, 0x0012, 0x7108, 0x00e0, 0x490b, 0x2091, 0x6000, 0x00e0,
-+      0x490f, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004,
-+      0xa084, 0x0008, 0x00c0, 0x4917, 0x7007, 0x0012, 0x7108, 0x8103,
-+      0x0048, 0x491c, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x4930,
-+      0x7004, 0xa005, 0x00c0, 0x4930, 0x700c, 0xa005, 0x0040, 0x4932,
-+      0x0078, 0x4913, 0x2049, 0x0000, 0x1078, 0x3809, 0x6818, 0xa084,
-+      0x8000, 0x0040, 0x493d, 0x681b, 0x0002, 0x007c, 0x1078, 0x23eb,
-+      0x1078, 0x23eb, 0x1078, 0x49a0, 0x7210, 0x7114, 0x700c, 0xa09c,
-+      0x00ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, 0x49a0,
-+      0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100,
-+      0xa31b, 0x2400, 0xa305, 0x0040, 0x4967, 0x00c8, 0x4967, 0x8412,
-+      0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x494e, 0x2b60,
-+      0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x4973, 0xa7ba,
-+      0x4806, 0x0078, 0x4975, 0xa7ba, 0x47fe, 0x007f, 0xa73d, 0x2c00,
-+      0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012, 0x1078, 0x4846,
-+      0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x4994, 0x609c, 0xa005,
-+      0x0040, 0x499d, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, 0x480c,
-+      0x203c, 0x87fb, 0x1040, 0x23eb, 0x8a51, 0x0040, 0x499c, 0x7008,
-+      0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051, 0x0000, 0x007c,
-+      0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x49b4, 0x6000, 0xa064,
-+      0x00c0, 0x49ab, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x481c,
-+      0x203c, 0x87fb, 0x1040, 0x23eb, 0x007c, 0x127e, 0x0d7e, 0x2091,
-+      0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057,
-+      0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084, 0x0008,
-+      0x007f, 0x0040, 0x49cf, 0xa0b8, 0x4806, 0x0078, 0x49d1, 0xa0b8,
-+      0x47fe, 0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+      0x0007, 0x0040, 0x49df, 0xa18e, 0x000f, 0x00c0, 0x49e8, 0x681c,
-+      0xa084, 0x0040, 0x0040, 0x49ef, 0xa6b5, 0x0001, 0x0078, 0x49ef,
-+      0x681c, 0xa084, 0x0040, 0x0040, 0x49ef, 0xa6b5, 0x0001, 0x7007,
-+      0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x49f1, 0x2400, 0xa305,
-+      0x00c0, 0x49fc, 0x0078, 0x4a22, 0x2c58, 0x2704, 0x6104, 0xac60,
-+      0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008,
-+      0x0040, 0x4a12, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081,
-+      0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300,
-+      0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x4981,
-+      0x0078, 0x4a24, 0x1078, 0x4b07, 0x00c0, 0x4a22, 0x127f, 0x2000,
-+      0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004,
-+      0x7004, 0xa084, 0x0004, 0x00c0, 0x4a30, 0x7003, 0x0008, 0x127f,
-+      0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049,
-+      0x4a3a, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4a43,
-+      0x7e08, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+      0x0040, 0x4a56, 0xa18e, 0x000f, 0x00c0, 0x4a61, 0x681c, 0xa084,
-+      0x0040, 0x0040, 0x4a5d, 0xa6b5, 0x0001, 0x6840, 0x2050, 0x0078,
-+      0x4a6a, 0x681c, 0xa084, 0x0020, 0x00c0, 0x4a68, 0xa6b5, 0x0001,
-+      0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x480c,
-+      0x273c, 0x87fb, 0x00c0, 0x4a7e, 0x0048, 0x4a78, 0x1078, 0x23eb,
-+      0x689c, 0xa065, 0x0040, 0x4a82, 0x0078, 0x4a6b, 0x1078, 0x4b07,
-+      0x00c0, 0x4a7e, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+      0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5,
-+      0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4a9c,
-+      0xa18e, 0x000f, 0x00c0, 0x4aa5, 0x681c, 0xa084, 0x0040, 0x0040,
-+      0x4aac, 0xa6b5, 0x0001, 0x0078, 0x4aac, 0x681c, 0xa084, 0x0040,
-+      0x0040, 0x4aac, 0xa6b5, 0x0001, 0x2049, 0x4a85, 0x017e, 0x6904,
-+      0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4aba, 0xa18e, 0x000f,
-+      0x00c0, 0x4abd, 0x6840, 0x0078, 0x4abe, 0x6828, 0x017f, 0xa055,
-+      0x0040, 0x4b04, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8,
-+      0x480c, 0x273c, 0x87fb, 0x00c0, 0x4ad8, 0x0048, 0x4ad1, 0x1078,
-+      0x23eb, 0x709c, 0xa075, 0x2060, 0x0040, 0x4b04, 0x0078, 0x4ac4,
-+      0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, 0x4af1,
-+      0x8a51, 0x00c0, 0x4ae5, 0x1078, 0x23eb, 0x8738, 0x2704, 0xa005,
-+      0x00c0, 0x4ad9, 0x709c, 0xa075, 0x2060, 0x0040, 0x4b04, 0x0078,
-+      0x4ac4, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400,
-+      0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x4b00, 0x1078, 0x23eb,
-+      0x2071, 0x0020, 0x0078, 0x49ef, 0x127f, 0x2000, 0x007c, 0x7008,
-+      0xa084, 0x0003, 0xa086, 0x0003, 0x0040, 0x4b2f, 0x2704, 0xac08,
-+      0x2104, 0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012,
-+      0x8108, 0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x4b26,
-+      0x8108, 0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7004,
-+      0xa084, 0x0010, 0xa085, 0x0001, 0x7006, 0x1078, 0x4981, 0x007c,
-+      0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x4b30, 0x0d7f,
-+      0x087f, 0x7108, 0xa184, 0x0003, 0x00c0, 0x4b5a, 0x017e, 0x6904,
-+      0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x4b4a, 0xa18e, 0x000f,
-+      0x00c0, 0x4b4d, 0x6840, 0x0078, 0x4b4e, 0x6828, 0x017f, 0xa005,
-+      0x0040, 0x4b68, 0x0078, 0x478d, 0x0020, 0x4b5a, 0x1078, 0x4944,
-+      0x0078, 0x4b68, 0x00a0, 0x4b61, 0x7108, 0x1078, 0x48bd, 0x0078,
-+      0x4b39, 0x7007, 0x0010, 0x00a0, 0x4b63, 0x7108, 0x1078, 0x48bd,
-+      0x7008, 0xa086, 0x0008, 0x00c0, 0x4b39, 0x7000, 0xa005, 0x00c0,
-+      0x4b39, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+      0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x2091, 0x2200,
-+      0x0d7f, 0x2049, 0x4b78, 0xad80, 0x0011, 0x20a0, 0x2099, 0x0031,
-+      0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002,
-+      0x7003, 0x0001, 0x0040, 0x4b97, 0x8000, 0x80ac, 0x53a5, 0x7007,
-+      0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4b99, 0x0c7f, 0x2049,
-+      0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000,
-+      0x007c, 0x2091, 0x6000, 0x2091, 0x8000, 0x78cc, 0xa005, 0x0040,
-+      0x4bc0, 0x7994, 0x70d0, 0xa106, 0x00c0, 0x4bc0, 0x7804, 0xa005,
-+      0x0040, 0x4bc0, 0x7807, 0x0000, 0x0068, 0x4bc0, 0x2091, 0x4080,
-+      0x7820, 0x8001, 0x7822, 0x00c0, 0x4c1b, 0x7824, 0x7822, 0x2069,
-+      0x5140, 0x6800, 0xa084, 0x0007, 0x0040, 0x4bde, 0xa086, 0x0002,
-+      0x0040, 0x4bde, 0x6834, 0xa00d, 0x0040, 0x4bde, 0x2104, 0xa005,
-+      0x0040, 0x4bde, 0x8001, 0x200a, 0x0040, 0x4cc3, 0x7848, 0xa005,
-+      0x0040, 0x4bec, 0x8001, 0x784a, 0x00c0, 0x4bec, 0x2009, 0x0102,
-+      0x6844, 0x200a, 0x1078, 0x21d2, 0x6890, 0xa005, 0x0040, 0x4bf8,
-+      0x8001, 0x6892, 0x00c0, 0x4bf8, 0x686f, 0x0000, 0x6873, 0x0001,
-+      0x2061, 0x5400, 0x20a9, 0x0100, 0x2009, 0x0002, 0x6034, 0xa005,
-+      0x0040, 0x4c0e, 0x8001, 0x6036, 0x00c0, 0x4c0e, 0x6010, 0xa005,
-+      0x0040, 0x4c0e, 0x017e, 0x1078, 0x21d2, 0x017f, 0xace0, 0x0010,
-+      0x0070, 0x4c14, 0x0078, 0x4bfe, 0x8109, 0x0040, 0x4c1b, 0x20a9,
-+      0x0100, 0x0078, 0x4bfe, 0x1078, 0x4c28, 0x1078, 0x4c4d, 0x2009,
-+      0x5151, 0x2104, 0x2009, 0x0102, 0x200a, 0x2091, 0x8001, 0x007c,
-+      0x7834, 0x8001, 0x7836, 0x00c0, 0x4c4c, 0x7838, 0x7836, 0x2091,
-+      0x8000, 0x7844, 0xa005, 0x00c0, 0x4c37, 0x2001, 0x0101, 0x8001,
-+      0x7846, 0xa080, 0x7400, 0x2040, 0x2004, 0xa065, 0x0040, 0x4c4c,
-+      0x6024, 0xa005, 0x0040, 0x4c48, 0x8001, 0x6026, 0x0040, 0x4c7c,
-+      0x6000, 0x2c40, 0x0078, 0x4c3d, 0x007c, 0x7828, 0x8001, 0x782a,
-+      0x00c0, 0x4c7b, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x4c5a,
-+      0x2001, 0x0200, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003,
-+      0xa090, 0x5400, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040,
-+      0x4c7b, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x4c73, 0x8001,
-+      0x2012, 0x00c0, 0x4c7b, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080,
-+      0x201a, 0x1078, 0x21d2, 0x007c, 0x2069, 0x5140, 0x6800, 0xa005,
-+      0x0040, 0x4c86, 0x6848, 0xac06, 0x0040, 0x4cc3, 0x601b, 0x0006,
-+      0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+      0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6f82, 0x1078, 0x1973,
-+      0x6818, 0xa005, 0x0040, 0x4c9e, 0x8001, 0x681a, 0x6808, 0xa084,
-+      0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x4ca8, 0x1078, 0x23eb,
-+      0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x1c70,
-+      0x2069, 0x5140, 0x7944, 0xa184, 0x0100, 0x2001, 0x0006, 0x686e,
-+      0x00c0, 0x4cbe, 0x6986, 0x2001, 0x0004, 0x686e, 0x1078, 0x21cd,
-+      0x2091, 0x8001, 0x007c, 0x2069, 0x0100, 0x2009, 0x5140, 0x2104,
-+      0xa084, 0x0007, 0x0040, 0x4d1f, 0xa086, 0x0007, 0x00c0, 0x4cd9,
-+      0x0d7e, 0x2009, 0x5152, 0x216c, 0x1078, 0x3a4e, 0x0d7f, 0x0078,
-+      0x4d1f, 0x2009, 0x5152, 0x2164, 0x1078, 0x2396, 0x601b, 0x0006,
-+      0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+      0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830, 0xa084,
-+      0x0040, 0x0040, 0x4d13, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+      0xa084, 0x0004, 0x0040, 0x4d00, 0x0070, 0x4d00, 0x0078, 0x4cf7,
-+      0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040,
-+      0x4d0d, 0x0070, 0x4d0d, 0x0078, 0x4d04, 0x20a9, 0x00fa, 0x0070,
-+      0x4d13, 0x0078, 0x4d0f, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b,
-+      0x0048, 0x2009, 0x515b, 0x200b, 0x0007, 0x784c, 0x784a, 0x2091,
-+      0x8001, 0x007c, 0x2079, 0x5100, 0x1078, 0x4d4d, 0x1078, 0x4d31,
-+      0x1078, 0x4d3f, 0x7833, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000,
-+      0x007c, 0x2019, 0x0003, 0x2011, 0x5146, 0x2204, 0xa086, 0x003c,
-+      0x0040, 0x4d3c, 0x2019, 0x0002, 0x7b2a, 0x7b2e, 0x007c, 0x2019,
-+      0x0039, 0x2011, 0x5146, 0x2204, 0xa086, 0x003c, 0x0040, 0x4d4a,
-+      0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019, 0x3971, 0x2011,
-+      0x5146, 0x2204, 0xa086, 0x003c, 0x0040, 0x4d58, 0x2019, 0x2626,
-+      0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a, 0x007c, 0x0020,
-+      0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x0014,
-+      0x0014, 0x0014, 0x0014, 0x0014, 0x0080, 0x000f, 0x0000, 0x0201,
-+      0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201,
-+      0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0x0000, 0x006c, 0x0002,
-+      0x0014, 0x98d0, 0x009e, 0x0096, 0xa202, 0x8838, 0x3806, 0x8839,
-+      0x20c3, 0x0864, 0x9884, 0x28c1, 0x9cb1, 0xa203, 0x300c, 0x2846,
-+      0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0x9865, 0x28f2, 0x9c90,
-+      0x9858, 0x300c, 0x28e1, 0x9c90, 0x2802, 0xa206, 0x64c3, 0x282d,
-+      0xa207, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7824, 0x68c1,
-+      0x7864, 0x883e, 0x9878, 0x8576, 0x8677, 0x206b, 0x28c1, 0x9cb1,
-+      0x2044, 0x2103, 0x20a2, 0x2081, 0x9865, 0xa209, 0x2901, 0x988c,
-+      0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xc601,
-+      0xa20a, 0x856e, 0x0704, 0x9c90, 0x0014, 0xa204, 0xa300, 0x3009,
-+      0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9, 0x883f,
-+      0x08e6, 0x9890, 0xf881, 0x988b, 0xc801, 0x0014, 0xf8c1, 0x0016,
-+      0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241,
-+      0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043,
-+      0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041, 0x3008,
-+      0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016,
-+      0x8000, 0x2847, 0x1011, 0x98c3, 0x8000, 0xa000, 0x2802, 0x1011,
-+      0x98c9, 0x9865, 0x283e, 0x1011, 0x98cd, 0xa20b, 0x0017, 0x300c,
-+      0xa300, 0x1de2, 0xdb81, 0x0014, 0x0210, 0x98da, 0x0014, 0x26e0,
-+      0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210,
-+      0x9cb6, 0x0704, 0x0000, 0x006c, 0x0002, 0x984f, 0x0014, 0x009e,
-+      0x00a5, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211, 0x9cd5, 0x8772,
-+      0x8837, 0x2101, 0x987a, 0x10d2, 0x78e2, 0x9cd8, 0x9859, 0xd984,
-+      0xf0e2, 0xf0a1, 0x98d2, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f,
-+      0x9401, 0xb520, 0xc802, 0x8820, 0x987a, 0x2301, 0x987a, 0x10d2,
-+      0x78e4, 0x9cd8, 0x8821, 0x8820, 0x9859, 0xf123, 0xf142, 0xf101,
-+      0x98cb, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001,
-+      0x0014, 0x6845, 0x0214, 0xa21b, 0x9cd5, 0x2001, 0x98ca, 0x8201,
-+      0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0x988d, 0x3027, 0x84a8,
-+      0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9cc1, 0x692a, 0x6902,
-+      0x1834, 0x989d, 0x1a14, 0x8010, 0x8592, 0x8026, 0x84b9, 0x7021,
-+      0x0014, 0xa300, 0x69e1, 0x9caa, 0x694c, 0xa213, 0x9cba, 0x1462,
-+      0xa213, 0x8000, 0x16e1, 0x98b4, 0x8023, 0x16e1, 0x8001, 0x10f1,
-+      0x0016, 0x6968, 0xa214, 0x9cba, 0x8004, 0x16e1, 0x0101, 0x300a,
-+      0x8827, 0x0014, 0x9cba, 0x0014, 0x61c2, 0x8002, 0x14e1, 0x0016,
-+      0xa217, 0x9cc1, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6,
-+      0x882c, 0x0016, 0xa212, 0x9cd5, 0x10d2, 0x70e4, 0x0004, 0x8007,
-+      0x9424, 0xcc1a, 0x9cd8, 0x98ca, 0x8827, 0x300a, 0x0013, 0x8000,
-+      0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d, 0x0014, 0x878e,
-+      0x0016, 0xa21c, 0x1035, 0x9891, 0xa210, 0xa000, 0x8010, 0x8592,
-+      0x853b, 0xd044, 0x8022, 0x3807, 0x84bb, 0x98ef, 0x8021, 0x3807,
-+      0x84b9, 0x300c, 0x817e, 0x872b, 0x8772, 0x9891, 0x0000, 0x0020,
-+      0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014, 0x0014, 0x98e5,
-+      0x98d0, 0x0014, 0x0014, 0x0014, 0x0080, 0x013f, 0x0000, 0x0201,
-+      0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018, 0x300b, 0xa201,
-+      0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202, 0x8838, 0x3806,
-+      0x8839, 0x20c3, 0x0864, 0xa82e, 0x28c1, 0x9cb1, 0xa203, 0x300c,
-+      0x2846, 0x8161, 0x846a, 0x8300, 0x1856, 0x883a, 0xa804, 0x28f2,
-+      0x9c90, 0xa8f4, 0x300c, 0x28e1, 0x9c90, 0x2802, 0xa206, 0x64c3,
-+      0x282d, 0xa207, 0x64a0, 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7824,
-+      0x68c1, 0x7864, 0x883e, 0xa802, 0x8576, 0x8677, 0x206b, 0x28c1,
-+      0x9cb1, 0x2044, 0x2103, 0x20a2, 0x2081, 0xa8e5, 0xa209, 0x2901,
-+      0xa809, 0x0014, 0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2,
-+      0xc601, 0xa20a, 0x856e, 0x0704, 0x9c90, 0x0014, 0xa204, 0xa300,
-+      0x3009, 0x19e2, 0xf868, 0x8176, 0x86eb, 0x85eb, 0x872e, 0x87a9,
-+      0x883f, 0x08e6, 0xa8f3, 0xf881, 0xa8ec, 0xc801, 0x0014, 0xf8c1,
-+      0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532,
-+      0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208,
-+      0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160, 0x842a, 0xf041,
-+      0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822,
-+      0x0016, 0x8000, 0x2847, 0x1011, 0xa8fc, 0x8000, 0xa000, 0x2802,
-+      0x1011, 0xa8fd, 0xa898, 0x283e, 0x1011, 0xa8fd, 0xa20b, 0x0017,
-+      0x300c, 0xa300, 0x1de2, 0xdb81, 0x0014, 0x0210, 0xa801, 0x0014,
-+      0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d, 0x3806,
-+      0x0210, 0x9cb6, 0x0704, 0x0017, 0x60ff, 0x300c, 0x8720, 0xa211,
-+      0x9d6b, 0x8772, 0x8837, 0x2101, 0xa821, 0x10d2, 0x78e2, 0x9d6e,
-+      0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa871, 0x0014, 0x8831, 0xd166,
-+      0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820, 0xa80f, 0x2301,
-+      0xa80d, 0x10d2, 0x78e4, 0x9d6e, 0x8821, 0x8820, 0xa8e6, 0xf123,
-+      0xf142, 0xf101, 0xa854, 0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c,
-+      0xd99e, 0x6001, 0x0014, 0x6845, 0x0214, 0xa21b, 0x9d6b, 0x2001,
-+      0xa845, 0x8201, 0x1852, 0xd184, 0xd163, 0x8834, 0x8001, 0xa801,
-+      0x3027, 0x84a8, 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d57,
-+      0x692a, 0x6902, 0x1834, 0xa805, 0x1a14, 0x8010, 0x8592, 0x8026,
-+      0x84b9, 0x7021, 0x0014, 0xa300, 0x69e1, 0x9d40, 0x694c, 0xa213,
-+      0x9d50, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa80a, 0x8023, 0x16e1,
-+      0x8001, 0x10f1, 0x0016, 0x6968, 0xa214, 0x9d50, 0x8004, 0x16e1,
-+      0x0101, 0x300a, 0x8827, 0x0014, 0x9d50, 0x0014, 0x61c2, 0x8002,
-+      0x14e1, 0x0016, 0xa217, 0x9d57, 0x0014, 0xa300, 0x8181, 0x842a,
-+      0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212, 0x9d6b, 0x10d2, 0x70e4,
-+      0x0004, 0x8007, 0x9424, 0xcc1a, 0x9d6e, 0xa8f8, 0x8827, 0x300a,
-+      0x0013, 0x8000, 0x84a4, 0x0016, 0x11c2, 0x211e, 0x870e, 0xa21d,
-+      0x0014, 0x878e, 0x0016, 0xa21c, 0x1035, 0xa8af, 0xa210, 0x3807,
-+      0x300c, 0x817e, 0x872b, 0x8772, 0xa8a8, 0x0000, 0xdf21
-+};
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_1080.h     2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,4554 @@
-+/* @(#)asm_1080.h 1.2 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */ 
-+
-+#ifndef       ISP_TARGET_MODE
-+/************************************************************************
-+ *                                                                    *
-+ *     --- ISP1240/ISP1080/ISP1280 Initiator Firmware ---             *
-+ *                          32 LUN Support                            *
-+ *                                                                    *
-+ ************************************************************************/
-+/*
-+ *    Firmware Version 8.15.00 (14:35 Aug 22, 2000)
-+ */
-+static const u_int16_t isp_1080_risc_code[] = {
-+      0x0078, 0x1041, 0x0000, 0x3d3b, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
-+      0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
-+      0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
-+      0x3132, 0x3430, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+      0x6572, 0x7369, 0x6f6e, 0x2030, 0x382e, 0x3135, 0x2020, 0x2043,
-+      0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
-+      0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
-+      0x2400, 0x20c9, 0x97ff, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080,
-+      0x00c0, 0x1054, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010,
-+      0x2089, 0x1374, 0x0078, 0x106d, 0x2001, 0x04fc, 0x2004, 0xa086,
-+      0x1280, 0x00c0, 0x1069, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2071,
-+      0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f8, 0x0078,
-+      0x106d, 0x20c1, 0x0020, 0x2089, 0x131c, 0x2071, 0x0010, 0x70c3,
-+      0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
-+      0x0008, 0x2001, 0x04fe, 0x70d6, 0x20c1, 0x0021, 0x2019, 0x0000,
-+      0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64,
-+      0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050, 0x2114,
-+      0xa286, 0xa5a5, 0x0040, 0x10a4, 0xa386, 0x000f, 0x0040, 0x10a0,
-+      0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078, 0x1080,
-+      0x2c6a, 0x2a5a, 0x0078, 0x10a2, 0x2c6a, 0x2a5a, 0x2130, 0x2128,
-+      0xa1a2, 0x4e00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
-+      0xa192, 0x9800, 0x2009, 0x0000, 0x2001, 0x0032, 0x1078, 0x207a,
-+      0x2218, 0x2079, 0x4e00, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9,
-+      0x0040, 0x42a4, 0x8109, 0x00c0, 0x10bf, 0x2009, 0xff00, 0x3400,
-+      0xa102, 0x0048, 0x10cf, 0x0040, 0x10cf, 0x20a8, 0x42a4, 0x2001,
-+      0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e5, 0x2071, 0x0100,
-+      0x0d7e, 0x2069, 0x4e40, 0x1078, 0x4cdd, 0x0d7f, 0x7810, 0xc0ed,
-+      0x7812, 0x781b, 0x0064, 0x0078, 0x110a, 0x2001, 0x04fc, 0x2004,
-+      0xa086, 0x1280, 0x00c0, 0x1105, 0x7814, 0xc0ed, 0xc0d5, 0x7816,
-+      0x781b, 0x0064, 0x2071, 0x0200, 0x0d7e, 0x2069, 0x4e40, 0x1078,
-+      0x4cdd, 0x2069, 0x4e80, 0x2071, 0x0100, 0x1078, 0x4cdd, 0x7814,
-+      0xc0d4, 0x7816, 0x0d7f, 0x0078, 0x110a, 0x7814, 0xc0e5, 0x7816,
-+      0x781b, 0x003c, 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800,
-+      0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002,
-+      0x7827, 0x0002, 0x2009, 0x0002, 0x2069, 0x4e40, 0x681b, 0x0003,
-+      0x6823, 0x0007, 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028,
-+      0x6837, 0x0000, 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000,
-+      0x8109, 0x0040, 0x115e, 0x68d3, 0x000a, 0x68c3, 0x4ec0, 0x2079,
-+      0x4e00, 0x7814, 0xd0e4, 0x00c0, 0x1144, 0xd0ec, 0x00c0, 0x1148,
-+      0x68d7, 0x7329, 0x0078, 0x114a, 0x68d7, 0x730d, 0x0078, 0x114a,
-+      0x68d7, 0x732d, 0x68c7, 0x53c0, 0x68cb, 0x52c0, 0x68cf, 0x93c0,
-+      0x68ab, 0x9644, 0x68af, 0x9649, 0x68b3, 0x9644, 0x68b7, 0x9644,
-+      0x68a7, 0x0001, 0x2069, 0x4e80, 0x0078, 0x111e, 0x68d3, 0x000a,
-+      0x68c3, 0x50c0, 0x7814, 0xd0e4, 0x00c0, 0x116a, 0x68d7, 0x7439,
-+      0x0078, 0x116c, 0x68d7, 0x7419, 0x68c7, 0x73c0, 0x68cb, 0x5340,
-+      0x68cf, 0x94d0, 0x68ab, 0x9649, 0x68af, 0x964e, 0x68b3, 0x9649,
-+      0x68b7, 0x9649, 0x68a7, 0x0001, 0x7810, 0xd0ec, 0x00c0, 0x11c2,
-+      0x7814, 0xd0e4, 0x00c0, 0x11b4, 0x0e7e, 0x2069, 0x52c0, 0x2071,
-+      0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1195, 0x2019, 0x0c0c, 0x2021,
-+      0x000c, 0x1078, 0x2009, 0x0078, 0x119b, 0x2019, 0x0c0a, 0x2021,
-+      0x000a, 0x1078, 0x2009, 0x2069, 0x5340, 0x2071, 0x0100, 0x70ec,
-+      0xd0e4, 0x00c0, 0x11ab, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078,
-+      0x2009, 0x0078, 0x11b1, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078,
-+      0x2009, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0c, 0x2021, 0x000c,
-+      0x2069, 0x52c0, 0x1078, 0x2009, 0x2069, 0x5340, 0x1078, 0x2009,
-+      0x0078, 0x11db, 0x2069, 0x52c0, 0x0e7e, 0x2071, 0x0100, 0x70ec,
-+      0xd0e4, 0x00c0, 0x11d4, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078,
-+      0x2009, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0a, 0x2021, 0x000a,
-+      0x1078, 0x2009, 0x0e7f, 0x2011, 0x0002, 0x2069, 0x53c0, 0x2009,
-+      0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8,
-+      0xa386, 0xfeff, 0x00c0, 0x11f2, 0x6817, 0x0100, 0x681f, 0x0064,
-+      0x0078, 0x11f6, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010,
-+      0x00f0, 0x11e3, 0x8109, 0x00c0, 0x11e1, 0x8211, 0x0040, 0x1204,
-+      0x2069, 0x73c0, 0x0078, 0x11df, 0x1078, 0x265b, 0x1078, 0x468e,
-+      0x1078, 0x1dd4, 0x1078, 0x4c6f, 0x2091, 0x2100, 0x2079, 0x4e00,
-+      0x7810, 0xd0ec, 0x0040, 0x1218, 0x2071, 0x0020, 0x0078, 0x121a,
-+      0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x4e00, 0x2071, 0x0020,
-+      0x2091, 0x2300, 0x2079, 0x4e00, 0x7810, 0xd0ec, 0x0040, 0x122c,
-+      0x2079, 0x0100, 0x0078, 0x122e, 0x2079, 0x0200, 0x2071, 0x4e40,
-+      0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x4e80, 0x2091, 0x2000,
-+      0x2079, 0x4e00, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090,
-+      0x2071, 0x0010, 0x70c3, 0x0000, 0x0090, 0x124d, 0x70c0, 0xa086,
-+      0x0002, 0x00c0, 0x124d, 0x1078, 0x15ba, 0x2039, 0x0000, 0x7810,
-+      0xd0ec, 0x00c0, 0x12cf, 0x1078, 0x148e, 0x78ac, 0xa005, 0x00c0,
-+      0x126b, 0x0068, 0x1261, 0x786c, 0xa065, 0x0040, 0x1261, 0x1078,
-+      0x2395, 0x1078, 0x20a1, 0x0068, 0x1278, 0x786c, 0xa065, 0x0040,
-+      0x126b, 0x1078, 0x2395, 0x0068, 0x1278, 0x2009, 0x4e47, 0x2011,
-+      0x4e87, 0x2104, 0x220c, 0xa105, 0x0040, 0x1278, 0x1078, 0x1f0a,
-+      0x2071, 0x4e40, 0x70a4, 0xa005, 0x0040, 0x129d, 0x7450, 0xa485,
-+      0x0000, 0x0040, 0x129d, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4,
-+      0xa28c, 0x303d, 0x2190, 0x1078, 0x2b6a, 0x2091, 0x8000, 0x2091,
-+      0x303d, 0x0068, 0x129d, 0x2079, 0x4e00, 0x786c, 0xa065, 0x0040,
-+      0x129d, 0x2071, 0x0010, 0x1078, 0x2395, 0x00e0, 0x12a5, 0x2079,
-+      0x4e00, 0x2071, 0x0010, 0x1078, 0x4a43, 0x2071, 0x4e80, 0x70a4,
-+      0xa005, 0x0040, 0x12bd, 0x7050, 0xa025, 0x0040, 0x12bd, 0x2079,
-+      0x0100, 0x2091, 0x8000, 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078,
-+      0x2b6a, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, 0x4e00, 0x2071,
-+      0x0010, 0x0068, 0x12c9, 0x786c, 0xa065, 0x0040, 0x12c9, 0x1078,
-+      0x2395, 0x00e0, 0x1253, 0x1078, 0x4a43, 0x0078, 0x1253, 0x1078,
-+      0x148e, 0x78ac, 0xa005, 0x00c0, 0x12e7, 0x0068, 0x12dd, 0x786c,
-+      0xa065, 0x0040, 0x12dd, 0x1078, 0x2395, 0x1078, 0x20a1, 0x0068,
-+      0x12f1, 0x786c, 0xa065, 0x0040, 0x12e7, 0x1078, 0x2395, 0x0068,
-+      0x12f1, 0x2009, 0x4e47, 0x2104, 0xa005, 0x0040, 0x12f1, 0x1078,
-+      0x1f0a, 0x2071, 0x4e40, 0x70a4, 0xa005, 0x0040, 0x130c, 0x7450,
-+      0xa485, 0x0000, 0x0040, 0x130c, 0x2079, 0x0100, 0x2091, 0x8000,
-+      0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, 0x2b6a, 0x2091, 0x8000,
-+      0x2091, 0x303d, 0x2079, 0x4e00, 0x2071, 0x0010, 0x0068, 0x1316,
-+      0x786c, 0xa065, 0x0040, 0x1316, 0x1078, 0x2395, 0x00e0, 0x12cf,
-+      0x1078, 0x4a43, 0x0078, 0x12cf, 0x133c, 0x133c, 0x133e, 0x133e,
-+      0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363,
-+      0x134b, 0x134b, 0x134b, 0x134b, 0x133c, 0x133c, 0x133e, 0x133e,
-+      0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363,
-+      0x134b, 0x134b, 0x134b, 0x134b, 0x0078, 0x133c, 0x007e, 0x107e,
-+      0x127e, 0x2091, 0x2400, 0x1078, 0x298a, 0x127f, 0x107f, 0x007f,
-+      0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c8,
-+      0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+      0x127e, 0x2091, 0x2300, 0x1078, 0x298a, 0x127f, 0x107f, 0x007f,
-+      0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300,
-+      0x1078, 0x298a, 0x2091, 0x2400, 0x1078, 0x298a, 0x127f, 0x107f,
-+      0x007f, 0x2091, 0x8001, 0x007c, 0x1394, 0x1394, 0x1396, 0x1396,
-+      0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13ae, 0x13ae, 0x1396, 0x1396,
-+      0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13af, 0x13af, 0x13af, 0x13af,
-+      0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af,
-+      0x13af, 0x13af, 0x13af, 0x13af, 0x0078, 0x1394, 0x007e, 0x107e,
-+      0x127e, 0x2091, 0x2300, 0x1078, 0x298a, 0x127f, 0x107f, 0x007f,
-+      0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13d5,
-+      0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007c, 0x107e,
-+      0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e, 0x2071, 0x0100, 0x2069,
-+      0x4e40, 0x2079, 0x4e00, 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078,
-+      0x4cdd, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007c,
-+      0x3c00, 0xa084, 0x0007, 0x0079, 0x13cd, 0x13de, 0x13de, 0x13e0,
-+      0x13e0, 0x13e5, 0x13e5, 0x13ea, 0x13ea, 0x3c00, 0xa084, 0x0003,
-+      0x0079, 0x13da, 0x13de, 0x13de, 0x13f3, 0x13f3, 0x1078, 0x296b,
-+      0x2091, 0x2200, 0x1078, 0x4768, 0x007c, 0x2091, 0x2100, 0x1078,
-+      0x4768, 0x007c, 0x2091, 0x2100, 0x1078, 0x4768, 0x2091, 0x2200,
-+      0x1078, 0x4768, 0x007c, 0x2091, 0x2100, 0x1078, 0x4768, 0x007c,
-+      0x1418, 0x1418, 0x141a, 0x141a, 0x1427, 0x1427, 0x1427, 0x1427,
-+      0x1432, 0x1432, 0x143f, 0x143f, 0x1427, 0x1427, 0x1427, 0x1427,
-+      0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450,
-+      0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450,
-+      0x0078, 0x1418, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078,
-+      0x298a, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e,
-+      0x107e, 0x127e, 0x1078, 0x13c8, 0x127f, 0x107f, 0x007f, 0x2091,
-+      0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078,
-+      0x298a, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e,
-+      0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x298a, 0x2091, 0x2400,
-+      0x1078, 0x298a, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c,
-+      0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2079, 0x4e00,
-+      0x2071, 0x0200, 0x2069, 0x4e40, 0x3d00, 0xd08c, 0x0040, 0x1466,
-+      0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, 0x4cdd, 0x3d00, 0xd084,
-+      0x0040, 0x1474, 0x2069, 0x4e80, 0x2071, 0x0100, 0x70ec, 0xa084,
-+      0x1c00, 0x78e6, 0x1078, 0x4cdd, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f,
-+      0x107f, 0x007f, 0x007c, 0x7008, 0x800b, 0x00c8, 0x1489, 0x7007,
-+      0x0002, 0xa08c, 0x01e0, 0x00c0, 0x148a, 0xd09c, 0x0040, 0x1489,
-+      0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x15bd, 0x0068, 0x1513,
-+      0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, 0x1513, 0x7828, 0xa005,
-+      0x00c0, 0x149e, 0x0010, 0x1514, 0x0078, 0x1513, 0x7910, 0xd1f4,
-+      0x0040, 0x14a6, 0x2001, 0x4007, 0x0078, 0x15bc, 0x7914, 0xd1ec,
-+      0x0040, 0x14c1, 0xd0fc, 0x0040, 0x14b7, 0x007e, 0x1078, 0x1d64,
-+      0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078, 0x15bc, 0x007e,
-+      0x1078, 0x1d54, 0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078,
-+      0x15bc, 0x7910, 0xd0fc, 0x00c0, 0x14cb, 0x2061, 0x4e40, 0xc19c,
-+      0xc7fc, 0x0078, 0x14cf, 0x2061, 0x4e80, 0xc19d, 0xc7fd, 0x6064,
-+      0xa005, 0x00c0, 0x1513, 0x7912, 0x6083, 0x0000, 0x7828, 0xc0fc,
-+      0xa086, 0x0018, 0x00c0, 0x14e0, 0x0c7e, 0x1078, 0x1b5b, 0x0c7f,
-+      0x782b, 0x0000, 0x607c, 0xa065, 0x0040, 0x14f9, 0x0c7e, 0x609c,
-+      0x1078, 0x1e49, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c84, 0x2009,
-+      0x0018, 0x6087, 0x0103, 0x1078, 0x1d74, 0x00c0, 0x150d, 0x1078,
-+      0x1dc6, 0x7810, 0xd09c, 0x00c0, 0x1501, 0x2061, 0x4e40, 0x0078,
-+      0x1505, 0x2061, 0x4e80, 0xc09c, 0x7812, 0x607f, 0x0000, 0x60d4,
-+      0xd0dc, 0x0040, 0x1511, 0xc0dc, 0x60d6, 0x2001, 0x4005, 0x0078,
-+      0x15bc, 0x0078, 0x15ba, 0x007c, 0x7810, 0xd0f4, 0x0040, 0x151c,
-+      0x2001, 0x4007, 0x0078, 0x15bc, 0xa006, 0x70c2, 0x70c6, 0x70ca,
-+      0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a, 0x0040, 0x00c8, 0x152a,
-+      0x0079, 0x1531, 0x2100, 0xa08a, 0x0040, 0x00c8, 0x15c8, 0x0079,
-+      0x1571, 0x15ba, 0x1610, 0x15d9, 0x1648, 0x1680, 0x1680, 0x15d0,
-+      0x1c9c, 0x168b, 0x15c8, 0x15dd, 0x15df, 0x15e1, 0x15e3, 0x1ca1,
-+      0x15c8, 0x1699, 0x16f6, 0x1b7b, 0x1c96, 0x15e5, 0x19c0, 0x1a02,
-+      0x1a3d, 0x1a8e, 0x197b, 0x1988, 0x199c, 0x19af, 0x17cb, 0x15c8,
-+      0x172d, 0x173a, 0x1746, 0x1752, 0x1768, 0x1774, 0x1777, 0x1783,
-+      0x178f, 0x1797, 0x17b3, 0x17bf, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+      0x17d8, 0x17ea, 0x1806, 0x183c, 0x1864, 0x1874, 0x1877, 0x18a8,
-+      0x18d9, 0x18eb, 0x194a, 0x195a, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+      0x196a, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x1cc6, 0x1ccc,
-+      0x15c8, 0x15c8, 0x15c8, 0x1cd0, 0x1d15, 0x15c8, 0x15c8, 0x15c8,
-+      0x15c8, 0x160a, 0x167a, 0x1693, 0x16f0, 0x1b75, 0x15c8, 0x15c8,
-+      0x1b3e, 0x15c8, 0x1d19, 0x1cb8, 0x1cc2, 0x15c8, 0x15c8, 0x15c8,
-+      0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+      0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+      0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+      0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8,
-+      0x15c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x15bc, 0x73ce,
-+      0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, 0x15bd, 0x2061,
-+      0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c,
-+      0x70c3, 0x4001, 0x0078, 0x15bd, 0x70c3, 0x4006, 0x0078, 0x15bd,
-+      0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078,
-+      0x15ba, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x15ba, 0x0078,
-+      0x15ba, 0x0078, 0x15ba, 0x0078, 0x15ba, 0x2091, 0x8000, 0x70c3,
-+      0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
-+      0x0008, 0x2001, 0x000f, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001,
-+      0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, 0x0445,
-+      0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, 0x4080,
-+      0x0078, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1613,
-+      0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0,
-+      0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e,
-+      0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0040, 0x15ba, 0xa182,
-+      0x0040, 0x00c8, 0x162d, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012,
-+      0x7007, 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040, 0x1634,
-+      0x7007, 0x0002, 0xa084, 0x01e0, 0x0040, 0x1642, 0x70c3, 0x4002,
-+      0x0078, 0x15bd, 0x24a8, 0x53a5, 0x0078, 0x1624, 0x0078, 0x15ba,
-+      0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x2098,
-+      0x20a1, 0x0030, 0x7003, 0x0000, 0x7007, 0x0006, 0x731a, 0x721e,
-+      0x7422, 0x7526, 0x2021, 0x0040, 0x7007, 0x0006, 0x81ff, 0x0040,
-+      0x15ba, 0xa182, 0x0040, 0x00c8, 0x1667, 0x2120, 0xa006, 0x2008,
-+      0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007, 0x0001, 0x7008, 0xd0fc,
-+      0x0040, 0x166e, 0xa084, 0x01e0, 0x0040, 0x165c, 0x70c3, 0x4002,
-+      0x0078, 0x15bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x164b,
-+      0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1688, 0x200a,
-+      0x72ca, 0x0078, 0x15b9, 0x70c7, 0x0008, 0x70cb, 0x000f, 0x70cf,
-+      0x0000, 0x0078, 0x15ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078,
-+      0x169c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0,
-+      0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x16eb, 0xa40a,
-+      0x0040, 0x16ac, 0x00c8, 0x16b5, 0x8001, 0x7872, 0xa084, 0xfc00,
-+      0x0040, 0x16b9, 0x78ac, 0xc085, 0x78ae, 0x2001, 0x4005, 0x0078,
-+      0x15bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00,
-+      0x0040, 0x16d1, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f,
-+      0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0078,
-+      0x16db, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1,
-+      0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605,
-+      0x0040, 0x16e5, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc,
-+      0x78ae, 0x0078, 0x16ee, 0x78ac, 0xc085, 0x78ae, 0x0078, 0x15ba,
-+      0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x16f9, 0x2029, 0x0000,
-+      0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce,
-+      0x74d6, 0xa005, 0x0040, 0x1728, 0xa40a, 0x0040, 0x1709, 0x00c8,
-+      0x15bc, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x1716, 0x78ac,
-+      0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0078, 0x15bc, 0x7a9a, 0x7b9e,
-+      0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0040, 0x1721, 0x7a10, 0xc2c5,
-+      0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0078, 0x172b,
-+      0x78ac, 0xc0c5, 0x78ae, 0x0078, 0x15ba, 0x2009, 0x0000, 0x786c,
-+      0xa065, 0x0040, 0x1737, 0x8108, 0x6000, 0x0078, 0x1730, 0x7ac4,
-+      0x0078, 0x15b8, 0x2009, 0x4e48, 0x210c, 0x7810, 0xd0ec, 0x00c0,
-+      0x15b9, 0x2011, 0x4e88, 0x2214, 0x0078, 0x15b8, 0x2009, 0x4e49,
-+      0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4e89, 0x2214,
-+      0x0078, 0x15b8, 0x2061, 0x4e40, 0x6128, 0x622c, 0x8214, 0x8214,
-+      0x8214, 0x7810, 0xd0ec, 0x00c0, 0x1766, 0x2061, 0x4e80, 0x6328,
-+      0x73da, 0x632c, 0x831c, 0x831c, 0x831c, 0x73de, 0x0078, 0x15b8,
-+      0x2009, 0x4e4c, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011,
-+      0x4e8c, 0x2214, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x2009,
-+      0x4e4d, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4e8d,
-+      0x2214, 0x0078, 0x15b8, 0x2009, 0x4e4e, 0x210c, 0x7810, 0xd0ec,
-+      0x00c0, 0x15b9, 0x2011, 0x4e8e, 0x2214, 0x0078, 0x15b8, 0x7920,
-+      0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x7a24, 0x0078, 0x15b8, 0x71c4,
-+      0xd1fc, 0x00c0, 0x179f, 0x2011, 0x52c0, 0x0078, 0x17a1, 0x2011,
-+      0x5340, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268,
-+      0x6a00, 0x6804, 0xd09c, 0x0040, 0x17b0, 0x6b08, 0x0078, 0x17b1,
-+      0x6b0c, 0x0078, 0x15b7, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000,
-+      0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b7, 0x2061,
-+      0x4e40, 0x6118, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4e80,
-+      0x6218, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000,
-+      0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0078, 0x15b7,
-+      0x71c4, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, 0x15b2,
-+      0x1078, 0x277f, 0xa384, 0x4000, 0x0040, 0x17e8, 0xa295, 0x0020,
-+      0x0078, 0x15b7, 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8,
-+      0x15b2, 0xd1bc, 0x00c0, 0x17f9, 0x2011, 0x4e48, 0x2204, 0x0078,
-+      0x17fd, 0x2011, 0x4e88, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc,
-+      0x2012, 0x1078, 0x26dc, 0x017f, 0x0078, 0x15b9, 0x71c4, 0x2021,
-+      0x4e49, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x1815, 0x71c8,
-+      0x2021, 0x4e89, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1834, 0x20a9,
-+      0x0008, 0x2204, 0xa106, 0x0040, 0x1824, 0x8210, 0x00f0, 0x1819,
-+      0x71c4, 0x72c8, 0x0078, 0x15b1, 0xa292, 0x1834, 0x027e, 0x2122,
-+      0x017f, 0x1078, 0x26fd, 0x7810, 0xd0ec, 0x00c0, 0x1832, 0xd3fc,
-+      0x0040, 0x180f, 0x0078, 0x15ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee,
-+      0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0x4e40, 0x6128, 0x622c,
-+      0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003,
-+      0x8003, 0x602e, 0x7810, 0xd0ec, 0x00c0, 0x1862, 0x027e, 0x017e,
-+      0x2061, 0x4e80, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8,
-+      0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de,
-+      0x017f, 0x027f, 0x0078, 0x15b8, 0x2061, 0x4e40, 0x6130, 0x70c4,
-+      0x6032, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4e80, 0x6230,
-+      0x70c8, 0x6032, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x71c4,
-+      0xa184, 0xffcf, 0x0040, 0x1883, 0x7810, 0xd0ec, 0x00c0, 0x15b2,
-+      0x72c8, 0x0078, 0x15b1, 0x2011, 0x4e4d, 0x2204, 0x2112, 0x007e,
-+      0x2019, 0x0000, 0x1078, 0x2764, 0x7810, 0xd0ec, 0x0040, 0x1893,
-+      0x017f, 0x0078, 0x15b9, 0x71c8, 0xa184, 0xffcf, 0x0040, 0x189c,
-+      0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4e8d, 0x2204, 0x2112,
-+      0x007e, 0xc3fd, 0x1078, 0x2764, 0x027f, 0x017f, 0x0078, 0x15b8,
-+      0x71c4, 0xa182, 0x0010, 0x0048, 0x18b4, 0x7810, 0xd0ec, 0x00c0,
-+      0x15b2, 0x72c8, 0x0078, 0x15b1, 0x2011, 0x4e4e, 0x2204, 0x007e,
-+      0x2112, 0x2019, 0x0000, 0x1078, 0x2742, 0x7810, 0xd0ec, 0x0040,
-+      0x18c4, 0x017f, 0x0078, 0x15b9, 0x71c8, 0xa182, 0x0010, 0x0048,
-+      0x18cd, 0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4e8e, 0x2204,
-+      0x007e, 0x2112, 0xc3fd, 0x1078, 0x2742, 0x027f, 0x017f, 0x0078,
-+      0x15b8, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15b1, 0xa284,
-+      0xfffd, 0x00c0, 0x15b1, 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24,
-+      0x7826, 0x0078, 0x15b8, 0x71c4, 0xd1fc, 0x00c0, 0x18f3, 0x2011,
-+      0x52c0, 0x0078, 0x18f5, 0x2011, 0x5340, 0x8107, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, 0x2091,
-+      0x8000, 0x6800, 0x007e, 0xa226, 0x0040, 0x191e, 0x6a02, 0xd4ec,
-+      0x0040, 0x190b, 0xc3a5, 0xd4e4, 0x0040, 0x190f, 0xc39d, 0xd4f4,
-+      0x0040, 0x191e, 0x810f, 0xd2f4, 0x0040, 0x191a, 0x1078, 0x27c1,
-+      0x0078, 0x191e, 0x1078, 0x279f, 0x0078, 0x191e, 0x72cc, 0x6808,
-+      0xa206, 0x0040, 0x1940, 0xa2a4, 0x00ff, 0x7814, 0xd0e4, 0x00c0,
-+      0x1931, 0xa482, 0x0028, 0x0048, 0x193d, 0x0040, 0x193d, 0x0078,
-+      0x1935, 0xa482, 0x0043, 0x0048, 0x193d, 0x71c4, 0x71c6, 0x027f,
-+      0x72ca, 0x2091, 0x8001, 0x0078, 0x15b3, 0x6a0a, 0xa39d, 0x000a,
-+      0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x2091, 0x8001,
-+      0x0078, 0x15b7, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000, 0x6a14,
-+      0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708,
-+      0x0078, 0x15b7, 0x70c4, 0x2061, 0x4e40, 0x6118, 0x601a, 0x7810,
-+      0xd0ec, 0x00c0, 0x15b9, 0x70c8, 0x2061, 0x4e80, 0x6218, 0x601a,
-+      0x0078, 0x15b8, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8,
-+      0x15b2, 0x1078, 0x27e3, 0xa384, 0x4000, 0x0040, 0x1979, 0xa295,
-+      0x0020, 0x0078, 0x15b7, 0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000,
-+      0x6a08, 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b8,
-+      0x77c4, 0x1078, 0x1de4, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9,
-+      0x6a0a, 0x6804, 0xa005, 0x0040, 0x1997, 0x1078, 0x2628, 0x2091,
-+      0x8001, 0x2708, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1de4, 0x2091,
-+      0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x19aa,
-+      0x1078, 0x2628, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b8, 0x77c4,
-+      0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000,
-+      0x1078, 0x1dff, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x15b8,
-+      0x77c4, 0x7814, 0xd0e4, 0x00c0, 0x19d4, 0xd7fc, 0x0040, 0x19ce,
-+      0x1078, 0x1d64, 0x0040, 0x19d4, 0x0078, 0x15bc, 0x1078, 0x1d54,
-+      0x0040, 0x19d4, 0x0078, 0x15bc, 0x73c8, 0x72cc, 0x77c6, 0x73ca,
-+      0x72ce, 0x1078, 0x1e86, 0x00c0, 0x19fe, 0x6818, 0xa005, 0x0040,
-+      0x19f8, 0x2708, 0x077e, 0x1078, 0x2813, 0x077f, 0x00c0, 0x19f8,
-+      0x2001, 0x0015, 0xd7fc, 0x00c0, 0x19f1, 0x2061, 0x4e40, 0x0078,
-+      0x19f4, 0xc0fd, 0x2061, 0x4e80, 0x782a, 0x2091, 0x8001, 0x007c,
-+      0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15bc, 0x2091, 0x8001,
-+      0x0078, 0x15ba, 0x77c4, 0x7814, 0xd0e4, 0x00c0, 0x1a16, 0xd7fc,
-+      0x0040, 0x1a10, 0x1078, 0x1d64, 0x0040, 0x1a16, 0x0078, 0x15bc,
-+      0x1078, 0x1d54, 0x0040, 0x1a16, 0x0078, 0x15bc, 0x77c6, 0x2041,
-+      0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078,
-+      0x1dff, 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x1a2a, 0x2061, 0x4e40,
-+      0x0078, 0x1a2d, 0x2061, 0x4e80, 0xc1fd, 0x6067, 0x0003, 0x607f,
-+      0x0000, 0x6776, 0x6083, 0x000f, 0x792a, 0x61d4, 0xc1dc, 0x61d6,
-+      0x1078, 0x2628, 0x2091, 0x8001, 0x007c, 0x77c8, 0x77ca, 0x77c4,
-+      0x77c6, 0x7814, 0xd0e4, 0x00c0, 0x1a54, 0xd7fc, 0x0040, 0x1a4e,
-+      0x1078, 0x1d64, 0x0040, 0x1a54, 0x0078, 0x15bc, 0x1078, 0x1d54,
-+      0x0040, 0x1a54, 0x0078, 0x15bc, 0xa7bc, 0xff00, 0x2091, 0x8000,
-+      0x2009, 0x0017, 0xd7fc, 0x00c0, 0x1a61, 0x2061, 0x4e40, 0x0078,
-+      0x1a64, 0x2061, 0x4e80, 0xc1fd, 0x607f, 0x0000, 0x6067, 0x0002,
-+      0x6776, 0x6083, 0x000f, 0x792a, 0x61d4, 0xc1dc, 0x61d6, 0x1078,
-+      0x2628, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051,
-+      0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0040, 0x1a82, 0x60d4,
-+      0xc0fd, 0x60d6, 0x1078, 0x1dff, 0x70c8, 0x6836, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x1a82, 0x2091, 0x8001, 0x007c, 0x2019, 0x0000,
-+      0x7814, 0xd0e4, 0x00c0, 0x1aa4, 0x72c8, 0xd284, 0x0040, 0x1a9e,
-+      0x1078, 0x1d64, 0x0040, 0x1aa4, 0x0078, 0x15bc, 0x1078, 0x1d54,
-+      0x0040, 0x1aa4, 0x0078, 0x15bc, 0x72c8, 0x72ca, 0x78ac, 0xa084,
-+      0x0003, 0x00c0, 0x1acf, 0x2039, 0x0000, 0xd284, 0x0040, 0x1ab1,
-+      0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078,
-+      0x1de4, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x2091,
-+      0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1ab7, 0xa7bc, 0xff00,
-+      0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1ab7, 0x2091,
-+      0x8000, 0x72c8, 0xd284, 0x00c0, 0x1ae1, 0x7810, 0xd0ec, 0x0040,
-+      0x1add, 0x2069, 0x0100, 0x0078, 0x1ae3, 0x2069, 0x0200, 0x0078,
-+      0x1ae3, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830,
-+      0xd0b4, 0x0040, 0x1b03, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+      0xd094, 0x0040, 0x1af5, 0x00f0, 0x1aef, 0x684b, 0x0009, 0x20a9,
-+      0x0014, 0x6848, 0xd084, 0x0040, 0x1aff, 0x00f0, 0x1af9, 0x20a9,
-+      0x00fa, 0x00f0, 0x1b01, 0x2079, 0x4e00, 0x2009, 0x0018, 0x72c8,
-+      0xd284, 0x00c0, 0x1b0f, 0x2061, 0x4e40, 0x0078, 0x1b12, 0x2061,
-+      0x4e80, 0xc1fd, 0x607f, 0x0000, 0x792a, 0x6067, 0x0001, 0x6083,
-+      0x000f, 0x60a7, 0x0000, 0x60a8, 0x60b2, 0x60b6, 0x60d4, 0xd0b4,
-+      0x0040, 0x1b2e, 0xc0b4, 0x60d6, 0x0c7e, 0x60b8, 0xa065, 0x6008,
-+      0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x60d4, 0xa084,
-+      0x77ff, 0x60d6, 0x78ac, 0xc08d, 0x78ae, 0x83ff, 0x0040, 0x1b39,
-+      0x007c, 0x681b, 0x0047, 0x2091, 0x8001, 0x007c, 0x73cc, 0x1078,
-+      0x1a90, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a, 0xa185, 0x0040,
-+      0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff, 0x00f0, 0x1b4e,
-+      0x8421, 0x00c0, 0x1b4c, 0x8319, 0x00c0, 0x1b4a, 0x69ee, 0x6a4a,
-+      0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1b62, 0x2069, 0x4e40,
-+      0x0078, 0x1b64, 0x2069, 0x4e80, 0x71c4, 0x71c6, 0x6916, 0x81ff,
-+      0x00c0, 0x1b6c, 0x68a7, 0x0001, 0x78ac, 0xc08c, 0x78ae, 0xd084,
-+      0x00c0, 0x1b74, 0x1078, 0x1ee6, 0x007c, 0x75d8, 0x74dc, 0x75da,
-+      0x74de, 0x0078, 0x1b7e, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8,
-+      0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4e00, 0x7dde, 0x7cda,
-+      0x7bd6, 0x7ad2, 0x1078, 0x1dbd, 0x0040, 0x1c80, 0x20a9, 0x0005,
-+      0x20a1, 0x4e14, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, 0x2009,
-+      0x0040, 0x1078, 0x1fd1, 0x0040, 0x1ba1, 0x1078, 0x1dc6, 0x0078,
-+      0x1c80, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, 0x1bac,
-+      0x007e, 0x1078, 0x2378, 0x007f, 0xa084, 0xff00, 0x8007, 0x8009,
-+      0x0040, 0x1c20, 0x0c7e, 0x2c68, 0x1078, 0x1dbd, 0x0040, 0x1bf2,
-+      0x2c00, 0x689e, 0x8109, 0x00c0, 0x1bb3, 0x609f, 0x0000, 0x0c7f,
-+      0x0c7e, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040, 0xa399,
-+      0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda, 0x7bd6,
-+      0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0040, 0x1c1f, 0x2009, 0x0040,
-+      0x1078, 0x1fd1, 0x00c0, 0x1c09, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0002, 0x00c0, 0x1bf2, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a,
-+      0x00c0, 0x1bee, 0x017e, 0x1078, 0x2374, 0x017f, 0x2d00, 0x6002,
-+      0x0078, 0x1bc1, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e49, 0x0c7f,
-+      0x609f, 0x0000, 0x1078, 0x1c84, 0x2009, 0x0018, 0x6008, 0xc0cd,
-+      0x600a, 0x6004, 0x6086, 0x1078, 0x1d74, 0x1078, 0x1dc6, 0x0078,
-+      0x1c80, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e49, 0x0c7f, 0x609f,
-+      0x0000, 0x1078, 0x1c84, 0x2009, 0x0018, 0x6087, 0x0103, 0x601b,
-+      0x0003, 0x1078, 0x1d74, 0x1078, 0x1dc6, 0x0078, 0x1c80, 0x0c7f,
-+      0x7814, 0xd0e4, 0x00c0, 0x1c45, 0x6114, 0xd1fc, 0x0040, 0x1c2e,
-+      0x1078, 0x1d64, 0x0040, 0x1c45, 0x0078, 0x1c32, 0x1078, 0x1d54,
-+      0x0040, 0x1c45, 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, 0x73c8,
-+      0x72cc, 0x6087, 0x0103, 0x601b, 0x0021, 0x1078, 0x1d74, 0x1078,
-+      0x1dc6, 0x2001, 0x4007, 0x0078, 0x15bc, 0x74c4, 0x73c8, 0x72cc,
-+      0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009, 0x0012, 0xd0fc, 0x00c0,
-+      0x1c55, 0x2071, 0x4e40, 0x0078, 0x1c58, 0x2071, 0x4e80, 0xc1fd,
-+      0x792a, 0x7067, 0x0005, 0x71d4, 0xc1dc, 0x71d6, 0x736a, 0x726e,
-+      0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, 0x707e, 0xa02e, 0x2530,
-+      0x611c, 0xa184, 0x0060, 0x0040, 0x1c6f, 0x1078, 0x4632, 0x0e7f,
-+      0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000,
-+      0x6714, 0x6023, 0x0000, 0x1078, 0x2628, 0x2091, 0x8001, 0x007c,
-+      0x70c3, 0x4005, 0x0078, 0x15bd, 0x20a9, 0x0005, 0x2099, 0x4e14,
-+      0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399,
-+      0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7,
-+      0x0000, 0x791e, 0x0078, 0x15ba, 0x71c4, 0x71c6, 0x2168, 0x0078,
-+      0x1ca3, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68,
-+      0x8109, 0x00c0, 0x1ca5, 0xa285, 0x0000, 0x00c0, 0x1cb3, 0x70c3,
-+      0x4000, 0x0078, 0x1cb5, 0x70c3, 0x4003, 0x70ca, 0x0078, 0x15bd,
-+      0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15b2, 0x7966,
-+      0x0078, 0x15ba, 0x7964, 0x71c6, 0x0078, 0x15ba, 0x7900, 0x71c6,
-+      0x71c4, 0x7902, 0x0078, 0x15ba, 0x7900, 0x71c6, 0x0078, 0x15ba,
-+      0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0040, 0x1ce5, 0x810c,
-+      0x0048, 0x1ce1, 0x8210, 0x810c, 0x810c, 0x0048, 0x1ce1, 0x8210,
-+      0x810c, 0x81ff, 0x00c0, 0x15b3, 0x8210, 0x7a0e, 0xd28c, 0x0040,
-+      0x1d11, 0x7910, 0xc1cd, 0x7912, 0x2009, 0x0021, 0x2019, 0x0003,
-+      0xd284, 0x0040, 0x1d0b, 0x8108, 0x2019, 0x0041, 0x2011, 0x964e,
-+      0x2312, 0x2019, 0x0042, 0x8210, 0x2312, 0x2019, 0x0043, 0x8210,
-+      0x2312, 0x2019, 0x0046, 0x8210, 0x2312, 0x2019, 0x0047, 0x8210,
-+      0x2312, 0x2019, 0x0006, 0x2011, 0x9653, 0x2112, 0x2011, 0x9673,
-+      0x2312, 0x7904, 0x7806, 0x0078, 0x15b9, 0x7804, 0x70c6, 0x0078,
-+      0x15ba, 0x71c4, 0xd1fc, 0x00c0, 0x1d21, 0x2011, 0x52c0, 0x0078,
-+      0x1d23, 0x2011, 0x5340, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003,
-+      0x8003, 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1d32, 0x2011, 0x0001,
-+      0x0078, 0x1d34, 0x2011, 0x0000, 0x6b0c, 0x6800, 0x70da, 0x0078,
-+      0x15b7, 0x017e, 0x7814, 0xd0f4, 0x0040, 0x1d46, 0x2001, 0x4007,
-+      0x70db, 0x0000, 0xa18d, 0x0001, 0x0078, 0x1d52, 0xd0fc, 0x0040,
-+      0x1d51, 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078,
-+      0x1d52, 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0f4, 0x0040,
-+      0x1d61, 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0078,
-+      0x1d62, 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0fc, 0x0040,
-+      0x1d71, 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078,
-+      0x1d72, 0xa006, 0x017f, 0x007c, 0x7112, 0x721a, 0x731e, 0x7810,
-+      0xd0c4, 0x0040, 0x1d7d, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108,
-+      0x810c, 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084,
-+      0x20a2, 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0040,
-+      0x1d9a, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
-+      0x0078, 0x1d9d, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78,
-+      0xa006, 0xa211, 0x7d10, 0xd5c4, 0x0040, 0x1daa, 0x7b84, 0xa319,
-+      0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0040, 0x1daa, 0x7003, 0x0001,
-+      0x7007, 0x0006, 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0040, 0x1dba,
-+      0x7322, 0x7426, 0xa084, 0x01e0, 0x007c, 0x7848, 0xa065, 0x0040,
-+      0x1dc5, 0x2c04, 0x784a, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079,
-+      0x4e00, 0x7848, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1dd1, 0x1078,
-+      0x296b, 0x784a, 0x0f7f, 0x007c, 0x2011, 0x9800, 0x7a4a, 0x7bc4,
-+      0x8319, 0x0040, 0x1de1, 0xa280, 0x0032, 0x2012, 0x2010, 0x0078,
-+      0x1dd8, 0x2013, 0x0000, 0x007c, 0x017e, 0x027e, 0xd7fc, 0x00c0,
-+      0x1ded, 0x2011, 0x53c0, 0x0078, 0x1def, 0x2011, 0x73c0, 0xa784,
-+      0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x1dfa, 0x8003, 0x8003,
-+      0x8003, 0x8003, 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, 0x1078,
-+      0x1de4, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef,
-+      0xa80d, 0x690a, 0x0e7e, 0xd7fc, 0x00c0, 0x1e14, 0x2009, 0x4e53,
-+      0x2071, 0x4e40, 0x0078, 0x1e18, 0x2009, 0x4e93, 0x2071, 0x4e80,
-+      0x210c, 0x6804, 0xa005, 0x0040, 0x1e28, 0xa116, 0x00c0, 0x1e28,
-+      0x2060, 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x1e2b,
-+      0x2009, 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e40, 0x6000,
-+      0x6806, 0x1078, 0x1e5b, 0x1078, 0x201d, 0x6810, 0x7908, 0x8109,
-+      0x790a, 0x8001, 0x6812, 0x00c0, 0x1e2b, 0x7910, 0xc1a5, 0x7912,
-+      0x017f, 0x6902, 0x6906, 0x2d00, 0x2060, 0x1078, 0x2acc, 0x0e7f,
-+      0x007c, 0xa065, 0x0040, 0x1e5a, 0x2008, 0x609c, 0xa005, 0x0040,
-+      0x1e57, 0x2062, 0x609f, 0x0000, 0xa065, 0x0078, 0x1e4d, 0x7848,
-+      0x794a, 0x2062, 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9,
-+      0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+      0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc, 0x00c0, 0x1e76,
-+      0x2071, 0x4e40, 0x2031, 0x4ec0, 0x0078, 0x1e7a, 0x2071, 0x4e80,
-+      0x2031, 0x50c0, 0x7050, 0xa08c, 0x0200, 0x00c0, 0x1e84, 0xa608,
-+      0x2d0a, 0x8000, 0x7052, 0xa006, 0x0e7f, 0x007c, 0x0f7e, 0xd7fc,
-+      0x00c0, 0x1e8e, 0x2079, 0x4e40, 0x0078, 0x1e90, 0x2079, 0x4e80,
-+      0x1078, 0x1de4, 0x2091, 0x8000, 0x6804, 0x780a, 0xa065, 0x0040,
-+      0x1ee4, 0x0078, 0x1ea2, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065,
-+      0x0040, 0x1ee4, 0x6010, 0xa306, 0x00c0, 0x1e9b, 0x600c, 0xa206,
-+      0x00c0, 0x1e9b, 0x2c28, 0x784c, 0xac06, 0x00c0, 0x1eb1, 0x0078,
-+      0x1ee1, 0x6804, 0xac06, 0x00c0, 0x1ebf, 0x6000, 0x2060, 0x6806,
-+      0xa005, 0x00c0, 0x1ebf, 0x6803, 0x0000, 0x0078, 0x1ec9, 0x6400,
-+      0x7808, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1ec9, 0x2c00,
-+      0x6802, 0x2560, 0x0f7f, 0x1078, 0x1e5b, 0x0f7e, 0x601b, 0x0005,
-+      0x6023, 0x0020, 0x0f7f, 0x1078, 0x201d, 0x0f7e, 0x7908, 0x8109,
-+      0x790a, 0x6810, 0x8001, 0x6812, 0x00c0, 0x1ee1, 0x7810, 0xc0a5,
-+      0x7812, 0x2001, 0xffff, 0xa005, 0x0f7f, 0x007c, 0x077e, 0x2700,
-+      0x2039, 0x0000, 0xd0fc, 0x0040, 0x1eee, 0xc7fd, 0x2041, 0x0021,
-+      0x2049, 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1dff,
-+      0x8738, 0xa784, 0x001f, 0x00c0, 0x1ef6, 0xa7bc, 0xff00, 0x873f,
-+      0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1ef6, 0x2091, 0x8001,
-+      0x077f, 0x007c, 0x786c, 0x2009, 0x9674, 0x210c, 0xa10d, 0x0040,
-+      0x1f14, 0xa065, 0x0078, 0x2395, 0x2061, 0x0000, 0x6018, 0xd084,
-+      0x00c0, 0x1f34, 0x7810, 0xd08c, 0x0040, 0x1f25, 0xc08c, 0x7812,
-+      0xc7fc, 0x2069, 0x4e40, 0x0078, 0x1f2a, 0xc08d, 0x7812, 0x2069,
-+      0x4e80, 0xc7fd, 0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091,
-+      0x8001, 0xa005, 0x00c0, 0x1f35, 0x007c, 0xa08c, 0xfff0, 0x0040,
-+      0x1f3b, 0x1078, 0x296b, 0x0079, 0x1f3d, 0x1f4d, 0x1f50, 0x1f56,
-+      0x1f5a, 0x1f4e, 0x1f5e, 0x1f4e, 0x1f4e, 0x1f4e, 0x1f64, 0x1f95,
-+      0x1f99, 0x1f9f, 0x1fb4, 0x1f4e, 0x1f4e, 0x007c, 0x1078, 0x296b,
-+      0x1078, 0x1ee6, 0x2001, 0x8001, 0x0078, 0x1fc0, 0x2001, 0x8003,
-+      0x0078, 0x1fc0, 0x2001, 0x8004, 0x0078, 0x1fc0, 0x1078, 0x1ee6,
-+      0x2001, 0x8006, 0x0078, 0x1fc0, 0x2091, 0x8000, 0x077e, 0xd7fc,
-+      0x00c0, 0x1f70, 0x2069, 0x4e40, 0x2039, 0x0009, 0x0078, 0x1f74,
-+      0x2069, 0x4e80, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000, 0x0040,
-+      0x1f7e, 0x007f, 0x6f1e, 0x2091, 0x8001, 0x007c, 0x6874, 0x077f,
-+      0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010,
-+      0x1078, 0x1dff, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1f88, 0x2091,
-+      0x8001, 0x2001, 0x800a, 0x0078, 0x1fc0, 0x2001, 0x800c, 0x0078,
-+      0x1fc0, 0x1078, 0x1ee6, 0x2001, 0x800d, 0x0078, 0x1fc0, 0x7814,
-+      0xd0e4, 0x00c0, 0x1fb2, 0xd0ec, 0x0040, 0x1fac, 0xd7fc, 0x0040,
-+      0x1fac, 0x78e4, 0x0078, 0x1fad, 0x78e0, 0x70c6, 0x2001, 0x800e,
-+      0x0078, 0x1fc0, 0x0078, 0x1f4e, 0xd7fc, 0x0040, 0x1fba, 0x78ec,
-+      0x0078, 0x1fbb, 0x78e8, 0x70c6, 0x2001, 0x800f, 0x0078, 0x1fc0,
-+      0x70c2, 0xd7fc, 0x00c0, 0x1fc8, 0x70db, 0x0000, 0x0078, 0x1fca,
-+      0x70db, 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080,
-+      0x007c, 0xac80, 0x0001, 0x81ff, 0x0040, 0x1ffc, 0x2099, 0x0030,
-+      0x20a0, 0x700c, 0xa084, 0x03ff, 0x0040, 0x1fde, 0x7018, 0x007e,
-+      0x701c, 0x007e, 0x7020, 0x007e, 0x7024, 0x007e, 0x7112, 0x81ac,
-+      0x721a, 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001,
-+      0x7008, 0x800b, 0x00c8, 0x1ff0, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+      0x00c0, 0x1ffc, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004,
-+      0x007f, 0x7026, 0x007f, 0x7022, 0x007f, 0x701e, 0x007f, 0x701a,
-+      0x007c, 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x6803,
-+      0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290,
-+      0x0004, 0x8109, 0x00c0, 0x200d, 0x007c, 0x6004, 0x6086, 0x2c08,
-+      0x2063, 0x0000, 0x7868, 0xa005, 0x796a, 0x0040, 0x202a, 0x2c02,
-+      0x0078, 0x202b, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x4e00, 0x6887,
-+      0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040,
-+      0x203c, 0x2d02, 0x0078, 0x203d, 0x616e, 0x0c7f, 0x007c, 0x2091,
-+      0x8000, 0x2c04, 0x786e, 0xa005, 0x00c0, 0x2047, 0x786a, 0x2091,
-+      0x8001, 0x609c, 0xa005, 0x0040, 0x2060, 0x0c7e, 0x2060, 0x2008,
-+      0x609c, 0xa005, 0x0040, 0x205c, 0x2062, 0x609f, 0x0000, 0xa065,
-+      0x609c, 0xa005, 0x00c0, 0x2054, 0x7848, 0x794a, 0x2062, 0x0c7f,
-+      0x7848, 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x00c0, 0x206a,
-+      0x1078, 0x296b, 0x784a, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004,
-+      0x8086, 0x818e, 0x00c8, 0x2075, 0xa200, 0x00f0, 0x2070, 0x8086,
-+      0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x209b,
-+      0xa11a, 0x00c8, 0x209b, 0x8213, 0x818d, 0x0048, 0x208e, 0xa11a,
-+      0x00c8, 0x208f, 0x00f0, 0x2083, 0x0078, 0x2093, 0xa11a, 0x2308,
-+      0x8210, 0x00f0, 0x2083, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080,
-+      0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078,
-+      0x2097, 0x7d74, 0x70d0, 0xa506, 0x0040, 0x2187, 0x7810, 0x2050,
-+      0x7800, 0xd08c, 0x0040, 0x20c3, 0xdaec, 0x0040, 0x20c3, 0x0e7e,
-+      0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x20c0,
-+      0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040, 0x20c3, 0x0078, 0x2187,
-+      0x0e7f, 0x0078, 0x2187, 0x1078, 0x1dbd, 0x0040, 0x2187, 0xa046,
-+      0x7970, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x20d2,
-+      0x0078, 0x20d9, 0x72d0, 0xa206, 0x0040, 0x20d9, 0x8840, 0x2009,
-+      0x0080, 0x0c7e, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9,
-+      0x0020, 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0040,
-+      0x20eb, 0x1078, 0x1dbd, 0x7008, 0xd0fc, 0x0040, 0x20eb, 0x7007,
-+      0x0002, 0x2091, 0x8001, 0xa08c, 0x01e0, 0x00c0, 0x2122, 0x53a5,
-+      0x8cff, 0x00c0, 0x2100, 0x88ff, 0x0040, 0x2171, 0x0078, 0x210a,
-+      0x2c00, 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5,
-+      0x0078, 0x2171, 0xa046, 0x7218, 0x731c, 0xdac4, 0x0040, 0x2112,
-+      0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000,
-+      0xa5ab, 0x0000, 0x721a, 0x731e, 0xdac4, 0x0040, 0x2122, 0x7422,
-+      0x7526, 0xa006, 0x7007, 0x0004, 0x0040, 0x2171, 0x8cff, 0x0040,
-+      0x212b, 0x1078, 0x1dc6, 0x0c7f, 0x1078, 0x1dc6, 0xa046, 0x7888,
-+      0x8000, 0x788a, 0xa086, 0x0002, 0x0040, 0x2151, 0x7a7c, 0x7b78,
-+      0xdac4, 0x0040, 0x213d, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004,
-+      0x8004, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+      0x721a, 0x731e, 0xdac4, 0x0040, 0x2187, 0x7422, 0x7526, 0x0078,
-+      0x2187, 0x6014, 0xd0fc, 0x00c0, 0x2159, 0x2069, 0x4e40, 0x0078,
-+      0x215b, 0x2069, 0x4e80, 0x2091, 0x8000, 0x681f, 0x0002, 0x88ff,
-+      0x0040, 0x2167, 0xa046, 0x788c, 0x2060, 0x0078, 0x2151, 0x788b,
-+      0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0078,
-+      0x2187, 0x0c7f, 0x788b, 0x0000, 0x1078, 0x2346, 0x6004, 0xa084,
-+      0x000f, 0x1078, 0x2188, 0x88ff, 0x0040, 0x2185, 0x788c, 0x2060,
-+      0x6004, 0xa084, 0x000f, 0x1078, 0x2188, 0x0078, 0x20a1, 0x007c,
-+      0x0079, 0x218a, 0x219a, 0x21b8, 0x21d6, 0x219a, 0x21e7, 0x21ab,
-+      0x219a, 0x219a, 0x219a, 0x21b6, 0x21d4, 0x219a, 0x219a, 0x219a,
-+      0x219a, 0x219a, 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008,
-+      0xa705, 0x600a, 0x1078, 0x222a, 0x609c, 0x78ba, 0x609f, 0x0000,
-+      0x1078, 0x2330, 0x007c, 0x78bc, 0xd0c4, 0x0040, 0x21b1, 0x0078,
-+      0x219a, 0x601c, 0xc0bd, 0x601e, 0x0078, 0x21be, 0x1078, 0x2378,
-+      0x78bc, 0xd0c4, 0x0040, 0x21be, 0x0078, 0x219a, 0x78bf, 0x0000,
-+      0x6004, 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0040, 0x21d1,
-+      0x1078, 0x222a, 0x0040, 0x21d1, 0x78bc, 0xc0c5, 0x78be, 0x0078,
-+      0x21d3, 0x0078, 0x2249, 0x007c, 0x1078, 0x2374, 0x78bc, 0xa08c,
-+      0x0e00, 0x00c0, 0x21de, 0xd0c4, 0x00c0, 0x21e0, 0x0078, 0x219a,
-+      0x1078, 0x222a, 0x00c0, 0x21e6, 0x0078, 0x2249, 0x007c, 0x78bc,
-+      0xd0c4, 0x0040, 0x21ed, 0x0078, 0x219a, 0x78bf, 0x0000, 0x6714,
-+      0x2011, 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040,
-+      0x220d, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040,
-+      0x220d, 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e,
-+      0x0002, 0x0040, 0x220d, 0x0078, 0x2227, 0x1078, 0x1de4, 0x2d00,
-+      0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084,
-+      0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x2210,
-+      0x8211, 0x0040, 0x2227, 0x20a9, 0x0100, 0x0078, 0x2210, 0x1078,
-+      0x1dc6, 0x007c, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6,
-+      0x00c0, 0x2235, 0x78ba, 0x0078, 0x223d, 0x689e, 0x2d00, 0x6002,
-+      0x78b8, 0xad06, 0x00c0, 0x223d, 0x6002, 0x78b0, 0x8001, 0x78b2,
-+      0x00c0, 0x2248, 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006,
-+      0x007c, 0x0e7e, 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2,
-+      0x601c, 0x60a2, 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060,
-+      0x0040, 0x225c, 0x1078, 0x4632, 0x6596, 0x65a6, 0x669a, 0x66aa,
-+      0x6714, 0x2071, 0x4e80, 0xd7fc, 0x00c0, 0x2268, 0x2071, 0x4e40,
-+      0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x2273, 0x8003,
-+      0x8003, 0x8003, 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, 0x8007,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, 0x60c2,
-+      0x2091, 0x8000, 0x7814, 0xd0c4, 0x0040, 0x2298, 0xd0ec, 0x0040,
-+      0x2294, 0xd7fc, 0x00c0, 0x2291, 0xd0f4, 0x00c0, 0x229f, 0x0078,
-+      0x2298, 0xd0fc, 0x00c0, 0x229f, 0x7810, 0xd0f4, 0x00c0, 0x229f,
-+      0x6e08, 0xd684, 0x0040, 0x22c9, 0xd9fc, 0x00c0, 0x22c9, 0x2091,
-+      0x8001, 0x1078, 0x1e5b, 0x2091, 0x8000, 0x1078, 0x201d, 0x2091,
-+      0x8001, 0x7814, 0xd0e4, 0x00c0, 0x232e, 0x7814, 0xd0c4, 0x0040,
-+      0x232e, 0xd0ec, 0x0040, 0x22c1, 0xd7fc, 0x00c0, 0x22bc, 0xd0f4,
-+      0x00c0, 0x22c5, 0x0078, 0x232e, 0xd0fc, 0x00c0, 0x22c5, 0x0078,
-+      0x232e, 0x7810, 0xd0f4, 0x0040, 0x232e, 0x601b, 0x0021, 0x0078,
-+      0x232e, 0x6024, 0xa096, 0x0001, 0x00c0, 0x22d0, 0x8000, 0x6026,
-+      0x6a10, 0x6814, 0xa202, 0x0048, 0x22e3, 0x0040, 0x22e3, 0x2091,
-+      0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078,
-+      0x2330, 0x0078, 0x232e, 0x2c08, 0xd9fc, 0x0040, 0x230b, 0x6800,
-+      0xa065, 0x0040, 0x230b, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0040,
-+      0x2301, 0x704c, 0xa206, 0x00c0, 0x2301, 0x6b04, 0x2160, 0x2304,
-+      0x6002, 0xa005, 0x00c0, 0x22fd, 0x6902, 0x2260, 0x6102, 0x0078,
-+      0x2317, 0x2d00, 0x2060, 0x1078, 0x2acc, 0x6e08, 0x2160, 0x6202,
-+      0x6906, 0x0078, 0x2317, 0x6800, 0x6902, 0xa065, 0x0040, 0x2313,
-+      0x6102, 0x0078, 0x2314, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160,
-+      0xd9fc, 0x0040, 0x231e, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, 0x7d08,
-+      0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0040,
-+      0x232e, 0xa6b6, 0x0040, 0x6e0a, 0x1078, 0x1e6c, 0x0e7f, 0x007c,
-+      0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x201d, 0x2091,
-+      0x8001, 0x78b8, 0xa065, 0x0040, 0x2343, 0x609c, 0x78ba, 0x609f,
-+      0x0000, 0x0078, 0x2330, 0x78b6, 0x78ba, 0x007c, 0x7970, 0x7874,
-+      0x2818, 0xd384, 0x0040, 0x2350, 0x8000, 0xa112, 0x0048, 0x2355,
-+      0x8000, 0xa112, 0x00c8, 0x2365, 0xc384, 0x7a7c, 0x721a, 0x7a78,
-+      0x721e, 0xdac4, 0x0040, 0x2360, 0x7a84, 0x7222, 0x7a80, 0x7226,
-+      0xa006, 0xd384, 0x0040, 0x2365, 0x8000, 0x7876, 0x70d2, 0x781c,
-+      0xa005, 0x0040, 0x2373, 0x8001, 0x781e, 0x00c0, 0x2373, 0x0068,
-+      0x2373, 0x2091, 0x4080, 0x007c, 0x2039, 0x238c, 0x0078, 0x237a,
-+      0x2039, 0x2392, 0x2704, 0xa005, 0x0040, 0x238b, 0xac00, 0x2068,
-+      0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e,
-+      0x8738, 0x0078, 0x237a, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015,
-+      0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x2041, 0x0000, 0x780c,
-+      0x0079, 0x239a, 0x256c, 0x253f, 0x239e, 0x2417, 0x2039, 0x9674,
-+      0x2734, 0x7d10, 0x0078, 0x23be, 0x6084, 0xa086, 0x0103, 0x00c0,
-+      0x2400, 0x6114, 0x6018, 0xa105, 0x0040, 0x23b3, 0x86ff, 0x00c0,
-+      0x23cf, 0x0078, 0x2400, 0x8603, 0xa080, 0x9655, 0x620c, 0x2202,
-+      0x8000, 0x6210, 0x2202, 0x1078, 0x203f, 0x8630, 0xa68e, 0x000f,
-+      0x0040, 0x248b, 0x786c, 0xa065, 0x00c0, 0x23a4, 0x7808, 0xa602,
-+      0x00c8, 0x23cf, 0xd5ac, 0x00c0, 0x23cf, 0x263a, 0x007c, 0xa682,
-+      0x0003, 0x00c8, 0x248b, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818,
-+      0xd084, 0x00c0, 0x23fb, 0x2011, 0x9655, 0x2204, 0x70c6, 0x8210,
-+      0x2204, 0x70ca, 0xd684, 0x00c0, 0x23eb, 0x8210, 0x2204, 0x70da,
-+      0x8210, 0x2204, 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, 0x0001,
-+      0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001,
-+      0x203b, 0x0000, 0x007c, 0x7810, 0xc0ad, 0x7812, 0x0078, 0x248b,
-+      0x263a, 0x1078, 0x2576, 0x00c0, 0x2599, 0x786c, 0xa065, 0x00c0,
-+      0x23a4, 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040,
-+      0x2412, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0078, 0x2599, 0x2039,
-+      0x9674, 0x2734, 0x7d10, 0x0078, 0x2433, 0x6084, 0xa086, 0x0103,
-+      0x00c0, 0x2474, 0x6114, 0x6018, 0xa105, 0x0040, 0x242c, 0x86ff,
-+      0x00c0, 0x2444, 0x0078, 0x2474, 0xa680, 0x9655, 0x620c, 0x2202,
-+      0x1078, 0x203f, 0x8630, 0xa68e, 0x001e, 0x0040, 0x248b, 0x786c,
-+      0xa065, 0x00c0, 0x241d, 0x7808, 0xa602, 0x00c8, 0x2444, 0xd5ac,
-+      0x00c0, 0x2444, 0x263a, 0x007c, 0xa682, 0x0006, 0x00c8, 0x248b,
-+      0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x246f,
-+      0x2011, 0x9655, 0x2009, 0x964e, 0x26a8, 0x211c, 0x2204, 0x201a,
-+      0x8108, 0x8210, 0x00f0, 0x2455, 0xa685, 0x8030, 0x70c2, 0x681b,
-+      0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091,
-+      0x8001, 0xa006, 0x2009, 0x9675, 0x200a, 0x203a, 0x007c, 0x7810,
-+      0xc0ad, 0x7812, 0x0078, 0x248b, 0x263a, 0x1078, 0x2576, 0x00c0,
-+      0x2599, 0x786c, 0xa065, 0x00c0, 0x241d, 0x2091, 0x8000, 0x7810,
-+      0xa084, 0xffcf, 0x86ff, 0x0040, 0x2486, 0xc0ad, 0x7812, 0x2091,
-+      0x8001, 0x0078, 0x2599, 0x2091, 0x8000, 0x7007, 0x0004, 0x7994,
-+      0x70d4, 0xa102, 0x0048, 0x249c, 0x0040, 0x24a6, 0x7b90, 0xa302,
-+      0x00c0, 0x24a6, 0x0078, 0x249f, 0x8002, 0x00c0, 0x24a6, 0x263a,
-+      0x7810, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x007c, 0xa184, 0xff00,
-+      0x0040, 0x24b3, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007,
-+      0xa100, 0x0078, 0x24b6, 0x8107, 0x8004, 0x8004, 0x7a9c, 0xa210,
-+      0x721a, 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, 0x0040, 0x24c6,
-+      0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, 0x0030,
-+      0x7003, 0x0000, 0x2009, 0x9654, 0x260a, 0x8109, 0x2198, 0x2104,
-+      0xd084, 0x0040, 0x24d4, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6,
-+      0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a,
-+      0x00c8, 0x24e3, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0040,
-+      0x24f2, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
-+      0x0078, 0x24f5, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78,
-+      0xa006, 0xa211, 0xd4c4, 0x0040, 0x2501, 0x7b84, 0xa319, 0x7c80,
-+      0xa421, 0x7008, 0xd0fc, 0x0040, 0x2501, 0xa084, 0x01e0, 0x0040,
-+      0x2526, 0x7d10, 0x2031, 0x9654, 0x2634, 0x78a8, 0x8000, 0x78aa,
-+      0xd08c, 0x00c0, 0x251b, 0x7007, 0x0006, 0x7004, 0xd094, 0x00c0,
-+      0x2515, 0x0078, 0x248d, 0x2069, 0x4e47, 0x206b, 0x0003, 0x78ac,
-+      0xa085, 0x0300, 0x78ae, 0xa006, 0x0078, 0x252f, 0x2030, 0x75d6,
-+      0x2091, 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091,
-+      0x8001, 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a,
-+      0x721e, 0xd5c4, 0x0040, 0x253e, 0x7322, 0x7426, 0x007c, 0x6084,
-+      0xa086, 0x0103, 0x00c0, 0x2562, 0x6114, 0x6018, 0xa105, 0x00c0,
-+      0x2562, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x2562, 0x600c,
-+      0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091,
-+      0x4080, 0x1078, 0x203f, 0x0068, 0x2561, 0x786c, 0xa065, 0x00c0,
-+      0x253f, 0x007c, 0x1078, 0x2576, 0x00c0, 0x2599, 0x786c, 0xa065,
-+      0x00c0, 0x253f, 0x0078, 0x2599, 0x1078, 0x2576, 0x00c0, 0x2599,
-+      0x786c, 0xa065, 0x00c0, 0x256c, 0x0078, 0x2599, 0x6084, 0xa086,
-+      0x0103, 0x00c0, 0x258a, 0x6018, 0xc0fc, 0x601a, 0xa086, 0x0004,
-+      0x00c0, 0x258a, 0x7804, 0xd0a4, 0x0040, 0x258a, 0x1078, 0x203f,
-+      0xa006, 0x007c, 0x1078, 0x259f, 0x00c0, 0x2591, 0xa085, 0x0001,
-+      0x007c, 0x1078, 0x25ae, 0x00c0, 0x2597, 0x2041, 0x0001, 0x7d10,
-+      0x007c, 0x88ff, 0x0040, 0x259e, 0x2091, 0x4080, 0x007c, 0x7b90,
-+      0x7994, 0x70d4, 0xa102, 0x00c0, 0x25a8, 0xa385, 0x0000, 0x007c,
-+      0x0048, 0x25ac, 0xa302, 0x007c, 0x8002, 0x007c, 0x7810, 0xd0ec,
-+      0x0040, 0x25c6, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004,
-+      0xa005, 0x00c0, 0x25c3, 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040,
-+      0x25c6, 0x0078, 0x2617, 0x0e7f, 0x0078, 0x2617, 0xa184, 0xff00,
-+      0x0040, 0x25d3, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007,
-+      0xa100, 0x0078, 0x25d6, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98,
-+      0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009,
-+      0x0018, 0x6028, 0xa005, 0x0040, 0x25e7, 0x2009, 0x0040, 0x1078,
-+      0x1d74, 0x0040, 0x2609, 0x78a8, 0x8000, 0x78aa, 0xd08c, 0x00c0,
-+      0x2617, 0x6014, 0xd0fc, 0x00c0, 0x25f9, 0x2069, 0x4e40, 0x0078,
-+      0x25fb, 0x2069, 0x4e80, 0x2091, 0x8000, 0x681f, 0x0003, 0x78ab,
-+      0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, 0x0078,
-+      0x2617, 0x78ab, 0x0000, 0x1078, 0x203f, 0x7990, 0x7894, 0x8000,
-+      0xa10a, 0x00c8, 0x2614, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071,
-+      0x0010, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x2623, 0x2009,
-+      0x4e59, 0x0078, 0x2625, 0x2009, 0x4e99, 0x2091, 0x8000, 0x200a,
-+      0x0f7e, 0xd7fc, 0x00c0, 0x263c, 0x2009, 0x4e40, 0x2001, 0x4e04,
-+      0x2004, 0xd0ec, 0x0040, 0x2638, 0x2079, 0x0100, 0x0078, 0x2640,
-+      0x2079, 0x0200, 0x0078, 0x2640, 0x2009, 0x4e80, 0x2079, 0x0100,
-+      0x2104, 0xa086, 0x0000, 0x00c0, 0x2659, 0xd7fc, 0x00c0, 0x264c,
-+      0x2009, 0x4e45, 0x0078, 0x264e, 0x2009, 0x4e85, 0x2104, 0xa005,
-+      0x00c0, 0x2659, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x2659, 0x781b,
-+      0x0045, 0x0f7f, 0x007c, 0x2009, 0x0002, 0x2069, 0x4e00, 0x6810,
-+      0xd0ec, 0x00c0, 0x26c8, 0x2071, 0x4e80, 0x2079, 0x0100, 0x2021,
-+      0x50bf, 0x784b, 0x000f, 0x2019, 0x4457, 0xd184, 0x0040, 0x267c,
-+      0x6810, 0xd0ec, 0x0040, 0x2678, 0x20a1, 0x012b, 0x0078, 0x267e,
-+      0x20a1, 0x022b, 0x0078, 0x267e, 0x20a1, 0x012b, 0x2304, 0xa005,
-+      0x0040, 0x268b, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6,
-+      0x3318, 0x0078, 0x267e, 0x789b, 0x0020, 0x20a9, 0x0010, 0x6814,
-+      0xd0e4, 0x0040, 0x269b, 0x78af, 0x0000, 0x78af, 0x9020, 0x00f0,
-+      0x2693, 0x0078, 0x26a1, 0x78af, 0x0000, 0x78af, 0x8020, 0x00f0,
-+      0x269b, 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040,
-+      0x26aa, 0xc1bd, 0x1078, 0x289b, 0x017f, 0x7020, 0xa084, 0x000f,
-+      0x007e, 0x6814, 0xd0e4, 0x007f, 0x00c0, 0x26ba, 0xa085, 0x6340,
-+      0x0078, 0x26bc, 0xa085, 0x62c0, 0x7806, 0x780f, 0x9200, 0x7843,
-+      0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7456, 0x7053, 0x0000,
-+      0x8109, 0x0040, 0x26db, 0x2071, 0x4e40, 0x6810, 0xd0ec, 0x0040,
-+      0x26d5, 0x2079, 0x0100, 0x0078, 0x26d7, 0x2079, 0x0200, 0x2021,
-+      0x4ebf, 0x0078, 0x2669, 0x007c, 0x017e, 0xd1bc, 0x00c0, 0x26f0,
-+      0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x26ec,
-+      0x2011, 0x0101, 0x0078, 0x26f2, 0x2011, 0x0201, 0x0078, 0x26f2,
-+      0x2011, 0x0101, 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105,
-+      0x2012, 0x017f, 0x1078, 0x289b, 0x007c, 0xd3fc, 0x00c0, 0x2710,
-+      0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x270c,
-+      0x2011, 0x0101, 0x0078, 0x2712, 0x2011, 0x0201, 0x0078, 0x2712,
-+      0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x00f0, 0x2714, 0xa18c,
-+      0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2019,
-+      0x0002, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x0040, 0x272c, 0x8319,
-+      0x2009, 0x0101, 0x0078, 0x272e, 0x2009, 0x0101, 0x20a9, 0x0005,
-+      0x8213, 0x00f0, 0x2730, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f,
-+      0xa205, 0x200a, 0x8319, 0x0040, 0x2741, 0x2009, 0x0201, 0x0078,
-+      0x272e, 0x007c, 0xd3fc, 0x00c0, 0x2755, 0x007e, 0x2001, 0x4e04,
-+      0x2004, 0xd0ec, 0x007f, 0x0040, 0x2751, 0x2011, 0x0101, 0x0078,
-+      0x2757, 0x2011, 0x0201, 0x0078, 0x2757, 0x2011, 0x0101, 0x20a9,
-+      0x000c, 0x810b, 0x00f0, 0x2759, 0xa18c, 0xf000, 0x2204, 0xa084,
-+      0x0fff, 0xa105, 0x2012, 0x007c, 0xd3fc, 0x00c0, 0x2777, 0x007e,
-+      0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2773, 0x2011,
-+      0x0102, 0x0078, 0x2779, 0x2011, 0x0202, 0x0078, 0x2779, 0x2011,
-+      0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x0c7e,
-+      0xd1bc, 0x00c0, 0x2793, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x278f, 0x2061, 0x0100, 0x0078, 0x2795, 0x2061,
-+      0x0200, 0x0078, 0x2795, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003,
-+      0xa080, 0x0020, 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x0c7e,
-+      0xd1bc, 0x00c0, 0x27b3, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x27af, 0x2061, 0x0100, 0x0078, 0x27b5, 0x2061,
-+      0x0200, 0x0078, 0x27b5, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003,
-+      0xa080, 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f,
-+      0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x27d5, 0x007e, 0x2001, 0x4e04,
-+      0x2004, 0xd0ec, 0x007f, 0x0040, 0x27d1, 0x2061, 0x0100, 0x0078,
-+      0x27d7, 0x2061, 0x0200, 0x0078, 0x27d7, 0x2061, 0x0100, 0xc1bc,
-+      0x8103, 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, 0xa085, 0x0020,
-+      0x60ae, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x27f7, 0x007e,
-+      0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x27f3, 0x2061,
-+      0x0100, 0x0078, 0x27f9, 0x2061, 0x0200, 0x0078, 0x27f9, 0x2061,
-+      0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4,
-+      0xa28c, 0x0020, 0x0040, 0x2807, 0xc2ac, 0xa39d, 0x4000, 0xc3fc,
-+      0xd3b4, 0x00c0, 0x280c, 0xc3fd, 0x62ae, 0x2010, 0x60a4, 0x63ae,
-+      0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818,
-+      0xa005, 0x0040, 0x2879, 0xd1fc, 0x0040, 0x2822, 0x2061, 0x95d0,
-+      0x0078, 0x2824, 0x2061, 0x94c0, 0x1078, 0x2881, 0x0040, 0x285b,
-+      0x20a9, 0x0101, 0xd1fc, 0x0040, 0x2831, 0x2061, 0x94d0, 0x0078,
-+      0x2833, 0x2061, 0x93c0, 0x0c7e, 0x1078, 0x2881, 0x0040, 0x283e,
-+      0x0c7f, 0x8c60, 0x00f0, 0x2833, 0x0078, 0x2879, 0x007f, 0xd1fc,
-+      0x0040, 0x2848, 0xa082, 0x94d0, 0x2071, 0x4e80, 0x0078, 0x284c,
-+      0xa082, 0x93c0, 0x2071, 0x4e40, 0x707a, 0x7176, 0x2138, 0x2001,
-+      0x0004, 0x7066, 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x1078,
-+      0x261c, 0x0078, 0x2875, 0xd1fc, 0x00c0, 0x2862, 0x2071, 0x4e40,
-+      0x0078, 0x2864, 0x2071, 0x4e80, 0x6020, 0xc0dd, 0x6022, 0x7176,
-+      0x2138, 0x2c00, 0x707e, 0x2001, 0x0006, 0x7066, 0x7083, 0x000f,
-+      0x71d4, 0xc1dc, 0x71d6, 0x1078, 0x261c, 0x2001, 0x0000, 0x0078,
-+      0x287b, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f,
-+      0x007c, 0x2c04, 0xa005, 0x0040, 0x2898, 0x2060, 0x6010, 0xa306,
-+      0x00c0, 0x2895, 0x600c, 0xa206, 0x00c0, 0x2895, 0x6014, 0xa106,
-+      0x00c0, 0x2895, 0xa006, 0x0078, 0x289a, 0x6000, 0x0078, 0x2882,
-+      0xa085, 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0,
-+      0x28b3, 0x2079, 0x4e40, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x28af, 0x2071, 0x0100, 0x0078, 0x28b7, 0x2071,
-+      0x0200, 0x0078, 0x28b7, 0x2079, 0x4e80, 0x2071, 0x0100, 0x7920,
-+      0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x00c0, 0x28c1, 0x017f, 0x0078,
-+      0x28dc, 0x810b, 0x810b, 0x810b, 0x810b, 0x007f, 0xd0bc, 0x00c0,
-+      0x28d9, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+      0x28d5, 0xa18d, 0x0f00, 0x0078, 0x28db, 0xa18d, 0x0f00, 0x0078,
-+      0x28db, 0xa18d, 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x0e7e,
-+      0x2001, 0x4e01, 0x2004, 0xd0ac, 0x00c0, 0x295c, 0x68e4, 0xd0ac,
-+      0x0040, 0x295c, 0xa084, 0x0006, 0x00c0, 0x295c, 0x6014, 0xd0fc,
-+      0x00c0, 0x28f6, 0x2071, 0x52c0, 0x0078, 0x28f8, 0x2071, 0x5340,
-+      0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004,
-+      0xa084, 0x000a, 0x00c0, 0x295c, 0x7108, 0xa194, 0xff00, 0x0040,
-+      0x295c, 0xa18c, 0x00ff, 0x2001, 0x000a, 0xa106, 0x0040, 0x292b,
-+      0x2001, 0x000c, 0xa106, 0x0040, 0x292f, 0x2001, 0x0012, 0xa106,
-+      0x0040, 0x2933, 0x2001, 0x0014, 0xa106, 0x0040, 0x2937, 0x2001,
-+      0x0019, 0xa106, 0x0040, 0x293b, 0x2001, 0x0032, 0xa106, 0x0040,
-+      0x293f, 0x0078, 0x2943, 0x2009, 0x000c, 0x0078, 0x2945, 0x2009,
-+      0x0012, 0x0078, 0x2945, 0x2009, 0x0014, 0x0078, 0x2945, 0x2009,
-+      0x0019, 0x0078, 0x2945, 0x2009, 0x0020, 0x0078, 0x2945, 0x2009,
-+      0x003f, 0x0078, 0x2945, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a,
-+      0x2071, 0x4e00, 0x7004, 0xd0bc, 0x0040, 0x295c, 0x6014, 0xd0fc,
-+      0x00c0, 0x2957, 0x70ea, 0x2071, 0x4e40, 0x0078, 0x295a, 0x70ee,
-+      0x2071, 0x4e80, 0x701f, 0x000d, 0x0e7f, 0x007c, 0x2001, 0x4e05,
-+      0x2004, 0xd0e4, 0x00c0, 0x296a, 0x7804, 0xa084, 0xff1f, 0xa085,
-+      0x6340, 0x7806, 0x007c, 0x0068, 0x296b, 0x2091, 0x8000, 0x2071,
-+      0x0000, 0x007e, 0x7018, 0xd084, 0x00c0, 0x2972, 0x007f, 0x2071,
-+      0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x080f,
-+      0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x0078, 0x2988, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708e,
-+      0x7592, 0x7496, 0x769a, 0x779e, 0xa594, 0x003f, 0xd4f4, 0x0040,
-+      0x299f, 0xa784, 0x007d, 0x00c0, 0x43cd, 0x1078, 0x296b, 0xa49c,
-+      0x000f, 0xa382, 0x0004, 0x0050, 0x29aa, 0xa3a6, 0x0007, 0x00c0,
-+      0x296b, 0x2418, 0x8507, 0xa084, 0x000f, 0x0079, 0x29af, 0x3028,
-+      0x3119, 0x3144, 0x33b6, 0x379f, 0x3819, 0x38ce, 0x395f, 0x3a4d,
-+      0x3b3c, 0x29c2, 0x29bf, 0x2df9, 0x2f1c, 0x3770, 0x29bf, 0x1078,
-+      0x296b, 0x007c, 0xa006, 0x0078, 0x29cc, 0x7808, 0xc08d, 0x780a,
-+      0xa006, 0x7002, 0x704e, 0x7046, 0x70d2, 0x7060, 0xa005, 0x00c0,
-+      0x2b32, 0x7064, 0xa084, 0x0007, 0x0079, 0x29d6, 0x29de, 0x2a51,
-+      0x2a5a, 0x2a65, 0x2a70, 0x2b18, 0x2a7b, 0x2a51, 0x7830, 0xd0bc,
-+      0x00c0, 0x29c1, 0x71d4, 0xd1bc, 0x00c0, 0x29c1, 0xd1b4, 0x00c0,
-+      0x2a2e, 0x70a4, 0xa086, 0x0001, 0x0040, 0x29c1, 0x70b4, 0xa06d,
-+      0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808,
-+      0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040,
-+      0x2a04, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001,
-+      0x0010, 0x0078, 0x2c8c, 0x7060, 0xa005, 0x00c0, 0x29c1, 0x0c7e,
-+      0x0d7e, 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010,
-+      0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d,
-+      0xa886, 0x0001, 0x0040, 0x2a27, 0x69bc, 0x7daa, 0x79aa, 0x68c0,
-+      0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2c8c, 0x1078, 0x4360,
-+      0x00c0, 0x29c1, 0x781b, 0x005b, 0x70bc, 0xa06d, 0x68b4, 0x785a,
-+      0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d,
-+      0x780a, 0x68bc, 0x7042, 0xc1b4, 0x71d6, 0x70b8, 0xa065, 0x68c0,
-+      0x705a, 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046,
-+      0x007c, 0x1078, 0x4360, 0x00c0, 0x2a59, 0x781b, 0x0047, 0x7003,
-+      0x0004, 0x007c, 0x1078, 0x4360, 0x00c0, 0x2a64, 0x2011, 0x000c,
-+      0x1078, 0x2a8b, 0x7003, 0x0004, 0x007c, 0x1078, 0x4360, 0x00c0,
-+      0x2a6f, 0x2011, 0x0006, 0x1078, 0x2a8b, 0x7003, 0x0004, 0x007c,
-+      0x1078, 0x4360, 0x00c0, 0x2a7a, 0x2011, 0x000d, 0x1078, 0x2a8b,
-+      0x7003, 0x0004, 0x007c, 0x1078, 0x4360, 0x00c0, 0x2a8a, 0x2011,
-+      0x0006, 0x1078, 0x2a8b, 0x707c, 0x707f, 0x0000, 0x2068, 0x704e,
-+      0x7003, 0x0001, 0x007c, 0x7174, 0xc1fc, 0x8107, 0x7882, 0x789b,
-+      0x0010, 0xa286, 0x000c, 0x00c0, 0x2a9a, 0x7aaa, 0x2001, 0x0001,
-+      0x0078, 0x2aaf, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286,
-+      0x000d, 0x0040, 0x2aa8, 0x7aaa, 0x2001, 0x0002, 0x0078, 0x2aaf,
-+      0x78ab, 0x0020, 0x7178, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b,
-+      0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x0116, 0x1078, 0x4383,
-+      0x7083, 0x000f, 0x70d4, 0xd0b4, 0x0040, 0x2acb, 0xc0b4, 0x70d6,
-+      0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018,
-+      0x8001, 0x601a, 0x0c7f, 0x007c, 0x7014, 0xa005, 0x00c0, 0x2ada,
-+      0x70d4, 0xd0b4, 0x0040, 0x2adb, 0x70b8, 0xac06, 0x00c0, 0x2adb,
-+      0x1078, 0x2aba, 0x007c, 0x017e, 0x71a4, 0xa186, 0x0001, 0x0040,
-+      0x2b0d, 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b4,
-+      0x2068, 0x6800, 0xac06, 0x0040, 0x2af4, 0x8211, 0x0040, 0x2b0b,
-+      0x1078, 0x2b0f, 0x0078, 0x2ae9, 0x0c7e, 0x2100, 0x2011, 0x0001,
-+      0xa212, 0x70b4, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef,
-+      0x600a, 0x8211, 0x0040, 0x2b08, 0x1078, 0x2b0f, 0x0078, 0x2afb,
-+      0x70a7, 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, 0xade8,
-+      0x0005, 0x70ac, 0xad06, 0x00c0, 0x2b17, 0x70a8, 0x2068, 0x007c,
-+      0x1078, 0x4360, 0x00c0, 0x29c1, 0x707c, 0x2068, 0x7774, 0x1078,
-+      0x41fe, 0x2c50, 0x1078, 0x4442, 0x789b, 0x0010, 0x6814, 0xa084,
-+      0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004,
-+      0x0078, 0x2c92, 0x1078, 0x4360, 0x00c0, 0x29c1, 0x789b, 0x0010,
-+      0x7060, 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0040, 0x2b4c, 0xc0b4,
-+      0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a,
-+      0x6018, 0x8001, 0x601a, 0x0c7f, 0x1078, 0x41fe, 0x2c50, 0x1078,
-+      0x4442, 0x6824, 0xa005, 0x0040, 0x2b5d, 0xa082, 0x0006, 0x0048,
-+      0x2b5b, 0x0078, 0x2b5d, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f,
-+      0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003,
-+      0x0078, 0x2c92, 0xc28d, 0x72d6, 0x72c0, 0xa200, 0xa015, 0x7154,
-+      0x8108, 0xa12a, 0x0048, 0x2b75, 0x71c0, 0x2164, 0x6504, 0x85ff,
-+      0x00c0, 0x2b8c, 0x7156, 0x8421, 0x00c0, 0x2b70, 0x70d4, 0xd08c,
-+      0x0040, 0x2b88, 0x70d0, 0xa005, 0x00c0, 0x2b88, 0x70d3, 0x000a,
-+      0x007c, 0x2200, 0x0078, 0x2b7a, 0x70d4, 0xc08c, 0x70d6, 0x70d3,
-+      0x0000, 0x6034, 0xa005, 0x00c0, 0x2b89, 0x6708, 0xa784, 0x073f,
-+      0x0040, 0x2bbb, 0xd7d4, 0x00c0, 0x2b89, 0xa784, 0x0021, 0x00c0,
-+      0x2b89, 0xa784, 0x0002, 0x0040, 0x2bac, 0xa784, 0x0004, 0x0040,
-+      0x2b89, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x00c0, 0x2b89,
-+      0xa784, 0x0100, 0x0040, 0x2bbb, 0x6018, 0xa005, 0x00c0, 0x2b89,
-+      0xa7bc, 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684,
-+      0x000e, 0x6318, 0x0040, 0x2bcc, 0x601c, 0xa302, 0x0048, 0x2bcf,
-+      0x0040, 0x2bcf, 0x0078, 0x2b89, 0x83ff, 0x00c0, 0x2b89, 0x2d58,
-+      0x2c50, 0x7156, 0xd7bc, 0x00c0, 0x2bd8, 0x7028, 0x6022, 0x603a,
-+      0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041,
-+      0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040,
-+      0x2bec, 0xd684, 0x0040, 0x2bee, 0xa39c, 0xffbf, 0xd6a4, 0x0040,
-+      0x2bf3, 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2c3e, 0xc7a5,
-+      0x670a, 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c12,
-+      0x70d4, 0xd0b4, 0x00c0, 0x2c12, 0x7000, 0xa082, 0x0002, 0x00c8,
-+      0x2c12, 0x7830, 0xd0bc, 0x00c0, 0x2c12, 0x789b, 0x0010, 0x7baa,
-+      0x0078, 0x2c8a, 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, 0x0005,
-+      0x70ac, 0xa606, 0x00c0, 0x2c1d, 0x76a8, 0x76b2, 0x2c3a, 0x8738,
-+      0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830,
-+      0xd0bc, 0x0040, 0x2c35, 0x2091, 0x8000, 0x2091, 0x303d, 0x70d4,
-+      0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040,
-+      0x2c3d, 0x8421, 0x2200, 0x00c0, 0x2b6f, 0x007c, 0xd1dc, 0x0040,
-+      0x3e00, 0x2029, 0x0020, 0xd69c, 0x00c0, 0x2c4b, 0x8528, 0xd68c,
-+      0x00c0, 0x2c4b, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c,
-+      0x00ff, 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2c6a, 0x6014,
-+      0xa706, 0x00c0, 0x2c53, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2c4e,
-+      0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x00c0,
-+      0x2b6f, 0x007c, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840,
-+      0x6008, 0xc0d5, 0x600a, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2c12,
-+      0x70d4, 0xd0b4, 0x00c0, 0x2c12, 0x7000, 0xa082, 0x0002, 0x00c8,
-+      0x2c12, 0x7830, 0xd0bc, 0x00c0, 0x2c12, 0x789b, 0x0010, 0x7baa,
-+      0x7daa, 0x79aa, 0x2001, 0x0002, 0x007e, 0x6018, 0x8000, 0x601a,
-+      0x0078, 0x2c93, 0x007e, 0x2960, 0x6104, 0x2a60, 0xa184, 0x0018,
-+      0x0040, 0x2caf, 0xa184, 0x0010, 0x0040, 0x2ca2, 0x1078, 0x4011,
-+      0x00c0, 0x2cd4, 0xa184, 0x0008, 0x0040, 0x2caf, 0x69a0, 0xa184,
-+      0x0600, 0x00c0, 0x2caf, 0x1078, 0x3ef5, 0x0078, 0x2cd4, 0x69a0,
-+      0xa184, 0x1e00, 0x0040, 0x2cdf, 0xa184, 0x0800, 0x0040, 0x2cc8,
-+      0x0c7e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d,
-+      0x0010, 0x6106, 0x0c7f, 0x1078, 0x4011, 0x00c0, 0x2cd4, 0x69a0,
-+      0xa184, 0x0200, 0x0040, 0x2cd0, 0x1078, 0x3f54, 0x0078, 0x2cd4,
-+      0xa184, 0x0400, 0x00c0, 0x2cab, 0x69a0, 0xa184, 0x1000, 0x0040,
-+      0x2cdf, 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x279f, 0x027f,
-+      0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x2cec, 0xa086, 0x0060,
-+      0x00c0, 0x2cec, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b,
-+      0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0040,
-+      0x2d07, 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0050, 0x2d05,
-+      0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x78aa,
-+      0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0,
-+      0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898,
-+      0x25a0, 0xa286, 0x0020, 0x00c0, 0x2d3f, 0x70d4, 0xc0b5, 0x70d6,
-+      0x2c00, 0x70ba, 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+      0xa286, 0x0002, 0x0040, 0x2d75, 0x70a4, 0x8000, 0x70a6, 0x74b4,
-+      0xa498, 0x0005, 0x70ac, 0xa306, 0x00c0, 0x2d37, 0x73a8, 0x73b6,
-+      0xa286, 0x0010, 0x0040, 0x29c1, 0x0d7f, 0x0c7f, 0x007c, 0x7000,
-+      0xa005, 0x00c0, 0x2d1d, 0xa286, 0x0002, 0x00c0, 0x2d8f, 0x1078,
-+      0x4360, 0x00c0, 0x2d1d, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091,
-+      0x8000, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de,
-+      0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a,
-+      0x127e, 0x0d7e, 0x0c7e, 0x70d4, 0xa084, 0x2700, 0x2090, 0x0c7f,
-+      0x0d7f, 0x127f, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, 0x0002,
-+      0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, 0x0040,
-+      0x2d81, 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000,
-+      0x2090, 0x70a4, 0xa005, 0x00c0, 0x2d86, 0x007c, 0x8421, 0x0040,
-+      0x2d85, 0x7250, 0x70c0, 0xa200, 0xa015, 0x0078, 0x2b6f, 0xa286,
-+      0x0010, 0x00c0, 0x2dc0, 0x1078, 0x4360, 0x00c0, 0x2d1d, 0x6814,
-+      0xc0fc, 0x8007, 0x7882, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894,
-+      0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a,
-+      0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, 0xa206,
-+      0x00c0, 0x2db3, 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, 0x7042,
-+      0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c,
-+      0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+      0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x005b,
-+      0x2900, 0x705a, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605,
-+      0x0040, 0x2deb, 0x70d4, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0,
-+      0x2de5, 0x2009, 0x0000, 0x0078, 0x2de7, 0x2009, 0x0001, 0xa284,
-+      0x000f, 0x1079, 0x2def, 0xad80, 0x0009, 0x7046, 0x007c, 0x2df7,
-+      0x48bd, 0x48bd, 0x48aa, 0x48bd, 0x2df7, 0x2df7, 0x2df7, 0x1078,
-+      0x296b, 0x7808, 0xa084, 0xfffd, 0x780a, 0x1078, 0x295e, 0x0f7e,
-+      0x2079, 0x4e00, 0x78ac, 0x0f7f, 0xd084, 0x0040, 0x2e21, 0x7064,
-+      0xa086, 0x0001, 0x00c0, 0x2e0f, 0x7066, 0x0078, 0x2ef8, 0x7064,
-+      0xa086, 0x0005, 0x00c0, 0x2e1f, 0x707c, 0x2068, 0x681b, 0x0004,
-+      0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7067,
-+      0x0000, 0x70a7, 0x0000, 0x70a8, 0x70b2, 0x70b6, 0x1078, 0x2aba,
-+      0x157e, 0x2011, 0x0004, 0x7164, 0xa186, 0x0001, 0x0040, 0x2e41,
-+      0xa186, 0x0007, 0x00c0, 0x2e38, 0x701f, 0x0005, 0x0078, 0x2e41,
-+      0x701f, 0x0001, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078,
-+      0x2e43, 0x7067, 0x0000, 0x2001, 0x4e0a, 0x2004, 0xa084, 0x00ff,
-+      0xa086, 0x0018, 0x0040, 0x2e53, 0x7018, 0x7016, 0xa005, 0x00c0,
-+      0x2e53, 0x70a7, 0x0001, 0x067e, 0x1078, 0x4586, 0x20a9, 0x0010,
-+      0x2039, 0x0000, 0x1078, 0x40f8, 0xa7b8, 0x0100, 0x00f0, 0x2e5a,
-+      0x067f, 0x7000, 0x0079, 0x2e64, 0x2e9e, 0x2e79, 0x2e79, 0x2e6e,
-+      0x2e9e, 0x2e9e, 0x2e9e, 0x2e6c, 0x1078, 0x296b, 0x7060, 0xa005,
-+      0x0040, 0x2e9e, 0xad06, 0x00c0, 0x2e79, 0x6800, 0x7062, 0x0078,
-+      0x2e8b, 0x6820, 0xd084, 0x00c0, 0x2e87, 0x6f14, 0x1078, 0x41fe,
-+      0x6008, 0xc0d4, 0x600a, 0x1078, 0x3dd0, 0x0078, 0x2e8b, 0x705c,
-+      0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc,
-+      0x0040, 0x2e93, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820,
-+      0xa084, 0x00ff, 0xc09d, 0x6822, 0x1078, 0x202c, 0xb284, 0x0400,
-+      0x0040, 0x2ea6, 0x2021, 0x95d0, 0x0078, 0x2ea8, 0x2021, 0x94c0,
-+      0x1078, 0x2efd, 0xb284, 0x0400, 0x0040, 0x2eb2, 0x2021, 0x4e98,
-+      0x0078, 0x2eb4, 0x2021, 0x4e58, 0x1078, 0x2efd, 0x20a9, 0x0101,
-+      0xb284, 0x0400, 0x0040, 0x2ec0, 0x2021, 0x94d0, 0x0078, 0x2ec2,
-+      0x2021, 0x93c0, 0x1078, 0x2efd, 0x8420, 0x00f0, 0x2ec2, 0xb284,
-+      0x0300, 0x0040, 0x2ecf, 0x2061, 0x53c0, 0x0078, 0x2ed1, 0x2061,
-+      0x73c0, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0040,
-+      0x2eee, 0x6018, 0x017e, 0x007e, 0x2011, 0x4e02, 0x220c, 0xa102,
-+      0x2012, 0x007f, 0x017f, 0xa102, 0x0050, 0x2eee, 0x6012, 0x00c0,
-+      0x2eee, 0x2011, 0x4e04, 0x2204, 0xc0a5, 0x2012, 0x601b, 0x0000,
-+      0xace0, 0x0010, 0x00f0, 0x2ed5, 0x8421, 0x00c0, 0x2ed3, 0x157f,
-+      0x7003, 0x0000, 0x704f, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005,
-+      0x0040, 0x2f18, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000,
-+      0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084,
-+      0x00ff, 0xc09d, 0x6822, 0x1078, 0x202c, 0x007f, 0x0078, 0x2eff,
-+      0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x2f22,
-+      0x1078, 0x296b, 0x2300, 0x0079, 0x2f25, 0x2f28, 0x2fb3, 0x2fd0,
-+      0xa282, 0x0002, 0x0040, 0x2f2e, 0x1078, 0x296b, 0x7064, 0x7067,
-+      0x0000, 0x7083, 0x0000, 0x0079, 0x2f35, 0x2f3d, 0x2f3d, 0x2f3f,
-+      0x2f7f, 0x3e0c, 0x2f3d, 0x2f7f, 0x2f3d, 0x1078, 0x296b, 0x7774,
-+      0x1078, 0x40f8, 0x7774, 0xa7bc, 0x8f00, 0x1078, 0x41fe, 0x6018,
-+      0xa005, 0x0040, 0x2f76, 0xd7fc, 0x00c0, 0x2f52, 0x2021, 0x94c0,
-+      0x0078, 0x2f54, 0x2021, 0x95d0, 0x2009, 0x0005, 0x2011, 0x0010,
-+      0x1078, 0x2feb, 0x0040, 0x2f76, 0x157e, 0x20a9, 0x0101, 0xd7fc,
-+      0x00c0, 0x2f66, 0x2021, 0x93c0, 0x0078, 0x2f68, 0x2021, 0x94d0,
-+      0x047e, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x2feb, 0x047f,
-+      0x0040, 0x2f75, 0x8420, 0x00f0, 0x2f68, 0x157f, 0x8738, 0xa784,
-+      0x001f, 0x00c0, 0x2f45, 0x0078, 0x29c5, 0x0078, 0x29c5, 0x7774,
-+      0x1078, 0x41fe, 0x6018, 0xa005, 0x0040, 0x2fb1, 0xd7fc, 0x00c0,
-+      0x2f8d, 0x2021, 0x94c0, 0x0078, 0x2f8f, 0x2021, 0x95d0, 0x2009,
-+      0x0005, 0x2011, 0x0020, 0x1078, 0x2feb, 0x0040, 0x2fb1, 0x157e,
-+      0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x2fa1, 0x2021, 0x93c0, 0x0078,
-+      0x2fa3, 0x2021, 0x94d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020,
-+      0x1078, 0x2feb, 0x047f, 0x0040, 0x2fb0, 0x8420, 0x00f0, 0x2fa3,
-+      0x157f, 0x0078, 0x29c5, 0x2200, 0x0079, 0x2fb6, 0x2fb9, 0x2fbb,
-+      0x2fbb, 0x1078, 0x296b, 0x2009, 0x0012, 0x7064, 0xa086, 0x0002,
-+      0x0040, 0x2fc4, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040, 0x2fc9,
-+      0x691a, 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x430d,
-+      0x2200, 0x0079, 0x2fd3, 0x2fd8, 0x2fbb, 0x2fd6, 0x1078, 0x296b,
-+      0x1078, 0x4586, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3d7e, 0x1078,
-+      0x3ded, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3d6f, 0x0040,
-+      0x3d7e, 0x0078, 0x29c5, 0x2404, 0xa005, 0x0040, 0x3024, 0x2068,
-+      0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x2ffa, 0x2d20, 0x007f,
-+      0x0078, 0x2fec, 0x007f, 0x2022, 0x691a, 0x6817, 0x0000, 0x682b,
-+      0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff,
-+      0xa205, 0x6822, 0x1078, 0x202c, 0x2021, 0x4e02, 0x241c, 0x8319,
-+      0x2322, 0x6010, 0x8001, 0x6012, 0x00c0, 0x301b, 0x2021, 0x4e04,
-+      0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078,
-+      0x2adb, 0x1078, 0x3ded, 0x007c, 0xa085, 0x0001, 0x0078, 0x3023,
-+      0x2300, 0x0079, 0x302b, 0x3030, 0x302e, 0x30b0, 0x1078, 0x296b,
-+      0x78e4, 0xa005, 0x00d0, 0x3066, 0x3208, 0x007e, 0x2001, 0x4e04,
-+      0x2004, 0xd0ec, 0x007f, 0x0040, 0x3041, 0xa18c, 0x0300, 0x0078,
-+      0x3043, 0xa18c, 0x0400, 0x0040, 0x3049, 0x0018, 0x29c1, 0x0078,
-+      0x304b, 0x0028, 0x29c1, 0x2008, 0xa084, 0x0030, 0x00c0, 0x3052,
-+      0x0078, 0x3770, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3050, 0x2100,
-+      0xa084, 0x0007, 0x0079, 0x305c, 0x3090, 0x309a, 0x3085, 0x3064,
-+      0x4355, 0x4355, 0x3064, 0x30a5, 0x1078, 0x296b, 0x7000, 0xa086,
-+      0x0004, 0x00c0, 0x3080, 0x7064, 0xa086, 0x0002, 0x00c0, 0x3076,
-+      0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x2f1c, 0x7064, 0xa086,
-+      0x0006, 0x0040, 0x3070, 0x7064, 0xa086, 0x0004, 0x0040, 0x3070,
-+      0x79e4, 0x2001, 0x0003, 0x0078, 0x33fa, 0x6818, 0xd0fc, 0x0040,
-+      0x308b, 0x681b, 0x001d, 0x1078, 0x40c8, 0x781b, 0x0064, 0x007c,
-+      0x6818, 0xd0fc, 0x0040, 0x3096, 0x681b, 0x001d, 0x1078, 0x40c8,
-+      0x0078, 0x4331, 0x6818, 0xd0fc, 0x0040, 0x30a0, 0x681b, 0x001d,
-+      0x1078, 0x40c8, 0x781b, 0x00f8, 0x007c, 0x6818, 0xd0fc, 0x0040,
-+      0x30ab, 0x681b, 0x001d, 0x1078, 0x40c8, 0x781b, 0x00c8, 0x007c,
-+      0xa584, 0x000f, 0x00c0, 0x30cf, 0x1078, 0x295e, 0x7000, 0x0079,
-+      0x30b9, 0x29c5, 0x30c1, 0x30c3, 0x3d7e, 0x3d7e, 0x3d7e, 0x30c1,
-+      0x30c1, 0x1078, 0x296b, 0x1078, 0x3ded, 0x6008, 0xa084, 0xfbef,
-+      0x600a, 0x1078, 0x3d6f, 0x0040, 0x3d7e, 0x0078, 0x29c5, 0x78e4,
-+      0xa005, 0x00d0, 0x3066, 0x3208, 0x007e, 0x2001, 0x4e04, 0x2004,
-+      0xd0ec, 0x007f, 0x0040, 0x30e0, 0xa18c, 0x0300, 0x0078, 0x30e2,
-+      0xa18c, 0x0400, 0x0040, 0x30e8, 0x0018, 0x3066, 0x0078, 0x30ea,
-+      0x0028, 0x3066, 0x2008, 0xa084, 0x0030, 0x00c0, 0x30f2, 0x781b,
-+      0x005b, 0x007c, 0x78ec, 0xa084, 0x0003, 0x0040, 0x30ef, 0x2100,
-+      0xa184, 0x0007, 0x0079, 0x30fc, 0x310b, 0x310f, 0x3106, 0x3104,
-+      0x4355, 0x4355, 0x3104, 0x434f, 0x1078, 0x296b, 0x1078, 0x40d0,
-+      0x781b, 0x0064, 0x007c, 0x1078, 0x40d0, 0x0078, 0x4331, 0x1078,
-+      0x40d0, 0x781b, 0x00f8, 0x007c, 0x1078, 0x40d0, 0x781b, 0x00c8,
-+      0x007c, 0x2300, 0x0079, 0x311c, 0x3121, 0x311f, 0x3123, 0x1078,
-+      0x296b, 0x0078, 0x395f, 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4,
-+      0xa184, 0x0030, 0x0040, 0x395f, 0x78ec, 0xa084, 0x0003, 0x0040,
-+      0x395f, 0xa184, 0x0100, 0x0040, 0x3127, 0xa184, 0x0007, 0x0079,
-+      0x3139, 0x3141, 0x310f, 0x3085, 0x430d, 0x4355, 0x4355, 0x430d,
-+      0x434f, 0x1078, 0x4319, 0x007c, 0xa282, 0x0005, 0x0050, 0x314a,
-+      0x1078, 0x296b, 0x2300, 0x0079, 0x314d, 0x3150, 0x3380, 0x338b,
-+      0x2200, 0x0079, 0x3153, 0x316d, 0x315a, 0x316d, 0x3158, 0x3363,
-+      0x1078, 0x296b, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082,
-+      0x0020, 0x0048, 0x40b7, 0xa08a, 0x0004, 0x00c8, 0x40b7, 0x0079,
-+      0x3169, 0x40b7, 0x40b7, 0x40b7, 0x4061, 0x789b, 0x0018, 0x79a8,
-+      0xa184, 0x0080, 0x0040, 0x317e, 0x0078, 0x40b7, 0x7000, 0xa005,
-+      0x00c0, 0x3174, 0x2011, 0x0004, 0x0078, 0x3b4a, 0xa184, 0x00ff,
-+      0xa08a, 0x0010, 0x00c8, 0x40b7, 0x0079, 0x3186, 0x3198, 0x3196,
-+      0x31ad, 0x31b1, 0x3284, 0x40b7, 0x40b7, 0x3286, 0x40b7, 0x40b7,
-+      0x335f, 0x335f, 0x40b7, 0x40b7, 0x40b7, 0x3361, 0x1078, 0x296b,
-+      0xd6e4, 0x0040, 0x31a3, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a,
-+      0x781b, 0x00c3, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x31ab, 0x681b,
-+      0x001d, 0x0078, 0x319b, 0x0078, 0x430d, 0x681b, 0x001d, 0x0078,
-+      0x40c1, 0x6920, 0x6922, 0xa684, 0x1800, 0x00c0, 0x3216, 0x6820,
-+      0xd084, 0x00c0, 0x321c, 0x6818, 0xa086, 0x0008, 0x00c0, 0x31c2,
-+      0x681b, 0x0000, 0xd6d4, 0x0040, 0x3281, 0xd6bc, 0x0040, 0x3202,
-+      0x7087, 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050,
-+      0x3202, 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a,
-+      0x789b, 0x0061, 0x78aa, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208,
-+      0xa18c, 0x0300, 0x0040, 0x31f4, 0x007e, 0x2001, 0x4e04, 0x2004,
-+      0xd0ec, 0x007f, 0x0040, 0x31f0, 0x20a1, 0x012b, 0x0078, 0x31f6,
-+      0x20a1, 0x022b, 0x0078, 0x31f6, 0x20a1, 0x012b, 0x017f, 0x789b,
-+      0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f,
-+      0x137f, 0x157f, 0x6038, 0xa005, 0x00c0, 0x3211, 0x681c, 0xa084,
-+      0x000e, 0x0040, 0x40c1, 0x1078, 0x40d7, 0x782b, 0x3008, 0x0078,
-+      0x3213, 0x8001, 0x603a, 0x781b, 0x0067, 0x007c, 0xd6e4, 0x0040,
-+      0x321c, 0x781b, 0x0079, 0x007c, 0xa684, 0x0060, 0x0040, 0x327e,
-+      0xd6dc, 0x0040, 0x327e, 0xd6fc, 0x00c0, 0x3228, 0x0078, 0x323f,
-+      0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8,
-+      0x3232, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98,
-+      0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4,
-+      0x0040, 0x3245, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, 0xa086, 0x0003,
-+      0x00c0, 0x3253, 0x007e, 0x1078, 0x4586, 0x1078, 0x48bd, 0x007f,
-+      0x781b, 0x0076, 0x007c, 0xa006, 0x1078, 0x49c3, 0x6ab0, 0x69ac,
-+      0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x3262, 0x2200, 0xa422,
-+      0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde,
-+      0x2300, 0xa405, 0x00c0, 0x3272, 0xc6f5, 0x7e5a, 0x6eb6, 0x781b,
-+      0x0076, 0x007c, 0x781b, 0x0076, 0x2200, 0xa115, 0x00c0, 0x327b,
-+      0x1078, 0x48bd, 0x007c, 0x1078, 0x48f5, 0x007c, 0x781b, 0x0079,
-+      0x007c, 0x781b, 0x0067, 0x007c, 0x1078, 0x296b, 0x0078, 0x32d2,
-+      0x6920, 0xd1c4, 0x0040, 0x329b, 0xc1c4, 0x6922, 0x0c7e, 0x7058,
-+      0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004, 0xa084, 0xfff5, 0x6006,
-+      0x0c7f, 0x0078, 0x32c6, 0xd1cc, 0x0040, 0x32c6, 0xc1cc, 0x6922,
-+      0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x6004, 0xc0a4,
-+      0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x32c6, 0x1078,
-+      0x41fa, 0x1078, 0x3ef5, 0x88ff, 0x0040, 0x32c6, 0x789b, 0x0060,
-+      0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x32c3,
-+      0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7e58, 0xd6d4,
-+      0x00c0, 0x32cd, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079, 0x007c,
-+      0x0078, 0x40bc, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x00c0,
-+      0x32e0, 0x6820, 0xa084, 0x0100, 0x0040, 0x32d0, 0x2009, 0x0008,
-+      0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0,
-+      0x32fc, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x32f4,
-+      0x0048, 0x32f4, 0x0078, 0x32f6, 0x0078, 0x3288, 0x24a8, 0x7aa8,
-+      0x00f0, 0x32f6, 0x0078, 0x32e2, 0xa284, 0x00f0, 0xa086, 0x0020,
-+      0x00c0, 0x3350, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, 0x330c,
-+      0x0048, 0x330c, 0x0078, 0x334d, 0xa286, 0x0023, 0x0040, 0x32d0,
-+      0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xc0a5,
-+      0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x7058, 0x2060,
-+      0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, 0x0040, 0x332d, 0x1078,
-+      0x41fa, 0x1078, 0x4011, 0x0078, 0x333b, 0x0c7e, 0x7058, 0x2060,
-+      0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x32c6, 0x1078,
-+      0x41fa, 0x1078, 0x3ef5, 0x88ff, 0x0040, 0x32c6, 0x789b, 0x0060,
-+      0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x334a, 0x781b,
-+      0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x7aa8, 0x0078, 0x32e2,
-+      0x8318, 0x2300, 0xa102, 0x0040, 0x3359, 0x0048, 0x3359, 0x0078,
-+      0x32e2, 0xa284, 0x0080, 0x00c0, 0x40c1, 0x0078, 0x40bc, 0x0078,
-+      0x40c1, 0x0078, 0x40b7, 0x7058, 0xa04d, 0x789b, 0x0018, 0x78a8,
-+      0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040, 0x3370, 0x1078, 0x296b,
-+      0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004,
-+      0x00c8, 0x40b7, 0x0079, 0x337c, 0x40b7, 0x3e46, 0x40b7, 0x3fb9,
-+      0xa282, 0x0000, 0x00c0, 0x3386, 0x1078, 0x296b, 0x1078, 0x40c8,
-+      0x781b, 0x0078, 0x007c, 0xa282, 0x0003, 0x00c0, 0x3391, 0x1078,
-+      0x296b, 0xd4fc, 0x00c0, 0x33b1, 0x7064, 0xa005, 0x0040, 0x339a,
-+      0x1078, 0x296b, 0x6f14, 0x7776, 0xa7bc, 0x8f00, 0x1078, 0x41fe,
-+      0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x00c0,
-+      0x339e, 0x1078, 0x40cc, 0x7067, 0x0002, 0x701f, 0x0009, 0x0078,
-+      0x33b3, 0x1078, 0x40db, 0x781b, 0x0078, 0x007c, 0xa282, 0x0004,
-+      0x0050, 0x33bc, 0x1078, 0x296b, 0x2300, 0x0079, 0x33bf, 0x33c2,
-+      0x3582, 0x35c5, 0xa286, 0x0003, 0x0040, 0x33fa, 0x7200, 0x7cd8,
-+      0x7ddc, 0x7fd0, 0x71d4, 0xd1bc, 0x00c0, 0x33f2, 0xd1b4, 0x0040,
-+      0x33f2, 0x7868, 0xa084, 0x00ff, 0x00c0, 0x33f2, 0xa282, 0x0002,
-+      0x00c8, 0x33f2, 0x0d7e, 0x783b, 0x8300, 0x781b, 0x004c, 0x70bc,
-+      0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+      0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x2001, 0x0000,
-+      0x0078, 0x33fe, 0x783b, 0x1300, 0x781b, 0x004a, 0x2001, 0x0000,
-+      0x0078, 0x33fe, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x704a, 0x68a0,
-+      0xd0ec, 0x0040, 0x3406, 0x6008, 0xc08d, 0x600a, 0xa284, 0x000f,
-+      0x0079, 0x340a, 0x3562, 0x3417, 0x3414, 0x36c8, 0x3754, 0x29c5,
-+      0x3412, 0x3412, 0x1078, 0x296b, 0x6008, 0xc0d4, 0x600a, 0xd6e4,
-+      0x0040, 0x341f, 0x7048, 0xa086, 0x0014, 0x00c0, 0x343f, 0x1078,
-+      0x4586, 0x2009, 0x0000, 0x6818, 0xd0fc, 0x0040, 0x3428, 0x7048,
-+      0xa086, 0x0014, 0x0040, 0x3439, 0x6818, 0xa086, 0x0008, 0x00c0,
-+      0x351a, 0x7858, 0xd09c, 0x0040, 0x351a, 0x6820, 0xd0ac, 0x0040,
-+      0x351a, 0x681b, 0x0014, 0x2009, 0x0002, 0x0078, 0x347e, 0x7868,
-+      0xa08c, 0x00ff, 0x0040, 0x347e, 0xa186, 0x0008, 0x00c0, 0x3455,
-+      0x6008, 0xc0a4, 0x600a, 0x1078, 0x3d6f, 0x0040, 0x347e, 0x1078,
-+      0x3ded, 0x1078, 0x4586, 0x0078, 0x3466, 0xa186, 0x0028, 0x00c0,
-+      0x347e, 0x6018, 0xa005, 0x0040, 0x3448, 0x8001, 0x0040, 0x3448,
-+      0x8001, 0x0040, 0x3448, 0x601e, 0x0078, 0x3448, 0x6820, 0xd084,
-+      0x0040, 0x29c5, 0xc084, 0x6822, 0x1078, 0x2acc, 0x705c, 0x0c7e,
-+      0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00,
-+      0x00c0, 0x347b, 0x6002, 0x6006, 0x0078, 0x29c5, 0x017e, 0x81ff,
-+      0x00c0, 0x34c8, 0x7000, 0xa086, 0x0030, 0x0040, 0x34c8, 0x71d4,
-+      0xd1bc, 0x00c0, 0x34c8, 0xd1b4, 0x00c0, 0x34af, 0x7060, 0xa005,
-+      0x00c0, 0x34c8, 0x70a4, 0xa086, 0x0001, 0x0040, 0x34c8, 0x7003,
-+      0x0000, 0x047e, 0x057e, 0x077e, 0x067e, 0x0c7e, 0x0d7e, 0x1078,
-+      0x29ee, 0x0d7f, 0x0c7f, 0x067f, 0x077f, 0x057f, 0x047f, 0x71d4,
-+      0xd1b4, 0x00c0, 0x34c8, 0x7003, 0x0040, 0x0078, 0x34c8, 0x1078,
-+      0x4360, 0x00c0, 0x34c8, 0x781b, 0x005b, 0x0d7e, 0x70bc, 0xa06d,
-+      0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da,
-+      0xc1b4, 0x71d6, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a, 0x0d7f,
-+      0x1078, 0x35ff, 0x017f, 0x81ff, 0x0040, 0x351a, 0xa684, 0xdf00,
-+      0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x00c0, 0x351b,
-+      0x6818, 0xa086, 0x0014, 0x00c0, 0x34e4, 0x2008, 0xd6e4, 0x0040,
-+      0x34e4, 0x7868, 0xa08c, 0x00ff, 0x1078, 0x2aba, 0x1078, 0x2adb,
-+      0x6820, 0xd0dc, 0x00c0, 0x351b, 0x8717, 0xa294, 0x000f, 0x8213,
-+      0x8213, 0x8213, 0xb284, 0x0300, 0x0040, 0x34fa, 0xa290, 0x52c0,
-+      0x0078, 0x34fc, 0xa290, 0x5340, 0xa290, 0x0000, 0x221c, 0xd3c4,
-+      0x00c0, 0x3504, 0x0078, 0x350a, 0x8210, 0x2204, 0xa085, 0x0018,
-+      0x2012, 0x8211, 0xd3d4, 0x0040, 0x3515, 0x68a0, 0xd0c4, 0x00c0,
-+      0x3515, 0x1078, 0x3679, 0x0078, 0x29c5, 0x6008, 0xc08d, 0x600a,
-+      0x0078, 0x351b, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x3522,
-+      0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff, 0x0040,
-+      0x3537, 0x2009, 0x4e02, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412,
-+      0x00c0, 0x3537, 0x2021, 0x4e04, 0x2404, 0xc0a5, 0x2022, 0x6018,
-+      0xa005, 0x0040, 0x353f, 0x8001, 0x601a, 0x00c0, 0x3542, 0x6008,
-+      0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, 0x354e, 0x6800, 0xa005,
-+      0x00c0, 0x354b, 0x6002, 0x6006, 0x0078, 0x3552, 0x705c, 0x2060,
-+      0x6800, 0x6002, 0x2061, 0x4e00, 0x6887, 0x0103, 0x2d08, 0x206b,
-+      0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x3561, 0x2d02, 0x0078,
-+      0x3562, 0x616e, 0x7200, 0xa286, 0x0030, 0x0040, 0x3572, 0xa286,
-+      0x0040, 0x00c0, 0x29c5, 0x7003, 0x0002, 0x704c, 0x2068, 0x68c4,
-+      0x2060, 0x007c, 0x7003, 0x0002, 0x70bc, 0xa06d, 0x68bc, 0x7042,
-+      0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, 0x704e, 0xad80, 0x0009,
-+      0x7046, 0x007c, 0xa282, 0x0004, 0x0048, 0x3588, 0x1078, 0x296b,
-+      0x2200, 0x0079, 0x358b, 0x358f, 0x35a0, 0x35ad, 0x35a0, 0xa586,
-+      0x1300, 0x0040, 0x35a0, 0xa586, 0x8300, 0x00c0, 0x3586, 0x7003,
-+      0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a,
-+      0x7000, 0xa086, 0x0005, 0x0040, 0x35aa, 0x1078, 0x40c8, 0x781b,
-+      0x0078, 0x007c, 0x781b, 0x0079, 0x007c, 0x7890, 0x8007, 0x8001,
-+      0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+      0xa186, 0x0003, 0x0040, 0x35c2, 0xa186, 0x0000, 0x0040, 0x35c2,
-+      0x0078, 0x40b7, 0x781b, 0x0079, 0x007c, 0x6820, 0xc095, 0x6822,
-+      0x82ff, 0x00c0, 0x35cf, 0x1078, 0x40c8, 0x0078, 0x35d6, 0x8211,
-+      0x0040, 0x35d4, 0x1078, 0x296b, 0x1078, 0x40db, 0x781b, 0x0078,
-+      0x007c, 0x1078, 0x4383, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x35fc,
-+      0x017e, 0x3208, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f,
-+      0x0040, 0x35ee, 0xa18c, 0x0300, 0x0078, 0x35f0, 0xa18c, 0x0400,
-+      0x017f, 0x0040, 0x35f7, 0x0018, 0x35fc, 0x0078, 0x35f9, 0x0028,
-+      0x35fc, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684,
-+      0x0060, 0x00c0, 0x3609, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+      0x3678, 0xd6dc, 0x00c0, 0x3621, 0x68b4, 0xd0dc, 0x00c0, 0x3621,
-+      0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, 0xa005, 0x00c0, 0x361e,
-+      0x2200, 0xa105, 0x0040, 0x4586, 0x704b, 0x0015, 0x0078, 0x4586,
-+      0x007c, 0xd6ac, 0x0040, 0x3647, 0xd6f4, 0x0040, 0x362d, 0x682f,
-+      0x0000, 0x6833, 0x0000, 0x0078, 0x4586, 0x68b4, 0xa084, 0x4000,
-+      0xa635, 0xd6f4, 0x00c0, 0x3627, 0x7048, 0xa005, 0x00c0, 0x363a,
-+      0x704b, 0x0015, 0xd6dc, 0x00c0, 0x3643, 0x68b4, 0xd0dc, 0x0040,
-+      0x3643, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, 0x0078, 0x4586, 0xd6f4,
-+      0x0040, 0x3650, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x4586,
-+      0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x00c0, 0x364a, 0x7048,
-+      0xa005, 0x00c0, 0x365d, 0x704b, 0x0015, 0x2408, 0x2510, 0x2700,
-+      0x80fb, 0x00c8, 0x3664, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291,
-+      0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x3671, 0x0078,
-+      0x4586, 0x7000, 0xa086, 0x0006, 0x0040, 0x3678, 0x0078, 0x4586,
-+      0x007c, 0x6946, 0x6008, 0xc0cd, 0xd3cc, 0x0040, 0x3680, 0xc08d,
-+      0x600a, 0x6818, 0x683a, 0x681b, 0x0006, 0x688f, 0x0000, 0x6893,
-+      0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833,
-+      0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x7000,
-+      0x0079, 0x369a, 0x29c5, 0x36ac, 0x36a4, 0x36a2, 0x36a2, 0x36a2,
-+      0x36a2, 0x36a2, 0x1078, 0x296b, 0x6820, 0xd084, 0x00c0, 0x36ac,
-+      0x1078, 0x3dd0, 0x0078, 0x36b2, 0x705c, 0x2c50, 0x2060, 0x6800,
-+      0x6002, 0x2a60, 0x3208, 0xa18c, 0x0300, 0x0040, 0x36bb, 0x2021,
-+      0x4e58, 0x0078, 0x36bd, 0x2021, 0x4e98, 0x2404, 0xa005, 0x0040,
-+      0x36c4, 0x2020, 0x0078, 0x36bd, 0x2d22, 0x206b, 0x0000, 0x007c,
-+      0x1078, 0x3dd7, 0x1078, 0x3ded, 0x6008, 0xc0cc, 0x600a, 0x682b,
-+      0x0000, 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, 0x6944, 0x6916,
-+      0x3208, 0xa18c, 0x0300, 0x0040, 0x36e1, 0x2009, 0x0000, 0x0078,
-+      0x36e3, 0x2009, 0x0001, 0x1078, 0x49f8, 0xd6dc, 0x0040, 0x36eb,
-+      0x691c, 0xc1ed, 0x691e, 0x6818, 0xd0fc, 0x0040, 0x36fa, 0x7868,
-+      0xa08c, 0x00ff, 0x0040, 0x36f8, 0x681b, 0x001e, 0x0078, 0x36fa,
-+      0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, 0x3702, 0x2021, 0x4e98,
-+      0x0078, 0x3704, 0x2021, 0x4e58, 0x6800, 0x2022, 0x6a3c, 0x6940,
-+      0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, 0xd0a4, 0x0040, 0x3744,
-+      0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x0d7e, 0x0f7e,
-+      0x157e, 0x147e, 0x2079, 0x4e00, 0x1078, 0x1dff, 0x147f, 0x157f,
-+      0x0f7f, 0x70cc, 0x2010, 0x2009, 0x0101, 0x027e, 0x2204, 0xa06d,
-+      0x0040, 0x3734, 0x6814, 0xa706, 0x0040, 0x3731, 0x6800, 0x0078,
-+      0x3727, 0x6820, 0xc0d5, 0x6822, 0x027f, 0x8210, 0x8109, 0x00c0,
-+      0x3725, 0x0d7f, 0x7067, 0x0003, 0x707f, 0x0000, 0x7776, 0x7083,
-+      0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x6818, 0xa086, 0x0002, 0x00c0,
-+      0x3750, 0x6817, 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, 0x681e,
-+      0x1078, 0x202c, 0x0078, 0x29c5, 0x7cd8, 0x7ddc, 0x7fd0, 0x1078,
-+      0x35ff, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, 0x4387,
-+      0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x3769, 0x7048,
-+      0x681a, 0xa68c, 0xdf00, 0x691e, 0x7067, 0x0000, 0x0078, 0x29c5,
-+      0x7000, 0xa005, 0x00c0, 0x3776, 0x0078, 0x29c5, 0xa006, 0x1078,
-+      0x4586, 0x6920, 0xd1ac, 0x00c0, 0x377f, 0x681b, 0x0014, 0xa68c,
-+      0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0x6822,
-+      0x7000, 0x0079, 0x378b, 0x29c5, 0x3795, 0x3795, 0x3798, 0x3798,
-+      0x3798, 0x3793, 0x3793, 0x1078, 0x296b, 0x6818, 0x0078, 0x33fa,
-+      0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0078, 0x3d95, 0x2300,
-+      0x0079, 0x37a2, 0x37a5, 0x37a7, 0x3817, 0x1078, 0x296b, 0xd6fc,
-+      0x00c0, 0x37fe, 0x7000, 0xa00d, 0x0079, 0x37ae, 0x29c5, 0x37b8,
-+      0x37b8, 0x37e8, 0x37b8, 0x37fb, 0x37b6, 0x37b6, 0x1078, 0x296b,
-+      0xa684, 0x0060, 0x0040, 0x37e8, 0xa086, 0x0060, 0x00c0, 0x37e5,
-+      0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac, 0x681e,
-+      0xa186, 0x0002, 0x0040, 0x37d7, 0x1078, 0x4586, 0x69ac, 0x68b0,
-+      0xa115, 0x0040, 0x37d7, 0x1078, 0x48f5, 0x0078, 0x37d9, 0x1078,
-+      0x48bd, 0x781b, 0x0079, 0x71d4, 0xd1b4, 0x00c0, 0x29c1, 0x70a4,
-+      0xa086, 0x0001, 0x00c0, 0x2a0b, 0x007c, 0xd6ec, 0x0040, 0x37c2,
-+      0x6818, 0xd0fc, 0x0040, 0x37fb, 0xd6f4, 0x00c0, 0x37f5, 0x681b,
-+      0x0015, 0x781b, 0x0079, 0x0078, 0x29c1, 0x681b, 0x0007, 0x682f,
-+      0x0000, 0x6833, 0x0000, 0x1078, 0x4319, 0x007c, 0xc6fc, 0x7e5a,
-+      0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8, 0x3807, 0x8000, 0xa084,
-+      0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+      0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0079, 0x007c, 0x1078,
-+      0x296b, 0x2300, 0x0079, 0x381c, 0x3821, 0x3846, 0x38a6, 0x1078,
-+      0x296b, 0x7000, 0x0079, 0x3824, 0x382c, 0x382e, 0x3837, 0x382c,
-+      0x382c, 0x382c, 0x382c, 0x382c, 0x1078, 0x296b, 0x69ac, 0x68b0,
-+      0xa115, 0x0040, 0x3837, 0x1078, 0x48f5, 0x0078, 0x3839, 0x1078,
-+      0x48bd, 0x681c, 0xc0b4, 0x681e, 0x70d4, 0xd0b4, 0x00c0, 0x29c1,
-+      0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a0b, 0x007c, 0xd6fc, 0x00c0,
-+      0x3896, 0x7000, 0xa00d, 0x0079, 0x384d, 0x29c5, 0x385d, 0x3857,
-+      0x388d, 0x385d, 0x3893, 0x3855, 0x3855, 0x1078, 0x296b, 0x6894,
-+      0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0x0040,
-+      0x388d, 0xa086, 0x0060, 0x00c0, 0x388a, 0xa6b4, 0xbfbf, 0xc6ed,
-+      0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0040, 0x3879, 0x1078, 0x4586,
-+      0x69ac, 0x68b0, 0xa115, 0x0040, 0x3879, 0x1078, 0x48f5, 0x0078,
-+      0x387b, 0x1078, 0x48bd, 0x781b, 0x0079, 0x681c, 0xc0b4, 0x681e,
-+      0x71d4, 0xd1b4, 0x00c0, 0x29c1, 0x70a4, 0xa086, 0x0001, 0x00c0,
-+      0x2a0b, 0x007c, 0xd6ec, 0x0040, 0x3867, 0x6818, 0xd0fc, 0x0040,
-+      0x3893, 0x681b, 0x0007, 0x781b, 0x00f9, 0x007c, 0xc6fc, 0x7e5a,
-+      0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+      0xa303, 0x68ae, 0x79d2, 0x781b, 0x0079, 0x007c, 0xd6dc, 0x0040,
-+      0x38af, 0x782b, 0x3009, 0x781b, 0x0079, 0x0078, 0x29c1, 0x7884,
-+      0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, 0x00c0, 0x38c2, 0xa484,
-+      0x0200, 0x0040, 0x38bc, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0079,
-+      0x0078, 0x29c1, 0x6820, 0xc095, 0x6822, 0x1078, 0x4292, 0xc6dd,
-+      0x1078, 0x40c8, 0x781b, 0x0078, 0x0078, 0x29c1, 0x2300, 0x0079,
-+      0x38d1, 0x38d4, 0x38d6, 0x38d8, 0x1078, 0x296b, 0x0078, 0x40c1,
-+      0xd6d4, 0x00c0, 0x3913, 0x79e4, 0xd1ac, 0x0040, 0x38e6, 0x78ec,
-+      0xa084, 0x0003, 0x0040, 0x38e6, 0x782b, 0x3009, 0x789b, 0x0060,
-+      0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xd1ac, 0x0040,
-+      0x38f6, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x390f, 0x2001, 0x4e04,
-+      0x2004, 0xd0e4, 0x00c0, 0x390b, 0x6820, 0xd0c4, 0x0040, 0x390b,
-+      0x0c7e, 0x7058, 0x2060, 0x6004, 0xc09d, 0x6006, 0x6008, 0xa084,
-+      0x00ff, 0x600a, 0x0c7f, 0x2001, 0x0014, 0x0078, 0x33fa, 0xa184,
-+      0x0007, 0x0079, 0x3949, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060,
-+      0x79a8, 0x81ff, 0x0040, 0x3947, 0x789b, 0x0010, 0x7ba8, 0xa384,
-+      0x0001, 0x00c0, 0x393a, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0,
-+      0x392d, 0x2009, 0xfff7, 0x0078, 0x3933, 0xa386, 0x0003, 0x00c0,
-+      0x393a, 0x2009, 0xffef, 0x0c7e, 0x7058, 0x2060, 0x6004, 0xa104,
-+      0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb,
-+      0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078,
-+      0x430d, 0x3090, 0x309a, 0x3953, 0x3959, 0x3951, 0x3951, 0x430d,
-+      0x430d, 0x1078, 0x296b, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078,
-+      0x4313, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x430d, 0x79e4,
-+      0xa184, 0x0030, 0x0040, 0x3969, 0x78ec, 0xa084, 0x0003, 0x00c0,
-+      0x399d, 0x7000, 0xa086, 0x0004, 0x00c0, 0x3983, 0x7064, 0xa086,
-+      0x0002, 0x00c0, 0x3979, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078,
-+      0x2f1c, 0x7064, 0xa086, 0x0006, 0x0040, 0x3973, 0x7064, 0xa086,
-+      0x0004, 0x0040, 0x3973, 0x7000, 0xa086, 0x0000, 0x0040, 0x29c1,
-+      0x6920, 0xa184, 0x0420, 0x0040, 0x3992, 0xc1d4, 0x6922, 0x6818,
-+      0x0078, 0x33fa, 0x6818, 0xa08e, 0x0002, 0x0040, 0x399b, 0xc0fd,
-+      0x681a, 0x2001, 0x0014, 0x0078, 0x33fa, 0xa184, 0x0007, 0x0079,
-+      0x39a1, 0x430d, 0x430d, 0x39a9, 0x430d, 0x4355, 0x4355, 0x430d,
-+      0x430d, 0xd6bc, 0x0040, 0x39eb, 0x7184, 0x81ff, 0x0040, 0x39eb,
-+      0xa182, 0x000d, 0x00d0, 0x39b8, 0x7087, 0x0000, 0x0078, 0x39bd,
-+      0xa182, 0x000c, 0x7086, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa,
-+      0x157e, 0x137e, 0x147e, 0x7088, 0x8114, 0xa210, 0x728a, 0xa080,
-+      0x000b, 0xad00, 0x2098, 0xb284, 0x0300, 0x0040, 0x39df, 0x007e,
-+      0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x39db, 0x20a1,
-+      0x012b, 0x0078, 0x39e1, 0x20a1, 0x022b, 0x0078, 0x39e1, 0x20a1,
-+      0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f,
-+      0x157f, 0x0078, 0x4313, 0xd6d4, 0x00c0, 0x3a3f, 0x6820, 0xd084,
-+      0x0040, 0x4313, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x39fd,
-+      0xa086, 0x0060, 0x00c0, 0x39fd, 0xc1f5, 0xc194, 0x795a, 0x69b6,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd,
-+      0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3e06, 0xa18c, 0x00f8,
-+      0x00c0, 0x3e06, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208, 0xa18c,
-+      0x0300, 0x0040, 0x3a2b, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x3a27, 0x20a1, 0x012b, 0x0078, 0x3a2d, 0x20a1,
-+      0x022b, 0x0078, 0x3a2d, 0x20a1, 0x012b, 0x017f, 0x789b, 0x0000,
-+      0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f,
-+      0x157f, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0078, 0x4313, 0x6818,
-+      0xd0fc, 0x0040, 0x3a45, 0x681b, 0x0008, 0x6820, 0xc0ad, 0x6822,
-+      0x1078, 0x40d0, 0x781b, 0x00ea, 0x007c, 0x2300, 0x0079, 0x3a50,
-+      0x3a55, 0x3b2d, 0x3a53, 0x1078, 0x296b, 0x7cd8, 0x7ddc, 0x7fd0,
-+      0x82ff, 0x00c0, 0x3a7e, 0x7200, 0xa286, 0x0003, 0x0040, 0x33c7,
-+      0x71d4, 0xd1bc, 0x00c0, 0x3a81, 0xd1b4, 0x0040, 0x3a81, 0x0d7e,
-+      0x783b, 0x8800, 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4, 0xc0a5,
-+      0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4,
-+      0x71d6, 0x7003, 0x0030, 0x0d7f, 0x0078, 0x3a85, 0x7200, 0x0078,
-+      0x3a85, 0x783b, 0x1800, 0x781b, 0x004a, 0xa284, 0x000f, 0x0079,
-+      0x3a89, 0x3b18, 0x3ac7, 0x3a93, 0x33f6, 0x3a91, 0x3b18, 0x3a91,
-+      0x3a91, 0x1078, 0x296b, 0x681c, 0xd0ec, 0x0040, 0x3a9a, 0x6008,
-+      0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005,
-+      0x00c0, 0x3aa3, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084,
-+      0x000e, 0x00c0, 0x3ab7, 0xb284, 0x0300, 0x0040, 0x3ab3, 0x2009,
-+      0x94c0, 0x0078, 0x3abc, 0x2009, 0x95d0, 0x0078, 0x3abc, 0x7030,
-+      0x68ba, 0x7140, 0x70cc, 0xa108, 0x2104, 0x6802, 0x2d0a, 0x715e,
-+      0xd6dc, 0x00c0, 0x3ac7, 0xc6fc, 0x6eb6, 0x0078, 0x3b18, 0x6eb6,
-+      0xa684, 0x0060, 0x00c0, 0x3ad1, 0xa684, 0x7fff, 0x68b6, 0x0078,
-+      0x3b18, 0xd6dc, 0x00c0, 0x3adf, 0xa684, 0x7fff, 0x68b6, 0x6894,
-+      0x68a6, 0x6898, 0x68aa, 0x1078, 0x4586, 0x0078, 0x3b18, 0xd6ac,
-+      0x0040, 0x3aeb, 0xa006, 0x1078, 0x4586, 0x2408, 0x2510, 0x69aa,
-+      0x6aa6, 0x0078, 0x3afb, 0x2408, 0x2510, 0x2700, 0x801b, 0x00c8,
-+      0x3af2, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x69aa,
-+      0x6aa6, 0x1078, 0x4586, 0xd6fc, 0x0040, 0x3b18, 0xa684, 0x7fff,
-+      0x68b6, 0x2510, 0x2408, 0xd6ac, 0x00c0, 0x3b10, 0x2700, 0x801b,
-+      0x00c8, 0x3b0b, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+      0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae,
-+      0x7000, 0xa086, 0x0030, 0x00c0, 0x29c5, 0x7003, 0x0002, 0x70bc,
-+      0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00,
-+      0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa586, 0x8800, 0x00c0,
-+      0x3b3a, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084,
-+      0xfbef, 0x600a, 0x0078, 0x40c1, 0x7047, 0x0000, 0xa282, 0x0006,
-+      0x0050, 0x3b44, 0x1078, 0x296b, 0x2300, 0x0079, 0x3b47, 0x3b4a,
-+      0x3b5c, 0x3b68, 0x2200, 0x0079, 0x3b4d, 0x3b53, 0x40c1, 0x3b55,
-+      0x3b53, 0x3ba2, 0x3bf7, 0x1078, 0x296b, 0x7a80, 0xa294, 0x0f00,
-+      0x1078, 0x3c81, 0x0078, 0x40b7, 0x1078, 0x3b79, 0x0079, 0x3b60,
-+      0x40c1, 0x3b66, 0x3b66, 0x3ba2, 0x3b66, 0x40c1, 0x1078, 0x296b,
-+      0x1078, 0x3b79, 0x0079, 0x3b6c, 0x3b74, 0x3b72, 0x3b72, 0x3b74,
-+      0x3b72, 0x3b74, 0x1078, 0x296b, 0x1078, 0x40db, 0x781b, 0x0078,
-+      0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3b8a, 0x1078, 0x3ded,
-+      0x0078, 0x3b84, 0x1078, 0x4586, 0x6008, 0xa084, 0xfbef, 0x600a,
-+      0x0078, 0x3b8f, 0x7000, 0xa086, 0x0003, 0x0040, 0x3b82, 0x7003,
-+      0x0005, 0xb284, 0x0300, 0x0040, 0x3b99, 0x2001, 0x95e0, 0x0078,
-+      0x3b9b, 0x2001, 0x9612, 0x2068, 0x704e, 0xad80, 0x0009, 0x7046,
-+      0x2200, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3bb4, 0x70d4,
-+      0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3bb9,
-+      0x1078, 0x4586, 0x0078, 0x3bb9, 0x7000, 0xa086, 0x0003, 0x0040,
-+      0x3bb0, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+      0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x94c0, 0xb284, 0x0300,
-+      0x00c0, 0x3bcd, 0xc2fd, 0x2069, 0x95d0, 0x2d04, 0x2d08, 0x715e,
-+      0xa06d, 0x0040, 0x3bda, 0x6814, 0xa206, 0x0040, 0x3bdc, 0x6800,
-+      0x0078, 0x3bce, 0x1078, 0x3c81, 0x6eb4, 0x7e5a, 0x6920, 0xa184,
-+      0x0c00, 0x0040, 0x3cab, 0x7064, 0xa086, 0x0006, 0x00c0, 0x3bee,
-+      0x7074, 0xa206, 0x00c0, 0x3bee, 0x7066, 0x707e, 0x681b, 0x0005,
-+      0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x40d0, 0x0078, 0x3cab, 0x7200,
-+      0xa286, 0x0002, 0x00c0, 0x3c09, 0x70d4, 0xc0b5, 0x70d6, 0x2c00,
-+      0x70ba, 0x2d00, 0x70be, 0x0078, 0x3c0d, 0x1078, 0x4586, 0x0078,
-+      0x3c0d, 0xa286, 0x0003, 0x0040, 0x3c05, 0x7003, 0x0001, 0x7a80,
-+      0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215,
-+      0xb284, 0x0300, 0x00c0, 0x3c1d, 0xc2fd, 0x79a8, 0x79a8, 0xa18c,
-+      0x00ff, 0x2118, 0x70cc, 0xa168, 0x2d04, 0x2d08, 0x715e, 0xa06d,
-+      0x0040, 0x3c31, 0x6814, 0xa206, 0x0040, 0x3c5a, 0x6800, 0x0078,
-+      0x3c25, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3c3b, 0x2001,
-+      0x95e0, 0x0078, 0x3c3d, 0x2001, 0x9612, 0x2068, 0x704e, 0x157e,
-+      0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3c42, 0x157f,
-+      0xb284, 0x0300, 0x0040, 0x3c4f, 0xc2fc, 0x0078, 0x3c50, 0xc2fd,
-+      0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, 0x0800,
-+      0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x0040, 0x3cab,
-+      0xd0dc, 0x0040, 0x3c76, 0x7064, 0xa086, 0x0004, 0x00c0, 0x3c72,
-+      0x7074, 0xa206, 0x00c0, 0x3c72, 0x7078, 0xa306, 0x00c0, 0x3c72,
-+      0x7066, 0x707e, 0x1078, 0x40d7, 0x0078, 0x3cab, 0x681b, 0x0005,
-+      0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x40d0, 0x707f, 0x0000, 0x0078,
-+      0x3cab, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3c8b, 0x2001,
-+      0x95e0, 0x0078, 0x3c8d, 0x2001, 0x9612, 0x2068, 0x704e, 0x157e,
-+      0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3c92, 0x157f,
-+      0xb284, 0x0300, 0x0040, 0x3c9f, 0xc2fc, 0x0078, 0x3ca0, 0xc2fd,
-+      0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, 0x0800,
-+      0x6827, 0x0003, 0x007c, 0xc6ec, 0xa6ac, 0x0060, 0x0040, 0x3cfd,
-+      0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3cd8, 0x7bd2,
-+      0x7bda, 0x7cd6, 0x7cde, 0xa586, 0x0060, 0x0040, 0x3d02, 0xd6f4,
-+      0x00c0, 0x3cc3, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0079,
-+      0xd69c, 0x0040, 0x3cd0, 0x2009, 0x0078, 0x2019, 0x0000, 0x2320,
-+      0x791a, 0xd6ec, 0x0040, 0x3d0d, 0x1078, 0x48bd, 0x0078, 0x3d0d,
-+      0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, 0x3d04,
-+      0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x00c0, 0x3ce9,
-+      0xc6ed, 0xc6f4, 0x7e5a, 0x2011, 0x0079, 0xd69c, 0x0040, 0x3cf5,
-+      0x2011, 0x0078, 0x2019, 0x0000, 0x2320, 0x7a1a, 0xd6ec, 0x0040,
-+      0x3d0d, 0x1078, 0x48f5, 0x0078, 0x3d0d, 0x2019, 0x0000, 0x2320,
-+      0x0078, 0x3d04, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0079, 0xd69c,
-+      0x0040, 0x3d0c, 0x2009, 0x0078, 0x791a, 0x68c0, 0x705a, 0x2d00,
-+      0x704e, 0x68c4, 0x2060, 0x71d4, 0x2001, 0x4e01, 0x2004, 0xd0c4,
-+      0x00c0, 0x3d62, 0x70d8, 0xa02d, 0x0040, 0x3d3b, 0xd1bc, 0x0040,
-+      0x3d55, 0x7a80, 0xa294, 0x0f00, 0x70dc, 0xa206, 0x0040, 0x3d2c,
-+      0x78e0, 0xa504, 0x00c0, 0x3d62, 0x70da, 0xc1bc, 0x71d6, 0x0078,
-+      0x3d62, 0x2031, 0x0001, 0x852c, 0x0048, 0x3d3a, 0x8633, 0x8210,
-+      0x0078, 0x3d33, 0x007c, 0x7de0, 0xa594, 0xff00, 0x0040, 0x3d48,
-+      0x2011, 0x0008, 0x852f, 0x1078, 0x3d31, 0x8637, 0x0078, 0x3d4a,
-+      0x1078, 0x3d31, 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206, 0x0040,
-+      0x3d62, 0x72de, 0x76da, 0x0078, 0x3d62, 0x7a80, 0xa294, 0x0f00,
-+      0x70dc, 0xa236, 0x0040, 0x3d52, 0x78e0, 0xa534, 0x0040, 0x3d52,
-+      0xc1bd, 0x71d6, 0xd1b4, 0x00c0, 0x29c1, 0x2300, 0xa405, 0x0040,
-+      0x29c1, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x2a0b, 0x007c, 0x6020,
-+      0xa005, 0x0040, 0x3d7d, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008,
-+      0x600a, 0x700f, 0x0100, 0x702c, 0x6026, 0x007c, 0xa006, 0x1078,
-+      0x4586, 0x7000, 0xa086, 0x0002, 0x0040, 0x3d8b, 0x7064, 0xa086,
-+      0x0005, 0x00c0, 0x3d95, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b,
-+      0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f,
-+      0x0079, 0x3d9a, 0x29c5, 0x3daa, 0x3da4, 0x3dcc, 0x3db4, 0x29c5,
-+      0x3da2, 0x3da2, 0x1078, 0x296b, 0x1078, 0x3dd7, 0x1078, 0x3dd0,
-+      0x0078, 0x3db0, 0x1078, 0x3dd7, 0x705c, 0x2060, 0x6800, 0x6002,
-+      0x1078, 0x202c, 0x0078, 0x29c5, 0x7064, 0x7067, 0x0000, 0x7083,
-+      0x0000, 0x0079, 0x3dbb, 0x3dc8, 0x3dc8, 0x3dc3, 0x3dc3, 0x3dc3,
-+      0x3dc8, 0x3dc3, 0x3dc8, 0x77d4, 0xc7dd, 0x77d6, 0x0079, 0x2f35,
-+      0x7067, 0x0000, 0x0078, 0x29c5, 0x681b, 0x0000, 0x0078, 0x36c8,
-+      0x6800, 0xa005, 0x00c0, 0x3dd5, 0x6002, 0x6006, 0x007c, 0x6410,
-+      0x84ff, 0x0040, 0x3de9, 0x2009, 0x4e02, 0x2104, 0x8001, 0x200a,
-+      0x8421, 0x6412, 0x00c0, 0x3de9, 0x2021, 0x4e04, 0x2404, 0xc0a5,
-+      0x2022, 0x6008, 0xc0a4, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040,
-+      0x3df3, 0x8001, 0x601a, 0x007c, 0x1078, 0x4383, 0x681b, 0x0018,
-+      0x0078, 0x3e34, 0x1078, 0x4383, 0x681b, 0x0019, 0x0078, 0x3e34,
-+      0x1078, 0x4383, 0x681b, 0x001a, 0x0078, 0x3e34, 0x1078, 0x4383,
-+      0x681b, 0x0003, 0x0078, 0x3e34, 0x7774, 0x1078, 0x41fe, 0x7178,
-+      0xa18c, 0x00ff, 0x3210, 0xa294, 0x0300, 0x0040, 0x3e1b, 0xa1e8,
-+      0x93c0, 0x0078, 0x3e1d, 0xa1e8, 0x94d0, 0x2d04, 0x2d08, 0x2068,
-+      0xa005, 0x00c0, 0x3e26, 0x707e, 0x0078, 0x29c5, 0x6814, 0x7274,
-+      0xa206, 0x0040, 0x3e2e, 0x6800, 0x0078, 0x3e1e, 0x6800, 0x200a,
-+      0x681b, 0x0005, 0x707f, 0x0000, 0x1078, 0x3dd7, 0x6820, 0xd084,
-+      0x00c0, 0x3e3c, 0x1078, 0x3dd0, 0x1078, 0x3ded, 0x681f, 0x0000,
-+      0x6823, 0x0020, 0x1078, 0x202c, 0x0078, 0x29c5, 0xa282, 0x0003,
-+      0x00c0, 0x40b7, 0x7da8, 0xa5ac, 0x00ff, 0x7e5a, 0x7ea8, 0xa6b4,
-+      0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040, 0x3ea1, 0xc1c4,
-+      0x6922, 0xa6b4, 0x00ff, 0x0040, 0x3e8e, 0xa682, 0x000c, 0x0048,
-+      0x3e65, 0x0040, 0x3e65, 0x2031, 0x000c, 0x2500, 0xa086, 0x000a,
-+      0x0040, 0x3e6c, 0x852b, 0x852b, 0x1078, 0x4190, 0x0040, 0x3e74,
-+      0x1078, 0x3f6f, 0x0078, 0x3e97, 0x1078, 0x414b, 0x0c7e, 0x2960,
-+      0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3fa5, 0x0c7f, 0x6920,
-+      0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3e8b,
-+      0x781b, 0x0064, 0x007c, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x2960,
-+      0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x3fa5, 0x0c7f, 0x7e58,
-+      0xd6d4, 0x00c0, 0x3e9e, 0x781b, 0x0067, 0x007c, 0x781b, 0x0079,
-+      0x007c, 0x0c7e, 0x7058, 0x2060, 0x6100, 0xd1e4, 0x0040, 0x3eea,
-+      0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x3eb4,
-+      0x0040, 0x3eb4, 0x2011, 0x000c, 0x2600, 0xa202, 0x00c8, 0x3eb9,
-+      0x2230, 0x6208, 0xa294, 0x00ff, 0x2001, 0x4e05, 0x2004, 0xd0e4,
-+      0x00c0, 0x3ece, 0x78ec, 0xd0e4, 0x0040, 0x3ece, 0xa282, 0x000a,
-+      0x00c8, 0x3ed4, 0x2011, 0x000a, 0x0078, 0x3ed4, 0xa282, 0x000c,
-+      0x00c8, 0x3ed4, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x3ed9,
-+      0x2228, 0x1078, 0x414f, 0x2500, 0xa086, 0x000a, 0x0040, 0x3ee2,
-+      0x852b, 0x852b, 0x1078, 0x4190, 0x0040, 0x3eea, 0x1078, 0x3f6f,
-+      0x0078, 0x3eee, 0x1078, 0x414b, 0x1078, 0x3fa5, 0x7858, 0xc095,
-+      0x785a, 0x0c7f, 0x781b, 0x0078, 0x007c, 0x0c7e, 0x2960, 0x6000,
-+      0xd0e4, 0x00c0, 0x3f0b, 0xa084, 0x0040, 0x00c0, 0x3f05, 0x6104,
-+      0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019,
-+      0x0000, 0x0078, 0x3f36, 0x68a0, 0xd0cc, 0x00c0, 0x3f05, 0x6208,
-+      0xa294, 0x00ff, 0x2001, 0x4e05, 0x2004, 0xd0e4, 0x00c0, 0x3f24,
-+      0x78ec, 0xd0e4, 0x0040, 0x3f24, 0xa282, 0x000b, 0x00c8, 0x3f24,
-+      0x2011, 0x000a, 0x0078, 0x3f2a, 0xa282, 0x000c, 0x00c8, 0x3f2a,
-+      0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c,
-+      0x0048, 0x3f36, 0x0040, 0x3f36, 0x2019, 0x000c, 0x78ab, 0x0001,
-+      0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005,
-+      0x6820, 0xc0c5, 0x6822, 0x70d4, 0xd0b4, 0x0040, 0x3f52, 0xc0b4,
-+      0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018,
-+      0x8001, 0x601a, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6104, 0xa18c,
-+      0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3f60,
-+      0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa,
-+      0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x0c7f, 0x007c, 0x0c7e,
-+      0x7158, 0x2160, 0x2018, 0xa08c, 0x0020, 0x0040, 0x3f78, 0xc0ac,
-+      0x2008, 0xa084, 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae,
-+      0x6612, 0x78a4, 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105, 0xc0f4,
-+      0xa39c, 0x0020, 0x0040, 0x3f8e, 0xa085, 0x4000, 0xc0fc, 0xd0b4,
-+      0x00c0, 0x3f93, 0xc0fd, 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x000f,
-+      0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, 0x600e, 0x6004,
-+      0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060,
-+      0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884,
-+      0xa084, 0xfff0, 0x7886, 0x600c, 0xa084, 0x00ff, 0x600e, 0x0c7f,
-+      0x007c, 0xa282, 0x0002, 0x00c0, 0x40b7, 0x7aa8, 0x6920, 0xc1bd,
-+      0x6922, 0xd1cc, 0x0040, 0x3ff4, 0xc1cc, 0x6922, 0xa294, 0x00ff,
-+      0xa282, 0x0002, 0x00c8, 0x40b7, 0x1078, 0x4044, 0x1078, 0x3fa5,
-+      0xa980, 0x0001, 0x200c, 0x1078, 0x41fa, 0x1078, 0x3ef5, 0x88ff,
-+      0x0040, 0x3fea, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695,
-+      0x7e5a, 0xd6d4, 0x00c0, 0x3fe7, 0x781b, 0x0064, 0x007c, 0x781b,
-+      0x0078, 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x3ff1, 0x781b, 0x0067,
-+      0x007c, 0x781b, 0x0079, 0x007c, 0xa282, 0x0002, 0x00c8, 0x3ffc,
-+      0xa284, 0x0001, 0x0040, 0x4005, 0x7158, 0xa188, 0x0000, 0x210c,
-+      0xd1ec, 0x00c0, 0x4005, 0x2011, 0x0000, 0x1078, 0x412c, 0x1078,
-+      0x4044, 0x1078, 0x3fa5, 0x7858, 0xc095, 0x785a, 0x781b, 0x0078,
-+      0x007c, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec,
-+      0x00c0, 0x4025, 0xa084, 0x0080, 0x00c0, 0x4023, 0xc1a4, 0x6106,
-+      0xa006, 0x0078, 0x4041, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab,
-+      0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x70d4, 0xd0b4,
-+      0x0040, 0x403d, 0xc0b4, 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084,
-+      0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x6820, 0xa085, 0x0200,
-+      0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x82ff,
-+      0x0040, 0x404c, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a,
-+      0x78a4, 0xa084, 0xffbf, 0xa205, 0xc0fc, 0xd0b4, 0x00c0, 0x4059,
-+      0xc0fd, 0x78a6, 0x6016, 0x788a, 0x6004, 0xc0a4, 0x6006, 0x0c7f,
-+      0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x406a, 0x007f,
-+      0x0078, 0x406d, 0x007f, 0x0078, 0x40b4, 0xd6ac, 0x0040, 0x40b4,
-+      0x7888, 0xa084, 0x0040, 0x0040, 0x40b4, 0x7bb8, 0xa384, 0x003f,
-+      0x831b, 0x00c8, 0x407c, 0x8000, 0xa005, 0x0040, 0x4091, 0x831b,
-+      0x00c8, 0x4085, 0x8001, 0x0040, 0x40b1, 0xd6f4, 0x0040, 0x4091,
-+      0x78b8, 0x801b, 0x00c8, 0x408d, 0x8000, 0xa084, 0x003f, 0x00c0,
-+      0x40b1, 0xc6f4, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108,
-+      0x00c8, 0x409c, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade,
-+      0x1078, 0x49c3, 0x781b, 0x0076, 0xb284, 0x0300, 0x0040, 0x40ac,
-+      0x2001, 0x0000, 0x0078, 0x40ae, 0x2001, 0x0001, 0x1078, 0x484b,
-+      0x007c, 0x781b, 0x0076, 0x007c, 0x781b, 0x0079, 0x007c, 0x1078,
-+      0x40df, 0x781b, 0x0078, 0x007c, 0x1078, 0x40c8, 0x781b, 0x0078,
-+      0x007c, 0x6827, 0x0002, 0x1078, 0x40d0, 0x781b, 0x0078, 0x007c,
-+      0x2001, 0x0005, 0x0078, 0x40e1, 0x2001, 0x000c, 0x0078, 0x40e1,
-+      0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0078, 0x40e1, 0x2001,
-+      0x000d, 0x0078, 0x40e1, 0x2001, 0x0009, 0x0078, 0x40e1, 0x2001,
-+      0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, 0x70d4, 0xd0b4,
-+      0x0040, 0x40f7, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008,
-+      0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c,
-+      0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0x017e,
-+      0xb28c, 0x0300, 0x0040, 0x4108, 0xa0e0, 0x52c0, 0x0078, 0x410a,
-+      0xa0e0, 0x5340, 0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184,
-+      0x000f, 0x0040, 0x411a, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004,
-+      0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040,
-+      0x0040, 0x412a, 0xa184, 0xffbf, 0xc0fd, 0x78a6, 0x6016, 0x6004,
-+      0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, 0x0001,
-+      0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab,
-+      0x0004, 0x70d4, 0xd0b4, 0x0040, 0x414a, 0xc0b4, 0x70d6, 0x0c7e,
-+      0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+      0x601a, 0x0c7f, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b,
-+      0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+      0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x70d4, 0xd0b4, 0x0040,
-+      0x416e, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084,
-+      0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x157e,
-+      0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a,
-+      0x79a4, 0xa18c, 0xfff0, 0x2021, 0x41e3, 0x2019, 0x0011, 0x20a9,
-+      0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040,
-+      0x418e, 0x8420, 0x2300, 0xa210, 0x00f0, 0x4183, 0x157f, 0x007c,
-+      0x157e, 0x2001, 0x4e05, 0x2004, 0xd0e4, 0x00c0, 0x41c1, 0x2021,
-+      0x41f1, 0x20a9, 0x0009, 0x2011, 0x0028, 0xa582, 0x0019, 0x0040,
-+      0x41d7, 0x0048, 0x41d7, 0x8420, 0x95a9, 0x2011, 0x0032, 0xa582,
-+      0x0032, 0x0040, 0x41d7, 0x0048, 0x41d7, 0x8420, 0x95a9, 0x2019,
-+      0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x41d7, 0x0048,
-+      0x41d7, 0x8420, 0x2300, 0xa210, 0x00f0, 0x41b3, 0x157f, 0x0078,
-+      0x41d5, 0x2021, 0x41e3, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011,
-+      0x0032, 0x2200, 0xa502, 0x0040, 0x41d7, 0x0048, 0x41d7, 0x8420,
-+      0x2300, 0xa210, 0x00f0, 0x41c9, 0x157f, 0xa006, 0x007c, 0x157f,
-+      0xa582, 0x0064, 0x00c8, 0x41e0, 0x7808, 0xa085, 0x0070, 0x780a,
-+      0x2404, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202, 0x4203, 0x4403,
-+      0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07,
-+      0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07,
-+      0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, 0x0f00,
-+      0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+      0xd7fc, 0x0040, 0x420f, 0xa0e0, 0x73c0, 0x0078, 0x4211, 0xa0e0,
-+      0x53c0, 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, 0x421f, 0x2079,
-+      0x0100, 0x2009, 0x4e80, 0x2071, 0x4e80, 0x0078, 0x422f, 0x2009,
-+      0x4e40, 0x2071, 0x4e40, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x0040,
-+      0x422d, 0x2079, 0x0100, 0x0078, 0x422f, 0x2079, 0x0200, 0x2091,
-+      0x8000, 0x2104, 0xa084, 0x000f, 0x0079, 0x4236, 0x4240, 0x4240,
-+      0x4240, 0x4240, 0x4240, 0x4240, 0x423e, 0x423e, 0x1078, 0x296b,
-+      0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0040, 0x428f,
-+      0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086,
-+      0x1814, 0x00c0, 0x428f, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004,
-+      0x00c0, 0x4255, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0,
-+      0x425c, 0x7830, 0xd0bc, 0x00c0, 0x428f, 0x007e, 0x2001, 0x4e04,
-+      0x2004, 0xd0ec, 0x007f, 0x0040, 0x4271, 0xb284, 0x0300, 0x0078,
-+      0x4273, 0xb284, 0x0400, 0x0040, 0x4279, 0x0018, 0x428f, 0x0078,
-+      0x427b, 0x0028, 0x428f, 0x79e4, 0xa184, 0x0030, 0x0040, 0x428f,
-+      0x78ec, 0xa084, 0x0003, 0x0040, 0x428f, 0x681c, 0xd0ac, 0x00c0,
-+      0x428d, 0x1078, 0x4319, 0x0078, 0x428f, 0x781b, 0x00f9, 0x0f7f,
-+      0x0e7f, 0x007c, 0x0c7e, 0x2001, 0x4e01, 0x2004, 0xd0ac, 0x00c0,
-+      0x430b, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xb28c, 0x0300, 0x0040, 0x42a8, 0xa0e0, 0x52c0, 0x0078, 0x42aa,
-+      0xa0e0, 0x5340, 0x6004, 0xa084, 0x000a, 0x00c0, 0x430b, 0x6108,
-+      0xa194, 0xff00, 0x0040, 0x430b, 0xa18c, 0x00ff, 0x2001, 0x000a,
-+      0xa106, 0x0040, 0x42d6, 0x2001, 0x000c, 0xa106, 0x0040, 0x42da,
-+      0x2001, 0x0012, 0xa106, 0x0040, 0x42de, 0x2001, 0x0014, 0xa106,
-+      0x0040, 0x42e2, 0x2001, 0x0019, 0xa106, 0x0040, 0x42e6, 0x2001,
-+      0x0032, 0xa106, 0x0040, 0x42ea, 0x0078, 0x42ee, 0x2009, 0x000c,
-+      0x0078, 0x42f0, 0x2009, 0x0012, 0x0078, 0x42f0, 0x2009, 0x0014,
-+      0x0078, 0x42f0, 0x2009, 0x0019, 0x0078, 0x42f0, 0x2009, 0x0020,
-+      0x0078, 0x42f0, 0x2009, 0x003f, 0x0078, 0x42f0, 0x2011, 0x0000,
-+      0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x2061,
-+      0x4e00, 0x6004, 0xd0bc, 0x0040, 0x430b, 0x6814, 0xd0fc, 0x00c0,
-+      0x4306, 0x60ea, 0x2061, 0x4e40, 0x0078, 0x4309, 0x60ee, 0x2061,
-+      0x4e80, 0x601f, 0x800f, 0x0c7f, 0x007c, 0x781b, 0x0079, 0x007c,
-+      0x781b, 0x0078, 0x007c, 0x781b, 0x0067, 0x007c, 0x781b, 0x0064,
-+      0x007c, 0x2009, 0x4e19, 0x210c, 0xa186, 0x0000, 0x0040, 0x432b,
-+      0xa186, 0x0001, 0x0040, 0x432e, 0x701f, 0x000b, 0x7067, 0x0001,
-+      0x781b, 0x0047, 0x007c, 0x781b, 0x00f0, 0x007c, 0x701f, 0x000a,
-+      0x007c, 0x2009, 0x4e19, 0x210c, 0xa186, 0x0000, 0x0040, 0x4346,
-+      0xa186, 0x0001, 0x0040, 0x4343, 0x701f, 0x000b, 0x7067, 0x0001,
-+      0x781b, 0x0047, 0x007c, 0x701f, 0x000a, 0x007c, 0x781b, 0x00ef,
-+      0x007c, 0x781b, 0x00f9, 0x007c, 0x781b, 0x00f8, 0x007c, 0x781b,
-+      0x00c9, 0x007c, 0x781b, 0x00c8, 0x007c, 0x6818, 0xd0fc, 0x0040,
-+      0x435b, 0x681b, 0x001d, 0x7067, 0x0001, 0x781b, 0x0047, 0x007c,
-+      0x7830, 0xa084, 0x00c0, 0x00c0, 0x4382, 0x7808, 0xc08c, 0x780a,
-+      0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x00c0,
-+      0x437f, 0x2001, 0x4e05, 0x2004, 0xd0e4, 0x00c0, 0x437d, 0x7804,
-+      0xa084, 0xff1f, 0xa085, 0x00e0, 0x7806, 0xa006, 0x007c, 0x7808,
-+      0xc08d, 0x780a, 0x007c, 0x7808, 0xc08d, 0x780a, 0x007c, 0x7830,
-+      0xa084, 0x0040, 0x00c0, 0x4387, 0x2001, 0x4e04, 0x2004, 0xd0ec,
-+      0x0040, 0x4396, 0xb284, 0x0300, 0x0078, 0x4398, 0xb284, 0x0400,
-+      0x0040, 0x439e, 0x0098, 0x43a2, 0x0078, 0x43a0, 0x00a8, 0x43a2,
-+      0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005,
-+      0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, 0x0040, 0x43c5, 0x007e,
-+      0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x43bb, 0xb284,
-+      0x0300, 0x0078, 0x43bd, 0xb284, 0x0400, 0x0040, 0x43c3, 0x0098,
-+      0x43bf, 0x0078, 0x43c5, 0x00a8, 0x43c3, 0x78ac, 0x007e, 0x7808,
-+      0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, 0x00c0,
-+      0x3770, 0xa784, 0x0070, 0x0040, 0x43dd, 0x0c7e, 0x2d60, 0x2f68,
-+      0x1078, 0x28df, 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040,
-+      0x43ea, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3770,
-+      0x0078, 0x430d, 0xa784, 0x0004, 0x0040, 0x4419, 0x78b8, 0xa084,
-+      0x4001, 0x0040, 0x4419, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x3770, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0,
-+      0x4419, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00f9,
-+      0x007c, 0x784b, 0x0008, 0x6818, 0xd0fc, 0x0040, 0x4416, 0x681b,
-+      0x0015, 0xd6f4, 0x0040, 0x4416, 0x681b, 0x0007, 0x1078, 0x4319,
-+      0x007c, 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f,
-+      0x0000, 0x6833, 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x3066, 0x007e, 0x2001, 0x4e04, 0x2004, 0xd0ec, 0x007f,
-+      0x0040, 0x4436, 0xb284, 0x0300, 0x0078, 0x4438, 0xb284, 0x0400,
-+      0x0040, 0x443e, 0x0018, 0x29c1, 0x0078, 0x4440, 0x0028, 0x29c1,
-+      0x0078, 0x40bc, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003,
-+      0x8003, 0xd3fc, 0x0040, 0x4450, 0xa080, 0x5340, 0x0078, 0x4452,
-+      0xa080, 0x52c0, 0x2060, 0x2048, 0x705a, 0x2a60, 0x007c, 0x0020,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9848, 0x0014, 0x0014,
-+      0x9914, 0x98fd, 0x0014, 0x0014, 0x0080, 0x00ff, 0x0100, 0x0402,
-+      0x2008, 0xf880, 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014,
-+      0x2500, 0x0013, 0x2500, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
-+      0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
-+      0x0010, 0xa200, 0x3806, 0x7102, 0x805f, 0x9481, 0x8839, 0x20c4,
-+      0x0864, 0xa856, 0x3008, 0x28c1, 0x9d1b, 0xa201, 0x300c, 0x2847,
-+      0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2,
-+      0x9ccb, 0xa8f3, 0x0864, 0xa844, 0x300c, 0xa801, 0x3008, 0x28e1,
-+      0x9ccb, 0x2021, 0xa81d, 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0,
-+      0x6fc0, 0x63a4, 0x6c80, 0x0212, 0xa205, 0x883d, 0x7942, 0x8020,
-+      0xa4a1, 0x882b, 0x1814, 0x883b, 0x80df, 0x94a1, 0x7027, 0x85f2,
-+      0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa816, 0x883e, 0xa814,
-+      0x2001, 0xa812, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x7942,
-+      0x8020, 0xa4a1, 0x1814, 0x80df, 0x94a1, 0x883b, 0x7023, 0x8576,
-+      0x8677, 0xa802, 0x7861, 0x883e, 0x206b, 0x28c1, 0x9d1b, 0x2044,
-+      0x2103, 0x20a2, 0x2081, 0xa8c3, 0xa207, 0x0904, 0xa20e, 0xa809,
-+      0xa203, 0x8000, 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601,
-+      0xa208, 0x856e, 0x866f, 0x7161, 0x0014, 0x0704, 0x3008, 0x9ccb,
-+      0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844,
-+      0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861, 0xa8ea, 0xf801, 0x0014,
-+      0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014,
-+      0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014,
-+      0x3008, 0x8000, 0x284a, 0x1011, 0xa8fc, 0x3008, 0x9d33, 0x8000,
-+      0xa000, 0x2802, 0x1011, 0xa8fd, 0x9d39, 0xa8bd, 0x3008, 0x9d33,
-+      0x283b, 0x1011, 0xa8fd, 0xa209, 0x7102, 0x805f, 0x9481, 0x0017,
-+      0x300c, 0xa209, 0x8000, 0x85a4, 0x1de2, 0xa209, 0xdac1, 0x0014,
-+      0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0,
-+      0x18f2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d25,
-+      0x0704, 0xa206, 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016,
-+      0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021,
-+      0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822,
-+      0x0016, 0x7944, 0x8421, 0xa020, 0xa532, 0x84a1, 0x0016, 0x7944,
-+      0x8421, 0xa0df, 0x9532, 0x84a1, 0x0016, 0x0000, 0x127e, 0x70d4,
-+      0xa084, 0x4600, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205,
-+      0x00c0, 0x45a2, 0x720c, 0x82ff, 0x0040, 0x459d, 0x8aff, 0x00c0,
-+      0x45a2, 0x7200, 0xd284, 0x00c0, 0x45a2, 0x7003, 0x0008, 0x127f,
-+      0x2000, 0x007c, 0x7000, 0xa084, 0x0003, 0x7002, 0xc69c, 0xd084,
-+      0x0040, 0x45e5, 0x7108, 0x0005, 0x7008, 0xa106, 0x00c0, 0x45aa,
-+      0xa184, 0x0003, 0x0040, 0x4616, 0xa184, 0x01e0, 0x00c0, 0x4616,
-+      0xd1f4, 0x00c0, 0x45aa, 0xa184, 0x3000, 0xa086, 0x1000, 0x0040,
-+      0x45aa, 0x2011, 0x0180, 0x710c, 0x8211, 0x0040, 0x45cf, 0x7008,
-+      0xd0f4, 0x00c0, 0x45aa, 0x700c, 0xa106, 0x0040, 0x45c4, 0x7007,
-+      0x0012, 0x7108, 0x0005, 0x7008, 0xa106, 0x00c0, 0x45d1, 0xa184,
-+      0x0003, 0x0040, 0x4616, 0xd194, 0x0040, 0x45d1, 0xd1f4, 0x0040,
-+      0x4616, 0x7007, 0x0002, 0x0078, 0x45aa, 0x7108, 0xd1fc, 0x0040,
-+      0x45f0, 0x1078, 0x4769, 0x8aff, 0x0040, 0x458c, 0x0078, 0x45e5,
-+      0x700c, 0xa08c, 0x03ff, 0x0040, 0x461b, 0x7004, 0xd084, 0x0040,
-+      0x460d, 0x7014, 0xa005, 0x00c0, 0x4609, 0x7010, 0x7310, 0xa306,
-+      0x00c0, 0x45fd, 0x2300, 0xa005, 0x0040, 0x460d, 0xa102, 0x00c8,
-+      0x45e5, 0x7007, 0x0010, 0x0078, 0x4616, 0x8aff, 0x0040, 0x461b,
-+      0x1078, 0x4970, 0x00c0, 0x4610, 0x0040, 0x45e5, 0x1078, 0x46b4,
-+      0x127f, 0x2000, 0x007c, 0x7204, 0x7108, 0xc19c, 0x8103, 0x00c8,
-+      0x462a, 0x7007, 0x0002, 0x0078, 0x461b, 0x7003, 0x0008, 0x127f,
-+      0x2000, 0x007c, 0xa205, 0x00c0, 0x4616, 0x7003, 0x0008, 0x127f,
-+      0x2000, 0x007c, 0x6428, 0x84ff, 0x0040, 0x465e, 0x2c70, 0x7004,
-+      0xa0bc, 0x000f, 0xa7b8, 0x466e, 0x273c, 0x87fb, 0x00c0, 0x464c,
-+      0x0048, 0x4644, 0x1078, 0x296b, 0x609c, 0xa075, 0x0040, 0x465e,
-+      0x0078, 0x4637, 0x2039, 0x4663, 0x2704, 0xae68, 0x6808, 0xa630,
-+      0x680c, 0xa529, 0x8421, 0x0040, 0x465e, 0x8738, 0x2704, 0xa005,
-+      0x00c0, 0x464d, 0x709c, 0xa075, 0x00c0, 0x4637, 0x007c, 0x0000,
-+      0x0005, 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000,
-+      0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x4663,
-+      0x4660, 0x0000, 0x0000, 0x8000, 0x0000, 0x4663, 0x0000, 0x466b,
-+      0x4668, 0x0000, 0x0000, 0x0000, 0x0000, 0x466b, 0x0000, 0x4666,
-+      0x4666, 0x0000, 0x0000, 0x8000, 0x0000, 0x4666, 0x0000, 0x466c,
-+      0x466c, 0x0000, 0x0000, 0x0000, 0x0000, 0x466c, 0x2079, 0x4e00,
-+      0x2071, 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001,
-+      0x7810, 0xd0ec, 0x0040, 0x46a2, 0x2009, 0x0001, 0x2071, 0x0020,
-+      0x0078, 0x46a6, 0x2009, 0x0002, 0x2071, 0x0050, 0x7007, 0x000a,
-+      0x7007, 0x0002, 0x7003, 0x0000, 0x8109, 0x0040, 0x46b3, 0x2071,
-+      0x0020, 0x0078, 0x46a6, 0x007c, 0x7004, 0x8004, 0x00c8, 0x473d,
-+      0x7108, 0x7008, 0xa106, 0x00c0, 0x46b8, 0xa184, 0x01e0, 0x0040,
-+      0x46c5, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7007, 0x0012, 0x2019,
-+      0x0000, 0x7108, 0x7008, 0xa106, 0x00c0, 0x46c9, 0xa184, 0x01e0,
-+      0x0040, 0x46d6, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7810, 0xd0ec,
-+      0x0040, 0x46f0, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0003, 0x00c0,
-+      0x46f4, 0xa184, 0x4000, 0x0040, 0x46f8, 0xa382, 0x0003, 0x00c8,
-+      0x46f8, 0xa184, 0x0004, 0x0040, 0x46c9, 0x8318, 0x0078, 0x46c9,
-+      0x7814, 0xd0ec, 0x00c0, 0x46f8, 0xa184, 0x4000, 0x00c0, 0x46c9,
-+      0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x4715, 0xa386, 0x0008,
-+      0x0040, 0x4720, 0x7004, 0xd084, 0x00c0, 0x4711, 0x7108, 0x7008,
-+      0xa106, 0x00c0, 0x4706, 0xa184, 0x0003, 0x0040, 0x4711, 0x0078,
-+      0x47ac, 0xa386, 0x200c, 0x00c0, 0x46c9, 0x7200, 0x8204, 0x0048,
-+      0x4720, 0x730c, 0xa384, 0x03ff, 0x0040, 0x4720, 0x1078, 0x296b,
-+      0x7108, 0x7008, 0xa106, 0x00c0, 0x4720, 0xa184, 0x01e0, 0x0040,
-+      0x472d, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7007, 0x0012, 0x7000,
-+      0xd084, 0x00c0, 0x473d, 0x7310, 0x7014, 0xa305, 0x0040, 0x473d,
-+      0x710c, 0xa184, 0x03ff, 0x00c0, 0x46b4, 0x7108, 0x7008, 0xa106,
-+      0x00c0, 0x473d, 0xa184, 0x01e0, 0x0040, 0x474a, 0x1078, 0x47ac,
-+      0x0078, 0x4765, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c,
-+      0x00c0, 0x474e, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4752, 0xa184,
-+      0x01e0, 0x0040, 0x475f, 0x1078, 0x47ac, 0x0078, 0x4765, 0x7007,
-+      0x0012, 0x7108, 0x8103, 0x0048, 0x4752, 0x7003, 0x0008, 0x007c,
-+      0x7108, 0xa184, 0x01e0, 0x00c0, 0x47ac, 0x7108, 0xa184, 0x01e0,
-+      0x00c0, 0x47ac, 0xa184, 0x0007, 0x0079, 0x4776, 0x4780, 0x4790,
-+      0x477e, 0x4790, 0x477e, 0x47ee, 0x477e, 0x47ec, 0x1078, 0x296b,
-+      0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x00c0, 0x478b,
-+      0x2049, 0x0000, 0x007c, 0x1078, 0x4970, 0x00c0, 0x478b, 0x007c,
-+      0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x00c0,
-+      0x47a4, 0x7108, 0x7008, 0xa106, 0x00c0, 0x4799, 0xa184, 0x0003,
-+      0x0040, 0x47a4, 0x0078, 0x47ac, 0x8aff, 0x0040, 0x47ab, 0x1078,
-+      0x4970, 0x00c0, 0x47a7, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0,
-+      0x47af, 0x2091, 0x6000, 0x00e0, 0x47b3, 0x2091, 0x6000, 0x7007,
-+      0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x47bb, 0x7007,
-+      0x0012, 0x7108, 0xd1fc, 0x00c0, 0x47bf, 0x7003, 0x0000, 0x7000,
-+      0xa005, 0x00c0, 0x47d3, 0x7004, 0xa005, 0x00c0, 0x47d3, 0x700c,
-+      0xa005, 0x0040, 0x47d5, 0x0078, 0x47b7, 0x2049, 0x0000, 0xb284,
-+      0x0100, 0x0040, 0x47df, 0x2001, 0x0000, 0x0078, 0x47e1, 0x2001,
-+      0x0001, 0x1078, 0x4212, 0x681b, 0x0002, 0x2051, 0x0000, 0x007c,
-+      0x1078, 0x296b, 0x1078, 0x296b, 0x1078, 0x4836, 0x7210, 0x7114,
-+      0x700c, 0xa09c, 0x03ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000,
-+      0x1078, 0x4836, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322,
-+      0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x4811, 0x00c8,
-+      0x4811, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078,
-+      0x47f8, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040,
-+      0x481d, 0xa7ba, 0x4668, 0x0078, 0x481f, 0xa7ba, 0x4660, 0x007f,
-+      0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7108, 0x7008,
-+      0xa106, 0x00c0, 0x4826, 0xa184, 0x01e0, 0x0040, 0x4831, 0x1078,
-+      0x47ac, 0x7007, 0x0012, 0x1078, 0x46b4, 0x007c, 0x8a50, 0x8739,
-+      0x2704, 0xa004, 0x00c0, 0x484a, 0x6000, 0xa064, 0x00c0, 0x4841,
-+      0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x467e, 0x203c, 0x87fb,
-+      0x1040, 0x296b, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600,
-+      0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90,
-+      0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084,
-+      0x0008, 0x007f, 0x0040, 0x4868, 0xa0b8, 0x4668, 0x0078, 0x486a,
-+      0xa0b8, 0x4660, 0xb284, 0x0100, 0x0040, 0x4871, 0x7e20, 0x0078,
-+      0x4872, 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x4879,
-+      0xc685, 0x2400, 0xa305, 0x0040, 0x48a3, 0x2c58, 0x2704, 0x6104,
-+      0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184,
-+      0x0008, 0x0040, 0x4893, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014,
-+      0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c,
-+      0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078,
-+      0x499b, 0x0078, 0x48a5, 0x1078, 0x4970, 0x00c0, 0x48a3, 0x127f,
-+      0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004,
-+      0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x48b4,
-+      0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4,
-+      0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f, 0x0d7f, 0x7e20,
-+      0xb284, 0x0100, 0x00c0, 0x48cd, 0x7e24, 0xa6b5, 0x000c, 0x681c,
-+      0xd0ac, 0x00c0, 0x48d8, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004,
-+      0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x466e,
-+      0x273c, 0x87fb, 0x00c0, 0x48ee, 0x0048, 0x48e8, 0x1078, 0x296b,
-+      0x689c, 0xa065, 0x0040, 0x48f2, 0x0078, 0x48db, 0x1078, 0x4970,
-+      0x00c0, 0x48ee, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e,
-+      0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f,
-+      0x7e20, 0xb284, 0x0100, 0x00c0, 0x4906, 0x7e24, 0x0d7f, 0x037f,
-+      0x047f, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x4914, 0xc685,
-+      0x7003, 0x0000, 0x7007, 0x0004, 0x2049, 0x48f5, 0x6828, 0xa055,
-+      0x0d7e, 0x0040, 0x496c, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f,
-+      0xa7b8, 0x466e, 0x273c, 0x87fb, 0x00c0, 0x4931, 0x0048, 0x492a,
-+      0x1078, 0x296b, 0x709c, 0xa075, 0x2060, 0x0040, 0x496c, 0x0078,
-+      0x491d, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048,
-+      0x494a, 0x8a51, 0x00c0, 0x493e, 0x1078, 0x296b, 0x8738, 0x2704,
-+      0xa005, 0x00c0, 0x4932, 0x709c, 0xa075, 0x2060, 0x0040, 0x496c,
-+      0x0078, 0x491d, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908,
-+      0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x4959, 0x1078,
-+      0x296b, 0xb284, 0x0100, 0x0040, 0x4967, 0x2001, 0x4e04, 0x2004,
-+      0xd0ec, 0x00c0, 0x4967, 0x2071, 0x0050, 0x0078, 0x4969, 0x2071,
-+      0x0020, 0x0d7f, 0x0078, 0x4879, 0x0d7f, 0x127f, 0x2000, 0x007c,
-+      0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x4979, 0xa006,
-+      0x007c, 0xa084, 0x0003, 0xa086, 0x0003, 0x00c0, 0x4980, 0x007c,
-+      0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, 0x7808, 0x7012,
-+      0x780c, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x4993, 0x7810,
-+      0x7022, 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085,
-+      0x7006, 0x2079, 0x4e00, 0x8a51, 0x0040, 0x49bf, 0x8738, 0x2704,
-+      0xa005, 0x00c0, 0x49b1, 0x609c, 0xa005, 0x0040, 0x49c0, 0x2060,
-+      0x6004, 0xa084, 0x000f, 0xa080, 0x466e, 0x203c, 0x87fb, 0x1040,
-+      0x296b, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x49bb,
-+      0xa006, 0x0078, 0x49c0, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c,
-+      0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70d4, 0xa084,
-+      0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003,
-+      0x00c0, 0x49d8, 0x6828, 0xa005, 0x0040, 0x49e8, 0x0078, 0x45a2,
-+      0x7108, 0xd1fc, 0x0040, 0x49e0, 0x1078, 0x4769, 0x0078, 0x49cd,
-+      0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x49e2, 0x1078, 0x4769,
-+      0x7008, 0xa086, 0x0008, 0x00c0, 0x49cd, 0x7000, 0xa005, 0x00c0,
-+      0x49cd, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+      0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70d4, 0xa084,
-+      0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x49f8, 0xad80, 0x0011,
-+      0x20a0, 0xb284, 0x0100, 0x0040, 0x4a1b, 0x2001, 0x4e04, 0x2004,
-+      0xd0ec, 0x0040, 0x4a17, 0x2099, 0x0031, 0x0078, 0x4a1d, 0x2099,
-+      0x0032, 0x0078, 0x4a1d, 0x2099, 0x0031, 0x700c, 0xa084, 0x03ff,
-+      0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040,
-+      0x4a2c, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, 0x0040,
-+      0x4a38, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x4a33,
-+      0x0c7f, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f,
-+      0x127f, 0x2000, 0x007c, 0x2091, 0x8000, 0x2091, 0x6000, 0x78ac,
-+      0xa005, 0x00c0, 0x4a5a, 0x7974, 0x70d0, 0xa106, 0x00c0, 0x4a5a,
-+      0x781c, 0xa005, 0x0040, 0x4a5a, 0x781f, 0x0000, 0x0068, 0x4a5a,
-+      0x2091, 0x4080, 0x7830, 0x8001, 0x7832, 0x00c0, 0x4ae2, 0x7834,
-+      0x7832, 0x7810, 0xd0ec, 0x00c0, 0x4adb, 0x2061, 0x73c0, 0x2069,
-+      0x4e80, 0xc7fd, 0x68d0, 0xa005, 0x0040, 0x4a74, 0x8001, 0x68d2,
-+      0x00c0, 0x4a74, 0x1078, 0x4cb0, 0x6800, 0xa084, 0x000f, 0x0040,
-+      0x4a89, 0xa086, 0x0001, 0x0040, 0x4a89, 0x6844, 0xa00d, 0x0040,
-+      0x4a89, 0x2104, 0xa005, 0x0040, 0x4a89, 0x8001, 0x200a, 0x0040,
-+      0x4c23, 0x6814, 0xa005, 0x0040, 0x4aae, 0x8001, 0x6816, 0x00c0,
-+      0x4aae, 0x68a7, 0x0001, 0x0f7e, 0xd7fc, 0x00c0, 0x4aa3, 0x7810,
-+      0xd0ec, 0x0040, 0x4a9f, 0x2079, 0x0100, 0x0078, 0x4aa5, 0x2079,
-+      0x0200, 0x0078, 0x4aa5, 0x2079, 0x0100, 0x1078, 0x4383, 0x0f7f,
-+      0x6864, 0xa005, 0x0040, 0x4aae, 0x1078, 0x2628, 0x6880, 0xa005,
-+      0x0040, 0x4abb, 0x8001, 0x6882, 0x00c0, 0x4abb, 0x6867, 0x0000,
-+      0x68d4, 0xc0dd, 0x68d6, 0x68d4, 0xd0fc, 0x0040, 0x4ad8, 0xc0fc,
-+      0x68d6, 0x20a9, 0x0200, 0x6034, 0xa005, 0x0040, 0x4ad4, 0x8001,
-+      0x6036, 0x68d4, 0xc0fd, 0x68d6, 0x00c0, 0x4ad4, 0x6010, 0xa005,
-+      0x0040, 0x4ad4, 0x1078, 0x2628, 0xace0, 0x0010, 0x00f0, 0x4ac3,
-+      0xd7fc, 0x0040, 0x4ae2, 0x2061, 0x53c0, 0x2069, 0x4e40, 0xc7fc,
-+      0x0078, 0x4a6a, 0x1078, 0x4b1e, 0x7838, 0x8001, 0x783a, 0x00c0,
-+      0x4b04, 0x783c, 0x783a, 0x2061, 0x53c0, 0x2069, 0x4e40, 0xc7fc,
-+      0x680c, 0xa005, 0x0040, 0x4af6, 0x1078, 0x4b88, 0xd7fc, 0x00c0,
-+      0x4b04, 0x7810, 0xd0ec, 0x00c0, 0x4b04, 0x2061, 0x73c0, 0x2069,
-+      0x4e80, 0xc7fd, 0x0078, 0x4af0, 0x7814, 0xd0e4, 0x00c0, 0x4b08,
-+      0x7810, 0xd0cc, 0x0040, 0x4b1b, 0xd0ac, 0x00c0, 0x4b14, 0xd0a4,
-+      0x0040, 0x4b1b, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0068, 0x4b1a,
-+      0x1078, 0x2395, 0x007c, 0x2091, 0x8001, 0x007c, 0x7840, 0x8001,
-+      0x7842, 0x00c0, 0x4b87, 0x7844, 0x7842, 0x2069, 0x4e40, 0xc7fc,
-+      0x7810, 0x2079, 0x0200, 0xd0ec, 0x0040, 0x4b30, 0x2079, 0x0100,
-+      0x68d8, 0xa005, 0x0040, 0x4b3c, 0x7de0, 0xa504, 0x00c0, 0x4b3c,
-+      0x68da, 0x68d4, 0xc0bc, 0x68d6, 0x2079, 0x4e00, 0x6810, 0xa005,
-+      0x00c0, 0x4b44, 0x2001, 0x0101, 0x8001, 0x6812, 0xd7fc, 0x0040,
-+      0x4b4d, 0xa080, 0x94d0, 0x0078, 0x4b4f, 0xa080, 0x93c0, 0x2040,
-+      0x2004, 0xa065, 0x0040, 0x4b79, 0x6024, 0xa005, 0x0040, 0x4b75,
-+      0x8001, 0x6026, 0x00c0, 0x4b75, 0x6800, 0xa005, 0x0040, 0x4b68,
-+      0x684c, 0xac06, 0x00c0, 0x4b68, 0x1078, 0x4c23, 0x0078, 0x4b79,
-+      0x6864, 0xa005, 0x0040, 0x4b70, 0x6027, 0x0001, 0x0078, 0x4b75,
-+      0x1078, 0x4bd6, 0x2804, 0x0078, 0x4b51, 0x6000, 0x2c40, 0x0078,
-+      0x4b51, 0xd7fc, 0x00c0, 0x4b87, 0x7810, 0xd0ec, 0x00c0, 0x4b87,
-+      0x2069, 0x4e80, 0xc7fd, 0x2079, 0x0100, 0x0078, 0x4b30, 0x007c,
-+      0x2009, 0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0040, 0x4bc2,
-+      0x6024, 0xa005, 0x0040, 0x4b98, 0x8001, 0x6026, 0x0078, 0x4bc0,
-+      0x6008, 0xc09c, 0xd084, 0x00c0, 0x4ba0, 0xd0ac, 0x0040, 0x4bba,
-+      0x600a, 0x6004, 0xa005, 0x0040, 0x4bc2, 0x0d7e, 0x0c7e, 0x017e,
-+      0x2068, 0x6010, 0x8001, 0x6012, 0x1078, 0x3dd0, 0x2d00, 0x2c68,
-+      0x2060, 0x1078, 0x1e5b, 0x1078, 0x201d, 0x017f, 0x0c7f, 0x0d7f,
-+      0x0078, 0x4bc2, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0078, 0x4bc2,
-+      0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0, 0x4b8c, 0xa184, 0x0001,
-+      0x0040, 0x4bd1, 0xa18c, 0xfffe, 0x690e, 0x1078, 0x2628, 0x0078,
-+      0x4bd2, 0x690e, 0x007c, 0x00c0, 0x4bd2, 0x786c, 0x2c00, 0x687e,
-+      0x6714, 0x6f76, 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006,
-+      0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-+      0x0060, 0x6022, 0x6000, 0x2042, 0x1078, 0x1de4, 0x6818, 0xa005,
-+      0x0040, 0x4bf4, 0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810,
-+      0x7908, 0x8109, 0x790a, 0x8001, 0x00d0, 0x4c00, 0x1078, 0x296b,
-+      0x6812, 0x00c0, 0x4c06, 0x7910, 0xc1a5, 0x7912, 0x602f, 0x0000,
-+      0x6033, 0x0000, 0x2c68, 0x1078, 0x202c, 0xd7fc, 0x00c0, 0x4c14,
-+      0x2069, 0x4e40, 0x0078, 0x4c16, 0x2069, 0x4e80, 0x6910, 0xa184,
-+      0x0100, 0x2001, 0x0006, 0x00c0, 0x4c20, 0x697a, 0x2001, 0x0004,
-+      0x1078, 0x261c, 0x007c, 0x0d7e, 0x694c, 0x2160, 0xd7fc, 0x00c0,
-+      0x4c35, 0x7810, 0xd0ec, 0x0040, 0x4c31, 0x2069, 0x0100, 0x0078,
-+      0x4c37, 0x2069, 0x0200, 0x0078, 0x4c37, 0x2069, 0x0100, 0x1078,
-+      0x28df, 0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020,
-+      0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033,
-+      0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x0040,
-+      0x4c69, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0040,
-+      0x4c5b, 0x00f0, 0x4c55, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848,
-+      0xd084, 0x0040, 0x4c65, 0x00f0, 0x4c5f, 0x20a9, 0x00fa, 0x00f0,
-+      0x4c67, 0x681b, 0x0047, 0x0d7f, 0x6867, 0x0007, 0x007c, 0x2079,
-+      0x4e00, 0x1078, 0x4ca3, 0x1078, 0x4c89, 0x1078, 0x4c96, 0x2009,
-+      0x0002, 0x2069, 0x4e80, 0x680f, 0x0000, 0x6813, 0x0000, 0x6817,
-+      0x0000, 0x8109, 0x0040, 0x4c88, 0x2069, 0x4e40, 0x0078, 0x4c7b,
-+      0x007c, 0x7810, 0xd0ec, 0x0040, 0x4c91, 0x2019, 0x00cc, 0x0078,
-+      0x4c93, 0x2019, 0x007b, 0x7b3a, 0x7b3e, 0x007c, 0x7814, 0xd0e4,
-+      0x00c0, 0x4c9e, 0x2019, 0x0040, 0x0078, 0x4ca0, 0x2019, 0x0026,
-+      0x7b42, 0x7b46, 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x4cab, 0x2019,
-+      0x3f94, 0x0078, 0x4cad, 0x2019, 0x2624, 0x7b32, 0x7b36, 0x007c,
-+      0x6a50, 0xa285, 0x0000, 0x0040, 0x4cdc, 0x6954, 0x6bc0, 0xa300,
-+      0x0c7e, 0x2164, 0x6304, 0x83ff, 0x00c0, 0x4cc8, 0x8211, 0x0040,
-+      0x4ccc, 0x8108, 0xa11a, 0x0048, 0x4cb9, 0x69c0, 0x0078, 0x4cb9,
-+      0x68d3, 0x000a, 0x0c7f, 0x007c, 0x6950, 0x6ac0, 0x2264, 0x602b,
-+      0x0000, 0x602f, 0x0000, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109,
-+      0x00c0, 0x4cce, 0x6952, 0x0c7f, 0x007c, 0x00e0, 0x4cdd, 0x2091,
-+      0x6000, 0x00e0, 0x4ce1, 0x2091, 0x6000, 0x70ec, 0xd0dc, 0x00c0,
-+      0x4cee, 0xd0d4, 0x0040, 0x4d17, 0x0078, 0x4d1a, 0x2008, 0x7810,
-+      0xd0ec, 0x0040, 0x4d01, 0xd1c4, 0x00c0, 0x4d39, 0x7814, 0xc0c5,
-+      0x7816, 0x7810, 0xc0f5, 0x7812, 0xd0ec, 0x0040, 0x4d35, 0x0078,
-+      0x4d31, 0xae8e, 0x0100, 0x0040, 0x4d0e, 0x7814, 0xc0f5, 0xc0c5,
-+      0x7816, 0xd0d4, 0x00c0, 0x4d35, 0x0078, 0x4d31, 0x7814, 0xc0fd,
-+      0xc0c5, 0x7816, 0xd0d4, 0x00c0, 0x4d35, 0x0078, 0x4d31, 0xd0e4,
-+      0x0040, 0x4d37, 0x00e0, 0x4d1a, 0x2091, 0x6000, 0x2009, 0x000c,
-+      0x00e0, 0x4d20, 0x2091, 0x6000, 0x8109, 0x00c0, 0x4d20, 0x70e4,
-+      0xa084, 0x01ff, 0xa086, 0x01ff, 0x00c0, 0x4d31, 0x70ec, 0x0078,
-+      0x4cee, 0x7804, 0xd08c, 0x0040, 0x4d37, 0x681f, 0x000c, 0x70a0,
-+      0x70a2, 0x007c, 0x205b
-+};
-+#else
-+/************************************************************************
-+ *                                                                    *
-+ *     --- ISP1240/ISP1080/ISP1280 Initiator/Target Firmware ---      *
-+ *                        32 LUN Support                              *
-+ *                                                                    *
-+ ************************************************************************/
-+/*
-+ *    Firmware Version 9.11.01 (15:46 May 23, 2000)
-+ */
-+
-+static const u_int16_t isp_1080_risc_code[] = {
-+      0x0078, 0x103a, 0x0000, 0x4f62, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+      0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+      0x3132, 0x3430, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+      0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, 0x392e, 0x3131,
-+      0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+      0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+      0x3031, 0x2024, 0x20c9, 0xabff, 0x2001, 0x04fc, 0x2004, 0xa086,
-+      0x1080, 0x00c0, 0x104d, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1,
-+      0x0010, 0x2089, 0x136f, 0x0078, 0x1066, 0x2001, 0x04fc, 0x2004,
-+      0xa086, 0x1280, 0x00c0, 0x1062, 0x2071, 0x0200, 0x70a0, 0x70a2,
-+      0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f3,
-+      0x0078, 0x1066, 0x20c1, 0x0020, 0x2089, 0x1317, 0x2071, 0x0010,
-+      0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020,
-+      0x70d3, 0x0009, 0x2001, 0x04fd, 0x70d6, 0x20c1, 0x0021, 0x2019,
-+      0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff,
-+      0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050,
-+      0x2114, 0xa286, 0xa5a5, 0x0040, 0x109d, 0xa386, 0x000f, 0x0040,
-+      0x1099, 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078,
-+      0x1079, 0x2c6a, 0x2a5a, 0x0078, 0x109b, 0x2c6a, 0x2a5a, 0x2130,
-+      0x2128, 0xa1a2, 0x6000, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
-+      0x8424, 0xa192, 0xac00, 0x2009, 0x0000, 0x2001, 0x0037, 0x1078,
-+      0x22c0, 0x2218, 0x2079, 0x6000, 0x2fa0, 0x2408, 0x2011, 0x0000,
-+      0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10b8, 0x2009, 0xff00,
-+      0x3400, 0xa102, 0x0048, 0x10c8, 0x0040, 0x10c8, 0x20a8, 0x42a4,
-+      0x2001, 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e0, 0x2071,
-+      0x0100, 0x0d7e, 0x2069, 0x6040, 0x1078, 0x5d94, 0x0d7f, 0x7808,
-+      0xc0ed, 0x780a, 0x7813, 0x0064, 0x2011, 0x000a, 0x0078, 0x1107,
-+      0x2001, 0x04fc, 0x2004, 0xa086, 0x1280, 0x00c0, 0x1100, 0x780c,
-+      0xc0ed, 0xc0d5, 0x780e, 0x7813, 0x0064, 0x2071, 0x0200, 0x0d7e,
-+      0x2069, 0x6040, 0x1078, 0x5d94, 0x2069, 0x6080, 0x2071, 0x0100,
-+      0x1078, 0x5d94, 0x780c, 0xc0d4, 0x780e, 0x0d7f, 0x0078, 0x1107,
-+      0x780c, 0xc0e5, 0x780e, 0x7813, 0x003c, 0x2011, 0x000c, 0x2009,
-+      0x604c, 0x220a, 0x2009, 0x608c, 0x220a, 0x7ece, 0x7cc6, 0x7bca,
-+      0x785f, 0x0000, 0x7800, 0xc08d, 0x7802, 0x2031, 0x0030, 0x78b3,
-+      0x0101, 0x781b, 0x0002, 0x781f, 0x0002, 0x2009, 0x0002, 0x2069,
-+      0x6040, 0x6817, 0x0003, 0x681f, 0x0007, 0x6823, 0x00fa, 0x6827,
-+      0x0008, 0x682b, 0x0028, 0x6837, 0x0006, 0x682f, 0x0008, 0x683b,
-+      0x0000, 0x8109, 0x0040, 0x1158, 0x68ef, 0x000a, 0x68df, 0x60c0,
-+      0x2079, 0x6000, 0x780c, 0xd0e4, 0x00c0, 0x1142, 0x68f3, 0x7329,
-+      0x0078, 0x1144, 0x68f3, 0x730d, 0x68e3, 0x65c0, 0x68e7, 0x64c0,
-+      0x68eb, 0xa5c0, 0x68c7, 0xaa8e, 0x68cb, 0xaa93, 0x68cf, 0xaa8e,
-+      0x68d3, 0xaa8e, 0x68c3, 0x0001, 0x2069, 0x6080, 0x0078, 0x1121,
-+      0x68ef, 0x000a, 0x68df, 0x62c0, 0x68f3, 0x7419, 0x68e3, 0x85c0,
-+      0x68e7, 0x6540, 0x68eb, 0xa6d0, 0x68c7, 0xaa93, 0x68cb, 0xaa98,
-+      0x68cf, 0xaa93, 0x68d3, 0xaa93, 0x68c3, 0x0001, 0x7808, 0xd0ec,
-+      0x00c0, 0x11b4, 0x780c, 0xd0e4, 0x00c0, 0x11a6, 0x0e7e, 0x2069,
-+      0x64c0, 0x2071, 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1187, 0x2019,
-+      0x0c0c, 0x2021, 0x000c, 0x1078, 0x222c, 0x0078, 0x118d, 0x2019,
-+      0x0c0a, 0x2021, 0x000a, 0x1078, 0x222c, 0x2069, 0x6540, 0x2071,
-+      0x0100, 0x70ec, 0xd0e4, 0x00c0, 0x119d, 0x2019, 0x0c0c, 0x2021,
-+      0x000c, 0x1078, 0x222c, 0x0078, 0x11a3, 0x2019, 0x0c0a, 0x2021,
-+      0x000a, 0x1078, 0x222c, 0x0e7f, 0x0078, 0x11cd, 0x2019, 0x0c0c,
-+      0x2021, 0x000c, 0x2069, 0x64c0, 0x1078, 0x222c, 0x2069, 0x6540,
-+      0x1078, 0x222c, 0x0078, 0x11cd, 0x2069, 0x64c0, 0x0e7e, 0x2071,
-+      0x0100, 0x70ec, 0xd0e4, 0x00c0, 0x11c6, 0x2019, 0x0c0c, 0x2021,
-+      0x000c, 0x1078, 0x222c, 0x0e7f, 0x0078, 0x11cd, 0x2019, 0x0c0a,
-+      0x2021, 0x000a, 0x1078, 0x222c, 0x0e7f, 0x2011, 0x0002, 0x2069,
-+      0x65c0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b,
-+      0x0040, 0x7bcc, 0xa386, 0xfeff, 0x00c0, 0x11e4, 0x6817, 0x0100,
-+      0x681f, 0x0064, 0x0078, 0x11e8, 0x6817, 0x0064, 0x681f, 0x0002,
-+      0xade8, 0x0010, 0x00f0, 0x11d5, 0x8109, 0x00c0, 0x11d3, 0x8211,
-+      0x0040, 0x11f6, 0x2069, 0x85c0, 0x0078, 0x11d1, 0x1078, 0x28df,
-+      0x1078, 0x56b4, 0x1078, 0x1e5e, 0x1078, 0x5d2a, 0x2091, 0x2100,
-+      0x2079, 0x6000, 0x7808, 0xd0ec, 0x0040, 0x120a, 0x2071, 0x0020,
-+      0x0078, 0x120c, 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x6000,
-+      0x2071, 0x0020, 0x2091, 0x2300, 0x2079, 0x6000, 0x7808, 0xd0ec,
-+      0x0040, 0x121e, 0x2079, 0x0100, 0x0078, 0x1220, 0x2079, 0x0200,
-+      0x2071, 0x6040, 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x6080,
-+      0x2091, 0x2000, 0x2079, 0x6000, 0x2071, 0x0010, 0x3200, 0xa085,
-+      0x303d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x123d, 0x70c0, 0xa086,
-+      0x0002, 0x00c0, 0x123d, 0x1078, 0x15ae, 0x2039, 0x0000, 0x7808,
-+      0xd0ec, 0x00c0, 0x12c7, 0x1078, 0x1477, 0x78b0, 0xa005, 0x00c0,
-+      0x125f, 0x0068, 0x1253, 0x7868, 0xa065, 0x0040, 0x1253, 0x2029,
-+      0x0000, 0x1078, 0x2774, 0x1078, 0x22e7, 0x0068, 0x126c, 0x7868,
-+      0xa065, 0x0040, 0x125f, 0x2029, 0x0000, 0x1078, 0x2774, 0x0068,
-+      0x126c, 0x2009, 0x6046, 0x2011, 0x6086, 0x2104, 0x220c, 0xa105,
-+      0x0040, 0x126c, 0x1078, 0x1f9d, 0x0e7e, 0x0f7e, 0x2071, 0x6040,
-+      0x70c0, 0xa005, 0x0040, 0x1295, 0x7454, 0xa485, 0x0000, 0x0040,
-+      0x1295, 0x2079, 0x0200, 0x2091, 0x8000, 0x72f0, 0xa28c, 0x303d,
-+      0x2190, 0x1078, 0x2e28, 0x2091, 0x8000, 0x2091, 0x303d, 0x0068,
-+      0x1295, 0x0f7f, 0x7868, 0xa065, 0x0040, 0x1294, 0x0e7f, 0x2029,
-+      0x0000, 0x1078, 0x2774, 0x0e7e, 0x0f7e, 0x00e0, 0x129d, 0x0f7f,
-+      0x0e7f, 0x1078, 0x5b00, 0x0e7e, 0x0f7e, 0x2071, 0x6080, 0x70c0,
-+      0xa005, 0x0040, 0x12b6, 0x7454, 0xa485, 0x0000, 0x0040, 0x12b6,
-+      0x2079, 0x0100, 0x2091, 0x8000, 0x72f0, 0xa28c, 0x303d, 0x2190,
-+      0x1078, 0x2e28, 0x2091, 0x8000, 0x2091, 0x303d, 0x0f7f, 0x0e7f,
-+      0x0068, 0x12c1, 0x7868, 0xa065, 0x0040, 0x12c1, 0xa02e, 0x1078,
-+      0x2774, 0x00e0, 0x1243, 0x1078, 0x5b00, 0x0078, 0x1243, 0x1078,
-+      0x1477, 0x78b0, 0xa005, 0x00c0, 0x12e3, 0x0068, 0x12d7, 0x7868,
-+      0xa065, 0x0040, 0x12d7, 0x2029, 0x0000, 0x1078, 0x2774, 0x1078,
-+      0x22e7, 0x0068, 0x12ed, 0x7868, 0xa065, 0x0040, 0x12e3, 0x2029,
-+      0x0000, 0x1078, 0x2774, 0x0068, 0x12ed, 0x2009, 0x6046, 0x2104,
-+      0xa005, 0x0040, 0x12ed, 0x1078, 0x1f9d, 0x0e7e, 0x0f7e, 0x2071,
-+      0x6040, 0x70c0, 0xa005, 0x0040, 0x1305, 0x7454, 0xa485, 0x0000,
-+      0x0040, 0x1305, 0x2079, 0x0100, 0x2091, 0x8000, 0x72f0, 0x1078,
-+      0x2e28, 0x2091, 0x8000, 0x2091, 0x303d, 0x0f7f, 0x0e7f, 0x0068,
-+      0x1311, 0x7868, 0xa065, 0x0040, 0x1311, 0x2029, 0x0000, 0x1078,
-+      0x2774, 0x00e0, 0x12c7, 0x1078, 0x5b00, 0x0078, 0x12c7, 0x1337,
-+      0x1337, 0x1339, 0x1339, 0x1346, 0x1346, 0x1346, 0x1346, 0x1351,
-+      0x1351, 0x135e, 0x135e, 0x1346, 0x1346, 0x1346, 0x1346, 0x1337,
-+      0x1337, 0x1339, 0x1339, 0x1346, 0x1346, 0x1346, 0x1346, 0x1351,
-+      0x1351, 0x135e, 0x135e, 0x1346, 0x1346, 0x1346, 0x1346, 0x0078,
-+      0x1337, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078, 0x2c19,
-+      0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+      0x127e, 0x1078, 0x13c3, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001,
-+      0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x2c19,
-+      0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+      0x127e, 0x2091, 0x2300, 0x1078, 0x2c19, 0x2091, 0x2400, 0x1078,
-+      0x2c19, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x138f,
-+      0x138f, 0x1391, 0x1391, 0x139e, 0x139e, 0x139e, 0x139e, 0x13a9,
-+      0x13a9, 0x1391, 0x1391, 0x139e, 0x139e, 0x139e, 0x139e, 0x13aa,
-+      0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa,
-+      0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x13aa, 0x0078,
-+      0x138f, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x2c19,
-+      0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e,
-+      0x127e, 0x1078, 0x13d0, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001,
-+      0x007c, 0x007c, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e,
-+      0x2071, 0x0100, 0x2069, 0x6040, 0x2079, 0x6000, 0x70ec, 0xa084,
-+      0x1c00, 0x78e6, 0x1078, 0x5d94, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f,
-+      0x127f, 0x107f, 0x007c, 0x3c00, 0xa084, 0x0007, 0x0079, 0x13c8,
-+      0x13d9, 0x13d9, 0x13db, 0x13db, 0x13e0, 0x13e0, 0x13e5, 0x13e5,
-+      0x3c00, 0xa084, 0x0003, 0x0079, 0x13d5, 0x13d9, 0x13d9, 0x13ee,
-+      0x13ee, 0x1078, 0x2bfa, 0x2091, 0x2200, 0x1078, 0x578c, 0x007c,
-+      0x2091, 0x2100, 0x1078, 0x578c, 0x007c, 0x2091, 0x2100, 0x1078,
-+      0x578c, 0x2091, 0x2200, 0x1078, 0x578c, 0x007c, 0x2091, 0x2100,
-+      0x1078, 0x578c, 0x007c, 0x1413, 0x1413, 0x1415, 0x1415, 0x1422,
-+      0x1422, 0x1422, 0x1422, 0x142d, 0x142d, 0x143a, 0x143a, 0x1422,
-+      0x1422, 0x1422, 0x1422, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b,
-+      0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b, 0x144b,
-+      0x144b, 0x144b, 0x144b, 0x0078, 0x1413, 0x007e, 0x107e, 0x127e,
-+      0x2091, 0x2400, 0x1078, 0x2c19, 0x127f, 0x107f, 0x007f, 0x2091,
-+      0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c3, 0x127f,
-+      0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e,
-+      0x2091, 0x2300, 0x1078, 0x2c19, 0x127f, 0x107f, 0x007f, 0x2091,
-+      0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078,
-+      0x2c19, 0x2091, 0x2400, 0x1078, 0x2c19, 0x127f, 0x107f, 0x007f,
-+      0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e,
-+      0x0f7e, 0x2079, 0x6000, 0x2071, 0x0200, 0x2069, 0x6040, 0x3d00,
-+      0xd08c, 0x0040, 0x1461, 0x70ec, 0xa084, 0x1c00, 0x78e6, 0x1078,
-+      0x5d94, 0x3d00, 0xd084, 0x0040, 0x146f, 0x2069, 0x6080, 0x2071,
-+      0x0100, 0x70ec, 0xa084, 0x1c00, 0x78ea, 0x1078, 0x5d94, 0x0f7f,
-+      0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007f, 0x007c, 0x007c, 0x0068,
-+      0x14fd, 0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x14fd,
-+      0x7820, 0xa005, 0x00c0, 0x1488, 0x0010, 0x14fe, 0x0078, 0x14fd,
-+      0x7908, 0xd1f4, 0x0040, 0x1490, 0x2001, 0x4007, 0x0078, 0x15b0,
-+      0x790c, 0xd1ec, 0x0040, 0x14ab, 0xd0fc, 0x0040, 0x14a1, 0x007e,
-+      0x1078, 0x1dd3, 0x007f, 0x0040, 0x14ab, 0x2001, 0x4007, 0x0078,
-+      0x15b0, 0x007e, 0x1078, 0x1dc7, 0x007f, 0x0040, 0x14ab, 0x2001,
-+      0x4007, 0x0078, 0x15b0, 0x7908, 0xd0fc, 0x00c0, 0x14b5, 0x2061,
-+      0x6040, 0xc19c, 0xc7fc, 0x0078, 0x14b9, 0x2061, 0x6080, 0xc19d,
-+      0xc7fd, 0x6068, 0xa005, 0x00c0, 0x14fd, 0x790a, 0x6087, 0x0000,
-+      0x7820, 0xc0fc, 0xa086, 0x0018, 0x00c0, 0x14ca, 0x0c7e, 0x1078,
-+      0x1aed, 0x0c7f, 0x7823, 0x0000, 0x6080, 0xa065, 0x0040, 0x14e3,
-+      0x0c7e, 0x609c, 0x1078, 0x1edb, 0x0c7f, 0x609f, 0x0000, 0x1078,
-+      0x1c18, 0x2009, 0x000c, 0x6007, 0x0103, 0x1078, 0x1ddf, 0x00c0,
-+      0x14f7, 0x1078, 0x1e43, 0x7808, 0xd09c, 0x00c0, 0x14eb, 0x2061,
-+      0x6040, 0x0078, 0x14ee, 0x2061, 0x6080, 0xc09c, 0x6083, 0x0000,
-+      0x780a, 0x60f0, 0xd0dc, 0x0040, 0x14fb, 0xc0dc, 0x60f2, 0x2001,
-+      0x4005, 0x0078, 0x15b0, 0x0078, 0x15ae, 0x007c, 0x7808, 0xd0f4,
-+      0x0040, 0x1506, 0x2001, 0x4007, 0x0078, 0x15b0, 0x70c3, 0x0000,
-+      0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000, 0x70db, 0x0000,
-+      0x71c4, 0x7a08, 0xd2ec, 0x0040, 0x1516, 0xc1fc, 0x70c0, 0xa03d,
-+      0xa092, 0x0030, 0x00c8, 0x151e, 0x0079, 0x1525, 0x2200, 0xa092,
-+      0x0050, 0x00c8, 0x15bc, 0x0079, 0x1555, 0x15ae, 0x1604, 0x15cd,
-+      0x1619, 0x1628, 0x162e, 0x15c4, 0x1c30, 0x1632, 0x15bc, 0x15d1,
-+      0x15d3, 0x15d5, 0x15d7, 0x1c35, 0x15bc, 0x1640, 0x1698, 0x1b0f,
-+      0x1c2a, 0x15d9, 0x1949, 0x198b, 0x19c6, 0x1a13, 0x1902, 0x1910,
-+      0x1924, 0x1938, 0x175e, 0x15bc, 0x16c9, 0x16cd, 0x16d9, 0x16e5,
-+      0x16fb, 0x1707, 0x170a, 0x1716, 0x1722, 0x172a, 0x1746, 0x1752,
-+      0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x176b, 0x177a, 0x1795, 0x17cb,
-+      0x17f3, 0x1803, 0x1806, 0x182f, 0x1860, 0x1872, 0x18d4, 0x18e4,
-+      0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x18f4, 0x15bc, 0x15bc, 0x15bc,
-+      0x15bc, 0x15bc, 0x1d7e, 0x1d84, 0x15bc, 0x15bc, 0x15bc, 0x1d88,
-+      0x1d8d, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15fe, 0x1613, 0x163a,
-+      0x1692, 0x1b09, 0x1c4c, 0x1c72, 0x1ad0, 0x1c8a, 0x1d91, 0x1d70,
-+      0x1d7a, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+      0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+      0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+      0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc,
-+      0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x15bc, 0x72ca, 0x71c6, 0x2001,
-+      0x4006, 0x0078, 0x15b0, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000,
-+      0x70c2, 0x0068, 0x15b1, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091,
-+      0x5000, 0x2091, 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x15b1,
-+      0x70c3, 0x4006, 0x0078, 0x15b1, 0x2099, 0x0041, 0x20a1, 0x0041,
-+      0x20a9, 0x0005, 0x53a3, 0x0078, 0x15ae, 0x70c4, 0x70c3, 0x0004,
-+      0x007a, 0x0078, 0x15ae, 0x0078, 0x15ae, 0x0078, 0x15ae, 0x0078,
-+      0x15ae, 0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb,
-+      0x5020, 0x70cf, 0x2020, 0x70d3, 0x0009, 0x2001, 0x000b, 0x70d6,
-+      0x2079, 0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000,
-+      0x2029, 0x041a, 0x2051, 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020,
-+      0x2091, 0x5000, 0x2091, 0x4080, 0x0078, 0x0418, 0x75d8, 0x74dc,
-+      0x75da, 0x74de, 0x0078, 0x1607, 0x2029, 0x0000, 0x2520, 0x71d0,
-+      0x73c8, 0x72cc, 0x70c4, 0x1078, 0x1ff2, 0x0040, 0x15ae, 0x70c3,
-+      0x4002, 0x0078, 0x15ae, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078,
-+      0x161c, 0x2029, 0x0000, 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4,
-+      0x1078, 0x203c, 0x0040, 0x15ae, 0x70c3, 0x4002, 0x0078, 0x15ae,
-+      0x71c4, 0x70c8, 0x2114, 0x200a, 0x0078, 0x15ac, 0x71c4, 0x2114,
-+      0x0078, 0x15ac, 0x70c7, 0x0009, 0x70cb, 0x000b, 0x70cf, 0x0001,
-+      0x0078, 0x15ae, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1643,
-+      0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6,
-+      0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x168c, 0xa40a, 0x0040,
-+      0x1653, 0x00c8, 0x15b0, 0x8001, 0x786e, 0xa084, 0xfc00, 0x0040,
-+      0x1660, 0x78b0, 0xc085, 0x78b2, 0x2001, 0x4005, 0x0078, 0x15b0,
-+      0x7a76, 0x7b7a, 0x7d7e, 0x7e82, 0x7c72, 0xa48c, 0xff00, 0x0040,
-+      0x1678, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, 0xa118,
-+      0xa291, 0x0000, 0xa6b1, 0x0000, 0xa5a9, 0x0000, 0x0078, 0x1682,
-+      0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, 0x0000,
-+      0xa5a9, 0x0000, 0x731a, 0x721e, 0x7622, 0x7526, 0x78b0, 0xa084,
-+      0xfffc, 0x78b2, 0x0078, 0x1690, 0x78b0, 0xa085, 0x0001, 0x78b2,
-+      0x0078, 0x15ae, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x169b,
-+      0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6,
-+      0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x16c3, 0xa40a, 0x0040,
-+      0x16ab, 0x00c8, 0x15b0, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040,
-+      0x16b8, 0x78b0, 0xc0c5, 0x78b2, 0x2001, 0x4005, 0x0078, 0x15b0,
-+      0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x7c96, 0x78b0, 0xa084, 0xfcff,
-+      0x78b2, 0x0078, 0x16c7, 0x78b0, 0xa085, 0x0100, 0x78b2, 0x0078,
-+      0x15ae, 0x7960, 0x7ac8, 0x0078, 0x15ac, 0x2009, 0x6047, 0x210c,
-+      0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x2011, 0x6087, 0x2214, 0x0078,
-+      0x15ac, 0x2009, 0x6048, 0x210c, 0x7808, 0xd0ec, 0x00c0, 0x15ad,
-+      0x2011, 0x6088, 0x2214, 0x0078, 0x15ac, 0x2061, 0x6040, 0x6124,
-+      0x6228, 0x8214, 0x8214, 0x8214, 0x7808, 0xd0ec, 0x00c0, 0x16f9,
-+      0x2061, 0x6080, 0x6324, 0x73da, 0x6328, 0x831c, 0x831c, 0x831c,
-+      0x73de, 0x0078, 0x15ac, 0x2009, 0x604b, 0x210c, 0x7808, 0xd0ec,
-+      0x00c0, 0x15ad, 0x2011, 0x608b, 0x2214, 0x0078, 0x15ac, 0x7910,
-+      0x0078, 0x15ad, 0x2009, 0x0202, 0x210c, 0x7808, 0xd0ec, 0x00c0,
-+      0x15ad, 0x2011, 0x0102, 0x2214, 0x0078, 0x15ac, 0x2009, 0x604d,
-+      0x210c, 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x2011, 0x608d, 0x2214,
-+      0x0078, 0x15ac, 0x7918, 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x7a1c,
-+      0x0078, 0x15ac, 0xd1fc, 0x00c0, 0x1731, 0x2011, 0x64c0, 0x0078,
-+      0x1733, 0x2011, 0x6540, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003,
-+      0x8003, 0xa268, 0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x1743,
-+      0x6b08, 0x0078, 0x1744, 0x6b0c, 0x0078, 0x15ab, 0x2138, 0x1078,
-+      0x1e6e, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+      0x0078, 0x15ab, 0x2061, 0x6040, 0x6114, 0x7808, 0xd0ec, 0x00c0,
-+      0x15ad, 0x2061, 0x6080, 0x6214, 0x0078, 0x15ac, 0x2138, 0x1078,
-+      0x1e6e, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091,
-+      0x8001, 0x0078, 0x15ab, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010,
-+      0x00c8, 0x15a6, 0x1078, 0x2a23, 0xd3f4, 0x0040, 0x1778, 0xc2ad,
-+      0x0078, 0x15ab, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8, 0x15a6,
-+      0xd1bc, 0x00c0, 0x1788, 0x2011, 0x6047, 0x2204, 0x0078, 0x178c,
-+      0x2011, 0x6087, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc, 0x2012,
-+      0x1078, 0x297e, 0x017f, 0x0078, 0x15ad, 0x71c4, 0x2021, 0x6048,
-+      0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x17a4, 0x71c8, 0x2021,
-+      0x6088, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x17c3, 0x20a9, 0x0008,
-+      0x2204, 0xa106, 0x0040, 0x17b3, 0x8210, 0x00f0, 0x17a8, 0x71c4,
-+      0x72c8, 0x0078, 0x15a5, 0xa292, 0x17c3, 0x027e, 0x2122, 0x017f,
-+      0x1078, 0x29a1, 0x7808, 0xd0ec, 0x00c0, 0x17c1, 0xd3fc, 0x0040,
-+      0x179e, 0x0078, 0x15ae, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0004,
-+      0x0001, 0x0002, 0x0003, 0x2061, 0x6040, 0x6124, 0x6228, 0x8214,
-+      0x8214, 0x8214, 0x70c4, 0x6026, 0x70c8, 0x8003, 0x8003, 0x8003,
-+      0x602a, 0x7808, 0xd0ec, 0x00c0, 0x17f1, 0x027e, 0x017e, 0x2061,
-+      0x6080, 0x6124, 0x6228, 0x8214, 0x8214, 0x8214, 0x70d8, 0x6026,
-+      0x70dc, 0x8003, 0x8003, 0x8003, 0x602a, 0x71da, 0x72de, 0x017f,
-+      0x027f, 0x0078, 0x15ac, 0x2061, 0x6040, 0x612c, 0x70c4, 0x602e,
-+      0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x2061, 0x6080, 0x622c, 0x70c8,
-+      0x602e, 0x0078, 0x15ac, 0x7910, 0x0078, 0x15ad, 0x71c4, 0xa184,
-+      0xffcf, 0x0040, 0x1812, 0x7808, 0xd0ec, 0x00c0, 0x15a6, 0x72c8,
-+      0x0078, 0x15a5, 0x007e, 0x2019, 0x0000, 0x1078, 0x2a08, 0x7808,
-+      0xd0ec, 0x0040, 0x181e, 0x017f, 0x0078, 0x15ad, 0x71c8, 0xa184,
-+      0xffcf, 0x0040, 0x1827, 0x2110, 0x71c4, 0x0078, 0x15a5, 0x007e,
-+      0xc3fd, 0x1078, 0x2a08, 0x027f, 0x017f, 0x0078, 0x15ac, 0x71c4,
-+      0xa182, 0x0010, 0x0048, 0x183b, 0x7808, 0xd0ec, 0x00c0, 0x15a6,
-+      0x72c8, 0x0078, 0x15a5, 0x2011, 0x604d, 0x2204, 0x007e, 0x2112,
-+      0x2019, 0x0000, 0x1078, 0x29e6, 0x7808, 0xd0ec, 0x0040, 0x184b,
-+      0x017f, 0x0078, 0x15ad, 0x71c8, 0xa182, 0x0010, 0x0048, 0x1854,
-+      0x2110, 0x71c4, 0x0078, 0x15a5, 0x2011, 0x608d, 0x2204, 0x007e,
-+      0x2112, 0xc3fd, 0x1078, 0x29e6, 0x027f, 0x017f, 0x0078, 0x15ac,
-+      0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15a5, 0xa284, 0xfffd,
-+      0x00c0, 0x15a5, 0x2100, 0x7918, 0x781a, 0x2200, 0x7a1c, 0x781e,
-+      0x0078, 0x15ac, 0x017e, 0xd1fc, 0x00c0, 0x187a, 0x2011, 0x64c0,
-+      0x0078, 0x187c, 0x2011, 0x6540, 0x8107, 0xa084, 0x000f, 0x8003,
-+      0x8003, 0x8003, 0xa268, 0xa01e, 0x72c8, 0x2091, 0x8000, 0x6800,
-+      0x007e, 0xa226, 0x0040, 0x18a8, 0x6a02, 0xa484, 0x2000, 0x0040,
-+      0x1893, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x1899, 0xa39d,
-+      0x0008, 0xa484, 0x4000, 0x0040, 0x18a8, 0x810f, 0xa284, 0x4000,
-+      0x0040, 0x18a6, 0x1078, 0x2a65, 0x0078, 0x18a8, 0x1078, 0x2a43,
-+      0x72cc, 0x6808, 0xa206, 0x0040, 0x18ca, 0xa2a4, 0x00ff, 0x780c,
-+      0xd0e4, 0x00c0, 0x18bb, 0xa482, 0x0028, 0x0048, 0x18c7, 0x0040,
-+      0x18c7, 0x0078, 0x18bf, 0xa482, 0x0043, 0x0048, 0x18c7, 0x027f,
-+      0x72ca, 0x017f, 0x71c6, 0x2091, 0x8001, 0x0078, 0x15a7, 0x6a0a,
-+      0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x017f,
-+      0x2091, 0x8001, 0x0078, 0x15ab, 0x2138, 0x1078, 0x1e6e, 0x2091,
-+      0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc,
-+      0x681e, 0x2708, 0x0078, 0x15ab, 0x70c4, 0x2061, 0x6040, 0x6114,
-+      0x6016, 0x7808, 0xd0ec, 0x00c0, 0x15ad, 0x70c8, 0x2061, 0x6080,
-+      0x6214, 0x6016, 0x0078, 0x15ac, 0x72c8, 0x73cc, 0xa182, 0x0010,
-+      0x00c8, 0x15a6, 0x1078, 0x2a87, 0xd3f4, 0x0040, 0x1900, 0xc2ad,
-+      0x0078, 0x15ab, 0x2138, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6a08,
-+      0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x15ac,
-+      0x2138, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9,
-+      0x6a0a, 0x6804, 0xa005, 0x0040, 0x191f, 0x1078, 0x2852, 0x2091,
-+      0x8001, 0x2708, 0x0078, 0x15ac, 0x2138, 0x1078, 0x1e6e, 0x2091,
-+      0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005, 0x0040,
-+      0x1933, 0x1078, 0x2852, 0x2091, 0x8001, 0x2708, 0x0078, 0x15ac,
-+      0x2138, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091,
-+      0x8000, 0x1078, 0x1e83, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078,
-+      0x15ac, 0x2138, 0x780c, 0xd0e4, 0x00c0, 0x195d, 0xd7fc, 0x0040,
-+      0x1957, 0x1078, 0x1dd3, 0x0040, 0x195d, 0x0078, 0x15b0, 0x1078,
-+      0x1dc7, 0x0040, 0x195d, 0x0078, 0x15b0, 0x73c8, 0x72cc, 0x77c6,
-+      0x73ca, 0x72ce, 0x1078, 0x1f20, 0x00c0, 0x1987, 0x6818, 0xa005,
-+      0x0040, 0x1981, 0x2708, 0x077e, 0x1078, 0x2ab0, 0x077f, 0x00c0,
-+      0x1981, 0x2001, 0x0015, 0xd7fc, 0x00c0, 0x197a, 0x2061, 0x6040,
-+      0x0078, 0x197d, 0xc0fd, 0x2061, 0x6080, 0x7822, 0x2091, 0x8001,
-+      0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15b0, 0x2091,
-+      0x8001, 0x0078, 0x15ae, 0x2138, 0x780c, 0xd0e4, 0x00c0, 0x199f,
-+      0xd7fc, 0x0040, 0x1999, 0x1078, 0x1dd3, 0x0040, 0x199f, 0x0078,
-+      0x15b0, 0x1078, 0x1dc7, 0x0040, 0x199f, 0x0078, 0x15b0, 0x77c6,
-+      0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000,
-+      0x1078, 0x1e83, 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x19b3, 0x2061,
-+      0x6040, 0x0078, 0x19b6, 0x2061, 0x6080, 0xc1fd, 0x606b, 0x0003,
-+      0x6083, 0x0000, 0x677a, 0x6087, 0x000f, 0x7922, 0x61f0, 0xc1dc,
-+      0x61f2, 0x1078, 0x2852, 0x2091, 0x8001, 0x007c, 0x77c8, 0x77ca,
-+      0x2138, 0x77c6, 0x780c, 0xd0e4, 0x00c0, 0x19dd, 0xd7fc, 0x0040,
-+      0x19d7, 0x1078, 0x1dd3, 0x0040, 0x19dd, 0x0078, 0x15b0, 0x1078,
-+      0x1dc7, 0x0040, 0x19dd, 0x0078, 0x15b0, 0xa7bc, 0xff00, 0x2091,
-+      0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x19ea, 0x2061, 0x6040,
-+      0x0078, 0x19ed, 0x2061, 0x6080, 0xc1fd, 0x6083, 0x0000, 0x606b,
-+      0x0002, 0x677a, 0x6087, 0x000f, 0x7922, 0x61f0, 0xc1dc, 0x61f2,
-+      0x1078, 0x2852, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010,
-+      0x70c8, 0xa005, 0x0040, 0x1a07, 0x60f0, 0xc0fd, 0x60f2, 0x1078,
-+      0x1e83, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1a07,
-+      0x2091, 0x8001, 0x007c, 0x2019, 0x0000, 0x2011, 0x0000, 0x7808,
-+      0xd0ec, 0x00c0, 0x1a2f, 0x72c8, 0x780c, 0xd0e4, 0x00c0, 0x1a2f,
-+      0xd284, 0x0040, 0x1a29, 0x1078, 0x1dd3, 0x0040, 0x1a2f, 0x0078,
-+      0x15b0, 0x1078, 0x1dc7, 0x0040, 0x1a2f, 0x0078, 0x15b0, 0x72ca,
-+      0x78b0, 0xa084, 0x0003, 0x00c0, 0x1a59, 0x2039, 0x0000, 0xd284,
-+      0x0040, 0x1a3b, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-+      0x0008, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d,
-+      0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1a41,
-+      0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0,
-+      0x1a41, 0x2091, 0x8000, 0x7808, 0xd0ec, 0x0040, 0x1a63, 0x2069,
-+      0x0100, 0x0078, 0x1a6d, 0x72c8, 0xd284, 0x00c0, 0x1a6b, 0x2069,
-+      0x0200, 0x0078, 0x1a6d, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd,
-+      0x680a, 0x6830, 0xa084, 0x0040, 0x0040, 0x1a90, 0x684b, 0x0004,
-+      0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x1a81, 0x00f0,
-+      0x1a7a, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001,
-+      0x0040, 0x1a8c, 0x00f0, 0x1a85, 0x20a9, 0x00fa, 0x00f0, 0x1a8e,
-+      0x2079, 0x6000, 0x2009, 0x0018, 0x7808, 0xd0ec, 0x00c0, 0x1a9c,
-+      0x72c8, 0xd284, 0x00c0, 0x1aa0, 0x2061, 0x6040, 0x0078, 0x1aa3,
-+      0x2061, 0x6080, 0xc1fd, 0x6083, 0x0000, 0x7922, 0x606b, 0x0001,
-+      0x6087, 0x000f, 0x60c3, 0x0000, 0x60c4, 0x60ce, 0x60d2, 0x60f0,
-+      0xd0b4, 0x0040, 0x1abf, 0xc0b4, 0x60f2, 0x0c7e, 0x60d4, 0xa065,
-+      0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x60f0,
-+      0xa084, 0x77ff, 0x60f2, 0x78b0, 0xa085, 0x0002, 0x78b2, 0x83ff,
-+      0x0040, 0x1acb, 0x007c, 0x681b, 0x0048, 0x2091, 0x8001, 0x007c,
-+      0x73cc, 0x1078, 0x1a15, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a,
-+      0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff,
-+      0x00f0, 0x1ae0, 0x8421, 0x00c0, 0x1ade, 0x8319, 0x00c0, 0x1adc,
-+      0x69ee, 0x6a4a, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1af4,
-+      0x2069, 0x6040, 0x0078, 0x1af6, 0x2069, 0x6080, 0x71c4, 0x71c6,
-+      0x6912, 0x81ff, 0x00c0, 0x1afe, 0x68c3, 0x0001, 0x78b0, 0xa084,
-+      0xfffd, 0x78b2, 0xa084, 0x0001, 0x00c0, 0x1b08, 0x1078, 0x1f79,
-+      0x007c, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1b12, 0x2029,
-+      0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce,
-+      0x2079, 0x6000, 0x7de2, 0x7cde, 0x7bda, 0x7ad6, 0x1078, 0x1e25,
-+      0x0040, 0x1c14, 0x20a9, 0x0005, 0x20a1, 0x6012, 0x2091, 0x8000,
-+      0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x1078, 0x21f4, 0x0040,
-+      0x1b35, 0x1078, 0x1e43, 0x0078, 0x1c14, 0x6004, 0xa08c, 0x00ff,
-+      0xa18e, 0x0009, 0x00c0, 0x1b40, 0x007e, 0x1078, 0x2750, 0x007f,
-+      0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x1bb3, 0x0c7e, 0x2c68,
-+      0x1078, 0x1e25, 0x0040, 0x1b86, 0x2c00, 0x689e, 0x8109, 0x00c0,
-+      0x1b47, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7de0, 0x7cdc, 0x7bd8,
-+      0x7ad4, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+      0x0000, 0x7de2, 0x7cde, 0x7bda, 0x7ad6, 0x2c68, 0x689c, 0xa065,
-+      0x0040, 0x1bb2, 0x2009, 0x0040, 0x1078, 0x21f4, 0x00c0, 0x1b9c,
-+      0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x1b86, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x000a, 0x00c0, 0x1b82, 0x017e, 0x1078,
-+      0x274c, 0x017f, 0x2d00, 0x6002, 0x0078, 0x1b55, 0x0c7f, 0x0c7e,
-+      0x609c, 0x1078, 0x1edb, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c18,
-+      0x2009, 0x000c, 0x6008, 0xa085, 0x0200, 0x600a, 0x1078, 0x1ddf,
-+      0x1078, 0x1e43, 0x0078, 0x1c14, 0x0c7f, 0x0c7e, 0x609c, 0x1078,
-+      0x1edb, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c18, 0x2009, 0x000c,
-+      0x6007, 0x0103, 0x601b, 0x0003, 0x1078, 0x1ddf, 0x1078, 0x1e43,
-+      0x0078, 0x1c14, 0x0c7f, 0x780c, 0xd0e4, 0x00c0, 0x1bd8, 0x6114,
-+      0xd1fc, 0x0040, 0x1bc1, 0x1078, 0x1dd3, 0x0040, 0x1bd8, 0x0078,
-+      0x1bc5, 0x1078, 0x1dc7, 0x0040, 0x1bd8, 0x2029, 0x0000, 0x2520,
-+      0x2009, 0x0018, 0x73c8, 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021,
-+      0x1078, 0x1ddf, 0x1078, 0x1e43, 0x2001, 0x4007, 0x0078, 0x15b0,
-+      0x74c4, 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009,
-+      0x0012, 0xd0fc, 0x00c0, 0x1be8, 0x2071, 0x6040, 0x0078, 0x1beb,
-+      0x2071, 0x6080, 0xc1fd, 0x7922, 0x706b, 0x0005, 0x71f0, 0xc1dc,
-+      0x71f2, 0x736e, 0x7272, 0x7476, 0x707a, 0x707f, 0x0000, 0x2c00,
-+      0x7082, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0x0060, 0x0040,
-+      0x1c03, 0x1078, 0x564a, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa,
-+      0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000, 0x1078,
-+      0x2852, 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x15b1,
-+      0x20a9, 0x0005, 0x2099, 0x6012, 0x2091, 0x8000, 0x530a, 0x2091,
-+      0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9,
-+      0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7916, 0x0078, 0x15ae,
-+      0x71c4, 0x71c6, 0x2168, 0x0078, 0x1c37, 0x2069, 0x1000, 0x690c,
-+      0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1c39, 0xa285,
-+      0x0000, 0x00c0, 0x1c47, 0x70c3, 0x4000, 0x0078, 0x1c49, 0x70c3,
-+      0x4003, 0x70ca, 0x0078, 0x15b1, 0x2011, 0x6064, 0xa03e, 0x7908,
-+      0xd1ec, 0x00c0, 0x1c6a, 0x77c8, 0xd7fc, 0x0040, 0x1c59, 0x2011,
-+      0x60a4, 0x220c, 0x007e, 0x037e, 0x047e, 0x1078, 0x482c, 0x70c4,
-+      0xd0fc, 0x047f, 0x037f, 0x007f, 0x00c0, 0x1c6a, 0xa184, 0x7fff,
-+      0x0078, 0x1c6e, 0x1078, 0x480c, 0xa185, 0x8000, 0x2012, 0x2710,
-+      0x0078, 0x15ac, 0x017e, 0x2100, 0xc1fc, 0x1078, 0x47fa, 0x017f,
-+      0xd1fc, 0x00c0, 0x1c7f, 0x2001, 0x6064, 0x0078, 0x1c81, 0x2001,
-+      0x60a4, 0x2004, 0xa084, 0x8000, 0x6100, 0xa10d, 0x6204, 0x6308,
-+      0x0078, 0x15ab, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2091, 0x8000,
-+      0x2061, 0x0010, 0x60c4, 0xd0fc, 0x00c0, 0x1ca8, 0x2071, 0x6040,
-+      0x7808, 0xd0ec, 0x0040, 0x1ca2, 0x2079, 0x0100, 0x2019, 0x0020,
-+      0x0078, 0x1cae, 0x2079, 0x0200, 0x2019, 0x0050, 0x0078, 0x1cae,
-+      0x2071, 0x6080, 0x2079, 0x0100, 0x2019, 0x0020, 0x7094, 0xa06d,
-+      0x0040, 0x1d66, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0007, 0x0040,
-+      0x1cbd, 0xa286, 0x000f, 0x00c0, 0x1d66, 0x691c, 0xa184, 0x00c0,
-+      0x0040, 0x1d66, 0xa186, 0x00c0, 0x0040, 0x1d66, 0x6824, 0xa084,
-+      0xff00, 0xa085, 0x0019, 0x6826, 0x2368, 0x7830, 0xa084, 0x0040,
-+      0x00c0, 0x1ccd, 0xa184, 0x0080, 0x00c0, 0x1d36, 0x78e4, 0xa084,
-+      0x0007, 0x8001, 0x00c0, 0x1cd6, 0x71a4, 0x81ff, 0x0040, 0x1cec,
-+      0x6807, 0x0010, 0x6908, 0x6808, 0xa106, 0x00c0, 0x1ce2, 0x6804,
-+      0xa084, 0x0010, 0x00c0, 0x1ce7, 0x78b8, 0xa084, 0x801f, 0x00c0,
-+      0x1cec, 0x7848, 0xa085, 0x000c, 0x784a, 0x71a4, 0x81ff, 0x0040,
-+      0x1d0b, 0x70a7, 0x0000, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008,
-+      0x00c0, 0x1cfd, 0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0,
-+      0x1d04, 0x6807, 0x0002, 0x61c4, 0xa18c, 0x0003, 0x0040, 0x1d61,
-+      0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce, 0x7848, 0xa084, 0x000c,
-+      0x00c0, 0x1d15, 0x0e7e, 0x2071, 0x6000, 0x724e, 0x7352, 0xae80,
-+      0x0013, 0x0e7f, 0x1078, 0x54f9, 0x78a3, 0x0000, 0x7858, 0xa084,
-+      0xedff, 0x785a, 0x70a8, 0xa080, 0x00d9, 0x781a, 0x0f7f, 0x0e7f,
-+      0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x0078, 0x15ae, 0x78e4, 0xa084,
-+      0x0007, 0x00c0, 0x1d36, 0x78b8, 0xa084, 0x801f, 0x00c0, 0x1d3b,
-+      0x7848, 0xa085, 0x000c, 0x784a, 0x7848, 0xa084, 0x000c, 0x00c0,
-+      0x1d44, 0x71a4, 0x81ff, 0x0040, 0x1d61, 0x6807, 0x0010, 0x70a7,
-+      0x0000, 0x6807, 0x0018, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1d53,
-+      0x6807, 0x0008, 0x6804, 0xa084, 0x0008, 0x00c0, 0x1d5a, 0x6807,
-+      0x0002, 0x70a8, 0xa080, 0x00a7, 0x0078, 0x1d2d, 0x0f7f, 0x0e7f,
-+      0x0d7f, 0x0c7f, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x15b0,
-+      0x795c, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15a6, 0x795e,
-+      0x0078, 0x15ae, 0x795c, 0x71c6, 0x0078, 0x15ae, 0x7900, 0x71c6,
-+      0x71c4, 0x7902, 0x0078, 0x15ae, 0x7900, 0x71c6, 0x0078, 0x15ae,
-+      0x7904, 0x70c4, 0x7806, 0x0078, 0x15ad, 0x7804, 0x70c6, 0x0078,
-+      0x15ae, 0xd1fc, 0x00c0, 0x1d98, 0x2011, 0x64c0, 0x0078, 0x1d9a,
-+      0x2011, 0x6540, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1da9, 0x2011, 0x0001, 0x0078,
-+      0x1dab, 0x2011, 0x0000, 0x6b0c, 0x6800, 0x70da, 0x0078, 0x15ab,
-+      0x780c, 0xd0f4, 0x0040, 0x1dbb, 0x2001, 0x4007, 0x70db, 0x0000,
-+      0xa005, 0x0078, 0x1dc6, 0xd0fc, 0x0040, 0x1dc5, 0x2001, 0x4007,
-+      0x70db, 0x0001, 0xa005, 0x0078, 0x1dc6, 0xa006, 0x007c, 0x780c,
-+      0xd0f4, 0x0040, 0x1dd1, 0x2001, 0x4007, 0x70db, 0x0000, 0x0078,
-+      0x1dd2, 0xa006, 0x007c, 0x780c, 0xd0fc, 0x0040, 0x1ddd, 0x2001,
-+      0x4007, 0x70db, 0x0001, 0x0078, 0x1dde, 0xa006, 0x007c, 0xac80,
-+      0x0001, 0x1078, 0x205e, 0x007c, 0x7112, 0x7003, 0x0001, 0x7007,
-+      0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0,
-+      0x7008, 0xd0fc, 0x0040, 0x1df0, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+      0x00c0, 0x1e20, 0x53a5, 0x7888, 0xa005, 0x0040, 0x1e1f, 0x1078,
-+      0x1e25, 0x0040, 0x1e0d, 0x2c00, 0x788e, 0x20a9, 0x0020, 0xac80,
-+      0x0001, 0x20a0, 0x53a5, 0x0078, 0x1e1f, 0x788b, 0x0000, 0x7218,
-+      0x731c, 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3,
-+      0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e, 0x7422, 0x7526, 0xa006,
-+      0x7003, 0x0000, 0x7007, 0x0004, 0x007c, 0x2091, 0x8000, 0x7840,
-+      0xa065, 0x0040, 0x1e2f, 0x2c04, 0x7842, 0x2063, 0x0000, 0x2091,
-+      0x8001, 0x007c, 0x0f7e, 0x2079, 0x6000, 0x7840, 0xa06d, 0x0040,
-+      0x1e41, 0x2d04, 0x7842, 0x6803, 0x0000, 0x6807, 0x0000, 0x680b,
-+      0x0000, 0x0f7f, 0x007c, 0x2091, 0x8000, 0x0f7e, 0x2079, 0x6000,
-+      0x7840, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1e50, 0x1078, 0x2bfa,
-+      0x7842, 0x0f7f, 0x2091, 0x8001, 0x007c, 0x0f7e, 0x2079, 0x6000,
-+      0x7840, 0x206a, 0x2d00, 0x7842, 0x0f7f, 0x007c, 0x2011, 0xac00,
-+      0x7a42, 0x7bc8, 0x8319, 0x0040, 0x1e6b, 0xa280, 0x0037, 0x2012,
-+      0x2010, 0x0078, 0x1e62, 0x2013, 0x0000, 0x007c, 0x017e, 0x2069,
-+      0x85c0, 0xd7fc, 0x00c0, 0x1e76, 0x2069, 0x65c0, 0xa784, 0x0f00,
-+      0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+      0xad68, 0x017f, 0x007c, 0x1078, 0x1e6e, 0x2900, 0x682a, 0x2a00,
-+      0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, 0x690a, 0x0e7e, 0xd7fc,
-+      0x00c0, 0x1e98, 0x2009, 0x6054, 0x2071, 0x6040, 0x0078, 0x1e9c,
-+      0x2009, 0x6094, 0x2071, 0x6080, 0x210c, 0x6804, 0xa005, 0x0040,
-+      0x1eac, 0xa116, 0x00c0, 0x1eac, 0x2060, 0x6000, 0x6806, 0x017e,
-+      0x200b, 0x0000, 0x0078, 0x1eaf, 0x2009, 0x0000, 0x017e, 0x6804,
-+      0xa065, 0x0040, 0x1ebe, 0x6000, 0x6806, 0x1078, 0x1ef5, 0x1078,
-+      0x2240, 0x6810, 0x8001, 0x6812, 0x00c0, 0x1eaf, 0x017f, 0x6902,
-+      0x6906, 0x2d00, 0x2060, 0x1078, 0x2d8b, 0x0e7f, 0x007c, 0xa065,
-+      0x0040, 0x1eda, 0x2008, 0x609c, 0xa005, 0x0040, 0x1ed5, 0x2062,
-+      0x609f, 0x0000, 0xa065, 0x0078, 0x1ecb, 0x2079, 0x6000, 0x7840,
-+      0x7942, 0x2062, 0x007c, 0xa065, 0x0040, 0x1ef4, 0x2008, 0x609c,
-+      0xa005, 0x0040, 0x1ee9, 0x2062, 0x609f, 0x0000, 0xa065, 0x0078,
-+      0x1edf, 0x0f7e, 0x2079, 0x6000, 0x2091, 0x8000, 0x7840, 0x7942,
-+      0x0f7f, 0x2062, 0x2091, 0x8001, 0x007c, 0x6007, 0x0103, 0x608f,
-+      0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000,
-+      0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc,
-+      0x00c0, 0x1f10, 0x2071, 0x6040, 0x2031, 0x60c0, 0x0078, 0x1f14,
-+      0x2071, 0x6080, 0x2031, 0x62c0, 0x7054, 0xa08c, 0x0200, 0x00c0,
-+      0x1f1e, 0xa608, 0x2d0a, 0x8000, 0x7056, 0xa006, 0x0e7f, 0x007c,
-+      0x0f7e, 0xd7fc, 0x00c0, 0x1f28, 0x2079, 0x6040, 0x0078, 0x1f2a,
-+      0x2079, 0x6080, 0x1078, 0x1e6e, 0x2091, 0x8000, 0x6804, 0x7806,
-+      0xa065, 0x0040, 0x1f77, 0x0078, 0x1f3b, 0x2c00, 0x7806, 0x6000,
-+      0xa065, 0x0040, 0x1f77, 0x6010, 0xa306, 0x00c0, 0x1f35, 0x600c,
-+      0xa206, 0x00c0, 0x1f35, 0x2c28, 0x7850, 0xac06, 0x00c0, 0x1f4a,
-+      0x0078, 0x1f74, 0x6804, 0xac06, 0x00c0, 0x1f58, 0x6000, 0x2060,
-+      0x6806, 0xa005, 0x00c0, 0x1f58, 0x6803, 0x0000, 0x0078, 0x1f62,
-+      0x6400, 0x7804, 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1f62,
-+      0x2c00, 0x6802, 0x2560, 0x0f7f, 0x1078, 0x1ef5, 0x0f7e, 0x601b,
-+      0x0005, 0x6023, 0x0020, 0x0f7f, 0x1078, 0x2240, 0x0f7e, 0x6810,
-+      0x8001, 0x1050, 0x2bfa, 0x6812, 0xa085, 0xffff, 0xa005, 0x0f7f,
-+      0x007c, 0x077e, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0040, 0x1f81,
-+      0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x2091,
-+      0x8000, 0x1078, 0x1e83, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1f89,
-+      0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0,
-+      0x1f89, 0x2091, 0x8001, 0x077f, 0x007c, 0x2061, 0x0000, 0x6018,
-+      0xa084, 0x0001, 0x00c0, 0x1fbe, 0x7808, 0xd08c, 0x0040, 0x1faf,
-+      0xc08c, 0x780a, 0xc7fc, 0x2069, 0x6040, 0x0078, 0x1fb4, 0xc08d,
-+      0x780a, 0x2069, 0x6080, 0xc7fd, 0x2091, 0x8000, 0x6818, 0x681b,
-+      0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1fbf, 0x007c, 0xa08c,
-+      0xfff0, 0x0040, 0x1fc5, 0x1078, 0x2bfa, 0x0079, 0x1fc7, 0x1fd7,
-+      0x1fda, 0x1fe0, 0x1fe4, 0x1fd8, 0x1fe8, 0x1fee, 0x1fd8, 0x1fd8,
-+      0x2193, 0x21c4, 0x21c8, 0x21ce, 0x1fd8, 0x1fd8, 0x1fd8, 0x007c,
-+      0x1078, 0x2bfa, 0x1078, 0x1f79, 0x2001, 0x8001, 0x0078, 0x21e3,
-+      0x2001, 0x8003, 0x0078, 0x21e3, 0x2001, 0x8004, 0x0078, 0x21e3,
-+      0x1078, 0x1f79, 0x2001, 0x8006, 0x0078, 0x21e3, 0x2001, 0x8007,
-+      0x0078, 0x21e3, 0x2030, 0x2138, 0xa782, 0x0021, 0x0048, 0x1ffa,
-+      0x2009, 0x0020, 0x2600, 0x1078, 0x2014, 0x00c0, 0x2013, 0xa7ba,
-+      0x0020, 0x0048, 0x2012, 0x0040, 0x2012, 0x2708, 0xa6b0, 0x0020,
-+      0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+      0x0078, 0x1ff4, 0xa006, 0x007c, 0x81ff, 0x0040, 0x2039, 0x2099,
-+      0x0030, 0x20a0, 0x700c, 0xa084, 0x03ff, 0x0040, 0x2026, 0x7007,
-+      0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x2021, 0x21a8, 0x810b,
-+      0x7112, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x00c8,
-+      0x202d, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x2039, 0x53a5,
-+      0xa006, 0x7003, 0x0000, 0x007c, 0x2030, 0x2138, 0xa782, 0x0021,
-+      0x0048, 0x2044, 0x2009, 0x0020, 0x2600, 0x1078, 0x205e, 0x00c0,
-+      0x205d, 0xa7ba, 0x0020, 0x0048, 0x205c, 0x0040, 0x205c, 0x2708,
-+      0xa6b0, 0x0020, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000,
-+      0xa5a9, 0x0000, 0x0078, 0x203e, 0xa006, 0x007c, 0x81ff, 0x0040,
-+      0x2096, 0x2098, 0x20a1, 0x0030, 0x700c, 0xa084, 0x03ff, 0x0040,
-+      0x2069, 0x21a8, 0x810b, 0x7112, 0x7018, 0x007e, 0x701c, 0x007e,
-+      0x7020, 0x007e, 0x7024, 0x007e, 0x721a, 0x731e, 0x7422, 0x7526,
-+      0x7003, 0x0000, 0x53a6, 0x7007, 0x0001, 0x7010, 0xa084, 0xf000,
-+      0x0040, 0x2086, 0x7007, 0x0008, 0x0078, 0x208a, 0x7108, 0x8103,
-+      0x00c8, 0x207d, 0x007f, 0x7026, 0x007f, 0x7022, 0x007f, 0x701e,
-+      0x007f, 0x701a, 0x7007, 0x0002, 0xa184, 0x01e0, 0x7003, 0x0000,
-+      0x7007, 0x0004, 0x007c, 0x0e7e, 0x6914, 0xd1fc, 0x0040, 0x20a4,
-+      0x2071, 0x6080, 0x0078, 0x20a6, 0x2071, 0x6040, 0x2d08, 0x70b4,
-+      0x6802, 0xa005, 0x00c0, 0x20ad, 0x71ba, 0x71b6, 0x0e7f, 0x007c,
-+      0x0f7e, 0x6114, 0xd1fc, 0x0040, 0x20b9, 0x2079, 0x6080, 0x0078,
-+      0x20bb, 0x2079, 0x6040, 0x2c08, 0x78b4, 0x6002, 0xa005, 0x00c0,
-+      0x20c2, 0x79ba, 0x79b6, 0x0f7f, 0x007c, 0x2091, 0x8000, 0x0f7e,
-+      0x6114, 0xd1fc, 0x0040, 0x20d0, 0x2079, 0x6080, 0x0078, 0x20d2,
-+      0x2079, 0x6040, 0x6003, 0x0000, 0x2c08, 0x78b8, 0xa065, 0x00c0,
-+      0x20dc, 0x79b6, 0x0078, 0x20dd, 0x6102, 0x79ba, 0x0f7f, 0x2091,
-+      0x8001, 0x1078, 0x2885, 0x007c, 0x70b4, 0xa06d, 0x0040, 0x20ef,
-+      0x6800, 0x70b6, 0xa005, 0x00c0, 0x20ee, 0x70ba, 0x8dff, 0x007c,
-+      0x0d7e, 0x0c7e, 0x0f7e, 0xd3fc, 0x0040, 0x20fa, 0x2079, 0x6080,
-+      0x0078, 0x20fc, 0x2079, 0x6040, 0xaf80, 0x002d, 0x2060, 0x6000,
-+      0xa005, 0x0040, 0x2125, 0x2068, 0x6814, 0xa306, 0x00c0, 0x210e,
-+      0x6828, 0xa084, 0x00ff, 0xa406, 0x0040, 0x2111, 0x2d60, 0x0078,
-+      0x20ff, 0x6800, 0xa005, 0x6002, 0x00c0, 0x211d, 0xaf80, 0x002d,
-+      0xac06, 0x0040, 0x211c, 0x2c00, 0x78ba, 0x0d7e, 0x689c, 0xa005,
-+      0x0040, 0x2124, 0x1078, 0x1ec7, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f,
-+      0xa005, 0x007c, 0x0d7e, 0x0c7e, 0x0f7e, 0xd0fc, 0x0040, 0x2134,
-+      0x2079, 0x6080, 0x0078, 0x2136, 0x2079, 0x6040, 0xaf80, 0x002d,
-+      0x2060, 0x6000, 0xa005, 0x0040, 0x215b, 0x2068, 0x6814, 0xa084,
-+      0x00ff, 0xa306, 0x0040, 0x2147, 0x2d60, 0x0078, 0x2139, 0x6800,
-+      0xa005, 0x6002, 0x00c0, 0x2153, 0xaf80, 0x002d, 0xac06, 0x0040,
-+      0x2152, 0x2c00, 0x78ba, 0x0d7e, 0x689c, 0xa005, 0x0040, 0x215a,
-+      0x1078, 0x1ec7, 0x007f, 0x0f7f, 0x0c7f, 0x0d7f, 0xa005, 0x007c,
-+      0x0d7e, 0x0c7e, 0x0f7e, 0xd3fc, 0x0040, 0x216a, 0x2079, 0x6080,
-+      0x0078, 0x216c, 0x2079, 0x6040, 0xaf80, 0x002d, 0x2060, 0x6000,
-+      0xa06d, 0x0040, 0x218e, 0x6814, 0xa306, 0x0040, 0x217a, 0x2d60,
-+      0x0078, 0x216f, 0x6800, 0xa005, 0x6002, 0x00c0, 0x2186, 0xaf80,
-+      0x002d, 0xac06, 0x0040, 0x2185, 0x2c00, 0x78ba, 0x0d7e, 0x689c,
-+      0xa005, 0x0040, 0x218d, 0x1078, 0x1ec7, 0x007f, 0x0f7f, 0x0c7f,
-+      0x0d7f, 0xa005, 0x007c, 0x2091, 0x8000, 0xd7fc, 0x00c0, 0x219c,
-+      0x2069, 0x6040, 0x0078, 0x219e, 0x2069, 0x6080, 0x6800, 0xa086,
-+      0x0000, 0x0040, 0x21a8, 0x2091, 0x8001, 0x681b, 0x0009, 0x007c,
-+      0x6878, 0xd7fc, 0x00c0, 0x21ae, 0x0078, 0x21af, 0xc0fd, 0xa0bc,
-+      0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078,
-+      0x1e83, 0x8738, 0xa784, 0x001f, 0x00c0, 0x21b7, 0x2091, 0x8001,
-+      0x2001, 0x800a, 0x0078, 0x21e3, 0x2001, 0x800c, 0x0078, 0x21e3,
-+      0x1078, 0x1f79, 0x2001, 0x800d, 0x0078, 0x21e3, 0x780c, 0xd0e4,
-+      0x00c0, 0x21e1, 0xd0ec, 0x0040, 0x21db, 0xd7fc, 0x0040, 0x21db,
-+      0x78e8, 0x0078, 0x21dc, 0x78e4, 0x70c6, 0x2001, 0x800e, 0x0078,
-+      0x21e3, 0x0078, 0x1fd8, 0x70c2, 0xd7fc, 0x00c0, 0x21eb, 0x70db,
-+      0x0000, 0x0078, 0x21ed, 0x70db, 0x0001, 0x2061, 0x0000, 0x601b,
-+      0x0001, 0x2091, 0x4080, 0x007c, 0xac80, 0x0001, 0x81ff, 0x0040,
-+      0x221f, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x03ff, 0x0040,
-+      0x2201, 0x7018, 0x007e, 0x701c, 0x007e, 0x7020, 0x007e, 0x7024,
-+      0x007e, 0x7112, 0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003,
-+      0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x00c8, 0x2213, 0x7007,
-+      0x0002, 0xa08c, 0x01e0, 0x00c0, 0x221f, 0x53a5, 0xa006, 0x7003,
-+      0x0000, 0x7007, 0x0004, 0x007f, 0x7026, 0x007f, 0x7022, 0x007f,
-+      0x701e, 0x007f, 0x701a, 0x007c, 0x2011, 0x0020, 0x2009, 0x0010,
-+      0x6b0a, 0x6c0e, 0x6803, 0xfd00, 0x6807, 0x0018, 0x6a1a, 0x2d00,
-+      0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109, 0x00c0, 0x2230, 0x007c,
-+      0x6004, 0x2c08, 0x2063, 0x0000, 0x7860, 0x8000, 0x7862, 0x7864,
-+      0xa005, 0x7966, 0x0040, 0x224f, 0x2c02, 0x0078, 0x2250, 0x796a,
-+      0x007c, 0x6807, 0x0103, 0x0c7e, 0x2061, 0x6000, 0x2d08, 0x206b,
-+      0x0000, 0x6060, 0x8000, 0x6062, 0x6064, 0xa005, 0x6166, 0x0040,
-+      0x2264, 0x2d02, 0x0078, 0x2265, 0x616a, 0x0c7f, 0x007c, 0x2091,
-+      0x8000, 0x7860, 0x8001, 0x7862, 0x2c04, 0x786a, 0xa005, 0x00c0,
-+      0x2272, 0x7866, 0x2091, 0x8001, 0x609c, 0xa005, 0x0040, 0x228f,
-+      0x0c7e, 0x2060, 0x2008, 0x609c, 0xa005, 0x0040, 0x2287, 0x2062,
-+      0x609f, 0x0000, 0xa065, 0x609c, 0xa005, 0x00c0, 0x227f, 0x2091,
-+      0x8000, 0x7840, 0x7942, 0x2062, 0x2091, 0x8001, 0x0c7f, 0x2091,
-+      0x8000, 0x7840, 0x2062, 0x609f, 0x0000, 0x2c00, 0xa005, 0x00c0,
-+      0x229b, 0x1078, 0x2bfa, 0x7842, 0x2091, 0x8001, 0x007c, 0x7868,
-+      0xa065, 0x0040, 0x22b1, 0x2091, 0x8000, 0x7860, 0x8001, 0x7862,
-+      0x2c04, 0x786a, 0xa005, 0x00c0, 0x22af, 0x7866, 0x8000, 0x2091,
-+      0x8001, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e,
-+      0x00c8, 0x22bb, 0xa200, 0x00f0, 0x22b6, 0x8086, 0x818e, 0x007c,
-+      0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x22e1, 0xa11a, 0x00c8,
-+      0x22e1, 0x8213, 0x818d, 0x0048, 0x22d4, 0xa11a, 0x00c8, 0x22d5,
-+      0x00f0, 0x22c9, 0x0078, 0x22d9, 0xa11a, 0x2308, 0x8210, 0x00f0,
-+      0x22c9, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f,
-+      0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x22dd, 0x7d70,
-+      0x70d0, 0xa506, 0x0040, 0x237c, 0x7808, 0xd0ec, 0x0040, 0x2304,
-+      0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0,
-+      0x2301, 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040, 0x2304, 0x0078,
-+      0x237c, 0x0e7f, 0x0078, 0x237c, 0x1078, 0x1e25, 0x0040, 0x237c,
-+      0x796c, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x2313,
-+      0xa006, 0x0078, 0x231b, 0x72d0, 0xa206, 0x0040, 0x231b, 0x788b,
-+      0x0001, 0x2009, 0x0080, 0x0c7e, 0x1078, 0x1de4, 0x0c7f, 0x0040,
-+      0x2364, 0x1078, 0x1e43, 0x788b, 0x0000, 0x7884, 0x8000, 0x7886,
-+      0xa086, 0x0002, 0x0040, 0x2342, 0x8507, 0x8004, 0x8004, 0x7978,
-+      0xa108, 0x711a, 0x00c8, 0x2340, 0x7974, 0xa189, 0x0000, 0x711e,
-+      0x7980, 0xa189, 0x0000, 0x7122, 0x797c, 0xa189, 0x0000, 0x7126,
-+      0x0078, 0x237c, 0x6014, 0xd0fc, 0x00c0, 0x234a, 0x2069, 0x6040,
-+      0x0078, 0x234c, 0x2069, 0x6080, 0x2091, 0x8000, 0x681b, 0x0002,
-+      0x7888, 0xa005, 0x0040, 0x235a, 0x788b, 0x0000, 0x788c, 0x2060,
-+      0x0078, 0x2342, 0x7887, 0x0000, 0x78b0, 0xa085, 0x0003, 0x78b2,
-+      0x2091, 0x8001, 0x0078, 0x237c, 0x7887, 0x0000, 0x1078, 0x2721,
-+      0x6004, 0xa084, 0x000f, 0x1078, 0x237d, 0x7888, 0xa005, 0x0040,
-+      0x2378, 0x788c, 0x2060, 0x6004, 0xa084, 0x000f, 0x1078, 0x237d,
-+      0x788b, 0x0000, 0x0078, 0x22e7, 0x007c, 0x0079, 0x237f, 0x238f,
-+      0x23ad, 0x23cd, 0x238f, 0x23ea, 0x239e, 0x2564, 0x257b, 0x238f,
-+      0x23ab, 0x23cb, 0x2434, 0x24aa, 0x2502, 0x2514, 0x257b, 0x2039,
-+      0x0400, 0x78c0, 0xa705, 0x78c2, 0x6008, 0xa705, 0x600a, 0x1078,
-+      0x25ff, 0x609c, 0x78be, 0x1078, 0x2709, 0x007c, 0x78c0, 0xa084,
-+      0x0100, 0x0040, 0x23a5, 0x0078, 0x238f, 0x601c, 0xa085, 0x0080,
-+      0x601e, 0x0078, 0x23b4, 0x1078, 0x2750, 0x78c0, 0xa084, 0x0100,
-+      0x0040, 0x23b4, 0x0078, 0x238f, 0x78c3, 0x0000, 0x6004, 0x8007,
-+      0xa084, 0x00ff, 0x78b6, 0x8001, 0x0040, 0x23c8, 0x1078, 0x25ff,
-+      0x0040, 0x23c8, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x0078, 0x23ca,
-+      0x0078, 0x261f, 0x007c, 0x1078, 0x274c, 0x78c0, 0xa08c, 0x0e00,
-+      0x00c0, 0x23d6, 0xa084, 0x0100, 0x00c0, 0x23d8, 0x0078, 0x238f,
-+      0x1078, 0x25ff, 0x00c0, 0x23e9, 0x6104, 0xa18c, 0x00ff, 0xa186,
-+      0x0007, 0x0040, 0x25c0, 0xa186, 0x000f, 0x0040, 0x25c0, 0x0078,
-+      0x261f, 0x007c, 0x78c0, 0xa084, 0x0100, 0x0040, 0x23f1, 0x0078,
-+      0x238f, 0x78c3, 0x0000, 0x6714, 0x1078, 0x1e6e, 0x2011, 0x0001,
-+      0x20a9, 0x0001, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x2416,
-+      0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001,
-+      0x0040, 0x2416, 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100,
-+      0xa08e, 0x0002, 0x0040, 0x2416, 0x0078, 0x2431, 0x157e, 0x1078,
-+      0x1e6e, 0x157f, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+      0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001,
-+      0x00f0, 0x241a, 0x8211, 0x0040, 0x2431, 0x20a9, 0x0100, 0x0078,
-+      0x241a, 0x1078, 0x1e43, 0x007c, 0x6114, 0x1078, 0x276d, 0x6900,
-+      0xa184, 0x0001, 0x0040, 0x244e, 0x6028, 0xa084, 0x00ff, 0x00c0,
-+      0x25df, 0x6800, 0xa084, 0x0001, 0x0040, 0x25e7, 0x6803, 0x0000,
-+      0x680b, 0x0000, 0x6807, 0x0000, 0x0078, 0x25ef, 0x2011, 0x0001,
-+      0x6020, 0xd0f4, 0x0040, 0x2456, 0xa295, 0x0002, 0xd0c4, 0x0040,
-+      0x245b, 0xa295, 0x0008, 0xd0cc, 0x0040, 0x2460, 0xa295, 0x0400,
-+      0x601c, 0xa084, 0x0002, 0x0040, 0x2467, 0xa295, 0x0004, 0x602c,
-+      0xa08c, 0x00ff, 0xa182, 0x0002, 0x0048, 0x25eb, 0xa182, 0x001b,
-+      0x00c8, 0x25eb, 0x0040, 0x25eb, 0x690e, 0x602c, 0x8007, 0xa08c,
-+      0x00ff, 0xa182, 0x0002, 0x0048, 0x25eb, 0xa182, 0x001b, 0x00c8,
-+      0x25eb, 0x0040, 0x25eb, 0x6912, 0x6134, 0xa184, 0x000f, 0x0040,
-+      0x2491, 0x8000, 0xd0a4, 0x0040, 0x248e, 0x8001, 0xa18c, 0xfff0,
-+      0xa10d, 0x6922, 0x6030, 0xa005, 0x00c0, 0x2498, 0x2001, 0x001e,
-+      0x8000, 0x6816, 0x6028, 0xa084, 0x00ff, 0x0040, 0x25e7, 0x6806,
-+      0x6028, 0x8007, 0xa084, 0x00ff, 0x0040, 0x25e7, 0x680a, 0x6a02,
-+      0x0078, 0x25ef, 0x6014, 0xd0fc, 0x00c0, 0x24b2, 0x2001, 0x6064,
-+      0x0078, 0x24b4, 0x2001, 0x60a4, 0x2004, 0xa084, 0x8000, 0x0040,
-+      0x25e7, 0x6114, 0x1078, 0x276d, 0x2091, 0x8000, 0x6a04, 0x6b08,
-+      0x6418, 0xa484, 0x0003, 0x0040, 0x24d8, 0x6128, 0xa18c, 0x00ff,
-+      0x8001, 0x00c0, 0x24d1, 0x2100, 0xa210, 0x0048, 0x24fe, 0x0078,
-+      0x24d8, 0x8001, 0x00c0, 0x24fe, 0x2100, 0xa212, 0x0048, 0x24fe,
-+      0xa484, 0x000c, 0x0040, 0x24f2, 0x6128, 0x810f, 0xa18c, 0x00ff,
-+      0xa082, 0x0004, 0x00c0, 0x24ea, 0x2100, 0xa318, 0x0048, 0x24fe,
-+      0x0078, 0x24f2, 0xa082, 0x0004, 0x00c0, 0x24fe, 0x2100, 0xa31a,
-+      0x0048, 0x24fe, 0x6030, 0xa005, 0x0040, 0x24f8, 0x8000, 0x6816,
-+      0x6a06, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x25ef, 0x2091, 0x8001,
-+      0x0078, 0x25eb, 0x6114, 0x1078, 0x276d, 0x2091, 0x8000, 0x6b08,
-+      0x8318, 0x0048, 0x2510, 0x6b0a, 0x2091, 0x8001, 0x0078, 0x25fd,
-+      0x2091, 0x8001, 0x0078, 0x25eb, 0x6024, 0x8007, 0xa084, 0x00ff,
-+      0x0040, 0x253a, 0xa086, 0x0080, 0x00c0, 0x2562, 0x20a9, 0x0008,
-+      0x6014, 0xd0fc, 0x00c0, 0x2528, 0x2069, 0xa7e0, 0x0078, 0x252a,
-+      0x2069, 0xa900, 0x2091, 0x8000, 0x6800, 0xa084, 0xfcff, 0x6802,
-+      0xade8, 0x0009, 0x0070, 0x2536, 0x0078, 0x252c, 0x2091, 0x8001,
-+      0x0078, 0x25ef, 0x6028, 0xa015, 0x0040, 0x2562, 0x6114, 0x1078,
-+      0x276d, 0x0d7e, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d,
-+      0x0040, 0x255f, 0xa206, 0x0040, 0x2550, 0x2168, 0x0078, 0x2546,
-+      0x0c7e, 0x2160, 0x6000, 0x6802, 0x1078, 0x1e43, 0x0c7f, 0x0d7f,
-+      0x6808, 0x8000, 0x680a, 0x2091, 0x8001, 0x0078, 0x25fd, 0x2091,
-+      0x8001, 0x0d7f, 0x0078, 0x25e7, 0x6114, 0x1078, 0x276d, 0x6800,
-+      0xa084, 0x0001, 0x0040, 0x25d7, 0x2091, 0x8000, 0x6a04, 0x8210,
-+      0x0048, 0x2577, 0x6a06, 0x2091, 0x8001, 0x0078, 0x25fd, 0x2091,
-+      0x8001, 0x0078, 0x25eb, 0x6114, 0x1078, 0x276d, 0x60ce, 0x60bb,
-+      0x0000, 0x6018, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa105,
-+      0x601a, 0x6900, 0xa184, 0x0008, 0x0040, 0x2592, 0x6020, 0xa085,
-+      0x0100, 0x6022, 0xa184, 0x0001, 0x0040, 0x25e7, 0xa184, 0x0100,
-+      0x00c0, 0x25d3, 0xa184, 0x0200, 0x00c0, 0x25cf, 0x681c, 0xa005,
-+      0x00c0, 0x25db, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000f, 0x00c0,
-+      0x25ab, 0x1078, 0x2750, 0x78c3, 0x0000, 0x6004, 0x8007, 0xa084,
-+      0x00ff, 0x78b6, 0x8001, 0x609f, 0x0000, 0x0040, 0x25c0, 0x1078,
-+      0x25ff, 0x0040, 0x25c0, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x007c,
-+      0x78bb, 0x0000, 0x78bf, 0x0000, 0x6024, 0xa084, 0xff00, 0x6026,
-+      0x1078, 0x4611, 0x00c0, 0x25cd, 0x007c, 0x0078, 0x20c5, 0x2009,
-+      0x0017, 0x0078, 0x25f1, 0x2009, 0x000e, 0x0078, 0x25f1, 0x2009,
-+      0x0007, 0x0078, 0x25f1, 0x2009, 0x0035, 0x0078, 0x25f1, 0x2009,
-+      0x003e, 0x0078, 0x25f1, 0x2009, 0x0004, 0x0078, 0x25f1, 0x2009,
-+      0x0006, 0x0078, 0x25f1, 0x2009, 0x0016, 0x0078, 0x25f1, 0x2009,
-+      0x0001, 0x6024, 0xa084, 0xff00, 0xa105, 0x6026, 0x2091, 0x8000,
-+      0x1078, 0x2240, 0x2091, 0x8001, 0x007c, 0x0078, 0x1e43, 0x609f,
-+      0x0000, 0x78b8, 0xa06d, 0x2c00, 0x78ba, 0x00c0, 0x260a, 0x78be,
-+      0x0078, 0x2612, 0x689e, 0x2d00, 0x6002, 0x78bc, 0xad06, 0x00c0,
-+      0x2612, 0x6002, 0x78b4, 0x8001, 0x78b6, 0x00c0, 0x261e, 0x78c0,
-+      0xa084, 0xfeff, 0x78c2, 0x78bc, 0x2060, 0xa006, 0x007c, 0x0e7e,
-+      0xa02e, 0x2530, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984,
-+      0xe1ff, 0x601e, 0xa984, 0x0060, 0x0040, 0x2630, 0x1078, 0x564a,
-+      0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x6080, 0xd7fc,
-+      0x00c0, 0x263c, 0x2071, 0x6040, 0xa784, 0x0f00, 0x800b, 0xa784,
-+      0x001f, 0x0040, 0x2647, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105,
-+      0x71e0, 0xa168, 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003,
-+      0x8003, 0x71e4, 0xa100, 0x60c6, 0x2091, 0x8000, 0x780c, 0xd0c4,
-+      0x0040, 0x266c, 0xd0ec, 0x0040, 0x2668, 0xd7fc, 0x00c0, 0x2665,
-+      0xd0f4, 0x00c0, 0x2673, 0x0078, 0x266c, 0xd0fc, 0x00c0, 0x2673,
-+      0x7808, 0xd0f4, 0x00c0, 0x2673, 0x6e08, 0xd684, 0x0040, 0x26a1,
-+      0xd9fc, 0x00c0, 0x26a1, 0x2091, 0x8001, 0x1078, 0x1ef5, 0x2091,
-+      0x8000, 0x1078, 0x2240, 0x2091, 0x8001, 0x78bb, 0x0000, 0x78bf,
-+      0x0000, 0x780c, 0xd0e4, 0x00c0, 0x2707, 0x780c, 0xd0c4, 0x0040,
-+      0x2707, 0xd0ec, 0x0040, 0x2699, 0xd7fc, 0x00c0, 0x2694, 0xd0f4,
-+      0x00c0, 0x269d, 0x0078, 0x2707, 0xd0fc, 0x00c0, 0x269d, 0x0078,
-+      0x2707, 0x7808, 0xd0f4, 0x0040, 0x2707, 0x601b, 0x0021, 0x0078,
-+      0x2707, 0x6024, 0xa096, 0x0001, 0x00c0, 0x26a8, 0x8000, 0x6026,
-+      0x6a10, 0x6814, 0xa202, 0x0048, 0x26b7, 0x0040, 0x26b7, 0x2091,
-+      0x8001, 0x2039, 0x0200, 0x1078, 0x2709, 0x0078, 0x2707, 0x2c08,
-+      0xd9fc, 0x0040, 0x26df, 0x6800, 0xa065, 0x0040, 0x26df, 0x6a04,
-+      0x7000, 0xa084, 0x0002, 0x0040, 0x26d5, 0x7050, 0xa206, 0x00c0,
-+      0x26d5, 0x6b04, 0x2160, 0x2304, 0x6002, 0xa005, 0x00c0, 0x26d1,
-+      0x6902, 0x2260, 0x6102, 0x0078, 0x26eb, 0x2d00, 0x2060, 0x1078,
-+      0x2d8b, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0078, 0x26eb, 0x6800,
-+      0x6902, 0xa065, 0x0040, 0x26e7, 0x6102, 0x0078, 0x26e8, 0x6906,
-+      0x2160, 0x6003, 0x0000, 0x2160, 0xd9fc, 0x0040, 0x26f6, 0xa6b4,
-+      0xffdc, 0x6e0a, 0x682b, 0x0000, 0x682f, 0x0000, 0x6810, 0x8000,
-+      0x6812, 0x2091, 0x8001, 0xd6b4, 0x0040, 0x2703, 0xa6b6, 0x0040,
-+      0x6e0a, 0x1078, 0x1f06, 0x78bf, 0x0000, 0x78bb, 0x0000, 0x0e7f,
-+      0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x2240,
-+      0x2091, 0x8001, 0x78bc, 0xa065, 0x0040, 0x271c, 0x609c, 0x78be,
-+      0x609f, 0x0000, 0x0078, 0x270c, 0x78bb, 0x0000, 0x78bf, 0x0000,
-+      0x007c, 0x796c, 0x7870, 0x7b88, 0xd384, 0x0040, 0x272b, 0x8000,
-+      0xa112, 0x0048, 0x2730, 0xc384, 0x8000, 0xa112, 0x00c8, 0x273d,
-+      0x7a78, 0x721a, 0x7a74, 0x721e, 0x7a80, 0x7222, 0x7a7c, 0x7226,
-+      0xa006, 0xd384, 0x0040, 0x273d, 0x8000, 0x7872, 0x70d2, 0x7814,
-+      0xa005, 0x0040, 0x274b, 0x8001, 0x7816, 0x00c0, 0x274b, 0x0068,
-+      0x274b, 0x2091, 0x4080, 0x007c, 0x2039, 0x2764, 0x0078, 0x2752,
-+      0x2039, 0x276a, 0x2704, 0xa005, 0x0040, 0x2763, 0xac00, 0x2068,
-+      0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e,
-+      0x8738, 0x0078, 0x2752, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015,
-+      0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x0c7e, 0x6014, 0x1078,
-+      0x47fa, 0x2c68, 0x0c7f, 0x007c, 0x78af, 0x0000, 0x2009, 0x6001,
-+      0x2104, 0xd084, 0x0040, 0x27a3, 0x6004, 0xa086, 0x0103, 0x00c0,
-+      0x27a3, 0x6114, 0x6018, 0xa105, 0x00c0, 0x27a3, 0x0d7e, 0x2069,
-+      0x0000, 0x6818, 0xd084, 0x00c0, 0x27a2, 0x600c, 0x70c6, 0x6010,
-+      0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, 0x4080, 0x0d7f,
-+      0x1078, 0x2267, 0x0068, 0x27d7, 0x7868, 0xa065, 0x00c0, 0x2776,
-+      0x0078, 0x27d7, 0x0d7f, 0x1078, 0x27da, 0x0040, 0x27d2, 0x6204,
-+      0xa294, 0x00ff, 0xa296, 0x0003, 0x0040, 0x27b5, 0x6204, 0xa296,
-+      0x0110, 0x00c0, 0x27c3, 0x78af, 0x0001, 0x6204, 0xa294, 0xff00,
-+      0x8217, 0x8211, 0x0040, 0x27c3, 0x85ff, 0x00c0, 0x27d2, 0x8210,
-+      0xa202, 0x00c8, 0x27d2, 0x057e, 0x1078, 0x27e9, 0x057f, 0x00c0,
-+      0x27d2, 0x8528, 0x78ac, 0xa005, 0x00c0, 0x27d2, 0x7868, 0xa065,
-+      0x00c0, 0x2776, 0x85ff, 0x0040, 0x27d9, 0x2091, 0x4080, 0x7894,
-+      0x70d6, 0x007c, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x00c0, 0x27e3,
-+      0x2300, 0xa005, 0x007c, 0x0048, 0x27e7, 0xa302, 0x007c, 0x8002,
-+      0x007c, 0xa184, 0xff00, 0x0040, 0x27f6, 0x810f, 0x810c, 0x810c,
-+      0x8004, 0x8004, 0x8007, 0xa100, 0x0078, 0x27f9, 0x8107, 0x8004,
-+      0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319,
-+      0xa421, 0xa529, 0x2009, 0x0020, 0x6004, 0xa086, 0x0103, 0x00c0,
-+      0x280f, 0x6028, 0xa005, 0x00c0, 0x280f, 0x2009, 0x000c, 0x1078,
-+      0x1ddf, 0x0040, 0x2832, 0x78a8, 0x8000, 0x78aa, 0xa086, 0x0002,
-+      0x00c0, 0x2840, 0x6014, 0xd0fc, 0x00c0, 0x2822, 0x2069, 0x6040,
-+      0x0078, 0x2824, 0x2069, 0x6080, 0x2091, 0x8000, 0x681b, 0x0003,
-+      0x78ab, 0x0000, 0x78b0, 0xa085, 0x0300, 0x78b2, 0x2091, 0x8001,
-+      0x0078, 0x2840, 0x78ab, 0x0000, 0x1078, 0x2267, 0x7990, 0x7894,
-+      0x8000, 0xa10a, 0x00c8, 0x283d, 0xa006, 0x7896, 0x70d6, 0xa006,
-+      0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x2138, 0xd7fc, 0x00c0,
-+      0x284d, 0x2009, 0x605a, 0x0078, 0x284f, 0x2009, 0x609a, 0x2091,
-+      0x8000, 0x200a, 0x0f7e, 0xd7fc, 0x00c0, 0x2866, 0x2009, 0x6040,
-+      0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040, 0x2862, 0x2079, 0x0100,
-+      0x0078, 0x286a, 0x2079, 0x0200, 0x0078, 0x286a, 0x2009, 0x6080,
-+      0x2079, 0x0100, 0x2104, 0xa086, 0x0000, 0x00c0, 0x2883, 0xd7fc,
-+      0x00c0, 0x2876, 0x2009, 0x6044, 0x0078, 0x2878, 0x2009, 0x6084,
-+      0x2104, 0xa005, 0x00c0, 0x2883, 0x7830, 0xa084, 0x00c0, 0x00c0,
-+      0x2883, 0x781b, 0x004b, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x2c00,
-+      0xa005, 0x00c0, 0x2890, 0xa188, 0x0005, 0x2104, 0x0078, 0x2891,
-+      0x6014, 0xd0fc, 0x00c0, 0x28a4, 0x2071, 0x6040, 0x2001, 0x6002,
-+      0x2004, 0xd0ec, 0x0040, 0x28a0, 0x2079, 0x0100, 0x0078, 0x28a8,
-+      0x2079, 0x0200, 0x0078, 0x28a8, 0x2071, 0x6080, 0x2079, 0x0100,
-+      0x2091, 0x8000, 0x7000, 0xa086, 0x0000, 0x00c0, 0x28da, 0x0078,
-+      0x28ce, 0x2c00, 0xa005, 0x00c0, 0x28ba, 0xa188, 0x0005, 0x2104,
-+      0x0078, 0x28bb, 0x6014, 0xd0fc, 0x00c0, 0x28cc, 0x2001, 0x6002,
-+      0x2004, 0xd0ec, 0x0040, 0x28c8, 0x2079, 0x0100, 0x0078, 0x28ce,
-+      0x2079, 0x0200, 0x0078, 0x28ce, 0x2079, 0x0100, 0x7830, 0xa084,
-+      0x00c0, 0x00c0, 0x28da, 0x2c00, 0xa005, 0x00c0, 0x28d8, 0x2104,
-+      0x781b, 0x004d, 0x2091, 0x8001, 0x0e7f, 0x0f7f, 0x007c, 0x2009,
-+      0x0002, 0x2069, 0x6000, 0x6808, 0xd0ec, 0x00c0, 0x2942, 0x2071,
-+      0x6080, 0x2079, 0x0100, 0x2021, 0x62bf, 0x784b, 0x000f, 0x0098,
-+      0x28fb, 0x7838, 0x0078, 0x28ed, 0x784b, 0x000f, 0x00a8, 0x28fb,
-+      0x7838, 0x0078, 0x28f4, 0x20a9, 0x0060, 0x789b, 0x0000, 0x78af,
-+      0x0000, 0x78af, 0x0000, 0x00f0, 0x28ff, 0x70ab, 0x009d, 0x2019,
-+      0x5df1, 0x1078, 0x2958, 0x680c, 0xd0e4, 0x0040, 0x2919, 0x789b,
-+      0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x1020, 0x00f0,
-+      0x2913, 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040,
-+      0x2922, 0xc1bd, 0x1078, 0x2b31, 0x017f, 0x701c, 0xa084, 0x000f,
-+      0x007e, 0x680c, 0xd0e4, 0x007f, 0x00c0, 0x2932, 0xa085, 0x6340,
-+      0x0078, 0x2934, 0xa085, 0x62c0, 0x7806, 0x780f, 0xb204, 0x7843,
-+      0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x704f, 0x0008, 0x745a,
-+      0x7057, 0x0000, 0x8109, 0x0040, 0x2957, 0x2071, 0x6040, 0x6808,
-+      0xd0ec, 0x0040, 0x2951, 0x2079, 0x0100, 0x2021, 0x60bf, 0x0078,
-+      0x28ed, 0x2079, 0x0200, 0x2021, 0x60bf, 0x0078, 0x28f4, 0x007c,
-+      0x137e, 0x147e, 0x157e, 0x047e, 0xaf80, 0x002b, 0x20a0, 0x2304,
-+      0xa005, 0x789a, 0x0040, 0x2979, 0x8318, 0x2324, 0x8318, 0x2398,
-+      0x24a8, 0xa484, 0xff00, 0x0040, 0x2971, 0xa482, 0x0100, 0x20a9,
-+      0x0100, 0x2020, 0x53a6, 0xa005, 0x00c0, 0x2968, 0x3318, 0x0078,
-+      0x295f, 0x047f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0f7e,
-+      0xd1bc, 0x00c0, 0x2993, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x298f, 0x2079, 0x0100, 0x0078, 0x2995, 0x2079,
-+      0x0200, 0x0078, 0x2995, 0x2079, 0x0100, 0xa18c, 0x000f, 0x7804,
-+      0xa084, 0xfff0, 0xa105, 0x7806, 0x0f7f, 0x017f, 0x1078, 0x2b31,
-+      0x007c, 0xd3fc, 0x00c0, 0x29b4, 0x007e, 0x2001, 0x6002, 0x2004,
-+      0xd0ec, 0x007f, 0x0040, 0x29b0, 0x2011, 0x0101, 0x0078, 0x29b6,
-+      0x2011, 0x0201, 0x0078, 0x29b6, 0x2011, 0x0101, 0x20a9, 0x0009,
-+      0x810b, 0x00f0, 0x29b8, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff,
-+      0xa105, 0x2012, 0x007c, 0x2019, 0x0002, 0x2001, 0x6002, 0x2004,
-+      0xd0ec, 0x0040, 0x29d0, 0x8319, 0x2009, 0x0101, 0x0078, 0x29d2,
-+      0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x00f0, 0x29d4, 0xa294,
-+      0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0040,
-+      0x29e5, 0x2009, 0x0201, 0x0078, 0x29d2, 0x007c, 0xd3fc, 0x00c0,
-+      0x29f9, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+      0x29f5, 0x2011, 0x0101, 0x0078, 0x29fb, 0x2011, 0x0201, 0x0078,
-+      0x29fb, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x00f0, 0x29fd,
-+      0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c,
-+      0xd3fc, 0x00c0, 0x2a1b, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x2a17, 0x2011, 0x0102, 0x0078, 0x2a1d, 0x2011,
-+      0x0202, 0x0078, 0x2a1d, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf,
-+      0xa105, 0x2012, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x2a37, 0x007e,
-+      0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2a33, 0x2061,
-+      0x0100, 0x0078, 0x2a39, 0x2061, 0x0200, 0x0078, 0x2a39, 0x2061,
-+      0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x62ac,
-+      0x63ac, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x2a57, 0x007e,
-+      0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2a53, 0x2061,
-+      0x0100, 0x0078, 0x2a59, 0x2061, 0x0200, 0x0078, 0x2a59, 0x2061,
-+      0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4,
-+      0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0,
-+      0x2a79, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+      0x2a75, 0x2061, 0x0100, 0x0078, 0x2a7b, 0x2061, 0x0200, 0x0078,
-+      0x2a7b, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022,
-+      0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x0c7e,
-+      0xd1bc, 0x00c0, 0x2a9b, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x2a97, 0x2061, 0x0100, 0x0078, 0x2a9d, 0x2061,
-+      0x0200, 0x0078, 0x2a9d, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003,
-+      0xa080, 0x0020, 0x609a, 0x60a4, 0xd2ac, 0x0040, 0x2aa9, 0xc2ac,
-+      0xc3f5, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c,
-+      0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x2b0f,
-+      0xd1fc, 0x00c0, 0x2abf, 0x2061, 0xa6c0, 0x0078, 0x2ac1, 0x2061,
-+      0xa7d0, 0x1078, 0x2b17, 0x0040, 0x2af4, 0x20a9, 0x0101, 0xd1fc,
-+      0x00c0, 0x2ace, 0x2061, 0xa5c0, 0x0078, 0x2ad0, 0x2061, 0xa6d0,
-+      0x0c7e, 0x1078, 0x2b17, 0x0040, 0x2adb, 0x0c7f, 0x8c60, 0x00f0,
-+      0x2ad0, 0x0078, 0x2b0f, 0x007f, 0xd1fc, 0x00c0, 0x2ae5, 0x2071,
-+      0x6040, 0xa082, 0xa5c0, 0x0078, 0x2ae9, 0x2071, 0x6080, 0xa082,
-+      0xa6d0, 0x707e, 0x717a, 0x2001, 0x0004, 0x706a, 0x7087, 0x000f,
-+      0x1078, 0x2845, 0x0078, 0x2b0b, 0x60d0, 0xa005, 0x00c0, 0x2b0f,
-+      0xd1fc, 0x00c0, 0x2aff, 0x2071, 0x6040, 0x0078, 0x2b01, 0x2071,
-+      0x6080, 0x717a, 0x2c00, 0x7082, 0x2001, 0x0006, 0x706a, 0x7087,
-+      0x000f, 0x1078, 0x2845, 0x2001, 0x0000, 0x0078, 0x2b11, 0x2001,
-+      0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04,
-+      0xa005, 0x0040, 0x2b2e, 0x2060, 0x6010, 0xa306, 0x00c0, 0x2b2b,
-+      0x600c, 0xa206, 0x00c0, 0x2b2b, 0x6014, 0xa106, 0x00c0, 0x2b2b,
-+      0xa006, 0x0078, 0x2b30, 0x6000, 0x0078, 0x2b18, 0xa085, 0x0001,
-+      0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0, 0x2b49, 0x2079,
-+      0x6040, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+      0x2b45, 0x2071, 0x0100, 0x0078, 0x2b4d, 0x2071, 0x0200, 0x0078,
-+      0x2b4d, 0x2079, 0x6080, 0x2071, 0x0100, 0x791c, 0xa18c, 0x000f,
-+      0x70ec, 0xa084, 0x0100, 0x007f, 0x0040, 0x2b64, 0x810b, 0x810b,
-+      0x810b, 0x810b, 0xd0bc, 0x00c0, 0x2b61, 0xa18d, 0x0f00, 0x0078,
-+      0x2b63, 0xa18d, 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x2001,
-+      0x6001, 0x2004, 0xd0ac, 0x00c0, 0x2b78, 0x68e4, 0xa08c, 0x0020,
-+      0x0040, 0x2b78, 0xa084, 0x0006, 0x00c0, 0x2b78, 0x1078, 0x2b79,
-+      0x007c, 0x6014, 0x0e7e, 0x037e, 0x2018, 0x2071, 0x6540, 0xd0fc,
-+      0x00c0, 0x2b84, 0x2071, 0x64c0, 0x8007, 0xa084, 0x000f, 0x8003,
-+      0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a, 0x00c0, 0x2bea,
-+      0x7108, 0xa194, 0xff00, 0x0040, 0x2bea, 0xa18c, 0x00ff, 0x2001,
-+      0x000a, 0xa106, 0x0040, 0x2bb7, 0x2001, 0x000c, 0xa106, 0x0040,
-+      0x2bbb, 0x2001, 0x0012, 0xa106, 0x0040, 0x2bbf, 0x2001, 0x0014,
-+      0xa106, 0x0040, 0x2bc3, 0x2001, 0x0019, 0xa106, 0x0040, 0x2bc7,
-+      0x2001, 0x0032, 0xa106, 0x0040, 0x2bcb, 0x0078, 0x2bcf, 0x2009,
-+      0x000c, 0x0078, 0x2bd0, 0x2009, 0x0012, 0x0078, 0x2bd0, 0x2009,
-+      0x0014, 0x0078, 0x2bd0, 0x2009, 0x0019, 0x0078, 0x2bd0, 0x2009,
-+      0x0020, 0x0078, 0x2bd0, 0x2009, 0x003f, 0x0078, 0x2bd0, 0xa016,
-+      0x2100, 0xa205, 0x700a, 0x7004, 0xa085, 0x000a, 0x7006, 0x2071,
-+      0x6000, 0x7004, 0xd0bc, 0x0040, 0x2bea, 0xd3fc, 0x00c0, 0x2be5,
-+      0x73ee, 0x2071, 0x6040, 0x0078, 0x2be8, 0x73f2, 0x2071, 0x6080,
-+      0x701b, 0x800f, 0x037f, 0x0e7f, 0x007c, 0x2001, 0x6003, 0x2004,
-+      0xd0e4, 0x00c0, 0x2bf9, 0x7804, 0xa084, 0xff1f, 0xa085, 0x6340,
-+      0x7806, 0x007c, 0x0068, 0x2bfa, 0x2091, 0x8000, 0x2071, 0x0000,
-+      0x007e, 0x7018, 0xd084, 0x00c0, 0x2c01, 0x007f, 0x2071, 0x0010,
-+      0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x090b, 0x70df,
-+      0x0001, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
-+      0x2c17, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0xa594, 0x003f, 0xa49c,
-+      0x0003, 0xa484, 0x000f, 0x0079, 0x2c25, 0x2c37, 0x2c37, 0x2c37,
-+      0x30a9, 0x4547, 0x2c35, 0x2c5f, 0x2c62, 0x2c35, 0x2c35, 0x2c35,
-+      0x2c35, 0x2c35, 0x2c35, 0x2c35, 0x2c35, 0x1078, 0x2bfa, 0x8507,
-+      0xa084, 0x001f, 0x0079, 0x2c3c, 0x2c65, 0x30a9, 0x32d8, 0x33f3,
-+      0x341e, 0x36b7, 0x39f0, 0x3a6f, 0x3aed, 0x3b81, 0x3c6c, 0x3d13,
-+      0x2c5f, 0x31d4, 0x39bf, 0x2c5c, 0x49b9, 0x49e0, 0x4bd7, 0x4be3,
-+      0x4cc7, 0x2c5c, 0x2c5c, 0x4dae, 0x4db2, 0x49b7, 0x2c5c, 0x4b1d,
-+      0x2c5c, 0x484c, 0x2c62, 0x2c5c, 0x1078, 0x2bfa, 0x007c, 0x781b,
-+      0x004f, 0x007c, 0x781b, 0x00d6, 0x007c, 0x724a, 0xa584, 0x0001,
-+      0x00c0, 0x485e, 0x0040, 0x2c78, 0x1078, 0x2bfa, 0x7003, 0x0000,
-+      0x7053, 0x0000, 0x704b, 0x0000, 0x7043, 0x0000, 0x1078, 0x44fa,
-+      0x7064, 0xa06d, 0x0040, 0x2c85, 0x70f4, 0xa084, 0x0001, 0x7168,
-+      0xa105, 0x00c0, 0x2c85, 0x0078, 0x2df1, 0x7068, 0xa084, 0x0007,
-+      0x0079, 0x2c8a, 0x2c92, 0x2d10, 0x2d19, 0x2d24, 0x2d2f, 0x2dd7,
-+      0x2d3a, 0x2d10, 0x7830, 0xd0bc, 0x00c0, 0x2c5e, 0x71f0, 0xd1bc,
-+      0x00c0, 0x2c5e, 0xd1b4, 0x00c0, 0x2cee, 0x70c0, 0xa086, 0x0001,
-+      0x0040, 0x2c5e, 0x1078, 0x44e0, 0x00c0, 0x2c5e, 0x70d0, 0xa06d,
-+      0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808,
-+      0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040,
-+      0x2cbc, 0x69c0, 0x7daa, 0x79aa, 0x68c4, 0xa04d, 0x6e1c, 0x7830,
-+      0xd0bc, 0x00c0, 0x2c5e, 0x2001, 0x0010, 0x0078, 0x2f58, 0x7064,
-+      0xa005, 0x00c0, 0x2c5e, 0x1078, 0x44e0, 0x00c0, 0x2c5e, 0x0c7e,
-+      0x0d7e, 0x70d0, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010,
-+      0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d,
-+      0xa886, 0x0001, 0x0040, 0x2ce7, 0x69c0, 0x7daa, 0x79aa, 0x68c4,
-+      0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2f58, 0x1078, 0x44bc,
-+      0x00c0, 0x2c5e, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+      0x68b4, 0x785a, 0x781b, 0x004f, 0x704c, 0xc08d, 0x780a, 0x68c0,
-+      0x703e, 0x70f0, 0xc0b4, 0x70f2, 0x70d4, 0xa065, 0x68c4, 0x705e,
-+      0x7003, 0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x007c,
-+      0x1078, 0x44bc, 0x00c0, 0x2d18, 0x781b, 0x0048, 0x7003, 0x0004,
-+      0x007c, 0x1078, 0x44bc, 0x00c0, 0x2d23, 0x2011, 0x000c, 0x1078,
-+      0x2d4a, 0x7003, 0x0004, 0x007c, 0x1078, 0x44bc, 0x00c0, 0x2d2e,
-+      0x2011, 0x0006, 0x1078, 0x2d4a, 0x7003, 0x0004, 0x007c, 0x1078,
-+      0x44bc, 0x00c0, 0x2d39, 0x2011, 0x000d, 0x1078, 0x2d4a, 0x7003,
-+      0x0004, 0x007c, 0x1078, 0x44bc, 0x00c0, 0x2d49, 0x2011, 0x0006,
-+      0x1078, 0x2d4a, 0x7080, 0x7083, 0x0000, 0x2068, 0x7052, 0x7003,
-+      0x0001, 0x007c, 0x7178, 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0010,
-+      0xa286, 0x000c, 0x00c0, 0x2d59, 0x7aaa, 0x2001, 0x0001, 0x0078,
-+      0x2d6e, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d,
-+      0x0040, 0x2d67, 0x7aaa, 0x2001, 0x0002, 0x0078, 0x2d6e, 0x78ab,
-+      0x0020, 0x717c, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060,
-+      0x78aa, 0x785b, 0x0004, 0x781b, 0x00e7, 0x1078, 0x44fa, 0x7087,
-+      0x000f, 0x70f0, 0xd0b4, 0x0040, 0x2d8a, 0xc0b4, 0x70f2, 0x0c7e,
-+      0x70d4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+      0x601a, 0x0c7f, 0x007c, 0x7010, 0xa005, 0x00c0, 0x2d99, 0x70f0,
-+      0xd0b4, 0x0040, 0x2d9a, 0x70d4, 0xac06, 0x00c0, 0x2d9a, 0x1078,
-+      0x2d79, 0x007c, 0x017e, 0x71c0, 0xa186, 0x0001, 0x0040, 0x2dcc,
-+      0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, 0x70d0, 0x2068,
-+      0x6800, 0xac06, 0x0040, 0x2db3, 0x8211, 0x0040, 0x2dca, 0x1078,
-+      0x2dce, 0x0078, 0x2da8, 0x0c7e, 0x2100, 0x2011, 0x0001, 0xa212,
-+      0x70d0, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a,
-+      0x8211, 0x0040, 0x2dc7, 0x1078, 0x2dce, 0x0078, 0x2dba, 0x70c3,
-+      0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, 0xade8, 0x0005,
-+      0x70c8, 0xad06, 0x00c0, 0x2dd6, 0x70c4, 0x2068, 0x007c, 0x1078,
-+      0x44bc, 0x00c0, 0x2c5e, 0x7080, 0x2068, 0x7778, 0x1078, 0x43a8,
-+      0x2c50, 0x1078, 0x45c9, 0x789b, 0x0010, 0x6814, 0xa084, 0x001f,
-+      0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004, 0x0078,
-+      0x2f5e, 0x1078, 0x44bc, 0x00c0, 0x2c5e, 0x789b, 0x0010, 0x7064,
-+      0x2068, 0x6f14, 0x1078, 0x2d79, 0x1078, 0x43a8, 0x2c50, 0x1078,
-+      0x45c9, 0x6824, 0xa005, 0x0040, 0x2e0d, 0xa082, 0x0006, 0x0048,
-+      0x2e0b, 0x0078, 0x2e0d, 0x6827, 0x0005, 0x6b14, 0xa39c, 0x001f,
-+      0xa39d, 0x00c0, 0x2960, 0x6000, 0x2a60, 0xa084, 0x8000, 0x0040,
-+      0x2e1d, 0xa684, 0x0001, 0x0040, 0x2e1f, 0xa39c, 0xffbf, 0x7baa,
-+      0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0078, 0x2f5e,
-+      0xc28d, 0x72f2, 0x72dc, 0xa200, 0xa015, 0x7158, 0x8108, 0xa12a,
-+      0x0048, 0x2e33, 0x71dc, 0x2164, 0x6504, 0x85ff, 0x00c0, 0x2e4e,
-+      0x715a, 0x8421, 0x00c0, 0x2e2e, 0x70f0, 0xd08c, 0x0040, 0x2e46,
-+      0x70ec, 0xa005, 0x00c0, 0x2e46, 0x70ef, 0x000a, 0x7048, 0xa005,
-+      0x0040, 0x485e, 0x007c, 0x2200, 0x0078, 0x2e38, 0x70f0, 0xc08c,
-+      0x70f2, 0x70ef, 0x0000, 0x6034, 0xa005, 0x00c0, 0x2e4b, 0x6708,
-+      0xa784, 0x073f, 0x0040, 0x2e78, 0xd7d4, 0x00c0, 0x2e4b, 0xa784,
-+      0x0021, 0x00c0, 0x2e4b, 0xd78c, 0x0040, 0x2e6b, 0xd794, 0x0040,
-+      0x2e4b, 0xc794, 0x670a, 0xa784, 0x0218, 0x00c0, 0x2e4b, 0xd7c4,
-+      0x0040, 0x2e78, 0x6018, 0xa005, 0x00c0, 0x2e4b, 0xc7c4, 0x670a,
-+      0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0040,
-+      0x2e89, 0x601c, 0xa302, 0x0048, 0x2e8c, 0x0040, 0x2e8c, 0x0078,
-+      0x2e4b, 0x83ff, 0x00c0, 0x2e4b, 0x2d58, 0x2c50, 0x715a, 0x68d3,
-+      0x0000, 0xd7bc, 0x00c0, 0x2e97, 0x7024, 0x6022, 0x603a, 0xc7bc,
-+      0x670a, 0x68c4, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001,
-+      0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040, 0x2eab,
-+      0xd684, 0x0040, 0x2ead, 0xa39c, 0xffbf, 0xd6a4, 0x0040, 0x2eb2,
-+      0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2f03, 0xc7a5, 0x670a,
-+      0x2c00, 0x68ca, 0x77c0, 0xa786, 0x0001, 0x00c0, 0x2ed9, 0x70f0,
-+      0xd0b4, 0x00c0, 0x2ed9, 0x7000, 0xa082, 0x0001, 0x00c8, 0x2ed9,
-+      0x7010, 0xa005, 0x00c0, 0x2ed9, 0x1078, 0x44e0, 0x00c0, 0x2ed9,
-+      0x7830, 0xd0bc, 0x00c0, 0x2ed9, 0x789b, 0x0010, 0x7baa, 0x0078,
-+      0x2f56, 0x8739, 0x77c2, 0x2750, 0x77cc, 0xa7b0, 0x0005, 0x70c8,
-+      0xa606, 0x00c0, 0x2ee4, 0x76c4, 0x76ce, 0x2c3a, 0x8738, 0x2d3a,
-+      0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc,
-+      0x0040, 0x2efa, 0x2091, 0x303d, 0x70f0, 0xa084, 0x303d, 0x2091,
-+      0x8000, 0x2090, 0xaad5, 0x0000, 0x0040, 0x2f02, 0x8421, 0x2200,
-+      0x00c0, 0x2e2d, 0x007c, 0xd1dc, 0x0040, 0x3ffb, 0x2029, 0x0020,
-+      0xd69c, 0x00c0, 0x2f10, 0x8528, 0xd68c, 0x00c0, 0x2f10, 0x8528,
-+      0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0x70e8, 0xa160,
-+      0x2c64, 0x8cff, 0x0040, 0x2f2e, 0x6014, 0xa706, 0x00c0, 0x2f18,
-+      0x60bc, 0x8001, 0x60be, 0x00c0, 0x2f13, 0x2a60, 0x6008, 0xc0c5,
-+      0x600a, 0x2200, 0x8421, 0x00c0, 0x2e2d, 0x007c, 0x2a60, 0x610e,
-+      0x69c2, 0x2c00, 0x68ca, 0x8840, 0x6008, 0xc0d5, 0x600a, 0x77c0,
-+      0xa786, 0x0001, 0x00c0, 0x2ed9, 0x70f0, 0xd0b4, 0x00c0, 0x2ed9,
-+      0x7000, 0xa082, 0x0001, 0x00c8, 0x2ed9, 0x7010, 0xa005, 0x00c0,
-+      0x2ed9, 0x1078, 0x44e0, 0x00c0, 0x2ed9, 0x7830, 0xd0bc, 0x00c0,
-+      0x2ed9, 0x789b, 0x0010, 0x7baa, 0x7daa, 0x79aa, 0x2001, 0x0002,
-+      0x007e, 0x6018, 0x8000, 0x601a, 0x0078, 0x2f5f, 0x007e, 0x2960,
-+      0x6104, 0x2a60, 0xa184, 0x0018, 0x0040, 0x2f7a, 0xa184, 0x0010,
-+      0x0040, 0x2f6e, 0x1078, 0x4201, 0x00c0, 0x2f9a, 0xd19c, 0x0040,
-+      0x2f7a, 0x69a0, 0xa184, 0x0600, 0x00c0, 0x2f7a, 0x1078, 0x40f5,
-+      0x0078, 0x2f9a, 0x69a0, 0xa184, 0x1e00, 0x0040, 0x2fa4, 0xd1dc,
-+      0x0040, 0x2f90, 0x0c7e, 0x2960, 0x6000, 0xc0ed, 0x6002, 0x6104,
-+      0xc1a5, 0x6106, 0x0c7f, 0x1078, 0x4201, 0x00c0, 0x2f9a, 0x69a0,
-+      0xd1cc, 0x0040, 0x2f97, 0x1078, 0x4147, 0x0078, 0x2f9a, 0xd1d4,
-+      0x00c0, 0x2f76, 0x69a0, 0xd1e4, 0x0040, 0x2fa4, 0x6914, 0xa18c,
-+      0xff00, 0x810f, 0x1078, 0x2a43, 0x027f, 0xa68c, 0x00e0, 0xa684,
-+      0x0060, 0x0040, 0x2fb0, 0xa086, 0x0060, 0x00c0, 0x2fb0, 0xc1f5,
-+      0xa18d, 0x0104, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x6818,
-+      0xc0fd, 0x681a, 0xd6bc, 0x0040, 0x2fcb, 0xc0fc, 0x708b, 0x0000,
-+      0xa08a, 0x000d, 0x0050, 0x2fc9, 0xa08a, 0x000c, 0x718a, 0x2001,
-+      0x000c, 0x800c, 0x718e, 0x78aa, 0x3518, 0x3340, 0x3428, 0x80ac,
-+      0xaf80, 0x002b, 0x20a0, 0x789b, 0x0000, 0xad80, 0x000b, 0x2098,
-+      0x53a6, 0x23a8, 0x2898, 0x25a0, 0xa286, 0x0020, 0x00c0, 0x2ffe,
-+      0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da, 0xa286,
-+      0x0002, 0x0040, 0x302a, 0x70c0, 0x8000, 0x70c2, 0x74d0, 0xa498,
-+      0x0005, 0x70c8, 0xa306, 0x00c0, 0x2ff6, 0x73c4, 0x73d2, 0xa286,
-+      0x0010, 0x0040, 0x2c5e, 0x0d7f, 0x0c7f, 0x007c, 0x7000, 0xa005,
-+      0x00c0, 0x2fe0, 0xa286, 0x0002, 0x00c0, 0x3044, 0x1078, 0x44bc,
-+      0x00c0, 0x2fe0, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4, 0x785a,
-+      0x781b, 0x004f, 0x704c, 0xc08d, 0x780a, 0x127e, 0x0d7e, 0x0c7e,
-+      0x70f0, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f, 0x127f, 0x2900,
-+      0x705e, 0x68c0, 0x703e, 0x7003, 0x0002, 0x2d00, 0x7052, 0xad80,
-+      0x0009, 0x7042, 0x7830, 0xd0bc, 0x0040, 0x3036, 0x2091, 0x303d,
-+      0x70f0, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0x70c0, 0xa005,
-+      0x00c0, 0x303b, 0x007c, 0x8421, 0x0040, 0x303a, 0x7254, 0x70dc,
-+      0xa200, 0xa015, 0x0078, 0x2e2d, 0xa286, 0x0010, 0x00c0, 0x306f,
-+      0x1078, 0x44bc, 0x00c0, 0x2fe0, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+      0x68b4, 0x785a, 0x781b, 0x004f, 0x704c, 0xc08d, 0x780a, 0x70c0,
-+      0x8000, 0x70c2, 0x74d0, 0xa490, 0x0005, 0x70c8, 0xa206, 0x00c0,
-+      0x3062, 0x72c4, 0x72d2, 0x2900, 0x705e, 0x68c0, 0x703e, 0x7003,
-+      0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x007c, 0x6bb4,
-+      0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94,
-+      0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x004f, 0x2900,
-+      0x705e, 0x7202, 0x704c, 0xc08d, 0x780a, 0x7200, 0x2300, 0xa605,
-+      0x0040, 0x309b, 0x70f0, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0,
-+      0x3095, 0x2009, 0x0000, 0x0078, 0x3097, 0x2009, 0x0001, 0xa284,
-+      0x000f, 0x1079, 0x309f, 0xad80, 0x0009, 0x7042, 0x007c, 0x30a7,
-+      0x591e, 0x591e, 0x590b, 0x591e, 0x30a7, 0x30a7, 0x30a7, 0x1078,
-+      0x2bfa, 0x1078, 0x44bc, 0x1078, 0x2bed, 0x7808, 0xa084, 0xfffc,
-+      0x780a, 0x0f7e, 0x2079, 0x6000, 0x78b0, 0x0f7f, 0xd084, 0x0040,
-+      0x30d2, 0x7068, 0xa086, 0x0001, 0x00c0, 0x30c0, 0x0078, 0x31a7,
-+      0x7068, 0xa086, 0x0005, 0x00c0, 0x30d0, 0x7080, 0x2068, 0x681b,
-+      0x0004, 0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822,
-+      0x706b, 0x0000, 0x70c3, 0x0000, 0x70c4, 0x70ce, 0x70d2, 0x70f4,
-+      0xc084, 0x70f6, 0x1078, 0x2d79, 0x2011, 0x0004, 0x7168, 0xa186,
-+      0x0001, 0x0040, 0x30f2, 0xa186, 0x0007, 0x00c0, 0x30eb, 0x701b,
-+      0x0005, 0x0078, 0x30f2, 0x701b, 0x0001, 0x70f0, 0xc0dd, 0x70f2,
-+      0x0078, 0x30f2, 0x2001, 0x6008, 0x203c, 0xd7fc, 0x00c0, 0x30fe,
-+      0xae86, 0x6040, 0x0040, 0x3102, 0x0078, 0x3108, 0xae86, 0x6080,
-+      0x00c0, 0x3108, 0xa784, 0x00ff, 0xa086, 0x0018, 0x0040, 0x310f,
-+      0x7014, 0x7012, 0xa005, 0x00c0, 0x310f, 0x70c3, 0x0001, 0x067e,
-+      0x1078, 0x55ac, 0x157e, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078,
-+      0x42de, 0xa7b8, 0x0100, 0x00f0, 0x3117, 0x157f, 0x067f, 0x7000,
-+      0x0079, 0x3122, 0x315a, 0x3135, 0x3135, 0x312a, 0x315a, 0x315a,
-+      0x315a, 0x315a, 0x7064, 0xa005, 0x0040, 0x315a, 0xad06, 0x00c0,
-+      0x3135, 0x6800, 0x7066, 0x0078, 0x3147, 0x6820, 0xd084, 0x00c0,
-+      0x3143, 0x6f14, 0x1078, 0x43a8, 0x6008, 0xc0d4, 0x600a, 0x1078,
-+      0x3fd3, 0x0078, 0x3147, 0x7060, 0x2060, 0x6800, 0x6002, 0xa684,
-+      0x5f00, 0x681e, 0x6818, 0xd0fc, 0x0040, 0x314f, 0x6a1a, 0x6817,
-+      0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822,
-+      0x1078, 0x2251, 0x2011, 0x0004, 0xb284, 0x0400, 0x00c0, 0x3164,
-+      0x2021, 0xa6c0, 0x0078, 0x3166, 0x2021, 0xa7d0, 0x1078, 0x31b5,
-+      0xb284, 0x0400, 0x0040, 0x3170, 0x2021, 0x6099, 0x0078, 0x3172,
-+      0x2021, 0x6059, 0x1078, 0x31b5, 0x157e, 0x20a9, 0x0101, 0xb284,
-+      0x0400, 0x00c0, 0x317f, 0x2021, 0xa5c0, 0x0078, 0x3181, 0x2021,
-+      0xa6d0, 0x1078, 0x31b5, 0x8420, 0x00f0, 0x3181, 0xb284, 0x0300,
-+      0x0040, 0x318e, 0x2061, 0x65c0, 0x0078, 0x3190, 0x2061, 0x85c0,
-+      0x2021, 0x0002, 0x20a9, 0x0100, 0x6018, 0x6110, 0x81ff, 0x0040,
-+      0x319d, 0xa102, 0x0050, 0x319d, 0x6012, 0x601b, 0x0000, 0xace0,
-+      0x0010, 0x00f0, 0x3194, 0x8421, 0x00c0, 0x3192, 0x157f, 0x7090,
-+      0xa084, 0x8000, 0x0040, 0x31ae, 0x1078, 0x4639, 0x706b, 0x0000,
-+      0x7003, 0x0000, 0x7053, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005,
-+      0x0040, 0x31d0, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000,
-+      0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084,
-+      0x00ff, 0xc09d, 0x6822, 0x1078, 0x2251, 0x007f, 0x0078, 0x31b7,
-+      0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x31da,
-+      0x1078, 0x2bfa, 0x1078, 0x2bed, 0x2300, 0x0079, 0x31df, 0x31e2,
-+      0x326d, 0x328a, 0xa282, 0x0002, 0x0040, 0x31e8, 0x1078, 0x2bfa,
-+      0x7068, 0x706b, 0x0000, 0x7087, 0x0000, 0x0079, 0x31ef, 0x31f7,
-+      0x31f7, 0x31f9, 0x3239, 0x4007, 0x31f7, 0x3239, 0x31f7, 0x1078,
-+      0x2bfa, 0x7778, 0x1078, 0x42de, 0x7778, 0xa7bc, 0x8f00, 0x1078,
-+      0x43a8, 0x6018, 0xa005, 0x0040, 0x3230, 0xd7fc, 0x00c0, 0x320c,
-+      0x2021, 0xa6c0, 0x0078, 0x320e, 0x2021, 0xa7d0, 0x2009, 0x0005,
-+      0x2011, 0x0010, 0x1078, 0x32a5, 0x0040, 0x3230, 0x157e, 0x20a9,
-+      0x0101, 0xd7fc, 0x00c0, 0x3220, 0x2021, 0xa5c0, 0x0078, 0x3222,
-+      0x2021, 0xa6d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078,
-+      0x32a5, 0x047f, 0x0040, 0x322f, 0x8420, 0x00f0, 0x3222, 0x157f,
-+      0x8738, 0xa784, 0x001f, 0x00c0, 0x31ff, 0x0078, 0x2c6e, 0x0078,
-+      0x2c6e, 0x7778, 0x1078, 0x43a8, 0x6018, 0xa005, 0x0040, 0x326b,
-+      0xd7fc, 0x00c0, 0x3247, 0x2021, 0xa6c0, 0x0078, 0x3249, 0x2021,
-+      0xa7d0, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x32a5, 0x0040,
-+      0x326b, 0x157e, 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x325b, 0x2021,
-+      0xa5c0, 0x0078, 0x325d, 0x2021, 0xa6d0, 0x047e, 0x2009, 0x0005,
-+      0x2011, 0x0020, 0x1078, 0x32a5, 0x047f, 0x0040, 0x326a, 0x8420,
-+      0x00f0, 0x325d, 0x157f, 0x0078, 0x2c6e, 0x2200, 0x0079, 0x3270,
-+      0x3273, 0x3275, 0x3275, 0x1078, 0x2bfa, 0x2009, 0x0012, 0x7068,
-+      0xa086, 0x0002, 0x0040, 0x327e, 0x2009, 0x000e, 0x6818, 0xd0fc,
-+      0x0040, 0x3283, 0x691a, 0x706b, 0x0000, 0x70f0, 0xc0dd, 0x70f2,
-+      0x0078, 0x445a, 0x2200, 0x0079, 0x328d, 0x3292, 0x3275, 0x3290,
-+      0x1078, 0x2bfa, 0x1078, 0x55ac, 0x7000, 0xa086, 0x0002, 0x00c0,
-+      0x3f81, 0x1078, 0x3fe8, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078,
-+      0x3f72, 0x0040, 0x3f81, 0x0078, 0x2c6e, 0x2404, 0xa005, 0x0040,
-+      0x32d4, 0x2068, 0x2d04, 0x007e, 0x6814, 0xa706, 0x0040, 0x32b4,
-+      0x2d20, 0x007f, 0x0078, 0x32a6, 0x007f, 0x2022, 0x6817, 0x0000,
-+      0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x691a, 0x6820,
-+      0xa084, 0x00ff, 0xa205, 0x6822, 0x682b, 0x0000, 0x1078, 0x2251,
-+      0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078,
-+      0x2d9a, 0x1078, 0x3fe8, 0x007c, 0xa085, 0x0001, 0x0078, 0x32d3,
-+      0x2300, 0x0079, 0x32db, 0x32e0, 0x32de, 0x3385, 0x1078, 0x2bfa,
-+      0x78ec, 0xa084, 0x0001, 0x00c0, 0x32f4, 0x7000, 0xa086, 0x0004,
-+      0x00c0, 0x32ec, 0x0078, 0x332a, 0x1078, 0x3fe8, 0x6008, 0xa084,
-+      0xf9ef, 0x600a, 0x0078, 0x3f81, 0x78e4, 0xa005, 0x00d0, 0x332a,
-+      0x3208, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+      0x3305, 0xa18c, 0x0300, 0x0078, 0x3307, 0xa18c, 0x0400, 0x0040,
-+      0x330d, 0x0018, 0x2c5e, 0x0078, 0x330f, 0x0028, 0x2c5e, 0x2008,
-+      0xa084, 0x0030, 0x00c0, 0x3317, 0x781b, 0x004f, 0x007c, 0x78ec,
-+      0xa084, 0x0003, 0x0040, 0x3314, 0xa184, 0x0007, 0x0079, 0x3320,
-+      0x3361, 0x336b, 0x3354, 0x3328, 0x44b1, 0x44b1, 0x3328, 0x3378,
-+      0x1078, 0x2bfa, 0x7000, 0xa086, 0x0004, 0x00c0, 0x3344, 0x7068,
-+      0xa086, 0x0002, 0x00c0, 0x333a, 0x2011, 0x0002, 0x2019, 0x0000,
-+      0x0078, 0x31d4, 0x7068, 0xa086, 0x0006, 0x0040, 0x3334, 0x7068,
-+      0xa086, 0x0004, 0x0040, 0x3334, 0x79e4, 0xa184, 0x0030, 0x0040,
-+      0x334e, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x3350, 0x0078, 0x39bf,
-+      0x2001, 0x0003, 0x0078, 0x36cb, 0x6818, 0xd0fc, 0x0040, 0x335a,
-+      0x681b, 0x001d, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b, 0x0058,
-+      0x007c, 0x6818, 0xd0fc, 0x0040, 0x3367, 0x681b, 0x001d, 0x1078,
-+      0x42bd, 0x0078, 0x4484, 0x6818, 0xd0fc, 0x0040, 0x3371, 0x681b,
-+      0x001d, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b, 0x00d3, 0x007c,
-+      0x6818, 0xd0fc, 0x0040, 0x337e, 0x681b, 0x001d, 0x1078, 0x42bd,
-+      0x782b, 0x3008, 0x781b, 0x009b, 0x007c, 0xa584, 0x000f, 0x00c0,
-+      0x33a4, 0x1078, 0x2bed, 0x7000, 0x0079, 0x338e, 0x2c6e, 0x3396,
-+      0x3398, 0x3f81, 0x3f81, 0x3f81, 0x3396, 0x3396, 0x1078, 0x2bfa,
-+      0x1078, 0x3fe8, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3f72,
-+      0x0040, 0x3f81, 0x0078, 0x2c6e, 0x78e4, 0xa005, 0x00d0, 0x332a,
-+      0x3208, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+      0x33b5, 0xa18c, 0x0300, 0x0078, 0x33b7, 0xa18c, 0x0400, 0x0040,
-+      0x33bd, 0x0018, 0x332a, 0x0078, 0x33bf, 0x0028, 0x332a, 0x2008,
-+      0xa084, 0x0030, 0x00c0, 0x33c7, 0x781b, 0x004f, 0x007c, 0x78ec,
-+      0xa084, 0x0003, 0x0040, 0x33c4, 0xa184, 0x0007, 0x0079, 0x33d0,
-+      0x33e1, 0x33e5, 0x33da, 0x33d8, 0x44b1, 0x44b1, 0x33d8, 0x44a9,
-+      0x1078, 0x2bfa, 0x1078, 0x42c5, 0x782b, 0x3008, 0x781b, 0x0058,
-+      0x007c, 0x1078, 0x42c5, 0x0078, 0x4484, 0x1078, 0x42c5, 0x782b,
-+      0x3008, 0x781b, 0x00d3, 0x007c, 0x1078, 0x42c5, 0x782b, 0x3008,
-+      0x781b, 0x009b, 0x007c, 0x2300, 0x0079, 0x33f6, 0x33fb, 0x33f9,
-+      0x33fd, 0x1078, 0x2bfa, 0x0078, 0x3b81, 0x681b, 0x0016, 0x78a3,
-+      0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x3b81, 0x78ec, 0xa084,
-+      0x0003, 0x0040, 0x3b81, 0xa184, 0x0100, 0x0040, 0x3401, 0xa184,
-+      0x0007, 0x0079, 0x3413, 0x341b, 0x33e5, 0x3354, 0x445a, 0x44b1,
-+      0x44b1, 0x445a, 0x44a9, 0x1078, 0x446a, 0x007c, 0xa282, 0x0005,
-+      0x0050, 0x3424, 0x1078, 0x2bfa, 0x2300, 0x0079, 0x3427, 0x342a,
-+      0x367d, 0x368a, 0x2200, 0x0079, 0x342d, 0x3447, 0x3434, 0x3447,
-+      0x3432, 0x3660, 0x1078, 0x2bfa, 0x789b, 0x0018, 0x78a8, 0xa084,
-+      0x00ff, 0xa082, 0x0020, 0x0048, 0x429c, 0xa08a, 0x0004, 0x00c8,
-+      0x429c, 0x0079, 0x3443, 0x429c, 0x429c, 0x429c, 0x4246, 0x789b,
-+      0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x3458, 0x0078, 0x429c,
-+      0x7000, 0xa005, 0x00c0, 0x344e, 0x2011, 0x0004, 0x0078, 0x3d26,
-+      0xa184, 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x429c, 0x0079, 0x3460,
-+      0x3472, 0x3470, 0x3488, 0x348c, 0x355f, 0x429c, 0x429c, 0x3561,
-+      0x429c, 0x429c, 0x365c, 0x365c, 0x429c, 0x429c, 0x429c, 0x365e,
-+      0x1078, 0x2bfa, 0xa684, 0x1000, 0x0040, 0x347e, 0x2001, 0x0500,
-+      0x8000, 0x8000, 0x783a, 0x781b, 0x0094, 0x007c, 0x6818, 0xd0fc,
-+      0x0040, 0x3486, 0x681b, 0x001d, 0x0078, 0x3476, 0x0078, 0x445a,
-+      0x681b, 0x001d, 0x0078, 0x42aa, 0x6920, 0x6922, 0xa684, 0x1800,
-+      0x00c0, 0x34f1, 0x6820, 0xa084, 0x0001, 0x00c0, 0x34f7, 0x6818,
-+      0xa086, 0x0008, 0x00c0, 0x349e, 0x681b, 0x0000, 0xd6d4, 0x0040,
-+      0x355c, 0xd6bc, 0x0040, 0x34dd, 0x708b, 0x0000, 0x6818, 0xa084,
-+      0x003f, 0xa08a, 0x000d, 0x0050, 0x34dd, 0xa08a, 0x000c, 0x718a,
-+      0x2001, 0x000c, 0x800c, 0x718e, 0x789b, 0x0061, 0x78aa, 0x157e,
-+      0x137e, 0x147e, 0x017e, 0xb28c, 0x0300, 0x0040, 0x34cf, 0x007e,
-+      0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x34cb, 0x20a1,
-+      0x012b, 0x0078, 0x34d1, 0x20a1, 0x022b, 0x0078, 0x34d1, 0x20a1,
-+      0x012b, 0x017f, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b,
-+      0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6038, 0xa005, 0x00c0,
-+      0x34ec, 0x681c, 0xa084, 0x000e, 0x0040, 0x42aa, 0x1078, 0x42c9,
-+      0x782b, 0x3008, 0x0078, 0x34ee, 0x8001, 0x603a, 0x781b, 0x005a,
-+      0x007c, 0xd6e4, 0x0040, 0x34f7, 0x781b, 0x0067, 0x007c, 0xa684,
-+      0x0060, 0x0040, 0x3559, 0xd6dc, 0x0040, 0x3559, 0xd6fc, 0x00c0,
-+      0x3503, 0x0078, 0x351a, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8,
-+      0x78d0, 0x801b, 0x00c8, 0x350d, 0x8000, 0xa084, 0x003f, 0xa108,
-+      0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+      0xa303, 0x68ae, 0xd6f4, 0x0040, 0x3520, 0xc6f4, 0x7e5a, 0x6eb6,
-+      0x7000, 0xa086, 0x0003, 0x00c0, 0x352e, 0x007e, 0x1078, 0x55ac,
-+      0x1078, 0x591e, 0x007f, 0x781b, 0x0066, 0x007c, 0xa006, 0x1078,
-+      0x5a6b, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040,
-+      0x353d, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda,
-+      0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x354d, 0xc6f5,
-+      0x7e5a, 0x6eb6, 0x781b, 0x0066, 0x007c, 0x781b, 0x0066, 0x2200,
-+      0xa115, 0x00c0, 0x3556, 0x1078, 0x591e, 0x007c, 0x1078, 0x5972,
-+      0x007c, 0x781b, 0x0067, 0x007c, 0x781b, 0x005a, 0x007c, 0x1078,
-+      0x2bfa, 0x0078, 0x35b1, 0x6920, 0xd1c4, 0x0040, 0x3576, 0xc1c4,
-+      0x6922, 0x0c7e, 0x705c, 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004,
-+      0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x35a5, 0xd1cc, 0x0040,
-+      0x35a5, 0xc1cc, 0x6922, 0x0c7e, 0x705c, 0x2060, 0x6000, 0xc0ec,
-+      0x6002, 0x6004, 0xc0a4, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c,
-+      0x0040, 0x35a5, 0x1078, 0x43a4, 0x1078, 0x40f5, 0x88ff, 0x0040,
-+      0x35a5, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a,
-+      0xd6d4, 0x00c0, 0x35a0, 0x782b, 0x3008, 0x781b, 0x0058, 0x007c,
-+      0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x7e58, 0xd6d4, 0x00c0,
-+      0x35ac, 0x781b, 0x005a, 0x007c, 0x781b, 0x0067, 0x007c, 0x0078,
-+      0x42a3, 0xa01e, 0x7990, 0xa18c, 0x0007, 0x00c0, 0x35be, 0x6820,
-+      0xa084, 0x0100, 0x0040, 0x35af, 0x2009, 0x0008, 0x789b, 0x0010,
-+      0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, 0x35f5, 0x2300,
-+      0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x35ed, 0x0048, 0x35d2,
-+      0x0078, 0x35ef, 0xa380, 0x0002, 0xa102, 0x00c8, 0x35ed, 0x6920,
-+      0xa18c, 0xfcff, 0x6922, 0x0c7e, 0x705c, 0x2060, 0x6000, 0xa084,
-+      0xefef, 0x6002, 0x6004, 0xa084, 0xffe5, 0x6006, 0x0c7f, 0x7e58,
-+      0xa6b4, 0xfffb, 0x7e5a, 0x0078, 0x35a6, 0x0078, 0x3563, 0x24a8,
-+      0x7aa8, 0x00f0, 0x35ef, 0x0078, 0x35c0, 0xa284, 0x00f0, 0xa086,
-+      0x0020, 0x00c0, 0x364d, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040,
-+      0x3605, 0x0048, 0x3605, 0x0078, 0x364a, 0xa286, 0x0023, 0x0040,
-+      0x35af, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1,
-+      0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x705c,
-+      0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, 0x0040, 0x3626,
-+      0x1078, 0x43a4, 0x1078, 0x4201, 0x0078, 0x3634, 0x0c7e, 0x705c,
-+      0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, 0x0040, 0x35a5,
-+      0x1078, 0x43a4, 0x1078, 0x40f5, 0x88ff, 0x0040, 0x35a5, 0x789b,
-+      0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3645,
-+      0x782b, 0x3008, 0x781b, 0x0058, 0x007c, 0x782b, 0x3008, 0x781b,
-+      0x0067, 0x007c, 0x7aa8, 0x0078, 0x35c0, 0x8318, 0x2300, 0xa102,
-+      0x0040, 0x3656, 0x0048, 0x3656, 0x0078, 0x35c0, 0xa284, 0x0080,
-+      0x00c0, 0x42aa, 0x0078, 0x42a3, 0x0078, 0x42aa, 0x0078, 0x429c,
-+      0x705c, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e,
-+      0x0001, 0x0040, 0x366d, 0x1078, 0x2bfa, 0x7aa8, 0xa294, 0x00ff,
-+      0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x429c, 0x0079,
-+      0x3679, 0x429c, 0x4041, 0x429c, 0x41a4, 0xa282, 0x0000, 0x00c0,
-+      0x3683, 0x1078, 0x2bfa, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b,
-+      0x0067, 0x007c, 0xa282, 0x0003, 0x00c0, 0x3690, 0x1078, 0x2bfa,
-+      0xd4fc, 0x00c0, 0x36b0, 0x7068, 0xa005, 0x0040, 0x3699, 0x1078,
-+      0x2bfa, 0x6f14, 0x777a, 0xa7bc, 0x8f00, 0x1078, 0x43a8, 0x6008,
-+      0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x00c0, 0x369d,
-+      0x1078, 0x42c1, 0x706b, 0x0002, 0x701b, 0x0009, 0x0078, 0x36b2,
-+      0x1078, 0x42cd, 0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0xa282,
-+      0x0004, 0x0050, 0x36bd, 0x1078, 0x2bfa, 0x2300, 0x0079, 0x36c0,
-+      0x36c3, 0x37f4, 0x3825, 0xa286, 0x0003, 0x0040, 0x36c9, 0x1078,
-+      0x2bfa, 0x2001, 0x0000, 0x7046, 0x68d0, 0xa005, 0x0040, 0x36d2,
-+      0x7003, 0x0003, 0x68a0, 0xd0ec, 0x0040, 0x36d9, 0x6008, 0xc08d,
-+      0x600a, 0x7000, 0xa084, 0x000f, 0x0079, 0x36de, 0x2c6e, 0x36eb,
-+      0x36e8, 0x390e, 0x39a6, 0x2c6e, 0x36e6, 0x36e6, 0x1078, 0x2bfa,
-+      0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x00c0, 0x36f4, 0x1078, 0x55ac,
-+      0x2009, 0x0000, 0x0078, 0x379c, 0x7868, 0xa08c, 0x00ff, 0x0040,
-+      0x3733, 0xa186, 0x0008, 0x00c0, 0x370a, 0x6008, 0xc0a4, 0x600a,
-+      0x1078, 0x3f72, 0x0040, 0x3733, 0x1078, 0x3fe8, 0x1078, 0x55ac,
-+      0x0078, 0x371b, 0xa186, 0x0028, 0x00c0, 0x3733, 0x6018, 0xa005,
-+      0x0040, 0x36fd, 0x8001, 0x0040, 0x36fd, 0x8001, 0x0040, 0x36fd,
-+      0x601e, 0x0078, 0x36fd, 0x6820, 0xd084, 0x0040, 0x2c6e, 0xc084,
-+      0x6822, 0x1078, 0x2d8b, 0x7060, 0x0c7e, 0x2060, 0x6800, 0x6002,
-+      0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x3730, 0x6002,
-+      0x6006, 0x0078, 0x2c6e, 0x017e, 0x81ff, 0x00c0, 0x3755, 0x71f0,
-+      0xd1bc, 0x00c0, 0x3755, 0xd1b4, 0x0040, 0x3755, 0x1078, 0x44bc,
-+      0x00c0, 0x3755, 0x0d7e, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007,
-+      0x7882, 0x68b4, 0x785a, 0x781b, 0x004f, 0x704c, 0xc08d, 0x780a,
-+      0xc1b4, 0x71f2, 0x7003, 0x0030, 0x0d7f, 0x1078, 0x383b, 0x017f,
-+      0x81ff, 0x0040, 0x379c, 0xa684, 0x5f00, 0x681e, 0x682b, 0x0000,
-+      0x6f14, 0xa186, 0x0002, 0x00c0, 0x379d, 0x1078, 0x2d79, 0x1078,
-+      0x2d9a, 0x6820, 0xa084, 0x0800, 0x00c0, 0x379d, 0x8717, 0xa294,
-+      0x000f, 0x8213, 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, 0x377c,
-+      0xa290, 0x64c0, 0x0078, 0x377e, 0xa290, 0x6540, 0xa290, 0x0000,
-+      0x221c, 0xd3c4, 0x00c0, 0x3786, 0x0078, 0x378c, 0x8210, 0x2204,
-+      0xa085, 0x0018, 0x2012, 0x8211, 0xd3d4, 0x0040, 0x3797, 0x68a0,
-+      0xd0c4, 0x00c0, 0x3797, 0x1078, 0x38bd, 0x0078, 0x2c6e, 0x6008,
-+      0xc08d, 0x600a, 0x0078, 0x379d, 0x692a, 0x6916, 0x6818, 0xd0fc,
-+      0x0040, 0x37a4, 0x7044, 0x681a, 0xa68c, 0x5f00, 0x691e, 0x6010,
-+      0xa005, 0x0040, 0x37b0, 0x8001, 0x00d0, 0x37b0, 0x1078, 0x2bfa,
-+      0x6012, 0x6018, 0xa005, 0x0040, 0x37b9, 0x8001, 0x601a, 0x00c0,
-+      0x37bc, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, 0x37c8,
-+      0x6800, 0xa005, 0x00c0, 0x37c5, 0x6002, 0x6006, 0x0078, 0x37cc,
-+      0x7060, 0x2060, 0x6800, 0x6002, 0x2061, 0x6000, 0x6807, 0x0103,
-+      0x2d08, 0x206b, 0x0000, 0x6060, 0x8000, 0x6062, 0x6064, 0xa005,
-+      0x6166, 0x0040, 0x37de, 0x2d02, 0x0078, 0x37df, 0x616a, 0x7000,
-+      0xa086, 0x0030, 0x00c0, 0x2c6e, 0x7003, 0x0002, 0x70d8, 0xa06d,
-+      0x68c0, 0x703e, 0x70d4, 0xa065, 0x68c4, 0x705e, 0x2d00, 0x7052,
-+      0xad80, 0x0009, 0x7042, 0x007c, 0xa282, 0x0004, 0x0048, 0x37fa,
-+      0x1078, 0x2bfa, 0x2200, 0x0079, 0x37fd, 0x37f8, 0x3801, 0x380d,
-+      0x3801, 0x7000, 0xa086, 0x0005, 0x0040, 0x380a, 0x1078, 0x42bd,
-+      0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x7890, 0x8007, 0x8001,
-+      0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+      0xa186, 0x0003, 0x0040, 0x3822, 0xa186, 0x0000, 0x0040, 0x3822,
-+      0x0078, 0x429c, 0x781b, 0x0067, 0x007c, 0x6820, 0xc095, 0x6822,
-+      0x82ff, 0x00c0, 0x382f, 0x1078, 0x42bd, 0x0078, 0x3836, 0x8211,
-+      0x0040, 0x3834, 0x1078, 0x2bfa, 0x1078, 0x42cd, 0x782b, 0x3008,
-+      0x781b, 0x0067, 0x007c, 0xa684, 0x0060, 0x00c0, 0x3849, 0x2d00,
-+      0xa005, 0x0040, 0x38bc, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078,
-+      0x38bc, 0xd6dc, 0x00c0, 0x3861, 0x68b4, 0xd0dc, 0x00c0, 0x3861,
-+      0x6998, 0x6a94, 0x692e, 0x6a32, 0x7044, 0xa005, 0x00c0, 0x385e,
-+      0x2200, 0xa105, 0x0040, 0x3860, 0x7047, 0x0015, 0x0078, 0x55ac,
-+      0x007c, 0xd6ac, 0x0040, 0x388b, 0xd6f4, 0x0040, 0x386d, 0x682f,
-+      0x0000, 0x6833, 0x0000, 0x0078, 0x55ac, 0x68b4, 0xa084, 0x4000,
-+      0xa635, 0xd6f4, 0x00c0, 0x3867, 0x7044, 0xa005, 0x00c0, 0x387a,
-+      0x7047, 0x0015, 0xd6dc, 0x00c0, 0x3885, 0x68b4, 0xd0dc, 0x0040,
-+      0x3885, 0x69a8, 0x6aa4, 0x0078, 0x3887, 0x79d8, 0x7adc, 0x692e,
-+      0x6a32, 0x0078, 0x55ac, 0xd6f4, 0x0040, 0x3894, 0x682f, 0x0000,
-+      0x6833, 0x0000, 0x0078, 0x55ac, 0x68b4, 0xa084, 0x4800, 0xa635,
-+      0xd6f4, 0x00c0, 0x388e, 0x7044, 0xa005, 0x00c0, 0x38a1, 0x7047,
-+      0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8, 0x38a8, 0x8000,
-+      0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100,
-+      0xa205, 0x00c0, 0x38b5, 0x0078, 0x55ac, 0x7000, 0xa086, 0x0006,
-+      0x0040, 0x38bc, 0x0078, 0x55ac, 0x007c, 0x6008, 0xc0cd, 0xd3cc,
-+      0x0040, 0x38c3, 0xc08d, 0x600a, 0x6818, 0x68ba, 0x681b, 0x0006,
-+      0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942,
-+      0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000,
-+      0x689b, 0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0079,
-+      0x38e1, 0x2c6e, 0x38f3, 0x38eb, 0x38e9, 0x38e9, 0x38e9, 0x38e9,
-+      0x38e9, 0x1078, 0x2bfa, 0x6820, 0xd084, 0x00c0, 0x38f3, 0x1078,
-+      0x3fd3, 0x0078, 0x38f9, 0x7060, 0x2c50, 0x2060, 0x6800, 0x6002,
-+      0x2a60, 0xb28c, 0x0300, 0x0040, 0x3901, 0x2021, 0x6059, 0x0078,
-+      0x3903, 0x2021, 0x6099, 0x2404, 0xa005, 0x0040, 0x390a, 0x2020,
-+      0x0078, 0x3903, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078, 0x3fda,
-+      0x1078, 0x3fe8, 0x6008, 0xc0cc, 0x600a, 0x789b, 0x000e, 0x6f14,
-+      0x6817, 0x0002, 0xb28c, 0x0300, 0x0040, 0x3922, 0x2009, 0x0000,
-+      0x0078, 0x3924, 0x2009, 0x0001, 0x1078, 0x5ab0, 0xd6dc, 0x0040,
-+      0x392c, 0x691c, 0xc1ed, 0x691e, 0x68b8, 0xd0fc, 0x00c0, 0x3933,
-+      0x681a, 0x0078, 0x3942, 0x6818, 0xd0fc, 0x0040, 0x3942, 0x7868,
-+      0xa08c, 0x00ff, 0x0040, 0x3940, 0x681b, 0x001e, 0x0078, 0x3942,
-+      0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, 0x394a, 0x2021, 0x6099,
-+      0x0078, 0x394c, 0x2021, 0x6059, 0x2404, 0xad06, 0x0040, 0x3951,
-+      0x7460, 0x6800, 0x2022, 0x68d3, 0x0000, 0x70f4, 0xc084, 0x70f6,
-+      0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c4, 0x2060, 0x6000, 0xd0a4,
-+      0x0040, 0x3996, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020,
-+      0x0d7e, 0x0f7e, 0x157e, 0x147e, 0x2079, 0x6000, 0x1078, 0x1e83,
-+      0x147f, 0x157f, 0x0f7f, 0x70e8, 0x2010, 0x2009, 0x0101, 0x027e,
-+      0x2204, 0xa06d, 0x0040, 0x3986, 0x6814, 0xa706, 0x0040, 0x3983,
-+      0x6800, 0x0078, 0x3979, 0x6820, 0xc0d5, 0x6822, 0x027f, 0x8210,
-+      0x8109, 0x00c0, 0x3977, 0x0d7f, 0x706b, 0x0003, 0x7083, 0x0000,
-+      0x777a, 0x7087, 0x000f, 0x71f0, 0xc1dc, 0x71f2, 0x6818, 0xa086,
-+      0x0002, 0x00c0, 0x39a2, 0x6817, 0x0000, 0x682b, 0x0000, 0x681c,
-+      0xc0ec, 0x681e, 0x1078, 0x2251, 0x0078, 0x2c6e, 0x1078, 0x383b,
-+      0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, 0x44ff, 0xa08c,
-+      0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0040, 0x39b8, 0x7044, 0x681a,
-+      0xa68c, 0x5f00, 0x691e, 0x706b, 0x0000, 0x0078, 0x2c6e, 0x7000,
-+      0xa005, 0x00c0, 0x39c5, 0x0078, 0x2c6e, 0xa006, 0x1078, 0x55ac,
-+      0x6817, 0x0000, 0x6920, 0xd1ac, 0x00c0, 0x39d0, 0x681b, 0x0014,
-+      0xa68c, 0x5f00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff,
-+      0x6822, 0x7000, 0x0079, 0x39dc, 0x2c6e, 0x39e9, 0x39e6, 0x39eb,
-+      0x39eb, 0x39eb, 0x39e4, 0x39e4, 0x1078, 0x2bfa, 0x6008, 0xc0d4,
-+      0x600a, 0x1078, 0x3fe8, 0x6008, 0xc0a4, 0x600a, 0x0078, 0x3f98,
-+      0x2300, 0x0079, 0x39f3, 0x39f6, 0x39f8, 0x3a6d, 0x1078, 0x2bfa,
-+      0xd6fc, 0x00c0, 0x3a53, 0x7000, 0xa00d, 0x0079, 0x39ff, 0x2c6e,
-+      0x3a0f, 0x3a09, 0x3a3f, 0x3a0f, 0x3a4a, 0x3a07, 0x3a07, 0x1078,
-+      0x2bfa, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684,
-+      0x0060, 0x0040, 0x3a3f, 0xa086, 0x0060, 0x00c0, 0x3a3c, 0xc6ac,
-+      0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6, 0x681c, 0xc0ac, 0x681e, 0xa186,
-+      0x0002, 0x0040, 0x3a2e, 0x1078, 0x55ac, 0x69ac, 0x68b0, 0xa115,
-+      0x0040, 0x3a2e, 0x1078, 0x5972, 0x0078, 0x3a30, 0x1078, 0x591e,
-+      0x781b, 0x0067, 0x71f0, 0xd1b4, 0x00c0, 0x2c5e, 0x70c0, 0xa086,
-+      0x0001, 0x00c0, 0x2cc7, 0x007c, 0xd6ec, 0x0040, 0x3a19, 0x6818,
-+      0xd0fc, 0x0040, 0x3a4a, 0x681b, 0x0015, 0xd6f4, 0x0040, 0x3a4a,
-+      0x681b, 0x0007, 0x1078, 0x446a, 0x007c, 0x78cb, 0x0000, 0x781b,
-+      0x00cf, 0x0078, 0x2c5e, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x78d0,
-+      0x79d2, 0x801b, 0x00c8, 0x3a5d, 0x8000, 0xa084, 0x003f, 0xa108,
-+      0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+      0xa303, 0x68ae, 0x781b, 0x0067, 0x007c, 0x1078, 0x2bfa, 0x2300,
-+      0x0079, 0x3a72, 0x3a75, 0x3a77, 0x3ad7, 0x1078, 0x2bfa, 0xd6fc,
-+      0x00c0, 0x3ac7, 0x7000, 0xa00d, 0x0079, 0x3a7e, 0x2c6e, 0x3a8e,
-+      0x3a88, 0x3abe, 0x3a8e, 0x3ac4, 0x3a86, 0x3a86, 0x1078, 0x2bfa,
-+      0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060,
-+      0x0040, 0x3abe, 0xa086, 0x0060, 0x00c0, 0x3abb, 0xa6b4, 0xbfbf,
-+      0xc6ed, 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0040, 0x3aaa, 0x1078,
-+      0x55ac, 0x69ac, 0x68b0, 0xa115, 0x0040, 0x3aaa, 0x1078, 0x5972,
-+      0x0078, 0x3aac, 0x1078, 0x591e, 0x781b, 0x0067, 0x681c, 0xc0b4,
-+      0x681e, 0x71f0, 0xd1b4, 0x00c0, 0x2c5e, 0x70c0, 0xa086, 0x0001,
-+      0x00c0, 0x2cc7, 0x007c, 0xd6ec, 0x0040, 0x3a98, 0x6818, 0xd0fc,
-+      0x0040, 0x3ac4, 0x681b, 0x0007, 0x781b, 0x00d3, 0x007c, 0xc6fc,
-+      0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94,
-+      0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0067, 0x007c, 0xd6dc,
-+      0x0040, 0x3ae0, 0x782b, 0x3009, 0x781b, 0x0067, 0x0078, 0x2c5e,
-+      0x6820, 0xc095, 0x6822, 0x1078, 0x4450, 0xc6dd, 0x1078, 0x42bd,
-+      0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x2300, 0x0079, 0x3af0,
-+      0x3af3, 0x3af5, 0x3af7, 0x1078, 0x2bfa, 0x0078, 0x42aa, 0x7d98,
-+      0xd6d4, 0x00c0, 0x3b34, 0x79e4, 0xd1ac, 0x0040, 0x3b06, 0x78ec,
-+      0xa084, 0x0003, 0x0040, 0x3b06, 0x782b, 0x3009, 0x789b, 0x0060,
-+      0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac,
-+      0x0040, 0x3b17, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x3b30, 0x2001,
-+      0x6002, 0x2004, 0xd0e4, 0x00c0, 0x3b2c, 0x6820, 0xd0c4, 0x0040,
-+      0x3b2c, 0x0c7e, 0x705c, 0x2060, 0x6004, 0xc09d, 0x6006, 0x6008,
-+      0xa084, 0x00ff, 0x600a, 0x0c7f, 0x2001, 0x0014, 0x0078, 0x36cb,
-+      0xa184, 0x0007, 0x0079, 0x3b6b, 0x7a90, 0xa294, 0x0007, 0x789b,
-+      0x0060, 0x79a8, 0x81ff, 0x0040, 0x3b68, 0x789b, 0x0010, 0x7ba8,
-+      0xa384, 0x0001, 0x00c0, 0x3b5b, 0x7ba8, 0x7ba8, 0xa386, 0x0001,
-+      0x00c0, 0x3b4e, 0x2009, 0xfff7, 0x0078, 0x3b54, 0xa386, 0x0003,
-+      0x00c0, 0x3b5b, 0x2009, 0xffef, 0x0c7e, 0x705c, 0x2060, 0x6004,
-+      0xa104, 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684,
-+      0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922,
-+      0x7d9a, 0x0078, 0x445a, 0x3361, 0x336b, 0x3b75, 0x3b7b, 0x3b73,
-+      0x3b73, 0x445a, 0x445a, 0x1078, 0x2bfa, 0x6920, 0xa18c, 0xfcff,
-+      0x6922, 0x0078, 0x4462, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078,
-+      0x445a, 0x79e4, 0xa184, 0x0030, 0x0040, 0x3b8b, 0x78ec, 0xa084,
-+      0x0003, 0x00c0, 0x3bb9, 0x7000, 0xa086, 0x0004, 0x00c0, 0x3ba5,
-+      0x7068, 0xa086, 0x0002, 0x00c0, 0x3b9b, 0x2011, 0x0002, 0x2019,
-+      0x0000, 0x0078, 0x31d4, 0x7068, 0xa086, 0x0006, 0x0040, 0x3b95,
-+      0x7068, 0xa086, 0x0004, 0x0040, 0x3b95, 0x7000, 0xa086, 0x0000,
-+      0x0040, 0x2c5e, 0x6820, 0xd0ac, 0x00c0, 0x36cb, 0x6818, 0xa08e,
-+      0x0002, 0x0040, 0x3bb7, 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0078,
-+      0x36cb, 0xa184, 0x0007, 0x0079, 0x3bbd, 0x445a, 0x445a, 0x3bc5,
-+      0x445a, 0x44b1, 0x44b1, 0x445a, 0x445a, 0xd6bc, 0x0040, 0x3c09,
-+      0x7188, 0x81ff, 0x0040, 0x3c09, 0xa182, 0x000d, 0x00d0, 0x3bd4,
-+      0x708b, 0x0000, 0x0078, 0x3bd9, 0xa182, 0x000c, 0x708a, 0x2009,
-+      0x000c, 0x789b, 0x0061, 0x79aa, 0x157e, 0x137e, 0x147e, 0x708c,
-+      0x8114, 0xa210, 0x728e, 0xa080, 0x000b, 0xad00, 0x2098, 0x017e,
-+      0xb28c, 0x0300, 0x0040, 0x3bfc, 0x007e, 0x2001, 0x6002, 0x2004,
-+      0xd0ec, 0x007f, 0x0040, 0x3bf8, 0x20a1, 0x012b, 0x0078, 0x3bfe,
-+      0x20a1, 0x022b, 0x0078, 0x3bfe, 0x20a1, 0x012b, 0x017f, 0x789b,
-+      0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078,
-+      0x4462, 0xd6d4, 0x00c0, 0x3c5c, 0x6820, 0xd084, 0x0040, 0x4462,
-+      0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x3c1b, 0xa086, 0x0060,
-+      0x00c0, 0x3c1b, 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060,
-+      0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa,
-+      0x8008, 0x810c, 0x0040, 0x4001, 0xa18c, 0x00f8, 0x00c0, 0x4001,
-+      0x157e, 0x137e, 0x147e, 0x017e, 0xb28c, 0x0300, 0x0040, 0x3c48,
-+      0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3c44,
-+      0x20a1, 0x012b, 0x0078, 0x3c4a, 0x20a1, 0x022b, 0x0078, 0x3c4a,
-+      0x20a1, 0x012b, 0x017f, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+      0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0xc0fc,
-+      0x8007, 0x7882, 0x0078, 0x4462, 0x6818, 0xd0fc, 0x0040, 0x3c62,
-+      0x681b, 0x0008, 0x6820, 0xc0ad, 0x6822, 0x1078, 0x42c5, 0x78cb,
-+      0x0000, 0x781b, 0x00cb, 0x007c, 0x2300, 0x0079, 0x3c6f, 0x3c74,
-+      0x3d11, 0x3c72, 0x1078, 0x2bfa, 0x7000, 0xa084, 0x000f, 0x0079,
-+      0x3c79, 0x2c6e, 0x3cc1, 0x3c83, 0x3c8c, 0x3c81, 0x2c6e, 0x3c81,
-+      0x3c81, 0x1078, 0x2bfa, 0x681c, 0xd0ec, 0x0040, 0x3c9d, 0x6008,
-+      0xc08d, 0x600a, 0x0078, 0x3c9d, 0x68d0, 0xa005, 0x00c0, 0x3cc1,
-+      0x6920, 0xa18d, 0x0001, 0x6922, 0x68d3, 0x0001, 0x70f4, 0xc085,
-+      0x70f6, 0x6800, 0x7066, 0x0078, 0x3cae, 0x6920, 0xc185, 0x6922,
-+      0x6800, 0x6006, 0xa005, 0x00c0, 0x3ca6, 0x6002, 0x6008, 0xc0d4,
-+      0x600a, 0x681c, 0xa084, 0x000e, 0x00c0, 0x3cb8, 0x2009, 0xa7d0,
-+      0xb284, 0x0300, 0x0040, 0x3cbd, 0x2009, 0xa6c0, 0x0078, 0x3cbd,
-+      0x702c, 0x68be, 0x713c, 0x70e8, 0xa108, 0x2104, 0x6802, 0x2d0a,
-+      0x7162, 0x6eb6, 0xa684, 0x0060, 0x00c0, 0x3ccb, 0xa684, 0x7fff,
-+      0x68b6, 0x0078, 0x3d0f, 0xd6dc, 0x00c0, 0x3cd9, 0xa684, 0x7fff,
-+      0x68b6, 0x6894, 0x68a6, 0x6898, 0x68aa, 0x1078, 0x55ac, 0x0078,
-+      0x3d0f, 0xd6ac, 0x0040, 0x3cec, 0x68d0, 0xa005, 0x0040, 0x3ce4,
-+      0x1078, 0x5ab0, 0x0078, 0x3ce6, 0x1078, 0x55ac, 0x79d8, 0x7adc,
-+      0x69aa, 0x6aa6, 0x0078, 0x3cf2, 0x1078, 0x43bc, 0x69aa, 0x6aa6,
-+      0x1078, 0x55ac, 0xd6fc, 0x0040, 0x3d0f, 0xa684, 0x7fff, 0x68b6,
-+      0x7adc, 0x79d8, 0xd6ac, 0x00c0, 0x3d07, 0x78d0, 0x801b, 0x00c8,
-+      0x3d02, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98,
-+      0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078,
-+      0x2c6e, 0x0078, 0x42aa, 0x7043, 0x0000, 0xa282, 0x0006, 0x0050,
-+      0x3d1b, 0x1078, 0x2bfa, 0x7000, 0xa086, 0x0007, 0x1040, 0x45de,
-+      0x2300, 0x0079, 0x3d23, 0x3d26, 0x3d5d, 0x3d7e, 0x2200, 0x0079,
-+      0x3d29, 0x3d5b, 0x42aa, 0x3d2f, 0x3d5b, 0x3da1, 0x3e14, 0x7003,
-+      0x0005, 0xb284, 0x0300, 0x0040, 0x3d39, 0x2001, 0xaa20, 0x0078,
-+      0x3d3b, 0x2001, 0xaa57, 0x2068, 0x7052, 0x157e, 0x20a9, 0x0037,
-+      0x2003, 0x0000, 0x8000, 0x00f0, 0x3d40, 0x157f, 0xad80, 0x0009,
-+      0x7042, 0xb284, 0x0300, 0x0040, 0x3d51, 0x6817, 0x0000, 0x0078,
-+      0x3d53, 0x6817, 0x8000, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
-+      0x0003, 0x0078, 0x429c, 0x1078, 0x2bfa, 0x2200, 0xa086, 0x0003,
-+      0x0040, 0x3da1, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3d6c,
-+      0x2001, 0xaa20, 0x0078, 0x3d6e, 0x2001, 0xaa57, 0x2068, 0x7052,
-+      0xad80, 0x0009, 0x7042, 0x2200, 0x0079, 0x3d76, 0x42aa, 0x3d7c,
-+      0x3d7c, 0x3da1, 0x3d7c, 0x42aa, 0x1078, 0x2bfa, 0x7003, 0x0005,
-+      0xb284, 0x0300, 0x0040, 0x3d88, 0x2001, 0xaa20, 0x0078, 0x3d8a,
-+      0x2001, 0xaa57, 0x2068, 0x7052, 0xad80, 0x0009, 0x7042, 0x2200,
-+      0x0079, 0x3d92, 0x3d9a, 0x3d98, 0x3d98, 0x3d9a, 0x3d98, 0x3d9a,
-+      0x1078, 0x2bfa, 0x1078, 0x42cd, 0x782b, 0x3008, 0x781b, 0x0067,
-+      0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3db3, 0x70f0, 0xc0b5,
-+      0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da, 0x0078, 0x3db8, 0x1078,
-+      0x55ac, 0x0078, 0x3db8, 0x7000, 0xa086, 0x0003, 0x0040, 0x3daf,
-+      0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+      0xa484, 0x001f, 0xa215, 0x2069, 0xa6c0, 0xb284, 0x0300, 0x00c0,
-+      0x3dcc, 0xc2fd, 0x2069, 0xa7d0, 0x2d04, 0x2d08, 0x7162, 0xa06d,
-+      0x0040, 0x3dd9, 0x6814, 0xa206, 0x0040, 0x3df9, 0x6800, 0x0078,
-+      0x3dcd, 0x7003, 0x0005, 0xd2fc, 0x00c0, 0x3de2, 0x2001, 0xaa20,
-+      0x0078, 0x3de4, 0x2001, 0xaa57, 0x2068, 0x7052, 0x157e, 0x20a9,
-+      0x0037, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3de9, 0x157f, 0xad80,
-+      0x0009, 0x7042, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
-+      0x0003, 0x6eb4, 0x7e5a, 0x6920, 0xa184, 0x0c00, 0x0040, 0x3e9e,
-+      0x7068, 0xa086, 0x0006, 0x00c0, 0x3e0b, 0x7078, 0xa206, 0x00c0,
-+      0x3e0b, 0x706a, 0x7082, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922,
-+      0x1078, 0x42c5, 0x0078, 0x3e9e, 0x7200, 0xa286, 0x0002, 0x00c0,
-+      0x3e26, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da,
-+      0x0078, 0x3e2a, 0x1078, 0x55ac, 0x0078, 0x3e2a, 0xa286, 0x0003,
-+      0x0040, 0x3e22, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b,
-+      0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0xb284, 0x0300, 0x00c0,
-+      0x3e3a, 0xc2fd, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70e8,
-+      0xa168, 0x2d04, 0x2d08, 0x7162, 0xa06d, 0x0040, 0x3e4e, 0x6814,
-+      0xa206, 0x0040, 0x3e77, 0x6800, 0x0078, 0x3e42, 0x7003, 0x0005,
-+      0xb284, 0x0300, 0x0040, 0x3e58, 0x2001, 0xaa20, 0x0078, 0x3e5a,
-+      0x2001, 0xaa57, 0x2068, 0x7052, 0x157e, 0x20a9, 0x0037, 0x2003,
-+      0x0000, 0x8000, 0x00f0, 0x3e5f, 0x157f, 0xad80, 0x0009, 0x7042,
-+      0xb284, 0x0300, 0x0040, 0x3e6f, 0xc2fc, 0x0078, 0x3e70, 0xc2fd,
-+      0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4,
-+      0x6920, 0xa184, 0x0c00, 0x0040, 0x3e9e, 0xd0dc, 0x0040, 0x3e93,
-+      0x7068, 0xa086, 0x0004, 0x00c0, 0x3e8f, 0x7078, 0xa206, 0x00c0,
-+      0x3e8f, 0x707c, 0xa306, 0x00c0, 0x3e8f, 0x706a, 0x7082, 0x1078,
-+      0x42c9, 0x0078, 0x3e9e, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922,
-+      0x1078, 0x42c5, 0x7083, 0x0000, 0x0078, 0x3e9e, 0x68c4, 0x705e,
-+      0xc6ec, 0xa684, 0x0060, 0x0040, 0x3ee9, 0x6b98, 0x6c94, 0x69ac,
-+      0x68b0, 0xa105, 0x00c0, 0x3ecb, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde,
-+      0xa684, 0x0060, 0xa086, 0x0060, 0x0040, 0x3eef, 0x68d0, 0xa005,
-+      0x0040, 0x3ec3, 0x7003, 0x0003, 0x682b, 0x0000, 0xc6ed, 0x1078,
-+      0x590b, 0x0078, 0x3eef, 0xd6f4, 0x00c0, 0x3eef, 0xc6ed, 0x1078,
-+      0x591e, 0x0078, 0x3eef, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400,
-+      0xa305, 0x0040, 0x3ef1, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68d0,
-+      0xa005, 0x0040, 0x3ee1, 0x7003, 0x0003, 0x1078, 0x590b, 0x0078,
-+      0x3ef1, 0xd6f4, 0x00c0, 0x3ee8, 0xc6ed, 0x68b0, 0x1078, 0x5972,
-+      0xc6f4, 0x2019, 0x0000, 0x2021, 0x0000, 0x0078, 0x3ef1, 0xa6b4,
-+      0xb7ff, 0x7e5a, 0x2009, 0x0067, 0xa684, 0x0004, 0x0040, 0x3f11,
-+      0x78e4, 0xa084, 0x0030, 0x0040, 0x3f09, 0x78ec, 0xa084, 0x0003,
-+      0x0040, 0x3f09, 0x782b, 0x3008, 0x2019, 0x0000, 0x2320, 0x0078,
-+      0x3f11, 0x0f7e, 0x2079, 0x6000, 0x1078, 0x55ac, 0x0f7f, 0x0040,
-+      0x2c6e, 0x791a, 0x2d00, 0x7052, 0x68c8, 0x2060, 0x71f0, 0x2001,
-+      0x6001, 0x2004, 0xd0c4, 0x00c0, 0x3f65, 0x70f8, 0xa02d, 0x0040,
-+      0x3f3e, 0xd1bc, 0x0040, 0x3f58, 0x7a80, 0xa294, 0x0f00, 0x70fc,
-+      0xa206, 0x0040, 0x3f2f, 0x78e0, 0xa504, 0x00c0, 0x3f65, 0x70fa,
-+      0xc1bc, 0x71f2, 0x0078, 0x3f65, 0x2031, 0x0001, 0x852c, 0x0048,
-+      0x3f3d, 0x8633, 0x8210, 0x0078, 0x3f36, 0x007c, 0x7de0, 0xa594,
-+      0xff00, 0x0040, 0x3f4b, 0x2011, 0x0008, 0x852f, 0x1078, 0x3f34,
-+      0x8637, 0x0078, 0x3f4d, 0x1078, 0x3f34, 0x8217, 0x7880, 0xa084,
-+      0x0f00, 0xa206, 0x0040, 0x3f65, 0x72fe, 0x76fa, 0x0078, 0x3f65,
-+      0x7a80, 0xa294, 0x0f00, 0x70fc, 0xa236, 0x0040, 0x3f55, 0x78e0,
-+      0xa534, 0x0040, 0x3f55, 0xc1bd, 0x71f2, 0xd1b4, 0x00c0, 0x2c5e,
-+      0x2300, 0xa405, 0x0040, 0x2c5e, 0x70c0, 0xa086, 0x0001, 0x00c0,
-+      0x2cc7, 0x007c, 0x6020, 0xa005, 0x0040, 0x3f80, 0x8001, 0x6022,
-+      0x6008, 0xa085, 0x0008, 0x600a, 0x700b, 0x0100, 0x7028, 0x6026,
-+      0x007c, 0xa006, 0x1078, 0x55ac, 0x7000, 0xa086, 0x0002, 0x0040,
-+      0x3f8e, 0x7068, 0xa086, 0x0005, 0x00c0, 0x3f98, 0x682b, 0x0000,
-+      0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f, 0x0100,
-+      0x7000, 0xa084, 0x000f, 0x0079, 0x3f9d, 0x2c6e, 0x3fad, 0x3fa7,
-+      0x3fcf, 0x3fb7, 0x3fb5, 0x3fa5, 0x3fa5, 0x1078, 0x2bfa, 0x1078,
-+      0x3fda, 0x1078, 0x3fd3, 0x0078, 0x3fb3, 0x1078, 0x3fda, 0x7060,
-+      0x2060, 0x6800, 0x6002, 0x1078, 0x2251, 0x0078, 0x2c6e, 0x7068,
-+      0x706b, 0x0000, 0x7087, 0x0000, 0x0079, 0x3fbe, 0x3fcb, 0x3fcb,
-+      0x3fc6, 0x3fc6, 0x3fc6, 0x3fcb, 0x3fc6, 0x3fcb, 0x77f0, 0xc7dd,
-+      0x77f2, 0x0079, 0x31ef, 0x706b, 0x0000, 0x0078, 0x2c6e, 0x681b,
-+      0x0000, 0x0078, 0x390e, 0x6800, 0xa005, 0x00c0, 0x3fd8, 0x6002,
-+      0x6006, 0x007c, 0x6010, 0xa005, 0x0040, 0x3fe3, 0x8001, 0x00d0,
-+      0x3fe3, 0x1078, 0x2bfa, 0x6012, 0x6008, 0xc0a4, 0x600a, 0x007c,
-+      0x6018, 0xa005, 0x0040, 0x3fee, 0x8001, 0x601a, 0x007c, 0x1078,
-+      0x44fa, 0x681b, 0x0018, 0x0078, 0x402d, 0x1078, 0x44fa, 0x681b,
-+      0x0019, 0x0078, 0x402d, 0x1078, 0x44fa, 0x681b, 0x001a, 0x0078,
-+      0x402d, 0x1078, 0x44fa, 0x681b, 0x0003, 0x0078, 0x402d, 0x7778,
-+      0x1078, 0x43a8, 0x717c, 0xa18c, 0x00ff, 0xd7fc, 0x00c0, 0x4014,
-+      0xa1e8, 0xa5c0, 0x0078, 0x4016, 0xa1e8, 0xa6d0, 0x2d04, 0x2d08,
-+      0x2068, 0xa005, 0x00c0, 0x401f, 0x7082, 0x0078, 0x2c6e, 0x6814,
-+      0x7278, 0xa206, 0x0040, 0x4027, 0x6800, 0x0078, 0x4017, 0x6800,
-+      0x200a, 0x681b, 0x0005, 0x7083, 0x0000, 0x1078, 0x3fda, 0x6820,
-+      0xd084, 0x00c0, 0x4035, 0x1078, 0x3fd3, 0x1078, 0x3fe8, 0x681f,
-+      0x0000, 0x6823, 0x0020, 0x682b, 0x0000, 0x1078, 0x2251, 0x0078,
-+      0x2c6e, 0xa282, 0x0003, 0x00c0, 0x429c, 0x7da8, 0xa5ac, 0x00ff,
-+      0x7ca8, 0xa4a4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040,
-+      0x409f, 0xc1c4, 0x6922, 0xa4a4, 0x00ff, 0x0040, 0x408c, 0xa482,
-+      0x000c, 0x0048, 0x405f, 0x0040, 0x405f, 0x2021, 0x000c, 0x2500,
-+      0xa086, 0x000a, 0x0040, 0x4066, 0x852b, 0x852b, 0x1078, 0x4334,
-+      0x0040, 0x406e, 0x1078, 0x4162, 0x0078, 0x4095, 0x1078, 0x4320,
-+      0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x418d,
-+      0x0c7f, 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4,
-+      0x00c0, 0x4087, 0x782b, 0x3008, 0x781b, 0x0058, 0x007c, 0x782b,
-+      0x3008, 0x781b, 0x0067, 0x007c, 0x0c7e, 0x2960, 0x6004, 0xa084,
-+      0xfff5, 0x6006, 0x1078, 0x418d, 0x0c7f, 0x7e58, 0xd6d4, 0x00c0,
-+      0x409c, 0x781b, 0x005a, 0x007c, 0x781b, 0x0067, 0x007c, 0x0c7e,
-+      0x705c, 0x2060, 0x6100, 0xd1e4, 0x0040, 0x40e8, 0x6208, 0x8217,
-+      0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x40b2, 0x0040, 0x40b2,
-+      0x2011, 0x000c, 0x2400, 0xa202, 0x00c8, 0x40b7, 0x2220, 0x6208,
-+      0xa294, 0x00ff, 0x2001, 0x6003, 0x2004, 0xd0e4, 0x00c0, 0x40cc,
-+      0x78ec, 0xd0e4, 0x0040, 0x40cc, 0xa282, 0x000a, 0x00c8, 0x40d2,
-+      0x2011, 0x000a, 0x0078, 0x40d2, 0xa282, 0x000c, 0x00c8, 0x40d2,
-+      0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x40d7, 0x2228, 0x1078,
-+      0x4324, 0x2500, 0xa086, 0x000a, 0x0040, 0x40e0, 0x852b, 0x852b,
-+      0x1078, 0x4334, 0x0040, 0x40e8, 0x1078, 0x4162, 0x0078, 0x40ec,
-+      0x1078, 0x4320, 0x1078, 0x418d, 0x7858, 0xc095, 0x785a, 0x0c7f,
-+      0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x0c7e, 0x2960, 0x6000,
-+      0xd0e4, 0x00c0, 0x410b, 0xa084, 0x0040, 0x00c0, 0x4105, 0x6104,
-+      0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019,
-+      0x0000, 0x0078, 0x4136, 0x68a0, 0xd0cc, 0x00c0, 0x4105, 0x6208,
-+      0xa294, 0x00ff, 0x2001, 0x6003, 0x2004, 0xd0e4, 0x00c0, 0x4124,
-+      0x78ec, 0xd0e4, 0x0040, 0x4124, 0xa282, 0x000b, 0x00c8, 0x4124,
-+      0x2011, 0x000a, 0x0078, 0x412a, 0xa282, 0x000c, 0x00c8, 0x412a,
-+      0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c,
-+      0x0048, 0x4136, 0x0040, 0x4136, 0x2019, 0x000c, 0x78ab, 0x0001,
-+      0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005,
-+      0x6820, 0xc0c5, 0x6822, 0x1078, 0x2d79, 0x0c7f, 0x007c, 0x0c7e,
-+      0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019,
-+      0x0000, 0x0078, 0x4153, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+      0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822,
-+      0x0c7f, 0x007c, 0x0c7e, 0x715c, 0x2160, 0x1078, 0x4169, 0x0c7f,
-+      0x007c, 0x2008, 0xa084, 0xfff0, 0xa425, 0x7c86, 0x6018, 0x789a,
-+      0x7cae, 0x6412, 0x78a4, 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105,
-+      0x78a6, 0x6016, 0x788a, 0xa4a4, 0x000f, 0x8427, 0x8204, 0x8004,
-+      0xa084, 0x00ff, 0xa405, 0x600e, 0x78ec, 0xd08c, 0x00c0, 0x418c,
-+      0x6004, 0xa084, 0xfff5, 0x6006, 0x007c, 0x0c7e, 0x705c, 0x2060,
-+      0x1078, 0x4194, 0x0c7f, 0x007c, 0x6018, 0x789a, 0x78a4, 0xa084,
-+      0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, 0x600c,
-+      0xa084, 0x00ff, 0x600e, 0x007c, 0xa282, 0x0002, 0x00c0, 0x429c,
-+      0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0040, 0x41e3, 0xc1cc,
-+      0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, 0x429c, 0x1078,
-+      0x4227, 0x1078, 0x418d, 0xa980, 0x0001, 0x200c, 0x1078, 0x43a4,
-+      0x1078, 0x40f5, 0x88ff, 0x0040, 0x41d9, 0x789b, 0x0060, 0x2800,
-+      0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x41d4, 0x782b,
-+      0x3008, 0x781b, 0x0058, 0x007c, 0x782b, 0x3008, 0x781b, 0x0067,
-+      0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x41e0, 0x781b, 0x005a, 0x007c,
-+      0x781b, 0x0067, 0x007c, 0xa282, 0x0002, 0x00c8, 0x41eb, 0xa284,
-+      0x0001, 0x0040, 0x41f3, 0x715c, 0xa188, 0x0000, 0x210c, 0xd1ec,
-+      0x00c0, 0x41f3, 0xa016, 0x1078, 0x4311, 0x1078, 0x4227, 0x1078,
-+      0x418d, 0x7858, 0xc095, 0x785a, 0x782b, 0x3008, 0x781b, 0x0067,
-+      0x007c, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec,
-+      0x00c0, 0x4215, 0xa084, 0x0080, 0x00c0, 0x4213, 0xc1a4, 0x6106,
-+      0xa006, 0x0078, 0x4224, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab,
-+      0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x1078, 0x2d79,
-+      0x6820, 0xa085, 0x0200, 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e,
-+      0x705c, 0x2060, 0x1078, 0x422e, 0x0c7f, 0x007c, 0x82ff, 0x0040,
-+      0x4233, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4,
-+      0xa084, 0xffbf, 0xa205, 0x78a6, 0x788a, 0x6016, 0x6004, 0x78ec,
-+      0xd08c, 0x00c0, 0x4245, 0xc0a4, 0x6006, 0x007c, 0x007e, 0x7000,
-+      0xa086, 0x0003, 0x0040, 0x424f, 0x007f, 0x0078, 0x4252, 0x007f,
-+      0x0078, 0x4299, 0xd6ac, 0x0040, 0x4299, 0x7888, 0xa084, 0x0040,
-+      0x0040, 0x4299, 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, 0x4261,
-+      0x8000, 0xa005, 0x0040, 0x4276, 0x831b, 0x00c8, 0x426a, 0x8001,
-+      0x0040, 0x4296, 0xd6f4, 0x0040, 0x4276, 0x78b8, 0x801b, 0x00c8,
-+      0x4272, 0x8000, 0xa084, 0x003f, 0x00c0, 0x4296, 0xc6f4, 0x7e5a,
-+      0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x4281, 0xa291,
-+      0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x5a6b, 0x781b,
-+      0x0066, 0xb284, 0x0300, 0x0040, 0x4291, 0x2001, 0x0000, 0x0078,
-+      0x4293, 0x2001, 0x0001, 0x1078, 0x588c, 0x007c, 0x781b, 0x0066,
-+      0x007c, 0x781b, 0x0067, 0x007c, 0x1078, 0x42d1, 0x782b, 0x3008,
-+      0x781b, 0x0067, 0x007c, 0x1078, 0x42bd, 0x782b, 0x3008, 0x781b,
-+      0x0067, 0x007c, 0x6827, 0x0002, 0x1078, 0x42c5, 0x78e4, 0xa084,
-+      0x0030, 0x0040, 0x2c6e, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2c6e,
-+      0x782b, 0x3008, 0x781b, 0x0067, 0x007c, 0x2001, 0x0005, 0x0078,
-+      0x42d3, 0x2001, 0x000c, 0x0078, 0x42d3, 0x2001, 0x0006, 0x0078,
-+      0x42d3, 0x2001, 0x000d, 0x0078, 0x42d3, 0x2001, 0x0009, 0x0078,
-+      0x42d3, 0x2001, 0x0007, 0x789b, 0x0010, 0x78aa, 0x789b, 0x0060,
-+      0x78ab, 0x0001, 0xc695, 0x7e5a, 0x0078, 0x2d79, 0x077e, 0x873f,
-+      0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0x017e, 0xb28c, 0x0300,
-+      0x0040, 0x42ee, 0xa0e0, 0x64c0, 0x0078, 0x42f0, 0xa0e0, 0x6540,
-+      0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040,
-+      0x4300, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004, 0xc09d, 0x6006,
-+      0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, 0x0040, 0x0040, 0x430f,
-+      0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004, 0xc0a5, 0x6006, 0x077f,
-+      0x007c, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+      0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x0078, 0x2d79,
-+      0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001,
-+      0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0060,
-+      0x78ab, 0x0005, 0x0078, 0x2d79, 0x157e, 0x2001, 0x6003, 0x2004,
-+      0xd0e4, 0x00c0, 0x4367, 0x2009, 0x439b, 0x20a9, 0x0009, 0x2510,
-+      0xa582, 0x000a, 0x0040, 0x4362, 0x0048, 0x4362, 0x8108, 0x95a9,
-+      0xa582, 0x0030, 0x0040, 0x437d, 0x0048, 0x437d, 0x8108, 0x95a9,
-+      0x2019, 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x437d,
-+      0x0048, 0x437d, 0x8108, 0x2300, 0xa210, 0x00f0, 0x4354, 0x157f,
-+      0x0078, 0x437b, 0x2510, 0x8213, 0x8213, 0x0078, 0x437d, 0x2009,
-+      0x438d, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x2200,
-+      0xa502, 0x0040, 0x437d, 0x0048, 0x437d, 0x8108, 0x2300, 0xa210,
-+      0x00f0, 0x436f, 0x157f, 0xa006, 0x007c, 0x157f, 0xa582, 0x0064,
-+      0x00c8, 0x438a, 0x7808, 0xa085, 0x0070, 0x780a, 0x704c, 0xa085,
-+      0x0070, 0x704e, 0x2104, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202,
-+      0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06,
-+      0x0c07, 0x0c07, 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06,
-+      0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c,
-+      0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003,
-+      0x8003, 0xa105, 0xd7fc, 0x0040, 0x43b9, 0xa0e0, 0x85c0, 0x0078,
-+      0x43bb, 0xa0e0, 0x65c0, 0x007c, 0x79d8, 0x7adc, 0x78d0, 0x801b,
-+      0x00c8, 0x43c3, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000,
-+      0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, 0x43d6, 0x2079, 0x0100,
-+      0x2009, 0x6080, 0x2071, 0x6080, 0x0078, 0x43e6, 0x2001, 0x6002,
-+      0x2004, 0xd0ec, 0x0040, 0x43e0, 0x2079, 0x0100, 0x0078, 0x43e2,
-+      0x2079, 0x0200, 0x2009, 0x6040, 0x2071, 0x6040, 0x2091, 0x8000,
-+      0x2104, 0xa084, 0x000f, 0x0079, 0x43ed, 0x43f7, 0x43f7, 0x43f7,
-+      0x43f7, 0x43f7, 0x43f7, 0x43f5, 0x444a, 0x1078, 0x2bfa, 0x69b4,
-+      0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0040, 0x4447, 0x7858,
-+      0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, 0x1814,
-+      0x00c0, 0x4447, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x00c0,
-+      0x440c, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x00c0, 0x4413,
-+      0x7830, 0xd0bc, 0x00c0, 0x4447, 0x3200, 0x007e, 0x2001, 0x6002,
-+      0x2004, 0xd0ec, 0x007f, 0x0040, 0x4429, 0xa084, 0x0300, 0x0078,
-+      0x442b, 0xa084, 0x0400, 0x0040, 0x4431, 0x0018, 0x4447, 0x0078,
-+      0x4433, 0x0028, 0x4447, 0x79e4, 0xa184, 0x0030, 0x0040, 0x4447,
-+      0x78ec, 0xa084, 0x0003, 0x0040, 0x4447, 0x681c, 0xd0ac, 0x00c0,
-+      0x4445, 0x1078, 0x446a, 0x0078, 0x4447, 0x781b, 0x00d3, 0x0f7f,
-+      0x0e7f, 0x007c, 0x70a7, 0x0000, 0x1078, 0x46d0, 0x0078, 0x4447,
-+      0x2001, 0x6001, 0x2004, 0xd0ac, 0x00c0, 0x4459, 0x6814, 0x1078,
-+      0x2b7a, 0x007c, 0x781b, 0x0067, 0x007c, 0x782b, 0x3008, 0x781b,
-+      0x0067, 0x007c, 0x781b, 0x005a, 0x007c, 0x782b, 0x3008, 0x781b,
-+      0x0058, 0x007c, 0x2009, 0x6017, 0x210c, 0xa186, 0x0000, 0x0040,
-+      0x447c, 0xa186, 0x0001, 0x0040, 0x4481, 0x701b, 0x000b, 0x706b,
-+      0x0001, 0x781b, 0x0048, 0x007c, 0x78cb, 0x0000, 0x781b, 0x00cf,
-+      0x007c, 0x701b, 0x000a, 0x007c, 0x2009, 0x6017, 0x210c, 0xa186,
-+      0x0000, 0x0040, 0x449a, 0xa186, 0x0001, 0x0040, 0x4497, 0x701b,
-+      0x000b, 0x706b, 0x0001, 0x781b, 0x0048, 0x0078, 0x2c5e, 0x701b,
-+      0x000a, 0x007c, 0x782b, 0x3008, 0x78cb, 0x0000, 0x781b, 0x00cf,
-+      0x007c, 0x781b, 0x00d3, 0x007c, 0x782b, 0x3008, 0x781b, 0x00d3,
-+      0x007c, 0x781b, 0x009b, 0x007c, 0x782b, 0x3008, 0x781b, 0x009b,
-+      0x007c, 0x6818, 0xd0fc, 0x0040, 0x44b7, 0x681b, 0x001d, 0x706b,
-+      0x0001, 0x781b, 0x0048, 0x007c, 0x7830, 0xa084, 0x00c0, 0x00c0,
-+      0x44df, 0x7808, 0xa084, 0xfffc, 0x780a, 0x0005, 0x0005, 0x0005,
-+      0x0005, 0x78ec, 0xa084, 0x0021, 0x00c0, 0x44dc, 0x2001, 0x6003,
-+      0x2004, 0xd0e4, 0x00c0, 0x44da, 0x7804, 0xa084, 0xff1f, 0xa085,
-+      0x00e0, 0x7806, 0xa006, 0x007c, 0x704c, 0xc08d, 0x780a, 0x007c,
-+      0x7830, 0xa084, 0x0080, 0x00c0, 0x44f9, 0x78ec, 0xa084, 0x0002,
-+      0x00c0, 0x44f9, 0x7808, 0xc08c, 0x780a, 0x0005, 0x0005, 0x0005,
-+      0x0005, 0x78ec, 0xa084, 0x0002, 0x0040, 0x44f9, 0x7808, 0xc08d,
-+      0x780a, 0x007c, 0x704c, 0xc08d, 0x704e, 0x780a, 0x007c, 0x7830,
-+      0xa084, 0x0040, 0x00c0, 0x44ff, 0x3200, 0x007e, 0x2001, 0x6002,
-+      0x2004, 0xd0ec, 0x007f, 0x0040, 0x4511, 0xa084, 0x0300, 0x0078,
-+      0x4513, 0xa084, 0x0400, 0x0040, 0x4519, 0x0098, 0x451d, 0x0078,
-+      0x451b, 0x00a8, 0x451d, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd,
-+      0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021,
-+      0x0040, 0x4541, 0x3200, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x4537, 0xa084, 0x0300, 0x0078, 0x4539, 0xa084,
-+      0x0400, 0x0040, 0x453f, 0x0098, 0x453b, 0x0078, 0x4541, 0x00a8,
-+      0x453f, 0x78ac, 0x007e, 0x704c, 0x780a, 0x007f, 0x007c, 0x78ec,
-+      0xa084, 0x0002, 0x00c0, 0x5596, 0xa784, 0x007d, 0x00c0, 0x4553,
-+      0x2700, 0x1078, 0x2bfa, 0xa784, 0x0001, 0x00c0, 0x39bf, 0xa784,
-+      0x0070, 0x0040, 0x4563, 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x2b67,
-+      0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, 0x4570, 0x784b,
-+      0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x39bf, 0x0078, 0x445a,
-+      0xa784, 0x0004, 0x0040, 0x459f, 0x78b8, 0xa084, 0x4001, 0x0040,
-+      0x459f, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x39bf,
-+      0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, 0x459f, 0x78c0,
-+      0xa085, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00d3, 0x007c, 0x784b,
-+      0x0008, 0x6818, 0xd0fc, 0x0040, 0x459c, 0x681b, 0x0015, 0xd6f4,
-+      0x0040, 0x459c, 0x681b, 0x0007, 0x1078, 0x446a, 0x007c, 0x681b,
-+      0x0003, 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833,
-+      0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x332a,
-+      0x3200, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x007f, 0x0040,
-+      0x45bd, 0xa084, 0x0300, 0x0078, 0x45bf, 0xa084, 0x0400, 0x0040,
-+      0x45c5, 0x0018, 0x2c5e, 0x0078, 0x45c7, 0x0028, 0x2c5e, 0x0078,
-+      0x42a3, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0xd3fc, 0x0040, 0x45d7, 0xa080, 0x6540, 0x0078, 0x45d9, 0xa080,
-+      0x64c0, 0x2060, 0x2048, 0x705e, 0x2a60, 0x007c, 0x7000, 0x0079,
-+      0x45e1, 0x45e9, 0x45e9, 0x45ea, 0x45f2, 0x45e9, 0x45e9, 0x45e9,
-+      0x45f5, 0x007c, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+      0x601a, 0x007c, 0x1078, 0x55ac, 0x007c, 0x7094, 0xa005, 0x0040,
-+      0x4610, 0x2068, 0xb284, 0x0300, 0x0040, 0x4602, 0x2009, 0x0000,
-+      0x0078, 0x4604, 0x2009, 0x0001, 0x017e, 0x1078, 0x209b, 0x017f,
-+      0x017e, 0x1078, 0x552b, 0x017f, 0x1078, 0x552c, 0x7097, 0x0000,
-+      0x007c, 0x0e7e, 0x2091, 0x8000, 0x6014, 0xd0fc, 0x00c0, 0x461c,
-+      0x2071, 0x6040, 0x0078, 0x461e, 0x2071, 0x6080, 0x7000, 0xa086,
-+      0x0007, 0x00c0, 0x462f, 0x6110, 0x70b0, 0xa106, 0x00c0, 0x462f,
-+      0x0e7f, 0x1078, 0x20b0, 0x1078, 0x4635, 0xa006, 0x007c, 0x2091,
-+      0x8001, 0x0e7f, 0xa085, 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x0078,
-+      0x28b1, 0x785b, 0x0000, 0x70a3, 0x000e, 0x2009, 0x0100, 0x017e,
-+      0x7094, 0xa06d, 0x0040, 0x4648, 0x7097, 0x0000, 0x0078, 0x464e,
-+      0x70a7, 0x0000, 0x1078, 0x20e4, 0x0040, 0x4654, 0x70a0, 0x6826,
-+      0x1078, 0x4781, 0x0078, 0x4648, 0x017f, 0x077e, 0x157e, 0x0c7e,
-+      0x0d7e, 0x20a9, 0x0020, 0x3238, 0xa7bc, 0x0300, 0x0040, 0x4665,
-+      0x2061, 0xa7e0, 0xc7fc, 0x0078, 0x4668, 0x2061, 0xa900, 0xc7fd,
-+      0x6000, 0xa105, 0x6002, 0x601c, 0xa06d, 0x0040, 0x4678, 0x6800,
-+      0x601e, 0x1078, 0x1e55, 0x6008, 0x8000, 0x600a, 0x0078, 0x466b,
-+      0x6018, 0xa06d, 0x0040, 0x4682, 0x6800, 0x601a, 0x1078, 0x1e55,
-+      0x0078, 0x4678, 0xace0, 0x0009, 0x0070, 0x4688, 0x0078, 0x4668,
-+      0x7090, 0xa084, 0x8000, 0x0040, 0x468f, 0x1078, 0x480c, 0x0d7f,
-+      0x0c7f, 0x157f, 0x077f, 0x007c, 0x6804, 0xa084, 0x000f, 0x0079,
-+      0x4699, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46ab,
-+      0x46bd, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46a9, 0x46cb, 0x46a9,
-+      0x46ab, 0x1078, 0x2bfa, 0x007e, 0x7830, 0xd0b4, 0x0040, 0x46b6,
-+      0x784b, 0x0004, 0x7848, 0xd094, 0x00c0, 0x46b2, 0x007f, 0x1078,
-+      0x52d3, 0x1078, 0x1e55, 0x0078, 0x46cf, 0x6827, 0x000b, 0x007e,
-+      0x7830, 0xd0b4, 0x0040, 0x46ca, 0x784b, 0x0004, 0x7848, 0xd094,
-+      0x00c0, 0x46c6, 0x007f, 0x1078, 0x52d3, 0x1078, 0x4781, 0x007c,
-+      0x0f7e, 0x6814, 0xd0fc, 0x00c0, 0x46e7, 0x2001, 0x6002, 0x2004,
-+      0xd0ec, 0x0040, 0x46e1, 0x2079, 0x0100, 0x0098, 0x4706, 0x0078,
-+      0x46eb, 0x2079, 0x0200, 0x00a8, 0x4706, 0x0078, 0x46eb, 0x2079,
-+      0x0100, 0x0098, 0x4706, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x4706,
-+      0x0d7e, 0x1078, 0x5539, 0x2d00, 0x682e, 0x2009, 0x0004, 0x2001,
-+      0x0000, 0x6827, 0x0084, 0x1078, 0x54df, 0x1078, 0x4781, 0x0d7f,
-+      0x70a8, 0xa080, 0x00af, 0x781a, 0x0078, 0x474f, 0x7948, 0x6814,
-+      0xd0fc, 0x00c0, 0x4719, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040,
-+      0x4715, 0x0098, 0x471e, 0x0078, 0x471b, 0x00a8, 0x471e, 0x0078,
-+      0x471b, 0x0098, 0x471e, 0x794a, 0x0078, 0x46f0, 0x7948, 0x7828,
-+      0x007e, 0xa084, 0xf000, 0xa086, 0x1000, 0x007f, 0x00c0, 0x471b,
-+      0xd0b4, 0x00c0, 0x471b, 0xd0ac, 0x0040, 0x4732, 0xa185, 0x0004,
-+      0x0078, 0x4734, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e, 0x78ab,
-+      0x0002, 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a, 0x70a8,
-+      0xa080, 0x0097, 0x781a, 0x6827, 0x0284, 0x682c, 0x6836, 0x6830,
-+      0x683a, 0x2009, 0x0004, 0x2001, 0x0000, 0x1078, 0x54df, 0x0f7f,
-+      0x007c, 0x0d7e, 0x6b14, 0x1078, 0x2160, 0x0040, 0x475e, 0x2068,
-+      0x6827, 0x0002, 0x1078, 0x4781, 0x0078, 0x4753, 0x0d7f, 0x007c,
-+      0x0d7e, 0x6b14, 0x6c28, 0xa4a4, 0x00ff, 0x1078, 0x20f0, 0x0040,
-+      0x476e, 0x2068, 0x6827, 0x0002, 0x1078, 0x4781, 0x0d7f, 0x007c,
-+      0x0d7e, 0x6814, 0xa09c, 0x00ff, 0x1078, 0x212a, 0x0040, 0x477f,
-+      0x2068, 0x6827, 0x0002, 0x1078, 0x4781, 0x0078, 0x4774, 0x0d7f,
-+      0x007c, 0x0c7e, 0x6914, 0x6814, 0x1078, 0x47fa, 0x6904, 0xa18c,
-+      0x00ff, 0xa186, 0x0006, 0x0040, 0x479d, 0xa186, 0x000d, 0x0040,
-+      0x47c1, 0xa186, 0x0017, 0x00c0, 0x4799, 0x1078, 0x1e55, 0x0c7f,
-+      0x007c, 0x1078, 0x2253, 0x0c7f, 0x007c, 0x6004, 0x8001, 0x0048,
-+      0x47ba, 0x6006, 0x2009, 0x0000, 0xa684, 0x0001, 0x00c0, 0x47aa,
-+      0xa18d, 0x8000, 0xa684, 0x0004, 0x0040, 0x47b0, 0xa18d, 0x0002,
-+      0x691e, 0x6823, 0x0000, 0x711c, 0x810f, 0x6818, 0xa105, 0x681a,
-+      0x0078, 0x4799, 0x6100, 0xa184, 0x0001, 0x0040, 0x4795, 0x1078,
-+      0x2bfa, 0x6018, 0xa005, 0x00c0, 0x47d0, 0x6008, 0x8001, 0x0048,
-+      0x47d0, 0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x0078, 0x47e8,
-+      0xac88, 0x0006, 0x2104, 0xa005, 0x0040, 0x47d9, 0x2008, 0x0078,
-+      0x47d2, 0x6802, 0x2d0a, 0x6008, 0x8001, 0x0048, 0x47e6, 0x600a,
-+      0x6018, 0x2068, 0x6800, 0x601a, 0x0078, 0x47ca, 0x0c7f, 0x007c,
-+      0x157e, 0x137e, 0x147e, 0x0c7e, 0x0d7e, 0x1078, 0x1e32, 0x2da0,
-+      0x137f, 0x20a9, 0x0037, 0x53a3, 0x0c7f, 0x147f, 0x137f, 0x157f,
-+      0x0078, 0x4799, 0xd0fc, 0x00c0, 0x4801, 0x2061, 0xa7e0, 0x0078,
-+      0x4803, 0x2061, 0xa900, 0xa184, 0x001f, 0xac60, 0x8003, 0x8003,
-+      0x8003, 0xac00, 0x2060, 0x007c, 0xd7fc, 0x00c0, 0x481f, 0x2019,
-+      0x6053, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040, 0x481b, 0x2021,
-+      0x0102, 0x0078, 0x4823, 0x2021, 0x0202, 0x0078, 0x4823, 0x2019,
-+      0x6093, 0x2021, 0x0102, 0x2304, 0xa085, 0x0001, 0x201a, 0x2404,
-+      0xa085, 0x0001, 0x2022, 0x007c, 0xd7fc, 0x00c0, 0x483f, 0x2019,
-+      0x6053, 0x2001, 0x6002, 0x2004, 0xd0ec, 0x0040, 0x483b, 0x2021,
-+      0x0102, 0x0078, 0x4843, 0x2021, 0x0202, 0x0078, 0x4843, 0x2019,
-+      0x6093, 0x2021, 0x0102, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2404,
-+      0xa084, 0xfffe, 0x2022, 0x007c, 0x7990, 0xa18c, 0xfff8, 0x7992,
-+      0x70a8, 0xa080, 0x00d7, 0x781a, 0x0078, 0x2c5e, 0x7097, 0x0000,
-+      0x7003, 0x0000, 0x704b, 0x0001, 0x7043, 0x0000, 0x1078, 0x20e4,
-+      0x0040, 0x488c, 0x70ef, 0x0000, 0x68cc, 0x2060, 0x6100, 0xa184,
-+      0x0300, 0x0040, 0x4877, 0x6827, 0x000e, 0xa084, 0x0200, 0x0040,
-+      0x4873, 0x6827, 0x0017, 0x1078, 0x4781, 0x0078, 0x4856, 0x7000,
-+      0xa086, 0x0007, 0x00c0, 0x4905, 0x6910, 0x70b0, 0xa106, 0x0040,
-+      0x4885, 0x2d60, 0x1078, 0x20b0, 0x007c, 0x2d00, 0x7096, 0xad80,
-+      0x000f, 0x7042, 0x0078, 0x4897, 0x7010, 0xa005, 0x00c0, 0x4895,
-+      0x7048, 0xa086, 0x0001, 0x0040, 0x2c78, 0x0078, 0x2c5e, 0xa036,
-+      0x691c, 0xa184, 0x0002, 0x0040, 0x489f, 0xa6b5, 0x0004, 0xa184,
-+      0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x49b3, 0x2004, 0xa635,
-+      0x1078, 0x2d79, 0x6820, 0xa084, 0x0400, 0x0040, 0x48b9, 0x789b,
-+      0x0018, 0x78ab, 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5,
-+      0x5000, 0x6820, 0xa084, 0x8000, 0x0040, 0x48c7, 0xa6b5, 0x0400,
-+      0x789b, 0x000e, 0x6824, 0x8007, 0x78aa, 0x0078, 0x48e7, 0x681c,
-+      0xd0fc, 0x00c0, 0x48d5, 0xa6b5, 0x0800, 0x6820, 0xd0c4, 0x0040,
-+      0x48e7, 0xa6b5, 0x4000, 0x0078, 0x48e7, 0x6820, 0xd0c4, 0x0040,
-+      0x48dd, 0xa6b5, 0x4000, 0x0078, 0x48e7, 0x789b, 0x0018, 0x78ab,
-+      0x0002, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0xa684,
-+      0x0200, 0x0040, 0x4901, 0x682c, 0x78d2, 0x6830, 0x78d6, 0xa684,
-+      0x0100, 0x0040, 0x48ff, 0x682c, 0xa084, 0x0001, 0x0040, 0x48ff,
-+      0x7888, 0xa084, 0x0040, 0x0040, 0x48ff, 0xa6b5, 0x8000, 0x1078,
-+      0x550e, 0x7e5a, 0x6eb6, 0x0078, 0x5558, 0x1078, 0x44bc, 0x00c0,
-+      0x49ad, 0x2041, 0x0001, 0x2031, 0x1000, 0x1078, 0x2d79, 0x789b,
-+      0x0018, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080, 0x78aa, 0x691c,
-+      0xa184, 0x0002, 0x0040, 0x4924, 0xa6b5, 0x0004, 0x78ab, 0x0020,
-+      0x6828, 0x78aa, 0xa8c0, 0x0002, 0x681c, 0xd0f4, 0x0040, 0x492d,
-+      0x2c50, 0x1078, 0x45c9, 0x1078, 0x5424, 0x6820, 0xa084, 0x8000,
-+      0x0040, 0x493b, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, 0x8007,
-+      0x78aa, 0x0078, 0x4949, 0x681c, 0xa084, 0x8000, 0x00c0, 0x4949,
-+      0xa6b5, 0x0800, 0x6820, 0xa084, 0x0100, 0x0040, 0x4949, 0xa6b5,
-+      0x4000, 0x681c, 0xa084, 0x00c0, 0x8003, 0x8003, 0x8007, 0xa080,
-+      0x49b3, 0x2004, 0xa635, 0xa684, 0x0100, 0x0040, 0x4963, 0x682c,
-+      0xa084, 0x0001, 0x0040, 0x4963, 0x7888, 0xa084, 0x0040, 0x0040,
-+      0x4963, 0xa6b5, 0x8000, 0x789b, 0x007e, 0x7eae, 0x6eb6, 0x6814,
-+      0xc0fc, 0x8007, 0x78aa, 0x7882, 0x2810, 0x7aaa, 0x7830, 0xa084,
-+      0x00c0, 0x00c0, 0x49ad, 0x6914, 0xd1fc, 0x00c0, 0x4985, 0x2001,
-+      0x6002, 0x2004, 0xd0ec, 0x0040, 0x4981, 0x0018, 0x49ad, 0x0078,
-+      0x4987, 0x0028, 0x49ad, 0x0078, 0x4987, 0x0018, 0x49ad, 0x127e,
-+      0x0d7e, 0x0c7e, 0x70f0, 0xa084, 0x2700, 0x2090, 0x0c7f, 0x0d7f,
-+      0x127f, 0xa684, 0x0200, 0x0040, 0x499b, 0x682c, 0x78d2, 0x6830,
-+      0x78d6, 0x1078, 0x550e, 0x70a8, 0xa080, 0x00dc, 0x781a, 0x1078,
-+      0x44fa, 0x2d00, 0x7096, 0x7052, 0x6810, 0x70b2, 0x7003, 0x0007,
-+      0xad80, 0x000f, 0x7042, 0x0078, 0x2c5e, 0x1078, 0x209b, 0x1078,
-+      0x44fa, 0x0078, 0x2c5e, 0x0000, 0x0300, 0x0200, 0x0000, 0x1078,
-+      0x2bfa, 0x1078, 0x2bed, 0x2300, 0x0079, 0x49be, 0x49c3, 0x49c1,
-+      0x49c8, 0x1078, 0x2bfa, 0x71a8, 0xa188, 0x0097, 0x791a, 0x007c,
-+      0x1078, 0x552c, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x0040,
-+      0x49da, 0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x1078, 0x209b,
-+      0x0078, 0x4856, 0x2001, 0x000a, 0x1078, 0x54ae, 0x0078, 0x4856,
-+      0xa282, 0x0005, 0x0050, 0x49e6, 0x1078, 0x2bfa, 0x7000, 0xa084,
-+      0x000f, 0x10c0, 0x45de, 0x1078, 0x1e32, 0x00c0, 0x4a08, 0x2069,
-+      0xffff, 0xa684, 0x0004, 0x0040, 0x49f9, 0x2001, 0x2800, 0x0078,
-+      0x49fb, 0x2001, 0x0800, 0x71a8, 0xa188, 0x0097, 0x789b, 0x000e,
-+      0x8007, 0x78aa, 0x2031, 0x0400, 0x7e5a, 0x791a, 0x0078, 0x2c5e,
-+      0x6807, 0x0106, 0x680b, 0x0000, 0x689f, 0x0000, 0x6827, 0x0000,
-+      0xa386, 0x0002, 0x00c0, 0x4a28, 0xa286, 0x0002, 0x00c0, 0x4a28,
-+      0x78a0, 0xa005, 0x00c0, 0x4a28, 0xd4fc, 0x00c0, 0x4a28, 0x78e4,
-+      0xa084, 0x0008, 0x0040, 0x4a28, 0xa6b5, 0x0008, 0x2019, 0x0000,
-+      0x1078, 0x4e89, 0x2d00, 0x7096, 0x7052, 0x7003, 0x0007, 0x7043,
-+      0x0000, 0x6020, 0xa084, 0x000f, 0x680e, 0x6824, 0xa084, 0x0080,
-+      0x0040, 0x4a3e, 0x1078, 0x4f59, 0x0078, 0x2c5e, 0x2300, 0x0079,
-+      0x4a41, 0x4a44, 0x4ac5, 0x4ade, 0x2200, 0x0079, 0x4a47, 0x4a4c,
-+      0x4a5c, 0x4a82, 0x4a8e, 0x4ab1, 0x2029, 0x0001, 0xa026, 0x2011,
-+      0x0000, 0x1078, 0x5092, 0x0079, 0x4a55, 0x4a5a, 0x2c5e, 0x4856,
-+      0x4a5a, 0x4a5a, 0x1078, 0x2bfa, 0x7990, 0xa18c, 0x0007, 0x00c0,
-+      0x4a63, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684, 0x0004, 0x0040,
-+      0x4a6b, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011, 0x0001, 0x1078,
-+      0x5092, 0x0079, 0x4a73, 0x4a78, 0x2c5e, 0x4856, 0x4a80, 0x4a7a,
-+      0x0078, 0x555e, 0x709f, 0x4a7e, 0x0078, 0x2c5e, 0x0078, 0x4a78,
-+      0x1078, 0x2bfa, 0xa684, 0x0010, 0x0040, 0x4a8c, 0x1078, 0x4f1a,
-+      0x0040, 0x4a8c, 0x0078, 0x2c5e, 0x0078, 0x4f9a, 0x6000, 0xa084,
-+      0x0002, 0x0040, 0x4aab, 0x70a8, 0xa080, 0x0085, 0x781a, 0x0d7e,
-+      0x1078, 0x5539, 0x2d00, 0x682e, 0x6827, 0x0000, 0x1078, 0x4781,
-+      0x0d7f, 0x1078, 0x1e55, 0x7003, 0x0000, 0x7043, 0x0000, 0x7053,
-+      0x0000, 0x0078, 0x4856, 0xa684, 0x0004, 0x00c0, 0x4ab1, 0x0078,
-+      0x555e, 0x6000, 0xa084, 0x0004, 0x00c0, 0x4ac3, 0x6000, 0xa084,
-+      0x0001, 0x0040, 0x4ac3, 0x709f, 0x4ac3, 0x2001, 0x0007, 0x1078,
-+      0x54a6, 0x0078, 0x5564, 0x0078, 0x555e, 0x2200, 0x0079, 0x4ac8,
-+      0x4acd, 0x4acf, 0x4acd, 0x4acd, 0x4acd, 0x1078, 0x2bfa, 0x709b,
-+      0x4ad3, 0x0078, 0x556c, 0x78e4, 0xa084, 0x0008, 0x00c0, 0x4acf,
-+      0x1078, 0x5496, 0x709f, 0x4adc, 0x0078, 0x555e, 0x2200, 0x0079,
-+      0x4ae1, 0x4ae6, 0x4ae8, 0x4ae8, 0x4ae6, 0x4ae6, 0x1078, 0x2bfa,
-+      0x78e4, 0xa084, 0x0008, 0x0040, 0x4afd, 0x709b, 0x4af1, 0x0078,
-+      0x556c, 0x2011, 0x0004, 0x1078, 0x508c, 0x0079, 0x4af7, 0x4b09,
-+      0x2c5e, 0x4856, 0x4b09, 0x4b13, 0x4b17, 0x690c, 0x81ff, 0x0040,
-+      0x4b09, 0x8109, 0x00c0, 0x4b08, 0x6827, 0x000f, 0x0078, 0x4bbd,
-+      0x690e, 0x709f, 0x4b11, 0x2001, 0x0003, 0x1078, 0x54a6, 0x0078,
-+      0x5564, 0x0078, 0x555e, 0x709f, 0x4b09, 0x0078, 0x2c5e, 0x709f,
-+      0x4b1b, 0x0078, 0x2c5e, 0x0078, 0x4b11, 0xa282, 0x0003, 0x0050,
-+      0x4b23, 0x1078, 0x2bfa, 0xa386, 0x0002, 0x00c0, 0x4b3b, 0xa286,
-+      0x0002, 0x00c0, 0x4b41, 0x78a0, 0xa005, 0x00c0, 0x4b41, 0xd4fc,
-+      0x00c0, 0x4b41, 0x78e4, 0xa084, 0x0008, 0x0040, 0x4b3b, 0xa6b5,
-+      0x0008, 0x2019, 0x0000, 0xa684, 0x0008, 0x0040, 0x4b41, 0x1078,
-+      0x4ef7, 0x6810, 0x70b2, 0x7003, 0x0007, 0x2300, 0x0079, 0x4b48,
-+      0x4b4b, 0x4b78, 0x4b80, 0x2200, 0x0079, 0x4b4e, 0x4b53, 0x4b51,
-+      0x4b6c, 0x1078, 0x2bfa, 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011,
-+      0x0001, 0x1078, 0x5092, 0x0079, 0x4b5d, 0x4b62, 0x2c5e, 0x4856,
-+      0x4b6a, 0x4b64, 0x0078, 0x555e, 0x709f, 0x4b68, 0x0078, 0x2c5e,
-+      0x0078, 0x4b62, 0x1078, 0x2bfa, 0xa684, 0x0010, 0x0040, 0x4b76,
-+      0x1078, 0x4f1a, 0x0040, 0x4b76, 0x0078, 0x2c5e, 0x0078, 0x4f9a,
-+      0x2200, 0x0079, 0x4b7b, 0x4b7e, 0x4b7e, 0x4b7e, 0x1078, 0x2bfa,
-+      0x2200, 0x0079, 0x4b83, 0x4b86, 0x4b88, 0x4b88, 0x1078, 0x2bfa,
-+      0x78e4, 0xa084, 0x0008, 0x0040, 0x4b9d, 0x709b, 0x4b91, 0x0078,
-+      0x556c, 0x2011, 0x0004, 0x1078, 0x508c, 0x0079, 0x4b97, 0x4ba9,
-+      0x2c5e, 0x4856, 0x4ba9, 0x4bb3, 0x4bb7, 0x690c, 0x81ff, 0x0040,
-+      0x4ba9, 0x8109, 0x00c0, 0x4ba8, 0x6827, 0x000f, 0x0078, 0x4bbd,
-+      0x690e, 0x709f, 0x4bb1, 0x2001, 0x0003, 0x1078, 0x54a6, 0x0078,
-+      0x5564, 0x0078, 0x555e, 0x709f, 0x4ba9, 0x0078, 0x2c5e, 0x709f,
-+      0x4bbb, 0x0078, 0x2c5e, 0x0078, 0x4bb1, 0x70a8, 0xa080, 0x0085,
-+      0x781a, 0x0d7e, 0x6824, 0x007e, 0x1078, 0x5539, 0x007f, 0x6826,
-+      0x2d00, 0x682e, 0x1078, 0x4781, 0x0d7f, 0x1078, 0x54ae, 0x7003,
-+      0x0000, 0x7043, 0x0000, 0x7053, 0x0000, 0x0078, 0x4856, 0x2300,
-+      0x0079, 0x4bda, 0x4bdf, 0x4be1, 0x4bdd, 0x1078, 0x2bfa, 0x7098,
-+      0x007a, 0x7098, 0x007a, 0xa282, 0x0002, 0x0050, 0x4be9, 0x1078,
-+      0x2bfa, 0xa684, 0x0200, 0x0040, 0x4bf3, 0x1078, 0x552b, 0x1078,
-+      0x5074, 0x1078, 0x552c, 0x2300, 0x0079, 0x4bf6, 0x4bf9, 0x4c2c,
-+      0x4c92, 0xad86, 0xffff, 0x00c0, 0x4bfe, 0x007c, 0xa286, 0x0001,
-+      0x0040, 0x4c04, 0x1078, 0x2bfa, 0xa684, 0x0200, 0x0040, 0x4c0c,
-+      0x1078, 0x552b, 0x1078, 0x552c, 0x6924, 0xa184, 0x00ff, 0xa086,
-+      0x000a, 0x00c0, 0x4c16, 0xa184, 0xff00, 0x6826, 0x2001, 0x0001,
-+      0x1078, 0x54ae, 0x78b8, 0xa084, 0xc001, 0x0040, 0x4c28, 0x7848,
-+      0xa085, 0x0008, 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x4c23,
-+      0x7003, 0x0000, 0x0078, 0x4856, 0x2200, 0x0079, 0x4c2f, 0x4c31,
-+      0x4c62, 0x709b, 0x4c35, 0x0078, 0x556c, 0x2011, 0x000d, 0x1078,
-+      0x508c, 0x0079, 0x4c3b, 0x4c42, 0x2c5e, 0x4856, 0x4c4a, 0x4c52,
-+      0x4c58, 0x4c5a, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x0078, 0x5558, 0x709f, 0x4c56, 0x0078, 0x2c5e, 0x0078, 0x4c42,
-+      0x1078, 0x2bfa, 0x709f, 0x4c5e, 0x0078, 0x2c5e, 0x1078, 0x5572,
-+      0x0078, 0x2c5e, 0x709b, 0x4c66, 0x0078, 0x556c, 0x2011, 0x0012,
-+      0x1078, 0x508c, 0x0079, 0x4c6c, 0x4c72, 0x2c5e, 0x4856, 0x4c7e,
-+      0x4c86, 0x4c8c, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x70a8, 0xa080, 0x00af, 0x781a, 0x0078, 0x2c5e, 0xa6b4, 0x00ff,
-+      0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x0078, 0x5558, 0x709f, 0x4c8a,
-+      0x0078, 0x2c5e, 0x0078, 0x4c72, 0x709f, 0x4c90, 0x0078, 0x2c5e,
-+      0x0078, 0x4c7e, 0xa286, 0x0001, 0x0040, 0x4c98, 0x1078, 0x2bfa,
-+      0x709b, 0x4c9c, 0x0078, 0x556c, 0x2011, 0x0015, 0x1078, 0x508c,
-+      0x0079, 0x4ca2, 0x4ca7, 0x2c5e, 0x4856, 0x4cb5, 0x4cc1, 0xa6b4,
-+      0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x783b, 0x1301, 0x70a8,
-+      0xa080, 0x00bb, 0x781a, 0x0078, 0x2c5e, 0xa6b4, 0x00ff, 0xa6b5,
-+      0x0400, 0x6eb6, 0x7e5a, 0x70a8, 0xa080, 0x00af, 0x781a, 0x0078,
-+      0x2c5e, 0x709f, 0x4cc5, 0x0078, 0x2c5e, 0x0078, 0x4ca7, 0xa282,
-+      0x0003, 0x0050, 0x4ccd, 0x1078, 0x2bfa, 0x2300, 0x0079, 0x4cd0,
-+      0x4cd3, 0x4d14, 0x4d79, 0xa286, 0x0001, 0x0040, 0x4cd9, 0x1078,
-+      0x2bfa, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x4ce6,
-+      0x1078, 0x4781, 0x7003, 0x0000, 0x0078, 0x4856, 0x683b, 0x0000,
-+      0x6837, 0x0000, 0xa684, 0x0200, 0x0040, 0x4cf4, 0x1078, 0x552b,
-+      0x1078, 0x5074, 0x1078, 0x552c, 0x6924, 0xa184, 0x00ff, 0xa086,
-+      0x000a, 0x00c0, 0x4cfe, 0xa184, 0xff00, 0x6826, 0x2001, 0x0001,
-+      0x1078, 0x54ae, 0x78b8, 0xa084, 0xc001, 0x0040, 0x4d10, 0x7848,
-+      0xa085, 0x0008, 0x784a, 0x7848, 0xa084, 0x0008, 0x00c0, 0x4d0b,
-+      0x7003, 0x0000, 0x0078, 0x4856, 0xa684, 0x0200, 0x0040, 0x4d1c,
-+      0x1078, 0x5074, 0x1078, 0x552c, 0x2200, 0x0079, 0x4d1f, 0x4d21,
-+      0x4d54, 0x709b, 0x4d25, 0x0078, 0x556c, 0x2011, 0x000d, 0x1078,
-+      0x508c, 0x0079, 0x4d2b, 0x4d32, 0x2c5e, 0x4856, 0x4d3a, 0x4d42,
-+      0x4d48, 0x4d4a, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a,
-+      0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a,
-+      0x0078, 0x5558, 0x709f, 0x4d46, 0x0078, 0x2c5e, 0x0078, 0x4d32,
-+      0x1078, 0x2bfa, 0x709f, 0x4d50, 0x1078, 0x552c, 0x0078, 0x2c5e,
-+      0x1078, 0x5572, 0x0078, 0x2c5e, 0x709b, 0x4d58, 0x0078, 0x556c,
-+      0x2011, 0x0005, 0x1078, 0x508c, 0x0079, 0x4d5e, 0x4d63, 0x2c5e,
-+      0x4856, 0x4d6b, 0x4d73, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+      0x7e5a, 0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6,
-+      0x7e5a, 0x0078, 0x5558, 0x709f, 0x4d77, 0x0078, 0x2c5e, 0x0078,
-+      0x4d63, 0xa286, 0x0001, 0x0040, 0x4d7f, 0x1078, 0x2bfa, 0x709b,
-+      0x4d83, 0x0078, 0x556c, 0x2011, 0x0006, 0x1078, 0x508c, 0x0079,
-+      0x4d89, 0x4d8e, 0x2c5e, 0x4856, 0x4d94, 0x4d9e, 0xa6b5, 0x0800,
-+      0x6eb6, 0x7e5a, 0x0078, 0x5558, 0xa6b4, 0x00ff, 0xa6b5, 0x0800,
-+      0x6eb6, 0xa6b5, 0x4000, 0x7e5a, 0x0078, 0x5558, 0x709f, 0x4da2,
-+      0x0078, 0x2c5e, 0x0078, 0x4d8e, 0x2300, 0x0079, 0x4da7, 0x4dac,
-+      0x4daa, 0x4daa, 0x1078, 0x2bfa, 0x1078, 0x2bfa, 0x2300, 0x719c,
-+      0xa005, 0x017a, 0x6810, 0x70b2, 0xa282, 0x0003, 0x0050, 0x4dba,
-+      0x1078, 0x2bfa, 0x2300, 0x0079, 0x4dbd, 0x4dc0, 0x4dce, 0x4df0,
-+      0xa684, 0x0200, 0x0040, 0x4dc8, 0x1078, 0x552b, 0x1078, 0x552c,
-+      0x2001, 0x0001, 0x1078, 0x54ae, 0x0078, 0x2c5e, 0xa286, 0x0002,
-+      0x0040, 0x4dd7, 0x82ff, 0x0040, 0x4dd7, 0x1078, 0x2bfa, 0x709b,
-+      0x4ddb, 0x0078, 0x556c, 0x2011, 0x0018, 0x1078, 0x508c, 0x0079,
-+      0x4de1, 0x4de6, 0x2c5e, 0x4856, 0x4de8, 0x4dea, 0x0078, 0x5558,
-+      0x0078, 0x5558, 0x709f, 0x4dee, 0x0078, 0x2c5e, 0x0078, 0x4de6,
-+      0x2200, 0x0079, 0x4df3, 0x4df5, 0x4e0e, 0x709b, 0x4df9, 0x0078,
-+      0x556c, 0x2011, 0x0017, 0x1078, 0x508c, 0x0079, 0x4dff, 0x4e04,
-+      0x2c5e, 0x4856, 0x4e06, 0x4e08, 0x0078, 0x5558, 0x0078, 0x5558,
-+      0x709f, 0x4e0c, 0x0078, 0x2c5e, 0x0078, 0x4e04, 0xd4fc, 0x00c0,
-+      0x4e6b, 0xa684, 0x0100, 0x0040, 0x4e19, 0x1078, 0x552b, 0x1078,
-+      0x5074, 0x78d8, 0x78d2, 0x78dc, 0x78d6, 0xa6b4, 0xefff, 0x7e5a,
-+      0x709b, 0x4e24, 0x0078, 0x556c, 0x2011, 0x000d, 0x1078, 0x508c,
-+      0x0079, 0x4e2a, 0x4e31, 0x2c5e, 0x4856, 0x4e31, 0x4e59, 0x4e5f,
-+      0x4e61, 0x78d8, 0x79dc, 0xa105, 0x00c0, 0x4e43, 0x78b8, 0xa084,
-+      0x801f, 0x00c0, 0x4e43, 0x70a7, 0x0000, 0x7858, 0xa084, 0xfdff,
-+      0x785a, 0x0078, 0x5558, 0xa684, 0x0100, 0x0040, 0x4e57, 0x1078,
-+      0x552c, 0x1078, 0x54d4, 0x027e, 0x037e, 0x682c, 0x78d2, 0x6830,
-+      0x78d6, 0x70a7, 0x0000, 0x017f, 0x007f, 0x1078, 0x5972, 0x0078,
-+      0x5558, 0x709f, 0x4e5d, 0x0078, 0x2c5e, 0x0078, 0x4e31, 0x1078,
-+      0x2bfa, 0x709f, 0x4e67, 0x1078, 0x552c, 0x0078, 0x2c5e, 0x1078,
-+      0x5572, 0x0078, 0x2c5e, 0x1078, 0x552c, 0x6918, 0xd1a4, 0x0040,
-+      0x4e79, 0x6827, 0x000f, 0x1078, 0x54ae, 0x1078, 0x552c, 0x0078,
-+      0x2c5e, 0x709f, 0x4e81, 0x2001, 0x0003, 0x1078, 0x54a6, 0x0078,
-+      0x5564, 0x1078, 0x550e, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0078,
-+      0x5558, 0x70ac, 0x6812, 0x70b2, 0x8000, 0x70ae, 0x681b, 0x0000,
-+      0xa684, 0x0008, 0x0040, 0x4eac, 0x157e, 0x137e, 0x147e, 0x7890,
-+      0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x681a, 0x80ac,
-+      0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0xad80, 0x000b, 0x20a0,
-+      0x53a5, 0x147f, 0x137f, 0x157f, 0xa6c4, 0x0f00, 0xa684, 0x0002,
-+      0x00c0, 0x4ebb, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007,
-+      0x2008, 0x0078, 0x4ece, 0x789b, 0x0010, 0x79ac, 0xa184, 0x0020,
-+      0x0040, 0x4ece, 0x017e, 0x2009, 0x0005, 0x2001, 0x3d00, 0x1078,
-+      0x54df, 0x6824, 0xa085, 0x003b, 0x6826, 0x017f, 0xa184, 0x001f,
-+      0xa805, 0x017e, 0x3208, 0xa18c, 0x0300, 0x0040, 0x4eda, 0xc0fc,
-+      0x0078, 0x4edb, 0xc0fd, 0x017f, 0x6816, 0x1078, 0x47fa, 0x68ce,
-+      0xa684, 0x0004, 0x0040, 0x4eea, 0xa18c, 0xff00, 0x78a8, 0xa084,
-+      0x00ff, 0xa105, 0x682a, 0xa6b4, 0x00ff, 0x6000, 0xa084, 0x0008,
-+      0x0040, 0x4ef4, 0xa6b5, 0x4000, 0x6eb6, 0x7e5a, 0x007c, 0x157e,
-+      0x137e, 0x147e, 0x6918, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004,
-+      0xa084, 0x000f, 0x007e, 0xa100, 0x681a, 0x007f, 0x8000, 0x8004,
-+      0x0040, 0x4f16, 0x20a8, 0x8104, 0xa080, 0x000b, 0xad00, 0x20a0,
-+      0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0x53a5, 0x147f, 0x137f,
-+      0x157f, 0x007c, 0x682c, 0xd0b4, 0x00c0, 0x4f29, 0xd0ac, 0x00c0,
-+      0x4f25, 0x2011, 0x0010, 0x0078, 0x4f31, 0x2011, 0x000c, 0x0078,
-+      0x4f31, 0xa084, 0x0020, 0x00c0, 0x4f30, 0x620c, 0x0078, 0x4f31,
-+      0x6210, 0x6b18, 0x2300, 0xa202, 0x0040, 0x4f51, 0x2018, 0xa382,
-+      0x000e, 0x0048, 0x4f41, 0x0040, 0x4f41, 0x2019, 0x000e, 0x0078,
-+      0x4f45, 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893,
-+      0x0000, 0x7ba2, 0x70a8, 0xa080, 0x0094, 0x781a, 0xa085, 0x0001,
-+      0x007c, 0x7858, 0xa084, 0xffef, 0x785a, 0x7893, 0x0000, 0xa006,
-+      0x007c, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040, 0x4f66,
-+      0xa196, 0x000f, 0x0040, 0x4f66, 0x6807, 0x0117, 0x6914, 0x6814,
-+      0x1078, 0x47fa, 0x6100, 0x8104, 0x00c8, 0x4f82, 0x601c, 0xa005,
-+      0x0040, 0x4f76, 0x2001, 0x0800, 0x0078, 0x4f84, 0x0d7e, 0x6824,
-+      0x007e, 0x1078, 0x5539, 0x007f, 0x6826, 0x2d00, 0x682e, 0x1078,
-+      0x4781, 0x0d7f, 0x2001, 0x0200, 0x6924, 0xa18c, 0x00ff, 0xa10d,
-+      0x6926, 0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000,
-+      0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71a8, 0xa188, 0x0097,
-+      0x791a, 0x007c, 0x1078, 0x2d79, 0x6814, 0x2040, 0xa684, 0x0002,
-+      0x00c0, 0x4fb0, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184, 0x0007,
-+      0x2008, 0xa805, 0x6816, 0x1078, 0x47fa, 0x68ce, 0x0078, 0x4fb4,
-+      0x6914, 0x6814, 0x1078, 0x47fa, 0x6100, 0x8104, 0x00c8, 0x5012,
-+      0xa184, 0x0300, 0x0040, 0x4fc0, 0x6807, 0x0117, 0x0078, 0x4fde,
-+      0x6004, 0xa005, 0x00c0, 0x4fe7, 0x6807, 0x0117, 0x601c, 0xa005,
-+      0x00c0, 0x4fd4, 0x0d7e, 0x1078, 0x5539, 0x6827, 0x0034, 0x2d00,
-+      0x682e, 0x1078, 0x4781, 0x0d7f, 0xa684, 0x0004, 0x0040, 0x4fde,
-+      0x2031, 0x0400, 0x2001, 0x2800, 0x0078, 0x4fe2, 0x2031, 0x0400,
-+      0x2001, 0x0800, 0x71a8, 0xa188, 0x0097, 0x0078, 0x504f, 0x6018,
-+      0xa005, 0x00c0, 0x4fd4, 0x601c, 0xa005, 0x00c0, 0x4fd4, 0x689f,
-+      0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0040, 0x505d, 0xd694,
-+      0x00c0, 0x500b, 0x6100, 0xd1d4, 0x0040, 0x500b, 0x692c, 0xa18c,
-+      0x00ff, 0x0040, 0x505d, 0xa186, 0x0003, 0x0040, 0x505d, 0xa186,
-+      0x0012, 0x0040, 0x505d, 0xa6b5, 0x0800, 0x71a8, 0xa188, 0x00b3,
-+      0x0078, 0x5058, 0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c,
-+      0x00ff, 0xa186, 0x0012, 0x00c0, 0x5023, 0x2001, 0x506a, 0x2009,
-+      0x0001, 0x0078, 0x5034, 0xa186, 0x0003, 0x00c0, 0x502d, 0x2001,
-+      0x506b, 0x2009, 0x0012, 0x0078, 0x5034, 0x2001, 0x0200, 0x71a8,
-+      0xa188, 0x0097, 0x0078, 0x504f, 0x6a34, 0xa29d, 0x0000, 0x00c0,
-+      0x503c, 0xa006, 0x0078, 0x502f, 0x007e, 0x2100, 0xa21a, 0x007f,
-+      0x00c8, 0x5043, 0x2208, 0x1078, 0x54f9, 0x78a3, 0x0000, 0x681c,
-+      0xa085, 0x0040, 0x681e, 0x71a8, 0xa188, 0x00d9, 0xa006, 0x6826,
-+      0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822,
-+      0x6eb6, 0x7e5a, 0x791a, 0x0078, 0x2c5e, 0x6eb6, 0x1078, 0x4781,
-+      0x6810, 0x70b2, 0x7003, 0x0007, 0x7097, 0x0000, 0x7053, 0x0000,
-+      0x0078, 0x2c5e, 0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000,
-+      0x0000, 0x0025, 0x0000, 0x0000, 0x683b, 0x0000, 0x6837, 0x0000,
-+      0xa684, 0x0200, 0x0040, 0x508b, 0x78b8, 0xa08c, 0x001f, 0xa084,
-+      0x8000, 0x0040, 0x5084, 0x8108, 0x78d8, 0xa100, 0x6836, 0x78dc,
-+      0xa081, 0x0000, 0x683a, 0x007c, 0x7990, 0x810f, 0xa5ac, 0x0007,
-+      0x2021, 0x0000, 0xa480, 0x0010, 0x789a, 0x79a8, 0xa18c, 0x00ff,
-+      0xa184, 0x0080, 0x00c0, 0x50ba, 0xa182, 0x0020, 0x00c8, 0x50d8,
-+      0xa182, 0x0012, 0x00c8, 0x5496, 0x2100, 0x1079, 0x50a8, 0x007c,
-+      0x5496, 0x52eb, 0x5496, 0x5496, 0x50e5, 0x50e8, 0x512f, 0x516d,
-+      0x51a1, 0x51a4, 0x5496, 0x5496, 0x5150, 0x5213, 0x524d, 0x5496,
-+      0x5496, 0x5274, 0xa184, 0x0020, 0x00c0, 0x52a8, 0xa18c, 0x001f,
-+      0x6814, 0xa084, 0x001f, 0xa106, 0x0040, 0x50d5, 0x70a8, 0xa080,
-+      0x0085, 0x781a, 0x2001, 0x0014, 0x1078, 0x54ae, 0x1078, 0x552c,
-+      0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x2001, 0x0000, 0x007c,
-+      0xa182, 0x0024, 0x00c8, 0x5496, 0xa184, 0x0003, 0x1079, 0x50a8,
-+      0x007c, 0x5496, 0x5496, 0x5496, 0x5496, 0x1078, 0x5496, 0x007c,
-+      0x2200, 0x0079, 0x50eb, 0x5277, 0x5277, 0x511c, 0x511c, 0x511c,
-+      0x511c, 0x511c, 0x511c, 0x511c, 0x511c, 0x511a, 0x511c, 0x5104,
-+      0x510d, 0x510d, 0x510d, 0x511c, 0x511c, 0x5124, 0x5127, 0x5277,
-+      0x5127, 0x511c, 0x511c, 0x511c, 0x0c7e, 0x077e, 0x6f14, 0x1078,
-+      0x42de, 0x077f, 0x0c7f, 0x0078, 0x511c, 0x6818, 0xd0a4, 0x0040,
-+      0x511c, 0x6827, 0x0033, 0x1078, 0x54ae, 0x1078, 0x552c, 0x2001,
-+      0x0001, 0x007c, 0x1078, 0x53ae, 0x6827, 0x02b3, 0x2009, 0x000b,
-+      0x2001, 0x4800, 0x0078, 0x52ab, 0x1078, 0x5486, 0x007c, 0x6827,
-+      0x0093, 0x2009, 0x000b, 0x2001, 0x4800, 0x0078, 0x5293, 0x2d58,
-+      0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x5139, 0x6807,
-+      0x0117, 0x6827, 0x0002, 0x1078, 0x5539, 0x6827, 0x0036, 0x6932,
-+      0x2d00, 0x682e, 0x0d7e, 0x1078, 0x4751, 0x1078, 0x52d3, 0x2b68,
-+      0x1078, 0x4781, 0x0d7f, 0x1078, 0x4781, 0x2001, 0x0002, 0x007c,
-+      0x1078, 0x52d3, 0x2001, 0x0017, 0x1078, 0x54ae, 0x7097, 0x0000,
-+      0x6914, 0xd1fc, 0x0040, 0x5160, 0x2009, 0x6086, 0x0078, 0x5162,
-+      0x2009, 0x6046, 0x200b, 0x0006, 0x70a3, 0x0017, 0x2009, 0x0200,
-+      0x1078, 0x463f, 0x2001, 0x0001, 0x007c, 0x2200, 0x0079, 0x5170,
-+      0x5277, 0x52a8, 0x52a8, 0x52a8, 0x5191, 0x52ba, 0x5199, 0x52ba,
-+      0x52ba, 0x52bd, 0x52bd, 0x52c2, 0x52c2, 0x5189, 0x5189, 0x52a8,
-+      0x52a8, 0x52ba, 0x52a8, 0x5199, 0x5277, 0x5199, 0x5199, 0x5199,
-+      0x5199, 0x6827, 0x0084, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078,
-+      0x52cc, 0x6827, 0x000d, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078,
-+      0x52ab, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4300, 0x0078,
-+      0x5293, 0x2001, 0x0000, 0x007c, 0x2200, 0x0079, 0x51a7, 0x5277,
-+      0x520b, 0x520b, 0x520b, 0x520b, 0x51c0, 0x51c0, 0x51c0, 0x51c0,
-+      0x51c0, 0x51c0, 0x51c0, 0x51c0, 0x520b, 0x520b, 0x520b, 0x520b,
-+      0x51e8, 0x520b, 0x520b, 0x51e8, 0x51e8, 0x51e8, 0x51e8, 0x5277,
-+      0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x51e8, 0x690c,
-+      0xa184, 0x000f, 0x0040, 0x52ba, 0x8001, 0x0040, 0x51d5, 0xa18c,
-+      0xfff0, 0xa105, 0x680e, 0x0078, 0x52ba, 0x70a8, 0xa080, 0x0085,
-+      0x781a, 0x6827, 0x000f, 0x1078, 0x4f59, 0x1078, 0x54ae, 0x7003,
-+      0x0000, 0x7043, 0x0000, 0x7053, 0x0000, 0x2001, 0x0002, 0x007c,
-+      0x6918, 0xa184, 0x000f, 0x0040, 0x52ba, 0x8001, 0x0040, 0x51f6,
-+      0xa18c, 0xfff0, 0xa105, 0x681a, 0x0078, 0x52ba, 0x70a8, 0xa080,
-+      0x0085, 0x781a, 0x6827, 0x008f, 0x2009, 0x000b, 0x2001, 0x4300,
-+      0x1078, 0x54df, 0x1078, 0x54ae, 0x1078, 0x552c, 0x7003, 0x0000,
-+      0x2001, 0x0002, 0x007c, 0x6827, 0x0093, 0x2009, 0x000b, 0x2001,
-+      0x4300, 0x0078, 0x5293, 0xa684, 0x0004, 0x00c0, 0x5227, 0x6804,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x5496, 0x1078, 0x52d3,
-+      0x6807, 0x0117, 0x1078, 0x4781, 0x2001, 0x0002, 0x007c, 0x6000,
-+      0xa084, 0x0004, 0x0040, 0x5496, 0x2d58, 0x6804, 0xa084, 0x00ff,
-+      0xa086, 0x0006, 0x00c0, 0x5236, 0x6807, 0x0117, 0x6827, 0x0002,
-+      0x1078, 0x5539, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e,
-+      0x1078, 0x4760, 0x1078, 0x52d3, 0x2b68, 0x1078, 0x4781, 0x0d7f,
-+      0x1078, 0x4781, 0x2001, 0x0002, 0x007c, 0x6000, 0xa084, 0x0004,
-+      0x0040, 0x5496, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006,
-+      0x00c0, 0x525c, 0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x1078,
-+      0x5539, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x0d7e, 0x1078,
-+      0x4770, 0x1078, 0x52d3, 0x2b68, 0x1078, 0x4781, 0x0d7f, 0x1078,
-+      0x4781, 0x2001, 0x0002, 0x007c, 0x1078, 0x5496, 0x007c, 0x70a8,
-+      0xa080, 0x0085, 0x781a, 0x2001, 0x0001, 0x1078, 0x54ae, 0x1078,
-+      0x552c, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c, 0x1078, 0x54df,
-+      0x1078, 0x552b, 0x1078, 0x5074, 0x1078, 0x4f59, 0x1078, 0x552c,
-+      0x2001, 0x0001, 0x007c, 0x1078, 0x54df, 0x1078, 0x552b, 0x1078,
-+      0x5074, 0x70a8, 0xa080, 0x0085, 0x781a, 0x2001, 0x0013, 0x1078,
-+      0x54ae, 0x1078, 0x552c, 0x7003, 0x0000, 0x2001, 0x0002, 0x007c,
-+      0x1078, 0x5496, 0x007c, 0x1078, 0x54df, 0x1078, 0x552b, 0x1078,
-+      0x5074, 0x1078, 0x4f59, 0x1078, 0x552c, 0x1078, 0x5572, 0x2001,
-+      0x0001, 0x007c, 0x2001, 0x0003, 0x007c, 0x1078, 0x53ae, 0x2001,
-+      0x0000, 0x007c, 0x0c7e, 0x077e, 0x6f14, 0x1078, 0x42de, 0x077f,
-+      0x0c7f, 0x2001, 0x0000, 0x007c, 0x1078, 0x54df, 0x1078, 0x5496,
-+      0x2001, 0x0006, 0x007c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+      0x0040, 0x52de, 0xa186, 0x000f, 0x00c0, 0x52e2, 0x1078, 0x552b,
-+      0x1078, 0x5074, 0x70a8, 0xa080, 0x0085, 0x781a, 0x1078, 0x552c,
-+      0x7003, 0x0000, 0x007c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084,
-+      0x00ff, 0xa08a, 0x0004, 0x00c8, 0x5496, 0x1079, 0x52f8, 0x007c,
-+      0x5496, 0x52fc, 0x5496, 0x53b5, 0xa282, 0x0003, 0x0040, 0x5303,
-+      0x1078, 0x5496, 0x007c, 0x7da8, 0xa5ac, 0x00ff, 0x7ca8, 0xa4a4,
-+      0x00ff, 0x69b8, 0xa184, 0x0100, 0x0040, 0x5342, 0xa18c, 0xfeff,
-+      0x69ba, 0x78a0, 0xa005, 0x00c0, 0x5342, 0xa4a4, 0x00ff, 0x0040,
-+      0x5336, 0xa482, 0x000c, 0x0040, 0x531f, 0x00c8, 0x5329, 0x852b,
-+      0x852b, 0x1078, 0x4334, 0x0040, 0x5329, 0x1078, 0x4162, 0x0078,
-+      0x5338, 0x1078, 0x5474, 0x1078, 0x418d, 0x69b8, 0xa18d, 0x0100,
-+      0x69ba, 0xa6b5, 0x1000, 0x7e5a, 0x0078, 0x533b, 0x1078, 0x418d,
-+      0xa6b4, 0xefff, 0x7e5a, 0x70a8, 0xa080, 0x0097, 0x781a, 0x2001,
-+      0x0001, 0x007c, 0x0c7e, 0x1078, 0x539c, 0x6200, 0xd2e4, 0x0040,
-+      0x538b, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048,
-+      0x5355, 0x0040, 0x5355, 0x2011, 0x000c, 0x2400, 0xa202, 0x00c8,
-+      0x535a, 0x2220, 0x6208, 0xa294, 0x00ff, 0x2001, 0x6003, 0x2004,
-+      0xd0e4, 0x00c0, 0x536f, 0x78ec, 0xd0e4, 0x0040, 0x536f, 0xa282,
-+      0x000a, 0x00c8, 0x5375, 0x2011, 0x000a, 0x0078, 0x5375, 0xa282,
-+      0x000c, 0x00c8, 0x5375, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8,
-+      0x537a, 0x2228, 0x1078, 0x5477, 0x2500, 0xa086, 0x000a, 0x0040,
-+      0x5383, 0x852b, 0x852b, 0x1078, 0x4334, 0x0040, 0x538b, 0x1078,
-+      0x4169, 0x0078, 0x538f, 0x1078, 0x5474, 0x1078, 0x4194, 0xa6b5,
-+      0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00c4, 0x781a,
-+      0x2001, 0x0004, 0x0c7f, 0x007c, 0x6814, 0x8007, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0x6914, 0xd1fc, 0x00c0, 0x53ab, 0xa0e0,
-+      0x64c0, 0x0078, 0x53ad, 0xa0e0, 0x6540, 0x007c, 0x0c7e, 0x1078,
-+      0x539c, 0x1078, 0x4194, 0x0c7f, 0x007c, 0xa282, 0x0002, 0x00c0,
-+      0x5496, 0x7aa8, 0xa294, 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0040,
-+      0x53ec, 0xa18c, 0xfdff, 0x69ba, 0x78a0, 0xa005, 0x00c0, 0x53ec,
-+      0xa282, 0x0002, 0x00c8, 0x429c, 0x1078, 0x544c, 0x1078, 0x4227,
-+      0x1078, 0x418d, 0xa684, 0x0100, 0x0040, 0x53e2, 0x682c, 0xa084,
-+      0x0001, 0x0040, 0x53e2, 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040,
-+      0x53e2, 0xc6fd, 0xa6b5, 0x1000, 0x7e5a, 0x70a8, 0xa080, 0x0097,
-+      0x781a, 0x2001, 0x0001, 0x007c, 0x0c7e, 0x1078, 0x539c, 0xa284,
-+      0xfffe, 0x0040, 0x53f7, 0x2011, 0x0001, 0x0078, 0x53fb, 0xa284,
-+      0x0001, 0x0040, 0x5401, 0x6100, 0xd1ec, 0x00c0, 0x5401, 0x2011,
-+      0x0000, 0x1078, 0x543e, 0x1078, 0x422e, 0x1078, 0x4194, 0xa684,
-+      0x0100, 0x0040, 0x5417, 0x682c, 0xa084, 0x0001, 0x0040, 0x5417,
-+      0xc6fc, 0x7888, 0xa084, 0x0040, 0x0040, 0x5417, 0xc6fd, 0xa6b5,
-+      0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00c4, 0x781a,
-+      0x2001, 0x0004, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6000, 0x2011,
-+      0x0001, 0xa084, 0x2000, 0x00c0, 0x542f, 0x2011, 0x0000, 0x78ab,
-+      0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004,
-+      0x68b8, 0xa085, 0x0200, 0x68ba, 0x0c7f, 0x007c, 0x789b, 0x0018,
-+      0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b,
-+      0x0081, 0x78ab, 0x0004, 0x007c, 0x0c7e, 0x705c, 0x2060, 0x6000,
-+      0xa084, 0x1000, 0x00c0, 0x545a, 0x2029, 0x0032, 0x2021, 0x0000,
-+      0x0078, 0x546c, 0x6408, 0xa4ac, 0x00ff, 0xa582, 0x000c, 0x00c8,
-+      0x5463, 0x2029, 0x000c, 0x8427, 0xa4a4, 0x00ff, 0xa482, 0x000c,
-+      0x0048, 0x546c, 0x2021, 0x000c, 0x1078, 0x5477, 0x68b8, 0xa085,
-+      0x0100, 0x68ba, 0x0c7f, 0x007c, 0xa026, 0x2029, 0x0032, 0x789b,
-+      0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa,
-+      0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x007c, 0x2001, 0x0003,
-+      0x1078, 0x54a6, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8,
-+      0xa080, 0x00c4, 0x781a, 0x2001, 0x0005, 0x007c, 0x2001, 0x0007,
-+      0x1078, 0x54a6, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8,
-+      0xa080, 0x00c4, 0x781a, 0x2001, 0x0004, 0x007c, 0x789b, 0x0018,
-+      0x78aa, 0x789b, 0x0081, 0x78ab, 0x0001, 0x007c, 0x6904, 0xa18c,
-+      0x00ff, 0xa196, 0x0007, 0x0040, 0x54bc, 0xa196, 0x000f, 0x0040,
-+      0x54bc, 0x1078, 0x1e55, 0x007c, 0x6924, 0xa194, 0x003f, 0x00c0,
-+      0x54c5, 0xa18c, 0xffc0, 0xa105, 0x6826, 0x1078, 0x4781, 0x691c,
-+      0xa184, 0x0100, 0x0040, 0x54d3, 0x6914, 0x2100, 0x1078, 0x47fa,
-+      0x6204, 0x8210, 0x6206, 0x007c, 0x692c, 0x6834, 0x682e, 0xa112,
-+      0x6930, 0x6838, 0x6832, 0xa11b, 0xa200, 0xa301, 0x007c, 0x0c7e,
-+      0xade0, 0x0018, 0x6003, 0x0070, 0x6106, 0x600b, 0x0000, 0x600f,
-+      0x0a00, 0x6013, 0x0000, 0x6017, 0x0000, 0x8007, 0x601a, 0x601f,
-+      0x0000, 0x6023, 0x0000, 0x0c7f, 0x6824, 0xa085, 0x0080, 0x6826,
-+      0x007c, 0x157e, 0x137e, 0x147e, 0x2098, 0xaf80, 0x002d, 0x20a0,
-+      0x81ac, 0x0040, 0x5504, 0x53a6, 0xa184, 0x0001, 0x0040, 0x550a,
-+      0x3304, 0x78be, 0x147f, 0x137f, 0x157f, 0x007c, 0x70a4, 0x0e7e,
-+      0x007e, 0x007f, 0x0e7f, 0xa005, 0x6918, 0x017e, 0x6914, 0x017e,
-+      0x6928, 0x017e, 0x017f, 0x017f, 0x017f, 0x10c0, 0x2bfa, 0x70a7,
-+      0x8000, 0x6814, 0xd0fc, 0x0040, 0x5528, 0xc185, 0x0078, 0x5529,
-+      0xc184, 0x0078, 0x591e, 0x007c, 0x71a4, 0x81ff, 0x0040, 0x5538,
-+      0x7848, 0xa085, 0x0008, 0x784a, 0x70a7, 0x0000, 0x1078, 0x55ac,
-+      0x007c, 0x0c7e, 0x0d7e, 0x1078, 0x1e32, 0x0c7f, 0x157e, 0x137e,
-+      0x147e, 0x2da0, 0x2c98, 0x20a9, 0x0037, 0x53a3, 0x147f, 0x137f,
-+      0x157f, 0x6807, 0x010d, 0x680b, 0x0000, 0x701c, 0x8007, 0x681a,
-+      0x6823, 0x0000, 0x681f, 0x0000, 0x689f, 0x0000, 0x0c7f, 0x007c,
-+      0x70a8, 0xa080, 0x0097, 0x781a, 0x0078, 0x2c5e, 0x70a8, 0xa080,
-+      0x0088, 0x781a, 0x0078, 0x2c5e, 0x783b, 0x1700, 0x70a8, 0xa080,
-+      0x00c4, 0x781a, 0x0078, 0x2c5e, 0x70a8, 0xa080, 0x00cd, 0x781a,
-+      0x0078, 0x2c5e, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0040,
-+      0x557f, 0xa196, 0x000f, 0x0040, 0x557f, 0x6807, 0x0117, 0x6824,
-+      0xa084, 0x00ff, 0xa085, 0x0200, 0x6826, 0x8007, 0x789b, 0x000e,
-+      0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6,
-+      0x7e5a, 0x71a8, 0xa188, 0x0097, 0x791a, 0x007c, 0x1078, 0x552c,
-+      0x7848, 0xa085, 0x000c, 0x784a, 0x70a8, 0xa080, 0x0085, 0x781a,
-+      0x2009, 0x000b, 0x2001, 0x4400, 0x1078, 0x54df, 0x2001, 0x0013,
-+      0x1078, 0x54ae, 0x0078, 0x4856, 0x127e, 0x70f0, 0xa084, 0x4600,
-+      0x8004, 0x2090, 0x7204, 0x700c, 0xa215, 0x7008, 0xc09c, 0xa205,
-+      0x00c0, 0x55c1, 0x7007, 0x0004, 0x7003, 0x0000, 0x127f, 0x2000,
-+      0x007c, 0x7000, 0xd084, 0x0040, 0x5600, 0x7108, 0x0005, 0x7008,
-+      0xa106, 0x00c0, 0x55c5, 0xa184, 0x0003, 0x0040, 0x562c, 0xa184,
-+      0x01e0, 0x00c0, 0x562c, 0xd1f4, 0x00c0, 0x55c5, 0xa184, 0x3000,
-+      0xa086, 0x1000, 0x0040, 0x55c5, 0x2011, 0x0180, 0x710c, 0x8211,
-+      0x0040, 0x55ea, 0x7008, 0xd0f4, 0x00c0, 0x55c5, 0x700c, 0xa106,
-+      0x0040, 0x55df, 0x7007, 0x0012, 0x7108, 0x0005, 0x7008, 0xa106,
-+      0x00c0, 0x55ec, 0xa184, 0x0003, 0x0040, 0x562c, 0xd194, 0x0040,
-+      0x55ec, 0xd1f4, 0x0040, 0x562c, 0x7007, 0x0002, 0x0078, 0x55c5,
-+      0x7108, 0xd1fc, 0x0040, 0x560b, 0x1078, 0x5792, 0x8aff, 0x0040,
-+      0x55b2, 0x0078, 0x5600, 0x700c, 0xa08c, 0x03ff, 0x0040, 0x5631,
-+      0x7004, 0xd084, 0x0040, 0x5623, 0x7014, 0xa005, 0x00c0, 0x561f,
-+      0x7010, 0xa005, 0x0040, 0x5623, 0xa102, 0x00c8, 0x5600, 0x7007,
-+      0x0010, 0x0078, 0x562c, 0x8aff, 0x0040, 0x5631, 0x1078, 0x5a15,
-+      0x00c0, 0x5626, 0x0040, 0x5600, 0x1078, 0x56da, 0x127f, 0x2000,
-+      0x007c, 0x7204, 0x700c, 0xa215, 0x7108, 0xc19c, 0x8103, 0x00c8,
-+      0x5640, 0xa205, 0x00c0, 0x562c, 0x7007, 0x0002, 0x0078, 0x5631,
-+      0xa205, 0x00c0, 0x562c, 0x7003, 0x0000, 0x7007, 0x0004, 0x127f,
-+      0x2000, 0x007c, 0x017e, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+      0x0040, 0x5656, 0xa18e, 0x000f, 0x00c0, 0x5659, 0x6040, 0x0078,
-+      0x565a, 0x6428, 0x017f, 0x84ff, 0x0040, 0x5684, 0x2c70, 0x7004,
-+      0xa0bc, 0x000f, 0xa7b8, 0x5694, 0x273c, 0x87fb, 0x00c0, 0x5672,
-+      0x0048, 0x566c, 0x1078, 0x2bfa, 0x609c, 0xa075, 0x0040, 0x5684,
-+      0x0078, 0x565f, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529,
-+      0x8421, 0x0040, 0x5684, 0x8738, 0x2704, 0xa005, 0x00c0, 0x5673,
-+      0x709c, 0xa075, 0x00c0, 0x565f, 0x007c, 0x0000, 0x0005, 0x0009,
-+      0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009,
-+      0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x5689, 0x5686, 0x0000,
-+      0x0000, 0x8000, 0x0000, 0x5689, 0x0000, 0x5691, 0x568e, 0x0000,
-+      0x0000, 0x0000, 0x0000, 0x5691, 0x0000, 0x568c, 0x568c, 0x0000,
-+      0x0000, 0x8000, 0x0000, 0x568c, 0x0000, 0x5692, 0x5692, 0x0000,
-+      0x0000, 0x0000, 0x0000, 0x5692, 0x2079, 0x6000, 0x2071, 0x0010,
-+      0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x7808, 0xd0ec,
-+      0x0040, 0x56c8, 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, 0x56cc,
-+      0x2009, 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002,
-+      0x7003, 0x0000, 0x8109, 0x0040, 0x56d9, 0x2071, 0x0020, 0x0078,
-+      0x56cc, 0x007c, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x5761,
-+      0x7108, 0x7008, 0xa106, 0x00c0, 0x56e0, 0xa184, 0x01e0, 0x0040,
-+      0x56ed, 0x1078, 0x57d8, 0x0078, 0x5789, 0x7007, 0x0012, 0x7108,
-+      0x7008, 0xa106, 0x00c0, 0x56ef, 0xa184, 0x01e0, 0x0040, 0x56fa,
-+      0x1078, 0x57d8, 0x7808, 0xd0ec, 0x0040, 0x5714, 0x2001, 0x04fd,
-+      0x2004, 0xa086, 0x0003, 0x00c0, 0x5718, 0xa184, 0x4000, 0x0040,
-+      0x571c, 0xa382, 0x0003, 0x00c8, 0x571c, 0xa184, 0x0004, 0x0040,
-+      0x56ef, 0x8318, 0x0078, 0x56ef, 0x780c, 0xd0ec, 0x00c0, 0x571c,
-+      0xa184, 0x4000, 0x00c0, 0x56ef, 0xa19c, 0x300c, 0xa386, 0x2004,
-+      0x0040, 0x5739, 0xa386, 0x0008, 0x0040, 0x5744, 0x7004, 0xd084,
-+      0x00c0, 0x5735, 0x7108, 0x7008, 0xa106, 0x00c0, 0x572a, 0xa184,
-+      0x0003, 0x0040, 0x5735, 0x0078, 0x57d8, 0xa386, 0x200c, 0x00c0,
-+      0x56ef, 0x7200, 0x8204, 0x0048, 0x5744, 0x730c, 0xa384, 0x03ff,
-+      0x0040, 0x5744, 0x1078, 0x2bfa, 0x7108, 0x7008, 0xa106, 0x00c0,
-+      0x5744, 0xa184, 0x01e0, 0x0040, 0x5751, 0x1078, 0x57d8, 0x0078,
-+      0x5789, 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, 0x5761, 0x7310,
-+      0x7014, 0xa305, 0x0040, 0x5761, 0x710c, 0xa184, 0x03ff, 0x00c0,
-+      0x56da, 0x7108, 0x7008, 0xa106, 0x00c0, 0x5761, 0xa184, 0x01e0,
-+      0x0040, 0x576e, 0x1078, 0x57d8, 0x0078, 0x5789, 0x7007, 0x0012,
-+      0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x5772, 0x7108, 0x7008,
-+      0xa106, 0x00c0, 0x5776, 0xa184, 0x01e0, 0x0040, 0x5783, 0x1078,
-+      0x57d8, 0x0078, 0x5789, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x00c0,
-+      0x5776, 0x7003, 0x0000, 0x007c, 0x157e, 0x7108, 0x1078, 0x5792,
-+      0x157f, 0x007c, 0x7204, 0x7500, 0xa184, 0x01e0, 0x00c0, 0x57d8,
-+      0x7108, 0xa184, 0x01e0, 0x00c0, 0x57d8, 0xa184, 0x0007, 0x0079,
-+      0x57a1, 0x57ab, 0x57bc, 0x57a9, 0x57bc, 0x57a9, 0x582f, 0x57a9,
-+      0x582d, 0x1078, 0x2bfa, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006,
-+      0x8aff, 0x00c0, 0x57b7, 0x2049, 0x0000, 0x0078, 0x57bb, 0x1078,
-+      0x5a15, 0x00c0, 0x57b7, 0x007c, 0x7004, 0xa084, 0x0010, 0xc08d,
-+      0x7006, 0x7004, 0xd084, 0x00c0, 0x57d0, 0x7108, 0x7008, 0xa106,
-+      0x00c0, 0x57c5, 0xa184, 0x0003, 0x0040, 0x57d0, 0x0078, 0x57d8,
-+      0x8aff, 0x0040, 0x57d7, 0x1078, 0x5a15, 0x00c0, 0x57d3, 0x007c,
-+      0x7007, 0x0012, 0x7108, 0x00e0, 0x57db, 0x2091, 0x6000, 0x00e0,
-+      0x57df, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004,
-+      0xd09c, 0x00c0, 0x57e7, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x00c0,
-+      0x57eb, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x57ff, 0x7004,
-+      0xa005, 0x00c0, 0x57ff, 0x700c, 0xa005, 0x0040, 0x5801, 0x0078,
-+      0x57e3, 0x2049, 0x0000, 0xb284, 0x0100, 0x0040, 0x580b, 0x2001,
-+      0x0000, 0x0078, 0x580d, 0x2001, 0x0001, 0x1078, 0x43c9, 0xb284,
-+      0x0100, 0x0040, 0x5817, 0x2001, 0x6064, 0x0078, 0x5819, 0x2001,
-+      0x60a4, 0x2004, 0xa084, 0x8000, 0x0040, 0x5826, 0x6824, 0xa005,
-+      0x00c0, 0x5828, 0x6827, 0x0004, 0x0078, 0x5828, 0x681b, 0x0002,
-+      0x007c, 0x1078, 0x2bfa, 0x1078, 0x2bfa, 0x1078, 0x5877, 0x7210,
-+      0x7114, 0x700c, 0xa09c, 0x03ff, 0x2800, 0xa300, 0xa211, 0xa189,
-+      0x0000, 0x1078, 0x5877, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200,
-+      0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x5852,
-+      0x00c8, 0x5852, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60,
-+      0x0078, 0x5839, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008,
-+      0x0040, 0x585e, 0xa7ba, 0x568e, 0x0078, 0x5860, 0xa7ba, 0x5686,
-+      0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7108,
-+      0x7008, 0xa106, 0x00c0, 0x5867, 0xa184, 0x01e0, 0x0040, 0x5872,
-+      0x1078, 0x57d8, 0x7007, 0x0012, 0x1078, 0x56da, 0x007c, 0x8a50,
-+      0x8739, 0x2704, 0xa004, 0x00c0, 0x588b, 0x6000, 0xa064, 0x00c0,
-+      0x5882, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x56a4, 0x203c,
-+      0x87fb, 0x1040, 0x2bfa, 0x007c, 0x127e, 0x0d7e, 0x70f0, 0xa084,
-+      0x4600, 0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c,
-+      0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804,
-+      0xa084, 0x0008, 0x007f, 0x0040, 0x58a9, 0xa0b8, 0x568e, 0x0078,
-+      0x58ab, 0xa0b8, 0x5686, 0xb284, 0x0100, 0x0040, 0x58b2, 0x7e18,
-+      0x0078, 0x58b3, 0x7e1c, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff,
-+      0xa186, 0x0007, 0x0040, 0x58c0, 0xa18e, 0x000f, 0x00c0, 0x58c8,
-+      0x681c, 0xa084, 0x0040, 0x0040, 0x58cd, 0xc685, 0x0078, 0x58cd,
-+      0x681c, 0xd0b4, 0x0040, 0x58cd, 0xc685, 0x700c, 0xa084, 0x03ff,
-+      0x0040, 0x58d8, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x58d4,
-+      0x2400, 0xa305, 0x00c0, 0x58de, 0x0078, 0x5904, 0x2c58, 0x2704,
-+      0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e,
-+      0xa184, 0x0008, 0x0040, 0x58f4, 0x6010, 0xa081, 0x0000, 0x7022,
-+      0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012,
-+      0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60,
-+      0x1078, 0x5a43, 0x0078, 0x5906, 0x1078, 0x5a15, 0x00c0, 0x5904,
-+      0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70f0, 0xa084, 0x4600,
-+      0x8004, 0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0,
-+      0x5915, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e,
-+      0x70f0, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x700c, 0xa084,
-+      0x03ff, 0x0040, 0x5931, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0,
-+      0x592d, 0x6814, 0xd0fc, 0x0040, 0x5938, 0x7e1c, 0x0078, 0x5939,
-+      0x7e18, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+      0x0040, 0x5946, 0xa18e, 0x000f, 0x00c0, 0x5950, 0x681c, 0xa084,
-+      0x0040, 0x0040, 0x594c, 0xc685, 0x6840, 0x2050, 0x0078, 0x5957,
-+      0x681c, 0xd0ac, 0x00c0, 0x5955, 0xc685, 0x6828, 0x2050, 0x2d60,
-+      0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x5694, 0x273c, 0x87fb, 0x00c0,
-+      0x596b, 0x0048, 0x5965, 0x1078, 0x2bfa, 0x689c, 0xa065, 0x0040,
-+      0x596f, 0x0078, 0x5958, 0x1078, 0x5a15, 0x00c0, 0x596b, 0x127f,
-+      0x2000, 0x007c, 0x127e, 0x007e, 0x017e, 0x0d7e, 0x70f0, 0xa084,
-+      0x4600, 0x8004, 0x2090, 0xb284, 0x0100, 0x0040, 0x5982, 0x7e18,
-+      0x0078, 0x5983, 0x7e1c, 0x0d7f, 0x037f, 0x047f, 0xa6b5, 0x000c,
-+      0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0040, 0x5993, 0xa18e,
-+      0x000f, 0x00c0, 0x599b, 0x681c, 0xa084, 0x0040, 0x0040, 0x59a0,
-+      0xc685, 0x0078, 0x59a0, 0x681c, 0xd0b4, 0x0040, 0x59a0, 0xc685,
-+      0x2049, 0x5972, 0x017e, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+      0x0040, 0x59ae, 0xa18e, 0x000f, 0x00c0, 0x59b1, 0x6840, 0x0078,
-+      0x59b2, 0x6828, 0x017f, 0xa055, 0x0d7e, 0x0040, 0x5a11, 0x2d70,
-+      0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x5694, 0x273c, 0x87fb,
-+      0x00c0, 0x59cd, 0x0048, 0x59c6, 0x1078, 0x2bfa, 0x709c, 0xa075,
-+      0x2060, 0x0040, 0x5a11, 0x0078, 0x59b9, 0x2704, 0xae68, 0x6808,
-+      0xa422, 0x680c, 0xa31b, 0x0048, 0x59e6, 0x8a51, 0x00c0, 0x59da,
-+      0x1078, 0x2bfa, 0x8738, 0x2704, 0xa005, 0x00c0, 0x59ce, 0x709c,
-+      0xa075, 0x2060, 0x0040, 0x5a11, 0x0078, 0x59b9, 0x8422, 0x8420,
-+      0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300,
-+      0xa11b, 0x00c8, 0x59f5, 0x1078, 0x2bfa, 0x017e, 0x3208, 0xa18c,
-+      0x0100, 0x0040, 0x5a0b, 0x007e, 0x2001, 0x6002, 0x2004, 0xd0ec,
-+      0x007f, 0x0040, 0x5a07, 0x2071, 0x0020, 0x0078, 0x5a0d, 0x2071,
-+      0x0050, 0x0078, 0x5a0d, 0x2071, 0x0020, 0x017f, 0x0d7f, 0x0078,
-+      0x58cd, 0x0d7f, 0x127f, 0x2000, 0x007c, 0x7008, 0x007e, 0xa084,
-+      0x01e0, 0x007f, 0x0040, 0x5a1e, 0xa006, 0x007c, 0xa084, 0x0003,
-+      0xa086, 0x0003, 0x00c0, 0x5a25, 0x007c, 0x2704, 0xac08, 0x2104,
-+      0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012, 0x8108,
-+      0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x5a3d, 0x8108,
-+      0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7004, 0xa084,
-+      0x0010, 0xc085, 0x7006, 0x8738, 0x2704, 0xa005, 0x00c0, 0x5a56,
-+      0x609c, 0xa005, 0x0040, 0x5a68, 0x2060, 0x6004, 0xa084, 0x000f,
-+      0xa080, 0x5694, 0x203c, 0x87fb, 0x1040, 0x2bfa, 0x8a51, 0x0040,
-+      0x5a67, 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x5a63,
-+      0xa006, 0x0078, 0x5a68, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c,
-+      0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70f0, 0xa084,
-+      0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003,
-+      0x00c0, 0x5a90, 0x017e, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007,
-+      0x0040, 0x5a86, 0xa18e, 0x000f, 0x00c0, 0x5a89, 0x6840, 0x0078,
-+      0x5a8a, 0x6828, 0x017f, 0xa005, 0x0040, 0x5aa0, 0x0078, 0x55c1,
-+      0x7108, 0xd1fc, 0x0040, 0x5a98, 0x1078, 0x5792, 0x0078, 0x5a75,
-+      0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x5a9a, 0x1078, 0x5792,
-+      0x7008, 0xa086, 0x0008, 0x00c0, 0x5a75, 0x7000, 0xa005, 0x00c0,
-+      0x5a75, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-+      0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70f0, 0xa084,
-+      0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x5ab0, 0x69b0, 0xad80,
-+      0x0011, 0xa100, 0x20a0, 0xb284, 0x0100, 0x0040, 0x5ad5, 0x2001,
-+      0x6002, 0x2004, 0xd0ec, 0x0040, 0x5ad1, 0x2099, 0x0031, 0x0078,
-+      0x5ad7, 0x2099, 0x0032, 0x0078, 0x5ad7, 0x2099, 0x0031, 0x700c,
-+      0xa084, 0x03ff, 0x0040, 0x5af5, 0x6928, 0xa100, 0x682a, 0x7007,
-+      0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x5aea, 0x8000,
-+      0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, 0x0040, 0x5af5, 0x7007,
-+      0x0004, 0x7004, 0xd094, 0x00c0, 0x5af1, 0x0c7f, 0x2049, 0x0000,
-+      0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, 0x2000, 0x007c,
-+      0x2091, 0x6000, 0x2091, 0x8000, 0x78b0, 0xa005, 0x00c0, 0x5b17,
-+      0x7970, 0x70d0, 0xa106, 0x00c0, 0x5b17, 0x7814, 0xa005, 0x0040,
-+      0x5b17, 0x7817, 0x0000, 0x0068, 0x5b17, 0x2091, 0x4080, 0x7828,
-+      0x8001, 0x782a, 0x00c0, 0x5b9f, 0x782c, 0x782a, 0x7808, 0xd0ec,
-+      0x00c0, 0x5b98, 0x2061, 0x85c0, 0x2069, 0x6080, 0xc7fd, 0x68ec,
-+      0xa005, 0x0040, 0x5b32, 0x8001, 0x68ee, 0xa005, 0x00c0, 0x5b32,
-+      0x1078, 0x5d6b, 0x6800, 0xa084, 0x000f, 0x0040, 0x5b47, 0xa086,
-+      0x0001, 0x0040, 0x5b47, 0x6840, 0xa00d, 0x0040, 0x5b47, 0x2104,
-+      0xa005, 0x0040, 0x5b47, 0x8001, 0x200a, 0x0040, 0x5cc9, 0x6810,
-+      0xa005, 0x0040, 0x5b6b, 0x8001, 0x6812, 0x00c0, 0x5b6b, 0x68c3,
-+      0x0001, 0xd7fc, 0x00c0, 0x5b60, 0x7808, 0xd0ec, 0x0040, 0x5b5c,
-+      0x2009, 0x0102, 0x0078, 0x5b62, 0x2009, 0x0202, 0x0078, 0x5b62,
-+      0x2009, 0x0102, 0x684c, 0xc08d, 0x200a, 0x6868, 0xa005, 0x0040,
-+      0x5b6b, 0x1078, 0x2852, 0x6884, 0xa005, 0x0040, 0x5b78, 0x8001,
-+      0x6886, 0x00c0, 0x5b78, 0x686b, 0x0000, 0x68f0, 0xc0dd, 0x68f2,
-+      0x68f0, 0xd0fc, 0x0040, 0x5b95, 0xc0fc, 0x68f2, 0x20a9, 0x0200,
-+      0x6034, 0xa005, 0x0040, 0x5b91, 0x8001, 0x6036, 0x68f0, 0xc0fd,
-+      0x68f2, 0x00c0, 0x5b91, 0x6010, 0xa005, 0x0040, 0x5b91, 0x1078,
-+      0x2852, 0xace0, 0x0010, 0x00f0, 0x5b80, 0xd7fc, 0x0040, 0x5b9f,
-+      0x2061, 0x65c0, 0x2069, 0x6040, 0xc7fc, 0x0078, 0x5b27, 0x1078,
-+      0x5bc8, 0x7830, 0x8001, 0x7832, 0x00c0, 0x5bc1, 0x7834, 0x7832,
-+      0x2061, 0x65c0, 0x2069, 0x6040, 0xc7fc, 0x6808, 0xa005, 0x0040,
-+      0x5bb3, 0x1078, 0x5c32, 0xd7fc, 0x00c0, 0x5bc1, 0x7808, 0xd0ec,
-+      0x00c0, 0x5bc1, 0x2061, 0x85c0, 0x2069, 0x6080, 0xc7fd, 0x0078,
-+      0x5bad, 0x780c, 0xd0e4, 0x00c0, 0x5bc5, 0x2091, 0x8001, 0x007c,
-+      0x7838, 0x8001, 0x783a, 0x00c0, 0x5c31, 0x783c, 0x783a, 0x2069,
-+      0x6040, 0xc7fc, 0x7808, 0x2079, 0x0200, 0xd0ec, 0x0040, 0x5bda,
-+      0x2079, 0x0100, 0x68f8, 0xa005, 0x0040, 0x5be6, 0x7de0, 0xa504,
-+      0x00c0, 0x5be6, 0x68fa, 0x68f0, 0xc0bc, 0x68f2, 0x2079, 0x6000,
-+      0x680c, 0xa005, 0x00c0, 0x5bee, 0x2001, 0x0101, 0x8001, 0x680e,
-+      0xd7fc, 0x00c0, 0x5bf7, 0xa080, 0xa5c0, 0x0078, 0x5bf9, 0xa080,
-+      0xa6d0, 0x2040, 0x2004, 0xa065, 0x0040, 0x5c23, 0x6024, 0xa005,
-+      0x0040, 0x5c1f, 0x8001, 0x6026, 0x00c0, 0x5c1f, 0x6800, 0xa005,
-+      0x0040, 0x5c12, 0x6850, 0xac06, 0x00c0, 0x5c12, 0x1078, 0x5cc9,
-+      0x0078, 0x5c23, 0x6868, 0xa005, 0x0040, 0x5c1a, 0x6027, 0x0001,
-+      0x0078, 0x5c1f, 0x1078, 0x5c7c, 0x2804, 0x0078, 0x5bfb, 0x6000,
-+      0x2c40, 0x0078, 0x5bfb, 0xd7fc, 0x00c0, 0x5c31, 0x7808, 0xd0ec,
-+      0x00c0, 0x5c31, 0x2069, 0x6080, 0xc7fd, 0x2079, 0x0100, 0x0078,
-+      0x5bda, 0x007c, 0xa00e, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0040,
-+      0x5c6b, 0x6024, 0xa005, 0x0040, 0x5c41, 0x8001, 0x6026, 0x0078,
-+      0x5c69, 0x6008, 0xc09c, 0xd084, 0x00c0, 0x5c49, 0xd0ac, 0x0040,
-+      0x5c63, 0x600a, 0x6004, 0xa005, 0x0040, 0x5c6b, 0x0d7e, 0x0c7e,
-+      0x017e, 0x2068, 0x6010, 0x8001, 0x6012, 0x1078, 0x3fd3, 0x2d00,
-+      0x2c68, 0x2060, 0x1078, 0x1ef5, 0x1078, 0x2240, 0x017f, 0x0c7f,
-+      0x0d7f, 0x0078, 0x5c6b, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0078,
-+      0x5c6b, 0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0, 0x5c35, 0xa184,
-+      0x0001, 0x0040, 0x5c7a, 0xa18c, 0xfffe, 0x690a, 0x1078, 0x2852,
-+      0x0078, 0x5c7b, 0x690a, 0x007c, 0x2c00, 0x6882, 0x6714, 0x6f7a,
-+      0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084,
-+      0x5f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022,
-+      0x6000, 0x2042, 0x6860, 0xac06, 0x00c0, 0x5c98, 0x2800, 0x6862,
-+      0x1078, 0x1e6e, 0x6818, 0xa005, 0x0040, 0x5cc8, 0x8001, 0x681a,
-+      0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, 0x8001, 0x0050, 0x5cc8,
-+      0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x2251,
-+      0xd7fc, 0x00c0, 0x5cb7, 0x2069, 0x6040, 0x0078, 0x5cb9, 0x2069,
-+      0x6080, 0x690c, 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x5cc5,
-+      0x6883, 0x0000, 0x697e, 0x2001, 0x0004, 0x2708, 0x1078, 0x2845,
-+      0x007c, 0x0d7e, 0x0e7e, 0x2d70, 0xd7fc, 0x00c0, 0x5cdb, 0x7808,
-+      0xd0ec, 0x0040, 0x5cd7, 0x2069, 0x0100, 0x0078, 0x5cdd, 0x2069,
-+      0x0200, 0x0078, 0x5cdd, 0x2069, 0x0100, 0x7000, 0xa084, 0x000f,
-+      0x0040, 0x5d27, 0xa086, 0x0007, 0x00c0, 0x5cef, 0x0f7e, 0x2d78,
-+      0x7094, 0x2068, 0x1078, 0x4694, 0x0f7f, 0x0078, 0x5d27, 0x7050,
-+      0x2060, 0x1078, 0x2b67, 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00,
-+      0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f,
-+      0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830,
-+      0xd0b4, 0x0040, 0x5d23, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
-+      0xd094, 0x0040, 0x5d15, 0x00f0, 0x5d0f, 0x684b, 0x0009, 0x20a9,
-+      0x0014, 0x6848, 0xd084, 0x0040, 0x5d1f, 0x00f0, 0x5d19, 0x20a9,
-+      0x00fa, 0x00f0, 0x5d21, 0x681b, 0x0048, 0x706b, 0x0007, 0x0e7f,
-+      0x0d7f, 0x007c, 0x2079, 0x6000, 0x1078, 0x5d5e, 0x1078, 0x5d44,
-+      0x1078, 0x5d51, 0x2009, 0x0002, 0x2069, 0x6080, 0x680b, 0x0000,
-+      0x680f, 0x0000, 0x6813, 0x0000, 0x8109, 0x0040, 0x5d43, 0x2069,
-+      0x6040, 0x0078, 0x5d36, 0x007c, 0x7808, 0xd0ec, 0x0040, 0x5d4c,
-+      0x2019, 0x00cc, 0x0078, 0x5d4e, 0x2019, 0x007b, 0x7b32, 0x7b36,
-+      0x007c, 0x780c, 0xd0e4, 0x00c0, 0x5d59, 0x2019, 0x0040, 0x0078,
-+      0x5d5b, 0x2019, 0x0026, 0x7b3a, 0x7b3e, 0x007c, 0x780c, 0xd0e4,
-+      0x00c0, 0x5d66, 0x2019, 0x3f94, 0x0078, 0x5d68, 0x2019, 0x2626,
-+      0x7b2a, 0x7b2e, 0x007c, 0x6a54, 0xa285, 0x0000, 0x0040, 0x5d93,
-+      0x6958, 0x6bdc, 0xa300, 0x0c7e, 0x2164, 0x6304, 0x83ff, 0x00c0,
-+      0x5d83, 0x8211, 0x0040, 0x5d87, 0x8108, 0xa11a, 0x0048, 0x5d74,
-+      0x69dc, 0x0078, 0x5d74, 0x68ef, 0x000a, 0x0c7f, 0x007c, 0x6954,
-+      0x6adc, 0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109, 0x00c0,
-+      0x5d89, 0x6956, 0x0c7f, 0x007c, 0x00e0, 0x5d94, 0x2091, 0x6000,
-+      0x00e0, 0x5d98, 0x2091, 0x6000, 0x70ec, 0xd0dc, 0x00c0, 0x5da5,
-+      0xd0d4, 0x0040, 0x5dce, 0x0078, 0x5dd1, 0x2008, 0x7808, 0xd0ec,
-+      0x0040, 0x5db8, 0xd1c4, 0x00c0, 0x5df0, 0x780c, 0xc0c5, 0x780e,
-+      0x7808, 0xc0f5, 0x780a, 0xd0ec, 0x0040, 0x5dec, 0x0078, 0x5de8,
-+      0xae8e, 0x0100, 0x0040, 0x5dc5, 0x780c, 0xc0f5, 0xc0c5, 0x780e,
-+      0xd0d4, 0x00c0, 0x5dec, 0x0078, 0x5de8, 0x780c, 0xc0fd, 0xc0c5,
-+      0x780e, 0xd0d4, 0x00c0, 0x5dec, 0x0078, 0x5de8, 0xd0e4, 0x0040,
-+      0x5dee, 0x00e0, 0x5dd1, 0x2091, 0x6000, 0x2009, 0x000c, 0x00e0,
-+      0x5dd7, 0x2091, 0x6000, 0x8109, 0x00c0, 0x5dd7, 0x70e4, 0xa084,
-+      0x01ff, 0xa086, 0x01ff, 0x00c0, 0x5de8, 0x70ec, 0x0078, 0x5da5,
-+      0x7804, 0xd08c, 0x0040, 0x5dee, 0x681b, 0x000c, 0x70a0, 0x70a2,
-+      0x007c, 0x0020, 0x002b, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0014, 0x0014, 0x9849, 0x0014,
-+      0x0014, 0x98ec, 0x98d6, 0x0014, 0x0014, 0x0014, 0x0080, 0x0140,
-+      0x0000, 0x0201, 0x0604, 0x0c08, 0x2120, 0x4022, 0xf880, 0x0018,
-+      0x300b, 0xa201, 0x0014, 0xa200, 0x0014, 0xa200, 0x0214, 0xa202,
-+      0x3806, 0x7102, 0x805f, 0x9481, 0x8839, 0x20c3, 0x0864, 0xa834,
-+      0x28c1, 0x9cb9, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300,
-+      0x1856, 0x883a, 0xa804, 0x28f2, 0x9c9d, 0xa8f4, 0x300c, 0x28e1,
-+      0x9c9d, 0x2822, 0xa207, 0x64a4, 0x2001, 0xa811, 0xa206, 0x64c0,
-+      0x6de0, 0x67a0, 0x6fc0, 0x882b, 0x1814, 0x883b, 0x7824, 0x68c1,
-+      0x7864, 0x883e, 0xa802, 0x8576, 0x8677, 0x80df, 0x94a1, 0x206c,
-+      0x28c1, 0x9cb9, 0x2045, 0x2104, 0x20a1, 0x2080, 0x7961, 0xa8df,
-+      0xa209, 0x0904, 0xa20e, 0xa808, 0xa205, 0xa300, 0x1872, 0x879a,
-+      0x883c, 0x1fe2, 0xc601, 0xa20a, 0x8000, 0x85a1, 0x806f, 0x9422,
-+      0x84a2, 0x856e, 0x0704, 0x9c9d, 0x0014, 0xa204, 0xa300, 0x3009,
-+      0x19e2, 0xf864, 0x856e, 0x883f, 0x08e6, 0xa8f7, 0xf881, 0xa8eb,
-+      0xc007, 0xf8c1, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfb02, 0x1de2,
-+      0x0014, 0x8532, 0xf241, 0x0014, 0x1de2, 0x84a8, 0xd7a0, 0x1fe6,
-+      0x0014, 0xa208, 0x6043, 0x8008, 0x1dc1, 0x0016, 0x8300, 0x8160,
-+      0x842a, 0xf041, 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011,
-+      0x20d5, 0x8822, 0x0016, 0x3008, 0x2845, 0x1011, 0xa8fd, 0x2802,
-+      0x1011, 0xa8fd, 0xa894, 0x283e, 0x1011, 0xa8fd, 0xa20b, 0x7102,
-+      0x805f, 0x9481, 0x0017, 0x300c, 0xa300, 0x1de2, 0xd387, 0x0210,
-+      0xa800, 0x26e0, 0x873a, 0xfb02, 0x19f2, 0x1fe2, 0x0014, 0xa20d,
-+      0x3806, 0x0210, 0x9cbe, 0x0704, 0x0017, 0x60ff, 0x300c, 0x8720,
-+      0xa211, 0x7102, 0x805f, 0x9481, 0x8000, 0x8300, 0x8772, 0x8837,
-+      0x2101, 0xa821, 0x10d2, 0x78e2, 0x9d5c, 0xa8fc, 0xd984, 0xf0e2,
-+      0xf0a1, 0xa820, 0x0014, 0x8831, 0xd166, 0x8830, 0x800f, 0x9401,
-+      0xb520, 0xc802, 0x8820, 0xa80f, 0x2301, 0xa80d, 0x10d2, 0x78e4,
-+      0x9d5c, 0x8821, 0x8820, 0xa8e6, 0xf123, 0xf142, 0xf101, 0xa855,
-+      0x10d2, 0x70f6, 0x8832, 0x8203, 0x870c, 0xd99e, 0x6001, 0x0014,
-+      0x6848, 0x0214, 0x8827, 0x300a, 0x0013, 0xa21b, 0x8300, 0x2001,
-+      0xa843, 0x8201, 0x1852, 0xd183, 0x8834, 0x8001, 0xa801, 0x3027,
-+      0x84a8, 0x1a56, 0x8833, 0x0014, 0xa218, 0x6981, 0x9d63, 0x692b,
-+      0x6902, 0x1a34, 0xa806, 0x8080, 0x9521, 0xc002, 0x1a94, 0xa801,
-+      0x1a14, 0x7021, 0x0014, 0xa300, 0x69e4, 0x8023, 0x16e1, 0x8001,
-+      0x10f1, 0x6946, 0xa213, 0x1462, 0xa213, 0x8000, 0x16e1, 0xa808,
-+      0x6161, 0x0014, 0xa214, 0x61c2, 0x8002, 0x14e1, 0x8004, 0x16e1,
-+      0x0101, 0x300a, 0x8827, 0x0014, 0x11c2, 0x211e, 0x870e, 0xa21d,
-+      0x0014, 0x9d63, 0x0014, 0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6,
-+      0x882c, 0x0016, 0xa212, 0x8300, 0x10d2, 0x70e4, 0x0004, 0x8007,
-+      0x9424, 0xcc1a, 0x9d5c, 0xa8f8, 0x878e, 0x0016, 0xa21c, 0x1035,
-+      0xa8bb, 0xa210, 0x3807, 0x300c, 0x817e, 0x872b, 0x8772, 0x0014,
-+      0x0000, 0xd27a
-+};
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_12160.h    2003-07-19 17:06:32.000000000 -0700
-@@ -0,0 +1,4198 @@
-+/* @(#)asm_12160.h 1.3 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */ 
-+
-+/************************************************************************
-+ *                                                                    *
-+ *          --- ISP12160A Initiator/Target RISC Firmware ---          *
-+ *                         32 LUN Support                             *
-+ *                                                                    *
-+ ************************************************************************/
-+#ifndef       ISP_TARGET_MODE
-+/*
-+ *    Firmware Version 10.04.32 (12:03 May 09, 2001)
-+ */
-+static const u_int16_t isp_12160_risc_code[] = {
-+      0x0804, 0x1041, 0x0000, 0x35e6, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31,
-+      0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320,
-+      0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350,
-+      0x3132, 0x3136, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+      0x6572, 0x7369, 0x6f6e, 0x2031, 0x302e, 0x3034, 0x2020, 0x2043,
-+      0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
-+      0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
-+      0x2400, 0x20c9, 0x8fff, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001,
-+      0x01ff, 0x2004, 0xd0fc, 0x1120, 0x2071, 0x0100, 0x70a0, 0x70a2,
-+      0x20c1, 0x0020, 0x2089, 0x1221, 0x2071, 0x0010, 0x70c3, 0x0004,
-+      0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x000a,
-+      0x2001, 0x04fd, 0x2004, 0x70d6, 0x2009, 0xfeff, 0x2130, 0x2128,
-+      0xa1a2, 0x4600, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
-+      0xa192, 0x9000, 0x2009, 0x0000, 0x2001, 0x0032, 0x080c, 0x1de8,
-+      0x2218, 0x2079, 0x4600, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9,
-+      0x0040, 0x42a4, 0x8109, 0x1dd8, 0x2009, 0xff00, 0x3400, 0xa102,
-+      0x0218, 0x0110, 0x20a8, 0x42a4, 0x781b, 0x0064, 0x7814, 0xc0cd,
-+      0xc0d5, 0x7816, 0x2071, 0x0200, 0x00d6, 0x2069, 0x4640, 0x080c,
-+      0x459a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1130, 0x2069, 0x4680,
-+      0x2071, 0x0100, 0x080c, 0x459a, 0x7814, 0xc0d4, 0x7816, 0x00de,
-+      0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, 0xc08d, 0x7802,
-+      0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, 0x7827, 0x0002,
-+      0x2009, 0x0002, 0x2069, 0x4640, 0x681b, 0x0003, 0x6823, 0x0007,
-+      0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, 0x6837, 0x0006,
-+      0x6833, 0x0008, 0x683b, 0x0000, 0x8109, 0x0500, 0x68cf, 0x000a,
-+      0x68bf, 0x46c0, 0x2079, 0x4600, 0x68d3, 0x762d, 0x68c3, 0x4bc0,
-+      0x68c7, 0x4ac0, 0x68cb, 0x8bc0, 0x68a7, 0x8e44, 0x68ab, 0x8e49,
-+      0x68af, 0x8e44, 0x68b3, 0x8e44, 0x68a3, 0x0001, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x11c8, 0x2069, 0x4680, 0x0870, 0x68cf, 0x000a,
-+      0x68bf, 0x48c0, 0x68d3, 0x7839, 0x68c3, 0x6bc0, 0x68c7, 0x4b40,
-+      0x68cb, 0x8cd0, 0x68a7, 0x8e49, 0x68ab, 0x8e4e, 0x68af, 0x8e49,
-+      0x68b3, 0x8e49, 0x68a3, 0x0001, 0x00e6, 0x2069, 0x4ac0, 0x2071,
-+      0x0200, 0x70ec, 0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120,
-+      0x2019, 0x180c, 0x2021, 0x000c, 0x080c, 0x1d58, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x1188, 0x2069, 0x4b40, 0x2071, 0x0100, 0x70ec,
-+      0xd0e4, 0x2019, 0x1809, 0x2021, 0x0009, 0x1120, 0x2019, 0x180c,
-+      0x2021, 0x000c, 0x080c, 0x1d58, 0x00ee, 0x2011, 0x0002, 0x2069,
-+      0x4bc0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b,
-+      0x0040, 0x7bc8, 0xa386, 0xfeff, 0x1128, 0x6817, 0x0100, 0x681f,
-+      0x0064, 0x0020, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010,
-+      0x1f04, 0x1135, 0x8109, 0x1d38, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+      0x1128, 0x8211, 0x0118, 0x2069, 0x6bc0, 0x08d8, 0x080c, 0x22cf,
-+      0x080c, 0x4015, 0x080c, 0x1b6d, 0x080c, 0x4553, 0x2091, 0x2200,
-+      0x2079, 0x4600, 0x2071, 0x0050, 0x2091, 0x2400, 0x2079, 0x4600,
-+      0x2071, 0x0020, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x4640,
-+      0x2091, 0x2800, 0x2079, 0x0100, 0x2071, 0x4680, 0x2091, 0x2000,
-+      0x2079, 0x4600, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090,
-+      0x2071, 0x0010, 0x70c3, 0x0000, 0x1004, 0x118c, 0x70c0, 0xa086,
-+      0x0002, 0x1110, 0x080c, 0x13ba, 0x2039, 0x0000, 0x080c, 0x12ab,
-+      0x78ac, 0xa005, 0x1180, 0x0e04, 0x119a, 0x786c, 0xa065, 0x0110,
-+      0x080c, 0x207a, 0x080c, 0x1e09, 0x0e04, 0x11af, 0x786c, 0xa065,
-+      0x0110, 0x080c, 0x207a, 0x0e04, 0x11af, 0x2009, 0x4647, 0x2011,
-+      0x4687, 0x2104, 0x220c, 0xa105, 0x0110, 0x080c, 0x1c7c, 0x2071,
-+      0x4640, 0x70a0, 0xa005, 0x01e8, 0x744c, 0xa485, 0x0000, 0x01c8,
-+      0x2079, 0x0200, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d, 0x2190,
-+      0x080c, 0x2720, 0x2091, 0x8000, 0x2091, 0x303d, 0x0e04, 0x11d1,
-+      0x2079, 0x4600, 0x786c, 0xa065, 0x0120, 0x2071, 0x0010, 0x080c,
-+      0x207a, 0x1d04, 0x11d9, 0x2079, 0x4600, 0x2071, 0x0010, 0x080c,
-+      0x4370, 0x2071, 0x4680, 0x70a0, 0xa005, 0x0188, 0x704c, 0xa025,
-+      0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d,
-+      0x2190, 0x080c, 0x2720, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079,
-+      0x4600, 0x2071, 0x0010, 0x0e04, 0x11fa, 0x786c, 0xa065, 0x0110,
-+      0x080c, 0x207a, 0x1d04, 0x118e, 0x080c, 0x4370, 0x0804, 0x118e,
-+      0x3c00, 0xa084, 0x0007, 0x0002, 0x120c, 0x120c, 0x120e, 0x120e,
-+      0x1213, 0x1213, 0x1218, 0x1218, 0x080c, 0x254c, 0x2091, 0x2400,
-+      0x080c, 0x40ad, 0x0005, 0x2091, 0x2200, 0x080c, 0x40ad, 0x0005,
-+      0x2091, 0x2200, 0x080c, 0x40ad, 0x2091, 0x2400, 0x080c, 0x40ad,
-+      0x0005, 0x1241, 0x1241, 0x1242, 0x1242, 0x124d, 0x124d, 0x124d,
-+      0x124d, 0x1256, 0x1256, 0x1261, 0x1261, 0x124d, 0x124d, 0x124d,
-+      0x124d, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270,
-+      0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270,
-+      0x1270, 0x0cf8, 0x0006, 0x0106, 0x0126, 0x2091, 0x2800, 0x080c,
-+      0x2569, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126,
-+      0x080c, 0x1200, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106,
-+      0x0126, 0x2091, 0x2600, 0x080c, 0x2569, 0x012e, 0x010e, 0x000e,
-+      0x000d, 0x0006, 0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x2569,
-+      0x2091, 0x2800, 0x080c, 0x2569, 0x012e, 0x010e, 0x000e, 0x000d,
-+      0x0006, 0x0106, 0x0126, 0x00d6, 0x00e6, 0x00f6, 0x2079, 0x4600,
-+      0x2071, 0x0200, 0x2069, 0x4640, 0x3d00, 0xd08c, 0x0130, 0x70ec,
-+      0xa084, 0x1c00, 0x78e2, 0x080c, 0x459a, 0x3d00, 0xd084, 0x0150,
-+      0x2069, 0x4680, 0x2071, 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78e6,
-+      0x080c, 0x459a, 0x080c, 0x24fd, 0x00fe, 0x00ee, 0x00de, 0x012e,
-+      0x010e, 0x000e, 0x000d, 0x7008, 0x800b, 0x1240, 0x7007, 0x0002,
-+      0xa08c, 0x01e0, 0x1120, 0xd09c, 0x0108, 0x0887, 0x0897, 0x70c3,
-+      0x4002, 0x0804, 0x13bd, 0x0e04, 0x131e, 0x2061, 0x0000, 0x6018,
-+      0xd084, 0x1904, 0x131e, 0x7828, 0xa005, 0x1120, 0x0004, 0x131f,
-+      0x0804, 0x131e, 0xd0fc, 0x0130, 0x0006, 0x080c, 0x1b0a, 0x000e,
-+      0x0150, 0x0028, 0x0006, 0x080c, 0x1aff, 0x000e, 0x0120, 0x2001,
-+      0x4007, 0x0804, 0x13bc, 0x7910, 0xd0fc, 0x1128, 0x2061, 0x4640,
-+      0xc19c, 0xc7fc, 0x0020, 0x2061, 0x4680, 0xc19d, 0xc7fd, 0x6060,
-+      0xa005, 0x1904, 0x131e, 0x7912, 0x607e, 0x7828, 0xc0fc, 0xa086,
-+      0x0018, 0x1120, 0x00c6, 0x080c, 0x1916, 0x00ce, 0x782b, 0x0000,
-+      0x6078, 0xa065, 0x01e0, 0x00c6, 0x609c, 0x080c, 0x1bd4, 0x00ce,
-+      0x609f, 0x0000, 0x080c, 0x1a41, 0x2009, 0x0018, 0x6087, 0x0103,
-+      0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
-+      0x080c, 0x1b15, 0x000e, 0x7812, 0x1198, 0x080c, 0x1b60, 0x7810,
-+      0xd09c, 0x1118, 0x2061, 0x4640, 0x0020, 0x2061, 0x4680, 0xc09c,
-+      0x7812, 0x607b, 0x0000, 0x60d0, 0xd0c4, 0x0130, 0xc0c4, 0x60d2,
-+      0x2001, 0x4005, 0x0804, 0x13bc, 0x0804, 0x13ba, 0x0005, 0xa006,
-+      0x70c2, 0x70c6, 0x70ca, 0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a,
-+      0x0040, 0x1a04, 0x136c, 0x0002, 0x13ba, 0x1408, 0x13d6, 0x143c,
-+      0x1470, 0x1470, 0x13ce, 0x1a59, 0x147a, 0x13c8, 0x13da, 0x13db,
-+      0x13dc, 0x13dd, 0x1a5d, 0x13c8, 0x1487, 0x14db, 0x1931, 0x1a53,
-+      0x13de, 0x17ba, 0x17f0, 0x1822, 0x1868, 0x1777, 0x1784, 0x1797,
-+      0x17a9, 0x15b0, 0x13c8, 0x150d, 0x1518, 0x1526, 0x1534, 0x154b,
-+      0x1559, 0x155c, 0x156a, 0x1578, 0x1582, 0x1596, 0x15a2, 0x13c8,
-+      0x13c8, 0x13c8, 0x13c8, 0x15bd, 0x15ce, 0x15e8, 0x161c, 0x1645,
-+      0x1657, 0x165a, 0x1685, 0x16be, 0x16d0, 0x1745, 0x1755, 0x13c8,
-+      0x13c8, 0x13c8, 0x13c8, 0x1767, 0x2100, 0xa08a, 0x0040, 0x1a04,
-+      0x13c8, 0x0002, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x1a7f,
-+      0x1a85, 0x13c8, 0x13c8, 0x13c8, 0x1a89, 0x1ac9, 0x13c8, 0x13c8,
-+      0x13c8, 0x13c8, 0x1403, 0x146b, 0x1482, 0x14d6, 0x192c, 0x13c8,
-+      0x13c8, 0x18fb, 0x13c8, 0x1acd, 0x1a71, 0x1a7b, 0x13c8, 0x13c8,
-+      0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+      0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+      0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+      0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8, 0x13c8,
-+      0x13c8, 0x13c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0028, 0x73ce,
-+      0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04, 0x13bd, 0x2061,
-+      0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x0005,
-+      0x70c3, 0x4001, 0x0c90, 0x70c3, 0x4006, 0x0c78, 0x2099, 0x0041,
-+      0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0c20, 0x70c4, 0x70c3,
-+      0x0004, 0x0807, 0x08f8, 0x08f0, 0x08e8, 0x08e0, 0x2091, 0x8000,
-+      0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020,
-+      0x70d3, 0x000a, 0x2001, 0x0004, 0x70d6, 0x2079, 0x0000, 0x781b,
-+      0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051,
-+      0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091,
-+      0x4080, 0x0804, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018,
-+      0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0,
-+      0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e,
-+      0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0904, 0x13ba, 0xa182,
-+      0x0040, 0x1210, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x7007,
-+      0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002,
-+      0xa084, 0x01e0, 0x0120, 0x70c3, 0x4002, 0x0804, 0x13bd, 0x24a8,
-+      0x53a5, 0x0c10, 0x0804, 0x13ba, 0x2029, 0x0000, 0x2520, 0x71d0,
-+      0x72c8, 0x73cc, 0x70c4, 0x2098, 0x20a1, 0x0030, 0x7003, 0x0000,
-+      0x7007, 0x0006, 0x731a, 0x721e, 0x7422, 0x7526, 0x2021, 0x0040,
-+      0x7007, 0x0006, 0x81ff, 0x0904, 0x13ba, 0xa182, 0x0040, 0x1210,
-+      0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007,
-+      0x0001, 0x7008, 0xd0fc, 0x0de8, 0xa084, 0x01e0, 0x0d48, 0x70c3,
-+      0x4002, 0x0804, 0x13bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0878,
-+      0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x1108, 0x200a, 0x72ca,
-+      0x0804, 0x13b9, 0x70c7, 0x000a, 0x70cb, 0x0004, 0x70cf, 0x0020,
-+      0x0804, 0x13ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0018, 0x2029,
-+      0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca,
-+      0x73ce, 0x74d2, 0xa005, 0x05e8, 0xa40a, 0x0108, 0x1240, 0x8001,
-+      0x7872, 0xa084, 0xfc00, 0x0138, 0x78ac, 0xc085, 0x78ae, 0x2001,
-+      0x4005, 0x0804, 0x13bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76,
-+      0xa48c, 0xff00, 0x0170, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c,
-+      0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000,
-+      0x0050, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1,
-+      0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605,
-+      0x0118, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, 0x78ae,
-+      0x0018, 0x78ac, 0xc085, 0x78ae, 0x0804, 0x13ba, 0x75d8, 0x76dc,
-+      0x75da, 0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8,
-+      0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0500,
-+      0xa40a, 0x0110, 0x1a04, 0x13bc, 0x8001, 0x7892, 0xa084, 0xfc00,
-+      0x0138, 0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0804, 0x13bc,
-+      0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0118, 0x7a10,
-+      0xc2c5, 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0018,
-+      0x78ac, 0xc0c5, 0x78ae, 0x0804, 0x13ba, 0x2009, 0x0000, 0x786c,
-+      0xa065, 0x0118, 0x8108, 0x6000, 0x0cd8, 0x7ac4, 0x0804, 0x13b8,
-+      0x2009, 0x4648, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904,
-+      0x13b9, 0x2011, 0x4688, 0x2214, 0x0804, 0x13b8, 0x2009, 0x4649,
-+      0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011,
-+      0x4689, 0x2214, 0x0804, 0x13b8, 0x2061, 0x4640, 0x6128, 0x622c,
-+      0x8214, 0x8214, 0x8214, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1148,
-+      0x2061, 0x4680, 0x6328, 0x73da, 0x632c, 0x831c, 0x831c, 0x831c,
-+      0x73de, 0x0804, 0x13b8, 0x2009, 0x464c, 0x210c, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, 0x468c, 0x2214, 0x0804,
-+      0x13b8, 0x7918, 0x0804, 0x13b9, 0x2009, 0x0202, 0x210c, 0x2001,
-+      0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x2011, 0x0102, 0x2214,
-+      0x0804, 0x13b8, 0x2009, 0x464d, 0x210c, 0x2001, 0x01ff, 0x2004,
-+      0xd0fc, 0x1904, 0x13b9, 0x2011, 0x468d, 0x2214, 0x0804, 0x13b8,
-+      0x7920, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9, 0x7a24,
-+      0x0804, 0x13b8, 0x2011, 0x4b40, 0x71c4, 0xd1fc, 0x1110, 0x2011,
-+      0x4ac0, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268,
-+      0x6a00, 0x6b08, 0x6c1c, 0x74da, 0x0804, 0x13b7, 0x77c4, 0x080c,
-+      0x1b7b, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+      0x0804, 0x13b7, 0x2061, 0x4640, 0x6118, 0x2001, 0x01ff, 0x2004,
-+      0xd0fc, 0x1904, 0x13b9, 0x2061, 0x4680, 0x6218, 0x0804, 0x13b8,
-+      0x77c4, 0x080c, 0x1b7b, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10,
-+      0x77da, 0x2091, 0x8001, 0x0804, 0x13b7, 0x71c4, 0x2110, 0xa294,
-+      0x000f, 0xa282, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x238b, 0xa384,
-+      0x4000, 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x71c4, 0x2100,
-+      0xc0bc, 0xa082, 0x0010, 0x1a04, 0x13b3, 0xd1bc, 0x1120, 0x2011,
-+      0x4648, 0x2204, 0x0020, 0x2011, 0x4688, 0x2204, 0xc0bd, 0x0006,
-+      0x2100, 0xc0bc, 0x2012, 0x080c, 0x2331, 0x001e, 0x0804, 0x13b9,
-+      0x71c4, 0x2021, 0x4649, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0030,
-+      0x71c8, 0x2021, 0x4689, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1614,
-+      0x20a9, 0x0008, 0x2204, 0xa106, 0x0138, 0x8210, 0x1f04, 0x15fa,
-+      0x71c4, 0x72c8, 0x0804, 0x13b2, 0xa292, 0x1614, 0x0026, 0x2122,
-+      0x001e, 0x080c, 0x2343, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1110,
-+      0xd3fc, 0x09f0, 0x0804, 0x13ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee,
-+      0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0x4640, 0x6128, 0x622c,
-+      0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003,
-+      0x8003, 0x602e, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11a0, 0x0026,
-+      0x0016, 0x2061, 0x4680, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214,
-+      0x70d8, 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da,
-+      0x72de, 0x001e, 0x002e, 0x0804, 0x13b8, 0x2061, 0x4640, 0x6130,
-+      0x70c4, 0x6032, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9,
-+      0x2061, 0x4680, 0x6230, 0x70c8, 0x6032, 0x0804, 0x13b8, 0x7918,
-+      0x0804, 0x13b9, 0x71c4, 0xa184, 0xf0cf, 0x0148, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x1904, 0x13b3, 0x72c8, 0x0804, 0x13b2, 0x0006,
-+      0x2019, 0x0000, 0x080c, 0x237f, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+      0x0118, 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa184, 0xf0cf, 0x0128,
-+      0x0006, 0x2110, 0x71c4, 0x0804, 0x13b2, 0x0006, 0xc3fd, 0x080c,
-+      0x237f, 0x002e, 0x001e, 0x0804, 0x13b8, 0x71c4, 0xa182, 0x0010,
-+      0x0248, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b3, 0x72c8,
-+      0x0804, 0x13b2, 0x2011, 0x464d, 0x2204, 0x0006, 0x8104, 0x1208,
-+      0x8108, 0x2112, 0x2019, 0x0000, 0x080c, 0x236c, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x0118, 0x001e, 0x0804, 0x13b9, 0x71c8, 0xa182,
-+      0x0010, 0x0228, 0x0006, 0x2110, 0x71c4, 0x0804, 0x13b2, 0x2011,
-+      0x468d, 0x2204, 0x0006, 0x8104, 0x1208, 0x8108, 0x2112, 0xc3fd,
-+      0x080c, 0x236c, 0x002e, 0x001e, 0x0804, 0x13b8, 0x71c4, 0x72c8,
-+      0xa184, 0xfffd, 0x1904, 0x13b2, 0xa284, 0xfffd, 0x1904, 0x13b2,
-+      0x2100, 0x7920, 0x7822, 0x2200, 0x7a24, 0x7826, 0x0804, 0x13b8,
-+      0x2011, 0x4b40, 0x71c4, 0xd1fc, 0x1110, 0x2011, 0x4ac0, 0x8107,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, 0x72c8, 0x73cc,
-+      0x74d8, 0x71c6, 0x6800, 0x70ca, 0x73ce, 0x74da, 0x2091, 0x8000,
-+      0x6a02, 0xd2ac, 0x1118, 0x2021, 0x0000, 0x0090, 0xa484, 0x00ff,
-+      0xa082, 0x0002, 0x1a04, 0x1741, 0x843f, 0xa7bc, 0x00ff, 0x0140,
-+      0xa786, 0x0002, 0x1904, 0x1741, 0xa484, 0x00ff, 0x0904, 0x1741,
-+      0x2061, 0x0200, 0xd1fc, 0x0110, 0x2061, 0x0100, 0x2029, 0x0009,
-+      0x2031, 0x0062, 0x843f, 0xa7bc, 0x00ff, 0x0130, 0x8307, 0xa084,
-+      0x00ff, 0x1110, 0xa73d, 0x1138, 0x2041, 0x0019, 0xa384, 0x00ff,
-+      0xa082, 0x001a, 0x0210, 0xa4a4, 0x00ff, 0x8307, 0xa084, 0x00ff,
-+      0x0188, 0xa842, 0x02f0, 0xa086, 0x0010, 0x1120, 0xa39c, 0x00ff,
-+      0xa39d, 0x0f00, 0xa3bc, 0x00ff, 0x2500, 0xa702, 0x0290, 0x2600,
-+      0xa702, 0x1278, 0x2039, 0x003a, 0x6804, 0xa705, 0x6806, 0x6b0a,
-+      0x6b0c, 0x73ce, 0x681c, 0x70da, 0x6c1e, 0x2091, 0x8001, 0x0804,
-+      0x13ba, 0x2091, 0x8001, 0x0804, 0x13b4, 0x77c4, 0x080c, 0x1b7b,
-+      0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816,
-+      0x70cc, 0x681e, 0x2708, 0x0804, 0x13b7, 0x70c4, 0x2061, 0x4640,
-+      0x6118, 0x601a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b9,
-+      0x70c8, 0x2061, 0x4680, 0x6218, 0x601a, 0x0804, 0x13b8, 0x71c4,
-+      0x72c8, 0x73cc, 0xa182, 0x0010, 0x1a04, 0x13b3, 0x080c, 0x23af,
-+      0xa384, 0x4000, 0x0110, 0xa295, 0x0020, 0x0804, 0x13b7, 0x77c4,
-+      0x080c, 0x1b7b, 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091,
-+      0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4, 0x080c, 0x1b7b, 0x2091,
-+      0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0110,
-+      0x080c, 0x22ae, 0x2091, 0x8001, 0x2708, 0x0804, 0x13b8, 0x77c4,
-+      0x080c, 0x1b7b, 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, 0x6804,
-+      0xa005, 0x0110, 0x080c, 0x22ae, 0x2091, 0x8001, 0x2708, 0x0804,
-+      0x13b8, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020,
-+      0x2091, 0x8000, 0x080c, 0x1b93, 0x2091, 0x8001, 0x2708, 0x6a08,
-+      0x0804, 0x13b8, 0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1b0a, 0x0138,
-+      0x0804, 0x13bc, 0x080c, 0x1aff, 0x0110, 0x0804, 0x13bc, 0x73c8,
-+      0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x080c, 0x1c0b, 0x11e8, 0x6818,
-+      0xa005, 0x01a0, 0x2708, 0x0076, 0x080c, 0x23ce, 0x007e, 0x1170,
-+      0x2001, 0x0015, 0xd7fc, 0x1118, 0x2061, 0x4640, 0x0018, 0xc0fd,
-+      0x2061, 0x4680, 0x782a, 0x2091, 0x8001, 0x0005, 0x2091, 0x8001,
-+      0x2001, 0x4005, 0x0804, 0x13bc, 0x2091, 0x8001, 0x0804, 0x13ba,
-+      0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1b0a, 0x0138, 0x0804, 0x13bc,
-+      0x080c, 0x1aff, 0x0110, 0x0804, 0x13bc, 0x77c6, 0x2041, 0x0021,
-+      0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1b93,
-+      0x2009, 0x0016, 0xd7fc, 0x1118, 0x2061, 0x4640, 0x0018, 0x2061,
-+      0x4680, 0xc1fd, 0x6063, 0x0003, 0x607b, 0x0000, 0x6772, 0x607f,
-+      0x000f, 0x792a, 0x61d0, 0xc1c4, 0x61d2, 0x080c, 0x22ae, 0x2091,
-+      0x8001, 0x0005, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xd7fc, 0x0128,
-+      0x080c, 0x1b0a, 0x0138, 0x0804, 0x13bc, 0x080c, 0x1aff, 0x0110,
-+      0x0804, 0x13bc, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2009, 0x0017,
-+      0xd7fc, 0x1118, 0x2061, 0x4640, 0x0018, 0x2061, 0x4680, 0xc1fd,
-+      0x607b, 0x0000, 0x6063, 0x0002, 0x6772, 0x607f, 0x000f, 0x792a,
-+      0x61d0, 0xc1c4, 0x61d2, 0x080c, 0x22ae, 0x2091, 0x8001, 0x2041,
-+      0x0021, 0x2049, 0x0005, 0x2051, 0x0030, 0x2091, 0x8000, 0x70c8,
-+      0xa005, 0x0118, 0x60d0, 0xc0fd, 0x60d2, 0x080c, 0x1b93, 0x70c8,
-+      0x6836, 0x8738, 0xa784, 0x001f, 0x1dc0, 0x2091, 0x8001, 0x0005,
-+      0x2019, 0x0000, 0x72c8, 0xd284, 0x0128, 0x080c, 0x1b0a, 0x0138,
-+      0x0804, 0x13bc, 0x080c, 0x1aff, 0x0110, 0x0804, 0x13bc, 0x72c8,
-+      0x72ca, 0x78ac, 0xa084, 0x0003, 0x1508, 0x2039, 0x0000, 0xd284,
-+      0x0108, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
-+      0x080c, 0x1b7b, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a,
-+      0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x1d90, 0xa7bc, 0xff00,
-+      0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d50, 0x2091, 0x8000,
-+      0x72c8, 0x2069, 0x0100, 0xd284, 0x1110, 0x2069, 0x0200, 0x6808,
-+      0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x01b0, 0x684b, 0x0004,
-+      0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x18b2, 0x684b,
-+      0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04, 0x18bb,
-+      0x20a9, 0x00fa, 0x1f04, 0x18c2, 0x2079, 0x4600, 0x2009, 0x0018,
-+      0x72c8, 0xd284, 0x1118, 0x2061, 0x4640, 0x0018, 0x2061, 0x4680,
-+      0xc1fd, 0x607b, 0x0000, 0x792a, 0x6063, 0x0001, 0x607f, 0x000f,
-+      0x60a3, 0x0000, 0x60a4, 0x60ae, 0x60b2, 0x60d0, 0xd0b4, 0x0160,
-+      0xc0b4, 0x60d2, 0x00c6, 0x60b4, 0xa065, 0x6008, 0xc0d4, 0x600a,
-+      0x6018, 0x8001, 0x601a, 0x00ce, 0x60d0, 0xa084, 0x7eff, 0x60d2,
-+      0x78ac, 0xc08d, 0x78ae, 0x83ff, 0x0108, 0x0005, 0x681b, 0x0054,
-+      0x2091, 0x8001, 0x0005, 0x73cc, 0x080c, 0x186a, 0x69ec, 0x6a48,
-+      0xa185, 0x1800, 0x684a, 0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021,
-+      0x0004, 0x20a9, 0x09ff, 0x1f04, 0x190b, 0x8421, 0x1dd0, 0x8319,
-+      0x1db0, 0x69ee, 0x6a4a, 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118,
-+      0x2069, 0x4640, 0x0010, 0x2069, 0x4680, 0x71c4, 0x71c6, 0x6916,
-+      0x81ff, 0x1110, 0x68a3, 0x0001, 0x78ac, 0xc08c, 0x78ae, 0xd084,
-+      0x1110, 0x080c, 0x1c5b, 0x0005, 0x75d8, 0x74dc, 0x75da, 0x74de,
-+      0x0010, 0xa02e, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca,
-+      0x72ce, 0x2079, 0x4600, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x080c,
-+      0x1b58, 0x0904, 0x1a3d, 0x20a9, 0x0005, 0x20a1, 0x4614, 0x2091,
-+      0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x080c, 0x1d24,
-+      0x0120, 0x080c, 0x1b60, 0x0804, 0x1a3d, 0x6004, 0xa08c, 0x00ff,
-+      0xa18e, 0x0009, 0x1120, 0x0006, 0x080c, 0x205f, 0x000e, 0xa084,
-+      0xff00, 0x8007, 0x8009, 0x0904, 0x19e1, 0x00c6, 0x2c68, 0x080c,
-+      0x1b58, 0x05a8, 0x2c00, 0x689e, 0x8109, 0x1dc0, 0x609f, 0x0000,
-+      0x00ce, 0x00c6, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040,
-+      0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda,
-+      0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0904, 0x19e0, 0x2009,
-+      0x0040, 0x080c, 0x1d24, 0x15a0, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0002, 0x1168, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x1120,
-+      0x0016, 0x080c, 0x205c, 0x001e, 0x2d00, 0x6002, 0x0898, 0x00ce,
-+      0x00c6, 0x609c, 0x080c, 0x1bd4, 0x00ce, 0x609f, 0x0000, 0x080c,
-+      0x1a41, 0x2009, 0x0018, 0x6008, 0xc0cd, 0x600a, 0x6004, 0x6086,
-+      0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
-+      0x080c, 0x1b15, 0x000e, 0x7812, 0x080c, 0x1b60, 0x0804, 0x1a3d,
-+      0x00ce, 0x00c6, 0x609c, 0x080c, 0x1bd4, 0x00ce, 0x609f, 0x0000,
-+      0x080c, 0x1a41, 0x2009, 0x0018, 0x6087, 0x0103, 0x601b, 0x0003,
-+      0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff, 0x0110, 0xc0c5, 0x7812,
-+      0x080c, 0x1b15, 0x000e, 0x7812, 0x080c, 0x1b60, 0x0804, 0x1a3d,
-+      0x00ce, 0x6114, 0xd1fc, 0x0120, 0x080c, 0x1b0a, 0x01f0, 0x0018,
-+      0x080c, 0x1aff, 0x01d0, 0x080c, 0x1a41, 0x2009, 0x0018, 0x6087,
-+      0x0103, 0x601b, 0x0021, 0x7810, 0x0006, 0x84ff, 0x1110, 0x85ff,
-+      0x0110, 0xc0c5, 0x7812, 0x080c, 0x1b15, 0x000e, 0x7812, 0x080c,
-+      0x1b60, 0x2001, 0x4007, 0x0804, 0x13bc, 0x74c4, 0x73c8, 0x72cc,
-+      0x6014, 0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, 0xd0fc, 0x1118,
-+      0x2071, 0x4640, 0x0018, 0x2071, 0x4680, 0xc1fd, 0x792a, 0x7063,
-+      0x0005, 0x71d0, 0xc1c4, 0x71d2, 0x7366, 0x726a, 0x746e, 0x7072,
-+      0x7077, 0x0000, 0x2c00, 0x707a, 0xa02e, 0x2530, 0x611c, 0xa184,
-+      0x0060, 0x0110, 0x080c, 0x3fc1, 0x00ee, 0x6596, 0x65a6, 0x669a,
-+      0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000,
-+      0x080c, 0x22ae, 0x2091, 0x8001, 0x0005, 0x70c3, 0x4005, 0x0804,
-+      0x13bd, 0x20a9, 0x0005, 0x2099, 0x4614, 0x2091, 0x8000, 0x530a,
-+      0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000,
-+      0xa5a9, 0x0000, 0x0005, 0x71c4, 0x70c7, 0x0000, 0x791e, 0x0804,
-+      0x13ba, 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, 0x1000, 0x690c,
-+      0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x1dd8, 0xa285, 0x0000,
-+      0x1118, 0x70c3, 0x4000, 0x0010, 0x70c3, 0x4003, 0x70ca, 0x0804,
-+      0x13bd, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x1a04, 0x13b3,
-+      0x7966, 0x0804, 0x13ba, 0x7964, 0x71c6, 0x0804, 0x13ba, 0x7900,
-+      0x71c6, 0x71c4, 0x7902, 0x0804, 0x13ba, 0x7900, 0x71c6, 0x0804,
-+      0x13ba, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0160, 0x810c,
-+      0x0230, 0x8210, 0x810c, 0x810c, 0x0210, 0x8210, 0x810c, 0x81ff,
-+      0x1904, 0x13b4, 0x8210, 0x7a0e, 0xd28c, 0x0538, 0x7910, 0xc1cd,
-+      0x7912, 0x2009, 0x0021, 0x2019, 0x0003, 0xd284, 0x01c0, 0x8108,
-+      0x2019, 0x0041, 0x2011, 0x8e4e, 0x2312, 0x2019, 0x0042, 0x8210,
-+      0x2312, 0x2019, 0x0043, 0x8210, 0x2312, 0x2019, 0x0046, 0x8210,
-+      0x2312, 0x2019, 0x0047, 0x8210, 0x2312, 0x2019, 0x0006, 0x2011,
-+      0x8e53, 0x2112, 0x2011, 0x8e73, 0x2312, 0x7904, 0x7806, 0x0804,
-+      0x13b9, 0x7804, 0x70c6, 0x0804, 0x13ba, 0x71c4, 0xd1fc, 0x1118,
-+      0x2011, 0x4ac0, 0x0010, 0x2011, 0x4b40, 0x8107, 0xa084, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa268, 0x2011, 0x0000, 0x6814, 0xd0fc,
-+      0x0110, 0xa295, 0x0200, 0xd0b4, 0x0110, 0xa295, 0x0001, 0x6b0c,
-+      0x6800, 0x70da, 0x0804, 0x13b7, 0x7814, 0xd0f4, 0x0130, 0x2001,
-+      0x4007, 0x70db, 0x0000, 0xa005, 0x0048, 0xd0fc, 0x0130, 0x2001,
-+      0x4007, 0x70db, 0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x7814,
-+      0xd0f4, 0x0130, 0x2001, 0x4007, 0x70db, 0x0000, 0xa005, 0x0008,
-+      0xa006, 0x0005, 0x7814, 0xd0fc, 0x0130, 0x2001, 0x4007, 0x70db,
-+      0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x7112, 0x721a, 0x731e,
-+      0x7810, 0xd0c4, 0x0110, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108,
-+      0x810c, 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084,
-+      0x20a2, 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0140,
-+      0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018,
-+      0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211,
-+      0x7d10, 0xd5c4, 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008,
-+      0xd0fc, 0x0de8, 0x7003, 0x0001, 0x7007, 0x0006, 0x711a, 0x721e,
-+      0x7d10, 0xd5c4, 0x0110, 0x7322, 0x7426, 0xa084, 0x01e0, 0x0005,
-+      0x7848, 0xa065, 0x0120, 0x2c04, 0x784a, 0x2063, 0x0000, 0x0005,
-+      0x00f6, 0x2079, 0x4600, 0x7848, 0x2062, 0x2c00, 0xa005, 0x1110,
-+      0x080c, 0x254c, 0x784a, 0x00fe, 0x0005, 0x2011, 0x9000, 0x7a4a,
-+      0x7bc4, 0x8319, 0x0128, 0xa280, 0x0032, 0x2012, 0x2010, 0x0cc8,
-+      0x2013, 0x0000, 0x0005, 0x0016, 0x0026, 0xd7fc, 0x1118, 0x2011,
-+      0x4bc0, 0x0010, 0x2011, 0x6bc0, 0xa784, 0x0f00, 0x800b, 0xa784,
-+      0x001f, 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa268,
-+      0x002e, 0x001e, 0x0005, 0x0c39, 0x2900, 0x682a, 0x2a00, 0x682e,
-+      0x6808, 0xa084, 0xf9ef, 0xa80d, 0x690a, 0x00e6, 0xd7fc, 0x1128,
-+      0x2009, 0x4652, 0x2071, 0x4640, 0x0020, 0x2009, 0x4692, 0x2071,
-+      0x4680, 0x210c, 0x6804, 0xa005, 0x0148, 0xa116, 0x1138, 0x2060,
-+      0x6000, 0x6806, 0x0016, 0x200b, 0x0000, 0x0018, 0x2009, 0x0000,
-+      0x0016, 0x6804, 0xa065, 0x0178, 0x6000, 0x6806, 0x0421, 0x080c,
-+      0x1d95, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x6812, 0x1d88,
-+      0x7910, 0xc1a5, 0x7912, 0x001e, 0x6902, 0x6906, 0x2d00, 0x2060,
-+      0x080c, 0x2693, 0x00ee, 0x0005, 0xa065, 0x0160, 0x2008, 0x609c,
-+      0xa005, 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x7848,
-+      0x794a, 0x2062, 0x0005, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9,
-+      0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+      0x601a, 0x682c, 0x6022, 0x0005, 0x00e6, 0xd7fc, 0x1128, 0x2071,
-+      0x4640, 0x2031, 0x46c0, 0x0020, 0x2071, 0x4680, 0x2031, 0x48c0,
-+      0x704c, 0xa08c, 0x0200, 0x1128, 0xa608, 0x2d0a, 0x8000, 0x704e,
-+      0xa006, 0x00ee, 0x0005, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0x4640,
-+      0x0010, 0x2079, 0x4680, 0x080c, 0x1b7b, 0x2091, 0x8000, 0x6804,
-+      0x780a, 0xa065, 0x05f0, 0x0030, 0x2c00, 0x780a, 0x2060, 0x6000,
-+      0xa065, 0x05b8, 0x6010, 0xa306, 0x1db8, 0x600c, 0xa206, 0x1da0,
-+      0x2c28, 0x7848, 0xac06, 0x1108, 0x0448, 0x6804, 0xac06, 0x1140,
-+      0x6000, 0x2060, 0x6806, 0xa005, 0x1118, 0x6803, 0x0000, 0x0048,
-+      0x6400, 0x7808, 0x2060, 0x6402, 0xa486, 0x0000, 0x1110, 0x2c00,
-+      0x6802, 0x2560, 0x080c, 0x1be3, 0x601b, 0x0005, 0x6023, 0x0020,
-+      0x00fe, 0x080c, 0x1d95, 0x00f6, 0x7908, 0x8109, 0x790a, 0x6810,
-+      0x8001, 0x6812, 0x1118, 0x7810, 0xc0a5, 0x7812, 0x2001, 0xffff,
-+      0xa005, 0x00fe, 0x0005, 0x0076, 0x2700, 0x2039, 0x0000, 0xd0fc,
-+      0x0108, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
-+      0x2091, 0x8000, 0x080c, 0x1b93, 0x8738, 0xa784, 0x001f, 0x1dd0,
-+      0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d90,
-+      0x2091, 0x8001, 0x007e, 0x0005, 0x786c, 0x2009, 0x8e74, 0x210c,
-+      0xa10d, 0x0118, 0xa065, 0x0804, 0x207a, 0x2061, 0x0000, 0x6018,
-+      0xd084, 0x11b8, 0x7810, 0xd08c, 0x0130, 0xc08c, 0x7812, 0xc7fc,
-+      0x2069, 0x4640, 0x0028, 0xc08d, 0x7812, 0x2069, 0x4680, 0xc7fd,
-+      0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, 0xa005,
-+      0x1108, 0x0005, 0xa08c, 0xfff0, 0x0110, 0x080c, 0x254c, 0x0002,
-+      0x1cb8, 0x1cbb, 0x1cc1, 0x1cc5, 0x1cb9, 0x1cc9, 0x1cb9, 0x1cb9,
-+      0x1cb9, 0x1ccf, 0x1cfb, 0x1cfe, 0x1d03, 0x1d0c, 0x1cb9, 0x1cb9,
-+      0x0005, 0x080c, 0x254c, 0x080c, 0x1c5b, 0x2001, 0x8001, 0x0804,
-+      0x1d15, 0x2001, 0x8003, 0x0804, 0x1d15, 0x2001, 0x8004, 0x0804,
-+      0x1d15, 0x080c, 0x1c5b, 0x2001, 0x8006, 0x0804, 0x1d15, 0x2091,
-+      0x8000, 0x0076, 0xd7fc, 0x1128, 0x2069, 0x4640, 0x2039, 0x0009,
-+      0x0020, 0x2069, 0x4680, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000,
-+      0x0128, 0x000e, 0x6f1e, 0x2091, 0x8001, 0x0005, 0x6870, 0x007e,
-+      0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010,
-+      0x080c, 0x1b93, 0x8738, 0xa784, 0x001f, 0x1dd0, 0x2091, 0x8001,
-+      0x2001, 0x800a, 0x00d0, 0x2001, 0x800c, 0x00b8, 0x080c, 0x1c5b,
-+      0x2001, 0x800d, 0x0090, 0xd7fc, 0x0110, 0x78e4, 0x0008, 0x78e0,
-+      0x70c6, 0x2001, 0x800e, 0x0048, 0xd7fc, 0x0110, 0x78ec, 0x0008,
-+      0x78e8, 0x70c6, 0x2001, 0x800f, 0x0000, 0x70c2, 0xd7fc, 0x1118,
-+      0x70db, 0x0000, 0x0010, 0x70db, 0x0001, 0x2061, 0x0000, 0x601b,
-+      0x0001, 0x2091, 0x4080, 0x0005, 0xac80, 0x0001, 0x81ff, 0x0518,
-+      0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x07ff, 0x0100, 0x7018,
-+      0x0006, 0x701c, 0x0006, 0x7020, 0x0006, 0x7024, 0x0006, 0x7112,
-+      0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007,
-+      0x0001, 0x7008, 0x800b, 0x1ee8, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+      0x1110, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x000e,
-+      0x7026, 0x000e, 0x7022, 0x000e, 0x701e, 0x000e, 0x701a, 0x0005,
-+      0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x681f, 0x0201,
-+      0x6803, 0xfd20, 0x6807, 0x0038, 0x6a1a, 0x2d00, 0xa0e8, 0x0008,
-+      0xa290, 0x0004, 0x8109, 0x1d80, 0x0005, 0x70ec, 0xd0dc, 0x1520,
-+      0x2029, 0x0001, 0x7814, 0xd0cc, 0x1160, 0x70ec, 0xd0e4, 0x2019,
-+      0x0c0a, 0x2021, 0x000a, 0x1120, 0x2019, 0x0c0c, 0x2021, 0x000c,
-+      0x0070, 0x70ec, 0xd0e4, 0x1128, 0x2019, 0x180c, 0x2021, 0x000c,
-+      0x0030, 0x2019, 0x1809, 0x2021, 0x0009, 0xa5ad, 0x0200, 0x6b0a,
-+      0x6c0e, 0x6d1e, 0x6807, 0x0038, 0x0005, 0x6004, 0x6086, 0x2c08,
-+      0x2063, 0x0000, 0x7868, 0xa005, 0x796a, 0x0110, 0x2c02, 0x0008,
-+      0x796e, 0x0005, 0x00c6, 0x2061, 0x4600, 0x6887, 0x0103, 0x2d08,
-+      0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008,
-+      0x616e, 0x00ce, 0x0005, 0x2091, 0x8000, 0x2c04, 0x786e, 0xa005,
-+      0x1108, 0x786a, 0x2091, 0x8001, 0x609c, 0xa005, 0x0188, 0x00c6,
-+      0x2060, 0x2008, 0x609c, 0xa005, 0x0138, 0x2062, 0x609f, 0x0000,
-+      0xa065, 0x609c, 0xa005, 0x1dc8, 0x7848, 0x794a, 0x2062, 0x00ce,
-+      0x7848, 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x1110, 0x080c,
-+      0x254c, 0x784a, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086,
-+      0x818e, 0x1208, 0xa200, 0x1f04, 0x1ddf, 0x8086, 0x818e, 0x0005,
-+      0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213,
-+      0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x1def, 0x0028, 0xa11a,
-+      0x2308, 0x8210, 0x1f04, 0x1def, 0x0006, 0x3200, 0xa084, 0xefff,
-+      0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000,
-+      0x0cb8, 0x7d74, 0x70d0, 0xa506, 0x0904, 0x1ebd, 0x7810, 0x2050,
-+      0x080c, 0x1b58, 0x0904, 0x1ebd, 0xa046, 0x7970, 0x2500, 0x8000,
-+      0xa112, 0x2009, 0x0040, 0x1208, 0x0030, 0x72d0, 0xa206, 0x0118,
-+      0x8840, 0x2009, 0x0080, 0x00c6, 0x7112, 0x7007, 0x0001, 0x2099,
-+      0x0030, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000,
-+      0x88ff, 0x0110, 0x080c, 0x1b58, 0x7008, 0xd0fc, 0x0de8, 0x7007,
-+      0x0002, 0x2091, 0x8001, 0xa08c, 0x01e0, 0x1538, 0x53a5, 0x8cff,
-+      0x1120, 0x88ff, 0x0904, 0x1eaa, 0x0050, 0x2c00, 0x788e, 0x20a9,
-+      0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0804, 0x1eaa, 0xa046,
-+      0x7218, 0x731c, 0xdac4, 0x0110, 0x7420, 0x7524, 0xa292, 0x0040,
-+      0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e,
-+      0xdac4, 0x0118, 0x7422, 0x7526, 0xa006, 0x7007, 0x0004, 0x0904,
-+      0x1eaa, 0x8cff, 0x0110, 0x080c, 0x1b60, 0x00ce, 0x080c, 0x1b60,
-+      0xa046, 0x7888, 0x8000, 0x788a, 0xa086, 0x0002, 0x01c0, 0x7a7c,
-+      0x7b78, 0xdac4, 0x0110, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004,
-+      0x8004, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+      0x721a, 0x731e, 0xdac4, 0x0588, 0x7422, 0x7526, 0x0470, 0x6014,
-+      0xd0fc, 0x1118, 0x2069, 0x4640, 0x0010, 0x2069, 0x4680, 0x2091,
-+      0x8000, 0x681f, 0x0002, 0x88ff, 0x0120, 0xa046, 0x788c, 0x2060,
-+      0x0c70, 0x788b, 0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091,
-+      0x8001, 0x0098, 0x00ce, 0x788b, 0x0000, 0x080c, 0x2035, 0x6004,
-+      0xa084, 0x000f, 0x0059, 0x88ff, 0x0130, 0x788c, 0x2060, 0x6004,
-+      0xa084, 0x000f, 0x0019, 0x0804, 0x1e09, 0x0005, 0x0002, 0x1ecf,
-+      0x1eea, 0x1f03, 0x1ecf, 0x1f10, 0x1ee0, 0x1ecf, 0x1ecf, 0x1ecf,
-+      0x1ee8, 0x1f01, 0x1ecf, 0x1ecf, 0x1ecf, 0x1ecf, 0x1ecf, 0x2039,
-+      0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, 0x600a, 0x080c,
-+      0x1f4c, 0x609c, 0x78ba, 0x609f, 0x0000, 0x080c, 0x2021, 0x0005,
-+      0x78bc, 0xd0c4, 0x0108, 0x0c58, 0x601c, 0xc0bd, 0x601e, 0x0030,
-+      0x080c, 0x205f, 0x78bc, 0xd0c4, 0x0108, 0x0c08, 0x78bf, 0x0000,
-+      0x6004, 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0138, 0x080c,
-+      0x1f4c, 0x0120, 0x78bc, 0xc0c5, 0x78be, 0x0010, 0x0804, 0x1f67,
-+      0x0005, 0x080c, 0x205c, 0x78bc, 0xa08c, 0x0e00, 0x1110, 0xd0c4,
-+      0x1108, 0x0828, 0x080c, 0x1f4c, 0x1110, 0x0804, 0x1f67, 0x0005,
-+      0x78bc, 0xd0c4, 0x0110, 0x0804, 0x1ecf, 0x78bf, 0x0000, 0x6714,
-+      0x2011, 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0188,
-+      0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc,
-+      0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108,
-+      0x00c0, 0x080c, 0x1b7b, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000,
-+      0x682f, 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010,
-+      0x2091, 0x8001, 0x1f04, 0x1f34, 0x8211, 0x0118, 0x20a9, 0x0100,
-+      0x0c58, 0x080c, 0x1b60, 0x0005, 0x609f, 0x0000, 0x78b4, 0xa06d,
-+      0x2c00, 0x78b6, 0x1110, 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002,
-+      0x78b8, 0xad06, 0x1108, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1130,
-+      0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6,
-+      0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, 0x60a2,
-+      0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0110, 0x080c,
-+      0x3fc1, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x4680,
-+      0xd7fc, 0x1110, 0x2071, 0x4640, 0xa784, 0x0f00, 0x800b, 0xa784,
-+      0x001f, 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x71c0,
-+      0xa168, 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
-+      0x71c4, 0xa100, 0x60c2, 0x2091, 0x8000, 0x7814, 0xd0c4, 0x0138,
-+      0xd7fc, 0x1118, 0xd0f4, 0x1140, 0x0010, 0xd0fc, 0x1128, 0x6e08,
-+      0xd684, 0x01f0, 0xd9fc, 0x11e0, 0x2091, 0x8001, 0x080c, 0x1be3,
-+      0x2091, 0x8000, 0x080c, 0x1d95, 0x2091, 0x8001, 0x7814, 0xd0c4,
-+      0x0904, 0x201f, 0xd7fc, 0x1120, 0xd0f4, 0x1130, 0x0804, 0x201f,
-+      0xd0fc, 0x1110, 0x0804, 0x201f, 0x601b, 0x0021, 0x0804, 0x201f,
-+      0x6024, 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x6a10, 0x6814,
-+      0xa202, 0x0268, 0x0160, 0x2091, 0x8001, 0x2039, 0x0200, 0x609c,
-+      0x78ba, 0x609f, 0x0000, 0x080c, 0x2021, 0x0804, 0x201f, 0x2c08,
-+      0xd9fc, 0x01f0, 0x6800, 0xa065, 0x01d8, 0x6a04, 0x7000, 0xa084,
-+      0x0002, 0x0168, 0x7048, 0xa206, 0x1150, 0x6b04, 0x2160, 0x2304,
-+      0x6002, 0xa005, 0x1108, 0x6902, 0x2260, 0x6102, 0x0098, 0x2d00,
-+      0x2060, 0x080c, 0x2693, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0050,
-+      0x6800, 0x6902, 0xa065, 0x0110, 0x6102, 0x0008, 0x6906, 0x2160,
-+      0x6003, 0x0000, 0x2160, 0xd9fc, 0x0118, 0xa6b4, 0xfffc, 0x6e0a,
-+      0x6810, 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001,
-+      0xd6b4, 0x0128, 0xa6b6, 0x0040, 0x6e0a, 0x080c, 0x1bf4, 0x00ee,
-+      0x0005, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x080c, 0x1d95,
-+      0x2091, 0x8001, 0x78b8, 0xa065, 0x0128, 0x609c, 0x78ba, 0x609f,
-+      0x0000, 0x0c78, 0x78b6, 0x78ba, 0x0005, 0x7970, 0x7874, 0x2818,
-+      0xd384, 0x0118, 0x8000, 0xa112, 0x0220, 0x8000, 0xa112, 0x1278,
-+      0xc384, 0x7a7c, 0x721a, 0x7a78, 0x721e, 0xdac4, 0x0120, 0x7a84,
-+      0x7222, 0x7a80, 0x7226, 0xa006, 0xd384, 0x0108, 0x8000, 0x7876,
-+      0x70d2, 0x781c, 0xa005, 0x0138, 0x8001, 0x781e, 0x1120, 0x0e04,
-+      0x205b, 0x2091, 0x4080, 0x0005, 0x2039, 0x2071, 0x0010, 0x2039,
-+      0x2077, 0x2704, 0xa005, 0x0160, 0xac00, 0x2068, 0x6908, 0x6810,
-+      0x6912, 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, 0x8738, 0x0c88,
-+      0x0005, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015,
-+      0x001b, 0x0000, 0x2041, 0x0000, 0x780c, 0x0002, 0x2223, 0x21fe,
-+      0x2082, 0x20f2, 0x2039, 0x8e74, 0x2734, 0x7d10, 0x00c0, 0x6084,
-+      0xa086, 0x0103, 0x1904, 0x20dc, 0x6114, 0x6018, 0xa105, 0x0120,
-+      0x86ff, 0x11d8, 0x0804, 0x20dc, 0x8603, 0xa080, 0x8e55, 0x620c,
-+      0x2202, 0x8000, 0x6210, 0x2202, 0x080c, 0x1db3, 0x8630, 0xa68e,
-+      0x000f, 0x0904, 0x215d, 0x786c, 0xa065, 0x1d08, 0x7808, 0xa602,
-+      0x1220, 0xd5ac, 0x1110, 0x263a, 0x0005, 0xa682, 0x0003, 0x1a04,
-+      0x215d, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x11f8,
-+      0x2011, 0x8e55, 0x2204, 0x70c6, 0x8210, 0x2204, 0x70ca, 0xd684,
-+      0x1130, 0x8210, 0x2204, 0x70da, 0x8210, 0x2204, 0x70de, 0xa685,
-+      0x8020, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084,
-+      0xffcf, 0x7812, 0x2091, 0x8001, 0x203b, 0x0000, 0x0005, 0x7810,
-+      0xc0ad, 0x7812, 0x0804, 0x215d, 0x263a, 0x080c, 0x2229, 0x1904,
-+      0x2245, 0x786c, 0xa065, 0x1904, 0x2087, 0x2091, 0x8000, 0x7810,
-+      0xa084, 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, 0x2091, 0x8001,
-+      0x0804, 0x2245, 0x2039, 0x8e74, 0x2734, 0x7d10, 0x00a0, 0x6084,
-+      0xa086, 0x0103, 0x1904, 0x2147, 0x6114, 0x6018, 0xa105, 0x0120,
-+      0x86ff, 0x11b8, 0x0804, 0x2147, 0xa680, 0x8e55, 0x620c, 0x2202,
-+      0x080c, 0x1db3, 0x8630, 0xa68e, 0x001e, 0x0904, 0x215d, 0x786c,
-+      0xa065, 0x1d28, 0x7808, 0xa602, 0x1220, 0xd5ac, 0x1110, 0x263a,
-+      0x0005, 0xa682, 0x0006, 0x1a04, 0x215d, 0x2091, 0x8000, 0x2069,
-+      0x0000, 0x6818, 0xd084, 0x11f8, 0x2011, 0x8e55, 0x2009, 0x8e4e,
-+      0x26a8, 0x211c, 0x2204, 0x201a, 0x8108, 0x8210, 0x1f04, 0x2129,
-+      0xa685, 0x8030, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810,
-+      0xa084, 0xffcf, 0x7812, 0x2091, 0x8001, 0xa006, 0x2009, 0x8e75,
-+      0x200a, 0x203a, 0x0005, 0x7810, 0xc0ad, 0x7812, 0x00b0, 0x263a,
-+      0x080c, 0x2229, 0x1904, 0x2245, 0x786c, 0xa065, 0x1904, 0x20f7,
-+      0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0108, 0xc0ad,
-+      0x7812, 0x2091, 0x8001, 0x0804, 0x2245, 0x2091, 0x8000, 0x7007,
-+      0x0004, 0x7994, 0x70d4, 0xa102, 0x0228, 0x0168, 0x7b90, 0xa302,
-+      0x1150, 0x0010, 0x8002, 0x1138, 0x263a, 0x7810, 0xc0ad, 0x7812,
-+      0x2091, 0x8001, 0x0005, 0xa184, 0xff00, 0x0140, 0x810f, 0x810c,
-+      0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, 0x8004,
-+      0x8004, 0x7a9c, 0xa210, 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e,
-+      0xd4c4, 0x0130, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226,
-+      0x20a1, 0x0030, 0x7003, 0x0000, 0x2009, 0x8e54, 0x260a, 0x8109,
-+      0x2198, 0x2104, 0xd084, 0x0108, 0x8633, 0xa6b0, 0x0002, 0x26a8,
-+      0x53a6, 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000,
-+      0xa10a, 0x1208, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0140,
-+      0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018,
-+      0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211,
-+      0xd4c4, 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc,
-+      0x0de8, 0xa084, 0x01e0, 0x01d0, 0x7d10, 0x2031, 0x8e54, 0x2634,
-+      0x78a8, 0x8000, 0x78aa, 0xd08c, 0x1138, 0x7007, 0x0006, 0x7004,
-+      0xd094, 0x1de8, 0x0804, 0x215f, 0x2069, 0x4647, 0x206b, 0x0003,
-+      0x78ac, 0xa085, 0x0300, 0x78ae, 0xa006, 0x0048, 0x2030, 0x75d6,
-+      0x2091, 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091,
-+      0x8001, 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a,
-+      0x721e, 0xd5c4, 0x0110, 0x7322, 0x7426, 0x0005, 0x6084, 0xa086,
-+      0x0103, 0x11d8, 0x6114, 0x6018, 0xa105, 0x11b8, 0x2069, 0x0000,
-+      0x6818, 0xd084, 0x1190, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3,
-+      0x8020, 0x681b, 0x0001, 0x2091, 0x4080, 0x080c, 0x1db3, 0x0e04,
-+      0x221c, 0x786c, 0xa065, 0x1d10, 0x0005, 0x0059, 0x1530, 0x786c,
-+      0xa065, 0x19e0, 0x0410, 0x0029, 0x1500, 0x786c, 0xa065, 0x1dd8,
-+      0x00e0, 0x6084, 0xa086, 0x0103, 0x1168, 0x6018, 0xc0fc, 0x601a,
-+      0xa086, 0x0004, 0x1138, 0x7804, 0xd0a4, 0x0120, 0x080c, 0x1db3,
-+      0xa006, 0x0005, 0x0079, 0x1118, 0xa085, 0x0001, 0x0005, 0x00b9,
-+      0x1110, 0x2041, 0x0001, 0x7d10, 0x0005, 0x88ff, 0x0110, 0x2091,
-+      0x4080, 0x0005, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x1118, 0xa385,
-+      0x0000, 0x0005, 0x0210, 0xa302, 0x0005, 0x8002, 0x0005, 0xa184,
-+      0xff00, 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007,
-+      0xa100, 0x0018, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4,
-+      0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018,
-+      0x6028, 0xa005, 0x0110, 0x2009, 0x0040, 0x080c, 0x1b15, 0x01d0,
-+      0x78a8, 0x8000, 0x78aa, 0xd08c, 0x1510, 0x6014, 0xd0fc, 0x1118,
-+      0x2069, 0x4640, 0x0010, 0x2069, 0x4680, 0x2091, 0x8000, 0x681f,
-+      0x0003, 0x78ab, 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091,
-+      0x8001, 0x0068, 0x78ab, 0x0000, 0x080c, 0x1db3, 0x7990, 0x7894,
-+      0x8000, 0xa10a, 0x1208, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071,
-+      0x0010, 0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118, 0x2009, 0x4658,
-+      0x0010, 0x2009, 0x4698, 0x2091, 0x8000, 0x200a, 0x00f6, 0x2009,
-+      0x4680, 0x2079, 0x0100, 0xd7fc, 0x1120, 0x2009, 0x4640, 0x2079,
-+      0x0200, 0x2104, 0xa086, 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009,
-+      0x4645, 0x0010, 0x2009, 0x4685, 0x2104, 0xa005, 0x1130, 0x7830,
-+      0xa084, 0x00c0, 0x1110, 0x781b, 0x0052, 0x00fe, 0x0005, 0x2009,
-+      0x0002, 0x2069, 0x4600, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904,
-+      0x2324, 0x2071, 0x4680, 0x2079, 0x0100, 0x2021, 0x48bf, 0x784b,
-+      0x000f, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, 0x2019, 0x3e0f,
-+      0x0030, 0x20a1, 0x012b, 0x2019, 0x3e0f, 0xd184, 0x0110, 0x20a1,
-+      0x022b, 0x2304, 0xa005, 0x0140, 0x789a, 0x8318, 0x23ac, 0x8318,
-+      0x2398, 0x53a6, 0x3318, 0x0ca8, 0x789b, 0x0000, 0x789b, 0x0020,
-+      0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x2020, 0x1f04, 0x2302,
-+      0x7003, 0x0000, 0x0016, 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd,
-+      0x080c, 0x2443, 0x001e, 0x7020, 0xa084, 0x000f, 0xa085, 0x6300,
-+      0x7806, 0x780f, 0x9000, 0x7843, 0x00d8, 0x7853, 0x0090, 0x780b,
-+      0x2f08, 0x7452, 0x704f, 0x0000, 0x8109, 0x0140, 0x2071, 0x4640,
-+      0x2079, 0x0200, 0x2021, 0x46bf, 0x0804, 0x22df, 0x080c, 0x24fd,
-+      0x0005, 0x0016, 0x2011, 0x0101, 0xd1bc, 0x1110, 0x2011, 0x0201,
-+      0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x001e,
-+      0x080c, 0x2443, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, 0x2011,
-+      0x0201, 0x20a9, 0x0009, 0x810b, 0x1f04, 0x234b, 0xa18c, 0x0e00,
-+      0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x0005, 0x2019, 0x0002,
-+      0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x1f04, 0x235c, 0xa294,
-+      0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0118,
-+      0x2009, 0x0201, 0x0c78, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110,
-+      0x2011, 0x0201, 0x20a9, 0x000c, 0x810b, 0x1f04, 0x2374, 0xa18c,
-+      0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x0005, 0x2011,
-+      0x0102, 0xd3fc, 0x1110, 0x2011, 0x0202, 0x2204, 0xa084, 0xf0cf,
-+      0xa105, 0x2012, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc, 0x1110,
-+      0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a,
-+      0x62ac, 0x63ac, 0x00ce, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc,
-+      0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022,
-+      0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x00ce, 0x0005, 0x00c6,
-+      0x2061, 0x0100, 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103,
-+      0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, 0x0020, 0x0118,
-+      0xc2ac, 0xa39d, 0x4000, 0xc3ec, 0xd3b4, 0x1108, 0xc3ed, 0x62ae,
-+      0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, 0x0005, 0x2091, 0x8000,
-+      0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, 0x2427, 0xd1fc, 0x0118,
-+      0x2061, 0x8dd0, 0x0010, 0x2061, 0x8cc0, 0x080c, 0x242f, 0x0560,
-+      0x20a9, 0x0101, 0xd1fc, 0x0118, 0x2061, 0x8cd0, 0x0010, 0x2061,
-+      0x8bc0, 0x00c6, 0x080c, 0x242f, 0x0128, 0x00ce, 0x8c60, 0x1f04,
-+      0x23e9, 0x04a8, 0x000e, 0xd1fc, 0x0128, 0xa082, 0x8cd0, 0x2071,
-+      0x4680, 0x0020, 0xa082, 0x8bc0, 0x2071, 0x4640, 0x7076, 0x7172,
-+      0x2138, 0x2001, 0x0004, 0x7062, 0x707f, 0x000f, 0x71d0, 0xc1c4,
-+      0x71d2, 0x080c, 0x22a4, 0x00c0, 0xd1fc, 0x1118, 0x2071, 0x4640,
-+      0x0010, 0x2071, 0x4680, 0x6020, 0xc0dd, 0x6022, 0x7172, 0x2138,
-+      0x2c00, 0x707a, 0x2001, 0x0006, 0x7062, 0x707f, 0x000f, 0x71d0,
-+      0xc1c4, 0x71d2, 0x080c, 0x22a4, 0x2001, 0x0000, 0x0010, 0x2001,
-+      0x0001, 0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, 0x0005, 0x2c04,
-+      0xa005, 0x0170, 0x2060, 0x6010, 0xa306, 0x1140, 0x600c, 0xa206,
-+      0x1128, 0x6014, 0xa106, 0x1110, 0xa006, 0x0020, 0x6000, 0x0c80,
-+      0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, 0x2079, 0x4680,
-+      0x2071, 0x0100, 0xd1bc, 0x1120, 0x2079, 0x4640, 0x2071, 0x0200,
-+      0x7920, 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x1110, 0x001e, 0x0060,
-+      0x810b, 0x810b, 0x810b, 0x810b, 0x000e, 0xa18d, 0x0800, 0xd0bc,
-+      0x1110, 0xa18d, 0x0f00, 0x2104, 0x00ee, 0x00fe, 0x0005, 0x2001,
-+      0x4601, 0x2004, 0xd0ac, 0x1138, 0x68e4, 0xd0ac, 0x0120, 0xa084,
-+      0x0006, 0x1108, 0x0009, 0x0005, 0x6014, 0x00e6, 0x0036, 0x2018,
-+      0x2071, 0x4b40, 0xd0fc, 0x1110, 0x2071, 0x4ac0, 0x8007, 0xa084,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a,
-+      0x1904, 0x24fa, 0x7108, 0xa194, 0xff00, 0x0904, 0x24fa, 0xa18c,
-+      0x00ff, 0x701c, 0xa084, 0xff00, 0x01c0, 0x7004, 0xa085, 0x003a,
-+      0x7006, 0x2001, 0x0009, 0xa102, 0x16d8, 0x2001, 0x000a, 0xa102,
-+      0x16d0, 0x2001, 0x000c, 0xa102, 0x16c8, 0x701c, 0xa084, 0x00ff,
-+      0x701e, 0x7004, 0xa084, 0xffdf, 0x7006, 0x2001, 0x000a, 0xa106,
-+      0x01a8, 0x2001, 0x000c, 0xa106, 0x01a0, 0x2001, 0x0012, 0xa106,
-+      0x0198, 0x2001, 0x0014, 0xa106, 0x0190, 0x2001, 0x0019, 0xa106,
-+      0x0188, 0x2001, 0x0032, 0xa106, 0x0180, 0x00d8, 0x2009, 0x000c,
-+      0x00d0, 0x2009, 0x0012, 0x00b8, 0x2009, 0x0014, 0x00a0, 0x2009,
-+      0x0019, 0x0088, 0x2009, 0x0020, 0x0070, 0x2009, 0x003f, 0x0058,
-+      0x2009, 0x000a, 0x0040, 0x2009, 0x000c, 0x0028, 0x2009, 0x0019,
-+      0x0010, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x7004, 0xa085,
-+      0x000a, 0x7006, 0x2071, 0x4600, 0x7004, 0xd0bc, 0x0158, 0xd3fc,
-+      0x1120, 0x73ea, 0x2071, 0x4640, 0x0018, 0x73ee, 0x2071, 0x4680,
-+      0x701f, 0x000d, 0x003e, 0x00ee, 0x0005, 0x2001, 0x01ff, 0x2004,
-+      0xd0fc, 0x11d0, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x12a0,
-+      0x2071, 0x0200, 0x71ec, 0xa18c, 0x1c00, 0x810f, 0x810c, 0x810c,
-+      0x2079, 0x0100, 0x78ec, 0xa084, 0x1c00, 0x8007, 0x8004, 0x8004,
-+      0xa105, 0xa08a, 0x0007, 0x0208, 0x0005, 0x0002, 0x254b, 0x2532,
-+      0x254b, 0x2532, 0x2525, 0x253f, 0x2525, 0x7008, 0xa084, 0xc3ff,
-+      0xa085, 0x3000, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, 0x3000,
-+      0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff, 0xa085, 0x2000, 0x700a,
-+      0x7808, 0xa084, 0xc3ff, 0xa085, 0x2000, 0x780a, 0x0005, 0x7008,
-+      0xa084, 0xc3ff, 0xa085, 0x0c00, 0x700a, 0x7808, 0xa084, 0xc3ff,
-+      0xa085, 0x0c00, 0x780a, 0x0005, 0x0e04, 0x254c, 0x2091, 0x8000,
-+      0x2071, 0x0000, 0x0006, 0x7018, 0xd084, 0x1de8, 0x000e, 0x2071,
-+      0x0010, 0x70ca, 0x000e, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x0a04,
-+      0x70df, 0x0020, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x0cf8, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708a, 0x758e,
-+      0x7492, 0x7696, 0x779a, 0xa594, 0x003f, 0xd4f4, 0x0138, 0xd7bc,
-+      0x1128, 0xa784, 0x007d, 0x1904, 0x3c74, 0x0871, 0xa49c, 0x000f,
-+      0xa382, 0x0004, 0x0320, 0xa3a6, 0x0007, 0x1930, 0x2418, 0x8507,
-+      0xa084, 0x000f, 0x0002, 0x2b49, 0x2c34, 0x2c72, 0x2ed8, 0x3256,
-+      0x32ad, 0x3353, 0x33e2, 0x34b6, 0x3588, 0x259e, 0x259b, 0x2970,
-+      0x2a56, 0x322a, 0x259b, 0x080c, 0x254c, 0x0005, 0xa006, 0x0038,
-+      0x7808, 0xc08d, 0x780a, 0xa006, 0x7002, 0x704a, 0x7042, 0x70ce,
-+      0x705c, 0xa005, 0x1904, 0x26ec, 0x7060, 0xa084, 0x0007, 0x0002,
-+      0x25b8, 0x2626, 0x262e, 0x2637, 0x2640, 0x26d2, 0x2649, 0x2626,
-+      0x7830, 0xd0bc, 0x1d10, 0x71d0, 0xd1bc, 0x19f8, 0xd1b4, 0x1904,
-+      0x2603, 0x70a0, 0xa086, 0x0001, 0x09c0, 0x70b0, 0xa06d, 0x6800,
-+      0xa065, 0xa055, 0x789b, 0x0080, 0x6b0c, 0x7baa, 0x6808, 0xa045,
-+      0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0118, 0x69bc,
-+      0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0010, 0x0804,
-+      0x281f, 0x705c, 0xa005, 0x1904, 0x259d, 0x00c6, 0x00d6, 0x70b0,
-+      0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0080, 0x6b0c, 0x7baa,
-+      0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001,
-+      0x0118, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001,
-+      0x0020, 0x0804, 0x281f, 0x080c, 0x3c33, 0x1904, 0x259d, 0x781b,
-+      0x0068, 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de,
-+      0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, 0x68bc, 0x703e,
-+      0xc1b4, 0x71d2, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x7003, 0x0002,
-+      0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0x080c, 0x3c33,
-+      0x1120, 0x781b, 0x0054, 0x7003, 0x0004, 0x0005, 0x080c, 0x3c33,
-+      0x1128, 0x2011, 0x000c, 0x0419, 0x7003, 0x0004, 0x0005, 0x080c,
-+      0x3c33, 0x1128, 0x2011, 0x0006, 0x00d1, 0x7003, 0x0004, 0x0005,
-+      0x080c, 0x3c33, 0x1128, 0x2011, 0x000d, 0x0089, 0x7003, 0x0004,
-+      0x0005, 0x080c, 0x3c33, 0x1150, 0x2011, 0x0006, 0x0041, 0x7078,
-+      0x707b, 0x0000, 0x2068, 0x704a, 0x7003, 0x0004, 0x0005, 0x7170,
-+      0xc1fc, 0x8107, 0x7882, 0x789b, 0x0080, 0xa286, 0x000c, 0x1120,
-+      0x7aaa, 0x2001, 0x0001, 0x0098, 0xa18c, 0x001f, 0xa18d, 0x00c0,
-+      0x79aa, 0xa286, 0x000d, 0x0120, 0x7aaa, 0x2001, 0x0002, 0x0038,
-+      0x78ab, 0x0020, 0x7174, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b,
-+      0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x0113, 0x080c, 0x3c46,
-+      0x707f, 0x000f, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6,
-+      0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001,
-+      0x601a, 0x00ce, 0x0005, 0x7014, 0xa005, 0x1138, 0x70d0, 0xd0b4,
-+      0x0128, 0x70b4, 0xac06, 0x1110, 0x0c29, 0x0005, 0x0016, 0x71a0,
-+      0xa186, 0x0001, 0x0528, 0x00d6, 0x0026, 0x2100, 0x2011, 0x0001,
-+      0xa212, 0x70b0, 0x2068, 0x6800, 0xac06, 0x0120, 0x8211, 0x01b0,
-+      0x00c9, 0x0cc8, 0x00c6, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b0,
-+      0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a, 0x8211,
-+      0x0110, 0x0041, 0x0cb0, 0x70a3, 0x0001, 0x00ce, 0x002e, 0x00de,
-+      0x001e, 0x0005, 0xade8, 0x0005, 0x70a8, 0xad06, 0x1110, 0x70a4,
-+      0x2068, 0x0005, 0x080c, 0x3c33, 0x1904, 0x259d, 0x7078, 0x2068,
-+      0x7770, 0x080c, 0x3b6f, 0x2c50, 0x080c, 0x3cce, 0x789b, 0x0080,
-+      0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001,
-+      0x2001, 0x0004, 0x0804, 0x2824, 0x080c, 0x3c33, 0x1904, 0x259d,
-+      0x789b, 0x0080, 0x705c, 0x2068, 0x6f14, 0x70d0, 0xd0b4, 0x0168,
-+      0xc0b4, 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef,
-+      0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x080c, 0x3b6f, 0x2c50,
-+      0x080c, 0x3cce, 0x6824, 0xa005, 0x0130, 0xa082, 0x0006, 0x0208,
-+      0x0010, 0x6827, 0x0005, 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa,
-+      0x2031, 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0804, 0x2824,
-+      0xc28d, 0x72d2, 0x72bc, 0xa200, 0xa015, 0x7150, 0x8108, 0xa12a,
-+      0x0208, 0x71bc, 0x2164, 0x6504, 0x85ff, 0x1170, 0x7152, 0x8421,
-+      0x1da8, 0x70d0, 0xd08c, 0x0128, 0x70cc, 0xa005, 0x1110, 0x70cf,
-+      0x000a, 0x0005, 0x2200, 0x0c90, 0x70d0, 0xc08c, 0x70d2, 0x70cf,
-+      0x0000, 0x6034, 0xa005, 0x1db0, 0x6708, 0xa784, 0x073f, 0x01d0,
-+      0xd7d4, 0x1d80, 0xa784, 0x0021, 0x1d68, 0xa784, 0x0002, 0x0130,
-+      0xa784, 0x0004, 0x0d38, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218,
-+      0x1d08, 0xa784, 0x0100, 0x0130, 0x6018, 0xa005, 0x19d8, 0xa7bc,
-+      0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e,
-+      0x6318, 0x0128, 0x601c, 0xa302, 0x0220, 0x0118, 0x0858, 0x83ff,
-+      0x1948, 0x2d58, 0x2c50, 0x7152, 0xd7bc, 0x1120, 0x7028, 0x6022,
-+      0x603a, 0x0010, 0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100,
-+      0x2a60, 0x2041, 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0,
-+      0xd1fc, 0x0110, 0xd684, 0x0110, 0xa39c, 0xffbf, 0xd6a4, 0x0110,
-+      0xa39d, 0x0020, 0xa684, 0x000e, 0x1904, 0x27d6, 0xc7a5, 0x670a,
-+      0x2c00, 0x68c6, 0x77a0, 0xa786, 0x0001, 0x1178, 0x70d0, 0xd0b4,
-+      0x1160, 0x7000, 0xa082, 0x0002, 0x1240, 0x7830, 0xd0bc, 0x1128,
-+      0x789b, 0x0080, 0x7baa, 0x0804, 0x281d, 0x8739, 0x77a2, 0x2750,
-+      0x77ac, 0xa7b0, 0x0005, 0x70a8, 0xa606, 0x1108, 0x76a4, 0x76ae,
-+      0x2c3a, 0x8738, 0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738,
-+      0x253a, 0x7830, 0xd0bc, 0x0150, 0x2091, 0x8000, 0x2091, 0x303d,
-+      0x70d0, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000,
-+      0x0120, 0x8421, 0x2200, 0x1904, 0x2725, 0x0005, 0xd1dc, 0x0904,
-+      0x37ce, 0x2029, 0x0020, 0xd69c, 0x1120, 0x8528, 0xd68c, 0x1108,
-+      0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0x70c8,
-+      0xa160, 0x2c64, 0x8cff, 0x0188, 0x6014, 0xa706, 0x1dd0, 0x60b8,
-+      0x8001, 0x60ba, 0x1d88, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a,
-+      0x2200, 0x8421, 0x1904, 0x2725, 0x0005, 0x2a60, 0x610e, 0x69be,
-+      0x2c00, 0x68c6, 0x8840, 0x6008, 0xc0d5, 0x600a, 0x77a0, 0xa786,
-+      0x0001, 0x1904, 0x27ad, 0x70d0, 0xd0b4, 0x1904, 0x27ad, 0x7000,
-+      0xa082, 0x0002, 0x1a04, 0x27ad, 0x7830, 0xd0bc, 0x1904, 0x27ad,
-+      0x789b, 0x0080, 0x7baa, 0x7daa, 0x79aa, 0x2001, 0x0002, 0x0006,
-+      0x6018, 0x8000, 0x601a, 0x0008, 0x0006, 0x2960, 0x6104, 0x2a60,
-+      0x080c, 0x3ce1, 0x1590, 0xa184, 0x0018, 0x0180, 0xa184, 0x0010,
-+      0x0118, 0x080c, 0x3977, 0x1548, 0xa184, 0x0008, 0x0138, 0x69a0,
-+      0xa184, 0x0600, 0x1118, 0x080c, 0x3895, 0x00f8, 0x69a0, 0xa184,
-+      0x1e00, 0x0528, 0xa184, 0x0800, 0x0178, 0x00c6, 0x2960, 0x6000,
-+      0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, 0x0010, 0x6106, 0x00ce,
-+      0x080c, 0x3977, 0x1150, 0x69a0, 0xa184, 0x0200, 0x0118, 0x080c,
-+      0x38da, 0x0018, 0xa184, 0x0400, 0x19f0, 0x69a0, 0xa184, 0x1000,
-+      0x0130, 0x6914, 0xa18c, 0xff00, 0x810f, 0x080c, 0x239c, 0x002e,
-+      0xa68c, 0x00e0, 0xa684, 0x0060, 0x0128, 0xa086, 0x0060, 0x1110,
-+      0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b, 0x0060, 0x2800,
-+      0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0168, 0xc0fc, 0x7083,
-+      0x0000, 0xa08a, 0x000d, 0x0328, 0xa08a, 0x000c, 0x7182, 0x2001,
-+      0x000c, 0x800c, 0x7186, 0x78aa, 0x3518, 0x3340, 0x3428, 0x8000,
-+      0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b, 0x0000, 0xad80, 0x000b,
-+      0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0, 0xa286, 0x0020, 0x1508,
-+      0x70d0, 0xc0b5, 0x70d2, 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x6814,
-+      0xc0fc, 0x8007, 0x7882, 0xa286, 0x0002, 0x0904, 0x28f5, 0x70a0,
-+      0x8000, 0x70a2, 0x74b0, 0xa498, 0x0005, 0x70a8, 0xa306, 0x1108,
-+      0x73a4, 0x73b2, 0xa286, 0x0010, 0x0904, 0x259d, 0x00de, 0x00ce,
-+      0x0005, 0x7000, 0xa005, 0x19e0, 0xa286, 0x0002, 0x1904, 0x290c,
-+      0x080c, 0x3c33, 0x19a8, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091,
-+      0x8000, 0x781b, 0x0068, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de,
-+      0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a,
-+      0x0126, 0x00d6, 0x00c6, 0x70d0, 0xa084, 0x2e00, 0x2090, 0x00ce,
-+      0x00de, 0x012e, 0x2900, 0x7056, 0x68bc, 0x703e, 0x7003, 0x0002,
-+      0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x7830, 0xd0bc, 0x0140,
-+      0x2091, 0x303d, 0x70d0, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090,
-+      0x70a0, 0xa005, 0x1108, 0x0005, 0x8421, 0x0de8, 0x724c, 0x70bc,
-+      0xa200, 0xa015, 0x0804, 0x2725, 0xa286, 0x0010, 0x1560, 0x080c,
-+      0x3c33, 0x1904, 0x28a0, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x781b,
-+      0x0068, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+      0x78da, 0x7808, 0xc08d, 0x780a, 0x70a0, 0x8000, 0x70a2, 0x74b0,
-+      0xa490, 0x0005, 0x70a8, 0xa206, 0x1108, 0x72a4, 0x72b2, 0x2900,
-+      0x7056, 0x68bc, 0x703e, 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80,
-+      0x0009, 0x7042, 0x0005, 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814,
-+      0xc0fc, 0x8007, 0x7882, 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2,
-+      0x7eda, 0x781b, 0x0068, 0x2900, 0x7056, 0x7202, 0x7808, 0xc08d,
-+      0x780a, 0x2300, 0xa605, 0x0170, 0x70d0, 0xa084, 0x2e00, 0xa086,
-+      0x2600, 0x1118, 0x2009, 0x0000, 0x0010, 0x2009, 0x0001, 0xa284,
-+      0x000f, 0x0023, 0xad80, 0x0009, 0x7042, 0x0005, 0x296e, 0x41d9,
-+      0x41d9, 0x41c7, 0x41d9, 0x296e, 0x296e, 0x296e, 0x080c, 0x254c,
-+      0x7808, 0xa084, 0xfffd, 0x780a, 0x00f6, 0x2079, 0x4600, 0x78ac,
-+      0x00fe, 0xd084, 0x01b0, 0x7060, 0xa086, 0x0001, 0x0904, 0x2a32,
-+      0x7060, 0xa086, 0x0005, 0x1158, 0x7078, 0x2068, 0x681b, 0x0004,
-+      0x6817, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7063,
-+      0x0000, 0x70a3, 0x0000, 0x70a4, 0x70ae, 0x70b2, 0x080c, 0x2682,
-+      0x0156, 0x2011, 0x0004, 0x7160, 0xa186, 0x0001, 0x0160, 0xa186,
-+      0x0007, 0x1118, 0x701f, 0x0005, 0x0030, 0x701f, 0x0001, 0x70d0,
-+      0xc0c5, 0x70d2, 0x0000, 0x2001, 0x460a, 0x2004, 0xa084, 0x00ff,
-+      0xa086, 0x0018, 0x0130, 0x7018, 0x7016, 0xa005, 0x1110, 0x70a3,
-+      0x0001, 0x0066, 0x080c, 0x3f26, 0x20a9, 0x0010, 0x2039, 0x0000,
-+      0x080c, 0x3a66, 0xa7b8, 0x0100, 0x1f04, 0x29c0, 0x006e, 0x7000,
-+      0x0002, 0x29fd, 0x29db, 0x29db, 0x29d3, 0x29fd, 0x29fd, 0x29fd,
-+      0x29d1, 0x080c, 0x254c, 0x705c, 0xa005, 0x0538, 0xad06, 0x1118,
-+      0x6800, 0x705e, 0x0080, 0x6820, 0xd084, 0x1148, 0x6f14, 0x080c,
-+      0x3b6f, 0x6008, 0xc0d4, 0x600a, 0x080c, 0x37a4, 0x0020, 0x7058,
-+      0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc,
-+      0x0108, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820, 0xa084,
-+      0x00ff, 0xc09d, 0x6822, 0x080c, 0x1da2, 0x2011, 0x0004, 0x74c8,
-+      0xa4a0, 0x0100, 0x04b1, 0xaea0, 0x0017, 0x0499, 0x20a9, 0x0101,
-+      0x74c8, 0x0479, 0x8420, 0x1f04, 0x2a09, 0x70c0, 0x2060, 0x2021,
-+      0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0198, 0x6018, 0x0016,
-+      0x0006, 0x2011, 0x4602, 0x220c, 0xa102, 0x2012, 0x000e, 0x001e,
-+      0xa102, 0x0338, 0x6012, 0x1128, 0x2011, 0x4604, 0x2204, 0xc0a5,
-+      0x2012, 0x601b, 0x0000, 0xace0, 0x0010, 0x1f04, 0x2a13, 0x8421,
-+      0x1d00, 0x015e, 0x7063, 0x0000, 0x7003, 0x0000, 0x704b, 0x0000,
-+      0x0005, 0x0046, 0x2404, 0xa005, 0x01a8, 0x2068, 0x6800, 0x0006,
-+      0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00,
-+      0x681e, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1da2,
-+      0x000e, 0x0c48, 0x004e, 0x2023, 0x0000, 0x0005, 0xa282, 0x0003,
-+      0x0310, 0x080c, 0x254c, 0x2300, 0x0002, 0x2a60, 0x2add, 0x2af7,
-+      0xa282, 0x0002, 0x0110, 0x080c, 0x254c, 0x7060, 0x7063, 0x0000,
-+      0x707f, 0x0000, 0x0022, 0x77d0, 0xc7c5, 0x77d2, 0x0002, 0x2a77,
-+      0x2a77, 0x2a79, 0x2ab1, 0x37d8, 0x2a77, 0x2ab1, 0x2a77, 0x080c,
-+      0x254c, 0x7770, 0x080c, 0x3a66, 0x7770, 0xa7bc, 0x8f00, 0x080c,
-+      0x3b6f, 0x6018, 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0x8cc0,
-+      0x0010, 0x2021, 0x8dd0, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c,
-+      0x2b11, 0x01b8, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021,
-+      0x8bc0, 0x0010, 0x2021, 0x8cd0, 0x0046, 0x2009, 0x0005, 0x2011,
-+      0x0010, 0x080c, 0x2b11, 0x004e, 0x0118, 0x8420, 0x1f04, 0x2a9c,
-+      0x015e, 0x8738, 0xa784, 0x001f, 0x1990, 0x0804, 0x25a0, 0x0804,
-+      0x25a0, 0x7770, 0x080c, 0x3b6f, 0x6018, 0xa005, 0x0520, 0xd7fc,
-+      0x1118, 0x2021, 0x8cc0, 0x0010, 0x2021, 0x8dd0, 0x2009, 0x0005,
-+      0x2011, 0x0020, 0x080c, 0x2b11, 0x01b0, 0x0156, 0x20a9, 0x0101,
-+      0xd7fc, 0x1118, 0x2021, 0x8bc0, 0x0010, 0x2021, 0x8cd0, 0x0046,
-+      0x2009, 0x0005, 0x2011, 0x0020, 0x04e1, 0x004e, 0x0118, 0x8420,
-+      0x1f04, 0x2acf, 0x015e, 0x0804, 0x25a0, 0x2200, 0x0002, 0x2ae2,
-+      0x2ae4, 0x2ae4, 0x080c, 0x254c, 0x2009, 0x0012, 0x7060, 0xa086,
-+      0x0002, 0x0110, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0108, 0x691a,
-+      0x7063, 0x0000, 0x70d0, 0xc0c5, 0x70d2, 0x0804, 0x3be5, 0x2200,
-+      0x0002, 0x2afe, 0x2ae4, 0x2afc, 0x080c, 0x254c, 0x080c, 0x3f26,
-+      0x7000, 0xa086, 0x0002, 0x1904, 0x375d, 0x080c, 0x37be, 0x6008,
-+      0xa084, 0xfbef, 0x600a, 0x080c, 0x374f, 0x0904, 0x375d, 0x0804,
-+      0x25a0, 0x2404, 0xa005, 0x0590, 0x2068, 0x2d04, 0x0006, 0x6814,
-+      0xa706, 0x0118, 0x2d20, 0x000e, 0x0ca8, 0x000e, 0x2022, 0x691a,
-+      0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e,
-+      0x6820, 0xa084, 0x00ff, 0xa205, 0x6822, 0x080c, 0x1da2, 0x2021,
-+      0x4602, 0x241c, 0x8319, 0x2322, 0x6010, 0x8001, 0x6012, 0x1128,
-+      0x2021, 0x4604, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef,
-+      0x600a, 0x080c, 0x269e, 0x080c, 0x37be, 0x0005, 0xa085, 0x0001,
-+      0x0ce0, 0x2300, 0x0002, 0x2b50, 0x2b4e, 0x2bcb, 0x080c, 0x254c,
-+      0x78e4, 0xa005, 0x17b0, 0x3208, 0xa18c, 0x0800, 0x0118, 0x0104,
-+      0x259d, 0x0010, 0x0304, 0x259d, 0x2008, 0xa084, 0x0030, 0x1110,
-+      0x0804, 0x322a, 0x78ec, 0xa084, 0x0003, 0x0dd0, 0x7884, 0xd0fc,
-+      0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004,
-+      0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005,
-+      0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x2bae,
-+      0x2bb7, 0x2ba4, 0x2b87, 0x3c29, 0x3c29, 0x2b87, 0x2bc1, 0x080c,
-+      0x254c, 0x7000, 0xa086, 0x0004, 0x1190, 0x7060, 0xa086, 0x0002,
-+      0x1130, 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, 0x2a56, 0x7060,
-+      0xa086, 0x0006, 0x0db0, 0x7060, 0xa086, 0x0004, 0x0d90, 0x79e4,
-+      0x2001, 0x0003, 0x0804, 0x2f18, 0x6818, 0xd0fc, 0x0110, 0x681b,
-+      0x001d, 0x080c, 0x3a3c, 0x781b, 0x006e, 0x0005, 0x6818, 0xd0fc,
-+      0x0110, 0x681b, 0x001d, 0x080c, 0x3a3c, 0x0804, 0x3c07, 0x6818,
-+      0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a3c, 0x781b, 0x00fa,
-+      0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3a3c,
-+      0x781b, 0x00cb, 0x0005, 0xa584, 0x000f, 0x11c0, 0x7000, 0x0002,
-+      0x25a0, 0x2bd8, 0x2bda, 0x375d, 0x375d, 0x375d, 0x2bd8, 0x2bd8,
-+      0x080c, 0x254c, 0x080c, 0x37be, 0x6008, 0xa084, 0xfbef, 0x600a,
-+      0x080c, 0x374f, 0x0904, 0x375d, 0x0804, 0x25a0, 0x78e4, 0xa005,
-+      0x1b04, 0x2b89, 0x3208, 0xa18c, 0x0800, 0x0118, 0x0104, 0x2b89,
-+      0x0010, 0x0304, 0x2b89, 0x2008, 0xa084, 0x0030, 0x1118, 0x781b,
-+      0x0068, 0x0005, 0x78ec, 0xa084, 0x0003, 0x0dc8, 0x7884, 0xd0fc,
-+      0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004,
-+      0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005,
-+      0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x2c26,
-+      0x2c2a, 0x2c21, 0x2c1f, 0x3c29, 0x3c29, 0x2c1f, 0x3c23, 0x080c,
-+      0x254c, 0x080c, 0x3a42, 0x781b, 0x006e, 0x0005, 0x080c, 0x3a42,
-+      0x0804, 0x3c07, 0x080c, 0x3a42, 0x781b, 0x00fa, 0x0005, 0x080c,
-+      0x3a42, 0x781b, 0x00cb, 0x0005, 0x2300, 0x0002, 0x2c3b, 0x2c39,
-+      0x2c3d, 0x080c, 0x254c, 0x0804, 0x33e2, 0x681b, 0x0016, 0x78a3,
-+      0x0000, 0x79e4, 0xa184, 0x0030, 0x0904, 0x33e2, 0x78ec, 0xa084,
-+      0x0003, 0x0904, 0x33e2, 0xa184, 0x0100, 0x0d98, 0x7884, 0xd0fc,
-+      0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004,
-+      0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005,
-+      0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x2c6f,
-+      0x2c2a, 0x2ba4, 0x3be5, 0x3c29, 0x3c29, 0x3be5, 0x3c23, 0x080c,
-+      0x3bf1, 0x0005, 0xa282, 0x0005, 0x0310, 0x080c, 0x254c, 0x7898,
-+      0x2040, 0x2300, 0x0002, 0x2c7e, 0x2ea8, 0x2eb2, 0x2200, 0x0002,
-+      0x2c9a, 0x2c87, 0x2c9a, 0x2c85, 0x2e8a, 0x080c, 0x254c, 0x789b,
-+      0x0018, 0x78a8, 0x2010, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0a04,
-+      0x3a0b, 0xa08a, 0x0004, 0x1a04, 0x3a0b, 0x0002, 0x3a0b, 0x3a0b,
-+      0x3a0b, 0x39c1, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0148,
-+      0x0804, 0x3a0b, 0x7000, 0xa005, 0x1dd8, 0x2011, 0x0004, 0x0804,
-+      0x3594, 0xa184, 0x00ff, 0xa08a, 0x0010, 0x1a04, 0x3a0b, 0x0002,
-+      0x2cc2, 0x2cc0, 0x2cd4, 0x2cd8, 0x2d86, 0x3a0b, 0x3a0b, 0x2d88,
-+      0x3a0b, 0x3a0b, 0x2e86, 0x2e86, 0x3a0b, 0x3a0b, 0x3a0b, 0x2e88,
-+      0x080c, 0x254c, 0xd6e4, 0x0140, 0x2001, 0x0300, 0x8000, 0x8000,
-+      0x783a, 0x781b, 0x00c7, 0x0005, 0x6818, 0xd0fc, 0x0118, 0x681b,
-+      0x001d, 0x0c90, 0x0804, 0x3be5, 0x681b, 0x001d, 0x0804, 0x3a36,
-+      0x6920, 0x6922, 0xa684, 0x1800, 0x1904, 0x2d29, 0x6820, 0xd084,
-+      0x1904, 0x2d31, 0x6818, 0xa086, 0x0008, 0x1110, 0x681b, 0x0000,
-+      0xd6d4, 0x0568, 0xd6bc, 0x0558, 0x7083, 0x0000, 0x6818, 0xa084,
-+      0x003f, 0xa08a, 0x000d, 0x0718, 0xa08a, 0x000c, 0x7182, 0x2001,
-+      0x000c, 0x800c, 0x7186, 0x789b, 0x0061, 0x78aa, 0x0156, 0x0136,
-+      0x0146, 0x0016, 0x3208, 0xa18c, 0x0600, 0x0118, 0x20a1, 0x022b,
-+      0x0010, 0x20a1, 0x012b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac,
-+      0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x6038,
-+      0xa005, 0x1150, 0x681c, 0xa084, 0x000e, 0x0904, 0x3a36, 0x080c,
-+      0x3a48, 0x782b, 0x3008, 0x0010, 0x8001, 0x603a, 0x781b, 0x0071,
-+      0x0005, 0xd6e4, 0x0130, 0x781b, 0x0083, 0x0005, 0x781b, 0x0083,
-+      0x0005, 0xa684, 0x0060, 0x0dd0, 0xd6dc, 0x0dc0, 0xd6fc, 0x01a0,
-+      0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x8007, 0xa084,
-+      0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+      0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4, 0x0118, 0xc6f4, 0x7e5a,
-+      0x6eb6, 0x7000, 0xa086, 0x0003, 0x1148, 0x0006, 0x080c, 0x3f26,
-+      0x080c, 0x41d9, 0x000e, 0x781b, 0x0080, 0x0005, 0xa006, 0x080c,
-+      0x42b5, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0120,
-+      0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6,
-+      0x7bd6, 0x7bde, 0x2300, 0xa405, 0x1130, 0xc6f5, 0x7e5a, 0x6eb6,
-+      0x781b, 0x0080, 0x0005, 0x781b, 0x0080, 0x2200, 0xa115, 0x1118,
-+      0x080c, 0x41d9, 0x0005, 0x080c, 0x4206, 0x0005, 0x080c, 0x254c,
-+      0x0804, 0x2e1c, 0x00c6, 0x7054, 0x2060, 0x6920, 0xa18c, 0xecff,
-+      0x6922, 0x6000, 0xa084, 0xcfdf, 0x6002, 0x080c, 0x38f4, 0xa006,
-+      0x2040, 0x2038, 0x080c, 0x399c, 0x0804, 0x2e10, 0x00c6, 0x7054,
-+      0x2060, 0x2c48, 0x7aa8, 0xa294, 0x00ff, 0xa286, 0x0004, 0x11d8,
-+      0x6920, 0xd1e4, 0x1170, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031,
-+      0x0000, 0xa006, 0x2010, 0x080c, 0x38f7, 0x080c, 0x399c, 0x0804,
-+      0x2e10, 0xa18c, 0xecff, 0x6922, 0x6104, 0xa18c, 0xffdd, 0x6106,
-+      0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003, 0x01d0, 0x6104, 0xa184,
-+      0x0010, 0x0548, 0x080c, 0x3b6b, 0x080c, 0x3977, 0x88ff, 0x0518,
-+      0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a,
-+      0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005,
-+      0x6920, 0xd1cc, 0x0130, 0xa18c, 0xfdff, 0x6922, 0x6000, 0xc0ec,
-+      0x6002, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006,
-+      0x2010, 0x080c, 0x399c, 0xa286, 0x0001, 0x0158, 0x6104, 0xa184,
-+      0x0008, 0x01b0, 0x080c, 0x3b6b, 0x080c, 0x3895, 0x88ff, 0x1980,
-+      0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c, 0xfeff, 0x6922, 0x6000,
-+      0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x38f7,
-+      0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b,
-+      0x0083, 0x0005, 0x0804, 0x3a32, 0x2808, 0x789b, 0x0080, 0x2019,
-+      0x0080, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x11b8, 0x2300,
-+      0xa102, 0xa086, 0x0001, 0x0904, 0x2d8a, 0x7ca8, 0xa4a4, 0x00ff,
-+      0xa480, 0x0002, 0xa300, 0x2018, 0xa102, 0x0a04, 0x2d9e, 0x0904,
-+      0x2d9e, 0x24a8, 0x7aa8, 0x1f04, 0x2e3a, 0x0c18, 0xa284, 0x00f0,
-+      0xa082, 0x0020, 0x06b8, 0x2200, 0xa082, 0x0021, 0x1698, 0x7aa8,
-+      0x8318, 0x8318, 0x2100, 0xa302, 0x0aa0, 0xa286, 0x0023, 0x0950,
-+      0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xc0a5,
-+      0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x78a0, 0x8001, 0x0904,
-+      0x2e10, 0x20a8, 0x7998, 0x789b, 0x0060, 0x78aa, 0x2011, 0x0080,
-+      0x799a, 0x78a8, 0x7998, 0x7a9a, 0x78aa, 0x7a98, 0x1f04, 0x2e68,
-+      0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b,
-+      0x0082, 0x0005, 0x8318, 0x2100, 0xa302, 0x0a04, 0x2e21, 0xa284,
-+      0x0080, 0x1904, 0x3a36, 0x78a0, 0xa005, 0x08c8, 0x0804, 0x3a36,
-+      0x0804, 0x3a0b, 0x7054, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084,
-+      0x00ff, 0xa08e, 0x0001, 0x0110, 0x080c, 0x254c, 0x7aa8, 0xa294,
-+      0x00ff, 0x784b, 0x0008, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0005,
-+      0x1a04, 0x3a0b, 0x0002, 0x3a0b, 0x380c, 0x3a0b, 0x3927, 0x3d31,
-+      0xa282, 0x0000, 0x1110, 0x080c, 0x254c, 0x080c, 0x3a3c, 0x781b,
-+      0x0082, 0x0005, 0xa282, 0x0003, 0x1110, 0x080c, 0x254c, 0xd4fc,
-+      0x11d0, 0x7060, 0xa005, 0x0110, 0x080c, 0x254c, 0x6f14, 0x7772,
-+      0xa7bc, 0x8f00, 0x080c, 0x3b6f, 0x6008, 0xa085, 0x0021, 0x600a,
-+      0x8738, 0xa784, 0x001f, 0x1db0, 0x080c, 0x3a3f, 0x7063, 0x0002,
-+      0x701f, 0x0009, 0x0010, 0x080c, 0x3a4b, 0x781b, 0x0082, 0x0005,
-+      0xa282, 0x0004, 0x0310, 0x080c, 0x254c, 0x2300, 0x0002, 0x2ee2,
-+      0x3078, 0x30b4, 0xa286, 0x0003, 0x0598, 0x7200, 0x7cd8, 0x7ddc,
-+      0x7fd0, 0x71d0, 0xd1b4, 0x0528, 0xd1bc, 0x1518, 0x2001, 0x4601,
-+      0x2004, 0xd0c4, 0x11f0, 0x7868, 0xa084, 0x00ff, 0x11d0, 0xa282,
-+      0x0002, 0x12b8, 0x00d6, 0x783b, 0x8300, 0x781b, 0x0059, 0x70b8,
-+      0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+      0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030, 0x00de, 0x2001, 0x0000,
-+      0x0058, 0x783b, 0x1300, 0x781b, 0x0057, 0x2001, 0x0000, 0x0020,
-+      0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x7046, 0x68a0, 0xd0ec, 0x0118,
-+      0x6008, 0xc08d, 0x600a, 0xa284, 0x000f, 0x0002, 0x3059, 0x2f33,
-+      0x2f30, 0x3184, 0x320f, 0x25a0, 0x2f2e, 0x2f2e, 0x080c, 0x254c,
-+      0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x0120, 0x7044, 0xa086, 0x0014,
-+      0x11e8, 0x080c, 0x3f26, 0x2009, 0x0000, 0x6818, 0xd0fc, 0x0108,
-+      0x7044, 0xa086, 0x0014, 0x0168, 0x6818, 0xa086, 0x0008, 0x1904,
-+      0x301b, 0x7858, 0xd09c, 0x0904, 0x301b, 0x6820, 0xd0ac, 0x0904,
-+      0x301b, 0x681b, 0x0014, 0x2009, 0x0002, 0x04a8, 0x7868, 0xa08c,
-+      0x00ff, 0x0588, 0xa186, 0x0008, 0x1158, 0x6008, 0xc0a4, 0x600a,
-+      0x080c, 0x374f, 0x0540, 0x080c, 0x37be, 0x080c, 0x3f26, 0x0060,
-+      0xa186, 0x0028, 0x1500, 0x6018, 0xa005, 0x0d78, 0x8001, 0x0d68,
-+      0x8001, 0x0d58, 0x601e, 0x0c48, 0x6820, 0xd084, 0x0904, 0x25a0,
-+      0xc084, 0x6822, 0x080c, 0x2693, 0x7058, 0x00c6, 0x2060, 0x6800,
-+      0x6002, 0x00ce, 0x6004, 0x6802, 0xa005, 0x2d00, 0x1108, 0x6002,
-+      0x6006, 0x0804, 0x25a0, 0x0016, 0x81ff, 0x15f0, 0x7000, 0xa086,
-+      0x0030, 0x05d0, 0x71d0, 0xd1bc, 0x15b8, 0xd1b4, 0x11e8, 0x705c,
-+      0xa005, 0x1590, 0x70a0, 0xa086, 0x0001, 0x0570, 0x7003, 0x0000,
-+      0x0046, 0x0056, 0x0076, 0x0066, 0x00c6, 0x00d6, 0x080c, 0x25c5,
-+      0x00de, 0x00ce, 0x006e, 0x007e, 0x005e, 0x004e, 0x71d0, 0xd1b4,
-+      0x11d8, 0x7003, 0x0040, 0x00c0, 0x080c, 0x3c33, 0x11a8, 0x781b,
-+      0x0068, 0x00d6, 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6,
-+      0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030,
-+      0x7808, 0xc08d, 0x780a, 0x00de, 0x080c, 0x30dc, 0x001e, 0x81ff,
-+      0x0904, 0x301b, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14,
-+      0xa186, 0x0002, 0x1904, 0x301c, 0x6818, 0xa086, 0x0014, 0x1130,
-+      0x2008, 0xd6e4, 0x0118, 0x7868, 0xa08c, 0x00ff, 0x080c, 0x3a55,
-+      0x080c, 0x269e, 0x6820, 0xd0dc, 0x1578, 0x8717, 0xa294, 0x000f,
-+      0x8213, 0x8213, 0x8213, 0xb284, 0x0600, 0x0118, 0xa290, 0x4ac0,
-+      0x0010, 0xa290, 0x4b40, 0xa290, 0x0000, 0x221c, 0xd3c4, 0x0170,
-+      0x6820, 0xd0e4, 0x0128, 0xa084, 0xefff, 0x6822, 0xc3ac, 0x2312,
-+      0x8210, 0x2204, 0xa085, 0x0038, 0x2012, 0x8211, 0xd3d4, 0x0138,
-+      0x68a0, 0xd0c4, 0x1120, 0x080c, 0x3144, 0x0804, 0x25a0, 0x6008,
-+      0xc08d, 0x600a, 0x0008, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0110,
-+      0x7044, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff, 0x0168,
-+      0x2009, 0x4602, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412, 0x1128,
-+      0x2021, 0x4604, 0x2404, 0xc0a5, 0x2022, 0x6018, 0xa005, 0x0118,
-+      0x8001, 0x601a, 0x1118, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084,
-+      0x1130, 0x6800, 0xa005, 0x1108, 0x6002, 0x6006, 0x0020, 0x7058,
-+      0x2060, 0x6800, 0x6002, 0x2061, 0x4600, 0x6887, 0x0103, 0x2d08,
-+      0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008,
-+      0x616e, 0x7200, 0xa286, 0x0030, 0x0158, 0xa286, 0x0040, 0x1904,
-+      0x25a0, 0x7003, 0x0002, 0x7048, 0x2068, 0x68c4, 0x2060, 0x0005,
-+      0x7003, 0x0002, 0x70b8, 0xa06d, 0x68bc, 0x703e, 0x70b4, 0xa065,
-+      0x68c0, 0x7056, 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005,
-+      0xa282, 0x0004, 0x0210, 0x080c, 0x254c, 0x2200, 0x0002, 0x3083,
-+      0x3092, 0x309e, 0x3092, 0xa586, 0x1300, 0x0160, 0xa586, 0x8300,
-+      0x1d90, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084,
-+      0xfbef, 0x600a, 0x7000, 0xa086, 0x0005, 0x0128, 0x080c, 0x3a3c,
-+      0x781b, 0x0082, 0x0005, 0x781b, 0x0083, 0x0005, 0x7890, 0x8007,
-+      0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c,
-+      0x00ff, 0xa186, 0x0003, 0x0128, 0xa186, 0x0000, 0x0110, 0x0804,
-+      0x3a0b, 0x781b, 0x0083, 0x0005, 0x6820, 0xc095, 0x6822, 0x82ff,
-+      0x1118, 0x080c, 0x3a3c, 0x0030, 0x8211, 0x0110, 0x080c, 0x254c,
-+      0x080c, 0x3a4b, 0x781b, 0x0082, 0x0005, 0x080c, 0x3c46, 0x7830,
-+      0xa084, 0x00c0, 0x1170, 0x0016, 0x3208, 0xa18c, 0x0800, 0x001e,
-+      0x0118, 0x0104, 0x30d9, 0x0010, 0x0304, 0x30d9, 0x791a, 0xa006,
-+      0x0005, 0xa085, 0x0001, 0x0005, 0xa684, 0x0060, 0x1130, 0x682f,
-+      0x0000, 0x6833, 0x0000, 0x0804, 0x3143, 0xd6dc, 0x1198, 0x68b4,
-+      0xd0dc, 0x1180, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7044, 0xa005,
-+      0x1130, 0x2200, 0xa105, 0x0904, 0x3f26, 0x7047, 0x0015, 0x0804,
-+      0x3f26, 0x0005, 0xd6ac, 0x01f0, 0xd6f4, 0x0130, 0x682f, 0x0000,
-+      0x6833, 0x0000, 0x0804, 0x3f26, 0x68b4, 0xa084, 0x4000, 0xa635,
-+      0xd6f4, 0x1da0, 0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0xd6dc,
-+      0x1128, 0x68b4, 0xd0dc, 0x0110, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32,
-+      0x0804, 0x3f26, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833, 0x0000,
-+      0x0804, 0x3f26, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x1da0,
-+      0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0x2408, 0x2510, 0x2700,
-+      0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32,
-+      0x2100, 0xa205, 0x1110, 0x0804, 0x3f26, 0x7000, 0xa086, 0x0006,
-+      0x0110, 0x0804, 0x3f26, 0x0005, 0x6946, 0x6008, 0xc0cd, 0xd3cc,
-+      0x0108, 0xc08d, 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, 0x688f,
-+      0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f,
-+      0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b,
-+      0x0020, 0x7000, 0x0002, 0x25a0, 0x3173, 0x316d, 0x316b, 0x316b,
-+      0x316b, 0x316b, 0x316b, 0x080c, 0x254c, 0x6820, 0xd084, 0x1118,
-+      0x080c, 0x37a4, 0x0030, 0x7058, 0x2c50, 0x2060, 0x6800, 0x6002,
-+      0x2a60, 0xaea0, 0x0017, 0x2404, 0xa005, 0x0110, 0x2020, 0x0cd8,
-+      0x2d22, 0x206b, 0x0000, 0x0005, 0x080c, 0x37aa, 0x080c, 0x37be,
-+      0x6008, 0xc0cc, 0x600a, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14,
-+      0x6938, 0x691a, 0x6944, 0x6916, 0x2009, 0x0000, 0xae86, 0x4640,
-+      0x0110, 0x2009, 0x0001, 0x080c, 0x42ec, 0xd6dc, 0x01c8, 0x691c,
-+      0xc1ed, 0x691e, 0x6828, 0xa082, 0x000e, 0x0290, 0x6848, 0xa084,
-+      0x000f, 0xa086, 0x000b, 0x1160, 0x685c, 0xa086, 0x0047, 0x1140,
-+      0x2001, 0x4601, 0x2004, 0xd0ac, 0x1118, 0x2700, 0x080c, 0x2475,
-+      0x6818, 0xd0fc, 0x0140, 0x681b, 0x0000, 0x7868, 0xa08c, 0x00ff,
-+      0x0110, 0x681b, 0x001e, 0xaea0, 0x0017, 0x6800, 0x2022, 0x6a3c,
-+      0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, 0xd0a4, 0x0580,
-+      0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x00d6, 0x00f6,
-+      0x0156, 0x0146, 0x2079, 0x4600, 0x080c, 0x1b93, 0x014e, 0x015e,
-+      0x00fe, 0x70c8, 0x2010, 0x2009, 0x0101, 0x0026, 0x2204, 0xa06d,
-+      0x0140, 0x6814, 0xa706, 0x0110, 0x6800, 0x0cc8, 0x6820, 0xc0d5,
-+      0x6822, 0x002e, 0x8210, 0x8109, 0x1d80, 0x00de, 0x7063, 0x0003,
-+      0x707b, 0x0000, 0x7772, 0x707f, 0x000f, 0x71d0, 0xc1c4, 0x71d2,
-+      0x6818, 0xa086, 0x0002, 0x1138, 0x6817, 0x0000, 0x682b, 0x0000,
-+      0x681c, 0xc0ec, 0x681e, 0x080c, 0x1da2, 0x0804, 0x25a0, 0x7cd8,
-+      0x7ddc, 0x7fd0, 0x080c, 0x30dc, 0x682b, 0x0000, 0x789b, 0x000e,
-+      0x6f14, 0x080c, 0x3c4a, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc,
-+      0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7063, 0x0000,
-+      0x0804, 0x25a0, 0x7000, 0xa005, 0x1110, 0x0804, 0x25a0, 0xa006,
-+      0x080c, 0x3f26, 0x6920, 0xd1ac, 0x1110, 0x681b, 0x0014, 0xa68c,
-+      0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0x6822,
-+      0x7000, 0x0002, 0x25a0, 0x324c, 0x324c, 0x324f, 0x324f, 0x324f,
-+      0x324a, 0x324a, 0x080c, 0x254c, 0x6818, 0x0804, 0x2f18, 0x6008,
-+      0xc0a4, 0x600a, 0x6817, 0x0000, 0x0804, 0x3772, 0x2300, 0x0002,
-+      0x325b, 0x325d, 0x32ab, 0x080c, 0x254c, 0xd6fc, 0x1904, 0x2d38,
-+      0x7000, 0xa00d, 0x0002, 0x25a0, 0x326d, 0x326d, 0x3297, 0x326d,
-+      0x32a8, 0x326b, 0x326b, 0x080c, 0x254c, 0xa684, 0x0060, 0x0538,
-+      0xa086, 0x0060, 0x1510, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x6eb6,
-+      0x681c, 0xc0ac, 0x681e, 0xa186, 0x0002, 0x0148, 0x080c, 0x3f26,
-+      0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x4206, 0x0010, 0x080c,
-+      0x41d9, 0x781b, 0x0083, 0x71d0, 0xd1b4, 0x1904, 0x259d, 0x70a0,
-+      0xa086, 0x0001, 0x1904, 0x25e1, 0x0005, 0xd6ec, 0x09f0, 0x6818,
-+      0xd0fc, 0x0170, 0xd6f4, 0x1130, 0x681b, 0x0015, 0x781b, 0x0083,
-+      0x0804, 0x259d, 0x681b, 0x0007, 0x682f, 0x0000, 0x6833, 0x0000,
-+      0x080c, 0x3bf1, 0x0005, 0x080c, 0x254c, 0x2300, 0x0002, 0x32b4,
-+      0x32d6, 0x332e, 0x080c, 0x254c, 0x7000, 0x0002, 0x32be, 0x32c0,
-+      0x32c7, 0x32be, 0x32be, 0x32be, 0x32be, 0x32be, 0x080c, 0x254c,
-+      0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x4206, 0x0010, 0x080c,
-+      0x41d9, 0x681c, 0xc0b4, 0x681e, 0x70d0, 0xd0b4, 0x1904, 0x259d,
-+      0x70a0, 0xa086, 0x0001, 0x1904, 0x25e1, 0x0005, 0xd6fc, 0x1904,
-+      0x331e, 0x7000, 0xa00d, 0x0002, 0x25a0, 0x32ec, 0x32e6, 0x3316,
-+      0x32ec, 0x331b, 0x32e4, 0x32e4, 0x080c, 0x254c, 0x6894, 0x78d6,
-+      0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0x0538, 0xa086,
-+      0x0060, 0x1510, 0xa6b4, 0xbfbf, 0xc6ed, 0x7e5a, 0x6eb6, 0xa186,
-+      0x0002, 0x0148, 0x080c, 0x3f26, 0x69ac, 0x68b0, 0xa115, 0x0118,
-+      0x080c, 0x4206, 0x0010, 0x080c, 0x41d9, 0x781b, 0x0083, 0x681c,
-+      0xc0b4, 0x681e, 0x71d0, 0xd1b4, 0x1904, 0x259d, 0x70a0, 0xa086,
-+      0x0001, 0x1904, 0x25e1, 0x0005, 0xd6ec, 0x09f0, 0x6818, 0xd0fc,
-+      0x0110, 0x681b, 0x0007, 0x781b, 0x00fb, 0x0005, 0xc6fc, 0x7e5a,
-+      0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+      0xa303, 0x68ae, 0x79d2, 0x781b, 0x0083, 0x0005, 0xd6dc, 0x0130,
-+      0x782b, 0x3009, 0x781b, 0x0083, 0x0804, 0x259d, 0x7884, 0xc0ac,
-+      0x7886, 0x78e4, 0xa084, 0x0008, 0x1150, 0xa484, 0x0200, 0x0108,
-+      0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0083, 0x0804, 0x259d, 0x6820,
-+      0xc095, 0x6822, 0x080c, 0x3bdc, 0xc6dd, 0x080c, 0x3a3c, 0x781b,
-+      0x0082, 0x0804, 0x259d, 0x2300, 0x0002, 0x3358, 0x335a, 0x335c,
-+      0x080c, 0x254c, 0x0804, 0x3a36, 0x7d98, 0xd6d4, 0x15a8, 0x79e4,
-+      0xd1ac, 0x0130, 0x78ec, 0xa084, 0x0003, 0x0110, 0x782b, 0x3009,
-+      0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x7d9a,
-+      0x79e4, 0xd1ac, 0x0120, 0x78ec, 0xa084, 0x0003, 0x1120, 0x2001,
-+      0x0014, 0x0804, 0x2f18, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007,
-+      0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000,
-+      0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007,
-+      0x0010, 0x2001, 0x0001, 0x04c2, 0x7a90, 0xa294, 0x0007, 0x789b,
-+      0x0060, 0x79a8, 0x81ff, 0x0568, 0x789b, 0x0080, 0x7ba8, 0xa384,
-+      0x0001, 0x11d0, 0x7ba8, 0x7ba8, 0xa386, 0x0004, 0x1118, 0x2009,
-+      0xffdf, 0x0058, 0xa386, 0x0001, 0x1118, 0x2009, 0xfff7, 0x0028,
-+      0xa386, 0x0003, 0x1148, 0x2009, 0xffef, 0x00c6, 0x7054, 0x2060,
-+      0x6004, 0xa104, 0x6006, 0x00ce, 0x789b, 0x0060, 0x78ab, 0x0000,
-+      0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xecff,
-+      0x6922, 0x7d9a, 0x0804, 0x3be5, 0x2bae, 0x2bb7, 0x33d6, 0x33dc,
-+      0x33d4, 0x33d4, 0x3be5, 0x3be5, 0x080c, 0x254c, 0x6920, 0xa18c,
-+      0xfcff, 0x6922, 0x0804, 0x3beb, 0x6920, 0xa18c, 0xfcff, 0x6922,
-+      0x0804, 0x3be5, 0x79e4, 0xa184, 0x0030, 0x0120, 0x78ec, 0xa084,
-+      0x0003, 0x1570, 0x7000, 0xa086, 0x0004, 0x1190, 0x7060, 0xa086,
-+      0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, 0x2a56,
-+      0x7060, 0xa086, 0x0006, 0x0db0, 0x7060, 0xa086, 0x0004, 0x0d90,
-+      0x7000, 0xa086, 0x0000, 0x0904, 0x259d, 0x6920, 0xa184, 0x0420,
-+      0x0128, 0xc1d4, 0x6922, 0x6818, 0x0804, 0x2f18, 0x6818, 0xa08e,
-+      0x0002, 0x0120, 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0804, 0x2f18,
-+      0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090, 0xa184, 0x0007,
-+      0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050, 0xa184, 0x0007,
-+      0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010, 0x2001, 0x0001,
-+      0x0002, 0x3be5, 0x3be5, 0x3439, 0x3be5, 0x3c29, 0x3c29, 0x3be5,
-+      0x3be5, 0xd6bc, 0x0570, 0x7180, 0x81ff, 0x0558, 0xa182, 0x000d,
-+      0x1318, 0x7083, 0x0000, 0x0028, 0xa182, 0x000c, 0x7082, 0x2009,
-+      0x000c, 0x789b, 0x0061, 0x79aa, 0x0156, 0x0136, 0x0146, 0x7084,
-+      0x8114, 0xa210, 0x7286, 0xa080, 0x000b, 0xad00, 0x2098, 0xb284,
-+      0x0600, 0x0118, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x789b,
-+      0x0000, 0x8108, 0x81ac, 0x53a6, 0x014e, 0x013e, 0x015e, 0x0804,
-+      0x3beb, 0xd6d4, 0x1904, 0x34ac, 0x6820, 0xd084, 0x0904, 0x3beb,
-+      0xa68c, 0x0060, 0xa684, 0x0060, 0x0120, 0xa086, 0x0060, 0x1108,
-+      0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000,
-+      0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c,
-+      0x0904, 0x37d3, 0xa18c, 0x00f8, 0x1904, 0x37d3, 0x0156, 0x0136,
-+      0x0146, 0x0016, 0x20a1, 0x012b, 0x3208, 0xa18c, 0x0600, 0x0110,
-+      0x20a1, 0x022b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80,
-+      0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x6814, 0xc0fc,
-+      0x8007, 0x7882, 0x0804, 0x3beb, 0x6818, 0xd0fc, 0x0110, 0x681b,
-+      0x0008, 0x080c, 0x3a3c, 0x781b, 0x00ed, 0x0005, 0x2300, 0x0002,
-+      0x34bd, 0x357a, 0x34bb, 0x080c, 0x254c, 0x7cd8, 0x7ddc, 0x7fd0,
-+      0x82ff, 0x1528, 0x7200, 0xa286, 0x0003, 0x0904, 0x2ee6, 0x71d0,
-+      0xd1bc, 0x11f8, 0xd1b4, 0x01e8, 0x2001, 0x4601, 0x2004, 0xd0c4,
-+      0x11c0, 0x00d6, 0x783b, 0x8800, 0x781b, 0x0059, 0x70b8, 0xa06d,
-+      0x68b4, 0xc0a5, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2,
-+      0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030, 0x00de, 0x0030, 0x7200,
-+      0x0020, 0x783b, 0x1800, 0x781b, 0x0057, 0xa284, 0x000f, 0x0002,
-+      0x3565, 0x3522, 0x34fa, 0x2f15, 0x34f8, 0x3565, 0x34f8, 0x34f8,
-+      0x080c, 0x254c, 0x681c, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a,
-+      0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005, 0x1108, 0x6002,
-+      0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, 0x000e, 0x1120, 0x71c8,
-+      0xa188, 0x0100, 0x0028, 0x7030, 0x68ba, 0x713c, 0x70c8, 0xa108,
-+      0x2104, 0x6802, 0x2d0a, 0x715a, 0xd6dc, 0x1120, 0xc6fc, 0x6eb6,
-+      0x0804, 0x3565, 0x6eb6, 0xa684, 0x0060, 0x1120, 0xa684, 0x7fff,
-+      0x68b6, 0x04d8, 0xd6dc, 0x1150, 0xa684, 0x7fff, 0x68b6, 0x6894,
-+      0x68a6, 0x6898, 0x68aa, 0x080c, 0x3f26, 0x0478, 0xd6ac, 0x0140,
-+      0xa006, 0x080c, 0x3f26, 0x2408, 0x2510, 0x69aa, 0x6aa6, 0x0068,
-+      0x2408, 0x2510, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291,
-+      0x0000, 0x69aa, 0x6aa6, 0x080c, 0x3f26, 0xd6fc, 0x01b0, 0xa684,
-+      0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x1138, 0x2700, 0x8007,
-+      0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302,
-+      0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x7000, 0xa086, 0x0030,
-+      0x1904, 0x25a0, 0x7003, 0x0002, 0x70b8, 0xa06d, 0x68bc, 0x703e,
-+      0x70b4, 0xa065, 0x68c0, 0x7056, 0x2d00, 0x704a, 0xad80, 0x0009,
-+      0x7042, 0x0005, 0xa586, 0x8800, 0x1148, 0x7003, 0x0000, 0x6018,
-+      0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a, 0x0804, 0x3a36,
-+      0x7043, 0x0000, 0xa282, 0x0006, 0x0310, 0x080c, 0x254c, 0x2300,
-+      0x0002, 0x3594, 0x35a5, 0x35af, 0x2200, 0x0002, 0x359c, 0x3a36,
-+      0x359e, 0x359c, 0x35e0, 0x362e, 0x080c, 0x254c, 0x7a80, 0xa294,
-+      0x0f00, 0x080c, 0x3682, 0x0804, 0x3a0b, 0x00c1, 0x0002, 0x3a36,
-+      0x35ad, 0x35ad, 0x35e0, 0x35ad, 0x3a36, 0x080c, 0x254c, 0x0071,
-+      0x0002, 0x35b9, 0x35b7, 0x35b7, 0x35b9, 0x35b7, 0x35b9, 0x080c,
-+      0x254c, 0x080c, 0x3a4b, 0x781b, 0x0082, 0x0005, 0x7000, 0xa086,
-+      0x0002, 0x1150, 0x080c, 0x37be, 0x0010, 0x080c, 0x3f26, 0x6008,
-+      0xa084, 0xfbef, 0x600a, 0x0020, 0x7000, 0xa086, 0x0003, 0x0da8,
-+      0x7003, 0x0005, 0x2001, 0x8de0, 0xae8e, 0x4640, 0x0110, 0x2001,
-+      0x8e12, 0x2068, 0x704a, 0xad80, 0x0009, 0x7042, 0x2200, 0x0005,
-+      0x7000, 0xa086, 0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2, 0x2c00,
-+      0x70b6, 0x2d00, 0x70ba, 0x0038, 0x080c, 0x3f26, 0x0020, 0x7000,
-+      0xa086, 0x0003, 0x0dc8, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00,
-+      0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x8cc0,
-+      0xb284, 0x0600, 0x1118, 0xc2fd, 0x2069, 0x8dd0, 0x2d04, 0x2d08,
-+      0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, 0x0120, 0x6800, 0x0cb8,
-+      0x080c, 0x3682, 0x6eb4, 0x7e5a, 0x6920, 0xa184, 0x0c00, 0x0904,
-+      0x36a8, 0x7060, 0xa086, 0x0006, 0x1128, 0x7070, 0xa206, 0x1110,
-+      0x7062, 0x707a, 0x681b, 0x0005, 0xc1ad, 0x681b, 0x0005, 0xc1ad,
-+      0xc1d4, 0x6922, 0x080c, 0x3a42, 0x0804, 0x36a8, 0x7200, 0xa286,
-+      0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2, 0x2c00, 0x70b6, 0x2d00,
-+      0x70ba, 0x0030, 0x080c, 0x3f26, 0x0018, 0xa286, 0x0003, 0x0dd0,
-+      0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8,
-+      0xa484, 0x001f, 0xa215, 0xae86, 0x4640, 0x0108, 0xc2fd, 0x79a8,
-+      0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70c8, 0xa168, 0x2d04, 0x2d08,
-+      0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, 0x0118, 0x6800, 0x0cb8,
-+      0x0409, 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x0904, 0x36a8, 0xd0dc,
-+      0x0178, 0x7060, 0xa086, 0x0004, 0x1140, 0x7070, 0xa206, 0x1128,
-+      0x7074, 0xa306, 0x1110, 0x7062, 0x707a, 0x080c, 0x3a48, 0x0480,
-+      0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x080c, 0x3a42, 0x707b,
-+      0x0000, 0x0430, 0x7003, 0x0005, 0xb284, 0x0600, 0x0118, 0x2001,
-+      0x8de0, 0x0010, 0x2001, 0x8e12, 0x2068, 0x704a, 0x0156, 0x20a9,
-+      0x0032, 0x2003, 0x0000, 0x8000, 0x1f04, 0x3691, 0x015e, 0xb284,
-+      0x0600, 0x0110, 0xc2fc, 0x0008, 0xc2fd, 0x6a16, 0xad80, 0x0009,
-+      0x7042, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0005,
-+      0xc6ec, 0xa6ac, 0x0060, 0x0904, 0x36ef, 0x6b98, 0x6c94, 0x69ac,
-+      0x68b0, 0xa105, 0x11e0, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa586,
-+      0x0060, 0x05c8, 0xd6f4, 0x1108, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a,
-+      0x2009, 0x0083, 0xd69c, 0x0128, 0x2009, 0x0082, 0x2019, 0x0000,
-+      0x2320, 0x791a, 0xd6ec, 0x0588, 0x080c, 0x41d9, 0x0470, 0x68b0,
-+      0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x01f8, 0x7bd2, 0x7bda,
-+      0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x1108, 0xc6ed, 0xc6f4, 0x7e5a,
-+      0x2011, 0x0083, 0xd69c, 0x0128, 0x2011, 0x0082, 0x2019, 0x0000,
-+      0x2320, 0x7a1a, 0xd6ec, 0x0188, 0x080c, 0x4206, 0x0070, 0x2019,
-+      0x0000, 0x2320, 0x0010, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0083,
-+      0xd69c, 0x0110, 0x2009, 0x0082, 0x791a, 0x68c0, 0x7056, 0x2d00,
-+      0x704a, 0x68c4, 0x2060, 0x71d0, 0x2001, 0x4601, 0x2004, 0xd0c4,
-+      0x15c8, 0x70d4, 0xa02d, 0x01b8, 0xd1bc, 0x0548, 0x7a80, 0xa294,
-+      0x0f00, 0x70d8, 0xa206, 0x0118, 0x78e0, 0xa504, 0x1558, 0x70d6,
-+      0xc1bc, 0x71d2, 0x0438, 0x2031, 0x0001, 0x852c, 0x0218, 0x8633,
-+      0x8210, 0x0cd8, 0x0005, 0x7de0, 0xa594, 0xff00, 0x0130, 0x2011,
-+      0x0008, 0x852f, 0x0c81, 0x8637, 0x0008, 0x0c69, 0x8217, 0x7880,
-+      0xa084, 0x0f00, 0xa206, 0x0170, 0x72da, 0x76d6, 0x0058, 0x7a80,
-+      0xa294, 0x0f00, 0x70d8, 0xa236, 0x0dc0, 0x78e0, 0xa534, 0x0da8,
-+      0xc1bd, 0x71d2, 0xd1b4, 0x1904, 0x259d, 0x2300, 0xa405, 0x0904,
-+      0x259d, 0x70a0, 0xa086, 0x0001, 0x1904, 0x25e1, 0x0005, 0x6020,
-+      0xa005, 0x0150, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a,
-+      0x700f, 0x0100, 0x702c, 0x6026, 0x0005, 0xa006, 0x080c, 0x3f26,
-+      0x7000, 0xa086, 0x0002, 0x0120, 0x7060, 0xa086, 0x0005, 0x1150,
-+      0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040,
-+      0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0002, 0x25a0, 0x3783,
-+      0x3780, 0x37a0, 0x378c, 0x25a0, 0x377e, 0x377e, 0x080c, 0x254c,
-+      0x0449, 0x0411, 0x0028, 0x0431, 0x7058, 0x2060, 0x6800, 0x6002,
-+      0x080c, 0x1da2, 0x0804, 0x25a0, 0x7060, 0x7063, 0x0000, 0x707f,
-+      0x0000, 0x0002, 0x379c, 0x379c, 0x379a, 0x379a, 0x379a, 0x379c,
-+      0x379a, 0x379c, 0x0804, 0x2a6b, 0x7063, 0x0000, 0x0804, 0x25a0,
-+      0x681b, 0x0000, 0x0804, 0x3184, 0x6800, 0xa005, 0x1108, 0x6002,
-+      0x6006, 0x0005, 0x6410, 0x84ff, 0x0168, 0x2009, 0x4602, 0x2104,
-+      0x8001, 0x200a, 0x8421, 0x6412, 0x1128, 0x2021, 0x4604, 0x2404,
-+      0xc0a5, 0x2022, 0x6008, 0xc0a4, 0x600a, 0x0005, 0x6018, 0xa005,
-+      0x0110, 0x8001, 0x601a, 0x0005, 0x080c, 0x3c46, 0x681b, 0x0018,
-+      0x0490, 0x080c, 0x3c46, 0x681b, 0x0019, 0x0468, 0x080c, 0x3c46,
-+      0x681b, 0x001a, 0x0440, 0x080c, 0x3c46, 0x681b, 0x0003, 0x0418,
-+      0x7770, 0x080c, 0x3b6f, 0x7174, 0xa18c, 0x00ff, 0x3210, 0xa294,
-+      0x0600, 0x0118, 0xa1e8, 0x8bc0, 0x0010, 0xa1e8, 0x8cd0, 0x2d04,
-+      0x2d08, 0x2068, 0xa005, 0x1118, 0x707a, 0x0804, 0x25a0, 0x6814,
-+      0x7270, 0xa206, 0x0110, 0x6800, 0x0c98, 0x6800, 0x200a, 0x681b,
-+      0x0005, 0x707b, 0x0000, 0x080c, 0x37aa, 0x6820, 0xd084, 0x1110,
-+      0x080c, 0x37a4, 0x080c, 0x37be, 0x681f, 0x0000, 0x6823, 0x0020,
-+      0x080c, 0x1da2, 0x0804, 0x25a0, 0xa282, 0x0003, 0x1904, 0x3a10,
-+      0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xc1bd,
-+      0x6922, 0xd1c4, 0x05b0, 0xc1c4, 0x6922, 0xa6b4, 0x00ff, 0x0530,
-+      0xa682, 0x0018, 0x0218, 0x0110, 0x2031, 0x0018, 0xa686, 0x0010,
-+      0x1108, 0x8630, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3ac9,
-+      0x0118, 0x080c, 0x38f7, 0x00a0, 0x080c, 0x3a95, 0x080c, 0x38f4,
-+      0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118,
-+      0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x080c, 0x38f4,
-+      0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083,
-+      0x0005, 0x00c6, 0x7054, 0x2060, 0x6100, 0xd1e4, 0x0598, 0x6208,
-+      0x8217, 0xa294, 0x00ff, 0xa282, 0x0018, 0x0218, 0x0110, 0x2011,
-+      0x0018, 0x2600, 0xa202, 0x1208, 0x2230, 0xa686, 0x0010, 0x1108,
-+      0x8630, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130, 0xa282,
-+      0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c, 0x1210,
-+      0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228, 0x080c, 0x3a99,
-+      0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3ac9, 0x0118, 0x080c,
-+      0x38f7, 0x0020, 0x080c, 0x3a95, 0x080c, 0x38f4, 0x7858, 0xc095,
-+      0x785a, 0x00ce, 0x781b, 0x0082, 0x0005, 0x00c6, 0x2960, 0x6000,
-+      0xd0e4, 0x1188, 0xd0b4, 0x1150, 0x6010, 0xa084, 0x000f, 0x1130,
-+      0x6104, 0xa18c, 0xfff5, 0x6106, 0x00ce, 0x0005, 0x2011, 0x0032,
-+      0x2019, 0x0000, 0x00f0, 0x68a0, 0xd0cc, 0x1dc0, 0x6208, 0xa294,
-+      0x00ff, 0x78ec, 0xd0e4, 0x0130, 0xa282, 0x000b, 0x1218, 0x2011,
-+      0x000a, 0x0028, 0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x6308,
-+      0x831f, 0xa39c, 0x00ff, 0xa382, 0x0018, 0x0218, 0x0110, 0x2019,
-+      0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa,
-+      0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x080c, 0x3a55,
-+      0x00ce, 0x0005, 0x00c6, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106,
-+      0x2011, 0x0032, 0x2019, 0x0000, 0x0000, 0x78ab, 0x0001, 0x78ab,
-+      0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820,
-+      0xc0c5, 0x6822, 0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x00c6,
-+      0x7154, 0x2160, 0x2018, 0x2008, 0xa084, 0xffe0, 0xa635, 0x7e86,
-+      0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084, 0x7770, 0xa18c,
-+      0x000f, 0xa105, 0x2029, 0x4605, 0x252c, 0xd5cc, 0x0140, 0xd3a4,
-+      0x0110, 0xa085, 0x0800, 0xd3fc, 0x0110, 0xa085, 0x8080, 0x78a6,
-+      0x6016, 0x788a, 0xa6b4, 0x001f, 0x8637, 0x8204, 0x8004, 0xa605,
-+      0x600e, 0x6004, 0xa084, 0xffd5, 0x6006, 0x00ce, 0x0005, 0xa282,
-+      0x0002, 0x1904, 0x3a1a, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc,
-+      0x0568, 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x1a04,
-+      0x3a0b, 0x080c, 0x399e, 0x080c, 0x38f4, 0xa980, 0x0001, 0x200c,
-+      0x080c, 0x3b6b, 0x080c, 0x3895, 0x88ff, 0x0178, 0x789b, 0x0060,
-+      0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b,
-+      0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x7e58, 0xd6d4, 0x1118,
-+      0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0xa282, 0x0002,
-+      0x1218, 0xa284, 0x0001, 0x0140, 0x7154, 0xa188, 0x0000, 0x210c,
-+      0xd1ec, 0x1110, 0x2011, 0x0000, 0x080c, 0x3a87, 0x0479, 0x080c,
-+      0x38f4, 0x7858, 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x00c6,
-+      0x0026, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x1158, 0xd0bc,
-+      0x1138, 0x6014, 0xd0b4, 0x1120, 0xc1a4, 0x6106, 0xa006, 0x0088,
-+      0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003,
-+      0x7aaa, 0xa8c0, 0x0004, 0x080c, 0x3a55, 0x6820, 0xa085, 0x0200,
-+      0x6822, 0x002e, 0x00ce, 0x0005, 0x8807, 0xa715, 0x00c6, 0x2009,
-+      0x0000, 0x7054, 0x2060, 0x82ff, 0x0110, 0x2009, 0x0040, 0x6018,
-+      0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, 0xff9f, 0xa105, 0xc0ec,
-+      0xd0b4, 0x1108, 0xc0ed, 0x6100, 0xd1f4, 0x0110, 0xa085, 0x0020,
-+      0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, 0xffef, 0x6006, 0x00ce,
-+      0x0005, 0x0006, 0x7000, 0xa086, 0x0003, 0x0110, 0x000e, 0x0010,
-+      0x000e, 0x0488, 0xd6ac, 0x0578, 0x7888, 0xa084, 0x0040, 0x0558,
-+      0x7bb8, 0x8307, 0xa084, 0x007f, 0x1508, 0x8207, 0xa084, 0x00ff,
-+      0xa09e, 0x0001, 0x1904, 0x3a32, 0xd6f4, 0x11d0, 0x79d8, 0x7adc,
-+      0xa108, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x080c,
-+      0x42b5, 0x781b, 0x0080, 0xb284, 0x0600, 0x0118, 0x2001, 0x0000,
-+      0x0010, 0x2001, 0x0001, 0x080c, 0x4172, 0x0005, 0x080c, 0x254c,
-+      0x781b, 0x0080, 0x0005, 0x781b, 0x0083, 0x0005, 0x2039, 0x0000,
-+      0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x38f7,
-+      0x080c, 0x399c, 0x7e58, 0x080c, 0x3a4e, 0x781b, 0x0082, 0x0005,
-+      0x0cd1, 0x6820, 0xc0c4, 0x6822, 0x00c6, 0x7054, 0x2060, 0x080c,
-+      0x3921, 0x00b0, 0x0c81, 0x6820, 0xc0cc, 0x6822, 0x00c6, 0x7054,
-+      0x2060, 0x080c, 0x39bb, 0x0060, 0x0c31, 0x6820, 0xa084, 0xecff,
-+      0x6822, 0x00c6, 0x7054, 0x2060, 0x6004, 0xa084, 0xffc5, 0x6006,
-+      0x00ce, 0x0005, 0x0049, 0x781b, 0x0082, 0x0005, 0x6827, 0x0002,
-+      0x0049, 0x781b, 0x0082, 0x0005, 0x2001, 0x0005, 0x0088, 0x2001,
-+      0x000c, 0x0070, 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0040,
-+      0x2001, 0x000d, 0x0028, 0x2001, 0x0009, 0x0010, 0x2001, 0x0007,
-+      0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, 0x70d0, 0xd0b4, 0x0168,
-+      0xc0b4, 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef,
-+      0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x0005, 0x0076, 0x873f,
-+      0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, 0xa0e0, 0x4ac0, 0xae8e,
-+      0x4640, 0x0110, 0xa0e0, 0x4b40, 0xa7b8, 0x0020, 0x7f9a, 0x79a4,
-+      0xa184, 0x7fe0, 0x78ae, 0x6012, 0x79a4, 0xa184, 0x773f, 0x78a6,
-+      0x6016, 0x6004, 0xa085, 0x0038, 0x6006, 0x007e, 0x0005, 0x789b,
-+      0x0080, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa,
-+      0x789b, 0x0060, 0x78ab, 0x0004, 0x0800, 0x2031, 0x0000, 0x2029,
-+      0x0032, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+      0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x0804,
-+      0x3a55, 0x0156, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080,
-+      0x0020, 0x789a, 0x79a4, 0xa18c, 0xffe0, 0x2021, 0x3b54, 0x2019,
-+      0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xffe0,
-+      0xa106, 0x0128, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3abd, 0x015e,
-+      0x0005, 0x0156, 0x04f8, 0x2021, 0x3b62, 0x20a9, 0x0009, 0x2011,
-+      0x0029, 0xa582, 0x0028, 0x0550, 0x8420, 0x95a9, 0x2011, 0x0033,
-+      0xa582, 0x0033, 0x0618, 0x8420, 0x95a9, 0x2019, 0x000a, 0x2011,
-+      0x0065, 0x2200, 0xa502, 0x02d0, 0x8420, 0x2300, 0xa210, 0x1f04,
-+      0x3ae1, 0x015e, 0x0088, 0x2021, 0x3b54, 0x2019, 0x0011, 0x20a9,
-+      0x000e, 0x2011, 0x0033, 0x2200, 0xa502, 0x0240, 0x8420, 0x2300,
-+      0xa210, 0x1f04, 0x3af3, 0x015e, 0xa006, 0x0005, 0x8211, 0x015e,
-+      0xa582, 0x0064, 0x1220, 0x7808, 0xa085, 0x0070, 0x780a, 0x2404,
-+      0xa005, 0x0005, 0xa886, 0x0002, 0x01e8, 0x2021, 0x3b40, 0x20a9,
-+      0x000d, 0x2011, 0x0028, 0xa582, 0x0028, 0x0d48, 0x8420, 0x2019,
-+      0x0019, 0x2011, 0x0033, 0x2200, 0xa502, 0x0e00, 0x8420, 0x2300,
-+      0xa210, 0x1f04, 0x3b1b, 0x015e, 0x2011, 0x0184, 0xa582, 0x0185,
-+      0x0ab0, 0x0890, 0x2021, 0x3b4f, 0x20a9, 0x0003, 0x2011, 0x0024,
-+      0xa586, 0x0024, 0x0960, 0x8420, 0x2011, 0x0028, 0xa586, 0x0028,
-+      0x0930, 0x8420, 0x2019, 0x0019, 0x2011, 0x0033, 0x0804, 0x3af3,
-+      0x1021, 0x2202, 0x3403, 0x4604, 0x5805, 0x6a06, 0x7c07, 0x4610,
-+      0x4612, 0x5812, 0x5a12, 0x6a14, 0x6c14, 0x6e14, 0x7e17, 0x9021,
-+      0xb002, 0xe204, 0xe210, 0xe210, 0x1209, 0x3002, 0x3202, 0x4203,
-+      0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07,
-+      0x0c07, 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06,
-+      0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0080, 0xa046, 0x0005, 0xa784,
-+      0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003,
-+      0xa105, 0xd7fc, 0x0118, 0xa0e0, 0x6bc0, 0x0010, 0xa0e0, 0x4bc0,
-+      0x0005, 0x00e6, 0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009,
-+      0x4680, 0x2071, 0x4680, 0x0030, 0x2009, 0x4640, 0x2079, 0x0200,
-+      0x2071, 0x4640, 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002,
-+      0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba0, 0x3ba0,
-+      0x080c, 0x254c, 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005,
-+      0x0580, 0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828,
-+      0xa086, 0x1814, 0x1530, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004,
-+      0x1de0, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, 0x1de0, 0x7830,
-+      0xd0bc, 0x11b8, 0xb284, 0x0800, 0x0118, 0x0104, 0x3bd9, 0x0010,
-+      0x0304, 0x3bd9, 0x79e4, 0xa184, 0x0030, 0x0158, 0x78ec, 0xa084,
-+      0x0003, 0x0138, 0x681c, 0xd0ac, 0x1110, 0x00d9, 0x0010, 0x781b,
-+      0x00fb, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x4601, 0x2004, 0xd0ac,
-+      0x1118, 0x6814, 0x080c, 0x2475, 0x0005, 0x781b, 0x0083, 0x0005,
-+      0x781b, 0x0082, 0x0005, 0x781b, 0x0071, 0x0005, 0x781b, 0x006e,
-+      0x0005, 0x2009, 0x4619, 0x210c, 0xa186, 0x0000, 0x0150, 0xa186,
-+      0x0001, 0x0150, 0x701f, 0x000b, 0x7063, 0x0001, 0x781b, 0x0054,
-+      0x0005, 0x781b, 0x00f3, 0x0005, 0x701f, 0x000a, 0x0005, 0x2009,
-+      0x4619, 0x210c, 0xa186, 0x0000, 0x0168, 0xa186, 0x0001, 0x0138,
-+      0x701f, 0x000b, 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x701f,
-+      0x000a, 0x0005, 0x781b, 0x00f2, 0x0005, 0x781b, 0x00fb, 0x0005,
-+      0x781b, 0x00fa, 0x0005, 0x781b, 0x00cc, 0x0005, 0x781b, 0x00cb,
-+      0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x7063, 0x0001,
-+      0x781b, 0x0054, 0x0005, 0x7830, 0xa084, 0x00c0, 0x1170, 0x7808,
-+      0xc08c, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084,
-+      0x0021, 0x0118, 0x7808, 0xc08d, 0x780a, 0x0005, 0x7808, 0xc08d,
-+      0x780a, 0x0005, 0x7830, 0xa084, 0x0040, 0x1de0, 0xb284, 0x0800,
-+      0x0118, 0x1104, 0x3c58, 0x0010, 0x1304, 0x3c58, 0x78ac, 0x0005,
-+      0x7808, 0xa084, 0xfffd, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000,
-+      0x78ec, 0xa084, 0x0021, 0x0140, 0xb284, 0x0800, 0x0118, 0x1104,
-+      0x3c67, 0x0010, 0x1304, 0x3c6a, 0x78ac, 0x0006, 0x7808, 0xa085,
-+      0x0002, 0x780a, 0x000e, 0x0005, 0xa784, 0x0001, 0x1904, 0x322a,
-+      0xa784, 0x0070, 0x0140, 0x00c6, 0x2d60, 0x2f68, 0x080c, 0x2467,
-+      0x2d78, 0x2c68, 0x00ce, 0xa784, 0x0008, 0x0148, 0x784b, 0x0008,
-+      0x78ec, 0xa084, 0x0003, 0x0904, 0x322a, 0x0804, 0x3be5, 0xa784,
-+      0x0004, 0x01c8, 0x78b8, 0xa084, 0x8000, 0x01a8, 0x784b, 0x0008,
-+      0x78ec, 0xa084, 0x0003, 0x0904, 0x322a, 0x78e4, 0xa084, 0x0007,
-+      0xa086, 0x0001, 0x1140, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a,
-+      0x781b, 0x00fb, 0x0005, 0xa784, 0x0080, 0x0140, 0x7884, 0xd0fc,
-+      0x0128, 0x080c, 0x3a32, 0x681b, 0x0022, 0x0005, 0x681b, 0x0003,
-+      0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000,
-+      0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x2b89, 0xb284,
-+      0x0800, 0x0110, 0x0104, 0x259d, 0x0304, 0x259d, 0x6b14, 0x8307,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0118, 0xa080,
-+      0x4b40, 0x0010, 0xa080, 0x4ac0, 0x2060, 0x2048, 0x7056, 0x2a60,
-+      0x0005, 0x00c6, 0x2960, 0x6000, 0xd0ac, 0x0904, 0x3d2f, 0x68a0,
-+      0xd1ac, 0x1120, 0xa084, 0x0e00, 0x0904, 0x3d2d, 0x6108, 0x8117,
-+      0xa18c, 0x00ff, 0x631c, 0x832f, 0xd0dc, 0x0110, 0xa39d, 0x0001,
-+      0xd0cc, 0x11c8, 0xa584, 0x00ff, 0x0138, 0x78ec, 0xd0e4, 0x0110,
-+      0x8213, 0x00b8, 0x2029, 0x0000, 0xa182, 0x000c, 0x1290, 0x78ec,
-+      0xd0e4, 0x1118, 0x2009, 0x000c, 0x0060, 0xa182, 0x000b, 0x1248,
-+      0x2009, 0x000a, 0x0030, 0x2009, 0x0032, 0x2011, 0x0000, 0x2029,
-+      0x0000, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x79aa,
-+      0x78ab, 0x0000, 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, 0x0008, 0x6820,
-+      0xa085, 0x1000, 0x6822, 0x080c, 0x3a55, 0xa085, 0x0001, 0x00ce,
-+      0x0005, 0xa282, 0x0006, 0x1904, 0x3a24, 0x7da8, 0x7eac, 0x8637,
-+      0xa5ac, 0x00ff, 0xa6b4, 0x00ff, 0x7fac, 0x8747, 0xa7bc, 0x00ff,
-+      0xa8c4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1e4, 0x0904, 0x3da3,
-+      0xa18c, 0xecff, 0x6922, 0xa782, 0x0002, 0x1a04, 0x39fe, 0xa6b4,
-+      0x00ff, 0x0904, 0x3da0, 0xa682, 0x0031, 0x1a04, 0x39fe, 0xa582,
-+      0x0009, 0x0a04, 0x39fe, 0xa882, 0x0003, 0x1a04, 0x39fe, 0xa886,
-+      0x0002, 0x01d0, 0xa886, 0x0000, 0x1904, 0x39fe, 0x2001, 0x000c,
-+      0x79ec, 0xd1e4, 0x0110, 0x2001, 0x000a, 0xa502, 0x1290, 0x080c,
-+      0x39fe, 0x00c6, 0x2960, 0x6004, 0xa085, 0x001a, 0x6006, 0x6000,
-+      0xc0ac, 0x6002, 0x00ce, 0x0005, 0xa786, 0x0000, 0x0904, 0x39fe,
-+      0x8634, 0xa682, 0x0018, 0x0228, 0x0120, 0x2031, 0x0018, 0x0804,
-+      0x3df1, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x080c,
-+      0x3ac9, 0x0904, 0x39fe, 0x080c, 0x38f7, 0x080c, 0x399c, 0x7e58,
-+      0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005,
-+      0x080c, 0x38f4, 0x0c90, 0xa886, 0x0002, 0x1108, 0x8634, 0x7154,
-+      0xa188, 0x0000, 0x210c, 0xd1ac, 0x0904, 0x39fe, 0xd1ec, 0x1120,
-+      0x2039, 0x0000, 0x2041, 0x0000, 0xd1e4, 0x1120, 0x2031, 0x0000,
-+      0x2041, 0x0000, 0xa782, 0x0002, 0x12c8, 0x621c, 0xa284, 0x00ff,
-+      0xa706, 0x0110, 0x2039, 0x0000, 0xa605, 0x0190, 0x6108, 0x811f,
-+      0xa39c, 0x00ff, 0x0168, 0xa302, 0x1208, 0x2330, 0x8807, 0xa705,
-+      0xa086, 0x0201, 0x0160, 0xa886, 0x0000, 0x0168, 0x2039, 0x0000,
-+      0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x0070, 0xa284,
-+      0xff00, 0x1108, 0x2040, 0xa184, 0x00ff, 0xa502, 0x0108, 0x2128,
-+      0x852b, 0x852b, 0x080c, 0x3ac9, 0x0d58, 0x080c, 0x38f7, 0x080c,
-+      0x399c, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab,
-+      0x0004, 0x7daa, 0x78ab, 0x0000, 0x7eaa, 0x7faa, 0x2800, 0x78aa,
-+      0x789b, 0x0060, 0x78ab, 0x0008, 0x6820, 0xc0e5, 0x6822, 0x080c,
-+      0x3a55, 0x7858, 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x0020,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000,
-+      0x0020, 0x0062, 0x0009, 0x0014, 0x0014, 0x9855, 0x984d, 0x0014,
-+      0x9911, 0x98ff, 0x0014, 0x0014, 0x0090, 0x00e7, 0x0100, 0x0402,
-+      0x2008, 0xf880, 0x0018, 0x0017, 0x840f, 0xd8c1, 0x0014, 0x0016,
-+      0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0x2500, 0x0013, 0x2500,
-+      0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
-+      0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0xa200, 0x3806,
-+      0x8839, 0x20c4, 0x0864, 0xa850, 0x3008, 0x28c1, 0x9d18, 0xa201,
-+      0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a,
-+      0xa808, 0x28e2, 0x9cce, 0xa8f3, 0x0864, 0xa83e, 0x300c, 0xa801,
-+      0x3008, 0x28e1, 0x9cce, 0x28a2, 0x7163, 0xa831, 0x2021, 0xa818,
-+      0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, 0x6fc0, 0x67a4, 0x6c80,
-+      0x0212, 0xa205, 0x883d, 0x882b, 0x1814, 0x883b, 0x7027, 0x85f2,
-+      0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa813, 0x883e, 0xa811,
-+      0x2882, 0x7162, 0xa814, 0x280a, 0xa204, 0x64c0, 0x6de0, 0x67a0,
-+      0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa802, 0x7861,
-+      0x883e, 0x206a, 0x28c1, 0x9d18, 0x2042, 0x2101, 0xa8ca, 0x2902,
-+      0xa20e, 0xa80b, 0xa207, 0x0014, 0xa203, 0x8000, 0x85a4, 0x1872,
-+      0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x7121, 0x0014,
-+      0x0704, 0x3008, 0x9cce, 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009,
-+      0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861,
-+      0xa8eb, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532,
-+      0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8,
-+      0xd6e0, 0x1fe6, 0x0014, 0x3008, 0x8000, 0x2849, 0x1011, 0xa8fc,
-+      0x3008, 0x8000, 0xa000, 0x2081, 0x2802, 0x1011, 0xa8fc, 0xa889,
-+      0x3008, 0x20a1, 0x283c, 0x1011, 0xa8fc, 0xa209, 0x0017, 0x300c,
-+      0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0x0210, 0xa801, 0x0014,
-+      0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, 0x18f2, 0x0014, 0xa20b,
-+      0x0014, 0xa20d, 0x3806, 0x0210, 0x9d22, 0x0704, 0xa206, 0x6865,
-+      0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa,
-+      0x8160, 0x842a, 0x8180, 0xf021, 0x3008, 0x84a8, 0x11d7, 0x7042,
-+      0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x0000, 0x0126, 0x70d0,
-+      0xa084, 0x4c00, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205,
-+      0x11a0, 0x720c, 0x82ff, 0x0128, 0x8aff, 0x1178, 0x7200, 0xd284,
-+      0x1160, 0x7804, 0xd0cc, 0x0110, 0x080c, 0x4328, 0x7007, 0x0008,
-+      0x7003, 0x0008, 0x012e, 0x2000, 0x0005, 0x7000, 0xa084, 0x0003,
-+      0x7002, 0xc69c, 0xd084, 0x0588, 0x7108, 0xe000, 0x7008, 0xa106,
-+      0x1dd8, 0xa184, 0x0003, 0x0904, 0x3fa2, 0xa184, 0x01e0, 0x1904,
-+      0x3fa2, 0xd1f4, 0x1d88, 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60,
-+      0x2011, 0x0180, 0x710c, 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20,
-+      0x700c, 0xa106, 0x0dc0, 0x7007, 0x0012, 0x7108, 0xe000, 0x7008,
-+      0xa106, 0x1dd8, 0xa184, 0x0003, 0x0568, 0xd194, 0x0db0, 0xd1f4,
-+      0x0548, 0x7007, 0x0002, 0x0880, 0x0428, 0x7108, 0xd1fc, 0x0130,
-+      0x080c, 0x40ae, 0x8aff, 0x0904, 0x3f2c, 0x0cb8, 0x700c, 0xa08c,
-+      0x07ff, 0x01e8, 0x7004, 0xd084, 0x0178, 0x7014, 0xa005, 0x1148,
-+      0x7010, 0x7310, 0xa306, 0x1de0, 0x2300, 0xa005, 0x0128, 0xa102,
-+      0x1e20, 0x7007, 0x0010, 0x0030, 0x8aff, 0x0148, 0x080c, 0x426b,
-+      0x1de8, 0x09d8, 0x080c, 0x4034, 0x012e, 0x2000, 0x0005, 0x7204,
-+      0x7108, 0xc19c, 0x8103, 0x1218, 0x7007, 0x0002, 0x0cc0, 0xa205,
-+      0x1d88, 0x7007, 0x0008, 0x7003, 0x0008, 0x0006, 0x2001, 0x4601,
-+      0x2004, 0xd0cc, 0x0110, 0x080c, 0x4328, 0x000e, 0x012e, 0x2000,
-+      0x0005, 0x6428, 0x84ff, 0x0508, 0x2c70, 0x7004, 0xa0bc, 0x000f,
-+      0xa7b8, 0x3ff5, 0x273c, 0x87fb, 0x1148, 0x0210, 0x080c, 0x254c,
-+      0x609c, 0xa075, 0x0190, 0x0c88, 0x2039, 0x3fea, 0x2704, 0xae68,
-+      0x6808, 0xa630, 0x680c, 0xa529, 0x8421, 0x0138, 0x8738, 0x2704,
-+      0xa005, 0x1da8, 0x709c, 0xa075, 0x1d00, 0x0005, 0x0000, 0x0005,
-+      0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003,
-+      0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x3fea, 0x3fe7,
-+      0x0000, 0x0000, 0x8000, 0x0000, 0x3fea, 0x0000, 0x3ff2, 0x3fef,
-+      0x0000, 0x0000, 0x0000, 0x0000, 0x3ff2, 0x0000, 0x3fed, 0x3fed,
-+      0x0000, 0x0000, 0x8000, 0x0000, 0x3fed, 0x0000, 0x3ff3, 0x3ff3,
-+      0x0000, 0x0000, 0x0000, 0x0000, 0x3ff3, 0x2079, 0x4600, 0x2071,
-+      0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001, 0x2009,
-+      0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003,
-+      0x0000, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1128, 0x8109, 0x0118,
-+      0x2071, 0x0020, 0x0c80, 0x0005, 0x7004, 0x8004, 0x1a04, 0x408a,
-+      0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c,
-+      0x40e6, 0x0804, 0x40aa, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108,
-+      0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c, 0x40e6,
-+      0x0804, 0x40aa, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0190, 0xa386,
-+      0x0008, 0x01c0, 0x7004, 0xd084, 0x1148, 0x7108, 0x7008, 0xa106,
-+      0x1de0, 0xa184, 0x0003, 0x0110, 0x0804, 0x40e6, 0xa386, 0x200c,
-+      0x19f0, 0x7200, 0x8204, 0x0230, 0x730c, 0xa384, 0x07ff, 0x0110,
-+      0x080c, 0x254c, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
-+      0x0118, 0x080c, 0x40e6, 0x0470, 0x7007, 0x0012, 0x7000, 0xd084,
-+      0x1148, 0x7310, 0x7014, 0xa305, 0x0128, 0x710c, 0xa184, 0x07ff,
-+      0x1904, 0x4034, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
-+      0x0118, 0x080c, 0x40e6, 0x00b0, 0x7007, 0x0012, 0x7007, 0x0008,
-+      0x7004, 0xd09c, 0x1de8, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184,
-+      0x01e0, 0x0118, 0x080c, 0x40e6, 0x0028, 0x7007, 0x0012, 0x7108,
-+      0x8103, 0x0e88, 0x7003, 0x0008, 0x0005, 0x7108, 0xa184, 0x01e0,
-+      0x15a8, 0x7108, 0xa184, 0x01e0, 0x1588, 0xa184, 0x0007, 0x0002,
-+      0x40c2, 0x40d0, 0x40c0, 0x40d0, 0x40c0, 0x4120, 0x40c0, 0x411e,
-+      0x080c, 0x254c, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff,
-+      0x1118, 0x2049, 0x0000, 0x0005, 0x080c, 0x426b, 0x1de8, 0x0005,
-+      0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x1140,
-+      0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0108, 0x0030,
-+      0x8aff, 0x0118, 0x080c, 0x426b, 0x1de8, 0x0005, 0x7007, 0x0012,
-+      0x7108, 0x1d04, 0x40e9, 0x2091, 0x6000, 0x1d04, 0x40ed, 0x2091,
-+      0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8,
-+      0x7007, 0x0012, 0x7108, 0xd1fc, 0x1dd8, 0x7003, 0x0000, 0x7000,
-+      0xa005, 0x1130, 0x7004, 0xa005, 0x1118, 0x700c, 0xa005, 0x0108,
-+      0x0c40, 0x2049, 0x0000, 0xb284, 0x0200, 0x0118, 0x2001, 0x0000,
-+      0x0010, 0x2001, 0x0001, 0x080c, 0x3b81, 0x681b, 0x0002, 0x2051,
-+      0x0000, 0x0005, 0x080c, 0x254c, 0x080c, 0x254c, 0x080c, 0x415f,
-+      0x7210, 0x7114, 0x700c, 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211,
-+      0xa189, 0x0000, 0x04a1, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200,
-+      0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238,
-+      0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60,
-+      0x8a07, 0x0006, 0x6004, 0xd09c, 0x0118, 0xa7ba, 0x3fef, 0x0010,
-+      0xa7ba, 0x3fe7, 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92,
-+      0x6b8e, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110,
-+      0x080c, 0x40e6, 0x7007, 0x0012, 0x080c, 0x4034, 0x0005, 0x8a50,
-+      0x8739, 0x2704, 0xa004, 0x1168, 0x6000, 0xa064, 0x1108, 0x2d60,
-+      0x6004, 0xa084, 0x000f, 0xa080, 0x4005, 0x203c, 0x87fb, 0x090c,
-+      0x254c, 0x0005, 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004,
-+      0x2090, 0x00de, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057,
-+      0xaad4, 0x00ff, 0xa084, 0x00ff, 0x0006, 0x6804, 0xa084, 0x0008,
-+      0x000e, 0x0118, 0xa0b8, 0x3fef, 0x0010, 0xa0b8, 0x3fe7, 0xb284,
-+      0x0200, 0x0110, 0x7e20, 0x0008, 0x7e24, 0xa6b5, 0x000c, 0x681c,
-+      0xd0b4, 0x0108, 0xc685, 0x2400, 0xa305, 0x0518, 0x2c58, 0x2704,
-+      0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e,
-+      0xd19c, 0x0140, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081,
-+      0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300,
-+      0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x080c, 0x4292,
-+      0x0010, 0x080c, 0x426b, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126,
-+      0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x7007,
-+      0x0004, 0x7004, 0xd094, 0x1de8, 0x7003, 0x0008, 0x012e, 0x2000,
-+      0x0005, 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090,
-+      0x00de, 0x7e20, 0xb284, 0x0200, 0x1108, 0x7e24, 0xa6b5, 0x000c,
-+      0x681c, 0xd0ac, 0x1118, 0xc685, 0x7003, 0x0000, 0x6828, 0x2050,
-+      0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x3ff5, 0x273c, 0x87fb,
-+      0x1138, 0x0210, 0x080c, 0x254c, 0x689c, 0xa065, 0x0120, 0x0c88,
-+      0x080c, 0x426b, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x0006,
-+      0x0016, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x7e20,
-+      0xb284, 0x0200, 0x1108, 0x7e24, 0x00de, 0x003e, 0x004e, 0xa6b5,
-+      0x000c, 0x681c, 0xd0b4, 0x0128, 0xc685, 0x7003, 0x0000, 0x7007,
-+      0x0004, 0x2049, 0x4206, 0x6828, 0xa055, 0x00d6, 0x0904, 0x4267,
-+      0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3ff5, 0x273c,
-+      0x87fb, 0x1140, 0x0210, 0x080c, 0x254c, 0x709c, 0xa075, 0x2060,
-+      0x0570, 0x0c80, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b,
-+      0x0268, 0x8a51, 0x1110, 0x080c, 0x254c, 0x8738, 0x2704, 0xa005,
-+      0x1d90, 0x709c, 0xa075, 0x2060, 0x01d0, 0x08e0, 0x8422, 0x8420,
-+      0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300,
-+      0xa11b, 0x1210, 0x080c, 0x254c, 0xb284, 0x0200, 0x0118, 0x2071,
-+      0x0050, 0x0010, 0x2071, 0x0020, 0x00de, 0x0804, 0x419b, 0x00de,
-+      0x012e, 0x2000, 0x0005, 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e,
-+      0x0110, 0xa006, 0x0005, 0xa084, 0x0003, 0xa086, 0x0003, 0x1108,
-+      0x0005, 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, 0x7808,
-+      0x7012, 0x780c, 0x7016, 0x6004, 0xd09c, 0x0120, 0x7810, 0x7022,
-+      0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006,
-+      0x2079, 0x4600, 0x8a51, 0x01e8, 0x8738, 0x2704, 0xa005, 0x1168,
-+      0x609c, 0xa005, 0x01b8, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080,
-+      0x3ff5, 0x203c, 0x87fb, 0x090c, 0x254c, 0x7008, 0x0006, 0xa084,
-+      0x01e0, 0x000e, 0x0110, 0xa006, 0x0028, 0xa084, 0x0003, 0xa086,
-+      0x0003, 0x0005, 0x2051, 0x0000, 0x0005, 0x0126, 0x0006, 0x00d6,
-+      0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x008e, 0x7108,
-+      0xa184, 0x0003, 0x1128, 0x6828, 0xa005, 0x0178, 0x0804, 0x3f45,
-+      0x7108, 0xd1fc, 0x0118, 0x080c, 0x40ae, 0x0c88, 0x7007, 0x0010,
-+      0x7108, 0xd1fc, 0x0de8, 0x080c, 0x40ae, 0x7008, 0xa086, 0x0008,
-+      0x1d30, 0x7000, 0xa005, 0x1d18, 0x7003, 0x0000, 0x2049, 0x0000,
-+      0x0006, 0x2001, 0x4601, 0x2004, 0xd0cc, 0x0110, 0x080c, 0x4328,
-+      0x000e, 0x012e, 0x2000, 0x0005, 0x0126, 0x0146, 0x0136, 0x0156,
-+      0x00c6, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de,
-+      0x2049, 0x42ec, 0xad80, 0x0011, 0x20a0, 0xb284, 0x0200, 0x0118,
-+      0x2099, 0x0032, 0x0010, 0x2099, 0x0031, 0x700c, 0xa084, 0x07ff,
-+      0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0118,
-+      0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x07ff, 0x0130, 0x7007,
-+      0x0004, 0x7004, 0xa084, 0x0004, 0x1de0, 0x00ce, 0x2049, 0x0000,
-+      0x7003, 0x0000, 0x015e, 0x013e, 0x014e, 0x012e, 0x2000, 0x0005,
-+      0x6814, 0xd0fc, 0x0904, 0x436b, 0x7000, 0xd084, 0x05e0, 0x7e24,
-+      0xa6b5, 0x0004, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x1de0,
-+      0x7118, 0x0016, 0x711c, 0x0016, 0x7120, 0x0016, 0x7124, 0x0016,
-+      0x701b, 0x0000, 0x701f, 0x3fff, 0x7023, 0x0000, 0x7027, 0x0000,
-+      0x7013, 0x0004, 0x7017, 0x0000, 0x7602, 0x7007, 0x0001, 0x2001,
-+      0xffff, 0x2009, 0x0031, 0x200a, 0x200a, 0x7108, 0x7008, 0xa106,
-+      0x1de0, 0xd1fc, 0x0dd0, 0x002e, 0x7226, 0x002e, 0x7222, 0x002e,
-+      0x721e, 0x002e, 0x721a, 0x7007, 0x0002, 0x7008, 0xa086, 0x0008,
-+      0x0110, 0x0804, 0x40e6, 0x7007, 0x0004, 0x7003, 0x0000, 0x0005,
-+      0x2091, 0x8000, 0x2091, 0x6000, 0x78ac, 0xa005, 0x1168, 0x7974,
-+      0x70d0, 0xa106, 0x1148, 0x781c, 0xa005, 0x0130, 0x781f, 0x0000,
-+      0x0e04, 0x4384, 0x2091, 0x4080, 0x2069, 0x4680, 0xd7fc, 0x1110,
-+      0x2069, 0x4640, 0x6800, 0xa084, 0x000f, 0x1198, 0x68d0, 0xd0b4,
-+      0x0180, 0xd0bc, 0x1170, 0x00f6, 0x2079, 0x0100, 0xd7fc, 0x1110,
-+      0x2079, 0x0200, 0x7830, 0xa084, 0x00c0, 0x1110, 0x080c, 0x22ae,
-+      0x00fe, 0x7830, 0x8001, 0x7832, 0x1904, 0x440b, 0x7834, 0x7832,
-+      0x2061, 0x6bc0, 0x2069, 0x4680, 0xc7fd, 0x68cc, 0xa005, 0x0128,
-+      0x8001, 0x68ce, 0x1110, 0x080c, 0x4577, 0x6800, 0xa084, 0x000f,
-+      0x0168, 0xa086, 0x0001, 0x0150, 0x6840, 0xa00d, 0x0138, 0x2104,
-+      0xa005, 0x0120, 0x8001, 0x200a, 0x0904, 0x4514, 0x6814, 0xa005,
-+      0x01a8, 0x8001, 0x6816, 0x1190, 0x68a3, 0x0001, 0x00f6, 0xd7fc,
-+      0x1118, 0x2079, 0x0200, 0x0010, 0x2079, 0x0100, 0x080c, 0x3c46,
-+      0x00fe, 0x6860, 0xa005, 0x0110, 0x080c, 0x22ae, 0x687c, 0xa005,
-+      0x0140, 0x8001, 0x687e, 0x1128, 0x6863, 0x0000, 0x68d0, 0xc0c5,
-+      0x68d2, 0x68d0, 0xd0fc, 0x01b0, 0xc0fc, 0x68d2, 0x20a9, 0x0200,
-+      0x6034, 0xa005, 0x0158, 0x8001, 0x6036, 0x68d0, 0xc0fd, 0x68d2,
-+      0x1128, 0x6010, 0xa005, 0x0110, 0x080c, 0x22ae, 0xace0, 0x0010,
-+      0x1f04, 0x43f0, 0xd7fc, 0x0138, 0x2061, 0x4bc0, 0x2069, 0x4640,
-+      0xc7fc, 0x0804, 0x43ad, 0x0459, 0x7838, 0x8001, 0x783a, 0x11a0,
-+      0x783c, 0x783a, 0x2061, 0x4bc0, 0x2069, 0x4640, 0xc7fc, 0x680c,
-+      0xa005, 0x0110, 0x080c, 0x4487, 0xd7fc, 0x1130, 0x2061, 0x6bc0,
-+      0x2069, 0x4680, 0xc7fd, 0x0c98, 0x7810, 0xd0cc, 0x0168, 0xd0ac,
-+      0x1120, 0xd0a4, 0x0148, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0e04,
-+      0x4433, 0x080c, 0x207a, 0x0005, 0x2091, 0x8001, 0x0005, 0x7840,
-+      0x8001, 0x7842, 0x1904, 0x4486, 0x7844, 0x7842, 0x2069, 0x4640,
-+      0xc7fc, 0x2079, 0x0200, 0x68d4, 0xa005, 0x0138, 0x7de0, 0xa504,
-+      0x1120, 0x68d6, 0x68d0, 0xc0bc, 0x68d2, 0x2079, 0x4600, 0x6810,
-+      0xa005, 0x1110, 0x2001, 0x0101, 0x8001, 0x6812, 0xd7fc, 0x0118,
-+      0xa080, 0x8cd0, 0x0010, 0xa080, 0x8bc0, 0x2040, 0x2004, 0xa065,
-+      0x01e0, 0x6024, 0xa005, 0x01b0, 0x8001, 0x6026, 0x1198, 0x6800,
-+      0xa005, 0x0130, 0x6848, 0xac06, 0x1118, 0x080c, 0x4514, 0x0068,
-+      0x6860, 0xa005, 0x0118, 0x6027, 0x0001, 0x0020, 0x080c, 0x44c8,
-+      0x2804, 0x0c28, 0x6000, 0x2c40, 0x0c10, 0xd7fc, 0x1138, 0x2069,
-+      0x4680, 0xc7fd, 0x2079, 0x0100, 0x0804, 0x4443, 0x0005, 0x2009,
-+      0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0558, 0x6024, 0xa005,
-+      0x0118, 0x8001, 0x6026, 0x0418, 0x6008, 0xc09c, 0xd084, 0x1110,
-+      0xd0ac, 0x01c0, 0x600a, 0x6004, 0xa005, 0x01d8, 0x00d6, 0x00c6,
-+      0x0016, 0x2068, 0x6010, 0x8001, 0x6012, 0x080c, 0x37a4, 0x2d00,
-+      0x2c68, 0x2060, 0x080c, 0x1be3, 0x080c, 0x1d95, 0x001e, 0x00ce,
-+      0x00de, 0x0038, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0010, 0xa18d,
-+      0x0100, 0xace0, 0x0010, 0x1f04, 0x448b, 0xa184, 0x0001, 0x0130,
-+      0xa18c, 0xfffe, 0x690e, 0x080c, 0x22ae, 0x0008, 0x690e, 0x0005,
-+      0x2c00, 0x687a, 0x6714, 0x6f72, 0x6017, 0x0000, 0x602b, 0x0000,
-+      0x601b, 0x0006, 0x60b4, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084,
-+      0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6858, 0xac06,
-+      0x1110, 0x2800, 0x685a, 0x080c, 0x1b7b, 0x6818, 0xa005, 0x0110,
-+      0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, 0x7908, 0x8109,
-+      0x790a, 0x8001, 0x1310, 0x080c, 0x254c, 0x6812, 0x1118, 0x7910,
-+      0xc1a5, 0x7912, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x080c,
-+      0x1da2, 0xd7fc, 0x1118, 0x2069, 0x4640, 0x0010, 0x2069, 0x4680,
-+      0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x1118, 0x6976, 0x2001,
-+      0x0004, 0x080c, 0x22a4, 0x0005, 0x00d6, 0x6948, 0x2160, 0xd7fc,
-+      0x1118, 0x2069, 0x0200, 0x0010, 0x2069, 0x0100, 0x080c, 0x2467,
-+      0x601b, 0x0006, 0x6858, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084,
-+      0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000,
-+      0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x01b0, 0x684b,
-+      0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x453b,
-+      0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04,
-+      0x4544, 0x20a9, 0x00fa, 0x1f04, 0x454b, 0x681b, 0x0054, 0x00de,
-+      0x6863, 0x0007, 0x0005, 0x2079, 0x4600, 0x00e1, 0x0089, 0x00a9,
-+      0x2009, 0x0002, 0x2069, 0x4680, 0x680f, 0x0000, 0x6813, 0x0000,
-+      0x6817, 0x0000, 0x8109, 0x0118, 0x2069, 0x4640, 0x0ca8, 0x0005,
-+      0x2019, 0x00a3, 0x7b3a, 0x7b3e, 0x0005, 0x2019, 0x0033, 0x7b42,
-+      0x7b46, 0x0005, 0x2019, 0x32dd, 0x7b32, 0x7b36, 0x0005, 0x6a4c,
-+      0xa285, 0x0000, 0x01f0, 0x6950, 0x6bbc, 0xa300, 0x00c6, 0x2164,
-+      0x6304, 0x83ff, 0x1138, 0x8211, 0x0148, 0x8108, 0xa11a, 0x0eb8,
-+      0x69bc, 0x0ca8, 0x68cf, 0x000a, 0x00ce, 0x0005, 0x694c, 0x6abc,
-+      0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, 0x8109, 0x1dc8, 0x694e,
-+      0x00ce, 0x0005, 0x1d04, 0x459a, 0x2091, 0x6000, 0x1d04, 0x459e,
-+      0x2091, 0x6000, 0x70ec, 0xd0dc, 0x1118, 0xd0d4, 0x0190, 0x0098,
-+      0xae8e, 0x0100, 0x0138, 0x7814, 0xc0f5, 0xc0c5, 0x7816, 0xd0d4,
-+      0x1578, 0x0458, 0x7814, 0xc0fd, 0xc0c5, 0x7816, 0xd0d4, 0x1540,
-+      0x0420, 0xd0e4, 0x0538, 0x1d04, 0x45bb, 0x2091, 0x6000, 0x2009,
-+      0x000c, 0x1d04, 0x45c1, 0x2091, 0x6000, 0x8109, 0x1dd0, 0x70e4,
-+      0xa084, 0x01ff, 0xa086, 0x01ff, 0x1110, 0x70ec, 0x08c8, 0xae8e,
-+      0x0100, 0x0128, 0x7814, 0xc0f4, 0xd0fc, 0x1130, 0x0020, 0x7814,
-+      0xc0fc, 0xd0f4, 0x1108, 0xc0c4, 0x7816, 0x7804, 0xd08c, 0x0110,
-+      0x681f, 0x000c, 0x70a0, 0x70a2, 0x0005, 0x7c12
-+};
-+#else
-+/*
-+ *    Firmware Version 11.12.01 (12:37 May 24, 2000)
-+ */
-+static const u_int16_t isp_12160_risc_code[] = {
-+      0x0804, 0x103a, 0x0000, 0x4bd8, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x3520, 0x514c, 0x4f47, 0x4943,
-+      0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+      0x3132, 0x3430, 0x2049, 0x2f54, 0x2046, 0x6972, 0x6d77, 0x6172,
-+      0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2031, 0x312e, 0x3132,
-+      0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20,
-+      0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020,
-+      0x3031, 0x2024, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x1120, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1,
-+      0x0020, 0x2089, 0x128f, 0x0030, 0x2001, 0x04fc, 0x2004, 0xa086,
-+      0x1216, 0x0d40, 0x2071, 0x0010, 0x70c3, 0x0004, 0x70c7, 0x4953,
-+      0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x000b, 0x2001, 0x04fd,
-+      0x70d6, 0x20c1, 0x0022, 0x20c9, 0x10ff, 0x2009, 0xfeff, 0x200b,
-+      0xa5a5, 0xe000, 0xe000, 0x2114, 0xa286, 0xa5a5, 0x0120, 0x20c1,
-+      0x0020, 0x20c9, 0x5cff, 0x2009, 0x0200, 0xa18e, 0x0400, 0x1168,
-+      0x3808, 0xa18e, 0x0020, 0x1148, 0x70c3, 0x8010, 0x2061, 0x0000,
-+      0x601b, 0x0001, 0x2091, 0x4080, 0x0cf8, 0x2009, 0xfeff, 0x2130,
-+      0x2128, 0x3800, 0xa084, 0x0003, 0x0006, 0x0118, 0xa1a2, 0x1100,
-+      0x0010, 0xa1a2, 0x5cff, 0x000e, 0x8424, 0x8424, 0x8424, 0x8424,
-+      0x8424, 0x8424, 0x2009, 0xb33f, 0xa005, 0x0128, 0x2079, 0x1100,
-+      0xa192, 0x1100, 0x0020, 0x2079, 0x5d00, 0xa192, 0x5d00, 0x2009,
-+      0x0000, 0x2001, 0x0037, 0x080c, 0x20ea, 0x2218, 0x2fa0, 0x2408,
-+      0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x1dd8, 0x2079,
-+      0xb340, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1280, 0x11e8, 0x780c,
-+      0xc0ed, 0xc0d5, 0x780e, 0x7813, 0x0064, 0x2071, 0x0200, 0x00d6,
-+      0x2069, 0xb380, 0x080c, 0x59b8, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+      0x1130, 0x2069, 0xb3c0, 0x2071, 0x0100, 0x080c, 0x59b8, 0x780c,
-+      0xc0d4, 0x780e, 0x00de, 0x0090, 0x2001, 0x04fc, 0x2004, 0xa086,
-+      0x1216, 0x1128, 0x7813, 0x0064, 0x780c, 0xc0cd, 0x08c8, 0x780c,
-+      0xc0e5, 0x780e, 0x7813, 0x003c, 0x2011, 0x000c, 0x2009, 0xb38c,
-+      0x220a, 0x2009, 0xb3cc, 0x220a, 0x7eca, 0x7cc2, 0x7bc6, 0x785b,
-+      0x0000, 0x7800, 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101,
-+      0x781b, 0x0002, 0x781f, 0x0002, 0x2009, 0x0002, 0x2069, 0xb380,
-+      0x6817, 0x0003, 0x681f, 0x0007, 0x6823, 0x00fa, 0x6827, 0x0008,
-+      0x682b, 0x0028, 0x6837, 0x0006, 0x682f, 0x0008, 0x683b, 0x0000,
-+      0x8109, 0x0508, 0x68ef, 0x000a, 0x68df, 0xb400, 0x2079, 0xb340,
-+      0x780c, 0xd0e4, 0x1118, 0x68f3, 0x7629, 0x0010, 0x68f3, 0x760d,
-+      0x68e3, 0xba00, 0x68e7, 0xb800, 0x68eb, 0xfa00, 0x68c7, 0xfece,
-+      0x68cb, 0xfed3, 0x68cf, 0xfece, 0x68d3, 0xfece, 0x68c3, 0x0001,
-+      0x2069, 0xb3c0, 0x0868, 0x68ef, 0x000a, 0x68df, 0xb600, 0x68f3,
-+      0x7819, 0x68e3, 0xda00, 0x68e7, 0xb900, 0x68eb, 0xfb10, 0x68c7,
-+      0xfed3, 0x68cb, 0xfed8, 0x68cf, 0xfed3, 0x68d3, 0xfed3, 0x68c3,
-+      0x0001, 0x00e6, 0x2069, 0xb800, 0x2071, 0x0200, 0x70ec, 0xd0e4,
-+      0x2019, 0x1c09, 0x2021, 0x0009, 0x1120, 0x2019, 0x1c0c, 0x2021,
-+      0x000c, 0x080c, 0x200a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1188,
-+      0x2069, 0xb900, 0x2071, 0x0100, 0x70ec, 0xd0e4, 0x2019, 0x1c09,
-+      0x2021, 0x0009, 0x1120, 0x2019, 0x1c0c, 0x2021, 0x000c, 0x080c,
-+      0x200a, 0x00ee, 0x2011, 0x0002, 0x2069, 0xba00, 0x2009, 0x0002,
-+      0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8, 0xa386,
-+      0xfeff, 0x1128, 0x6817, 0x0100, 0x681f, 0x0064, 0x0020, 0x6817,
-+      0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x1f04, 0x1182, 0x8109,
-+      0x1d38, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1128, 0x8211, 0x0118,
-+      0x2069, 0xda00, 0x08d8, 0x080c, 0x2680, 0x080c, 0x53c4, 0x080c,
-+      0x1caf, 0x080c, 0x595f, 0x2091, 0x2200, 0x2079, 0xb340, 0x7808,
-+      0xd0ec, 0x0118, 0x2071, 0x0020, 0x0010, 0x2071, 0x0050, 0x2091,
-+      0x2400, 0x2079, 0xb340, 0x2071, 0x0020, 0x2091, 0x2600, 0x2079,
-+      0xb340, 0x7808, 0xd0ec, 0x0118, 0x2079, 0x0100, 0x0010, 0x2079,
-+      0x0200, 0x2071, 0xb380, 0x2091, 0x2800, 0x2079, 0x0100, 0x2071,
-+      0xb3c0, 0x2091, 0x2000, 0x2079, 0xb340, 0x2071, 0x0010, 0x3200,
-+      0xa085, 0x303d, 0x2090, 0x70c3, 0x0000, 0x1004, 0x11e5, 0x70c0,
-+      0xa086, 0x0002, 0x1110, 0x080c, 0x142c, 0x2039, 0x0000, 0x080c,
-+      0x130a, 0x78ac, 0xa005, 0x11a0, 0x0e04, 0x11f5, 0x7864, 0xa065,
-+      0x0120, 0x2029, 0x0000, 0x080c, 0x252c, 0x080c, 0x210b, 0x0e04,
-+      0x120c, 0x7864, 0xa065, 0x0120, 0x2029, 0x0000, 0x080c, 0x252c,
-+      0x0e04, 0x120c, 0x2009, 0xb386, 0x2011, 0xb3c6, 0x2104, 0x220c,
-+      0xa105, 0x0110, 0x080c, 0x1dd0, 0x00e6, 0x00f6, 0x2071, 0xb380,
-+      0x70c0, 0xa005, 0x01f8, 0x7454, 0xa485, 0x0000, 0x01d8, 0x2079,
-+      0x0200, 0x2091, 0x8000, 0x72f0, 0xa28c, 0x303d, 0x2190, 0x080c,
-+      0x2b7f, 0x2091, 0x8000, 0x2091, 0x303d, 0x0e04, 0x1232, 0x00fe,
-+      0x7864, 0xa065, 0x0130, 0x00ee, 0x2029, 0x0000, 0x080c, 0x252c,
-+      0x00e6, 0x00f6, 0x1d04, 0x123a, 0x00fe, 0x00ee, 0x080c, 0x577e,
-+      0x00e6, 0x00f6, 0x2071, 0xb3c0, 0x70c0, 0xa005, 0x0190, 0x7454,
-+      0xa485, 0x0000, 0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72f0,
-+      0xa28c, 0x303d, 0x2190, 0x080c, 0x2b7f, 0x2091, 0x8000, 0x2091,
-+      0x303d, 0x00fe, 0x00ee, 0x0e04, 0x125b, 0x7864, 0xa065, 0x0118,
-+      0xa02e, 0x080c, 0x252c, 0x1d04, 0x11e7, 0x080c, 0x577e, 0x0804,
-+      0x11e7, 0x3c00, 0xa084, 0x0007, 0x0002, 0x1275, 0x1275, 0x1277,
-+      0x1277, 0x127c, 0x127c, 0x1281, 0x1281, 0x3c00, 0xa084, 0x0003,
-+      0x0002, 0x1275, 0x1275, 0x128a, 0x128a, 0x080c, 0x297f, 0x2091,
-+      0x2400, 0x080c, 0x547f, 0x0005, 0x2091, 0x2200, 0x080c, 0x547f,
-+      0x0005, 0x2091, 0x2200, 0x080c, 0x547f, 0x2091, 0x2400, 0x080c,
-+      0x547f, 0x0005, 0x2091, 0x2200, 0x080c, 0x547f, 0x0005, 0x12af,
-+      0x12af, 0x12b0, 0x12b0, 0x12bb, 0x12bb, 0x12bb, 0x12bb, 0x12c4,
-+      0x12c4, 0x12cf, 0x12cf, 0x12bb, 0x12bb, 0x12bb, 0x12bb, 0x12de,
-+      0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de,
-+      0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x12de, 0x0cf8,
-+      0x0006, 0x0106, 0x0126, 0x2091, 0x2800, 0x080c, 0x299c, 0x012e,
-+      0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, 0x080c, 0x1261,
-+      0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, 0x2091,
-+      0x2600, 0x080c, 0x299c, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006,
-+      0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x299c, 0x2091, 0x2800,
-+      0x080c, 0x299c, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106,
-+      0x0126, 0x00d6, 0x00e6, 0x00f6, 0x2079, 0xb340, 0x2071, 0x0200,
-+      0x2069, 0xb380, 0x3d00, 0xd08c, 0x0130, 0x70ec, 0xa084, 0x1c00,
-+      0x78e2, 0x080c, 0x59b8, 0x3d00, 0xd084, 0x0150, 0x2069, 0xb3c0,
-+      0x2071, 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78e6, 0x080c, 0x59b8,
-+      0x080c, 0x2930, 0x00fe, 0x00ee, 0x00de, 0x012e, 0x010e, 0x000e,
-+      0x000d, 0x0005, 0x0e04, 0x1381, 0x2061, 0x0000, 0x6018, 0xa084,
-+      0x0001, 0x1904, 0x1381, 0x7820, 0xa005, 0x1120, 0x0004, 0x1382,
-+      0x0804, 0x1381, 0x7908, 0xd1f4, 0x0120, 0x2001, 0x4007, 0x0804,
-+      0x142e, 0x790c, 0xd1ec, 0x01a0, 0xd0fc, 0x0148, 0x0006, 0x080c,
-+      0x1c2f, 0x000e, 0x0168, 0x2001, 0x4007, 0x0804, 0x142e, 0x0006,
-+      0x080c, 0x1c25, 0x000e, 0x0120, 0x2001, 0x4007, 0x0804, 0x142e,
-+      0x7908, 0xd0fc, 0x1128, 0x2061, 0xb380, 0xc19c, 0xc7fc, 0x0020,
-+      0x2061, 0xb3c0, 0xc19d, 0xc7fd, 0x6068, 0xa005, 0x15d0, 0x790a,
-+      0x6087, 0x0000, 0x7820, 0xc0fc, 0xa086, 0x0018, 0x1120, 0x00c6,
-+      0x080c, 0x196b, 0x00ce, 0x7823, 0x0000, 0x6080, 0xa065, 0x0190,
-+      0x00c6, 0x609c, 0x080c, 0x1d24, 0x00ce, 0x609f, 0x0000, 0x080c,
-+      0x1a81, 0x2009, 0x000c, 0x6007, 0x0103, 0x080c, 0x1c39, 0x1198,
-+      0x080c, 0x1c95, 0x7808, 0xd09c, 0x1118, 0x2061, 0xb380, 0x0018,
-+      0x2061, 0xb3c0, 0xc09c, 0x6083, 0x0000, 0x780a, 0x60f0, 0xd0c4,
-+      0x0130, 0xc0c4, 0x60f2, 0x2001, 0x4005, 0x0804, 0x142e, 0x0804,
-+      0x142c, 0x0005, 0x7808, 0xd0f4, 0x0120, 0x2001, 0x4007, 0x0804,
-+      0x142e, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf,
-+      0x0000, 0x70db, 0x0000, 0x71c4, 0x7a08, 0xd2ec, 0x0108, 0xc1fc,
-+      0x70c0, 0xa03d, 0xa092, 0x0030, 0x1208, 0x0032, 0x2200, 0xa092,
-+      0x0050, 0x1a04, 0x143a, 0x0482, 0x142c, 0x14a7, 0x1448, 0x14bb,
-+      0x14ca, 0x14d0, 0x1440, 0x1a99, 0x14d4, 0x143a, 0x144c, 0x144d,
-+      0x144e, 0x144f, 0x1a9d, 0x143a, 0x14e1, 0x1532, 0x1988, 0x1a93,
-+      0x1450, 0x17f5, 0x182e, 0x1863, 0x18a8, 0x17b0, 0x17be, 0x17d1,
-+      0x17e4, 0x1600, 0x143a, 0x155f, 0x1563, 0x1571, 0x157f, 0x1596,
-+      0x15a4, 0x15a7, 0x15b5, 0x15c3, 0x15cd, 0x15e6, 0x15f2, 0x143a,
-+      0x143a, 0x143a, 0x143a, 0x160d, 0x1618, 0x1631, 0x1665, 0x168e,
-+      0x16a0, 0x16a3, 0x16cd, 0x1705, 0x1717, 0x1784, 0x1794, 0x143a,
-+      0x1475, 0x143a, 0x143a, 0x17a6, 0x143a, 0x143a, 0x143a, 0x143a,
-+      0x143a, 0x1bc9, 0x1bcf, 0x143a, 0x143a, 0x143a, 0x1bd3, 0x1be2,
-+      0x143a, 0x143a, 0x143a, 0x143a, 0x14a2, 0x14b6, 0x14dc, 0x152d,
-+      0x1983, 0x1ab1, 0x1ad3, 0x1950, 0x1ae9, 0x1bf0, 0x1bbb, 0x1bc5,
-+      0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+      0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+      0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+      0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a, 0x143a,
-+      0x143a, 0x143a, 0x143a, 0x143a, 0x72ca, 0x71c6, 0x2001, 0x4006,
-+      0x0028, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04,
-+      0x142f, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091,
-+      0x4080, 0x0005, 0x70c3, 0x4001, 0x0c90, 0x70c3, 0x4006, 0x0c78,
-+      0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0c20,
-+      0x70c4, 0x70c3, 0x0004, 0x0807, 0x08f8, 0x08f0, 0x08e8, 0x08e0,
-+      0x2091, 0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020,
-+      0x70cf, 0x2020, 0x70d3, 0x000b, 0x2001, 0x000c, 0x70d6, 0x2079,
-+      0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029,
-+      0x041a, 0x2051, 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091,
-+      0x5000, 0x2091, 0x4080, 0x0804, 0x0418, 0x00d6, 0x70c4, 0x7904,
-+      0xd19c, 0x0180, 0x70c7, 0x0001, 0x2069, 0xfed8, 0x2d14, 0x72ca,
-+      0x8d68, 0x2d14, 0x72ce, 0x8d68, 0x2d14, 0x72da, 0x8d68, 0x2d14,
-+      0x72de, 0x0010, 0x70c7, 0x0000, 0xa005, 0x0178, 0xc19d, 0x72c8,
-+      0x2069, 0xfed8, 0x226a, 0x72cc, 0x8d68, 0x226a, 0x72d8, 0x8d68,
-+      0x226a, 0x72dc, 0x8d68, 0x226a, 0x0008, 0xc19c, 0x7906, 0x00de,
-+      0x0804, 0x142c, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018, 0x2029,
-+      0x0000, 0x2520, 0x71d0, 0x73c8, 0x72cc, 0x70c4, 0x080c, 0x1e1f,
-+      0x0904, 0x142c, 0x70c3, 0x4002, 0x0804, 0x142c, 0x75d8, 0x74dc,
-+      0x75da, 0x74de, 0x0018, 0x2029, 0x0000, 0x2520, 0x71d0, 0x73c8,
-+      0x72cc, 0x70c4, 0x080c, 0x1e5e, 0x0904, 0x142c, 0x70c3, 0x4002,
-+      0x0804, 0x142c, 0x71c4, 0x70c8, 0x2114, 0x200a, 0x0804, 0x142a,
-+      0x71c4, 0x2114, 0x0804, 0x142a, 0x70c7, 0x000b, 0x70cb, 0x000c,
-+      0x70cf, 0x0001, 0x0804, 0x142c, 0x75d8, 0x76dc, 0x75da, 0x76de,
-+      0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0,
-+      0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x05c8, 0xa40a, 0x0110,
-+      0x1a04, 0x142e, 0x8001, 0x786a, 0xa084, 0xfc00, 0x0138, 0x78ac,
-+      0xc085, 0x78ae, 0x2001, 0x4005, 0x0804, 0x142e, 0x7a72, 0x7b76,
-+      0x7d7a, 0x7e7e, 0x7c6e, 0xa48c, 0xff00, 0x0170, 0x8407, 0x8004,
-+      0x8004, 0x810c, 0x810c, 0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1,
-+      0x0000, 0xa5a9, 0x0000, 0x0050, 0x8407, 0x8004, 0x8004, 0xa318,
-+      0xa291, 0x0000, 0xa6b1, 0x0000, 0xa5a9, 0x0000, 0x731a, 0x721e,
-+      0x7622, 0x7526, 0x78ac, 0xa084, 0xfffc, 0x78ae, 0x0020, 0x78ac,
-+      0xa085, 0x0001, 0x78ae, 0x0804, 0x142c, 0x75d8, 0x76dc, 0x75da,
-+      0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc,
-+      0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, 0x01d0, 0xa40a,
-+      0x0110, 0x1a04, 0x142e, 0x8001, 0x788e, 0xa084, 0xfc00, 0x0138,
-+      0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0804, 0x142e, 0x7a96,
-+      0x7b9a, 0x7d9e, 0x7ea2, 0x7c92, 0x78ac, 0xa084, 0xfcff, 0x78ae,
-+      0x0020, 0x78ac, 0xa085, 0x0100, 0x78ae, 0x0804, 0x142c, 0x795c,
-+      0x7ac4, 0x0804, 0x142a, 0x2009, 0xb387, 0x210c, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x1904, 0x142b, 0x2011, 0xb3c7, 0x2214, 0x0804,
-+      0x142a, 0x2009, 0xb388, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+      0x1904, 0x142b, 0x2011, 0xb3c8, 0x2214, 0x0804, 0x142a, 0x2061,
-+      0xb380, 0x6124, 0x6228, 0x8214, 0x8214, 0x8214, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x1148, 0x2061, 0xb3c0, 0x6324, 0x73da, 0x6328,
-+      0x831c, 0x831c, 0x831c, 0x73de, 0x0804, 0x142a, 0x2009, 0xb38b,
-+      0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b, 0x2011,
-+      0xb3cb, 0x2214, 0x0804, 0x142a, 0x7910, 0x0804, 0x142b, 0x2009,
-+      0x0202, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b,
-+      0x2011, 0x0102, 0x2214, 0x0804, 0x142a, 0x2009, 0xb38d, 0x210c,
-+      0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b, 0x2011, 0xb3cd,
-+      0x2214, 0x0804, 0x142a, 0x7918, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+      0x1904, 0x142b, 0x7a1c, 0x0804, 0x142a, 0x2011, 0xb900, 0x71c4,
-+      0xd1fc, 0x1110, 0x2011, 0xb800, 0x8107, 0xa084, 0x000f, 0x8003,
-+      0x8003, 0x8003, 0x8003, 0xa268, 0x6a00, 0x6b08, 0x6c1c, 0x74da,
-+      0xd29c, 0x0110, 0x6820, 0x70de, 0x0804, 0x1429, 0x2138, 0x080c,
-+      0x1cc4, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708,
-+      0x0804, 0x1429, 0x2061, 0xb380, 0x6114, 0x2001, 0x01ff, 0x2004,
-+      0xd0fc, 0x1904, 0x142b, 0x2061, 0xb3c0, 0x6214, 0x0804, 0x142a,
-+      0x2138, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6908, 0x6a18, 0x6b10,
-+      0x77da, 0x2091, 0x8001, 0x0804, 0x1429, 0x2110, 0xa294, 0x000f,
-+      0xa282, 0x0010, 0x1a04, 0x1425, 0x080c, 0x27a4, 0x0804, 0x1429,
-+      0x2100, 0xc0bc, 0xa082, 0x0010, 0x1a04, 0x1425, 0xd1bc, 0x1120,
-+      0x2011, 0xb387, 0x2204, 0x0020, 0x2011, 0xb3c7, 0x2204, 0xc0bd,
-+      0x0006, 0x2100, 0xc0bc, 0x2012, 0x080c, 0x2713, 0x001e, 0x0804,
-+      0x142b, 0x71c4, 0x2021, 0xb388, 0x2404, 0x70c6, 0x2019, 0x0000,
-+      0x0030, 0x71c8, 0x2021, 0xb3c8, 0x2404, 0x70ca, 0xc3fd, 0x2011,
-+      0x165d, 0x20a9, 0x0008, 0x2205, 0xa106, 0x0138, 0x8210, 0x1f04,
-+      0x1643, 0x71c4, 0x72c8, 0x0804, 0x1424, 0xa292, 0x165d, 0x0026,
-+      0x2122, 0x001e, 0x080c, 0x2732, 0x2001, 0x01ff, 0x2004, 0xd0fc,
-+      0x1110, 0xd3fc, 0x09f0, 0x0804, 0x142c, 0x03e8, 0x00fa, 0x01f4,
-+      0x02ee, 0x0004, 0x0001, 0x0002, 0x0003, 0x2061, 0xb380, 0x6124,
-+      0x6228, 0x8214, 0x8214, 0x8214, 0x70c4, 0x6026, 0x70c8, 0x8003,
-+      0x8003, 0x8003, 0x602a, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11a0,
-+      0x0026, 0x0016, 0x2061, 0xb3c0, 0x6124, 0x6228, 0x8214, 0x8214,
-+      0x8214, 0x70d8, 0x6026, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602a,
-+      0x71da, 0x72de, 0x001e, 0x002e, 0x0804, 0x142a, 0x2061, 0xb380,
-+      0x612c, 0x70c4, 0x602e, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904,
-+      0x142b, 0x2061, 0xb3c0, 0x622c, 0x70c8, 0x602e, 0x0804, 0x142a,
-+      0x7910, 0x0804, 0x142b, 0x71c4, 0xa184, 0xf0cf, 0x0148, 0x2001,
-+      0x01ff, 0x2004, 0xd0fc, 0x1904, 0x1425, 0x72c8, 0x0804, 0x1424,
-+      0x0006, 0x2019, 0x0000, 0x080c, 0x278d, 0x2001, 0x01ff, 0x2004,
-+      0xd0fc, 0x0118, 0x001e, 0x0804, 0x142b, 0x71c8, 0xa184, 0xf0cf,
-+      0x0120, 0x2110, 0x71c4, 0x0804, 0x1424, 0x0006, 0xc3fd, 0x080c,
-+      0x278d, 0x002e, 0x001e, 0x0804, 0x142a, 0x71c4, 0xa182, 0x0010,
-+      0x0248, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x1425, 0x72c8,
-+      0x0804, 0x1424, 0x2011, 0xb38d, 0x2204, 0x0006, 0x8104, 0x1208,
-+      0x8108, 0x2112, 0x2019, 0x0000, 0x080c, 0x276f, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x0118, 0x001e, 0x0804, 0x142b, 0x71c8, 0xa182,
-+      0x0010, 0x0220, 0x2110, 0x71c4, 0x0804, 0x1424, 0x2011, 0xb3cd,
-+      0x2204, 0x0006, 0x8104, 0x1208, 0x8108, 0x2112, 0xc3fd, 0x080c,
-+      0x276f, 0x002e, 0x001e, 0x0804, 0x142a, 0x71c4, 0x72c8, 0xa184,
-+      0xfffd, 0x1904, 0x1424, 0xa284, 0xfffd, 0x1904, 0x1424, 0x2100,
-+      0x7918, 0x781a, 0x2200, 0x7a1c, 0x781e, 0x0804, 0x142a, 0x2011,
-+      0xb900, 0x71c4, 0xd1fc, 0x1110, 0x2011, 0xb800, 0x8107, 0xa084,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa268, 0x72c8, 0x73cc,
-+      0x74d8, 0xd29c, 0x0130, 0x75dc, 0x75de, 0x6d22, 0x2001, 0x0002,
-+      0x682a, 0x71c6, 0x6800, 0x70ca, 0x73ce, 0x74da, 0x2091, 0x8000,
-+      0x6a02, 0xd2ac, 0x1110, 0xa026, 0x0078, 0xa484, 0x00ff, 0xa082,
-+      0x0002, 0x16f0, 0x843f, 0xa7bc, 0x00ff, 0x0130, 0xa786, 0x0002,
-+      0x15b8, 0xa484, 0x00ff, 0x05a0, 0x2029, 0x0009, 0x2031, 0x0062,
-+      0x843f, 0xa7bc, 0x00ff, 0x0130, 0x8307, 0xa084, 0x00ff, 0x1110,
-+      0xa73d, 0x1530, 0x2041, 0x001d, 0x8307, 0xa084, 0x00ff, 0x0188,
-+      0xa842, 0x02f0, 0xa086, 0x0010, 0x1120, 0xa39c, 0x00ff, 0xa39d,
-+      0x0f00, 0xa3bc, 0x00ff, 0x2500, 0xa702, 0x0290, 0x2600, 0xa702,
-+      0x1278, 0x2039, 0x003a, 0x6804, 0xa705, 0x6806, 0x6b0a, 0x6b0c,
-+      0x73ce, 0x681c, 0x70da, 0x6c1e, 0x2091, 0x8001, 0x0804, 0x142c,
-+      0x2091, 0x8001, 0x0804, 0x1426, 0x2138, 0x080c, 0x1cc4, 0x2091,
-+      0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc,
-+      0x681e, 0x2708, 0x0804, 0x1429, 0x70c4, 0x2061, 0xb380, 0x6114,
-+      0x6016, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x142b, 0x70c8,
-+      0x2061, 0xb3c0, 0x6214, 0x6016, 0x0804, 0x142a, 0x72c8, 0x73cc,
-+      0xa182, 0x0010, 0x1a04, 0x1425, 0x080c, 0x27de, 0x0804, 0x1429,
-+      0x2138, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002,
-+      0x6a0a, 0x2091, 0x8001, 0x2708, 0x0804, 0x142a, 0x2138, 0x080c,
-+      0x1cc4, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804,
-+      0xa005, 0x0110, 0x080c, 0x260c, 0x2091, 0x8001, 0x2708, 0x0804,
-+      0x142a, 0x2138, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6a08, 0xa295,
-+      0x0004, 0x6a0a, 0x6804, 0xa005, 0x0110, 0x080c, 0x260c, 0x2091,
-+      0x8001, 0x2708, 0x0804, 0x142a, 0x2138, 0x2041, 0x0001, 0x2049,
-+      0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1cd8, 0x2091,
-+      0x8001, 0x2708, 0x6a08, 0x0804, 0x142a, 0x2138, 0x780c, 0xd0e4,
-+      0x1160, 0xd7fc, 0x0128, 0x080c, 0x1c2f, 0x0138, 0x0804, 0x142e,
-+      0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0x73c8, 0x72cc, 0x77c6,
-+      0x73ca, 0x72ce, 0x080c, 0x1d63, 0x11e8, 0x6818, 0xa005, 0x01a0,
-+      0x2708, 0x0076, 0x080c, 0x27fe, 0x007e, 0x1170, 0x2001, 0x0015,
-+      0xd7fc, 0x1118, 0x2061, 0xb380, 0x0018, 0xc0fd, 0x2061, 0xb3c0,
-+      0x7822, 0x2091, 0x8001, 0x0005, 0x2091, 0x8001, 0x2001, 0x4005,
-+      0x0804, 0x142e, 0x2091, 0x8001, 0x0804, 0x142c, 0x2138, 0x780c,
-+      0xd0e4, 0x1160, 0xd7fc, 0x0128, 0x080c, 0x1c2f, 0x0138, 0x0804,
-+      0x142e, 0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0x77c6, 0x2041,
-+      0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x080c,
-+      0x1cd8, 0x2009, 0x0016, 0xd7fc, 0x1118, 0x2061, 0xb380, 0x0018,
-+      0x2061, 0xb3c0, 0xc1fd, 0x606b, 0x0003, 0x6083, 0x0000, 0x677a,
-+      0x6087, 0x000f, 0x7922, 0x61f0, 0xc1c4, 0x61f2, 0x080c, 0x260c,
-+      0x2091, 0x8001, 0x0005, 0x77c8, 0x77ca, 0x2138, 0x77c6, 0x780c,
-+      0xd0e4, 0x1160, 0xd7fc, 0x0128, 0x080c, 0x1c2f, 0x0138, 0x0804,
-+      0x142e, 0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0xa7bc, 0xff00,
-+      0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, 0x1118, 0x2061, 0xb380,
-+      0x0018, 0x2061, 0xb3c0, 0xc1fd, 0x6083, 0x0000, 0x606b, 0x0002,
-+      0x677a, 0x6087, 0x000f, 0x7922, 0x61f0, 0xc1c4, 0x61f2, 0x080c,
-+      0x260c, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010, 0x70c8,
-+      0xa005, 0x0118, 0x60f0, 0xc0fd, 0x60f2, 0x080c, 0x1cd8, 0x70c8,
-+      0x6836, 0x8738, 0xa784, 0x001f, 0x1dc0, 0x2091, 0x8001, 0x0005,
-+      0x2019, 0x0000, 0x2011, 0x0000, 0x7808, 0xd0ec, 0x1180, 0x72c8,
-+      0x780c, 0xd0e4, 0x1160, 0xd284, 0x0128, 0x080c, 0x1c2f, 0x0138,
-+      0x0804, 0x142e, 0x080c, 0x1c25, 0x0110, 0x0804, 0x142e, 0x72ca,
-+      0x78ac, 0xa084, 0x0003, 0x1508, 0x2039, 0x0000, 0xd284, 0x0108,
-+      0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x080c,
-+      0x1cc4, 0x2091, 0x8000, 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x2091,
-+      0x8001, 0x8738, 0xa784, 0x001f, 0x1d90, 0xa7bc, 0xff00, 0x873f,
-+      0x8738, 0x873f, 0xa784, 0x0f00, 0x1d50, 0x2091, 0x8000, 0x7808,
-+      0xd0ec, 0x0118, 0x2069, 0x0100, 0x0040, 0x72c8, 0xd284, 0x1118,
-+      0x2069, 0x0200, 0x0010, 0x2069, 0x0100, 0x6808, 0xa084, 0xfffd,
-+      0x680a, 0x6830, 0xa084, 0x0040, 0x01c0, 0x684b, 0x0004, 0x20a9,
-+      0x0014, 0x6848, 0xa084, 0x0004, 0x0110, 0x1f04, 0x1901, 0x684b,
-+      0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0110, 0x1f04,
-+      0x190b, 0x20a9, 0x00fa, 0x1f04, 0x1913, 0x2079, 0xb340, 0x2009,
-+      0x0018, 0x7808, 0xd0ec, 0x1118, 0x72c8, 0xd284, 0x1118, 0x2061,
-+      0xb380, 0x0018, 0x2061, 0xb3c0, 0xc1fd, 0x6083, 0x0000, 0x7922,
-+      0x606b, 0x0001, 0x6087, 0x000f, 0x60c3, 0x0000, 0x60c4, 0x60ce,
-+      0x60d2, 0x60f0, 0xd0b4, 0x0160, 0xc0b4, 0x60f2, 0x00c6, 0x60d4,
-+      0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce,
-+      0x60f0, 0xa084, 0x7eff, 0x60f2, 0x78ac, 0xa085, 0x0002, 0x78ae,
-+      0x83ff, 0x0108, 0x0005, 0x681b, 0x0050, 0x2091, 0x8001, 0x0005,
-+      0x73cc, 0x080c, 0x18aa, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a,
-+      0xa185, 0x0040, 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff,
-+      0x1f04, 0x1960, 0x8421, 0x1dd0, 0x8319, 0x1db0, 0x69ee, 0x6a4a,
-+      0x2091, 0x8001, 0x0005, 0xd7fc, 0x1118, 0x2069, 0xb380, 0x0010,
-+      0x2069, 0xb3c0, 0x71c4, 0x71c6, 0x6912, 0x81ff, 0x1110, 0x68c3,
-+      0x0001, 0x78ac, 0xa084, 0xfffd, 0x78ae, 0xa084, 0x0001, 0x1110,
-+      0x080c, 0x1daf, 0x0005, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018,
-+      0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca,
-+      0x72ce, 0x2079, 0xb340, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x080c,
-+      0x1c79, 0x0904, 0x1a7d, 0x20a9, 0x0005, 0x20a1, 0xb351, 0x2091,
-+      0x8000, 0x41a1, 0x2091, 0x8001, 0x2009, 0x0040, 0x080c, 0x1fd6,
-+      0x0120, 0x080c, 0x1c95, 0x0804, 0x1a7d, 0x6004, 0xa08c, 0x00ff,
-+      0xa18e, 0x0009, 0x1120, 0x0006, 0x080c, 0x250a, 0x000e, 0xa084,
-+      0xff00, 0x8007, 0x8009, 0x0904, 0x1a24, 0x00c6, 0x2c68, 0x080c,
-+      0x1c79, 0x05a8, 0x2c00, 0x689e, 0x8109, 0x1dc0, 0x609f, 0x0000,
-+      0x00ce, 0x00c6, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040,
-+      0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda,
-+      0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0904, 0x1a23, 0x2009,
-+      0x0040, 0x080c, 0x1fd6, 0x1548, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0002, 0x1168, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000a, 0x1120,
-+      0x0016, 0x080c, 0x2507, 0x001e, 0x2d00, 0x6002, 0x0898, 0x00ce,
-+      0x00c6, 0x609c, 0x080c, 0x1d24, 0x00ce, 0x609f, 0x0000, 0x080c,
-+      0x1a81, 0x2009, 0x000c, 0x6008, 0xa085, 0x0200, 0x600a, 0x080c,
-+      0x1c39, 0x080c, 0x1c95, 0x0804, 0x1a7d, 0x00ce, 0x00c6, 0x609c,
-+      0x080c, 0x1d24, 0x00ce, 0x609f, 0x0000, 0x080c, 0x1a81, 0x2009,
-+      0x000c, 0x6007, 0x0103, 0x601b, 0x0003, 0x080c, 0x1c39, 0x080c,
-+      0x1c95, 0x0804, 0x1a7d, 0x00ce, 0x780c, 0xd0e4, 0x11e8, 0x6114,
-+      0xd1fc, 0x0120, 0x080c, 0x1c2f, 0x01b8, 0x0018, 0x080c, 0x1c25,
-+      0x0198, 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, 0x73c8, 0x72cc,
-+      0x6087, 0x0103, 0x601b, 0x0021, 0x080c, 0x1c39, 0x080c, 0x1c95,
-+      0x2001, 0x4007, 0x0804, 0x142e, 0x74c4, 0x73c8, 0x72cc, 0x6014,
-+      0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, 0xd0fc, 0x1118, 0x2071,
-+      0xb380, 0x0018, 0x2071, 0xb3c0, 0xc1fd, 0x7922, 0x706b, 0x0005,
-+      0x71f0, 0xc1c4, 0x71f2, 0x736e, 0x7272, 0x7476, 0x707a, 0x707f,
-+      0x0000, 0x2c00, 0x7082, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184,
-+      0x0060, 0x0110, 0x080c, 0x5365, 0x00ee, 0x6596, 0x65a6, 0x669a,
-+      0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000,
-+      0x080c, 0x260c, 0x2091, 0x8001, 0x0005, 0x70c3, 0x4005, 0x0804,
-+      0x142f, 0x20a9, 0x0005, 0x2099, 0xb351, 0x2091, 0x8000, 0x530a,
-+      0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000,
-+      0xa5a9, 0x0000, 0x0005, 0x71c4, 0x70c7, 0x0000, 0x7916, 0x0804,
-+      0x142c, 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, 0x1000, 0x690c,
-+      0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x1dd8, 0xa285, 0x0000,
-+      0x1118, 0x70c3, 0x4000, 0x0010, 0x70c3, 0x4003, 0x70ca, 0x0804,
-+      0x142f, 0x2011, 0xb3a4, 0xa03e, 0x7908, 0xd1ec, 0x11a0, 0x77c8,
-+      0xd7fc, 0x0110, 0x2011, 0xb3e4, 0x220c, 0x0006, 0x0036, 0x0046,
-+      0x080c, 0x44c8, 0x70c4, 0xd0fc, 0x004e, 0x003e, 0x000e, 0x1118,
-+      0xa184, 0x7fff, 0x0020, 0x080c, 0x44ac, 0xa185, 0x8000, 0x2012,
-+      0x2710, 0x0804, 0x142a, 0x0016, 0x2100, 0xc1fc, 0x080c, 0x449c,
-+      0x001e, 0xd1fc, 0x1118, 0x2001, 0xb3a4, 0x0010, 0x2001, 0xb3e4,
-+      0x2004, 0xa084, 0x8000, 0x6100, 0xa10d, 0x6204, 0x6308, 0x0804,
-+      0x1429, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2091, 0x8000, 0x2061,
-+      0x0010, 0x60c4, 0xd0fc, 0x1178, 0x2071, 0xb380, 0x7808, 0xd0ec,
-+      0x0128, 0x2079, 0x0100, 0x2019, 0x0020, 0x0058, 0x2079, 0x0200,
-+      0x2019, 0x0050, 0x0030, 0x2071, 0xb3c0, 0x2079, 0x0100, 0x2019,
-+      0x0020, 0x7094, 0xa06d, 0x0904, 0x1bb1, 0x6a04, 0xa294, 0x00ff,
-+      0xa286, 0x0007, 0x0120, 0xa286, 0x000f, 0x1904, 0x1bb1, 0x691c,
-+      0xa184, 0x00c0, 0x0904, 0x1bb1, 0xa186, 0x00c0, 0x0904, 0x1bb1,
-+      0x6824, 0xa084, 0xff00, 0xa085, 0x0019, 0x6826, 0x2368, 0x7830,
-+      0xa084, 0x0040, 0x1de0, 0xa184, 0x0080, 0x1904, 0x1b87, 0x78e4,
-+      0xa084, 0x0007, 0x8001, 0x1dd8, 0x71a4, 0x81ff, 0x0150, 0x6807,
-+      0x0010, 0x6908, 0x6808, 0xa106, 0x1de0, 0x6804, 0xa084, 0x0010,
-+      0x1de0, 0x78b8, 0x8007, 0xa084, 0x007f, 0x1dd8, 0x7848, 0xa085,
-+      0x000c, 0x784a, 0x71a4, 0x81ff, 0x0180, 0x70a7, 0x0000, 0x6807,
-+      0x0018, 0x6804, 0xa084, 0x0008, 0x1de0, 0x6807, 0x0008, 0x6804,
-+      0xa084, 0x0008, 0x1de0, 0x6807, 0x0002, 0x61c4, 0xa18c, 0x0003,
-+      0x0904, 0x1bad, 0x62c8, 0x63cc, 0x61c6, 0x62ca, 0x63ce, 0x7848,
-+      0xa084, 0x000c, 0x1de0, 0x00e6, 0x2071, 0xb340, 0x724a, 0x734e,
-+      0xae80, 0x0012, 0x00ee, 0x080c, 0x51f4, 0x78a3, 0x0000, 0x7858,
-+      0xa084, 0xedff, 0x785a, 0x70a8, 0xa080, 0x00f3, 0x781a, 0x00fe,
-+      0x00ee, 0x00de, 0x00ce, 0x2091, 0x8001, 0x0804, 0x142c, 0x78e4,
-+      0xa084, 0x0007, 0x1de0, 0x78b8, 0x8007, 0xa084, 0x007f, 0x1dd8,
-+      0x7848, 0xa085, 0x000c, 0x784a, 0x7848, 0xa084, 0x000c, 0x1de0,
-+      0x71a4, 0x81ff, 0x0190, 0x6807, 0x0010, 0x70a7, 0x0000, 0x6807,
-+      0x0018, 0x6804, 0xa084, 0x0008, 0x1de0, 0x6807, 0x0008, 0x6804,
-+      0xa084, 0x0008, 0x1de0, 0x6807, 0x0002, 0x70a8, 0xa080, 0x00b7,
-+      0x0868, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x2091, 0x8001, 0x2001,
-+      0x4005, 0x0804, 0x142e, 0x7958, 0x71c6, 0x71c4, 0xa182, 0x0003,
-+      0x1a04, 0x1425, 0x795a, 0x0804, 0x142c, 0x7958, 0x71c6, 0x0804,
-+      0x142c, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x0804, 0x142c, 0x7900,
-+      0x71c6, 0x0804, 0x142c, 0x7904, 0x70c4, 0x7806, 0xd094, 0x0140,
-+      0x70c8, 0x78f2, 0x70cc, 0x78f6, 0x70d8, 0x78fa, 0x70dc, 0x78fe,
-+      0x0804, 0x142b, 0x7804, 0x70c6, 0xd094, 0x0140, 0x78f0, 0x70ca,
-+      0x78f4, 0x70ce, 0x78f8, 0x70da, 0x78fc, 0x70de, 0x0804, 0x142c,
-+      0x71c4, 0xd1fc, 0x1118, 0x2011, 0xb800, 0x0010, 0x2011, 0xb900,
-+      0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa268,
-+      0x2011, 0x0000, 0x6814, 0xd0fc, 0x0110, 0xa295, 0x0200, 0xd0b4,
-+      0x0110, 0xa295, 0x0001, 0x6b0c, 0x6800, 0x70da, 0x6820, 0x70de,
-+      0x0804, 0x1429, 0x780c, 0xd0f4, 0x0130, 0x2001, 0x4007, 0x70db,
-+      0x0000, 0xa005, 0x0048, 0xd0fc, 0x0130, 0x2001, 0x4007, 0x70db,
-+      0x0001, 0xa005, 0x0008, 0xa006, 0x0005, 0x780c, 0xd0f4, 0x0128,
-+      0x2001, 0x4007, 0x70db, 0x0000, 0x0008, 0xa006, 0x0005, 0x780c,
-+      0xd0fc, 0x0128, 0x2001, 0x4007, 0x70db, 0x0001, 0x0008, 0xa006,
-+      0x0005, 0xac80, 0x0001, 0x080c, 0x1e7a, 0x0005, 0x7112, 0x7003,
-+      0x0001, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, 0xac80,
-+      0x0001, 0x20a0, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002, 0xa08c,
-+      0x01e0, 0x1510, 0x53a5, 0x7884, 0xa005, 0x01e8, 0x0411, 0x0148,
-+      0x2c00, 0x788a, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5,
-+      0x0090, 0x7887, 0x0000, 0x7218, 0x731c, 0x7420, 0x7524, 0xa292,
-+      0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, 0x0000, 0x721a,
-+      0x731e, 0x7422, 0x7526, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004,
-+      0x0005, 0x2091, 0x8000, 0x783c, 0xa065, 0x0120, 0x2c04, 0x783e,
-+      0x2063, 0x0000, 0x2091, 0x8001, 0x0005, 0x00f6, 0x2079, 0xb340,
-+      0x783c, 0xa06d, 0x0140, 0x2d04, 0x783e, 0x6803, 0x0000, 0x6807,
-+      0x0000, 0x680b, 0x0000, 0x00fe, 0x0005, 0x2091, 0x8000, 0x00f6,
-+      0x2079, 0xb340, 0x783c, 0x2062, 0x2c00, 0xa005, 0x1110, 0x080c,
-+      0x297f, 0x783e, 0x00fe, 0x2091, 0x8001, 0x0005, 0x00f6, 0x2079,
-+      0xb340, 0x783c, 0x206a, 0x2d00, 0x783e, 0x00fe, 0x0005, 0x3800,
-+      0xa084, 0x0003, 0x0118, 0x2011, 0x1100, 0x0010, 0x2011, 0x5d00,
-+      0x7a3e, 0x7bc4, 0x8319, 0x0128, 0xa280, 0x0037, 0x2012, 0x2010,
-+      0x0cc8, 0x2013, 0x0000, 0x0005, 0x0016, 0x2069, 0xda00, 0xd7fc,
-+      0x1110, 0x2069, 0xba00, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
-+      0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xad68, 0x001e, 0x0005,
-+      0x0c59, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef,
-+      0xa80d, 0x690a, 0x00e6, 0xd7fc, 0x1128, 0x2009, 0xb394, 0x2071,
-+      0xb380, 0x0020, 0x2009, 0xb3d4, 0x2071, 0xb3c0, 0x210c, 0x6804,
-+      0xa005, 0x0148, 0xa116, 0x1138, 0x2060, 0x6000, 0x6806, 0x0016,
-+      0x200b, 0x0000, 0x0018, 0x2009, 0x0000, 0x0016, 0x6804, 0xa065,
-+      0x0148, 0x6000, 0x6806, 0x04b9, 0x080c, 0x2076, 0x6810, 0x8001,
-+      0x6812, 0x1da0, 0x001e, 0x6902, 0x6906, 0x2d00, 0x2060, 0x080c,
-+      0x2af4, 0x00ee, 0x0005, 0xa065, 0x0170, 0x2008, 0x609c, 0xa005,
-+      0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x2079, 0xb340,
-+      0x783c, 0x793e, 0x2062, 0x0005, 0xa065, 0x01a0, 0x2008, 0x609c,
-+      0xa005, 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, 0x0cc0, 0x00f6,
-+      0x2079, 0xb340, 0x2091, 0x8000, 0x783c, 0x793e, 0x00fe, 0x2062,
-+      0x2091, 0x8001, 0x0005, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9,
-+      0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828,
-+      0x601a, 0x682c, 0x6022, 0x0005, 0x00e6, 0xd7fc, 0x1128, 0x2071,
-+      0xb380, 0x2031, 0xb400, 0x0020, 0x2071, 0xb3c0, 0x2031, 0xb600,
-+      0x7054, 0xa08c, 0x0200, 0x1128, 0xa608, 0x2d0a, 0x8000, 0x7056,
-+      0xa006, 0x00ee, 0x0005, 0x00f6, 0xd7fc, 0x1118, 0x2079, 0xb380,
-+      0x0010, 0x2079, 0xb3c0, 0x080c, 0x1cc4, 0x2091, 0x8000, 0x6804,
-+      0x7806, 0xa065, 0x05d0, 0x0028, 0x2c00, 0x7806, 0x6000, 0xa065,
-+      0x05a0, 0x6010, 0xa306, 0x1dc0, 0x600c, 0xa206, 0x1da8, 0x2c28,
-+      0x7850, 0xac06, 0x1108, 0x0430, 0x6804, 0xac06, 0x1140, 0x6000,
-+      0x2060, 0x6806, 0xa005, 0x1118, 0x6803, 0x0000, 0x0048, 0x6400,
-+      0x7804, 0x2060, 0x6402, 0xa486, 0x0000, 0x1110, 0x2c00, 0x6802,
-+      0x2560, 0x00fe, 0x080c, 0x1d3b, 0x00f6, 0x601b, 0x0005, 0x6023,
-+      0x0020, 0x00fe, 0x080c, 0x2076, 0x00f6, 0x6810, 0x8001, 0x0b0c,
-+      0x297f, 0x6812, 0xa085, 0xffff, 0xa005, 0x00fe, 0x0005, 0x0076,
-+      0x2700, 0x2039, 0x0000, 0xd0fc, 0x0108, 0xc7fd, 0x2041, 0x0021,
-+      0x2049, 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x080c, 0x1cd8,
-+      0x8738, 0xa784, 0x001f, 0x1dd0, 0xa7bc, 0xff00, 0x873f, 0x8738,
-+      0x873f, 0xa784, 0x0f00, 0x1d90, 0x2091, 0x8001, 0x007e, 0x0005,
-+      0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x11b8, 0x7808, 0xd08c,
-+      0x0130, 0xc08c, 0x780a, 0xc7fc, 0x2069, 0xb380, 0x0028, 0xc08d,
-+      0x780a, 0x2069, 0xb3c0, 0xc7fd, 0x2091, 0x8000, 0x6818, 0x681b,
-+      0x0000, 0x2091, 0x8001, 0xa005, 0x1108, 0x0005, 0xa08c, 0xfff0,
-+      0x0110, 0x080c, 0x297f, 0x0002, 0x1e04, 0x1e07, 0x1e0d, 0x1e11,
-+      0x1e05, 0x1e15, 0x1e1b, 0x1e05, 0x1e05, 0x1f85, 0x1faf, 0x1fb2,
-+      0x1fb7, 0x1e05, 0x1e05, 0x1e05, 0x0005, 0x080c, 0x297f, 0x080c,
-+      0x1daf, 0x2001, 0x8001, 0x0804, 0x1fc7, 0x2001, 0x8003, 0x0804,
-+      0x1fc7, 0x2001, 0x8004, 0x0804, 0x1fc7, 0x080c, 0x1daf, 0x2001,
-+      0x8006, 0x0804, 0x1fc7, 0x2001, 0x8007, 0x0804, 0x1fc7, 0x2030,
-+      0x2138, 0xa782, 0x0021, 0x0210, 0x2009, 0x0020, 0x2600, 0x0099,
-+      0x1188, 0xa7ba, 0x0020, 0x0268, 0x0160, 0x2708, 0xa6b0, 0x0020,
-+      0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000,
-+      0x0c40, 0xa006, 0x0005, 0x81ff, 0x01f0, 0x2099, 0x0030, 0x20a0,
-+      0x700c, 0xa084, 0x07ff, 0x0130, 0x7007, 0x0004, 0x7004, 0xa084,
-+      0x0004, 0x1de0, 0x21a8, 0x810b, 0x7112, 0x7003, 0x0001, 0x7007,
-+      0x0001, 0x7008, 0x800b, 0x1ee8, 0x7007, 0x0002, 0xa08c, 0x01e0,
-+      0x1110, 0x53a5, 0xa006, 0x7003, 0x0000, 0x0005, 0x2030, 0x2138,
-+      0xa782, 0x0021, 0x0210, 0x2009, 0x0020, 0x2600, 0x0099, 0x1188,
-+      0xa7ba, 0x0020, 0x0268, 0x0160, 0x2708, 0xa6b0, 0x0020, 0xa290,
-+      0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0c40,
-+      0xa006, 0x0005, 0x81ff, 0x0588, 0x2098, 0x20a1, 0x0030, 0x700c,
-+      0xa084, 0x07ff, 0x0100, 0x21a8, 0x810b, 0x7112, 0x7018, 0x0006,
-+      0x701c, 0x0006, 0x7020, 0x0006, 0x7024, 0x0006, 0x721a, 0x731e,
-+      0x7422, 0x7526, 0x7003, 0x0000, 0x53a6, 0x7007, 0x0001, 0x7010,
-+      0xa084, 0xf000, 0x0118, 0x7007, 0x0008, 0x0018, 0x7108, 0x8103,
-+      0x1eb0, 0x000e, 0x7026, 0x000e, 0x7022, 0x000e, 0x701e, 0x000e,
-+      0x701a, 0x7007, 0x0002, 0xa184, 0x01e0, 0x7003, 0x0000, 0x7007,
-+      0x0004, 0x0005, 0x00e6, 0x6914, 0xd1fc, 0x0118, 0x2071, 0xb3c0,
-+      0x0010, 0x2071, 0xb380, 0x2d08, 0x70b4, 0x6802, 0xa005, 0x1108,
-+      0x71ba, 0x71b6, 0x00ee, 0x0005, 0x00f6, 0x6114, 0xd1fc, 0x0118,
-+      0x2079, 0xb3c0, 0x0010, 0x2079, 0xb380, 0x2c08, 0x78b4, 0x6002,
-+      0xa005, 0x1108, 0x79ba, 0x79b6, 0x00fe, 0x0005, 0x2091, 0x8000,
-+      0x00f6, 0x6114, 0xd1fc, 0x0118, 0x2079, 0xb3c0, 0x0010, 0x2079,
-+      0xb380, 0x6003, 0x0000, 0x2c08, 0x78b8, 0xa065, 0x1110, 0x79b6,
-+      0x0008, 0x6102, 0x79ba, 0x00fe, 0x2091, 0x8001, 0x080c, 0x2636,
-+      0x0005, 0x70b4, 0xa06d, 0x0130, 0x6800, 0x70b6, 0xa005, 0x1108,
-+      0x70ba, 0x8dff, 0x0005, 0x00d6, 0x00c6, 0x00f6, 0xd3fc, 0x0118,
-+      0x2079, 0xb3c0, 0x0010, 0x2079, 0xb380, 0xaf80, 0x002d, 0x2060,
-+      0x6000, 0xa005, 0x01e0, 0x2068, 0x6814, 0xa306, 0x1128, 0x6828,
-+      0xa084, 0x00ff, 0xa406, 0x0110, 0x2d60, 0x0c90, 0x6800, 0xa005,
-+      0x6002, 0x1130, 0xaf80, 0x002d, 0xac06, 0x0108, 0x2c00, 0x78ba,
-+      0x00d6, 0x689c, 0xa005, 0x0110, 0x080c, 0x1d13, 0x000e, 0x00fe,
-+      0x00ce, 0x00de, 0xa005, 0x0005, 0x00d6, 0x00c6, 0x00f6, 0xd0fc,
-+      0x0118, 0x2079, 0xb3c0, 0x0010, 0x2079, 0xb380, 0xaf80, 0x002d,
-+      0x2060, 0x6000, 0xa005, 0x01c8, 0x2068, 0x6814, 0xa084, 0x00ff,
-+      0xa306, 0x0110, 0x2d60, 0x0ca8, 0x6800, 0xa005, 0x6002, 0x1130,
-+      0xaf80, 0x002d, 0xac06, 0x0108, 0x2c00, 0x78ba, 0x00d6, 0x689c,
-+      0xa005, 0x0110, 0x080c, 0x1d13, 0x000e, 0x00fe, 0x00ce, 0x00de,
-+      0xa005, 0x0005, 0x00d6, 0x00c6, 0x00f6, 0xd3fc, 0x0118, 0x2079,
-+      0xb3c0, 0x0010, 0x2079, 0xb380, 0xaf80, 0x002d, 0x2060, 0x6000,
-+      0xa06d, 0x01b0, 0x6814, 0xa306, 0x0110, 0x2d60, 0x0cc0, 0x6800,
-+      0xa005, 0x6002, 0x1130, 0xaf80, 0x002d, 0xac06, 0x0108, 0x2c00,
-+      0x78ba, 0x00d6, 0x689c, 0xa005, 0x0110, 0x080c, 0x1d13, 0x000e,
-+      0x00fe, 0x00ce, 0x00de, 0xa005, 0x0005, 0x2091, 0x8000, 0xd7fc,
-+      0x1118, 0x2069, 0xb380, 0x0010, 0x2069, 0xb3c0, 0x6800, 0xa086,
-+      0x0000, 0x0128, 0x2091, 0x8001, 0x681b, 0x0009, 0x0005, 0x6878,
-+      0xd7fc, 0x1108, 0x0008, 0xc0fd, 0xa0bc, 0xff00, 0x2041, 0x0021,
-+      0x2049, 0x0004, 0x2051, 0x0010, 0x080c, 0x1cd8, 0x8738, 0xa784,
-+      0x001f, 0x1dd0, 0x2091, 0x8001, 0x2001, 0x800a, 0x00c0, 0x2001,
-+      0x800c, 0x00a8, 0x080c, 0x1daf, 0x2001, 0x800d, 0x0080, 0x780c,
-+      0xd0e4, 0x1158, 0xd0ec, 0x0120, 0xd7fc, 0x0110, 0x78e4, 0x0008,
-+      0x78e0, 0x70c6, 0x2001, 0x800e, 0x0010, 0x0804, 0x1e05, 0x70c2,
-+      0xd7fc, 0x1118, 0x70db, 0x0000, 0x0010, 0x70db, 0x0001, 0x2061,
-+      0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x0005, 0xac80, 0x0001,
-+      0x81ff, 0x0518, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, 0x07ff,
-+      0x0100, 0x7018, 0x0006, 0x701c, 0x0006, 0x7020, 0x0006, 0x7024,
-+      0x0006, 0x7112, 0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003,
-+      0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x1ee8, 0x7007, 0x0002,
-+      0xa08c, 0x01e0, 0x1110, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007,
-+      0x0004, 0x000e, 0x7026, 0x000e, 0x7022, 0x000e, 0x701e, 0x000e,
-+      0x701a, 0x0005, 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e,
-+      0x681f, 0x0201, 0x6803, 0xfd20, 0x6807, 0x0038, 0x6a1a, 0x6823,
-+      0x0200, 0x6827, 0x0000, 0x2d00, 0xa0e8, 0x0010, 0xa290, 0x0004,
-+      0x8109, 0x1d60, 0x0005, 0x70ec, 0xd0dc, 0x1520, 0x2029, 0x0001,
-+      0x780c, 0xd0cc, 0x1160, 0x70ec, 0xd0e4, 0x2019, 0x0c0a, 0x2021,
-+      0x000a, 0x1120, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x0070, 0x70ec,
-+      0xd0e4, 0x1128, 0x2019, 0x1c0c, 0x2021, 0x000c, 0x0030, 0x2019,
-+      0x1c09, 0x2021, 0x0009, 0xa5ad, 0x0200, 0x6b0a, 0x6c0e, 0x6d1e,
-+      0x6807, 0x0038, 0x0005, 0x7018, 0x0006, 0x701c, 0x0006, 0x7020,
-+      0x0006, 0x7024, 0x0006, 0x721a, 0x731e, 0x7422, 0x7526, 0x7003,
-+      0x0000, 0x7007, 0x0001, 0x7010, 0xa084, 0xf000, 0x0118, 0x7007,
-+      0x0008, 0x0018, 0x7108, 0x8103, 0x1eb0, 0x000e, 0x7026, 0x000e,
-+      0x7022, 0x000e, 0x701e, 0x000e, 0x701a, 0x7007, 0x0002, 0xa184,
-+      0x01e0, 0x7003, 0x0000, 0x7007, 0x0004, 0x0005, 0x6004, 0x2c08,
-+      0x2063, 0x0000, 0x785c, 0x8000, 0x785e, 0x7860, 0xa005, 0x7962,
-+      0x0110, 0x2c02, 0x0008, 0x7966, 0x0005, 0x6807, 0x0103, 0x00c6,
-+      0x2061, 0xb340, 0x2d08, 0x206b, 0x0000, 0x605c, 0x8000, 0x605e,
-+      0x6060, 0xa005, 0x6162, 0x0110, 0x2d02, 0x0008, 0x6166, 0x00ce,
-+      0x0005, 0x2091, 0x8000, 0x785c, 0x8001, 0x785e, 0x2c04, 0x7866,
-+      0xa005, 0x1108, 0x7862, 0x2091, 0x8001, 0x609c, 0xa005, 0x01a8,
-+      0x00c6, 0x2060, 0x2008, 0x609c, 0xa005, 0x0138, 0x2062, 0x609f,
-+      0x0000, 0xa065, 0x609c, 0xa005, 0x1dc8, 0x2091, 0x8000, 0x783c,
-+      0x793e, 0x2062, 0x2091, 0x8001, 0x00ce, 0x2091, 0x8000, 0x783c,
-+      0x2062, 0x609f, 0x0000, 0x2c00, 0xa005, 0x1110, 0x080c, 0x297f,
-+      0x783e, 0x2091, 0x8001, 0x0005, 0x7864, 0xa065, 0x0168, 0x2091,
-+      0x8000, 0x785c, 0x8001, 0x785e, 0x2c04, 0x7866, 0xa005, 0x1110,
-+      0x7862, 0x8000, 0x2091, 0x8001, 0x0005, 0x20a9, 0x0010, 0xa006,
-+      0x8004, 0x8086, 0x818e, 0x1208, 0xa200, 0x1f04, 0x20e1, 0x8086,
-+      0x818e, 0x0005, 0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a,
-+      0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x20f1,
-+      0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04, 0x20f1, 0x0006, 0x3200,
-+      0xa084, 0xefff, 0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200,
-+      0xa085, 0x1000, 0x0cb8, 0x7d6c, 0x70d0, 0xa506, 0x0904, 0x218e,
-+      0x7808, 0xd0ec, 0x0190, 0x00e6, 0x2091, 0x8000, 0x2071, 0x0020,
-+      0x7004, 0xa005, 0x1138, 0x7008, 0x00ee, 0xa086, 0x0008, 0x0128,
-+      0x0804, 0x218e, 0x00ee, 0x0804, 0x218e, 0x080c, 0x1c79, 0x0904,
-+      0x218e, 0x7968, 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x1210,
-+      0xa006, 0x0038, 0x72d0, 0xa206, 0x0120, 0x7887, 0x0001, 0x2009,
-+      0x0080, 0x00c6, 0x080c, 0x1c3e, 0x00ce, 0x05d8, 0x080c, 0x1c95,
-+      0x7887, 0x0000, 0x7880, 0x8000, 0x7882, 0xa086, 0x0002, 0x01a0,
-+      0x8507, 0x8004, 0x8004, 0x7974, 0xa108, 0x711a, 0x1260, 0x7970,
-+      0xa189, 0x0000, 0x711e, 0x797c, 0xa189, 0x0000, 0x7122, 0x7978,
-+      0xa189, 0x0000, 0x7126, 0x0490, 0x6014, 0xd0fc, 0x1118, 0x2069,
-+      0xb380, 0x0010, 0x2069, 0xb3c0, 0x2091, 0x8000, 0x681b, 0x0002,
-+      0x7884, 0xa005, 0x0128, 0x7887, 0x0000, 0x7888, 0x2060, 0x0c60,
-+      0x7883, 0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001,
-+      0x00a8, 0x7883, 0x0000, 0x080c, 0x24c9, 0x6004, 0xa084, 0x000f,
-+      0x0071, 0x7884, 0xa005, 0x0130, 0x7888, 0x2060, 0x6004, 0xa084,
-+      0x000f, 0x0029, 0x7887, 0x0000, 0x0804, 0x210b, 0x0005, 0x0002,
-+      0x21a0, 0x21bb, 0x21d6, 0x21a0, 0x21ef, 0x21af, 0x2341, 0x2357,
-+      0x21a0, 0x21b9, 0x21d4, 0x2232, 0x22a0, 0x22e9, 0x22fa, 0x2357,
-+      0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, 0x600a,
-+      0x080c, 0x23ca, 0x609c, 0x78ba, 0x080c, 0x24b3, 0x0005, 0x78bc,
-+      0xa084, 0x0100, 0x0108, 0x0c60, 0x601c, 0xa085, 0x0080, 0x601e,
-+      0x0038, 0x080c, 0x250a, 0x78bc, 0xa084, 0x0100, 0x0108, 0x0c00,
-+      0x78bf, 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001,
-+      0x0140, 0x080c, 0x23ca, 0x0128, 0x78bc, 0xa085, 0x0100, 0x78be,
-+      0x0010, 0x0804, 0x23e6, 0x0005, 0x080c, 0x2507, 0x78bc, 0xa08c,
-+      0x0e00, 0x1118, 0xa084, 0x0100, 0x1108, 0x0810, 0x080c, 0x23ca,
-+      0x1168, 0x6104, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0904, 0x2394,
-+      0xa186, 0x000f, 0x0904, 0x2394, 0x0804, 0x23e6, 0x0005, 0x78bc,
-+      0xa084, 0x0100, 0x0110, 0x0804, 0x21a0, 0x78bf, 0x0000, 0x6714,
-+      0x080c, 0x1cc4, 0x2011, 0x0001, 0x20a9, 0x0001, 0x6018, 0xa084,
-+      0x00ff, 0xa005, 0x0198, 0x2011, 0x0001, 0xa7bc, 0xff00, 0x20a9,
-+      0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc, 0x8000, 0x2011, 0x0002,
-+      0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108, 0x00c8, 0x0156, 0x080c,
-+      0x1cc4, 0x015e, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000,
-+      0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001,
-+      0x1f04, 0x221a, 0x8211, 0x0118, 0x20a9, 0x0100, 0x0c58, 0x080c,
-+      0x1c95, 0x0005, 0x6114, 0x080c, 0x2525, 0x6900, 0xa184, 0x0001,
-+      0x0190, 0x6028, 0xa084, 0x00ff, 0x1904, 0x23ae, 0x6800, 0xa084,
-+      0x0001, 0x0904, 0x23b4, 0x6803, 0x0000, 0x680b, 0x0000, 0x6807,
-+      0x0000, 0x0804, 0x23ba, 0x2011, 0x0001, 0x6020, 0xd0f4, 0x0110,
-+      0xa295, 0x0002, 0xd0c4, 0x0110, 0xa295, 0x0008, 0xd0cc, 0x0110,
-+      0xa295, 0x0400, 0x601c, 0xa084, 0x0002, 0x0110, 0xa295, 0x0004,
-+      0x602c, 0xa08c, 0x00ff, 0xa182, 0x0002, 0x0a04, 0x23b7, 0xa182,
-+      0x001b, 0x1a04, 0x23b7, 0x0904, 0x23b7, 0x690e, 0x602c, 0x8007,
-+      0xa08c, 0x00ff, 0xa182, 0x0002, 0x0a04, 0x23b7, 0xa182, 0x001b,
-+      0x1a04, 0x23b7, 0x0904, 0x23b7, 0x6912, 0x6134, 0xa184, 0x000f,
-+      0x0138, 0x8000, 0xd0a4, 0x0108, 0x8001, 0xa18c, 0xfff0, 0xa10d,
-+      0x6922, 0x6030, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6816,
-+      0x6028, 0xa084, 0x00ff, 0x0904, 0x23b4, 0x6806, 0x6028, 0x8007,
-+      0xa084, 0x00ff, 0x0904, 0x23b4, 0x680a, 0x6a02, 0x0804, 0x23ba,
-+      0x6014, 0xd0fc, 0x1118, 0x2001, 0xb3a4, 0x0010, 0x2001, 0xb3e4,
-+      0x2004, 0xa084, 0x8000, 0x0904, 0x23b4, 0x6114, 0x080c, 0x2525,
-+      0x2091, 0x8000, 0x6a04, 0x6b08, 0x6418, 0xa484, 0x0003, 0x0170,
-+      0x6128, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100, 0xa210, 0x0628,
-+      0x0028, 0x8001, 0x1510, 0x2100, 0xa212, 0x02f8, 0xa484, 0x000c,
-+      0x0188, 0x6128, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x1120,
-+      0x2100, 0xa318, 0x0290, 0x0030, 0xa082, 0x0004, 0x1170, 0x2100,
-+      0xa31a, 0x0258, 0x6030, 0xa005, 0x0110, 0x8000, 0x6816, 0x6a06,
-+      0x6b0a, 0x2091, 0x8001, 0x0804, 0x23ba, 0x2091, 0x8001, 0x0804,
-+      0x23b7, 0x6114, 0x080c, 0x2525, 0x2091, 0x8000, 0x6b08, 0x8318,
-+      0x0228, 0x6b0a, 0x2091, 0x8001, 0x0804, 0x23c8, 0x2091, 0x8001,
-+      0x0804, 0x23b7, 0x6024, 0x8007, 0xa084, 0x00ff, 0x01e0, 0xa086,
-+      0x0080, 0x15e8, 0x20a9, 0x0008, 0x6014, 0xd0fc, 0x1118, 0x2069,
-+      0xfc20, 0x0010, 0x2069, 0xfd40, 0x2091, 0x8000, 0x6800, 0xa084,
-+      0xfcff, 0x6802, 0xade8, 0x0009, 0x0f04, 0x2317, 0x0cb8, 0x2091,
-+      0x8001, 0x0804, 0x23ba, 0x6028, 0xa015, 0x0508, 0x6114, 0x080c,
-+      0x2525, 0x00d6, 0xade8, 0x0007, 0x2091, 0x8000, 0x6800, 0xa00d,
-+      0x0198, 0xa206, 0x0110, 0x2168, 0x0cc8, 0x00c6, 0x2160, 0x6000,
-+      0x6802, 0x080c, 0x1c95, 0x00ce, 0x00de, 0x6808, 0x8000, 0x680a,
-+      0x2091, 0x8001, 0x0804, 0x23c8, 0x2091, 0x8001, 0x00de, 0x0804,
-+      0x23b4, 0x6114, 0x080c, 0x2525, 0x6800, 0xa084, 0x0001, 0x0904,
-+      0x23a8, 0x2091, 0x8000, 0x6a04, 0x8210, 0x0228, 0x6a06, 0x2091,
-+      0x8001, 0x0804, 0x23c8, 0x2091, 0x8001, 0x0804, 0x23b7, 0x6114,
-+      0x080c, 0x2525, 0x60ce, 0x60bb, 0x0000, 0x6018, 0xa08c, 0xff00,
-+      0x6820, 0xa084, 0x00ff, 0xa105, 0x601a, 0x6900, 0xa184, 0x0008,
-+      0x0120, 0x6020, 0xa085, 0x0100, 0x6022, 0xa184, 0x0001, 0x0904,
-+      0x23b4, 0xa184, 0x0100, 0x1588, 0xa184, 0x0200, 0x1558, 0x681c,
-+      0xa005, 0x1588, 0x6004, 0xa084, 0x00ff, 0xa086, 0x000f, 0x1110,
-+      0x080c, 0x250a, 0x78bf, 0x0000, 0x6004, 0x8007, 0xa084, 0x00ff,
-+      0x78b2, 0x8001, 0x609f, 0x0000, 0x0138, 0x04e1, 0x0128, 0x78bc,
-+      0xa085, 0x0100, 0x78be, 0x0005, 0x78b7, 0x0000, 0x78bb, 0x0000,
-+      0x6024, 0xa084, 0xff00, 0x6026, 0x080c, 0x42ef, 0x1108, 0x0005,
-+      0x0804, 0x1ed6, 0x2009, 0x0017, 0x00b8, 0x2009, 0x000e, 0x00a0,
-+      0x2009, 0x0007, 0x0088, 0x2009, 0x0035, 0x0070, 0x2009, 0x003e,
-+      0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009,
-+      0x0016, 0x0010, 0x2009, 0x0001, 0x6024, 0xa084, 0xff00, 0xa105,
-+      0x6026, 0x2091, 0x8000, 0x080c, 0x2076, 0x2091, 0x8001, 0x0005,
-+      0x0804, 0x1c95, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6,
-+      0x1110, 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002, 0x78b8, 0xad06,
-+      0x1108, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1138, 0x78bc, 0xa084,
-+      0xfeff, 0x78be, 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6, 0xa02e,
-+      0x2530, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984, 0xe1ff,
-+      0x601e, 0xa984, 0x0060, 0x0110, 0x080c, 0x5365, 0x6596, 0x65a6,
-+      0x669a, 0x66aa, 0x6714, 0x2071, 0xb3c0, 0xd7fc, 0x1110, 0x2071,
-+      0xb380, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x0120, 0x8003,
-+      0x8003, 0x8003, 0x8003, 0xa105, 0x71e0, 0xa168, 0x2700, 0x8007,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0x71e4, 0xa100,
-+      0x60c6, 0x2091, 0x8000, 0x780c, 0xd0c4, 0x0160, 0xd0ec, 0x0138,
-+      0xd7fc, 0x1118, 0xd0f4, 0x1158, 0x0028, 0xd0fc, 0x1140, 0x7808,
-+      0xd0f4, 0x1128, 0x6e08, 0xd684, 0x0560, 0xd9fc, 0x1550, 0x2091,
-+      0x8001, 0x080c, 0x1d3b, 0x2091, 0x8000, 0x080c, 0x2076, 0x2091,
-+      0x8001, 0x78b7, 0x0000, 0x78bb, 0x0000, 0x780c, 0xd0e4, 0x1904,
-+      0x24b1, 0x780c, 0xd0c4, 0x0904, 0x24b1, 0xd0ec, 0x0150, 0xd7fc,
-+      0x1120, 0xd0f4, 0x1150, 0x0804, 0x24b1, 0xd0fc, 0x1130, 0x0804,
-+      0x24b1, 0x7808, 0xd0f4, 0x0904, 0x24b1, 0x601b, 0x0021, 0x0804,
-+      0x24b1, 0x6024, 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x6a10,
-+      0x6814, 0xa202, 0x0248, 0x0140, 0x2091, 0x8001, 0x2039, 0x0200,
-+      0x080c, 0x24b3, 0x0804, 0x24b1, 0x2c08, 0xd9fc, 0x01f0, 0x6800,
-+      0xa065, 0x01d8, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0168, 0x7050,
-+      0xa206, 0x1150, 0x6b04, 0x2160, 0x2304, 0x6002, 0xa005, 0x1108,
-+      0x6902, 0x2260, 0x6102, 0x0098, 0x2d00, 0x2060, 0x080c, 0x2af4,
-+      0x6e08, 0x2160, 0x6202, 0x6906, 0x0050, 0x6800, 0x6902, 0xa065,
-+      0x0110, 0x6102, 0x0008, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160,
-+      0xd9fc, 0x0138, 0xa6b4, 0xffdc, 0x6e0a, 0x682b, 0x0000, 0x682f,
-+      0x0000, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0128,
-+      0xa6b6, 0x0040, 0x6e0a, 0x080c, 0x1d4c, 0x78bb, 0x0000, 0x78b7,
-+      0x0000, 0x00ee, 0x0005, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000,
-+      0x080c, 0x2076, 0x2091, 0x8001, 0x78b8, 0xa065, 0x0128, 0x609c,
-+      0x78ba, 0x609f, 0x0000, 0x0c90, 0x78b7, 0x0000, 0x78bb, 0x0000,
-+      0x0005, 0x7968, 0x786c, 0x7b84, 0xd384, 0x0118, 0x8000, 0xa112,
-+      0x0220, 0xc384, 0x8000, 0xa112, 0x1260, 0x7a74, 0x721a, 0x7a70,
-+      0x721e, 0x7a7c, 0x7222, 0x7a78, 0x7226, 0xa006, 0xd384, 0x0108,
-+      0x8000, 0x786e, 0x70d2, 0x7904, 0xd19c, 0x01b0, 0x0146, 0x00c6,
-+      0x20a1, 0x0030, 0x20a2, 0x20a3, 0x0000, 0x7013, 0x0004, 0x2061,
-+      0xfed8, 0x2c14, 0x8c60, 0x2c1c, 0x8c60, 0x2c24, 0x8c60, 0x2c2c,
-+      0x080c, 0x204b, 0x00ce, 0x014e, 0x7814, 0xa005, 0x0138, 0x8001,
-+      0x7816, 0x1120, 0x0e04, 0x2506, 0x2091, 0x4080, 0x0005, 0x2039,
-+      0x251c, 0x0010, 0x2039, 0x2522, 0x2704, 0xa005, 0x0160, 0xac00,
-+      0x2068, 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916,
-+      0x680e, 0x8738, 0x0c88, 0x0005, 0x0003, 0x0009, 0x000f, 0x0015,
-+      0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x00c6, 0x6014, 0x080c,
-+      0x449c, 0x2c68, 0x00ce, 0x0005, 0x78ab, 0x0000, 0x2009, 0xb341,
-+      0x2104, 0xd084, 0x0510, 0x6004, 0xa086, 0x0103, 0x11f0, 0x6114,
-+      0x6018, 0xa105, 0x11d0, 0x00d6, 0x2069, 0x0000, 0x6818, 0xd084,
-+      0x1198, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b,
-+      0x0001, 0x2091, 0x4080, 0x00de, 0x080c, 0x2099, 0x0e04, 0x257e,
-+      0x7864, 0xa065, 0x19d8, 0x0450, 0x00de, 0x0459, 0x0518, 0x6204,
-+      0xa294, 0x00ff, 0xa296, 0x0003, 0x0130, 0x6204, 0xa296, 0x0110,
-+      0x1168, 0x78ab, 0x0001, 0x6204, 0xa294, 0xff00, 0x8217, 0x8211,
-+      0x0128, 0x85ff, 0x1178, 0x8210, 0xa202, 0x1260, 0x0056, 0x00f1,
-+      0x005e, 0x1140, 0x8528, 0x78a8, 0xa005, 0x1120, 0x7864, 0xa065,
-+      0x1904, 0x252e, 0x85ff, 0x0120, 0x2091, 0x4080, 0x7890, 0x70d6,
-+      0x0005, 0x7b8c, 0x7990, 0x70d4, 0xa102, 0x1118, 0x2300, 0xa005,
-+      0x0005, 0x0210, 0xa302, 0x0005, 0x8002, 0x0005, 0xa184, 0xff00,
-+      0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100,
-+      0x0018, 0x8107, 0x8004, 0x8004, 0x7a98, 0x7b94, 0x7ca0, 0x7d9c,
-+      0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0020, 0x6004,
-+      0xa086, 0x0103, 0x1128, 0x6028, 0xa005, 0x1110, 0x2009, 0x000c,
-+      0x080c, 0x1c39, 0x01e0, 0x78a4, 0x8000, 0x78a6, 0xa086, 0x0002,
-+      0x1904, 0x25fc, 0x6014, 0xd0fc, 0x1118, 0x2069, 0xb380, 0x0010,
-+      0x2069, 0xb3c0, 0x2091, 0x8000, 0x681b, 0x0003, 0x78a7, 0x0000,
-+      0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, 0x0468, 0x78a7,
-+      0x0000, 0x080c, 0x2099, 0x798c, 0x7890, 0x8000, 0xa10a, 0x1208,
-+      0xa006, 0x7892, 0x70d6, 0x7904, 0xd19c, 0x01e8, 0x0006, 0x0146,
-+      0x00c6, 0x20a1, 0x0030, 0x20a2, 0xa006, 0x20a2, 0x7013, 0x0004,
-+      0x2061, 0xfed8, 0x2c14, 0xa290, 0x0004, 0x8c60, 0x2c1c, 0xa319,
-+      0x8c60, 0x2c24, 0xa421, 0x8c60, 0x2c2c, 0xa529, 0x080c, 0x204b,
-+      0x00ce, 0x014e, 0x000e, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001,
-+      0x0005, 0x2138, 0xd7fc, 0x1118, 0x2009, 0xb39a, 0x0010, 0x2009,
-+      0xb3da, 0x2091, 0x8000, 0x200a, 0x00f6, 0xd7fc, 0x1168, 0x2009,
-+      0xb380, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0118, 0x2079, 0x0100,
-+      0x0038, 0x2079, 0x0200, 0x0020, 0x2009, 0xb3c0, 0x2079, 0x0100,
-+      0x2104, 0xa086, 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009, 0xb384,
-+      0x0010, 0x2009, 0xb3c4, 0x2104, 0xa005, 0x1130, 0x7830, 0xa084,
-+      0x00c0, 0x1110, 0x781b, 0x0053, 0x00fe, 0x0005, 0x00f6, 0x00e6,
-+      0x2c00, 0xa005, 0x1120, 0xa188, 0x0005, 0x2104, 0x0008, 0x6014,
-+      0xd0fc, 0x1168, 0x2071, 0xb380, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+      0x0118, 0x2079, 0x0100, 0x0038, 0x2079, 0x0200, 0x0020, 0x2071,
-+      0xb3c0, 0x2079, 0x0100, 0x2091, 0x8000, 0x7000, 0xa086, 0x0000,
-+      0x1510, 0x00b8, 0x2c00, 0xa005, 0x1120, 0xa188, 0x0005, 0x2104,
-+      0x0008, 0x6014, 0xd0fc, 0x1158, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+      0x0118, 0x2079, 0x0100, 0x0028, 0x2079, 0x0200, 0x0010, 0x2079,
-+      0x0100, 0x7830, 0xa084, 0x00c0, 0x1130, 0x2c00, 0xa005, 0x1108,
-+      0x2104, 0x781b, 0x0055, 0x2091, 0x8001, 0x00ee, 0x00fe, 0x0005,
-+      0x2009, 0x0002, 0x2069, 0xb340, 0x6808, 0xd0ec, 0x1904, 0x26d5,
-+      0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x26d5, 0x2071, 0xb3c0,
-+      0x2079, 0x0100, 0x2021, 0xb5ff, 0x784b, 0x000f, 0x1104, 0x26a0,
-+      0x7838, 0x0cd0, 0x784b, 0x000f, 0x1304, 0x26a0, 0x7838, 0x0cd0,
-+      0x20a9, 0x0060, 0x789b, 0x0000, 0x78af, 0x0000, 0x78af, 0x0000,
-+      0x1f04, 0x26a4, 0x70ab, 0x009d, 0x2019, 0x5a04, 0x04e1, 0x7003,
-+      0x0000, 0x0016, 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd, 0x080c,
-+      0x286a, 0x001e, 0x701c, 0xa084, 0x000f, 0x0006, 0x680c, 0xd0e4,
-+      0x000e, 0x1118, 0xa085, 0x6300, 0x0010, 0xa085, 0x62c0, 0x7806,
-+      0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x2f08,
-+      0x704f, 0x2f08, 0x745a, 0x7057, 0x0000, 0x8109, 0x0188, 0x2071,
-+      0xb380, 0x6808, 0xd0ec, 0x0130, 0x2079, 0x0100, 0x2021, 0xb3ff,
-+      0x0804, 0x2694, 0x2079, 0x0200, 0x2021, 0xb3ff, 0x0804, 0x269a,
-+      0x080c, 0x2930, 0x0005, 0x0136, 0x0146, 0x0156, 0x0046, 0x0016,
-+      0x3808, 0x20c1, 0x0020, 0xaf80, 0x002b, 0x20a0, 0x2304, 0xa005,
-+      0x789a, 0x0190, 0x8318, 0x2324, 0x8318, 0x2398, 0x24a8, 0xa484,
-+      0xff00, 0x0120, 0xa482, 0x0100, 0x20a9, 0x0100, 0x2020, 0x53a6,
-+      0xa005, 0x1da0, 0x3318, 0x0c50, 0x21c0, 0x001e, 0x004e, 0x015e,
-+      0x014e, 0x013e, 0x0005, 0x0016, 0x00f6, 0xd1bc, 0x1168, 0x0006,
-+      0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2079, 0x0100,
-+      0x0028, 0x2079, 0x0200, 0x0010, 0x2079, 0x0100, 0xa18c, 0x000f,
-+      0x7804, 0xa084, 0xfff0, 0xa105, 0x7806, 0x00fe, 0x001e, 0x080c,
-+      0x286a, 0x0005, 0xd3fc, 0x1168, 0x0006, 0x2001, 0xb342, 0x2004,
-+      0xd0ec, 0x000e, 0x0118, 0x2011, 0x0101, 0x0028, 0x2011, 0x0201,
-+      0x0010, 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x1f04, 0x2745,
-+      0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x0005,
-+      0x2019, 0x0002, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0120, 0x8319,
-+      0x2009, 0x0101, 0x0010, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213,
-+      0x1f04, 0x275f, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205,
-+      0x200a, 0x8319, 0x0118, 0x2009, 0x0201, 0x0c78, 0x0005, 0xd3fc,
-+      0x1168, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+      0x2011, 0x0101, 0x0028, 0x2011, 0x0201, 0x0010, 0x2011, 0x0101,
-+      0x20a9, 0x000c, 0x810b, 0x1f04, 0x2782, 0xa18c, 0xf000, 0x2204,
-+      0xa084, 0x0fff, 0xa105, 0x2012, 0x0005, 0xd3fc, 0x1168, 0x0006,
-+      0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2011, 0x0102,
-+      0x0028, 0x2011, 0x0202, 0x0010, 0x2011, 0x0102, 0x2204, 0xa084,
-+      0xf0cf, 0xa105, 0x2012, 0x0005, 0x00c6, 0xd1bc, 0x1168, 0x0006,
-+      0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2061, 0x0100,
-+      0x0028, 0x2061, 0x0200, 0x0010, 0x2061, 0x0100, 0xc1bc, 0x8103,
-+      0x8003, 0xa080, 0x0020, 0x609a, 0x62ac, 0x63ac, 0x00ce, 0x0005,
-+      0x00c6, 0xd1bc, 0x1168, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+      0x000e, 0x0118, 0x2061, 0x0100, 0x0028, 0x2061, 0x0200, 0x0010,
-+      0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, 0x609a,
-+      0x60a4, 0xa084, 0xffdf, 0x60ae, 0x00ce, 0x0005, 0x00c6, 0xd1bc,
-+      0x1168, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+      0x2061, 0x0100, 0x0028, 0x2061, 0x0200, 0x0010, 0x2061, 0x0100,
-+      0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0x62ae,
-+      0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, 0x0005, 0x2091, 0x8000,
-+      0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, 0x284e, 0xd1fc, 0x1118,
-+      0x2061, 0xfb00, 0x0010, 0x2061, 0xfc10, 0x080c, 0x2856, 0x0538,
-+      0x20a9, 0x0101, 0xd1fc, 0x1118, 0x2061, 0xfa00, 0x0010, 0x2061,
-+      0xfb10, 0x00c6, 0x04d9, 0x0128, 0x00ce, 0x8c60, 0x1f04, 0x2819,
-+      0x0468, 0x000e, 0xd1fc, 0x1128, 0x2071, 0xb380, 0xa082, 0xfa00,
-+      0x0020, 0x2071, 0xb3c0, 0xa082, 0xfb10, 0x707e, 0x717a, 0x2001,
-+      0x0004, 0x706a, 0x7087, 0x000f, 0x080c, 0x2601, 0x00a0, 0x60d0,
-+      0xa005, 0x11a0, 0xd1fc, 0x1118, 0x2071, 0xb380, 0x0010, 0x2071,
-+      0xb3c0, 0x717a, 0x2c00, 0x7082, 0x2001, 0x0006, 0x706a, 0x7087,
-+      0x000f, 0x080c, 0x2601, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001,
-+      0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, 0x0005, 0x2c04, 0xa005,
-+      0x0170, 0x2060, 0x6010, 0xa306, 0x1140, 0x600c, 0xa206, 0x1128,
-+      0x6014, 0xa106, 0x1110, 0xa006, 0x0020, 0x6000, 0x0c80, 0xa085,
-+      0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, 0xd1bc, 0x1178, 0x2079,
-+      0xb380, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+      0x2071, 0x0100, 0x0038, 0x2071, 0x0200, 0x0020, 0x2079, 0xb3c0,
-+      0x2071, 0x0100, 0x791c, 0xa18c, 0x000f, 0x70ec, 0xa084, 0x0100,
-+      0x000e, 0x0160, 0x810b, 0x810b, 0x810b, 0x810b, 0xd0bc, 0x1118,
-+      0xa18d, 0x0f00, 0x0010, 0xa18d, 0x0800, 0x2104, 0x00ee, 0x00fe,
-+      0x0005, 0x2001, 0xb341, 0x2004, 0xd0ac, 0x1140, 0x68e4, 0xa08c,
-+      0x0020, 0x0120, 0xa084, 0x0006, 0x1108, 0x0009, 0x0005, 0x6014,
-+      0x00e6, 0x0036, 0x2018, 0x2071, 0xb900, 0xd0fc, 0x1110, 0x2071,
-+      0xb800, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003,
-+      0xae70, 0x7004, 0xa084, 0x000a, 0x1904, 0x292d, 0x7108, 0xa194,
-+      0xff00, 0x0904, 0x292d, 0xa18c, 0x00ff, 0x701c, 0xa084, 0xff00,
-+      0x01c0, 0x7004, 0xa085, 0x003a, 0x7006, 0x2001, 0x0009, 0xa102,
-+      0x16d8, 0x2001, 0x000a, 0xa102, 0x16d0, 0x2001, 0x000c, 0xa102,
-+      0x16c8, 0x701c, 0xa084, 0x00ff, 0x701e, 0x7004, 0xa084, 0xffdf,
-+      0x7006, 0x2001, 0x000a, 0xa106, 0x01a8, 0x2001, 0x000c, 0xa106,
-+      0x01a0, 0x2001, 0x0012, 0xa106, 0x0198, 0x2001, 0x0014, 0xa106,
-+      0x0190, 0x2001, 0x0019, 0xa106, 0x0188, 0x2001, 0x0032, 0xa106,
-+      0x0180, 0x00d8, 0x2009, 0x000c, 0x00c8, 0x2009, 0x0012, 0x00b0,
-+      0x2009, 0x0014, 0x0098, 0x2009, 0x0019, 0x0080, 0x2009, 0x0020,
-+      0x0068, 0x2009, 0x003f, 0x0050, 0x2009, 0x000a, 0x0038, 0x2009,
-+      0x000c, 0x0020, 0x2009, 0x0019, 0x0008, 0xa016, 0x2100, 0xa205,
-+      0x700a, 0x7004, 0xa085, 0x000a, 0x7006, 0x2071, 0xb340, 0x7004,
-+      0xd0bc, 0x0158, 0xd3fc, 0x1120, 0x73ea, 0x2071, 0xb380, 0x0018,
-+      0x73ee, 0x2071, 0xb3c0, 0x701b, 0x800f, 0x003e, 0x00ee, 0x0005,
-+      0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11d0, 0x2001, 0x04fd, 0x2004,
-+      0xa082, 0x0005, 0x12a0, 0x2071, 0x0200, 0x71ec, 0xa18c, 0x1c00,
-+      0x810f, 0x810c, 0x810c, 0x2079, 0x0100, 0x78ec, 0xa084, 0x1c00,
-+      0x8007, 0x8004, 0x8004, 0xa105, 0xa08a, 0x0007, 0x0208, 0x0005,
-+      0x0002, 0x297e, 0x2965, 0x297e, 0x2965, 0x2958, 0x2972, 0x2958,
-+      0x7008, 0xa084, 0xc3ff, 0xa085, 0x3000, 0x700a, 0x7808, 0xa084,
-+      0xc3ff, 0xa085, 0x3000, 0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff,
-+      0xa085, 0x2000, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, 0x2000,
-+      0x780a, 0x0005, 0x7008, 0xa084, 0xc3ff, 0xa085, 0x0c00, 0x700a,
-+      0x7808, 0xa084, 0xc3ff, 0xa085, 0x0c00, 0x780a, 0x0005, 0x0e04,
-+      0x297f, 0x2091, 0x8000, 0x2071, 0x0000, 0x0006, 0x7018, 0xd084,
-+      0x1de8, 0x000e, 0x2071, 0x0010, 0x70ca, 0x000e, 0x70c6, 0x70c3,
-+      0x8002, 0x70db, 0x0b0c, 0x70df, 0x0001, 0x2071, 0x0000, 0x701b,
-+      0x0001, 0x2091, 0x4080, 0x0cf8, 0x7f3c, 0x7e58, 0x7c30, 0x7d38,
-+      0xa594, 0x003f, 0xa49c, 0x0003, 0xa484, 0x000f, 0x0002, 0x29b8,
-+      0x29b8, 0x29b8, 0x2dbc, 0x4117, 0x29b7, 0x29e0, 0x29e3, 0x29b7,
-+      0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x29b7, 0x0839,
-+      0x8507, 0xa084, 0x003f, 0x0002, 0x29e6, 0x2dbc, 0x2fa8, 0x30d0,
-+      0x310e, 0x338a, 0x3681, 0x36f3, 0x3767, 0x3804, 0x38ee, 0x397e,
-+      0x29e0, 0x2ec1, 0x3653, 0x29dd, 0x464c, 0x466f, 0x4832, 0x483d,
-+      0x4910, 0x29dd, 0x29dd, 0x49e6, 0x49ea, 0x464a, 0x29dd, 0x478d,
-+      0x29dd, 0x44e4, 0x29e3, 0x4ad8, 0x4af6, 0x080c, 0x297f, 0x0005,
-+      0x781b, 0x0057, 0x0005, 0x781b, 0x00e1, 0x0005, 0x724a, 0xa584,
-+      0x0001, 0x1904, 0x44f6, 0x0160, 0x080c, 0x297f, 0x7003, 0x0000,
-+      0x7053, 0x0000, 0x704b, 0x0000, 0x7043, 0x0000, 0x080c, 0x40d4,
-+      0x7064, 0xa06d, 0x0140, 0x70f4, 0xa084, 0x0001, 0x7168, 0xa105,
-+      0x1110, 0x0804, 0x2b4d, 0x7068, 0xa084, 0x0007, 0x0002, 0x2a0f,
-+      0x2a87, 0x2a8f, 0x2a98, 0x2aa1, 0x2b33, 0x2aaa, 0x2a87, 0x7830,
-+      0xd0bc, 0x1968, 0x71f0, 0xd1bc, 0x1950, 0xd1b4, 0x1904, 0x2a65,
-+      0x70c0, 0xa086, 0x0001, 0x0918, 0x080c, 0x40bd, 0x1900, 0x70d0,
-+      0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0090, 0x6b0c, 0x7baa,
-+      0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001,
-+      0x0118, 0x69c0, 0x7daa, 0x79aa, 0x68c4, 0xa04d, 0x6e1c, 0x7830,
-+      0xd0bc, 0x1904, 0x29df, 0x2001, 0x0010, 0x0804, 0x2c89, 0x7064,
-+      0xa005, 0x1904, 0x29df, 0x080c, 0x40bd, 0x1904, 0x29df, 0x00c6,
-+      0x00d6, 0x70d0, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0090,
-+      0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d,
-+      0xa886, 0x0001, 0x0118, 0x69c0, 0x7daa, 0x79aa, 0x68c4, 0xa04d,
-+      0x6e1c, 0x2001, 0x0020, 0x0804, 0x2c89, 0x080c, 0x40a8, 0x1904,
-+      0x29df, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4,
-+      0x785a, 0x781b, 0x0057, 0x704c, 0xc08d, 0x780a, 0x68c0, 0x703e,
-+      0x70f0, 0xc0b4, 0x70f2, 0x70d4, 0xa065, 0x68c4, 0x705e, 0x7003,
-+      0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x0005, 0x080c,
-+      0x40a8, 0x1120, 0x781b, 0x0050, 0x7003, 0x0004, 0x0005, 0x080c,
-+      0x40a8, 0x1128, 0x2011, 0x000c, 0x0419, 0x7003, 0x0004, 0x0005,
-+      0x080c, 0x40a8, 0x1128, 0x2011, 0x0006, 0x00d1, 0x7003, 0x0004,
-+      0x0005, 0x080c, 0x40a8, 0x1128, 0x2011, 0x000d, 0x0089, 0x7003,
-+      0x0004, 0x0005, 0x080c, 0x40a8, 0x1150, 0x2011, 0x0006, 0x0041,
-+      0x7080, 0x7083, 0x0000, 0x2068, 0x7052, 0x7003, 0x0001, 0x0005,
-+      0x7178, 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0090, 0xa286, 0x000c,
-+      0x1120, 0x7aaa, 0x2001, 0x0001, 0x0098, 0xa18c, 0x001f, 0xa18d,
-+      0x00c0, 0x79aa, 0xa286, 0x000d, 0x0120, 0x7aaa, 0x2001, 0x0002,
-+      0x0038, 0x78ab, 0x0020, 0x717c, 0x79aa, 0x7aaa, 0x2001, 0x0004,
-+      0x789b, 0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x00ef, 0x080c,
-+      0x40d4, 0x7087, 0x000f, 0x70f0, 0xd0b4, 0x0168, 0xc0b4, 0x70f2,
-+      0x00c6, 0x70d4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018,
-+      0x8001, 0x601a, 0x00ce, 0x0005, 0x7010, 0xa005, 0x1138, 0x70f0,
-+      0xd0b4, 0x0128, 0x70d4, 0xac06, 0x1110, 0x0c29, 0x0005, 0x0016,
-+      0x71c0, 0xa186, 0x0001, 0x0528, 0x00d6, 0x0026, 0x2100, 0x2011,
-+      0x0001, 0xa212, 0x70d0, 0x2068, 0x6800, 0xac06, 0x0120, 0x8211,
-+      0x01b0, 0x00c9, 0x0cc8, 0x00c6, 0x2100, 0x2011, 0x0001, 0xa212,
-+      0x70d0, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a,
-+      0x8211, 0x0110, 0x0041, 0x0cb0, 0x70c3, 0x0001, 0x00ce, 0x002e,
-+      0x00de, 0x001e, 0x0005, 0xade8, 0x0005, 0x70c8, 0xad06, 0x1110,
-+      0x70c4, 0x2068, 0x0005, 0x080c, 0x40a8, 0x1904, 0x29df, 0x7080,
-+      0x2068, 0x7778, 0x080c, 0x3fb3, 0x2c50, 0x080c, 0x418d, 0x789b,
-+      0x0090, 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041,
-+      0x0001, 0x2001, 0x0004, 0x0804, 0x2c8e, 0x080c, 0x40a8, 0x1904,
-+      0x29df, 0x789b, 0x0090, 0x7064, 0x2068, 0x6f14, 0x080c, 0x2ae3,
-+      0x080c, 0x3fb3, 0x2c50, 0x080c, 0x418d, 0x6824, 0xa005, 0x0130,
-+      0xa082, 0x0006, 0x0208, 0x0010, 0x6827, 0x0005, 0x6b14, 0xa39c,
-+      0x001f, 0xa39d, 0x00c0, 0x2960, 0x6000, 0x2a60, 0xa084, 0x8000,
-+      0x0118, 0xa684, 0x0001, 0x0110, 0xa39c, 0xffbf, 0x7baa, 0x2031,
-+      0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0804, 0x2c8e, 0xc28d,
-+      0x72f2, 0x72dc, 0xa200, 0xa015, 0x7158, 0x8108, 0xa12a, 0x0208,
-+      0x71dc, 0x2164, 0x6504, 0x85ff, 0x1190, 0x715a, 0x8421, 0x1da8,
-+      0x70f0, 0xd08c, 0x0128, 0x70ec, 0xa005, 0x1110, 0x70ef, 0x000a,
-+      0x7048, 0xa005, 0x0904, 0x44f6, 0x0005, 0x2200, 0x0c70, 0x70f0,
-+      0xc08c, 0x70f2, 0x70ef, 0x0000, 0x6034, 0xa005, 0x1db0, 0x6708,
-+      0xa784, 0x073f, 0x01a8, 0xd7d4, 0x1d80, 0xa784, 0x0021, 0x1d68,
-+      0xd78c, 0x0120, 0xd794, 0x0d48, 0xc794, 0x670a, 0xa784, 0x0218,
-+      0x1d20, 0xd7c4, 0x0128, 0x6018, 0xa005, 0x19f8, 0xc7c4, 0x670a,
-+      0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0128,
-+      0x601c, 0xa302, 0x0220, 0x0118, 0x0880, 0x83ff, 0x1970, 0x2d58,
-+      0x2c50, 0x715a, 0x68d3, 0x0000, 0xd7bc, 0x1118, 0x7024, 0x6022,
-+      0x603a, 0xc7bc, 0x670a, 0x68c4, 0xa065, 0xa04d, 0x6100, 0x2a60,
-+      0x2041, 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc,
-+      0x0110, 0xd684, 0x0110, 0xa39c, 0xffbf, 0xd6a4, 0x0110, 0xa39d,
-+      0x0020, 0xa684, 0x000e, 0x1904, 0x2c39, 0xc7a5, 0x670a, 0x2c00,
-+      0x68ca, 0x77c0, 0xa786, 0x0001, 0x11a8, 0x70f0, 0xd0b4, 0x1190,
-+      0x7000, 0xa082, 0x0001, 0x1270, 0x7010, 0xa005, 0x1158, 0x080c,
-+      0x40bd, 0x1140, 0x7830, 0xd0bc, 0x1128, 0x789b, 0x0090, 0x7baa,
-+      0x0804, 0x2c87, 0x8739, 0x77c2, 0x2750, 0x77cc, 0xa7b0, 0x0005,
-+      0x70c8, 0xa606, 0x1108, 0x76c4, 0x76ce, 0x2c3a, 0x8738, 0x2d3a,
-+      0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc,
-+      0x0140, 0x2091, 0x303d, 0x70f0, 0xa084, 0x303d, 0x2091, 0x8000,
-+      0x2090, 0xaad5, 0x0000, 0x0120, 0x8421, 0x2200, 0x1904, 0x2b84,
-+      0x0005, 0xd1dc, 0x0904, 0x3c0a, 0x2029, 0x0020, 0xd69c, 0x1120,
-+      0x8528, 0xd68c, 0x1108, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108,
-+      0xa18c, 0x00ff, 0x70e8, 0xa160, 0x2c64, 0x8cff, 0x0180, 0x6014,
-+      0xa706, 0x1dd0, 0x60bc, 0x8001, 0x60be, 0x1d88, 0x2a60, 0x6008,
-+      0xc0c5, 0x600a, 0x2200, 0x8421, 0x1904, 0x2b84, 0x0005, 0x2a60,
-+      0x610e, 0x69c2, 0x2c00, 0x68ca, 0x8840, 0x6008, 0xc0d5, 0x600a,
-+      0x77c0, 0xa786, 0x0001, 0x1904, 0x2c12, 0x70f0, 0xd0b4, 0x1904,
-+      0x2c12, 0x7000, 0xa082, 0x0001, 0x1a04, 0x2c12, 0x7010, 0xa005,
-+      0x1904, 0x2c12, 0x080c, 0x40bd, 0x1904, 0x2c12, 0x7830, 0xd0bc,
-+      0x1904, 0x2c12, 0x789b, 0x0090, 0x7baa, 0x7daa, 0x79aa, 0x2001,
-+      0x0002, 0x0006, 0x6018, 0x8000, 0x601a, 0x0008, 0x0006, 0x2960,
-+      0x6104, 0x2a60, 0x080c, 0x41d0, 0x1560, 0xa184, 0x0018, 0x0178,
-+      0xa184, 0x0010, 0x0118, 0x080c, 0x3dc6, 0x1518, 0xd19c, 0x0138,
-+      0x69a0, 0xa184, 0x0600, 0x1118, 0x080c, 0x3cd1, 0x00d0, 0x69a0,
-+      0xa184, 0x1e00, 0x01f8, 0xd1dc, 0x0168, 0x00c6, 0x2960, 0x6000,
-+      0xc0ed, 0x6002, 0x6104, 0xc1a5, 0x6106, 0x00ce, 0x080c, 0x3dc6,
-+      0x1140, 0x69a0, 0xd1cc, 0x0118, 0x080c, 0x3d18, 0x0010, 0xd1d4,
-+      0x1d18, 0x69a0, 0xd1e4, 0x0130, 0x6914, 0xa18c, 0xff00, 0x810f,
-+      0x080c, 0x27c0, 0x002e, 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0120,
-+      0xa086, 0x0060, 0x1108, 0xc1f5, 0xa18d, 0x0104, 0x69b6, 0x789b,
-+      0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0168,
-+      0xc0fc, 0x708b, 0x0000, 0xa08a, 0x000d, 0x0328, 0xa08a, 0x000c,
-+      0x718a, 0x2001, 0x000c, 0x800c, 0x718e, 0x78aa, 0x3518, 0x3340,
-+      0x3428, 0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b, 0x0000, 0xad80,
-+      0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0, 0xa286, 0x0020,
-+      0x11e0, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da,
-+      0xa286, 0x0002, 0x05d8, 0x70c0, 0x8000, 0x70c2, 0x74d0, 0xa498,
-+      0x0005, 0x70c8, 0xa306, 0x1108, 0x73c4, 0x73d2, 0xa286, 0x0010,
-+      0x0904, 0x29df, 0x00de, 0x00ce, 0x0005, 0x7000, 0xa005, 0x1d08,
-+      0xa286, 0x0002, 0x15d0, 0x080c, 0x40a8, 0x19d8, 0x6814, 0xc0fc,
-+      0x8007, 0x7882, 0x68b4, 0x785a, 0x781b, 0x0057, 0x704c, 0xc08d,
-+      0x780a, 0x0126, 0x00d6, 0x00c6, 0x70f0, 0xa084, 0x2e00, 0x2090,
-+      0x00ce, 0x00de, 0x012e, 0x2900, 0x705e, 0x68c0, 0x703e, 0x7003,
-+      0x0002, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x7830, 0xd0bc,
-+      0x0140, 0x2091, 0x303d, 0x70f0, 0xa084, 0x303d, 0x2091, 0x8000,
-+      0x2090, 0x70c0, 0xa005, 0x1108, 0x0005, 0x8421, 0x0de8, 0x7254,
-+      0x70dc, 0xa200, 0xa015, 0x0804, 0x2b84, 0xa286, 0x0010, 0x1530,
-+      0x080c, 0x40a8, 0x1904, 0x2d01, 0x6814, 0xc0fc, 0x8007, 0x7882,
-+      0x68b4, 0x785a, 0x781b, 0x0057, 0x704c, 0xc08d, 0x780a, 0x70c0,
-+      0x8000, 0x70c2, 0x74d0, 0xa490, 0x0005, 0x70c8, 0xa206, 0x1108,
-+      0x72c4, 0x72d2, 0x2900, 0x705e, 0x68c0, 0x703e, 0x7003, 0x0002,
-+      0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x0005, 0x6bb4, 0xa39d,
-+      0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94, 0x7bd6,
-+      0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x0057, 0x2900, 0x705e,
-+      0x7202, 0x704c, 0xc08d, 0x780a, 0x7200, 0x2300, 0xa605, 0x0170,
-+      0x70f0, 0xa084, 0x2e00, 0xa086, 0x2600, 0x1118, 0x2009, 0x0000,
-+      0x0010, 0x2009, 0x0001, 0xa284, 0x000f, 0x0023, 0xad80, 0x0009,
-+      0x7042, 0x0005, 0x2dba, 0x55dc, 0x55dc, 0x55ca, 0x55dc, 0x2dba,
-+      0x2dba, 0x2dba, 0x080c, 0x297f, 0x080c, 0x40a8, 0x7808, 0xa084,
-+      0xfffc, 0x780a, 0x00f6, 0x2079, 0xb340, 0x78ac, 0x00fe, 0xd084,
-+      0x01b8, 0x7068, 0xa086, 0x0001, 0x1110, 0x0804, 0x2e97, 0x7068,
-+      0xa086, 0x0005, 0x1158, 0x7080, 0x2068, 0x681b, 0x0004, 0x6817,
-+      0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x706b, 0x0000,
-+      0x70c3, 0x0000, 0x70c4, 0x70ce, 0x70d2, 0x70f4, 0xc084, 0x70f6,
-+      0x080c, 0x2ae3, 0x2011, 0x0004, 0x7168, 0xa186, 0x0001, 0x0160,
-+      0xa186, 0x0007, 0x1118, 0x701b, 0x0005, 0x0030, 0x701b, 0x0001,
-+      0x70f0, 0xc0c5, 0x70f2, 0x0000, 0x2001, 0xb348, 0x203c, 0xd7fc,
-+      0x1120, 0xae86, 0xb380, 0x0120, 0x0040, 0xae86, 0xb3c0, 0x1128,
-+      0xa784, 0x00ff, 0xa086, 0x0018, 0x0130, 0x7014, 0x7012, 0xa005,
-+      0x1110, 0x70c3, 0x0001, 0x0066, 0x080c, 0x52e3, 0x0156, 0x20a9,
-+      0x0010, 0x2039, 0x0000, 0x080c, 0x3ec6, 0xa7b8, 0x0100, 0x1f04,
-+      0x2e1b, 0x015e, 0x006e, 0x7000, 0x0002, 0x2e57, 0x2e35, 0x2e35,
-+      0x2e2d, 0x2e57, 0x2e57, 0x2e57, 0x2e57, 0x7064, 0xa005, 0x0538,
-+      0xad06, 0x1118, 0x6800, 0x7066, 0x0080, 0x6820, 0xd084, 0x1148,
-+      0x6f14, 0x080c, 0x3fb3, 0x6008, 0xc0d4, 0x600a, 0x080c, 0x3be8,
-+      0x0020, 0x7060, 0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e,
-+      0x6818, 0xd0fc, 0x0108, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000,
-+      0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x2085, 0x2011,
-+      0x0004, 0xb284, 0x0800, 0x1118, 0x2021, 0xfb00, 0x0010, 0x2021,
-+      0xfc10, 0x080c, 0x2ea4, 0xb284, 0x0800, 0x0118, 0x2021, 0xb3d9,
-+      0x0010, 0x2021, 0xb399, 0x04c1, 0x0156, 0x20a9, 0x0101, 0xb284,
-+      0x0800, 0x1118, 0x2021, 0xfa00, 0x0010, 0x2021, 0xfb10, 0x0461,
-+      0x8420, 0x1f04, 0x2e77, 0xb284, 0x0600, 0x0118, 0x2061, 0xba00,
-+      0x0010, 0x2061, 0xda00, 0x2021, 0x0002, 0x20a9, 0x0100, 0x6018,
-+      0x6110, 0x81ff, 0x0118, 0xa102, 0x0308, 0x6012, 0x601b, 0x0000,
-+      0xace0, 0x0010, 0x1f04, 0x2e87, 0x8421, 0x1d78, 0x015e, 0x7090,
-+      0xa084, 0x8000, 0x0110, 0x080c, 0x4312, 0x706b, 0x0000, 0x7003,
-+      0x0000, 0x7053, 0x0000, 0x0005, 0x0046, 0x2404, 0xa005, 0x01a8,
-+      0x2068, 0x6800, 0x0006, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000,
-+      0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xc09d,
-+      0x6822, 0x080c, 0x2085, 0x000e, 0x0c48, 0x004e, 0x2023, 0x0000,
-+      0x0005, 0xa282, 0x0003, 0x0310, 0x080c, 0x297f, 0x2300, 0x0002,
-+      0x2ecb, 0x2f45, 0x2f5f, 0xa282, 0x0002, 0x0110, 0x080c, 0x297f,
-+      0x7068, 0x706b, 0x0000, 0x7087, 0x0000, 0x000a, 0x0002, 0x2edf,
-+      0x2edf, 0x2ee1, 0x2f19, 0x3c14, 0x2edf, 0x2f19, 0x2edf, 0x080c,
-+      0x297f, 0x7778, 0x080c, 0x3ec6, 0x7778, 0xa7bc, 0x8f00, 0x080c,
-+      0x3fb3, 0x6018, 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0xfb00,
-+      0x0010, 0x2021, 0xfc10, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c,
-+      0x2f79, 0x01b8, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021,
-+      0xfa00, 0x0010, 0x2021, 0xfb10, 0x0046, 0x2009, 0x0005, 0x2011,
-+      0x0010, 0x080c, 0x2f79, 0x004e, 0x0118, 0x8420, 0x1f04, 0x2f04,
-+      0x015e, 0x8738, 0xa784, 0x001f, 0x1990, 0x0804, 0x29ee, 0x0804,
-+      0x29ee, 0x7778, 0x080c, 0x3fb3, 0x6018, 0xa005, 0x0520, 0xd7fc,
-+      0x1118, 0x2021, 0xfb00, 0x0010, 0x2021, 0xfc10, 0x2009, 0x0005,
-+      0x2011, 0x0020, 0x080c, 0x2f79, 0x01b0, 0x0156, 0x20a9, 0x0101,
-+      0xd7fc, 0x1118, 0x2021, 0xfa00, 0x0010, 0x2021, 0xfb10, 0x0046,
-+      0x2009, 0x0005, 0x2011, 0x0020, 0x04e1, 0x004e, 0x0118, 0x8420,
-+      0x1f04, 0x2f37, 0x015e, 0x0804, 0x29ee, 0x2200, 0x0002, 0x2f4a,
-+      0x2f4c, 0x2f4c, 0x080c, 0x297f, 0x2009, 0x0012, 0x7068, 0xa086,
-+      0x0002, 0x0110, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0108, 0x691a,
-+      0x706b, 0x0000, 0x70f0, 0xc0c5, 0x70f2, 0x0804, 0x404b, 0x2200,
-+      0x0002, 0x2f66, 0x2f4c, 0x2f64, 0x080c, 0x297f, 0x080c, 0x52e3,
-+      0x7000, 0xa086, 0x0002, 0x1904, 0x3b9e, 0x080c, 0x3bfa, 0x6008,
-+      0xa084, 0xfbef, 0x600a, 0x080c, 0x3b90, 0x0904, 0x3b9e, 0x0804,
-+      0x29ee, 0x2404, 0xa005, 0x0548, 0x2068, 0x2d04, 0x0006, 0x6814,
-+      0xa706, 0x0118, 0x2d20, 0x000e, 0x0ca8, 0x000e, 0x2022, 0x6817,
-+      0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x691a,
-+      0x6820, 0xa084, 0x00ff, 0xa205, 0x6822, 0x682b, 0x0000, 0x080c,
-+      0x2085, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xf9ef, 0x600a,
-+      0x080c, 0x2aff, 0x080c, 0x3bfa, 0x0005, 0xa085, 0x0001, 0x0ce0,
-+      0x2300, 0x0002, 0x2faf, 0x2fad, 0x3057, 0x080c, 0x297f, 0x78ec,
-+      0xa084, 0x0001, 0x1170, 0x7000, 0xa086, 0x0004, 0x1110, 0x0804,
-+      0x3006, 0x080c, 0x3bfa, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x0804,
-+      0x3b9e, 0x78e4, 0xa005, 0x1b04, 0x3006, 0x3208, 0x0006, 0x2001,
-+      0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa18c, 0x0600, 0x0010,
-+      0xa18c, 0x0800, 0x0118, 0x0104, 0x29df, 0x0010, 0x0304, 0x29df,
-+      0x2008, 0xa084, 0x0030, 0x1118, 0x781b, 0x0057, 0x0005, 0x78ec,
-+      0xa084, 0x0003, 0x0dc8, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007,
-+      0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000,
-+      0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007,
-+      0x0010, 0x2001, 0x0001, 0x0002, 0x3036, 0x303f, 0x302a, 0x3004,
-+      0x409e, 0x409e, 0x3004, 0x304b, 0x080c, 0x297f, 0x7000, 0xa086,
-+      0x0004, 0x1190, 0x7068, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002,
-+      0x2019, 0x0000, 0x0804, 0x2ec1, 0x7068, 0xa086, 0x0006, 0x0db0,
-+      0x7068, 0xa086, 0x0004, 0x0d90, 0x79e4, 0xa184, 0x0030, 0x0120,
-+      0x78ec, 0xa084, 0x0003, 0x1110, 0x0804, 0x3653, 0x2001, 0x0003,
-+      0x0804, 0x339b, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c,
-+      0x3eaa, 0x782b, 0x3008, 0x781b, 0x005d, 0x0005, 0x6818, 0xd0fc,
-+      0x0110, 0x681b, 0x001d, 0x080c, 0x3eaa, 0x0804, 0x4073, 0x6818,
-+      0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3eaa, 0x782b, 0x3008,
-+      0x781b, 0x00dd, 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d,
-+      0x080c, 0x3eaa, 0x782b, 0x3008, 0x781b, 0x00a4, 0x0005, 0xa584,
-+      0x000f, 0x11c0, 0x7000, 0x0002, 0x29ee, 0x3064, 0x3066, 0x3b9e,
-+      0x3b9e, 0x3b9e, 0x3064, 0x3064, 0x080c, 0x297f, 0x080c, 0x3bfa,
-+      0x6008, 0xa084, 0xfbef, 0x600a, 0x080c, 0x3b90, 0x0904, 0x3b9e,
-+      0x0804, 0x29ee, 0x78e4, 0xa005, 0x1b04, 0x3006, 0x3208, 0x0006,
-+      0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa18c, 0x0600,
-+      0x0010, 0xa18c, 0x0800, 0x0118, 0x0104, 0x3006, 0x0010, 0x0304,
-+      0x3006, 0x2008, 0xa084, 0x0030, 0x1118, 0x781b, 0x0057, 0x0005,
-+      0x78ec, 0xa084, 0x0003, 0x0dc8, 0x7884, 0xd0fc, 0x1118, 0xa184,
-+      0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001,
-+      0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184,
-+      0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x30be, 0x30c2, 0x30b7,
-+      0x30b5, 0x409e, 0x409e, 0x30b5, 0x4096, 0x080c, 0x297f, 0x080c,
-+      0x3eb0, 0x782b, 0x3008, 0x781b, 0x005d, 0x0005, 0x080c, 0x3eb0,
-+      0x0804, 0x4073, 0x080c, 0x3eb0, 0x782b, 0x3008, 0x781b, 0x00dd,
-+      0x0005, 0x080c, 0x3eb0, 0x782b, 0x3008, 0x781b, 0x00a4, 0x0005,
-+      0x2300, 0x0002, 0x30d7, 0x30d5, 0x30d9, 0x080c, 0x297f, 0x0804,
-+      0x3804, 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030,
-+      0x0904, 0x3804, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3804, 0xa184,
-+      0x0100, 0x0d98, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007, 0x0090,
-+      0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000, 0x0050,
-+      0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007, 0x0010,
-+      0x2001, 0x0001, 0x0002, 0x310b, 0x30c2, 0x302a, 0x404b, 0x409e,
-+      0x409e, 0x404b, 0x4096, 0x080c, 0x405b, 0x0005, 0xa282, 0x0005,
-+      0x0310, 0x080c, 0x297f, 0x7898, 0x2040, 0x2300, 0x0002, 0x311a,
-+      0x3356, 0x3362, 0x2200, 0x0002, 0x3136, 0x3123, 0x3136, 0x3121,
-+      0x3338, 0x080c, 0x297f, 0x789b, 0x0018, 0x78a8, 0x2010, 0xa084,
-+      0x00ff, 0xa082, 0x0020, 0x0a04, 0x3e69, 0xa08a, 0x0004, 0x1a04,
-+      0x3e69, 0x0002, 0x3e69, 0x3e69, 0x3e69, 0x3e1d, 0x789b, 0x0018,
-+      0x79a8, 0xa184, 0x0080, 0x0148, 0x0804, 0x3e69, 0x7000, 0xa005,
-+      0x1dd8, 0x2011, 0x0004, 0x0804, 0x398f, 0xa184, 0x00ff, 0xa08a,
-+      0x0010, 0x1a04, 0x3e69, 0x0002, 0x315e, 0x315c, 0x3171, 0x3175,
-+      0x3234, 0x3e69, 0x3e69, 0x3236, 0x3e69, 0x3e69, 0x3334, 0x3334,
-+      0x3e69, 0x3e69, 0x3e69, 0x3336, 0x080c, 0x297f, 0xa684, 0x1000,
-+      0x0140, 0x2001, 0x0500, 0x8000, 0x8000, 0x783a, 0x781b, 0x009d,
-+      0x0005, 0x6818, 0xd0fc, 0x0118, 0x681b, 0x001d, 0x0c90, 0x0804,
-+      0x404b, 0x681b, 0x001d, 0x0804, 0x3e98, 0x6920, 0x6922, 0xa684,
-+      0x1800, 0x1904, 0x31d1, 0x6820, 0xa084, 0x0001, 0x1904, 0x31d6,
-+      0x6818, 0xa086, 0x0008, 0x1110, 0x681b, 0x0000, 0xd6d4, 0x0904,
-+      0x3231, 0xd6bc, 0x05a0, 0x708b, 0x0000, 0x6818, 0xa084, 0x003f,
-+      0xa08a, 0x000d, 0x0760, 0xa08a, 0x000c, 0x718a, 0x2001, 0x000c,
-+      0x800c, 0x718e, 0x789b, 0x0061, 0x78aa, 0x0156, 0x0136, 0x0146,
-+      0x0016, 0xb28c, 0x0600, 0x0168, 0x0006, 0x2001, 0xb342, 0x2004,
-+      0xd0ec, 0x000e, 0x0118, 0x20a1, 0x012b, 0x0028, 0x20a1, 0x022b,
-+      0x0010, 0x20a1, 0x012b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac,
-+      0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x6038,
-+      0xa005, 0x1150, 0x681c, 0xa084, 0x000e, 0x0904, 0x3e98, 0x080c,
-+      0x3eb3, 0x782b, 0x3008, 0x0010, 0x8001, 0x603a, 0x781b, 0x005f,
-+      0x0005, 0xd6e4, 0x0118, 0x781b, 0x006c, 0x0005, 0xa684, 0x0060,
-+      0x0904, 0x322e, 0xd6dc, 0x0904, 0x322e, 0xd6fc, 0x1108, 0x00a0,
-+      0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x8007, 0xa084,
-+      0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2,
-+      0x6b94, 0x2200, 0xa303, 0x68ae, 0xd6f4, 0x0118, 0xc6f4, 0x7e5a,
-+      0x6eb6, 0x7000, 0xa086, 0x0003, 0x1148, 0x0006, 0x080c, 0x52e3,
-+      0x080c, 0x55dc, 0x000e, 0x781b, 0x006b, 0x0005, 0xa006, 0x080c,
-+      0x56fb, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0120,
-+      0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6,
-+      0x7bd6, 0x7bde, 0x2300, 0xa405, 0x1130, 0xc6f5, 0x7e5a, 0x6eb6,
-+      0x781b, 0x006b, 0x0005, 0x781b, 0x006b, 0x2200, 0xa115, 0x1118,
-+      0x080c, 0x55dc, 0x0005, 0x080c, 0x5622, 0x0005, 0x781b, 0x006c,
-+      0x0005, 0x781b, 0x005f, 0x0005, 0x080c, 0x297f, 0x0804, 0x32cc,
-+      0x00c6, 0x705c, 0x2060, 0x6920, 0xa18c, 0xecff, 0x6922, 0x6000,
-+      0xa084, 0xcfdf, 0x6002, 0x080c, 0x3d32, 0xa006, 0x2040, 0x2038,
-+      0x080c, 0x3de9, 0x0804, 0x32c0, 0x00c6, 0x705c, 0x2060, 0x2c48,
-+      0x7aa8, 0xa294, 0x00ff, 0xa286, 0x0004, 0x11e8, 0x6920, 0xd1e4,
-+      0x1180, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006,
-+      0x2010, 0x080c, 0x3d35, 0x2029, 0x0000, 0x080c, 0x3de9, 0x0804,
-+      0x32c0, 0xa18c, 0xecff, 0x6922, 0x6104, 0xa18c, 0xffdd, 0x6106,
-+      0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003, 0x01c0, 0x6104, 0xa184,
-+      0x0010, 0x0548, 0x080c, 0x3faf, 0x080c, 0x3dc6, 0x88ff, 0x0518,
-+      0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a,
-+      0xd6d4, 0x1110, 0x0804, 0x4056, 0x0804, 0x3ccc, 0x6920, 0xd1cc,
-+      0x0130, 0xa18c, 0xfdff, 0x6922, 0x6000, 0xc0ec, 0x6002, 0x2039,
-+      0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x2029,
-+      0x0000, 0x080c, 0x3de9, 0xa286, 0x0001, 0x0158, 0x6104, 0xa184,
-+      0x0008, 0x01b0, 0x080c, 0x3faf, 0x080c, 0x3cd1, 0x88ff, 0x1980,
-+      0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c, 0xfeff, 0x6922, 0x6000,
-+      0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x3d35,
-+      0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f, 0x0005, 0x781b,
-+      0x006c, 0x0005, 0x0804, 0x3e92, 0x2808, 0x789b, 0x0090, 0x2019,
-+      0x0090, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x11b8, 0x2300,
-+      0xa102, 0xa086, 0x0001, 0x0904, 0x3238, 0x7ca8, 0xa4a4, 0x00ff,
-+      0xa480, 0x0002, 0xa300, 0x2018, 0xa102, 0x0a04, 0x324c, 0x0904,
-+      0x324c, 0x24a8, 0x7aa8, 0x1f04, 0x32ea, 0x0c18, 0xa284, 0x00f0,
-+      0xa082, 0x0020, 0x06a8, 0x2200, 0xa082, 0x0021, 0x1688, 0x7aa8,
-+      0x8318, 0x8318, 0x2100, 0xa302, 0x0aa0, 0xa286, 0x0023, 0x0950,
-+      0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xc0a5,
-+      0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x78a0, 0x8001, 0x0904,
-+      0x32c0, 0x20a8, 0x7998, 0x789b, 0x0060, 0x78aa, 0x2011, 0x0090,
-+      0x799a, 0x78a8, 0x7998, 0x7a9a, 0x78aa, 0x7a98, 0x1f04, 0x3318,
-+      0xc695, 0x7e5a, 0xd6d4, 0x1110, 0x0804, 0x4056, 0x0804, 0x3ccc,
-+      0x8318, 0x2100, 0xa302, 0x0a04, 0x32d1, 0xa284, 0x0080, 0x1904,
-+      0x3e98, 0x78a0, 0xa005, 0x08d8, 0x0804, 0x3e98, 0x0804, 0x3e69,
-+      0x705c, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e,
-+      0x0001, 0x0110, 0x080c, 0x297f, 0x7aa8, 0xa294, 0x00ff, 0x784b,
-+      0x0008, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0005, 0x1a04, 0x3e69,
-+      0x0002, 0x3e69, 0x3c48, 0x3e69, 0x3d77, 0x4218, 0xa282, 0x0000,
-+      0x1110, 0x080c, 0x297f, 0x080c, 0x3eaa, 0x782b, 0x3008, 0x781b,
-+      0x006c, 0x0005, 0xa282, 0x0003, 0x1110, 0x080c, 0x297f, 0xd4fc,
-+      0x11d0, 0x7068, 0xa005, 0x0110, 0x080c, 0x297f, 0x6f14, 0x777a,
-+      0xa7bc, 0x8f00, 0x080c, 0x3fb3, 0x6008, 0xa085, 0x0021, 0x600a,
-+      0x8738, 0xa784, 0x001f, 0x1db0, 0x080c, 0x3ead, 0x706b, 0x0002,
-+      0x701b, 0x0009, 0x0010, 0x080c, 0x3eb6, 0x782b, 0x3008, 0x781b,
-+      0x006c, 0x0005, 0xa282, 0x0004, 0x0310, 0x080c, 0x297f, 0x2300,
-+      0x0002, 0x3394, 0x34a8, 0x34d4, 0xa286, 0x0003, 0x0110, 0x080c,
-+      0x297f, 0x2001, 0x0000, 0x7046, 0x68d0, 0xa005, 0x0110, 0x7003,
-+      0x0003, 0x68a0, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a, 0x7000,
-+      0xa084, 0x000f, 0x0002, 0x29ee, 0x33b8, 0x33b5, 0x359e, 0x363b,
-+      0x29ee, 0x33b3, 0x33b3, 0x080c, 0x297f, 0x6008, 0xc0d4, 0x600a,
-+      0xd6e4, 0x1130, 0x080c, 0x52e3, 0x2009, 0x0000, 0x0804, 0x345a,
-+      0x7868, 0xa08c, 0x00ff, 0x0588, 0xa186, 0x0008, 0x1158, 0x6008,
-+      0xc0a4, 0x600a, 0x080c, 0x3b90, 0x0540, 0x080c, 0x3bfa, 0x080c,
-+      0x52e3, 0x0060, 0xa186, 0x0028, 0x1500, 0x6018, 0xa005, 0x0d78,
-+      0x8001, 0x0d68, 0x8001, 0x0d58, 0x601e, 0x0c48, 0x6820, 0xd084,
-+      0x0904, 0x29ee, 0xc084, 0x6822, 0x080c, 0x2af4, 0x7060, 0x00c6,
-+      0x2060, 0x6800, 0x6002, 0x00ce, 0x6004, 0x6802, 0xa005, 0x2d00,
-+      0x1108, 0x6002, 0x6006, 0x0804, 0x29ee, 0x0016, 0x81ff, 0x11d8,
-+      0x71f0, 0xd1bc, 0x11c0, 0xd1b4, 0x01b0, 0x080c, 0x40a8, 0x1198,
-+      0x00d6, 0x70d8, 0xa06d, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x68b4,
-+      0x785a, 0x781b, 0x0057, 0x704c, 0xc08d, 0x780a, 0xc1b4, 0x71f2,
-+      0x7003, 0x0030, 0x00de, 0x080c, 0x34e7, 0x001e, 0x81ff, 0x0904,
-+      0x345a, 0xa684, 0x5f00, 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186,
-+      0x0002, 0x15c8, 0x080c, 0x2ae3, 0x080c, 0x2aff, 0x6820, 0xa084,
-+      0x0800, 0x1588, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, 0x8213,
-+      0x8213, 0xb284, 0x0600, 0x0118, 0xa290, 0xb800, 0x0010, 0xa290,
-+      0xb900, 0xa290, 0x0000, 0x221c, 0xd3c4, 0x1108, 0x0070, 0x6820,
-+      0xd0e4, 0x0128, 0xa084, 0xefff, 0x6822, 0xc3ac, 0x2312, 0x8210,
-+      0x2204, 0xa085, 0x0038, 0x2012, 0x8211, 0xd3d4, 0x0138, 0x68a0,
-+      0xd0c4, 0x1120, 0x080c, 0x3555, 0x0804, 0x29ee, 0x6008, 0xc08d,
-+      0x600a, 0x0008, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7044,
-+      0x681a, 0xa68c, 0x5f00, 0x691e, 0x6010, 0xa005, 0x0120, 0x8001,
-+      0x1310, 0x080c, 0x297f, 0x6012, 0x6018, 0xa005, 0x0118, 0x8001,
-+      0x601a, 0x1118, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x1130,
-+      0x6800, 0xa005, 0x1108, 0x6002, 0x6006, 0x0020, 0x7060, 0x2060,
-+      0x6800, 0x6002, 0x2061, 0xb340, 0x6807, 0x0103, 0x2d08, 0x206b,
-+      0x0000, 0x605c, 0x8000, 0x605e, 0x6060, 0xa005, 0x6162, 0x0110,
-+      0x2d02, 0x0008, 0x6166, 0x7000, 0xa086, 0x0030, 0x1904, 0x29ee,
-+      0x7003, 0x0002, 0x70d8, 0xa06d, 0x68c0, 0x703e, 0x70d4, 0xa065,
-+      0x68c4, 0x705e, 0x2d00, 0x7052, 0xad80, 0x0009, 0x7042, 0x0005,
-+      0xa282, 0x0004, 0x0210, 0x080c, 0x297f, 0x2200, 0x0002, 0x34ab,
-+      0x34b3, 0x34be, 0x34b3, 0x7000, 0xa086, 0x0005, 0x0120, 0x080c,
-+      0x3eaa, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x7890, 0x8007,
-+      0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c,
-+      0x00ff, 0xa186, 0x0003, 0x0128, 0xa186, 0x0000, 0x0110, 0x0804,
-+      0x3e69, 0x781b, 0x006c, 0x0005, 0x6820, 0xc095, 0x6822, 0x82ff,
-+      0x1118, 0x080c, 0x3eaa, 0x0030, 0x8211, 0x0110, 0x080c, 0x297f,
-+      0x080c, 0x3eb6, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0xa684,
-+      0x0060, 0x1150, 0x2d00, 0xa005, 0x0904, 0x3554, 0x682f, 0x0000,
-+      0x6833, 0x0000, 0x0804, 0x3554, 0xd6dc, 0x1190, 0x68b4, 0xd0dc,
-+      0x1178, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7044, 0xa005, 0x1128,
-+      0x2200, 0xa105, 0x0120, 0x7047, 0x0015, 0x0804, 0x52e3, 0x0005,
-+      0xd6ac, 0x0508, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833, 0x0000,
-+      0x0804, 0x52e3, 0x68b4, 0xa084, 0x4000, 0xa635, 0xd6f4, 0x1da0,
-+      0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0xd6dc, 0x1130, 0x68b4,
-+      0xd0dc, 0x0118, 0x69a8, 0x6aa4, 0x0010, 0x79d8, 0x7adc, 0x692e,
-+      0x6a32, 0x0804, 0x52e3, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833,
-+      0x0000, 0x0804, 0x52e3, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4,
-+      0x1da0, 0x7044, 0xa005, 0x1110, 0x7047, 0x0015, 0x79d8, 0x7adc,
-+      0x78d0, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x692e,
-+      0x6a32, 0x2100, 0xa205, 0x1110, 0x0804, 0x52e3, 0x7000, 0xa086,
-+      0x0006, 0x0110, 0x0804, 0x52e3, 0x0005, 0x6008, 0xc0cd, 0xd3cc,
-+      0x0108, 0xc08d, 0x600a, 0x6818, 0x68ba, 0x681b, 0x0006, 0x688f,
-+      0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f,
-+      0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b,
-+      0x0020, 0x68b3, 0x0000, 0x68af, 0x0000, 0x7000, 0x0002, 0x29ee,
-+      0x3587, 0x3581, 0x357f, 0x357f, 0x357f, 0x357f, 0x357f, 0x080c,
-+      0x297f, 0x6820, 0xd084, 0x1118, 0x080c, 0x3be8, 0x0030, 0x7060,
-+      0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0xb28c, 0x0600, 0x0118,
-+      0x2021, 0xb399, 0x0010, 0x2021, 0xb3d9, 0x2404, 0xa005, 0x0110,
-+      0x2020, 0x0cd8, 0x2d22, 0x206b, 0x0000, 0x0005, 0x080c, 0x3bee,
-+      0x080c, 0x3bfa, 0x6008, 0xc0cc, 0x600a, 0x789b, 0x000e, 0x6f14,
-+      0x6817, 0x0002, 0xb28c, 0x0600, 0x0118, 0x2009, 0x0000, 0x0010,
-+      0x2009, 0x0001, 0x080c, 0x5736, 0xd6dc, 0x01c8, 0x691c, 0xc1ed,
-+      0x691e, 0x6828, 0xa082, 0x000e, 0x0290, 0x6848, 0xa084, 0x000f,
-+      0xa086, 0x000b, 0x1160, 0x685c, 0xa086, 0x0047, 0x1140, 0x2001,
-+      0xb341, 0x2004, 0xd0ac, 0x1118, 0x2700, 0x080c, 0x28a8, 0x68b8,
-+      0xd0fc, 0x1110, 0x681a, 0x0060, 0x6818, 0xd0fc, 0x0148, 0x7868,
-+      0xa08c, 0x00ff, 0x0118, 0x681b, 0x001e, 0x0010, 0x681b, 0x0000,
-+      0xb284, 0x0600, 0x1118, 0x2021, 0xb3d9, 0x0010, 0x2021, 0xb399,
-+      0x2404, 0xad06, 0x0108, 0x7460, 0x6800, 0x2022, 0x68d3, 0x0000,
-+      0x70f4, 0xc084, 0x70f6, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c4,
-+      0x2060, 0x6000, 0xd0a4, 0x0580, 0x2041, 0x0021, 0x2049, 0x0005,
-+      0x2051, 0x0020, 0x00d6, 0x00f6, 0x0156, 0x0146, 0x2079, 0xb340,
-+      0x080c, 0x1cd8, 0x014e, 0x015e, 0x00fe, 0x70e8, 0x2010, 0x2009,
-+      0x0101, 0x0026, 0x2204, 0xa06d, 0x0140, 0x6814, 0xa706, 0x0110,
-+      0x6800, 0x0cc8, 0x6820, 0xc0d5, 0x6822, 0x002e, 0x8210, 0x8109,
-+      0x1d80, 0x00de, 0x706b, 0x0003, 0x7083, 0x0000, 0x777a, 0x7087,
-+      0x000f, 0x71f0, 0xc1c4, 0x71f2, 0x6818, 0xa086, 0x0002, 0x1138,
-+      0x6817, 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, 0x681e, 0x080c,
-+      0x2085, 0x0804, 0x29ee, 0x080c, 0x34e7, 0x682b, 0x0000, 0x789b,
-+      0x000e, 0x6f14, 0x080c, 0x40d9, 0xa08c, 0x00ff, 0x6916, 0x6818,
-+      0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0x5f00, 0x691e, 0x706b,
-+      0x0000, 0x0804, 0x29ee, 0x7000, 0xa005, 0x1110, 0x0804, 0x29ee,
-+      0xa006, 0x080c, 0x52e3, 0x6817, 0x0000, 0x6920, 0xd1ac, 0x1110,
-+      0x681b, 0x0014, 0xa68c, 0x5f00, 0x691e, 0x682b, 0x0000, 0x6820,
-+      0xa084, 0x00ff, 0x6822, 0x7000, 0x0002, 0x29ee, 0x367a, 0x3677,
-+      0x367c, 0x367c, 0x367c, 0x3675, 0x3675, 0x080c, 0x297f, 0x6008,
-+      0xc0d4, 0x600a, 0x080c, 0x3bfa, 0x6008, 0xc0a4, 0x600a, 0x0804,
-+      0x3bb3, 0x2300, 0x0002, 0x3686, 0x3688, 0x36f1, 0x080c, 0x297f,
-+      0xd6fc, 0x1904, 0x36da, 0x7000, 0xa00d, 0x0002, 0x29ee, 0x369e,
-+      0x3698, 0x36c8, 0x369e, 0x36d1, 0x3696, 0x3696, 0x080c, 0x297f,
-+      0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060,
-+      0x0538, 0xa086, 0x0060, 0x1510, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a,
-+      0x6eb6, 0x681c, 0xc0ac, 0x681e, 0xa186, 0x0002, 0x0148, 0x080c,
-+      0x52e3, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x5622, 0x0010,
-+      0x080c, 0x55dc, 0x781b, 0x006c, 0x71f0, 0xd1b4, 0x1904, 0x29df,
-+      0x70c0, 0xa086, 0x0001, 0x1904, 0x2a3f, 0x0005, 0xd6ec, 0x09f0,
-+      0x6818, 0xd0fc, 0x0130, 0x681b, 0x0015, 0xd6f4, 0x0110, 0x681b,
-+      0x0007, 0x080c, 0x405b, 0x0005, 0x78cb, 0x0000, 0x781b, 0x00d8,
-+      0x0804, 0x29df, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x78d0, 0x79d2,
-+      0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100,
-+      0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x006c,
-+      0x0005, 0x080c, 0x297f, 0x2300, 0x0002, 0x36f8, 0x36fa, 0x3752,
-+      0x080c, 0x297f, 0xd6fc, 0x1904, 0x3742, 0x7000, 0xa00d, 0x0002,
-+      0x29ee, 0x3710, 0x370a, 0x373a, 0x3710, 0x373f, 0x3708, 0x3708,
-+      0x080c, 0x297f, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da,
-+      0xa684, 0x0060, 0x0538, 0xa086, 0x0060, 0x1510, 0xa6b4, 0xbfbf,
-+      0xc6ed, 0x7e5a, 0x6eb6, 0xa186, 0x0002, 0x0148, 0x080c, 0x52e3,
-+      0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x5622, 0x0010, 0x080c,
-+      0x55dc, 0x781b, 0x006c, 0x681c, 0xc0b4, 0x681e, 0x71f0, 0xd1b4,
-+      0x1904, 0x29df, 0x70c0, 0xa086, 0x0001, 0x1904, 0x2a3f, 0x0005,
-+      0xd6ec, 0x09f0, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x0007, 0x781b,
-+      0x00dd, 0x0005, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100,
-+      0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b,
-+      0x006c, 0x0005, 0xd6dc, 0x0130, 0x782b, 0x3009, 0x781b, 0x006c,
-+      0x0804, 0x29df, 0x6820, 0xc095, 0x6822, 0x080c, 0x4042, 0xc6dd,
-+      0x080c, 0x3eaa, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x2300,
-+      0x0002, 0x376c, 0x376e, 0x3770, 0x080c, 0x297f, 0x0804, 0x3e98,
-+      0x7d98, 0xd6d4, 0x1904, 0x37bc, 0x79e4, 0xd1ac, 0x0130, 0x78ec,
-+      0xa084, 0x0003, 0x0110, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab,
-+      0x0000, 0xa684, 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac, 0x0120,
-+      0x78ec, 0xa084, 0x0003, 0x11b8, 0x2001, 0xb342, 0x2004, 0xd0e4,
-+      0x1170, 0x6820, 0xd0c4, 0x0158, 0x00c6, 0x705c, 0x2060, 0x6004,
-+      0xc09d, 0x6006, 0x6008, 0xa084, 0x00ff, 0x600a, 0x00ce, 0x2001,
-+      0x0014, 0x0804, 0x339b, 0x7884, 0xd0fc, 0x1118, 0xa184, 0x0007,
-+      0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118, 0x2001, 0x0000,
-+      0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118, 0xa184, 0x0007,
-+      0x0010, 0x2001, 0x0001, 0x0492, 0x7a90, 0xa294, 0x0007, 0x789b,
-+      0x0060, 0x79a8, 0x81ff, 0x0538, 0x789b, 0x0090, 0x7ba8, 0xa384,
-+      0x0001, 0x11a0, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x1118, 0x2009,
-+      0xfff7, 0x0028, 0xa386, 0x0003, 0x1148, 0x2009, 0xffef, 0x00c6,
-+      0x705c, 0x2060, 0x6004, 0xa104, 0x6006, 0x00ce, 0x789b, 0x0060,
-+      0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920,
-+      0xa18c, 0xfcff, 0x6922, 0x7d9a, 0x0804, 0x404b, 0x3036, 0x303f,
-+      0x37f8, 0x37fe, 0x37f6, 0x37f6, 0x404b, 0x404b, 0x080c, 0x297f,
-+      0x6920, 0xa18c, 0xfcff, 0x6922, 0x0804, 0x4053, 0x6920, 0xa18c,
-+      0xfcff, 0x6922, 0x0804, 0x404b, 0x79e4, 0xa184, 0x0030, 0x0120,
-+      0x78ec, 0xa084, 0x0003, 0x1548, 0x7000, 0xa086, 0x0004, 0x1190,
-+      0x7068, 0xa086, 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000,
-+      0x0804, 0x2ec1, 0x7068, 0xa086, 0x0006, 0x0db0, 0x7068, 0xa086,
-+      0x0004, 0x0d90, 0x7000, 0xa086, 0x0000, 0x0904, 0x29df, 0x6820,
-+      0xd0ac, 0x1904, 0x339b, 0x6818, 0xa08e, 0x0002, 0x0120, 0xc0fd,
-+      0x681a, 0x2001, 0x0014, 0x0804, 0x339b, 0x7884, 0xd0fc, 0x1118,
-+      0xa184, 0x0007, 0x0090, 0xa184, 0x0007, 0xa086, 0x0004, 0x1118,
-+      0x2001, 0x0000, 0x0050, 0xa184, 0x0007, 0xa086, 0x0005, 0x0118,
-+      0xa184, 0x0007, 0x0010, 0x2001, 0x0001, 0x0002, 0x404b, 0x404b,
-+      0x3856, 0x404b, 0x409e, 0x409e, 0x404b, 0x404b, 0xd6bc, 0x05d0,
-+      0x7188, 0x81ff, 0x05b8, 0xa182, 0x000d, 0x1318, 0x708b, 0x0000,
-+      0x0028, 0xa182, 0x000c, 0x708a, 0x2009, 0x000c, 0x789b, 0x0061,
-+      0x79aa, 0x0156, 0x0136, 0x0146, 0x708c, 0x8114, 0xa210, 0x728e,
-+      0xa080, 0x000b, 0xad00, 0x2098, 0x0016, 0xb28c, 0x0600, 0x0168,
-+      0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x20a1,
-+      0x012b, 0x0028, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x001e,
-+      0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x014e, 0x013e, 0x015e,
-+      0x0804, 0x4053, 0xd6d4, 0x1904, 0x38df, 0x6820, 0xd084, 0x0904,
-+      0x4053, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0120, 0xa086, 0x0060,
-+      0x1108, 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab,
-+      0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa, 0x8008,
-+      0x810c, 0x0904, 0x3c0f, 0xa18c, 0x00f8, 0x1904, 0x3c0f, 0x0156,
-+      0x0136, 0x0146, 0x0016, 0xb28c, 0x0600, 0x0168, 0x0006, 0x2001,
-+      0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x20a1, 0x012b, 0x0028,
-+      0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, 0x001e, 0x789b, 0x0000,
-+      0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e,
-+      0x015e, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0804, 0x4053, 0x6818,
-+      0xd0fc, 0x0110, 0x681b, 0x0008, 0x6820, 0xc0ad, 0x6822, 0x080c,
-+      0x3eb0, 0x78cb, 0x0000, 0x781b, 0x00d4, 0x0005, 0x2300, 0x0002,
-+      0x38f5, 0x397c, 0x38f3, 0x080c, 0x297f, 0x7000, 0xa084, 0x000f,
-+      0x0002, 0x29ee, 0x3939, 0x3903, 0x390a, 0x3901, 0x29ee, 0x3901,
-+      0x3901, 0x080c, 0x297f, 0x681c, 0xd0ec, 0x0198, 0x6008, 0xc08d,
-+      0x600a, 0x0078, 0x68d0, 0xa005, 0x1560, 0x6920, 0xa18d, 0x0001,
-+      0x6922, 0x68d3, 0x0001, 0x70f4, 0xc085, 0x70f6, 0x6800, 0x7066,
-+      0x0078, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005, 0x1108,
-+      0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, 0x000e, 0x1140,
-+      0x2009, 0xfc10, 0xb284, 0x0600, 0x0140, 0x2009, 0xfb00, 0x0028,
-+      0x702c, 0x68be, 0x713c, 0x70e8, 0xa108, 0x2104, 0x6802, 0x2d0a,
-+      0x7162, 0x6eb6, 0xa684, 0x0060, 0x1120, 0xa684, 0x7fff, 0x68b6,
-+      0x04c8, 0xd6dc, 0x1150, 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6,
-+      0x6898, 0x68aa, 0x080c, 0x52e3, 0x0468, 0xd6ac, 0x0168, 0x68d0,
-+      0xa005, 0x0118, 0x080c, 0x5736, 0x0010, 0x080c, 0x52e3, 0x79d8,
-+      0x7adc, 0x69aa, 0x6aa6, 0x0030, 0x080c, 0x3fc5, 0x69aa, 0x6aa6,
-+      0x080c, 0x52e3, 0xd6fc, 0x01b0, 0xa684, 0x7fff, 0x68b6, 0x7adc,
-+      0x79d8, 0xd6ac, 0x1138, 0x78d0, 0x8007, 0xa084, 0x007f, 0xa108,
-+      0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200,
-+      0xa303, 0x68ae, 0x0804, 0x29ee, 0x0804, 0x3e98, 0x7043, 0x0000,
-+      0xa282, 0x0006, 0x0310, 0x080c, 0x297f, 0x7000, 0xa086, 0x0007,
-+      0x090c, 0x41a1, 0x2300, 0x0002, 0x398f, 0x39c1, 0x39de, 0x2200,
-+      0x0002, 0x39bf, 0x3e98, 0x3997, 0x39bf, 0x39fe, 0x3a65, 0x7003,
-+      0x0005, 0xb284, 0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001,
-+      0xfe97, 0x2068, 0x7052, 0x0156, 0x20a9, 0x0037, 0x2003, 0x0000,
-+      0x8000, 0x1f04, 0x39a6, 0x015e, 0xad80, 0x0009, 0x7042, 0xb284,
-+      0x0600, 0x0118, 0x6817, 0x0000, 0x0010, 0x6817, 0x8000, 0x68b7,
-+      0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0804, 0x3e69, 0x080c,
-+      0x297f, 0x2200, 0xa086, 0x0003, 0x05c8, 0x7003, 0x0005, 0xb284,
-+      0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001, 0xfe97, 0x2068,
-+      0x7052, 0xad80, 0x0009, 0x7042, 0x2200, 0x0002, 0x3e98, 0x39dc,
-+      0x39dc, 0x39fe, 0x39dc, 0x3e98, 0x080c, 0x297f, 0x7003, 0x0005,
-+      0xb284, 0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001, 0xfe97,
-+      0x2068, 0x7052, 0xad80, 0x0009, 0x7042, 0x2200, 0x0002, 0x39f7,
-+      0x39f5, 0x39f5, 0x39f7, 0x39f5, 0x39f7, 0x080c, 0x297f, 0x080c,
-+      0x3eb6, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x7000, 0xa086,
-+      0x0002, 0x1158, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00,
-+      0x70da, 0x0038, 0x080c, 0x52e3, 0x0020, 0x7000, 0xa086, 0x0003,
-+      0x0dc8, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018,
-+      0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0xfb00, 0xb284, 0x0600,
-+      0x1118, 0xc2fd, 0x2069, 0xfc10, 0x2d04, 0x2d08, 0x7162, 0xa06d,
-+      0x0128, 0x6814, 0xa206, 0x0500, 0x6800, 0x0cb8, 0x7003, 0x0005,
-+      0xd2fc, 0x1118, 0x2001, 0xfe60, 0x0010, 0x2001, 0xfe97, 0x2068,
-+      0x7052, 0x0156, 0x20a9, 0x0037, 0x2003, 0x0000, 0x8000, 0x1f04,
-+      0x3a3c, 0x015e, 0xad80, 0x0009, 0x7042, 0x6a16, 0x68b7, 0x0700,
-+      0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6920, 0xa184,
-+      0x0c00, 0x0904, 0x3adc, 0x7068, 0xa086, 0x0006, 0x1128, 0x7078,
-+      0xa206, 0x1110, 0x706a, 0x7082, 0x681b, 0x0005, 0xc1ad, 0xc1d4,
-+      0x6922, 0x080c, 0x3eb0, 0x0804, 0x3adc, 0x7200, 0xa286, 0x0002,
-+      0x1158, 0x70f0, 0xc0b5, 0x70f2, 0x2c00, 0x70d6, 0x2d00, 0x70da,
-+      0x0030, 0x080c, 0x52e3, 0x0018, 0xa286, 0x0003, 0x0dd0, 0x7003,
-+      0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484,
-+      0x001f, 0xa215, 0xb284, 0x0600, 0x1108, 0xc2fd, 0x79a8, 0x79a8,
-+      0xa18c, 0x00ff, 0x2118, 0x70e8, 0xa168, 0x2d04, 0x2d08, 0x7162,
-+      0xa06d, 0x0128, 0x6814, 0xa206, 0x0538, 0x6800, 0x0cb8, 0x7003,
-+      0x0005, 0xb284, 0x0600, 0x0118, 0x2001, 0xfe60, 0x0010, 0x2001,
-+      0xfe97, 0x2068, 0x7052, 0x0156, 0x20a9, 0x0037, 0x2003, 0x0000,
-+      0x8000, 0x1f04, 0x3aa6, 0x015e, 0xad80, 0x0009, 0x7042, 0xb284,
-+      0x0600, 0x0110, 0xc2fc, 0x0008, 0xc2fd, 0x6a16, 0x68b7, 0x0700,
-+      0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00,
-+      0x01d8, 0xd0dc, 0x0178, 0x7068, 0xa086, 0x0004, 0x1140, 0x7078,
-+      0xa206, 0x1128, 0x707c, 0xa306, 0x1110, 0x706a, 0x7082, 0x080c,
-+      0x3eb3, 0x0050, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x080c,
-+      0x3eb0, 0x7083, 0x0000, 0x0000, 0x68c4, 0x705e, 0xc6ec, 0xa684,
-+      0x0060, 0x05d0, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x11d0,
-+      0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa684, 0x0060, 0xa086, 0x0060,
-+      0x0580, 0x68d0, 0xa005, 0x0140, 0x7003, 0x0003, 0x682b, 0x0000,
-+      0xc6ed, 0x080c, 0x55ca, 0x0428, 0xd6f4, 0x1518, 0xc6ed, 0x080c,
-+      0x55dc, 0x00f8, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305,
-+      0x01d0, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68d0, 0xa005, 0x0128,
-+      0x7003, 0x0003, 0x080c, 0x55ca, 0x0070, 0xd6f4, 0x1120, 0xc6ed,
-+      0x68b0, 0x080c, 0x5622, 0xc6f4, 0x2019, 0x0000, 0x2021, 0x0000,
-+      0x0010, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x006c, 0xa684, 0x0004,
-+      0x01b0, 0x78e4, 0xa084, 0x0030, 0x0150, 0x78ec, 0xa084, 0x0003,
-+      0x0130, 0x782b, 0x3008, 0x2019, 0x0000, 0x2320, 0x0040, 0x00f6,
-+      0x2079, 0xb340, 0x080c, 0x52e3, 0x00fe, 0x0904, 0x29ee, 0x791a,
-+      0x2d00, 0x7052, 0x68c8, 0x2060, 0x71f0, 0x2001, 0xb341, 0x2004,
-+      0xd0c4, 0x15c8, 0x70f8, 0xa02d, 0x01b8, 0xd1bc, 0x0548, 0x7a80,
-+      0xa294, 0x0f00, 0x70fc, 0xa206, 0x0118, 0x78e0, 0xa504, 0x1558,
-+      0x70fa, 0xc1bc, 0x71f2, 0x0438, 0x2031, 0x0001, 0x852c, 0x0218,
-+      0x8633, 0x8210, 0x0cd8, 0x0005, 0x7de0, 0xa594, 0xff00, 0x0130,
-+      0x2011, 0x0008, 0x852f, 0x0c81, 0x8637, 0x0008, 0x0c69, 0x8217,
-+      0x7880, 0xa084, 0x0f00, 0xa206, 0x0170, 0x72fe, 0x76fa, 0x0058,
-+      0x7a80, 0xa294, 0x0f00, 0x70fc, 0xa236, 0x0dc0, 0x78e0, 0xa534,
-+      0x0da8, 0xc1bd, 0x71f2, 0xd1b4, 0x1904, 0x29df, 0x2300, 0xa405,
-+      0x0904, 0x29df, 0x70c0, 0xa086, 0x0001, 0x1904, 0x2a3f, 0x0005,
-+      0x6020, 0xa005, 0x0150, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008,
-+      0x600a, 0x700b, 0x0100, 0x7028, 0x6026, 0x0005, 0xa006, 0x080c,
-+      0x52e3, 0x7000, 0xa086, 0x0002, 0x0120, 0x7068, 0xa086, 0x0005,
-+      0x1150, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823,
-+      0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0002, 0x29ee,
-+      0x3bc4, 0x3bc1, 0x3be4, 0x3bcd, 0x3bcb, 0x3bbf, 0x3bbf, 0x080c,
-+      0x297f, 0x0461, 0x0429, 0x0028, 0x0449, 0x7060, 0x2060, 0x6800,
-+      0x6002, 0x080c, 0x2085, 0x0804, 0x29ee, 0x7068, 0x706b, 0x0000,
-+      0x7087, 0x0000, 0x0002, 0x3be0, 0x3be0, 0x3bdb, 0x3bdb, 0x3bdb,
-+      0x3be0, 0x3bdb, 0x3be0, 0x77f0, 0xc7c5, 0x77f2, 0x0804, 0x2ed6,
-+      0x706b, 0x0000, 0x0804, 0x29ee, 0x681b, 0x0000, 0x0804, 0x359e,
-+      0x6800, 0xa005, 0x1108, 0x6002, 0x6006, 0x0005, 0x6010, 0xa005,
-+      0x0120, 0x8001, 0x1310, 0x080c, 0x297f, 0x6012, 0x6008, 0xc0a4,
-+      0x600a, 0x0005, 0x6018, 0xa005, 0x0110, 0x8001, 0x601a, 0x0005,
-+      0x080c, 0x40d4, 0x681b, 0x0018, 0x0480, 0x080c, 0x40d4, 0x681b,
-+      0x0019, 0x0458, 0x080c, 0x40d4, 0x681b, 0x001a, 0x0430, 0x080c,
-+      0x40d4, 0x681b, 0x0003, 0x0408, 0x7778, 0x080c, 0x3fb3, 0x717c,
-+      0xa18c, 0x00ff, 0xd7fc, 0x1118, 0xa1e8, 0xfa00, 0x0010, 0xa1e8,
-+      0xfb10, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x1118, 0x7082, 0x0804,
-+      0x29ee, 0x6814, 0x7278, 0xa206, 0x0110, 0x6800, 0x0c98, 0x6800,
-+      0x200a, 0x681b, 0x0005, 0x7083, 0x0000, 0x080c, 0x3bee, 0x6820,
-+      0xd084, 0x1110, 0x080c, 0x3be8, 0x080c, 0x3bfa, 0x681f, 0x0000,
-+      0x6823, 0x0020, 0x682b, 0x0000, 0x080c, 0x2085, 0x0804, 0x29ee,
-+      0xa282, 0x0003, 0x1904, 0x3e70, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8,
-+      0xa6b4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x05a0, 0xc1c4,
-+      0x6922, 0xa6b4, 0x00ff, 0x0520, 0xa682, 0x001c, 0x0218, 0x0110,
-+      0x2031, 0x001c, 0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b,
-+      0x2041, 0x0000, 0x080c, 0x3f0c, 0x0118, 0x080c, 0x3d35, 0x0090,
-+      0x080c, 0x3ef8, 0x080c, 0x3d32, 0x6920, 0xc1c5, 0x6922, 0x7e58,
-+      0xc695, 0x7e5a, 0xd6d4, 0x1110, 0x0804, 0x4056, 0x0804, 0x3ccc,
-+      0x080c, 0x3d32, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f, 0x0005,
-+      0x781b, 0x006c, 0x0005, 0x00c6, 0x705c, 0x2060, 0x6100, 0xd1e4,
-+      0x0598, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x001c, 0x0218,
-+      0x0110, 0x2011, 0x001c, 0x2600, 0xa202, 0x1208, 0x2230, 0xa686,
-+      0x0010, 0x1108, 0x8630, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4,
-+      0x0130, 0xa282, 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282,
-+      0x000c, 0x1210, 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228,
-+      0x080c, 0x3efc, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3f0c,
-+      0x0118, 0x080c, 0x3d35, 0x0020, 0x080c, 0x3ef8, 0x080c, 0x3d32,
-+      0x7858, 0xc095, 0x785a, 0x00ce, 0x782b, 0x3008, 0x781b, 0x006c,
-+      0x0005, 0x00c6, 0x2960, 0x6000, 0xd0e4, 0x1170, 0xa084, 0x0040,
-+      0x1130, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x00ce, 0x0005, 0x2011,
-+      0x0032, 0x2019, 0x0000, 0x0418, 0x68a0, 0xd0cc, 0x1dc0, 0x6208,
-+      0xa294, 0x00ff, 0x2001, 0xb343, 0x2004, 0xd0e4, 0x1148, 0x78ec,
-+      0xd0e4, 0x0130, 0xa282, 0x000b, 0x1218, 0x2011, 0x000a, 0x0028,
-+      0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c,
-+      0x00ff, 0xa382, 0x001c, 0x0218, 0x0110, 0x2019, 0x001c, 0x78ab,
-+      0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0,
-+      0x0005, 0x6820, 0xc0c5, 0x6822, 0x080c, 0x2ae3, 0x00ce, 0x0005,
-+      0x00c6, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032,
-+      0x2019, 0x0000, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+      0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822,
-+      0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x00c6, 0x715c, 0x2160,
-+      0x0029, 0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x2018, 0x2008,
-+      0xa084, 0xffe0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612,
-+      0x78a4, 0xa084, 0x7770, 0xa18c, 0x000f, 0xa105, 0x0056, 0x2029,
-+      0xb343, 0x252c, 0xd5cc, 0x005e, 0x0140, 0xd3a4, 0x0110, 0xa085,
-+      0x0800, 0xd3fc, 0x0110, 0xa085, 0x8080, 0x78a6, 0x0006, 0x78ec,
-+      0xd08c, 0x0130, 0x6028, 0xd08c, 0x0118, 0x000e, 0xc0bc, 0x0008,
-+      0x000e, 0x6016, 0x788a, 0xa6b4, 0x001f, 0x8637, 0x8204, 0x8004,
-+      0xa605, 0x600e, 0x6004, 0xa084, 0xffd5, 0x6006, 0x0005, 0xa282,
-+      0x0002, 0x1904, 0x3e7a, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc,
-+      0x0558, 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x1a04,
-+      0x3e69, 0x080c, 0x3deb, 0x080c, 0x3d32, 0xa980, 0x0001, 0x200c,
-+      0x080c, 0x3faf, 0x080c, 0x3cd1, 0x88ff, 0x0168, 0x789b, 0x0060,
-+      0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1110, 0x0804,
-+      0x4056, 0x0804, 0x3ccc, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f,
-+      0x0005, 0x781b, 0x006c, 0x0005, 0xa282, 0x0002, 0x1218, 0xa284,
-+      0x0001, 0x0138, 0x715c, 0xa188, 0x0000, 0x210c, 0xd1ec, 0x1108,
-+      0xa016, 0x080c, 0x3ee9, 0x0479, 0x080c, 0x3d32, 0x7858, 0xc095,
-+      0x785a, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005, 0x00c6, 0x0026,
-+      0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x1148, 0xa084, 0x0080,
-+      0x1120, 0xc1a4, 0x6106, 0xa006, 0x0088, 0x2011, 0x0000, 0x78ab,
-+      0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004,
-+      0x080c, 0x2ae3, 0x6820, 0xa085, 0x0200, 0x6822, 0x002e, 0x00ce,
-+      0x0005, 0x8807, 0xa715, 0x00c6, 0x705c, 0x2060, 0x0011, 0x00ce,
-+      0x0005, 0x2009, 0x0000, 0x82ff, 0x0110, 0x2009, 0x0040, 0x6018,
-+      0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, 0xff9f, 0xa105, 0xc0ec,
-+      0xd0b4, 0x1108, 0xc0ed, 0x6100, 0xd1f4, 0x0110, 0xa085, 0x0020,
-+      0x78a6, 0x0006, 0x6000, 0xd09c, 0x0140, 0x6028, 0xd08c, 0x0128,
-+      0x000e, 0xd0bc, 0x0118, 0xc0bc, 0x0008, 0x000e, 0xe016, 0x788a,
-+      0x6004, 0xa084, 0xffef, 0x6006, 0x0005, 0x0006, 0x7000, 0xa086,
-+      0x0003, 0x0110, 0x000e, 0x0010, 0x000e, 0x0488, 0xd6ac, 0x0578,
-+      0x7888, 0xa084, 0x0040, 0x0558, 0x7bb8, 0x8307, 0xa084, 0x007f,
-+      0x1508, 0x8207, 0xa084, 0x00ff, 0xa09e, 0x0001, 0x1904, 0x3e92,
-+      0xd6f4, 0x11d0, 0x79d8, 0x7adc, 0xa108, 0xa291, 0x0000, 0x79d2,
-+      0x79da, 0x7ad6, 0x7ade, 0x080c, 0x56fb, 0x781b, 0x006b, 0xb284,
-+      0x0600, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, 0x080c,
-+      0x555b, 0x0005, 0x080c, 0x297f, 0x781b, 0x006b, 0x0005, 0x781b,
-+      0x006c, 0x0005, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000,
-+      0xa006, 0x2010, 0x080c, 0x3d35, 0x2029, 0x0000, 0x080c, 0x3de9,
-+      0x7e58, 0x080c, 0x3eb9, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005,
-+      0x0cc1, 0x6820, 0xc0c4, 0x6822, 0x00c6, 0x705c, 0x2060, 0x080c,
-+      0x3d72, 0x00b0, 0x0c71, 0x6820, 0xc0cc, 0x6822, 0x00c6, 0x705c,
-+      0x2060, 0x080c, 0x3e18, 0x0060, 0x0c21, 0x6820, 0xa084, 0xecff,
-+      0x6822, 0x00c6, 0x705c, 0x2060, 0x6004, 0xa084, 0xffc5, 0x6006,
-+      0x00ce, 0x0005, 0x00b9, 0x782b, 0x3008, 0x781b, 0x006c, 0x0005,
-+      0x6827, 0x0002, 0x00a9, 0x78e4, 0xa084, 0x0030, 0x0904, 0x29ee,
-+      0x78ec, 0xa084, 0x0003, 0x0904, 0x29ee, 0x782b, 0x3008, 0x781b,
-+      0x006c, 0x0005, 0x2001, 0x0005, 0x0070, 0x2001, 0x000c, 0x0058,
-+      0x2001, 0x0006, 0x0040, 0x2001, 0x000d, 0x0028, 0x2001, 0x0009,
-+      0x0010, 0x2001, 0x0007, 0x789b, 0x0090, 0x78aa, 0x789b, 0x0060,
-+      0x78ab, 0x0001, 0xc695, 0x7e5a, 0x0804, 0x2ae3, 0x0076, 0x873f,
-+      0xa7bc, 0x000f, 0x873b, 0x873b, 0x873b, 0x8703, 0xb28c, 0x0600,
-+      0x0118, 0xa0e0, 0xb800, 0x0010, 0xa0e0, 0xb900, 0xa7b8, 0x0020,
-+      0x7f9a, 0x79a4, 0xa184, 0x7fe0, 0x78ae, 0x6012, 0x79a4, 0xa184,
-+      0x773f, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0038, 0x6006, 0x007e,
-+      0x0005, 0x789b, 0x0090, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab,
-+      0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, 0x0804, 0x2ae3,
-+      0x2021, 0x0000, 0x2029, 0x0032, 0x789b, 0x0090, 0x78ab, 0x0001,
-+      0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7caa, 0x789b, 0x0060,
-+      0x78ab, 0x0005, 0x0804, 0x2ae3, 0x0156, 0x0804, 0x3f4e, 0x2021,
-+      0x3fa6, 0x20a9, 0x0009, 0x2011, 0x0029, 0xa582, 0x0028, 0x0550,
-+      0x8420, 0x95a9, 0x2011, 0x0033, 0xa582, 0x0033, 0x0618, 0x8420,
-+      0x95a9, 0x2019, 0x000a, 0x2011, 0x0065, 0x2200, 0xa502, 0x02d0,
-+      0x8420, 0x2300, 0xa210, 0x1f04, 0x3f25, 0x015e, 0x0088, 0x2021,
-+      0x3f98, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0033, 0x2200,
-+      0xa502, 0x0240, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3f37, 0x015e,
-+      0xa006, 0x0005, 0x8211, 0x015e, 0xa582, 0x0064, 0x1220, 0x7808,
-+      0xa085, 0x0070, 0x780a, 0x2405, 0xa005, 0x0005, 0xa886, 0x0002,
-+      0x01e8, 0x2021, 0x3f84, 0x20a9, 0x000d, 0x2011, 0x0028, 0xa582,
-+      0x0028, 0x0d48, 0x8420, 0x2019, 0x0019, 0x2011, 0x0033, 0x2200,
-+      0xa502, 0x0e00, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3f5f, 0x015e,
-+      0x2011, 0x0184, 0xa582, 0x0185, 0x0ab0, 0x0890, 0x2021, 0x3f93,
-+      0x20a9, 0x0003, 0x2011, 0x0024, 0xa586, 0x0024, 0x0960, 0x8420,
-+      0x2011, 0x0028, 0xa586, 0x0028, 0x0930, 0x8420, 0x2019, 0x0019,
-+      0x2011, 0x0033, 0x0804, 0x3f37, 0x1021, 0x2202, 0x3403, 0x4604,
-+      0x5805, 0x6a06, 0x7c07, 0x4610, 0x4612, 0x5812, 0x5a12, 0x6a14,
-+      0x6c14, 0x6e14, 0x7e17, 0x9021, 0xb002, 0xe204, 0xe210, 0xe210,
-+      0x1209, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605,
-+      0x6805, 0x7806, 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x10e1, 0x330a,
-+      0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b,
-+      0x0090, 0xa046, 0x0005, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f,
-+      0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xd7fc, 0x0118, 0xa0e0,
-+      0xda00, 0x0010, 0xa0e0, 0xba00, 0x0005, 0x79d8, 0x7adc, 0x78d0,
-+      0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x0005, 0x00e6,
-+      0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009, 0xb3c0, 0x2071,
-+      0xb3c0, 0x0070, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0118, 0x2079,
-+      0x0100, 0x0010, 0x2079, 0x0200, 0x2009, 0xb380, 0x2071, 0xb380,
-+      0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002, 0x3ff8, 0x3ff8,
-+      0x3ff8, 0x3ff8, 0x3ff8, 0x3ff8, 0x3ff6, 0x403d, 0x080c, 0x297f,
-+      0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x05d8, 0x7858,
-+      0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, 0x1814,
-+      0x1588, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x1de0, 0x784b,
-+      0x0008, 0x7848, 0xa084, 0x0008, 0x1de0, 0x7830, 0xd0bc, 0x1510,
-+      0x3200, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+      0xa084, 0x0600, 0x0010, 0xa084, 0x0800, 0x0118, 0x0104, 0x403a,
-+      0x0010, 0x0304, 0x403a, 0x79e4, 0xa184, 0x0030, 0x0158, 0x78ec,
-+      0xa084, 0x0003, 0x0138, 0x681c, 0xd0ac, 0x1110, 0x0421, 0x0010,
-+      0x781b, 0x00dd, 0x00fe, 0x00ee, 0x0005, 0x70a7, 0x0000, 0x080c,
-+      0x4397, 0x0cc0, 0x2001, 0xb341, 0x2004, 0xd0ac, 0x1118, 0x6814,
-+      0x080c, 0x28a8, 0x0005, 0x781b, 0x006c, 0x0005, 0x782b, 0x3008,
-+      0x781b, 0x006c, 0x0005, 0x781b, 0x005f, 0x0005, 0x782b, 0x3008,
-+      0x781b, 0x005d, 0x0005, 0x2009, 0xb356, 0x210c, 0xa186, 0x0000,
-+      0x0150, 0xa186, 0x0001, 0x0160, 0x701b, 0x000b, 0x706b, 0x0001,
-+      0x781b, 0x0050, 0x0005, 0x78cb, 0x0000, 0x781b, 0x00d8, 0x0005,
-+      0x701b, 0x000a, 0x0005, 0x2009, 0xb356, 0x210c, 0xa186, 0x0000,
-+      0x0170, 0xa186, 0x0001, 0x0140, 0x701b, 0x000b, 0x706b, 0x0001,
-+      0x781b, 0x0050, 0x0804, 0x29df, 0x701b, 0x000a, 0x0005, 0x782b,
-+      0x3008, 0x78cb, 0x0000, 0x781b, 0x00d8, 0x0005, 0x781b, 0x00dd,
-+      0x0005, 0x782b, 0x3008, 0x781b, 0x00dd, 0x0005, 0x781b, 0x00a4,
-+      0x0005, 0x782b, 0x3008, 0x781b, 0x00a4, 0x0005, 0x6818, 0xd0fc,
-+      0x0110, 0x681b, 0x001d, 0x706b, 0x0001, 0x781b, 0x0050, 0x0005,
-+      0x7830, 0xa084, 0x00c0, 0x1180, 0x7808, 0xa084, 0xfffc, 0x780a,
-+      0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084, 0x0021, 0x1108,
-+      0x0005, 0x704c, 0xc08d, 0x780a, 0x0005, 0x7830, 0xa084, 0x0080,
-+      0x1190, 0x78ec, 0xa084, 0x0002, 0x1170, 0x7808, 0xc08c, 0x780a,
-+      0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084, 0x0002, 0x0118,
-+      0x7808, 0xc08d, 0x780a, 0x0005, 0x704c, 0xc08d, 0x704e, 0x780a,
-+      0x0005, 0x7830, 0xa084, 0x0040, 0x1de0, 0x3200, 0x0006, 0x2001,
-+      0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa084, 0x0600, 0x0010,
-+      0xa084, 0x0800, 0x0118, 0x1104, 0x40f2, 0x0010, 0x1304, 0x40f2,
-+      0x78ac, 0x0005, 0x7808, 0xa084, 0xfffd, 0x780a, 0xe000, 0xe000,
-+      0xe000, 0xe000, 0x78ec, 0xa084, 0x0021, 0x0198, 0x3200, 0x0006,
-+      0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0xa084, 0x0600,
-+      0x0010, 0xa084, 0x0800, 0x0118, 0x1104, 0x410c, 0x0010, 0x1304,
-+      0x410f, 0x78ac, 0x0006, 0x704c, 0x780a, 0x000e, 0x0005, 0x78ec,
-+      0xa084, 0x0002, 0x1904, 0x52a1, 0xa784, 0x007d, 0x1118, 0x2700,
-+      0x080c, 0x297f, 0xa784, 0x0001, 0x1904, 0x3653, 0xa784, 0x0070,
-+      0x0140, 0x00c6, 0x2d60, 0x2f68, 0x080c, 0x2899, 0x2d78, 0x2c68,
-+      0x00ce, 0xa784, 0x0008, 0x0148, 0x784b, 0x0008, 0x78ec, 0xa084,
-+      0x0003, 0x0904, 0x3653, 0x0804, 0x404b, 0xa784, 0x0004, 0x0538,
-+      0x78b8, 0xa084, 0x8000, 0x0518, 0x784b, 0x0008, 0x78ec, 0xa084,
-+      0x0003, 0x0904, 0x3653, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001,
-+      0x11b0, 0x78c0, 0xa085, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00dd,
-+      0x0005, 0x784b, 0x0008, 0x6818, 0xd0fc, 0x0130, 0x681b, 0x0015,
-+      0xd6f4, 0x0110, 0x681b, 0x0007, 0x080c, 0x405b, 0x0005, 0x681b,
-+      0x0003, 0x7858, 0xa084, 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833,
-+      0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3006,
-+      0x3200, 0x0006, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118,
-+      0xa084, 0x0600, 0x0010, 0xa084, 0x0800, 0x0118, 0x0104, 0x29df,
-+      0x0010, 0x0304, 0x29df, 0x0804, 0x3e92, 0x6b14, 0x8307, 0xa084,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0118, 0xa080,
-+      0xb900, 0x0010, 0xa080, 0xb800, 0x2060, 0x2048, 0x705e, 0x2a60,
-+      0x0005, 0x7000, 0x0002, 0x41ab, 0x41ab, 0x41ac, 0x41b4, 0x41ab,
-+      0x41ab, 0x41ab, 0x41b7, 0x0005, 0x6008, 0xa084, 0xfbef, 0x600a,
-+      0x6018, 0x8001, 0x601a, 0x0005, 0x080c, 0x52e3, 0x0005, 0x7094,
-+      0xa005, 0x01a8, 0x2068, 0xb284, 0x0600, 0x0118, 0x2009, 0x0000,
-+      0x0010, 0x2009, 0x0001, 0x0016, 0x080c, 0x1eb2, 0x001e, 0x0016,
-+      0x080c, 0x5222, 0x001e, 0x080c, 0x5223, 0x7097, 0x0000, 0x0005,
-+      0x00c6, 0x2960, 0x6000, 0xd0ac, 0x0904, 0x4216, 0xd1ac, 0x05e0,
-+      0x6108, 0x8117, 0xa18c, 0x00ff, 0x631c, 0x832f, 0x68a0, 0xd0cc,
-+      0x11c8, 0xa584, 0x00ff, 0x0138, 0x78ec, 0xd0e4, 0x0110, 0x8213,
-+      0x00b8, 0x2029, 0x0000, 0xa182, 0x000c, 0x1290, 0x78ec, 0xd0e4,
-+      0x1118, 0x2009, 0x000c, 0x0060, 0xa182, 0x000b, 0x1248, 0x2009,
-+      0x000a, 0x0030, 0x2009, 0x0032, 0x2011, 0x0000, 0x2029, 0x0000,
-+      0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x79aa, 0x78ab,
-+      0x0000, 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, 0x0008, 0x6820, 0xa085,
-+      0x1000, 0x6822, 0x080c, 0x2ae3, 0xa085, 0x0001, 0x00ce, 0x0005,
-+      0xa282, 0x0006, 0x1904, 0x3e84, 0x7da8, 0x7eac, 0x8637, 0xa5ac,
-+      0x00ff, 0xa6b4, 0x00ff, 0x7fac, 0x8747, 0xa7bc, 0x00ff, 0xa8c4,
-+      0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1e4, 0x0904, 0x4286, 0xa18c,
-+      0xecff, 0x6922, 0xa782, 0x0002, 0x1a04, 0x3e5a, 0xa6b4, 0x00ff,
-+      0x0904, 0x4283, 0xa682, 0x0039, 0x1a04, 0x3e5a, 0xa582, 0x0009,
-+      0x0a04, 0x3e5a, 0xa882, 0x0003, 0x1a04, 0x3e5a, 0xa886, 0x0002,
-+      0x01d0, 0xa886, 0x0000, 0x1904, 0x3e5a, 0x2001, 0x000c, 0x79ec,
-+      0xd1e4, 0x0110, 0x2001, 0x000a, 0xa502, 0x1290, 0x080c, 0x3e5a,
-+      0x00c6, 0x2960, 0x6004, 0xa085, 0x001a, 0x6006, 0x6000, 0xc0ac,
-+      0x6002, 0x00ce, 0x0005, 0xa786, 0x0000, 0x0904, 0x3e5a, 0x8634,
-+      0xa686, 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x080c, 0x3f0c,
-+      0x0904, 0x3e5a, 0x2029, 0x0000, 0x080c, 0x3d35, 0x2029, 0x0000,
-+      0x080c, 0x3de9, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x005f, 0x0005,
-+      0x781b, 0x006c, 0x0005, 0x080c, 0x3d32, 0x0c80, 0xa886, 0x0002,
-+      0x1108, 0x8634, 0x715c, 0xa188, 0x0000, 0x210c, 0xd1ac, 0x0904,
-+      0x3e5a, 0xd1ec, 0x1120, 0x2039, 0x0000, 0x2041, 0x0000, 0xd1e4,
-+      0x1118, 0xa036, 0x2041, 0x0000, 0xa782, 0x0002, 0x12c8, 0x621c,
-+      0xa284, 0x00ff, 0xa706, 0x0110, 0x2039, 0x0000, 0xa605, 0x0190,
-+      0x6108, 0x811f, 0xa39c, 0x00ff, 0x0168, 0xa302, 0x1208, 0x2330,
-+      0x8807, 0xa705, 0xa086, 0x0201, 0x0160, 0xa886, 0x0000, 0x0168,
-+      0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, 0xa006, 0x2010,
-+      0x0070, 0xa284, 0xff00, 0x1108, 0x2040, 0xa184, 0x00ff, 0xa502,
-+      0x0108, 0x2128, 0x852b, 0x852b, 0x080c, 0x3f0c, 0x0d58, 0x080c,
-+      0x3d35, 0x2029, 0x0000, 0x080c, 0x3de9, 0x789b, 0x0090, 0x78ab,
-+      0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x78ab, 0x0000, 0x7daa,
-+      0x7eaa, 0x7faa, 0x2800, 0x78aa, 0x789b, 0x0060, 0x78ab, 0x0005,
-+      0x080c, 0x2ae3, 0x7858, 0xc095, 0x785a, 0x0804, 0x1e66, 0x00e6,
-+      0x2091, 0x8000, 0x6014, 0xd0fc, 0x1118, 0x2071, 0xb380, 0x0010,
-+      0x2071, 0xb3c0, 0x7000, 0xa086, 0x0007, 0x1150, 0x6110, 0x70b0,
-+      0xa106, 0x1130, 0x00ee, 0x080c, 0x1ec4, 0x0041, 0xa006, 0x0005,
-+      0x2091, 0x8001, 0x00ee, 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6,
-+      0x0804, 0x265a, 0x785b, 0x0000, 0x70a3, 0x000e, 0x2009, 0x0100,
-+      0x0016, 0x7094, 0xa06d, 0x0118, 0x7097, 0x0000, 0x0028, 0x70a7,
-+      0x0000, 0x080c, 0x1ef1, 0x0128, 0x70a0, 0x6826, 0x080c, 0x4432,
-+      0x0cb0, 0x001e, 0x0076, 0x0156, 0x00c6, 0x00d6, 0x20a9, 0x0020,
-+      0x3238, 0xa7bc, 0x0600, 0x0120, 0x2061, 0xfc20, 0xc7fc, 0x0018,
-+      0x2061, 0xfd40, 0xc7fd, 0x6000, 0xa105, 0x6002, 0x601c, 0xa06d,
-+      0x0140, 0x6800, 0x601e, 0x080c, 0x1ca6, 0x6008, 0x8000, 0x600a,
-+      0x0ca8, 0x6018, 0xa06d, 0x0128, 0x6800, 0x601a, 0x080c, 0x1ca6,
-+      0x0cc0, 0xace0, 0x0009, 0x0f04, 0x4356, 0x0c28, 0x7090, 0xa084,
-+      0x8000, 0x0110, 0x080c, 0x44ac, 0x00de, 0x00ce, 0x015e, 0x007e,
-+      0x0005, 0x6804, 0xa084, 0x000f, 0x0002, 0x4375, 0x4375, 0x4375,
-+      0x4375, 0x4375, 0x4375, 0x4377, 0x4386, 0x4375, 0x4375, 0x4375,
-+      0x4375, 0x4375, 0x4392, 0x4375, 0x4377, 0x080c, 0x297f, 0x0006,
-+      0x7830, 0xd0b4, 0x0128, 0x784b, 0x0004, 0x7848, 0xd094, 0x1de8,
-+      0x000e, 0x080c, 0x4f11, 0x080c, 0x1ca6, 0x0080, 0x6827, 0x000b,
-+      0x0006, 0x7830, 0xd0b4, 0x0128, 0x784b, 0x0004, 0x7848, 0xd094,
-+      0x1de8, 0x000e, 0x080c, 0x4f11, 0x080c, 0x4432, 0x0005, 0x00f6,
-+      0x6814, 0xd0fc, 0x1178, 0x2001, 0xb342, 0x2004, 0xd0ec, 0x0128,
-+      0x2079, 0x0100, 0x1104, 0x43c8, 0x0048, 0x2079, 0x0200, 0x1304,
-+      0x43c8, 0x0020, 0x2079, 0x0100, 0x1104, 0x43c8, 0x7830, 0xa084,
-+      0x00c0, 0x11b0, 0x00d6, 0x080c, 0x522f, 0x2d00, 0x682e, 0x2009,
-+      0x0004, 0x2001, 0x0000, 0x6827, 0x0084, 0x080c, 0x51da, 0x080c,
-+      0x4432, 0x00de, 0x70a8, 0xa080, 0x00bf, 0x781a, 0x0804, 0x4408,
-+      0x7948, 0x6814, 0xd0fc, 0x1158, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+      0x0118, 0x1104, 0x43db, 0x0028, 0x1304, 0x43db, 0x0010, 0x1104,
-+      0x43db, 0x794a, 0x08b8, 0x7948, 0x7828, 0x0006, 0xa084, 0xf000,
-+      0xa086, 0x1000, 0x000e, 0x1da8, 0xd0b4, 0x1d98, 0xd0ac, 0x0118,
-+      0xa185, 0x0004, 0x0010, 0xa185, 0x000c, 0x784a, 0x789b, 0x000e,
-+      0x78ab, 0x0002, 0x7858, 0xa084, 0x00ff, 0xa085, 0x0400, 0x785a,
-+      0x70a8, 0xa080, 0x00a1, 0x781a, 0x6827, 0x0284, 0x682c, 0x6836,
-+      0x6830, 0x683a, 0x2009, 0x0004, 0x2001, 0x0000, 0x080c, 0x51da,
-+      0x00fe, 0x0005, 0x00d6, 0x6b14, 0x080c, 0x1f5a, 0x0128, 0x2068,
-+      0x6827, 0x0002, 0x00f9, 0x0cc0, 0x00de, 0x0005, 0x00d6, 0x6b14,
-+      0x6c28, 0xa4a4, 0x00ff, 0x080c, 0x1efb, 0x0120, 0x2068, 0x6827,
-+      0x0002, 0x0081, 0x00de, 0x0005, 0x00d6, 0x6814, 0xa09c, 0x00ff,
-+      0x080c, 0x1f2c, 0x0128, 0x2068, 0x6827, 0x0002, 0x0019, 0x0cc0,
-+      0x00de, 0x0005, 0x00c6, 0x6914, 0x6814, 0x080c, 0x449c, 0x6904,
-+      0xa18c, 0x00ff, 0xa186, 0x0006, 0x0170, 0xa186, 0x000d, 0x0550,
-+      0xa186, 0x0017, 0x1120, 0x080c, 0x1ca6, 0x00ce, 0x0005, 0x080c,
-+      0x2087, 0x00ce, 0x0005, 0x6004, 0x8001, 0x02b0, 0x6006, 0x2009,
-+      0x0000, 0xa684, 0x0001, 0x1110, 0xa18d, 0x8000, 0xa684, 0x0004,
-+      0x0110, 0xa18d, 0x0002, 0x691e, 0x6823, 0x0000, 0x711c, 0x810f,
-+      0x6818, 0xa105, 0x681a, 0x0c18, 0x6100, 0xa184, 0x0001, 0x09d8,
-+      0x080c, 0x297f, 0x6018, 0xa005, 0x1148, 0x6008, 0x8001, 0x0230,
-+      0x600a, 0x601c, 0x6802, 0x2d00, 0x601e, 0x00a0, 0xac88, 0x0006,
-+      0x2104, 0xa005, 0x0110, 0x2008, 0x0cd8, 0x6802, 0x2d0a, 0x6008,
-+      0x8001, 0x0230, 0x600a, 0x6018, 0x2068, 0x6800, 0x601a, 0x0c48,
-+      0x00ce, 0x0005, 0x0156, 0x0136, 0x0146, 0x00c6, 0x00d6, 0x080c,
-+      0x1c85, 0x2da0, 0x013e, 0x20a9, 0x0037, 0x53a3, 0x00ce, 0x014e,
-+      0x013e, 0x015e, 0x0804, 0x4447, 0xd0fc, 0x1118, 0x2061, 0xfc20,
-+      0x0010, 0x2061, 0xfd40, 0xa184, 0x001f, 0xac60, 0x8003, 0x8003,
-+      0x8003, 0xac00, 0x2060, 0x0005, 0xd7fc, 0x1168, 0x2019, 0xb393,
-+      0x2001, 0xb342, 0x2004, 0xd0ec, 0x0118, 0x2021, 0x0102, 0x0038,
-+      0x2021, 0x0202, 0x0020, 0x2019, 0xb3d3, 0x2021, 0x0102, 0x2304,
-+      0xa085, 0x0001, 0x201a, 0x2404, 0xa085, 0x0001, 0x2022, 0x0005,
-+      0xd7fc, 0x1168, 0x2019, 0xb393, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+      0x0118, 0x2021, 0x0102, 0x0038, 0x2021, 0x0202, 0x0020, 0x2019,
-+      0xb3d3, 0x2021, 0x0102, 0x2304, 0xa084, 0xfffe, 0x201a, 0x2404,
-+      0xa084, 0xfffe, 0x2022, 0x0005, 0x7990, 0xa18c, 0xfff8, 0x7992,
-+      0x70a8, 0xa080, 0x00f1, 0x781a, 0x0804, 0x29df, 0x7097, 0x0000,
-+      0x7003, 0x0000, 0x704b, 0x0001, 0x7043, 0x0000, 0x080c, 0x1ef1,
-+      0x0528, 0x70ef, 0x0000, 0x68cc, 0x2060, 0x6100, 0xa184, 0x0300,
-+      0x0150, 0x6827, 0x000e, 0xa084, 0x0200, 0x0110, 0x6827, 0x0017,
-+      0x080c, 0x4432, 0x0c18, 0x7000, 0xa086, 0x0007, 0x1904, 0x4597,
-+      0x6910, 0x70b0, 0xa106, 0x0120, 0x2d60, 0x080c, 0x1ec4, 0x0005,
-+      0x2d00, 0x7096, 0xad80, 0x000f, 0x7042, 0x0050, 0x7010, 0xa005,
-+      0x1128, 0x7048, 0xa086, 0x0001, 0x0904, 0x29f8, 0x0804, 0x29df,
-+      0xa036, 0x691c, 0xa184, 0x0002, 0x0110, 0xa6b5, 0x0004, 0xa184,
-+      0x00c0, 0x8003, 0x8003, 0x8007, 0xa080, 0x4646, 0x2005, 0xa635,
-+      0x080c, 0x2ae3, 0x6820, 0xa084, 0x0400, 0x0150, 0x789b, 0x0018,
-+      0x78ab, 0x0003, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x5000,
-+      0x6820, 0xa084, 0x8000, 0x0140, 0xa6b5, 0x0400, 0x789b, 0x000e,
-+      0x6824, 0x8007, 0x78aa, 0x00d8, 0x681c, 0xd0fc, 0x1140, 0xa6b5,
-+      0x0800, 0x6820, 0xd0c4, 0x0198, 0xa6b5, 0x4000, 0x0080, 0x6820,
-+      0xd0c4, 0x0118, 0xa6b5, 0x4000, 0x0050, 0x789b, 0x0018, 0x78ab,
-+      0x0002, 0x789b, 0x0081, 0x78ab, 0x0001, 0xa6b5, 0x1000, 0xa684,
-+      0x0200, 0x0508, 0x00c6, 0x080c, 0x4fc6, 0x6028, 0xd08c, 0x0138,
-+      0x6020, 0x00ce, 0x6930, 0x6a2c, 0x080c, 0x52b7, 0x0028, 0x00ce,
-+      0x682c, 0x78d2, 0x6830, 0x78d6, 0xa684, 0x0100, 0x0150, 0x682c,
-+      0xa084, 0x0001, 0x0130, 0x7888, 0xa084, 0x0040, 0x0110, 0xa6b5,
-+      0x8000, 0x080c, 0x5207, 0x7e5a, 0x6eb6, 0x0804, 0x524e, 0x080c,
-+      0x40a8, 0x1904, 0x4640, 0x2041, 0x0001, 0x2031, 0x1000, 0x080c,
-+      0x2ae3, 0x789b, 0x0018, 0x6814, 0xa084, 0x001f, 0xa085, 0x0080,
-+      0x78aa, 0x691c, 0xa184, 0x0002, 0x0140, 0xa6b5, 0x0004, 0x78ab,
-+      0x0020, 0x6828, 0x78aa, 0xa8c0, 0x0002, 0x681c, 0xd0f4, 0x0128,
-+      0x2c50, 0x080c, 0x418d, 0x080c, 0x5044, 0x6820, 0xa084, 0x8000,
-+      0x0140, 0xa6b5, 0x0400, 0x789b, 0x000e, 0x6824, 0x8007, 0x78aa,
-+      0x0060, 0x681c, 0xa084, 0x8000, 0x1140, 0xa6b5, 0x0800, 0x6820,
-+      0xa084, 0x0100, 0x0110, 0xa6b5, 0x4000, 0x681c, 0xa084, 0x00c0,
-+      0x8003, 0x8003, 0x8007, 0xa080, 0x4646, 0x2005, 0xa635, 0xa684,
-+      0x0100, 0x0150, 0x682c, 0xa084, 0x0001, 0x0130, 0x7888, 0xa084,
-+      0x0040, 0x0110, 0xa6b5, 0x8000, 0x789b, 0x007e, 0x7eae, 0x6eb6,
-+      0x6814, 0xc0fc, 0x8007, 0x78aa, 0x7882, 0x2810, 0x7aaa, 0x7830,
-+      0xa084, 0x00c0, 0x1904, 0x4640, 0x6914, 0xd1fc, 0x1158, 0x2001,
-+      0xb342, 0x2004, 0xd0ec, 0x0118, 0x0104, 0x4640, 0x0028, 0x0304,
-+      0x4640, 0x0010, 0x0104, 0x4640, 0x0126, 0x00d6, 0x00c6, 0x70f0,
-+      0xa084, 0x2e00, 0x2090, 0x00ce, 0x00de, 0x012e, 0xa684, 0x0200,
-+      0x01a8, 0x00c6, 0x080c, 0x4fc6, 0x6028, 0xd08c, 0x0140, 0x6020,
-+      0xa005, 0x0128, 0x6930, 0x6a2c, 0x080c, 0x52b7, 0x0020, 0x682c,
-+      0x78d2, 0x6830, 0x78d6, 0x00ce, 0x080c, 0x5207, 0x70a8, 0xa080,
-+      0x00fc, 0x781a, 0x080c, 0x40d4, 0x2d00, 0x7096, 0x7052, 0x6810,
-+      0x70b2, 0x7003, 0x0007, 0xad80, 0x000f, 0x7042, 0x0804, 0x29df,
-+      0x080c, 0x1eb2, 0x080c, 0x40d4, 0x0804, 0x29df, 0x0000, 0x0300,
-+      0x0200, 0x0000, 0x080c, 0x297f, 0x2300, 0x0002, 0x4651, 0x4651,
-+      0x4658, 0x080c, 0x297f, 0x71a8, 0xa188, 0x00a1, 0x791a, 0x0005,
-+      0x080c, 0x5223, 0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x0148,
-+      0xa184, 0xff00, 0xa085, 0x000a, 0x6826, 0x080c, 0x1eb2, 0x0804,
-+      0x44ee, 0x2001, 0x000a, 0x080c, 0x5184, 0x0804, 0x44ee, 0xa282,
-+      0x0005, 0x0310, 0x080c, 0x297f, 0x7000, 0xa084, 0x000f, 0x190c,
-+      0x41a1, 0x080c, 0x1c85, 0x11b8, 0x2069, 0xffff, 0xa684, 0x0004,
-+      0x0118, 0x2001, 0x2800, 0x0010, 0x2001, 0x0800, 0x71a8, 0xa188,
-+      0x00a1, 0x789b, 0x000e, 0x8007, 0x78aa, 0x2031, 0x0400, 0x7e5a,
-+      0x791a, 0x0804, 0x29df, 0x6807, 0x0106, 0x680b, 0x0000, 0x689f,
-+      0x0000, 0x6827, 0x0000, 0xa386, 0x0002, 0x1180, 0xa286, 0x0002,
-+      0x1168, 0x78a0, 0xa005, 0x1150, 0xd4fc, 0x1140, 0x78e4, 0xa084,
-+      0x0008, 0x0120, 0xa6b5, 0x0008, 0x2019, 0x0000, 0x080c, 0x4b0c,
-+      0x2d00, 0x7096, 0x7052, 0x7003, 0x0007, 0x7043, 0x0000, 0x6020,
-+      0xa084, 0x000f, 0x680e, 0x6824, 0xa084, 0x0080, 0x0120, 0x080c,
-+      0x4bc9, 0x0804, 0x29df, 0x2300, 0x0002, 0x46c8, 0x473d, 0x4754,
-+      0x2200, 0x0002, 0x46cf, 0x46de, 0x4700, 0x470a, 0x472b, 0x2029,
-+      0x0001, 0xa026, 0x2011, 0x0000, 0x080c, 0x4ce3, 0x0002, 0x46dc,
-+      0x29df, 0x44ee, 0x46dc, 0x46dc, 0x080c, 0x297f, 0x7990, 0xa18c,
-+      0x0007, 0x1110, 0x2009, 0x0008, 0x2011, 0x0001, 0xa684, 0x0004,
-+      0x0110, 0x2011, 0x0003, 0x2220, 0xa12a, 0x2011, 0x0001, 0x080c,
-+      0x4ce3, 0x0002, 0x46f7, 0x29df, 0x44ee, 0x46fe, 0x46f9, 0x0804,
-+      0x526b, 0x709f, 0x46fd, 0x0804, 0x29df, 0x0cc8, 0x080c, 0x297f,
-+      0xa684, 0x0010, 0x0128, 0x080c, 0x4b94, 0x0110, 0x0804, 0x29df,
-+      0x0804, 0x4c05, 0x6000, 0xa084, 0x0002, 0x01c0, 0x70a8, 0xa080,
-+      0x008f, 0x781a, 0x00d6, 0x080c, 0x522f, 0x2d00, 0x682e, 0x6827,
-+      0x0000, 0x080c, 0x4432, 0x00de, 0x080c, 0x1ca6, 0x7003, 0x0000,
-+      0x7043, 0x0000, 0x7053, 0x0000, 0x0804, 0x44ee, 0xa684, 0x0004,
-+      0x1110, 0x0804, 0x526b, 0x6000, 0xa084, 0x0004, 0x1160, 0x6000,
-+      0xa084, 0x0001, 0x0140, 0x709f, 0x473b, 0x2001, 0x0007, 0x080c,
-+      0x517c, 0x0804, 0x5271, 0x0804, 0x526b, 0x2200, 0x0002, 0x4744,
-+      0x4746, 0x4744, 0x4744, 0x4744, 0x080c, 0x297f, 0x709b, 0x474a,
-+      0x0804, 0x5279, 0x78e4, 0xa084, 0x0008, 0x1dc0, 0x080c, 0x516d,
-+      0x709f, 0x4752, 0x0804, 0x526b, 0x2200, 0x0002, 0x475b, 0x475d,
-+      0x475d, 0x475b, 0x475b, 0x080c, 0x297f, 0x78e4, 0xa084, 0x0008,
-+      0x0178, 0x709b, 0x4765, 0x0804, 0x5279, 0x2011, 0x0004, 0x080c,
-+      0x4cdd, 0x0002, 0x477a, 0x29df, 0x44ee, 0x477a, 0x4784, 0x4788,
-+      0x690c, 0x81ff, 0x0138, 0x8109, 0x1120, 0x6827, 0x000f, 0x0804,
-+      0x4818, 0x690e, 0x709f, 0x4782, 0x2001, 0x0003, 0x080c, 0x517c,
-+      0x0804, 0x5271, 0x0804, 0x526b, 0x709f, 0x477a, 0x0804, 0x29df,
-+      0x709f, 0x478c, 0x0804, 0x29df, 0x0ca8, 0xa282, 0x0003, 0x0310,
-+      0x080c, 0x297f, 0xa386, 0x0002, 0x1180, 0xa286, 0x0002, 0x1190,
-+      0x78a0, 0xa005, 0x1178, 0xd4fc, 0x1168, 0x78e4, 0xa084, 0x0008,
-+      0x0120, 0xa6b5, 0x0008, 0x2019, 0x0000, 0xa684, 0x0008, 0x0110,
-+      0x080c, 0x4b72, 0x6810, 0x70b2, 0x7003, 0x0007, 0x2300, 0x0002,
-+      0x47b3, 0x47db, 0x47e2, 0x2200, 0x0002, 0x47ba, 0x47b8, 0x47d1,
-+      0x080c, 0x297f, 0x7990, 0xa1ac, 0x0007, 0xa026, 0x2011, 0x0001,
-+      0x080c, 0x4ce3, 0x0002, 0x47c8, 0x29df, 0x44ee, 0x47cf, 0x47ca,
-+      0x0804, 0x526b, 0x709f, 0x47ce, 0x0804, 0x29df, 0x0cc8, 0x080c,
-+      0x297f, 0xa684, 0x0010, 0x0128, 0x080c, 0x4b94, 0x0110, 0x0804,
-+      0x29df, 0x0804, 0x4c05, 0x2200, 0x0002, 0x47e0, 0x47e0, 0x47e0,
-+      0x080c, 0x297f, 0x2200, 0x0002, 0x47e7, 0x47e9, 0x47e9, 0x080c,
-+      0x297f, 0x78e4, 0xa084, 0x0008, 0x0178, 0x709b, 0x47f1, 0x0804,
-+      0x5279, 0x2011, 0x0004, 0x080c, 0x4cdd, 0x0002, 0x4805, 0x29df,
-+      0x44ee, 0x4805, 0x480f, 0x4813, 0x690c, 0x81ff, 0x0130, 0x8109,
-+      0x1118, 0x6827, 0x000f, 0x00a0, 0x690e, 0x709f, 0x480d, 0x2001,
-+      0x0003, 0x080c, 0x517c, 0x0804, 0x5271, 0x0804, 0x526b, 0x709f,
-+      0x4805, 0x0804, 0x29df, 0x709f, 0x4817, 0x0804, 0x29df, 0x0ca8,
-+      0x70a8, 0xa080, 0x008f, 0x781a, 0x00d6, 0x6824, 0x0006, 0x080c,
-+      0x522f, 0x000e, 0x6826, 0x2d00, 0x682e, 0x080c, 0x4432, 0x00de,
-+      0x080c, 0x5184, 0x7003, 0x0000, 0x7043, 0x0000, 0x7053, 0x0000,
-+      0x0804, 0x44ee, 0x2300, 0x0002, 0x4839, 0x483b, 0x4837, 0x080c,
-+      0x297f, 0x7098, 0x0807, 0x7098, 0x0807, 0xa282, 0x0002, 0x0310,
-+      0x080c, 0x297f, 0xa684, 0x0200, 0x0130, 0x080c, 0x5222, 0x080c,
-+      0x4cca, 0x080c, 0x5223, 0x2300, 0x0002, 0x4850, 0x487e, 0x48de,
-+      0xad86, 0xffff, 0x1108, 0x0005, 0xa286, 0x0001, 0x0110, 0x080c,
-+      0x297f, 0xa684, 0x0200, 0x0120, 0x080c, 0x5222, 0x080c, 0x5223,
-+      0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x1118, 0xa184, 0xff00,
-+      0x6826, 0x2001, 0x0001, 0x080c, 0x5184, 0x78b8, 0x8007, 0xa084,
-+      0x007f, 0x0140, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084,
-+      0x0008, 0x1de0, 0x7003, 0x0000, 0x0804, 0x44ee, 0x2200, 0x0002,
-+      0x4882, 0x48b1, 0x709b, 0x4886, 0x0804, 0x5279, 0x2011, 0x000d,
-+      0x080c, 0x4cdd, 0x0002, 0x4892, 0x29df, 0x44ee, 0x489a, 0x48a2,
-+      0x48a7, 0x48a9, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x0804, 0x524e, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a,
-+      0x0804, 0x524e, 0x709f, 0x48a6, 0x0804, 0x29df, 0x0c58, 0x080c,
-+      0x297f, 0x709f, 0x48ad, 0x0804, 0x29df, 0x080c, 0x527f, 0x0804,
-+      0x29df, 0x709b, 0x48b5, 0x0804, 0x5279, 0x2011, 0x0012, 0x080c,
-+      0x4cdd, 0x0002, 0x48c0, 0x29df, 0x44ee, 0x48cc, 0x48d4, 0x48d9,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70a8, 0xa080,
-+      0x00bf, 0x781a, 0x0804, 0x29df, 0xa6b4, 0x00ff, 0xa6b5, 0x0400,
-+      0x6eb6, 0x7e5a, 0x0804, 0x524e, 0x709f, 0x48d8, 0x0804, 0x29df,
-+      0x0c38, 0x709f, 0x48dd, 0x0804, 0x29df, 0x0c70, 0xa286, 0x0001,
-+      0x0110, 0x080c, 0x297f, 0x709b, 0x48e7, 0x0804, 0x5279, 0x2011,
-+      0x0015, 0x080c, 0x4cdd, 0x0002, 0x48f1, 0x29df, 0x44ee, 0x48ff,
-+      0x490b, 0xa6b4, 0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x783b,
-+      0x1301, 0x70a8, 0xa080, 0x00cb, 0x781a, 0x0804, 0x29df, 0xa6b4,
-+      0x00ff, 0xa6b5, 0x0400, 0x6eb6, 0x7e5a, 0x70a8, 0xa080, 0x00bf,
-+      0x781a, 0x0804, 0x29df, 0x709f, 0x490f, 0x0804, 0x29df, 0x0c08,
-+      0xa282, 0x0003, 0x0310, 0x080c, 0x297f, 0x2300, 0x0002, 0x491a,
-+      0x4956, 0x49b5, 0xa286, 0x0001, 0x0110, 0x080c, 0x297f, 0x6804,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x1130, 0x080c, 0x4432, 0x7003,
-+      0x0000, 0x0804, 0x44ee, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684,
-+      0x0200, 0x0130, 0x080c, 0x5222, 0x080c, 0x4cca, 0x080c, 0x5223,
-+      0x6924, 0xa184, 0x00ff, 0xa086, 0x000a, 0x1118, 0xa184, 0xff00,
-+      0x6826, 0x2001, 0x0001, 0x080c, 0x5184, 0x78b8, 0x8007, 0xa084,
-+      0x007f, 0x0140, 0x7848, 0xa085, 0x0008, 0x784a, 0x7848, 0xa084,
-+      0x0008, 0x1de0, 0x7003, 0x0000, 0x0804, 0x44ee, 0xa684, 0x0200,
-+      0x0120, 0x080c, 0x4cca, 0x080c, 0x5223, 0x2200, 0x0002, 0x4961,
-+      0x4992, 0x709b, 0x4965, 0x0804, 0x5279, 0x2011, 0x000d, 0x080c,
-+      0x4cdd, 0x0002, 0x4971, 0x29df, 0x44ee, 0x4979, 0x4981, 0x4986,
-+      0x4988, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804,
-+      0x524e, 0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804,
-+      0x524e, 0x709f, 0x4985, 0x0804, 0x29df, 0x0c58, 0x080c, 0x297f,
-+      0x709f, 0x498e, 0x080c, 0x5223, 0x0804, 0x29df, 0x080c, 0x527f,
-+      0x0804, 0x29df, 0x709b, 0x4996, 0x0804, 0x5279, 0x2011, 0x0005,
-+      0x080c, 0x4cdd, 0x0002, 0x49a0, 0x29df, 0x44ee, 0x49a8, 0x49b0,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804, 0x524e,
-+      0xa6b4, 0x00ff, 0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804, 0x524e,
-+      0x709f, 0x49b4, 0x0804, 0x29df, 0x0c58, 0xa286, 0x0001, 0x0110,
-+      0x080c, 0x297f, 0x709b, 0x49be, 0x0804, 0x5279, 0x2011, 0x0006,
-+      0x080c, 0x4cdd, 0x0002, 0x49c8, 0x29df, 0x44ee, 0x49ce, 0x49d8,
-+      0xa6b5, 0x0800, 0x6eb6, 0x7e5a, 0x0804, 0x524e, 0xa6b4, 0x00ff,
-+      0xa6b5, 0x0800, 0x6eb6, 0xa6b5, 0x4000, 0x7e5a, 0x0804, 0x524e,
-+      0x709f, 0x49dc, 0x0804, 0x29df, 0x0c58, 0x2300, 0x0002, 0x49e4,
-+      0x49e2, 0x49e2, 0x080c, 0x297f, 0x080c, 0x297f, 0x2300, 0x719c,
-+      0xa005, 0x0817, 0x6810, 0x70b2, 0xa282, 0x0003, 0x0310, 0x080c,
-+      0x297f, 0x2300, 0x0002, 0x49f6, 0x4a03, 0x4a21, 0xa684, 0x0200,
-+      0x0120, 0x080c, 0x5222, 0x080c, 0x5223, 0x2001, 0x0001, 0x080c,
-+      0x5184, 0x0804, 0x29df, 0xa286, 0x0002, 0x0120, 0x82ff, 0x0110,
-+      0x080c, 0x297f, 0x709b, 0x4a0e, 0x0804, 0x5279, 0x2011, 0x0018,
-+      0x080c, 0x4cdd, 0x0002, 0x4a18, 0x29df, 0x44ee, 0x4a1a, 0x4a1c,
-+      0x0804, 0x524e, 0x0804, 0x524e, 0x709f, 0x4a20, 0x0804, 0x29df,
-+      0x0cb8, 0x2200, 0x0002, 0x4a25, 0x4a3c, 0x709b, 0x4a29, 0x0804,
-+      0x5279, 0x2011, 0x0017, 0x080c, 0x4cdd, 0x0002, 0x4a33, 0x29df,
-+      0x44ee, 0x4a35, 0x4a37, 0x0804, 0x524e, 0x0804, 0x524e, 0x709f,
-+      0x4a3b, 0x0804, 0x29df, 0x0cb8, 0xd4fc, 0x1904, 0x4abb, 0xa684,
-+      0x0100, 0x0120, 0x080c, 0x5222, 0x080c, 0x4cca, 0x00c6, 0x080c,
-+      0x4fc6, 0x6028, 0xd08c, 0x0190, 0x612c, 0x7adc, 0x080c, 0x20dd,
-+      0x2110, 0x2008, 0x6024, 0xa210, 0xa189, 0x0000, 0x78d8, 0xa210,
-+      0xa189, 0x0000, 0x602c, 0x080c, 0x52b7, 0x0020, 0x78d8, 0x78d2,
-+      0x78dc, 0x78d6, 0x00ce, 0xa6b4, 0xefff, 0x7e5a, 0x709b, 0x4a6a,
-+      0x0804, 0x5279, 0x2011, 0x000d, 0x080c, 0x4cdd, 0x0002, 0x4a76,
-+      0x29df, 0x44ee, 0x4a76, 0x4aaa, 0x4aaf, 0x4ab1, 0x78d8, 0x79dc,
-+      0xa105, 0x1168, 0x78b8, 0x8007, 0xa084, 0x007f, 0x1140, 0x70a7,
-+      0x0000, 0x7858, 0xa084, 0xfdff, 0x785a, 0x0804, 0x524e, 0xa684,
-+      0x0100, 0x01f0, 0x080c, 0x5223, 0x080c, 0x51cf, 0x0026, 0x0036,
-+      0x00c6, 0x080c, 0x4fc6, 0x6028, 0xd08c, 0x0138, 0x6020, 0x00ce,
-+      0x6930, 0x6a2c, 0x080c, 0x52b7, 0x0028, 0x00ce, 0x682c, 0x78d2,
-+      0x6830, 0x78d6, 0x70a7, 0x0000, 0x001e, 0x000e, 0x080c, 0x5622,
-+      0x0804, 0x524e, 0x709f, 0x4aae, 0x0804, 0x29df, 0x0838, 0x080c,
-+      0x297f, 0x709f, 0x4ab7, 0x080c, 0x5223, 0x0804, 0x29df, 0x080c,
-+      0x527f, 0x0804, 0x29df, 0x080c, 0x5223, 0x6918, 0xd1a4, 0x0140,
-+      0x6827, 0x000f, 0x080c, 0x5184, 0x080c, 0x5223, 0x0804, 0x29df,
-+      0x709f, 0x4ad0, 0x2001, 0x0003, 0x080c, 0x517c, 0x0804, 0x5271,
-+      0x080c, 0x5207, 0x682c, 0x78d2, 0x6830, 0x78d6, 0x0804, 0x524e,
-+      0xa282, 0x0002, 0x0310, 0x080c, 0x297f, 0x2300, 0x0002, 0x4ae2,
-+      0x4af2, 0x4af4, 0xa286, 0x0001, 0x0110, 0x080c, 0x297f, 0x00c6,
-+      0x080c, 0x4fc6, 0x6224, 0x2009, 0x0000, 0x602c, 0x080c, 0x52b7,
-+      0x0804, 0x524e, 0x080c, 0x297f, 0x080c, 0x297f, 0x0026, 0x002e,
-+      0xa684, 0x0200, 0x0130, 0x080c, 0x5222, 0x080c, 0x4cca, 0x080c,
-+      0x5223, 0x2300, 0x0002, 0x4b06, 0x4b08, 0x4b0a, 0x0804, 0x4850,
-+      0x0804, 0x487e, 0x0804, 0x48de, 0x70ac, 0x6812, 0x70b2, 0x8000,
-+      0x70ae, 0x681b, 0x0000, 0xa684, 0x0008, 0x01c0, 0x0156, 0x0136,
-+      0x0146, 0x7890, 0x8004, 0x8004, 0x8004, 0x8004, 0xa084, 0x000f,
-+      0x681a, 0x80ac, 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0xad80,
-+      0x000b, 0x20a0, 0x53a5, 0x014e, 0x013e, 0x015e, 0xa6c4, 0x0f00,
-+      0xa684, 0x0002, 0x1140, 0x692c, 0x810d, 0x810d, 0x810d, 0xa184,
-+      0x0007, 0x2008, 0x0090, 0x789b, 0x0090, 0x79ac, 0xa184, 0x0020,
-+      0x0160, 0x0016, 0x2009, 0x0005, 0x2001, 0x3d00, 0x080c, 0x51da,
-+      0x6824, 0xa085, 0x003b, 0x6826, 0x001e, 0xa184, 0x001f, 0xa805,
-+      0x0016, 0x3208, 0xa18c, 0x0600, 0x0110, 0xc0fc, 0x0008, 0xc0fd,
-+      0x001e, 0x6816, 0x080c, 0x449c, 0x68ce, 0xa684, 0x0004, 0x0130,
-+      0xa18c, 0xff00, 0x78a8, 0xa084, 0x00ff, 0xa105, 0x682a, 0xa6b4,
-+      0x00ff, 0x6000, 0xa084, 0x0008, 0x0110, 0xa6b5, 0x4000, 0x6eb6,
-+      0x7e5a, 0x0005, 0x0156, 0x0136, 0x0146, 0x6918, 0x7890, 0x8004,
-+      0x8004, 0x8004, 0x8004, 0xa084, 0x000f, 0x0006, 0xa100, 0x681a,
-+      0x000e, 0x8000, 0x8004, 0x0160, 0x20a8, 0x8104, 0xa080, 0x000b,
-+      0xad00, 0x20a0, 0x789b, 0x0000, 0xaf80, 0x002b, 0x2098, 0x53a5,
-+      0x014e, 0x013e, 0x015e, 0x0005, 0x682c, 0xd0b4, 0x1140, 0xd0ac,
-+      0x1118, 0x2011, 0x0010, 0x0048, 0x2011, 0x000c, 0x0030, 0xa084,
-+      0x0020, 0x1110, 0x620c, 0x0008, 0x6210, 0x6b18, 0x2300, 0xa202,
-+      0x01c0, 0x2018, 0xa382, 0x000e, 0x0220, 0x0118, 0x2019, 0x000e,
-+      0x0020, 0x7858, 0xa084, 0xffef, 0x785a, 0x783b, 0x1b01, 0x7893,
-+      0x0000, 0x7ba2, 0x70a8, 0xa080, 0x009e, 0x781a, 0xa085, 0x0001,
-+      0x0005, 0x7858, 0xa084, 0xffef, 0x785a, 0x7893, 0x0000, 0xa006,
-+      0x0005, 0x6904, 0xa18c, 0x00ff, 0xa196, 0x0007, 0x0128, 0xa196,
-+      0x000f, 0x0110, 0x6807, 0x0117, 0x6914, 0x6814, 0x080c, 0x449c,
-+      0x6100, 0x8104, 0x1290, 0x601c, 0xa005, 0x0118, 0x2001, 0x0800,
-+      0x0070, 0x00d6, 0x6824, 0x0006, 0x080c, 0x522f, 0x000e, 0x6826,
-+      0x2d00, 0x682e, 0x080c, 0x4432, 0x00de, 0x2001, 0x0200, 0x6924,
-+      0xa18c, 0x00ff, 0xa10d, 0x6926, 0x8007, 0x789b, 0x000e, 0x78aa,
-+      0x6820, 0xa085, 0x8000, 0x6822, 0x2031, 0x0400, 0x6eb6, 0x7e5a,
-+      0x71a8, 0xa188, 0x00a1, 0x791a, 0x0005, 0x080c, 0x2ae3, 0x6814,
-+      0x2040, 0xa684, 0x0002, 0x1168, 0x692c, 0x810d, 0x810d, 0x810d,
-+      0xa184, 0x0007, 0x2008, 0xa805, 0x6816, 0x080c, 0x449c, 0x68ce,
-+      0x0020, 0x6914, 0x6814, 0x080c, 0x449c, 0x6100, 0x8104, 0x1a04,
-+      0x4c70, 0xa184, 0x0300, 0x0118, 0x6807, 0x0117, 0x00d0, 0x6004,
-+      0xa005, 0x1500, 0x6807, 0x0117, 0x601c, 0xa005, 0x1150, 0x00d6,
-+      0x080c, 0x522f, 0x6827, 0x0034, 0x2d00, 0x682e, 0x080c, 0x4432,
-+      0x00de, 0xa684, 0x0004, 0x0128, 0x2031, 0x0400, 0x2001, 0x2800,
-+      0x0020, 0x2031, 0x0400, 0x2001, 0x0800, 0x71a8, 0xa188, 0x00a1,
-+      0x0804, 0x4ca5, 0x6018, 0xa005, 0x1d60, 0x601c, 0xa005, 0x1d48,
-+      0x689f, 0x0000, 0x6827, 0x003d, 0xa684, 0x0001, 0x0904, 0x4cb3,
-+      0xd694, 0x1180, 0x6100, 0xd1d4, 0x0168, 0x692c, 0xa18c, 0x00ff,
-+      0x0904, 0x4cb3, 0xa186, 0x0003, 0x0904, 0x4cb3, 0xa186, 0x0012,
-+      0x0904, 0x4cb3, 0xa6b5, 0x0800, 0x71a8, 0xa188, 0x00c3, 0x04f0,
-+      0x6807, 0x0117, 0x2031, 0x0400, 0x692c, 0xa18c, 0x00ff, 0xa186,
-+      0x0012, 0x1128, 0x2001, 0x4cc0, 0x2009, 0x0001, 0x0070, 0xa186,
-+      0x0003, 0x1128, 0x2001, 0x4cc1, 0x2009, 0x0012, 0x0030, 0x2001,
-+      0x0200, 0x71a8, 0xa188, 0x00a1, 0x00c0, 0x6a34, 0xa29d, 0x0000,
-+      0x1110, 0xa006, 0x0cb0, 0x0006, 0x2100, 0xa21a, 0x000e, 0x1208,
-+      0x2208, 0x080c, 0x51f4, 0x78a3, 0x0000, 0x681c, 0xa085, 0x0040,
-+      0x681e, 0x71a8, 0xa188, 0x00f3, 0xa006, 0x6826, 0x8007, 0x789b,
-+      0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822, 0x6eb6, 0x7e5a,
-+      0x791a, 0x0804, 0x29df, 0x6eb6, 0x080c, 0x4432, 0x6810, 0x70b2,
-+      0x7003, 0x0007, 0x7097, 0x0000, 0x7053, 0x0000, 0x0804, 0x29df,
-+      0x0023, 0x0070, 0x0005, 0x0000, 0x0a00, 0x0000, 0x0000, 0x0025,
-+      0x0000, 0x0000, 0x683b, 0x0000, 0x6837, 0x0000, 0xa684, 0x0200,
-+      0x0158, 0x78b8, 0x8007, 0xa08c, 0x007f, 0x78d8, 0xa100, 0x6836,
-+      0x78dc, 0xa081, 0x0000, 0x683a, 0x0005, 0x7990, 0x810f, 0xa5ac,
-+      0x0007, 0x2021, 0x0000, 0xa480, 0x0090, 0x789a, 0x79a8, 0xa18c,
-+      0x00ff, 0xa184, 0x0080, 0x11e0, 0xa182, 0x0020, 0x16b0, 0xa182,
-+      0x0012, 0x1a04, 0x516d, 0x2100, 0x000b, 0x0005, 0x516d, 0x4f27,
-+      0x516d, 0x516d, 0x4d31, 0x4d34, 0x4d78, 0x4db3, 0x4de6, 0x4de9,
-+      0x516d, 0x516d, 0x4d98, 0x4e54, 0x4e8c, 0x516d, 0x516d, 0x4eb2,
-+      0xa184, 0x0020, 0x1904, 0x4ee6, 0xa18c, 0x001f, 0x6814, 0xa084,
-+      0x001f, 0xa106, 0x0178, 0x70a8, 0xa080, 0x008f, 0x781a, 0x2001,
-+      0x0014, 0x080c, 0x5184, 0x080c, 0x5223, 0x7003, 0x0000, 0x2001,
-+      0x0002, 0x0005, 0x2001, 0x0000, 0x0005, 0xa182, 0x0024, 0x1a04,
-+      0x516d, 0xa184, 0x0003, 0x0853, 0x0005, 0x516d, 0x516d, 0x516d,
-+      0x516d, 0x080c, 0x516d, 0x0005, 0x2200, 0x0002, 0x4eb5, 0x4eb5,
-+      0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d65,
-+      0x4d63, 0x4d65, 0x4d4f, 0x4d57, 0x4d57, 0x4d57, 0x4d65, 0x4d65,
-+      0x4d6d, 0x4d70, 0x4eb5, 0x4d70, 0x4d65, 0x4d65, 0x4d65, 0x00c6,
-+      0x0076, 0x6f14, 0x080c, 0x3ec6, 0x007e, 0x00ce, 0x0070, 0x6818,
-+      0xd0a4, 0x0158, 0x6827, 0x0033, 0x080c, 0x5184, 0x080c, 0x5223,
-+      0x2001, 0x0001, 0x0005, 0x080c, 0x4fd7, 0x6827, 0x02b3, 0x2009,
-+      0x000b, 0x2001, 0x4800, 0x0804, 0x4ee9, 0x080c, 0x515e, 0x0005,
-+      0x6827, 0x0093, 0x2009, 0x000b, 0x2001, 0x4800, 0x0804, 0x4ed1,
-+      0x2d58, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1110, 0x6807,
-+      0x0117, 0x6827, 0x0002, 0x080c, 0x522f, 0x6827, 0x0036, 0x6932,
-+      0x2d00, 0x682e, 0x00d6, 0x080c, 0x440a, 0x080c, 0x4f11, 0x2b68,
-+      0x080c, 0x4432, 0x00de, 0x080c, 0x4432, 0x2001, 0x0002, 0x0005,
-+      0x080c, 0x4f11, 0x2001, 0x0017, 0x080c, 0x5184, 0x7097, 0x0000,
-+      0x6914, 0xd1fc, 0x0118, 0x2009, 0xb3c6, 0x0010, 0x2009, 0xb386,
-+      0x200b, 0x0006, 0x70a3, 0x0017, 0x2009, 0x0200, 0x080c, 0x4318,
-+      0x2001, 0x0001, 0x0005, 0x2200, 0x0002, 0x4eb5, 0x4ee6, 0x4ee6,
-+      0x4ee6, 0x4dd6, 0x4ef8, 0x4dde, 0x4ef8, 0x4ef8, 0x4efb, 0x4efb,
-+      0x4f00, 0x4f00, 0x4dce, 0x4dce, 0x4ee6, 0x4ee6, 0x4ef8, 0x4ee6,
-+      0x4dde, 0x4eb5, 0x4dde, 0x4dde, 0x4dde, 0x4dde, 0x6827, 0x0084,
-+      0x2009, 0x000b, 0x2001, 0x4300, 0x0804, 0x4f0a, 0x6827, 0x000d,
-+      0x2009, 0x000b, 0x2001, 0x4300, 0x0804, 0x4ee9, 0x6827, 0x0093,
-+      0x2009, 0x000b, 0x2001, 0x4300, 0x0804, 0x4ed1, 0x2001, 0x0000,
-+      0x0005, 0x2200, 0x0002, 0x4eb5, 0x4e4c, 0x4e4c, 0x4e4c, 0x4e4c,
-+      0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04, 0x4e04,
-+      0x4e4c, 0x4e4c, 0x4e4c, 0x4e4c, 0x4e2a, 0x4e4c, 0x4e4c, 0x4e2a,
-+      0x4e2a, 0x4e2a, 0x4e2a, 0x4eb5, 0x6804, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x1500, 0x690c, 0xa184, 0x000f, 0x0904, 0x4ef8, 0x8001,
-+      0x0130, 0xa18c, 0xfff0, 0xa105, 0x680e, 0x0804, 0x4ef8, 0x70a8,
-+      0xa080, 0x008f, 0x781a, 0x6827, 0x000f, 0x080c, 0x4bc9, 0x080c,
-+      0x5184, 0x7003, 0x0000, 0x7043, 0x0000, 0x7053, 0x0000, 0x2001,
-+      0x0002, 0x0005, 0x6918, 0xa184, 0x000f, 0x0904, 0x4ef8, 0x8001,
-+      0x0130, 0xa18c, 0xfff0, 0xa105, 0x681a, 0x0804, 0x4ef8, 0x70a8,
-+      0xa080, 0x008f, 0x781a, 0x6827, 0x008f, 0x2009, 0x000b, 0x2001,
-+      0x4300, 0x080c, 0x51da, 0x080c, 0x5184, 0x080c, 0x5223, 0x7003,
-+      0x0000, 0x2001, 0x0002, 0x0005, 0x6827, 0x0093, 0x2009, 0x000b,
-+      0x2001, 0x4300, 0x0804, 0x4ed1, 0xa684, 0x0004, 0x1180, 0x6804,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x516d, 0x080c, 0x4f11,
-+      0x6807, 0x0117, 0x080c, 0x4432, 0x2001, 0x0002, 0x0005, 0x6000,
-+      0xa084, 0x0004, 0x0904, 0x516d, 0x2d58, 0x6804, 0xa084, 0x00ff,
-+      0xa086, 0x0006, 0x1110, 0x6807, 0x0117, 0x6827, 0x0002, 0x080c,
-+      0x522f, 0x6827, 0x0036, 0x6932, 0x2d00, 0x682e, 0x00d6, 0x080c,
-+      0x4416, 0x080c, 0x4f11, 0x2b68, 0x080c, 0x4432, 0x00de, 0x080c,
-+      0x4432, 0x2001, 0x0002, 0x0005, 0x6000, 0xa084, 0x0004, 0x0904,
-+      0x516d, 0x2d58, 0x6a04, 0xa294, 0x00ff, 0xa286, 0x0006, 0x1110,
-+      0x6807, 0x0117, 0x6827, 0x0002, 0x2d58, 0x080c, 0x522f, 0x6827,
-+      0x0036, 0x6932, 0x2d00, 0x682e, 0x00d6, 0x080c, 0x4424, 0x080c,
-+      0x4f11, 0x2b68, 0x080c, 0x4432, 0x00de, 0x080c, 0x4432, 0x2001,
-+      0x0002, 0x0005, 0x080c, 0x516d, 0x0005, 0x70a8, 0xa080, 0x008f,
-+      0x781a, 0x2001, 0x0001, 0x080c, 0x5184, 0x080c, 0x5223, 0x7003,
-+      0x0000, 0x2001, 0x0002, 0x0005, 0x080c, 0x51da, 0x080c, 0x5222,
-+      0x080c, 0x4cca, 0x080c, 0x4bc9, 0x080c, 0x5223, 0x2001, 0x0001,
-+      0x0005, 0x080c, 0x51da, 0x080c, 0x5222, 0x080c, 0x4cca, 0x70a8,
-+      0xa080, 0x008f, 0x781a, 0x2001, 0x0013, 0x080c, 0x5184, 0x080c,
-+      0x5223, 0x7003, 0x0000, 0x2001, 0x0002, 0x0005, 0x080c, 0x516d,
-+      0x0005, 0x080c, 0x51da, 0x080c, 0x5222, 0x080c, 0x4cca, 0x080c,
-+      0x4bc9, 0x080c, 0x5223, 0x080c, 0x527f, 0x2001, 0x0001, 0x0005,
-+      0x2001, 0x0003, 0x0005, 0x080c, 0x4fd7, 0x2001, 0x0000, 0x0005,
-+      0x00c6, 0x0076, 0x6f14, 0x080c, 0x3ec6, 0x007e, 0x00ce, 0x2001,
-+      0x0000, 0x0005, 0x080c, 0x51da, 0x080c, 0x516d, 0x2001, 0x0006,
-+      0x0005, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0118, 0xa186,
-+      0x000f, 0x1120, 0x080c, 0x5222, 0x080c, 0x4cca, 0x70a8, 0xa080,
-+      0x008f, 0x781a, 0x080c, 0x5223, 0x7003, 0x0000, 0x0005, 0x7aa8,
-+      0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0005, 0x1a04,
-+      0x516d, 0x000b, 0x0005, 0x516d, 0x4f38, 0x516d, 0x4fdd, 0x50a0,
-+      0xa282, 0x0003, 0x1904, 0x516d, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8,
-+      0xa6b4, 0x00ff, 0x69b8, 0xa184, 0x0100, 0x05a0, 0xa18c, 0xfeff,
-+      0x69ba, 0x78a0, 0xa005, 0x1570, 0xa6b4, 0x00ff, 0x01f0, 0xa682,
-+      0x001d, 0x1270, 0xa686, 0x0010, 0x1108, 0x8631, 0x852b, 0x852b,
-+      0x2041, 0x0000, 0x080c, 0x3f0c, 0x0118, 0x080c, 0x3d35, 0x0078,
-+      0x080c, 0x508e, 0x080c, 0x3d32, 0x69b8, 0xa18d, 0x0100, 0x69ba,
-+      0x7e58, 0xa6b5, 0x1000, 0x7e5a, 0x0030, 0x080c, 0x3d32, 0x7e58,
-+      0xa6b4, 0xefff, 0x7e5a, 0x70a8, 0xa080, 0x00a1, 0x781a, 0x2001,
-+      0x0001, 0x0005, 0x00c6, 0x080c, 0x4fc6, 0x6200, 0xd2e4, 0x05a0,
-+      0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x001c, 0x0218, 0x0110,
-+      0x2011, 0x001c, 0x2600, 0xa202, 0x1208, 0x2230, 0xa686, 0x0010,
-+      0x1108, 0x8631, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130,
-+      0xa282, 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c,
-+      0x1210, 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228, 0x2620,
-+      0x080c, 0x5091, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3f0c,
-+      0x0118, 0x080c, 0x3d3e, 0x0020, 0x080c, 0x508e, 0x080c, 0x3d3b,
-+      0x7e58, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080,
-+      0x00de, 0x781a, 0x2001, 0x0004, 0x00ce, 0x0005, 0x6814, 0x8007,
-+      0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x8003, 0x6914, 0xd1fc,
-+      0x1118, 0xa0e0, 0xb800, 0x0010, 0xa0e0, 0xb900, 0x0005, 0x00c6,
-+      0x0c69, 0x080c, 0x3d3b, 0x00ce, 0x0005, 0xa282, 0x0002, 0x1904,
-+      0x516d, 0x7aa8, 0xa294, 0x00ff, 0x69b8, 0xa184, 0x0200, 0x0540,
-+      0xa18c, 0xfdff, 0x69ba, 0x78a0, 0xa005, 0x1510, 0xa282, 0x0002,
-+      0x1a04, 0x3e69, 0x080c, 0x506b, 0x080c, 0x3deb, 0x080c, 0x3d32,
-+      0x7e58, 0xa684, 0x0100, 0x0150, 0x682c, 0xa084, 0x0001, 0x0130,
-+      0xc6fc, 0x7888, 0xa084, 0x0040, 0x0108, 0xc6fd, 0xa6b5, 0x1000,
-+      0x7e5a, 0x70a8, 0xa080, 0x00a1, 0x781a, 0x2001, 0x0001, 0x0005,
-+      0x00c6, 0x080c, 0x4fc6, 0x6028, 0xc08c, 0x602a, 0xa284, 0xfffe,
-+      0x0118, 0x2011, 0x0001, 0x0018, 0xa284, 0x0001, 0x0128, 0x6100,
-+      0xd1ec, 0x1110, 0x2011, 0x0000, 0x04c1, 0x080c, 0x3df1, 0x080c,
-+      0x3d3b, 0x7e58, 0xa684, 0x0100, 0x0150, 0x682c, 0xa084, 0x0001,
-+      0x0130, 0xc6fc, 0x7888, 0xa084, 0x0040, 0x0108, 0xc6fd, 0xa6b5,
-+      0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00de, 0x781a,
-+      0x2001, 0x0004, 0x00ce, 0x0005, 0x00c6, 0x2960, 0x6000, 0x2011,
-+      0x0001, 0xa084, 0x2000, 0x1110, 0x2011, 0x0000, 0x78ab, 0x0001,
-+      0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x68b8,
-+      0xa085, 0x0200, 0x68ba, 0x00ce, 0x0005, 0x789b, 0x0018, 0x78ab,
-+      0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0081,
-+      0x78ab, 0x0004, 0x0005, 0x00c6, 0x705c, 0x2060, 0x6000, 0xa084,
-+      0x1000, 0x1128, 0x2029, 0x0032, 0x2021, 0x0000, 0x0080, 0x6408,
-+      0xa4ac, 0x00ff, 0xa582, 0x000c, 0x1210, 0x2029, 0x000c, 0x8427,
-+      0xa4a4, 0x00ff, 0xa482, 0x001c, 0x0210, 0x2021, 0x001c, 0x0049,
-+      0x68b8, 0xa085, 0x0100, 0x68ba, 0x00ce, 0x0005, 0xa026, 0x2029,
-+      0x0032, 0x789b, 0x0018, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab,
-+      0x0001, 0x7daa, 0x7caa, 0x789b, 0x0081, 0x78ab, 0x0005, 0x0005,
-+      0x080c, 0x4fc6, 0x6000, 0xd09c, 0x1118, 0x080c, 0x516d, 0x0005,
-+      0xa282, 0x0006, 0x0118, 0x080c, 0x516d, 0x0005, 0x7aa8, 0xa294,
-+      0x00ff, 0x7e5a, 0x7ea8, 0x7ea8, 0xa6b4, 0x00ff, 0x7fa8, 0xa7bc,
-+      0x00ff, 0xa782, 0x0002, 0x0218, 0x080c, 0x516d, 0x0005, 0x78a8,
-+      0x2040, 0xa8c4, 0x00ff, 0xa882, 0x0003, 0x0218, 0x080c, 0x516d,
-+      0x0005, 0xa886, 0x0001, 0x1118, 0x080c, 0x516d, 0x0005, 0x2600,
-+      0xa005, 0x1120, 0x080c, 0x4fd7, 0x0804, 0x513e, 0xa682, 0x001c,
-+      0x0218, 0x0110, 0x2031, 0x001c, 0x88ff, 0x0168, 0x87ff, 0x1118,
-+      0x080c, 0x516d, 0x0005, 0x6000, 0xd0ec, 0x0118, 0x78ec, 0xd0e4,
-+      0x1110, 0x2041, 0x0000, 0x87ff, 0x1178, 0xa282, 0x000a, 0x0230,
-+      0x0128, 0xa282, 0x0061, 0x1128, 0x0120, 0x00b8, 0x2011, 0x000a,
-+      0x00a0, 0x2011, 0x0061, 0x0088, 0x78ec, 0xd0e4, 0x1108, 0x0c68,
-+      0xa282, 0x0009, 0x0228, 0x0120, 0xa282, 0x0019, 0x0230, 0x0018,
-+      0x2011, 0x0009, 0x0010, 0x2011, 0x0019, 0x0086, 0x0076, 0x0066,
-+      0x8213, 0x8213, 0x2228, 0x080c, 0x3f0c, 0x006e, 0x007e, 0x008e,
-+      0x1128, 0x080c, 0x4fd7, 0xa016, 0xa036, 0x0400, 0x87ff, 0x0150,
-+      0xa8ac, 0x0002, 0x0138, 0x6520, 0x85ff, 0x0120, 0x6528, 0xc58d,
-+      0x652a, 0x0018, 0x6528, 0xc58c, 0x652a, 0x2620, 0x88ff, 0x0108,
-+      0x8634, 0xa69e, 0x0010, 0x1108, 0x8631, 0x0026, 0x080c, 0x3d3e,
-+      0x080c, 0x3df1, 0x2430, 0x002e, 0x8214, 0x8214, 0x789b, 0x0018,
-+      0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x7aaa, 0x78ab,
-+      0x0000, 0x7eaa, 0x7faa, 0x2800, 0x78aa, 0x789b, 0x0081, 0x78ab,
-+      0x0008, 0x7e58, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8,
-+      0xa080, 0x00de, 0x781a, 0x2001, 0x0004, 0x0005, 0x2001, 0x0003,
-+      0x00d9, 0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080,
-+      0x00de, 0x781a, 0x2001, 0x0005, 0x0005, 0x2001, 0x0007, 0x0061,
-+      0xa6b5, 0x1000, 0x7e5a, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00de,
-+      0x781a, 0x2001, 0x0004, 0x0005, 0x789b, 0x0018, 0x78aa, 0x789b,
-+      0x0081, 0x78ab, 0x0001, 0x0005, 0x6904, 0xa18c, 0x00ff, 0xa196,
-+      0x0007, 0x0130, 0xa196, 0x000f, 0x0118, 0x080c, 0x1ca6, 0x0005,
-+      0x6924, 0xa194, 0x003f, 0x1120, 0xa18c, 0xffc0, 0xa105, 0x6826,
-+      0x6a1c, 0xd29c, 0x1530, 0xa086, 0x0001, 0x1518, 0x2001, 0xb341,
-+      0x2004, 0xd094, 0x01f0, 0x0e04, 0x51c1, 0x0156, 0x00e6, 0x0036,
-+      0x0046, 0x0056, 0x2071, 0x0010, 0x7bf0, 0x7af4, 0x7cf8, 0x7dfc,
-+      0x2009, 0x0002, 0xad80, 0x0003, 0x080c, 0x1e7a, 0x005e, 0x004e,
-+      0x003e, 0x00ee, 0x015e, 0x1128, 0x2091, 0x4080, 0x080c, 0x1ca6,
-+      0x0010, 0x080c, 0x4432, 0x691c, 0xa184, 0x0100, 0x0138, 0x6914,
-+      0x2100, 0x080c, 0x449c, 0x6204, 0x8210, 0x6206, 0x0005, 0x692c,
-+      0x6834, 0x682e, 0xa112, 0x6930, 0x6838, 0x6832, 0xa11b, 0xa200,
-+      0xa301, 0x0005, 0x00c6, 0xade0, 0x0018, 0x6003, 0x0070, 0x6106,
-+      0x600b, 0x0000, 0x600f, 0x0a00, 0x6013, 0x0000, 0x6017, 0x0000,
-+      0x8007, 0x601a, 0x601f, 0x0000, 0x6023, 0x0000, 0x00ce, 0x6824,
-+      0xa085, 0x0080, 0x6826, 0x0005, 0x0156, 0x0136, 0x0146, 0x2098,
-+      0xaf80, 0x002d, 0x20a0, 0x81ac, 0x0108, 0x53a6, 0xa184, 0x0001,
-+      0x0110, 0x3304, 0x78be, 0x014e, 0x013e, 0x015e, 0x0005, 0x70a4,
-+      0x00e6, 0x0006, 0x000e, 0x00ee, 0xa005, 0x6918, 0x0016, 0x6914,
-+      0x0016, 0x6928, 0x0016, 0x001e, 0x001e, 0x001e, 0x190c, 0x297f,
-+      0x70a7, 0x8000, 0x6814, 0xd0fc, 0x0110, 0xc185, 0x0008, 0xc184,
-+      0x0804, 0x55dc, 0x0005, 0x71a4, 0x81ff, 0x0140, 0x7848, 0xa085,
-+      0x0008, 0x784a, 0x70a7, 0x0000, 0x080c, 0x52e3, 0x0005, 0x00c6,
-+      0x00d6, 0x080c, 0x1c85, 0x00ce, 0x0156, 0x0136, 0x0146, 0x2da0,
-+      0x2c98, 0x20a9, 0x0037, 0x53a3, 0x014e, 0x013e, 0x015e, 0x6807,
-+      0x010d, 0x680b, 0x0000, 0x701c, 0x8007, 0x681a, 0x6823, 0x0000,
-+      0x681f, 0x0000, 0x689f, 0x0000, 0x00ce, 0x0005, 0x00c6, 0x080c,
-+      0x4fc6, 0x6028, 0xd08c, 0x00ce, 0x0180, 0x7814, 0xa084, 0x0001,
-+      0x0130, 0x70a8, 0xa080, 0x011c, 0x781a, 0x0804, 0x29df, 0x70a8,
-+      0xa080, 0x0135, 0x781a, 0x0804, 0x29df, 0x70a8, 0xa080, 0x00a1,
-+      0x781a, 0x0804, 0x29df, 0x70a8, 0xa080, 0x0092, 0x781a, 0x0804,
-+      0x29df, 0x783b, 0x1700, 0x70a8, 0xa080, 0x00de, 0x781a, 0x0804,
-+      0x29df, 0x70a8, 0xa080, 0x00e7, 0x781a, 0x0804, 0x29df, 0x6904,
-+      0xa18c, 0x00ff, 0xa196, 0x0007, 0x0128, 0xa196, 0x000f, 0x0110,
-+      0x6807, 0x0117, 0x6824, 0xa084, 0x00ff, 0xa085, 0x0200, 0x6826,
-+      0x8007, 0x789b, 0x000e, 0x78aa, 0x6820, 0xa085, 0x8000, 0x6822,
-+      0x2031, 0x0400, 0x6eb6, 0x7e5a, 0x71a8, 0xa188, 0x00a1, 0x791a,
-+      0x0005, 0x080c, 0x5223, 0x7848, 0xa085, 0x000c, 0x784a, 0x70a8,
-+      0xa080, 0x008f, 0x781a, 0x2009, 0x000b, 0x2001, 0x4400, 0x080c,
-+      0x51da, 0x2001, 0x0013, 0x080c, 0x5184, 0x0804, 0x44ee, 0x81ff,
-+      0x1110, 0xa21a, 0x0218, 0x080c, 0x20ea, 0x0070, 0x7ad2, 0x7ada,
-+      0x2200, 0x2011, 0x0001, 0x6027, 0x0000, 0x7ad6, 0x78df, 0x0000,
-+      0x7b14, 0xc384, 0x7b16, 0x0088, 0x81ff, 0x1130, 0x6027, 0x0000,
-+      0x7b14, 0xc384, 0x7b16, 0x0020, 0x6126, 0x7b14, 0xc385, 0x7b16,
-+      0x78d2, 0x78da, 0x7ad6, 0x8211, 0x7ade, 0x6232, 0x602e, 0x6028,
-+      0xc085, 0x602a, 0x0005, 0x0126, 0x70f0, 0xa084, 0x4c00, 0x8004,
-+      0x2090, 0x7204, 0x700c, 0xa215, 0x7008, 0xc09c, 0xa205, 0x1138,
-+      0x7007, 0x0004, 0x7003, 0x0000, 0x012e, 0x2000, 0x0005, 0x7000,
-+      0xd084, 0x0580, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8, 0xa184,
-+      0x0003, 0x0904, 0x534b, 0xa184, 0x01e0, 0x1904, 0x534b, 0xd1f4,
-+      0x1d88, 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60, 0x2011, 0x0180,
-+      0x710c, 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20, 0x700c, 0xa106,
-+      0x0dc0, 0x7007, 0x0012, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8,
-+      0xa184, 0x0003, 0x0540, 0xd194, 0x0db0, 0xd1f4, 0x0520, 0x7007,
-+      0x0002, 0x0880, 0x7108, 0xd1fc, 0x0130, 0x080c, 0x5484, 0x8aff,
-+      0x0904, 0x52e9, 0x0cb8, 0x700c, 0xa08c, 0x07ff, 0x01c8, 0x7004,
-+      0xd084, 0x0158, 0x7014, 0xa005, 0x1128, 0x7010, 0xa005, 0x0128,
-+      0xa102, 0x1e40, 0x7007, 0x0010, 0x0030, 0x8aff, 0x0148, 0x080c,
-+      0x56ad, 0x1de8, 0x09f8, 0x080c, 0x53ee, 0x012e, 0x2000, 0x0005,
-+      0x7204, 0x700c, 0xa215, 0x7108, 0xc19c, 0x8103, 0x1228, 0xa205,
-+      0x1d90, 0x7007, 0x0002, 0x0ca0, 0xa205, 0x1d68, 0x7003, 0x0000,
-+      0x7007, 0x0004, 0x012e, 0x2000, 0x0005, 0x0016, 0x6104, 0xa18c,
-+      0x00ff, 0xa186, 0x0007, 0x0118, 0xa18e, 0x000f, 0x1110, 0x6040,
-+      0x0008, 0x6428, 0x001e, 0x84ff, 0x01f8, 0x2c70, 0x7004, 0xa0bc,
-+      0x000f, 0xa7b8, 0x53a4, 0x273d, 0x87fb, 0x1138, 0x0210, 0x080c,
-+      0x297f, 0x609c, 0xa075, 0x0180, 0x0c88, 0x2705, 0xae68, 0x6808,
-+      0xa630, 0x680c, 0xa529, 0x8421, 0x0138, 0x8738, 0x2705, 0xa005,
-+      0x1da8, 0x709c, 0xa075, 0x1d10, 0x0005, 0x0000, 0x0005, 0x0009,
-+      0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009,
-+      0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x5399, 0x5396, 0x0000,
-+      0x0000, 0x8000, 0x0000, 0x5399, 0x0000, 0x53a1, 0x539e, 0x0000,
-+      0x0000, 0x0000, 0x0000, 0x53a1, 0x0000, 0x539c, 0x539c, 0x0000,
-+      0x0000, 0x8000, 0x0000, 0x539c, 0x0000, 0x53a2, 0x53a2, 0x0000,
-+      0x0000, 0x0000, 0x0000, 0x53a2, 0x2079, 0xb340, 0x2071, 0x0010,
-+      0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x7808, 0xd0ec,
-+      0x0128, 0x2009, 0x0001, 0x2071, 0x0020, 0x0060, 0x2001, 0x01ff,
-+      0x2004, 0xd0fc, 0x0118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0002,
-+      0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000,
-+      0x8109, 0x0118, 0x2071, 0x0020, 0x0ca8, 0x0005, 0x2019, 0x0000,
-+      0x7004, 0x8004, 0x1a04, 0x545c, 0x7108, 0x7008, 0xa106, 0x1de0,
-+      0xa184, 0x01e0, 0x0120, 0x080c, 0x54be, 0x0804, 0x547c, 0x7007,
-+      0x0012, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110,
-+      0x080c, 0x54be, 0x7808, 0xd0ec, 0x0188, 0x2001, 0x04fd, 0x2004,
-+      0xa086, 0x0003, 0x1170, 0xa184, 0x4000, 0x0170, 0xa382, 0x0003,
-+      0x1258, 0xa184, 0x0004, 0x0d28, 0x8318, 0x0c18, 0x780c, 0xd0ec,
-+      0x1118, 0xa184, 0x4000, 0x19e8, 0xa19c, 0x300c, 0xa386, 0x2004,
-+      0x0190, 0xa386, 0x0008, 0x01c0, 0x7004, 0xd084, 0x1148, 0x7108,
-+      0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0110, 0x0804, 0x54be,
-+      0xa386, 0x200c, 0x1930, 0x7200, 0x8204, 0x0230, 0x730c, 0xa384,
-+      0x07ff, 0x0110, 0x080c, 0x297f, 0x7108, 0x7008, 0xa106, 0x1de0,
-+      0xa184, 0x01e0, 0x0118, 0x080c, 0x54be, 0x0470, 0x7007, 0x0012,
-+      0x7000, 0xd084, 0x1148, 0x7310, 0x7014, 0xa305, 0x0128, 0x710c,
-+      0xa184, 0x07ff, 0x1904, 0x53ee, 0x7108, 0x7008, 0xa106, 0x1de0,
-+      0xa184, 0x01e0, 0x0118, 0x080c, 0x54be, 0x00b0, 0x7007, 0x0012,
-+      0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8, 0x7108, 0x7008, 0xa106,
-+      0x1de0, 0xa184, 0x01e0, 0x0118, 0x080c, 0x54be, 0x0028, 0x7007,
-+      0x0012, 0x7108, 0xd1fc, 0x1d88, 0x7003, 0x0000, 0x0005, 0x0156,
-+      0x7108, 0x0011, 0x015e, 0x0005, 0x7204, 0x7500, 0xa184, 0x01e0,
-+      0x15a8, 0x7108, 0xa184, 0x01e0, 0x1588, 0xa184, 0x0007, 0x0002,
-+      0x549a, 0x54a8, 0x5498, 0x54a8, 0x5498, 0x5508, 0x5498, 0x5506,
-+      0x080c, 0x297f, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff,
-+      0x1118, 0x2049, 0x0000, 0x0018, 0x080c, 0x56ad, 0x1de8, 0x0005,
-+      0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x1140,
-+      0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, 0x0108, 0x0030,
-+      0x8aff, 0x0118, 0x080c, 0x56ad, 0x1de8, 0x0005, 0x7007, 0x0012,
-+      0x7108, 0x1d04, 0x54c1, 0x2091, 0x6000, 0x1d04, 0x54c5, 0x2091,
-+      0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8,
-+      0x7007, 0x0012, 0x7108, 0xd1fc, 0x1dd8, 0x7003, 0x0000, 0x7000,
-+      0xa005, 0x1130, 0x7004, 0xa005, 0x1118, 0x700c, 0xa005, 0x0108,
-+      0x0c40, 0x2049, 0x0000, 0xb284, 0x0200, 0x0118, 0x2001, 0x0000,
-+      0x0010, 0x2001, 0x0001, 0x080c, 0x3fcf, 0xb284, 0x0200, 0x0118,
-+      0x2001, 0xb3a4, 0x0010, 0x2001, 0xb3e4, 0x2004, 0xa084, 0x8000,
-+      0x0130, 0x6824, 0xa005, 0x1128, 0x6827, 0x0004, 0x0010, 0x681b,
-+      0x0002, 0x0005, 0x080c, 0x297f, 0x080c, 0x297f, 0x080c, 0x5548,
-+      0x7210, 0x7114, 0x700c, 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211,
-+      0xa189, 0x0000, 0x04a9, 0x2705, 0x2c58, 0xac60, 0x6308, 0x2200,
-+      0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238,
-+      0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60,
-+      0x8a07, 0x0006, 0x6004, 0xa084, 0x0008, 0x0118, 0xa7ba, 0x539e,
-+      0x0010, 0xa7ba, 0x5396, 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a,
-+      0x6c92, 0x6b8e, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0,
-+      0x0110, 0x080c, 0x54be, 0x7007, 0x0012, 0x080c, 0x53ee, 0x0005,
-+      0x8a50, 0x8739, 0x2705, 0xa004, 0x1168, 0x6000, 0xa064, 0x1108,
-+      0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x53b4, 0x203d, 0x87fb,
-+      0x090c, 0x297f, 0x0005, 0x0126, 0x00d6, 0x70f0, 0xa084, 0x4c00,
-+      0x8004, 0x2090, 0x00de, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90,
-+      0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x0006, 0x6804, 0xa084,
-+      0x0008, 0x000e, 0x0118, 0xa0b8, 0x539e, 0x0010, 0xa0b8, 0x5396,
-+      0xb284, 0x0200, 0x0110, 0x7e18, 0x0008, 0x7e1c, 0xa6b5, 0x000c,
-+      0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0118, 0xa18e, 0x000f,
-+      0x1130, 0x681c, 0xa084, 0x0040, 0x0130, 0xc685, 0x0020, 0x681c,
-+      0xd0b4, 0x0108, 0xc685, 0x700c, 0xa084, 0x07ff, 0x0128, 0x7007,
-+      0x0004, 0x7004, 0xd094, 0x1de8, 0x2400, 0xa305, 0x1108, 0x0420,
-+      0x2c58, 0x2705, 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004,
-+      0xa301, 0x701e, 0xa184, 0x0008, 0x0140, 0x6010, 0xa081, 0x0000,
-+      0x7022, 0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202,
-+      0x7012, 0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001,
-+      0x2b60, 0x080c, 0x56d8, 0x0010, 0x080c, 0x56ad, 0x1de8, 0x012e,
-+      0x2000, 0x0005, 0x0126, 0x00d6, 0x70f0, 0xa084, 0x4c00, 0x8004,
-+      0x2090, 0x00de, 0x7007, 0x0004, 0x7004, 0xd094, 0x1de8, 0x7003,
-+      0x0008, 0x012e, 0x2000, 0x0005, 0x0126, 0x00d6, 0x70f0, 0xa084,
-+      0x4c00, 0x8004, 0x2090, 0x00de, 0x700c, 0xa084, 0x07ff, 0x0128,
-+      0x7007, 0x0004, 0x7004, 0xd094, 0x1de8, 0x6814, 0xd0fc, 0x0110,
-+      0x7e1c, 0x0008, 0x7e18, 0xa6b5, 0x000c, 0x6904, 0xa18c, 0x00ff,
-+      0xa186, 0x0007, 0x0118, 0xa18e, 0x000f, 0x1140, 0x681c, 0xa084,
-+      0x0040, 0x0108, 0xc685, 0x6840, 0x2050, 0x0030, 0x681c, 0xd0ac,
-+      0x1108, 0xc685, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f,
-+      0xa7b8, 0x53a4, 0x273d, 0x87fb, 0x1138, 0x0210, 0x080c, 0x297f,
-+      0x689c, 0xa065, 0x0120, 0x0c88, 0x080c, 0x56ad, 0x1de8, 0x012e,
-+      0x2000, 0x0005, 0x0126, 0x0006, 0x0016, 0x00d6, 0x70f0, 0xa084,
-+      0x4c00, 0x8004, 0x2090, 0xb284, 0x0200, 0x0110, 0x7e18, 0x0008,
-+      0x7e1c, 0x00de, 0x003e, 0x004e, 0xa6b5, 0x000c, 0x6904, 0xa18c,
-+      0x00ff, 0xa186, 0x0007, 0x0118, 0xa18e, 0x000f, 0x1130, 0x681c,
-+      0xa084, 0x0040, 0x0130, 0xc685, 0x0020, 0x681c, 0xd0b4, 0x0108,
-+      0xc685, 0x2049, 0x5622, 0x0016, 0x6904, 0xa18c, 0x00ff, 0xa186,
-+      0x0007, 0x0118, 0xa18e, 0x000f, 0x1110, 0x6840, 0x0008, 0x6828,
-+      0x001e, 0xa055, 0x00d6, 0x0904, 0x56a9, 0x2d70, 0x2e60, 0x7004,
-+      0xa0bc, 0x000f, 0xa7b8, 0x53a4, 0x273d, 0x87fb, 0x1140, 0x0210,
-+      0x080c, 0x297f, 0x709c, 0xa075, 0x2060, 0x05d8, 0x0c80, 0x2705,
-+      0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0268, 0x8a51, 0x1110,
-+      0x080c, 0x297f, 0x8738, 0x2705, 0xa005, 0x1d90, 0x709c, 0xa075,
-+      0x2060, 0x0538, 0x08e0, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000,
-+      0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1210, 0x080c,
-+      0x297f, 0x0016, 0x3208, 0xa18c, 0x0200, 0x0168, 0x0006, 0x2001,
-+      0xb342, 0x2004, 0xd0ec, 0x000e, 0x0118, 0x2071, 0x0020, 0x0028,
-+      0x2071, 0x0050, 0x0010, 0x2071, 0x0020, 0x001e, 0x00de, 0x0804,
-+      0x5593, 0x00de, 0x012e, 0x2000, 0x0005, 0x7008, 0x0006, 0xa084,
-+      0x01e0, 0x000e, 0x0110, 0xa006, 0x0005, 0xa084, 0x0003, 0xa086,
-+      0x0003, 0x1108, 0x0005, 0x2705, 0xac08, 0x2104, 0x701a, 0x8108,
-+      0x2104, 0x701e, 0x8108, 0x2104, 0x7012, 0x8108, 0x2104, 0x7016,
-+      0x6004, 0xa084, 0x0008, 0x0130, 0x8108, 0x2104, 0x7022, 0x8108,
-+      0x2104, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006,
-+      0x8738, 0x2705, 0xa005, 0x1168, 0x609c, 0xa005, 0x01c8, 0x2060,
-+      0x6004, 0xa084, 0x000f, 0xa080, 0x53a4, 0x203d, 0x87fb, 0x090c,
-+      0x297f, 0x8a51, 0x0160, 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e,
-+      0x0110, 0xa006, 0x0028, 0xa084, 0x0003, 0xa086, 0x0003, 0x0005,
-+      0x2051, 0x0000, 0x0005, 0x0126, 0x0006, 0x00d6, 0x70f0, 0xa084,
-+      0x4c00, 0x8004, 0x2090, 0x00de, 0x008e, 0x7108, 0xa184, 0x0003,
-+      0x1190, 0x0016, 0x6904, 0xa18c, 0x00ff, 0xa186, 0x0007, 0x0118,
-+      0xa18e, 0x000f, 0x1110, 0x6840, 0x0008, 0x6828, 0x001e, 0xa005,
-+      0x0178, 0x0804, 0x52f7, 0x7108, 0xd1fc, 0x0118, 0x080c, 0x5484,
-+      0x0c20, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0de8, 0x080c, 0x5484,
-+      0x7008, 0xa086, 0x0008, 0x19c8, 0x7000, 0xa005, 0x19b0, 0x7003,
-+      0x0000, 0x2049, 0x0000, 0x012e, 0x2000, 0x0005, 0x0126, 0x0146,
-+      0x0136, 0x0156, 0x00c6, 0x00d6, 0x70f0, 0xa084, 0x4c00, 0x8004,
-+      0x2090, 0x00de, 0x2049, 0x5736, 0x69b0, 0xad80, 0x0011, 0xa100,
-+      0x20a0, 0xb284, 0x0200, 0x0158, 0x2001, 0xb342, 0x2004, 0xd0ec,
-+      0x0118, 0x2099, 0x0031, 0x0028, 0x2099, 0x0032, 0x0010, 0x2099,
-+      0x0031, 0x700c, 0xa084, 0x07ff, 0x01b0, 0x6928, 0xa100, 0x682a,
-+      0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0118, 0x8000,
-+      0x80ac, 0x53a5, 0x700c, 0xa084, 0x07ff, 0x0128, 0x7007, 0x0004,
-+      0x7004, 0xd094, 0x1de8, 0x00ce, 0x2049, 0x0000, 0x7003, 0x0000,
-+      0x015e, 0x013e, 0x014e, 0x012e, 0x2000, 0x0005, 0x2091, 0x6000,
-+      0x2091, 0x8000, 0x78ac, 0xa005, 0x1168, 0x796c, 0x70d0, 0xa106,
-+      0x1148, 0x7814, 0xa005, 0x0130, 0x7817, 0x0000, 0x0e04, 0x5792,
-+      0x2091, 0x4080, 0x7824, 0x8001, 0x7826, 0x1904, 0x5806, 0x7828,
-+      0x7826, 0x7808, 0xd0ec, 0x1904, 0x57ff, 0x2061, 0xda00, 0x2069,
-+      0xb3c0, 0xc7fd, 0x68ec, 0xa005, 0x0130, 0x8001, 0x68ee, 0xa005,
-+      0x1110, 0x080c, 0x5995, 0x6800, 0xa084, 0x000f, 0x0168, 0xa086,
-+      0x0001, 0x0150, 0x6840, 0xa00d, 0x0138, 0x2104, 0xa005, 0x0120,
-+      0x8001, 0x200a, 0x0904, 0x5907, 0x6810, 0xa005, 0x01d0, 0x8001,
-+      0x6812, 0x11b8, 0x68c3, 0x0001, 0xd7fc, 0x1148, 0x7808, 0xd0ec,
-+      0x0118, 0x2009, 0x0102, 0x0028, 0x2009, 0x0202, 0x0010, 0x2009,
-+      0x0102, 0x684c, 0xc08d, 0x200a, 0x6868, 0xa005, 0x0110, 0x080c,
-+      0x260c, 0x6884, 0xa005, 0x0140, 0x8001, 0x6886, 0x1128, 0x686b,
-+      0x0000, 0x68f0, 0xc0c5, 0x68f2, 0x68f0, 0xd0fc, 0x01b0, 0xc0fc,
-+      0x68f2, 0x20a9, 0x0200, 0x6034, 0xa005, 0x0158, 0x8001, 0x6036,
-+      0x68f0, 0xc0fd, 0x68f2, 0x1128, 0x6010, 0xa005, 0x0110, 0x080c,
-+      0x260c, 0xace0, 0x0010, 0x1f04, 0x57eb, 0xd7fc, 0x0138, 0x2061,
-+      0xba00, 0x2069, 0xb380, 0xc7fc, 0x0804, 0x57a2, 0x0409, 0x782c,
-+      0x8001, 0x782e, 0x11b8, 0x7830, 0x782e, 0x2061, 0xba00, 0x2069,
-+      0xb380, 0xc7fc, 0x6808, 0xa005, 0x0110, 0x080c, 0x5880, 0xd7fc,
-+      0x1148, 0x7808, 0xd0ec, 0x1130, 0x2061, 0xda00, 0x2069, 0xb3c0,
-+      0xc7fd, 0x0c80, 0x780c, 0xd0e4, 0x1100, 0x2091, 0x8001, 0x0005,
-+      0x7834, 0x8001, 0x7836, 0x1904, 0x587f, 0x7838, 0x7836, 0x2069,
-+      0xb380, 0xc7fc, 0x7808, 0x2079, 0x0200, 0xd0ec, 0x0110, 0x2079,
-+      0x0100, 0x68f8, 0xa005, 0x0138, 0x7de0, 0xa504, 0x1120, 0x68fa,
-+      0x68f0, 0xc0bc, 0x68f2, 0x2079, 0xb340, 0x680c, 0xa005, 0x1110,
-+      0x2001, 0x0101, 0x8001, 0x680e, 0xd7fc, 0x1118, 0xa080, 0xfa00,
-+      0x0010, 0xa080, 0xfb10, 0x2040, 0x2004, 0xa065, 0x01e0, 0x6024,
-+      0xa005, 0x01b0, 0x8001, 0x6026, 0x1198, 0x6800, 0xa005, 0x0130,
-+      0x6850, 0xac06, 0x1118, 0x080c, 0x5907, 0x0068, 0x6868, 0xa005,
-+      0x0118, 0x6027, 0x0001, 0x0020, 0x080c, 0x58c0, 0x2804, 0x0c28,
-+      0x6000, 0x2c40, 0x0c10, 0xd7fc, 0x1150, 0x7808, 0xd0ec, 0x1138,
-+      0x2069, 0xb3c0, 0xc7fd, 0x2079, 0x0100, 0x0804, 0x5839, 0x0005,
-+      0xa00e, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0558, 0x6024, 0xa005,
-+      0x0118, 0x8001, 0x6026, 0x0418, 0x6008, 0xc09c, 0xd084, 0x1110,
-+      0xd0ac, 0x01c0, 0x600a, 0x6004, 0xa005, 0x01d8, 0x00d6, 0x00c6,
-+      0x0016, 0x2068, 0x6010, 0x8001, 0x6012, 0x080c, 0x3be8, 0x2d00,
-+      0x2c68, 0x2060, 0x080c, 0x1d3b, 0x080c, 0x2076, 0x001e, 0x00ce,
-+      0x00de, 0x0038, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0010, 0xa18d,
-+      0x0100, 0xace0, 0x0010, 0x1f04, 0x5883, 0xa184, 0x0001, 0x0130,
-+      0xa18c, 0xfffe, 0x690a, 0x080c, 0x260c, 0x0008, 0x690a, 0x0005,
-+      0x2c00, 0x6882, 0x6714, 0x6f7a, 0x6017, 0x0000, 0x602b, 0x0000,
-+      0x601b, 0x0006, 0x60b4, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084,
-+      0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6860, 0xac06,
-+      0x1110, 0x2800, 0x6862, 0x080c, 0x1cc4, 0x6818, 0xa005, 0x0530,
-+      0x8001, 0x681a, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, 0x8001,
-+      0x03e8, 0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x080c,
-+      0x2085, 0xd7fc, 0x1118, 0x2069, 0xb380, 0x0010, 0x2069, 0xb3c0,
-+      0x690c, 0xa184, 0x0100, 0x2001, 0x0006, 0x1128, 0x6883, 0x0000,
-+      0x697e, 0x2001, 0x0004, 0x2708, 0x080c, 0x2601, 0x0005, 0x00d6,
-+      0x00e6, 0x2d70, 0xd7fc, 0x1148, 0x7808, 0xd0ec, 0x0118, 0x2069,
-+      0x0100, 0x0028, 0x2069, 0x0200, 0x0010, 0x2069, 0x0100, 0x7000,
-+      0xa084, 0x000f, 0x0904, 0x595c, 0xa086, 0x0007, 0x1140, 0x00f6,
-+      0x2d78, 0x7094, 0x2068, 0x080c, 0x4361, 0x00fe, 0x04a8, 0x7050,
-+      0x2060, 0x080c, 0x2899, 0x601b, 0x0006, 0x6858, 0xa084, 0x5f00,
-+      0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f,
-+      0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830,
-+      0xd0b4, 0x01b0, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094,
-+      0x0110, 0x1f04, 0x5946, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848,
-+      0xd084, 0x0110, 0x1f04, 0x594f, 0x20a9, 0x00fa, 0x1f04, 0x5956,
-+      0x681b, 0x0050, 0x706b, 0x0007, 0x00ee, 0x00de, 0x0005, 0x2079,
-+      0xb340, 0x0441, 0x0089, 0x00d9, 0x2009, 0x0002, 0x2069, 0xb3c0,
-+      0x680b, 0x0000, 0x680f, 0x0000, 0x6813, 0x0000, 0x8109, 0x0118,
-+      0x2069, 0xb380, 0x0ca8, 0x0005, 0x7808, 0xd0ec, 0x0118, 0x2019,
-+      0x00cc, 0x0010, 0x2019, 0x007b, 0x7b2e, 0x7b32, 0x0005, 0x780c,
-+      0xd0e4, 0x1118, 0x2019, 0x0040, 0x0010, 0x2019, 0x0026, 0x7b36,
-+      0x7b3a, 0x0005, 0x780c, 0xd0e4, 0x1118, 0x2019, 0x3f94, 0x0010,
-+      0x2019, 0x2624, 0x7b26, 0x7b2a, 0x0005, 0x6a54, 0xa285, 0x0000,
-+      0x01f0, 0x6958, 0x6bdc, 0xa300, 0x00c6, 0x2164, 0x6304, 0x83ff,
-+      0x1138, 0x8211, 0x0148, 0x8108, 0xa11a, 0x0eb8, 0x69dc, 0x0ca8,
-+      0x68ef, 0x000a, 0x00ce, 0x0005, 0x6954, 0x6adc, 0x2264, 0x6008,
-+      0xc0b5, 0x600a, 0x8210, 0x8109, 0x1dc8, 0x6956, 0x00ce, 0x0005,
-+      0x1d04, 0x59b8, 0x2091, 0x6000, 0x1d04, 0x59bc, 0x2091, 0x6000,
-+      0x70ec, 0xd0dc, 0x1118, 0xd0d4, 0x0508, 0x0410, 0x2008, 0x7808,
-+      0xd0ec, 0x0158, 0xd1c4, 0x15b8, 0x780c, 0xc0c5, 0x780e, 0x7808,
-+      0xc0f5, 0x780a, 0xd0ec, 0x0558, 0x0438, 0xae8e, 0x0100, 0x0138,
-+      0x780c, 0xc0f5, 0xc0c5, 0x780e, 0xd0d4, 0x1508, 0x00e8, 0x780c,
-+      0xc0fd, 0xc0c5, 0x780e, 0xd0d4, 0x11d0, 0x00b0, 0xd0e4, 0x01c8,
-+      0x1d04, 0x59e8, 0x2091, 0x6000, 0x2009, 0x000c, 0x1d04, 0x59ee,
-+      0x2091, 0x6000, 0x8109, 0x1dd0, 0x70e4, 0xa084, 0x01ff, 0xa086,
-+      0x01ff, 0x1110, 0x70ec, 0x0850, 0x7804, 0xd08c, 0x0110, 0x681b,
-+      0x000c, 0x70a0, 0x70a2, 0x0005, 0x0020, 0x002b, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020,
-+      0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0014,
-+      0x0014, 0x9851, 0x0014, 0x0014, 0x98f4, 0x98e1, 0x0014, 0x0014,
-+      0x0014, 0x0080, 0x01a3, 0x0000, 0x0201, 0x0604, 0x0c08, 0x2120,
-+      0x4022, 0xf880, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-+      0x0000, 0x0000, 0x0000, 0x300b, 0xa201, 0x0014, 0xa200, 0x0014,
-+      0xa200, 0x0214, 0xa202, 0x3806, 0x8839, 0x20c3, 0x0864, 0xa838,
-+      0x28c1, 0x9cc2, 0xa203, 0x300c, 0x2846, 0x8161, 0x846a, 0x8300,
-+      0x1856, 0x883a, 0xa804, 0x28f2, 0x9ca6, 0xa8f4, 0x300c, 0x28e1,
-+      0x9ca6, 0x28a2, 0x7162, 0xa820, 0x2822, 0xa207, 0x64a7, 0x2882,
-+      0x7163, 0xa81a, 0x2001, 0xa80f, 0xa206, 0x64c0, 0x6de0, 0x67a0,
-+      0x6fc0, 0x882b, 0x1814, 0x883b, 0x7824, 0x68c1, 0x7864, 0x883e,
-+      0xa802, 0x8576, 0x8677, 0x206c, 0x28c1, 0x9cc2, 0x2045, 0x2104,
-+      0x20a1, 0x2080, 0x7961, 0xa8db, 0xa209, 0x0904, 0xa20e, 0xa808,
-+      0xa205, 0xa300, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xc601, 0xa20a,
-+      0x8000, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x856e, 0x0704, 0x9ca6,
-+      0x0014, 0xa204, 0xa300, 0x3009, 0x19e2, 0xf864, 0x856e, 0x883f,
-+      0x08e6, 0xa8f7, 0xf881, 0xa8eb, 0xc007, 0xf8c1, 0x0016, 0x85b2,
-+      0x80f0, 0x9532, 0xfb02, 0x1de2, 0x0014, 0x8532, 0xf241, 0x0014,
-+      0x1de2, 0x84a8, 0xd7a0, 0x1fe6, 0x0014, 0xa208, 0x6043, 0x8008,
-+      0x1dc1, 0x0016, 0x8160, 0x842a, 0x8190, 0xf041, 0x3008, 0x84a8,
-+      0x11d7, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, 0x3008,
-+      0x2846, 0x1011, 0xa8fd, 0x2081, 0x2802, 0x1011, 0xa8fc, 0xa88f,
-+      0x20a1, 0x283d, 0x1011, 0xa8fc, 0xa20b, 0x0017, 0x300c, 0xa300,
-+      0x1de2, 0xd387, 0x0210, 0xa800, 0x26e0, 0x873a, 0xfb02, 0x19f2,
-+      0x1fe2, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9cc7, 0x0704, 0x0017,
-+      0x60ff, 0x300c, 0x807f, 0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2,
-+      0x8720, 0xa211, 0x9d72, 0x8772, 0x8837, 0x2101, 0xa821, 0x10d3,
-+      0x78e2, 0x9d76, 0xa8fc, 0xd984, 0xf0e2, 0xf0a1, 0xa820, 0x0014,
-+      0x8831, 0xd166, 0x8830, 0x800f, 0x9401, 0xb520, 0xc802, 0x8820,
-+      0xa80f, 0x2301, 0xa80d, 0x10d3, 0x78e4, 0x9d76, 0x8821, 0x8820,
-+      0xa8e6, 0xf123, 0xf142, 0xf101, 0xa865, 0x10d3, 0x70f6, 0x8832,
-+      0x8203, 0x870c, 0xd99e, 0x6001, 0x0014, 0x6848, 0x0214, 0x8827,
-+      0x300a, 0x0013, 0xa21b, 0x9d72, 0x2001, 0xa853, 0x8201, 0x1852,
-+      0xd183, 0x8834, 0x8001, 0xa801, 0x3027, 0x84a8, 0x1a56, 0x8833,
-+      0x0014, 0xa218, 0x6981, 0x9d7d, 0x6926, 0x6908, 0x8080, 0x9521,
-+      0xc003, 0x1ab4, 0xa809, 0xa80a, 0x1a34, 0xa806, 0x8080, 0x9521,
-+      0xc002, 0x1a94, 0xa801, 0x1a14, 0x7021, 0x0014, 0xa300, 0x69e4,
-+      0x8023, 0x16e1, 0x8001, 0x10f1, 0x6946, 0xa213, 0x1462, 0xa213,
-+      0x8000, 0x16e1, 0xa808, 0x6161, 0x0014, 0xa214, 0x61c2, 0x8002,
-+      0x14e1, 0x8004, 0x16e1, 0x0101, 0x300a, 0x8827, 0x0012, 0x8080,
-+      0x940c, 0xc81d, 0x8001, 0x8492, 0x0013, 0x8000, 0x84a4, 0x8190,
-+      0x0016, 0x11c3, 0x211e, 0x870e, 0xa21d, 0x0014, 0x9d7d, 0x0014,
-+      0xa300, 0x8181, 0x842a, 0x84a8, 0x1ce6, 0x882c, 0x0016, 0xa212,
-+      0x9d72, 0x10d3, 0x70e4, 0x0004, 0x800f, 0x9426, 0xcc1a, 0x9d76,
-+      0xa8f8, 0x878e, 0x0016, 0xa21c, 0x1035, 0x7965, 0x8001, 0x9405,
-+      0xc001, 0xa817, 0xa82f, 0xa8a5, 0xa210, 0x3807, 0x300c, 0x807f,
-+      0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x817e, 0x872b, 0x8772,
-+      0x7965, 0x8001, 0x9405, 0xc001, 0xa804, 0xa81c, 0xa892, 0x0014,
-+      0xa8a6, 0xa21f, 0x8080, 0xa521, 0x85a1, 0x8090, 0xa422, 0x84a2,
-+      0x6981, 0x9d7d, 0x6923, 0x6903, 0x18b4, 0xa802, 0xa809, 0x1894,
-+      0x807f, 0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x7021, 0x0014,
-+      0xa300, 0x0014, 0xa220, 0x8080, 0xa521, 0x85a1, 0x8090, 0xa422,
-+      0x84a2, 0x6981, 0x9d7d, 0x6923, 0x6903, 0x18b4, 0xa802, 0xa80c,
-+      0x1894, 0x807f, 0x9521, 0x85a1, 0x806f, 0x9422, 0x84a2, 0x80fd,
-+      0x9405, 0x8485, 0x7021, 0x0014, 0xa300, 0xa8ca, 0x0000, 0x0710
-+};
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_2100.h     2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,8147 @@
-+/* @(#)asm_2100.h 1.5 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */ 
-+
-+/*
-+ * Some very early boards have problems loading firmware that is larger than
-+ * 0x8000 words. In order to be able to provide at least *some* support
-+ * for such ancient cards, an alternate firmware set is provided. This firmware
-+ * isn't all that great, but, hey, it's better than nothing.
-+ *
-+ * Define USE_SMALLER_2100_FIRMWARE to select this.
-+ */
-+#ifndef       USE_SMALLER_2100_FIRMWARE
-+/************************************************************************
-+ *                                                                    *
-+ *     --- ISP2100 Fabric Initiator/Target Firmware ---               *
-+ *                   with expanded LUN addressing                       *
-+ *                   and FcTape (FCP-2) support                         *
-+ *                                                                    *
-+ ************************************************************************/
-+/*
-+ *    Firmware Version 1.19.24 (14:02 Jul 16, 2002)
-+ */
-+static const u_int16_t isp_2100_risc_code[] = {
-+      0x0078, 0x102d, 0x0000, 0x95f1, 0x0000, 0x0001, 0x0013, 0x0018,
-+      0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-+      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-+      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3231, 0x3030, 0x2046, 0x6972,
-+      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-+      0x312e, 0x3139, 0x2020, 0x2020, 0x2400, 0x2091, 0x2000, 0x20c1,
-+      0x0021, 0x2039, 0xffff, 0x2019, 0xaaaa, 0x2760, 0x2069, 0x7fff,
-+      0x20c1, 0x0020, 0x2c2c, 0x2d34, 0x2762, 0x236a, 0x2c24, 0x2d04,
-+      0x266a, 0x2562, 0xa406, 0x00c0, 0x1052, 0x20c1, 0x0021, 0x2c2c,
-+      0x2362, 0x2c04, 0x2562, 0xa306, 0x0040, 0x1052, 0x20c1, 0x0020,
-+      0x2039, 0x8fff, 0x20a1, 0xad00, 0x2708, 0x810d, 0x810d, 0x810d,
-+      0x810d, 0xa18c, 0x000f, 0x2001, 0x000a, 0xa112, 0xa00e, 0x21a8,
-+      0x41a4, 0x3400, 0x8211, 0x00c0, 0x105f, 0x2708, 0x3400, 0xa102,
-+      0x0040, 0x106f, 0x0048, 0x106f, 0x20a8, 0xa00e, 0x41a4, 0x20a1,
-+      0xa5f1, 0x2009, 0x0000, 0x20a9, 0x070f, 0x41a4, 0x3400, 0x20c9,
-+      0xaaff, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x25c7,
-+      0x2051, 0xa600, 0x2a70, 0x7762, 0xa786, 0x8fff, 0x0040, 0x1092,
-+      0x705f, 0xcd00, 0x705b, 0xccf1, 0x7067, 0x0200, 0x706b, 0x0200,
-+      0x0078, 0x109a, 0x705b, 0xbd01, 0x7067, 0x0100, 0x706b, 0x0100,
-+      0x705f, 0xbd00, 0x1078, 0x12df, 0x1078, 0x13ca, 0x1078, 0x1577,
-+      0x1078, 0x1ce9, 0x1078, 0x42ec, 0x1078, 0x76bf, 0x1078, 0x1355,
-+      0x1078, 0x2ac0, 0x1078, 0x4e93, 0x1078, 0x49a3, 0x1078, 0x594a,
-+      0x1078, 0x2263, 0x1078, 0x5c43, 0x1078, 0x5485, 0x1078, 0x2162,
-+      0x1078, 0x2240, 0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x10cf,
-+      0x7820, 0xa086, 0x0002, 0x00c0, 0x10cf, 0x7823, 0x4000, 0x0068,
-+      0x10c7, 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70,
-+      0x7003, 0x0000, 0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000,
-+      0xa08e, 0x0003, 0x00c0, 0x10ef, 0x1078, 0x365e, 0x1078, 0x2ae8,
-+      0x1078, 0x4ee3, 0x1078, 0x4b66, 0x2009, 0x0100, 0x2104, 0xa082,
-+      0x0002, 0x0048, 0x10f3, 0x1078, 0x5966, 0x0078, 0x10d6, 0x1079,
-+      0x10f7, 0x0078, 0x10dc, 0x1078, 0x7197, 0x0078, 0x10eb, 0x1101,
-+      0x1102, 0x11be, 0x10ff, 0x1246, 0x12dc, 0x12dd, 0x12de, 0x1078,
-+      0x1332, 0x007c, 0x127e, 0x0f7e, 0x2091, 0x8000, 0x7000, 0xa086,
-+      0x0001, 0x00c0, 0x1198, 0x1078, 0x3aec, 0x2079, 0x0100, 0x7844,
-+      0xa005, 0x00c0, 0x1198, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x1078,
-+      0x1adf, 0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011,
-+      0x8010, 0x73c4, 0x1078, 0x361b, 0x2001, 0xffff, 0x1078, 0x5ae6,
-+      0x723c, 0xc284, 0x723e, 0x2001, 0xa60c, 0x2014, 0xc2ac, 0x2202,
-+      0x1078, 0x6f9f, 0x2011, 0x0004, 0x1078, 0x8d1b, 0x1078, 0x489e,
-+      0x1078, 0x42d4, 0x0040, 0x1144, 0x7087, 0x0001, 0x70bf, 0x0000,
-+      0x1078, 0x3c9e, 0x0078, 0x1198, 0x1078, 0x4967, 0x0040, 0x114d,
-+      0x7a0c, 0xc2b4, 0x7a0e, 0x0078, 0x1159, 0x1078, 0x90a6, 0x70cc,
-+      0xd09c, 0x00c0, 0x1159, 0x7098, 0xa005, 0x0040, 0x1159, 0x1078,
-+      0x42b8, 0x70d7, 0x0000, 0x70d3, 0x0000, 0x72cc, 0x2079, 0xa652,
-+      0x7804, 0xd0ac, 0x0040, 0x1165, 0xc295, 0x72ce, 0xa296, 0x0004,
-+      0x0040, 0x1186, 0x2011, 0x0001, 0x1078, 0x8d1b, 0x7093, 0x0000,
-+      0x7097, 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, 0x2677, 0x2011,
-+      0x0005, 0x1078, 0x70e0, 0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100,
-+      0x60e3, 0x0008, 0x0c7f, 0x127f, 0x0078, 0x119a, 0x7093, 0x0000,
-+      0x7097, 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, 0x1078, 0x70e0,
-+      0x1078, 0x62d1, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f,
-+      0x0f7f, 0x127f, 0x007c, 0x0c7e, 0x20a9, 0x0082, 0x2009, 0x007e,
-+      0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019, 0x0029, 0x1078,
-+      0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f, 0x017f, 0x1078,
-+      0x298e, 0x8108, 0x00f0, 0x11a0, 0x0c7f, 0x706f, 0x0000, 0x7070,
-+      0xa084, 0x00ff, 0x7072, 0x709b, 0x0000, 0x007c, 0x127e, 0x2091,
-+      0x8000, 0x7000, 0xa086, 0x0002, 0x00c0, 0x1244, 0x7094, 0xa086,
-+      0xffff, 0x0040, 0x11d1, 0x1078, 0x2677, 0x1078, 0x62d1, 0x0078,
-+      0x1244, 0x70cc, 0xd09c, 0x0040, 0x11fd, 0xd084, 0x0040, 0x11fd,
-+      0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
-+      0x0040, 0x11fd, 0x70d0, 0xa086, 0xffff, 0x0040, 0x11f9, 0x1078,
-+      0x27f7, 0x1078, 0x62d1, 0x70cc, 0xd094, 0x00c0, 0x1244, 0x2011,
-+      0x0001, 0x2019, 0x0000, 0x1078, 0x282f, 0x1078, 0x62d1, 0x0078,
-+      0x1244, 0x70d4, 0xa005, 0x00c0, 0x1244, 0x7090, 0xa005, 0x00c0,
-+      0x1244, 0x1078, 0x4967, 0x00c0, 0x1244, 0x2001, 0xa653, 0x2004,
-+      0xd0ac, 0x0040, 0x1227, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
-+      0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0, 0x121a, 0x6000, 0xd0ec,
-+      0x00c0, 0x1222, 0x017f, 0x8108, 0x00f0, 0x1211, 0x0c7f, 0x157f,
-+      0x0078, 0x1227, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x1244, 0x7003,
-+      0x0003, 0x7097, 0xffff, 0x2001, 0x0000, 0x1078, 0x24e8, 0x1078,
-+      0x3699, 0x2001, 0xa8b2, 0x2004, 0xa086, 0x0005, 0x00c0, 0x123c,
-+      0x2011, 0x0000, 0x1078, 0x70e0, 0x2011, 0x0000, 0x1078, 0x70ea,
-+      0x1078, 0x62d1, 0x1078, 0x639b, 0x127f, 0x007c, 0x017e, 0x0f7e,
-+      0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x2009, 0x00f7, 0x1078,
-+      0x42a1, 0x7940, 0xa18c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0040,
-+      0x125b, 0x7827, 0x0040, 0xd19c, 0x0040, 0x1260, 0x7827, 0x0008,
-+      0x007e, 0x037e, 0x157e, 0xa006, 0x1078, 0x5ae6, 0x7900, 0xa18a,
-+      0x0003, 0x0050, 0x1289, 0x7954, 0xd1ac, 0x00c0, 0x1289, 0x2009,
-+      0x00f8, 0x1078, 0x42a1, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9,
-+      0x09c4, 0x7820, 0xd09c, 0x00c0, 0x1281, 0x7824, 0xd0ac, 0x00c0,
-+      0x12ca, 0x00f0, 0x1279, 0x2001, 0x0001, 0x1078, 0x24e8, 0x0078,
-+      0x12d5, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0050, 0x00e0,
-+      0x128f, 0x2091, 0x6000, 0x00f0, 0x128f, 0x7853, 0x0400, 0x782f,
-+      0x0000, 0x2009, 0x00f8, 0x1078, 0x42a1, 0x20a9, 0x000e, 0x0005,
-+      0x00f0, 0x129f, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010,
-+      0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x12b4,
-+      0x7824, 0xd0ac, 0x00c0, 0x12ca, 0x8319, 0x00c0, 0x12aa, 0x2009,
-+      0xa632, 0x2104, 0x8000, 0x200a, 0xa084, 0xfff0, 0x0040, 0x12c4,
-+      0x200b, 0x0000, 0x1078, 0x2588, 0x2001, 0x0001, 0x1078, 0x24e8,
-+      0x0078, 0x12d3, 0x2001, 0xa632, 0x2003, 0x0000, 0x7828, 0xc09d,
-+      0x782a, 0x7827, 0x0048, 0x7853, 0x0400, 0x157f, 0x037f, 0x007f,
-+      0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, 0x2a70,
-+      0x2061, 0xa8ad, 0x2063, 0x0001, 0x6007, 0x0013, 0x600b, 0x0018,
-+      0x600f, 0x0017, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
-+      0x12f5, 0x7053, 0xffff, 0x0078, 0x12f7, 0x7053, 0x0000, 0x7057,
-+      0xffff, 0x706f, 0x0000, 0x7073, 0x0000, 0x1078, 0x90a6, 0x2061,
-+      0xa88d, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f,
-+      0x0200, 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f,
-+      0x07d0, 0x2061, 0xa895, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b,
-+      0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b,
-+      0x0001, 0x601f, 0x0000, 0x2061, 0xa8a5, 0x6003, 0x514c, 0x6007,
-+      0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001, 0xa626, 0x2003,
-+      0x0000, 0x007c, 0x2091, 0x8000, 0x0068, 0x1334, 0x007e, 0x017e,
-+      0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x133a, 0x017f, 0x792e,
-+      0x007f, 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002,
-+      0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0xa600,
-+      0x7803, 0x0005, 0x0078, 0x1352, 0x007c, 0x2071, 0xa600, 0x715c,
-+      0x712e, 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048,
-+      0x136b, 0x7060, 0xa302, 0x00c8, 0x136b, 0x220a, 0x2208, 0x2310,
-+      0x8420, 0x0078, 0x135d, 0x200b, 0x0000, 0x74aa, 0x74ae, 0x007c,
-+      0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa600, 0x70ac, 0xa0ea,
-+      0x0010, 0x00c8, 0x137e, 0xa06e, 0x0078, 0x1388, 0x8001, 0x70ae,
-+      0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000,
-+      0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x127e, 0x2091,
-+      0x8000, 0x70ac, 0x8001, 0x00c8, 0x1398, 0xa06e, 0x0078, 0x13a1,
-+      0x70ae, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807,
-+      0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
-+      0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
-+      0x70ae, 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x13c0, 0x6804,
-+      0x6807, 0x0000, 0x007e, 0x1078, 0x13a4, 0x0d7f, 0x0078, 0x13b4,
-+      0x007c, 0x0e7e, 0x2071, 0xa600, 0x70ac, 0xa08a, 0x0010, 0xa00d,
-+      0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7007, 0x0000, 0x701b,
-+      0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004,
-+      0x7012, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x0e7e, 0x2270,
-+      0x700b, 0x0000, 0x2071, 0xa8d6, 0x7018, 0xa088, 0xa8df, 0x220a,
-+      0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0, 0x13f6,
-+      0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x127f,
-+      0x007c, 0x0e7e, 0x2071, 0xa8d6, 0x7004, 0xa005, 0x00c0, 0x1406,
-+      0x0f7e, 0x2079, 0x0010, 0x1078, 0x1408, 0x0f7f, 0x0e7f, 0x007c,
-+      0x7000, 0x0079, 0x140b, 0x140f, 0x1479, 0x1496, 0x1496, 0x7018,
-+      0x711c, 0xa106, 0x00c0, 0x1417, 0x7007, 0x0000, 0x007c, 0x0d7e,
-+      0xa180, 0xa8df, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
-+      0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
-+      0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
-+      0x0d7f, 0xd084, 0x0040, 0x1439, 0x7007, 0x0001, 0x1078, 0x143e,
-+      0x007c, 0x7007, 0x0002, 0x1078, 0x1454, 0x007c, 0x017e, 0x027e,
-+      0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1449, 0x2110,
-+      0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
-+      0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e,
-+      0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c,
-+      0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1468, 0x2110, 0xa006,
-+      0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x3300,
-+      0x7016, 0x7803, 0x0001, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
-+      0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0xa6fa, 0x20a1, 0x0018,
-+      0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+      0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
-+      0xa6f5, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
-+      0x157e, 0x2001, 0xa729, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
-+      0x2001, 0xa72a, 0x20ac, 0x53a6, 0x2099, 0xa72b, 0x20a1, 0x0018,
-+      0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+      0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
-+      0xa726, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
-+      0x2071, 0xa8d6, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
-+      0xd1fc, 0x0040, 0x14d0, 0xa18c, 0x0700, 0x7004, 0x1079, 0x14d4,
-+      0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x1408, 0x14dc, 0x1509, 0x1531,
-+      0x1564, 0x14da, 0x0078, 0x14da, 0xa18c, 0x0700, 0x00c0, 0x1502,
-+      0x137e, 0x147e, 0x157e, 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803,
-+      0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x157f, 0x147f,
-+      0x137f, 0x700c, 0xa005, 0x0040, 0x151e, 0x1078, 0x143e, 0x007c,
-+      0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078,
-+      0x1408, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0078,
-+      0x14fd, 0xa18c, 0x0700, 0x00c0, 0x1514, 0x700c, 0xa005, 0x0040,
-+      0x151e, 0x1078, 0x1454, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003,
-+      0x0200, 0x7007, 0x0000, 0x1078, 0x1408, 0x007c, 0x0d7e, 0x7008,
-+      0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
-+      0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x1408,
-+      0x007c, 0xa18c, 0x0700, 0x00c0, 0x155e, 0x137e, 0x147e, 0x157e,
-+      0x2001, 0xa6f8, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014,
-+      0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0xa6fa, 0x2004,
-+      0xd0bc, 0x0040, 0x1554, 0x2001, 0xa703, 0x2004, 0xa080, 0x000d,
-+      0x20a0, 0x20a9, 0x0020, 0x53a5, 0x157f, 0x147f, 0x137f, 0x7007,
-+      0x0000, 0x1078, 0x4f8c, 0x1078, 0x1408, 0x007c, 0x2011, 0x8003,
-+      0x1078, 0x361b, 0x0078, 0x1562, 0xa18c, 0x0700, 0x00c0, 0x1571,
-+      0x2001, 0xa728, 0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x1408,
-+      0x007c, 0x2011, 0x8004, 0x1078, 0x361b, 0x0078, 0x1575, 0x127e,
-+      0x2091, 0x2100, 0x2079, 0x0030, 0x2071, 0xa8e7, 0x7803, 0x0004,
-+      0x7003, 0x0000, 0x700f, 0xa8ed, 0x7013, 0xa8ed, 0x780f, 0x0076,
-+      0x7803, 0x0004, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
-+      0x1591, 0x1599, 0x15df, 0x1599, 0x1599, 0x1599, 0x15c4, 0x15a8,
-+      0x159d, 0xa085, 0x0001, 0x0078, 0x15f9, 0x684c, 0xd0bc, 0x0040,
-+      0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x15e7,
-+      0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1599, 0x684c, 0xd0bc,
-+      0x0040, 0x1599, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a,
-+      0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
-+      0x6832, 0x6858, 0x0078, 0x15ef, 0xa18c, 0x00ff, 0xa186, 0x0015,
-+      0x00c0, 0x1599, 0x684c, 0xd0ac, 0x0040, 0x1599, 0x6804, 0x681a,
-+      0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004,
-+      0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x15ef, 0x684c,
-+      0xd0ac, 0x0040, 0x1599, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c,
-+      0x000f, 0xa188, 0x206a, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826,
-+      0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980,
-+      0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a,
-+      0x2004, 0x82ff, 0x0040, 0x161c, 0xa280, 0x0004, 0x0d7e, 0x206c,
-+      0x684c, 0xd0dc, 0x00c0, 0x1618, 0x1078, 0x158c, 0x0040, 0x1618,
-+      0x0d7f, 0xa280, 0x0000, 0x2003, 0x0002, 0xa016, 0x0078, 0x161c,
-+      0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e,
-+      0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
-+      0x1630, 0x7206, 0x2001, 0x1651, 0x007e, 0x2260, 0x0078, 0x17e0,
-+      0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
-+      0xa908, 0x0048, 0x163d, 0x2009, 0xa8ed, 0x710e, 0x7010, 0xa102,
-+      0xa082, 0x0009, 0x0040, 0x1648, 0xa080, 0x001b, 0x00c0, 0x164b,
-+      0x2009, 0x0138, 0x200a, 0x7000, 0xa005, 0x00c0, 0x1651, 0x1078,
-+      0x17c1, 0x127f, 0x007c, 0x127e, 0x027e, 0x037e, 0x0c7e, 0x007e,
-+      0x2091, 0x2100, 0x007f, 0x047f, 0x037f, 0x027f, 0x0d7e, 0x0c7e,
-+      0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0040, 0x16dd,
-+      0x6808, 0xa005, 0x0040, 0x174a, 0x7000, 0xa005, 0x00c0, 0x1672,
-+      0x0078, 0x16d2, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1753, 0x7004,
-+      0xa406, 0x00c0, 0x16d2, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
-+      0x168f, 0x047e, 0x1078, 0x1913, 0x047f, 0x2460, 0x6010, 0xa080,
-+      0x0002, 0x2004, 0xa005, 0x0040, 0x174a, 0x0078, 0x166c, 0x2001,
-+      0x0207, 0x2004, 0xd09c, 0x00c0, 0x167b, 0x7804, 0xa084, 0x6000,
-+      0x0040, 0x16a0, 0xa086, 0x6000, 0x0040, 0x16a0, 0x0078, 0x167b,
-+      0x7100, 0xa186, 0x0002, 0x00c0, 0x16c0, 0x0e7e, 0x2b68, 0x6818,
-+      0x2060, 0x1078, 0x203f, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0,
-+      0x16b5, 0x7108, 0x720c, 0x0078, 0x16b7, 0x7110, 0x7214, 0x6810,
-+      0xa100, 0x6812, 0x6814, 0xa201, 0x6816, 0x0e7f, 0x0078, 0x16c4,
-+      0xa186, 0x0001, 0x00c0, 0x16cc, 0x7820, 0x6910, 0xa100, 0x6812,
-+      0x7824, 0x6914, 0xa101, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000,
-+      0x7004, 0x2060, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
-+      0x0048, 0x1078, 0x775c, 0x0078, 0x1753, 0x6808, 0xa005, 0x0040,
-+      0x174a, 0x7000, 0xa005, 0x00c0, 0x16e7, 0x0078, 0x174a, 0x700c,
-+      0x7110, 0xa106, 0x00c0, 0x16f0, 0x7004, 0xa406, 0x00c0, 0x174a,
-+      0x2001, 0x0005, 0x2004, 0xd08c, 0x0040, 0x1704, 0x047e, 0x1078,
-+      0x1913, 0x047f, 0x2460, 0x6010, 0xa080, 0x0002, 0x2004, 0xa005,
-+      0x0040, 0x174a, 0x0078, 0x16e1, 0x2001, 0x0207, 0x2004, 0xd09c,
-+      0x00c0, 0x16f0, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x16f6,
-+      0x7804, 0xa084, 0x6000, 0x0040, 0x171b, 0xa086, 0x6000, 0x0040,
-+      0x171b, 0x0078, 0x16f0, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000,
-+      0xa08e, 0x0001, 0x0040, 0x173c, 0xa08e, 0x0002, 0x00c0, 0x174a,
-+      0x0c7e, 0x0e7e, 0x6818, 0x2060, 0x1078, 0x203f, 0x2804, 0xac70,
-+      0x6034, 0xd09c, 0x00c0, 0x1738, 0x7308, 0x720c, 0x0078, 0x173a,
-+      0x7310, 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211,
-+      0x6810, 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004,
-+      0x7003, 0x0000, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x1753, 0x2009,
-+      0x0048, 0x1078, 0x775c, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e,
-+      0x0e7e, 0x027e, 0x037e, 0x047e, 0x057e, 0x2071, 0xa8e7, 0x7000,
-+      0xa086, 0x0000, 0x0040, 0x17ba, 0x7004, 0xac06, 0x00c0, 0x17ab,
-+      0x2079, 0x0030, 0x7000, 0xa086, 0x0003, 0x0040, 0x17ab, 0x7804,
-+      0xd0fc, 0x00c0, 0x17a7, 0x20e1, 0x6000, 0x2011, 0x0032, 0x2001,
-+      0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x00c0, 0x176f,
-+      0x8211, 0x00c0, 0x1777, 0x7804, 0xd0fc, 0x00c0, 0x17a7, 0x1078,
-+      0x1b22, 0x027e, 0x057e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
-+      0x178d, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007,
-+      0x0000, 0x057f, 0x027f, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001,
-+      0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0078, 0x17ab, 0x1078,
-+      0x1913, 0x0078, 0x175f, 0x157e, 0x20a9, 0x0009, 0x2009, 0xa8ed,
-+      0x2104, 0xac06, 0x00c0, 0x17b5, 0x200a, 0xa188, 0x0003, 0x00f0,
-+      0x17b0, 0x157f, 0x057f, 0x047f, 0x037f, 0x027f, 0x0e7f, 0x0f7f,
-+      0x007c, 0x700c, 0x7110, 0xa106, 0x00c0, 0x17c9, 0x7003, 0x0000,
-+      0x007c, 0x2104, 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124,
-+      0x8108, 0xa182, 0xa908, 0x0048, 0x17d7, 0x2009, 0xa8ed, 0x7112,
-+      0x700c, 0xa106, 0x00c0, 0x17e0, 0x2001, 0x0138, 0x2003, 0x0008,
-+      0x8cff, 0x00c0, 0x17e7, 0x1078, 0x1b4d, 0x0078, 0x1854, 0x6010,
-+      0x2068, 0x2d58, 0x6828, 0xa406, 0x00c0, 0x17f2, 0x682c, 0xa306,
-+      0x0040, 0x182f, 0x601c, 0xa086, 0x0008, 0x0040, 0x182f, 0x6024,
-+      0xd0f4, 0x00c0, 0x181c, 0xd0d4, 0x0040, 0x1818, 0x6038, 0xa402,
-+      0x6034, 0xa303, 0x0040, 0x1806, 0x00c8, 0x1818, 0x643a, 0x6336,
-+      0x6c2a, 0x6b2e, 0x047e, 0x037e, 0x2400, 0x6c7c, 0xa402, 0x6812,
-+      0x2300, 0x6b80, 0xa303, 0x6816, 0x037f, 0x047f, 0x0078, 0x181c,
-+      0x1078, 0x9053, 0x0040, 0x17e3, 0x2001, 0xa674, 0x2004, 0xd0b4,
-+      0x00c0, 0x182b, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x182b, 0x6817,
-+      0x7fff, 0x6813, 0xffff, 0x1078, 0x208a, 0x00c0, 0x17e3, 0x0c7e,
-+      0x7004, 0x2060, 0x6024, 0xc0d4, 0x6026, 0x0c7f, 0x684c, 0xd0f4,
-+      0x0040, 0x1840, 0x6817, 0xffff, 0x6813, 0xffff, 0x0078, 0x17e3,
-+      0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
-+      0x000f, 0x2009, 0x0011, 0x1078, 0x1855, 0x0040, 0x1853, 0x2009,
-+      0x0001, 0x1078, 0x1855, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x18ec,
-+      0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1877, 0xd0f4, 0x00c0,
-+      0x1887, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079, 0x1867, 0x18ce,
-+      0x188e, 0x188e, 0x18ce, 0x18ce, 0x18c6, 0x18ce, 0x188e, 0x18ce,
-+      0x1894, 0x1894, 0x18ce, 0x18ce, 0x18ce, 0x18bd, 0x1894, 0xc0fc,
-+      0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0x0d7e, 0xd99c, 0x0040,
-+      0x18d1, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0xc0f4,
-+      0x6852, 0x6b6c, 0x6a70, 0x0d7e, 0x0078, 0x18d8, 0x6b08, 0x6a0c,
-+      0x6d00, 0x6c04, 0x0078, 0x18d1, 0x7b0c, 0xd3bc, 0x0040, 0x18b5,
-+      0x7004, 0x0e7e, 0x2070, 0x701c, 0x0e7f, 0xa086, 0x0008, 0x00c0,
-+      0x18b5, 0x7b08, 0xa39c, 0x0fff, 0x2d20, 0x0d7f, 0x0d7e, 0x6a14,
-+      0x82ff, 0x00c0, 0x18b0, 0x6810, 0xa302, 0x0048, 0x18b0, 0x6b10,
-+      0x2011, 0x0000, 0x2468, 0x0078, 0x18b7, 0x6b10, 0x6a14, 0x6d00,
-+      0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x18d1, 0x0d7f, 0x0d7e, 0x6834,
-+      0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x18ce, 0x0d7f, 0x1078,
-+      0x2026, 0x00c0, 0x1855, 0xa00e, 0x0078, 0x18ec, 0x0d7f, 0x1078,
-+      0x1332, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902,
-+      0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, 0xa300, 0x682a, 0x682c,
-+      0xa201, 0x682e, 0x2300, 0x6b10, 0xa302, 0x6812, 0x2200, 0x6a14,
-+      0xa203, 0x6816, 0x1078, 0x2026, 0x007c, 0x1078, 0x1332, 0x1078,
-+      0x1c97, 0x7004, 0x2060, 0x0d7e, 0x6010, 0x2068, 0x7003, 0x0000,
-+      0x1078, 0x1af4, 0x1078, 0x8d06, 0x0040, 0x190c, 0x6808, 0x8001,
-+      0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b, 0xffff, 0x682f,
-+      0xffff, 0x6850, 0xc0bd, 0x6852, 0x0d7f, 0x1078, 0x8a01, 0x0078,
-+      0x1adb, 0x1078, 0x1332, 0x127e, 0x2091, 0x2100, 0x007e, 0x017e,
-+      0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
-+      0x00c0, 0x18ef, 0xa184, 0x0003, 0xa086, 0x0003, 0x0040, 0x1911,
-+      0x7000, 0x0079, 0x192b, 0x1933, 0x1935, 0x1a34, 0x1ab2, 0x1ac9,
-+      0x1933, 0x1933, 0x1933, 0x1078, 0x1332, 0x8001, 0x7002, 0xa184,
-+      0x0880, 0x00c0, 0x194a, 0x8aff, 0x0040, 0x19d4, 0x2009, 0x0001,
-+      0x1078, 0x1855, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078, 0x1855,
-+      0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x00c0,
-+      0x19b2, 0x027e, 0x037e, 0x017e, 0x7808, 0xd0ec, 0x00c0, 0x1962,
-+      0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7803, 0x0009, 0x7003, 0x0004,
-+      0x0078, 0x1964, 0x1078, 0x1bd7, 0x017f, 0xd194, 0x0040, 0x196b,
-+      0x8aff, 0x0040, 0x19a1, 0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a,
-+      0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x0c7e, 0x7004, 0x2060,
-+      0x6024, 0xd0f4, 0x00c0, 0x197e, 0x633a, 0x6236, 0x0c7f, 0x2400,
-+      0x6910, 0xa100, 0x6812, 0x2500, 0x6914, 0xa101, 0x6816, 0x037f,
-+      0x027f, 0x2600, 0x681e, 0x2700, 0x6822, 0x1078, 0x203f, 0x2a00,
-+      0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6850, 0xc0fd, 0x6852,
-+      0x6808, 0x8001, 0x680a, 0x00c0, 0x19a7, 0x684c, 0xd0e4, 0x0040,
-+      0x19a7, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x7000,
-+      0xa086, 0x0004, 0x0040, 0x1adb, 0x7003, 0x0000, 0x1078, 0x17c1,
-+      0x0078, 0x1adb, 0x057e, 0x7d0c, 0xd5bc, 0x00c0, 0x19b9, 0x1078,
-+      0xa57e, 0x057f, 0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078,
-+      0x4963, 0x0040, 0x19c6, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b,
-+      0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912,
-+      0x6980, 0x6916, 0x0078, 0x1adb, 0x7004, 0x0c7e, 0x2060, 0x6024,
-+      0x0c7f, 0xd0f4, 0x0040, 0x19e1, 0x6808, 0x8001, 0x680a, 0x0078,
-+      0x19f5, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x19f9,
-+      0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x00c0, 0x19f5, 0x7004,
-+      0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
-+      0x1adb, 0x7814, 0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000,
-+      0x6816, 0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x00c8,
-+      0x18ef, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104,
-+      0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, 0x1b5e,
-+      0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc,
-+      0x0040, 0x1a1e, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x0076,
-+      0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, 0x775c,
-+      0x1078, 0x1b92, 0x0040, 0x19f5, 0x8001, 0x7002, 0xd194, 0x0040,
-+      0x1a46, 0x7804, 0xd0fc, 0x00c0, 0x191b, 0x8aff, 0x0040, 0x1adb,
-+      0x2009, 0x0001, 0x1078, 0x1855, 0x0078, 0x1adb, 0xa184, 0x0880,
-+      0x00c0, 0x1a53, 0x8aff, 0x0040, 0x1adb, 0x2009, 0x0001, 0x1078,
-+      0x1855, 0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc,
-+      0x00c0, 0x1a93, 0x027e, 0x037e, 0x7808, 0xd0ec, 0x00c0, 0x1a66,
-+      0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1a68, 0x1078, 0x1bd7,
-+      0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x0f7e, 0x2d78, 0x2804,
-+      0xac68, 0x6034, 0xd09c, 0x00c0, 0x1a83, 0x6808, 0x2008, 0xa31a,
-+      0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101,
-+      0x7816, 0x0078, 0x1a8f, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213,
-+      0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f,
-+      0x0d7f, 0x0078, 0x196d, 0x057e, 0x7d0c, 0x1078, 0xa57e, 0x057f,
-+      0x1078, 0x1af4, 0x0f7e, 0x7004, 0x2078, 0x1078, 0x4963, 0x0040,
-+      0x1aa4, 0x7824, 0xc0f5, 0x7826, 0x0f7f, 0x682b, 0xffff, 0x682f,
-+      0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916,
-+      0x0078, 0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d,
-+      0x0040, 0x1ac5, 0x6808, 0x8001, 0x680a, 0x00c0, 0x1ac5, 0x7004,
-+      0x2060, 0x2009, 0x0048, 0x1078, 0x775c, 0x1078, 0x17c1, 0x0078,
-+      0x1adb, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010,
-+      0xa005, 0x0040, 0x1ac5, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28,
-+      0x6b2c, 0x1078, 0x17e0, 0x017f, 0x007f, 0x127f, 0x007c, 0x127e,
-+      0x2091, 0x2100, 0x7000, 0xa086, 0x0003, 0x00c0, 0x1af2, 0x700c,
-+      0x7110, 0xa106, 0x0040, 0x1af2, 0x20e1, 0x9028, 0x700f, 0xa8ed,
-+      0x7013, 0xa8ed, 0x127f, 0x007c, 0x0c7e, 0x1078, 0x1b22, 0x20e1,
-+      0x9028, 0x700c, 0x7110, 0xa106, 0x0040, 0x1b19, 0x2104, 0xa005,
-+      0x0040, 0x1b08, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a,
-+      0xa188, 0x0003, 0xa182, 0xa908, 0x0048, 0x1b10, 0x2009, 0xa8ed,
-+      0x7112, 0x700c, 0xa106, 0x00c0, 0x1af9, 0x2011, 0x0008, 0x0078,
-+      0x1af9, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0138, 0x2202,
-+      0x0c7f, 0x007c, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2021,
-+      0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x00c0, 0x1b3f, 0x2001,
-+      0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, 0x1b3f, 0x2001, 0x0111,
-+      0x201c, 0x83ff, 0x00c0, 0x1b3f, 0x8421, 0x00c0, 0x1b29, 0x007c,
-+      0x2011, 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x00c0, 0x1b4c,
-+      0x8109, 0x00c0, 0x1b44, 0x007c, 0x007c, 0x1078, 0x1b40, 0x0040,
-+      0x1b55, 0x780c, 0xd0a4, 0x0040, 0x1b5b, 0x1078, 0x1af4, 0xa085,
-+      0x0001, 0x0078, 0x1b5d, 0x1078, 0x1b92, 0x007c, 0x0e7e, 0x2071,
-+      0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x1b22, 0x2019,
-+      0x5000, 0x8319, 0x0040, 0x1b7c, 0x2001, 0xa908, 0x2004, 0xa086,
-+      0x0000, 0x0040, 0x1b7c, 0x2001, 0x0021, 0xd0fc, 0x0040, 0x1b69,
-+      0x1078, 0x1eaa, 0x0078, 0x1b67, 0x20e1, 0x7000, 0x7324, 0x7420,
-+      0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, 0x712e, 0x702f,
-+      0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, 0x0138, 0x2202,
-+      0x0e7f, 0x007c, 0x027e, 0x2001, 0x015d, 0x2001, 0x0000, 0x7908,
-+      0xa18c, 0x0fff, 0xa182, 0x0ffd, 0x0048, 0x1ba0, 0x2009, 0x0000,
-+      0xa190, 0x0007, 0xa294, 0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001,
-+      0x020a, 0x82ff, 0x0040, 0x1bb5, 0x20e1, 0x6000, 0x200c, 0x200c,
-+      0x200c, 0x200c, 0x8211, 0x00c0, 0x1bae, 0x20e1, 0x7000, 0x200c,
-+      0x200c, 0x7003, 0x0000, 0x20e1, 0x6000, 0x2001, 0x0208, 0x200c,
-+      0x2001, 0x0209, 0x2004, 0xa106, 0x0040, 0x1bd4, 0x1078, 0x1b40,
-+      0x0040, 0x1bd2, 0x7908, 0xd1ec, 0x00c0, 0x1bd4, 0x790c, 0xd1a4,
-+      0x0040, 0x1b97, 0x1078, 0x1af4, 0xa006, 0x027f, 0x007c, 0x7c20,
-+      0x7d24, 0x7e30, 0x7f34, 0x700c, 0x7110, 0xa106, 0x0040, 0x1c69,
-+      0x7004, 0x017e, 0x210c, 0xa106, 0x017f, 0x0040, 0x1c69, 0x0d7e,
-+      0x0c7e, 0x216c, 0x2d00, 0xa005, 0x0040, 0x1c67, 0x681c, 0xa086,
-+      0x0008, 0x0040, 0x1c67, 0x6824, 0xd0d4, 0x00c0, 0x1c67, 0x6810,
-+      0x2068, 0x6850, 0xd0fc, 0x0040, 0x1c29, 0x8108, 0x2104, 0x6b2c,
-+      0xa306, 0x00c0, 0x1c67, 0x8108, 0x2104, 0x6a28, 0xa206, 0x00c0,
-+      0x1c67, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x6870,
-+      0x7826, 0x681c, 0x7832, 0x6820, 0x7836, 0x6818, 0x2060, 0x6034,
-+      0xd09c, 0x0040, 0x1c24, 0x6830, 0x2004, 0xac68, 0x6808, 0x783a,
-+      0x680c, 0x783e, 0x0078, 0x1c65, 0xa006, 0x783a, 0x783e, 0x0078,
-+      0x1c65, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6b2c, 0xa306,
-+      0x00c0, 0x1c67, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1c67, 0x6a28,
-+      0xa206, 0x00c0, 0x1c67, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2004,
-+      0x6918, 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x00c0, 0x1c57,
-+      0x6008, 0x7822, 0x686e, 0x600c, 0x7826, 0x6872, 0x6000, 0x7832,
-+      0x6004, 0x7836, 0xa006, 0x783a, 0x783e, 0x0078, 0x1c65, 0x6010,
-+      0x7822, 0x686e, 0x6014, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004,
-+      0x7836, 0x6008, 0x783a, 0x600c, 0x783e, 0x7803, 0x0011, 0x0c7f,
-+      0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0x027e, 0x2071, 0xa8e7,
-+      0x2079, 0x0030, 0x2011, 0x0050, 0x7000, 0xa086, 0x0000, 0x0040,
-+      0x1c92, 0x8211, 0x0040, 0x1c90, 0x2001, 0x0005, 0x2004, 0xd08c,
-+      0x0040, 0x1c79, 0x7904, 0xa18c, 0x0780, 0x017e, 0x1078, 0x1913,
-+      0x017f, 0x81ff, 0x00c0, 0x1c90, 0x2011, 0x0050, 0x0078, 0x1c74,
-+      0xa085, 0x0001, 0x027f, 0x017f, 0x0e7f, 0x0f7f, 0x007c, 0x7803,
-+      0x0004, 0x2009, 0x0064, 0x7804, 0xd0ac, 0x0040, 0x1ce8, 0x8109,
-+      0x00c0, 0x1c9b, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0003, 0x1048,
-+      0x1332, 0x1078, 0x1fca, 0x0e7e, 0x0f7e, 0x2071, 0xa8d6, 0x2079,
-+      0x0010, 0x7004, 0xa086, 0x0000, 0x0040, 0x1ce0, 0x7800, 0x007e,
-+      0x7820, 0x007e, 0x7830, 0x007e, 0x7834, 0x007e, 0x7838, 0x007e,
-+      0x783c, 0x007e, 0x7803, 0x0004, 0x7823, 0x0000, 0x0005, 0x0005,
-+      0x2079, 0x0030, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x2079, 0x0010,
-+      0x007f, 0x783e, 0x007f, 0x783a, 0x007f, 0x7836, 0x007f, 0x7832,
-+      0x007f, 0x7822, 0x007f, 0x7802, 0x0f7f, 0x0e7f, 0x0078, 0x1ce6,
-+      0x0f7f, 0x0e7f, 0x7804, 0xd0ac, 0x10c0, 0x1332, 0x1078, 0x639b,
-+      0x007c, 0x0e7e, 0x2071, 0xa908, 0x7003, 0x0000, 0x0e7f, 0x007c,
-+      0x0d7e, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1d6b,
-+      0x6934, 0xa184, 0x0007, 0x0079, 0x1cfd, 0x1d05, 0x1d56, 0x1d05,
-+      0x1d05, 0x1d05, 0x1d3b, 0x1d18, 0x1d07, 0x1078, 0x1332, 0x684c,
-+      0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
-+      0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1d5e,
-+      0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1d05, 0x684c,
-+      0xd0b4, 0x0040, 0x1e79, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
-+      0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080,
-+      0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
-+      0x6958, 0x0078, 0x1d67, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0,
-+      0x1d6b, 0x684c, 0xd0b4, 0x0040, 0x1e79, 0x6804, 0x681a, 0xa080,
-+      0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832,
-+      0x6958, 0xa006, 0x682e, 0x682a, 0x0078, 0x1d67, 0x684c, 0xd0b4,
-+      0x0040, 0x18ed, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a,
-+      0x6834, 0xa084, 0x000f, 0xa080, 0x206a, 0x2004, 0x6832, 0x6926,
-+      0x684c, 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020,
-+      0x7804, 0xd0fc, 0x10c0, 0x1eaa, 0x0e7e, 0x0d7e, 0x2071, 0xa908,
-+      0x7000, 0xa005, 0x00c0, 0x1df0, 0x0c7e, 0x7206, 0xa280, 0x0004,
-+      0x205c, 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068,
-+      0x686c, 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200,
-+      0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68,
-+      0x6824, 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc,
-+      0x000f, 0x6908, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0007, 0x0040,
-+      0x1db2, 0xa184, 0x0007, 0x0040, 0x1db2, 0x017e, 0x2009, 0x0008,
-+      0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081,
-+      0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c,
-+      0x6814, 0xa106, 0x00c0, 0x1dc9, 0x6928, 0x6810, 0xa106, 0x0040,
-+      0x1dd6, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x208a, 0x047f,
-+      0x037f, 0x0040, 0x1dd6, 0x0c7f, 0x0078, 0x1df0, 0x8aff, 0x00c0,
-+      0x1dde, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1df0, 0x127e, 0x2091,
-+      0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0040,
-+      0x1ded, 0x2009, 0x0001, 0x1078, 0x1df4, 0x127f, 0x0c7f, 0xa006,
-+      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e,
-+      0x037e, 0x027e, 0x8aff, 0x0040, 0x1e72, 0x700c, 0x7214, 0xa23a,
-+      0x7010, 0x7218, 0xa203, 0x0048, 0x1e71, 0xa705, 0x0040, 0x1e71,
-+      0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1e24, 0x0d7e, 0x2804,
-+      0xac68, 0x2900, 0x0079, 0x1e14, 0x1e53, 0x1e34, 0x1e34, 0x1e53,
-+      0x1e53, 0x1e4b, 0x1e53, 0x1e34, 0x1e53, 0x1e3a, 0x1e3a, 0x1e53,
-+      0x1e53, 0x1e53, 0x1e42, 0x1e3a, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
-+      0x6d1c, 0x6c20, 0xd99c, 0x0040, 0x1e57, 0x0d7e, 0x2804, 0xac68,
-+      0x6f08, 0x6e0c, 0x0078, 0x1e56, 0x6b08, 0x6a0c, 0x6d00, 0x6c04,
-+      0x0078, 0x1e56, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
-+      0x0078, 0x1e56, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086,
-+      0x001e, 0x00c0, 0x1e53, 0x0d7f, 0x1078, 0x2026, 0x00c0, 0x1dfa,
-+      0xa00e, 0x0078, 0x1e72, 0x0d7f, 0x1078, 0x1332, 0x0d7f, 0x7b22,
-+      0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000,
-+      0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c,
-+      0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x2026, 0x0078,
-+      0x1e72, 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f,
-+      0x007c, 0x1078, 0x1332, 0x027e, 0x2001, 0x0105, 0x2003, 0x0010,
-+      0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060,
-+      0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1e92, 0x6850,
-+      0xc0bd, 0x6852, 0x0d7f, 0x0c7e, 0x1078, 0x8a01, 0x0c7f, 0x2001,
-+      0xa8c0, 0x2004, 0xac06, 0x00c0, 0x1ea7, 0x20e1, 0x9040, 0x1078,
-+      0x738a, 0x2011, 0x0000, 0x1078, 0x70ea, 0x1078, 0x639b, 0x027f,
-+      0x0078, 0x1f76, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
-+      0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0xa908, 0x2b68,
-+      0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
-+      0x1e7b, 0x7000, 0x0079, 0x1ec4, 0x1f76, 0x1ec8, 0x1f43, 0x1f74,
-+      0x8001, 0x7002, 0xd19c, 0x00c0, 0x1edc, 0x8aff, 0x0040, 0x1efb,
-+      0x2009, 0x0001, 0x1078, 0x1df4, 0x0040, 0x1f76, 0x2009, 0x0001,
-+      0x1078, 0x1df4, 0x0078, 0x1f76, 0x7803, 0x0004, 0xd194, 0x0040,
-+      0x1eec, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1ef1, 0x684c,
-+      0xc0f5, 0x684e, 0x0078, 0x1ef1, 0x1078, 0x203f, 0x6850, 0xc0fd,
-+      0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003,
-+      0x0000, 0x0078, 0x1f76, 0x711c, 0x81ff, 0x0040, 0x1f11, 0x7918,
-+      0x7922, 0x7827, 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002,
-+      0x700c, 0xa100, 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078,
-+      0x1f76, 0x0f7e, 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079,
-+      0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x037e,
-+      0x2019, 0x1000, 0x8319, 0x1040, 0x1332, 0x7820, 0xd0bc, 0x00c0,
-+      0x1f22, 0x037f, 0x79c8, 0x007f, 0xa102, 0x017f, 0x007e, 0x017e,
-+      0x79c4, 0x007f, 0xa103, 0x78c6, 0x007f, 0x78ca, 0xa284, 0x0004,
-+      0xa085, 0x0012, 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003,
-+      0x0000, 0x0078, 0x1f76, 0x8001, 0x7002, 0xd194, 0x0040, 0x1f58,
-+      0x7804, 0xd0fc, 0x00c0, 0x1eba, 0xd19c, 0x00c0, 0x1f72, 0x8aff,
-+      0x0040, 0x1f76, 0x2009, 0x0001, 0x1078, 0x1df4, 0x0078, 0x1f76,
-+      0x027e, 0x037e, 0x6b28, 0x6a2c, 0x1078, 0x203f, 0x0d7e, 0x2804,
-+      0xac68, 0x6034, 0xd09c, 0x00c0, 0x1f6b, 0x6808, 0xa31a, 0x680c,
-+      0xa213, 0x0078, 0x1f6f, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f,
-+      0x0078, 0x1eec, 0x0078, 0x1eec, 0x1078, 0x1332, 0x0c7f, 0x0d7f,
-+      0x0e7f, 0x0f7f, 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
-+      0x2071, 0xa908, 0x7000, 0xa086, 0x0000, 0x0040, 0x1fc7, 0x2079,
-+      0x0020, 0x017e, 0x2009, 0x0207, 0x210c, 0xd194, 0x0040, 0x1fa4,
-+      0x2009, 0x020c, 0x210c, 0xa184, 0x0003, 0x0040, 0x1fa4, 0x1078,
-+      0xa5d2, 0x2001, 0x0133, 0x2004, 0xa005, 0x1040, 0x1332, 0x20e1,
-+      0x9040, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009,
-+      0x0203, 0x210c, 0xa106, 0x00c0, 0x1faf, 0x20e1, 0x9040, 0x7804,
-+      0xd0fc, 0x0040, 0x1f8a, 0x1078, 0x1eaa, 0x7000, 0xa086, 0x0000,
-+      0x00c0, 0x1f8a, 0x017f, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
-+      0x1fbd, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f,
-+      0x0f7f, 0x007c, 0x027e, 0x0c7e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
-+      0xa908, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0040, 0x2003,
-+      0x7004, 0x2060, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x1fed,
-+      0x6850, 0xc0b5, 0x6852, 0x680c, 0x7a1c, 0xa206, 0x00c0, 0x1fed,
-+      0x6808, 0x7a18, 0xa206, 0x0040, 0x2009, 0x2001, 0x0105, 0x2003,
-+      0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004,
-+      0x2060, 0x1078, 0x8a01, 0x20e1, 0x9040, 0x1078, 0x738a, 0x2011,
-+      0x0000, 0x1078, 0x70ea, 0x0f7f, 0x0e7f, 0x0d7f, 0x0c7f, 0x027f,
-+      0x007c, 0x6810, 0x6a14, 0xa205, 0x00c0, 0x1fed, 0x684c, 0xc0dc,
-+      0x684e, 0x2c10, 0x1078, 0x1cf0, 0x2001, 0x0105, 0x2003, 0x0010,
-+      0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x2069, 0xa8b1,
-+      0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x2003, 0x8840, 0x2804,
-+      0xa005, 0x00c0, 0x203a, 0x6004, 0xa005, 0x0040, 0x203c, 0x681a,
-+      0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x206a, 0x2044, 0x88ff,
-+      0x1040, 0x1332, 0x8a51, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50,
-+      0x8841, 0x2804, 0xa005, 0x00c0, 0x2059, 0x2c00, 0xad06, 0x0040,
-+      0x204e, 0x6000, 0xa005, 0x00c0, 0x204e, 0x2d00, 0x2060, 0x681a,
-+      0x6034, 0xa084, 0x000f, 0xa080, 0x207a, 0x2044, 0x88ff, 0x1040,
-+      0x1332, 0x007c, 0x0000, 0x0011, 0x0015, 0x0019, 0x001d, 0x0021,
-+      0x0025, 0x0029, 0x0000, 0x000f, 0x0015, 0x001b, 0x0021, 0x0027,
-+      0x0000, 0x0000, 0x0000, 0x205f, 0x205b, 0x0000, 0x0000, 0x2069,
-+      0x0000, 0x205f, 0x0000, 0x2066, 0x2063, 0x0000, 0x0000, 0x0000,
-+      0x2069, 0x2066, 0x0000, 0x2061, 0x2061, 0x0000, 0x0000, 0x2069,
-+      0x0000, 0x2061, 0x0000, 0x2067, 0x2067, 0x0000, 0x0000, 0x0000,
-+      0x2069, 0x2067, 0x0a7e, 0x097e, 0x087e, 0x6b2e, 0x6c2a, 0x6858,
-+      0xa055, 0x0040, 0x212d, 0x2d60, 0x6034, 0xa0cc, 0x000f, 0xa9c0,
-+      0x206a, 0xa986, 0x0007, 0x0040, 0x20a5, 0xa986, 0x000e, 0x0040,
-+      0x20a5, 0xa986, 0x000f, 0x00c0, 0x20a9, 0x605c, 0xa422, 0x6060,
-+      0xa31a, 0x2804, 0xa045, 0x00c0, 0x20b7, 0x0050, 0x20b1, 0x0078,
-+      0x212d, 0x6004, 0xa065, 0x0040, 0x212d, 0x0078, 0x2094, 0x2804,
-+      0xa005, 0x0040, 0x20d5, 0xac68, 0xd99c, 0x00c0, 0x20c5, 0x6808,
-+      0xa422, 0x680c, 0xa31b, 0x0078, 0x20c9, 0x6810, 0xa422, 0x6814,
-+      0xa31b, 0x0048, 0x20f4, 0x2300, 0xa405, 0x0040, 0x20db, 0x8a51,
-+      0x0040, 0x212d, 0x8840, 0x0078, 0x20b7, 0x6004, 0xa065, 0x0040,
-+      0x212d, 0x0078, 0x2094, 0x8a51, 0x0040, 0x212d, 0x8840, 0x2804,
-+      0xa005, 0x00c0, 0x20ee, 0x6004, 0xa065, 0x0040, 0x212d, 0x6034,
-+      0xa0cc, 0x000f, 0xa9c0, 0x206a, 0x2804, 0x2040, 0x2b68, 0x6850,
-+      0xc0fc, 0x6852, 0x0078, 0x2121, 0x8422, 0x8420, 0x831a, 0xa399,
-+      0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f, 0xd99c, 0x00c0,
-+      0x210f, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1048,
-+      0x1332, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078, 0x211b, 0x6910,
-+      0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048, 0x1332, 0x6800,
-+      0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, 0xc0fd,
-+      0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, 0x007f,
-+      0x007f, 0x007f, 0xa006, 0x0078, 0x2132, 0x087f, 0x097f, 0x0a7f,
-+      0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007,
-+      0x0079, 0x213a, 0x2142, 0x2143, 0x2146, 0x2149, 0x214e, 0x2151,
-+      0x2156, 0x215b, 0x007c, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x1913,
-+      0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x007c, 0x1078, 0x14be,
-+      0x007c, 0x1078, 0x1eaa, 0x1078, 0x14be, 0x007c, 0x1078, 0x1913,
-+      0x1078, 0x14be, 0x007c, 0x1078, 0x1913, 0x1078, 0x1eaa, 0x1078,
-+      0x14be, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079, 0x0200, 0x2071,
-+      0xab80, 0x2069, 0xa600, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004,
-+      0x1078, 0x251f, 0x781b, 0x0002, 0x20e1, 0x8700, 0x127f, 0x007c,
-+      0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007, 0x0079, 0x2180,
-+      0x21a4, 0x2188, 0x218c, 0x2190, 0x2196, 0x219a, 0x219e, 0x21a2,
-+      0x1078, 0x548e, 0x0078, 0x21a4, 0x1078, 0x54da, 0x0078, 0x21a4,
-+      0x1078, 0x548e, 0x1078, 0x54da, 0x0078, 0x21a4, 0x1078, 0x21a6,
-+      0x0078, 0x21a4, 0x1078, 0x21a6, 0x0078, 0x21a4, 0x1078, 0x21a6,
-+      0x0078, 0x21a4, 0x1078, 0x21a6, 0x127f, 0x007c, 0x007e, 0x017e,
-+      0x027e, 0x1078, 0xa5d2, 0x7930, 0xa184, 0x0003, 0x0040, 0x21c9,
-+      0x2001, 0xa8c0, 0x2004, 0xa005, 0x0040, 0x21c5, 0x2001, 0x0133,
-+      0x2004, 0xa005, 0x1040, 0x1332, 0x0c7e, 0x2001, 0xa8c0, 0x2064,
-+      0x1078, 0x8a01, 0x0c7f, 0x0078, 0x21f2, 0x20e1, 0x9040, 0x0078,
-+      0x21f2, 0xa184, 0x0030, 0x0040, 0x21da, 0x6a00, 0xa286, 0x0003,
-+      0x00c0, 0x21d4, 0x0078, 0x21d6, 0x1078, 0x4224, 0x20e1, 0x9010,
-+      0x0078, 0x21f2, 0xa184, 0x00c0, 0x0040, 0x21ec, 0x0e7e, 0x037e,
-+      0x047e, 0x057e, 0x2071, 0xa8e7, 0x1078, 0x1af4, 0x057f, 0x047f,
-+      0x037f, 0x0e7f, 0x0078, 0x21f2, 0xa184, 0x0300, 0x0040, 0x21f2,
-+      0x20e1, 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e,
-+      0x0e7e, 0x0f7e, 0x2071, 0xa600, 0x7128, 0x2001, 0xa890, 0x2102,
-+      0x2001, 0xa898, 0x2102, 0xa182, 0x0211, 0x00c8, 0x220b, 0x2009,
-+      0x0008, 0x0078, 0x2235, 0xa182, 0x0259, 0x00c8, 0x2213, 0x2009,
-+      0x0007, 0x0078, 0x2235, 0xa182, 0x02c1, 0x00c8, 0x221b, 0x2009,
-+      0x0006, 0x0078, 0x2235, 0xa182, 0x0349, 0x00c8, 0x2223, 0x2009,
-+      0x0005, 0x0078, 0x2235, 0xa182, 0x0421, 0x00c8, 0x222b, 0x2009,
-+      0x0004, 0x0078, 0x2235, 0xa182, 0x0581, 0x00c8, 0x2233, 0x2009,
-+      0x0003, 0x0078, 0x2235, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912,
-+      0x7817, 0x0004, 0x1078, 0x251f, 0x0f7f, 0x0e7f, 0x017f, 0x007c,
-+      0x127e, 0x2091, 0x2200, 0x2061, 0x0100, 0x2071, 0xa600, 0x6024,
-+      0x6026, 0x6053, 0x0030, 0x6033, 0x00ef, 0x60e7, 0x0000, 0x60eb,
-+      0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
-+      0x0080, 0x602f, 0x0000, 0x6007, 0x0eaf, 0x600f, 0x00ff, 0x602b,
-+      0x002f, 0x127f, 0x007c, 0x2001, 0xa630, 0x2003, 0x0000, 0x2001,
-+      0xa62f, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x007e,
-+      0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x227b, 0xa184,
-+      0x0007, 0x0079, 0x2281, 0xa195, 0x0004, 0xa284, 0x0007, 0x0079,
-+      0x2281, 0x22ad, 0x2289, 0x228d, 0x2291, 0x2297, 0x229b, 0x22a1,
-+      0x22a7, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078, 0x5d45, 0x0078,
-+      0x22ad, 0x1078, 0x5d45, 0x1078, 0x5c56, 0x0078, 0x22ad, 0x1078,
-+      0x22b2, 0x0078, 0x22ad, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x0078,
-+      0x22ad, 0x1078, 0x5d45, 0x1078, 0x22b2, 0x0078, 0x22ad, 0x1078,
-+      0x5d45, 0x1078, 0x5c56, 0x1078, 0x22b2, 0x027f, 0x017f, 0x007f,
-+      0x127f, 0x007c, 0x6124, 0xd1ac, 0x0040, 0x23ac, 0x017e, 0x047e,
-+      0x0c7e, 0x644c, 0xa486, 0xf0f0, 0x00c0, 0x22c5, 0x2061, 0x0100,
-+      0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74c6, 0xa48c, 0xff00,
-+      0x7034, 0xd084, 0x0040, 0x22dd, 0xa186, 0xf800, 0x00c0, 0x22dd,
-+      0x703c, 0xd084, 0x00c0, 0x22dd, 0xc085, 0x703e, 0x037e, 0x2418,
-+      0x2011, 0x8016, 0x1078, 0x361b, 0x037f, 0xa196, 0xff00, 0x0040,
-+      0x231f, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x231f,
-+      0x7130, 0xd184, 0x00c0, 0x231f, 0x2011, 0xa653, 0x2214, 0xd2ec,
-+      0x0040, 0x22fa, 0xc18d, 0x7132, 0x2011, 0xa653, 0x2214, 0xd2ac,
-+      0x00c0, 0x231f, 0x6240, 0xa294, 0x0010, 0x0040, 0x2306, 0x6248,
-+      0xa294, 0xff00, 0xa296, 0xff00, 0x0040, 0x231f, 0x7030, 0xd08c,
-+      0x0040, 0x2371, 0x7034, 0xd08c, 0x00c0, 0x2316, 0x2001, 0xa60c,
-+      0x200c, 0xd1ac, 0x00c0, 0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4,
-+      0x2011, 0x8013, 0x1078, 0x361b, 0x037f, 0x0078, 0x2371, 0x7034,
-+      0xd08c, 0x00c0, 0x232b, 0x2001, 0xa60c, 0x200c, 0xd1ac, 0x00c0,
-+      0x2371, 0xc1ad, 0x2102, 0x037e, 0x73c4, 0x2011, 0x8013, 0x1078,
-+      0x361b, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0xa653, 0x220c,
-+      0xd1a4, 0x0040, 0x2355, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
-+      0x1078, 0x5bf1, 0x2019, 0x000e, 0x1078, 0xa195, 0xa484, 0x00ff,
-+      0xa080, 0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
-+      0x2009, 0x000e, 0x1078, 0xa21d, 0x017f, 0xd1ac, 0x00c0, 0x2362,
-+      0x017e, 0x2009, 0x0000, 0x2019, 0x0004, 0x1078, 0x284f, 0x017f,
-+      0x0078, 0x2371, 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078,
-+      0x45c4, 0x00c0, 0x236d, 0x1078, 0x42f8, 0x8108, 0x00f0, 0x2367,
-+      0x157f, 0x0c7f, 0x047f, 0x0f7e, 0x2079, 0xa8c4, 0x783c, 0xa086,
-+      0x0000, 0x0040, 0x2383, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079,
-+      0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x70e0,
-+      0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019,
-+      0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001,
-+      0xa600, 0x2014, 0xa296, 0x0004, 0x00c0, 0x23a4, 0xd19c, 0x00c0,
-+      0x23ac, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0xa622,
-+      0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x2490, 0x0f7e,
-+      0x2079, 0xa8c4, 0x783c, 0xa086, 0x0001, 0x00c0, 0x23d0, 0x017e,
-+      0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000,
-+      0x7803, 0x0000, 0x2079, 0xa8b1, 0x7807, 0x0000, 0x7833, 0x0000,
-+      0x1078, 0x62d1, 0x1078, 0x639b, 0x017f, 0x0f7f, 0x0078, 0x2490,
-+      0x0f7f, 0x017e, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x23db, 0x017e,
-+      0x1078, 0x747a, 0x017f, 0x6220, 0xd2b4, 0x0040, 0x2446, 0x1078,
-+      0x5acb, 0x1078, 0x6e0f, 0x6027, 0x0004, 0x0f7e, 0x2019, 0xa8ba,
-+      0x2304, 0xa07d, 0x0040, 0x241c, 0x7804, 0xa086, 0x0032, 0x00c0,
-+      0x241c, 0x0d7e, 0x0c7e, 0x0e7e, 0x2069, 0x0140, 0x618c, 0x6288,
-+      0x7818, 0x608e, 0x7808, 0x608a, 0x6043, 0x0002, 0x2001, 0x0003,
-+      0x8001, 0x00c0, 0x2400, 0x6043, 0x0000, 0x6803, 0x1000, 0x6803,
-+      0x0000, 0x618e, 0x628a, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x7810,
-+      0x2070, 0x7037, 0x0103, 0x2f60, 0x1078, 0x772d, 0x0e7f, 0x0c7f,
-+      0x0d7f, 0x0f7f, 0x017f, 0x007c, 0x0f7f, 0x0d7e, 0x2069, 0x0140,
-+      0x6804, 0xa084, 0x4000, 0x0040, 0x2429, 0x6803, 0x1000, 0x6803,
-+      0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6028, 0xa09a, 0x00c8,
-+      0x00c8, 0x2439, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x6e01, 0x0078,
-+      0x248f, 0x2019, 0xa8ba, 0x2304, 0xa065, 0x0040, 0x2443, 0x2009,
-+      0x0027, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x248f, 0xd2bc, 0x0040,
-+      0x248f, 0x1078, 0x5ad8, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e,
-+      0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x245b, 0x6803,
-+      0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0xa8b1, 0x6044,
-+      0xa09a, 0x00c8, 0x00c8, 0x247e, 0x8000, 0x6046, 0x603c, 0x0c7f,
-+      0xa005, 0x0040, 0x248f, 0x2009, 0x07d0, 0x1078, 0x5ad0, 0xa080,
-+      0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x247a, 0x6017, 0x0012,
-+      0x0078, 0x248f, 0x6017, 0x0016, 0x0078, 0x248f, 0x037e, 0x2019,
-+      0x0001, 0x1078, 0x7058, 0x037f, 0x2019, 0xa8c0, 0x2304, 0xa065,
-+      0x0040, 0x248e, 0x2009, 0x004f, 0x1078, 0x775c, 0x0c7f, 0x017f,
-+      0xd19c, 0x0040, 0x24e4, 0x7034, 0xd0ac, 0x00c0, 0x24c1, 0x017e,
-+      0x157e, 0x6027, 0x0008, 0x602f, 0x0020, 0x20a9, 0x000a, 0x00f0,
-+      0x249f, 0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9,
-+      0x0320, 0x00e0, 0x24a9, 0x2091, 0x6000, 0x6020, 0xd09c, 0x00c0,
-+      0x24b8, 0x157f, 0x6152, 0x017f, 0x6027, 0x0008, 0x0078, 0x24e4,
-+      0x1078, 0x2577, 0x00f0, 0x24a9, 0x157f, 0x6152, 0x017f, 0x6027,
-+      0x0008, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x1078,
-+      0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e,
-+      0x2019, 0x0000, 0x1078, 0x7058, 0x037f, 0x60e3, 0x0000, 0x1078,
-+      0xa5ad, 0x1078, 0xa5cb, 0x2001, 0xa600, 0x2003, 0x0004, 0x6027,
-+      0x0008, 0x1078, 0x1246, 0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c,
-+      0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000,
-+      0x2071, 0xa600, 0x71bc, 0x70be, 0xa116, 0x0040, 0x2518, 0x81ff,
-+      0x0040, 0x2500, 0x2011, 0x8011, 0x1078, 0x361b, 0x0078, 0x2518,
-+      0x2011, 0x8012, 0x1078, 0x361b, 0x2001, 0xa672, 0x2004, 0xd0fc,
-+      0x00c0, 0x2518, 0x037e, 0x0c7e, 0x1078, 0x6f9f, 0x2061, 0x0100,
-+      0x2019, 0x0028, 0x2009, 0x0000, 0x1078, 0x284f, 0x0c7f, 0x037f,
-+      0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, 0x0c7e,
-+      0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x253b, 0x2204,
-+      0x60f2, 0x2011, 0x2548, 0x6000, 0xa082, 0x0003, 0x00c8, 0x2534,
-+      0x2001, 0x00ff, 0x0078, 0x2535, 0x2204, 0x60ee, 0x027f, 0x007f,
-+      0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420,
-+      0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8,
-+      0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff,
-+      0x2130, 0xa094, 0xff00, 0x00c0, 0x2558, 0x81ff, 0x0040, 0x255c,
-+      0x1078, 0x5761, 0x0078, 0x2563, 0xa080, 0x29c0, 0x200c, 0xa18c,
-+      0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x29c0, 0x200c, 0xa18c,
-+      0x00ff, 0x007c, 0x0c7e, 0x2061, 0xa600, 0x6030, 0x0040, 0x2573,
-+      0xc09d, 0x0078, 0x2574, 0xc09c, 0x6032, 0x0c7f, 0x007c, 0x007e,
-+      0x157e, 0x0f7e, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c,
-+      0x00c0, 0x2584, 0x00f0, 0x257e, 0x0f7f, 0x157f, 0x007f, 0x007c,
-+      0x0c7e, 0x007e, 0x2061, 0x0100, 0x6030, 0x007e, 0x6048, 0x007e,
-+      0x60e4, 0x007e, 0x60e8, 0x007e, 0x6050, 0x007e, 0x60f0, 0x007e,
-+      0x60ec, 0x007e, 0x600c, 0x007e, 0x6004, 0x007e, 0x6028, 0x007e,
-+      0x60e0, 0x007e, 0x602f, 0x0100, 0x602f, 0x0000, 0x0005, 0x0005,
-+      0x0005, 0x0005, 0x602f, 0x0040, 0x602f, 0x0000, 0x007f, 0x60e2,
-+      0x007f, 0x602a, 0x007f, 0x6006, 0x007f, 0x600e, 0x007f, 0x60ee,
-+      0x007f, 0x60f2, 0x007f, 0x6052, 0x007f, 0x60ea, 0x007f, 0x60e6,
-+      0x007f, 0x604a, 0x007f, 0x6032, 0x007f, 0x0c7f, 0x007c, 0x25e7,
-+      0x25eb, 0x25ef, 0x25f5, 0x25fb, 0x2601, 0x2607, 0x260f, 0x2617,
-+      0x261d, 0x2623, 0x262b, 0x2633, 0x263b, 0x2643, 0x264d, 0x2657,
-+      0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657,
-+      0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x2657, 0x107e,
-+      0x007e, 0x0078, 0x2670, 0x107e, 0x007e, 0x0078, 0x2670, 0x107e,
-+      0x007e, 0x1078, 0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
-+      0x226c, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078,
-+      0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
-+      0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
-+      0x007e, 0x1078, 0x226c, 0x1078, 0x2133, 0x0078, 0x2670, 0x107e,
-+      0x007e, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
-+      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
-+      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
-+      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
-+      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x2133, 0x1078,
-+      0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078, 0x226c, 0x1078,
-+      0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x107e, 0x007e, 0x1078,
-+      0x226c, 0x1078, 0x2133, 0x1078, 0x2178, 0x0078, 0x2670, 0x0005,
-+      0x0078, 0x2657, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2660,
-+      0x2670, 0x25ed, 0x25f1, 0x25f7, 0x25fd, 0x2603, 0x2609, 0x2611,
-+      0x2619, 0x261f, 0x2625, 0x262d, 0x2635, 0x263d, 0x2645, 0x264f,
-+      0x0008, 0x265a, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e,
-+      0x027e, 0x047e, 0x2021, 0x0000, 0x1078, 0x4967, 0x00c0, 0x2772,
-+      0x70cc, 0xd09c, 0x0040, 0x268e, 0xd084, 0x00c0, 0x268e, 0xd0bc,
-+      0x00c0, 0x2772, 0x1078, 0x2776, 0x0078, 0x2772, 0xd0cc, 0x00c0,
-+      0x2772, 0xd094, 0x0040, 0x2698, 0x7097, 0xffff, 0x0078, 0x2772,
-+      0x2001, 0x010c, 0x203c, 0x7284, 0xd284, 0x0040, 0x2701, 0xd28c,
-+      0x00c0, 0x2701, 0x037e, 0x7394, 0xa38e, 0xffff, 0x0040, 0x26ab,
-+      0x83ff, 0x00c0, 0x26ad, 0x2019, 0x0001, 0x8314, 0xa2e0, 0xacc0,
-+      0x2c04, 0xa38c, 0x0001, 0x0040, 0x26ba, 0xa084, 0xff00, 0x8007,
-+      0x0078, 0x26bc, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x26f6, 0xa08e,
-+      0x0000, 0x0040, 0x26f6, 0xa08e, 0x00ff, 0x00c0, 0x26d3, 0x7230,
-+      0xd284, 0x00c0, 0x26fc, 0x7284, 0xc28d, 0x7286, 0x7097, 0xffff,
-+      0x037f, 0x0078, 0x2701, 0x2009, 0x0000, 0x1078, 0x254d, 0x1078,
-+      0x455c, 0x00c0, 0x26f9, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x00c0, 0x26f0, 0x7030, 0xd08c, 0x0040, 0x26ea, 0x6000, 0xd0bc,
-+      0x0040, 0x26f0, 0x1078, 0x278c, 0x0040, 0x26f9, 0x0078, 0x26f6,
-+      0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x26f9, 0x8318, 0x0078,
-+      0x26ad, 0x7396, 0x0078, 0x26fe, 0x7097, 0xffff, 0x037f, 0x0078,
-+      0x2772, 0xa780, 0x29c0, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x2041,
-+      0x007e, 0x7094, 0xa096, 0xffff, 0x00c0, 0x2713, 0x2009, 0x0000,
-+      0x28a8, 0x0078, 0x271f, 0xa812, 0x0048, 0x271b, 0x2008, 0xa802,
-+      0x20a8, 0x0078, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x2700,
-+      0x157e, 0x017e, 0xa106, 0x0040, 0x2766, 0xc484, 0x1078, 0x45c4,
-+      0x0040, 0x2730, 0x1078, 0x455c, 0x00c0, 0x276f, 0x0078, 0x2731,
-+      0xc485, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2740,
-+      0x7030, 0xd08c, 0x0040, 0x275e, 0x6000, 0xd0bc, 0x00c0, 0x275e,
-+      0x7284, 0xd28c, 0x0040, 0x2756, 0x6004, 0xa084, 0x00ff, 0xa082,
-+      0x0006, 0x0048, 0x2766, 0xd484, 0x00c0, 0x2752, 0x1078, 0x457f,
-+      0x0078, 0x2754, 0x1078, 0x298e, 0x0078, 0x2766, 0x1078, 0x28c4,
-+      0x1078, 0x27b9, 0x0040, 0x276f, 0x0078, 0x2766, 0x1078, 0x2959,
-+      0x0040, 0x2766, 0x1078, 0x278c, 0x0040, 0x276f, 0x017f, 0x8108,
-+      0x157f, 0x00f0, 0x271f, 0x7097, 0xffff, 0x0078, 0x2772, 0x017f,
-+      0x157f, 0x7196, 0x047f, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x017e,
-+      0x7097, 0x0001, 0x2009, 0x007e, 0x1078, 0x455c, 0x00c0, 0x2789,
-+      0x1078, 0x28c4, 0x1078, 0x27b9, 0x0040, 0x2789, 0x70cc, 0xc0bd,
-+      0x70ce, 0x017f, 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e,
-+      0x2c68, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078,
-+      0x76c7, 0x0040, 0x27b4, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001,
-+      0x0000, 0x1078, 0x44ee, 0x2001, 0x0000, 0x1078, 0x4502, 0x127e,
-+      0x2091, 0x8000, 0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0004,
-+      0x1078, 0x775c, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f,
-+      0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x2001, 0xa657,
-+      0x2004, 0xa084, 0x00ff, 0x6842, 0x1078, 0x9187, 0x0040, 0x27f2,
-+      0x2d00, 0x601a, 0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e,
-+      0x0040, 0x27db, 0x6804, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+      0x27db, 0x1078, 0x2880, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+      0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
-+      0x7090, 0x8000, 0x7092, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
-+      0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+      0x027e, 0x2009, 0x0080, 0x1078, 0x455c, 0x00c0, 0x2805, 0x1078,
-+      0x2808, 0x0040, 0x2805, 0x70d3, 0xffff, 0x027f, 0x0c7f, 0x007c,
-+      0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x76c7, 0x0040,
-+      0x282a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+      0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x127e, 0x2091, 0x8000,
-+      0x70d4, 0x8000, 0x70d6, 0x127f, 0x2009, 0x0002, 0x1078, 0x775c,
-+      0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+      0x0d7e, 0x127e, 0x2091, 0x8000, 0x2009, 0x007f, 0x1078, 0x455c,
-+      0x00c0, 0x284b, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x284b, 0x2d00,
-+      0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078,
-+      0x775c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e,
-+      0x0c7e, 0x067e, 0x037e, 0x027e, 0x1078, 0x5f0e, 0x1078, 0x5eae,
-+      0x1078, 0x8068, 0x2130, 0x81ff, 0x0040, 0x2864, 0x20a9, 0x007e,
-+      0x2009, 0x0000, 0x0078, 0x2868, 0x20a9, 0x007f, 0x2009, 0x0000,
-+      0x017e, 0x1078, 0x45c4, 0x00c0, 0x2871, 0x1078, 0x47e9, 0x1078,
-+      0x42f8, 0x017f, 0x8108, 0x00f0, 0x2868, 0x86ff, 0x00c0, 0x287a,
-+      0x1078, 0x119b, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c,
-+      0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0,
-+      0x027e, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
-+      0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60,
-+      0x1078, 0x47e9, 0x6210, 0x6314, 0x1078, 0x42f8, 0x6212, 0x6316,
-+      0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e,
-+      0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x28ba, 0x2071,
-+      0xa600, 0x7090, 0xa005, 0x0040, 0x28b7, 0x8001, 0x7092, 0x007f,
-+      0x0e7f, 0x007c, 0x2071, 0xa600, 0x70d4, 0xa005, 0x0040, 0x28b7,
-+      0x8001, 0x70d6, 0x0078, 0x28b7, 0x6000, 0xc08c, 0x6002, 0x007c,
-+      0x0f7e, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x2178,
-+      0x81ff, 0x00c0, 0x28d7, 0x20a9, 0x0001, 0x0078, 0x28f2, 0x2001,
-+      0xa653, 0x2004, 0xd0c4, 0x0040, 0x28ee, 0xd0a4, 0x0040, 0x28ee,
-+      0x047e, 0x6018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427,
-+      0xa006, 0x2009, 0x002d, 0x1078, 0xa21d, 0x047f, 0x20a9, 0x00ff,
-+      0x2011, 0x0000, 0x027e, 0xa28e, 0x007e, 0x0040, 0x2936, 0xa28e,
-+      0x007f, 0x0040, 0x2936, 0xa28e, 0x0080, 0x0040, 0x2936, 0xa288,
-+      0xa735, 0x210c, 0x81ff, 0x0040, 0x2936, 0x8fff, 0x1040, 0x2942,
-+      0x0c7e, 0x2160, 0x2001, 0x0001, 0x1078, 0x4972, 0x0c7f, 0x2019,
-+      0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a,
-+      0x0c7e, 0x027e, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006,
-+      0x00c0, 0x2926, 0x6007, 0x0404, 0x0078, 0x292b, 0x2001, 0x0004,
-+      0x8007, 0xa215, 0x6206, 0x027f, 0x0c7f, 0x017e, 0x2c08, 0x1078,
-+      0x9f8b, 0x017f, 0x077f, 0x2160, 0x1078, 0x47e9, 0x027f, 0x8210,
-+      0x00f0, 0x28f2, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
-+      0x0f7f, 0x007c, 0x047e, 0x027e, 0x017e, 0x2001, 0xa653, 0x2004,
-+      0xd0c4, 0x0040, 0x2955, 0xd0a4, 0x0040, 0x2955, 0xa006, 0x2220,
-+      0x8427, 0x2009, 0x0029, 0x1078, 0xa21d, 0x017f, 0x027f, 0x047f,
-+      0x007c, 0x017e, 0x027e, 0x037e, 0x0c7e, 0x7284, 0x82ff, 0x0040,
-+      0x2987, 0xa290, 0xa653, 0x2214, 0xd2ac, 0x00c0, 0x2987, 0x2100,
-+      0x1078, 0x2564, 0x81ff, 0x0040, 0x2989, 0x2019, 0x0001, 0x8314,
-+      0xa2e0, 0xacc0, 0x2c04, 0xd384, 0x0040, 0x297b, 0xa084, 0xff00,
-+      0x8007, 0x0078, 0x297d, 0xa084, 0x00ff, 0xa116, 0x0040, 0x2989,
-+      0xa096, 0x00ff, 0x0040, 0x2987, 0x8318, 0x0078, 0x296f, 0xa085,
-+      0x0001, 0x0c7f, 0x037f, 0x027f, 0x017f, 0x007c, 0x017e, 0x0c7e,
-+      0x127e, 0x2091, 0x8000, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e,
-+      0x2019, 0x0029, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f,
-+      0x027f, 0x017f, 0xa180, 0xa735, 0x2004, 0xa065, 0x0040, 0x29b7,
-+      0x017e, 0x0c7e, 0x1078, 0x9187, 0x017f, 0x1040, 0x1332, 0x611a,
-+      0x1078, 0x2880, 0x1078, 0x772d, 0x017f, 0x1078, 0x457f, 0x127f,
-+      0x0c7f, 0x017f, 0x007c, 0x2001, 0xa633, 0x2004, 0xd0cc, 0x007c,
-+      0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
-+      0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
-+      0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
-+      0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
-+      0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
-+      0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
-+      0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
-+      0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
-+      0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
-+      0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
-+      0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
-+      0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
-+      0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
-+      0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
-+      0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
-+      0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
-+      0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
-+      0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
-+      0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
-+      0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
-+      0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
-+      0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
-+      0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
-+      0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
-+      0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
-+      0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
-+      0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
-+      0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
-+      0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x2071, 0xa682, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a,
-+      0x703e, 0x7033, 0xa692, 0x7037, 0xa692, 0x7007, 0x0001, 0x2061,
-+      0xa6d2, 0x6003, 0x0002, 0x007c, 0x0090, 0x2ae7, 0x0068, 0x2ae7,
-+      0x2071, 0xa682, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2ae7, 0x2a60,
-+      0x7820, 0xa08e, 0x0069, 0x00c0, 0x2bd7, 0x0079, 0x2b6b, 0x007c,
-+      0x2071, 0xa682, 0x7004, 0x0079, 0x2aed, 0x2af1, 0x2af2, 0x2afc,
-+      0x2b0e, 0x007c, 0x0090, 0x2afb, 0x0068, 0x2afb, 0x2b78, 0x7818,
-+      0xd084, 0x0040, 0x2b1a, 0x007c, 0x2b78, 0x2061, 0xa6d2, 0x6008,
-+      0xa08e, 0x0100, 0x0040, 0x2b09, 0xa086, 0x0200, 0x0040, 0x2bcf,
-+      0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010, 0x2068,
-+      0x6834, 0xa086, 0x0103, 0x0040, 0x2b16, 0x007c, 0x2a60, 0x2b78,
-+      0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8, 0x2b23,
-+      0x61bc, 0x0079, 0x2b2b, 0x2100, 0xa08a, 0x003f, 0x00c8, 0x2bcb,
-+      0x61bc, 0x0079, 0x2b6b, 0x2bad, 0x2bdf, 0x2be7, 0x2beb, 0x2bf3,
-+      0x2bf9, 0x2bfd, 0x2c09, 0x2c0d, 0x2c17, 0x2c1b, 0x2bcb, 0x2bcb,
-+      0x2bcb, 0x2c1f, 0x2bcb, 0x2c2f, 0x2c46, 0x2c5d, 0x2cdd, 0x2ce2,
-+      0x2d0f, 0x2d69, 0x2d7a, 0x2d98, 0x2dd9, 0x2de3, 0x2df0, 0x2e03,
-+      0x2e22, 0x2e2b, 0x2e68, 0x2e6e, 0x2bcb, 0x2e8a, 0x2bcb, 0x2bcb,
-+      0x2bcb, 0x2bcb, 0x2bcb, 0x2e91, 0x2e9b, 0x2bcb, 0x2bcb, 0x2bcb,
-+      0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2ea3, 0x2bcb, 0x2bcb,
-+      0x2bcb, 0x2bcb, 0x2bcb, 0x2eb5, 0x2ece, 0x2bcb, 0x2bcb, 0x2bcb,
-+      0x2bcb, 0x2bcb, 0x2bcb, 0x2ee0, 0x2f37, 0x2f95, 0x2fa9, 0x2bcb,
-+      0x2bcb, 0x2bcb, 0x398e, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
-+      0x2bcb, 0x2bcb, 0x2bcb, 0x2c17, 0x2c1b, 0x2fc0, 0x2bcb, 0x2fcd,
-+      0x3a26, 0x3a83, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb,
-+      0x2bcb, 0x2bcb, 0x2bcb, 0x301a, 0x314f, 0x316b, 0x3177, 0x31da,
-+      0x3233, 0x323e, 0x327d, 0x328c, 0x329b, 0x329e, 0x2fd1, 0x32c2,
-+      0x331e, 0x332b, 0x343c, 0x356f, 0x3599, 0x36a6, 0x2bcb, 0x36b6,
-+      0x36f0, 0x37bf, 0x2bcb, 0x2bcb, 0x2bcb, 0x2bcb, 0x3827, 0x3843,
-+      0x38bd, 0x3977, 0x713c, 0x0078, 0x2bad, 0x2021, 0x4000, 0x1078,
-+      0x35f5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2bba, 0x7818, 0xd084,
-+      0x0040, 0x2bbd, 0x127f, 0x0078, 0x2bb1, 0x7c22, 0x7926, 0x7a2a,
-+      0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
-+      0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x2baf, 0x2021,
-+      0x4002, 0x0078, 0x2baf, 0x2021, 0x4003, 0x0078, 0x2baf, 0x2021,
-+      0x4005, 0x0078, 0x2baf, 0x2021, 0x4006, 0x0078, 0x2baf, 0xa02e,
-+      0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x3604, 0x7823,
-+      0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
-+      0x7930, 0x0078, 0x3608, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
-+      0x2bad, 0x7924, 0x2114, 0x0078, 0x2bad, 0x2099, 0x0009, 0x20a1,
-+      0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28, 0x7b2c, 0x0078,
-+      0x2bad, 0x7824, 0x2060, 0x0078, 0x2c21, 0x2009, 0x0001, 0x2011,
-+      0x0013, 0x2019, 0x0018, 0x783b, 0x0017, 0x0078, 0x2bad, 0x7d38,
-+      0x7c3c, 0x0078, 0x2be1, 0x7d38, 0x7c3c, 0x0078, 0x2bed, 0x2061,
-+      0x1000, 0x610c, 0xa006, 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0,
-+      0x2c23, 0x2010, 0xa005, 0x0040, 0x2bad, 0x0078, 0x2bd3, 0x2069,
-+      0xa652, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040,
-+      0x2bdb, 0x684a, 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006,
-+      0x685a, 0x685e, 0x1078, 0x4eae, 0x0078, 0x2bad, 0x2069, 0xa652,
-+      0x7824, 0x7934, 0xa11a, 0x00c8, 0x2bdb, 0x8019, 0x0040, 0x2bdb,
-+      0x684e, 0x6946, 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a,
-+      0x686e, 0x1078, 0x4a3e, 0x0078, 0x2bad, 0xa02e, 0x2520, 0x81ff,
-+      0x00c0, 0x2bd7, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1,
-+      0xa689, 0x41a1, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020,
-+      0x1078, 0x3604, 0x701b, 0x2c75, 0x007c, 0x6834, 0x2008, 0xa084,
-+      0x00ff, 0xa096, 0x0011, 0x0040, 0x2c85, 0xa096, 0x0019, 0x0040,
-+      0x2c85, 0xa096, 0x0015, 0x00c0, 0x2bd7, 0x810f, 0xa18c, 0x00ff,
-+      0x0040, 0x2bd7, 0x710e, 0x700c, 0x8001, 0x0040, 0x2cb6, 0x700e,
-+      0x1078, 0x35ba, 0x0040, 0x2bd7, 0x2009, 0x0020, 0x2061, 0xa6d2,
-+      0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000,
-+      0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x3604, 0x701b, 0x2ca9,
-+      0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x2cb4,
-+      0xa096, 0x000a, 0x00c0, 0x2bd7, 0x0078, 0x2c8b, 0x7010, 0x2068,
-+      0x6838, 0xc0fd, 0x683a, 0x1078, 0x4431, 0x00c0, 0x2cc4, 0x7007,
-+      0x0003, 0x701b, 0x2cc6, 0x007c, 0x1078, 0x4b51, 0x127e, 0x2091,
-+      0x8000, 0x20a9, 0x0005, 0x2099, 0xa689, 0x530a, 0x2100, 0xa210,
-+      0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d,
-+      0x2009, 0x0020, 0x127f, 0x0078, 0x3608, 0x61a4, 0x7824, 0x60a6,
-+      0x0078, 0x2bad, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953,
-+      0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832,
-+      0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
-+      0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b,
-+      0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1,
-+      0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff,
-+      0x00c0, 0x2bd7, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
-+      0x00c0, 0x2bdb, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
-+      0x2d23, 0x0078, 0x2bdb, 0x7c28, 0x7d2c, 0x1078, 0x47a4, 0xd28c,
-+      0x00c0, 0x2d2e, 0x1078, 0x4736, 0x0078, 0x2d30, 0x1078, 0x4772,
-+      0x00c0, 0x2d5a, 0x2061, 0xad00, 0x127e, 0x2091, 0x8000, 0x6000,
-+      0xa086, 0x0000, 0x0040, 0x2d48, 0x6010, 0xa06d, 0x0040, 0x2d48,
-+      0x683c, 0xa406, 0x00c0, 0x2d48, 0x6840, 0xa506, 0x0040, 0x2d53,
-+      0x127f, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02, 0x00c8,
-+      0x2bd7, 0x0078, 0x2d34, 0x1078, 0x8a01, 0x127f, 0x0040, 0x2bd7,
-+      0x0078, 0x2bad, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51, 0x127e,
-+      0x2091, 0x8000, 0x1078, 0x8f85, 0x1078, 0x4a73, 0x127f, 0x0078,
-+      0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb,
-+      0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078, 0x47b2, 0x0040, 0x2bd7,
-+      0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040,
-+      0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0005, 0x1078,
-+      0x47d3, 0x0040, 0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb,
-+      0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x0078, 0x2bad,
-+      0x127e, 0x2091, 0x8000, 0x81ff, 0x0040, 0x2da2, 0x2009, 0x0001,
-+      0x0078, 0x2dd3, 0x2029, 0x00ff, 0x6450, 0x2400, 0xa506, 0x0040,
-+      0x2dcd, 0x2508, 0x1078, 0x45c4, 0x00c0, 0x2dcd, 0x1078, 0x482f,
-+      0x00c0, 0x2db8, 0x2009, 0x0002, 0x62ac, 0x2518, 0x0078, 0x2dd3,
-+      0x2019, 0x0004, 0x1078, 0x47d3, 0x00c0, 0x2dc2, 0x2009, 0x0006,
-+      0x0078, 0x2dd3, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x2dd6, 0x8003,
-+      0x800b, 0x810b, 0xa108, 0x1078, 0x5a52, 0x8529, 0x00c8, 0x2da5,
-+      0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bd7, 0x127f, 0x0078,
-+      0x2bdb, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x46e7, 0x1078,
-+      0x47a4, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
-+      0x0040, 0x2bdb, 0x1078, 0x46d6, 0x1078, 0x47a4, 0x0078, 0x2bad,
-+      0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
-+      0x4775, 0x0040, 0x2bd7, 0x1078, 0x4484, 0x1078, 0x472f, 0x1078,
-+      0x47a4, 0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078,
-+      0x4673, 0x0040, 0x2bd7, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078,
-+      0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078,
-+      0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47a4,
-+      0x0078, 0x2bad, 0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x47a4,
-+      0x2208, 0x0078, 0x2bad, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0xa714,
-+      0x6810, 0x6914, 0xa10a, 0x00c8, 0x2e37, 0x2009, 0x0000, 0x6816,
-+      0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x00ff, 0x2069, 0xa735,
-+      0x2d04, 0xa075, 0x0040, 0x2e4c, 0x704c, 0x1078, 0x2e56, 0xa210,
-+      0x7080, 0x1078, 0x2e56, 0xa318, 0x8d68, 0x00f0, 0x2e40, 0x2300,
-+      0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x2bad, 0x0f7e, 0x017e,
-+      0xa07d, 0x0040, 0x2e65, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff,
-+      0x0040, 0x2e65, 0x2178, 0x0078, 0x2e5d, 0x017f, 0x0f7f, 0x007c,
-+      0x2069, 0xa714, 0x6910, 0x62a8, 0x0078, 0x2bad, 0x81ff, 0x00c0,
-+      0x2bd7, 0x6150, 0xa190, 0x29c0, 0x2214, 0xa294, 0x00ff, 0x6070,
-+      0xa084, 0xff00, 0xa215, 0x636c, 0x67cc, 0xd79c, 0x0040, 0x2e84,
-+      0x2031, 0x0001, 0x0078, 0x2e86, 0x2031, 0x0000, 0x7e3a, 0x7f3e,
-+      0x0078, 0x2bad, 0x6140, 0x6244, 0x2019, 0xa8a2, 0x231c, 0x0078,
-+      0x2bad, 0x127e, 0x2091, 0x8000, 0x6134, 0x6338, 0xa006, 0x2010,
-+      0x127f, 0x0078, 0x2bad, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6244,
-+      0x6338, 0x0078, 0x2bad, 0x6140, 0x6244, 0x7824, 0x6042, 0x7b28,
-+      0x6346, 0x2069, 0xa652, 0x831f, 0xa305, 0x6816, 0x782c, 0x2069,
-+      0xa8a2, 0x2d1c, 0x206a, 0x0078, 0x2bad, 0x017e, 0x127e, 0x2091,
-+      0x8000, 0x7824, 0x6036, 0xd094, 0x0040, 0x2ec8, 0x7828, 0xa085,
-+      0x0001, 0x2009, 0xa8ab, 0x200a, 0x2001, 0xffff, 0x1078, 0x5ae6,
-+      0x782c, 0x603a, 0x127f, 0x017f, 0x0078, 0x2bad, 0x1078, 0x35e4,
-+      0x0040, 0x2bdb, 0x7828, 0xa00d, 0x0040, 0x2bdb, 0x782c, 0xa005,
-+      0x0040, 0x2bdb, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x2bad,
-+      0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e,
-+      0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff,
-+      0x00c0, 0x2ef7, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f06, 0xa182,
-+      0x007f, 0x00c8, 0x2f30, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff,
-+      0x6030, 0xa116, 0x0040, 0x2f30, 0x810f, 0xa105, 0x127e, 0x2091,
-+      0x8000, 0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f2c, 0x601a,
-+      0x600b, 0xbc09, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f33,
-+      0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078,
-+      0x775c, 0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7,
-+      0x0c7f, 0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f2c, 0x2001,
-+      0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x0c7e, 0x2061,
-+      0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x00c0,
-+      0x2f4e, 0x6030, 0xa085, 0xff00, 0x0078, 0x2f5d, 0xa182, 0x007f,
-+      0x00c8, 0x2f87, 0xa188, 0x29c0, 0x210c, 0xa18c, 0x00ff, 0x6030,
-+      0xa116, 0x0040, 0x2f87, 0x810f, 0xa105, 0x127e, 0x2091, 0x8000,
-+      0x007e, 0x1078, 0x76c7, 0x007f, 0x0040, 0x2f83, 0x601a, 0x600b,
-+      0xbc05, 0x601f, 0x0001, 0x1078, 0x35ba, 0x0040, 0x2f8a, 0x6837,
-+      0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+      0x701b, 0x2f8e, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078, 0x775c,
-+      0x127f, 0x0c7f, 0x007c, 0x127f, 0x0c7f, 0x0078, 0x2bd7, 0x0c7f,
-+      0x0078, 0x2bdb, 0x1078, 0x772d, 0x0078, 0x2f83, 0x6830, 0xa086,
-+      0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad, 0x2061, 0xa933, 0x127e,
-+      0x2091, 0x8000, 0x6000, 0xd084, 0x0040, 0x2fa6, 0x6104, 0x6208,
-+      0x2019, 0xa612, 0x231c, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078,
-+      0x2bdb, 0x81ff, 0x00c0, 0x2bd7, 0x127e, 0x2091, 0x8000, 0x6248,
-+      0x6064, 0xa202, 0x0048, 0x2fbd, 0xa085, 0x0001, 0x1078, 0x256a,
-+      0x1078, 0x3c9e, 0x127f, 0x0078, 0x2bad, 0x127f, 0x0078, 0x2bdb,
-+      0x127e, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001, 0xa640, 0x20a0,
-+      0xa006, 0x40a4, 0x127f, 0x0078, 0x2bad, 0x7d38, 0x7c3c, 0x0078,
-+      0x2c5f, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x2bd7,
-+      0x6250, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, 0x2fe9, 0x2001,
-+      0xa640, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078,
-+      0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
-+      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2bd7, 0x0c7e,
-+      0x1078, 0x35ba, 0x0c7f, 0x0040, 0x2bd7, 0x6837, 0x0000, 0x6838,
-+      0xc0fd, 0x683a, 0x1078, 0x8e4a, 0x0040, 0x2bd7, 0x7007, 0x0003,
-+      0x701b, 0x300b, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7,
-+      0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0x0078, 0x3608, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x1078, 0x42dd,
-+      0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604,
-+      0x701b, 0x302b, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040,
-+      0x2bdb, 0x6804, 0xd0ac, 0x0040, 0x3038, 0xd0a4, 0x0040, 0x2bdb,
-+      0xd094, 0x0040, 0x3043, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c,
-+      0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x304e, 0x0c7e, 0x2061,
-+      0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100,
-+      0x210c, 0xa18a, 0x0002, 0x0048, 0x3063, 0xd084, 0x0040, 0x3063,
-+      0x6a28, 0xa28a, 0x007f, 0x00c8, 0x2bdb, 0xa288, 0x29c0, 0x210c,
-+      0xa18c, 0x00ff, 0x6156, 0xd0dc, 0x0040, 0x306c, 0x6828, 0xa08a,
-+      0x007f, 0x00c8, 0x2bdb, 0x6052, 0x6808, 0xa08a, 0x0100, 0x0048,
-+      0x2bdb, 0xa08a, 0x0841, 0x00c8, 0x2bdb, 0xa084, 0x0007, 0x00c0,
-+      0x2bdb, 0x680c, 0xa005, 0x0040, 0x2bdb, 0x6810, 0xa005, 0x0040,
-+      0x2bdb, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
-+      0x2bdb, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x2bdb, 0x8001, 0x0040,
-+      0x2bdb, 0x6804, 0xd0fc, 0x0040, 0x30c2, 0x1078, 0x35ba, 0x0040,
-+      0x2bd7, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290,
-+      0x0038, 0xa399, 0x0000, 0x1078, 0x3604, 0x701b, 0x30a8, 0x007c,
-+      0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xa66e, 0x2da0,
-+      0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xa672, 0x200c, 0xd1e4,
-+      0x0040, 0x30c2, 0x0c7e, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
-+      0x6006, 0x0c7f, 0x20a9, 0x001c, 0x2d98, 0x2069, 0xa652, 0x2da0,
-+      0x53a3, 0x6814, 0xa08c, 0x00ff, 0x6142, 0x8007, 0xa084, 0x00ff,
-+      0x6046, 0x1078, 0x4eae, 0x1078, 0x49ce, 0x1078, 0x4a3e, 0x6000,
-+      0xa086, 0x0000, 0x00c0, 0x314d, 0x6808, 0x602a, 0x1078, 0x21f7,
-+      0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
-+      0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x30fa,
-+      0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
-+      0x0078, 0x30fc, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312,
-+      0x1078, 0x5b19, 0x6904, 0xd1fc, 0x0040, 0x312f, 0x0c7e, 0x2009,
-+      0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0040, 0x312c, 0x0078,
-+      0x3116, 0x839d, 0x00c8, 0x312c, 0x3508, 0x8109, 0x1078, 0x5480,
-+      0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, 0x8007, 0x600a,
-+      0xa184, 0x00ff, 0x6006, 0x8108, 0x00c0, 0x312a, 0x6003, 0x0003,
-+      0x0078, 0x312c, 0x6003, 0x0001, 0x00f0, 0x3111, 0x0c7f, 0x0c7e,
-+      0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, 0x1078,
-+      0x3819, 0x0040, 0x313d, 0x1078, 0x256a, 0x60c0, 0xa005, 0x0040,
-+      0x3149, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, 0x4224, 0x0078,
-+      0x314d, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, 0x2bad, 0x6000,
-+      0xa086, 0x0000, 0x0040, 0x2bd7, 0x2069, 0xa652, 0x7830, 0x6842,
-+      0x7834, 0x6846, 0x6804, 0xd0fc, 0x0040, 0x3162, 0x2009, 0x0030,
-+      0x0078, 0x3164, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x0078, 0x3608, 0xa006, 0x1078, 0x256a, 0x81ff, 0x00c0,
-+      0x2bd7, 0x1078, 0x42dd, 0x1078, 0x4224, 0x0078, 0x2bad, 0x81ff,
-+      0x00c0, 0x2bd7, 0x6184, 0x81ff, 0x0040, 0x3191, 0x703f, 0x0000,
-+      0x2001, 0xacc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0x127e, 0x2091, 0x8000, 0x1078, 0x3608, 0x701b, 0x2baa, 0x127f,
-+      0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0xacc0, 0x20a9, 0x0040,
-+      0x20a1, 0xacc0, 0x2019, 0xffff, 0x43a4, 0x6550, 0xa588, 0x29c0,
-+      0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100,
-+      0xa506, 0x0040, 0x31c3, 0x1078, 0x45c4, 0x00c0, 0x31c3, 0x6014,
-+      0x821c, 0x0048, 0x31bb, 0xa398, 0xacc0, 0xa085, 0xff00, 0x8007,
-+      0x201a, 0x0078, 0x31c2, 0xa398, 0xacc0, 0x2324, 0xa4a4, 0xff00,
-+      0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x31ca,
-+      0x0078, 0x31a7, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f,
-+      0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099, 0xacc0, 0x1078, 0x4281,
-+      0x0078, 0x3180, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
-+      0x35ba, 0x0c7f, 0x00c0, 0x31e8, 0x2009, 0x0002, 0x0078, 0x2bd7,
-+      0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040, 0x320f, 0x6000, 0xd08c,
-+      0x00c0, 0x320f, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-+      0x320f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x8e9e,
-+      0x00c0, 0x3206, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
-+      0x701b, 0x320b, 0x007c, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x20a9,
-+      0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004,
-+      0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x4281,
-+      0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0,
-+      0x1078, 0x4281, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x0078, 0x3608, 0x81ff, 0x00c0, 0x2bd7, 0x1078, 0x35d2,
-+      0x0040, 0x2bdb, 0x1078, 0x47bd, 0x0078, 0x2bad, 0x81ff, 0x00c0,
-+      0x2bd7, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x1078, 0x35e4,
-+      0x0040, 0x2bdb, 0x1078, 0x482f, 0x0040, 0x2bd7, 0x2019, 0x0004,
-+      0x1078, 0x47d3, 0x7924, 0x810f, 0x7a28, 0x1078, 0x3259, 0x0078,
-+      0x2bad, 0xa186, 0x00ff, 0x0040, 0x3261, 0x1078, 0x3271, 0x0078,
-+      0x3270, 0x2029, 0x007e, 0x2061, 0xa600, 0x6450, 0x2400, 0xa506,
-+      0x0040, 0x326d, 0x2508, 0x1078, 0x3271, 0x8529, 0x00c8, 0x3266,
-+      0x007c, 0x1078, 0x45c4, 0x00c0, 0x327c, 0x2200, 0x8003, 0x800b,
-+      0x810b, 0xa108, 0x1078, 0x5a52, 0x007c, 0x81ff, 0x00c0, 0x2bd7,
-+      0x1078, 0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7,
-+      0x1078, 0x47c8, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
-+      0x35d2, 0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x1078,
-+      0x47b2, 0x0078, 0x2bad, 0x6100, 0x0078, 0x2bad, 0x1078, 0x35e4,
-+      0x0040, 0x2bdb, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0,
-+      0x2bd7, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x32b2,
-+      0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
-+      0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200,
-+      0x0078, 0x2bad, 0xa006, 0x1078, 0x256a, 0x7824, 0xa084, 0x00ff,
-+      0xa086, 0x00ff, 0x0040, 0x32cf, 0x81ff, 0x00c0, 0x2bd7, 0x1078,
-+      0x42dd, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x2bdb, 0x7924, 0xa18c,
-+      0xff00, 0x810f, 0xa186, 0x00ff, 0x0040, 0x32e5, 0xa182, 0x007f,
-+      0x00c8, 0x2bdb, 0x2100, 0x1078, 0x2564, 0x027e, 0x0c7e, 0x127e,
-+      0x2091, 0x8000, 0x2061, 0xa8c4, 0x601b, 0x0000, 0x601f, 0x0000,
-+      0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002, 0x1078, 0x70ea,
-+      0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078, 0x7058, 0x037f,
-+      0x2061, 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a,
-+      0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4259,
-+      0x1078, 0x5add, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078,
-+      0x3259, 0x127f, 0x0c7f, 0x027f, 0x0078, 0x2bad, 0x7924, 0xa18c,
-+      0xff00, 0x810f, 0x0c7e, 0x1078, 0x455c, 0x2c08, 0x0c7f, 0x00c0,
-+      0x2bdb, 0x0078, 0x2bad, 0x81ff, 0x0040, 0x3332, 0x2009, 0x0001,
-+      0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x333a, 0x2009, 0x0005,
-+      0x0078, 0x2bd7, 0x1078, 0x35ba, 0x00c0, 0x3342, 0x2009, 0x0002,
-+      0x0078, 0x2bd7, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078,
-+      0x3604, 0x701b, 0x334c, 0x007c, 0x2009, 0x0080, 0x1078, 0x45c4,
-+      0x00c0, 0x3359, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040,
-+      0x335d, 0x2021, 0x400a, 0x0078, 0x2baf, 0x0d7e, 0xade8, 0x000d,
-+      0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be,
-+      0x0100, 0x0040, 0x33d0, 0xa0be, 0x0112, 0x0040, 0x33d0, 0xa0be,
-+      0x0113, 0x0040, 0x33d0, 0xa0be, 0x0114, 0x0040, 0x33d0, 0xa0be,
-+      0x0117, 0x0040, 0x33d0, 0xa0be, 0x011a, 0x0040, 0x33d0, 0xa0be,
-+      0x0121, 0x0040, 0x33c6, 0xa0be, 0x0131, 0x0040, 0x33c6, 0xa0be,
-+      0x0171, 0x0040, 0x33d0, 0xa0be, 0x0173, 0x0040, 0x33d0, 0xa0be,
-+      0x01a1, 0x00c0, 0x3398, 0x6830, 0x8007, 0x6832, 0x0078, 0x33d6,
-+      0xa0be, 0x0212, 0x0040, 0x33cc, 0xa0be, 0x0213, 0x0040, 0x33cc,
-+      0xa0be, 0x0214, 0x0040, 0x33be, 0xa0be, 0x0217, 0x0040, 0x33b8,
-+      0xa0be, 0x021a, 0x00c0, 0x33b1, 0x6838, 0x8007, 0x683a, 0x0078,
-+      0x33d0, 0xa0be, 0x0300, 0x0040, 0x33d0, 0x0d7f, 0x0078, 0x2bdb,
-+      0xad80, 0x0010, 0x20a9, 0x0007, 0x1078, 0x3418, 0xad80, 0x000e,
-+      0x20a9, 0x0001, 0x1078, 0x3418, 0x0078, 0x33d0, 0xad80, 0x000c,
-+      0x1078, 0x3426, 0x0078, 0x33d6, 0xad80, 0x000e, 0x1078, 0x3426,
-+      0xad80, 0x000c, 0x20a9, 0x0001, 0x1078, 0x3418, 0x0c7e, 0x1078,
-+      0x35ba, 0x0040, 0x3409, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119,
-+      0x6853, 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e,
-+      0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b,
-+      0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+      0x6823, 0x0000, 0x6804, 0x2068, 0x1078, 0x8e66, 0x00c0, 0x3404,
-+      0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x340f,
-+      0x007c, 0x0c7f, 0x0d7f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6820,
-+      0xa086, 0x8001, 0x00c0, 0x2bad, 0x2009, 0x0004, 0x0078, 0x2bd7,
-+      0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108,
-+      0x280a, 0x8108, 0x00f0, 0x341a, 0x017f, 0x007c, 0x017e, 0x0a7e,
-+      0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000,
-+      0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a,
-+      0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x0040, 0x3443, 0x2009,
-+      0x0001, 0x0078, 0x2bd7, 0x60cc, 0xd09c, 0x00c0, 0x344b, 0x2009,
-+      0x0005, 0x0078, 0x2bd7, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f,
-+      0xa182, 0x0080, 0x0048, 0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb,
-+      0x7a2c, 0x7b28, 0x606c, 0xa306, 0x00c0, 0x3466, 0x6070, 0xa24e,
-+      0x0040, 0x2bdb, 0xa9cc, 0xff00, 0x0040, 0x2bdb, 0x0c7e, 0x1078,
-+      0x350f, 0x2c68, 0x0c7f, 0x0040, 0x349e, 0xa0c6, 0x4000, 0x00c0,
-+      0x3484, 0x0c7e, 0x007e, 0x2d60, 0x2009, 0x0000, 0x1078, 0x489b,
-+      0x00c0, 0x347b, 0xc185, 0x6000, 0xd0bc, 0x0040, 0x3480, 0xc18d,
-+      0x007f, 0x0c7f, 0x0078, 0x349b, 0xa0c6, 0x4007, 0x00c0, 0x348b,
-+      0x2408, 0x0078, 0x349b, 0xa0c6, 0x4008, 0x00c0, 0x3493, 0x2708,
-+      0x2610, 0x0078, 0x349b, 0xa0c6, 0x4009, 0x00c0, 0x3499, 0x0078,
-+      0x349b, 0x2001, 0x4006, 0x2020, 0x0078, 0x2baf, 0x2d00, 0x7022,
-+      0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x76c7, 0x0040,
-+      0x34e4, 0x2d00, 0x601a, 0x2001, 0xa657, 0x2004, 0xa084, 0x00ff,
-+      0x6842, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
-+      0x2b70, 0x00c0, 0x34c5, 0x1078, 0x772d, 0x0e7f, 0x0c7f, 0x0b7f,
-+      0x017f, 0x2009, 0x0002, 0x0078, 0x2bd7, 0x6837, 0x0000, 0x2d00,
-+      0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x2880, 0x127f, 0x601f, 0x0001, 0x2001, 0x0000,
-+      0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x2009, 0x0002,
-+      0x1078, 0x775c, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f,
-+      0x00c0, 0x34ee, 0x2009, 0x0003, 0x0078, 0x2bd7, 0x7007, 0x0003,
-+      0x701b, 0x34f3, 0x007c, 0x6830, 0xa086, 0x0100, 0x7020, 0x2060,
-+      0x00c0, 0x3501, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0078,
-+      0x2bd7, 0x2009, 0x0000, 0x1078, 0x489b, 0x00c0, 0x3508, 0xc185,
-+      0x6000, 0xd0bc, 0x0040, 0x350d, 0xc18d, 0x0078, 0x2bad, 0x0e7e,
-+      0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
-+      0xa7b5, 0x2e04, 0xa005, 0x00c0, 0x3524, 0x2100, 0xa406, 0x00c0,
-+      0x3555, 0x2428, 0x0078, 0x3555, 0x2068, 0x6f10, 0x2700, 0xa306,
-+      0x00c0, 0x3546, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x3546, 0x2400,
-+      0xa106, 0x00c0, 0x3542, 0x2d60, 0xd884, 0x0040, 0x356a, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x356a, 0x2001, 0x4000,
-+      0x0078, 0x356b, 0x2001, 0x4007, 0x0078, 0x356b, 0x2400, 0xa106,
-+      0x00c0, 0x3555, 0x6e14, 0x87ff, 0x00c0, 0x3551, 0x86ff, 0x0040,
-+      0x3521, 0x2001, 0x4008, 0x0078, 0x356b, 0x8420, 0x8e70, 0x00f0,
-+      0x3519, 0x85ff, 0x00c0, 0x3564, 0x2001, 0x4009, 0x0078, 0x356b,
-+      0x2001, 0x0001, 0x0078, 0x356b, 0x1078, 0x455c, 0x00c0, 0x3560,
-+      0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, 0x007c, 0x81ff,
-+      0x00c0, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7, 0x6837, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0040, 0x2bdb, 0xa096,
-+      0x00ff, 0x0040, 0x3587, 0xa092, 0x0004, 0x00c8, 0x2bdb, 0x2010,
-+      0x2d18, 0x1078, 0x282f, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
-+      0x3592, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078,
-+      0x2bad, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
-+      0x2bdb, 0xa182, 0x00ff, 0x00c8, 0x2bdb, 0x127e, 0x2091, 0x8000,
-+      0x1078, 0x8d4b, 0x00c0, 0x35b7, 0xa190, 0xa735, 0x2204, 0xa065,
-+      0x0040, 0x35b7, 0x1078, 0x42f8, 0x127f, 0x0078, 0x2bad, 0x127f,
-+      0x0078, 0x2bd7, 0x1078, 0x138b, 0x0040, 0x35d1, 0xa006, 0x6802,
-+      0x7010, 0xa005, 0x00c0, 0x35c9, 0x2d00, 0x7012, 0x7016, 0x0078,
-+      0x35cf, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80,
-+      0x000d, 0x007c, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x45c4,
-+      0x00c0, 0x35e1, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048,
-+      0x35e2, 0xa066, 0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff,
-+      0x1078, 0x45c4, 0x00c0, 0x35f2, 0xa6b4, 0x00ff, 0xa682, 0x4000,
-+      0x0048, 0x35f3, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff,
-+      0x0040, 0x3600, 0x2168, 0x6904, 0x1078, 0x13a4, 0x0078, 0x35f7,
-+      0x7112, 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x360a,
-+      0x2031, 0x0000, 0x2061, 0xa6d2, 0x6606, 0x6112, 0x600e, 0x6226,
-+      0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002,
-+      0x701b, 0x2bad, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079,
-+      0x0000, 0x2001, 0xa690, 0x2004, 0xa005, 0x00c0, 0x3636, 0x0068,
-+      0x3636, 0x7818, 0xd084, 0x00c0, 0x3636, 0x7a22, 0x7b26, 0x7c2a,
-+      0x781b, 0x0001, 0x2091, 0x4080, 0x0078, 0x365b, 0x017e, 0x0c7e,
-+      0x0e7e, 0x2071, 0xa682, 0x7138, 0xa182, 0x0008, 0x0048, 0x3644,
-+      0x7030, 0x2060, 0x0078, 0x3655, 0x7030, 0xa0e0, 0x0008, 0xac82,
-+      0xa6d2, 0x0048, 0x364d, 0x2061, 0xa692, 0x2c00, 0x7032, 0x81ff,
-+      0x00c0, 0x3653, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
-+      0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071,
-+      0xa682, 0x7038, 0xa005, 0x0040, 0x3697, 0x127e, 0x2091, 0x8000,
-+      0x0068, 0x3696, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0,
-+      0x3695, 0x0c7e, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
-+      0x6008, 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001,
-+      0x703a, 0xa005, 0x00c0, 0x368b, 0x7033, 0xa692, 0x7037, 0xa692,
-+      0x0c7f, 0x0078, 0x3695, 0xac80, 0x0008, 0xa0fa, 0xa6d2, 0x0048,
-+      0x3693, 0x2001, 0xa692, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f,
-+      0x007c, 0x027e, 0x2001, 0xa653, 0x2004, 0xd0c4, 0x0040, 0x36a4,
-+      0x2011, 0x8014, 0x1078, 0x361b, 0x027f, 0x007c, 0x81ff, 0x00c0,
-+      0x2bd7, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,
-+      0x6032, 0x1078, 0x4224, 0x127f, 0x0078, 0x2bad, 0x81ff, 0x00c0,
-+      0x2bd7, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x2001, 0xa653,
-+      0x2004, 0xd0ac, 0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb,
-+      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x36d3, 0x7828,
-+      0xa005, 0x0040, 0x2bad, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x0040,
-+      0x2bd7, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+      0x1078, 0x8f12, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x36e9,
-+      0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2bd7, 0x0078, 0x2bad,
-+      0x2001, 0xa600, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2bd7, 0x7f24,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x35ba, 0x0040, 0x2bd7,
-+      0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000,
-+      0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x45c4, 0x00c0, 0x376d,
-+      0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0040, 0x371d, 0xa0c4,
-+      0xff00, 0xa8c6, 0x0600, 0x00c0, 0x376d, 0x2001, 0xa653, 0x2004,
-+      0xd0ac, 0x00c0, 0x372a, 0x1078, 0x489b, 0x00c0, 0x372a, 0xd79c,
-+      0x0040, 0x376d, 0xd794, 0x00c0, 0x3730, 0xd784, 0x0040, 0x373c,
-+      0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078,
-+      0x3426, 0xd794, 0x0040, 0x3745, 0xac80, 0x000a, 0x2098, 0x3400,
-+      0x20a9, 0x0004, 0x53a3, 0x1078, 0x3426, 0x21a2, 0xd794, 0x0040,
-+      0x3765, 0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3,
-+      0xac80, 0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400,
-+      0x20a9, 0x0002, 0x53a3, 0x1078, 0x3418, 0xac80, 0x0026, 0x2098,
-+      0x20a9, 0x0002, 0x53a3, 0x0078, 0x3766, 0x94a0, 0xd794, 0x0040,
-+      0x376b, 0xa6b0, 0x000b, 0xa6b0, 0x0005, 0x8108, 0xd78c, 0x0040,
-+      0x3777, 0xa186, 0x0100, 0x0040, 0x3788, 0x0078, 0x377b, 0xa186,
-+      0x007e, 0x0040, 0x3788, 0xd794, 0x0040, 0x3782, 0xa686, 0x0020,
-+      0x0078, 0x3784, 0xa686, 0x0028, 0x0040, 0x3791, 0x0078, 0x370c,
-+      0x86ff, 0x00c0, 0x378f, 0x7120, 0x810b, 0x0078, 0x2bad, 0x702f,
-+      0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0xa6d2,
-+      0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e,
-+      0x6532, 0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x37a9,
-+      0x007c, 0x702c, 0xa005, 0x00c0, 0x37bb, 0x711c, 0x7024, 0x20a0,
-+      0x7728, 0x2031, 0x0000, 0x2061, 0xa6d2, 0x6224, 0x6328, 0x642c,
-+      0x6530, 0x0078, 0x370c, 0x7120, 0x810b, 0x0078, 0x2bad, 0x2029,
-+      0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007,
-+      0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa184,
-+      0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
-+      0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502,
-+      0x0048, 0x2bdb, 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb,
-+      0xa502, 0x0048, 0x2bdb, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020,
-+      0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa384, 0x00ff, 0xa0e2,
-+      0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb, 0xa484, 0xff00,
-+      0x8007, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048, 0x2bdb,
-+      0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x2bdb, 0xa502, 0x0048,
-+      0x2bdb, 0x2061, 0xa8a5, 0x6102, 0x6206, 0x630a, 0x640e, 0x0078,
-+      0x2bad, 0x007e, 0x2001, 0xa653, 0x2004, 0xd0cc, 0x007f, 0x007c,
-+      0x007e, 0x2001, 0xa672, 0x2004, 0xd0bc, 0x007f, 0x007c, 0x6164,
-+      0x7a24, 0x6300, 0x82ff, 0x00c0, 0x3830, 0x7926, 0x0078, 0x2bad,
-+      0x83ff, 0x00c0, 0x2bdb, 0x2001, 0xfff0, 0xa200, 0x00c8, 0x2bdb,
-+      0x2019, 0xffff, 0x6068, 0xa302, 0xa200, 0x0048, 0x2bdb, 0x7926,
-+      0x6266, 0x0078, 0x2bad, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
-+      0x00c0, 0x2bd7, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x1078, 0x35ba,
-+      0x0040, 0x2bd7, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023, 0x0000,
-+      0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0, 0xa735,
-+      0x2c64, 0x8cff, 0x0040, 0x387d, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x0040, 0x3872, 0x6004, 0xa084, 0xff00, 0xa086, 0x0600,
-+      0x00c0, 0x387d, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105,
-+      0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff,
-+      0x0040, 0x3888, 0xa386, 0x002a, 0x0040, 0x3891, 0x0078, 0x385e,
-+      0x83ff, 0x00c0, 0x388f, 0x7120, 0x810c, 0x0078, 0x2bad, 0x702f,
-+      0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061, 0xa6d2, 0x6007,
-+      0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732,
-+      0x2c10, 0x1078, 0x13db, 0x7007, 0x0002, 0x701b, 0x38a8, 0x007c,
-+      0x702c, 0xa005, 0x00c0, 0x38b9, 0x711c, 0x7024, 0x20a0, 0x2019,
-+      0x0000, 0x2061, 0xa6d2, 0x6424, 0x6528, 0x662c, 0x6730, 0x0078,
-+      0x385e, 0x7120, 0x810c, 0x0078, 0x2bad, 0x81ff, 0x00c0, 0x2bd7,
-+      0x60cc, 0xd09c, 0x0040, 0x2bd7, 0x1078, 0x35ba, 0x0040, 0x2bd7,
-+      0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b,
-+      0x38d2, 0x007c, 0x0d7e, 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000,
-+      0x0040, 0x38e5, 0xa0be, 0x7100, 0x0040, 0x38e5, 0xa0be, 0x7200,
-+      0x0040, 0x38e5, 0x0d7f, 0x0078, 0x2bdb, 0x6820, 0x6924, 0x1078,
-+      0x254d, 0x00c0, 0x3910, 0x1078, 0x455c, 0x00c0, 0x3910, 0x7122,
-+      0x6612, 0x6516, 0x6e18, 0x0c7e, 0x1078, 0x35ba, 0x0040, 0x3910,
-+      0x1078, 0x35ba, 0x0040, 0x3910, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x1078,
-+      0x8e82, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3913, 0x007c,
-+      0x0d7f, 0x0078, 0x2bd7, 0x7120, 0x1078, 0x298e, 0x6820, 0xa086,
-+      0x8001, 0x0040, 0x2bd7, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002,
-+      0x007e, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x1078, 0x4281, 0x007f,
-+      0xade8, 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xa6d2,
-+      0x6007, 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x00c0, 0x393a,
-+      0x0078, 0x393e, 0xa7c6, 0x7100, 0x00c0, 0x3946, 0xa6c2, 0x0004,
-+      0x0048, 0x2bdb, 0x2009, 0x0004, 0x0078, 0x3608, 0xa7c6, 0x7200,
-+      0x00c0, 0x2bdb, 0xa6c2, 0x0054, 0x0048, 0x2bdb, 0x600e, 0x6013,
-+      0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x13db,
-+      0x7007, 0x0002, 0x701b, 0x395d, 0x007c, 0x701c, 0x2068, 0x6804,
-+      0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x007e, 0x20a9, 0x002a,
-+      0x2098, 0x20a0, 0x1078, 0x4281, 0x007f, 0x2009, 0x002a, 0x2061,
-+      0xa6d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x3608, 0x81ff,
-+      0x00c0, 0x2bd7, 0x792c, 0x2001, 0xa89d, 0x2102, 0x1078, 0x35d2,
-+      0x0040, 0x2bdb, 0x1078, 0x4673, 0x0040, 0x2bd7, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x47de, 0x127f, 0x0078, 0x2bad, 0x7824, 0xd08c,
-+      0x00c0, 0x3995, 0xd084, 0x0040, 0x31da, 0x1078, 0x35e4, 0x0040,
-+      0x2bdb, 0x0c7e, 0x1078, 0x35ba, 0x0c7f, 0x00c0, 0x39a3, 0x2009,
-+      0x0002, 0x0078, 0x2bd7, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x0040, 0x39b0, 0xa08e, 0x0004, 0x0040, 0x39b0, 0xa08e, 0x0005,
-+      0x00c0, 0x39dd, 0x7824, 0xd08c, 0x0040, 0x39bb, 0x6000, 0xc08c,
-+      0x6002, 0x0078, 0x39c5, 0x2001, 0xa653, 0x2004, 0xd0b4, 0x0040,
-+      0x320f, 0x6000, 0xd08c, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6838,
-+      0xc0fd, 0x683a, 0x1078, 0x8e9e, 0x00c0, 0x39d2, 0x2009, 0x0003,
-+      0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x39d7, 0x007c, 0x1078,
-+      0x35e4, 0x0040, 0x2bdb, 0x0078, 0x320f, 0x2009, 0xa62f, 0x210c,
-+      0x81ff, 0x0040, 0x39e7, 0x2009, 0x0001, 0x0078, 0x2bd7, 0x2001,
-+      0xa600, 0x2004, 0xa086, 0x0003, 0x0040, 0x39f2, 0x2009, 0x0007,
-+      0x0078, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x0040, 0x39fc,
-+      0x2009, 0x0008, 0x0078, 0x2bd7, 0x609c, 0xd0a4, 0x00c0, 0x3a03,
-+      0xd0ac, 0x00c0, 0x320f, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
-+      0xc0fd, 0x683a, 0x1078, 0x8f12, 0x00c0, 0x3a12, 0x2009, 0x0003,
-+      0x0078, 0x2bd7, 0x7007, 0x0003, 0x701b, 0x3a17, 0x007c, 0x6830,
-+      0xa086, 0x0100, 0x00c0, 0x3a20, 0x2009, 0x0004, 0x0078, 0x2bd7,
-+      0x1078, 0x35e4, 0x0040, 0x2bdb, 0x0078, 0x39b2, 0x81ff, 0x2009,
-+      0x0001, 0x00c0, 0x2bd7, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007,
-+      0x00c0, 0x2bd7, 0x2001, 0xa653, 0x2004, 0xd0ac, 0x2009, 0x0008,
-+      0x00c0, 0x2bd7, 0x1078, 0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084,
-+      0x00ff, 0xa086, 0x0006, 0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e,
-+      0x1078, 0x35ba, 0x0c7f, 0x2009, 0x0002, 0x0040, 0x2bd7, 0x6837,
-+      0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7928, 0xa194,
-+      0xff00, 0xa18c, 0x00ff, 0xa006, 0x82ff, 0x00c0, 0x3a65, 0xc0ed,
-+      0x6952, 0x792c, 0x6956, 0x0078, 0x3a6e, 0xa28e, 0x0100, 0x00c0,
-+      0x2bdb, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000, 0x683e, 0x1078,
-+      0x90bd, 0x2009, 0x0003, 0x0040, 0x2bd7, 0x7007, 0x0003, 0x701b,
-+      0x3a7a, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0040,
-+      0x2bd7, 0x0078, 0x2bad, 0x81ff, 0x2009, 0x0001, 0x00c0, 0x2bd7,
-+      0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x00c0, 0x2bd7, 0x1078,
-+      0x35e4, 0x0040, 0x2bdb, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-+      0x2009, 0x0009, 0x00c0, 0x2bd7, 0x0c7e, 0x1078, 0x35ba, 0x0c7f,
-+      0x2009, 0x0002, 0x0040, 0x2bd7, 0xad80, 0x000f, 0x2009, 0x0008,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3604, 0x701b, 0x3ab1,
-+      0x007c, 0x0d7e, 0xade8, 0x000f, 0x6800, 0xa086, 0x0500, 0x00c0,
-+      0x3ac4, 0x6804, 0xa005, 0x00c0, 0x3ac4, 0x6808, 0xa084, 0xff00,
-+      0x00c0, 0x3ac4, 0x0078, 0x3ac7, 0x0d7f, 0x00c0, 0x2bdb, 0x0d7f,
-+      0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x0c7e,
-+      0x1078, 0x35e4, 0x00c0, 0x3ad7, 0x0c7f, 0x0078, 0x2bdb, 0x1078,
-+      0x9119, 0x2009, 0x0003, 0x0c7f, 0x0040, 0x2bd7, 0x7007, 0x0003,
-+      0x701b, 0x3ae3, 0x007c, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004,
-+      0x0040, 0x2bd7, 0x0078, 0x2bad, 0x127e, 0x0c7e, 0x0e7e, 0x2061,
-+      0x0100, 0x2071, 0xa600, 0x6044, 0xd0a4, 0x00c0, 0x3b15, 0xd084,
-+      0x0040, 0x3afe, 0x1078, 0x3c75, 0x0078, 0x3b11, 0xd08c, 0x0040,
-+      0x3b05, 0x1078, 0x3b8c, 0x0078, 0x3b11, 0xd094, 0x0040, 0x3b0c,
-+      0x1078, 0x3b60, 0x0078, 0x3b11, 0xd09c, 0x0040, 0x3b11, 0x1078,
-+      0x3b1f, 0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c,
-+      0x00c0, 0x3b1c, 0xc19d, 0x612a, 0x017f, 0x0078, 0x3b11, 0x624c,
-+      0xa286, 0xf0f0, 0x00c0, 0x3b30, 0x6048, 0xa086, 0xf0f0, 0x0040,
-+      0x3b30, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x3b5f,
-+      0xa294, 0xff00, 0xa296, 0xf700, 0x0040, 0x3b45, 0x7134, 0xd1a4,
-+      0x00c0, 0x3b45, 0x6240, 0xa294, 0x0010, 0x0040, 0x3b45, 0x2009,
-+      0x00f7, 0x1078, 0x42a1, 0x0078, 0x3b5f, 0x6043, 0x0040, 0x6043,
-+      0x0000, 0x7077, 0x0000, 0x708f, 0x0001, 0x70b3, 0x0000, 0x70cf,
-+      0x0000, 0x2009, 0xacc0, 0x200b, 0x0000, 0x7087, 0x0000, 0x707b,
-+      0x000f, 0x2009, 0x000f, 0x2011, 0x41d5, 0x1078, 0x5add, 0x007c,
-+      0x157e, 0x7078, 0xa005, 0x00c0, 0x3b8a, 0x2011, 0x41d5, 0x1078,
-+      0x5a45, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9,
-+      0x00c8, 0x6044, 0xd08c, 0x00c0, 0x3b83, 0x00f0, 0x3b71, 0x6242,
-+      0x708b, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042,
-+      0x6242, 0x0078, 0x3b8a, 0x6242, 0x708b, 0x0000, 0x707f, 0x0000,
-+      0x0078, 0x3b8a, 0x157f, 0x007c, 0x707c, 0xa08a, 0x0003, 0x00c8,
-+      0x3b95, 0x1079, 0x3b98, 0x0078, 0x3b97, 0x1078, 0x1332, 0x007c,
-+      0x3b9b, 0x3bea, 0x3c74, 0x0f7e, 0x707f, 0x0001, 0x20e1, 0xa000,
-+      0x20e1, 0x8700, 0x1078, 0x21f7, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x2079, 0xab00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
-+      0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
-+      0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
-+      0x782f, 0x0000, 0x2079, 0xab0c, 0x207b, 0x1101, 0x7807, 0x0000,
-+      0x2099, 0xa605, 0x20a1, 0xab0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
-+      0xab12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0xab00, 0x20a1,
-+      0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
-+      0x1078, 0x420b, 0x0f7f, 0x7083, 0x0000, 0x6043, 0x0008, 0x6043,
-+      0x0000, 0x007c, 0x0d7e, 0x7080, 0x7083, 0x0000, 0xa025, 0x0040,
-+      0x3c5e, 0x6020, 0xd0b4, 0x00c0, 0x3c5c, 0x718c, 0x81ff, 0x0040,
-+      0x3c4b, 0xa486, 0x000c, 0x00c0, 0x3c56, 0xa480, 0x0018, 0x8004,
-+      0x20a8, 0x2011, 0xab80, 0x2019, 0xab00, 0x220c, 0x2304, 0xa106,
-+      0x00c0, 0x3c22, 0x8210, 0x8318, 0x00f0, 0x3c05, 0x6043, 0x0004,
-+      0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x707f, 0x0002,
-+      0x708b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078, 0x5add,
-+      0x0078, 0x3c5c, 0x2069, 0xab80, 0x6930, 0xa18e, 0x1101, 0x00c0,
-+      0x3c56, 0x6834, 0xa005, 0x00c0, 0x3c56, 0x6900, 0xa18c, 0x00ff,
-+      0x00c0, 0x3c36, 0x6804, 0xa005, 0x0040, 0x3c4b, 0x2011, 0xab8e,
-+      0x2019, 0xa605, 0x20a9, 0x0004, 0x220c, 0x2304, 0xa102, 0x0048,
-+      0x3c49, 0x00c0, 0x3c56, 0x8210, 0x8318, 0x00f0, 0x3c3c, 0x0078,
-+      0x3c56, 0x708f, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+      0xab80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008,
-+      0x6043, 0x0000, 0x0078, 0x3c5e, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
-+      0x00c0, 0x3c5c, 0x60c3, 0x000c, 0x2011, 0xa8bb, 0x2013, 0x0000,
-+      0x7083, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+      0x1078, 0x6e06, 0x0078, 0x3c5c, 0x007c, 0x7088, 0xa08a, 0x001d,
-+      0x00c8, 0x3c7e, 0x1079, 0x3c81, 0x0078, 0x3c80, 0x1078, 0x1332,
-+      0x007c, 0x3cab, 0x3cba, 0x3ce9, 0x3d02, 0x3d2e, 0x3d5a, 0x3d86,
-+      0x3dbc, 0x3de8, 0x3e10, 0x3e53, 0x3e7d, 0x3e9f, 0x3eb5, 0x3edb,
-+      0x3eee, 0x3ef7, 0x3f2b, 0x3f57, 0x3f83, 0x3faf, 0x3fe5, 0x4030,
-+      0x405f, 0x4081, 0x40c3, 0x40e9, 0x4102, 0x4103, 0x0c7e, 0x2061,
-+      0xa600, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9,
-+      0x6006, 0x0c7f, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043,
-+      0x0002, 0x708b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x41dc, 0x1078,
-+      0x5add, 0x007c, 0x0f7e, 0x7080, 0xa086, 0x0014, 0x00c0, 0x3ce7,
-+      0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3ce7, 0x2079, 0xab80,
-+      0x7a30, 0xa296, 0x1102, 0x00c0, 0x3ce5, 0x7834, 0xa005, 0x00c0,
-+      0x3ce5, 0x7a38, 0xd2fc, 0x0040, 0x3cdb, 0x70b0, 0xa005, 0x00c0,
-+      0x3cdb, 0x70b3, 0x0001, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x708b,
-+      0x0010, 0x1078, 0x3ef7, 0x0078, 0x3ce7, 0x1078, 0x4224, 0x0f7f,
-+      0x007c, 0x708b, 0x0003, 0x6043, 0x0004, 0x2011, 0x41dc, 0x1078,
-+      0x5a45, 0x1078, 0x4289, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
-+      0x000a, 0x20a3, 0x0000, 0x00f0, 0x3cf9, 0x60c3, 0x0014, 0x1078,
-+      0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d2c, 0x2011,
-+      0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d2a, 0x2079,
-+      0xab80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3d2a, 0x7834, 0xa005,
-+      0x00c0, 0x3d2a, 0x7a38, 0xd2fc, 0x0040, 0x3d24, 0x70b0, 0xa005,
-+      0x00c0, 0x3d24, 0x70b3, 0x0001, 0x708b, 0x0004, 0x1078, 0x3d2e,
-+      0x0078, 0x3d2c, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0005,
-+      0x1078, 0x4289, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011,
-+      0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3d4c, 0x7074, 0xa005, 0x00c0,
-+      0x3d4c, 0x7150, 0xa186, 0xffff, 0x0040, 0x3d4c, 0x1078, 0x419d,
-+      0x0040, 0x3d4c, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+      0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3d84, 0x2011,
-+      0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3d82, 0x2079,
-+      0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3d82, 0x7834, 0xa005,
-+      0x00c0, 0x3d82, 0x7a38, 0xd2fc, 0x0040, 0x3d7c, 0x70b0, 0xa005,
-+      0x00c0, 0x3d7c, 0x70b3, 0x0001, 0x708b, 0x0006, 0x1078, 0x3d86,
-+      0x0078, 0x3d84, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b, 0x0007,
-+      0x1078, 0x4289, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011,
-+      0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3dae, 0x7074, 0xa005, 0x00c0,
-+      0x3dae, 0x7154, 0xa186, 0xffff, 0x0040, 0x3dae, 0xa180, 0x29c0,
-+      0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040, 0x3dae,
-+      0x1078, 0x3820, 0x0040, 0x3dae, 0x1078, 0x256a, 0x20a9, 0x0008,
-+      0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040,
-+      0x3de6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0,
-+      0x3de4, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3de4,
-+      0x7834, 0xa005, 0x00c0, 0x3de4, 0x7a38, 0xd2fc, 0x0040, 0x3dde,
-+      0x70b0, 0xa005, 0x00c0, 0x3dde, 0x70b3, 0x0001, 0x708b, 0x0008,
-+      0x1078, 0x3de8, 0x0078, 0x3de6, 0x1078, 0x4224, 0x0f7f, 0x007c,
-+      0x708b, 0x0009, 0x1078, 0x4289, 0x20a3, 0x1105, 0x20a3, 0x0100,
-+      0x3430, 0x1078, 0x42d4, 0x00c0, 0x3e01, 0x7074, 0xa005, 0x00c0,
-+      0x3e01, 0x1078, 0x4104, 0x00c0, 0x3e0b, 0xa085, 0x0001, 0x1078,
-+      0x256a, 0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c,
-+      0x0f7e, 0x7080, 0xa005, 0x0040, 0x3e51, 0x2011, 0x41dc, 0x1078,
-+      0x5a45, 0xa086, 0x0014, 0x00c0, 0x3e4f, 0x2079, 0xab80, 0x7a30,
-+      0xa296, 0x1105, 0x00c0, 0x3e4f, 0x7834, 0x2011, 0x0100, 0xa21e,
-+      0x00c0, 0x3e3a, 0x7a38, 0xd2fc, 0x0040, 0x3e34, 0x70b0, 0xa005,
-+      0x00c0, 0x3e34, 0x70b3, 0x0001, 0x708b, 0x000a, 0x1078, 0x3e53,
-+      0x0078, 0x3e51, 0xa005, 0x00c0, 0x3e4f, 0x7a38, 0xd2fc, 0x0040,
-+      0x3e47, 0x70b0, 0xa005, 0x00c0, 0x3e47, 0x70b3, 0x0001, 0x7087,
-+      0x0000, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3e51, 0x1078,
-+      0x4224, 0x0f7f, 0x007c, 0x708b, 0x000b, 0x2011, 0xab0e, 0x22a0,
-+      0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
-+      0x0000, 0x41a4, 0x1078, 0x4289, 0x20a3, 0x1106, 0x20a3, 0x0000,
-+      0x1078, 0x42d4, 0x0040, 0x3e70, 0x2013, 0x0000, 0x0078, 0x3e74,
-+      0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
-+      0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
-+      0x0040, 0x3e9d, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
-+      0x00c0, 0x3e9b, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1106, 0x00c0,
-+      0x3e9b, 0x7834, 0xa005, 0x00c0, 0x3e9b, 0x708b, 0x000c, 0x1078,
-+      0x3e9f, 0x0078, 0x3e9d, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
-+      0x000d, 0x1078, 0x4289, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099,
-+      0xab8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0084, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
-+      0x0040, 0x3ed9, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084,
-+      0x00c0, 0x3ed7, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0,
-+      0x3ed7, 0x7834, 0xa005, 0x00c0, 0x3ed7, 0x7087, 0x0001, 0x1078,
-+      0x427b, 0x708b, 0x000e, 0x1078, 0x3edb, 0x0078, 0x3ed9, 0x1078,
-+      0x4224, 0x0f7f, 0x007c, 0x708b, 0x000f, 0x7083, 0x0000, 0x608b,
-+      0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
-+      0x07d0, 0x2011, 0x41dc, 0x1078, 0x5a38, 0x007c, 0x7080, 0xa005,
-+      0x0040, 0x3ef6, 0x2011, 0x41dc, 0x1078, 0x5a45, 0x007c, 0x708b,
-+      0x0011, 0x1078, 0x42d4, 0x00c0, 0x3f14, 0x716c, 0x81ff, 0x0040,
-+      0x3f14, 0x2009, 0x0000, 0x7070, 0xa084, 0x00ff, 0x1078, 0x254d,
-+      0xa186, 0x007e, 0x0040, 0x3f14, 0xa186, 0x0080, 0x0040, 0x3f14,
-+      0x2011, 0xab8e, 0x1078, 0x419d, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x2099, 0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080,
-+      0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014,
-+      0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3f55,
-+      0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3f53,
-+      0x2079, 0xab80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x3f53, 0x7834,
-+      0xa005, 0x00c0, 0x3f53, 0x7a38, 0xd2fc, 0x0040, 0x3f4d, 0x70b0,
-+      0xa005, 0x00c0, 0x3f4d, 0x70b3, 0x0001, 0x708b, 0x0012, 0x1078,
-+      0x3f57, 0x0078, 0x3f55, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
-+      0x0013, 0x1078, 0x4295, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
-+      0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3f75, 0x7074, 0xa005,
-+      0x00c0, 0x3f75, 0x7150, 0xa186, 0xffff, 0x0040, 0x3f75, 0x1078,
-+      0x419d, 0x0040, 0x3f75, 0x1078, 0x42b8, 0x20a9, 0x0008, 0x2298,
-+      0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014,
-+      0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x3fad,
-+      0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014, 0x00c0, 0x3fab,
-+      0x2079, 0xab80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3fab, 0x7834,
-+      0xa005, 0x00c0, 0x3fab, 0x7a38, 0xd2fc, 0x0040, 0x3fa5, 0x70b0,
-+      0xa005, 0x00c0, 0x3fa5, 0x70b3, 0x0001, 0x708b, 0x0014, 0x1078,
-+      0x3faf, 0x0078, 0x3fad, 0x1078, 0x4224, 0x0f7f, 0x007c, 0x708b,
-+      0x0015, 0x1078, 0x4295, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430,
-+      0x2011, 0xab8e, 0x1078, 0x42d4, 0x00c0, 0x3fd7, 0x7074, 0xa005,
-+      0x00c0, 0x3fd7, 0x7154, 0xa186, 0xffff, 0x0040, 0x3fd7, 0xa180,
-+      0x29c0, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x419d, 0x0040,
-+      0x3fd7, 0x1078, 0x3820, 0x0040, 0x3fd7, 0x1078, 0x256a, 0x20a9,
-+      0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005,
-+      0x0040, 0x402e, 0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0014,
-+      0x00c0, 0x402c, 0x2079, 0xab80, 0x7a30, 0xa296, 0x1105, 0x00c0,
-+      0x402c, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x400b, 0x7a38,
-+      0xd2fc, 0x0040, 0x4009, 0x70b0, 0xa005, 0x00c0, 0x4009, 0x70b3,
-+      0x0001, 0x0078, 0x401a, 0xa005, 0x00c0, 0x402c, 0x7a38, 0xd2fc,
-+      0x0040, 0x4018, 0x70b0, 0xa005, 0x00c0, 0x4018, 0x70b3, 0x0001,
-+      0x7087, 0x0000, 0x7a38, 0xd2f4, 0x0040, 0x4026, 0x2001, 0xa674,
-+      0x2004, 0xd0a4, 0x00c0, 0x4026, 0x70cf, 0x0008, 0x708b, 0x0016,
-+      0x1078, 0x4030, 0x0078, 0x402e, 0x1078, 0x4224, 0x0f7f, 0x007c,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab80, 0x20a1, 0x020b,
-+      0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xab8e, 0x708b, 0x0017,
-+      0x1078, 0x42d4, 0x00c0, 0x4050, 0x7074, 0xa005, 0x00c0, 0x4050,
-+      0x1078, 0x4104, 0x00c0, 0x405a, 0xa085, 0x0001, 0x1078, 0x256a,
-+      0x20a9, 0x0008, 0x2099, 0xab8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x420b, 0x007c, 0x0f7e,
-+      0x7080, 0xa005, 0x0040, 0x407f, 0x2011, 0x41dc, 0x1078, 0x5a45,
-+      0xa086, 0x0084, 0x00c0, 0x407d, 0x2079, 0xab80, 0x7a30, 0xa296,
-+      0x1106, 0x00c0, 0x407d, 0x7834, 0xa005, 0x00c0, 0x407d, 0x708b,
-+      0x0018, 0x1078, 0x4081, 0x0078, 0x407f, 0x1078, 0x4224, 0x0f7f,
-+      0x007c, 0x708b, 0x0019, 0x1078, 0x4295, 0x20a3, 0x1106, 0x20a3,
-+      0x0000, 0x3430, 0x2099, 0xab8e, 0x2039, 0xab0e, 0x27a0, 0x20a9,
-+      0x0040, 0x53a3, 0x1078, 0x42d4, 0x00c0, 0x40b5, 0x2728, 0x2514,
-+      0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
-+      0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0xab0e, 0x2414,
-+      0xa38c, 0x0001, 0x0040, 0x40b0, 0xa294, 0xff00, 0x0078, 0x40b3,
-+      0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
-+      0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
-+      0x1078, 0x420b, 0x007c, 0x0f7e, 0x7080, 0xa005, 0x0040, 0x40e7,
-+      0x2011, 0x41dc, 0x1078, 0x5a45, 0xa086, 0x0084, 0x00c0, 0x40e5,
-+      0x2079, 0xab80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x40e5, 0x7834,
-+      0xa005, 0x00c0, 0x40e5, 0x7087, 0x0001, 0x1078, 0x427b, 0x708b,
-+      0x001a, 0x1078, 0x40e9, 0x0078, 0x40e7, 0x1078, 0x4224, 0x0f7f,
-+      0x007c, 0x708b, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+      0xab80, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080, 0x0007,
-+      0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
-+      0x420b, 0x007c, 0x007c, 0x007c, 0x087e, 0x097e, 0x2029, 0xa653,
-+      0x252c, 0x20a9, 0x0008, 0x2041, 0xab0e, 0x28a0, 0x2099, 0xab8e,
-+      0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x411a,
-+      0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0,
-+      0x412c, 0xd5d4, 0x0040, 0x4127, 0x8210, 0x0078, 0x4128, 0x8211,
-+      0x00f0, 0x411a, 0x0078, 0x4194, 0x82ff, 0x00c0, 0x413e, 0xd5d4,
-+      0x0040, 0x4138, 0xa1a6, 0x3fff, 0x0040, 0x4124, 0x0078, 0x413c,
-+      0xa1a6, 0x3fff, 0x0040, 0x4194, 0xa18d, 0xc000, 0x20a9, 0x0010,
-+      0x2019, 0x0001, 0xd5d4, 0x0040, 0x4147, 0x2019, 0x0010, 0x2120,
-+      0xd5d4, 0x0040, 0x414e, 0x8423, 0x0078, 0x414f, 0x8424, 0x00c8,
-+      0x415c, 0xd5d4, 0x0040, 0x4157, 0x8319, 0x0078, 0x4158, 0x8318,
-+      0x00f0, 0x4148, 0x0078, 0x4194, 0x23a8, 0x2021, 0x0001, 0x8426,
-+      0x8425, 0x00f0, 0x4160, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040,
-+      0x4174, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8,
-+      0xa5a8, 0x0010, 0x00f0, 0x4170, 0x7552, 0xa5c8, 0x29c0, 0x292c,
-+      0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000,
-+      0x7572, 0x2018, 0x2304, 0xa405, 0x201a, 0x7077, 0x0001, 0x26a0,
-+      0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0xa085, 0x0001, 0x0078, 0x419a, 0xa006, 0x0078, 0x419a, 0xa006,
-+      0x1078, 0x1332, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000,
-+      0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, 0x41aa, 0x8420, 0x8001,
-+      0x0078, 0x41a2, 0x2118, 0x84ff, 0x0040, 0x41b3, 0xa39a, 0x0010,
-+      0x8421, 0x00c0, 0x41ae, 0x2021, 0x0001, 0x83ff, 0x0040, 0x41bc,
-+      0x8423, 0x8319, 0x00c0, 0x41b8, 0xa238, 0x2704, 0xa42c, 0x00c0,
-+      0x41d4, 0xa405, 0x203a, 0x7152, 0xa1a0, 0x29c0, 0x242c, 0xa5ac,
-+      0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0000, 0x7572,
-+      0x7077, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa600,
-+      0x707b, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2001, 0x0002,
-+      0x1078, 0x5ae6, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x6e0f,
-+      0x7004, 0xa084, 0x4000, 0x0040, 0x41f1, 0x7003, 0x1000, 0x7003,
-+      0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0xa622, 0x2073, 0x0000,
-+      0x7840, 0x027e, 0x017e, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x017f,
-+      0xa094, 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x027f, 0x127f,
-+      0x0f7f, 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0xa8bb,
-+      0x2013, 0x0000, 0x7083, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3,
-+      0x0056, 0x60a7, 0x9575, 0x1078, 0x6e06, 0x2009, 0x07d0, 0x2011,
-+      0x41dc, 0x1078, 0x5add, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e,
-+      0x2091, 0x8000, 0x2011, 0x0003, 0x1078, 0x70e0, 0x2011, 0x0002,
-+      0x1078, 0x70ea, 0x1078, 0x6fc4, 0x037e, 0x2019, 0x0000, 0x1078,
-+      0x7058, 0x037f, 0x2009, 0x00f7, 0x1078, 0x42a1, 0x2061, 0xa8c4,
-+      0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0xa600, 0x6003, 0x0001,
-+      0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x002d,
-+      0x2011, 0x4259, 0x1078, 0x5a38, 0x127f, 0x0c7f, 0x027f, 0x017f,
-+      0x007c, 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2001, 0x0001,
-+      0x1078, 0x5ae6, 0x2071, 0x0100, 0x1078, 0x6e0f, 0x2071, 0x0140,
-+      0x7004, 0xa084, 0x4000, 0x0040, 0x4271, 0x7003, 0x1000, 0x7003,
-+      0x0000, 0x2001, 0x0001, 0x1078, 0x24e8, 0x1078, 0x4224, 0x127f,
-+      0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0xacc0, 0x2099,
-+      0xab8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0, 0x4281,
-+      0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xab00, 0x20a1,
-+      0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2099, 0xab80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
-+      0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001, 0xa62f,
-+      0x2004, 0xa005, 0x00c0, 0x42b2, 0x6030, 0xa084, 0x00ff, 0xa105,
-+      0x0078, 0x42b4, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f, 0x007c,
-+      0x017e, 0x047e, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x42cb,
-+      0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c,
-+      0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x1078,
-+      0x284f, 0x047f, 0x017f, 0x007c, 0x007e, 0x2001, 0xa60c, 0x2004,
-+      0xd09c, 0x0040, 0x42db, 0x007f, 0x007c, 0x007e, 0x017e, 0x127e,
-+      0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102,
-+      0x127f, 0x017f, 0x007f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009,
-+      0xa735, 0xa006, 0x200a, 0x8108, 0x00f0, 0x42f2, 0x157f, 0x007c,
-+      0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0xa652, 0xa006,
-+      0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x29c0,
-+      0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006,
-+      0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4,
-+      0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062,
-+      0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082,
-+      0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae,
-+      0x61a2, 0x0d7e, 0x60a4, 0xa06d, 0x0040, 0x4338, 0x1078, 0x13a4,
-+      0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0040, 0x4340, 0x1078, 0x13a4,
-+      0x60ab, 0x0000, 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c,
-+      0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f,
-+      0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48,
-+      0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x4424, 0xa18c, 0xff00,
-+      0x810f, 0xa182, 0x00ff, 0x00c8, 0x442a, 0x2001, 0xa60c, 0x2004,
-+      0xa084, 0x0003, 0x0040, 0x4385, 0x2001, 0xa60c, 0x2004, 0xd084,
-+      0x00c0, 0x4405, 0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4405,
-+      0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x4405, 0x6000,
-+      0xd0c4, 0x0040, 0x4405, 0x0078, 0x4392, 0xa188, 0xa735, 0x2104,
-+      0xa065, 0x0040, 0x43e9, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006,
-+      0x00c0, 0x43ef, 0x60a4, 0xa00d, 0x0040, 0x439a, 0x1078, 0x4817,
-+      0x0040, 0x43e3, 0x60a8, 0xa00d, 0x0040, 0x43b4, 0x1078, 0x486a,
-+      0x00c0, 0x43b4, 0x694c, 0xd1fc, 0x00c0, 0x43aa, 0x1078, 0x44df,
-+      0x0078, 0x43de, 0x1078, 0x4484, 0x694c, 0xd1ec, 0x00c0, 0x43de,
-+      0x1078, 0x46d6, 0x0078, 0x43de, 0x694c, 0xa184, 0xa000, 0x0040,
-+      0x43ce, 0xd1ec, 0x0040, 0x43c7, 0xd1fc, 0x0040, 0x43c3, 0x1078,
-+      0x46e7, 0x0078, 0x43ca, 0x1078, 0x46e7, 0x0078, 0x43ce, 0xd1fc,
-+      0x0040, 0x43ce, 0x1078, 0x4484, 0x0078, 0x43de, 0x6050, 0xa00d,
-+      0x0040, 0x43d9, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078,
-+      0x43de, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x5da9,
-+      0xa006, 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078,
-+      0x442e, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x442e, 0xa082,
-+      0x0006, 0x00c8, 0x4405, 0x60a0, 0xd0bc, 0x00c0, 0x4401, 0x6100,
-+      0xd1fc, 0x0040, 0x4392, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078,
-+      0x442e, 0x2001, 0x0028, 0x0078, 0x4420, 0x2009, 0xa60c, 0x210c,
-+      0xd18c, 0x0040, 0x440f, 0x2001, 0x0004, 0x0078, 0x4420, 0xd184,
-+      0x0040, 0x4416, 0x2001, 0x0004, 0x0078, 0x4420, 0x2001, 0x0029,
-+      0x6100, 0xd1fc, 0x0040, 0x4420, 0x2009, 0x1000, 0x0078, 0x442e,
-+      0x2009, 0x0000, 0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000,
-+      0x0078, 0x442e, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x127f,
-+      0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8,
-+      0x447e, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x00c8, 0x4464,
-+      0xa188, 0xa735, 0x2104, 0xa065, 0x0040, 0x4464, 0x6004, 0xa084,
-+      0x00ff, 0xa08e, 0x0006, 0x00c0, 0x446a, 0x684c, 0xd0ec, 0x0040,
-+      0x4457, 0x1078, 0x46e7, 0x1078, 0x4484, 0x0078, 0x445f, 0x1078,
-+      0x4484, 0x684c, 0xd0fc, 0x0040, 0x445f, 0x1078, 0x46d6, 0x1078,
-+      0x472f, 0xa006, 0x0078, 0x4482, 0x2001, 0x0028, 0x2009, 0x0000,
-+      0x0078, 0x4482, 0xa082, 0x0006, 0x00c8, 0x4478, 0x6100, 0xd1fc,
-+      0x0040, 0x444d, 0x2001, 0x0029, 0x2009, 0x1000, 0x0078, 0x4482,
-+      0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x4482, 0x2001, 0x0029,
-+      0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050,
-+      0xa00d, 0x0040, 0x4492, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
-+      0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078,
-+      0x4490, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x44af,
-+      0x0e7e, 0x2071, 0xa8b1, 0x7004, 0xa086, 0x0002, 0x0040, 0x44b6,
-+      0x0e7f, 0x604c, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00,
-+      0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x44ad, 0x701c, 0xac06,
-+      0x00c0, 0x44a8, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002,
-+      0x0e7f, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d,
-+      0x0040, 0x44d1, 0x6800, 0xa005, 0x00c0, 0x44cf, 0x6052, 0x604e,
-+      0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x44de, 0x6800,
-+      0xa005, 0x00c0, 0x44dc, 0x6052, 0x604e, 0xad05, 0x007c, 0x6803,
-+      0x0000, 0x6084, 0xa00d, 0x0040, 0x44e9, 0x2d00, 0x200a, 0x6086,
-+      0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x44e8, 0x127e, 0x0c7e,
-+      0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0040,
-+      0x44fc, 0xc285, 0x0078, 0x44fd, 0xc284, 0x6202, 0x027f, 0x0c7f,
-+      0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
-+      0x6204, 0x007e, 0xa086, 0x0006, 0x00c0, 0x4521, 0x609c, 0xd0ac,
-+      0x0040, 0x4521, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x4521,
-+      0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x00c0, 0x4521, 0x2011,
-+      0x0600, 0x007f, 0xa294, 0xff00, 0xa215, 0x6206, 0x007e, 0xa086,
-+      0x0006, 0x00c0, 0x4531, 0x6290, 0x82ff, 0x00c0, 0x4531, 0x1078,
-+      0x1332, 0x007f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091,
-+      0x8000, 0x6218, 0x2260, 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0,
-+      0x4553, 0x609c, 0xd0a4, 0x0040, 0x4553, 0x2001, 0xa653, 0x2004,
-+      0xd0ac, 0x00c0, 0x4553, 0xa284, 0x00ff, 0xa086, 0x0007, 0x00c0,
-+      0x4553, 0x2011, 0x0006, 0x007f, 0xa294, 0x00ff, 0x8007, 0xa215,
-+      0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
-+      0x4565, 0xa085, 0x0001, 0x0078, 0x457d, 0xa190, 0xa735, 0x2204,
-+      0xa065, 0x00c0, 0x457c, 0x017e, 0x0d7e, 0x1078, 0x1370, 0x2d60,
-+      0x0d7f, 0x017f, 0x0040, 0x4561, 0x2c00, 0x2012, 0x60a7, 0x0000,
-+      0x60ab, 0x0000, 0x1078, 0x42f8, 0xa006, 0x027f, 0x007c, 0x127e,
-+      0x2091, 0x8000, 0x027e, 0xa182, 0x00ff, 0x0048, 0x458b, 0xa085,
-+      0x0001, 0x0078, 0x45c1, 0x0d7e, 0xa190, 0xa735, 0x2204, 0xa06d,
-+      0x0040, 0x45bf, 0x2013, 0x0000, 0x0d7e, 0x0c7e, 0x2d60, 0x60a4,
-+      0xa06d, 0x0040, 0x459d, 0x1078, 0x13a4, 0x60a8, 0xa06d, 0x0040,
-+      0x45a3, 0x1078, 0x13a4, 0x0c7f, 0x0d7f, 0x0d7e, 0x0c7e, 0x68ac,
-+      0x2060, 0x8cff, 0x0040, 0x45bb, 0x600c, 0x007e, 0x6010, 0x2068,
-+      0x1078, 0x8d06, 0x0040, 0x45b6, 0x1078, 0x13b4, 0x1078, 0x772d,
-+      0x0c7f, 0x0078, 0x45a9, 0x0c7f, 0x0d7f, 0x1078, 0x13a4, 0x0d7f,
-+      0xa006, 0x027f, 0x127f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
-+      0x45cd, 0xa085, 0x0001, 0x0078, 0x45d4, 0xa188, 0xa735, 0x2104,
-+      0xa065, 0x0040, 0x45c9, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
-+      0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
-+      0x6002, 0x2069, 0xab8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
-+      0xa10a, 0x0048, 0x45ec, 0x603a, 0x6814, 0x6066, 0x2099, 0xab96,
-+      0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xab9a,
-+      0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xabae,
-+      0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
-+      0x60a0, 0xa086, 0x007e, 0x00c0, 0x4611, 0x2069, 0xab8e, 0x690c,
-+      0x616e, 0xa182, 0x0211, 0x00c8, 0x4619, 0x2009, 0x0008, 0x0078,
-+      0x4643, 0xa182, 0x0259, 0x00c8, 0x4621, 0x2009, 0x0007, 0x0078,
-+      0x4643, 0xa182, 0x02c1, 0x00c8, 0x4629, 0x2009, 0x0006, 0x0078,
-+      0x4643, 0xa182, 0x0349, 0x00c8, 0x4631, 0x2009, 0x0005, 0x0078,
-+      0x4643, 0xa182, 0x0421, 0x00c8, 0x4639, 0x2009, 0x0004, 0x0078,
-+      0x4643, 0xa182, 0x0581, 0x00c8, 0x4641, 0x2009, 0x0003, 0x0078,
-+      0x4643, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f,
-+      0x007c, 0x017e, 0x027e, 0x0e7e, 0x2071, 0xab8d, 0x2e04, 0x6896,
-+      0x2071, 0xab8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x6a00, 0x2009,
-+      0xa672, 0x210c, 0xd0bc, 0x0040, 0x4663, 0xd1ec, 0x0040, 0x4663,
-+      0xc2ad, 0x0078, 0x4664, 0xc2ac, 0xd0c4, 0x0040, 0x466d, 0xd1e4,
-+      0x0040, 0x466d, 0xc2bd, 0x0078, 0x466e, 0xc2bc, 0x6a02, 0x0e7f,
-+      0x027f, 0x017f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4,
-+      0xa06d, 0x0040, 0x4697, 0x6900, 0x81ff, 0x00c0, 0x46ab, 0x6a04,
-+      0xa282, 0x0010, 0x00c8, 0x46b0, 0xad88, 0x0004, 0x20a9, 0x0010,
-+      0x2104, 0xa086, 0xffff, 0x0040, 0x4692, 0x8108, 0x00f0, 0x4688,
-+      0x1078, 0x1332, 0x260a, 0x8210, 0x6a06, 0x0078, 0x46ab, 0x1078,
-+      0x138b, 0x0040, 0x46b0, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88,
-+      0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x46a3,
-+      0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c,
-+      0xa006, 0x0078, 0x46ad, 0x127e, 0x2091, 0x8000, 0x0d7e, 0x60a4,
-+      0xa00d, 0x0040, 0x46d3, 0x2168, 0x6800, 0xa005, 0x00c0, 0x46cf,
-+      0x1078, 0x4817, 0x00c0, 0x46d3, 0x200b, 0xffff, 0x6804, 0xa08a,
-+      0x0002, 0x0048, 0x46cf, 0x8001, 0x6806, 0x0078, 0x46d3, 0x1078,
-+      0x13a4, 0x60a7, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x487f, 0x0078, 0x46df, 0x1078, 0x4484, 0x1078,
-+      0x4775, 0x00c0, 0x46dd, 0x1078, 0x472f, 0x127f, 0x007c, 0x0d7e,
-+      0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d, 0x0040, 0x470b, 0x6950,
-+      0x81ff, 0x00c0, 0x471f, 0x6a54, 0xa282, 0x0010, 0x00c8, 0x472c,
-+      0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040,
-+      0x4706, 0x8108, 0x00f0, 0x46fc, 0x1078, 0x1332, 0x260a, 0x8210,
-+      0x6a56, 0x0078, 0x471f, 0x1078, 0x138b, 0x0040, 0x472c, 0x2d00,
-+      0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b,
-+      0xffff, 0x8108, 0x00f0, 0x4717, 0x6857, 0x0001, 0x6e62, 0x0078,
-+      0x4723, 0x1078, 0x44df, 0x1078, 0x4739, 0x00c0, 0x4721, 0xa085,
-+      0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x4729, 0x127e,
-+      0x2091, 0x8000, 0x1078, 0x5da9, 0x127f, 0x007c, 0xa01e, 0x0078,
-+      0x473b, 0x2019, 0x0001, 0xa00e, 0x127e, 0x2091, 0x8000, 0x604c,
-+      0x2068, 0x6000, 0xd0dc, 0x00c0, 0x4759, 0x8dff, 0x0040, 0x4770,
-+      0x83ff, 0x0040, 0x4751, 0x6848, 0xa606, 0x0040, 0x475e, 0x0078,
-+      0x4759, 0x683c, 0xa406, 0x00c0, 0x4759, 0x6840, 0xa506, 0x0040,
-+      0x475e, 0x2d08, 0x6800, 0x2068, 0x0078, 0x4745, 0x1078, 0x7233,
-+      0x6a00, 0x604c, 0xad06, 0x00c0, 0x4768, 0x624e, 0x0078, 0x476b,
-+      0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x4770, 0x6152, 0x8dff,
-+      0x127f, 0x007c, 0xa01e, 0x0078, 0x4777, 0x2019, 0x0001, 0xa00e,
-+      0x6080, 0x2068, 0x8dff, 0x0040, 0x47a3, 0x83ff, 0x0040, 0x4786,
-+      0x6848, 0xa606, 0x0040, 0x4793, 0x0078, 0x478e, 0x683c, 0xa406,
-+      0x00c0, 0x478e, 0x6840, 0xa506, 0x0040, 0x4793, 0x2d08, 0x6800,
-+      0x2068, 0x0078, 0x477a, 0x6a00, 0x6080, 0xad06, 0x00c0, 0x479b,
-+      0x6282, 0x0078, 0x479e, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0,
-+      0x47a3, 0x6186, 0x8dff, 0x007c, 0xa016, 0x1078, 0x4810, 0x00c0,
-+      0x47ab, 0x2011, 0x0001, 0x1078, 0x4863, 0x00c0, 0x47b1, 0xa295,
-+      0x0002, 0x007c, 0x1078, 0x489b, 0x0040, 0x47ba, 0x1078, 0x8dca,
-+      0x0078, 0x47bc, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040,
-+      0x47c5, 0x1078, 0x8d62, 0x0078, 0x47c7, 0xa085, 0x0001, 0x007c,
-+      0x1078, 0x489b, 0x0040, 0x47d0, 0x1078, 0x8dac, 0x0078, 0x47d2,
-+      0xa085, 0x0001, 0x007c, 0x1078, 0x489b, 0x0040, 0x47db, 0x1078,
-+      0x8d7e, 0x0078, 0x47dd, 0xa085, 0x0001, 0x007c, 0x1078, 0x489b,
-+      0x0040, 0x47e6, 0x1078, 0x8de8, 0x0078, 0x47e8, 0xa085, 0x0001,
-+      0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d,
-+      0x0040, 0x4808, 0x6800, 0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x1078, 0x8f7d, 0x007e, 0x6000, 0xd0fc, 0x0040, 0x4802,
-+      0x1078, 0xa4ed, 0x007f, 0x1078, 0x4a73, 0x007f, 0x0078, 0x47ef,
-+      0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c,
-+      0x60a4, 0xa00d, 0x00c0, 0x4817, 0xa085, 0x0001, 0x007c, 0x0e7e,
-+      0x2170, 0x7000, 0xa005, 0x00c0, 0x482c, 0x20a9, 0x0010, 0xae88,
-+      0x0004, 0x2104, 0xa606, 0x0040, 0x482c, 0x8108, 0x00f0, 0x4821,
-+      0xa085, 0x0001, 0x0078, 0x482d, 0xa006, 0x0e7f, 0x007c, 0x0d7e,
-+      0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0, 0x483d, 0x1078,
-+      0x138b, 0x0040, 0x484f, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807,
-+      0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
-+      0x00f0, 0x4845, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
-+      0x0078, 0x484c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d,
-+      0x0040, 0x4860, 0x60a7, 0x0000, 0x1078, 0x13a4, 0xa085, 0x0001,
-+      0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0, 0x486a, 0xa085,
-+      0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005, 0x00c0, 0x487d,
-+      0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0040, 0x487d,
-+      0x8108, 0x00f0, 0x4874, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x127e,
-+      0x2091, 0x8000, 0x1078, 0x4863, 0x00c0, 0x4899, 0x200b, 0xffff,
-+      0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0048, 0x4894,
-+      0x8001, 0x6856, 0x0078, 0x4898, 0x1078, 0x13a4, 0x60ab, 0x0000,
-+      0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x71b0,
-+      0x81ff, 0x00c0, 0x48b9, 0x71cc, 0xd19c, 0x0040, 0x48b9, 0x2001,
-+      0x007e, 0xa080, 0xa735, 0x2004, 0xa07d, 0x0040, 0x48b9, 0x7804,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x48b9, 0x7800, 0xc0ed,
-+      0x7802, 0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48df, 0x157e,
-+      0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4,
-+      0x00c0, 0x48d9, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004,
-+      0x0040, 0x48d6, 0xa086, 0x0006, 0x00c0, 0x48d9, 0x6000, 0xc0ed,
-+      0x6002, 0x017f, 0x8108, 0x00f0, 0x48c5, 0x0c7f, 0x157f, 0x1078,
-+      0x4967, 0x0040, 0x48e8, 0x2001, 0xa8a1, 0x200c, 0x0078, 0x48f0,
-+      0x2079, 0xa652, 0x7804, 0xd0a4, 0x0040, 0x48f4, 0x2009, 0x07d0,
-+      0x2011, 0x48f6, 0x1078, 0x5add, 0x0f7f, 0x007c, 0x2011, 0x48f6,
-+      0x1078, 0x5a45, 0x1078, 0x4967, 0x0040, 0x491e, 0x2001, 0xa7b3,
-+      0x2004, 0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xa653,
-+      0x2004, 0xd0a4, 0x0040, 0x4912, 0x2009, 0x07d0, 0x2011, 0x48f6,
-+      0x1078, 0x5add, 0x0e7e, 0x2071, 0xa600, 0x706f, 0x0000, 0x7073,
-+      0x0000, 0x1078, 0x2677, 0x0e7f, 0x0078, 0x4956, 0x157e, 0x0c7e,
-+      0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x45c4, 0x00c0,
-+      0x4950, 0x6000, 0xd0ec, 0x0040, 0x4950, 0x047e, 0x62a0, 0xa294,
-+      0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6000,
-+      0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700,
-+      0x6006, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e, 0x2039, 0x0000,
-+      0x1078, 0x5e0a, 0x2009, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x047f,
-+      0x017f, 0x8108, 0x00f0, 0x4924, 0x0c7f, 0x157f, 0x007c, 0x0c7e,
-+      0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x7818,
-+      0x2004, 0xd0ac, 0x007c, 0x7818, 0x2004, 0xd0bc, 0x007c, 0x0f7e,
-+      0x2001, 0xa7b3, 0x2004, 0xa07d, 0x0040, 0x4970, 0x7800, 0xd0ec,
-+      0x0f7f, 0x007c, 0x127e, 0x027e, 0x2091, 0x8000, 0x007e, 0x62a0,
-+      0xa290, 0xa735, 0x2204, 0xac06, 0x10c0, 0x1332, 0x007f, 0x6200,
-+      0xa005, 0x0040, 0x4986, 0xc2fd, 0x0078, 0x4987, 0xc2fc, 0x6202,
-+      0x027f, 0x127f, 0x007c, 0x2011, 0xa633, 0x2204, 0xd0cc, 0x0040,
-+      0x4998, 0x2001, 0xa89f, 0x200c, 0x2011, 0x4999, 0x1078, 0x5add,
-+      0x007c, 0x2011, 0x4999, 0x1078, 0x5a45, 0x2011, 0xa633, 0x2204,
-+      0xc0cc, 0x2012, 0x007c, 0x2071, 0xa714, 0x7003, 0x0001, 0x7007,
-+      0x0000, 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f,
-+      0x0000, 0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b,
-+      0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xa87d, 0x7003,
-+      0xa714, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xa85d, 0x7013,
-+      0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x007c, 0x017e, 0x0e7e,
-+      0x2071, 0xa835, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001,
-+      0xa653, 0x2004, 0xd0fc, 0x00c0, 0x49e8, 0x2001, 0xa653, 0x2004,
-+      0xa00e, 0xd09c, 0x0040, 0x49e5, 0x8108, 0x7102, 0x0078, 0x4a3b,
-+      0x2001, 0xa672, 0x200c, 0xa184, 0x000f, 0x2009, 0xa673, 0x210c,
-+      0x0079, 0x49f2, 0x49dd, 0x4a13, 0x4a1b, 0x4a26, 0x4a2c, 0x49dd,
-+      0x49dd, 0x49dd, 0x4a02, 0x49dd, 0x49dd, 0x49dd, 0x49dd, 0x49dd,
-+      0x49dd, 0x49dd, 0x7003, 0x0004, 0x137e, 0x147e, 0x157e, 0x2099,
-+      0xa676, 0x20a1, 0xa886, 0x20a9, 0x0004, 0x53a3, 0x157f, 0x147f,
-+      0x137f, 0x0078, 0x4a3b, 0x708f, 0x0005, 0x7007, 0x0122, 0x2001,
-+      0x0002, 0x0078, 0x4a21, 0x708f, 0x0002, 0x7007, 0x0121, 0x2001,
-+      0x0003, 0x7002, 0x7097, 0x0001, 0x0078, 0x4a38, 0x7007, 0x0122,
-+      0x2001, 0x0002, 0x0078, 0x4a30, 0x7007, 0x0121, 0x2001, 0x0003,
-+      0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
-+      0xa184, 0x00ff, 0x7092, 0x0e7f, 0x017f, 0x007c, 0x0e7e, 0x2071,
-+      0xa714, 0x684c, 0xa005, 0x00c0, 0x4a4c, 0x7028, 0xc085, 0x702a,
-+      0xa085, 0x0001, 0x0078, 0x4a71, 0x6a60, 0x7236, 0x6b64, 0x733a,
-+      0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e,
-+      0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007,
-+      0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100,
-+      0xa319, 0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001,
-+      0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x027e, 0x6838, 0xd0fc, 0x00c0,
-+      0x4ac9, 0x6804, 0xa00d, 0x0040, 0x4a8f, 0x0d7e, 0x2071, 0xa600,
-+      0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-+      0x00c0, 0x4a82, 0x702e, 0x70ac, 0xa200, 0x70ae, 0x0d7f, 0x2071,
-+      0xa714, 0x701c, 0xa005, 0x00c0, 0x4adb, 0x0068, 0x4ad9, 0x2071,
-+      0xa835, 0x7200, 0x82ff, 0x0040, 0x4ad9, 0x6934, 0xa186, 0x0103,
-+      0x00c0, 0x4aec, 0x6948, 0x6844, 0xa105, 0x00c0, 0x4acc, 0x2009,
-+      0x8020, 0x2200, 0x0079, 0x4aac, 0x4ad9, 0x4ab1, 0x4b09, 0x4b17,
-+      0x4ad9, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ad9, 0x7122,
-+      0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x2071, 0xa600, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000,
-+      0x70ae, 0x027f, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100, 0x00c0,
-+      0x4ad9, 0x6868, 0xa005, 0x00c0, 0x4ad9, 0x2009, 0x8020, 0x0078,
-+      0x4aa9, 0x2071, 0xa714, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000,
-+      0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x4ae9, 0x6902, 0x0078,
-+      0x4aea, 0x711e, 0x0078, 0x4ac9, 0xa18c, 0x00ff, 0xa186, 0x0017,
-+      0x0040, 0x4afa, 0xa186, 0x001e, 0x0040, 0x4afa, 0xa18e, 0x001f,
-+      0x00c0, 0x4ad9, 0x684c, 0xd0cc, 0x0040, 0x4ad9, 0x6850, 0xa084,
-+      0x00ff, 0xa086, 0x0001, 0x00c0, 0x4ad9, 0x2009, 0x8021, 0x0078,
-+      0x4aa9, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4ad9, 0x7186,
-+      0xae90, 0x0003, 0xa210, 0x683c, 0x2012, 0x0078, 0x4b27, 0x7084,
-+      0x8008, 0xa092, 0x000f, 0x00c8, 0x4ad9, 0x7186, 0xae90, 0x0003,
-+      0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7088,
-+      0xa10a, 0x0048, 0x4ac0, 0x718c, 0x7084, 0xa10a, 0x0048, 0x4ac0,
-+      0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4ac0, 0x2071, 0xa835,
-+      0x7000, 0xa086, 0x0002, 0x00c0, 0x4b47, 0x1078, 0x4dc3, 0x2071,
-+      0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4ac0, 0x1078,
-+      0x4dee, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
-+      0x4ac0, 0x007e, 0x684c, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c,
-+      0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0xa084,
-+      0x00ff, 0x684e, 0x007f, 0x684a, 0x6952, 0x007c, 0x2071, 0xa714,
-+      0x7004, 0x0079, 0x4b6b, 0x4b75, 0x4b86, 0x4d94, 0x4d95, 0x4dbc,
-+      0x4dc2, 0x4b76, 0x4d82, 0x4d23, 0x4da5, 0x007c, 0x127e, 0x2091,
-+      0x8000, 0x0068, 0x4b85, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091,
-+      0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x127f, 0x2069, 0xa8c4,
-+      0x6844, 0xa005, 0x0050, 0x4bae, 0x00c0, 0x4bae, 0x127e, 0x2091,
-+      0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xa720, 0x2004, 0xa10a,
-+      0x0040, 0x4ba9, 0x0068, 0x4bad, 0x2069, 0x0000, 0x6818, 0xd084,
-+      0x00c0, 0x4bad, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091,
-+      0x4080, 0x2069, 0xa8c4, 0x6847, 0xffff, 0x127f, 0x2069, 0xa600,
-+      0x6848, 0x6964, 0xa102, 0x2069, 0xa835, 0x688a, 0x6984, 0x701c,
-+      0xa06d, 0x0040, 0x4bc0, 0x81ff, 0x0040, 0x4c08, 0x0078, 0x4bd6,
-+      0x81ff, 0x0040, 0x4cda, 0x2071, 0xa835, 0x7184, 0x7088, 0xa10a,
-+      0x00c8, 0x4bd6, 0x7190, 0x2071, 0xa8c4, 0x7040, 0xa005, 0x0040,
-+      0x4bd6, 0x00d0, 0x4cda, 0x7142, 0x0078, 0x4cda, 0x2071, 0xa835,
-+      0x718c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0048, 0x4cf7,
-+      0x0068, 0x4c8c, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x4c8c,
-+      0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042, 0x2071, 0xa835, 0x7000,
-+      0xa086, 0x0002, 0x00c0, 0x4bfe, 0x1078, 0x4dc3, 0x2071, 0x0000,
-+      0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c, 0x1078, 0x4dee,
-+      0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x4c8c,
-+      0x2071, 0xa835, 0x7000, 0xa005, 0x0040, 0x4cb9, 0x6934, 0xa186,
-+      0x0103, 0x00c0, 0x4c8f, 0x684c, 0xd0bc, 0x00c0, 0x4cb9, 0x6948,
-+      0x6844, 0xa105, 0x00c0, 0x4cac, 0x2009, 0x8020, 0x2071, 0xa835,
-+      0x7000, 0x0079, 0x4c23, 0x4cb9, 0x4c71, 0x4c49, 0x4c5b, 0x4c28,
-+      0x137e, 0x147e, 0x157e, 0x2099, 0xa676, 0x20a1, 0xa886, 0x20a9,
-+      0x0004, 0x53a3, 0x157f, 0x147f, 0x137f, 0x2071, 0xa87d, 0xad80,
-+      0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
-+      0x2e10, 0x1078, 0x13db, 0x2071, 0xa714, 0x7007, 0x0009, 0x0078,
-+      0x4cda, 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x4cda, 0xae90,
-+      0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078,
-+      0x4e4c, 0x0078, 0x4cda, 0x7084, 0x8008, 0xa092, 0x000f, 0x00c8,
-+      0x4cda, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
-+      0x6840, 0x2012, 0x7186, 0x2071, 0xa714, 0x1078, 0x4e4c, 0x0078,
-+      0x4cda, 0x127e, 0x2091, 0x8000, 0x0068, 0x4c8c, 0x2071, 0x0000,
-+      0x7018, 0xd084, 0x00c0, 0x4c8c, 0x7122, 0x683c, 0x7026, 0x6840,
-+      0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x2071, 0xa714,
-+      0x1078, 0x4e4c, 0x0078, 0x4cda, 0x127f, 0x0078, 0x4cda, 0xa18c,
-+      0x00ff, 0xa186, 0x0017, 0x0040, 0x4c9d, 0xa186, 0x001e, 0x0040,
-+      0x4c9d, 0xa18e, 0x001f, 0x00c0, 0x4cb9, 0x684c, 0xd0cc, 0x0040,
-+      0x4cb9, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x4cb9,
-+      0x2009, 0x8021, 0x0078, 0x4c1e, 0x6844, 0xa086, 0x0100, 0x00c0,
-+      0x4cb9, 0x6868, 0xa005, 0x00c0, 0x4cb9, 0x2009, 0x8020, 0x0078,
-+      0x4c1e, 0x2071, 0xa714, 0x1078, 0x4e60, 0x0040, 0x4cda, 0x2071,
-+      0xa714, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
-+      0x00c0, 0x4cd1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x4cd1,
-+      0x710e, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086, 0x0100,
-+      0x0040, 0x4d95, 0x127e, 0x2091, 0x8000, 0x2071, 0xa714, 0x7008,
-+      0xa086, 0x0001, 0x00c0, 0x4cf5, 0x0068, 0x4cf5, 0x2009, 0x000d,
-+      0x7030, 0x200a, 0x2091, 0x4080, 0x700b, 0x0000, 0x7004, 0xa086,
-+      0x0006, 0x00c0, 0x4cf5, 0x7007, 0x0001, 0x127f, 0x007c, 0x2071,
-+      0xa714, 0x1078, 0x4e60, 0x0040, 0x4d20, 0x2071, 0xa835, 0x7084,
-+      0x700a, 0x20a9, 0x0020, 0x2099, 0xa836, 0x20a1, 0xa85d, 0x53a3,
-+      0x7087, 0x0000, 0x2071, 0xa714, 0x2069, 0xa87d, 0x706c, 0x6826,
-+      0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832, 0x2d10, 0x1078,
-+      0x13db, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071, 0xa8c4, 0x7042,
-+      0x127f, 0x0078, 0x4cda, 0x2069, 0xa87d, 0x6808, 0xa08e, 0x0000,
-+      0x0040, 0x4d81, 0xa08e, 0x0200, 0x0040, 0x4d7f, 0xa08e, 0x0100,
-+      0x00c0, 0x4d81, 0x127e, 0x2091, 0x8000, 0x0068, 0x4d7c, 0x2069,
-+      0x0000, 0x6818, 0xd084, 0x00c0, 0x4d7c, 0x702c, 0x7130, 0x8108,
-+      0xa102, 0x0048, 0x4d4a, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
-+      0x0078, 0x4d54, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x4d54,
-+      0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000,
-+      0x2001, 0xa85a, 0x2004, 0xa005, 0x00c0, 0x4d73, 0x6934, 0x2069,
-+      0xa835, 0x689c, 0x699e, 0x2069, 0xa8c4, 0xa102, 0x00c0, 0x4d6c,
-+      0x6844, 0xa005, 0x00d0, 0x4d7a, 0x2001, 0xa85b, 0x200c, 0x810d,
-+      0x6946, 0x0078, 0x4d7a, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001,
-+      0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x0078, 0x4d81, 0x7007,
-+      0x0005, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4d93, 0x1078, 0x4e60,
-+      0x0040, 0x4d93, 0x7007, 0x0003, 0x1078, 0x4e80, 0x7050, 0xa086,
-+      0x0100, 0x0040, 0x4d95, 0x007c, 0x007c, 0x7050, 0xa09e, 0x0100,
-+      0x00c0, 0x4d9e, 0x7007, 0x0004, 0x0078, 0x4dbc, 0xa086, 0x0200,
-+      0x00c0, 0x4da4, 0x7007, 0x0005, 0x007c, 0x2001, 0xa87f, 0x2004,
-+      0xa08e, 0x0100, 0x00c0, 0x4db1, 0x7007, 0x0001, 0x1078, 0x4e4c,
-+      0x007c, 0xa08e, 0x0000, 0x0040, 0x4db0, 0xa08e, 0x0200, 0x00c0,
-+      0x4db0, 0x7007, 0x0005, 0x007c, 0x1078, 0x4e16, 0x7006, 0x1078,
-+      0x4e4c, 0x007c, 0x007c, 0x0e7e, 0x157e, 0x2071, 0xa835, 0x7184,
-+      0x81ff, 0x0040, 0x4deb, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071,
-+      0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x0070, 0x4de8, 0x2014,
-+      0x722a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x722e, 0x8000, 0x0070,
-+      0x4de8, 0x2014, 0x723a, 0x8000, 0x0070, 0x4de8, 0x2014, 0x723e,
-+      0xa180, 0x8030, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x0e7e, 0x157e,
-+      0x2071, 0xa835, 0x7184, 0x81ff, 0x0040, 0x4e13, 0xa006, 0x7086,
-+      0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000,
-+      0x2014, 0x722a, 0x8000, 0x0070, 0x4e0c, 0x2014, 0x723a, 0x8000,
-+      0x2014, 0x723e, 0x0078, 0x4e10, 0x2001, 0x8020, 0x0078, 0x4e12,
-+      0x2001, 0x8042, 0x7022, 0x157f, 0x0e7f, 0x007c, 0x702c, 0x7130,
-+      0x8108, 0xa102, 0x0048, 0x4e23, 0xa00e, 0x7034, 0x706e, 0x7038,
-+      0x7072, 0x0078, 0x4e2d, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8,
-+      0x4e2d, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001,
-+      0x700e, 0x00c0, 0x4e43, 0x127e, 0x2091, 0x8000, 0x0068, 0x4e46,
-+      0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
-+      0x0000, 0x127f, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006,
-+      0x700b, 0x0001, 0x127f, 0x007c, 0x701c, 0xa06d, 0x0040, 0x4e5f,
-+      0x127e, 0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
-+      0xa005, 0x00c0, 0x4e5c, 0x701a, 0x127f, 0x1078, 0x13a4, 0x007c,
-+      0x2019, 0x000d, 0x2304, 0x230c, 0xa10e, 0x0040, 0x4e6f, 0x2304,
-+      0x230c, 0xa10e, 0x0040, 0x4e6f, 0xa006, 0x0078, 0x4e7f, 0x732c,
-+      0x8319, 0x7130, 0xa102, 0x00c0, 0x4e79, 0x2300, 0xa005, 0x0078,
-+      0x4e7f, 0x0048, 0x4e7e, 0xa302, 0x0078, 0x4e7f, 0x8002, 0x007c,
-+      0x2d00, 0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x127e,
-+      0x2091, 0x8000, 0x2009, 0xa8d6, 0x2104, 0xc08d, 0x200a, 0x127f,
-+      0x1078, 0x13f9, 0x007c, 0x2071, 0xa6e2, 0x7003, 0x0000, 0x7007,
-+      0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
-+      0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
-+      0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071,
-+      0xa6e2, 0x6848, 0xa005, 0x00c0, 0x4ebc, 0x7028, 0xc085, 0x702a,
-+      0xa085, 0x0001, 0x0078, 0x4ee1, 0x6a50, 0x7236, 0x6b54, 0x733a,
-+      0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e,
-+      0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006,
-+      0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272,
-+      0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000,
-+      0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071, 0xa6e2, 0x7004, 0x1079,
-+      0x4f41, 0x700c, 0x0079, 0x4eec, 0x4ef1, 0x4ee6, 0x4ee6, 0x4ee6,
-+      0x4ee6, 0x007c, 0x700c, 0x0079, 0x4ef5, 0x4efa, 0x4f3f, 0x4f3f,
-+      0x4f40, 0x4f40, 0x7830, 0x7930, 0xa106, 0x0040, 0x4f04, 0x7830,
-+      0x7930, 0xa106, 0x00c0, 0x4f2a, 0x7030, 0xa10a, 0x0040, 0x4f2a,
-+      0x00c8, 0x4f0c, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x4f2b,
-+      0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00, 0x705a, 0x7063, 0x0040,
-+      0x2001, 0x0003, 0x7057, 0x0000, 0x127e, 0x007e, 0x2091, 0x8000,
-+      0x2009, 0xa8d6, 0x2104, 0xc085, 0x200a, 0x007f, 0x700e, 0x127f,
-+      0x1078, 0x13f9, 0x007c, 0x1078, 0x1370, 0x0040, 0x4f2a, 0x2d00,
-+      0x705a, 0x1078, 0x1370, 0x00c0, 0x4f37, 0x0078, 0x4f16, 0x2d00,
-+      0x7086, 0x7063, 0x0080, 0x2001, 0x0004, 0x0078, 0x4f1a, 0x007c,
-+      0x007c, 0x4f52, 0x4f53, 0x4f8a, 0x4f8b, 0x4f3f, 0x4fc1, 0x4fc6,
-+      0x4ffd, 0x4ffe, 0x5019, 0x501a, 0x501b, 0x501c, 0x501d, 0x501e,
-+      0x509e, 0x50c8, 0x007c, 0x700c, 0x0079, 0x4f56, 0x4f5b, 0x4f5e,
-+      0x4f6e, 0x4f89, 0x4f89, 0x1078, 0x4ef2, 0x007c, 0x127e, 0x8001,
-+      0x700e, 0x7058, 0x007e, 0x1078, 0x5464, 0x0040, 0x4f6b, 0x2091,
-+      0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078, 0x4f77, 0x127e, 0x8001,
-+      0x700e, 0x1078, 0x5464, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803,
-+      0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020,
-+      0x00c8, 0x4f86, 0x1079, 0x4fa1, 0x127f, 0x007c, 0x127f, 0x1078,
-+      0x501f, 0x007c, 0x007c, 0x007c, 0x0e7e, 0x2071, 0xa6e2, 0x700c,
-+      0x0079, 0x4f92, 0x4f97, 0x4f97, 0x4f97, 0x4f99, 0x4f9d, 0x0e7f,
-+      0x007c, 0x700f, 0x0001, 0x0078, 0x4f9f, 0x700f, 0x0002, 0x0e7f,
-+      0x007c, 0x501f, 0x501f, 0x503b, 0x501f, 0x5171, 0x501f, 0x501f,
-+      0x501f, 0x501f, 0x501f, 0x503b, 0x51bb, 0x5208, 0x5261, 0x5277,
-+      0x501f, 0x501f, 0x5057, 0x503b, 0x501f, 0x501f, 0x5078, 0x5338,
-+      0x5356, 0x501f, 0x5057, 0x501f, 0x501f, 0x501f, 0x501f, 0x506d,
-+      0x5356, 0x7020, 0x2068, 0x1078, 0x13a4, 0x007c, 0x700c, 0x0079,
-+      0x4fc9, 0x4fce, 0x4fd1, 0x4fe1, 0x4ffc, 0x4ffc, 0x1078, 0x4ef2,
-+      0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x5464,
-+      0x0040, 0x4fde, 0x2091, 0x8000, 0x1078, 0x4ef2, 0x0d7f, 0x0078,
-+      0x4fea, 0x127e, 0x8001, 0x700e, 0x1078, 0x5464, 0x7058, 0x2068,
-+      0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
-+      0x00ff, 0xa08a, 0x001a, 0x00c8, 0x4ff9, 0x1079, 0x4fff, 0x127f,
-+      0x007c, 0x127f, 0x1078, 0x501f, 0x007c, 0x007c, 0x007c, 0x501f,
-+      0x503b, 0x515b, 0x501f, 0x503b, 0x501f, 0x503b, 0x503b, 0x501f,
-+      0x503b, 0x515b, 0x503b, 0x503b, 0x503b, 0x503b, 0x503b, 0x501f,
-+      0x503b, 0x515b, 0x501f, 0x501f, 0x503b, 0x501f, 0x501f, 0x501f,
-+      0x503b, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x7007,
-+      0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838,
-+      0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078,
-+      0x4a73, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
-+      0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f,
-+      0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a,
-+      0x127e, 0x2091, 0x8000, 0x1078, 0x4a73, 0x127f, 0x007c, 0x6834,
-+      0x8007, 0xa084, 0x00ff, 0x0040, 0x502d, 0x8001, 0x00c0, 0x5064,
-+      0x7007, 0x0001, 0x0078, 0x513a, 0x7007, 0x0006, 0x7012, 0x2d00,
-+      0x7016, 0x701a, 0x704b, 0x513a, 0x007c, 0x684c, 0xa084, 0x00c0,
-+      0xa086, 0x00c0, 0x00c0, 0x5078, 0x7007, 0x0001, 0x0078, 0x5373,
-+      0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
-+      0x20a1, 0xa70d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
-+      0x5049, 0x6884, 0xa08a, 0x0002, 0x00c8, 0x5049, 0x82ff, 0x00c0,
-+      0x509a, 0x6888, 0x698c, 0xa105, 0x0040, 0x509a, 0x2001, 0x510a,
-+      0x0078, 0x509d, 0xa280, 0x5100, 0x2004, 0x70c6, 0x7010, 0xa015,
-+      0x0040, 0x50e8, 0x1078, 0x1370, 0x00c0, 0x50a9, 0x7007, 0x000f,
-+      0x007c, 0x2d00, 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004,
-+      0xad00, 0x7096, 0x6008, 0xa20a, 0x00c8, 0x50b8, 0xa00e, 0x2200,
-+      0x7112, 0x620c, 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x50c1,
-+      0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x13db,
-+      0x7090, 0xa08e, 0x0100, 0x0040, 0x50dc, 0xa086, 0x0200, 0x0040,
-+      0x50d4, 0x7007, 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x13a4,
-+      0x7014, 0x2068, 0x0078, 0x5049, 0x7020, 0x2068, 0x7018, 0x6802,
-+      0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x509e,
-+      0x7014, 0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x00c0, 0x50f7,
-+      0x6888, 0x698c, 0xa105, 0x0040, 0x50f7, 0x1078, 0x510e, 0x6834,
-+      0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x5373, 0x0078, 0x513a,
-+      0x5102, 0x5106, 0x0002, 0x0011, 0x0007, 0x0004, 0x000a, 0x000f,
-+      0x0005, 0x0006, 0x000a, 0x0011, 0x0005, 0x0004, 0x0f7e, 0x0e7e,
-+      0x0c7e, 0x077e, 0x067e, 0x6f88, 0x6e8c, 0x6804, 0x2060, 0xacf0,
-+      0x0021, 0xacf8, 0x0027, 0x2009, 0x0005, 0x700c, 0x7816, 0x7008,
-+      0x7812, 0x7004, 0x7806, 0x7000, 0x7802, 0x7e0e, 0x7f0a, 0x8109,
-+      0x0040, 0x5130, 0xaef2, 0x0004, 0xaffa, 0x0006, 0x0078, 0x511d,
-+      0x6004, 0xa065, 0x00c0, 0x5117, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
-+      0x0f7f, 0x007c, 0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x5155,
-+      0x6838, 0xa084, 0x00ff, 0x683a, 0x1078, 0x4353, 0x00c0, 0x5149,
-+      0x007c, 0x1078, 0x4b51, 0x127e, 0x2091, 0x8000, 0x1078, 0x8f7d,
-+      0x1078, 0x4a73, 0x127f, 0x0078, 0x5148, 0x2001, 0x0028, 0x2009,
-+      0x0000, 0x0078, 0x5149, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
-+      0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x516a, 0x7007, 0x0006,
-+      0x0078, 0x5170, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
-+      0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
-+      0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x519a,
-+      0x2009, 0x0000, 0x20a9, 0x00ff, 0xa096, 0x0002, 0x0040, 0x519a,
-+      0xa005, 0x00c0, 0x51ad, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
-+      0x45c4, 0x00c0, 0x51ad, 0x067e, 0x6e50, 0x1078, 0x46b3, 0x067f,
-+      0x0078, 0x51ad, 0x047e, 0x2011, 0xa60c, 0x2224, 0xc484, 0xc48c,
-+      0x2412, 0x047f, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x51a9, 0x1078,
-+      0x4852, 0x8108, 0x00f0, 0x51a3, 0x0c7f, 0x684c, 0xd084, 0x00c0,
-+      0x51b4, 0x1078, 0x13a4, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
-+      0x4a73, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
-+      0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x51ff, 0x2061, 0xa933,
-+      0x6100, 0xd184, 0x0040, 0x51df, 0x6858, 0xa084, 0x00ff, 0x00c0,
-+      0x5202, 0x6000, 0xd084, 0x0040, 0x51ff, 0x6004, 0xa005, 0x00c0,
-+      0x5205, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x51fc, 0x2011,
-+      0x0001, 0x6860, 0xa005, 0x00c0, 0x51e7, 0x2001, 0x001e, 0x8000,
-+      0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x6006, 0x6858,
-+      0x8007, 0xa084, 0x00ff, 0x0040, 0x51ff, 0x600a, 0x6858, 0x8000,
-+      0x00c0, 0x51fb, 0xc28d, 0x6202, 0x127f, 0x0078, 0x5453, 0x127f,
-+      0x0078, 0x544b, 0x127f, 0x0078, 0x5443, 0x127f, 0x0078, 0x5447,
-+      0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xa653, 0x2004,
-+      0xd0a4, 0x0040, 0x525e, 0x2061, 0xa933, 0x6000, 0xd084, 0x0040,
-+      0x525e, 0x6204, 0x6308, 0xd08c, 0x00c0, 0x5250, 0x6c48, 0xa484,
-+      0x0003, 0x0040, 0x5236, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0,
-+      0x522f, 0x2100, 0xa210, 0x0048, 0x525b, 0x0078, 0x5236, 0x8001,
-+      0x00c0, 0x525b, 0x2100, 0xa212, 0x0048, 0x525b, 0xa484, 0x000c,
-+      0x0040, 0x5250, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004,
-+      0x00c0, 0x5248, 0x2100, 0xa318, 0x0048, 0x525b, 0x0078, 0x5250,
-+      0xa082, 0x0004, 0x00c0, 0x525b, 0x2100, 0xa31a, 0x0048, 0x525b,
-+      0x6860, 0xa005, 0x0040, 0x5256, 0x8000, 0x6016, 0x6206, 0x630a,
-+      0x127f, 0x0078, 0x5453, 0x127f, 0x0078, 0x544f, 0x127f, 0x0078,
-+      0x544b, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0xa933,
-+      0x6300, 0xd38c, 0x00c0, 0x5271, 0x6308, 0x8318, 0x0048, 0x5274,
-+      0x630a, 0x127f, 0x0078, 0x5461, 0x127f, 0x0078, 0x544f, 0x127e,
-+      0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
-+      0x528b, 0x0c7e, 0x2061, 0xa933, 0x6000, 0xa084, 0xfcff, 0x6002,
-+      0x0c7f, 0x0078, 0x52ba, 0x6858, 0xa005, 0x0040, 0x52d1, 0x685c,
-+      0xa065, 0x0040, 0x52cd, 0x2001, 0xa62f, 0x2004, 0xa005, 0x0040,
-+      0x529d, 0x1078, 0x8ec6, 0x0078, 0x52ab, 0x6013, 0x0400, 0x6037,
-+      0x0000, 0x694c, 0xd1a4, 0x0040, 0x52a7, 0x6950, 0x6136, 0x2009,
-+      0x0041, 0x1078, 0x775c, 0x6958, 0xa18c, 0xff00, 0xa186, 0x2000,
-+      0x00c0, 0x52ba, 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078,
-+      0x5bf1, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x52c9, 0x2061, 0xa933,
-+      0x6000, 0xd08c, 0x00c0, 0x52c9, 0x6008, 0x8000, 0x0048, 0x52cd,
-+      0x600a, 0x0c7f, 0x127f, 0x0078, 0x5453, 0x0c7f, 0x127f, 0x0078,
-+      0x544b, 0x6954, 0xa186, 0x0045, 0x0040, 0x5306, 0xa186, 0x002a,
-+      0x00c0, 0x52e1, 0x2001, 0xa60c, 0x200c, 0xc194, 0x2102, 0x0078,
-+      0x52ba, 0xa186, 0x0020, 0x0040, 0x52fa, 0xa186, 0x0029, 0x0040,
-+      0x52ed, 0xa186, 0x002d, 0x00c0, 0x52cd, 0x6944, 0xa18c, 0xff00,
-+      0x810f, 0x1078, 0x45c4, 0x00c0, 0x52ba, 0x6000, 0xc0e4, 0x6002,
-+      0x0078, 0x52ba, 0x685c, 0xa065, 0x0040, 0x52cd, 0x6007, 0x0024,
-+      0x2001, 0xa8a3, 0x2004, 0x6016, 0x0078, 0x52ba, 0x685c, 0xa065,
-+      0x0040, 0x52cd, 0x0e7e, 0x6860, 0xa075, 0x2001, 0xa62f, 0x2004,
-+      0xa005, 0x0040, 0x531e, 0x1078, 0x8ec6, 0x8eff, 0x0040, 0x531b,
-+      0x2e60, 0x1078, 0x8ec6, 0x0e7f, 0x0078, 0x52ba, 0x6024, 0xc0dc,
-+      0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0x6870, 0xa005, 0x0040,
-+      0x532f, 0x6007, 0x003b, 0x6874, 0x602a, 0x6878, 0x6012, 0x6003,
-+      0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x0078, 0x52ba,
-+      0x2061, 0xa933, 0x6000, 0xd084, 0x0040, 0x5352, 0xd08c, 0x00c0,
-+      0x5461, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x534c, 0x6206,
-+      0x2091, 0x8001, 0x0078, 0x5461, 0x2091, 0x8001, 0x6853, 0x0016,
-+      0x0078, 0x545a, 0x6853, 0x0007, 0x0078, 0x545a, 0x6834, 0x8007,
-+      0xa084, 0x00ff, 0x00c0, 0x5360, 0x1078, 0x502d, 0x0078, 0x5372,
-+      0x2030, 0x8001, 0x00c0, 0x536a, 0x7007, 0x0001, 0x1078, 0x5373,
-+      0x0078, 0x5372, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
-+      0x704b, 0x5373, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, 0xa03e,
-+      0x2009, 0xa62f, 0x210c, 0x81ff, 0x00c0, 0x53ff, 0x2009, 0xa60c,
-+      0x210c, 0xd194, 0x00c0, 0x5431, 0x6848, 0x2070, 0xae82, 0xad00,
-+      0x0048, 0x53ef, 0x2001, 0xa616, 0x2004, 0xae02, 0x00c8, 0x53ef,
-+      0x2061, 0xa933, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001, 0x00c0,
-+      0x53d2, 0x711c, 0xa186, 0x0006, 0x00c0, 0x53da, 0x7018, 0xa005,
-+      0x0040, 0x53ff, 0x2004, 0xd0e4, 0x00c0, 0x542b, 0x7024, 0xd0dc,
-+      0x00c0, 0x5435, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x7010,
-+      0xa005, 0x00c0, 0x53be, 0x7112, 0x684c, 0xd0f4, 0x00c0, 0x5439,
-+      0x2e60, 0x1078, 0x5b27, 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800,
-+      0xa005, 0x00c0, 0x53be, 0x6902, 0x2168, 0x684c, 0xd0f4, 0x00c0,
-+      0x5439, 0x127f, 0x0e7f, 0x007c, 0x127f, 0x0e7f, 0x6853, 0x0006,
-+      0x0078, 0x545a, 0xd184, 0x0040, 0x53cc, 0xd1c4, 0x00c0, 0x53f3,
-+      0x0078, 0x53f7, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x45c4,
-+      0x00c0, 0x542b, 0x6000, 0xd0e4, 0x00c0, 0x542b, 0x711c, 0xa186,
-+      0x0007, 0x00c0, 0x53ef, 0x6853, 0x0002, 0x0078, 0x542d, 0x6853,
-+      0x0008, 0x0078, 0x542d, 0x6853, 0x000e, 0x0078, 0x542d, 0x6853,
-+      0x0017, 0x0078, 0x542d, 0x6853, 0x0035, 0x0078, 0x542d, 0x2001,
-+      0xa672, 0x2004, 0xd0fc, 0x0040, 0x5427, 0x6848, 0x2070, 0xae82,
-+      0xad00, 0x0048, 0x5427, 0x6058, 0xae02, 0x00c8, 0x5427, 0x711c,
-+      0xa186, 0x0006, 0x00c0, 0x5427, 0x7018, 0xa005, 0x0040, 0x5427,
-+      0x2004, 0xd0bc, 0x0040, 0x5427, 0x2039, 0x0001, 0x7000, 0xa086,
-+      0x0007, 0x00c0, 0x537e, 0x7003, 0x0002, 0x0078, 0x537e, 0x6853,
-+      0x0028, 0x0078, 0x542d, 0x6853, 0x0029, 0x127f, 0x0e7f, 0x0078,
-+      0x545a, 0x6853, 0x002a, 0x0078, 0x542d, 0x6853, 0x0045, 0x0078,
-+      0x542d, 0x2e60, 0x2019, 0x0002, 0x6017, 0x0014, 0x1078, 0x9dc7,
-+      0x127f, 0x0e7f, 0x007c, 0x2009, 0x003e, 0x0078, 0x5455, 0x2009,
-+      0x0004, 0x0078, 0x5455, 0x2009, 0x0006, 0x0078, 0x5455, 0x2009,
-+      0x0016, 0x0078, 0x5455, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
-+      0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x4a73, 0x2091, 0x8001,
-+      0x007c, 0x1078, 0x13a4, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102,
-+      0x0048, 0x5471, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078,
-+      0x547d, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x547d, 0x7074,
-+      0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c,
-+      0x0d7e, 0x1078, 0x5b1e, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004,
-+      0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002,
-+      0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x549c,
-+      0xa086, 0x1000, 0x00c0, 0x54d3, 0x20e1, 0x0000, 0x3d00, 0xa094,
-+      0xff00, 0x8217, 0xa084, 0xf000, 0xa086, 0x3000, 0x00c0, 0x54b7,
-+      0xa184, 0xff00, 0x8007, 0xa086, 0x0008, 0x00c0, 0x54d3, 0x1078,
-+      0x29bb, 0x00c0, 0x54d3, 0x1078, 0x56b2, 0x0078, 0x54ce, 0x20e1,
-+      0x0004, 0x3d60, 0xd1bc, 0x00c0, 0x54be, 0x3e60, 0xac84, 0x000f,
-+      0x00c0, 0x54d3, 0xac82, 0xad00, 0x0048, 0x54d3, 0x6858, 0xac02,
-+      0x00c8, 0x54d3, 0x2009, 0x0047, 0x1078, 0x775c, 0x7a1c, 0xd284,
-+      0x00c0, 0x548e, 0x007c, 0xa016, 0x1078, 0x15fa, 0x0078, 0x54ce,
-+      0x0078, 0x54d3, 0x781c, 0xd08c, 0x0040, 0x5502, 0x157e, 0x137e,
-+      0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076, 0x00c0,
-+      0x5518, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x5507, 0x1078,
-+      0x554e, 0x0040, 0x5518, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078,
-+      0x556c, 0x147f, 0x137f, 0x157f, 0x2009, 0xa8b9, 0x2104, 0xa005,
-+      0x00c0, 0x5503, 0x007c, 0x1078, 0x62d1, 0x0078, 0x5502, 0xa484,
-+      0x7000, 0x00c0, 0x5518, 0x1078, 0x554e, 0x0040, 0x552c, 0x7000,
-+      0xa084, 0xff00, 0xa086, 0x8100, 0x0040, 0x54f3, 0x0078, 0x552c,
-+      0x1078, 0xa54f, 0xd5a4, 0x0040, 0x5528, 0x047e, 0x1078, 0x1b22,
-+      0x047f, 0x20e1, 0x9010, 0x2001, 0x0138, 0x2202, 0x0078, 0x5530,
-+      0x1078, 0x554e, 0x6883, 0x0000, 0x20e1, 0x3000, 0x7828, 0x7828,
-+      0x1078, 0x5537, 0x147f, 0x137f, 0x157f, 0x0078, 0x5502, 0x2001,
-+      0xa60e, 0x2004, 0xd08c, 0x0040, 0x554d, 0x2001, 0xa600, 0x2004,
-+      0xa086, 0x0003, 0x00c0, 0x554d, 0x027e, 0x037e, 0x2011, 0x8048,
-+      0x2518, 0x1078, 0x361b, 0x037f, 0x027f, 0x007c, 0xa484, 0x01ff,
-+      0x6882, 0xa005, 0x0040, 0x5560, 0xa080, 0x001f, 0xa084, 0x03f8,
-+      0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c,
-+      0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
-+      0xa085, 0x0001, 0x0078, 0x555f, 0x7000, 0xa084, 0xff00, 0xa08c,
-+      0xf000, 0x8007, 0xa196, 0x0000, 0x00c0, 0x5579, 0x0078, 0x57ba,
-+      0x007c, 0xa196, 0x2000, 0x00c0, 0x558a, 0x6900, 0xa18e, 0x0001,
-+      0x00c0, 0x5586, 0x1078, 0x3aec, 0x0078, 0x5578, 0x1078, 0x5592,
-+      0x0078, 0x5578, 0xa196, 0x8000, 0x00c0, 0x5578, 0x1078, 0x5871,
-+      0x0078, 0x5578, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196,
-+      0x0001, 0x0040, 0x559f, 0xa196, 0x0023, 0x00c0, 0x56aa, 0xa08e,
-+      0x0023, 0x00c0, 0x55d4, 0x1078, 0x591d, 0x0040, 0x56aa, 0x7124,
-+      0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x55b8, 0x7034, 0xa005,
-+      0x00c0, 0x56aa, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa,
-+      0xa08e, 0x0214, 0x0040, 0x55c0, 0xa08e, 0x0210, 0x00c0, 0x55c6,
-+      0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0100,
-+      0x00c0, 0x56aa, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0016,
-+      0x1078, 0x775c, 0x0078, 0x56aa, 0xa08e, 0x0022, 0x00c0, 0x56aa,
-+      0x7030, 0xa08e, 0x0300, 0x00c0, 0x55e5, 0x7034, 0xa005, 0x00c0,
-+      0x56aa, 0x2009, 0x0017, 0x0078, 0x5676, 0xa08e, 0x0500, 0x00c0,
-+      0x55f1, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x0018, 0x0078,
-+      0x5676, 0xa08e, 0x2010, 0x00c0, 0x55f9, 0x2009, 0x0019, 0x0078,
-+      0x5676, 0xa08e, 0x2110, 0x00c0, 0x5601, 0x2009, 0x001a, 0x0078,
-+      0x5676, 0xa08e, 0x5200, 0x00c0, 0x560d, 0x7034, 0xa005, 0x00c0,
-+      0x56aa, 0x2009, 0x001b, 0x0078, 0x5676, 0xa08e, 0x5000, 0x00c0,
-+      0x5619, 0x7034, 0xa005, 0x00c0, 0x56aa, 0x2009, 0x001c, 0x0078,
-+      0x5676, 0xa08e, 0x1300, 0x00c0, 0x5621, 0x2009, 0x0034, 0x0078,
-+      0x5676, 0xa08e, 0x1200, 0x00c0, 0x562d, 0x7034, 0xa005, 0x00c0,
-+      0x56aa, 0x2009, 0x0024, 0x0078, 0x5676, 0xa08c, 0xff00, 0xa18e,
-+      0x2400, 0x00c0, 0x5637, 0x2009, 0x002d, 0x0078, 0x5676, 0xa08c,
-+      0xff00, 0xa18e, 0x5300, 0x00c0, 0x5641, 0x2009, 0x002a, 0x0078,
-+      0x5676, 0xa08e, 0x0f00, 0x00c0, 0x5649, 0x2009, 0x0020, 0x0078,
-+      0x5676, 0xa08e, 0x5300, 0x00c0, 0x564f, 0x0078, 0x566c, 0xa08e,
-+      0x6104, 0x00c0, 0x566c, 0x2011, 0xab8d, 0x8208, 0x2204, 0xa082,
-+      0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
-+      0x047e, 0x2124, 0x1078, 0x361b, 0x047f, 0x8108, 0x00f0, 0x565c,
-+      0x2009, 0x0023, 0x0078, 0x5676, 0xa08e, 0x6000, 0x00c0, 0x5674,
-+      0x2009, 0x003f, 0x0078, 0x5676, 0x2009, 0x001d, 0x017e, 0x2011,
-+      0xab83, 0x2204, 0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x56ac,
-+      0x1078, 0x455c, 0x00c0, 0x56ac, 0x6612, 0x6516, 0x86ff, 0x0040,
-+      0x569c, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x569c, 0x686c,
-+      0xa606, 0x00c0, 0x569c, 0x6870, 0xa506, 0xa084, 0xff00, 0x00c0,
-+      0x569c, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x76c7, 0x0040,
-+      0x56af, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f,
-+      0x1078, 0x775c, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x56aa, 0x0c7f,
-+      0x0078, 0x56ac, 0x0c7e, 0x1078, 0x570f, 0x00c0, 0x570d, 0xa28e,
-+      0x0033, 0x00c0, 0x56de, 0x1078, 0x591d, 0x0040, 0x570d, 0x7124,
-+      0x610a, 0x7030, 0xa08e, 0x0200, 0x00c0, 0x56d0, 0x7034, 0xa005,
-+      0x00c0, 0x570d, 0x2009, 0x0015, 0x1078, 0x775c, 0x0078, 0x570d,
-+      0xa08e, 0x0100, 0x00c0, 0x570d, 0x7034, 0xa005, 0x00c0, 0x570d,
-+      0x2009, 0x0016, 0x1078, 0x775c, 0x0078, 0x570d, 0xa28e, 0x0032,
-+      0x00c0, 0x570d, 0x7030, 0xa08e, 0x1400, 0x00c0, 0x570d, 0x2009,
-+      0x0038, 0x017e, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
-+      0x254d, 0x00c0, 0x570c, 0x1078, 0x455c, 0x00c0, 0x570c, 0x6612,
-+      0x6516, 0x0c7e, 0x1078, 0x76c7, 0x0040, 0x570b, 0x017f, 0x611a,
-+      0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x775c, 0x1078,
-+      0x62d1, 0x0078, 0x570d, 0x0c7f, 0x017f, 0x0c7f, 0x007c, 0x0f7e,
-+      0x0d7e, 0x027e, 0x017e, 0x137e, 0x147e, 0x157e, 0x3c00, 0x007e,
-+      0x2079, 0x0030, 0x2069, 0x0200, 0x1078, 0x1c6a, 0x00c0, 0x5750,
-+      0x1078, 0x1b40, 0x0040, 0x575d, 0x7908, 0xa18c, 0x1fff, 0xa182,
-+      0x0011, 0x00c8, 0x575a, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
-+      0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
-+      0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0xa08a, 0x0140,
-+      0x10c8, 0x1332, 0x80ac, 0x20e1, 0x6000, 0x2099, 0x020a, 0x53a5,
-+      0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004, 0xa294, 0x0070,
-+      0x007f, 0x20e0, 0x157f, 0x147f, 0x137f, 0x017f, 0x027f, 0x0d7f,
-+      0x0f7f, 0x007c, 0xa016, 0x1078, 0x15fa, 0xa085, 0x0001, 0x0078,
-+      0x5750, 0x047e, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff,
-+      0x00c0, 0x5782, 0xa596, 0xfffd, 0x00c0, 0x5772, 0x2009, 0x007f,
-+      0x0078, 0x57b5, 0xa596, 0xfffe, 0x00c0, 0x577a, 0x2009, 0x007e,
-+      0x0078, 0x57b5, 0xa596, 0xfffc, 0x00c0, 0x5782, 0x2009, 0x0080,
-+      0x0078, 0x57b5, 0x2011, 0x0000, 0x2021, 0x0081, 0x20a9, 0x007e,
-+      0x2071, 0xa7b6, 0x2e1c, 0x83ff, 0x00c0, 0x5794, 0x82ff, 0x00c0,
-+      0x57a9, 0x2410, 0x0078, 0x57a9, 0x2368, 0x6f10, 0x007e, 0x2100,
-+      0xa706, 0x007f, 0x6b14, 0x00c0, 0x57a3, 0xa346, 0x00c0, 0x57a3,
-+      0x2408, 0x0078, 0x57b5, 0x87ff, 0x00c0, 0x57a9, 0x83ff, 0x0040,
-+      0x578e, 0x8420, 0x8e70, 0x00f0, 0x578a, 0x82ff, 0x00c0, 0x57b4,
-+      0xa085, 0x0001, 0x0078, 0x57b6, 0x2208, 0xa006, 0x0d7f, 0x0e7f,
-+      0x047f, 0x007c, 0xa084, 0x0007, 0x0079, 0x57bf, 0x007c, 0x57c7,
-+      0x57c7, 0x57c7, 0x5933, 0x57c7, 0x57c8, 0x57e1, 0x5858, 0x007c,
-+      0x7110, 0xd1bc, 0x0040, 0x57e0, 0x7120, 0x2160, 0xac8c, 0x000f,
-+      0x00c0, 0x57e0, 0xac8a, 0xad00, 0x0048, 0x57e0, 0x6858, 0xac02,
-+      0x00c8, 0x57e0, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x775c,
-+      0x007c, 0x0c7e, 0xa484, 0x01ff, 0x0040, 0x5833, 0x7110, 0xd1bc,
-+      0x00c0, 0x5833, 0x2011, 0xab83, 0x2204, 0x8211, 0x220c, 0x1078,
-+      0x254d, 0x00c0, 0x5833, 0x1078, 0x455c, 0x00c0, 0x5833, 0x6612,
-+      0x6516, 0x6000, 0xd0ec, 0x00c0, 0x5833, 0x6204, 0xa294, 0xff00,
-+      0x8217, 0xa286, 0x0006, 0x00c0, 0x5818, 0x0c7e, 0x1078, 0x76c7,
-+      0x017f, 0x0040, 0x5835, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
-+      0x7130, 0x6122, 0x2009, 0x0044, 0x1078, 0x775c, 0x0078, 0x5833,
-+      0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f,
-+      0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x582b, 0x6007,
-+      0x0005, 0x0078, 0x582d, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078,
-+      0x5dd7, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x2001, 0xa60d, 0x2004,
-+      0xd0ec, 0x0040, 0x583f, 0x2011, 0x8049, 0x1078, 0x361b, 0x0c7e,
-+      0x1078, 0x9187, 0x017f, 0x0040, 0x5833, 0x611a, 0x601f, 0x0006,
-+      0x7120, 0x610a, 0x7130, 0x6122, 0x6013, 0x0300, 0x6003, 0x0001,
-+      0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x5833,
-+      0x7110, 0xd1bc, 0x0040, 0x5870, 0x7020, 0x2060, 0xac84, 0x000f,
-+      0x00c0, 0x5870, 0xac82, 0xad00, 0x0048, 0x5870, 0x6858, 0xac02,
-+      0x00c8, 0x5870, 0x7124, 0x610a, 0x2009, 0x0045, 0x1078, 0x775c,
-+      0x007c, 0x007e, 0x1078, 0x29bb, 0x007f, 0x00c0, 0x5887, 0x7110,
-+      0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x5887, 0xa084,
-+      0x000f, 0xa08a, 0x0006, 0x00c8, 0x5887, 0x1079, 0x5888, 0x007c,
-+      0x588e, 0x588f, 0x588e, 0x588e, 0x58ff, 0x590e, 0x007c, 0x7110,
-+      0xd1bc, 0x0040, 0x5897, 0x702c, 0xd084, 0x0040, 0x58fe, 0x700c,
-+      0x7108, 0x1078, 0x254d, 0x00c0, 0x58fe, 0x1078, 0x455c, 0x00c0,
-+      0x58fe, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x0040, 0x58c9,
-+      0xa28c, 0x00ff, 0xa186, 0x0004, 0x0040, 0x58b2, 0xa186, 0x0006,
-+      0x00c0, 0x58ef, 0x0c7e, 0x1078, 0x591d, 0x0c7f, 0x0040, 0x58fe,
-+      0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f,
-+      0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078,
-+      0x58fe, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0040, 0x58de, 0xa186,
-+      0x0004, 0x0040, 0x58de, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004,
-+      0x0040, 0x58de, 0xa286, 0x0006, 0x00c0, 0x58ef, 0x0c7e, 0x1078,
-+      0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0005, 0x7120,
-+      0x610a, 0x2009, 0x0088, 0x1078, 0x775c, 0x0078, 0x58fe, 0x0c7e,
-+      0x1078, 0x76c7, 0x017f, 0x0040, 0x58fe, 0x611a, 0x601f, 0x0004,
-+      0x7120, 0x610a, 0x2009, 0x0001, 0x1078, 0x775c, 0x007c, 0x7110,
-+      0xd1bc, 0x0040, 0x590d, 0x1078, 0x591d, 0x0040, 0x590d, 0x7124,
-+      0x610a, 0x2009, 0x0089, 0x1078, 0x775c, 0x007c, 0x7110, 0xd1bc,
-+      0x0040, 0x591c, 0x1078, 0x591d, 0x0040, 0x591c, 0x7124, 0x610a,
-+      0x2009, 0x008a, 0x1078, 0x775c, 0x007c, 0x7020, 0x2060, 0xac84,
-+      0x000f, 0x00c0, 0x5930, 0xac82, 0xad00, 0x0048, 0x5930, 0x2001,
-+      0xa616, 0x2004, 0xac02, 0x00c8, 0x5930, 0xa085, 0x0001, 0x007c,
-+      0xa006, 0x0078, 0x592f, 0x7110, 0xd1bc, 0x00c0, 0x5949, 0x7024,
-+      0x2060, 0xac84, 0x000f, 0x00c0, 0x5949, 0xac82, 0xad00, 0x0048,
-+      0x5949, 0x6858, 0xac02, 0x00c8, 0x5949, 0x2009, 0x0051, 0x1078,
-+      0x775c, 0x007c, 0x2071, 0xa8c4, 0x7003, 0x0003, 0x700f, 0x0361,
-+      0xa006, 0x701a, 0x7012, 0x7017, 0xad00, 0x7007, 0x0000, 0x7026,
-+      0x702b, 0x6e1c, 0x7032, 0x7037, 0x6e70, 0x703b, 0x0002, 0x703f,
-+      0x0000, 0x7043, 0xffff, 0x7047, 0xffff, 0x007c, 0x2071, 0xa8c4,
-+      0x00e0, 0x5a32, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0,
-+      0x59de, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000,
-+      0x7138, 0x8109, 0x713a, 0x00c0, 0x59dc, 0x703b, 0x0002, 0x2009,
-+      0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x59dc, 0x703c, 0xa086,
-+      0x0001, 0x00c0, 0x59b9, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084,
-+      0x4000, 0x0040, 0x5997, 0x6803, 0x1000, 0x0078, 0x599e, 0x6804,
-+      0xa084, 0x1000, 0x0040, 0x599e, 0x6803, 0x0100, 0x6803, 0x0000,
-+      0x703f, 0x0000, 0x2069, 0xa8b1, 0x6804, 0xa082, 0x0006, 0x00c0,
-+      0x59ab, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x59b2,
-+      0x6833, 0x0000, 0x1078, 0x62d1, 0x1078, 0x639b, 0x0d7f, 0x0078,
-+      0x59dc, 0x0d7e, 0x2069, 0xa600, 0x6948, 0x6864, 0xa102, 0x00c8,
-+      0x59db, 0x2069, 0xa8b1, 0x6804, 0xa086, 0x0000, 0x00c0, 0x59db,
-+      0x6830, 0xa086, 0x0000, 0x00c0, 0x59db, 0x703f, 0x0001, 0x6807,
-+      0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069,
-+      0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x59e1, 0x127e, 0x2091,
-+      0x8000, 0x7024, 0xa00d, 0x0040, 0x59f9, 0x7020, 0x8001, 0x7022,
-+      0x00c0, 0x59f9, 0x7023, 0x0009, 0x8109, 0x7126, 0xa186, 0x03e8,
-+      0x00c0, 0x59f4, 0x7028, 0x107a, 0x81ff, 0x00c0, 0x59f9, 0x7028,
-+      0x107a, 0x7030, 0xa00d, 0x0040, 0x5a10, 0x702c, 0x8001, 0x702e,
-+      0x00c0, 0x5a10, 0x702f, 0x0009, 0x8109, 0x7132, 0x0040, 0x5a0e,
-+      0xa184, 0x007f, 0x1040, 0x6ea2, 0x0078, 0x5a10, 0x7034, 0x107a,
-+      0x7040, 0xa005, 0x0040, 0x5a18, 0x0050, 0x5a18, 0x8001, 0x7042,
-+      0x7044, 0xa005, 0x0040, 0x5a20, 0x0050, 0x5a20, 0x8001, 0x7046,
-+      0x7018, 0xa00d, 0x0040, 0x5a31, 0x7008, 0x8001, 0x700a, 0x00c0,
-+      0x5a31, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, 0x5a31, 0x701c,
-+      0x107a, 0x127f, 0x7004, 0x0079, 0x5a35, 0x5a5c, 0x5a5d, 0x5a79,
-+      0x0e7e, 0x2071, 0xa8c4, 0x7018, 0xa005, 0x00c0, 0x5a43, 0x711a,
-+      0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071,
-+      0xa8c4, 0x701c, 0xa206, 0x00c0, 0x5a4f, 0x701a, 0x701e, 0x007f,
-+      0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa8c4, 0x6088, 0xa102, 0x0048,
-+      0x5a5a, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078, 0x45c4,
-+      0x00c0, 0x5a6f, 0x6088, 0x8001, 0x0048, 0x5a6f, 0x608a, 0x00c0,
-+      0x5a6f, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x8108,
-+      0xa182, 0x00ff, 0x0048, 0x5a77, 0xa00e, 0x7007, 0x0002, 0x7112,
-+      0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, 0x603c, 0xa005,
-+      0x0040, 0x5a88, 0x8001, 0x603e, 0x00c0, 0x5a88, 0x1078, 0x8f9c,
-+      0x6014, 0xa005, 0x0040, 0x5ab2, 0x8001, 0x6016, 0x00c0, 0x5ab2,
-+      0x611c, 0xa186, 0x0003, 0x0040, 0x5a99, 0xa186, 0x0006, 0x00c0,
-+      0x5ab0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x5ab0,
-+      0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x5aa9, 0x2001,
-+      0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x5ab2,
-+      0x1078, 0x8abe, 0x127f, 0xac88, 0x0010, 0x7116, 0x2001, 0xcd00,
-+      0xa102, 0x0048, 0x5abf, 0x7017, 0xad00, 0x7007, 0x0000, 0x007c,
-+      0x0e7e, 0x2071, 0xa8c4, 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b,
-+      0x0002, 0x0e7f, 0x007c, 0x2001, 0xa8cd, 0x2003, 0x0000, 0x007c,
-+      0x0e7e, 0x2071, 0xa8c4, 0x7132, 0x702f, 0x0009, 0x0e7f, 0x007c,
-+      0x2011, 0xa8d0, 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071, 0xa8c4,
-+      0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x027e, 0x0e7e,
-+      0x0f7e, 0x2079, 0xa600, 0x7a34, 0xd294, 0x0040, 0x5b15, 0x2071,
-+      0xa8ac, 0x2e14, 0xa0fe, 0x0000, 0x0040, 0x5b02, 0xa0fe, 0x0001,
-+      0x0040, 0x5b06, 0xa0fe, 0x0002, 0x00c0, 0x5b11, 0xa292, 0x0085,
-+      0x0078, 0x5b08, 0xa292, 0x0005, 0x0078, 0x5b08, 0xa292, 0x0002,
-+      0x2272, 0x0040, 0x5b0d, 0x00c8, 0x5b15, 0x2011, 0x8037, 0x1078,
-+      0x361b, 0x2011, 0xa8ab, 0x2204, 0x2072, 0x0f7f, 0x0e7f, 0x027f,
-+      0x007c, 0x0c7e, 0x2061, 0xa933, 0x0c7f, 0x007c, 0xa184, 0x000f,
-+      0x8003, 0x8003, 0x8003, 0xa080, 0xa933, 0x2060, 0x007c, 0x6854,
-+      0xa08a, 0x199a, 0x0048, 0x5b2e, 0x2001, 0x1999, 0xa005, 0x00c0,
-+      0x5b3d, 0x0c7e, 0x2061, 0xa933, 0x6014, 0x0c7f, 0xa005, 0x00c0,
-+      0x5b42, 0x2001, 0x001e, 0x0078, 0x5b42, 0xa08e, 0xffff, 0x00c0,
-+      0x5b42, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c,
-+      0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x5b9e, 0xd0b4, 0x00c0,
-+      0x5b59, 0xd0bc, 0x00c0, 0x5b8b, 0x2009, 0x0006, 0x1078, 0x5bc3,
-+      0x007c, 0xd0fc, 0x0040, 0x5b64, 0xa084, 0x0003, 0x0040, 0x5b64,
-+      0xa086, 0x0003, 0x00c0, 0x5bbc, 0x6024, 0xd0d4, 0x0040, 0x5b6e,
-+      0xc0d4, 0x6026, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009, 0xa674,
-+      0x2104, 0xd084, 0x0040, 0x5b83, 0x6118, 0xa188, 0x0027, 0x2104,
-+      0xd08c, 0x00c0, 0x5b83, 0x87ff, 0x00c0, 0x5b82, 0x2009, 0x0042,
-+      0x1078, 0x775c, 0x007c, 0x87ff, 0x00c0, 0x5b8a, 0x2009, 0x0043,
-+      0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040, 0x5b96, 0xa084, 0x0003,
-+      0x0040, 0x5b96, 0xa086, 0x0003, 0x00c0, 0x5bbc, 0x87ff, 0x00c0,
-+      0x5b9d, 0x2009, 0x0042, 0x1078, 0x775c, 0x007c, 0xd0fc, 0x0040,
-+      0x5baf, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0040, 0x5bb3, 0x87ff,
-+      0x00c0, 0x5bae, 0x2009, 0x0041, 0x1078, 0x775c, 0x007c, 0x1078,
-+      0x5bc1, 0x0078, 0x5bae, 0x87ff, 0x00c0, 0x5bae, 0x2009, 0x0043,
-+      0x1078, 0x775c, 0x0078, 0x5bae, 0x2009, 0x0004, 0x1078, 0x5bc3,
-+      0x007c, 0x2009, 0x0001, 0x0d7e, 0x6010, 0xa0ec, 0xf000, 0x0040,
-+      0x5bef, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0,
-+      0x5be5, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x5be5,
-+      0x0c7e, 0x2061, 0xa933, 0x6200, 0xd28c, 0x00c0, 0x5be4, 0x6204,
-+      0x8210, 0x0048, 0x5be4, 0x6206, 0x0c7f, 0x1078, 0x4a73, 0x6010,
-+      0xa06d, 0x077e, 0x2039, 0x0000, 0x10c0, 0x5b27, 0x077f, 0x0d7f,
-+      0x007c, 0x157e, 0x0c7e, 0x2061, 0xa933, 0x6000, 0x81ff, 0x0040,
-+      0x5bfc, 0xa205, 0x0078, 0x5bfd, 0xa204, 0x6002, 0x0c7f, 0x157f,
-+      0x007c, 0x6800, 0xd08c, 0x00c0, 0x5c0d, 0x6808, 0xa005, 0x0040,
-+      0x5c0d, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x20a9, 0x0010,
-+      0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x5c17, 0xa200, 0x00f0,
-+      0x5c12, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005,
-+      0x0040, 0x5c3d, 0xa11a, 0x00c8, 0x5c3d, 0x8213, 0x818d, 0x0048,
-+      0x5c30, 0xa11a, 0x00c8, 0x5c31, 0x00f0, 0x5c25, 0x0078, 0x5c35,
-+      0xa11a, 0x2308, 0x8210, 0x00f0, 0x5c25, 0x007e, 0x3200, 0xa084,
-+      0xf7ff, 0x2080, 0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085,
-+      0x0800, 0x0078, 0x5c39, 0x127e, 0x2091, 0x2200, 0x2079, 0xa8b1,
-+      0x127f, 0x0d7e, 0x2069, 0xa8b1, 0x6803, 0x0005, 0x2069, 0x0004,
-+      0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027,
-+      0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x5c5e, 0x5c68, 0x5c8d,
-+      0x5ce8, 0x5c6e, 0x5c8d, 0x5c68, 0x5c66, 0x5c66, 0x1078, 0x1332,
-+      0x1078, 0x5acb, 0x1078, 0x62d1, 0x0c7f, 0x007c, 0x62c0, 0x82ff,
-+      0x00c0, 0x5c74, 0x0c7f, 0x007c, 0x2011, 0x41dc, 0x1078, 0x5a45,
-+      0x7828, 0xa092, 0x00c8, 0x00c8, 0x5c83, 0x8000, 0x782a, 0x1078,
-+      0x421b, 0x0078, 0x5c72, 0x1078, 0x41dc, 0x7807, 0x0003, 0x7827,
-+      0x0000, 0x782b, 0x0000, 0x0078, 0x5c72, 0x1078, 0x5acb, 0x3c00,
-+      0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0,
-+      0x82ff, 0x0040, 0x5cab, 0x62c0, 0x82ff, 0x00c0, 0x5cab, 0x782b,
-+      0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013, 0x1078,
-+      0x775c, 0x0c7f, 0x007c, 0x3900, 0xa082, 0xa9e3, 0x00c8, 0x5cb2,
-+      0x1078, 0x747a, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x1332, 0x7804,
-+      0xa086, 0x0004, 0x0040, 0x5d2d, 0x7828, 0xa092, 0x2710, 0x00c8,
-+      0x5cc8, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x6e01, 0x0078, 0x5ca9,
-+      0x6104, 0xa186, 0x0003, 0x00c0, 0x5cdf, 0x0e7e, 0x2071, 0xa600,
-+      0x70d8, 0x0e7f, 0xd08c, 0x0040, 0x5cdf, 0x0c7e, 0x0e7e, 0x2061,
-+      0x0100, 0x2071, 0xa600, 0x1078, 0x4224, 0x0e7f, 0x0c7f, 0x1078,
-+      0xa5c4, 0x2009, 0x0014, 0x1078, 0x775c, 0x0c7f, 0x0078, 0x5ca9,
-+      0x2001, 0xa8cd, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x5cfc,
-+      0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x1332, 0x2009, 0x0013,
-+      0x1078, 0x77b3, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082,
-+      0xa9e3, 0x00c8, 0x5d05, 0x1078, 0x747a, 0x7824, 0xa005, 0x1040,
-+      0x1332, 0x781c, 0xa06d, 0x1040, 0x1332, 0x6800, 0xc0dc, 0x6802,
-+      0x7924, 0x2160, 0x1078, 0x772d, 0x693c, 0x81ff, 0x1040, 0x1332,
-+      0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x5d21, 0x7a1e, 0x0078,
-+      0x5d23, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f,
-+      0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5cfa, 0x6104, 0xa186, 0x0002,
-+      0x0040, 0x5d38, 0xa186, 0x0004, 0x0040, 0x5d38, 0x0078, 0x5cbc,
-+      0x7808, 0xac06, 0x0040, 0x5cbc, 0x1078, 0x61cd, 0x1078, 0x5dd7,
-+      0x0c7f, 0x1078, 0x62d1, 0x0078, 0x5ca9, 0x0c7e, 0x6027, 0x0002,
-+      0x62c8, 0x82ff, 0x00c0, 0x5d61, 0x62c4, 0x82ff, 0x00c0, 0x5d61,
-+      0x793c, 0xa1e5, 0x0000, 0x0040, 0x5d5b, 0x2009, 0x0049, 0x1078,
-+      0x775c, 0x0c7f, 0x007c, 0x2011, 0xa8d0, 0x2013, 0x0000, 0x0078,
-+      0x5d59, 0x3908, 0xa192, 0xa9e3, 0x00c8, 0x5d68, 0x1078, 0x747a,
-+      0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x5d5b, 0x7944, 0xa192,
-+      0x7530, 0x00c8, 0x5d85, 0x8108, 0x7946, 0x793c, 0xa188, 0x0007,
-+      0x210c, 0xa18e, 0x0006, 0x00c0, 0x5d81, 0x6017, 0x0012, 0x0078,
-+      0x5d59, 0x6017, 0x0016, 0x0078, 0x5d59, 0x7848, 0xc085, 0x784a,
-+      0x0078, 0x5d59, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000,
-+      0x600f, 0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022,
-+      0x6010, 0xa005, 0x0040, 0x5da5, 0xa080, 0x0003, 0x2102, 0x6112,
-+      0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078,
-+      0x5da0, 0x0d7e, 0x2069, 0xa8b1, 0x6000, 0xd0d4, 0x0040, 0x5dbe,
-+      0x6820, 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x5db9, 0x2c00,
-+      0x681e, 0x6804, 0xa084, 0x0007, 0x0079, 0x62d9, 0xc0d5, 0x6002,
-+      0x6818, 0xa005, 0x0040, 0x5dd0, 0x6056, 0x605b, 0x0000, 0x007e,
-+      0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069, 0xa8b1, 0x0078, 0x5db0,
-+      0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x5db0, 0x007e,
-+      0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
-+      0x2061, 0xa8b1, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040,
-+      0x5df2, 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f,
-+      0x007f, 0x007c, 0x610e, 0x610a, 0x0078, 0x5ded, 0x0c7e, 0x600f,
-+      0x0000, 0x2c08, 0x2061, 0xa8b1, 0x6034, 0xa005, 0x0040, 0x5e06,
-+      0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136,
-+      0x0078, 0x5e04, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e,
-+      0x037e, 0x027e, 0x017e, 0x007e, 0x127e, 0xa02e, 0x2071, 0xa8b1,
-+      0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x5e8c,
-+      0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x5e87, 0x87ff,
-+      0x0040, 0x5e2e, 0x6020, 0xa106, 0x00c0, 0x5e87, 0x703c, 0xac06,
-+      0x00c0, 0x5e44, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
-+      0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
-+      0x0000, 0x037f, 0x2029, 0x0001, 0x7038, 0xac36, 0x00c0, 0x5e4a,
-+      0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5e58, 0x2c00, 0xaf36,
-+      0x0040, 0x5e56, 0x2f00, 0x7036, 0x0078, 0x5e58, 0x7037, 0x0000,
-+      0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5e61, 0x7e0e, 0x0078,
-+      0x5e62, 0x2678, 0x600f, 0x0000, 0x1078, 0x8d06, 0x0040, 0x5e82,
-+      0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5e9d, 0x6837,
-+      0x0103, 0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x077e, 0x1078,
-+      0x8f7d, 0x1078, 0xa4e2, 0x1078, 0x4a73, 0x077f, 0x037f, 0x017f,
-+      0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x5e1d, 0x2c78,
-+      0x600c, 0x2060, 0x0078, 0x5e1d, 0x85ff, 0x0040, 0x5e91, 0x1078,
-+      0x639b, 0x127f, 0x007f, 0x017f, 0x027f, 0x037f, 0x057f, 0x067f,
-+      0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006,
-+      0x00c0, 0x5e6f, 0x017e, 0x037e, 0x077e, 0x1078, 0xa4e2, 0x1078,
-+      0xa1ca, 0x077f, 0x037f, 0x017f, 0x0078, 0x5e82, 0x007e, 0x067e,
-+      0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000,
-+      0x2079, 0xa8b1, 0x7838, 0xa065, 0x0040, 0x5eef, 0x600c, 0x007e,
-+      0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x5ed6, 0x037e, 0x2019,
-+      0x0001, 0x1078, 0x7058, 0x7833, 0x0000, 0x783f, 0x0000, 0x7843,
-+      0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x037f, 0x1078, 0x8d06,
-+      0x0040, 0x5eea, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0,
-+      0x5ef8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73,
-+      0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x007f, 0x0078, 0x5ebb, 0x7e3a,
-+      0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c,
-+      0x601c, 0xa086, 0x0006, 0x00c0, 0x5ee1, 0x1078, 0xa1ca, 0x0078,
-+      0x5eea, 0x017e, 0x027e, 0x087e, 0x2041, 0x0000, 0x1078, 0x5f1b,
-+      0x1078, 0x5fdb, 0x087f, 0x027f, 0x017f, 0x007c, 0x0f7e, 0x127e,
-+      0x2079, 0xa8b1, 0x2091, 0x8000, 0x1078, 0x6076, 0x1078, 0x60ec,
-+      0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
-+      0x017e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7614,
-+      0x2660, 0x2678, 0x8cff, 0x0040, 0x5fb5, 0x6018, 0xa080, 0x0028,
-+      0x2004, 0xa206, 0x00c0, 0x5fb0, 0x88ff, 0x0040, 0x5f3b, 0x6020,
-+      0xa106, 0x00c0, 0x5fb0, 0x7024, 0xac06, 0x00c0, 0x5f6b, 0x2069,
-+      0x0100, 0x68c0, 0xa005, 0x0040, 0x5f66, 0x1078, 0x5acb, 0x1078,
-+      0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000, 0x037e,
-+      0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x5f5b, 0x6803,
-+      0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040,
-+      0x5f63, 0x6827, 0x0001, 0x037f, 0x0078, 0x5f6b, 0x6003, 0x0009,
-+      0x630a, 0x0078, 0x5fb0, 0x7014, 0xac36, 0x00c0, 0x5f71, 0x660c,
-+      0x7616, 0x7010, 0xac36, 0x00c0, 0x5f7f, 0x2c00, 0xaf36, 0x0040,
-+      0x5f7d, 0x2f00, 0x7012, 0x0078, 0x5f7f, 0x7013, 0x0000, 0x660c,
-+      0x067e, 0x2c00, 0xaf06, 0x0040, 0x5f88, 0x7e0e, 0x0078, 0x5f89,
-+      0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+      0x5fa9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5fbe, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x017e, 0x037e, 0x087e, 0x1078, 0x8f7d,
-+      0x1078, 0xa4e2, 0x1078, 0x4a73, 0x087f, 0x037f, 0x017f, 0x1078,
-+      0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x5f2a,
-+      0x2c78, 0x600c, 0x2060, 0x0078, 0x5f2a, 0x127f, 0x007f, 0x017f,
-+      0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086,
-+      0x0006, 0x00c0, 0x5fcf, 0x017e, 0x037e, 0x087e, 0x1078, 0xa4e2,
-+      0x1078, 0xa1ca, 0x087f, 0x037f, 0x017f, 0x0078, 0x5fa9, 0x601c,
-+      0xa086, 0x0002, 0x00c0, 0x5fa9, 0x6004, 0xa086, 0x0085, 0x0040,
-+      0x5f96, 0x0078, 0x5fa9, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
-+      0xa280, 0xa735, 0x2004, 0xa065, 0x0040, 0x6072, 0x0f7e, 0x0e7e,
-+      0x0d7e, 0x067e, 0x2071, 0xa8b1, 0x6654, 0x7018, 0xac06, 0x00c0,
-+      0x5ff2, 0x761a, 0x701c, 0xac06, 0x00c0, 0x5ffe, 0x86ff, 0x00c0,
-+      0x5ffd, 0x7018, 0x701e, 0x0078, 0x5ffe, 0x761e, 0x6058, 0xa07d,
-+      0x0040, 0x6003, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x6009, 0x2f00,
-+      0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
-+      0x6002, 0x1078, 0x44d3, 0x0040, 0x606e, 0x7624, 0x86ff, 0x0040,
-+      0x605c, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x605c, 0x0d7e,
-+      0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x6053, 0x1078, 0x5acb,
-+      0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7027, 0x0000,
-+      0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x603c,
-+      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
-+      0x0040, 0x6044, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c,
-+      0xa005, 0x0040, 0x604d, 0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6,
-+      0x0c7f, 0x0078, 0x605c, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009,
-+      0x630a, 0x0c7f, 0x0078, 0x6011, 0x8dff, 0x0040, 0x606a, 0x6837,
-+      0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078, 0xa4e2,
-+      0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x6011, 0x067f, 0x0d7f,
-+      0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e,
-+      0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, 0x60d0,
-+      0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, 0x60b5,
-+      0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x60af, 0x1078, 0x5acb,
-+      0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378, 0x7827, 0x0000,
-+      0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x60a4,
-+      0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
-+      0x0040, 0x60ac, 0x6827, 0x0001, 0x037f, 0x0078, 0x60b5, 0x6003,
-+      0x0009, 0x630a, 0x2c30, 0x0078, 0x60cd, 0x6010, 0x2068, 0x1078,
-+      0x8d06, 0x0040, 0x60c9, 0x601c, 0xa086, 0x0003, 0x00c0, 0x60d7,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
-+      0x8eb9, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x007f, 0x0078, 0x607d,
-+      0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c,
-+      0xa086, 0x0006, 0x00c0, 0x60e0, 0x1078, 0xa1ca, 0x0078, 0x60c9,
-+      0x601c, 0xa086, 0x0002, 0x00c0, 0x60c9, 0x6004, 0xa086, 0x0085,
-+      0x0040, 0x60c0, 0x0078, 0x60c9, 0x007e, 0x067e, 0x0c7e, 0x0d7e,
-+      0x7818, 0xa065, 0x0040, 0x615a, 0x6054, 0x007e, 0x6057, 0x0000,
-+      0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x44d3,
-+      0x0040, 0x6157, 0x7e24, 0x86ff, 0x0040, 0x6149, 0xa680, 0x0004,
-+      0x2004, 0xad06, 0x00c0, 0x6149, 0x0d7e, 0x2069, 0x0100, 0x68c0,
-+      0xa005, 0x0040, 0x6140, 0x1078, 0x5acb, 0x1078, 0x6e0f, 0x68c3,
-+      0x0000, 0x1078, 0x7378, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140,
-+      0x6b04, 0xa384, 0x1000, 0x0040, 0x6129, 0x6803, 0x0100, 0x6803,
-+      0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x6131, 0x6827,
-+      0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x613a,
-+      0x8001, 0x603e, 0x2660, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x6149,
-+      0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078,
-+      0x60fe, 0x8dff, 0x0040, 0x6153, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x1078, 0x4a73, 0x1078, 0x7233, 0x0078, 0x60fe, 0x007f,
-+      0x0078, 0x60f1, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
-+      0x007c, 0x0e7e, 0x0d7e, 0x067e, 0x6000, 0xd0dc, 0x0040, 0x6181,
-+      0x604c, 0xa06d, 0x0040, 0x6181, 0x6848, 0xa606, 0x00c0, 0x6181,
-+      0x2071, 0xa8b1, 0x7024, 0xa035, 0x0040, 0x6181, 0xa080, 0x0004,
-+      0x2004, 0xad06, 0x00c0, 0x6181, 0x6000, 0xc0dc, 0x6002, 0x1078,
-+      0x6185, 0x067f, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x2079, 0x0100,
-+      0x78c0, 0xa005, 0x00c0, 0x6194, 0x0c7e, 0x2660, 0x6003, 0x0009,
-+      0x630a, 0x0c7f, 0x0078, 0x61cb, 0x1078, 0x6e0f, 0x78c3, 0x0000,
-+      0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2079, 0x0140, 0x7b04,
-+      0xa384, 0x1000, 0x0040, 0x61a8, 0x7803, 0x0100, 0x7803, 0x0000,
-+      0x2079, 0x0100, 0x7824, 0xd084, 0x0040, 0x61b0, 0x7827, 0x0001,
-+      0x1078, 0x7378, 0x037f, 0x1078, 0x44d3, 0x0c7e, 0x603c, 0xa005,
-+      0x0040, 0x61bc, 0x8001, 0x603e, 0x2660, 0x1078, 0x772d, 0x0c7f,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x8f7d, 0x1078,
-+      0x4a73, 0x1078, 0x7233, 0x0f7f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
-+      0xa8b1, 0x7004, 0xa084, 0x0007, 0x0079, 0x61d6, 0x61e0, 0x61e3,
-+      0x61fc, 0x6218, 0x6262, 0x61e0, 0x61e0, 0x61de, 0x1078, 0x1332,
-+      0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x61f1, 0x7020,
-+      0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x61f8, 0x7216, 0x600f,
-+      0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
-+      0x7216, 0x7212, 0x0078, 0x61f1, 0x6018, 0x2060, 0x1078, 0x44d3,
-+      0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x620d,
-+      0x6054, 0xa015, 0x0040, 0x6214, 0x721e, 0x7007, 0x0000, 0x7027,
-+      0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x620d,
-+      0x7024, 0xa065, 0x0040, 0x625f, 0x700c, 0xac06, 0x00c0, 0x622f,
-+      0x1078, 0x7233, 0x600c, 0xa015, 0x0040, 0x622b, 0x720e, 0x600f,
-+      0x0000, 0x0078, 0x625d, 0x720e, 0x720a, 0x0078, 0x625d, 0x7014,
-+      0xac06, 0x00c0, 0x6242, 0x1078, 0x7233, 0x600c, 0xa015, 0x0040,
-+      0x623e, 0x7216, 0x600f, 0x0000, 0x0078, 0x625d, 0x7216, 0x7212,
-+      0x0078, 0x625d, 0x601c, 0xa086, 0x0003, 0x00c0, 0x625d, 0x6018,
-+      0x2060, 0x1078, 0x44d3, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x7233,
-+      0x701c, 0xa065, 0x0040, 0x625d, 0x6054, 0xa015, 0x0040, 0x625b,
-+      0x721e, 0x0078, 0x625d, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f,
-+      0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x626f, 0x1078, 0x7233,
-+      0x600c, 0xa015, 0x0040, 0x6276, 0x720e, 0x600f, 0x0000, 0x1078,
-+      0x7378, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a,
-+      0x0078, 0x626f, 0x0d7e, 0x2069, 0xa8b1, 0x6830, 0xa084, 0x0003,
-+      0x0079, 0x6282, 0x6288, 0x628a, 0x62b4, 0x6288, 0x1078, 0x1332,
-+      0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x62aa,
-+      0x683c, 0xa065, 0x0040, 0x629b, 0x600c, 0xa015, 0x0040, 0x62a6,
-+      0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011,
-+      0xa8d0, 0x2013, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836,
-+      0x0078, 0x629b, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x629b,
-+      0x6003, 0x0003, 0x0078, 0x629b, 0x0c7e, 0x6843, 0x0000, 0x6847,
-+      0x0000, 0x684b, 0x0000, 0x683c, 0xa065, 0x0040, 0x62ce, 0x600c,
-+      0xa015, 0x0040, 0x62ca, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
-+      0x0078, 0x62ce, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f,
-+      0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6804, 0xa084, 0x0007, 0x0079,
-+      0x62d9, 0x62e3, 0x638a, 0x638a, 0x638a, 0x638a, 0x638c, 0x638a,
-+      0x62e1, 0x1078, 0x1332, 0x6820, 0xa005, 0x00c0, 0x62e9, 0x0d7f,
-+      0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x62f8, 0x6807, 0x0004,
-+      0x6826, 0x682b, 0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c,
-+      0x6814, 0xa065, 0x0040, 0x6306, 0x6807, 0x0001, 0x6826, 0x682b,
-+      0x0000, 0x1078, 0x63d4, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e,
-+      0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x6385, 0x704c, 0xa00d, 0x0040,
-+      0x6315, 0x7088, 0xa005, 0x0040, 0x632d, 0x7054, 0xa075, 0x0040,
-+      0x631e, 0xa20e, 0x0040, 0x6385, 0x0078, 0x6323, 0x6818, 0xa20e,
-+      0x0040, 0x6385, 0x2070, 0x704c, 0xa00d, 0x0040, 0x6315, 0x7088,
-+      0xa005, 0x00c0, 0x6315, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302,
-+      0x00c8, 0x6315, 0x1078, 0x76fc, 0x0040, 0x6385, 0x8318, 0x733e,
-+      0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
-+      0x6032, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
-+      0xa08a, 0x199a, 0x0048, 0x634e, 0x2001, 0x1999, 0x8003, 0x801b,
-+      0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc,
-+      0x0040, 0x6367, 0x7100, 0xd1f4, 0x0040, 0x6363, 0x7114, 0xa18c,
-+      0x00ff, 0x0078, 0x636c, 0x2009, 0x0000, 0x0078, 0x636c, 0xa1e0,
-+      0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078,
-+      0x6965, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
-+      0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
-+      0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f,
-+      0x0078, 0x6383, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040,
-+      0x6398, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x63d4,
-+      0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0xa8b1, 0x6830,
-+      0xa086, 0x0000, 0x00c0, 0x63bb, 0x6838, 0xa07d, 0x0040, 0x63bb,
-+      0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x127e,
-+      0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1d6d, 0x00c0, 0x63be,
-+      0x127f, 0x1078, 0x6cb3, 0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843,
-+      0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x63d0, 0x6a3a,
-+      0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078, 0x63bb,
-+      0x683a, 0x6836, 0x0078, 0x63ca, 0x601c, 0xa084, 0x000f, 0x1079,
-+      0x63da, 0x007c, 0x63e3, 0x63e8, 0x6809, 0x6922, 0x63e8, 0x6809,
-+      0x6922, 0x63e3, 0x63e8, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c,
-+      0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0044,
-+      0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x6405,
-+      0x7900, 0xd1f4, 0x0040, 0x6401, 0x7914, 0xa18c, 0x00ff, 0x0078,
-+      0x640a, 0x2009, 0x0000, 0x0078, 0x640a, 0xa1f8, 0x29c0, 0x2f0c,
-+      0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040,
-+      0x00c8, 0x645c, 0x1079, 0x641a, 0x0f7f, 0x0c7f, 0x147f, 0x137f,
-+      0x157f, 0x007c, 0x64c2, 0x650a, 0x6532, 0x65cd, 0x65fd, 0x6605,
-+      0x662c, 0x663d, 0x664e, 0x6656, 0x666e, 0x6656, 0x66d9, 0x663d,
-+      0x66fa, 0x6702, 0x664e, 0x6702, 0x6713, 0x645a, 0x645a, 0x645a,
-+      0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a, 0x645a,
-+      0x6eef, 0x6f14, 0x6f29, 0x6f4c, 0x6f6d, 0x662c, 0x645a, 0x662c,
-+      0x6656, 0x645a, 0x6532, 0x65cd, 0x645a, 0x749c, 0x6656, 0x645a,
-+      0x74bc, 0x6656, 0x645a, 0x645a, 0x64bd, 0x646b, 0x645a, 0x74e1,
-+      0x7558, 0x7640, 0x645a, 0x7651, 0x6626, 0x766d, 0x645a, 0x6f82,
-+      0x645a, 0x645a, 0x1078, 0x1332, 0x2100, 0x1079, 0x6465, 0x0f7f,
-+      0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x6469, 0x6469, 0x6469,
-+      0x649f, 0x1078, 0x1332, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x6731,
-+      0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018, 0x20a3, 0x0800,
-+      0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb, 0x0d7f, 0x007c,
-+      0x0d7e, 0x7818, 0x2068, 0x68a0, 0xa082, 0x007e, 0x0048, 0x649c,
-+      0xa085, 0x0001, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x649a, 0x0d7e,
-+      0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500, 0x20a3, 0x0000,
-+      0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c, 0x20a2, 0x6810,
-+      0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c, 0x20a2, 0x60c3,
-+      0x0010, 0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x6030, 0x609a, 0x1078,
-+      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x5200,
-+      0x20a3, 0x0000, 0x0d7e, 0x2069, 0xa652, 0x6804, 0xd084, 0x0040,
-+      0x64dc, 0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2564, 0x21a2,
-+      0x017f, 0x0d7f, 0x0078, 0x64e1, 0x0d7f, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
-+      0x2099, 0xa601, 0x53a6, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
-+      0x007f, 0x0048, 0x64fb, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c,
-+      0x20a6, 0x0078, 0x6501, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff,
-+      0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
-+      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x0500,
-+      0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f,
-+      0x0048, 0x6522, 0x2001, 0xa61b, 0x20a6, 0x2001, 0xa61c, 0x20a6,
-+      0x0078, 0x6528, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
-+      0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x60c3, 0x0010, 0x1078,
-+      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x6731, 0x0c7e, 0x7818,
-+      0x2060, 0x2001, 0x0000, 0x1078, 0x4972, 0x0c7f, 0x7818, 0xa080,
-+      0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x654d, 0x20a3, 0x0400,
-+      0x620c, 0xc2b4, 0x620e, 0x0078, 0x654f, 0x20a3, 0x0300, 0x20a3,
-+      0x0000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0,
-+      0x659c, 0x2099, 0xa88d, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304,
-+      0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099,
-+      0xa605, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xa601, 0x53a6, 0x20a9,
-+      0x0010, 0x20a3, 0x0000, 0x00f0, 0x6579, 0x2099, 0xa895, 0x3304,
-+      0xc0dd, 0x20a2, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x6594,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6,
-+      0x20a9, 0x0004, 0x0078, 0x6596, 0x20a9, 0x0007, 0x20a3, 0x0000,
-+      0x00f0, 0x6596, 0x0078, 0x65bc, 0x2099, 0xa88d, 0x20a9, 0x0008,
-+      0x53a6, 0x20a9, 0x0004, 0x2099, 0xa605, 0x53a6, 0x20a9, 0x0004,
-+      0x2099, 0xa601, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0,
-+      0x65ad, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x65b3, 0x2099,
-+      0xa895, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+      0x00f0, 0x65be, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x65c4,
-+      0x60c3, 0x0074, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+      0x6731, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3,
-+      0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
-+      0x2079, 0xa652, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x65e9, 0xa085,
-+      0x0020, 0xd1a4, 0x0040, 0x65ee, 0xa085, 0x0010, 0xa085, 0x0002,
-+      0x0d7e, 0x0078, 0x66b7, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+      0x6731, 0x20a3, 0x5000, 0x0078, 0x654f, 0x20a1, 0x020b, 0x1078,
-+      0x6731, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
-+      0x1078, 0x67b9, 0x0078, 0x6630, 0x20a1, 0x020b, 0x1078, 0x67c2,
-+      0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0004, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+      0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
-+      0x2a00, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b,
-+      0x1078, 0x67c2, 0x20a3, 0x0200, 0x0078, 0x654f, 0x20a1, 0x020b,
-+      0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005,
-+      0x0040, 0x6665, 0x20a2, 0x0078, 0x6667, 0x20a3, 0x0003, 0x7810,
-+      0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x0d7e, 0x20a1,
-+      0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3,
-+      0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x6694,
-+      0x6998, 0xa184, 0xc000, 0x00c0, 0x6690, 0xd1ec, 0x0040, 0x668c,
-+      0x20a3, 0x2100, 0x0078, 0x6696, 0x20a3, 0x0100, 0x0078, 0x6696,
-+      0x20a3, 0x0400, 0x0078, 0x6696, 0x20a3, 0x0700, 0xa006, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0xa652, 0x7904,
-+      0x0f7f, 0xd1ac, 0x00c0, 0x66a6, 0xa085, 0x0020, 0xd1a4, 0x0040,
-+      0x66ab, 0xa085, 0x0010, 0x2009, 0xa674, 0x210c, 0xd184, 0x0040,
-+      0x66b5, 0x699c, 0xd18c, 0x0040, 0x66b7, 0xa085, 0x0002, 0x027e,
-+      0x2009, 0xa672, 0x210c, 0xd1e4, 0x0040, 0x66c5, 0xc0c5, 0xa094,
-+      0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xd1ec, 0x0040, 0x66cf,
-+      0xa094, 0x0030, 0xa296, 0x0010, 0x0040, 0x66cf, 0xc0bd, 0x027f,
-+      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x6dfb, 0x0d7f,
-+      0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0210, 0x20a3,
-+      0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+      0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0200,
-+      0x0078, 0x64c8, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
-+      0x1078, 0x6dfb, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
-+      0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c,
-+      0x027e, 0x037e, 0x047e, 0x2019, 0x3200, 0x2021, 0x0800, 0x0078,
-+      0x6738, 0x027e, 0x037e, 0x047e, 0x2019, 0x2200, 0x2021, 0x0100,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014,
-+      0xa286, 0x007e, 0x00c0, 0x674b, 0xa385, 0x00ff, 0x20a2, 0x20a3,
-+      0xfffe, 0x0078, 0x6780, 0xa286, 0x007f, 0x00c0, 0x6757, 0x0d7e,
-+      0xa385, 0x00ff, 0x20a2, 0x20a3, 0xfffd, 0x0078, 0x676e, 0xd2bc,
-+      0x0040, 0x6776, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x6766, 0xa385,
-+      0x00ff, 0x20a2, 0x20a3, 0xfffc, 0x0078, 0x676e, 0xa2e8, 0xa735,
-+      0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6784, 0x0d7e, 0xa2e8,
-+      0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
-+      0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x047f,
-+      0x037f, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
-+      0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
-+      0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff,
-+      0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0xa61b, 0x2da6, 0x8d68,
-+      0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x678b,
-+      0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000,
-+      0x007c, 0x027e, 0x037e, 0x047e, 0x2019, 0x3300, 0x2021, 0x0800,
-+      0x0078, 0x67c9, 0x027e, 0x037e, 0x047e, 0x2019, 0x2300, 0x2021,
-+      0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xa092, 0x007e, 0x0048, 0x67e6, 0x0d7e, 0xa0e8, 0xa735,
-+      0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x67f4, 0x0d7e, 0xa0e8,
-+      0xa735, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
-+      0x20a3, 0x0000, 0x6230, 0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3,
-+      0x0000, 0x047f, 0x037f, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000,
-+      0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
-+      0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x1332,
-+      0xa08a, 0x008c, 0x10c8, 0x1332, 0x6118, 0x2178, 0x79a0, 0xd1bc,
-+      0x0040, 0x6827, 0x7900, 0xd1f4, 0x0040, 0x6823, 0x7914, 0xa18c,
-+      0x00ff, 0x0078, 0x682c, 0x2009, 0x0000, 0x0078, 0x682c, 0xa1f8,
-+      0x29c0, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a,
-+      0xa082, 0x0085, 0x1079, 0x6837, 0x0f7f, 0x0c7f, 0x007c, 0x6840,
-+      0x684b, 0x6866, 0x683e, 0x683e, 0x683e, 0x6840, 0x1078, 0x1332,
-+      0x147e, 0x20a1, 0x020b, 0x1078, 0x6879, 0x60c3, 0x0000, 0x1078,
-+      0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x68ad,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2,
-+      0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f, 0x007c, 0x147e, 0x20a1,
-+      0x020b, 0x1078, 0x68ee, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x6dfb, 0x147f,
-+      0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+      0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x6898, 0x0d7e, 0xa0e8,
-+      0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
-+      0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x68a7,
-+      0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2,
-+      0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
-+      0x0009, 0x20a3, 0x0000, 0x0078, 0x678b, 0x027e, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e,
-+      0x0048, 0x68cc, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
-+      0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68,
-+      0x2da6, 0x0d7f, 0x0078, 0x68db, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+      0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3,
-+      0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000, 0x1078,
-+      0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7a10, 0x22a2,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092,
-+      0x007e, 0x0048, 0x690d, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810,
-+      0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6,
-+      0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x691c, 0x0d7e, 0xa0e8, 0xa735,
-+      0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x0d7f,
-+      0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0099, 0x20a3, 0x0000,
-+      0x0078, 0x68df, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040,
-+      0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332, 0x7918, 0x2160,
-+      0x61a0, 0xd1bc, 0x0040, 0x6941, 0x6100, 0xd1f4, 0x0040, 0x693d,
-+      0x6114, 0xa18c, 0x00ff, 0x0078, 0x6946, 0x2009, 0x0000, 0x0078,
-+      0x6946, 0xa1e0, 0x29c0, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100,
-+      0x619a, 0xa082, 0x0040, 0x1079, 0x6950, 0x0f7f, 0x0c7f, 0x007c,
-+      0x6965, 0x6a73, 0x6a14, 0x6c27, 0x6963, 0x6963, 0x6963, 0x6963,
-+      0x6963, 0x6963, 0x6963, 0x714c, 0x715d, 0x716e, 0x717f, 0x6963,
-+      0x767e, 0x6963, 0x713b, 0x1078, 0x1332, 0x0d7e, 0x157e, 0x147e,
-+      0x780b, 0xffff, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7910, 0x2168,
-+      0x6948, 0x7922, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c,
-+      0xa184, 0x000f, 0x00c0, 0x6980, 0x2001, 0x0005, 0x0078, 0x698a,
-+      0xd184, 0x0040, 0x6987, 0x2001, 0x0004, 0x0078, 0x698a, 0xa084,
-+      0x0006, 0x8004, 0x017e, 0x2008, 0x7830, 0xa084, 0x00ff, 0x8007,
-+      0xa105, 0x017f, 0x20a2, 0xd1ac, 0x0040, 0x699a, 0x20a3, 0x0002,
-+      0x0078, 0x69a6, 0xd1b4, 0x0040, 0x69a1, 0x20a3, 0x0001, 0x0078,
-+      0x69a6, 0x20a3, 0x0000, 0x2230, 0x0078, 0x69a8, 0x6a80, 0x6e7c,
-+      0x20a9, 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000,
-+      0x00f0, 0x69ac, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
-+      0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xa8cd,
-+      0x2003, 0x07d0, 0x2001, 0xa8cc, 0x2003, 0x0009, 0x2001, 0xa8d2,
-+      0x2003, 0x0002, 0x1078, 0x158c, 0x147f, 0x157f, 0x0d7f, 0x007c,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014,
-+      0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xd0bc, 0x0040, 0x69f6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+      0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6a05, 0x0d7e, 0xa0e8,
-+      0xa735, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2,
-+      0x0d7f, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
-+      0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+      0x20a1, 0x020b, 0x1078, 0x6a34, 0x7810, 0x2068, 0x6860, 0x20a2,
-+      0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x147f,
-+      0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6a52,
-+      0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+      0x0078, 0x6a61, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085,
-+      0x0500, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230,
-+      0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2,
-+      0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x7810,
-+      0xa0ec, 0xf000, 0x0040, 0x6a8b, 0xa06d, 0x1078, 0x495f, 0x0040,
-+      0x6a8b, 0x684c, 0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6a8b,
-+      0x7824, 0xc0cd, 0x7826, 0x20a1, 0x020b, 0x1078, 0x6be0, 0xa016,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000,
-+      0x00c0, 0x6aa2, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x6aaa,
-+      0x0078, 0x6aa5, 0xa006, 0x1079, 0x6aaa, 0x147f, 0x137f, 0x157f,
-+      0x0d7f, 0x007c, 0x6ab4, 0x6b4c, 0x6b57, 0x6b81, 0x6b95, 0x6bb1,
-+      0x6bbc, 0x6ab2, 0x1078, 0x1332, 0x017e, 0x037e, 0x694c, 0xa18c,
-+      0x0003, 0x0040, 0x6abf, 0xa186, 0x0003, 0x00c0, 0x6ace, 0x6b78,
-+      0x7824, 0xd0cc, 0x0040, 0x6ac5, 0xc3e5, 0x23a2, 0x6868, 0x20a2,
-+      0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x6b8c, 0xa186, 0x0001,
-+      0x10c0, 0x1332, 0x6b78, 0x7824, 0xd0cc, 0x0040, 0x6ad8, 0xc3e5,
-+      0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2,
-+      0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300, 0x0040,
-+      0x6b46, 0xd3c4, 0x0040, 0x6aee, 0x687c, 0xa108, 0xd3cc, 0x0040,
-+      0x6af3, 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80, 0x0020,
-+      0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, 0x6af8, 0x157f, 0x22a2,
-+      0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, 0x6b46, 0x20a1, 0x020b,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x007e, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xd0bc, 0x0040, 0x6b26, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6b35, 0x0d7e, 0xa0e8,
-+      0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+      0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x007f, 0x7b24, 0xd3cc,
-+      0x0040, 0x6b3e, 0x20a3, 0x0889, 0x0078, 0x6b40, 0x20a3, 0x0898,
-+      0x20a2, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f,
-+      0x017f, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc,
-+      0x0040, 0x6b53, 0xc2e5, 0x22a2, 0xa016, 0x0078, 0x6b8a, 0x2011,
-+      0x0302, 0x7824, 0xd0cc, 0x0040, 0x6b5e, 0xc2e5, 0x22a2, 0xa016,
-+      0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
-+      0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078, 0x6dfb,
-+      0x007c, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x0040, 0x6b88, 0xc2e5,
-+      0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-+      0x60c3, 0x0018, 0x1078, 0x6dfb, 0x007c, 0x2011, 0x0100, 0x7824,
-+      0xd0cc, 0x0040, 0x6b9c, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7834, 0xa084,
-+      0x00ff, 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x6dfb,
-+      0x007c, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0040, 0x6bb8, 0xc2e5,
-+      0x22a2, 0xa016, 0x0078, 0x6b8a, 0x037e, 0x7b10, 0xa384, 0xff00,
-+      0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, 0x6bcf, 0x7824, 0xd0cc,
-+      0x0040, 0x6bcb, 0xc2e5, 0x22a2, 0x037f, 0x0078, 0x6b8a, 0x047e,
-+      0x2021, 0x0800, 0x007e, 0x7824, 0xd0cc, 0x007f, 0x0040, 0x6bd9,
-+      0xc4e5, 0x24a2, 0x047f, 0x22a2, 0x20a2, 0x037f, 0x0078, 0x6b8c,
-+      0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xd0bc, 0x0040, 0x6bfe, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+      0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x6c0d, 0x0d7e, 0xa0e8,
-+      0xa735, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-+      0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x7824, 0xd0cc, 0x0040,
-+      0x6c15, 0x20a3, 0x0889, 0x0078, 0x6c17, 0x20a3, 0x0898, 0x20a3,
-+      0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
-+      0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e,
-+      0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, 0x0700,
-+      0x8007, 0x1079, 0x6c3a, 0x037f, 0x017f, 0x147f, 0x137f, 0x157f,
-+      0x0d7f, 0x007c, 0x6c42, 0x6c42, 0x6c44, 0x6c42, 0x6c42, 0x6c42,
-+      0x6c69, 0x6c42, 0x1078, 0x1332, 0x7910, 0xa18c, 0xf8ff, 0xa18d,
-+      0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73,
-+      0x0d7e, 0x2069, 0xa652, 0x6804, 0xd0bc, 0x0040, 0x6c5e, 0x682c,
-+      0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x6c60, 0x20a3, 0x3f00,
-+      0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, 0x6dfb,
-+      0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x6c73, 0x20a3,
-+      0x7f00, 0x0078, 0x6c61, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x6c91, 0x0d7e,
-+      0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814,
-+      0x20a2, 0x2069, 0xa61b, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078,
-+      0x6ca0, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c, 0x6810, 0xa085, 0x0100,
-+      0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2,
-+      0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x6dea, 0x22a2,
-+      0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e,
-+      0x037e, 0x2061, 0x0100, 0x2071, 0xa600, 0x6130, 0x7818, 0x2068,
-+      0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x6cca, 0x6910, 0x6a14, 0x6430,
-+      0x0078, 0x6cce, 0x6910, 0x6a14, 0x736c, 0x7470, 0x781c, 0xa086,
-+      0x0006, 0x0040, 0x6d2d, 0xd5bc, 0x0040, 0x6cde, 0xa185, 0x0100,
-+      0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6ce5, 0xa185, 0x0100,
-+      0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0809, 0x6077,
-+      0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
-+      0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070,
-+      0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca,
-+      0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+      0xa582, 0x0080, 0x0048, 0x6d17, 0x6a00, 0xd2f4, 0x0040, 0x6d15,
-+      0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d17, 0x2011, 0x0000, 0x629e,
-+      0x6017, 0x0016, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005,
-+      0x0040, 0x6d24, 0x2009, 0x1b58, 0x1078, 0x5ad0, 0x037f, 0x047f,
-+      0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c,
-+      0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x6d85, 0xd5bc, 0x0040,
-+      0x6d41, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078,
-+      0x6d48, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e,
-+      0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff,
-+      0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
-+      0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c,
-+      0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928, 0xa109,
-+      0x792a, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
-+      0x0000, 0xa582, 0x0080, 0x0048, 0x6d80, 0x6a00, 0xd2f4, 0x0040,
-+      0x6d7e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6d80, 0x2011, 0x0000,
-+      0x629e, 0x6017, 0x0012, 0x0078, 0x6d1a, 0xd5bc, 0x0040, 0x6d90,
-+      0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x6d97,
-+      0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x1078,
-+      0x495f, 0x0040, 0x6dad, 0x0d7e, 0x7810, 0xa06d, 0x684c, 0x0d7f,
-+      0xa084, 0x2020, 0xa086, 0x2020, 0x00c0, 0x6dad, 0x7824, 0xc0cd,
-+      0x7826, 0x6073, 0x0889, 0x0078, 0x6daf, 0x6073, 0x0898, 0x6077,
-+      0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a,
-+      0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a,
-+      0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce,
-+      0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080,
-+      0x0048, 0x6ddd, 0x6a00, 0xd2f4, 0x0040, 0x6ddb, 0x6a14, 0xa294,
-+      0x00ff, 0x0078, 0x6ddd, 0x2011, 0x0000, 0x629e, 0x7824, 0xd0cc,
-+      0x0040, 0x6de6, 0x6017, 0x0016, 0x0078, 0x6d1a, 0x6017, 0x0012,
-+      0x0078, 0x6d1a, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294,
-+      0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, 0x2069, 0xa8b1, 0x6843,
-+      0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7,
-+      0x9575, 0x1078, 0x6e06, 0x1078, 0x5ac0, 0x007c, 0x007e, 0x6014,
-+      0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x007f, 0x007c, 0x007e,
-+      0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008,
-+      0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e,
-+      0x2061, 0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040,
-+      0x6e59, 0x1078, 0x6e0f, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e,
-+      0x2061, 0xa8b1, 0x6128, 0xa192, 0x00c8, 0x00c8, 0x6e44, 0x8108,
-+      0x612a, 0x6124, 0x0c7f, 0x81ff, 0x0040, 0x6e54, 0x1078, 0x5ac0,
-+      0x1078, 0x6e06, 0x0078, 0x6e54, 0x6124, 0xa1e5, 0x0000, 0x0040,
-+      0x6e51, 0x1078, 0xa5c4, 0x1078, 0x5acb, 0x2009, 0x0014, 0x1078,
-+      0x775c, 0x0c7f, 0x0078, 0x6e54, 0x027f, 0x017f, 0x0d7f, 0x0c7f,
-+      0x007c, 0x2001, 0xa8cd, 0x2004, 0xa005, 0x00c0, 0x6e54, 0x0c7e,
-+      0x2061, 0xa8b1, 0x6128, 0xa192, 0x0003, 0x00c8, 0x6e44, 0x8108,
-+      0x612a, 0x0c7f, 0x1078, 0x5ac0, 0x1078, 0x4224, 0x0078, 0x6e54,
-+      0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x5ad8, 0x2071,
-+      0xa8b1, 0x713c, 0x81ff, 0x0040, 0x6e9a, 0x2061, 0x0100, 0x2069,
-+      0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x6ea0, 0x6803, 0x1000,
-+      0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x037f,
-+      0x713c, 0x2160, 0x1078, 0xa5c4, 0x2009, 0x004a, 0x1078, 0x775c,
-+      0x0078, 0x6e9a, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c,
-+      0x0078, 0x6e8a, 0x0e7e, 0x2071, 0xa8b1, 0x7048, 0xd084, 0x0040,
-+      0x6ebc, 0x713c, 0x81ff, 0x0040, 0x6ebc, 0x2071, 0x0100, 0xa188,
-+      0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, 0x6eba, 0x7017, 0x0012,
-+      0x0078, 0x6ebc, 0x7017, 0x0016, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e,
-+      0x0c7e, 0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000,
-+      0x6018, 0x2068, 0x6ca0, 0x2071, 0xa8b1, 0x7018, 0x2068, 0x8dff,
-+      0x0040, 0x6ee6, 0x68a0, 0xa406, 0x0040, 0x6eda, 0x6854, 0x2068,
-+      0x0078, 0x6ecf, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648, 0x2d60,
-+      0x1078, 0x4736, 0x0040, 0x6ee6, 0xa085, 0x0001, 0x127f, 0x007f,
-+      0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x20a1,
-+      0x020b, 0x1078, 0x6731, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x781c, 0xa086, 0x0004, 0x00c0, 0x6f01, 0x6098, 0x0078,
-+      0x6f02, 0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9,
-+      0x0010, 0xa006, 0x20a2, 0x00f0, 0x6f0a, 0x20a2, 0x20a2, 0x60c3,
-+      0x002c, 0x1078, 0x6dfb, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
-+      0x1078, 0x6731, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f, 0x157f,
-+      0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3,
-+      0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xa640, 0x2019,
-+      0xa641, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x00f0,
-+      0x6f39, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078,
-+      0x6dfb, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e,
-+      0x20a1, 0x020b, 0x1078, 0x6799, 0x1078, 0x67b0, 0x7810, 0xa080,
-+      0x0000, 0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002,
-+      0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x1078, 0x6dfb,
-+      0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
-+      0x020b, 0x1078, 0x6731, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x147f,
-+      0x157f, 0x007c, 0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b,
-+      0x1078, 0x6731, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017,
-+      0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2,
-+      0x1078, 0x6dfb, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x0e7e,
-+      0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x700c,
-+      0x2060, 0x8cff, 0x0040, 0x6fbb, 0x1078, 0x8f00, 0x00c0, 0x6fb2,
-+      0x1078, 0x7c83, 0x600c, 0x007e, 0x1078, 0x772d, 0x1078, 0x7233,
-+      0x0c7f, 0x0078, 0x6fa9, 0x700f, 0x0000, 0x700b, 0x0000, 0x127f,
-+      0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e,
-+      0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069,
-+      0x0100, 0x2079, 0x0140, 0x2071, 0xa8b1, 0x7024, 0x2060, 0x8cff,
-+      0x0040, 0x7014, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x5acb,
-+      0x2009, 0x0013, 0x1078, 0x775c, 0x20a9, 0x01f4, 0x6824, 0xd094,
-+      0x0040, 0x6ff7, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040,
-+      0x7009, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x7009, 0xd084,
-+      0x0040, 0x6ffe, 0x6827, 0x0001, 0x0078, 0x7000, 0x00f0, 0x6fe6,
-+      0x7804, 0xa084, 0x1000, 0x0040, 0x7009, 0x7803, 0x0100, 0x7803,
-+      0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f,
-+      0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0xa600, 0x2004, 0xa096,
-+      0x0001, 0x0040, 0x704e, 0xa096, 0x0004, 0x0040, 0x704e, 0x1078,
-+      0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x41dc, 0x1078,
-+      0x5a45, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x703c, 0x6827,
-+      0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x704e, 0x7803, 0x1000,
-+      0x7803, 0x0000, 0x0078, 0x704e, 0xd084, 0x0040, 0x7043, 0x6827,
-+      0x0001, 0x0078, 0x7045, 0x00f0, 0x702b, 0x7804, 0xa084, 0x1000,
-+      0x0040, 0x704e, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
-+      0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+      0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
-+      0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-+      0xa8b1, 0x703c, 0x2060, 0x8cff, 0x0040, 0x70d6, 0x68af, 0x95f5,
-+      0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x00c0, 0x7074, 0x68c7,
-+      0x0000, 0x68cb, 0x0008, 0x1078, 0x5ad8, 0x1078, 0x1f7e, 0x047e,
-+      0x057e, 0x2009, 0x017f, 0x212c, 0x200b, 0x00a5, 0x2021, 0x0169,
-+      0x2404, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x70a5, 0x68c7,
-+      0x0000, 0x68cb, 0x0008, 0x0e7e, 0x0f7e, 0x2079, 0x0020, 0x2071,
-+      0xa908, 0x6814, 0xa084, 0x0004, 0xa085, 0x0012, 0x6816, 0x7803,
-+      0x0008, 0x7003, 0x0000, 0x0f7f, 0x0e7f, 0x250a, 0x057f, 0x047f,
-+      0xa39d, 0x0000, 0x00c0, 0x70b0, 0x2009, 0x0049, 0x1078, 0x775c,
-+      0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x70c3, 0x6827, 0x0004,
-+      0x7804, 0xa084, 0x4000, 0x0040, 0x70d5, 0x7803, 0x1000, 0x7803,
-+      0x0000, 0x0078, 0x70d5, 0xd08c, 0x0040, 0x70ca, 0x6827, 0x0002,
-+      0x0078, 0x70cc, 0x00f0, 0x70b2, 0x7804, 0xa084, 0x1000, 0x0040,
-+      0x70d5, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
-+      0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+      0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1, 0x6a06, 0x127f,
-+      0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0xa8b1,
-+      0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-+      0x007e, 0x127e, 0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2091,
-+      0x8000, 0x8cff, 0x0040, 0x7134, 0x601c, 0xa206, 0x00c0, 0x712f,
-+      0x7014, 0xac36, 0x00c0, 0x710e, 0x660c, 0x7616, 0x7010, 0xac36,
-+      0x00c0, 0x711c, 0x2c00, 0xaf36, 0x0040, 0x711a, 0x2f00, 0x7012,
-+      0x0078, 0x711c, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+      0x0040, 0x7125, 0x7e0e, 0x0078, 0x7126, 0x2678, 0x600f, 0x0000,
-+      0x1078, 0x8ec6, 0x1078, 0x7233, 0x0c7f, 0x0078, 0x7101, 0x2c78,
-+      0x600c, 0x2060, 0x0078, 0x7101, 0x127f, 0x007f, 0x067f, 0x0c7f,
-+      0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
-+      0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+      0x20a3, 0x1000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1, 0x020b,
-+      0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+      0x20a2, 0x20a3, 0x4000, 0x0078, 0x718e, 0x157e, 0x147e, 0x20a1,
-+      0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a3, 0x2000, 0x0078, 0x718e, 0x157e, 0x147e,
-+      0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x718e, 0x157e,
-+      0x147e, 0x20a1, 0x020b, 0x1078, 0x69d0, 0x7810, 0x20a2, 0xa006,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x723e,
-+      0x60c3, 0x0020, 0x1078, 0x6dfb, 0x147f, 0x157f, 0x007c, 0x127e,
-+      0x0c7e, 0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0,
-+      0x71a6, 0xd1bc, 0x00c0, 0x71f0, 0x0078, 0x7230, 0x2009, 0x017f,
-+      0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9,
-+      0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x71e7,
-+      0x6020, 0xd0b4, 0x0040, 0x71e7, 0x6024, 0xd094, 0x00c0, 0x71e7,
-+      0x2104, 0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x71e7, 0x00f0,
-+      0x71b3, 0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c,
-+      0x00ff, 0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043,
-+      0x0001, 0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0,
-+      0x71e6, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x71dd, 0x027f, 0x0d7f,
-+      0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x7230,
-+      0x2009, 0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069,
-+      0x0140, 0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000,
-+      0x0040, 0x7229, 0x6020, 0xd0bc, 0x0040, 0x7229, 0x2104, 0xa084,
-+      0x000f, 0xa086, 0x0004, 0x00c0, 0x7229, 0x00f0, 0x71fd, 0x027e,
-+      0x6164, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d,
-+      0x6088, 0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043,
-+      0x0000, 0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x7223,
-+      0x027f, 0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000,
-+      0x0c7f, 0x127f, 0x007c, 0x0e7e, 0x2071, 0xa8b1, 0x7020, 0xa005,
-+      0x0040, 0x723c, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008,
-+      0x20a2, 0x00f0, 0x7240, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e,
-+      0x0d7e, 0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000,
-+      0x2071, 0xa8b1, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff,
-+      0x0040, 0x72e2, 0x8cff, 0x0040, 0x72e2, 0x601c, 0xa086, 0x0006,
-+      0x00c0, 0x72dd, 0x88ff, 0x0040, 0x726d, 0x2800, 0xac06, 0x00c0,
-+      0x72dd, 0x2039, 0x0000, 0x0078, 0x7278, 0x6018, 0xa206, 0x00c0,
-+      0x72dd, 0x85ff, 0x0040, 0x7278, 0x6020, 0xa106, 0x00c0, 0x72dd,
-+      0x7024, 0xac06, 0x00c0, 0x72a8, 0x2069, 0x0100, 0x68c0, 0xa005,
-+      0x0040, 0x72a3, 0x1078, 0x5acb, 0x6817, 0x0008, 0x68c3, 0x0000,
-+      0x1078, 0x7378, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
-+      0xa384, 0x1000, 0x0040, 0x7298, 0x6803, 0x0100, 0x6803, 0x0000,
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x72a0, 0x6827, 0x0001,
-+      0x037f, 0x0078, 0x72a8, 0x6003, 0x0009, 0x630a, 0x0078, 0x72dd,
-+      0x7014, 0xac36, 0x00c0, 0x72ae, 0x660c, 0x7616, 0x7010, 0xac36,
-+      0x00c0, 0x72bc, 0x2c00, 0xaf36, 0x0040, 0x72ba, 0x2f00, 0x7012,
-+      0x0078, 0x72bc, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+      0x0040, 0x72c5, 0x7e0e, 0x0078, 0x72c6, 0x2678, 0x89ff, 0x00c0,
-+      0x72d5, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+      0x72d3, 0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x1078, 0x7233, 0x88ff,
-+      0x00c0, 0x72ec, 0x0c7f, 0x0078, 0x7257, 0x2c78, 0x600c, 0x2060,
-+      0x0078, 0x7257, 0xa006, 0x127f, 0x007f, 0x067f, 0x077f, 0x0c7f,
-+      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5,
-+      0x0001, 0x0078, 0x72e3, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e,
-+      0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x7638,
-+      0x2660, 0x2678, 0x8cff, 0x0040, 0x7367, 0x601c, 0xa086, 0x0006,
-+      0x00c0, 0x7362, 0x87ff, 0x0040, 0x7313, 0x2700, 0xac06, 0x00c0,
-+      0x7362, 0x0078, 0x731e, 0x6018, 0xa206, 0x00c0, 0x7362, 0x85ff,
-+      0x0040, 0x731e, 0x6020, 0xa106, 0x00c0, 0x7362, 0x703c, 0xac06,
-+      0x00c0, 0x7332, 0x037e, 0x2019, 0x0001, 0x1078, 0x7058, 0x7033,
-+      0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x704b,
-+      0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x7338, 0x660c, 0x763a,
-+      0x7034, 0xac36, 0x00c0, 0x7346, 0x2c00, 0xaf36, 0x0040, 0x7344,
-+      0x2f00, 0x7036, 0x0078, 0x7346, 0x7037, 0x0000, 0x660c, 0x067e,
-+      0x2c00, 0xaf06, 0x0040, 0x734f, 0x7e0e, 0x0078, 0x7350, 0x2678,
-+      0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x735a,
-+      0x1078, 0xa1ca, 0x1078, 0x8ec6, 0x87ff, 0x00c0, 0x7371, 0x0c7f,
-+      0x0078, 0x7302, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7302, 0xa006,
-+      0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
-+      0x007c, 0x6017, 0x0000, 0x0c7f, 0xa7bd, 0x0001, 0x0078, 0x7368,
-+      0x0e7e, 0x2071, 0xa8b1, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002,
-+      0x00c0, 0x7386, 0x7007, 0x0005, 0x0078, 0x7388, 0x7007, 0x0000,
-+      0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
-+      0x127e, 0x2091, 0x8000, 0x2071, 0xa8b1, 0x2c10, 0x7638, 0x2660,
-+      0x2678, 0x8cff, 0x0040, 0x73c8, 0x2200, 0xac06, 0x00c0, 0x73c3,
-+      0x7038, 0xac36, 0x00c0, 0x73a6, 0x660c, 0x763a, 0x7034, 0xac36,
-+      0x00c0, 0x73b4, 0x2c00, 0xaf36, 0x0040, 0x73b2, 0x2f00, 0x7036,
-+      0x0078, 0x73b4, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0040,
-+      0x73bc, 0x7e0e, 0x0078, 0x73bd, 0x2678, 0x600f, 0x0000, 0xa085,
-+      0x0001, 0x0078, 0x73c8, 0x2c78, 0x600c, 0x2060, 0x0078, 0x7399,
-+      0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c,
-+      0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091,
-+      0x8000, 0x2071, 0xa8b1, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0040,
-+      0x7469, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x7464,
-+      0x7024, 0xac06, 0x00c0, 0x740f, 0x2069, 0x0100, 0x68c0, 0xa005,
-+      0x0040, 0x743d, 0x1078, 0x6e0f, 0x68c3, 0x0000, 0x1078, 0x7378,
-+      0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+      0x0040, 0x7406, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-+      0x6824, 0xd084, 0x0040, 0x740e, 0x6827, 0x0001, 0x037f, 0x700c,
-+      0xac36, 0x00c0, 0x7415, 0x660c, 0x760e, 0x7008, 0xac36, 0x00c0,
-+      0x7423, 0x2c00, 0xaf36, 0x0040, 0x7421, 0x2f00, 0x700a, 0x0078,
-+      0x7423, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040,
-+      0x742c, 0x7e0e, 0x0078, 0x742d, 0x2678, 0x600f, 0x0000, 0x1078,
-+      0x8eec, 0x00c0, 0x7441, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0,
-+      0x745d, 0x1078, 0x7c83, 0x0078, 0x745d, 0x1078, 0x7378, 0x0078,
-+      0x740f, 0x1078, 0x8f00, 0x00c0, 0x7449, 0x1078, 0x7c83, 0x0078,
-+      0x745d, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x745d, 0x601c,
-+      0xa086, 0x0003, 0x00c0, 0x7471, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x1078, 0x8ec6, 0x1078,
-+      0x7233, 0x0c7f, 0x0078, 0x73de, 0x2c78, 0x600c, 0x2060, 0x0078,
-+      0x73de, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f,
-+      0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x745d, 0x1078, 0xa1ca,
-+      0x0078, 0x745d, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, 0xa006,
-+      0xa190, 0x0020, 0x221c, 0xa39e, 0x2676, 0x00c0, 0x748b, 0x8210,
-+      0x8000, 0x0078, 0x7482, 0xa005, 0x0040, 0x7497, 0x20a9, 0x0020,
-+      0x2198, 0x8211, 0xa282, 0x0020, 0x20c8, 0x20a0, 0x53a3, 0x147f,
-+      0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
-+      0x67c2, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x2099, 0xa8a5, 0x20a9, 0x0004, 0x53a6,
-+      0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x1078, 0x6dfb, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x67c2,
-+      0x20a3, 0x0214, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084,
-+      0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x6dfb,
-+      0x007c, 0x0d7e, 0x017e, 0x2f68, 0x2009, 0x0035, 0x1078, 0x91bc,
-+      0x00c0, 0x7551, 0x20a1, 0x020b, 0x1078, 0x6731, 0x20a3, 0x1300,
-+      0x20a3, 0x0000, 0x7828, 0x2068, 0x681c, 0xa086, 0x0003, 0x0040,
-+      0x752d, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0,
-+      0x7507, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0078, 0x7542, 0xa286,
-+      0x007f, 0x00c0, 0x7511, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0078,
-+      0x7542, 0xd2bc, 0x0040, 0x7527, 0xa286, 0x0080, 0x00c0, 0x751e,
-+      0x20a3, 0x00ff, 0x20a3, 0xfffc, 0x0078, 0x7542, 0xa2e8, 0xa735,
-+      0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x0078, 0x7542, 0x20a3,
-+      0x0000, 0x6098, 0x20a2, 0x0078, 0x7542, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xa082, 0x007e, 0x0048, 0x753e, 0x0d7e, 0x2069, 0xa61b,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x7542, 0x20a3, 0x0000,
-+      0x6030, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x6dfb, 0x017f, 0x0d7f,
-+      0x007c, 0x7817, 0x0001, 0x7803, 0x0006, 0x017f, 0x0d7f, 0x007c,
-+      0x0d7e, 0x027e, 0x7928, 0x2168, 0x691c, 0xa186, 0x0006, 0x0040,
-+      0x757a, 0xa186, 0x0003, 0x0040, 0x75d5, 0xa186, 0x0005, 0x0040,
-+      0x75b8, 0xa186, 0x0004, 0x0040, 0x75a8, 0xa186, 0x0008, 0x0040,
-+      0x75c2, 0x7807, 0x0037, 0x7813, 0x1700, 0x1078, 0x7640, 0x027f,
-+      0x0d7f, 0x007c, 0x1078, 0x75fd, 0x2009, 0x4000, 0x6800, 0x0079,
-+      0x7581, 0x7594, 0x75a2, 0x7596, 0x75a2, 0x759d, 0x7594, 0x7594,
-+      0x75a2, 0x75a2, 0x75a2, 0x75a2, 0x7594, 0x7594, 0x7594, 0x7594,
-+      0x7594, 0x75a2, 0x7594, 0x75a2, 0x1078, 0x1332, 0x6824, 0xd0e4,
-+      0x0040, 0x759d, 0xd0cc, 0x0040, 0x75a0, 0xa00e, 0x0078, 0x75a2,
-+      0x2009, 0x2000, 0x6828, 0x20a2, 0x682c, 0x20a2, 0x0078, 0x75f3,
-+      0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
-+      0x6a00, 0xa286, 0x0002, 0x00c0, 0x75b6, 0xa00e, 0x0078, 0x75f3,
-+      0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000,
-+      0x0078, 0x75f3, 0x1078, 0x75fd, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x2009, 0x4000, 0xa286, 0x0005, 0x0040, 0x75d2, 0xa286, 0x0002,
-+      0x00c0, 0x75d3, 0xa00e, 0x0078, 0x75f3, 0x1078, 0x75fd, 0x6810,
-+      0x2068, 0x697c, 0x6810, 0xa112, 0x6980, 0x6814, 0xa103, 0x20a2,
-+      0x22a2, 0x7928, 0xa180, 0x0000, 0x2004, 0xa08e, 0x0002, 0x0040,
-+      0x75f1, 0xa08e, 0x0004, 0x0040, 0x75f1, 0x2009, 0x4000, 0x0078,
-+      0x75f3, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000, 0x60c3, 0x0018,
-+      0x1078, 0x6dfb, 0x027f, 0x0d7f, 0x007c, 0x037e, 0x047e, 0x057e,
-+      0x067e, 0x20a1, 0x020b, 0x1078, 0x67c2, 0xa006, 0x20a3, 0x0200,
-+      0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xa092, 0x007e, 0x0048, 0x7623, 0x0d7e, 0x2069, 0xa61b,
-+      0x2d2c, 0x8d68, 0x2d34, 0xa0e8, 0xa735, 0x2d6c, 0x6b10, 0x6c14,
-+      0x0d7f, 0x0078, 0x7629, 0x2019, 0x0000, 0x6498, 0x2029, 0x0000,
-+      0x6630, 0x7828, 0xa080, 0x0007, 0x2004, 0xa086, 0x0003, 0x00c0,
-+      0x7637, 0x25a2, 0x26a2, 0x23a2, 0x24a2, 0x0078, 0x763b, 0x23a2,
-+      0x24a2, 0x25a2, 0x26a2, 0x067f, 0x057f, 0x047f, 0x037f, 0x007c,
-+      0x20a1, 0x020b, 0x1078, 0x67c2, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+      0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb,
-+      0x007c, 0x20a1, 0x020b, 0x1078, 0x6728, 0x20a3, 0x1400, 0x20a3,
-+      0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x7828, 0x20a2, 0x782c,
-+      0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x20a3, 0x0000,
-+      0x60c3, 0x0010, 0x1078, 0x6dfb, 0x007c, 0x20a1, 0x020b, 0x1078,
-+      0x67b9, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0x20a2, 0x7810,
-+      0x20a2, 0x60c3, 0x0008, 0x1078, 0x6dfb, 0x007c, 0x147e, 0x20a1,
-+      0x020b, 0x1078, 0x7689, 0x60c3, 0x0000, 0x1078, 0x6dfb, 0x147f,
-+      0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xd0bc, 0x0040, 0x76a6, 0x0d7e, 0xa0e8, 0xa735, 0x2d6c,
-+      0x6810, 0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xa61b,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x76ae, 0x20a3, 0x0300,
-+      0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0819,
-+      0x20a3, 0x0000, 0x1078, 0x6dea, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
-+      0x7a08, 0x22a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x007c, 0x2061,
-+      0xad00, 0x2a70, 0x7064, 0x704a, 0x704f, 0xad00, 0x007c, 0x0e7e,
-+      0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0010,
-+      0x0048, 0x76f9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
-+      0x76e5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x76e1, 0x0078,
-+      0x76d4, 0x2061, 0xad00, 0x0078, 0x76d4, 0x6003, 0x0008, 0x8529,
-+      0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x76f5, 0x754e,
-+      0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
-+      0x76f0, 0xa006, 0x0078, 0x76f2, 0x0e7e, 0x2071, 0xa600, 0x7548,
-+      0xa582, 0x0010, 0x0048, 0x772a, 0x704c, 0x2060, 0x6000, 0xa086,
-+      0x0000, 0x0040, 0x7717, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8,
-+      0x7713, 0x0078, 0x7706, 0x2061, 0xad00, 0x0078, 0x7706, 0x6003,
-+      0x0008, 0x8529, 0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8,
-+      0x7726, 0x754e, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704f, 0xad00,
-+      0x0078, 0x7722, 0xa006, 0x0078, 0x7724, 0xac82, 0xad00, 0x1048,
-+      0x1332, 0x2001, 0xa616, 0x2004, 0xac02, 0x10c8, 0x1332, 0xa006,
-+      0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, 0x0000,
-+      0x6003, 0x0000, 0x6022, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036,
-+      0x603a, 0x603e, 0x2061, 0xa600, 0x6048, 0x8000, 0x604a, 0xa086,
-+      0x0001, 0x0040, 0x7754, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078,
-+      0x62d1, 0x127f, 0x0078, 0x7753, 0x601c, 0xa084, 0x000f, 0x0079,
-+      0x7761, 0x776a, 0x777b, 0x7797, 0x77b3, 0x920e, 0x922a, 0x9246,
-+      0x776a, 0x777b, 0xa186, 0x0013, 0x00c0, 0x7773, 0x1078, 0x61cd,
-+      0x1078, 0x62d1, 0x007c, 0xa18e, 0x0047, 0x00c0, 0x777a, 0xa016,
-+      0x1078, 0x15fa, 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
-+      0x1332, 0x1079, 0x7785, 0x067f, 0x007c, 0x7795, 0x7b00, 0x7cb2,
-+      0x7795, 0x7d36, 0x77cf, 0x7795, 0x7795, 0x7a92, 0x80f6, 0x7795,
-+      0x7795, 0x7795, 0x7795, 0x7795, 0x7795, 0x1078, 0x1332, 0x067e,
-+      0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x77a1, 0x067f,
-+      0x007c, 0x77b1, 0x87c3, 0x77b1, 0x77b1, 0x77b1, 0x77b1, 0x77b1,
-+      0x77b1, 0x8766, 0x8951, 0x77b1, 0x87f3, 0x8879, 0x87f3, 0x8879,
-+      0x77b1, 0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
-+      0x1332, 0x1079, 0x77bd, 0x067f, 0x007c, 0x77cd, 0x813d, 0x820e,
-+      0x8368, 0x84e4, 0x77cd, 0x77cd, 0x77cd, 0x8116, 0x870e, 0x8712,
-+      0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x8742, 0x1078, 0x1332, 0xa1b6,
-+      0x0015, 0x00c0, 0x77d7, 0x1078, 0x772d, 0x0078, 0x77dd, 0xa1b6,
-+      0x0016, 0x10c0, 0x1332, 0x1078, 0x772d, 0x007c, 0x20a9, 0x000e,
-+      0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420,
-+      0x9398, 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002,
-+      0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x77ec,
-+      0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7803, 0x6010, 0x2070, 0x7007,
-+      0x0000, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0d7e,
-+      0x037e, 0x7330, 0xa386, 0x0200, 0x00c0, 0x7814, 0x6018, 0x2068,
-+      0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x781e,
-+      0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x772d,
-+      0x037f, 0x0d7f, 0x007c, 0x017e, 0x20a9, 0x002a, 0xae80, 0x000c,
-+      0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a,
-+      0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3,
-+      0x0e7e, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078,
-+      0x772d, 0x017f, 0x007c, 0x0e7e, 0x0d7e, 0x603f, 0x0000, 0x2c68,
-+      0x017e, 0x2009, 0x0035, 0x1078, 0x91bc, 0x017f, 0x00c0, 0x785f,
-+      0x027e, 0x6228, 0x2268, 0x027f, 0x2071, 0xab8c, 0x6b1c, 0xa386,
-+      0x0003, 0x0040, 0x7863, 0xa386, 0x0006, 0x0040, 0x7867, 0x1078,
-+      0x772d, 0x0078, 0x7869, 0x1078, 0x786c, 0x0078, 0x7869, 0x1078,
-+      0x7938, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, 0x6810, 0x2078, 0xa186,
-+      0x0015, 0x0040, 0x791d, 0xa18e, 0x0016, 0x00c0, 0x7936, 0x700c,
-+      0xa08c, 0xff00, 0xa186, 0x1700, 0x0040, 0x7882, 0xa186, 0x0300,
-+      0x00c0, 0x78f8, 0x8fff, 0x00c0, 0x788c, 0x6800, 0xa086, 0x000f,
-+      0x0040, 0x78db, 0x0078, 0x7934, 0x6808, 0xa086, 0xffff, 0x00c0,
-+      0x7921, 0x784c, 0xa084, 0x0060, 0xa086, 0x0020, 0x00c0, 0x78a2,
-+      0x797c, 0x7810, 0xa106, 0x00c0, 0x7921, 0x7980, 0x7814, 0xa106,
-+      0x00c0, 0x7921, 0x1078, 0x8eb9, 0x6830, 0x7852, 0x784c, 0xc0dc,
-+      0xc0f4, 0xc0d4, 0x784e, 0x027e, 0xa00e, 0x6a14, 0x2001, 0x000a,
-+      0x1078, 0x5c1c, 0x7854, 0xa20a, 0x0048, 0x78b7, 0x8011, 0x7a56,
-+      0x82ff, 0x027f, 0x00c0, 0x78c3, 0x0c7e, 0x2d60, 0x1078, 0x8ae0,
-+      0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x0d7e, 0x2f68, 0x6838, 0xd0fc,
-+      0x00c0, 0x78ce, 0x1078, 0x4353, 0x0078, 0x78d0, 0x1078, 0x4431,
-+      0x0d7f, 0x0c7f, 0x00c0, 0x7921, 0x0c7e, 0x2d60, 0x1078, 0x772d,
-+      0x0c7f, 0x0078, 0x7934, 0x0c7e, 0x1078, 0x9187, 0x0040, 0x78f1,
-+      0x6013, 0x0000, 0x6818, 0x601a, 0x601f, 0x0003, 0x6904, 0x0c7e,
-+      0x2d60, 0x1078, 0x772d, 0x0c7f, 0x1078, 0x775c, 0x0c7f, 0x0078,
-+      0x7934, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x0c7f, 0x0078, 0x7934,
-+      0x7008, 0xa086, 0x000b, 0x00c0, 0x7912, 0x6018, 0x200c, 0xc1bc,
-+      0x2102, 0x0c7e, 0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003,
-+      0x000b, 0x601f, 0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
-+      0x0078, 0x7934, 0x700c, 0xa086, 0x2a00, 0x00c0, 0x7921, 0x2001,
-+      0xa8a4, 0x2004, 0x683e, 0x0078, 0x7934, 0x1078, 0x7953, 0x0078,
-+      0x7936, 0x8fff, 0x1040, 0x1332, 0x0c7e, 0x0d7e, 0x2d60, 0x2f68,
-+      0x6837, 0x0103, 0x684b, 0x0003, 0x1078, 0x89cf, 0x1078, 0x8eb9,
-+      0x1078, 0x8ec6, 0x0d7f, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c,
-+      0xa186, 0x0015, 0x00c0, 0x7942, 0x2001, 0xa8a4, 0x2004, 0x683e,
-+      0x0078, 0x7950, 0xa18e, 0x0016, 0x00c0, 0x7952, 0x0c7e, 0x2d00,
-+      0x2060, 0x1078, 0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x0c7f,
-+      0x1078, 0x772d, 0x007c, 0x027e, 0x037e, 0x047e, 0x7228, 0x7c80,
-+      0x7b7c, 0xd2f4, 0x0040, 0x7962, 0x2001, 0xa8a4, 0x2004, 0x683e,
-+      0x0078, 0x79c6, 0x0c7e, 0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x6804,
-+      0xa086, 0x0050, 0x00c0, 0x797a, 0x0c7e, 0x2d00, 0x2060, 0x6003,
-+      0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f,
-+      0x0078, 0x79c6, 0x6800, 0xa086, 0x000f, 0x0040, 0x799c, 0x8fff,
-+      0x1040, 0x1332, 0x6824, 0xd0dc, 0x00c0, 0x799c, 0x6800, 0xa086,
-+      0x0004, 0x00c0, 0x79a1, 0x784c, 0xd0ac, 0x0040, 0x79a1, 0x784c,
-+      0xc0dc, 0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001,
-+      0x0001, 0x682e, 0x0078, 0x79c0, 0x2001, 0x0007, 0x682e, 0x0078,
-+      0x79c0, 0x784c, 0xd0b4, 0x00c0, 0x79ae, 0xd0ac, 0x0040, 0x799c,
-+      0x784c, 0xd0f4, 0x00c0, 0x799c, 0x0078, 0x798f, 0xd2ec, 0x00c0,
-+      0x799c, 0x7024, 0xa306, 0x00c0, 0x79b9, 0x7020, 0xa406, 0x0040,
-+      0x799c, 0x7020, 0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e,
-+      0x1078, 0x8ff0, 0x1078, 0x62d1, 0x0078, 0x79c8, 0x1078, 0x772d,
-+      0x047f, 0x037f, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x027e, 0x6034,
-+      0x2068, 0x6a1c, 0xa286, 0x0007, 0x0040, 0x7a35, 0xa286, 0x0002,
-+      0x0040, 0x7a35, 0xa286, 0x0000, 0x0040, 0x7a35, 0x6808, 0x6338,
-+      0xa306, 0x00c0, 0x7a35, 0x2071, 0xab8c, 0xa186, 0x0015, 0x0040,
-+      0x7a2f, 0xa18e, 0x0016, 0x00c0, 0x7a02, 0x6030, 0xa084, 0x00ff,
-+      0xa086, 0x0001, 0x00c0, 0x7a02, 0x700c, 0xa086, 0x2a00, 0x00c0,
-+      0x7a02, 0x6034, 0xa080, 0x0009, 0x200c, 0xc1dd, 0xc1f5, 0x2102,
-+      0x0078, 0x7a2f, 0x0c7e, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b,
-+      0x0040, 0x7a22, 0xa186, 0x004c, 0x0040, 0x7a22, 0xa186, 0x004d,
-+      0x0040, 0x7a22, 0xa186, 0x004e, 0x0040, 0x7a22, 0xa186, 0x0052,
-+      0x0040, 0x7a22, 0x6010, 0x2068, 0x1078, 0x8d06, 0x1040, 0x1332,
-+      0x6853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
-+      0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7f, 0x0078, 0x7a35, 0x6034,
-+      0x2068, 0x2001, 0xa8a4, 0x2004, 0x683e, 0x1078, 0x772d, 0x027f,
-+      0x0d7f, 0x0e7f, 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010,
-+      0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x00c0, 0x7a73, 0x6018, 0x2068,
-+      0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290, 0x0004, 0x20a9,
-+      0x0004, 0xad98, 0x000a, 0x1078, 0x80de, 0x027f, 0x037f, 0x157f,
-+      0x00c0, 0x7a76, 0x157e, 0x037e, 0x027e, 0xae90, 0x000c, 0xa290,
-+      0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x1078, 0x80de, 0x027f,
-+      0x037f, 0x157f, 0x00c0, 0x7a76, 0x7038, 0x680a, 0x703c, 0x680e,
-+      0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x77f8, 0x1078, 0x2880,
-+      0x0c7e, 0x1078, 0x76c7, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f,
-+      0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x1078,
-+      0x4502, 0x1078, 0x4535, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7f,
-+      0x0078, 0x7a73, 0x2100, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0xa1b2,
-+      0x0040, 0x00c8, 0x7af7, 0x0079, 0x7a9d, 0x7aeb, 0x7adf, 0x7aeb,
-+      0x7aeb, 0x7aeb, 0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+      0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7aeb, 0x7aeb,
-+      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add,
-+      0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7aeb,
-+      0x7aeb, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add, 0x7add,
-+      0x7add, 0x7add, 0x7aeb, 0x7add, 0x7add, 0x1078, 0x1332, 0x6003,
-+      0x0001, 0x6106, 0x1078, 0x5dd7, 0x127e, 0x2091, 0x8000, 0x1078,
-+      0x62d1, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5dd7,
-+      0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x2600,
-+      0x0079, 0x7afa, 0x7afe, 0x7afe, 0x7afe, 0x7aeb, 0x1078, 0x1332,
-+      0x6004, 0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0,
-+      0x7b10, 0xa0b2, 0x0040, 0x00c8, 0x7c79, 0x2008, 0x0079, 0x7bbf,
-+      0xa1b6, 0x0027, 0x00c0, 0x7b7c, 0x1078, 0x61cd, 0x6004, 0x1078,
-+      0x8eec, 0x0040, 0x7b2d, 0x1078, 0x8f00, 0x0040, 0x7b74, 0xa08e,
-+      0x0021, 0x0040, 0x7b78, 0xa08e, 0x0022, 0x0040, 0x7b74, 0xa08e,
-+      0x003d, 0x0040, 0x7b78, 0x0078, 0x7b6f, 0x1078, 0x28a6, 0x2001,
-+      0x0007, 0x1078, 0x4502, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
-+      0x7c83, 0xa186, 0x007e, 0x00c0, 0x7b42, 0x2001, 0xa633, 0x2014,
-+      0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x027e, 0x2019,
-+      0x0028, 0x1078, 0x73d0, 0x027f, 0x1078, 0xa4f1, 0x037f, 0x027f,
-+      0x017f, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078,
-+      0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x0c7e, 0x6018,
-+      0xa065, 0x0040, 0x7b65, 0x1078, 0x47e9, 0x0c7f, 0x2c08, 0x1078,
-+      0x9f8b, 0x077f, 0x037f, 0x027f, 0x017f, 0x1078, 0x457f, 0x1078,
-+      0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x7b6f,
-+      0x1078, 0x7ca6, 0x0078, 0x7b6f, 0xa186, 0x0014, 0x00c0, 0x7b73,
-+      0x1078, 0x61cd, 0x1078, 0x2880, 0x1078, 0x8eec, 0x00c0, 0x7b9b,
-+      0x1078, 0x28a6, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x7c83,
-+      0xa186, 0x007e, 0x00c0, 0x7b99, 0x2001, 0xa633, 0x200c, 0xc185,
-+      0x2102, 0x0078, 0x7b6f, 0x1078, 0x8f00, 0x00c0, 0x7ba3, 0x1078,
-+      0x7c83, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0032, 0x00c0, 0x7bb4,
-+      0x0e7e, 0x0f7e, 0x2071, 0xa682, 0x2079, 0x0000, 0x1078, 0x2bd7,
-+      0x0f7f, 0x0e7f, 0x0078, 0x7b6f, 0x6004, 0xa08e, 0x0021, 0x0040,
-+      0x7b9f, 0xa08e, 0x0022, 0x1040, 0x7c83, 0x0078, 0x7b6f, 0x7c01,
-+      0x7c03, 0x7c07, 0x7c0b, 0x7c0f, 0x7c13, 0x7bff, 0x7bff, 0x7bff,
-+      0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
-+      0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
-+      0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c17, 0x7c29, 0x7bff,
-+      0x7c2b, 0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7c29,
-+      0x7c29, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff,
-+      0x7bff, 0x7c5c, 0x7c29, 0x7bff, 0x7c23, 0x7bff, 0x7bff, 0x7bff,
-+      0x7c25, 0x7bff, 0x7bff, 0x7bff, 0x7c29, 0x7bff, 0x7bff, 0x1078,
-+      0x1332, 0x0078, 0x7c29, 0x2001, 0x000b, 0x0078, 0x7c36, 0x2001,
-+      0x0003, 0x0078, 0x7c36, 0x2001, 0x0005, 0x0078, 0x7c36, 0x2001,
-+      0x0001, 0x0078, 0x7c36, 0x2001, 0x0009, 0x0078, 0x7c36, 0x1078,
-+      0x61cd, 0x6003, 0x0005, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078,
-+      0x62d1, 0x0078, 0x7c35, 0x0078, 0x7c29, 0x0078, 0x7c29, 0x1078,
-+      0x4502, 0x0078, 0x7c6e, 0x1078, 0x61cd, 0x6003, 0x0004, 0x2001,
-+      0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1, 0x007c, 0x1078, 0x4502,
-+      0x1078, 0x61cd, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
-+      0x037e, 0x2019, 0xa65d, 0x2304, 0xa084, 0xff00, 0x00c0, 0x7c4d,
-+      0x2019, 0xa8a2, 0x231c, 0x0078, 0x7c56, 0x8007, 0xa09a, 0x0004,
-+      0x0048, 0x7c48, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f,
-+      0x1078, 0x62d1, 0x0078, 0x7c35, 0x0e7e, 0x0f7e, 0x2071, 0xa682,
-+      0x2079, 0x0000, 0x1078, 0x2bd7, 0x0f7f, 0x0e7f, 0x1078, 0x61cd,
-+      0x1078, 0x772d, 0x1078, 0x62d1, 0x0078, 0x7c35, 0x1078, 0x61cd,
-+      0x6003, 0x0002, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x1078, 0x62d1,
-+      0x007c, 0x2600, 0x2008, 0x0079, 0x7c7d, 0x7c81, 0x7c81, 0x7c81,
-+      0x7c6e, 0x1078, 0x1332, 0x0e7e, 0x1078, 0x8d06, 0x0040, 0x7c9f,
-+      0x6010, 0x2070, 0x7038, 0xd0fc, 0x0040, 0x7c9f, 0x7007, 0x0000,
-+      0x017e, 0x6004, 0xa08e, 0x0021, 0x0040, 0x7ca1, 0xa08e, 0x003d,
-+      0x0040, 0x7ca1, 0x017f, 0x7037, 0x0103, 0x7033, 0x0100, 0x0e7f,
-+      0x007c, 0x017f, 0x1078, 0x7ca6, 0x0078, 0x7c9f, 0x0e7e, 0xacf0,
-+      0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001,
-+      0x0e7f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff,
-+      0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0x6604, 0xa6b6, 0x0043,
-+      0x00c0, 0x7cc6, 0x1078, 0x9134, 0x0078, 0x7d25, 0x6604, 0xa6b6,
-+      0x0033, 0x00c0, 0x7ccf, 0x1078, 0x90d8, 0x0078, 0x7d25, 0x6604,
-+      0xa6b6, 0x0028, 0x00c0, 0x7cd8, 0x1078, 0x8f2f, 0x0078, 0x7d25,
-+      0x6604, 0xa6b6, 0x0029, 0x00c0, 0x7ce1, 0x1078, 0x8f49, 0x0078,
-+      0x7d25, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x7cea, 0x1078, 0x77de,
-+      0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0000, 0x00c0, 0x7cf3, 0x1078,
-+      0x7a3b, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0022, 0x00c0, 0x7cfc,
-+      0x1078, 0x7807, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0035, 0x00c0,
-+      0x7d05, 0x1078, 0x7843, 0x0078, 0x7d25, 0x6604, 0xa6b6, 0x0039,
-+      0x00c0, 0x7d0e, 0x1078, 0x79cc, 0x0078, 0x7d25, 0x6604, 0xa6b6,
-+      0x003d, 0x00c0, 0x7d17, 0x1078, 0x7823, 0x0078, 0x7d25, 0xa1b6,
-+      0x0015, 0x00c0, 0x7d1f, 0x1079, 0x7d2a, 0x0078, 0x7d25, 0xa1b6,
-+      0x0016, 0x00c0, 0x7d26, 0x1079, 0x7e7f, 0x007c, 0x1078, 0x7773,
-+      0x0078, 0x7d25, 0x7d4e, 0x7d51, 0x7d4e, 0x7d9c, 0x7d4e, 0x7e13,
-+      0x7e8b, 0x7d4e, 0x7d4e, 0x7e57, 0x7d4e, 0x7e6d, 0xa1b6, 0x0048,
-+      0x0040, 0x7d42, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078,
-+      0x15fa, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070,
-+      0x7037, 0x0103, 0x0e7f, 0x1078, 0x772d, 0x007c, 0x0005, 0x0005,
-+      0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086, 0x0074, 0x00c0,
-+      0x7d85, 0x1078, 0x9f5f, 0x00c0, 0x7d77, 0x0d7e, 0x6018, 0x2068,
-+      0x7030, 0xd08c, 0x0040, 0x7d6a, 0x6800, 0xd0bc, 0x0040, 0x7d6a,
-+      0xc0c5, 0x6802, 0x1078, 0x7d89, 0x0d7f, 0x2001, 0x0006, 0x1078,
-+      0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078, 0x7d87, 0x2001,
-+      0x000a, 0x1078, 0x4502, 0x1078, 0x28a6, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x1078, 0x5dd7, 0x0078, 0x7d87, 0x1078, 0x7dff, 0x0e7f,
-+      0x007c, 0x6800, 0xd084, 0x0040, 0x7d9b, 0x2001, 0x0000, 0x1078,
-+      0x44ee, 0x2069, 0xa652, 0x6804, 0xd0a4, 0x0040, 0x7d9b, 0x2001,
-+      0x0006, 0x1078, 0x4535, 0x007c, 0x0d7e, 0x2011, 0xa620, 0x2204,
-+      0xa086, 0x0074, 0x00c0, 0x7dfb, 0x6018, 0x2068, 0x6aa0, 0xa286,
-+      0x007e, 0x00c0, 0x7daf, 0x1078, 0x7f9b, 0x0078, 0x7dfd, 0x1078,
-+      0x7f91, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014, 0xa286, 0x0080,
-+      0x00c0, 0x7dd3, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
-+      0x0040, 0x7dc9, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
-+      0x0200, 0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x28a6, 0x1078,
-+      0x772d, 0x0078, 0x7dfd, 0x0e7e, 0x2071, 0xa633, 0x2e04, 0xd09c,
-+      0x0040, 0x7dee, 0x2071, 0xab80, 0x7108, 0x720c, 0xa18c, 0x00ff,
-+      0x00c0, 0x7de6, 0xa284, 0xff00, 0x0040, 0x7dee, 0x6018, 0x2070,
-+      0x70a0, 0xd0bc, 0x00c0, 0x7dee, 0x7112, 0x7216, 0x0e7f, 0x2001,
-+      0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078,
-+      0x5dd7, 0x0078, 0x7dfd, 0x1078, 0x7dff, 0x0d7f, 0x007c, 0x2001,
-+      0x0007, 0x1078, 0x4502, 0x2001, 0xa600, 0x2004, 0xa086, 0x0003,
-+      0x00c0, 0x7e0e, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x28a6,
-+      0x1078, 0x772d, 0x007c, 0x0e7e, 0x2071, 0xa600, 0x7080, 0xa086,
-+      0x0014, 0x00c0, 0x7e51, 0x7000, 0xa086, 0x0003, 0x00c0, 0x7e26,
-+      0x6010, 0xa005, 0x00c0, 0x7e26, 0x1078, 0x3699, 0x0d7e, 0x6018,
-+      0x2068, 0x1078, 0x4649, 0x1078, 0x7d89, 0x0d7f, 0x1078, 0x8043,
-+      0x00c0, 0x7e51, 0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005,
-+      0x0040, 0x7e51, 0x2001, 0x0006, 0x1078, 0x4502, 0x0e7e, 0x6010,
-+      0xa005, 0x0040, 0x7e4a, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
-+      0x7033, 0x0200, 0x0e7f, 0x1078, 0x28a6, 0x1078, 0x772d, 0x0078,
-+      0x7e55, 0x1078, 0x7c83, 0x1078, 0x7dff, 0x0e7f, 0x007c, 0x2011,
-+      0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x7e6a, 0x2001, 0x0002,
-+      0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x5dd7,
-+      0x0078, 0x7e6c, 0x1078, 0x7dff, 0x007c, 0x2011, 0xa620, 0x2204,
-+      0xa086, 0x0004, 0x00c0, 0x7e7c, 0x2001, 0x0007, 0x1078, 0x4502,
-+      0x1078, 0x772d, 0x0078, 0x7e7e, 0x1078, 0x7dff, 0x007c, 0x7d4e,
-+      0x7e97, 0x7d4e, 0x7ed2, 0x7d4e, 0x7f44, 0x7e8b, 0x7d4e, 0x7d4e,
-+      0x7f59, 0x7d4e, 0x7f6c, 0x6604, 0xa686, 0x0003, 0x0040, 0x7e13,
-+      0xa6b6, 0x001e, 0x00c0, 0x7e96, 0x1078, 0x772d, 0x007c, 0x0d7e,
-+      0x0c7e, 0x1078, 0x7f7f, 0x00c0, 0x7ead, 0x2001, 0x0000, 0x1078,
-+      0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007,
-+      0x0002, 0x1078, 0x5dd7, 0x0078, 0x7ecf, 0x2009, 0xab8e, 0x2104,
-+      0xa086, 0x0009, 0x00c0, 0x7ec2, 0x6018, 0x2068, 0x6840, 0xa084,
-+      0x00ff, 0xa005, 0x0040, 0x7ecd, 0x8001, 0x6842, 0x6017, 0x000a,
-+      0x0078, 0x7ecf, 0x2009, 0xab8f, 0x2104, 0xa084, 0xff00, 0xa086,
-+      0x1900, 0x00c0, 0x7ecd, 0x0078, 0x7ea1, 0x1078, 0x7dff, 0x0c7f,
-+      0x0d7f, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7ee6, 0x2001, 0x0000,
-+      0x1078, 0x44ee, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003, 0x0001,
-+      0x6007, 0x0002, 0x1078, 0x5dd7, 0x0078, 0x7f12, 0x1078, 0x7c83,
-+      0x2009, 0xab8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
-+      0x7f13, 0xa686, 0x000b, 0x0040, 0x7f10, 0x2009, 0xab8f, 0x2104,
-+      0xa084, 0xff00, 0x00c0, 0x7f00, 0xa686, 0x0009, 0x0040, 0x7f13,
-+      0xa086, 0x1900, 0x00c0, 0x7f10, 0xa686, 0x0009, 0x0040, 0x7f13,
-+      0x2001, 0x0004, 0x1078, 0x4502, 0x1078, 0x772d, 0x0078, 0x7f12,
-+      0x1078, 0x7dff, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06,
-+      0x0040, 0x7f21, 0x6838, 0xd0fc, 0x0040, 0x7f21, 0x0d7f, 0x0078,
-+      0x7f10, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
-+      0x7f32, 0x8001, 0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f,
-+      0x0078, 0x7f12, 0x68a0, 0xa086, 0x007e, 0x00c0, 0x7f3f, 0x0e7e,
-+      0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f, 0x0078, 0x7f41, 0x1078,
-+      0x2880, 0x0d7f, 0x0078, 0x7f10, 0x1078, 0x7f8e, 0x00c0, 0x7f54,
-+      0x2001, 0x0004, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0003,
-+      0x1078, 0x5dd7, 0x0078, 0x7f58, 0x1078, 0x7c83, 0x1078, 0x7dff,
-+      0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f69, 0x2001, 0x0008, 0x1078,
-+      0x4502, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x5dd7, 0x0078,
-+      0x7f6b, 0x1078, 0x7dff, 0x007c, 0x1078, 0x7f8e, 0x00c0, 0x7f7c,
-+      0x2001, 0x000a, 0x1078, 0x4502, 0x6003, 0x0001, 0x6007, 0x0001,
-+      0x1078, 0x5dd7, 0x0078, 0x7f7e, 0x1078, 0x7dff, 0x007c, 0x2009,
-+      0xab8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x7f8d, 0x2009, 0xab8f,
-+      0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001,
-+      0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x45d6,
-+      0x017f, 0x0c7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x037e, 0x017e,
-+      0x6018, 0x2068, 0x2071, 0xa633, 0x2e04, 0xa085, 0x0003, 0x2072,
-+      0x1078, 0x8014, 0x0040, 0x7fd9, 0x2009, 0xa633, 0x2104, 0xc0cd,
-+      0x200a, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040, 0x7fc2, 0xa006,
-+      0x2020, 0x2009, 0x002a, 0x1078, 0xa21d, 0x2001, 0xa60c, 0x200c,
-+      0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x1078, 0x284f,
-+      0x2071, 0xa600, 0x1078, 0x2677, 0x0c7e, 0x157e, 0x20a9, 0x0081,
-+      0x2009, 0x007f, 0x1078, 0x298e, 0x8108, 0x00f0, 0x7fd2, 0x157f,
-+      0x0c7f, 0x1078, 0x7f91, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071,
-+      0xab80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0xa61b,
-+      0x206a, 0x78e6, 0x007e, 0x8e70, 0x2e04, 0x2069, 0xa61c, 0x206a,
-+      0x78ea, 0xa084, 0xff00, 0x017f, 0xa105, 0x2009, 0xa626, 0x200a,
-+      0x2069, 0xab8e, 0x2071, 0xa89e, 0x6810, 0x2072, 0x6814, 0x7006,
-+      0x6818, 0x700a, 0x681c, 0x700e, 0x1078, 0x906e, 0x2001, 0x0006,
-+      0x1078, 0x4502, 0x1078, 0x28a6, 0x1078, 0x772d, 0x017f, 0x037f,
-+      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x027e, 0x037e, 0x0e7e, 0x157e,
-+      0x2019, 0xa626, 0x231c, 0x83ff, 0x0040, 0x803e, 0x2071, 0xab80,
-+      0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205, 0xa306,
-+      0x00c0, 0x803e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9, 0x0004,
-+      0x1078, 0x80de, 0x00c0, 0x803e, 0x2011, 0xab9a, 0xad98, 0x0006,
-+      0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x803e, 0x157f, 0x0e7f,
-+      0x037f, 0x027f, 0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7004, 0xa086,
-+      0x0014, 0x00c0, 0x8066, 0x7008, 0xa086, 0x0800, 0x00c0, 0x8066,
-+      0x700c, 0xd0ec, 0x0040, 0x8064, 0xa084, 0x0f00, 0xa086, 0x0100,
-+      0x00c0, 0x8064, 0x7024, 0xd0a4, 0x00c0, 0x8061, 0xd0ac, 0x0040,
-+      0x8064, 0xa006, 0x0078, 0x8066, 0xa085, 0x0001, 0x0e7f, 0x007c,
-+      0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e, 0x007e,
-+      0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021, 0xa8c0,
-+      0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7248, 0x7064, 0xa202,
-+      0x00c8, 0x80cc, 0x1078, 0xa242, 0x0040, 0x80c4, 0x671c, 0xa786,
-+      0x0001, 0x0040, 0x80c4, 0xa786, 0x0007, 0x0040, 0x80c4, 0x2500,
-+      0xac06, 0x0040, 0x80c4, 0x2400, 0xac06, 0x0040, 0x80c4, 0x0c7e,
-+      0x6000, 0xa086, 0x0004, 0x00c0, 0x809f, 0x1078, 0x1757, 0xa786,
-+      0x0008, 0x00c0, 0x80ae, 0x1078, 0x8f00, 0x00c0, 0x80ae, 0x0c7f,
-+      0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078, 0x80c4, 0x6010, 0x2068,
-+      0x1078, 0x8d06, 0x0040, 0x80c1, 0xa786, 0x0003, 0x00c0, 0x80d6,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078,
-+      0x8eb9, 0x1078, 0x8ec6, 0x0c7f, 0xace0, 0x0010, 0x7058, 0xac02,
-+      0x00c8, 0x80cc, 0x0078, 0x807d, 0x127f, 0x007f, 0x027f, 0x047f,
-+      0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
-+      0x00c0, 0x80b8, 0x1078, 0xa1ca, 0x0078, 0x80c1, 0x220c, 0x2304,
-+      0xa106, 0x00c0, 0x80e9, 0x8210, 0x8318, 0x00f0, 0x80de, 0xa006,
-+      0x007c, 0x2304, 0xa102, 0x0048, 0x80f1, 0x2001, 0x0001, 0x0078,
-+      0x80f3, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a,
-+      0x0044, 0x10c8, 0x1332, 0x1078, 0x8eec, 0x0040, 0x8105, 0x1078,
-+      0x8f00, 0x0040, 0x8112, 0x0078, 0x810b, 0x1078, 0x28a6, 0x1078,
-+      0x8f00, 0x0040, 0x8112, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078,
-+      0x62d1, 0x007c, 0x1078, 0x7c83, 0x0078, 0x810b, 0xa182, 0x0040,
-+      0x0079, 0x811a, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812d,
-+      0x812d, 0x812d, 0x812d, 0x812d, 0x812d, 0x812f, 0x812f, 0x812f,
-+      0x812f, 0x812d, 0x812d, 0x812d, 0x812f, 0x1078, 0x1332, 0x600b,
-+      0xffff, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
-+      0x8146, 0x6004, 0xa082, 0x0040, 0x0079, 0x81d1, 0xa186, 0x0027,
-+      0x00c0, 0x8168, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6110,
-+      0x2168, 0x1078, 0x8d06, 0x0040, 0x8162, 0x6837, 0x0103, 0x684b,
-+      0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x1078, 0x4a73,
-+      0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c,
-+      0xa186, 0x0014, 0x00c0, 0x8171, 0x6004, 0xa082, 0x0040, 0x0079,
-+      0x8199, 0xa186, 0x0046, 0x0040, 0x817d, 0xa186, 0x0045, 0x0040,
-+      0x817d, 0xa186, 0x0047, 0x10c0, 0x1332, 0x2001, 0x0109, 0x2004,
-+      0xd084, 0x0040, 0x8196, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e,
-+      0x027e, 0x1078, 0x5c56, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000,
-+      0xa086, 0x0002, 0x00c0, 0x8196, 0x0078, 0x820e, 0x1078, 0x7773,
-+      0x007c, 0x81ae, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ac,
-+      0x81ac, 0x81ac, 0x81ac, 0x81ac, 0x81ca, 0x81ca, 0x81ca, 0x81ca,
-+      0x81ac, 0x81ca, 0x81ac, 0x81ca, 0x1078, 0x1332, 0x1078, 0x61cd,
-+      0x0d7e, 0x6110, 0x2168, 0x1078, 0x8d06, 0x0040, 0x81c4, 0x6837,
-+      0x0103, 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852,
-+      0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d, 0x1078,
-+      0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1,
-+      0x007c, 0x81e6, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81e4,
-+      0x81e4, 0x81e4, 0x81e4, 0x81e4, 0x81f8, 0x81f8, 0x81f8, 0x81f8,
-+      0x81e4, 0x8207, 0x81e4, 0x81f8, 0x1078, 0x1332, 0x1078, 0x61cd,
-+      0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002, 0x1078, 0x62d1,
-+      0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x007c,
-+      0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x2001, 0xa8a4,
-+      0x2004, 0x603e, 0x6003, 0x000f, 0x1078, 0x62d1, 0x007c, 0x1078,
-+      0x61cd, 0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
-+      0x0079, 0x8212, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8227,
-+      0x8327, 0x8359, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x8225,
-+      0x8225, 0x8225, 0x8225, 0x8225, 0x8225, 0x1078, 0x1332, 0x0e7e,
-+      0x0d7e, 0x603f, 0x0000, 0x2071, 0xab80, 0x7124, 0x610a, 0x2071,
-+      0xab8c, 0x6110, 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040,
-+      0x82e9, 0xa68c, 0x0c00, 0x0040, 0x825e, 0x0f7e, 0x2c78, 0x1078,
-+      0x4963, 0x0f7f, 0x0040, 0x825a, 0x684c, 0xd0ac, 0x0040, 0x825a,
-+      0x6024, 0xd0dc, 0x00c0, 0x825a, 0x6850, 0xd0bc, 0x00c0, 0x825a,
-+      0x7318, 0x6814, 0xa306, 0x00c0, 0x8301, 0x731c, 0x6810, 0xa306,
-+      0x00c0, 0x8301, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
-+      0xa186, 0x0002, 0x0040, 0x8291, 0xa186, 0x0028, 0x00c0, 0x826e,
-+      0x1078, 0x8eda, 0x684b, 0x001c, 0x0078, 0x8293, 0xd6dc, 0x0040,
-+      0x828a, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0040, 0x8288, 0x6914,
-+      0x6a10, 0x2100, 0xa205, 0x0040, 0x8288, 0x7018, 0xa106, 0x00c0,
-+      0x8285, 0x701c, 0xa206, 0x0040, 0x8288, 0x6962, 0x6a5e, 0xc6dc,
-+      0x0078, 0x8293, 0xd6d4, 0x0040, 0x8291, 0x684b, 0x0007, 0x0078,
-+      0x8293, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0xa01e, 0xd6c4,
-+      0x0040, 0x82bc, 0xa686, 0x0100, 0x00c0, 0x82a7, 0x2001, 0xab99,
-+      0x2004, 0xa005, 0x00c0, 0x82a7, 0xc6c4, 0x0078, 0x8236, 0x7328,
-+      0x732c, 0x6b56, 0x83ff, 0x0040, 0x82bc, 0xa38a, 0x0009, 0x0048,
-+      0x82b3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
-+      0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x8317, 0x7124,
-+      0x695a, 0x81ff, 0x0040, 0x8317, 0xa192, 0x0021, 0x00c8, 0x82d5,
-+      0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
-+      0x89e2, 0x1078, 0x91f4, 0x0078, 0x8317, 0x6838, 0xd0fc, 0x0040,
-+      0x82de, 0x2009, 0x0020, 0x695a, 0x0078, 0x82c8, 0x0f7e, 0x2d78,
-+      0x1078, 0x897a, 0x0f7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
-+      0x8319, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x8307,
-+      0x684c, 0xd0ac, 0x0040, 0x8307, 0x6024, 0xd0dc, 0x00c0, 0x8307,
-+      0x6850, 0xd0bc, 0x00c0, 0x8307, 0x6810, 0x6914, 0xa105, 0x0040,
-+      0x8307, 0x1078, 0x8fbf, 0x0d7f, 0x0e7f, 0x0078, 0x8326, 0x684b,
-+      0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x8317,
-+      0x6810, 0x6914, 0xa115, 0x0040, 0x8317, 0x1078, 0x84d5, 0x1078,
-+      0x4a73, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x1078, 0x8f89,
-+      0x0d7f, 0x0e7f, 0x00c0, 0x8326, 0x1078, 0x772d, 0x007c, 0x0f7e,
-+      0x6003, 0x0003, 0x2079, 0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
-+      0x6010, 0x2078, 0x784c, 0xd0ac, 0x0040, 0x833e, 0x6003, 0x0002,
-+      0x0f7f, 0x007c, 0x2130, 0x2228, 0x0078, 0x834a, 0x2400, 0x797c,
-+      0xa10a, 0x2300, 0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203,
-+      0x0048, 0x833a, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x603f,
-+      0x0000, 0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b,
-+      0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0004, 0x6110,
-+      0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa, 0x007c,
-+      0xa182, 0x0040, 0x0079, 0x836c, 0x837f, 0x837f, 0x837f, 0x837f,
-+      0x837f, 0x8381, 0x8424, 0x837f, 0x837f, 0x843a, 0x84ab, 0x837f,
-+      0x837f, 0x837f, 0x837f, 0x84ba, 0x837f, 0x837f, 0x837f, 0x1078,
-+      0x1332, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0xab8c, 0x6110,
-+      0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e,
-+      0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x841f,
-+      0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x83a2, 0x7018, 0x7862,
-+      0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x841f, 0x1078, 0x138b,
-+      0x1040, 0x1332, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837,
-+      0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46,
-+      0xa68c, 0x0c00, 0x0040, 0x83c0, 0x7318, 0x6b62, 0x731c, 0x6b5e,
-+      0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x83dc, 0xa186, 0x0028,
-+      0x00c0, 0x83ce, 0x684b, 0x001c, 0x0078, 0x83de, 0xd6dc, 0x0040,
-+      0x83d5, 0x684b, 0x0015, 0x0078, 0x83de, 0xd6d4, 0x0040, 0x83dc,
-+      0x684b, 0x0007, 0x0078, 0x83de, 0x684b, 0x0000, 0x6f4e, 0x7850,
-+      0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x83fc, 0x7328,
-+      0x732c, 0x6b56, 0x83ff, 0x0040, 0x83fc, 0xa38a, 0x0009, 0x0048,
-+      0x83f3, 0x2019, 0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90,
-+      0x0019, 0x1078, 0x89e2, 0x037f, 0xd6cc, 0x0040, 0x841f, 0x7124,
-+      0x695a, 0x81ff, 0x0040, 0x841f, 0xa192, 0x0021, 0x00c8, 0x8413,
-+      0x2071, 0xab98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
-+      0x89e2, 0x0078, 0x841f, 0x7838, 0xd0fc, 0x0040, 0x841c, 0x2009,
-+      0x0020, 0x695a, 0x0078, 0x8408, 0x2d78, 0x1078, 0x897a, 0x0d7f,
-+      0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079,
-+      0xab8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12,
-+      0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x1cf0, 0x1078,
-+      0x6df4, 0x007c, 0x0d7e, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
-+      0x0040, 0x8446, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x6003, 0x0002,
-+      0x1078, 0x627a, 0x1078, 0x639b, 0x6110, 0x2168, 0x694c, 0xd1e4,
-+      0x0040, 0x84a9, 0xd1cc, 0x0040, 0x8480, 0x6948, 0x6838, 0xd0fc,
-+      0x0040, 0x8478, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90,
-+      0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304,
-+      0x2012, 0x8318, 0x8210, 0x00f0, 0x8467, 0x157f, 0x007f, 0x6852,
-+      0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078, 0x84a3,
-+      0x017e, 0x1078, 0x13b4, 0x0d7f, 0x1078, 0x89cf, 0x0078, 0x84a3,
-+      0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
-+      0x849f, 0xa086, 0x0028, 0x00c0, 0x8491, 0x684b, 0x001c, 0x0078,
-+      0x84a1, 0xd1dc, 0x0040, 0x8498, 0x684b, 0x0015, 0x0078, 0x84a1,
-+      0xd1d4, 0x0040, 0x849f, 0x684b, 0x0007, 0x0078, 0x84a1, 0x684b,
-+      0x0000, 0x1078, 0x4a73, 0x1078, 0x8f89, 0x00c0, 0x84a9, 0x1078,
-+      0x772d, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x7058, 0x6003,
-+      0x0002, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x1078, 0x627a, 0x1078,
-+      0x639b, 0x007c, 0x1078, 0x627a, 0x1078, 0x2880, 0x0d7e, 0x6110,
-+      0x2168, 0x1078, 0x8d06, 0x0040, 0x84cf, 0x6837, 0x0103, 0x684b,
-+      0x0029, 0x6847, 0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f,
-+      0x1078, 0x772d, 0x1078, 0x639b, 0x007c, 0x684b, 0x0015, 0xd1fc,
-+      0x0040, 0x84e1, 0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189,
-+      0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040, 0x0079, 0x84e8,
-+      0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fd, 0x84fb, 0x85d0,
-+      0x85dc, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb, 0x84fb,
-+      0x84fb, 0x84fb, 0x84fb, 0x1078, 0x1332, 0x077e, 0x0f7e, 0x0e7e,
-+      0x0d7e, 0x2071, 0xab8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff,
-+      0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x851b, 0xa684,
-+      0x00ff, 0x00c0, 0x851b, 0x6024, 0xd0f4, 0x0040, 0x851b, 0x1078,
-+      0x8fbf, 0x0078, 0x85cb, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218,
-+      0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x85c0, 0xa694,
-+      0xff00, 0xa284, 0x0c00, 0x0040, 0x8531, 0x7018, 0x7862, 0x701c,
-+      0x785e, 0xa284, 0x0300, 0x0040, 0x85bd, 0xa686, 0x0100, 0x00c0,
-+      0x8543, 0x2001, 0xab99, 0x2004, 0xa005, 0x00c0, 0x8543, 0xc6c4,
-+      0x7e46, 0x0078, 0x8524, 0x1078, 0x138b, 0x1040, 0x1332, 0x2d00,
-+      0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838,
-+      0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
-+      0x0040, 0x855e, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff,
-+      0xa186, 0x0002, 0x0040, 0x857a, 0xa186, 0x0028, 0x00c0, 0x856c,
-+      0x684b, 0x001c, 0x0078, 0x857c, 0xd6dc, 0x0040, 0x8573, 0x684b,
-+      0x0015, 0x0078, 0x857c, 0xd6d4, 0x0040, 0x857a, 0x684b, 0x0007,
-+      0x0078, 0x857c, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
-+      0x6856, 0xa01e, 0xd6c4, 0x0040, 0x859a, 0x7328, 0x732c, 0x6b56,
-+      0x83ff, 0x0040, 0x859a, 0xa38a, 0x0009, 0x0048, 0x8591, 0x2019,
-+      0x0008, 0x037e, 0x2308, 0x2019, 0xab98, 0xad90, 0x0019, 0x1078,
-+      0x89e2, 0x037f, 0xd6cc, 0x0040, 0x85bd, 0x7124, 0x695a, 0x81ff,
-+      0x0040, 0x85bd, 0xa192, 0x0021, 0x00c8, 0x85b1, 0x2071, 0xab98,
-+      0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x89e2, 0x0078,
-+      0x85bd, 0x7838, 0xd0fc, 0x0040, 0x85ba, 0x2009, 0x0020, 0x695a,
-+      0x0078, 0x85a6, 0x2d78, 0x1078, 0x897a, 0xd6dc, 0x00c0, 0x85c3,
-+      0xa006, 0x0078, 0x85c9, 0x2001, 0x0001, 0x2071, 0xab8c, 0x7218,
-+      0x731c, 0x1078, 0x1653, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
-+      0x2001, 0xa8a4, 0x2004, 0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+      0x2c10, 0x1078, 0x15fa, 0x007c, 0x2001, 0xa8a4, 0x2004, 0x603e,
-+      0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
-+      0x870c, 0x603f, 0x0000, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x0f7f,
-+      0x0040, 0x8622, 0x6814, 0x6910, 0xa115, 0x0040, 0x8622, 0x6a60,
-+      0xa206, 0x00c0, 0x85ff, 0x685c, 0xa106, 0x0040, 0x8622, 0x684c,
-+      0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f, 0x0000,
-+      0x6024, 0xd0f4, 0x00c0, 0x8617, 0x697c, 0x6810, 0xa102, 0x603a,
-+      0x6980, 0x6814, 0xa103, 0x6036, 0x6024, 0xc0f5, 0x6026, 0x0d7e,
-+      0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x0d7f, 0x1078, 0x8fbf,
-+      0x0078, 0x870c, 0x694c, 0xd1cc, 0x0040, 0x86d1, 0x6948, 0x6838,
-+      0xd0fc, 0x0040, 0x8689, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e,
-+      0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040,
-+      0x865c, 0xa086, 0x0028, 0x00c0, 0x8643, 0x684b, 0x001c, 0x784b,
-+      0x001c, 0x0078, 0x8667, 0xd1dc, 0x0040, 0x8653, 0x684b, 0x0015,
-+      0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x8651, 0x7944, 0xc1dc,
-+      0x7946, 0x0078, 0x8667, 0xd1d4, 0x0040, 0x865c, 0x684b, 0x0007,
-+      0x784b, 0x0007, 0x0078, 0x8667, 0x684c, 0xd0ac, 0x0040, 0x8667,
-+      0x6810, 0x6914, 0xa115, 0x0040, 0x8667, 0x1078, 0x84d5, 0x6848,
-+      0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98,
-+      0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318,
-+      0x8210, 0x00f0, 0x8675, 0x157f, 0x0f7f, 0x007f, 0x6852, 0x007f,
-+      0x684e, 0x1078, 0x91f4, 0x017f, 0x2168, 0x1078, 0x13b4, 0x0078,
-+      0x8706, 0x017e, 0x0f7e, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6,
-+      0x0002, 0x0040, 0x86b6, 0xa086, 0x0028, 0x00c0, 0x869d, 0x684b,
-+      0x001c, 0x784b, 0x001c, 0x0078, 0x86c1, 0xd1dc, 0x0040, 0x86ad,
-+      0x684b, 0x0015, 0x784b, 0x0015, 0x1078, 0x916c, 0x0040, 0x86ab,
-+      0x7944, 0xc1dc, 0x7946, 0x0078, 0x86c1, 0xd1d4, 0x0040, 0x86b6,
-+      0x684b, 0x0007, 0x784b, 0x0007, 0x0078, 0x86c1, 0x684c, 0xd0ac,
-+      0x0040, 0x86c1, 0x6810, 0x6914, 0xa115, 0x0040, 0x86c1, 0x1078,
-+      0x84d5, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, 0x0f7f,
-+      0x1078, 0x13b4, 0x0d7f, 0x1078, 0x91f4, 0x1078, 0x89cf, 0x0078,
-+      0x8706, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002,
-+      0x0040, 0x86f7, 0xa086, 0x0028, 0x00c0, 0x86e2, 0x684b, 0x001c,
-+      0x0078, 0x8704, 0xd1dc, 0x0040, 0x86f0, 0x684b, 0x0015, 0x1078,
-+      0x916c, 0x0040, 0x86ee, 0x6944, 0xc1dc, 0x6946, 0x0078, 0x8704,
-+      0xd1d4, 0x0040, 0x86f7, 0x684b, 0x0007, 0x0078, 0x8704, 0x684b,
-+      0x0000, 0x684c, 0xd0ac, 0x0040, 0x8704, 0x6810, 0x6914, 0xa115,
-+      0x0040, 0x8704, 0x1078, 0x84d5, 0x1078, 0x4a73, 0x1078, 0x8f89,
-+      0x00c0, 0x870c, 0x1078, 0x772d, 0x0d7f, 0x007c, 0x1078, 0x61cd,
-+      0x0078, 0x8714, 0x1078, 0x627a, 0x1078, 0x8d06, 0x0040, 0x8733,
-+      0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0xa60c, 0x210c,
-+      0xd18c, 0x00c0, 0x873e, 0xd184, 0x00c0, 0x873a, 0x6108, 0x694a,
-+      0xa18e, 0x0029, 0x00c0, 0x872e, 0x1078, 0xa4e2, 0x6847, 0x0000,
-+      0x1078, 0x4a73, 0x0d7f, 0x1078, 0x772d, 0x1078, 0x62d1, 0x1078,
-+      0x639b, 0x007c, 0x684b, 0x0004, 0x0078, 0x872e, 0x684b, 0x0004,
-+      0x0078, 0x872e, 0xa182, 0x0040, 0x0079, 0x8746, 0x8759, 0x8759,
-+      0x8759, 0x8759, 0x8759, 0x875b, 0x8759, 0x875e, 0x8759, 0x8759,
-+      0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759, 0x8759,
-+      0x8759, 0x1078, 0x1332, 0x1078, 0x772d, 0x007c, 0x007e, 0x027e,
-+      0xa016, 0x1078, 0x15fa, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085,
-+      0x0079, 0x876a, 0x8773, 0x8771, 0x8771, 0x877f, 0x8771, 0x8771,
-+      0x8771, 0x1078, 0x1332, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
-+      0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x027e,
-+      0x057e, 0x0d7e, 0x0e7e, 0x2071, 0xab80, 0x7224, 0x6212, 0x7220,
-+      0x1078, 0x8cf2, 0x0040, 0x87a4, 0x2268, 0x6800, 0xa086, 0x0000,
-+      0x0040, 0x87a4, 0x6018, 0x6d18, 0xa52e, 0x00c0, 0x87a4, 0x0c7e,
-+      0x2d60, 0x1078, 0x89f3, 0x0c7f, 0x0040, 0x87a4, 0x6803, 0x0002,
-+      0x6007, 0x0086, 0x0078, 0x87a6, 0x6007, 0x0087, 0x6003, 0x0001,
-+      0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0f7e, 0x2278, 0x1078, 0x4963,
-+      0x0f7f, 0x0040, 0x87be, 0x6824, 0xd0ec, 0x0040, 0x87be, 0x0c7e,
-+      0x2260, 0x603f, 0x0000, 0x1078, 0x8fbf, 0x0c7f, 0x0e7f, 0x0d7f,
-+      0x057f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87d4, 0x6004,
-+      0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
-+      0xa082, 0x0085, 0x0079, 0x87e3, 0xa186, 0x0027, 0x0040, 0x87dc,
-+      0xa186, 0x0014, 0x10c0, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+      0x1078, 0x62d1, 0x007c, 0x87ea, 0x87ec, 0x87ec, 0x87ea, 0x87ea,
-+      0x87ea, 0x87ea, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+      0x1078, 0x62d1, 0x007c, 0xa186, 0x0013, 0x00c0, 0x87fd, 0x6004,
-+      0xa082, 0x0085, 0x2008, 0x0078, 0x8838, 0xa186, 0x0027, 0x00c0,
-+      0x8820, 0x1078, 0x61cd, 0x1078, 0x2880, 0x0d7e, 0x6010, 0x2068,
-+      0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847, 0x0000,
-+      0x684b, 0x0029, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078,
-+      0x772d, 0x1078, 0x62d1, 0x007c, 0x1078, 0x7773, 0x0078, 0x881b,
-+      0xa186, 0x0014, 0x00c0, 0x881c, 0x1078, 0x61cd, 0x0d7e, 0x6010,
-+      0x2068, 0x1078, 0x8d06, 0x0040, 0x8816, 0x6837, 0x0103, 0x6847,
-+      0x0000, 0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x0078, 0x8812,
-+      0x0079, 0x883a, 0x8843, 0x8841, 0x8841, 0x8841, 0x8841, 0x8841,
-+      0x885e, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6030, 0xa08c, 0xff00,
-+      0x810f, 0xa186, 0x0039, 0x0040, 0x8851, 0xa186, 0x0035, 0x00c0,
-+      0x8855, 0x2001, 0xa8a2, 0x0078, 0x8857, 0x2001, 0xa8a3, 0x2004,
-+      0x6016, 0x6003, 0x000c, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd,
-+      0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x886c,
-+      0xa186, 0x0035, 0x00c0, 0x8870, 0x2001, 0xa8a2, 0x0078, 0x8872,
-+      0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x000e, 0x1078, 0x62d1,
-+      0x007c, 0xa182, 0x008c, 0x00c8, 0x8883, 0xa182, 0x0085, 0x0048,
-+      0x8883, 0x0079, 0x8886, 0x1078, 0x7773, 0x007c, 0x888d, 0x888d,
-+      0x888d, 0x888d, 0x888f, 0x88ec, 0x888d, 0x1078, 0x1332, 0x0f7e,
-+      0x2c78, 0x1078, 0x4963, 0x0f7f, 0x0040, 0x88a2, 0x6030, 0xa08c,
-+      0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8903, 0xa186, 0x0035,
-+      0x0040, 0x8903, 0x0d7e, 0x1078, 0x8d06, 0x00c0, 0x88ab, 0x1078,
-+      0x8eb9, 0x0078, 0x88ce, 0x6010, 0x2068, 0x684c, 0xd0e4, 0x00c0,
-+      0x88b3, 0x1078, 0x8eb9, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040,
-+      0x88bf, 0x684b, 0x0006, 0xc0ec, 0x6852, 0x0078, 0x88ca, 0xd0bc,
-+      0x0040, 0x88c6, 0x684b, 0x0002, 0x0078, 0x88ca, 0x684b, 0x0005,
-+      0x1078, 0x8f85, 0x6847, 0x0000, 0x1078, 0x4a73, 0x2c68, 0x1078,
-+      0x76c7, 0x0040, 0x88e7, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009,
-+      0xab8e, 0x210c, 0x6136, 0x2009, 0xab8f, 0x210c, 0x613a, 0x6918,
-+      0x611a, 0x6920, 0x6122, 0x601f, 0x0001, 0x1078, 0x5d8a, 0x2d60,
-+      0x1078, 0x772d, 0x0d7f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963,
-+      0x0f7f, 0x0040, 0x8929, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186,
-+      0x0035, 0x0040, 0x8903, 0xa186, 0x001e, 0x0040, 0x8903, 0xa186,
-+      0x0039, 0x00c0, 0x8929, 0x0d7e, 0x2c68, 0x1078, 0x91bc, 0x00c0,
-+      0x894d, 0x1078, 0x76c7, 0x0040, 0x8926, 0x6106, 0x6003, 0x0001,
-+      0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a, 0x692c, 0x612e,
-+      0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136, 0x6938, 0x613a,
-+      0x6920, 0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2d60, 0x0078,
-+      0x894d, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x894d,
-+      0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x893c, 0xc0ec, 0x6852,
-+      0x684b, 0x0006, 0x0078, 0x8947, 0xd0bc, 0x0040, 0x8943, 0x684b,
-+      0x0002, 0x0078, 0x8947, 0x684b, 0x0005, 0x1078, 0x8f85, 0x6847,
-+      0x0000, 0x1078, 0x4a73, 0x1078, 0x8eb9, 0x0d7f, 0x1078, 0x772d,
-+      0x007c, 0x017e, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+      0x8961, 0x6837, 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x1078,
-+      0x4a73, 0x0d7f, 0x017f, 0xa186, 0x0013, 0x0040, 0x8973, 0xa186,
-+      0x0014, 0x0040, 0x8973, 0xa186, 0x0027, 0x0040, 0x8973, 0x1078,
-+      0x7773, 0x0078, 0x8979, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
-+      0x62d1, 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001,
-+      0xa182, 0x0101, 0x00c8, 0x8986, 0x0078, 0x8988, 0x2009, 0x0100,
-+      0x2130, 0x2069, 0xab98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020,
-+      0xaf90, 0x001d, 0x1078, 0x89e2, 0xa6b2, 0x0020, 0x7804, 0xa06d,
-+      0x0040, 0x899c, 0x1078, 0x13b4, 0x1078, 0x138b, 0x0040, 0x89c6,
-+      0x8528, 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a,
-+      0x003d, 0x00c8, 0x89b2, 0x2608, 0xad90, 0x000f, 0x1078, 0x89e2,
-+      0x0078, 0x89c6, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90,
-+      0x000f, 0x1078, 0x89e2, 0x0078, 0x899c, 0x0f7f, 0x852f, 0xa5ad,
-+      0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x89cb, 0x0f7f, 0x852f,
-+      0xa5ad, 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e,
-+      0x8dff, 0x0040, 0x89e0, 0x6804, 0xa07d, 0x0040, 0x89de, 0x6807,
-+      0x0000, 0x1078, 0x4a73, 0x2f68, 0x0078, 0x89d3, 0x1078, 0x4a73,
-+      0x0f7f, 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x89e8, 0x8108,
-+      0x810c, 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0,
-+      0x89ea, 0x157f, 0x007c, 0x067e, 0x127e, 0x2091, 0x8000, 0x2031,
-+      0x0001, 0x601c, 0xa084, 0x000f, 0x1079, 0x8a0f, 0x127f, 0x067f,
-+      0x007c, 0x127e, 0x2091, 0x8000, 0x067e, 0x2031, 0x0000, 0x601c,
-+      0xa084, 0x000f, 0x1079, 0x8a0f, 0x067f, 0x127f, 0x007c, 0x8a29,
-+      0x8a17, 0x8a24, 0x8a45, 0x8a17, 0x8a24, 0x8a45, 0x8a24, 0x1078,
-+      0x1332, 0x037e, 0x2019, 0x0010, 0x1078, 0x9dc7, 0x601f, 0x0006,
-+      0x6003, 0x0007, 0x037f, 0x007c, 0xa006, 0x007c, 0xa085, 0x0001,
-+      0x007c, 0x0d7e, 0x86ff, 0x00c0, 0x8a40, 0x6010, 0x2068, 0x1078,
-+      0x8d06, 0x0040, 0x8a42, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4b51,
-+      0x1078, 0x8f85, 0x1078, 0x4a73, 0x1078, 0x772d, 0xa085, 0x0001,
-+      0x0d7f, 0x007c, 0xa006, 0x0078, 0x8a40, 0x6000, 0xa08a, 0x0010,
-+      0x10c8, 0x1332, 0x1079, 0x8a4d, 0x007c, 0x8a5d, 0x8a82, 0x8a5f,
-+      0x8aa5, 0x8a7e, 0x8a5d, 0x8a24, 0x8a29, 0x8a29, 0x8a24, 0x8a24,
-+      0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x8a24, 0x1078, 0x1332, 0x86ff,
-+      0x00c0, 0x8a7b, 0x601c, 0xa086, 0x0006, 0x0040, 0x8a7b, 0x0d7e,
-+      0x6010, 0x2068, 0x1078, 0x8d06, 0x0040, 0x8a70, 0x1078, 0x8f85,
-+      0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078,
-+      0x5d8a, 0x1078, 0x62d1, 0xa085, 0x0001, 0x007c, 0x1078, 0x1757,
-+      0x0078, 0x8a5f, 0x0e7e, 0x2071, 0xa8b1, 0x7024, 0xac06, 0x00c0,
-+      0x8a8b, 0x1078, 0x6fc4, 0x601c, 0xa084, 0x000f, 0xa086, 0x0006,
-+      0x00c0, 0x8a9d, 0x087e, 0x097e, 0x2049, 0x0001, 0x2c40, 0x1078,
-+      0x7246, 0x097f, 0x087f, 0x0078, 0x8a9f, 0x1078, 0x6ebe, 0x0e7f,
-+      0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x037e, 0x0e7e, 0x2071,
-+      0xa8b1, 0x703c, 0xac06, 0x00c0, 0x8ab5, 0x2019, 0x0000, 0x1078,
-+      0x7058, 0x0e7f, 0x037f, 0x0078, 0x8a5f, 0x1078, 0x738a, 0x0e7f,
-+      0x037f, 0x00c0, 0x8a5f, 0x1078, 0x8a24, 0x007c, 0x0c7e, 0x601c,
-+      0xa084, 0x000f, 0x1079, 0x8ac6, 0x0c7f, 0x007c, 0x8ad5, 0x8b47,
-+      0x8c7f, 0x8ae0, 0x8ec6, 0x8ad5, 0x9db8, 0x772d, 0x8b47, 0x1078,
-+      0x8f00, 0x00c0, 0x8ad5, 0x1078, 0x7c83, 0x007c, 0x1078, 0x61cd,
-+      0x1078, 0x62d1, 0x1078, 0x772d, 0x007c, 0x6017, 0x0001, 0x007c,
-+      0x1078, 0x8d06, 0x0040, 0x8ae8, 0x6010, 0xa080, 0x0019, 0x2c02,
-+      0x6000, 0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8af0, 0x007c,
-+      0x8b00, 0x8b02, 0x8b24, 0x8b36, 0x8b43, 0x8b00, 0x8ad5, 0x8ad5,
-+      0x8ad5, 0x8b36, 0x8b36, 0x8b00, 0x8b00, 0x8b00, 0x8b00, 0x8b40,
-+      0x1078, 0x1332, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052,
-+      0x2071, 0xa8b1, 0x7024, 0xac06, 0x0040, 0x8b20, 0x1078, 0x6ebe,
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xa8a3,
-+      0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0e7f, 0x007c,
-+      0x6017, 0x0001, 0x0078, 0x8b1e, 0x0d7e, 0x6010, 0x2068, 0x6850,
-+      0xc0b5, 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
-+      0x0002, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x0d7e, 0x6017,
-+      0x0001, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c,
-+      0x1078, 0x772d, 0x007c, 0x1078, 0x1757, 0x0078, 0x8b24, 0x6000,
-+      0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8b4f, 0x007c, 0x8b5f,
-+      0x8add, 0x8b61, 0x8b5f, 0x8b61, 0x8b61, 0x8ad6, 0x8b5f, 0x8acf,
-+      0x8acf, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x8b5f, 0x1078,
-+      0x1332, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
-+      0xa08a, 0x000c, 0x10c8, 0x1332, 0x1079, 0x8b6f, 0x007c, 0x8b7b,
-+      0x8c23, 0x8b7d, 0x8bbd, 0x8b7d, 0x8bbd, 0x8b7d, 0x8b8a, 0x8b7b,
-+      0x8bbd, 0x8b7b, 0x8ba7, 0x1078, 0x1332, 0x6004, 0xa08e, 0x0016,
-+      0x0040, 0x8bb8, 0xa08e, 0x0004, 0x0040, 0x8bb8, 0xa08e, 0x0002,
-+      0x0040, 0x8bb8, 0x6004, 0x1078, 0x8f00, 0x0040, 0x8c3e, 0xa08e,
-+      0x0021, 0x0040, 0x8c42, 0xa08e, 0x0022, 0x0040, 0x8c3e, 0xa08e,
-+      0x003d, 0x0040, 0x8c42, 0xa08e, 0x0039, 0x0040, 0x8c46, 0xa08e,
-+      0x0035, 0x0040, 0x8c46, 0xa08e, 0x001e, 0x0040, 0x8bba, 0xa08e,
-+      0x0001, 0x00c0, 0x8bb6, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084,
-+      0x00ff, 0x0d7f, 0xa086, 0x0006, 0x0040, 0x8bb8, 0x1078, 0x2880,
-+      0x1078, 0x7c83, 0x1078, 0x8ec6, 0x007c, 0x0c7e, 0x0d7e, 0x6104,
-+      0xa186, 0x0016, 0x0040, 0x8c13, 0xa186, 0x0002, 0x00c0, 0x8be6,
-+      0x6018, 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x8c6a, 0x6840, 0xa084,
-+      0x00ff, 0xa005, 0x0040, 0x8be6, 0x8001, 0x6842, 0x6013, 0x0000,
-+      0x601f, 0x0007, 0x6017, 0x0398, 0x1078, 0x76c7, 0x0040, 0x8be6,
-+      0x2d00, 0x601a, 0x601f, 0x0001, 0x0078, 0x8c13, 0x0d7f, 0x0c7f,
-+      0x6004, 0xa08e, 0x0002, 0x00c0, 0x8c04, 0x6018, 0xa080, 0x0028,
-+      0x2004, 0xa086, 0x007e, 0x00c0, 0x8c04, 0x2009, 0xa633, 0x2104,
-+      0xc085, 0x200a, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x0e7f,
-+      0x1078, 0x7c83, 0x0078, 0x8c08, 0x1078, 0x7c83, 0x1078, 0x2880,
-+      0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x127f, 0x0e7f,
-+      0x1078, 0x8ec6, 0x007c, 0x2001, 0x0002, 0x1078, 0x4502, 0x6003,
-+      0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0d7f,
-+      0x0c7f, 0x0078, 0x8c12, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016,
-+      0x0040, 0x8c13, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
-+      0x0040, 0x8be6, 0x8001, 0x6842, 0x6003, 0x0001, 0x1078, 0x5dd7,
-+      0x1078, 0x62d1, 0x0d7f, 0x0c7f, 0x0078, 0x8c12, 0x1078, 0x7c83,
-+      0x0078, 0x8bba, 0x1078, 0x7ca6, 0x0078, 0x8bba, 0x0d7e, 0x2c68,
-+      0x6104, 0x1078, 0x91bc, 0x0d7f, 0x0040, 0x8c52, 0x1078, 0x772d,
-+      0x0078, 0x8c69, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
-+      0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6038,
-+      0x600a, 0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078,
-+      0x62d1, 0x007c, 0x0d7f, 0x0c7f, 0x1078, 0x7c83, 0x1078, 0x2880,
-+      0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x28a6, 0x6013, 0x0000,
-+      0x601f, 0x0007, 0x6017, 0x0398, 0x127f, 0x0e7f, 0x007c, 0x6000,
-+      0xa08a, 0x0010, 0x10c8, 0x1332, 0x1079, 0x8c87, 0x007c, 0x8c97,
-+      0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97, 0x8c97,
-+      0x8ad5, 0x8c97, 0x8add, 0x8c99, 0x8add, 0x8ca7, 0x8c97, 0x1078,
-+      0x1332, 0x6004, 0xa086, 0x008b, 0x0040, 0x8ca7, 0x6007, 0x008b,
-+      0x6003, 0x000d, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x007c, 0x1078,
-+      0x8eb9, 0x1078, 0x8d06, 0x0040, 0x8cdf, 0x1078, 0x2880, 0x0d7e,
-+      0x1078, 0x8d06, 0x0040, 0x8cc1, 0x6010, 0x2068, 0x6837, 0x0103,
-+      0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x1078,
-+      0x4a73, 0x2c68, 0x1078, 0x76c7, 0x0040, 0x8ccf, 0x6818, 0x601a,
-+      0x0c7e, 0x2d60, 0x1078, 0x8ec6, 0x0c7f, 0x0078, 0x8cd0, 0x2d60,
-+      0x0d7f, 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003,
-+      0x0001, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0078, 0x8cf1, 0x6030,
-+      0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0040, 0x8ceb, 0xa186,
-+      0x0035, 0x00c0, 0x8cef, 0x1078, 0x2880, 0x0078, 0x8cc1, 0x1078,
-+      0x8ec6, 0x007c, 0xa284, 0x000f, 0x00c0, 0x8d03, 0xa282, 0xad00,
-+      0x0048, 0x8d03, 0x2001, 0xa616, 0x2004, 0xa202, 0x00c8, 0x8d03,
-+      0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x8d02, 0x027e, 0x0e7e,
-+      0x2071, 0xa600, 0x6210, 0x705c, 0xa202, 0x0048, 0x8d18, 0x7060,
-+      0xa202, 0x00c8, 0x8d18, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c,
-+      0xa006, 0x0078, 0x8d15, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e,
-+      0x2091, 0x8000, 0x2061, 0xad00, 0x2071, 0xa600, 0x7348, 0x7064,
-+      0xa302, 0x00c8, 0x8d45, 0x601c, 0xa206, 0x00c0, 0x8d3d, 0x1078,
-+      0x902b, 0x0040, 0x8d3d, 0x1078, 0x8f00, 0x00c0, 0x8d39, 0x1078,
-+      0x7c83, 0x0c7e, 0x1078, 0x772d, 0x0c7f, 0xace0, 0x0010, 0x7058,
-+      0xac02, 0x00c8, 0x8d45, 0x0078, 0x8d26, 0x127f, 0x007f, 0x037f,
-+      0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0xa735,
-+      0x210c, 0x81ff, 0x0040, 0x8d59, 0x2061, 0xa9b3, 0x611a, 0x1078,
-+      0x2880, 0xa006, 0x0078, 0x8d5e, 0xa085, 0x0001, 0x017f, 0x0c7f,
-+      0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-+      0x1078, 0x76c7, 0x057f, 0x0040, 0x8d7b, 0x6612, 0x651a, 0x601f,
-+      0x0003, 0x2009, 0x004b, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f,
-+      0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8d77, 0x0c7e, 0x057e,
-+      0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x76c7, 0x057f,
-+      0x0040, 0x8da9, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
-+      0x2560, 0x1078, 0x47e9, 0x0c7f, 0x1078, 0x5f01, 0x077e, 0x2039,
-+      0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f, 0x2009,
-+      0x004c, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f,
-+      0x007c, 0xa006, 0x0078, 0x8da5, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e,
-+      0x1078, 0x76c7, 0x2c78, 0x0c7f, 0x0040, 0x8dc6, 0x7e12, 0x2c00,
-+      0x781a, 0x781f, 0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60,
-+      0x2009, 0x004d, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f,
-+      0x0f7f, 0x007c, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7,
-+      0x2c78, 0x0c7f, 0x0040, 0x8de4, 0x7e12, 0x2c00, 0x781a, 0x781f,
-+      0x0003, 0x2021, 0x0005, 0x1078, 0x8e11, 0x2f60, 0x2009, 0x004e,
-+      0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, 0x007c,
-+      0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x76c7, 0x2c78, 0x0c7f,
-+      0x0040, 0x8e0d, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021,
-+      0x0004, 0x1078, 0x8e11, 0x2001, 0xa89d, 0x2004, 0xd0fc, 0x0040,
-+      0x8e06, 0x2f60, 0x1078, 0x772d, 0x0078, 0x8e0b, 0x2f60, 0x2009,
-+      0x0052, 0x1078, 0x775c, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f,
-+      0x007c, 0x097e, 0x077e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4775,
-+      0x0040, 0x8e1e, 0x2001, 0x8e16, 0x0078, 0x8e24, 0x1078, 0x4739,
-+      0x0040, 0x8e2d, 0x2001, 0x8e1e, 0x007e, 0xa00e, 0x2400, 0x1078,
-+      0x4b51, 0x1078, 0x4a73, 0x007f, 0x007a, 0x2418, 0x1078, 0x6161,
-+      0x62a0, 0x087e, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x1078,
-+      0x5f1b, 0x087f, 0x1078, 0x5e0a, 0x2f08, 0x2648, 0x1078, 0x9f8b,
-+      0x613c, 0x81ff, 0x1040, 0x5fdb, 0x1078, 0x62d1, 0x127f, 0x077f,
-+      0x097f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+      0x76c7, 0x017f, 0x0040, 0x8e63, 0x660a, 0x611a, 0x601f, 0x0001,
-+      0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x775c, 0xa085, 0x0001,
-+      0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e60, 0x0c7e, 0x127e,
-+      0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8e7f,
-+      0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021,
-+      0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
-+      0x0078, 0x8e7c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+      0x76c7, 0x017f, 0x0040, 0x8e9b, 0x660a, 0x611a, 0x601f, 0x0001,
-+      0x2d00, 0x6012, 0x2009, 0x003d, 0x1078, 0x775c, 0xa085, 0x0001,
-+      0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8e98, 0x0c7e, 0x127e,
-+      0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x8eb6,
-+      0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
-+      0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
-+      0x8eb3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
-+      0x8ec3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x007e, 0x6000,
-+      0xa086, 0x0000, 0x0040, 0x8ed8, 0x6013, 0x0000, 0x601f, 0x0007,
-+      0x2001, 0xa8a3, 0x2004, 0x6016, 0x1078, 0xa495, 0x603f, 0x0000,
-+      0x007f, 0x007c, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0xa653, 0x2634,
-+      0xd6e4, 0x0040, 0x8ee8, 0x6618, 0x2660, 0x6e48, 0x1078, 0x46e7,
-+      0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e,
-+      0x0002, 0x0040, 0x8efd, 0xa08e, 0x0003, 0x0040, 0x8efd, 0xa08e,
-+      0x0004, 0x0040, 0x8efd, 0xa085, 0x0001, 0x017f, 0x007f, 0x007c,
-+      0x007e, 0x0d7e, 0x6010, 0xa06d, 0x0040, 0x8f0d, 0x6838, 0xd0fc,
-+      0x0040, 0x8f0d, 0xa006, 0x0078, 0x8f0f, 0xa085, 0x0001, 0x0d7f,
-+      0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+      0x76c7, 0x017f, 0x0040, 0x8f2c, 0x611a, 0x601f, 0x0001, 0x2d00,
-+      0x6012, 0x1078, 0x2880, 0x2009, 0x0028, 0x1078, 0x775c, 0xa085,
-+      0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x8f29, 0xa186,
-+      0x0015, 0x00c0, 0x8f44, 0x2011, 0xa620, 0x2204, 0xa086, 0x0074,
-+      0x00c0, 0x8f44, 0x1078, 0x7f91, 0x6003, 0x0001, 0x6007, 0x0029,
-+      0x1078, 0x5dd7, 0x0078, 0x8f48, 0x1078, 0x7c83, 0x1078, 0x772d,
-+      0x007c, 0xa186, 0x0016, 0x00c0, 0x8f53, 0x2001, 0x0004, 0x1078,
-+      0x4502, 0x0078, 0x8f74, 0xa186, 0x0015, 0x00c0, 0x8f78, 0x2011,
-+      0xa620, 0x2204, 0xa086, 0x0014, 0x00c0, 0x8f78, 0x0d7e, 0x6018,
-+      0x2068, 0x1078, 0x4649, 0x0d7f, 0x1078, 0x8043, 0x00c0, 0x8f78,
-+      0x0d7e, 0x6018, 0x2068, 0x6890, 0x0d7f, 0xa005, 0x0040, 0x8f78,
-+      0x2001, 0x0006, 0x1078, 0x4502, 0x1078, 0x77f8, 0x0078, 0x8f7c,
-+      0x1078, 0x7c83, 0x1078, 0x772d, 0x007c, 0x6848, 0xa086, 0x0005,
-+      0x00c0, 0x8f84, 0x1078, 0x8f85, 0x007c, 0x6850, 0xc0ad, 0x6852,
-+      0x007c, 0x0e7e, 0x2071, 0xab8c, 0x7014, 0xd0e4, 0x0040, 0x8f9a,
-+      0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x1078, 0x5d8a,
-+      0x1078, 0x62d1, 0x0e7f, 0x007c, 0x0c7e, 0x0f7e, 0x2c78, 0x1078,
-+      0x4963, 0x0f7f, 0x0040, 0x8fa9, 0x601c, 0xa084, 0x000f, 0x1079,
-+      0x8fab, 0x0c7f, 0x007c, 0x8ad5, 0x8fb6, 0x8fb9, 0x8fbc, 0xa25d,
-+      0xa279, 0xa27c, 0x8ad5, 0x8ad5, 0x1078, 0x1332, 0x0005, 0x0005,
-+      0x007c, 0x0005, 0x0005, 0x007c, 0x1078, 0x8fbf, 0x007c, 0x0f7e,
-+      0x2c78, 0x1078, 0x4963, 0x0040, 0x8fee, 0x1078, 0x76c7, 0x00c0,
-+      0x8fcf, 0x2001, 0xa8a4, 0x2004, 0x783e, 0x0078, 0x8fee, 0x7818,
-+      0x601a, 0x781c, 0xa086, 0x0003, 0x0040, 0x8fdc, 0x7808, 0x6036,
-+      0x2f00, 0x603a, 0x0078, 0x8fe0, 0x7808, 0x603a, 0x2f00, 0x6036,
-+      0x602a, 0x601f, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7920,
-+      0x6122, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x2f60, 0x0f7f, 0x007c,
-+      0x017e, 0x0f7e, 0x682c, 0x6032, 0xa08e, 0x0001, 0x0040, 0x9001,
-+      0xa086, 0x0005, 0x0040, 0x9005, 0xa006, 0x602a, 0x602e, 0x0078,
-+      0x9016, 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6810, 0x2078, 0x787c,
-+      0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x00c8, 0x8ffc, 0x6834,
-+      0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036,
-+      0x6808, 0x603a, 0x6918, 0x611a, 0x6920, 0x6122, 0x601f, 0x0001,
-+      0x6007, 0x0039, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x6803, 0x0002,
-+      0x0f7f, 0x017f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0034,
-+      0x0040, 0x9050, 0xa08e, 0x0035, 0x0040, 0x9050, 0xa08e, 0x0036,
-+      0x0040, 0x9050, 0xa08e, 0x0037, 0x0040, 0x9050, 0xa08e, 0x0038,
-+      0x0040, 0x9050, 0xa08e, 0x0039, 0x0040, 0x9050, 0xa08e, 0x003a,
-+      0x0040, 0x9050, 0xa08e, 0x003b, 0x0040, 0x9050, 0xa085, 0x0001,
-+      0x017f, 0x007f, 0x007c, 0x0f7e, 0x2c78, 0x1078, 0x4963, 0x00c0,
-+      0x905d, 0xa085, 0x0001, 0x0078, 0x906c, 0x6024, 0xd0f4, 0x00c0,
-+      0x906b, 0xc0f5, 0x6026, 0x6010, 0x2078, 0x7828, 0x603a, 0x782c,
-+      0x6036, 0x1078, 0x1757, 0xa006, 0x0f7f, 0x007c, 0x007e, 0x017e,
-+      0x027e, 0x037e, 0x0e7e, 0x2001, 0xa89e, 0x200c, 0x8000, 0x2014,
-+      0x2001, 0x0032, 0x1078, 0x5c1c, 0x2001, 0xa8a2, 0x82ff, 0x00c0,
-+      0x9083, 0x2011, 0x0014, 0x2202, 0x2001, 0xa8a0, 0x200c, 0x8000,
-+      0x2014, 0x2071, 0xa88d, 0x711a, 0x721e, 0x2001, 0x0064, 0x1078,
-+      0x5c1c, 0x2001, 0xa8a3, 0x82ff, 0x00c0, 0x9098, 0x2011, 0x0014,
-+      0x2202, 0x2009, 0xa8a4, 0xa280, 0x000a, 0x200a, 0x1078, 0x498b,
-+      0x0e7f, 0x037f, 0x027f, 0x017f, 0x007f, 0x007c, 0x007e, 0x0e7e,
-+      0x2001, 0xa8a2, 0x2003, 0x0028, 0x2001, 0xa8a3, 0x2003, 0x0014,
-+      0x2071, 0xa88d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0xa8a4,
-+      0x2003, 0x001e, 0x0e7f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091,
-+      0x8000, 0x0c7e, 0x1078, 0x76c7, 0x017f, 0x0040, 0x90d5, 0x611a,
-+      0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0033, 0x1078, 0x775c,
-+      0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x90d2,
-+      0x0d7e, 0x0e7e, 0x0f7e, 0x2071, 0xa600, 0xa186, 0x0015, 0x00c0,
-+      0x9107, 0x7080, 0xa086, 0x0018, 0x00c0, 0x9107, 0x6010, 0x2068,
-+      0x6a3c, 0xd2e4, 0x00c0, 0x90fb, 0x2c78, 0x1078, 0x6490, 0x0040,
-+      0x910f, 0x706c, 0x6a50, 0xa206, 0x00c0, 0x9103, 0x7070, 0x6a54,
-+      0xa206, 0x00c0, 0x9103, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009,
-+      0x0000, 0x1078, 0x28c8, 0x1078, 0x77f8, 0x0078, 0x910b, 0x1078,
-+      0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x7050,
-+      0xa080, 0x29c0, 0x2004, 0x6a54, 0xa206, 0x0040, 0x90fb, 0x0078,
-+      0x9103, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x76c7,
-+      0x017f, 0x0040, 0x9131, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012,
-+      0x2009, 0x0043, 0x1078, 0x775c, 0xa085, 0x0001, 0x127f, 0x0c7f,
-+      0x007c, 0xa006, 0x0078, 0x912e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2071,
-+      0xa600, 0xa186, 0x0015, 0x00c0, 0x915a, 0x7080, 0xa086, 0x0004,
-+      0x00c0, 0x915a, 0x6010, 0xa0e8, 0x000f, 0x2c78, 0x1078, 0x6490,
-+      0x0040, 0x9162, 0x706c, 0x6a08, 0xa206, 0x00c0, 0x9156, 0x7070,
-+      0x6a0c, 0xa206, 0x00c0, 0x9156, 0x1078, 0x2880, 0x1078, 0x77f8,
-+      0x0078, 0x915e, 0x1078, 0x7c83, 0x1078, 0x772d, 0x0f7f, 0x0e7f,
-+      0x0d7f, 0x007c, 0x7050, 0xa080, 0x29c0, 0x2004, 0x6a0c, 0xa206,
-+      0x0040, 0x9154, 0x0078, 0x9156, 0x017e, 0x027e, 0x684c, 0xd0ac,
-+      0x0040, 0x9184, 0x6914, 0x6a10, 0x2100, 0xa205, 0x0040, 0x9184,
-+      0x6860, 0xa106, 0x00c0, 0x9180, 0x685c, 0xa206, 0x0040, 0x9184,
-+      0x6962, 0x6a5e, 0xa085, 0x0001, 0x027f, 0x017f, 0x007c, 0x0e7e,
-+      0x127e, 0x2071, 0xa600, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001,
-+      0x0048, 0x91b9, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040,
-+      0x91a5, 0xace0, 0x0010, 0x7058, 0xac02, 0x00c8, 0x91a1, 0x0078,
-+      0x9194, 0x2061, 0xad00, 0x0078, 0x9194, 0x6003, 0x0008, 0x8529,
-+      0x754a, 0xaca8, 0x0010, 0x7058, 0xa502, 0x00c8, 0x91b5, 0x754e,
-+      0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704f, 0xad00, 0x0078,
-+      0x91b0, 0xa006, 0x0078, 0x91b2, 0x0c7e, 0x027e, 0x017e, 0xa186,
-+      0x0035, 0x0040, 0x91c6, 0x6a34, 0x0078, 0x91c7, 0x6a28, 0x1078,
-+      0x8cf2, 0x0040, 0x91f0, 0x2260, 0x611c, 0xa186, 0x0003, 0x0040,
-+      0x91d5, 0xa186, 0x0006, 0x00c0, 0x91ec, 0x6834, 0xa206, 0x0040,
-+      0x91e4, 0x6838, 0xa206, 0x00c0, 0x91ec, 0x6108, 0x6834, 0xa106,
-+      0x00c0, 0x91ec, 0x0078, 0x91e9, 0x6008, 0x6938, 0xa106, 0x00c0,
-+      0x91ec, 0x6018, 0x6918, 0xa106, 0x017f, 0x027f, 0x0c7f, 0x007c,
-+      0xa085, 0x0001, 0x0078, 0x91ec, 0x6944, 0xd1cc, 0x0040, 0x920d,
-+      0xa18c, 0x00ff, 0xa18e, 0x0002, 0x00c0, 0x920d, 0xad88, 0x001e,
-+      0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001, 0x00c0, 0x920d,
-+      0x6810, 0x6914, 0xa115, 0x10c0, 0x84d5, 0x007c, 0x067e, 0x6000,
-+      0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9218, 0x067f, 0x007c,
-+      0x9228, 0x96df, 0x97fb, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
-+      0x9262, 0x988e, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
-+      0x1078, 0x1332, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x1332,
-+      0x1079, 0x9234, 0x067f, 0x007c, 0x9244, 0x9d53, 0x9244, 0x9244,
-+      0x9244, 0x9244, 0x9244, 0x9244, 0x9d11, 0x9da1, 0x9244, 0xa3b0,
-+      0xa3e4, 0xa3b0, 0xa3e4, 0x9244, 0x1078, 0x1332, 0x067e, 0x6000,
-+      0xa0b2, 0x0010, 0x10c8, 0x1332, 0x1079, 0x9250, 0x067f, 0x007c,
-+      0x9260, 0x99eb, 0x9ac7, 0x9af5, 0x9b70, 0x9260, 0x9c76, 0x9c1e,
-+      0x989a, 0x9ce5, 0x9cfb, 0x9260, 0x9260, 0x9260, 0x9260, 0x9260,
-+      0x1078, 0x1332, 0xa1b2, 0x0044, 0x10c8, 0x1332, 0x2100, 0x0079,
-+      0x9269, 0x92a9, 0x9498, 0x92a9, 0x92a9, 0x92a9, 0x94a0, 0x92a9,
-+      0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
-+      0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
-+      0x92ab, 0x9311, 0x9320, 0x9377, 0x9396, 0x9415, 0x9485, 0x92a9,
-+      0x92a9, 0x94a4, 0x92a9, 0x92a9, 0x94b7, 0x94c2, 0x92a9, 0x92a9,
-+      0x92a9, 0x92a9, 0x92a9, 0x94fa, 0x92a9, 0x92a9, 0x9509, 0x92a9,
-+      0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x9522, 0x92a9, 0x92a9,
-+      0x92a9, 0x95af, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9, 0x92a9,
-+      0x9629, 0x1078, 0x1332, 0x1078, 0x4967, 0x00c0, 0x92bb, 0x2001,
-+      0xa633, 0x2004, 0xd0cc, 0x00c0, 0x92bb, 0xa084, 0x0009, 0xa086,
-+      0x0008, 0x00c0, 0x92c3, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
-+      0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x0e7e, 0x0c7e, 0x037e,
-+      0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
-+      0x1078, 0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08,
-+      0x1078, 0x9f8b, 0x077f, 0x017f, 0x2e60, 0x1078, 0x47e9, 0x017f,
-+      0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x6618, 0x0c7e, 0x2660, 0x1078,
-+      0x45d6, 0x0c7f, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082,
-+      0x0006, 0x0048, 0x9303, 0x1078, 0x9ebf, 0x00c0, 0x9371, 0x1078,
-+      0x9e50, 0x00c0, 0x92ff, 0x6007, 0x0008, 0x0078, 0x9493, 0x6007,
-+      0x0009, 0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x930d, 0x1078,
-+      0x9ebf, 0x0040, 0x92f7, 0x0078, 0x9371, 0x6013, 0x1900, 0x0078,
-+      0x92ff, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078, 0x9e05,
-+      0x6007, 0x0006, 0x0078, 0x9493, 0x6007, 0x0007, 0x0078, 0x9493,
-+      0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664,
-+      0x0d7e, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082, 0x0006,
-+      0x00c8, 0x9336, 0x2001, 0x0001, 0x1078, 0x44ee, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0006, 0x0040, 0x9353, 0xa686, 0x0004, 0x0040,
-+      0x9353, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9353,
-+      0xa686, 0x0004, 0x0040, 0x9353, 0xa686, 0x0005, 0x0040, 0x9353,
-+      0x0d7f, 0x0078, 0x9371, 0x1078, 0x9f25, 0x00c0, 0x936c, 0xa686,
-+      0x0006, 0x00c0, 0x9365, 0x027e, 0x6218, 0xa290, 0x0028, 0x2214,
-+      0x2009, 0x0000, 0x1078, 0x28c8, 0x027f, 0x1078, 0x4649, 0x6007,
-+      0x000a, 0x0d7f, 0x0078, 0x9493, 0x6007, 0x000b, 0x0d7f, 0x0078,
-+      0x9493, 0x1078, 0x2880, 0x6007, 0x0001, 0x0078, 0x9493, 0x1078,
-+      0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6618,
-+      0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa686, 0x0707, 0x0040, 0x9371,
-+      0x027e, 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x1078,
-+      0x28c8, 0x027f, 0x6007, 0x000c, 0x0078, 0x9493, 0x1078, 0x4967,
-+      0x00c0, 0x93a3, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086,
-+      0x0008, 0x00c0, 0x93ab, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013,
-+      0x0000, 0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001,
-+      0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x93ef, 0xa6b4,
-+      0xff00, 0x8637, 0xa686, 0x0004, 0x0040, 0x93c2, 0xa686, 0x0006,
-+      0x00c0, 0x9371, 0x1078, 0x9f34, 0x00c0, 0x93ca, 0x6007, 0x000e,
-+      0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4,
-+      0x00ff, 0x8427, 0x047e, 0x1078, 0x2880, 0x047f, 0x017e, 0xa006,
-+      0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040, 0x93e9, 0x2009, 0x0029,
-+      0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068, 0x6800, 0xc0e5, 0x6802,
-+      0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001, 0x0078, 0x9493, 0x2001,
-+      0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
-+      0x0004, 0x2019, 0xa605, 0x2011, 0xab90, 0x1078, 0x80de, 0x037f,
-+      0x027f, 0x017f, 0x157f, 0xa005, 0x0040, 0x940f, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0006, 0x0040, 0x93c2, 0x0078, 0x9371, 0x6013,
-+      0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x4967, 0x00c0,
-+      0x9422, 0x2001, 0xa633, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008,
-+      0x00c0, 0x942a, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000,
-+      0x0078, 0x9493, 0x1078, 0x4957, 0x6618, 0xa6b0, 0x0001, 0x2634,
-+      0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x9472, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0004, 0x0040, 0x9441, 0xa686, 0x0006, 0x00c0,
-+      0x9371, 0x1078, 0x9f5f, 0x00c0, 0x944d, 0x1078, 0x9e50, 0x00c0,
-+      0x944d, 0x6007, 0x0010, 0x0078, 0x9493, 0x047e, 0x6418, 0xa4a0,
-+      0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x047e, 0x1078, 0x2880,
-+      0x047f, 0x017e, 0xa006, 0x2009, 0xa653, 0x210c, 0xd1a4, 0x0040,
-+      0x946c, 0x2009, 0x0029, 0x1078, 0xa21d, 0x6018, 0x0d7e, 0x2068,
-+      0x6800, 0xc0e5, 0x6802, 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001,
-+      0x0078, 0x9493, 0x1078, 0xa09f, 0x0040, 0x947f, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0006, 0x0040, 0x9441, 0x0078, 0x9371, 0x6013,
-+      0x1900, 0x6007, 0x0009, 0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0,
-+      0x9664, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0,
-+      0x9371, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c,
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x0078, 0x9497,
-+      0x6007, 0x0005, 0x0078, 0x949a, 0x1078, 0xa41c, 0x00c0, 0x9664,
-+      0x1078, 0x29bb, 0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371,
-+      0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x007c, 0x1078,
-+      0x29bb, 0x00c0, 0x9664, 0x6007, 0x0023, 0x6003, 0x0001, 0x1078,
-+      0x5dd7, 0x007c, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb,
-+      0x00c0, 0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x017e, 0x027e,
-+      0x2011, 0xab90, 0x2214, 0x2c08, 0xa006, 0x1078, 0xa1e6, 0x00c0,
-+      0x94e9, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xab89,
-+      0x2214, 0xa296, 0xffff, 0x00c0, 0x94f3, 0x6007, 0x0025, 0x0078,
-+      0x94f3, 0x6004, 0xa086, 0x0024, 0x00c0, 0x94f0, 0x1078, 0x772d,
-+      0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x5dd7, 0x027f,
-+      0x017f, 0x007c, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x6106, 0x1078,
-+      0x9687, 0x6007, 0x002b, 0x0078, 0x9493, 0x6007, 0x002c, 0x0078,
-+      0x9493, 0x1078, 0xa41c, 0x00c0, 0x9664, 0x1078, 0x29bb, 0x00c0,
-+      0x9664, 0x1078, 0x9667, 0x00c0, 0x9371, 0x6106, 0x1078, 0x968c,
-+      0x00c0, 0x951e, 0x6007, 0x002e, 0x0078, 0x9493, 0x6007, 0x002f,
-+      0x0078, 0x9493, 0x1078, 0x29bb, 0x00c0, 0x9664, 0x0e7e, 0x0d7e,
-+      0x0c7e, 0x6018, 0xa080, 0x0001, 0x200c, 0xa184, 0x00ff, 0xa086,
-+      0x0006, 0x0040, 0x953f, 0xa184, 0xff00, 0x8007, 0xa086, 0x0006,
-+      0x0040, 0x953f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0078, 0x9498, 0x2001,
-+      0xa672, 0x2004, 0xd0e4, 0x0040, 0x95ab, 0x2071, 0xab8c, 0x7010,
-+      0x6036, 0x7014, 0x603a, 0x7108, 0x720c, 0x2001, 0xa653, 0x2004,
-+      0xd0a4, 0x0040, 0x955d, 0x6018, 0x2068, 0x6810, 0xa106, 0x00c0,
-+      0x955d, 0x6814, 0xa206, 0x0040, 0x9581, 0x2001, 0xa653, 0x2004,
-+      0xd0ac, 0x00c0, 0x959f, 0x2069, 0xa600, 0x6870, 0xa206, 0x00c0,
-+      0x959f, 0x686c, 0xa106, 0x00c0, 0x959f, 0x7210, 0x1078, 0x8cf2,
-+      0x0040, 0x95a5, 0x1078, 0xa28e, 0x0040, 0x95a5, 0x622a, 0x6007,
-+      0x0036, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0c7f, 0x0d7f, 0x0e7f,
-+      0x007c, 0x7214, 0xa286, 0xffff, 0x0040, 0x9593, 0x1078, 0x8cf2,
-+      0x0040, 0x95a5, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106, 0x00c0,
-+      0x95a5, 0x0078, 0x956e, 0x7210, 0x2c08, 0xa085, 0x0001, 0x1078,
-+      0xa1e6, 0x2c10, 0x2160, 0x0040, 0x95a5, 0x0078, 0x956e, 0x6007,
-+      0x0037, 0x6013, 0x1500, 0x0078, 0x9579, 0x6007, 0x0037, 0x6013,
-+      0x1700, 0x0078, 0x9579, 0x6007, 0x0012, 0x0078, 0x9579, 0x1078,
-+      0x29bb, 0x00c0, 0x9664, 0x6018, 0xa080, 0x0001, 0x2004, 0xa084,
-+      0xff00, 0x8007, 0xa086, 0x0006, 0x00c0, 0x9498, 0x0e7e, 0x0d7e,
-+      0x0c7e, 0x2001, 0xa672, 0x2004, 0xd0e4, 0x0040, 0x9621, 0x2069,
-+      0xa600, 0x2071, 0xab8c, 0x7008, 0x6036, 0x720c, 0x623a, 0xa286,
-+      0xffff, 0x00c0, 0x95de, 0x7208, 0x0c7e, 0x2c08, 0xa085, 0x0001,
-+      0x1078, 0xa1e6, 0x2c10, 0x0c7f, 0x0040, 0x9615, 0x1078, 0x8cf2,
-+      0x0040, 0x9615, 0x0c7e, 0x027e, 0x2260, 0x1078, 0x89f3, 0x027f,
-+      0x0c7f, 0x7118, 0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0040,
-+      0x95ff, 0xa186, 0x0005, 0x0040, 0x95f9, 0xa186, 0x0007, 0x00c0,
-+      0x9609, 0xa280, 0x0004, 0x2004, 0xa005, 0x0040, 0x9609, 0x057e,
-+      0x7510, 0x7614, 0x1078, 0xa2a3, 0x057f, 0x0c7f, 0x0d7f, 0x0e7f,
-+      0x007c, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013, 0x2a00, 0x6003,
-+      0x0001, 0x1078, 0x5d8a, 0x0078, 0x9605, 0x6007, 0x003b, 0x602b,
-+      0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x0078,
-+      0x9605, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000, 0x0078,
-+      0x9579, 0x0e7e, 0x027e, 0x1078, 0x4967, 0x0040, 0x965e, 0x1078,
-+      0x4957, 0x1078, 0xa4a9, 0x00c0, 0x965c, 0x2071, 0xa600, 0x70cc,
-+      0xc085, 0x70ce, 0x0f7e, 0x2079, 0x0100, 0x7298, 0xa284, 0x00ff,
-+      0x706e, 0x78e6, 0xa284, 0xff00, 0x7270, 0xa205, 0x7072, 0x78ea,
-+      0x0f7f, 0x70d7, 0x0000, 0x2001, 0xa653, 0x2004, 0xd0a4, 0x0040,
-+      0x9655, 0x2011, 0xa8ca, 0x2013, 0x07d0, 0xd0ac, 0x00c0, 0x965e,
-+      0x1078, 0x2677, 0x0078, 0x965e, 0x1078, 0xa4d9, 0x027f, 0x0e7f,
-+      0x1078, 0x772d, 0x0078, 0x9497, 0x1078, 0x772d, 0x007c, 0x0d7e,
-+      0x067e, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686,
-+      0x0006, 0x0040, 0x9684, 0xa686, 0x0004, 0x0040, 0x9684, 0x6e04,
-+      0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0040, 0x9684, 0xa686, 0x0004,
-+      0x0040, 0x9684, 0xa085, 0x0001, 0x067f, 0x0d7f, 0x007c, 0x0d7e,
-+      0x1078, 0x96bb, 0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x96ca, 0x00c0,
-+      0x96b4, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084, 0x00ff, 0xa115,
-+      0x6212, 0x6824, 0x602a, 0xd1e4, 0x0040, 0x96a2, 0x2009, 0x0001,
-+      0x0078, 0x96b0, 0xd1ec, 0x0040, 0x96b4, 0x6920, 0xa18c, 0x00ff,
-+      0x6824, 0x1078, 0x254d, 0x00c0, 0x96b4, 0x2110, 0x2009, 0x0000,
-+      0x1078, 0x28c8, 0x0078, 0x96b8, 0xa085, 0x0001, 0x0078, 0x96b9,
-+      0xa006, 0x0d7f, 0x007c, 0x2069, 0xab8d, 0x6800, 0xa082, 0x0010,
-+      0x00c8, 0x96c8, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x96c9,
-+      0xa006, 0x007c, 0x6013, 0x0000, 0x2069, 0xab8c, 0x6808, 0xa084,
-+      0xff00, 0xa086, 0x0800, 0x00c0, 0x96de, 0x6800, 0xa084, 0x00ff,
-+      0xa08e, 0x0014, 0x0040, 0x96de, 0xa08e, 0x0010, 0x007c, 0x6004,
-+      0xa0b2, 0x0044, 0x10c8, 0x1332, 0xa1b6, 0x0013, 0x00c0, 0x96eb,
-+      0x2008, 0x0079, 0x96fe, 0xa1b6, 0x0027, 0x0040, 0x96f3, 0xa1b6,
-+      0x0014, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
-+      0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0x973e, 0x9740,
-+      0x973e, 0x973e, 0x973e, 0x9740, 0x974c, 0x97d6, 0x9799, 0x97d6,
-+      0x97ad, 0x97d6, 0x974c, 0x97d6, 0x97ce, 0x97d6, 0x97ce, 0x97d6,
-+      0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e, 0x973e,
-+      0x973e, 0x973e, 0x973e, 0x973e, 0x9740, 0x973e, 0x97d6, 0x973e,
-+      0x973e, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e,
-+      0x973e, 0x97d6, 0x97d6, 0x973e, 0x97d6, 0x97d6, 0x973e, 0x973e,
-+      0x973e, 0x973e, 0x973e, 0x9740, 0x97d6, 0x97d6, 0x973e, 0x973e,
-+      0x97d6, 0x97d6, 0x973e, 0x973e, 0x973e, 0x973e, 0x1078, 0x1332,
-+      0x1078, 0x61cd, 0x2001, 0xa8a2, 0x2004, 0x6016, 0x6003, 0x0002,
-+      0x1078, 0x62d1, 0x0078, 0x97dc, 0x0f7e, 0x2079, 0xa652, 0x7804,
-+      0x0f7f, 0xd0ac, 0x00c0, 0x97d6, 0x2001, 0x0000, 0x1078, 0x44ee,
-+      0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x0040, 0x97d6,
-+      0x0c7e, 0x6018, 0x2060, 0x6000, 0xd0f4, 0x00c0, 0x9770, 0x6010,
-+      0xa005, 0x0040, 0x9770, 0x0c7f, 0x1078, 0x3699, 0x0078, 0x97d6,
-+      0x0c7f, 0x2001, 0xa600, 0x2004, 0xa086, 0x0002, 0x00c0, 0x977f,
-+      0x0f7e, 0x2079, 0xa600, 0x7890, 0x8000, 0x7892, 0x0f7f, 0x2001,
-+      0x0002, 0x1078, 0x4502, 0x1078, 0x61cd, 0x601f, 0x0001, 0x6003,
-+      0x0001, 0x6007, 0x0002, 0x1078, 0x5dd7, 0x1078, 0x62d1, 0x0c7e,
-+      0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x5a52, 0x0c7f, 0x0078,
-+      0x97dc, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0xa686, 0x0004, 0x0040,
-+      0x97d6, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0xa600, 0x2004,
-+      0xa086, 0x0003, 0x00c0, 0x97b6, 0x1078, 0x3699, 0x2001, 0x0006,
-+      0x1078, 0x97dd, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4,
-+      0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x97d6, 0x2001, 0x0006,
-+      0x0078, 0x97d4, 0x2001, 0x0004, 0x0078, 0x97d4, 0x2001, 0x0006,
-+      0x1078, 0x97dd, 0x0078, 0x97d6, 0x1078, 0x4535, 0x1078, 0x61cd,
-+      0x1078, 0x772d, 0x1078, 0x62d1, 0x007c, 0x017e, 0x0d7e, 0x6118,
-+      0x2168, 0x6900, 0xd184, 0x0040, 0x97f8, 0x6104, 0xa18e, 0x000a,
-+      0x00c0, 0x97f0, 0x699c, 0xd1a4, 0x00c0, 0x97f0, 0x2001, 0x0007,
-+      0x1078, 0x4502, 0x2001, 0x0000, 0x1078, 0x44ee, 0x1078, 0x28a6,
-+      0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084,
-+      0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x1332, 0xa1b6,
-+      0x0015, 0x00c0, 0x980f, 0x1079, 0x9816, 0x0078, 0x9815, 0xa1b6,
-+      0x0016, 0x10c0, 0x1332, 0x1079, 0x9822, 0x007c, 0x7d4e, 0x7d4e,
-+      0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x9877, 0x982e, 0x7d4e, 0x7d4e,
-+      0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e,
-+      0x9877, 0x987f, 0x7d4e, 0x7d4e, 0x7d4e, 0x7d4e, 0x0f7e, 0x2079,
-+      0xa652, 0x7804, 0xd0ac, 0x00c0, 0x9855, 0x6018, 0xa07d, 0x0040,
-+      0x9855, 0x7800, 0xd0f4, 0x00c0, 0x9841, 0x7810, 0xa005, 0x00c0,
-+      0x9855, 0x2001, 0x0000, 0x1078, 0x44ee, 0x2001, 0x0002, 0x1078,
-+      0x4502, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
-+      0x5dd7, 0x1078, 0x62d1, 0x0078, 0x9875, 0x2011, 0xab83, 0x2204,
-+      0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9875, 0x0c7e, 0x1078,
-+      0x45c4, 0x0040, 0x9868, 0x0c7f, 0x1078, 0x772d, 0x0078, 0x9875,
-+      0x6010, 0x007e, 0x6014, 0x007e, 0x1078, 0x42f8, 0x007f, 0x6016,
-+      0x007f, 0x6012, 0x0c7f, 0x1078, 0x772d, 0x0f7f, 0x007c, 0x6604,
-+      0xa6b6, 0x001e, 0x00c0, 0x987e, 0x1078, 0x772d, 0x007c, 0x1078,
-+      0x7f8e, 0x00c0, 0x988b, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
-+      0x5dd7, 0x0078, 0x988d, 0x1078, 0x772d, 0x007c, 0x6004, 0xa08a,
-+      0x0044, 0x10c8, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078,
-+      0x62d1, 0x007c, 0xa182, 0x0040, 0x0079, 0x989e, 0x98b1, 0x98b1,
-+      0x98b1, 0x98b1, 0x98b3, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
-+      0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1, 0x98b1,
-+      0x98b1, 0x1078, 0x1332, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e,
-+      0x027e, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005, 0x0040, 0x98c4,
-+      0x2021, 0x0000, 0x1078, 0xa472, 0x6106, 0x2071, 0xab80, 0x7444,
-+      0xa4a4, 0xff00, 0x0040, 0x991b, 0xa486, 0x2000, 0x00c0, 0x98d6,
-+      0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x5bf1, 0x1078, 0x138b,
-+      0x1040, 0x1332, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803,
-+      0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2,
-+      0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x017e, 0xa084,
-+      0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x4a73,
-+      0x017f, 0xa486, 0x2000, 0x00c0, 0x9903, 0x2019, 0x0017, 0x1078,
-+      0xa195, 0x0078, 0x997d, 0xa486, 0x0400, 0x00c0, 0x990d, 0x2019,
-+      0x0002, 0x1078, 0xa146, 0x0078, 0x997d, 0xa486, 0x0200, 0x00c0,
-+      0x9913, 0x1078, 0xa12b, 0xa486, 0x1000, 0x00c0, 0x9919, 0x1078,
-+      0xa17a, 0x0078, 0x997d, 0x2069, 0xa933, 0x6a00, 0xd284, 0x0040,
-+      0x99e7, 0xa284, 0x0300, 0x00c0, 0x99df, 0x6804, 0xa005, 0x0040,
-+      0x99c5, 0x2d78, 0x6003, 0x0007, 0x1078, 0x1370, 0x0040, 0x9984,
-+      0x7800, 0xd08c, 0x00c0, 0x9937, 0x7804, 0x8001, 0x7806, 0x6013,
-+      0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, 0x6008,
-+      0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
-+      0x6986, 0x6846, 0x7928, 0x698a, 0x792c, 0x698e, 0x7930, 0x6992,
-+      0x7934, 0x6996, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003, 0xa286,
-+      0x0002, 0x00c0, 0x995f, 0x684f, 0x0040, 0x0078, 0x9969, 0xa286,
-+      0x0001, 0x00c0, 0x9967, 0x684f, 0x0080, 0x0078, 0x9969, 0x684f,
-+      0x0000, 0x20a9, 0x000a, 0x2001, 0xab90, 0xad90, 0x0015, 0x200c,
-+      0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x996f, 0x200c, 0x6982,
-+      0x8000, 0x200c, 0x697e, 0x1078, 0x4a73, 0x027f, 0x047f, 0x157f,
-+      0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x2001, 0xa60e, 0x2004, 0xd084,
-+      0x0040, 0x998e, 0x1078, 0x138b, 0x00c0, 0x9930, 0x6013, 0x0100,
-+      0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1,
-+      0x0078, 0x997d, 0x2069, 0xab92, 0x2d04, 0xa084, 0xff00, 0xa086,
-+      0x1200, 0x00c0, 0x99b9, 0x2069, 0xab80, 0x686c, 0xa084, 0x00ff,
-+      0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003,
-+      0x0001, 0x6007, 0x0043, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078,
-+      0x997d, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078,
-+      0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x2001, 0xa60d, 0x2004,
-+      0xd0ec, 0x0040, 0x99cf, 0x2011, 0x8049, 0x1078, 0x361b, 0x6013,
-+      0x0300, 0x0078, 0x99d5, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007,
-+      0x0041, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x997d, 0x6013,
-+      0x0500, 0x0078, 0x99d5, 0x6013, 0x0600, 0x0078, 0x999a, 0x6013,
-+      0x0200, 0x0078, 0x999a, 0xa186, 0x0013, 0x00c0, 0x99fd, 0x6004,
-+      0xa08a, 0x0040, 0x1048, 0x1332, 0xa08a, 0x0053, 0x10c8, 0x1332,
-+      0xa082, 0x0040, 0x2008, 0x0079, 0x9a82, 0xa186, 0x0051, 0x0040,
-+      0x9a0a, 0xa186, 0x0047, 0x00c0, 0x9a23, 0x6004, 0xa086, 0x0041,
-+      0x0040, 0x9a31, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x9a31,
-+      0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x5c56,
-+      0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0,
-+      0x9a31, 0x0078, 0x9ac7, 0xa186, 0x0027, 0x0040, 0x9a2b, 0xa186,
-+      0x0014, 0x10c0, 0x1332, 0x6004, 0xa082, 0x0040, 0x2008, 0x0079,
-+      0x9a34, 0x1078, 0x7773, 0x007c, 0x9a47, 0x9a49, 0x9a49, 0x9a71,
-+      0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47,
-+      0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x9a47, 0x1078,
-+      0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x037e, 0x0d7e, 0x6010,
-+      0xa06d, 0x0040, 0x9a6e, 0xad84, 0xf000, 0x0040, 0x9a6e, 0x6003,
-+      0x0002, 0x6018, 0x2004, 0xd0bc, 0x00c0, 0x9a6e, 0x2019, 0x0004,
-+      0x1078, 0xa1ca, 0x6013, 0x0000, 0x6014, 0xa005, 0x00c0, 0x9a6c,
-+      0x2001, 0xa8a3, 0x2004, 0x6016, 0x6003, 0x0007, 0x0d7f, 0x037f,
-+      0x007c, 0x0d7e, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x1078, 0x8d06,
-+      0x0040, 0x9a7e, 0x6010, 0x2068, 0x1078, 0x13a4, 0x1078, 0x8ec6,
-+      0x0d7f, 0x007c, 0x9a95, 0x9ab4, 0x9a9e, 0x9ac1, 0x9a95, 0x9a95,
-+      0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95,
-+      0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x9a95, 0x1078, 0x1332, 0x6010,
-+      0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x61cd,
-+      0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4, 0x0040, 0x9aaf, 0x6003,
-+      0x0007, 0x2009, 0x0043, 0x1078, 0x775c, 0x0078, 0x9ab1, 0x6003,
-+      0x0002, 0x1078, 0x62d1, 0x007c, 0x1078, 0x61cd, 0x1078, 0xa423,
-+      0x00c0, 0x9abe, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x1078, 0x62d1,
-+      0x007c, 0x1078, 0x61cd, 0x2009, 0x0041, 0x0078, 0x9c1e, 0xa182,
-+      0x0040, 0x0079, 0x9acb, 0x9ade, 0x9ae0, 0x9ade, 0x9ade, 0x9ade,
-+      0x9ade, 0x9ade, 0x9ae1, 0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9ade,
-+      0x9ade, 0x9ade, 0x9ade, 0x9ade, 0x9aec, 0x9ade, 0x1078, 0x1332,
-+      0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+      0x2c10, 0x1078, 0x15fa, 0x007c, 0x0d7e, 0x1078, 0x5bc1, 0x0d7f,
-+      0x1078, 0xa495, 0x1078, 0x772d, 0x007c, 0xa182, 0x0040, 0x0079,
-+      0x9af9, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
-+      0x9b0e, 0x9b0c, 0x9b11, 0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x9b0c,
-+      0x9b3c, 0x9b0c, 0x9b0c, 0x9b0c, 0x1078, 0x1332, 0x1078, 0x7773,
-+      0x007c, 0x1078, 0x627a, 0x1078, 0x639b, 0x6010, 0x0d7e, 0x2068,
-+      0x684c, 0xd0fc, 0x0040, 0x9b27, 0xa08c, 0x0003, 0xa18e, 0x0002,
-+      0x0040, 0x9b2f, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003,
-+      0x0007, 0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x1078,
-+      0xa423, 0x0040, 0x9b35, 0x0d7f, 0x007c, 0x1078, 0x5bc1, 0x1078,
-+      0x772d, 0x0d7f, 0x0078, 0x9b2e, 0x037e, 0x1078, 0x627a, 0x1078,
-+      0x639b, 0x6010, 0x0d7e, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0040,
-+      0x9b5c, 0x684c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x9b58,
-+      0x687c, 0x632c, 0xa31a, 0x632e, 0x6880, 0x6328, 0xa31b, 0x632a,
-+      0x6003, 0x0002, 0x0078, 0x9b6d, 0x2019, 0x0004, 0x1078, 0xa1ca,
-+      0x6014, 0xa005, 0x00c0, 0x9b69, 0x2001, 0xa8a3, 0x2004, 0x8003,
-+      0x6016, 0x6013, 0x0000, 0x6003, 0x0007, 0x0d7f, 0x037f, 0x007c,
-+      0xa186, 0x0013, 0x00c0, 0x9b7e, 0x6004, 0xa086, 0x0042, 0x10c0,
-+      0x1332, 0x1078, 0x61cd, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0027,
-+      0x0040, 0x9b86, 0xa186, 0x0014, 0x00c0, 0x9b96, 0x6004, 0xa086,
-+      0x0042, 0x10c0, 0x1332, 0x2001, 0x0007, 0x1078, 0x4535, 0x1078,
-+      0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c, 0xa182, 0x0040,
-+      0x0079, 0x9b9a, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
-+      0x9bad, 0x9baf, 0x9bbb, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad,
-+      0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x9bad, 0x1078, 0x1332, 0x037e,
-+      0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x15fa,
-+      0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x6810, 0x6a14,
-+      0x6118, 0x210c, 0xd1bc, 0x0040, 0x9bda, 0x6124, 0xd1f4, 0x00c0,
-+      0x9bda, 0x007e, 0x047e, 0x057e, 0x6c7c, 0xa422, 0x6d80, 0x2200,
-+      0xa52b, 0x602c, 0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x057f,
-+      0x047f, 0x007f, 0xa20d, 0x00c0, 0x9bee, 0x684c, 0xd0fc, 0x0040,
-+      0x9be6, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x9c1e, 0x6003, 0x0007,
-+      0x6017, 0x0000, 0x1078, 0x5bc1, 0x0d7f, 0x007c, 0x007e, 0x0f7e,
-+      0x2c78, 0x1078, 0x4963, 0x0f7f, 0x007f, 0x0040, 0x9bfb, 0x6003,
-+      0x0002, 0x0d7f, 0x007c, 0x2009, 0xa60d, 0x210c, 0xd19c, 0x0040,
-+      0x9c05, 0x6003, 0x0007, 0x0078, 0x9c07, 0x6003, 0x0006, 0x1078,
-+      0x9c0d, 0x1078, 0x5bc3, 0x0d7f, 0x007c, 0xd2fc, 0x0040, 0x9c19,
-+      0x8002, 0x8000, 0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0078,
-+      0x9c1b, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x007c, 0xa182, 0x0040,
-+      0x0048, 0x9c24, 0x0079, 0x9c31, 0xa186, 0x0013, 0x0040, 0x9c2c,
-+      0xa186, 0x0014, 0x10c0, 0x1332, 0x6024, 0xd0dc, 0x1040, 0x1332,
-+      0x007c, 0x9c44, 0x9c4b, 0x9c57, 0x9c63, 0x9c44, 0x9c44, 0x9c44,
-+      0x9c72, 0x9c44, 0x9c46, 0x9c46, 0x9c44, 0x9c44, 0x9c44, 0x9c44,
-+      0x9c44, 0x9c44, 0x9c44, 0x9c44, 0x1078, 0x1332, 0x6024, 0xd0dc,
-+      0x1040, 0x1332, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a,
-+      0x127e, 0x2091, 0x8000, 0x1078, 0x62d1, 0x127f, 0x007c, 0x6003,
-+      0x0001, 0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078,
-+      0x62d1, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, 0x1078,
-+      0x1cf0, 0x127e, 0x2091, 0x8000, 0x1078, 0x5df6, 0x1078, 0x639b,
-+      0x127f, 0x007c, 0xa016, 0x1078, 0x15fa, 0x007c, 0x127e, 0x2091,
-+      0x8000, 0x037e, 0x0d7e, 0xa182, 0x0040, 0x1079, 0x9c83, 0x0d7f,
-+      0x037f, 0x127f, 0x007c, 0x9c93, 0x9c95, 0x9caa, 0x9cc9, 0x9c93,
-+      0x9c93, 0x9c93, 0x9ce1, 0x9c93, 0x9c93, 0x9c93, 0x9c93, 0x9c93,
-+      0x9c93, 0x9c93, 0x9c93, 0x1078, 0x1332, 0x6010, 0x2068, 0x684c,
-+      0xd0fc, 0x0040, 0x9cbf, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040,
-+      0x9cbf, 0x6003, 0x0001, 0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1,
-+      0x0078, 0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf,
-+      0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0001,
-+      0x6106, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0078, 0x9ce4, 0x6013,
-+      0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x1078, 0xa1ca, 0x0078,
-+      0x9ce4, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x9cbf, 0xa09c,
-+      0x0003, 0xa39e, 0x0003, 0x0040, 0x9cbf, 0x6003, 0x0003, 0x6106,
-+      0x2c10, 0x1078, 0x1cf0, 0x1078, 0x5df6, 0x1078, 0x639b, 0x0078,
-+      0x9ce4, 0xa016, 0x1078, 0x15fa, 0x007c, 0x1078, 0x61cd, 0x6110,
-+      0x81ff, 0x0040, 0x9cf6, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e,
-+      0x2019, 0x0029, 0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6,
-+      0x1078, 0x62d1, 0x007c, 0x1078, 0x627a, 0x6110, 0x81ff, 0x0040,
-+      0x9d0c, 0x0d7e, 0x2168, 0x1078, 0xa4e2, 0x037e, 0x2019, 0x0029,
-+      0x1078, 0xa1ca, 0x037f, 0x0d7f, 0x1078, 0x8ec6, 0x1078, 0x639b,
-+      0x007c, 0xa182, 0x0085, 0x0079, 0x9d15, 0x9d1e, 0x9d1c, 0x9d1c,
-+      0x9d2a, 0x9d1c, 0x9d1c, 0x9d1c, 0x1078, 0x1332, 0x6003, 0x000b,
-+      0x6106, 0x1078, 0x5d8a, 0x127e, 0x2091, 0x8000, 0x1078, 0x62d1,
-+      0x127f, 0x007c, 0x027e, 0x0e7e, 0x1078, 0xa41c, 0x0040, 0x9d34,
-+      0x1078, 0x772d, 0x0078, 0x9d50, 0x2071, 0xab80, 0x7224, 0x6212,
-+      0x7220, 0x1078, 0xa069, 0x0040, 0x9d41, 0x6007, 0x0086, 0x0078,
-+      0x9d4a, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x00c0, 0x9d4a,
-+      0x6007, 0x0086, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1,
-+      0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x9d64, 0x6004,
-+      0xa08a, 0x0085, 0x1048, 0x1332, 0xa08a, 0x008c, 0x10c8, 0x1332,
-+      0xa082, 0x0085, 0x0079, 0x9d7b, 0xa186, 0x0027, 0x0040, 0x9d70,
-+      0xa186, 0x0014, 0x0040, 0x9d70, 0x1078, 0x7773, 0x0078, 0x9d7a,
-+      0x2001, 0x0007, 0x1078, 0x4535, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+      0x1078, 0x62d1, 0x007c, 0x9d82, 0x9d84, 0x9d84, 0x9d82, 0x9d82,
-+      0x9d82, 0x9d82, 0x1078, 0x1332, 0x1078, 0x61cd, 0x1078, 0x8ec6,
-+      0x1078, 0x62d1, 0x007c, 0xa182, 0x0085, 0x1048, 0x1332, 0xa182,
-+      0x008c, 0x10c8, 0x1332, 0xa182, 0x0085, 0x0079, 0x9d97, 0x9d9e,
-+      0x9d9e, 0x9d9e, 0x9da0, 0x9d9e, 0x9d9e, 0x9d9e, 0x1078, 0x1332,
-+      0x007c, 0xa186, 0x0013, 0x0040, 0x9db1, 0xa186, 0x0014, 0x0040,
-+      0x9db1, 0xa186, 0x0027, 0x0040, 0x9db1, 0x1078, 0x7773, 0x0078,
-+      0x9db7, 0x1078, 0x61cd, 0x1078, 0x8ec6, 0x1078, 0x62d1, 0x007c,
-+      0x037e, 0x1078, 0xa495, 0x603f, 0x0000, 0x2019, 0x000b, 0x1078,
-+      0x9dc7, 0x601f, 0x0006, 0x6003, 0x0007, 0x037f, 0x007c, 0x127e,
-+      0x037e, 0x2091, 0x8000, 0x087e, 0x2c40, 0x097e, 0x2049, 0x0000,
-+      0x1078, 0x7246, 0x097f, 0x087f, 0x00c0, 0x9e02, 0x077e, 0x2c38,
-+      0x1078, 0x72f3, 0x077f, 0x00c0, 0x9e02, 0x6000, 0xa086, 0x0000,
-+      0x0040, 0x9e02, 0x601c, 0xa086, 0x0007, 0x0040, 0x9e02, 0x0d7e,
-+      0x6000, 0xa086, 0x0004, 0x00c0, 0x9df3, 0x1078, 0xa495, 0x601f,
-+      0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+      0x9dfb, 0x1078, 0xa1ca, 0x0d7f, 0x6013, 0x0000, 0x1078, 0xa495,
-+      0x601f, 0x0007, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e,
-+      0x157e, 0x2079, 0xab80, 0x7938, 0x783c, 0x1078, 0x254d, 0x00c0,
-+      0x9e49, 0x017e, 0x0c7e, 0x1078, 0x45c4, 0x00c0, 0x9e49, 0x017f,
-+      0x027f, 0x027e, 0x017e, 0x2019, 0x0029, 0x1078, 0x73d0, 0x1078,
-+      0x5f01, 0x077e, 0x2039, 0x0000, 0x1078, 0x5e0a, 0x077f, 0x017f,
-+      0x077e, 0x2039, 0x0000, 0x1078, 0x9f8b, 0x077f, 0x1078, 0x47e9,
-+      0x027e, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040,
-+      0x9e3d, 0xa286, 0x0004, 0x00c0, 0x9e40, 0x62a0, 0x1078, 0x2942,
-+      0x027f, 0x017f, 0x1078, 0x42f8, 0x6612, 0x6516, 0xa006, 0x0078,
-+      0x9e4b, 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c,
-+      0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x2009, 0xa620, 0x2104, 0xa086,
-+      0x0074, 0x00c0, 0x9eb3, 0x2069, 0xab8e, 0x690c, 0xa182, 0x0100,
-+      0x0048, 0x9ea3, 0x6908, 0xa184, 0x8000, 0x0040, 0x9eaf, 0x6018,
-+      0x2070, 0x7010, 0xa084, 0x00ff, 0x0040, 0x9e72, 0x7000, 0xd0f4,
-+      0x0040, 0x9e76, 0xa184, 0x0800, 0x0040, 0x9eaf, 0x6910, 0xa18a,
-+      0x0001, 0x0048, 0x9ea7, 0x6914, 0x2069, 0xabae, 0x6904, 0x81ff,
-+      0x00c0, 0x9e9b, 0x690c, 0xa182, 0x0100, 0x0048, 0x9ea3, 0x6908,
-+      0x81ff, 0x00c0, 0x9e9f, 0x6910, 0xa18a, 0x0001, 0x0048, 0x9ea7,
-+      0x6918, 0xa18a, 0x0001, 0x0048, 0x9eaf, 0x0078, 0x9eb9, 0x6013,
-+      0x0100, 0x0078, 0x9eb5, 0x6013, 0x0300, 0x0078, 0x9eb5, 0x6013,
-+      0x0500, 0x0078, 0x9eb5, 0x6013, 0x0700, 0x0078, 0x9eb5, 0x6013,
-+      0x0900, 0x0078, 0x9eb5, 0x6013, 0x0b00, 0x0078, 0x9eb5, 0x6013,
-+      0x0f00, 0x0078, 0x9eb5, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078,
-+      0x9eba, 0xa006, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
-+      0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
-+      0x00ff, 0xa286, 0x0006, 0x0040, 0x9ee3, 0xa286, 0x0004, 0x0040,
-+      0x9ee3, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x9ee3,
-+      0xa286, 0x0004, 0x0040, 0x9ee3, 0x0c7e, 0x2d60, 0x1078, 0x45d6,
-+      0x0c7f, 0x0078, 0x9f1e, 0x2011, 0xab96, 0xad98, 0x000a, 0x20a9,
-+      0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x2011, 0xab9a, 0xad98,
-+      0x0006, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f1f, 0x047e,
-+      0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0xa653,
-+      0x210c, 0xd1a4, 0x0040, 0x9f0b, 0x2009, 0x0029, 0x1078, 0xa21d,
-+      0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x5f01, 0x077e,
-+      0x2039, 0x0000, 0x1078, 0x5e0a, 0x2c08, 0x1078, 0x9f8b, 0x077f,
-+      0x2001, 0x0007, 0x1078, 0x4535, 0x017f, 0x047f, 0xa006, 0x157f,
-+      0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0xab8e,
-+      0x6800, 0xa086, 0x0800, 0x0040, 0x9f31, 0x6013, 0x0000, 0x0078,
-+      0x9f32, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
-+      0x037e, 0x157e, 0x2079, 0xab8c, 0x7930, 0x7834, 0x1078, 0x254d,
-+      0x00c0, 0x9f58, 0x1078, 0x45c4, 0x00c0, 0x9f58, 0x2011, 0xab90,
-+      0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de, 0x00c0, 0x9f58,
-+      0x2011, 0xab94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x80de,
-+      0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
-+      0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0xab83, 0x2204,
-+      0x8211, 0x220c, 0x1078, 0x254d, 0x00c0, 0x9f84, 0x1078, 0x45c4,
-+      0x00c0, 0x9f84, 0x2011, 0xab96, 0xac98, 0x000a, 0x20a9, 0x0004,
-+      0x1078, 0x80de, 0x00c0, 0x9f84, 0x2011, 0xab9a, 0xac98, 0x0006,
-+      0x20a9, 0x0004, 0x1078, 0x80de, 0x157f, 0x037f, 0x027f, 0x017f,
-+      0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x087e, 0x077e, 0x067e,
-+      0x057e, 0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740, 0x2029,
-+      0xa8ba, 0x252c, 0x2021, 0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071,
-+      0xa600, 0x7648, 0x7064, 0x81ff, 0x0040, 0x9fb2, 0x007e, 0xa186,
-+      0xa9b3, 0x007f, 0x0040, 0x9fb2, 0x8001, 0xa602, 0x00c8, 0xa01c,
-+      0x0078, 0x9fb5, 0xa606, 0x0040, 0xa01c, 0x2100, 0xac06, 0x0040,
-+      0xa012, 0x1078, 0xa242, 0x0040, 0xa012, 0x671c, 0xa786, 0x0001,
-+      0x0040, 0xa037, 0xa786, 0x0004, 0x0040, 0xa037, 0xa786, 0x0007,
-+      0x0040, 0xa012, 0x2500, 0xac06, 0x0040, 0xa012, 0x2400, 0xac06,
-+      0x0040, 0xa012, 0x1078, 0xa256, 0x00c0, 0xa012, 0x88ff, 0x0040,
-+      0x9fdd, 0x6020, 0xa906, 0x00c0, 0xa012, 0x0d7e, 0x6000, 0xa086,
-+      0x0004, 0x00c0, 0x9fe7, 0x017e, 0x1078, 0x1757, 0x017f, 0xa786,
-+      0x0008, 0x00c0, 0x9ff6, 0x1078, 0x8f00, 0x00c0, 0x9ff6, 0x1078,
-+      0x7c83, 0x0d7f, 0x1078, 0x8ec6, 0x0078, 0xa012, 0x6010, 0x2068,
-+      0x1078, 0x8d06, 0x0040, 0xa00f, 0xa786, 0x0003, 0x00c0, 0xa026,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0xa4e2, 0x017e,
-+      0x1078, 0x8f7d, 0x1078, 0x4a73, 0x017f, 0x1078, 0x8eb9, 0x0d7f,
-+      0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
-+      0x00c8, 0xa01c, 0x0078, 0x9f9f, 0x127f, 0x027f, 0x047f, 0x057f,
-+      0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
-+      0x00c0, 0xa000, 0xa386, 0x0005, 0x0040, 0xa034, 0x1078, 0xa4e2,
-+      0x1078, 0xa1ca, 0x0078, 0xa00f, 0x0d7f, 0x0078, 0xa012, 0x1078,
-+      0xa256, 0x00c0, 0xa012, 0x81ff, 0x0040, 0xa012, 0xa180, 0x0001,
-+      0x2004, 0xa086, 0x0018, 0x0040, 0xa04c, 0xa180, 0x0001, 0x2004,
-+      0xa086, 0x002d, 0x00c0, 0xa012, 0x6000, 0xa086, 0x0002, 0x00c0,
-+      0xa012, 0x1078, 0x8eec, 0x0040, 0xa05d, 0x1078, 0x8f00, 0x00c0,
-+      0xa012, 0x1078, 0x7c83, 0x0078, 0xa065, 0x1078, 0x28a6, 0x1078,
-+      0x8f00, 0x00c0, 0xa065, 0x1078, 0x7c83, 0x1078, 0x8ec6, 0x0078,
-+      0xa012, 0x0c7e, 0x0e7e, 0x017e, 0x2c08, 0x2170, 0xa006, 0x1078,
-+      0xa1e6, 0x017f, 0x0040, 0xa079, 0x601c, 0xa084, 0x000f, 0x1079,
-+      0xa07c, 0x0e7f, 0x0c7f, 0x007c, 0xa084, 0xa084, 0xa084, 0xa084,
-+      0xa084, 0xa084, 0xa086, 0xa084, 0xa006, 0x007c, 0x047e, 0x017e,
-+      0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00,
-+      0x2009, 0x0020, 0x1078, 0xa21d, 0x017f, 0x047f, 0x037e, 0x2019,
-+      0x0002, 0x1078, 0x9dc7, 0x037f, 0xa085, 0x0001, 0x007c, 0x2001,
-+      0x0001, 0x1078, 0x44ee, 0x157e, 0x017e, 0x027e, 0x037e, 0x20a9,
-+      0x0004, 0x2019, 0xa605, 0x2011, 0xab96, 0x1078, 0x80de, 0x037f,
-+      0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e,
-+      0x087e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2740,
-+      0x2061, 0xad00, 0x2079, 0x0001, 0x8fff, 0x0040, 0xa11d, 0x2071,
-+      0xa600, 0x7648, 0x7064, 0x8001, 0xa602, 0x00c8, 0xa11d, 0x88ff,
-+      0x0040, 0xa0d8, 0x2800, 0xac06, 0x00c0, 0xa113, 0x2079, 0x0000,
-+      0x1078, 0xa242, 0x0040, 0xa113, 0x2400, 0xac06, 0x0040, 0xa113,
-+      0x671c, 0xa786, 0x0006, 0x00c0, 0xa113, 0xa786, 0x0007, 0x0040,
-+      0xa113, 0x88ff, 0x00c0, 0xa0f7, 0x6018, 0xa206, 0x00c0, 0xa113,
-+      0x85ff, 0x0040, 0xa0f7, 0x6020, 0xa106, 0x00c0, 0xa113, 0x0d7e,
-+      0x6000, 0xa086, 0x0004, 0x00c0, 0xa103, 0x1078, 0xa495, 0x601f,
-+      0x0007, 0x1078, 0x1757, 0x6010, 0x2068, 0x1078, 0x8d06, 0x0040,
-+      0xa10d, 0x047e, 0x1078, 0xa1ca, 0x047f, 0x0d7f, 0x1078, 0x8ec6,
-+      0x88ff, 0x00c0, 0xa127, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
-+      0xac02, 0x00c8, 0xa11d, 0x0078, 0xa0c4, 0xa006, 0x127f, 0x027f,
-+      0x067f, 0x077f, 0x087f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5,
-+      0x0001, 0x0078, 0xa11e, 0x077e, 0x057e, 0x087e, 0x2041, 0x0000,
-+      0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x097e, 0x2049,
-+      0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078,
-+      0x72f3, 0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e,
-+      0x057e, 0x077e, 0x0c7e, 0x157e, 0x2c20, 0x2128, 0x20a9, 0x007f,
-+      0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa16e,
-+      0x2c10, 0x057e, 0x087e, 0x2041, 0x0000, 0x2508, 0x2029, 0x0001,
-+      0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f, 0x2039,
-+      0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x057f, 0x037f, 0x017f,
-+      0x8108, 0x00f0, 0xa152, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
-+      0x027f, 0x007c, 0x077e, 0x057e, 0x6218, 0x087e, 0x2041, 0x0000,
-+      0x2029, 0x0001, 0x2019, 0x0048, 0x097e, 0x2049, 0x0000, 0x1078,
-+      0x7246, 0x097f, 0x087f, 0x2039, 0x0000, 0x1078, 0x72f3, 0x2c20,
-+      0x1078, 0xa0b5, 0x057f, 0x077f, 0x007c, 0x027e, 0x047e, 0x057e,
-+      0x077e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
-+      0x017e, 0x037e, 0x1078, 0x45c4, 0x00c0, 0xa1be, 0x2c10, 0x087e,
-+      0x2041, 0x0000, 0x2828, 0x047e, 0x2021, 0x0001, 0x1078, 0xa472,
-+      0x047f, 0x097e, 0x2049, 0x0000, 0x1078, 0x7246, 0x097f, 0x087f,
-+      0x2039, 0x0000, 0x1078, 0x72f3, 0x1078, 0xa0b5, 0x037f, 0x017f,
-+      0x8108, 0x00f0, 0xa1a0, 0x157f, 0x0c7f, 0x077f, 0x057f, 0x047f,
-+      0x027f, 0x007c, 0x017e, 0x0f7e, 0xad82, 0xcd00, 0x0048, 0xa1e3,
-+      0xad82, 0xffff, 0x00c8, 0xa1e3, 0x6800, 0xa07d, 0x0040, 0xa1e0,
-+      0x6803, 0x0000, 0x6b52, 0x1078, 0x4a73, 0x2f68, 0x0078, 0xa1d4,
-+      0x6b52, 0x1078, 0x4a73, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e,
-+      0x037e, 0x2061, 0xad00, 0xa005, 0x00c0, 0xa1f6, 0x2071, 0xa600,
-+      0x7448, 0x7064, 0x8001, 0xa402, 0x00c8, 0xa218, 0x2100, 0xac06,
-+      0x0040, 0xa20a, 0x6000, 0xa086, 0x0000, 0x0040, 0xa20a, 0x6008,
-+      0xa206, 0x00c0, 0xa20a, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406,
-+      0x0040, 0xa214, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004, 0xac02,
-+      0x00c8, 0xa218, 0x0078, 0xa1f6, 0xa085, 0x0001, 0x0078, 0xa219,
-+      0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078,
-+      0x138b, 0x007f, 0x1040, 0x1332, 0x6837, 0x010d, 0x685e, 0x027e,
-+      0x2010, 0x1078, 0x8cf2, 0x2001, 0x0000, 0x0040, 0xa233, 0x2200,
-+      0xa080, 0x0008, 0x2004, 0x027f, 0x684a, 0x6956, 0x6c46, 0x684f,
-+      0x0000, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x1078, 0x4a73,
-+      0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0xa255, 0xa786,
-+      0x0001, 0x0040, 0xa255, 0xa786, 0x000a, 0x0040, 0xa255, 0xa786,
-+      0x0009, 0x0040, 0xa255, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018,
-+      0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x017e, 0x6004, 0xa08e,
-+      0x001e, 0x00c0, 0xa277, 0x8007, 0x6130, 0xa18c, 0x00ff, 0xa105,
-+      0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0005, 0x2001,
-+      0xa8a3, 0x2004, 0x6016, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x017f,
-+      0x007c, 0x0005, 0x0005, 0x007c, 0x6024, 0xd0e4, 0x0040, 0xa28d,
-+      0xd0cc, 0x0040, 0xa287, 0x1078, 0x8fbf, 0x0078, 0xa28d, 0x1078,
-+      0xa495, 0x1078, 0x5bc1, 0x1078, 0x772d, 0x007c, 0xa280, 0x0007,
-+      0x2004, 0xa084, 0x000f, 0x0079, 0xa295, 0xa29e, 0xa29e, 0xa29e,
-+      0xa2a0, 0xa29e, 0xa2a0, 0xa2a0, 0xa29e, 0xa2a0, 0xa006, 0x007c,
-+      0xa085, 0x0001, 0x007c, 0xa280, 0x0007, 0x2004, 0xa084, 0x000f,
-+      0x0079, 0xa2aa, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3, 0xa2b3,
-+      0xa2be, 0xa2b3, 0xa2b3, 0x6007, 0x003b, 0x602b, 0x0009, 0x6013,
-+      0x2a00, 0x6003, 0x0001, 0x1078, 0x5d8a, 0x007c, 0x0c7e, 0x2260,
-+      0x1078, 0xa495, 0x603f, 0x0000, 0x6024, 0xc0f4, 0xc0cc, 0x6026,
-+      0x0c7f, 0x0d7e, 0x2268, 0xa186, 0x0007, 0x00c0, 0xa31f, 0x6810,
-+      0xa005, 0x0040, 0xa2dc, 0xa080, 0x0013, 0x2004, 0xd0fc, 0x00c0,
-+      0xa2dc, 0x0d7f, 0x0078, 0xa2b3, 0x6007, 0x003a, 0x6003, 0x0001,
-+      0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100, 0xa186,
-+      0x0002, 0x00c0, 0xa3ad, 0x6010, 0xa005, 0x00c0, 0xa2f6, 0x6000,
-+      0xa086, 0x0007, 0x10c0, 0x1332, 0x0078, 0xa3ad, 0xa08c, 0xf000,
-+      0x00c0, 0xa302, 0x0078, 0xa302, 0x2068, 0x6800, 0xa005, 0x00c0,
-+      0xa2fc, 0x2d00, 0xa080, 0x0013, 0x2004, 0xa084, 0x0003, 0xa086,
-+      0x0002, 0x00c0, 0xa31b, 0x6010, 0x2068, 0x684c, 0xc0dc, 0xc0f4,
-+      0x684e, 0x6850, 0xc0f4, 0xc0fc, 0x6852, 0x2009, 0x0043, 0x1078,
-+      0x9c1e, 0x0078, 0xa3ad, 0x2009, 0x0041, 0x0078, 0xa3a7, 0xa186,
-+      0x0005, 0x00c0, 0xa366, 0x6810, 0xa080, 0x0013, 0x2004, 0xd0bc,
-+      0x00c0, 0xa32d, 0x0d7f, 0x0078, 0xa2b3, 0xd0b4, 0x0040, 0xa335,
-+      0xd0fc, 0x1040, 0x1332, 0x0078, 0xa2cf, 0x6007, 0x003a, 0x6003,
-+      0x0001, 0x1078, 0x5d8a, 0x1078, 0x62d1, 0x0c7e, 0x2d60, 0x6100,
-+      0xa186, 0x0002, 0x0040, 0xa348, 0xa186, 0x0004, 0x00c0, 0xa3ad,
-+      0x2071, 0xa8e7, 0x7000, 0xa086, 0x0003, 0x00c0, 0xa355, 0x7004,
-+      0xac06, 0x00c0, 0xa355, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013,
-+      0x200c, 0xc1f4, 0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc,
-+      0xc1bc, 0x2102, 0x2009, 0x0042, 0x0078, 0xa3a7, 0x037e, 0x0d7e,
-+      0x0d7e, 0x1078, 0x138b, 0x037f, 0x1040, 0x1332, 0x6837, 0x010d,
-+      0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857,
-+      0x0045, 0x2c00, 0x6862, 0x6034, 0x6872, 0x2360, 0x6024, 0xc0dd,
-+      0x6026, 0x6018, 0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007,
-+      0x6320, 0x6b4a, 0x6846, 0x684f, 0x0000, 0x6d6a, 0x6e66, 0x686f,
-+      0x0001, 0x1078, 0x4a73, 0x2019, 0x0045, 0x6008, 0x2068, 0x1078,
-+      0x9dc7, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
-+      0x0000, 0x603f, 0x0000, 0x0d7f, 0x037f, 0x0078, 0xa3ae, 0x603f,
-+      0x0000, 0x6003, 0x0007, 0x1078, 0x9c1e, 0x0c7f, 0x0d7f, 0x007c,
-+      0xa186, 0x0013, 0x00c0, 0xa3ba, 0x6004, 0xa082, 0x0085, 0x2008,
-+      0x0079, 0xa3d4, 0xa186, 0x0027, 0x00c0, 0xa3cd, 0x1078, 0x61cd,
-+      0x037e, 0x0d7e, 0x6010, 0x2068, 0x2019, 0x0004, 0x1078, 0xa1ca,
-+      0x0d7f, 0x037f, 0x1078, 0x62d1, 0x007c, 0xa186, 0x0014, 0x0040,
-+      0xa3be, 0x1078, 0x7773, 0x007c, 0xa3dd, 0xa3db, 0xa3db, 0xa3db,
-+      0xa3db, 0xa3db, 0xa3dd, 0x1078, 0x1332, 0x1078, 0x61cd, 0x6003,
-+      0x000c, 0x1078, 0x62d1, 0x007c, 0xa182, 0x008c, 0x00c8, 0xa3ee,
-+      0xa182, 0x0085, 0x0048, 0xa3ee, 0x0079, 0xa3f1, 0x1078, 0x7773,
-+      0x007c, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3f8, 0xa3fa, 0xa419, 0xa3f8,
-+      0x1078, 0x1332, 0x0d7e, 0x2c68, 0x1078, 0x76c7, 0x0040, 0xa414,
-+      0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0xab8e, 0x210c, 0x6136,
-+      0x2009, 0xab8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a,
-+      0x601f, 0x0004, 0x1078, 0x5d8a, 0x2d60, 0x1078, 0x772d, 0x0d7f,
-+      0x007c, 0x1078, 0x772d, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000,
-+      0xd0ec, 0x0e7f, 0x007c, 0x6010, 0xa08c, 0xf000, 0x0040, 0xa471,
-+      0xa080, 0x0013, 0x200c, 0xd1ec, 0x0040, 0xa471, 0x2001, 0xa672,
-+      0x2004, 0xd0ec, 0x0040, 0xa471, 0x6003, 0x0002, 0x6024, 0xc0e5,
-+      0x6026, 0xd1ac, 0x0040, 0xa44f, 0x0f7e, 0x2c78, 0x1078, 0x495f,
-+      0x0f7f, 0x0040, 0xa44f, 0x2001, 0xa8a4, 0x2004, 0x603e, 0x2009,
-+      0xa672, 0x210c, 0xd1f4, 0x00c0, 0xa46f, 0x0078, 0xa461, 0x2009,
-+      0xa672, 0x210c, 0xd1f4, 0x0040, 0xa45b, 0x6024, 0xc0e4, 0x6026,
-+      0xa006, 0x0078, 0xa471, 0x2001, 0xa8a4, 0x200c, 0x8103, 0xa100,
-+      0x603e, 0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0040, 0xa46c,
-+      0xa088, 0x0003, 0x0078, 0xa464, 0x2c0a, 0x600f, 0x0000, 0xa085,
-+      0x0001, 0x007c, 0x017e, 0x0c7e, 0x0e7e, 0x6120, 0xa2f0, 0x002b,
-+      0x2e04, 0x2060, 0x8cff, 0x0040, 0xa491, 0x84ff, 0x00c0, 0xa484,
-+      0x6020, 0xa106, 0x00c0, 0xa48c, 0x600c, 0x2072, 0x1078, 0x5bc1,
-+      0x1078, 0x772d, 0x0078, 0xa48e, 0xacf0, 0x0003, 0x2e64, 0x0078,
-+      0xa47a, 0x0e7f, 0x0c7f, 0x017f, 0x007c, 0x0d7e, 0x6018, 0xa0e8,
-+      0x002b, 0x2d04, 0xa005, 0x0040, 0xa4a7, 0xac06, 0x0040, 0xa4a5,
-+      0x2d04, 0xa0e8, 0x0003, 0x0078, 0xa499, 0x600c, 0x206a, 0x0d7f,
-+      0x007c, 0x027e, 0x037e, 0x157e, 0x2011, 0xa626, 0x2204, 0xa084,
-+      0x00ff, 0x2019, 0xab8e, 0x2334, 0xa636, 0x00c0, 0xa4d5, 0x8318,
-+      0x2334, 0x2204, 0xa084, 0xff00, 0xa636, 0x00c0, 0xa4d5, 0x2011,
-+      0xab90, 0x6018, 0xa098, 0x000a, 0x20a9, 0x0004, 0x1078, 0x80de,
-+      0x00c0, 0xa4d5, 0x2011, 0xab94, 0x6018, 0xa098, 0x0006, 0x20a9,
-+      0x0004, 0x1078, 0x80de, 0x00c0, 0xa4d5, 0x157f, 0x037f, 0x027f,
-+      0x007c, 0x0e7e, 0x2071, 0xa600, 0x1078, 0x42b8, 0x1078, 0x2677,
-+      0x0e7f, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x7000, 0xd0fc, 0x0040,
-+      0xa4eb, 0x1078, 0xa4ed, 0x0e7f, 0x007c, 0x6850, 0xc0e5, 0x6852,
-+      0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e,
-+      0x017e, 0x127e, 0x2091, 0x8000, 0x2029, 0xa8ba, 0x252c, 0x2021,
-+      0xa8c0, 0x2424, 0x2061, 0xad00, 0x2071, 0xa600, 0x7648, 0x7064,
-+      0xa606, 0x0040, 0xa545, 0x671c, 0xa786, 0x0001, 0x0040, 0xa514,
-+      0xa786, 0x0008, 0x00c0, 0xa53b, 0x2500, 0xac06, 0x0040, 0xa53b,
-+      0x2400, 0xac06, 0x0040, 0xa53b, 0x1078, 0xa242, 0x0040, 0xa53b,
-+      0x1078, 0xa256, 0x00c0, 0xa53b, 0x6000, 0xa086, 0x0004, 0x00c0,
-+      0xa52d, 0x017e, 0x1078, 0x1757, 0x017f, 0x1078, 0x8eec, 0x00c0,
-+      0xa533, 0x1078, 0x28a6, 0x1078, 0x8f00, 0x00c0, 0xa539, 0x1078,
-+      0x7c83, 0x1078, 0x8ec6, 0xace0, 0x0010, 0x2001, 0xa616, 0x2004,
-+      0xac02, 0x00c8, 0xa545, 0x0078, 0xa504, 0x127f, 0x017f, 0x027f,
-+      0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0x127e,
-+      0x007e, 0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4,
-+      0x0040, 0xa55d, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa563,
-+      0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0xa579, 0x2500, 0xa084,
-+      0x0007, 0xa08e, 0x0003, 0x0040, 0xa579, 0xa08e, 0x0004, 0x0040,
-+      0xa579, 0xa08e, 0x0005, 0x0040, 0xa579, 0x2071, 0xa64a, 0x1078,
-+      0xa5ba, 0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e,
-+      0x0e7e, 0x017e, 0x2091, 0x8000, 0x2071, 0xa640, 0xd5a4, 0x0040,
-+      0xa58c, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0xa592, 0x7030,
-+      0x8000, 0x7032, 0xd5ac, 0x0040, 0xa5a8, 0x2500, 0xa084, 0x0007,
-+      0xa08e, 0x0003, 0x0040, 0xa5a8, 0xa08e, 0x0004, 0x0040, 0xa5a8,
-+      0xa08e, 0x0005, 0x0040, 0xa5a8, 0x2071, 0xa64a, 0x1078, 0xa5ba,
-+      0x017f, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e,
-+      0x2091, 0x8000, 0x2071, 0xa642, 0x1078, 0xa5ba, 0x0e7f, 0x007f,
-+      0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0xa5c3, 0x8e70,
-+      0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0xa640, 0x1078,
-+      0xa5ba, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0xa644, 0x1078, 0xa5ba,
-+      0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
-+      0xa640, 0x7044, 0x8000, 0x7046, 0x0e7f, 0x007f, 0x127f, 0x007c,
-+      0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
-+      0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
-+      0xa50c
-+};
-+#else
-+/*
-+ *    Firmware Version 1.15.37 (15:36 May 03, 1999)
-+ */
-+static const u_int16_t isp_2100_risc_code[] = {
-+      0x0078, 0x1029, 0x0000, 0x66e6, 0x0000, 0x2043, 0x4f50, 0x5952,
-+      0x4947, 0x4854, 0x2031, 0x3939, 0x3620, 0x514c, 0x4f47, 0x4943,
-+      0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
-+      0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
-+      0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3135, 0x2020, 0x2020,
-+      0x2400, 0x20c1, 0x0021, 0x20a1, 0x76e6, 0x2009, 0x0000, 0x20a9,
-+      0x071a, 0x41a4, 0x3400, 0x20c9, 0x7bff, 0x2091, 0x2000, 0x2059,
-+      0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x209a, 0x2051, 0x7700,
-+      0x2a70, 0x705b, 0x9600, 0x705f, 0xffff, 0x7057, 0x95f9, 0x7063,
-+      0x0300, 0x1078, 0x127a, 0x20a1, 0x7e00, 0x715c, 0x810d, 0x810d,
-+      0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0007, 0xa112, 0xa00e,
-+      0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, 0x1058, 0x715c, 0x3400,
-+      0xa102, 0x0040, 0x1068, 0x0048, 0x1068, 0x20a8, 0xa00e, 0x41a4,
-+      0x1078, 0x1241, 0x1078, 0x1366, 0x1078, 0x14eb, 0x1078, 0x19c0,
-+      0x1078, 0x362b, 0x1078, 0x5cac, 0x1078, 0x12f1, 0x1078, 0x2429,
-+      0x1078, 0x3d6e, 0x1078, 0x3b46, 0x1078, 0x45af, 0x1078, 0x1e55,
-+      0x1078, 0x47ef, 0x1078, 0x428f, 0x1078, 0x1d74, 0x1078, 0x1e34,
-+      0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x109d, 0x7820, 0xa086,
-+      0x0002, 0x00c0, 0x109d, 0x7823, 0x4000, 0x0068, 0x1095, 0x781b,
-+      0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000,
-+      0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003,
-+      0x00c0, 0x10bd, 0x1078, 0x2d9c, 0x1078, 0x2451, 0x1078, 0x3dbe,
-+      0x1078, 0x3c31, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
-+      0x10c1, 0x1078, 0x45c7, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078,
-+      0x10aa, 0x1078, 0x597e, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x1143,
-+      0x10cd, 0x11be, 0x123e, 0x123f, 0x1240, 0x1078, 0x12cd, 0x007c,
-+      0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2ec1, 0x2079, 0x0100,
-+      0x7844, 0xa005, 0x00c0, 0x1134, 0x2011, 0x3558, 0x1078, 0x4689,
-+      0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010,
-+      0x73b8, 0x1078, 0x2d59, 0x1078, 0x57c9, 0x2011, 0x0004, 0x1078,
-+      0x6a6d, 0x1078, 0x3ae0, 0x70c7, 0x0000, 0x70c3, 0x0000, 0x1078,
-+      0x1137, 0x72bc, 0x2079, 0x7751, 0x7804, 0xd0ac, 0x0040, 0x1101,
-+      0xc295, 0x72be, 0xa296, 0x0004, 0x0040, 0x1122, 0x2011, 0x0001,
-+      0x1078, 0x6a6d, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002,
-+      0x0f7f, 0x1078, 0x214a, 0x2011, 0x0005, 0x1078, 0x58d8, 0x1078,
-+      0x4d96, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f,
-+      0x0078, 0x1136, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002,
-+      0x2011, 0x0005, 0x1078, 0x58d8, 0x1078, 0x4d96, 0x0c7e, 0x2061,
-+      0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, 0x127f, 0x007c, 0x0c7e,
-+      0x20a9, 0x0082, 0x2009, 0x007e, 0x1078, 0x3834, 0x8108, 0x00f0,
-+      0x113c, 0x0c7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x708c, 0xa086,
-+      0xffff, 0x0040, 0x1151, 0x1078, 0x214a, 0x1078, 0x4d96, 0x0078,
-+      0x11bc, 0x70bc, 0xd09c, 0x0040, 0x1179, 0xd084, 0x0040, 0x1179,
-+      0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
-+      0x0040, 0x1179, 0x70c0, 0xa086, 0xffff, 0x0040, 0x1175, 0x1078,
-+      0x223f, 0x1078, 0x4d96, 0x2011, 0x0001, 0x2019, 0x0000, 0x1078,
-+      0x2277, 0x1078, 0x4d96, 0x0078, 0x11bc, 0x70c4, 0xa005, 0x00c0,
-+      0x11bc, 0x7088, 0xa005, 0x00c0, 0x11bc, 0x2001, 0x7752, 0x2004,
-+      0xd0ac, 0x0040, 0x119f, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
-+      0x0000, 0x017e, 0x1078, 0x384c, 0x00c0, 0x1192, 0x6000, 0xd0ec,
-+      0x00c0, 0x119a, 0x017f, 0x8108, 0x00f0, 0x1189, 0x0c7f, 0x157f,
-+      0x0078, 0x119f, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x11bc, 0x7003,
-+      0x0003, 0x708f, 0xffff, 0x2001, 0x0000, 0x1078, 0x2025, 0x1078,
-+      0x2dd7, 0x2001, 0x7937, 0x2004, 0xa086, 0x0005, 0x00c0, 0x11b4,
-+      0x2011, 0x0000, 0x1078, 0x58d8, 0x2011, 0x0000, 0x1078, 0x58e2,
-+      0x1078, 0x4d96, 0x1078, 0x4e56, 0x127f, 0x007c, 0x017e, 0x0f7e,
-+      0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x7940, 0xa18c, 0x0010,
-+      0x7942, 0x7924, 0xd1b4, 0x0040, 0x11cf, 0x7827, 0x0040, 0xd19c,
-+      0x0040, 0x11d4, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900,
-+      0xa18a, 0x0003, 0x0050, 0x11fa, 0x7954, 0xd1ac, 0x00c0, 0x11fa,
-+      0x2009, 0x00f8, 0x1078, 0x35fa, 0x7843, 0x0090, 0x7843, 0x0010,
-+      0x20a9, 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11f2, 0x7824, 0xd0ac,
-+      0x00c0, 0x122e, 0x00f0, 0x11ea, 0x2001, 0x0001, 0x1078, 0x2025,
-+      0x0078, 0x1237, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008,
-+      0x00e0, 0x1200, 0x2091, 0x6000, 0x00f0, 0x1200, 0x7853, 0x0400,
-+      0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x35fa, 0x20a9, 0x000e,
-+      0x0005, 0x00f0, 0x1210, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843,
-+      0x0010, 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040,
-+      0x1225, 0x7824, 0xd0ac, 0x00c0, 0x122e, 0x8319, 0x00c0, 0x121b,
-+      0x2001, 0x0001, 0x1078, 0x2025, 0x0078, 0x1235, 0x7828, 0xc09d,
-+      0x782a, 0x7827, 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, 0x157f,
-+      0x037f, 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c,
-+      0x007c, 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
-+      0x124d, 0x704f, 0xffff, 0x0078, 0x124f, 0x704f, 0x0000, 0x7053,
-+      0xffff, 0x7067, 0x0000, 0x706b, 0x0000, 0x2061, 0x7920, 0x6003,
-+      0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013,
-+      0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061,
-+      0x7928, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f,
-+      0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, 0x601f,
-+      0x0000, 0x007c, 0x1078, 0x12a0, 0x2011, 0x0000, 0x81ff, 0x0040,
-+      0x129f, 0xa186, 0x0001, 0x00c0, 0x128f, 0x705f, 0x8fff, 0x7057,
-+      0x8601, 0x7063, 0x0100, 0x705b, 0x8600, 0x0078, 0x129d, 0xa186,
-+      0x0002, 0x00c0, 0x1297, 0x2011, 0x0000, 0x0078, 0x129d, 0xa186,
-+      0x0005, 0x00c0, 0x129d, 0x2011, 0x0001, 0x1078, 0x12c7, 0x007c,
-+      0x2009, 0x0000, 0x2011, 0x0000, 0x1078, 0x12c7, 0x2019, 0xaaaa,
-+      0x2061, 0xffff, 0x2362, 0x2c24, 0x2061, 0x7fff, 0x2c04, 0xa406,
-+      0x0040, 0x12b5, 0xc18d, 0x0078, 0x12c2, 0xc185, 0x2011, 0x0001,
-+      0x1078, 0x12c7, 0x2061, 0xffff, 0x2362, 0x2c04, 0xa306, 0x00c0,
-+      0x12c2, 0xc195, 0x2011, 0x0001, 0x1078, 0x12c7, 0x007c, 0x3800,
-+      0xa084, 0xfffc, 0xa205, 0x20c0, 0x007c, 0x2091, 0x8000, 0x0068,
-+      0x12cf, 0x007e, 0x017e, 0x2079, 0x0000, 0x7818, 0xa084, 0x0000,
-+      0x00c0, 0x12d5, 0x017f, 0x792e, 0x007f, 0x782a, 0x007f, 0x7826,
-+      0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, 0x5000,
-+      0x2091, 0x4080, 0x2079, 0x7700, 0x7803, 0x0005, 0x0078, 0x12ee,
-+      0x007c, 0x2071, 0x7700, 0x7158, 0x712e, 0x2021, 0x0001, 0xa190,
-+      0x002d, 0xa298, 0x002d, 0x0048, 0x1307, 0x705c, 0xa302, 0x00c8,
-+      0x1307, 0x220a, 0x2208, 0x2310, 0x8420, 0x0078, 0x12f9, 0x200b,
-+      0x0000, 0x749e, 0x74a2, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
-+      0x2071, 0x7700, 0x70a0, 0xa0ea, 0x0010, 0x00c8, 0x131a, 0xa06e,
-+      0x0078, 0x1324, 0x8001, 0x70a2, 0x702c, 0x2068, 0x2d04, 0x702e,
-+      0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e,
-+      0x2071, 0x7700, 0x127e, 0x2091, 0x8000, 0x70a0, 0x8001, 0x00c8,
-+      0x1334, 0xa06e, 0x0078, 0x133d, 0x70a2, 0x702c, 0x2068, 0x2d04,
-+      0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c,
-+      0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7700, 0x702c, 0x206a,
-+      0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x127f, 0x0e7f, 0x007c,
-+      0x8dff, 0x0040, 0x135c, 0x6804, 0x6807, 0x0000, 0x007e, 0x1078,
-+      0x1340, 0x0d7f, 0x0078, 0x1350, 0x007c, 0x0e7e, 0x2071, 0x7700,
-+      0x70a0, 0xa08a, 0x0010, 0xa00d, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+      0x7959, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071,
-+      0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x0e7f, 0x007c, 0x0e7e,
-+      0x2270, 0x700b, 0x0000, 0x2071, 0x7959, 0x7018, 0xa088, 0x7962,
-+      0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0,
-+      0x138f, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a0, 0x0f7f, 0x0e7f,
-+      0x007c, 0x0e7e, 0x2071, 0x7959, 0x7004, 0xa005, 0x00c0, 0x139e,
-+      0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a0, 0x0f7f, 0x0e7f, 0x007c,
-+      0x7000, 0x0079, 0x13a3, 0x13a7, 0x1411, 0x142e, 0x142e, 0x7018,
-+      0x711c, 0xa106, 0x00c0, 0x13af, 0x7007, 0x0000, 0x007c, 0x0d7e,
-+      0xa180, 0x7962, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
-+      0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
-+      0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
-+      0x0d7f, 0xd084, 0x0040, 0x13d1, 0x7007, 0x0001, 0x1078, 0x13d6,
-+      0x007c, 0x7007, 0x0002, 0x1078, 0x13ec, 0x007c, 0x017e, 0x027e,
-+      0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x13e1, 0x2110,
-+      0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
-+      0x0041, 0x027f, 0x017f, 0x007c, 0x017e, 0x027e, 0x137e, 0x147e,
-+      0x157e, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c,
-+      0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1400, 0x2110, 0xa006,
-+      0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
-+      0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
-+      0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x77e5, 0x20a1, 0x0018,
-+      0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+      0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
-+      0x77e0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
-+      0x157e, 0x2001, 0x7814, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
-+      0x2001, 0x7815, 0x20ac, 0x53a6, 0x2099, 0x7816, 0x20a1, 0x0018,
-+      0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
-+      0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
-+      0x7811, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
-+      0x2071, 0x7959, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
-+      0xd1fc, 0x0040, 0x1471, 0xa18c, 0x0700, 0x0040, 0x146e, 0x7008,
-+      0xa080, 0x0002, 0x2003, 0x0200, 0x0078, 0x1471, 0x7004, 0x1079,
-+      0x1475, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x13a0, 0x147d, 0x149f,
-+      0x14b9, 0x14e2, 0x147b, 0x0078, 0x147b, 0x137e, 0x147e, 0x157e,
-+      0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8,
-+      0x53a5, 0x3400, 0x7016, 0x157f, 0x147f, 0x137f, 0x700c, 0xa005,
-+      0x0040, 0x14a6, 0x1078, 0x13d6, 0x007c, 0x7008, 0xa080, 0x0002,
-+      0x2003, 0x0100, 0x7007, 0x0000, 0x1078, 0x13a0, 0x007c, 0x700c,
-+      0xa005, 0x0040, 0x14a6, 0x1078, 0x13ec, 0x007c, 0x0d7e, 0x7008,
-+      0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
-+      0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x13a0,
-+      0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x77e3, 0x2004, 0xa080,
-+      0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020,
-+      0x53a5, 0x2001, 0x77e5, 0x2004, 0xd0bc, 0x0040, 0x14d8, 0x2001,
-+      0x77ee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5,
-+      0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x3e67, 0x1078,
-+      0x13a0, 0x007c, 0x2001, 0x7813, 0x2003, 0x0100, 0x7007, 0x0000,
-+      0x1078, 0x13a0, 0x007c, 0x127e, 0x2091, 0x2100, 0x2079, 0x0030,
-+      0x2071, 0x796a, 0x7003, 0x0000, 0x700f, 0x7970, 0x7013, 0x7970,
-+      0x780f, 0x0070, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
-+      0x1501, 0x1509, 0x154f, 0x1509, 0x1509, 0x1509, 0x1534, 0x1518,
-+      0x150d, 0xa085, 0x0001, 0x0078, 0x1569, 0x684c, 0xd0bc, 0x0040,
-+      0x1509, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, 0x0078, 0x1557,
-+      0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1509, 0x684c, 0xd0bc,
-+      0x0040, 0x1509, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804, 0x681a,
-+      0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004,
-+      0x6832, 0x6858, 0x0078, 0x155f, 0xa18c, 0x00ff, 0xa186, 0x0015,
-+      0x00c0, 0x1509, 0x684c, 0xd0ac, 0x0040, 0x1509, 0x6804, 0x681a,
-+      0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004,
-+      0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, 0x155f, 0x684c,
-+      0xd0ac, 0x0040, 0x1509, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c,
-+      0x000f, 0xa188, 0x1c7e, 0x210c, 0x6932, 0x2d08, 0x691a, 0x6826,
-+      0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980,
-+      0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a,
-+      0x2004, 0x82ff, 0x0040, 0x1584, 0xa280, 0x0004, 0x0d7e, 0x206c,
-+      0x684c, 0xd0dc, 0x00c0, 0x1580, 0x1078, 0x14fc, 0x10c0, 0x12cd,
-+      0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, 0x037e, 0x027e,
-+      0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
-+      0x1598, 0x7206, 0x2001, 0x15ac, 0x007e, 0x2260, 0x0078, 0x16c4,
-+      0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
-+      0x798b, 0x0048, 0x15a5, 0x2009, 0x7970, 0x710e, 0x7000, 0xa005,
-+      0x00c0, 0x15ac, 0x1078, 0x16ad, 0x127f, 0x007c, 0x127e, 0x027e,
-+      0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, 0x037f,
-+      0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e,
-+      0xa005, 0x0040, 0x1600, 0x6808, 0xa005, 0x0040, 0x1666, 0x7000,
-+      0xa005, 0x00c0, 0x15cd, 0x0078, 0x15fa, 0x700c, 0x7110, 0xa106,
-+      0x00c0, 0x166a, 0x7004, 0xa406, 0x00c0, 0x15fa, 0x2001, 0x0005,
-+      0x2004, 0xd08c, 0x0040, 0x15e3, 0x047e, 0x1078, 0x1785, 0x047f,
-+      0x2460, 0x0078, 0x15c3, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0,
-+      0x15d6, 0x7804, 0xa084, 0x6000, 0x0040, 0x15f4, 0xa086, 0x6000,
-+      0x0040, 0x15f4, 0x0078, 0x15d6, 0x7803, 0x0004, 0x7003, 0x0000,
-+      0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5d41, 0x0078, 0x166a,
-+      0x6808, 0xa005, 0x0040, 0x1666, 0x7000, 0xa005, 0x00c0, 0x160a,
-+      0x0078, 0x1666, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1613, 0x7004,
-+      0xa406, 0x00c0, 0x1666, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
-+      0x1620, 0x047e, 0x1078, 0x1785, 0x047f, 0x2460, 0x0078, 0x1600,
-+      0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x1613, 0x2001, 0x0005,
-+      0x2004, 0xd08c, 0x00c0, 0x1619, 0x7804, 0xa084, 0x6000, 0x0040,
-+      0x1637, 0xa086, 0x6000, 0x0040, 0x1637, 0x0078, 0x1613, 0x7007,
-+      0x0000, 0xa016, 0x2218, 0x7000, 0xa08e, 0x0001, 0x0040, 0x1658,
-+      0xa08e, 0x0002, 0x00c0, 0x1666, 0x0c7e, 0x0e7e, 0x6818, 0x2060,
-+      0x1078, 0x1c53, 0x2804, 0xac70, 0x6034, 0xd09c, 0x00c0, 0x1654,
-+      0x7308, 0x720c, 0x0078, 0x1656, 0x7310, 0x7214, 0x0e7f, 0x0c7f,
-+      0x7820, 0xa318, 0x7824, 0xa211, 0x6810, 0xa300, 0x6812, 0x6814,
-+      0xa201, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x2009, 0x0048,
-+      0x1078, 0x5d41, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
-+      0x2071, 0x796a, 0x7000, 0xa086, 0x0000, 0x0040, 0x16aa, 0x7004,
-+      0xac06, 0x00c0, 0x169b, 0x2079, 0x0030, 0x7804, 0xd0fc, 0x00c0,
-+      0x1697, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x167d, 0x7803,
-+      0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1689, 0x7803, 0x0002, 0x7803,
-+      0x0009, 0x7003, 0x0003, 0x7007, 0x0000, 0x0078, 0x169b, 0x1078,
-+      0x1785, 0x0078, 0x1672, 0x157e, 0x20a9, 0x0009, 0x2009, 0x7970,
-+      0x2104, 0xac06, 0x00c0, 0x16a5, 0x200a, 0xa188, 0x0003, 0x00f0,
-+      0x16a0, 0x157f, 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, 0xa106,
-+      0x00c0, 0x16b5, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060,
-+      0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x798b, 0x0048,
-+      0x16c3, 0x2009, 0x7970, 0x7112, 0x8cff, 0x00c0, 0x16cb, 0x1078,
-+      0x1950, 0x0078, 0x16f2, 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406,
-+      0x00c0, 0x16d6, 0x682c, 0xa306, 0x0040, 0x16da, 0x1078, 0x1c9e,
-+      0x00c0, 0x16c7, 0x684c, 0xd0f4, 0x00c0, 0x16c7, 0x6824, 0x2050,
-+      0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009,
-+      0x0011, 0x1078, 0x16f3, 0x0040, 0x16f1, 0x2009, 0x0001, 0x1078,
-+      0x16f3, 0x2d58, 0x007c, 0x8aff, 0x0040, 0x1780, 0xa03e, 0x2730,
-+      0x6850, 0xd0fc, 0x00c0, 0x1712, 0x0d7e, 0x2804, 0xac68, 0x2900,
-+      0x0079, 0x1702, 0x1762, 0x1722, 0x1722, 0x1762, 0x1762, 0x175a,
-+      0x1762, 0x1722, 0x1762, 0x1728, 0x1728, 0x1762, 0x1762, 0x1762,
-+      0x1751, 0x1728, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20,
-+      0x0d7e, 0xd99c, 0x0040, 0x1765, 0x2804, 0xac68, 0x6f08, 0x6e0c,
-+      0x0078, 0x1765, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1765,
-+      0x7b0c, 0xd3bc, 0x0040, 0x1749, 0x7004, 0x0e7e, 0x2070, 0x701c,
-+      0x0e7f, 0xa086, 0x0008, 0x00c0, 0x1749, 0x7b08, 0xa39c, 0x0fff,
-+      0x2d20, 0x0d7f, 0x0d7e, 0x6a14, 0x82ff, 0x00c0, 0x1744, 0x6810,
-+      0xa302, 0x0048, 0x1744, 0x6b10, 0x2011, 0x0000, 0x2468, 0x0078,
-+      0x174b, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078,
-+      0x1765, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
-+      0x00c0, 0x1762, 0x0d7f, 0x1078, 0x1c3a, 0x00c0, 0x16f3, 0xa00e,
-+      0x0078, 0x1780, 0x0d7f, 0x1078, 0x12cd, 0x7b22, 0x7a26, 0x7d32,
-+      0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x0d7f,
-+      0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x2300, 0x6b10,
-+      0xa302, 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, 0x1078, 0x1c3a,
-+      0x007c, 0x1078, 0x12cd, 0x1078, 0x12cd, 0x127e, 0x2091, 0x2100,
-+      0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002,
-+      0xa184, 0x0700, 0x00c0, 0x1783, 0xa184, 0x0003, 0xa086, 0x0003,
-+      0x0040, 0x1783, 0x7000, 0x0079, 0x179d, 0x17a5, 0x17a7, 0x187f,
-+      0x18e7, 0x18fe, 0x17a5, 0x17a5, 0x17a5, 0x1078, 0x12cd, 0x8001,
-+      0x7002, 0xa184, 0x0880, 0x00c0, 0x17bc, 0x8aff, 0x0040, 0x181f,
-+      0x2009, 0x0001, 0x1078, 0x16f3, 0x0040, 0x1910, 0x2009, 0x0001,
-+      0x1078, 0x16f3, 0x0078, 0x1910, 0x7803, 0x0004, 0x7003, 0x0000,
-+      0xd1bc, 0x00c0, 0x1807, 0x027e, 0x037e, 0x6b28, 0x6a2c, 0x7820,
-+      0x686e, 0xa31a, 0x7824, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x7820,
-+      0x6910, 0xa100, 0x6812, 0x7824, 0x6914, 0xa101, 0x6816, 0x037f,
-+      0x027f, 0x7830, 0x681e, 0x7834, 0x6822, 0x1078, 0x1c53, 0x2a00,
-+      0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x6850,
-+      0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, 0x17f9, 0x684c,
-+      0xd0e4, 0x0040, 0x17f9, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078,
-+      0x5d41, 0x7808, 0xd0ec, 0x00c0, 0x1803, 0x7803, 0x0009, 0x7003,
-+      0x0004, 0x0078, 0x1910, 0x1078, 0x16ad, 0x0078, 0x1910, 0x057e,
-+      0x7d0c, 0xd5bc, 0x00c0, 0x180e, 0x1078, 0x7692, 0x057f, 0x1078,
-+      0x1914, 0x682b, 0xffff, 0x682f, 0xffff, 0x697c, 0x6912, 0x6980,
-+      0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x684c,
-+      0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x1837, 0x7003, 0x0000,
-+      0x6808, 0x8001, 0x680a, 0x00c0, 0x1833, 0x7004, 0x2060, 0x2009,
-+      0x0048, 0x1078, 0x5d41, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7814,
-+      0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000, 0x6816, 0x7814,
-+      0x7908, 0xa18c, 0x0fff, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214,
-+      0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b,
-+      0x1078, 0x197b, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001,
-+      0x7804, 0xd0fc, 0x0040, 0x1858, 0x7803, 0x0002, 0x7803, 0x0004,
-+      0x780f, 0x0070, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048,
-+      0x1078, 0x5d41, 0x1078, 0x199e, 0x0040, 0x1833, 0x7908, 0xd1ec,
-+      0x00c0, 0x1876, 0x2009, 0x0009, 0x0078, 0x1878, 0x2009, 0x0019,
-+      0x7902, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x8001,
-+      0x7002, 0xd194, 0x0040, 0x1891, 0x7804, 0xd0fc, 0x00c0, 0x178d,
-+      0x8aff, 0x0040, 0x1910, 0x2009, 0x0001, 0x1078, 0x16f3, 0x0078,
-+      0x1910, 0xa184, 0x0880, 0x00c0, 0x189e, 0x8aff, 0x0040, 0x1910,
-+      0x2009, 0x0001, 0x1078, 0x16f3, 0x0078, 0x1910, 0x7803, 0x0004,
-+      0x7003, 0x0000, 0xd1bc, 0x00c0, 0x18d2, 0x027e, 0x037e, 0x6b28,
-+      0x6a2c, 0x1078, 0x1c53, 0x0d7e, 0x0f7e, 0x2d78, 0x2804, 0xac68,
-+      0x6034, 0xd09c, 0x00c0, 0x18c2, 0x6808, 0x2008, 0xa31a, 0x680c,
-+      0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101, 0x7816,
-+      0x0078, 0x18ce, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213, 0x7810,
-+      0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f, 0x0d7f,
-+      0x0078, 0x17c7, 0x057e, 0x7d0c, 0x1078, 0x7692, 0x057f, 0x1078,
-+      0x1914, 0x682b, 0xffff, 0x682f, 0xffff, 0x697c, 0x6912, 0x6980,
-+      0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x7803,
-+      0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x18fa, 0x6808,
-+      0x8001, 0x680a, 0x00c0, 0x18fa, 0x7004, 0x2060, 0x2009, 0x0048,
-+      0x1078, 0x5d41, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7803, 0x0004,
-+      0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x18fa,
-+      0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x16c4,
-+      0x017f, 0x007f, 0x127f, 0x007c, 0x1078, 0x1925, 0x20e1, 0x9028,
-+      0x700f, 0x7970, 0x7013, 0x7970, 0x2001, 0x015d, 0x200c, 0x810a,
-+      0x2102, 0x2001, 0x0138, 0x2202, 0x007c, 0x2001, 0x0138, 0x2014,
-+      0x2003, 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc,
-+      0x00c0, 0x1942, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0,
-+      0x1942, 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x1942, 0x8421,
-+      0x00c0, 0x192c, 0x007c, 0x2011, 0x0201, 0x2009, 0x003c, 0x2204,
-+      0xa005, 0x00c0, 0x194f, 0x8109, 0x00c0, 0x1947, 0x007c, 0x007c,
-+      0x1078, 0x1943, 0x0040, 0x1978, 0x7908, 0xd1ec, 0x00c0, 0x1968,
-+      0x1078, 0x199e, 0x0040, 0x1968, 0x7803, 0x0009, 0x7904, 0xd1fc,
-+      0x0040, 0x195e, 0x7803, 0x0006, 0x1078, 0x1943, 0x0040, 0x1978,
-+      0x780c, 0xd0a4, 0x00c0, 0x1978, 0x7007, 0x0000, 0x1078, 0x199e,
-+      0x0040, 0x197a, 0x7803, 0x0019, 0x7003, 0x0003, 0x0078, 0x197a,
-+      0x1078, 0x1914, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200,
-+      0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x1925, 0x20e1, 0x7000,
-+      0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f,
-+      0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001,
-+      0x0138, 0x2202, 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e,
-+      0x7908, 0xa18c, 0x0fff, 0xa182, 0x0009, 0x0048, 0x19ab, 0xa085,
-+      0x0001, 0x0078, 0x19bd, 0x2001, 0x020a, 0x81ff, 0x0040, 0x19b6,
-+      0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000,
-+      0x200c, 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c,
-+      0x0e7e, 0x2071, 0x798b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e,
-+      0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1a42, 0x6934,
-+      0xa184, 0x0007, 0x0079, 0x19d4, 0x19dc, 0x1a2d, 0x19dc, 0x19dc,
-+      0x19dc, 0x1a12, 0x19ef, 0x19de, 0x1078, 0x12cd, 0x684c, 0xd0b4,
-+      0x0040, 0x1b46, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812,
-+      0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1a35, 0x6834,
-+      0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x19dc, 0x684c, 0xd0b4,
-+      0x0040, 0x1b46, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812,
-+      0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d,
-+      0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004, 0x6832, 0x6958,
-+      0x0078, 0x1a3e, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x1a42,
-+      0x684c, 0xd0b4, 0x0040, 0x1b46, 0x6804, 0x681a, 0xa080, 0x000d,
-+      0x2004, 0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004, 0x6832, 0x6958,
-+      0xa006, 0x682e, 0x682a, 0x0078, 0x1a3e, 0x684c, 0xd0b4, 0x0040,
-+      0x1781, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834,
-+      0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004, 0x6832, 0x6926, 0x684c,
-+      0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804,
-+      0xd0fc, 0x10c0, 0x1b4a, 0x0e7e, 0x0d7e, 0x2071, 0x798b, 0x7000,
-+      0xa005, 0x00c0, 0x1ac0, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c,
-+      0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068, 0x686c,
-+      0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a,
-+      0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68, 0x6824,
-+      0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f,
-+      0x6908, 0xa184, 0x0007, 0x0040, 0x1a82, 0x017e, 0x2009, 0x0008,
-+      0xa102, 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081,
-+      0x0000, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c,
-+      0x6814, 0xa106, 0x00c0, 0x1a99, 0x6928, 0x6810, 0xa106, 0x0040,
-+      0x1aa6, 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x1c9e, 0x047f,
-+      0x037f, 0x0040, 0x1aa6, 0x0c7f, 0x0078, 0x1ac0, 0x8aff, 0x00c0,
-+      0x1aae, 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1ac0, 0x127e, 0x2091,
-+      0x8000, 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1ac4, 0x0040,
-+      0x1abd, 0x2009, 0x0001, 0x1078, 0x1ac4, 0x127f, 0x0c7f, 0xa006,
-+      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e,
-+      0x037e, 0x027e, 0x8aff, 0x0040, 0x1b3f, 0x700c, 0x7214, 0xa202,
-+      0x7010, 0x7218, 0xa203, 0x0048, 0x1b3e, 0xa03e, 0x2730, 0x6850,
-+      0xd0fc, 0x00c0, 0x1af1, 0x0d7e, 0x2804, 0xac68, 0x2900, 0x0079,
-+      0x1ae1, 0x1b20, 0x1b01, 0x1b01, 0x1b20, 0x1b20, 0x1b18, 0x1b20,
-+      0x1b01, 0x1b20, 0x1b07, 0x1b07, 0x1b20, 0x1b20, 0x1b20, 0x1b0f,
-+      0x1b07, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, 0xd99c,
-+      0x0040, 0x1b24, 0x0d7e, 0x2804, 0xac68, 0x6f08, 0x6e0c, 0x0078,
-+      0x1b23, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x1b23, 0x6b10,
-+      0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x1b23, 0x0d7f,
-+      0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1b20,
-+      0x0d7f, 0x1078, 0x1c3a, 0x00c0, 0x1aca, 0xa00e, 0x0078, 0x1b3f,
-+      0x0d7f, 0x1078, 0x12cd, 0x0d7f, 0x7b22, 0x7a26, 0x7d32, 0x7c36,
-+      0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x6828, 0xa300,
-+      0x682a, 0x682c, 0xa201, 0x682e, 0x700c, 0xa300, 0x700e, 0x7010,
-+      0xa201, 0x7012, 0x1078, 0x1c3a, 0x0078, 0x1b3f, 0xa006, 0x027f,
-+      0x037f, 0x047f, 0x057f, 0x067f, 0x077f, 0x007c, 0x1078, 0x12cd,
-+      0x1078, 0x12cd, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
-+      0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0x798b, 0x2b68,
-+      0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
-+      0x1b48, 0x7000, 0x0079, 0x1b64, 0x1c0b, 0x1b68, 0x1bd8, 0x1c09,
-+      0x8001, 0x7002, 0xd19c, 0x00c0, 0x1b7c, 0x8aff, 0x0040, 0x1b9b,
-+      0x2009, 0x0001, 0x1078, 0x1ac4, 0x0040, 0x1c0b, 0x2009, 0x0001,
-+      0x1078, 0x1ac4, 0x0078, 0x1c0b, 0x7803, 0x0004, 0xd194, 0x0040,
-+      0x1b8c, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x00c0, 0x1b91, 0x684c,
-+      0xc0f5, 0x684e, 0x0078, 0x1b91, 0x1078, 0x1c53, 0x6850, 0xc0fd,
-+      0x6852, 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003,
-+      0x0000, 0x0078, 0x1c0b, 0x711c, 0x81ff, 0x0040, 0x1bb1, 0x7918,
-+      0x7922, 0x7827, 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002,
-+      0x700c, 0xa100, 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0078,
-+      0x1c0b, 0x0f7e, 0x027e, 0x781c, 0x007e, 0x7818, 0x007e, 0x2079,
-+      0x0100, 0x7a14, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816, 0x7820,
-+      0xd0bc, 0x00c0, 0x1bbf, 0x79c8, 0x007f, 0xa102, 0x78ca, 0x79c4,
-+      0x007f, 0xa102, 0x78c6, 0xa284, 0x0004, 0xa085, 0x0012, 0x7816,
-+      0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003, 0x0000, 0x0078, 0x1c0b,
-+      0x8001, 0x7002, 0xd194, 0x0040, 0x1bed, 0x7804, 0xd0fc, 0x00c0,
-+      0x1b5a, 0xd19c, 0x00c0, 0x1c07, 0x8aff, 0x0040, 0x1c0b, 0x2009,
-+      0x0001, 0x1078, 0x1ac4, 0x0078, 0x1c0b, 0x027e, 0x037e, 0x6b28,
-+      0x6a2c, 0x1078, 0x1c53, 0x0d7e, 0x2804, 0xac68, 0x6034, 0xd09c,
-+      0x00c0, 0x1c00, 0x6808, 0xa31a, 0x680c, 0xa213, 0x0078, 0x1c04,
-+      0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f, 0x0078, 0x1b8c, 0x0078,
-+      0x1b8c, 0x1078, 0x12cd, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f,
-+      0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x798b, 0x7000,
-+      0xa086, 0x0000, 0x0040, 0x1c37, 0x2079, 0x0020, 0x20e1, 0x9040,
-+      0x7804, 0xd0fc, 0x0040, 0x1c1e, 0x1078, 0x1b4a, 0x7000, 0xa086,
-+      0x0000, 0x00c0, 0x1c1e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
-+      0x1c2d, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x0e7f,
-+      0x0f7f, 0x007c, 0x8840, 0x2804, 0xa005, 0x00c0, 0x1c4e, 0x6004,
-+      0xa005, 0x0040, 0x1c50, 0x681a, 0x2060, 0x6034, 0xa084, 0x000f,
-+      0xa080, 0x1c7e, 0x2044, 0x88ff, 0x1040, 0x12cd, 0x8a51, 0x007c,
-+      0x2051, 0x0000, 0x007c, 0x8a50, 0x8841, 0x2804, 0xa005, 0x00c0,
-+      0x1c6d, 0x2c00, 0xad06, 0x0040, 0x1c62, 0x6000, 0xa005, 0x00c0,
-+      0x1c62, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, 0xa080,
-+      0x1c8e, 0x2044, 0x88ff, 0x1040, 0x12cd, 0x007c, 0x0000, 0x0011,
-+      0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f,
-+      0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, 0x1c73,
-+      0x1c6f, 0x0000, 0x0000, 0x1c7d, 0x0000, 0x1c73, 0x0000, 0x1c7a,
-+      0x1c77, 0x0000, 0x0000, 0x0000, 0x1c7d, 0x1c7a, 0x0000, 0x1c75,
-+      0x1c75, 0x0000, 0x0000, 0x1c7d, 0x0000, 0x1c75, 0x0000, 0x1c7b,
-+      0x1c7b, 0x0000, 0x0000, 0x0000, 0x1c7d, 0x1c7b, 0x0a7e, 0x097e,
-+      0x087e, 0x6858, 0xa055, 0x0040, 0x1d3f, 0x2d60, 0x6034, 0xa0cc,
-+      0x000f, 0xa9c0, 0x1c7e, 0xa986, 0x0007, 0x0040, 0x1cb7, 0xa986,
-+      0x000e, 0x0040, 0x1cb7, 0xa986, 0x000f, 0x00c0, 0x1cbb, 0x605c,
-+      0xa422, 0x6060, 0xa31a, 0x2804, 0xa045, 0x00c0, 0x1cc9, 0x0050,
-+      0x1cc3, 0x0078, 0x1d3f, 0x6004, 0xa065, 0x0040, 0x1d3f, 0x0078,
-+      0x1ca6, 0x2804, 0xa005, 0x0040, 0x1ce7, 0xac68, 0xd99c, 0x00c0,
-+      0x1cd7, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0078, 0x1cdb, 0x6810,
-+      0xa422, 0x6814, 0xa31b, 0x0048, 0x1d06, 0x2300, 0xa405, 0x0040,
-+      0x1ced, 0x8a51, 0x0040, 0x1d3f, 0x8840, 0x0078, 0x1cc9, 0x6004,
-+      0xa065, 0x0040, 0x1d3f, 0x0078, 0x1ca6, 0x8a51, 0x0040, 0x1d3f,
-+      0x8840, 0x2804, 0xa005, 0x00c0, 0x1d00, 0x6004, 0xa065, 0x0040,
-+      0x1d3f, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1c7e, 0x2804, 0x2040,
-+      0x2b68, 0x6850, 0xc0fc, 0x6852, 0x0078, 0x1d33, 0x8422, 0x8420,
-+      0x831a, 0xa399, 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, 0x0d7f,
-+      0xd99c, 0x00c0, 0x1d21, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300,
-+      0xa11b, 0x1048, 0x12cd, 0x6800, 0xa420, 0x6804, 0xa319, 0x0078,
-+      0x1d2d, 0x6910, 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x1048,
-+      0x12cd, 0x6800, 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22,
-+      0x6850, 0xc0fd, 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00,
-+      0x6826, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1d44, 0x087f,
-+      0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, 0x2004,
-+      0xa084, 0x0007, 0x0079, 0x1d4c, 0x1d54, 0x1d55, 0x1d58, 0x1d5b,
-+      0x1d60, 0x1d63, 0x1d68, 0x1d6d, 0x007c, 0x1078, 0x1b4a, 0x007c,
-+      0x1078, 0x1785, 0x007c, 0x1078, 0x1785, 0x1078, 0x1b4a, 0x007c,
-+      0x1078, 0x1456, 0x007c, 0x1078, 0x1b4a, 0x1078, 0x1456, 0x007c,
-+      0x1078, 0x1785, 0x1078, 0x1456, 0x007c, 0x1078, 0x1785, 0x1078,
-+      0x1b4a, 0x1078, 0x1456, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079,
-+      0x0200, 0x2071, 0x7c80, 0x2069, 0x7700, 0x2009, 0x0004, 0x7912,
-+      0x7817, 0x0004, 0x1078, 0x2052, 0x781b, 0x0002, 0x20e1, 0x8700,
-+      0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007,
-+      0x0079, 0x1d92, 0x1db6, 0x1d9a, 0x1d9e, 0x1da2, 0x1da8, 0x1dac,
-+      0x1db0, 0x1db4, 0x1078, 0x4298, 0x0078, 0x1db6, 0x1078, 0x42c7,
-+      0x0078, 0x1db6, 0x1078, 0x4298, 0x1078, 0x42c7, 0x0078, 0x1db6,
-+      0x1078, 0x1db8, 0x0078, 0x1db6, 0x1078, 0x1db8, 0x0078, 0x1db6,
-+      0x1078, 0x1db8, 0x0078, 0x1db6, 0x1078, 0x1db8, 0x127f, 0x007c,
-+      0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, 0x1dc2,
-+      0x1078, 0x12cd, 0xa184, 0x0030, 0x0040, 0x1dd3, 0x6a00, 0xa286,
-+      0x0003, 0x00c0, 0x1dcd, 0x1078, 0x12cd, 0x1078, 0x3591, 0x20e1,
-+      0x9010, 0x0078, 0x1ddf, 0xa184, 0x00c0, 0x0040, 0x1dd9, 0x1078,
-+      0x12cd, 0xa184, 0x0300, 0x0040, 0x1ddf, 0x20e1, 0x9020, 0x7932,
-+      0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, 0x2071,
-+      0x7700, 0x7128, 0x2001, 0x7923, 0x2102, 0x2001, 0x792b, 0x2102,
-+      0xa182, 0x0211, 0x00c8, 0x1df8, 0x2009, 0x0008, 0x0078, 0x1e22,
-+      0xa182, 0x0259, 0x00c8, 0x1e00, 0x2009, 0x0007, 0x0078, 0x1e22,
-+      0xa182, 0x02c1, 0x00c8, 0x1e08, 0x2009, 0x0006, 0x0078, 0x1e22,
-+      0xa182, 0x0349, 0x00c8, 0x1e10, 0x2009, 0x0005, 0x0078, 0x1e22,
-+      0xa182, 0x0421, 0x00c8, 0x1e18, 0x2009, 0x0004, 0x0078, 0x1e22,
-+      0xa182, 0x0581, 0x00c8, 0x1e20, 0x2009, 0x0003, 0x0078, 0x1e22,
-+      0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0xa182, 0x0005, 0x00c8,
-+      0x1e2c, 0x7916, 0x0078, 0x1e2e, 0x7817, 0x0004, 0x1078, 0x2052,
-+      0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, 0x2061,
-+      0x0100, 0x2071, 0x7700, 0x6024, 0x6026, 0x6033, 0x00ef, 0x60e7,
-+      0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043,
-+      0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x0caf, 0x600f,
-+      0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x772d, 0x2003,
-+      0x0000, 0x2001, 0x772c, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091,
-+      0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0,
-+      0x1e6d, 0xa184, 0x0007, 0x0079, 0x1e73, 0xa195, 0x0004, 0xa284,
-+      0x0007, 0x0079, 0x1e73, 0x1e9f, 0x1e7b, 0x1e7f, 0x1e83, 0x1e89,
-+      0x1e8d, 0x1e93, 0x1e99, 0x1078, 0x4802, 0x0078, 0x1e9f, 0x1078,
-+      0x48f1, 0x0078, 0x1e9f, 0x1078, 0x48f1, 0x1078, 0x4802, 0x0078,
-+      0x1e9f, 0x1078, 0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x4802, 0x1078,
-+      0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x48f1, 0x1078, 0x1ea4, 0x0078,
-+      0x1e9f, 0x1078, 0x48f1, 0x1078, 0x4802, 0x1078, 0x1ea4, 0x027f,
-+      0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1f58, 0x017e,
-+      0x047e, 0x0c7e, 0x644c, 0x74ba, 0xa48c, 0xff00, 0xa196, 0xff00,
-+      0x0040, 0x1ed3, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040,
-+      0x1ed3, 0x7130, 0xd18c, 0x00c0, 0x1ed3, 0x2011, 0x7752, 0x2214,
-+      0xd2ec, 0x0040, 0x1ec7, 0xc18d, 0x7132, 0x0078, 0x1ed3, 0x6240,
-+      0xa294, 0x0010, 0x0040, 0x1f15, 0x6248, 0xa294, 0xff00, 0xa296,
-+      0xff00, 0x00c0, 0x1f15, 0x037e, 0x73b8, 0x2011, 0x8013, 0x1078,
-+      0x2d59, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0x7752, 0x220c,
-+      0xd1a4, 0x0040, 0x1efd, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
-+      0x1078, 0x47d0, 0x2019, 0x000e, 0x1078, 0x75d9, 0xa484, 0x00ff,
-+      0xa080, 0x2329, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
-+      0x2009, 0x000e, 0x1078, 0x7641, 0x017f, 0xd1ac, 0x00c0, 0x1f06,
-+      0x2019, 0x0004, 0x1078, 0x2293, 0x0078, 0x1f15, 0x157e, 0x20a9,
-+      0x007f, 0x2009, 0x0000, 0x1078, 0x384c, 0x00c0, 0x1f11, 0x1078,
-+      0x3637, 0x8108, 0x00f0, 0x1f0b, 0x157f, 0x0c7f, 0x047f, 0x6043,
-+      0x0000, 0x2009, 0x00f7, 0x1078, 0x35fa, 0x0f7e, 0x2079, 0x7949,
-+      0x783c, 0xa086, 0x0000, 0x0040, 0x1f2d, 0x6027, 0x0004, 0x783f,
-+      0x0000, 0x2079, 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003,
-+      0x1078, 0x58d8, 0x2011, 0x0002, 0x1078, 0x58e2, 0x1078, 0x57ee,
-+      0x1078, 0x4706, 0x037e, 0x2019, 0x0000, 0x1078, 0x5880, 0x037f,
-+      0x60e3, 0x0000, 0x017f, 0x2001, 0x7700, 0x2014, 0xa296, 0x0004,
-+      0x00c0, 0x1f50, 0xd19c, 0x00c0, 0x1f50, 0x6228, 0xc29d, 0x622a,
-+      0x2003, 0x0001, 0x2001, 0x7720, 0x2003, 0x0000, 0x6027, 0x0020,
-+      0xd194, 0x0040, 0x1ff9, 0x0f7e, 0x2079, 0x7949, 0x783c, 0xa086,
-+      0x0001, 0x00c0, 0x1f7c, 0x017e, 0x6027, 0x0004, 0x783f, 0x0000,
-+      0x2079, 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, 0x2079, 0x7936,
-+      0x7807, 0x0000, 0x7833, 0x0000, 0x1078, 0x4d96, 0x1078, 0x4e56,
-+      0x017f, 0x0f7f, 0x0078, 0x1ff9, 0x0f7f, 0x017e, 0x6220, 0xd2b4,
-+      0x0040, 0x1fb1, 0x1078, 0x4706, 0x1078, 0x569c, 0x6027, 0x0004,
-+      0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x1f94,
-+      0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x7936,
-+      0x6028, 0xa09a, 0x0002, 0x00c8, 0x1fa4, 0x8000, 0x602a, 0x0c7f,
-+      0x1078, 0x568e, 0x0078, 0x1ff8, 0x2019, 0x793f, 0x2304, 0xa065,
-+      0x0040, 0x1fae, 0x2009, 0x0027, 0x1078, 0x5d41, 0x0c7f, 0x0078,
-+      0x1ff8, 0xd2bc, 0x0040, 0x1ff8, 0x1078, 0x4714, 0x6017, 0x0010,
-+      0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
-+      0x0040, 0x1fc6, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e,
-+      0x2061, 0x7936, 0x6044, 0xa09a, 0x0002, 0x00c8, 0x1fe7, 0x8000,
-+      0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1ff8, 0x1078, 0x470b,
-+      0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x1fe3, 0x6017,
-+      0x0012, 0x0078, 0x1ff8, 0x6017, 0x0016, 0x0078, 0x1ff8, 0x037e,
-+      0x2019, 0x0001, 0x1078, 0x5880, 0x037f, 0x2019, 0x7945, 0x2304,
-+      0xa065, 0x0040, 0x1ff7, 0x2009, 0x004f, 0x1078, 0x5d41, 0x0c7f,
-+      0x017f, 0xd19c, 0x0040, 0x2021, 0x017e, 0x6028, 0xc09c, 0x602a,
-+      0x2011, 0x0003, 0x1078, 0x58d8, 0x2011, 0x0002, 0x1078, 0x58e2,
-+      0x1078, 0x57ee, 0x1078, 0x4706, 0x037e, 0x2019, 0x0000, 0x1078,
-+      0x5880, 0x037f, 0x60e3, 0x0000, 0x1078, 0x76b0, 0x1078, 0x76ce,
-+      0x2001, 0x7700, 0x2003, 0x0004, 0x6027, 0x0008, 0x1078, 0x11be,
-+      0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c, 0x007e, 0x017e, 0x027e,
-+      0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7700, 0x71b0,
-+      0x70b2, 0xa116, 0x0040, 0x204b, 0x81ff, 0x0040, 0x203d, 0x2011,
-+      0x8011, 0x1078, 0x2d59, 0x0078, 0x204b, 0x2011, 0x8012, 0x1078,
-+      0x2d59, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, 0x0028, 0x1078,
-+      0x2293, 0x0c7f, 0x037f, 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f,
-+      0x007f, 0x007c, 0x0c7e, 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100,
-+      0xa190, 0x206d, 0x2204, 0x60f2, 0xa192, 0x0005, 0x00c8, 0x2064,
-+      0xa190, 0x2076, 0x0078, 0x2066, 0x2011, 0x207a, 0x2204, 0x60ee,
-+      0x027f, 0x007f, 0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840,
-+      0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8,
-+      0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028,
-+      0x2130, 0xa094, 0xff00, 0x00c0, 0x2088, 0x81ff, 0x0040, 0x208c,
-+      0x1078, 0x444b, 0x0078, 0x2093, 0xa080, 0x2329, 0x200c, 0xa18c,
-+      0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x2329, 0x200c, 0xa18c,
-+      0x00ff, 0x007c, 0x20ba, 0x20be, 0x20c2, 0x20c8, 0x20ce, 0x20d4,
-+      0x20da, 0x20e2, 0x20ea, 0x20f0, 0x20f6, 0x20fe, 0x2106, 0x210e,
-+      0x2116, 0x2120, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a,
-+      0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a, 0x212a,
-+      0x212a, 0x212a, 0x107e, 0x007e, 0x0078, 0x2143, 0x107e, 0x007e,
-+      0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1e5e, 0x0078, 0x2143,
-+      0x107e, 0x007e, 0x1078, 0x1e5e, 0x0078, 0x2143, 0x107e, 0x007e,
-+      0x1078, 0x1d45, 0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1d45,
-+      0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1e5e, 0x1078, 0x1d45,
-+      0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1e5e, 0x1078, 0x1d45,
-+      0x0078, 0x2143, 0x107e, 0x007e, 0x1078, 0x1d8a, 0x0078, 0x2143,
-+      0x107e, 0x007e, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+      0x1078, 0x1e5e, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+      0x1078, 0x1e5e, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+      0x1078, 0x1d45, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+      0x1078, 0x1d45, 0x1078, 0x1d8a, 0x0078, 0x2143, 0x107e, 0x007e,
-+      0x1078, 0x1e5e, 0x1078, 0x1d45, 0x1078, 0x1d8a, 0x0078, 0x2143,
-+      0x107e, 0x007e, 0x1078, 0x1e5e, 0x1078, 0x1d45, 0x1078, 0x1d8a,
-+      0x0078, 0x2143, 0x0005, 0x0078, 0x212a, 0xb084, 0x003c, 0x8004,
-+      0x8004, 0x0079, 0x2133, 0x2143, 0x20c0, 0x20c4, 0x20ca, 0x20d0,
-+      0x20d6, 0x20dc, 0x20e4, 0x20ec, 0x20f2, 0x20f8, 0x2100, 0x2108,
-+      0x2110, 0x2118, 0x2122, 0x0008, 0x212d, 0x007f, 0x107f, 0x2091,
-+      0x8001, 0x007c, 0x0c7e, 0x027e, 0x2041, 0x007e, 0x70bc, 0xd09c,
-+      0x0040, 0x2154, 0x2041, 0x007f, 0x2001, 0x010c, 0x203c, 0x727c,
-+      0x82ff, 0x0040, 0x219f, 0x037e, 0x738c, 0xa38e, 0xffff, 0x00c0,
-+      0x2163, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x7dc0, 0x2c04, 0xa38c,
-+      0x0001, 0x0040, 0x2170, 0xa084, 0xff00, 0x8007, 0x0078, 0x2172,
-+      0xa084, 0x00ff, 0xa70e, 0x0040, 0x2194, 0xa08e, 0x00ff, 0x0040,
-+      0x219a, 0x2009, 0x0000, 0x1078, 0x207f, 0x1078, 0x3811, 0x00c0,
-+      0x2197, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x218e,
-+      0x1078, 0x21f1, 0x0040, 0x2197, 0x0078, 0x2194, 0x1078, 0x22f5,
-+      0x1078, 0x2218, 0x0040, 0x2197, 0x8318, 0x0078, 0x2163, 0x738e,
-+      0x0078, 0x219c, 0x708f, 0xffff, 0x037f, 0x0078, 0x21ee, 0xa780,
-+      0x2329, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x708c, 0xa096, 0xffff,
-+      0x0040, 0x21b1, 0xa812, 0x00c8, 0x21c1, 0x708f, 0xffff, 0x0078,
-+      0x21eb, 0x2009, 0x0000, 0x70bc, 0xd09c, 0x0040, 0x21bc, 0xd094,
-+      0x0040, 0x21bc, 0x2009, 0x007e, 0x2100, 0xa802, 0x20a8, 0x0078,
-+      0x21c5, 0x2008, 0x2810, 0xa202, 0x20a8, 0x2700, 0x157e, 0x017e,
-+      0xa106, 0x0040, 0x21e2, 0x1078, 0x3811, 0x00c0, 0x21eb, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x21dc, 0x1078, 0x21f1,
-+      0x0040, 0x21eb, 0x0078, 0x21e2, 0x1078, 0x22f5, 0x1078, 0x2218,
-+      0x0040, 0x21eb, 0x017f, 0x8108, 0x157f, 0x00f0, 0x21c5, 0x708f,
-+      0xffff, 0x0078, 0x21ee, 0x017f, 0x157f, 0x718e, 0x027f, 0x0c7f,
-+      0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4,
-+      0x0040, 0x2213, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000,
-+      0x1078, 0x37e0, 0x2001, 0x0000, 0x1078, 0x37f4, 0x127e, 0x2091,
-+      0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0004, 0x1078,
-+      0x5d41, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c,
-+      0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4, 0x0040,
-+      0x223a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+      0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x127e, 0x2091, 0x8000,
-+      0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, 0x1078, 0x5d41,
-+      0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+      0x027e, 0x2009, 0x0080, 0x1078, 0x3811, 0x00c0, 0x224d, 0x1078,
-+      0x2250, 0x0040, 0x224d, 0x70c3, 0xffff, 0x027f, 0x0c7f, 0x007c,
-+      0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4, 0x0040,
-+      0x2272, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-+      0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x127e, 0x2091, 0x8000,
-+      0x70c4, 0x8000, 0x70c6, 0x127f, 0x2009, 0x0002, 0x1078, 0x5d41,
-+      0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-+      0x0d7e, 0x2009, 0x007f, 0x1078, 0x3811, 0x00c0, 0x2290, 0x2c68,
-+      0x1078, 0x5cb4, 0x0040, 0x2290, 0x2d00, 0x601a, 0x6312, 0x601f,
-+      0x0001, 0x620a, 0x2009, 0x0022, 0x1078, 0x5d41, 0xa085, 0x0001,
-+      0x0d7f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, 0x037e, 0x027e,
-+      0x1078, 0x4a85, 0x1078, 0x4a35, 0x1078, 0x6219, 0x20a9, 0x007f,
-+      0x2009, 0x0000, 0x017e, 0x1078, 0x384c, 0x00c0, 0x22ab, 0x1078,
-+      0x3a36, 0x1078, 0x3637, 0x017f, 0x8108, 0x00f0, 0x22a2, 0x027f,
-+      0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x037e,
-+      0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
-+      0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078, 0x747b, 0x017f,
-+      0x2e60, 0x1078, 0x3a36, 0x6210, 0x6314, 0x1078, 0x3637, 0x6212,
-+      0x6316, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e,
-+      0x007e, 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x22eb,
-+      0x2071, 0x7700, 0x7088, 0xa005, 0x0040, 0x22e8, 0x8001, 0x708a,
-+      0x007f, 0x0e7f, 0x007c, 0x2071, 0x7700, 0x70c4, 0xa005, 0x0040,
-+      0x22e8, 0x8001, 0x70c6, 0x0078, 0x22e8, 0x6000, 0xc08c, 0x6002,
-+      0x007c, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x81ff,
-+      0x00c0, 0x2306, 0x20a9, 0x0001, 0x0078, 0x230a, 0x20a9, 0x007f,
-+      0x2011, 0x0000, 0x027e, 0xa2e0, 0x7820, 0x2c64, 0x8cff, 0x0040,
-+      0x231c, 0x2019, 0x0029, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08,
-+      0x1078, 0x747b, 0x1078, 0x3a36, 0x027f, 0x8210, 0x00f0, 0x230a,
-+      0x027e, 0x027f, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
-+      0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc,
-+      0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1,
-+      0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6,
-+      0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4,
-+      0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa,
-+      0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d,
-+      0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282,
-+      0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074,
-+      0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a,
-+      0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559,
-+      0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d,
-+      0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043,
-+      0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932,
-+      0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227,
-+      0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18,
-+      0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000,
-+      0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000,
-+      0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00,
-+      0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900,
-+      0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200,
-+      0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00,
-+      0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600,
-+      0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00,
-+      0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900,
-+      0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000,
-+      0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000,
-+      0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x2071, 0x776d, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016,
-+      0x703a, 0x703e, 0x7033, 0x777d, 0x7037, 0x777d, 0x7007, 0x0001,
-+      0x2061, 0x77bd, 0x6003, 0x0002, 0x007c, 0x0090, 0x2450, 0x0068,
-+      0x2450, 0x2071, 0x776d, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2450,
-+      0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2537, 0x0079, 0x24d4,
-+      0x007c, 0x2071, 0x776d, 0x7004, 0x0079, 0x2456, 0x245a, 0x245b,
-+      0x2465, 0x2477, 0x007c, 0x0090, 0x2464, 0x0068, 0x2464, 0x2b78,
-+      0x7818, 0xd084, 0x0040, 0x2483, 0x007c, 0x2b78, 0x2061, 0x77bd,
-+      0x6008, 0xa08e, 0x0100, 0x0040, 0x2472, 0xa086, 0x0200, 0x0040,
-+      0x252f, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010,
-+      0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x247f, 0x007c, 0x2a60,
-+      0x2b78, 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x00c8,
-+      0x248c, 0x61b0, 0x0079, 0x2494, 0x2100, 0xa08a, 0x0036, 0x00c8,
-+      0x252b, 0x61b0, 0x0079, 0x24d4, 0x250d, 0x253f, 0x2547, 0x254b,
-+      0x2553, 0x2559, 0x255d, 0x2566, 0x256a, 0x2572, 0x2576, 0x252b,
-+      0x252b, 0x252b, 0x257a, 0x252b, 0x258a, 0x25a1, 0x25b8, 0x2634,
-+      0x2639, 0x2666, 0x26c0, 0x26d1, 0x26ef, 0x2722, 0x272c, 0x2739,
-+      0x274c, 0x2766, 0x276f, 0x27ac, 0x27b2, 0x252b, 0x27c2, 0x252b,
-+      0x252b, 0x252b, 0x252b, 0x252b, 0x27c6, 0x27cc, 0x252b, 0x252b,
-+      0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x27d4, 0x252b,
-+      0x252b, 0x252b, 0x252b, 0x252b, 0x27e1, 0x27e7, 0x252b, 0x252b,
-+      0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
-+      0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
-+      0x252b, 0x252b, 0x252b, 0x252b, 0x2572, 0x2576, 0x252b, 0x252b,
-+      0x27f9, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
-+      0x252b, 0x252b, 0x252b, 0x252b, 0x2846, 0x2913, 0x2927, 0x292e,
-+      0x2991, 0x29e2, 0x29ed, 0x2a2c, 0x2a3b, 0x2a4a, 0x2a4d, 0x27fd,
-+      0x2a76, 0x2abd, 0x2aca, 0x2bc5, 0x2cb3, 0x2cda, 0x2de4, 0x2df2,
-+      0x2dff, 0x2e39, 0x713c, 0x0078, 0x250d, 0x2021, 0x4000, 0x1078,
-+      0x2d33, 0x127e, 0x2091, 0x8000, 0x0068, 0x251a, 0x7818, 0xd084,
-+      0x0040, 0x251d, 0x127f, 0x0078, 0x2511, 0x781b, 0x0001, 0x7c22,
-+      0x7926, 0x7a2a, 0x7b2e, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
-+      0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x250f, 0x2021,
-+      0x4002, 0x0078, 0x250f, 0x2021, 0x4003, 0x0078, 0x250f, 0x2021,
-+      0x4005, 0x0078, 0x250f, 0x2021, 0x4006, 0x0078, 0x250f, 0xa02e,
-+      0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2d42, 0x7823,
-+      0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
-+      0x7930, 0x0078, 0x2d46, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
-+      0x250d, 0x7924, 0x2114, 0x0078, 0x250d, 0x2099, 0x0009, 0x20a1,
-+      0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x250d, 0x7824, 0x2060,
-+      0x0078, 0x257c, 0x2009, 0x0001, 0x2011, 0x000f, 0x2019, 0x0025,
-+      0x0078, 0x250d, 0x7d38, 0x7c3c, 0x0078, 0x2541, 0x7d38, 0x7c3c,
-+      0x0078, 0x254d, 0x2061, 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200,
-+      0x8c60, 0x8109, 0x00c0, 0x257e, 0x2010, 0xa005, 0x0040, 0x250d,
-+      0x0078, 0x2533, 0x2061, 0x7751, 0x7824, 0x7930, 0xa11a, 0x00c8,
-+      0x253b, 0x8019, 0x0040, 0x253b, 0x604a, 0x6142, 0x782c, 0x6052,
-+      0x7828, 0x6056, 0xa006, 0x605a, 0x605e, 0x1078, 0x3d89, 0x0078,
-+      0x250d, 0x2061, 0x7751, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x253b,
-+      0x8019, 0x0040, 0x253b, 0x604e, 0x6146, 0x782c, 0x6062, 0x7828,
-+      0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x3b5f, 0x0078, 0x250d,
-+      0xa02e, 0x2520, 0x81ff, 0x00c0, 0x2537, 0x7924, 0x7b28, 0x7a2c,
-+      0x20a9, 0x0005, 0x20a1, 0x7774, 0x41a1, 0x1078, 0x2cf8, 0x0040,
-+      0x2537, 0x2009, 0x0020, 0x1078, 0x2d42, 0x701b, 0x25d0, 0x007c,
-+      0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, 0x0040, 0x25dc,
-+      0xa096, 0x0019, 0x00c0, 0x2537, 0x810f, 0xa18c, 0x00ff, 0x0040,
-+      0x2537, 0x710e, 0x700c, 0x8001, 0x0040, 0x260d, 0x700e, 0x1078,
-+      0x2cf8, 0x0040, 0x2537, 0x2009, 0x0020, 0x2061, 0x77bd, 0x6224,
-+      0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
-+      0x0000, 0xa5a9, 0x0000, 0x1078, 0x2d42, 0x701b, 0x2600, 0x007c,
-+      0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x260b, 0xa096,
-+      0x000a, 0x00c0, 0x2537, 0x0078, 0x25e2, 0x7010, 0x2068, 0x6838,
-+      0xc0fd, 0x683a, 0x1078, 0x3744, 0x00c0, 0x261b, 0x7007, 0x0003,
-+      0x701b, 0x261d, 0x007c, 0x1078, 0x3c22, 0x127e, 0x2091, 0x8000,
-+      0x20a9, 0x0005, 0x2099, 0x7774, 0x530a, 0x2100, 0xa210, 0xa399,
-+      0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009,
-+      0x0020, 0x127f, 0x0078, 0x2d46, 0x6198, 0x7824, 0x609a, 0x0078,
-+      0x250d, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b,
-+      0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00,
-+      0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007,
-+      0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001,
-+      0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0,
-+      0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff, 0x00c0,
-+      0x2537, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x384c, 0x00c0,
-+      0x253b, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x267a,
-+      0x0078, 0x253b, 0x7c28, 0x7d2c, 0x1078, 0x39fd, 0xd28c, 0x00c0,
-+      0x2685, 0x1078, 0x3991, 0x0078, 0x2687, 0x1078, 0x39cb, 0x00c0,
-+      0x26b1, 0x2061, 0x7e00, 0x127e, 0x2091, 0x8000, 0x6000, 0xa086,
-+      0x0000, 0x0040, 0x269f, 0x6010, 0xa06d, 0x0040, 0x269f, 0x683c,
-+      0xa406, 0x00c0, 0x269f, 0x6840, 0xa506, 0x0040, 0x26aa, 0x127f,
-+      0xace0, 0x0008, 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x2537,
-+      0x0078, 0x268b, 0x1078, 0x6852, 0x127f, 0x0040, 0x2537, 0x0078,
-+      0x250d, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3c22, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x6c5c, 0x1078, 0x3b92, 0x127f, 0x0078, 0x250d,
-+      0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040, 0x253b, 0x1078,
-+      0x38d5, 0x0040, 0x2537, 0x1078, 0x3a0a, 0x0040, 0x2537, 0x0078,
-+      0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d22, 0x0040, 0x253b,
-+      0x1078, 0x3a71, 0x0040, 0x2537, 0x2019, 0x0005, 0x1078, 0x3a2b,
-+      0x0040, 0x2537, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x8003,
-+      0x800b, 0x810b, 0xa108, 0x1078, 0x4696, 0x0078, 0x250d, 0x127e,
-+      0x2091, 0x8000, 0x81ff, 0x00c0, 0x271c, 0x2029, 0x00ff, 0x644c,
-+      0x2400, 0xa506, 0x0040, 0x2716, 0x2508, 0x1078, 0x384c, 0x00c0,
-+      0x2716, 0x1078, 0x3a71, 0x0040, 0x271c, 0x2019, 0x0004, 0x1078,
-+      0x3a2b, 0x0040, 0x271c, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x271f,
-+      0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4696, 0x8529, 0x00c8,
-+      0x26f8, 0x127f, 0x0078, 0x250d, 0x127f, 0x0078, 0x2537, 0x127f,
-+      0x0078, 0x253b, 0x1078, 0x2d10, 0x0040, 0x253b, 0x1078, 0x3942,
-+      0x1078, 0x39fd, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078,
-+      0x2d10, 0x0040, 0x253b, 0x1078, 0x3931, 0x1078, 0x39fd, 0x0078,
-+      0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040, 0x253b,
-+      0x1078, 0x39ce, 0x0040, 0x2537, 0x1078, 0x378d, 0x1078, 0x398a,
-+      0x1078, 0x39fd, 0x0078, 0x250d, 0x1078, 0x2d10, 0x0040, 0x253b,
-+      0x1078, 0x38d5, 0x0040, 0x2537, 0x62a0, 0x2019, 0x0005, 0x0c7e,
-+      0x1078, 0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08,
-+      0x1078, 0x747b, 0x1078, 0x39fd, 0x0078, 0x250d, 0x1078, 0x2d10,
-+      0x0040, 0x253b, 0x1078, 0x39fd, 0x2208, 0x0078, 0x250d, 0x157e,
-+      0x0d7e, 0x0e7e, 0x2069, 0x77ff, 0x6810, 0x6914, 0xa10a, 0x00c8,
-+      0x277b, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000,
-+      0x20a9, 0x007e, 0x2069, 0x7820, 0x2d04, 0xa075, 0x0040, 0x2790,
-+      0x704c, 0x1078, 0x279a, 0xa210, 0x7080, 0x1078, 0x279a, 0xa318,
-+      0x8d68, 0x00f0, 0x2784, 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f,
-+      0x0078, 0x250d, 0x0f7e, 0x017e, 0xa07d, 0x0040, 0x27a9, 0x2001,
-+      0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0040, 0x27a9, 0x2178, 0x0078,
-+      0x27a1, 0x017f, 0x0f7f, 0x007c, 0x2069, 0x77ff, 0x6910, 0x629c,
-+      0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x614c, 0xa190, 0x2329,
-+      0x2214, 0xa294, 0x00ff, 0x6068, 0xa084, 0xff00, 0xa215, 0x6364,
-+      0x0078, 0x250d, 0x613c, 0x6240, 0x0078, 0x250d, 0x1078, 0x2d22,
-+      0x0040, 0x253b, 0x0078, 0x250d, 0x1078, 0x2d22, 0x0040, 0x253b,
-+      0x6244, 0x6338, 0x0078, 0x250d, 0x613c, 0x6240, 0x7824, 0x603e,
-+      0x7b28, 0x6342, 0x2069, 0x7751, 0x831f, 0xa305, 0x6816, 0x0078,
-+      0x250d, 0x1078, 0x2d22, 0x0040, 0x253b, 0x0078, 0x250d, 0x1078,
-+      0x2d22, 0x0040, 0x253b, 0x7828, 0xa00d, 0x0040, 0x253b, 0x782c,
-+      0xa005, 0x0040, 0x253b, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078,
-+      0x250d, 0x7d38, 0x7c3c, 0x0078, 0x25ba, 0x7824, 0xa09c, 0x00ff,
-+      0xa39a, 0x0003, 0x00c8, 0x2537, 0x624c, 0xa084, 0xff00, 0x8007,
-+      0xa206, 0x00c0, 0x2815, 0x2001, 0x7740, 0x2009, 0x000c, 0x7a2c,
-+      0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x81ff, 0x00c0, 0x2537,
-+      0x1078, 0x2d22, 0x0040, 0x253b, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x00c0, 0x2537, 0x0c7e, 0x1078, 0x2cf8, 0x0c7f, 0x0040,
-+      0x2537, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x6b56,
-+      0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x2837, 0x007c, 0x6830,
-+      0xa086, 0x0100, 0x0040, 0x2537, 0xad80, 0x000e, 0x2009, 0x000c,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x1078, 0x2cf8,
-+      0x0040, 0x2537, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0x1078, 0x2d42, 0x701b, 0x2855, 0x007c, 0xade8, 0x000d, 0x6800,
-+      0xa005, 0x0040, 0x253b, 0x6804, 0xd0ac, 0x0040, 0x2862, 0xd0a4,
-+      0x0040, 0x253b, 0xd094, 0x0040, 0x286d, 0x0c7e, 0x2061, 0x0100,
-+      0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x2878,
-+      0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f,
-+      0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, 0x288d, 0xd084,
-+      0x0040, 0x288d, 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x253b, 0xa288,
-+      0x2329, 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, 0x2896,
-+      0x6828, 0xa08a, 0x007f, 0x00c8, 0x253b, 0x604e, 0x6808, 0xa08a,
-+      0x0100, 0x0048, 0x253b, 0xa08a, 0x0841, 0x00c8, 0x253b, 0xa084,
-+      0x0007, 0x00c0, 0x253b, 0x680c, 0xa005, 0x0040, 0x253b, 0x6810,
-+      0xa005, 0x0040, 0x253b, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x253b,
-+      0x8001, 0x0040, 0x253b, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x253b,
-+      0x8001, 0x0040, 0x253b, 0x20a9, 0x001c, 0x2d98, 0x2069, 0x7751,
-+      0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, 0xa084,
-+      0x00ff, 0x6042, 0x1078, 0x3d89, 0x1078, 0x3b5f, 0x6000, 0xa086,
-+      0x0000, 0x00c0, 0x2911, 0x6808, 0x602a, 0x1078, 0x1de4, 0x6818,
-+      0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016,
-+      0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x28f1, 0x6830,
-+      0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0078,
-+      0x28f3, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x1078,
-+      0x4722, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000,
-+      0x0c7f, 0x60b4, 0xa005, 0x0040, 0x290d, 0x6003, 0x0001, 0x2091,
-+      0x301d, 0x1078, 0x3591, 0x0078, 0x2911, 0x6003, 0x0004, 0x2091,
-+      0x301d, 0x0078, 0x250d, 0x6000, 0xa086, 0x0000, 0x0040, 0x2537,
-+      0x2069, 0x7751, 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, 0x2009,
-+      0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x81ff,
-+      0x00c0, 0x2537, 0x1078, 0x3591, 0x0078, 0x250d, 0x81ff, 0x00c0,
-+      0x2537, 0x617c, 0x81ff, 0x0040, 0x2948, 0x703f, 0x0000, 0x2001,
-+      0x7dc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x127e,
-+      0x2091, 0x8000, 0x1078, 0x2d46, 0x701b, 0x250a, 0x127f, 0x007c,
-+      0x703f, 0x0001, 0x0d7e, 0x2069, 0x7dc0, 0x20a9, 0x0040, 0x20a1,
-+      0x7dc0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, 0x2329, 0x210c,
-+      0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506,
-+      0x0040, 0x297a, 0x1078, 0x384c, 0x00c0, 0x297a, 0x6014, 0x821c,
-+      0x0048, 0x2972, 0xa398, 0x7dc0, 0xa085, 0xff00, 0x8007, 0x201a,
-+      0x0078, 0x2979, 0xa398, 0x7dc0, 0x2324, 0xa4a4, 0xff00, 0xa405,
-+      0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x2981, 0x0078,
-+      0x295e, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f, 0x20a9,
-+      0x0040, 0x20a1, 0x7dc0, 0x2099, 0x7dc0, 0x1078, 0x35da, 0x0078,
-+      0x2937, 0x1078, 0x2d22, 0x0040, 0x253b, 0x0c7e, 0x1078, 0x2cf8,
-+      0x0c7f, 0x0040, 0x2537, 0x2001, 0x7752, 0x2004, 0xd0b4, 0x0040,
-+      0x29be, 0x6000, 0xd08c, 0x00c0, 0x29be, 0x6004, 0xa084, 0x00ff,
-+      0xa086, 0x0006, 0x00c0, 0x29be, 0x6837, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x1078, 0x6b8e, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b,
-+      0x29ba, 0x007c, 0x1078, 0x2d22, 0x0040, 0x253b, 0x20a9, 0x002b,
-+      0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80,
-+      0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x35da, 0x20a9,
-+      0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x1078,
-+      0x35da, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0x0078, 0x2d46, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040,
-+      0x253b, 0x1078, 0x3a15, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537,
-+      0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x1078, 0x2d22, 0x0040,
-+      0x253b, 0x1078, 0x3a71, 0x0040, 0x2537, 0x2019, 0x0004, 0x1078,
-+      0x3a2b, 0x7924, 0x810f, 0x7a28, 0x1078, 0x2a08, 0x0078, 0x250d,
-+      0xa186, 0x00ff, 0x0040, 0x2a10, 0x1078, 0x2a20, 0x0078, 0x2a1f,
-+      0x2029, 0x007e, 0x2061, 0x7700, 0x644c, 0x2400, 0xa506, 0x0040,
-+      0x2a1c, 0x2508, 0x1078, 0x2a20, 0x8529, 0x00c8, 0x2a15, 0x007c,
-+      0x1078, 0x384c, 0x00c0, 0x2a2b, 0x2200, 0x8003, 0x800b, 0x810b,
-+      0xa108, 0x1078, 0x4696, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x1078,
-+      0x2d10, 0x0040, 0x253b, 0x1078, 0x38d5, 0x0040, 0x2537, 0x1078,
-+      0x3a20, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10,
-+      0x0040, 0x253b, 0x1078, 0x38d5, 0x0040, 0x2537, 0x1078, 0x3a0a,
-+      0x0078, 0x250d, 0x6100, 0x0078, 0x250d, 0x1078, 0x2d22, 0x0040,
-+      0x253b, 0x6004, 0xa086, 0x0707, 0x0040, 0x253b, 0x2001, 0x7700,
-+      0x2004, 0xa086, 0x0003, 0x00c0, 0x2537, 0x0d7e, 0xace8, 0x000a,
-+      0x7924, 0xd184, 0x0040, 0x2a66, 0xace8, 0x0006, 0x680c, 0x8007,
-+      0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, 0x8217,
-+      0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, 0x250d, 0x7824, 0xa084,
-+      0x00ff, 0xa086, 0x00ff, 0x0040, 0x2a80, 0x81ff, 0x00c0, 0x2537,
-+      0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x7924, 0xa18c, 0xff00,
-+      0x810f, 0xa186, 0x00ff, 0x0040, 0x2a94, 0xa182, 0x007f, 0x00c8,
-+      0x253b, 0x2100, 0x1078, 0x2094, 0x027e, 0x0c7e, 0x127e, 0x2091,
-+      0x8000, 0x2061, 0x7949, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061,
-+      0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043,
-+      0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x35b6, 0x1078,
-+      0x4719, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078, 0x2a08,
-+      0x127f, 0x0c7f, 0x027f, 0x0078, 0x250d, 0x7924, 0xa18c, 0xff00,
-+      0x810f, 0x0c7e, 0x1078, 0x3811, 0x2c08, 0x0c7f, 0x00c0, 0x253b,
-+      0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x60bc, 0xd09c, 0x0040,
-+      0x2537, 0x1078, 0x2cf8, 0x0040, 0x2537, 0x6823, 0x0000, 0x7924,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2d42, 0x701b, 0x2ae1,
-+      0x007c, 0x2009, 0x0080, 0x1078, 0x384c, 0x00c0, 0x2aee, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x0040, 0x2af2, 0x2021, 0x400a,
-+      0x0078, 0x250f, 0x0d7e, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c,
-+      0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0040, 0x2b65,
-+      0xa0be, 0x0112, 0x0040, 0x2b65, 0xa0be, 0x0113, 0x0040, 0x2b65,
-+      0xa0be, 0x0114, 0x0040, 0x2b65, 0xa0be, 0x0117, 0x0040, 0x2b65,
-+      0xa0be, 0x011a, 0x0040, 0x2b65, 0xa0be, 0x0121, 0x0040, 0x2b5b,
-+      0xa0be, 0x0131, 0x0040, 0x2b5b, 0xa0be, 0x0171, 0x0040, 0x2b65,
-+      0xa0be, 0x0173, 0x0040, 0x2b65, 0xa0be, 0x01a1, 0x00c0, 0x2b2d,
-+      0x6830, 0x8007, 0x6832, 0x0078, 0x2b6b, 0xa0be, 0x0212, 0x0040,
-+      0x2b61, 0xa0be, 0x0213, 0x0040, 0x2b61, 0xa0be, 0x0214, 0x0040,
-+      0x2b53, 0xa0be, 0x0217, 0x0040, 0x2b4d, 0xa0be, 0x021a, 0x00c0,
-+      0x2b46, 0x6838, 0x8007, 0x683a, 0x0078, 0x2b65, 0xa0be, 0x0300,
-+      0x0040, 0x2b65, 0x0d7f, 0x0078, 0x253b, 0xad80, 0x0010, 0x20a9,
-+      0x0007, 0x1078, 0x2ba1, 0xad80, 0x000e, 0x20a9, 0x0001, 0x1078,
-+      0x2ba1, 0x0078, 0x2b65, 0xad80, 0x000c, 0x1078, 0x2baf, 0x0078,
-+      0x2b6b, 0xad80, 0x000e, 0x1078, 0x2baf, 0xad80, 0x000c, 0x20a9,
-+      0x0001, 0x1078, 0x2ba1, 0x0c7e, 0x1078, 0x2cf8, 0x0040, 0x2b96,
-+      0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119, 0x684f, 0x0020, 0x685b,
-+      0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e,
-+      0x6d92, 0x6996, 0x689b, 0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x1078, 0x6b72, 0x0040,
-+      0x2537, 0x7007, 0x0003, 0x701b, 0x2b9a, 0x007c, 0x0c7f, 0x0d7f,
-+      0x0078, 0x2537, 0x6820, 0xa086, 0x8001, 0x0040, 0x2537, 0x0078,
-+      0x250d, 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a,
-+      0x8108, 0x280a, 0x8108, 0x00f0, 0x2ba3, 0x017f, 0x007c, 0x017e,
-+      0x0a7e, 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054,
-+      0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108,
-+      0x280a, 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x00c0, 0x2537,
-+      0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
-+      0x253b, 0xa182, 0x00ff, 0x00c8, 0x253b, 0x7a2c, 0x7b28, 0x6064,
-+      0xa306, 0x00c0, 0x2be3, 0x6068, 0xa24e, 0x0040, 0x253b, 0xa9cc,
-+      0xff00, 0x0040, 0x253b, 0x0c7e, 0x1078, 0x2c57, 0x2c68, 0x0c7f,
-+      0x0040, 0x2c0a, 0xa0c6, 0x4000, 0x00c0, 0x2bf0, 0x0078, 0x2c07,
-+      0xa0c6, 0x4007, 0x00c0, 0x2bf7, 0x2408, 0x0078, 0x2c07, 0xa0c6,
-+      0x4008, 0x00c0, 0x2bff, 0x2708, 0x2610, 0x0078, 0x2c07, 0xa0c6,
-+      0x4009, 0x00c0, 0x2c05, 0x0078, 0x2c07, 0x2001, 0x4006, 0x2020,
-+      0x0078, 0x250f, 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078,
-+      0x5cb4, 0x0040, 0x2c45, 0x2d00, 0x601a, 0x2e58, 0x0e7f, 0x0e7e,
-+      0x0c7e, 0x1078, 0x2cf8, 0x0c7f, 0x2b70, 0x0040, 0x2537, 0x6837,
-+      0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+      0x127e, 0x2091, 0x8000, 0x1078, 0x22b5, 0x127f, 0x601f, 0x0001,
-+      0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4,
-+      0x127e, 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009,
-+      0x0002, 0x1078, 0x5d41, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f,
-+      0x017f, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x2c50, 0x007c,
-+      0x6830, 0xa086, 0x0100, 0x00c0, 0x250d, 0x0078, 0x2537, 0x0e7e,
-+      0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
-+      0x78a0, 0x2e04, 0xa005, 0x00c0, 0x2c6b, 0x2100, 0xa406, 0x0040,
-+      0x2ca8, 0x0078, 0x2c9c, 0x2068, 0x6f10, 0x2700, 0xa306, 0x00c0,
-+      0x2c8d, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x2c8d, 0x2400, 0xa106,
-+      0x00c0, 0x2c89, 0x2d60, 0xd884, 0x0040, 0x2cae, 0x6004, 0xa084,
-+      0x00ff, 0xa086, 0x0006, 0x00c0, 0x2cae, 0x2001, 0x4000, 0x0078,
-+      0x2caf, 0x2001, 0x4007, 0x0078, 0x2caf, 0x2400, 0xa106, 0x00c0,
-+      0x2c9c, 0x6e14, 0x87ff, 0x00c0, 0x2c98, 0x86ff, 0x0040, 0x2ca8,
-+      0x2001, 0x4008, 0x0078, 0x2caf, 0x8420, 0x8e70, 0x00f0, 0x2c61,
-+      0x2001, 0x4009, 0x0078, 0x2caf, 0x2001, 0x0001, 0x0078, 0x2caf,
-+      0x1078, 0x3811, 0x00c0, 0x2ca4, 0x6312, 0x6216, 0xa006, 0xa005,
-+      0x0d7f, 0x0e7f, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2cf8,
-+      0x0040, 0x2537, 0x6837, 0x0000, 0x7824, 0xa005, 0x0040, 0x253b,
-+      0xa096, 0x00ff, 0x0040, 0x2cc8, 0xa092, 0x0004, 0x00c8, 0x253b,
-+      0x2010, 0x2d18, 0x1078, 0x2277, 0x0040, 0x2537, 0x7007, 0x0003,
-+      0x701b, 0x2cd3, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2537,
-+      0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x7924, 0xa18c, 0xff00,
-+      0x810f, 0xa182, 0x0080, 0x0048, 0x253b, 0xa182, 0x00ff, 0x00c8,
-+      0x253b, 0x127e, 0x2091, 0x8000, 0x1078, 0x6a99, 0x00c0, 0x2cf5,
-+      0x1078, 0x3834, 0x127f, 0x0078, 0x250d, 0x127f, 0x0078, 0x2537,
-+      0x1078, 0x1327, 0x0040, 0x2d0f, 0xa006, 0x6802, 0x7010, 0xa005,
-+      0x00c0, 0x2d07, 0x2d00, 0x7012, 0x7016, 0x0078, 0x2d0d, 0x7014,
-+      0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x007c,
-+      0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x384c, 0x00c0, 0x2d1f,
-+      0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x2d20, 0xa066,
-+      0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, 0x384c,
-+      0x00c0, 0x2d30, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0048, 0x2d31,
-+      0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, 0x2d3e,
-+      0x2168, 0x6904, 0x1078, 0x1340, 0x0078, 0x2d35, 0x7112, 0x7116,
-+      0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x2d48, 0x2031, 0x0000,
-+      0x2061, 0x77bd, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, 0x642e,
-+      0x6532, 0x2c10, 0x1078, 0x1377, 0x7007, 0x0002, 0x701b, 0x250d,
-+      0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001,
-+      0x777b, 0x2004, 0xa005, 0x00c0, 0x2d74, 0x0068, 0x2d74, 0x7818,
-+      0xd084, 0x00c0, 0x2d74, 0x781b, 0x0001, 0x7a22, 0x7b26, 0x7c2a,
-+      0x2091, 0x4080, 0x0078, 0x2d99, 0x017e, 0x0c7e, 0x0e7e, 0x2071,
-+      0x776d, 0x7138, 0xa182, 0x0008, 0x0048, 0x2d82, 0x7030, 0x2060,
-+      0x0078, 0x2d93, 0x7030, 0xa0e0, 0x0008, 0xac82, 0x77bd, 0x0048,
-+      0x2d8b, 0x2061, 0x777d, 0x2c00, 0x7032, 0x81ff, 0x00c0, 0x2d91,
-+      0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, 0x0e7f, 0x0c7f,
-+      0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, 0x776d, 0x7038,
-+      0xa005, 0x0040, 0x2dd5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2dd4,
-+      0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x2dd3, 0x0c7e,
-+      0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
-+      0x6008, 0x782a, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, 0xa005,
-+      0x00c0, 0x2dc9, 0x7033, 0x777d, 0x7037, 0x777d, 0x0c7f, 0x0078,
-+      0x2dd3, 0xac80, 0x0008, 0xa0fa, 0x77bd, 0x0048, 0x2dd1, 0x2001,
-+      0x777d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, 0x027e,
-+      0x2001, 0x7752, 0x2004, 0xd0c4, 0x0040, 0x2de2, 0x2011, 0x8014,
-+      0x1078, 0x2d59, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x127e,
-+      0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, 0x3591, 0x127f,
-+      0x0078, 0x250d, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x00c0, 0x2dfd,
-+      0x61c8, 0xa10d, 0x61ca, 0x0078, 0x250d, 0x0078, 0x253b, 0x81ff,
-+      0x00c0, 0x2537, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2537, 0x2001,
-+      0x7752, 0x2004, 0xd0a4, 0x00c0, 0x2537, 0x1078, 0x2d22, 0x0040,
-+      0x253b, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2e1c,
-+      0x7828, 0xa005, 0x0040, 0x250d, 0x0c7e, 0x1078, 0x2cf8, 0x0c7f,
-+      0x0040, 0x2537, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x1078, 0x6bfb, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b,
-+      0x2e32, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2537, 0x0078,
-+      0x250d, 0x2001, 0x7700, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2537,
-+      0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2cf8, 0x0040,
-+      0x2537, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f,
-+      0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x384c, 0x00c0,
-+      0x2e7f, 0x6004, 0xa0c6, 0x0707, 0x0040, 0x2e7f, 0xa084, 0x00ff,
-+      0xa0c6, 0x0006, 0x00c0, 0x2e7f, 0x87ff, 0x0040, 0x2e72, 0xac80,
-+      0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, 0x2baf,
-+      0x0078, 0x2e7b, 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004,
-+      0x53a3, 0x1078, 0x2baf, 0x21a2, 0x94a0, 0xa6b0, 0x0005, 0x8108,
-+      0xa186, 0x007e, 0x0040, 0x2e8a, 0xa686, 0x0028, 0x0040, 0x2e93,
-+      0x0078, 0x2e55, 0x86ff, 0x00c0, 0x2e91, 0x7120, 0x810b, 0x0078,
-+      0x250d, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a,
-+      0x2061, 0x77bd, 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226,
-+      0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x1377, 0x7007, 0x0002,
-+      0x701b, 0x2eab, 0x007c, 0x702c, 0xa005, 0x00c0, 0x2ebd, 0x711c,
-+      0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0x77bd, 0x6224,
-+      0x6328, 0x642c, 0x6530, 0x0078, 0x2e55, 0x7120, 0x810b, 0x0078,
-+      0x250d, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7700,
-+      0x6044, 0xd0a4, 0x00c0, 0x2eea, 0xd084, 0x0040, 0x2ed3, 0x1078,
-+      0x3015, 0x0078, 0x2ee6, 0xd08c, 0x0040, 0x2eda, 0x1078, 0x2f2c,
-+      0x0078, 0x2ee6, 0xd094, 0x0040, 0x2ee1, 0x1078, 0x2f0f, 0x0078,
-+      0x2ee6, 0xd09c, 0x0040, 0x2ee6, 0x1078, 0x2ef4, 0x0e7f, 0x0c7f,
-+      0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0, 0x2ef1, 0xc19d,
-+      0x612a, 0x017f, 0x0078, 0x2ee6, 0x6043, 0x0040, 0x6043, 0x0000,
-+      0x706f, 0x0000, 0x7087, 0x0001, 0x70a7, 0x0000, 0x70bf, 0x0000,
-+      0x2009, 0x7dc0, 0x200b, 0x0000, 0x707f, 0x0000, 0x7073, 0x000f,
-+      0x2009, 0x000f, 0x2011, 0x3551, 0x1078, 0x4719, 0x007c, 0x7070,
-+      0xa005, 0x00c0, 0x2f2b, 0x2011, 0x3551, 0x1078, 0x4689, 0x6043,
-+      0x0020, 0x6043, 0x0000, 0x6044, 0xd08c, 0x00c0, 0x2f27, 0x7083,
-+      0x0000, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x2f2b, 0x7077,
-+      0x0000, 0x0078, 0x2f2b, 0x007c, 0x7074, 0xa08a, 0x0003, 0x00c8,
-+      0x2f35, 0x1079, 0x2f38, 0x0078, 0x2f37, 0x1078, 0x12cd, 0x007c,
-+      0x2f3b, 0x2f8a, 0x3014, 0x0f7e, 0x7077, 0x0001, 0x20e1, 0xa000,
-+      0x20e1, 0x8700, 0x1078, 0x1de4, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x2079, 0x7c00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
-+      0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
-+      0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
-+      0x782f, 0x0000, 0x2079, 0x7c0c, 0x207b, 0x1101, 0x7807, 0x0000,
-+      0x2099, 0x7705, 0x20a1, 0x7c0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
-+      0x7c12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x7c00, 0x20a1,
-+      0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
-+      0x1078, 0x3578, 0x0f7f, 0x707b, 0x0000, 0x6043, 0x0008, 0x6043,
-+      0x0000, 0x007c, 0x0d7e, 0x7078, 0x707b, 0x0000, 0xa025, 0x0040,
-+      0x2ffe, 0x6020, 0xd0b4, 0x00c0, 0x2ffc, 0x7184, 0x81ff, 0x0040,
-+      0x2fe5, 0xa486, 0x000c, 0x00c0, 0x2ff0, 0xa480, 0x0018, 0x8004,
-+      0x20a8, 0x2011, 0x7c80, 0x2019, 0x7c00, 0x220c, 0x2304, 0xa106,
-+      0x00c0, 0x2fbc, 0x8210, 0x8318, 0x00f0, 0x2fa5, 0x6043, 0x0004,
-+      0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x7077, 0x0002,
-+      0x7083, 0x0002, 0x0078, 0x2ffc, 0x2069, 0x7c80, 0x6930, 0xa18e,
-+      0x1101, 0x00c0, 0x2ff0, 0x6834, 0xa005, 0x00c0, 0x2ff0, 0x6900,
-+      0xa18c, 0x00ff, 0x00c0, 0x2fd0, 0x6804, 0xa005, 0x0040, 0x2fe5,
-+      0x2011, 0x7c8e, 0x2019, 0x7705, 0x20a9, 0x0004, 0x220c, 0x2304,
-+      0xa102, 0x0048, 0x2fe3, 0x00c0, 0x2ff0, 0x8210, 0x8318, 0x00f0,
-+      0x2fd6, 0x0078, 0x2ff0, 0x7087, 0x0000, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6,
-+      0x6043, 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2ffc,
-+      0x60c3, 0x000c, 0x1078, 0x3578, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
-+      0x00c0, 0x2ffc, 0x60c3, 0x000c, 0x2011, 0x7940, 0x2013, 0x0000,
-+      0x707b, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+      0x1078, 0x5693, 0x0078, 0x2ffc, 0x007c, 0x7080, 0xa08a, 0x001d,
-+      0x00c8, 0x301e, 0x1079, 0x3021, 0x0078, 0x3020, 0x1078, 0x12cd,
-+      0x007c, 0x3045, 0x3054, 0x3085, 0x309a, 0x30ca, 0x30f2, 0x3122,
-+      0x314c, 0x317c, 0x31a2, 0x31eb, 0x320d, 0x3231, 0x3247, 0x326f,
-+      0x3282, 0x328b, 0x32a4, 0x32d2, 0x32fa, 0x3328, 0x3352, 0x339a,
-+      0x33cb, 0x33ed, 0x342b, 0x3451, 0x346a, 0x3477, 0x7003, 0x0007,
-+      0x6004, 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b, 0xbc94, 0x608f,
-+      0xf0f0, 0x6043, 0x0002, 0x7083, 0x0001, 0x2009, 0x07d0, 0x2011,
-+      0x3558, 0x1078, 0x467c, 0x007c, 0x0f7e, 0x7078, 0xa086, 0x0014,
-+      0x00c0, 0x3083, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3083,
-+      0x2079, 0x7c80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3081, 0x7834,
-+      0xa005, 0x00c0, 0x3081, 0x7a38, 0xd2fc, 0x0040, 0x3077, 0x70a4,
-+      0xa005, 0x00c0, 0x3077, 0x1078, 0x3611, 0x70a7, 0x0001, 0x2011,
-+      0x3558, 0x1078, 0x4689, 0x7083, 0x0010, 0x1078, 0x328b, 0x0078,
-+      0x3083, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0003, 0x6043,
-+      0x0004, 0x1078, 0x35e2, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
-+      0x000a, 0x20a3, 0x0000, 0x00f0, 0x3091, 0x60c3, 0x0014, 0x1078,
-+      0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x30c8, 0x2011,
-+      0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x30c4, 0x2079,
-+      0x7c80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x30c4, 0x7834, 0xa005,
-+      0x00c0, 0x30c4, 0x7a38, 0xd2fc, 0x0040, 0x30be, 0x70a4, 0xa005,
-+      0x00c0, 0x30be, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0004,
-+      0x1078, 0x30ca, 0x0078, 0x30c8, 0x7083, 0x0002, 0x707b, 0x0000,
-+      0x0f7f, 0x007c, 0x7083, 0x0005, 0x1078, 0x35e2, 0x20a3, 0x1103,
-+      0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
-+      0x30e4, 0x714c, 0xa186, 0xffff, 0x0040, 0x30e4, 0x1078, 0x351c,
-+      0x0040, 0x30e4, 0x1078, 0x3611, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+      0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3120, 0x2011,
-+      0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x311c, 0x2079,
-+      0x7c80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x311c, 0x7834, 0xa005,
-+      0x00c0, 0x311c, 0x7a38, 0xd2fc, 0x0040, 0x3116, 0x70a4, 0xa005,
-+      0x00c0, 0x3116, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0006,
-+      0x1078, 0x3122, 0x0078, 0x3120, 0x7083, 0x0002, 0x707b, 0x0000,
-+      0x0f7f, 0x007c, 0x7083, 0x0007, 0x1078, 0x35e2, 0x20a3, 0x1104,
-+      0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
-+      0x313e, 0x7150, 0xa186, 0xffff, 0x0040, 0x313e, 0xa180, 0x2329,
-+      0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x351c, 0x20a9, 0x0008,
-+      0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0014, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-+      0x317a, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0,
-+      0x3176, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3176,
-+      0x7834, 0xa005, 0x00c0, 0x3176, 0x7a38, 0xd2fc, 0x0040, 0x3170,
-+      0x70a4, 0xa005, 0x00c0, 0x3170, 0x1078, 0x3611, 0x70a7, 0x0001,
-+      0x7083, 0x0008, 0x1078, 0x317c, 0x0078, 0x317a, 0x7083, 0x0002,
-+      0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0009, 0x1078, 0x35e2,
-+      0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x706c, 0xa005, 0x00c0,
-+      0x318f, 0x1078, 0x3486, 0x0040, 0x319f, 0x0078, 0x3199, 0x20a9,
-+      0x0008, 0x2099, 0x7c8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x0014, 0x1078, 0x3578, 0x0078, 0x31a1, 0x1078,
-+      0x303e, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x31e9, 0x2011,
-+      0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x31e5, 0x2079,
-+      0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x31e5, 0x7834, 0x2011,
-+      0x0100, 0xa21e, 0x00c0, 0x31ce, 0x7a38, 0xd2fc, 0x0040, 0x31c8,
-+      0x70a4, 0xa005, 0x00c0, 0x31c8, 0x1078, 0x3611, 0x70a7, 0x0001,
-+      0x7083, 0x000a, 0x1078, 0x31eb, 0x0078, 0x31e9, 0xa005, 0x00c0,
-+      0x31e5, 0x7a38, 0xd2fc, 0x0040, 0x31dd, 0x70a4, 0xa005, 0x00c0,
-+      0x31dd, 0x1078, 0x3611, 0x70a7, 0x0001, 0x707f, 0x0000, 0x7083,
-+      0x000e, 0x1078, 0x326f, 0x0078, 0x31e9, 0x7083, 0x0002, 0x707b,
-+      0x0000, 0x0f7f, 0x007c, 0x7083, 0x000b, 0x2011, 0x7c0e, 0x22a0,
-+      0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
-+      0x0000, 0x41a4, 0x1078, 0x35e2, 0x20a3, 0x1106, 0x20a3, 0x0000,
-+      0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
-+      0x60c3, 0x0084, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005,
-+      0x0040, 0x322f, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084,
-+      0x00c0, 0x322b, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1106, 0x00c0,
-+      0x322b, 0x7834, 0xa005, 0x00c0, 0x322b, 0x7083, 0x000c, 0x1078,
-+      0x3231, 0x0078, 0x322f, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f,
-+      0x007c, 0x7083, 0x000d, 0x1078, 0x35e2, 0x20a3, 0x1107, 0x20a3,
-+      0x0000, 0x2099, 0x7c8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x3578, 0x007c, 0x0f7e,
-+      0x7078, 0xa005, 0x0040, 0x326d, 0x2011, 0x3558, 0x1078, 0x4689,
-+      0xa086, 0x0084, 0x00c0, 0x3269, 0x2079, 0x7c80, 0x7a30, 0xa296,
-+      0x1107, 0x00c0, 0x3269, 0x7834, 0xa005, 0x00c0, 0x3269, 0x707f,
-+      0x0001, 0x1078, 0x35d4, 0x7083, 0x000e, 0x1078, 0x326f, 0x0078,
-+      0x326d, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083,
-+      0x000f, 0x707b, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043,
-+      0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x3558, 0x1078,
-+      0x467c, 0x007c, 0x7078, 0xa005, 0x0040, 0x328a, 0x2011, 0x3558,
-+      0x1078, 0x4689, 0x007c, 0x7083, 0x0011, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018,
-+      0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3,
-+      0x0014, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-+      0x32d0, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0,
-+      0x32ce, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x32ce,
-+      0x7834, 0xa005, 0x00c0, 0x32ce, 0x7a38, 0xd2fc, 0x0040, 0x32c8,
-+      0x70a4, 0xa005, 0x00c0, 0x32c8, 0x1078, 0x3611, 0x70a7, 0x0001,
-+      0x7083, 0x0012, 0x1078, 0x32d2, 0x0078, 0x32d0, 0x707b, 0x0000,
-+      0x0f7f, 0x007c, 0x7083, 0x0013, 0x1078, 0x35ee, 0x20a3, 0x1103,
-+      0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
-+      0x32ec, 0x714c, 0xa186, 0xffff, 0x0040, 0x32ec, 0x1078, 0x351c,
-+      0x0040, 0x32ec, 0x1078, 0x3611, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+      0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3326, 0x2011,
-+      0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x3324, 0x2079,
-+      0x7c80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3324, 0x7834, 0xa005,
-+      0x00c0, 0x3324, 0x7a38, 0xd2fc, 0x0040, 0x331e, 0x70a4, 0xa005,
-+      0x00c0, 0x331e, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0014,
-+      0x1078, 0x3328, 0x0078, 0x3326, 0x707b, 0x0000, 0x0f7f, 0x007c,
-+      0x7083, 0x0015, 0x1078, 0x35ee, 0x20a3, 0x1104, 0x20a3, 0x0000,
-+      0x3430, 0x2011, 0x7c8e, 0x706c, 0xa006, 0x00c0, 0x3344, 0x7150,
-+      0xa186, 0xffff, 0x0040, 0x3344, 0xa180, 0x2329, 0x200c, 0xa18c,
-+      0xff00, 0x810f, 0x1078, 0x351c, 0x20a9, 0x0008, 0x2298, 0x26a0,
-+      0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+      0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3398, 0x2011,
-+      0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x3396, 0x2079,
-+      0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x3396, 0x7834, 0x2011,
-+      0x0100, 0xa21e, 0x00c0, 0x337f, 0x7a38, 0xd2f4, 0x0040, 0x3372,
-+      0x70bf, 0x0008, 0xd2fc, 0x0040, 0x337d, 0x70a4, 0xa005, 0x00c0,
-+      0x337d, 0x1078, 0x3611, 0x70a7, 0x0001, 0x0078, 0x3390, 0xa005,
-+      0x00c0, 0x3396, 0x7a38, 0xd2fc, 0x0040, 0x338e, 0x70a4, 0xa005,
-+      0x00c0, 0x338e, 0x1078, 0x3611, 0x70a7, 0x0001, 0x707f, 0x0000,
-+      0x7083, 0x0016, 0x1078, 0x339a, 0x0078, 0x3398, 0x707b, 0x0000,
-+      0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c80,
-+      0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0x7c8e,
-+      0x7083, 0x0017, 0x0078, 0x33ae, 0x7083, 0x001b, 0x706c, 0xa005,
-+      0x00c0, 0x33b8, 0x1078, 0x3486, 0x0040, 0x33c8, 0x0078, 0x33c2,
-+      0x20a9, 0x0008, 0x2099, 0x7c8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x3578, 0x0078, 0x33ca,
-+      0x1078, 0x303e, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x33eb,
-+      0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084, 0x00c0, 0x33e9,
-+      0x2079, 0x7c80, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x33e9, 0x7834,
-+      0xa005, 0x00c0, 0x33e9, 0x7083, 0x0018, 0x1078, 0x33ed, 0x0078,
-+      0x33eb, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0019, 0x1078,
-+      0x35ee, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x7c8e,
-+      0x2039, 0x7c0e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x2728, 0x2514,
-+      0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
-+      0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0x7c0e, 0x2414,
-+      0xa38c, 0x0001, 0x0040, 0x3418, 0xa294, 0xff00, 0x0078, 0x341b,
-+      0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
-+      0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
-+      0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x344f,
-+      0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084, 0x00c0, 0x344d,
-+      0x2079, 0x7c80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x344d, 0x7834,
-+      0xa005, 0x00c0, 0x344d, 0x707f, 0x0001, 0x1078, 0x35d4, 0x7083,
-+      0x001a, 0x1078, 0x3451, 0x0078, 0x344f, 0x707b, 0x0000, 0x0f7f,
-+      0x007c, 0x7083, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
-+      0x7c80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018, 0xa080, 0x0007,
-+      0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
-+      0x3578, 0x007c, 0x7078, 0xa005, 0x0040, 0x3476, 0x2011, 0x3558,
-+      0x1078, 0x4689, 0x7083, 0x001c, 0x1078, 0x3477, 0x007c, 0x707b,
-+      0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0001, 0x2009,
-+      0x07d0, 0x2011, 0x3558, 0x1078, 0x467c, 0x007c, 0x087e, 0x097e,
-+      0x2029, 0x7752, 0x252c, 0x20a9, 0x0008, 0x2041, 0x7c0e, 0x28a0,
-+      0x2099, 0x7c8e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4,
-+      0x0040, 0x349c, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6,
-+      0xffff, 0x00c0, 0x34ae, 0xd5d4, 0x0040, 0x34a9, 0x8210, 0x0078,
-+      0x34aa, 0x8211, 0x00f0, 0x349c, 0x0078, 0x3513, 0x82ff, 0x00c0,
-+      0x34c0, 0xd5d4, 0x0040, 0x34ba, 0xa1a6, 0x3fff, 0x0040, 0x34a6,
-+      0x0078, 0x34be, 0xa1a6, 0x3fff, 0x0040, 0x3513, 0xa18d, 0xc000,
-+      0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0040, 0x34c9, 0x2019,
-+      0x0010, 0x2120, 0xd5d4, 0x0040, 0x34d0, 0x8423, 0x0078, 0x34d1,
-+      0x8424, 0x00c8, 0x34de, 0xd5d4, 0x0040, 0x34d9, 0x8319, 0x0078,
-+      0x34da, 0x8318, 0x00f0, 0x34ca, 0x0078, 0x3513, 0x23a8, 0x2021,
-+      0x0001, 0x8426, 0x8425, 0x00f0, 0x34e2, 0x2328, 0x8529, 0xa2be,
-+      0x0007, 0x0040, 0x34f6, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a,
-+      0x007f, 0x27a8, 0xa5a8, 0x0010, 0x00f0, 0x34f2, 0x754e, 0xa5c8,
-+      0x2329, 0x292c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea,
-+      0x2018, 0x2304, 0xa405, 0x201a, 0x706f, 0x0001, 0x26a0, 0x2898,
-+      0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085,
-+      0x0001, 0x0078, 0x3519, 0xa006, 0x0078, 0x3519, 0xa006, 0x1078,
-+      0x12cd, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000, 0x2001,
-+      0x0007, 0xa39a, 0x0010, 0x0048, 0x3529, 0x8420, 0x8001, 0x0078,
-+      0x3521, 0x2118, 0x84ff, 0x0040, 0x3532, 0xa39a, 0x0010, 0x8421,
-+      0x00c0, 0x352d, 0x2021, 0x0001, 0x83ff, 0x0040, 0x353b, 0x8423,
-+      0x8319, 0x00c0, 0x3537, 0xa238, 0x2704, 0xa42c, 0x00c0, 0x3550,
-+      0xa405, 0x203a, 0x714e, 0xa1a0, 0x2329, 0x242c, 0xa5ac, 0x00ff,
-+      0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0001, 0xa084, 0x0000,
-+      0x007c, 0x0e7e, 0x2071, 0x7700, 0x7073, 0x0000, 0x0e7f, 0x007c,
-+      0x0e7e, 0x0f7e, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x569c,
-+      0x7004, 0xa084, 0x4000, 0x0040, 0x3569, 0x7003, 0x1000, 0x7003,
-+      0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0x7720, 0x2073, 0x0000,
-+      0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, 0x0e7f, 0x007c,
-+      0x127e, 0x2091, 0x8000, 0x2011, 0x7940, 0x2013, 0x0000, 0x707b,
-+      0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+      0x1078, 0x5693, 0x2009, 0x07d0, 0x2011, 0x3558, 0x1078, 0x4719,
-+      0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2009,
-+      0x00f7, 0x1078, 0x35fa, 0x2061, 0x7949, 0x601b, 0x0000, 0x601f,
-+      0x0000, 0x2061, 0x7700, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043,
-+      0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x35b6, 0x1078,
-+      0x467c, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, 0x0e7e, 0x007e,
-+      0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, 0x569c, 0x2071,
-+      0x0140, 0x7004, 0xa084, 0x4000, 0x0040, 0x35ca, 0x7003, 0x1000,
-+      0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x2025, 0x1078, 0x3591,
-+      0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0x7dc0,
-+      0x2099, 0x7c8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0,
-+      0x35da, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c00,
-+      0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x20a9, 0x000c,
-+      0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001,
-+      0x772c, 0x2004, 0xa005, 0x00c0, 0x360b, 0x6030, 0xa084, 0x00ff,
-+      0xa105, 0x0078, 0x360d, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f,
-+      0x007c, 0x017e, 0x047e, 0x2001, 0x7752, 0x2004, 0xd0a4, 0x0040,
-+      0x3624, 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0x7641, 0x2001,
-+      0x770c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x1078, 0x2293,
-+      0x047f, 0x017f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009, 0x7820,
-+      0xa006, 0x200a, 0x8108, 0x00f0, 0x3631, 0x157f, 0x007c, 0x0d7e,
-+      0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0x7751, 0xa006, 0x6002,
-+      0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2329, 0x231c,
-+      0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0,
-+      0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e,
-+      0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066,
-+      0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086,
-+      0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, 0x0d7e,
-+      0x60a4, 0xa06d, 0x0040, 0x3676, 0x1078, 0x1340, 0x60a7, 0x0000,
-+      0x60a8, 0xa06d, 0x0040, 0x367e, 0x1078, 0x1340, 0x60ab, 0x0000,
-+      0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814,
-+      0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f,
-+      0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff,
-+      0xa082, 0x4000, 0x00c8, 0x3737, 0xa18c, 0xff00, 0x810f, 0xa182,
-+      0x00ff, 0x00c8, 0x373d, 0x2001, 0x770c, 0x2004, 0xa084, 0x0003,
-+      0x00c0, 0x3720, 0xa188, 0x7820, 0x2104, 0xa065, 0x0040, 0x370e,
-+      0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x3714, 0x60a4,
-+      0xa00d, 0x0040, 0x36bf, 0x1078, 0x3a5c, 0x0040, 0x3708, 0x60a8,
-+      0xa00d, 0x0040, 0x36d9, 0x1078, 0x3aac, 0x00c0, 0x36d9, 0x694c,
-+      0xd1fc, 0x00c0, 0x36cf, 0x1078, 0x37d1, 0x0078, 0x3703, 0x1078,
-+      0x37a2, 0x694c, 0xd1ec, 0x00c0, 0x3703, 0x1078, 0x3931, 0x0078,
-+      0x3703, 0x694c, 0xa184, 0xa000, 0x0040, 0x36f3, 0xd1ec, 0x0040,
-+      0x36ec, 0xd1fc, 0x0040, 0x36e8, 0x1078, 0x3942, 0x0078, 0x36ef,
-+      0x1078, 0x3942, 0x0078, 0x36f3, 0xd1fc, 0x0040, 0x36f3, 0x1078,
-+      0x37a2, 0x0078, 0x3703, 0x6050, 0xa00d, 0x0040, 0x36fe, 0x2d00,
-+      0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x3703, 0x2d00, 0x6052,
-+      0x604e, 0x6803, 0x0000, 0x1078, 0x4960, 0xa006, 0x127f, 0x007c,
-+      0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001, 0x0028,
-+      0x2009, 0x0000, 0x0078, 0x3741, 0xa082, 0x0006, 0x00c8, 0x3720,
-+      0x60a0, 0xd0bc, 0x0040, 0x36b7, 0x2001, 0x0028, 0x0078, 0x3733,
-+      0x2009, 0x770c, 0x210c, 0xd18c, 0x0040, 0x372a, 0x2001, 0x0004,
-+      0x0078, 0x3733, 0xd184, 0x0040, 0x3731, 0x2001, 0x0004, 0x0078,
-+      0x3733, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001,
-+      0x0029, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001, 0x0029, 0x2009,
-+      0x0000, 0xa005, 0x127f, 0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff,
-+      0xa082, 0x4000, 0x00c8, 0x3787, 0xa18c, 0xff00, 0x810f, 0xa182,
-+      0x00ff, 0x00c8, 0x3777, 0xa188, 0x7820, 0x2104, 0xa065, 0x0040,
-+      0x3777, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x377d,
-+      0x684c, 0xd0ec, 0x0040, 0x376a, 0x1078, 0x3942, 0x1078, 0x37a2,
-+      0x0078, 0x3772, 0x1078, 0x37a2, 0x684c, 0xd0fc, 0x0040, 0x3772,
-+      0x1078, 0x3931, 0x1078, 0x398a, 0xa006, 0x0078, 0x378b, 0x2001,
-+      0x0028, 0x2009, 0x0000, 0x0078, 0x378b, 0xa082, 0x0006, 0x0048,
-+      0x3760, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x378b, 0x2001,
-+      0x0029, 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000,
-+      0x6050, 0xa00d, 0x0040, 0x379b, 0x2d00, 0x200a, 0x6803, 0x0000,
-+      0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000,
-+      0x0078, 0x3799, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040,
-+      0x37ae, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00, 0x6052,
-+      0x604e, 0x6803, 0x0000, 0x0078, 0x37ac, 0x127e, 0x2091, 0x8000,
-+      0x604c, 0xa06d, 0x0040, 0x37c3, 0x6800, 0xa005, 0x00c0, 0x37c1,
-+      0x6052, 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040,
-+      0x37d0, 0x6800, 0xa005, 0x00c0, 0x37ce, 0x6052, 0x604e, 0xad05,
-+      0x007c, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, 0x37db, 0x2d00,
-+      0x200a, 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x37da,
-+      0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200,
-+      0xa005, 0x0040, 0x37ee, 0xc285, 0x0078, 0x37ef, 0xc284, 0x6202,
-+      0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000,
-+      0x6218, 0x2260, 0x6204, 0xa294, 0xff00, 0xa215, 0x6206, 0x0c7f,
-+      0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
-+      0x6204, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x0c7f, 0x127f,
-+      0x007c, 0x027e, 0xa182, 0x00ff, 0x0048, 0x381a, 0xa085, 0x0001,
-+      0x0078, 0x3832, 0xa190, 0x7820, 0x2204, 0xa065, 0x00c0, 0x3831,
-+      0x017e, 0x0d7e, 0x1078, 0x130c, 0x2d60, 0x0d7f, 0x017f, 0x0040,
-+      0x3816, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x1078,
-+      0x3637, 0xa006, 0x027f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
-+      0x383d, 0xa085, 0x0001, 0x0078, 0x384a, 0x0d7e, 0xa190, 0x7820,
-+      0x2204, 0xa06d, 0x0040, 0x3848, 0x2013, 0x0000, 0x1078, 0x1340,
-+      0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
-+      0x3855, 0xa085, 0x0001, 0x0078, 0x385c, 0xa188, 0x7820, 0x2104,
-+      0xa065, 0x0040, 0x3851, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
-+      0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
-+      0x6002, 0x2069, 0x7c8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
-+      0xa10a, 0x0048, 0x3874, 0x603a, 0x6814, 0x6066, 0x2099, 0x7c96,
-+      0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0x7c9a,
-+      0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0x7cae,
-+      0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
-+      0xa182, 0x0211, 0x00c8, 0x3898, 0x2009, 0x0008, 0x0078, 0x38c2,
-+      0xa182, 0x0259, 0x00c8, 0x38a0, 0x2009, 0x0007, 0x0078, 0x38c2,
-+      0xa182, 0x02c1, 0x00c8, 0x38a8, 0x2009, 0x0006, 0x0078, 0x38c2,
-+      0xa182, 0x0349, 0x00c8, 0x38b0, 0x2009, 0x0005, 0x0078, 0x38c2,
-+      0xa182, 0x0421, 0x00c8, 0x38b8, 0x2009, 0x0004, 0x0078, 0x38c2,
-+      0xa182, 0x0581, 0x00c8, 0x38c0, 0x2009, 0x0003, 0x0078, 0x38c2,
-+      0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c,
-+      0x0e7e, 0x2071, 0x7c8d, 0x2e04, 0x6896, 0x2071, 0x7c8e, 0x7004,
-+      0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, 0x0d7e, 0x127e, 0x2091,
-+      0x8000, 0x60a4, 0xa06d, 0x0040, 0x38f9, 0x6900, 0x81ff, 0x00c0,
-+      0x390d, 0x6a04, 0xa282, 0x0010, 0x00c8, 0x3912, 0xad88, 0x0004,
-+      0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040, 0x38f4, 0x8108,
-+      0x00f0, 0x38ea, 0x1078, 0x12cd, 0x260a, 0x8210, 0x6a06, 0x0078,
-+      0x390d, 0x1078, 0x130c, 0x0040, 0x3912, 0x2d00, 0x60a6, 0x6803,
-+      0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
-+      0x00f0, 0x3905, 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f,
-+      0x0d7f, 0x007c, 0xa006, 0x0078, 0x390f, 0x127e, 0x2091, 0x8000,
-+      0x1078, 0x3a55, 0x00c0, 0x392f, 0x200b, 0xffff, 0x0d7e, 0x60a4,
-+      0x2068, 0x6804, 0xa08a, 0x0002, 0x0048, 0x392a, 0x8001, 0x6806,
-+      0x0078, 0x392e, 0x1078, 0x1340, 0x60a7, 0x0000, 0x0d7f, 0x127f,
-+      0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3ac1, 0x0078, 0x393a,
-+      0x1078, 0x378d, 0x1078, 0x39ce, 0x00c0, 0x3938, 0x1078, 0x398a,
-+      0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d,
-+      0x0040, 0x3966, 0x6950, 0x81ff, 0x00c0, 0x397a, 0x6a54, 0xa282,
-+      0x0010, 0x00c8, 0x3987, 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104,
-+      0xa086, 0xffff, 0x0040, 0x3961, 0x8108, 0x00f0, 0x3957, 0x1078,
-+      0x12cd, 0x260a, 0x8210, 0x6a56, 0x0078, 0x397a, 0x1078, 0x130c,
-+      0x0040, 0x3987, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018,
-+      0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x3972, 0x6857,
-+      0x0001, 0x6e62, 0x0078, 0x397e, 0x1078, 0x37d1, 0x1078, 0x3994,
-+      0x00c0, 0x397c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
-+      0x0078, 0x3984, 0x127e, 0x2091, 0x8000, 0x1078, 0x4960, 0x127f,
-+      0x007c, 0xa01e, 0x0078, 0x3996, 0x2019, 0x0001, 0xa00e, 0x127e,
-+      0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x39b4,
-+      0x8dff, 0x0040, 0x39c9, 0x83ff, 0x0040, 0x39ac, 0x6848, 0xa606,
-+      0x0040, 0x39b9, 0x0078, 0x39b4, 0x683c, 0xa406, 0x00c0, 0x39b4,
-+      0x6840, 0xa506, 0x0040, 0x39b9, 0x2d08, 0x6800, 0x2068, 0x0078,
-+      0x39a0, 0x6a00, 0x604c, 0xad06, 0x00c0, 0x39c1, 0x624e, 0x0078,
-+      0x39c4, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x39c9, 0x6152,
-+      0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, 0x39d0, 0x2019, 0x0001,
-+      0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, 0x39fc, 0x83ff, 0x0040,
-+      0x39df, 0x6848, 0xa606, 0x0040, 0x39ec, 0x0078, 0x39e7, 0x683c,
-+      0xa406, 0x00c0, 0x39e7, 0x6840, 0xa506, 0x0040, 0x39ec, 0x2d08,
-+      0x6800, 0x2068, 0x0078, 0x39d3, 0x6a00, 0x6080, 0xad06, 0x00c0,
-+      0x39f4, 0x6282, 0x0078, 0x39f7, 0xa180, 0x0000, 0x2202, 0x82ff,
-+      0x00c0, 0x39fc, 0x6186, 0x8dff, 0x007c, 0x1078, 0x3a55, 0x00c0,
-+      0x3a03, 0x2011, 0x0001, 0x1078, 0x3aa5, 0x00c0, 0x3a09, 0xa295,
-+      0x0002, 0x007c, 0x1078, 0x3add, 0x0040, 0x3a12, 0x1078, 0x6b2b,
-+      0x0078, 0x3a14, 0xa085, 0x0001, 0x007c, 0x1078, 0x3add, 0x0040,
-+      0x3a1d, 0x1078, 0x6aba, 0x0078, 0x3a1f, 0xa085, 0x0001, 0x007c,
-+      0x1078, 0x3add, 0x0040, 0x3a28, 0x1078, 0x6b00, 0x0078, 0x3a2a,
-+      0xa085, 0x0001, 0x007c, 0x1078, 0x3add, 0x0040, 0x3a33, 0x1078,
-+      0x6ad6, 0x0078, 0x3a35, 0xa085, 0x0001, 0x007c, 0x127e, 0x007e,
-+      0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0040, 0x3a4d, 0x6800,
-+      0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c54,
-+      0x1078, 0x3b92, 0x007f, 0x0078, 0x3a3c, 0x6083, 0x0000, 0x6087,
-+      0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c, 0x60a4, 0xa00d, 0x00c0,
-+      0x3a5c, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7000, 0xa005,
-+      0x00c0, 0x3a6f, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606,
-+      0x0040, 0x3a6f, 0x8108, 0x00f0, 0x3a66, 0xa085, 0x0001, 0x0e7f,
-+      0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0,
-+      0x3a7f, 0x1078, 0x130c, 0x0040, 0x3a91, 0x2d00, 0x60a6, 0x6803,
-+      0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b,
-+      0xffff, 0x8108, 0x00f0, 0x3a87, 0xa085, 0x0001, 0x127f, 0x0d7f,
-+      0x007c, 0xa006, 0x0078, 0x3a8e, 0x0d7e, 0x127e, 0x2091, 0x8000,
-+      0x60a4, 0xa06d, 0x0040, 0x3aa2, 0x60a7, 0x0000, 0x1078, 0x1340,
-+      0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0,
-+      0x3aac, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005,
-+      0x00c0, 0x3abf, 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606,
-+      0x0040, 0x3abf, 0x8108, 0x00f0, 0x3ab6, 0xa085, 0x0001, 0x0e7f,
-+      0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3aa5, 0x00c0, 0x3adb,
-+      0x200b, 0xffff, 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002,
-+      0x0048, 0x3ad6, 0x8001, 0x6856, 0x0078, 0x3ada, 0x1078, 0x1340,
-+      0x60ab, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c,
-+      0x0f7e, 0x2079, 0x7751, 0x7804, 0xd0a4, 0x0040, 0x3b09, 0x157e,
-+      0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x384c,
-+      0x00c0, 0x3afd, 0x6004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006,
-+      0x00c0, 0x3afd, 0x6000, 0xc0ed, 0x6002, 0x017f, 0x8108, 0x00f0,
-+      0x3aed, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, 0x3b0b, 0x1078,
-+      0x4719, 0x0f7f, 0x007c, 0x2011, 0x3b0b, 0x1078, 0x4689, 0x157e,
-+      0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x384c,
-+      0x00c0, 0x3b37, 0x6000, 0xd0ec, 0x0040, 0x3b37, 0x047e, 0x62a0,
-+      0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0x7641,
-+      0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, 0x1078, 0x4a7e,
-+      0x1078, 0x49c1, 0x2009, 0x0000, 0x1078, 0x747b, 0x047f, 0x017f,
-+      0x8108, 0x00f0, 0x3b15, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018,
-+      0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x2071, 0x77ff,
-+      0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000,
-+      0x701b, 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000,
-+      0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x007c, 0x0e7e,
-+      0x2071, 0x77ff, 0x684c, 0xa005, 0x00c0, 0x3b6d, 0x7028, 0xc085,
-+      0x702a, 0xa085, 0x0001, 0x0078, 0x3b90, 0x6a60, 0x7236, 0x6b64,
-+      0x733a, 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c,
-+      0x702e, 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006,
-+      0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
-+      0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006,
-+      0x0e7f, 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, 0x3be3, 0x6804,
-+      0xa00d, 0x0040, 0x3bb1, 0x0d7e, 0x0e7e, 0x2071, 0x7700, 0x027e,
-+      0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-+      0x00c0, 0x3ba2, 0x702e, 0x70a0, 0xa200, 0x70a2, 0x027f, 0x0e7f,
-+      0x0d7f, 0x2071, 0x77ff, 0x701c, 0xa005, 0x00c0, 0x3bf4, 0x0068,
-+      0x3bf2, 0x2071, 0x7751, 0x7004, 0xd09c, 0x0040, 0x3bf2, 0x6934,
-+      0xa186, 0x0103, 0x00c0, 0x3c05, 0x6948, 0x6844, 0xa105, 0x00c0,
-+      0x3be5, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0,
-+      0x3bf2, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
-+      0x2091, 0x4080, 0x2071, 0x7700, 0x702c, 0x206a, 0x2d00, 0x702e,
-+      0x70a0, 0x8000, 0x70a2, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100,
-+      0x00c0, 0x3bf2, 0x6868, 0xa005, 0x00c0, 0x3bf2, 0x2009, 0x8020,
-+      0x0078, 0x3bcb, 0x2071, 0x77ff, 0x2d08, 0x206b, 0x0000, 0x7010,
-+      0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x3c02, 0x6902,
-+      0x0078, 0x3c03, 0x711e, 0x0078, 0x3be3, 0xa18c, 0x00ff, 0xa186,
-+      0x0017, 0x0040, 0x3c13, 0xa186, 0x001e, 0x0040, 0x3c13, 0xa18e,
-+      0x001f, 0x00c0, 0x3bf2, 0x684c, 0xd0cc, 0x0040, 0x3bf2, 0x6850,
-+      0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3bf2, 0x2009, 0x8021,
-+      0x0078, 0x3bcb, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80,
-+      0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0x684a, 0x6952,
-+      0x007c, 0x2071, 0x77ff, 0x7004, 0x0079, 0x3c36, 0x3c3e, 0x3c4d,
-+      0x3cdd, 0x3cde, 0x3cee, 0x3cf4, 0x3c3f, 0x3ccb, 0x007c, 0x127e,
-+      0x2091, 0x8000, 0x0068, 0x3c4c, 0x2009, 0x000d, 0x7030, 0x200a,
-+      0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x701c, 0xa06d, 0x0040,
-+      0x3cca, 0x0e7e, 0x2071, 0x7751, 0x7004, 0xd09c, 0x0040, 0x3cac,
-+      0x6934, 0xa186, 0x0103, 0x00c0, 0x3c82, 0x6948, 0x6844, 0xa105,
-+      0x00c0, 0x3c9f, 0x2009, 0x8020, 0x127e, 0x2091, 0x8000, 0x0068,
-+      0x3c7e, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x3c7e, 0x7122,
-+      0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x127f, 0x0e7f, 0x1078, 0x3d27, 0x0078, 0x3cca, 0x127f, 0x0e7f,
-+      0x0078, 0x3cca, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, 0x3c90,
-+      0xa186, 0x001e, 0x0040, 0x3c90, 0xa18e, 0x001f, 0x00c0, 0x3cac,
-+      0x684c, 0xd0cc, 0x0040, 0x3cac, 0x6850, 0xa084, 0x00ff, 0xa086,
-+      0x0001, 0x00c0, 0x3cac, 0x2009, 0x8021, 0x0078, 0x3c64, 0x6844,
-+      0xa086, 0x0100, 0x00c0, 0x3cac, 0x6868, 0xa005, 0x00c0, 0x3cac,
-+      0x2009, 0x8020, 0x0078, 0x3c64, 0x0e7f, 0x1078, 0x3d3b, 0x0040,
-+      0x3cca, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
-+      0x00c0, 0x3cc1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x3cc1,
-+      0x710e, 0x7007, 0x0003, 0x1078, 0x3d5b, 0x7050, 0xa086, 0x0100,
-+      0x0040, 0x3cde, 0x007c, 0x701c, 0xa06d, 0x0040, 0x3cdc, 0x1078,
-+      0x3d3b, 0x0040, 0x3cdc, 0x7007, 0x0003, 0x1078, 0x3d5b, 0x7050,
-+      0xa086, 0x0100, 0x0040, 0x3cde, 0x007c, 0x007c, 0x7050, 0xa09e,
-+      0x0100, 0x00c0, 0x3ce7, 0x7007, 0x0004, 0x0078, 0x3cee, 0xa086,
-+      0x0200, 0x00c0, 0x3ced, 0x7007, 0x0005, 0x007c, 0x1078, 0x3cf5,
-+      0x7006, 0x1078, 0x3d27, 0x007c, 0x007c, 0x702c, 0x7130, 0x8108,
-+      0xa102, 0x0048, 0x3d02, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
-+      0x0078, 0x3d0c, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x3d0c,
-+      0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001, 0x700e,
-+      0x00c0, 0x3d20, 0x127e, 0x2091, 0x8000, 0x0068, 0x3d23, 0x2001,
-+      0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x127f, 0x007c,
-+      0x2001, 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, 0x007c, 0x701c,
-+      0xa06d, 0x0040, 0x3d3a, 0x127e, 0x2091, 0x8000, 0x7010, 0x8001,
-+      0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3d37, 0x701a, 0x127f,
-+      0x1078, 0x1340, 0x007c, 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e,
-+      0x0040, 0x3d4a, 0x2304, 0x230c, 0xa10e, 0x0040, 0x3d4a, 0xa006,
-+      0x0078, 0x3d5a, 0x732c, 0x8319, 0x7130, 0xa102, 0x00c0, 0x3d54,
-+      0x2300, 0xa005, 0x0078, 0x3d5a, 0x0048, 0x3d59, 0xa302, 0x0078,
-+      0x3d5a, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056,
-+      0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, 0x7959, 0x2104,
-+      0xc08d, 0x200a, 0x127f, 0x1078, 0x1391, 0x007c, 0x2071, 0x77cd,
-+      0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001,
-+      0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040,
-+      0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000,
-+      0x007c, 0x0e7e, 0x2071, 0x77cd, 0x6848, 0xa005, 0x00c0, 0x3d97,
-+      0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x3dbc, 0x6a50,
-+      0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042,
-+      0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a,
-+      0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210,
-+      0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007,
-+      0x0001, 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071,
-+      0x77cd, 0x7004, 0x1079, 0x3e1c, 0x700c, 0x0079, 0x3dc7, 0x3dcc,
-+      0x3dc1, 0x3dc1, 0x3dc1, 0x3dc1, 0x007c, 0x700c, 0x0079, 0x3dd0,
-+      0x3dd5, 0x3e1a, 0x3e1a, 0x3e1b, 0x3e1b, 0x7830, 0x7930, 0xa106,
-+      0x0040, 0x3ddf, 0x7830, 0x7930, 0xa106, 0x00c0, 0x3e05, 0x7030,
-+      0xa10a, 0x0040, 0x3e05, 0x00c8, 0x3de7, 0x712c, 0xa10a, 0xa18a,
-+      0x0002, 0x00c8, 0x3e06, 0x1078, 0x130c, 0x0040, 0x3e05, 0x2d00,
-+      0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x127e,
-+      0x007e, 0x2091, 0x8000, 0x2009, 0x7959, 0x2104, 0xc085, 0x200a,
-+      0x007f, 0x700e, 0x127f, 0x1078, 0x1391, 0x007c, 0x1078, 0x130c,
-+      0x0040, 0x3e05, 0x2d00, 0x705a, 0x1078, 0x130c, 0x00c0, 0x3e12,
-+      0x0078, 0x3df1, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004,
-+      0x0078, 0x3df5, 0x007c, 0x007c, 0x3e2d, 0x3e2e, 0x3e65, 0x3e66,
-+      0x3e1a, 0x3e9c, 0x3ea1, 0x3ed8, 0x3ed9, 0x3ef4, 0x3ef5, 0x3ef6,
-+      0x3ef7, 0x3ef8, 0x3ef9, 0x3f62, 0x3f8c, 0x007c, 0x700c, 0x0079,
-+      0x3e31, 0x3e36, 0x3e39, 0x3e49, 0x3e64, 0x3e64, 0x1078, 0x3dcd,
-+      0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x426e,
-+      0x0040, 0x3e46, 0x2091, 0x8000, 0x1078, 0x3dcd, 0x0d7f, 0x0078,
-+      0x3e52, 0x127e, 0x8001, 0x700e, 0x1078, 0x426e, 0x7058, 0x2068,
-+      0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
-+      0x00ff, 0xa08a, 0x0020, 0x00c8, 0x3e61, 0x1079, 0x3e7c, 0x127f,
-+      0x007c, 0x127f, 0x1078, 0x3efa, 0x007c, 0x007c, 0x007c, 0x0e7e,
-+      0x2071, 0x77cd, 0x700c, 0x0079, 0x3e6d, 0x3e72, 0x3e72, 0x3e72,
-+      0x3e74, 0x3e78, 0x0e7f, 0x007c, 0x700f, 0x0001, 0x0078, 0x3e7a,
-+      0x700f, 0x0002, 0x0e7f, 0x007c, 0x3efa, 0x3efa, 0x3f16, 0x3efa,
-+      0x4001, 0x3efa, 0x3efa, 0x3efa, 0x3efa, 0x3efa, 0x3f16, 0x4040,
-+      0x408a, 0x40e3, 0x40f7, 0x3efa, 0x3efa, 0x3f32, 0x3f16, 0x3efa,
-+      0x3efa, 0x3f48, 0x4182, 0x41a0, 0x3efa, 0x3f32, 0x3efa, 0x3efa,
-+      0x3efa, 0x3efa, 0x3f48, 0x41a0, 0x7020, 0x2068, 0x1078, 0x1340,
-+      0x007c, 0x700c, 0x0079, 0x3ea4, 0x3ea9, 0x3eac, 0x3ebc, 0x3ed7,
-+      0x3ed7, 0x1078, 0x3dcd, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058,
-+      0x007e, 0x1078, 0x426e, 0x0040, 0x3eb9, 0x2091, 0x8000, 0x1078,
-+      0x3dcd, 0x0d7f, 0x0078, 0x3ec5, 0x127e, 0x8001, 0x700e, 0x1078,
-+      0x426e, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
-+      0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x3ed4,
-+      0x1079, 0x3eda, 0x127f, 0x007c, 0x127f, 0x1078, 0x3efa, 0x007c,
-+      0x007c, 0x007c, 0x3efa, 0x3f16, 0x3feb, 0x3efa, 0x3f16, 0x3efa,
-+      0x3f16, 0x3f16, 0x3efa, 0x3f16, 0x3feb, 0x3f16, 0x3f16, 0x3f16,
-+      0x3f16, 0x3f16, 0x3efa, 0x3f16, 0x3feb, 0x3efa, 0x3efa, 0x3f16,
-+      0x3efa, 0x3efa, 0x3efa, 0x3f16, 0x007c, 0x007c, 0x007c, 0x007c,
-+      0x007c, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5,
-+      0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b92, 0x127f, 0x007c,
-+      0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e,
-+      0x2091, 0x8000, 0x1078, 0x3b92, 0x127f, 0x007c, 0x7007, 0x0001,
-+      0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000,
-+      0x1078, 0x3b92, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084,
-+      0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b92,
-+      0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3f08,
-+      0x8001, 0x00c0, 0x3f3f, 0x7007, 0x0001, 0x0078, 0x3fc8, 0x7007,
-+      0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x3fc8, 0x007c,
-+      0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
-+      0x20a1, 0x77f8, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
-+      0x3f24, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3f24, 0xa080, 0x3fb9,
-+      0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x3fac, 0x1078, 0x130c,
-+      0x00c0, 0x3f6d, 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4,
-+      0x2060, 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, 0x6008, 0xa20a,
-+      0x00c8, 0x3f7c, 0xa00e, 0x2200, 0x7112, 0x620c, 0x8003, 0x800b,
-+      0xa296, 0x0004, 0x0040, 0x3f85, 0xa108, 0x719a, 0x810b, 0x719e,
-+      0xae90, 0x0022, 0x1078, 0x1377, 0x7090, 0xa08e, 0x0100, 0x0040,
-+      0x3fa0, 0xa086, 0x0200, 0x0040, 0x3f98, 0x7007, 0x0010, 0x007c,
-+      0x7020, 0x2068, 0x1078, 0x1340, 0x7014, 0x2068, 0x0078, 0x3f24,
-+      0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, 0x2d08, 0x2068,
-+      0x6906, 0x711a, 0x0078, 0x3f62, 0x7014, 0x2068, 0x7007, 0x0001,
-+      0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x41bd, 0x0078,
-+      0x3fc8, 0x3fbc, 0x3fc0, 0x3fc4, 0x0002, 0x0011, 0x0007, 0x0004,
-+      0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, 0x0005, 0x0006,
-+      0x2009, 0x772c, 0x210c, 0x81ff, 0x00c0, 0x3fe5, 0x6838, 0xa084,
-+      0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3691, 0x00c0, 0x3fd9,
-+      0x007c, 0x1078, 0x3c22, 0x127e, 0x2091, 0x8000, 0x1078, 0x6c54,
-+      0x1078, 0x3b92, 0x127f, 0x0078, 0x3fd8, 0x2001, 0x0028, 0x2009,
-+      0x0000, 0x0078, 0x3fd9, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
-+      0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3ffa, 0x7007, 0x0006,
-+      0x0078, 0x4000, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
-+      0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
-+      0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x402a,
-+      0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x402a,
-+      0xa005, 0x00c0, 0x403d, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
-+      0x384c, 0x00c0, 0x403d, 0x067e, 0x6e50, 0x1078, 0x3915, 0x067f,
-+      0x0078, 0x403d, 0x047e, 0x2011, 0x770c, 0x2224, 0xc484, 0xc48c,
-+      0x2412, 0x047f, 0x0c7e, 0x1078, 0x384c, 0x00c0, 0x4039, 0x1078,
-+      0x3a94, 0x8108, 0x00f0, 0x4033, 0x0c7f, 0x1078, 0x1340, 0x007c,
-+      0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x7752, 0x2004,
-+      0xd0a4, 0x0040, 0x4081, 0x2009, 0x0000, 0x1078, 0x428a, 0x6100,
-+      0xd184, 0x0040, 0x4066, 0x6858, 0xa084, 0x00ff, 0x00c0, 0x4084,
-+      0x6000, 0xd084, 0x0040, 0x4081, 0x6004, 0xa005, 0x00c0, 0x4087,
-+      0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x407e, 0x2011, 0x0001,
-+      0x6860, 0xa005, 0x00c0, 0x406e, 0x2001, 0x001e, 0x8000, 0x6016,
-+      0x6858, 0xa084, 0x00ff, 0x0040, 0x4081, 0x6006, 0x6858, 0x8007,
-+      0xa084, 0x00ff, 0x0040, 0x4081, 0x600a, 0x6202, 0x127f, 0x0078,
-+      0x425d, 0x127f, 0x0078, 0x4255, 0x127f, 0x0078, 0x424d, 0x127f,
-+      0x0078, 0x4251, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001,
-+      0x7752, 0x2004, 0xd0a4, 0x0040, 0x40e0, 0x2009, 0x0000, 0x1078,
-+      0x428a, 0x6000, 0xa084, 0x0001, 0x0040, 0x40e0, 0x6204, 0x6308,
-+      0x6c48, 0xa484, 0x0003, 0x0040, 0x40b8, 0x6958, 0xa18c, 0x00ff,
-+      0x8001, 0x00c0, 0x40b1, 0x2100, 0xa210, 0x0048, 0x40dd, 0x0078,
-+      0x40b8, 0x8001, 0x00c0, 0x40dd, 0x2100, 0xa212, 0x0048, 0x40dd,
-+      0xa484, 0x000c, 0x0040, 0x40d2, 0x6958, 0x810f, 0xa18c, 0x00ff,
-+      0xa082, 0x0004, 0x00c0, 0x40ca, 0x2100, 0xa318, 0x0048, 0x40dd,
-+      0x0078, 0x40d2, 0xa082, 0x0004, 0x00c0, 0x40dd, 0x2100, 0xa31a,
-+      0x0048, 0x40dd, 0x6860, 0xa005, 0x0040, 0x40d8, 0x8000, 0x6016,
-+      0x6206, 0x630a, 0x127f, 0x0078, 0x425d, 0x127f, 0x0078, 0x4259,
-+      0x127f, 0x0078, 0x4255, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
-+      0x2009, 0x0000, 0x1078, 0x428a, 0x6308, 0x8318, 0x0048, 0x40f4,
-+      0x630a, 0x127f, 0x0078, 0x426b, 0x127f, 0x0078, 0x4259, 0x127e,
-+      0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
-+      0x410d, 0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x6000, 0x2001,
-+      0xfcff, 0x6002, 0x0c7f, 0x0078, 0x4144, 0x6858, 0xa005, 0x0040,
-+      0x4159, 0x685c, 0xa065, 0x0040, 0x4155, 0x2001, 0x772c, 0x2004,
-+      0xa005, 0x0040, 0x411f, 0x1078, 0x6bb6, 0x0078, 0x4125, 0x6013,
-+      0x0400, 0x2009, 0x0041, 0x1078, 0x5d41, 0x6958, 0xa18c, 0xe600,
-+      0xa186, 0x2000, 0x0040, 0x413c, 0xa186, 0x0400, 0x0040, 0x413c,
-+      0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x6000, 0xa084, 0xfdff,
-+      0x6002, 0x0c7f, 0x0078, 0x4144, 0x027e, 0x2009, 0x0000, 0x2011,
-+      0xfdff, 0x1078, 0x47d0, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x4151,
-+      0x2009, 0x0000, 0x1078, 0x4727, 0x6008, 0x8000, 0x0048, 0x4151,
-+      0x600a, 0x0c7f, 0x127f, 0x0078, 0x425d, 0x0c7f, 0x127f, 0x0078,
-+      0x4255, 0x6954, 0xa186, 0x002a, 0x00c0, 0x4165, 0x2001, 0x770c,
-+      0x200c, 0xc194, 0x2102, 0x0078, 0x4144, 0xa186, 0x0020, 0x0040,
-+      0x417a, 0xa186, 0x0029, 0x00c0, 0x4155, 0x6944, 0xa18c, 0xff00,
-+      0x810f, 0x1078, 0x384c, 0x00c0, 0x4144, 0x6000, 0xc0e4, 0x6002,
-+      0x0078, 0x4144, 0x685c, 0xa065, 0x0040, 0x4155, 0x6017, 0x0014,
-+      0x0078, 0x4144, 0x2009, 0x0000, 0x1078, 0x428a, 0x6000, 0xa084,
-+      0x0001, 0x0040, 0x419c, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048,
-+      0x4196, 0x6206, 0x2091, 0x8001, 0x0078, 0x426b, 0x2091, 0x8001,
-+      0x6853, 0x0016, 0x0078, 0x4264, 0x6853, 0x0007, 0x0078, 0x4264,
-+      0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x41aa, 0x1078, 0x3f08,
-+      0x0078, 0x41bc, 0x2030, 0x8001, 0x00c0, 0x41b4, 0x7007, 0x0001,
-+      0x1078, 0x41bd, 0x0078, 0x41bc, 0x7007, 0x0006, 0x7012, 0x2d00,
-+      0x7016, 0x701a, 0x704b, 0x41bd, 0x007c, 0x0e7e, 0x2009, 0x772c,
-+      0x210c, 0x81ff, 0x00c0, 0x423f, 0x2009, 0x770c, 0x210c, 0xd194,
-+      0x00c0, 0x4249, 0x6848, 0x2070, 0xae82, 0x7e00, 0x0048, 0x422e,
-+      0x2001, 0x7715, 0x2004, 0xae02, 0x00c8, 0x422e, 0x2009, 0x0000,
-+      0x1078, 0x428a, 0x6100, 0xa184, 0x0001, 0x0040, 0x4214, 0xa184,
-+      0x0100, 0x00c0, 0x4232, 0xa184, 0x0200, 0x00c0, 0x4236, 0x601c,
-+      0xa005, 0x00c0, 0x423a, 0x711c, 0xa186, 0x0006, 0x00c0, 0x4219,
-+      0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x127e, 0x2091, 0x8000,
-+      0x7010, 0xa005, 0x00c0, 0x420b, 0x7112, 0x7018, 0xa065, 0x0040,
-+      0x423e, 0x6000, 0xd0e4, 0x00c0, 0x4243, 0x2e60, 0x1078, 0x4730,
-+      0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, 0x00c0, 0x420b,
-+      0x6902, 0x127f, 0x0e7f, 0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078,
-+      0x4264, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x384c, 0x00c0,
-+      0x4244, 0x6000, 0xd0e4, 0x00c0, 0x4244, 0x711c, 0xa186, 0x0007,
-+      0x00c0, 0x422e, 0x6853, 0x0002, 0x0078, 0x4246, 0x6853, 0x0008,
-+      0x0078, 0x4246, 0x6853, 0x000e, 0x0078, 0x4246, 0x6853, 0x0017,
-+      0x0078, 0x4246, 0x6853, 0x0035, 0x0078, 0x4246, 0x127f, 0x6853,
-+      0x0028, 0x0078, 0x4246, 0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078,
-+      0x4264, 0x6853, 0x002a, 0x0078, 0x4246, 0x2009, 0x003e, 0x0078,
-+      0x425f, 0x2009, 0x0004, 0x0078, 0x425f, 0x2009, 0x0006, 0x0078,
-+      0x425f, 0x2009, 0x0016, 0x0078, 0x425f, 0x2009, 0x0001, 0x6854,
-+      0xa084, 0xff00, 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x3b92,
-+      0x2091, 0x8001, 0x007c, 0x1078, 0x1340, 0x007c, 0x702c, 0x7130,
-+      0x8108, 0xa102, 0x0048, 0x427b, 0xa00e, 0x7034, 0x7072, 0x7038,
-+      0x7076, 0x0078, 0x4287, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8,
-+      0x4287, 0x7074, 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932,
-+      0x7132, 0x007c, 0x0d7e, 0x1078, 0x4727, 0x0d7f, 0x007c, 0x0d7e,
-+      0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c,
-+      0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000,
-+      0x0040, 0x42a6, 0xa086, 0x1000, 0x00c0, 0x42c2, 0x20e1, 0x0004,
-+      0x3d60, 0xd1bc, 0x00c0, 0x42ad, 0x3e60, 0xac84, 0x0007, 0x00c0,
-+      0x42c2, 0xac82, 0x7e00, 0x0048, 0x42c2, 0x6854, 0xac02, 0x00c8,
-+      0x42c2, 0x2009, 0x0047, 0x1078, 0x5d41, 0x7a1c, 0xd284, 0x00c0,
-+      0x4298, 0x007c, 0xa016, 0x1078, 0x156a, 0x0078, 0x42bd, 0x157e,
-+      0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0070,
-+      0x00c0, 0x42f0, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x42f0,
-+      0x1078, 0x42fd, 0x0040, 0x42f0, 0x20e1, 0x3000, 0x7828, 0x7828,
-+      0x1078, 0x431b, 0x147f, 0x137f, 0x157f, 0x2009, 0x793e, 0x2104,
-+      0xa005, 0x00c0, 0x42ec, 0x007c, 0x1078, 0x4d96, 0x0078, 0x42eb,
-+      0x1078, 0x7674, 0x1078, 0x42fd, 0x20e1, 0x3000, 0x7828, 0x7828,
-+      0x147f, 0x137f, 0x157f, 0x0078, 0x42eb, 0xa484, 0x01ff, 0x687a,
-+      0xa005, 0x0040, 0x430f, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac,
-+      0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c, 0x20a9,
-+      0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085,
-+      0x0001, 0x0078, 0x430e, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000,
-+      0x8007, 0xa196, 0x0000, 0x00c0, 0x4328, 0x0078, 0x449c, 0x007c,
-+      0xa196, 0x2000, 0x00c0, 0x4339, 0x6900, 0xa18e, 0x0001, 0x00c0,
-+      0x4335, 0x1078, 0x2ec1, 0x0078, 0x4327, 0x1078, 0x4341, 0x0078,
-+      0x4327, 0xa196, 0x8000, 0x00c0, 0x4327, 0x1078, 0x4522, 0x0078,
-+      0x4327, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001,
-+      0x0040, 0x434e, 0xa196, 0x0023, 0x00c0, 0x4443, 0xa08e, 0x0023,
-+      0x00c0, 0x437f, 0x1078, 0x4599, 0x0040, 0x4443, 0x7124, 0x610a,
-+      0x7030, 0xa08e, 0x0200, 0x00c0, 0x4367, 0x7034, 0xa005, 0x00c0,
-+      0x4443, 0x2009, 0x0015, 0x1078, 0x5d41, 0x0078, 0x4443, 0xa08e,
-+      0x0210, 0x00c0, 0x4371, 0x2009, 0x0015, 0x1078, 0x5d41, 0x0078,
-+      0x4443, 0xa08e, 0x0100, 0x00c0, 0x4443, 0x7034, 0xa005, 0x00c0,
-+      0x4443, 0x2009, 0x0016, 0x1078, 0x5d41, 0x0078, 0x4443, 0xa08e,
-+      0x0022, 0x00c0, 0x4443, 0x7030, 0xa08e, 0x0300, 0x00c0, 0x4390,
-+      0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x0017, 0x0078, 0x440f,
-+      0xa08e, 0x0500, 0x00c0, 0x439c, 0x7034, 0xa005, 0x00c0, 0x4443,
-+      0x2009, 0x0018, 0x0078, 0x440f, 0xa08e, 0x2010, 0x00c0, 0x43a4,
-+      0x2009, 0x0019, 0x0078, 0x440f, 0xa08e, 0x2110, 0x00c0, 0x43ac,
-+      0x2009, 0x001a, 0x0078, 0x440f, 0xa08e, 0x5200, 0x00c0, 0x43b8,
-+      0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x001b, 0x0078, 0x440f,
-+      0xa08e, 0x5000, 0x00c0, 0x43c4, 0x7034, 0xa005, 0x00c0, 0x4443,
-+      0x2009, 0x001c, 0x0078, 0x440f, 0xa08e, 0x1200, 0x00c0, 0x43d0,
-+      0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x0024, 0x0078, 0x440f,
-+      0xa08c, 0xff00, 0xa18e, 0x2400, 0x00c0, 0x43da, 0x2009, 0x002d,
-+      0x0078, 0x440f, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x00c0, 0x43e4,
-+      0x2009, 0x002a, 0x0078, 0x440f, 0xa08e, 0x0f00, 0x00c0, 0x43ec,
-+      0x2009, 0x0020, 0x0078, 0x440f, 0xa08e, 0x5300, 0x00c0, 0x43f2,
-+      0x0078, 0x440d, 0xa08e, 0x6104, 0x00c0, 0x440d, 0x2011, 0x7c8d,
-+      0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011,
-+      0x8015, 0x211c, 0x8108, 0x2124, 0x1078, 0x2d59, 0x8108, 0x00f0,
-+      0x43ff, 0x2009, 0x0023, 0x0078, 0x440f, 0x2009, 0x001d, 0x017e,
-+      0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, 0x207f, 0x00c0,
-+      0x4445, 0x1078, 0x3811, 0x00c0, 0x4445, 0x6612, 0x6516, 0x86ff,
-+      0x0040, 0x4435, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x4435,
-+      0x6864, 0xa606, 0x00c0, 0x4435, 0x6868, 0xa506, 0xa084, 0xff00,
-+      0x00c0, 0x4435, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x5cb4,
-+      0x0040, 0x4448, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a,
-+      0x017f, 0x1078, 0x5d41, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x4443,
-+      0x0c7f, 0x0078, 0x4445, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696,
-+      0x00ff, 0x00c0, 0x446b, 0xa596, 0xfffd, 0x00c0, 0x445b, 0x2009,
-+      0x007f, 0x0078, 0x4498, 0xa596, 0xfffe, 0x00c0, 0x4463, 0x2009,
-+      0x007e, 0x0078, 0x4498, 0xa596, 0xfffc, 0x00c0, 0x446b, 0x2009,
-+      0x0080, 0x0078, 0x4498, 0x2011, 0x0000, 0x2021, 0x007e, 0x20a9,
-+      0x0082, 0x2071, 0x789e, 0x2e1c, 0x83ff, 0x00c0, 0x447d, 0x82ff,
-+      0x00c0, 0x448c, 0x2410, 0x0078, 0x448c, 0x2368, 0x6b10, 0x007e,
-+      0x2100, 0xa31e, 0x007f, 0x00c0, 0x448c, 0x6b14, 0xa31e, 0x00c0,
-+      0x448c, 0x2408, 0x0078, 0x4498, 0x8420, 0x8e70, 0x00f0, 0x4473,
-+      0x82ff, 0x00c0, 0x4497, 0xa085, 0x0001, 0x0078, 0x4499, 0x2208,
-+      0xa006, 0x0d7f, 0x0e7f, 0x007c, 0xa084, 0x0007, 0x0079, 0x44a1,
-+      0x007c, 0x44a9, 0x44a9, 0x44a9, 0x44a9, 0x44a9, 0x44aa, 0x44c3,
-+      0x450b, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x44c2, 0x7120, 0x2160,
-+      0xac8c, 0x0007, 0x00c0, 0x44c2, 0xac8a, 0x7e00, 0x0048, 0x44c2,
-+      0x6854, 0xac02, 0x00c8, 0x44c2, 0x7124, 0x610a, 0x2009, 0x0046,
-+      0x1078, 0x5d41, 0x007c, 0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x4509,
-+      0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, 0x207f, 0x00c0,
-+      0x4509, 0x1078, 0x384c, 0x00c0, 0x4509, 0x6204, 0xa294, 0xff00,
-+      0x8217, 0xa286, 0x0006, 0x00c0, 0x44ee, 0x0c7e, 0x1078, 0x5cb4,
-+      0x017f, 0x0040, 0x4509, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
-+      0x2009, 0x0044, 0x1078, 0x5d41, 0x0078, 0x4509, 0x0c7e, 0x1078,
-+      0x5cb4, 0x017f, 0x0040, 0x4509, 0x611a, 0x601f, 0x0004, 0x7120,
-+      0x610a, 0xa286, 0x0004, 0x00c0, 0x4501, 0x6007, 0x0005, 0x0078,
-+      0x4503, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x1078,
-+      0x4d96, 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4521, 0x7020,
-+      0x2060, 0xac84, 0x0007, 0x00c0, 0x4521, 0xac82, 0x7e00, 0x0048,
-+      0x4521, 0x6854, 0xac02, 0x00c8, 0x4521, 0x2009, 0x0045, 0x1078,
-+      0x5d41, 0x007c, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000,
-+      0x00c0, 0x4532, 0xa084, 0x000f, 0xa08a, 0x0006, 0x10c8, 0x12cd,
-+      0x1079, 0x4533, 0x007c, 0x4539, 0x453a, 0x4539, 0x4539, 0x457b,
-+      0x458a, 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x457a, 0x700c, 0x7108,
-+      0x1078, 0x207f, 0x00c0, 0x457a, 0x1078, 0x3811, 0x00c0, 0x457a,
-+      0x6612, 0x6516, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006,
-+      0x00c0, 0x4563, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x457a,
-+      0x611a, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078,
-+      0x5d41, 0x0078, 0x457a, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040,
-+      0x457a, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004,
-+      0x00c0, 0x4576, 0x2009, 0x0005, 0x0078, 0x4578, 0x2009, 0x0001,
-+      0x1078, 0x5d41, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4589, 0x1078,
-+      0x4599, 0x0040, 0x4589, 0x7124, 0x610a, 0x2009, 0x0089, 0x1078,
-+      0x5d41, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4598, 0x1078, 0x4599,
-+      0x0040, 0x4598, 0x7124, 0x610a, 0x2009, 0x008a, 0x1078, 0x5d41,
-+      0x007c, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x45ac, 0xac82,
-+      0x7e00, 0x0048, 0x45ac, 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8,
-+      0x45ac, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x45ab, 0x2071,
-+      0x7949, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7012,
-+      0x7017, 0x7e00, 0x7007, 0x0000, 0x7026, 0x702b, 0x56a9, 0x7032,
-+      0x7037, 0x56ea, 0x703b, 0x0002, 0x703f, 0x0000, 0x007c, 0x2071,
-+      0x7949, 0x00e0, 0x4676, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e,
-+      0x00c0, 0x463f, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091,
-+      0x8000, 0x7138, 0x8109, 0x713a, 0x00c0, 0x463d, 0x703b, 0x0002,
-+      0x2009, 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x463d, 0x703c,
-+      0xa086, 0x0001, 0x00c0, 0x461a, 0x0d7e, 0x2069, 0x0140, 0x6804,
-+      0xa084, 0x4000, 0x0040, 0x45f8, 0x6803, 0x1000, 0x0078, 0x45ff,
-+      0x6804, 0xa084, 0x1000, 0x0040, 0x45ff, 0x6803, 0x0100, 0x6803,
-+      0x0000, 0x703f, 0x0000, 0x2069, 0x7936, 0x6804, 0xa082, 0x0006,
-+      0x00c0, 0x460c, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0,
-+      0x4613, 0x6833, 0x0000, 0x1078, 0x4d96, 0x1078, 0x4e56, 0x0d7f,
-+      0x0078, 0x463d, 0x0d7e, 0x2069, 0x7700, 0x6944, 0x6860, 0xa102,
-+      0x00c8, 0x463c, 0x2069, 0x7936, 0x6804, 0xa086, 0x0000, 0x00c0,
-+      0x463c, 0x6830, 0xa086, 0x0000, 0x00c0, 0x463c, 0x703f, 0x0001,
-+      0x6807, 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e,
-+      0x2069, 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x4642, 0x127e,
-+      0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x4653, 0x7020, 0x8001,
-+      0x7022, 0x00c0, 0x4653, 0x7023, 0x0009, 0x8109, 0x7126, 0x00c0,
-+      0x4653, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, 0x4664, 0x702c,
-+      0x8001, 0x702e, 0x00c0, 0x4664, 0x702f, 0x0009, 0x8109, 0x7132,
-+      0x00c0, 0x4664, 0x7034, 0x107a, 0x7018, 0xa00d, 0x0040, 0x4675,
-+      0x7008, 0x8001, 0x700a, 0x00c0, 0x4675, 0x700b, 0x0009, 0x8109,
-+      0x711a, 0x00c0, 0x4675, 0x701c, 0x107a, 0x127f, 0x7004, 0x0079,
-+      0x4679, 0x46a0, 0x46a1, 0x46bd, 0x0e7e, 0x2071, 0x7949, 0x7018,
-+      0xa005, 0x00c0, 0x4687, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f,
-+      0x007c, 0x0e7e, 0x007e, 0x2071, 0x7949, 0x701c, 0xa206, 0x00c0,
-+      0x4693, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+      0x7949, 0x6088, 0xa102, 0x0048, 0x469e, 0x618a, 0x0e7f, 0x007c,
-+      0x007c, 0x7110, 0x1078, 0x384c, 0x00c0, 0x46b3, 0x6088, 0x8001,
-+      0x0048, 0x46b3, 0x608a, 0x00c0, 0x46b3, 0x127e, 0x2091, 0x8000,
-+      0x1078, 0x4d96, 0x127f, 0x8108, 0xa182, 0x00ff, 0x0048, 0x46bb,
-+      0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, 0x127e,
-+      0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x46ec, 0x8001, 0x6016,
-+      0x00c0, 0x46ec, 0x611c, 0xa186, 0x0003, 0x0040, 0x46d3, 0xa186,
-+      0x0006, 0x00c0, 0x46ea, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a,
-+      0x0048, 0x46ea, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048,
-+      0x46e3, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116,
-+      0x0078, 0x46ec, 0x1078, 0x68e3, 0x127f, 0xac88, 0x0008, 0x7116,
-+      0x2001, 0x7716, 0x2004, 0xa102, 0x0048, 0x46fa, 0x7017, 0x7e00,
-+      0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, 0x7027, 0x07d0,
-+      0x7023, 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, 0x2001, 0x7952,
-+      0x2003, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, 0x7033, 0x07d0,
-+      0x702f, 0x0009, 0x0e7f, 0x007c, 0x2011, 0x7955, 0x2013, 0x0000,
-+      0x007c, 0x0e7e, 0x2071, 0x7949, 0x711a, 0x721e, 0x700b, 0x0009,
-+      0x0e7f, 0x007c, 0x0c7e, 0x2061, 0x79da, 0x0c7f, 0x007c, 0xa184,
-+      0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x79da, 0x2060, 0x007c,
-+      0x6854, 0xa08a, 0x199a, 0x0048, 0x4737, 0x2001, 0x1999, 0xa005,
-+      0x00c0, 0x4747, 0x6944, 0x0c7e, 0x1078, 0x4727, 0x6014, 0x0c7f,
-+      0xa005, 0x00c0, 0x474c, 0x2001, 0x001e, 0x0078, 0x474c, 0xa08e,
-+      0xffff, 0x00c0, 0x474c, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108,
-+      0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x4787,
-+      0xd0b4, 0x00c0, 0x4763, 0xd0bc, 0x00c0, 0x4775, 0x2009, 0x0006,
-+      0x1078, 0x47aa, 0x007c, 0xd0fc, 0x0040, 0x4770, 0xa084, 0x0003,
-+      0xa08e, 0x0003, 0x0040, 0x47a3, 0xa08e, 0x0000, 0x00c0, 0x47a3,
-+      0x2009, 0x0043, 0x1078, 0x5d41, 0x007c, 0xd0fc, 0x0040, 0x4782,
-+      0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x47a3, 0xa08e, 0x0000,
-+      0x00c0, 0x47a3, 0x2009, 0x0042, 0x1078, 0x5d41, 0x007c, 0xd0fc,
-+      0x0040, 0x4799, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x47a3,
-+      0xa08e, 0x0002, 0x0040, 0x479d, 0x2009, 0x0041, 0x1078, 0x5d41,
-+      0x007c, 0x1078, 0x47a8, 0x0078, 0x4798, 0x2009, 0x0043, 0x1078,
-+      0x5d41, 0x0078, 0x4798, 0x2009, 0x0004, 0x1078, 0x47aa, 0x007c,
-+      0x2009, 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, 0x47cf, 0x2068,
-+      0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, 0x47c9, 0x694c,
-+      0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x47c9, 0x0c7e, 0x2009,
-+      0x0000, 0x1078, 0x4727, 0x6204, 0x8210, 0x0048, 0x47c8, 0x6206,
-+      0x0c7f, 0x1078, 0x3b92, 0x6010, 0xa06d, 0x10c0, 0x4730, 0x007c,
-+      0x157e, 0x0c7e, 0x20a9, 0x0010, 0x2061, 0x79da, 0x6000, 0x81ff,
-+      0x0040, 0x47dd, 0xa205, 0x0078, 0x47de, 0xa204, 0x6002, 0xace0,
-+      0x0008, 0x00f0, 0x47d6, 0x0c7f, 0x157f, 0x007c, 0x6808, 0xa005,
-+      0x0040, 0x47ee, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x127e,
-+      0x2091, 0x2200, 0x2079, 0x7936, 0x127f, 0x0d7e, 0x2069, 0x7936,
-+      0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, 0x206a,
-+      0x0d7f, 0x007c, 0x0c7e, 0x6027, 0x0001, 0x7804, 0xa084, 0x0007,
-+      0x0079, 0x480a, 0x4814, 0x4839, 0x4894, 0x481a, 0x4839, 0x4812,
-+      0x4812, 0x4812, 0x1078, 0x12cd, 0x1078, 0x4706, 0x1078, 0x4d96,
-+      0x0c7f, 0x007c, 0x62c0, 0x82ff, 0x00c0, 0x4820, 0x0c7f, 0x007c,
-+      0x2011, 0x3558, 0x1078, 0x4689, 0x7828, 0xa092, 0x0002, 0x00c8,
-+      0x482f, 0x8000, 0x782a, 0x1078, 0x3588, 0x0078, 0x481e, 0x1078,
-+      0x3558, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0078,
-+      0x481e, 0x1078, 0x4706, 0x3c00, 0x007e, 0x2011, 0x0209, 0x20e1,
-+      0x4000, 0x2214, 0x007f, 0x20e0, 0x82ff, 0x0040, 0x4857, 0x62c0,
-+      0x82ff, 0x00c0, 0x4857, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040,
-+      0x12cd, 0x2009, 0x0013, 0x1078, 0x5d41, 0x0c7f, 0x007c, 0x3900,
-+      0xa082, 0x7a7a, 0x00c8, 0x485e, 0x1078, 0x5c44, 0x0c7e, 0x7824,
-+      0xa065, 0x1040, 0x12cd, 0x7804, 0xa086, 0x0004, 0x0040, 0x48d9,
-+      0x7828, 0xa092, 0x2710, 0x00c8, 0x4874, 0x8000, 0x782a, 0x0c7f,
-+      0x1078, 0x568e, 0x0078, 0x4855, 0x6104, 0xa186, 0x0003, 0x00c0,
-+      0x488b, 0x0e7e, 0x2071, 0x7700, 0x70c8, 0x0e7f, 0xd08c, 0x0040,
-+      0x488b, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7700, 0x1078,
-+      0x3591, 0x0e7f, 0x0c7f, 0x1078, 0x76c7, 0x2009, 0x0014, 0x1078,
-+      0x5d41, 0x0c7f, 0x0078, 0x4855, 0x2001, 0x7952, 0x2003, 0x0000,
-+      0x62c0, 0x82ff, 0x00c0, 0x48a8, 0x782b, 0x0000, 0x7824, 0xa065,
-+      0x1040, 0x12cd, 0x2009, 0x0013, 0x1078, 0x5d8f, 0x0c7f, 0x007c,
-+      0x0c7e, 0x0d7e, 0x3900, 0xa082, 0x7a7a, 0x00c8, 0x48b1, 0x1078,
-+      0x5c44, 0x7824, 0xa005, 0x1040, 0x12cd, 0x781c, 0xa06d, 0x1040,
-+      0x12cd, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x1078, 0x5d1a,
-+      0x693c, 0x81ff, 0x1040, 0x12cd, 0x8109, 0x693e, 0x6854, 0xa015,
-+      0x0040, 0x48cd, 0x7a1e, 0x0078, 0x48cf, 0x7918, 0x791e, 0x7807,
-+      0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, 0x1078, 0x4d96, 0x0078,
-+      0x48a6, 0x6104, 0xa186, 0x0002, 0x0040, 0x48e4, 0xa186, 0x0004,
-+      0x0040, 0x48e4, 0x0078, 0x4868, 0x7808, 0xac06, 0x0040, 0x4868,
-+      0x1078, 0x4c9d, 0x1078, 0x498e, 0x0c7f, 0x1078, 0x4d96, 0x0078,
-+      0x4855, 0x0c7e, 0x6027, 0x0002, 0x2011, 0x7955, 0x2013, 0x0000,
-+      0x62c8, 0x82ff, 0x00c0, 0x490b, 0x62c4, 0x82ff, 0x00c0, 0x490b,
-+      0x793c, 0xa1e5, 0x0000, 0x0040, 0x4909, 0x2009, 0x0049, 0x1078,
-+      0x5d41, 0x0c7f, 0x007c, 0x3908, 0xa192, 0x7a7a, 0x00c8, 0x4912,
-+      0x1078, 0x5c44, 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x4909,
-+      0x7944, 0xa192, 0x7530, 0x00c8, 0x4931, 0x8108, 0x7946, 0x1078,
-+      0x470b, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0,
-+      0x492d, 0x6017, 0x0012, 0x0078, 0x4909, 0x6017, 0x0016, 0x0078,
-+      0x4909, 0x037e, 0x2019, 0x0001, 0x1078, 0x5880, 0x037f, 0x1078,
-+      0x76c7, 0x793c, 0x2160, 0x2009, 0x004a, 0x1078, 0x5d41, 0x0078,
-+      0x4909, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f,
-+      0x0000, 0x2c08, 0x2061, 0x7936, 0x6020, 0x8000, 0x6022, 0x6010,
-+      0xa005, 0x0040, 0x495c, 0xa080, 0x0003, 0x2102, 0x6112, 0x127f,
-+      0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, 0x4957,
-+      0x0d7e, 0x2069, 0x7936, 0x6000, 0xd0d4, 0x0040, 0x4975, 0x6820,
-+      0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x4970, 0x2c00, 0x681e,
-+      0x6804, 0xa084, 0x0007, 0x0079, 0x4d9e, 0xc0d5, 0x6002, 0x6818,
-+      0xa005, 0x0040, 0x4987, 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00,
-+      0x681a, 0x0d7f, 0x685a, 0x2069, 0x7936, 0x0078, 0x4967, 0x6056,
-+      0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x4967, 0x007e, 0x017e,
-+      0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
-+      0x7936, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, 0x49a9,
-+      0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f,
-+      0x007c, 0x610e, 0x610a, 0x0078, 0x49a4, 0x0c7e, 0x600f, 0x0000,
-+      0x2c08, 0x2061, 0x7936, 0x6034, 0xa005, 0x0040, 0x49bd, 0xa080,
-+      0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078,
-+      0x49bb, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
-+      0x127e, 0x2071, 0x7936, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000,
-+      0x8cff, 0x0040, 0x4a23, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
-+      0x00c0, 0x4a1e, 0x703c, 0xac06, 0x00c0, 0x49e3, 0x6003, 0x000a,
-+      0x630a, 0x0078, 0x4a1e, 0x7038, 0xac36, 0x00c0, 0x49e9, 0x660c,
-+      0x763a, 0x7034, 0xac36, 0x00c0, 0x49f7, 0x2c00, 0xaf36, 0x0040,
-+      0x49f5, 0x2f00, 0x7036, 0x0078, 0x49f7, 0x7037, 0x0000, 0x660c,
-+      0x067e, 0x2c00, 0xaf06, 0x0040, 0x4a00, 0x7e0e, 0x0078, 0x4a01,
-+      0x2678, 0x600f, 0x0000, 0x1078, 0x6a58, 0x0040, 0x4a19, 0x6010,
-+      0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4a2c, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078,
-+      0x6ba9, 0x1078, 0x6bb6, 0x0c7f, 0x0078, 0x49d0, 0x2c78, 0x600c,
-+      0x2060, 0x0078, 0x49d0, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f,
-+      0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0,
-+      0x4a0e, 0x1078, 0x75fd, 0x0078, 0x4a19, 0x007e, 0x067e, 0x0c7e,
-+      0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000, 0x2079,
-+      0x7936, 0x7838, 0xa065, 0x0040, 0x4a6c, 0x600c, 0x007e, 0x600f,
-+      0x0000, 0x783c, 0xac06, 0x00c0, 0x4a53, 0x6003, 0x000a, 0x630a,
-+      0x2c30, 0x0078, 0x4a69, 0x1078, 0x6a58, 0x0040, 0x4a67, 0x6010,
-+      0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4a75, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x1078,
-+      0x6bb6, 0x007f, 0x0078, 0x4a42, 0x7e3a, 0x7e36, 0x127f, 0x0f7f,
-+      0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, 0x0006,
-+      0x00c0, 0x4a5e, 0x1078, 0x75fd, 0x0078, 0x4a67, 0x027e, 0x1078,
-+      0x4a92, 0x1078, 0x4b2b, 0x027f, 0x007c, 0x0f7e, 0x127e, 0x2079,
-+      0x7936, 0x2091, 0x8000, 0x1078, 0x4bc2, 0x1078, 0x4c2a, 0x127f,
-+      0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e,
-+      0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x7614, 0x2660, 0x2678,
-+      0x8cff, 0x0040, 0x4b1a, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
-+      0x00c0, 0x4b15, 0x7024, 0xac06, 0x00c0, 0x4ad8, 0x2069, 0x0100,
-+      0x68c0, 0xa005, 0x0040, 0x4ad3, 0x1078, 0x569c, 0x68c3, 0x0000,
-+      0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
-+      0xa384, 0x1000, 0x0040, 0x4ac8, 0x6803, 0x0100, 0x6803, 0x0000,
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4ad0, 0x6827, 0x0001,
-+      0x037f, 0x0078, 0x4ad8, 0x6003, 0x0009, 0x630a, 0x0078, 0x4b15,
-+      0x7014, 0xac36, 0x00c0, 0x4ade, 0x660c, 0x7616, 0x7010, 0xac36,
-+      0x00c0, 0x4aec, 0x2c00, 0xaf36, 0x0040, 0x4aea, 0x2f00, 0x7012,
-+      0x0078, 0x4aec, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+      0x0040, 0x4af5, 0x7e0e, 0x0078, 0x4af6, 0x2678, 0x600f, 0x0000,
-+      0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x4b0e, 0x601c, 0xa086,
-+      0x0003, 0x00c0, 0x4b22, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6,
-+      0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x4aa0, 0x2c78, 0x600c, 0x2060,
-+      0x0078, 0x4aa0, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f,
-+      0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4b03, 0x1078,
-+      0x75fd, 0x0078, 0x4b0e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
-+      0xa280, 0x7820, 0x2004, 0xa065, 0x0040, 0x4bbe, 0x0f7e, 0x0e7e,
-+      0x0d7e, 0x067e, 0x2071, 0x7936, 0x6654, 0x7018, 0xac06, 0x00c0,
-+      0x4b42, 0x761a, 0x701c, 0xac06, 0x00c0, 0x4b4e, 0x86ff, 0x00c0,
-+      0x4b4d, 0x7018, 0x701e, 0x0078, 0x4b4e, 0x761e, 0x6058, 0xa07d,
-+      0x0040, 0x4b53, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x4b59, 0x2f00,
-+      0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
-+      0x6002, 0x1078, 0x37c5, 0x0040, 0x4bba, 0x7624, 0x86ff, 0x0040,
-+      0x4baa, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4baa, 0x0d7e,
-+      0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4ba1, 0x1078, 0x569c,
-+      0x68c3, 0x0000, 0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069,
-+      0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4b8a, 0x6803, 0x0100,
-+      0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4b92,
-+      0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040,
-+      0x4b9b, 0x8001, 0x603e, 0x2660, 0x1078, 0x6bb6, 0x0c7f, 0x0078,
-+      0x4baa, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f,
-+      0x0078, 0x4b61, 0x8dff, 0x0040, 0x4bb6, 0x6837, 0x0103, 0x6b4a,
-+      0x6847, 0x0000, 0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078, 0x5a1a,
-+      0x0078, 0x4b61, 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f,
-+      0x0c7f, 0x007c, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000,
-+      0x7814, 0xa065, 0x0040, 0x4c1a, 0x600c, 0x007e, 0x600f, 0x0000,
-+      0x7824, 0xac06, 0x00c0, 0x4bff, 0x2069, 0x0100, 0x68c0, 0xa005,
-+      0x0040, 0x4bf9, 0x1078, 0x569c, 0x68c3, 0x0000, 0x1078, 0x5b4a,
-+      0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+      0x0040, 0x4bee, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-+      0x6824, 0xd084, 0x0040, 0x4bf6, 0x6827, 0x0001, 0x037f, 0x0078,
-+      0x4bff, 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, 0x4c17, 0x6010,
-+      0x2068, 0x1078, 0x6a58, 0x0040, 0x4c13, 0x601c, 0xa086, 0x0003,
-+      0x00c0, 0x4c21, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
-+      0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6, 0x1078, 0x5a1a, 0x007f,
-+      0x0078, 0x4bc9, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
-+      0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4c0a, 0x1078, 0x75fd,
-+      0x0078, 0x4c13, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065,
-+      0x0040, 0x4c96, 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, 0x0000,
-+      0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x37c5, 0x0040, 0x4c93,
-+      0x7e24, 0x86ff, 0x0040, 0x4c85, 0xa680, 0x0004, 0x2004, 0xad06,
-+      0x00c0, 0x4c85, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040,
-+      0x4c7c, 0x1078, 0x569c, 0x68c3, 0x0000, 0x1078, 0x5b4a, 0x7827,
-+      0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040,
-+      0x4c65, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
-+      0xd084, 0x0040, 0x4c6d, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e,
-+      0x603c, 0xa005, 0x0040, 0x4c76, 0x8001, 0x603e, 0x2660, 0x1078,
-+      0x6bb6, 0x0c7f, 0x0078, 0x4c85, 0x0d7f, 0x0c7e, 0x2660, 0x6003,
-+      0x0009, 0x630a, 0x0c7f, 0x0078, 0x4c3c, 0x8dff, 0x0040, 0x4c8f,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078,
-+      0x5a1a, 0x0078, 0x4c3c, 0x007f, 0x0078, 0x4c2f, 0x781e, 0x781a,
-+      0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
-+      0x7936, 0x7004, 0xa084, 0x0007, 0x0079, 0x4ca6, 0x4cb0, 0x4cb3,
-+      0x4ccc, 0x4ce8, 0x4d2d, 0x4cb0, 0x4cb0, 0x4cae, 0x1078, 0x12cd,
-+      0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x4cc1, 0x7020,
-+      0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x4cc8, 0x7216, 0x600f,
-+      0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
-+      0x7216, 0x7212, 0x0078, 0x4cc1, 0x6018, 0x2060, 0x1078, 0x37c5,
-+      0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x4cdd,
-+      0x6054, 0xa015, 0x0040, 0x4ce4, 0x721e, 0x7007, 0x0000, 0x7027,
-+      0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x4cdd,
-+      0x7024, 0xa065, 0x0040, 0x4d2a, 0x700c, 0xac06, 0x00c0, 0x4cff,
-+      0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040, 0x4cfb, 0x720e, 0x600f,
-+      0x0000, 0x0078, 0x4d28, 0x720e, 0x720a, 0x0078, 0x4d28, 0x7014,
-+      0xac06, 0x00c0, 0x4d12, 0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040,
-+      0x4d0e, 0x7216, 0x600f, 0x0000, 0x0078, 0x4d28, 0x7216, 0x7212,
-+      0x0078, 0x4d28, 0x6018, 0x2060, 0x1078, 0x37c5, 0x6000, 0xc0dc,
-+      0x6002, 0x1078, 0x5a1a, 0x701c, 0xa065, 0x0040, 0x4d28, 0x6054,
-+      0xa015, 0x0040, 0x4d26, 0x721e, 0x0078, 0x4d28, 0x7218, 0x721e,
-+      0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040,
-+      0x4d3a, 0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040, 0x4d41, 0x720e,
-+      0x600f, 0x0000, 0x1078, 0x5b4a, 0x7027, 0x0000, 0x0c7f, 0x0e7f,
-+      0x007c, 0x720e, 0x720a, 0x0078, 0x4d3a, 0x0d7e, 0x2069, 0x7936,
-+      0x6830, 0xa084, 0x0003, 0x0079, 0x4d4d, 0x4d53, 0x4d55, 0x4d7b,
-+      0x4d53, 0x1078, 0x12cd, 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086,
-+      0x0001, 0x0040, 0x4d71, 0x683c, 0xa065, 0x0040, 0x4d66, 0x600c,
-+      0xa015, 0x0040, 0x4d6d, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000,
-+      0x683f, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836, 0x0078,
-+      0x4d66, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x4d66, 0x6003,
-+      0x0003, 0x0078, 0x4d66, 0x0c7e, 0x6843, 0x0000, 0x6847, 0x0000,
-+      0x683c, 0xa065, 0x0040, 0x4d93, 0x600c, 0xa015, 0x0040, 0x4d8f,
-+      0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0078, 0x4d93, 0x683f,
-+      0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, 0x2069,
-+      0x7936, 0x6804, 0xa084, 0x0007, 0x0079, 0x4d9e, 0x4da8, 0x4e45,
-+      0x4e45, 0x4e45, 0x4e45, 0x4e47, 0x4e45, 0x4da6, 0x1078, 0x12cd,
-+      0x6820, 0xa005, 0x00c0, 0x4dae, 0x0d7f, 0x007c, 0x0c7e, 0x680c,
-+      0xa065, 0x0040, 0x4dbd, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000,
-+      0x1078, 0x4e8d, 0x0c7f, 0x0d7f, 0x007c, 0x6814, 0xa065, 0x0040,
-+      0x4dcb, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x1078, 0x4e8d,
-+      0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, 0x0000,
-+      0x0040, 0x4e40, 0x704c, 0xa00d, 0x0040, 0x4dda, 0x7088, 0xa005,
-+      0x0040, 0x4df2, 0x7054, 0xa075, 0x0040, 0x4de3, 0xa20e, 0x0040,
-+      0x4e40, 0x0078, 0x4de8, 0x6818, 0xa20e, 0x0040, 0x4e40, 0x2070,
-+      0x704c, 0xa00d, 0x0040, 0x4dda, 0x7088, 0xa005, 0x00c0, 0x4dda,
-+      0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x00c8, 0x4dda, 0x1078,
-+      0x5ce9, 0x0040, 0x4e40, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a,
-+      0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0048, 0x4e09, 0x2001,
-+      0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e,
-+      0x2c78, 0x71a0, 0xd1bc, 0x0040, 0x4e22, 0x7100, 0xd1f4, 0x0040,
-+      0x4e1e, 0x7114, 0xa18c, 0x00ff, 0x0078, 0x4e27, 0x2009, 0x0000,
-+      0x0078, 0x4e27, 0xa1e0, 0x2329, 0x2c0c, 0xa18c, 0x00ff, 0x2061,
-+      0x0100, 0x619a, 0x1078, 0x52de, 0x7300, 0xc3dd, 0x7302, 0x6807,
-+      0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, 0x7803,
-+      0x0001, 0x7807, 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c,
-+      0x037f, 0x0e7f, 0x0c7f, 0x0078, 0x4e3e, 0x0d7f, 0x007c, 0x0c7e,
-+      0x680c, 0xa065, 0x0040, 0x4e53, 0x6807, 0x0004, 0x6826, 0x682b,
-+      0x0000, 0x1078, 0x4e8d, 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e,
-+      0x2069, 0x7936, 0x6830, 0xa086, 0x0000, 0x00c0, 0x4e74, 0x6838,
-+      0xa07d, 0x0040, 0x4e74, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000,
-+      0x127e, 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1a44, 0x00c0,
-+      0x4e77, 0x127f, 0x1078, 0x5571, 0x0d7f, 0x0f7f, 0x007c, 0x127f,
-+      0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x4e89,
-+      0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078,
-+      0x4e74, 0x683a, 0x6836, 0x0078, 0x4e83, 0x601c, 0xa084, 0x000f,
-+      0x1079, 0x4e93, 0x007c, 0x4e9c, 0x4ea1, 0x51a8, 0x529e, 0x4ea1,
-+      0x51a8, 0x529e, 0x4e9c, 0x4ea1, 0x1078, 0x4c9d, 0x1078, 0x4d96,
-+      0x007c, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a,
-+      0x0030, 0x10c8, 0x12cd, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040,
-+      0x4ebe, 0x7900, 0xd1f4, 0x0040, 0x4eba, 0x7914, 0xa18c, 0x00ff,
-+      0x0078, 0x4ec3, 0x2009, 0x0000, 0x0078, 0x4ec3, 0xa1f8, 0x2329,
-+      0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x1079,
-+      0x4ecf, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x4f01,
-+      0x4f39, 0x4f51, 0x4fd0, 0x4ffd, 0x5005, 0x5026, 0x5037, 0x5048,
-+      0x5050, 0x5061, 0x5050, 0x50a9, 0x5037, 0x50ca, 0x50d2, 0x5048,
-+      0x50d2, 0x50e3, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff,
-+      0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x5758, 0x576d,
-+      0x5790, 0x57b4, 0x5026, 0x4eff, 0x5026, 0x5050, 0x4eff, 0x4f51,
-+      0x4fd0, 0x4eff, 0x5c64, 0x5050, 0x4eff, 0x5c87, 0x5050, 0x1078,
-+      0x12cd, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x5200, 0x20a3,
-+      0x0000, 0x0d7e, 0x2069, 0x7751, 0x6804, 0xd084, 0x0040, 0x4f1b,
-+      0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2094, 0x21a2, 0x017f,
-+      0x0d7f, 0x0078, 0x4f20, 0x0d7f, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a9, 0x0004, 0x2099, 0x7705, 0x53a6, 0x20a9, 0x0004, 0x2099,
-+      0x7701, 0x53a6, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x5688,
-+      0x007c, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x0500, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a9,
-+      0x0004, 0x2099, 0x7705, 0x53a6, 0x60c3, 0x0010, 0x1078, 0x5688,
-+      0x007c, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xa086, 0x007e, 0x00c0, 0x4f64, 0x20a3, 0x0400, 0x620c,
-+      0xc2b4, 0x620e, 0x0078, 0x4f66, 0x20a3, 0x0300, 0x20a3, 0x0000,
-+      0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x4f9f,
-+      0x2099, 0x7920, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304, 0xa084,
-+      0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x7705,
-+      0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, 0x20a9, 0x0010,
-+      0x20a3, 0x0000, 0x00f0, 0x4f90, 0x2099, 0x7928, 0x33a6, 0x20a9,
-+      0x0007, 0x20a3, 0x0000, 0x00f0, 0x4f99, 0x0078, 0x4fbf, 0x2099,
-+      0x7920, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7705,
-+      0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, 0x20a9, 0x0008,
-+      0x20a3, 0x0000, 0x00f0, 0x4fb0, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+      0x00f0, 0x4fb6, 0x2099, 0x7928, 0x20a9, 0x0008, 0x53a6, 0x20a9,
-+      0x0008, 0x20a3, 0x0000, 0x00f0, 0x4fc1, 0x20a9, 0x000a, 0x20a3,
-+      0x0000, 0x00f0, 0x4fc7, 0x60c3, 0x0074, 0x1078, 0x5688, 0x007c,
-+      0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x2010, 0x20a3, 0x0014,
-+      0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+      0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x7751, 0x7904, 0x0f7f, 0xd1ac,
-+      0x00c0, 0x4fec, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4ff1, 0xa085,
-+      0x0010, 0xa085, 0x0002, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b, 0x1078,
-+      0x50f8, 0x20a3, 0x5000, 0x0078, 0x4f66, 0x20a1, 0x020b, 0x1078,
-+      0x50f8, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x0014, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b,
-+      0x1078, 0x516f, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x5688, 0x007c, 0x20a1,
-+      0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x5688, 0x007c,
-+      0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0200, 0x0078, 0x4f66,
-+      0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+      0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5688,
-+      0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0210,
-+      0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086,
-+      0x0014, 0x00c0, 0x5087, 0x6998, 0xa184, 0xc000, 0x00c0, 0x5083,
-+      0xd1ec, 0x0040, 0x507f, 0x20a3, 0x2100, 0x0078, 0x5089, 0x20a3,
-+      0x0100, 0x0078, 0x5089, 0x20a3, 0x0400, 0x0078, 0x5089, 0x20a3,
-+      0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
-+      0x2079, 0x7751, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x5099, 0xa085,
-+      0x0020, 0xd1a4, 0x0040, 0x509e, 0xa085, 0x0010, 0xa085, 0x0002,
-+      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x5688, 0x0d7f,
-+      0x007c, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0210, 0x20a3,
-+      0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-+      0x5688, 0x007c, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0200,
-+      0x0078, 0x4f07, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
-+      0x1078, 0x5688, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
-+      0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
-+      0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x5688, 0x007c,
-+      0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+      0x2014, 0xa286, 0x007e, 0x00c0, 0x510b, 0x20a3, 0x22ff, 0x20a3,
-+      0xfffe, 0x0078, 0x5139, 0xa286, 0x007f, 0x00c0, 0x5116, 0x0d7e,
-+      0x20a3, 0x22ff, 0x20a3, 0xfffd, 0x0078, 0x512d, 0xd2bc, 0x0040,
-+      0x5135, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x5124, 0x20a3, 0x22ff,
-+      0x20a3, 0xfffc, 0x0078, 0x512d, 0xa2e8, 0x7820, 0x2d6c, 0x6810,
-+      0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6,
-+      0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x513d, 0x20a3, 0x2200, 0x6298,
-+      0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0129, 0x20a3,
-+      0x0000, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3,
-+      0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc,
-+      0x22a2, 0x0d7e, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+      0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x5141, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x007c, 0x027e,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0xa092, 0x007e, 0x0048, 0x518e, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
-+      0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5196, 0x20a3, 0x2300,
-+      0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0198,
-+      0x20a3, 0x0000, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x7a08,
-+      0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c,
-+      0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x12cd, 0xa08a,
-+      0x008c, 0x10c8, 0x12cd, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040,
-+      0x51c6, 0x7900, 0xd1f4, 0x0040, 0x51c2, 0x7914, 0xa18c, 0x00ff,
-+      0x0078, 0x51cb, 0x2009, 0x0000, 0x0078, 0x51cb, 0xa1f8, 0x2329,
-+      0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082,
-+      0x0085, 0x1079, 0x51d6, 0x0f7f, 0x0c7f, 0x007c, 0x51df, 0x51ea,
-+      0x5204, 0x51dd, 0x51dd, 0x51dd, 0x51df, 0x1078, 0x12cd, 0x147e,
-+      0x20a1, 0x020b, 0x1078, 0x5217, 0x60c3, 0x0000, 0x1078, 0x5688,
-+      0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5244, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x2fa2, 0x20a3, 0x0000,
-+      0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c,
-+      0x1078, 0x5688, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078,
-+      0x5271, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x0004, 0x1078, 0x5688, 0x147f, 0x007c, 0x027e,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0xa092, 0x007e, 0x0048, 0x5236, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
-+      0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x523e, 0x20a3, 0x8100,
-+      0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0009,
-+      0x20a3, 0x0000, 0x0078, 0x5141, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048,
-+      0x5263, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x8400,
-+      0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6,
-+      0x0d7f, 0x0078, 0x526b, 0x20a3, 0x8400, 0x6298, 0x22a2, 0x20a3,
-+      0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078,
-+      0x519a, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+      0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x5290, 0x0d7e, 0xa0e8,
-+      0x7820, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2,
-+      0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5298,
-+      0x20a3, 0x8500, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2,
-+      0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x519a, 0x0c7e, 0x0f7e,
-+      0x2c78, 0x7804, 0xa08a, 0x0040, 0x1048, 0x12cd, 0xa08a, 0x0050,
-+      0x10c8, 0x12cd, 0x7918, 0x2160, 0x61a0, 0xd1bc, 0x0040, 0x52bd,
-+      0x6100, 0xd1f4, 0x0040, 0x52b9, 0x6114, 0xa18c, 0x00ff, 0x0078,
-+      0x52c2, 0x2009, 0x0000, 0x0078, 0x52c2, 0xa1e0, 0x2329, 0x2c0c,
-+      0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x1079,
-+      0x52cc, 0x0f7f, 0x0c7f, 0x007c, 0x52de, 0x53c4, 0x536c, 0x54ec,
-+      0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x5933,
-+      0x5944, 0x5955, 0x5966, 0x52dc, 0x1078, 0x12cd, 0x0d7e, 0x157e,
-+      0x147e, 0x20a1, 0x020b, 0x1078, 0x532f, 0x7910, 0x2168, 0x6948,
-+      0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x0006,
-+      0x8004, 0x20a2, 0xd1ac, 0x0040, 0x52f9, 0x20a3, 0x0002, 0x0078,
-+      0x5305, 0xd1b4, 0x0040, 0x5300, 0x20a3, 0x0001, 0x0078, 0x5305,
-+      0x20a3, 0x0000, 0x2230, 0x0078, 0x5307, 0x6a80, 0x6e7c, 0x20a9,
-+      0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0,
-+      0x530b, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014,
-+      0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x7952, 0x2003,
-+      0x07d0, 0x2001, 0x7951, 0x2003, 0x0009, 0x2001, 0x7957, 0x2003,
-+      0x0002, 0x1078, 0x14fc, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210,
-+      0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0xd0bc, 0x0040, 0x5355, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810,
-+      0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6,
-+      0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x535d, 0x20a3, 0x0600, 0x6198,
-+      0x21a2, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
-+      0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+      0x20a1, 0x020b, 0x1078, 0x538c, 0x7810, 0x2068, 0x6860, 0x20a2,
-+      0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x5688, 0x147f,
-+      0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x53aa,
-+      0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+      0x0078, 0x53b2, 0x20a3, 0x0500, 0x6298, 0x22a2, 0x20a3, 0x0000,
-+      0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x5677,
-+      0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+      0x20a1, 0x020b, 0x1078, 0x54b4, 0x7810, 0x2068, 0xa016, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x00c0,
-+      0x53e1, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x53e9, 0x0078,
-+      0x53e4, 0xa006, 0x1079, 0x53e9, 0x147f, 0x137f, 0x157f, 0x0d7f,
-+      0x007c, 0x53f3, 0x5455, 0x5459, 0x547c, 0x5489, 0x549b, 0x549f,
-+      0x53f1, 0x1078, 0x12cd, 0x017e, 0x037e, 0x694c, 0xa18c, 0x0003,
-+      0xa186, 0x0000, 0x00c0, 0x5406, 0x6b78, 0x23a2, 0x6868, 0x20a2,
-+      0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x5480, 0xa186, 0x0001,
-+      0x00c0, 0x5450, 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2,
-+      0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018,
-+      0xa384, 0x0300, 0x0040, 0x544f, 0xd3c4, 0x0040, 0x5421, 0x687c,
-+      0xa108, 0xd3cc, 0x0040, 0x5426, 0x6874, 0xa108, 0x157e, 0x20a9,
-+      0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0,
-+      0x542b, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040,
-+      0x544f, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3,
-+      0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
-+      0x0898, 0x20a2, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x61c2,
-+      0x037f, 0x017f, 0x1078, 0x5688, 0x007c, 0x20a3, 0x0008, 0x0078,
-+      0x547e, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012,
-+      0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3,
-+      0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2,
-+      0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
-+      0x0032, 0x1078, 0x5688, 0x007c, 0x20a3, 0x0028, 0x22a2, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x1078, 0x5688,
-+      0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-+      0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0020,
-+      0x1078, 0x5688, 0x007c, 0x20a3, 0x0008, 0x0078, 0x547e, 0x037e,
-+      0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0,
-+      0x54ad, 0x22a2, 0x037f, 0x0078, 0x547e, 0x20a3, 0x0800, 0x22a2,
-+      0x20a2, 0x037f, 0x0078, 0x5480, 0x027e, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x54d2,
-+      0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-+      0x0078, 0x54da, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000,
-+      0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, 0x1078, 0x5677,
-+      0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
-+      0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x54ff,
-+      0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x5507,
-+      0x5507, 0x5509, 0x5507, 0x5507, 0x5507, 0x552e, 0x5507, 0x1078,
-+      0x12cd, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1,
-+      0x020b, 0x2009, 0x0003, 0x1078, 0x5538, 0x0d7e, 0x2069, 0x7751,
-+      0x6804, 0xd0bc, 0x0040, 0x5523, 0x682c, 0xa084, 0x00ff, 0x8007,
-+      0x20a2, 0x0078, 0x5525, 0x20a3, 0x3f00, 0x0d7f, 0x22a2, 0x22a2,
-+      0x22a2, 0x60c3, 0x0001, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b,
-+      0x2009, 0x0003, 0x1078, 0x5538, 0x20a3, 0x7f00, 0x0078, 0x5526,
-+      0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xd0bc, 0x0040, 0x5556, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
-+      0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
-+      0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x555e, 0x20a3, 0x0100,
-+      0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0888,
-+      0xa18d, 0x0008, 0x21a2, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000,
-+      0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
-+      0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e, 0x037e, 0x2061,
-+      0x0100, 0x2071, 0x7700, 0x6130, 0x7818, 0x2068, 0x68a0, 0x2028,
-+      0xd0bc, 0x00c0, 0x558a, 0xa080, 0x2329, 0x2014, 0xa294, 0x00ff,
-+      0x0078, 0x558e, 0x6910, 0x6a14, 0x7364, 0x7468, 0x781c, 0xa086,
-+      0x0006, 0x0040, 0x55e2, 0xd5bc, 0x0040, 0x559e, 0xa185, 0x0100,
-+      0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x55a4, 0x6063, 0x0100,
-+      0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, 0x6077, 0x0008,
-+      0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f,
-+      0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014,
-+      0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c,
-+      0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582,
-+      0x0080, 0x0048, 0x55d6, 0x6a00, 0xd2f4, 0x0040, 0x55d4, 0x6a14,
-+      0xa294, 0x00ff, 0x0078, 0x55d6, 0x2011, 0x0000, 0x629e, 0x6017,
-+      0x0016, 0x1078, 0x470b, 0x037f, 0x047f, 0x057f, 0x0c7f, 0x0d7f,
-+      0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086,
-+      0x0002, 0x0040, 0x5631, 0xd5bc, 0x0040, 0x55f6, 0xa185, 0x0100,
-+      0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x55fc, 0x6063, 0x0100,
-+      0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0880, 0x6077, 0x0008,
-+      0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f,
-+      0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c,
-+      0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab,
-+      0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048,
-+      0x562c, 0x6a00, 0xd2f4, 0x0040, 0x562a, 0x6a14, 0xa294, 0x00ff,
-+      0x0078, 0x562c, 0x2011, 0x0000, 0x629e, 0x6017, 0x0012, 0x0078,
-+      0x55d9, 0xd5bc, 0x0040, 0x563c, 0xa185, 0x0700, 0x6062, 0x6266,
-+      0x636a, 0x646e, 0x0078, 0x5642, 0x6063, 0x0700, 0x6266, 0x606b,
-+      0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000,
-+      0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
-+      0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
-+      0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af,
-+      0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, 0x5672, 0x6a00,
-+      0xd2f4, 0x0040, 0x5670, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x5672,
-+      0x2011, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, 0x55d9, 0x7a18,
-+      0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217,
-+      0x007c, 0x0d7e, 0x2069, 0x7936, 0x6843, 0x0001, 0x0d7f, 0x007c,
-+      0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x5693,
-+      0x1078, 0x46fb, 0x007c, 0x007e, 0x6014, 0xa084, 0x0004, 0xa085,
-+      0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, 0x0100,
-+      0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, 0x007f,
-+      0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, 0x4706, 0x2061,
-+      0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x56e6,
-+      0x1078, 0x569c, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, 0x2061,
-+      0x7936, 0x6128, 0xa192, 0x0002, 0x00c8, 0x56d3, 0x8108, 0x612a,
-+      0x6124, 0x0c7f, 0x81ff, 0x0040, 0x56e1, 0x1078, 0x46fb, 0x1078,
-+      0x5693, 0x0078, 0x56e1, 0x6124, 0xa1e5, 0x0000, 0x0040, 0x56de,
-+      0x1078, 0x76c7, 0x2009, 0x0014, 0x1078, 0x5d41, 0x0c7f, 0x0078,
-+      0x56e1, 0x027f, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, 0x3591,
-+      0x0078, 0x56e1, 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078,
-+      0x4714, 0x2071, 0x7936, 0x713c, 0x81ff, 0x0040, 0x5714, 0x2061,
-+      0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x571a,
-+      0x6803, 0x1000, 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078,
-+      0x5880, 0x037f, 0x713c, 0x2160, 0x1078, 0x76c7, 0x2009, 0x004a,
-+      0x1078, 0x5d41, 0x0078, 0x5714, 0x027f, 0x017f, 0x0e7f, 0x0d7f,
-+      0x0c7f, 0x007c, 0x7144, 0xa192, 0x0002, 0x00c8, 0x5704, 0x8108,
-+      0x7146, 0x1078, 0x470b, 0x0078, 0x5714, 0x0e7e, 0x0d7e, 0x0c7e,
-+      0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018,
-+      0x2068, 0x6ca0, 0x2071, 0x7936, 0x7018, 0x2068, 0x8dff, 0x0040,
-+      0x574f, 0x68a0, 0xa406, 0x0040, 0x5741, 0x6854, 0x2068, 0x0078,
-+      0x5736, 0x6010, 0x2060, 0x643c, 0x6540, 0x6e48, 0x2d60, 0x1078,
-+      0x3991, 0x0040, 0x574f, 0x1078, 0x5a1a, 0xa085, 0x0001, 0x127f,
-+      0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c,
-+      0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x0f00,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008,
-+      0x1078, 0x5688, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
-+      0x020b, 0x1078, 0x516f, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9,
-+      0x0006, 0x2011, 0x7740, 0x2019, 0x7741, 0x23a6, 0x22a6, 0xa398,
-+      0x0002, 0xa290, 0x0002, 0x00f0, 0x577d, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x001c, 0x1078, 0x5688, 0x147f, 0x157f, 0x007c,
-+      0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b, 0x1078, 0x514f,
-+      0x1078, 0x5166, 0x7810, 0x007e, 0xa080, 0x0015, 0x2098, 0x7808,
-+      0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2,
-+      0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, 0x5688, 0x027f,
-+      0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
-+      0x1078, 0x50f8, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5688, 0x147f, 0x157f,
-+      0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071,
-+      0x7936, 0x700c, 0x2060, 0x8cff, 0x0040, 0x57e5, 0x1078, 0x6be3,
-+      0x00c0, 0x57dc, 0x1078, 0x5f6d, 0x600c, 0x007e, 0x1078, 0x5d1a,
-+      0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x57d3, 0x700f, 0x0000, 0x700b,
-+      0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e,
-+      0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091,
-+      0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x7936, 0x7024,
-+      0x2060, 0x8cff, 0x0040, 0x583e, 0x1078, 0x569c, 0x68c3, 0x0000,
-+      0x1078, 0x4706, 0x2009, 0x0013, 0x1078, 0x5d41, 0x20a9, 0x01f4,
-+      0x6824, 0xd094, 0x0040, 0x5821, 0x6827, 0x0004, 0x7804, 0xa084,
-+      0x4000, 0x0040, 0x5833, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
-+      0x5833, 0xd084, 0x0040, 0x5828, 0x6827, 0x0001, 0x0078, 0x582a,
-+      0x00f0, 0x5810, 0x7804, 0xa084, 0x1000, 0x0040, 0x5833, 0x7803,
-+      0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f,
-+      0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0x7700,
-+      0x2004, 0xa096, 0x0001, 0x0040, 0x5876, 0xa096, 0x0004, 0x0040,
-+      0x5876, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x3558, 0x1078,
-+      0x4689, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x5864, 0x6827,
-+      0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5876, 0x7803, 0x1000,
-+      0x7803, 0x0000, 0x0078, 0x5876, 0xd084, 0x0040, 0x586b, 0x6827,
-+      0x0001, 0x0078, 0x586d, 0x00f0, 0x5853, 0x7804, 0xa084, 0x1000,
-+      0x0040, 0x5876, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
-+      0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+      0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
-+      0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-+      0x7936, 0x703c, 0x2060, 0x8cff, 0x0040, 0x58ce, 0x6817, 0x0010,
-+      0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, 0x4714, 0x1078, 0x1c13,
-+      0xa39d, 0x0000, 0x00c0, 0x58a8, 0x2009, 0x0049, 0x1078, 0x5d41,
-+      0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x58bb, 0x6827, 0x0004,
-+      0x7804, 0xa084, 0x4000, 0x0040, 0x58cd, 0x7803, 0x1000, 0x7803,
-+      0x0000, 0x0078, 0x58cd, 0xd094, 0x0040, 0x58c2, 0x6827, 0x0002,
-+      0x0078, 0x58c4, 0x00f0, 0x58aa, 0x7804, 0xa084, 0x1000, 0x0040,
-+      0x58cd, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
-+      0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-+      0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7936, 0x6a06, 0x127f,
-+      0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7936,
-+      0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-+      0x007e, 0x127e, 0x2071, 0x7936, 0x7614, 0x2660, 0x2678, 0x2091,
-+      0x8000, 0x8cff, 0x0040, 0x592c, 0x601c, 0xa206, 0x00c0, 0x5927,
-+      0x7014, 0xac36, 0x00c0, 0x5906, 0x660c, 0x7616, 0x7010, 0xac36,
-+      0x00c0, 0x5914, 0x2c00, 0xaf36, 0x0040, 0x5912, 0x2f00, 0x7012,
-+      0x0078, 0x5914, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-+      0x0040, 0x591d, 0x7e0e, 0x0078, 0x591e, 0x2678, 0x600f, 0x0000,
-+      0x1078, 0x6bb6, 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x58f9, 0x2c78,
-+      0x600c, 0x2060, 0x0078, 0x58f9, 0x127f, 0x007f, 0x067f, 0x0c7f,
-+      0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
-+      0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+      0x20a3, 0x4000, 0x0078, 0x5975, 0x157e, 0x147e, 0x20a1, 0x020b,
-+      0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+      0x20a2, 0x20a3, 0x2000, 0x0078, 0x5975, 0x157e, 0x147e, 0x20a1,
-+      0x020b, 0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x5975, 0x157e, 0x147e,
-+      0x20a1, 0x020b, 0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x5a25, 0x60c3,
-+      0x0020, 0x1078, 0x5688, 0x147f, 0x157f, 0x007c, 0x127e, 0x0c7e,
-+      0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0, 0x598d,
-+      0xd1bc, 0x00c0, 0x59d7, 0x0078, 0x5a17, 0x2009, 0x017f, 0x200b,
-+      0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e,
-+      0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x59ce, 0x6020,
-+      0xd0b4, 0x0040, 0x59ce, 0x6024, 0xd094, 0x00c0, 0x59ce, 0x2104,
-+      0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x59ce, 0x00f0, 0x599a,
-+      0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff,
-+      0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043, 0x0001,
-+      0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0, 0x59cd,
-+      0x6a04, 0xa294, 0x4000, 0x00c0, 0x59c4, 0x027f, 0x0d7f, 0x007f,
-+      0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x5a17, 0x2009,
-+      0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140,
-+      0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040,
-+      0x5a10, 0x6020, 0xd0bc, 0x0040, 0x5a10, 0x2104, 0xa084, 0x000f,
-+      0xa086, 0x0004, 0x00c0, 0x5a10, 0x00f0, 0x59e4, 0x027e, 0x6164,
-+      0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088,
-+      0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043, 0x0000,
-+      0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x5a0a, 0x027f,
-+      0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0c7f,
-+      0x127f, 0x007c, 0x0e7e, 0x2071, 0x7936, 0x7020, 0xa005, 0x0040,
-+      0x5a23, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008, 0x20a2,
-+      0x00f0, 0x5a27, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e,
-+      0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071,
-+      0x7936, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0040,
-+      0x5abd, 0x8cff, 0x0040, 0x5abd, 0x601c, 0xa086, 0x0006, 0x00c0,
-+      0x5ab8, 0x88ff, 0x0040, 0x5a54, 0x2800, 0xac06, 0x00c0, 0x5ab8,
-+      0x2039, 0x0000, 0x0078, 0x5a58, 0x6018, 0xa206, 0x00c0, 0x5ab8,
-+      0x7024, 0xac06, 0x00c0, 0x5a86, 0x2069, 0x0100, 0x68c0, 0xa005,
-+      0x0040, 0x5a81, 0x6817, 0x0008, 0x68c3, 0x0000, 0x1078, 0x5b4a,
-+      0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-+      0x0040, 0x5a76, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-+      0x6824, 0xd084, 0x0040, 0x5a7e, 0x6827, 0x0001, 0x037f, 0x0078,
-+      0x5a86, 0x6003, 0x0009, 0x630a, 0x0078, 0x5ab8, 0x7014, 0xac36,
-+      0x00c0, 0x5a8c, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x5a9a,
-+      0x2c00, 0xaf36, 0x0040, 0x5a98, 0x2f00, 0x7012, 0x0078, 0x5a9a,
-+      0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5aa3,
-+      0x7e0e, 0x0078, 0x5aa4, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068,
-+      0x1078, 0x6a58, 0x0040, 0x5aae, 0x1078, 0x75fd, 0x1078, 0x6bb6,
-+      0x1078, 0x5a1a, 0x88ff, 0x00c0, 0x5ac7, 0x0c7f, 0x0078, 0x5a3e,
-+      0x2c78, 0x600c, 0x2060, 0x0078, 0x5a3e, 0xa006, 0x127f, 0x007f,
-+      0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017,
-+      0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5abe, 0x0f7e, 0x0e7e,
-+      0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000,
-+      0x2071, 0x7936, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5b39,
-+      0x601c, 0xa086, 0x0006, 0x00c0, 0x5b34, 0x88ff, 0x0040, 0x5aee,
-+      0x2800, 0xac06, 0x00c0, 0x5b34, 0x0078, 0x5af2, 0x6018, 0xa206,
-+      0x00c0, 0x5b34, 0x703c, 0xac06, 0x00c0, 0x5b04, 0x037e, 0x2019,
-+      0x0001, 0x1078, 0x5880, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043,
-+      0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x5b0a,
-+      0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5b18, 0x2c00, 0xaf36,
-+      0x0040, 0x5b16, 0x2f00, 0x7036, 0x0078, 0x5b18, 0x7037, 0x0000,
-+      0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5b21, 0x7e0e, 0x0078,
-+      0x5b22, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x6a58,
-+      0x0040, 0x5b2c, 0x1078, 0x75fd, 0x1078, 0x6bb6, 0x88ff, 0x00c0,
-+      0x5b43, 0x0c7f, 0x0078, 0x5add, 0x2c78, 0x600c, 0x2060, 0x0078,
-+      0x5add, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f,
-+      0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001,
-+      0x0078, 0x5b3a, 0x0e7e, 0x2071, 0x7936, 0x2001, 0x7700, 0x2004,
-+      0xa086, 0x0002, 0x00c0, 0x5b58, 0x7007, 0x0005, 0x0078, 0x5b5a,
-+      0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-+      0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x2c10,
-+      0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5b9a, 0x2200, 0xac06,
-+      0x00c0, 0x5b95, 0x7038, 0xac36, 0x00c0, 0x5b78, 0x660c, 0x763a,
-+      0x7034, 0xac36, 0x00c0, 0x5b86, 0x2c00, 0xaf36, 0x0040, 0x5b84,
-+      0x2f00, 0x7036, 0x0078, 0x5b86, 0x7037, 0x0000, 0x660c, 0x2c00,
-+      0xaf06, 0x0040, 0x5b8e, 0x7e0e, 0x0078, 0x5b8f, 0x2678, 0x600f,
-+      0x0000, 0xa085, 0x0001, 0x0078, 0x5b9a, 0x2c78, 0x600c, 0x2060,
-+      0x0078, 0x5b6b, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f,
-+      0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e,
-+      0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x760c, 0x2660, 0x2678,
-+      0x8cff, 0x0040, 0x5c33, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
-+      0x00c0, 0x5c2e, 0x7024, 0xac06, 0x00c0, 0x5be1, 0x2069, 0x0100,
-+      0x68c0, 0xa005, 0x0040, 0x5be1, 0x1078, 0x569c, 0x68c3, 0x0000,
-+      0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
-+      0xa384, 0x1000, 0x0040, 0x5bd8, 0x6803, 0x0100, 0x6803, 0x0000,
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5be0, 0x6827, 0x0001,
-+      0x037f, 0x700c, 0xac36, 0x00c0, 0x5be7, 0x660c, 0x760e, 0x7008,
-+      0xac36, 0x00c0, 0x5bf5, 0x2c00, 0xaf36, 0x0040, 0x5bf3, 0x2f00,
-+      0x700a, 0x0078, 0x5bf5, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00,
-+      0xaf06, 0x0040, 0x5bfe, 0x7e0e, 0x0078, 0x5bff, 0x2678, 0x600f,
-+      0x0000, 0x1078, 0x6bcf, 0x00c0, 0x5c09, 0x1078, 0x22d7, 0x0078,
-+      0x5c25, 0x1078, 0x6be3, 0x00c0, 0x5c11, 0x1078, 0x5f6d, 0x0078,
-+      0x5c25, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x5c25, 0x601c,
-+      0xa086, 0x0003, 0x00c0, 0x5c3b, 0x6837, 0x0103, 0x6b4a, 0x6847,
-+      0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x6003, 0x0000, 0x1078,
-+      0x6bb6, 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x5bb0, 0x2c78, 0x600c,
-+      0x2060, 0x0078, 0x5bb0, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f,
-+      0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x5c1c,
-+      0x1078, 0x75fd, 0x0078, 0x5c25, 0x037e, 0x157e, 0x137e, 0x147e,
-+      0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2149, 0x00c0,
-+      0x5c55, 0x8210, 0x8000, 0x0078, 0x5c4c, 0xa005, 0x0040, 0x5c5f,
-+      0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, 0x53a3, 0x147f,
-+      0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
-+      0x516f, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x514c, 0x20a3, 0x4f47, 0x20a3,
-+      0x4943, 0x20a3, 0x2020, 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x1078, 0x5688, 0x0d7f, 0x007c, 0x20a1,
-+      0x020b, 0x1078, 0x516f, 0x20a3, 0x0210, 0x20a3, 0x0018, 0x20a3,
-+      0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810,
-+      0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0018, 0x1078, 0x5688, 0x007c, 0x2061, 0x7e00, 0x2a70, 0x7060,
-+      0x7046, 0x704b, 0x7e00, 0x007c, 0x0e7e, 0x127e, 0x2071, 0x7700,
-+      0x2091, 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, 0x5ce6, 0x7048,
-+      0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5cd2, 0xace0, 0x0008,
-+      0x7054, 0xac02, 0x00c8, 0x5cce, 0x0078, 0x5cc1, 0x2061, 0x7e00,
-+      0x0078, 0x5cc1, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008,
-+      0x7054, 0xa502, 0x00c8, 0x5ce2, 0x754a, 0xa085, 0x0001, 0x127f,
-+      0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, 0x5cdd, 0xa006, 0x0078,
-+      0x5cdf, 0x0e7e, 0x2071, 0x7700, 0x7544, 0xa582, 0x0001, 0x0048,
-+      0x5d17, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5d04,
-+      0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5d00, 0x0078, 0x5cf3,
-+      0x2061, 0x7e00, 0x0078, 0x5cf3, 0x6003, 0x0008, 0x8529, 0x7546,
-+      0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5d13, 0x754a, 0xa085,
-+      0x0001, 0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, 0x5d0f, 0xa006,
-+      0x0078, 0x5d11, 0xac82, 0x7e00, 0x1048, 0x12cd, 0x2001, 0x7715,
-+      0x2004, 0xac02, 0x10c8, 0x12cd, 0xa006, 0x6006, 0x600a, 0x600e,
-+      0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x2061,
-+      0x7700, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0040, 0x5d39,
-+      0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x0078,
-+      0x5d38, 0x601c, 0xa084, 0x000f, 0x0079, 0x5d46, 0x5d4f, 0x5d57,
-+      0x5d73, 0x5d8f, 0x6c60, 0x6c7c, 0x6c98, 0x5d4f, 0x5d57, 0xa18e,
-+      0x0047, 0x00c0, 0x5d56, 0xa016, 0x1078, 0x156a, 0x007c, 0x067e,
-+      0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5d61, 0x067f,
-+      0x007c, 0x5d71, 0x5e58, 0x5f88, 0x5d71, 0x5fdf, 0x5d71, 0x5d71,
-+      0x5d71, 0x5e07, 0x6298, 0x5d71, 0x5d71, 0x5d71, 0x5d71, 0x5d71,
-+      0x5d71, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
-+      0x12cd, 0x1079, 0x5d7d, 0x067f, 0x007c, 0x5d8d, 0x5d8d, 0x5d8d,
-+      0x5d8d, 0x5d8d, 0x5d8d, 0x5d8d, 0x5d8d, 0x670c, 0x67d2, 0x5d8d,
-+      0x6725, 0x677e, 0x6725, 0x677e, 0x5d8d, 0x1078, 0x12cd, 0x067e,
-+      0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5d99, 0x067f,
-+      0x007c, 0x5da9, 0x62d6, 0x637c, 0x643e, 0x6596, 0x5da9, 0x5da9,
-+      0x5da9, 0x62b4, 0x66c1, 0x66c5, 0x5da9, 0x5da9, 0x5da9, 0x5da9,
-+      0x66eb, 0x1078, 0x12cd, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0,
-+      0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318,
-+      0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398,
-+      0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5db9, 0x0e7e, 0x1078, 0x6a58,
-+      0x0040, 0x5dd0, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
-+      0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x0d7e, 0x037e, 0x7330, 0xa386,
-+      0x0200, 0x00c0, 0x5de1, 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817,
-+      0xfffd, 0x6010, 0xa005, 0x0040, 0x5deb, 0x2068, 0x6807, 0x0000,
-+      0x6837, 0x0103, 0x6b32, 0x1078, 0x5d1a, 0x037f, 0x0d7f, 0x007c,
-+      0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6,
-+      0x0015, 0x00c0, 0x5e04, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c,
-+      0x680e, 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x5dc5, 0x2100,
-+      0xa1b2, 0x0030, 0x10c8, 0x12cd, 0x0079, 0x5e0e, 0x5e40, 0x5e4c,
-+      0x5e40, 0x5e40, 0x5e40, 0x5e40, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
-+      0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
-+      0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
-+      0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e40, 0x5e3e, 0x5e40,
-+      0x5e40, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e40, 0x5e3e,
-+      0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x1078, 0x12cd,
-+      0x6003, 0x0001, 0x6106, 0x1078, 0x498e, 0x127e, 0x2091, 0x8000,
-+      0x1078, 0x4d96, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078,
-+      0x498e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c,
-+      0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12cd, 0xa1b6, 0x0013, 0x00c0,
-+      0x5e64, 0x2008, 0x0079, 0x5eeb, 0xa1b6, 0x0027, 0x00c0, 0x5eb9,
-+      0x1078, 0x4c9d, 0x6004, 0x1078, 0x6bcf, 0x0040, 0x5e7d, 0x1078,
-+      0x6be3, 0x0040, 0x5eb1, 0xa08e, 0x0021, 0x0040, 0x5eb5, 0xa08e,
-+      0x0022, 0x0040, 0x5eb1, 0x0078, 0x5eac, 0x1078, 0x22d7, 0x2001,
-+      0x0007, 0x1078, 0x37f4, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
-+      0x5f6d, 0xa186, 0x007e, 0x00c0, 0x5e92, 0x2001, 0x772f, 0x2014,
-+      0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028,
-+      0x1078, 0x4a7e, 0x1078, 0x49c1, 0x0c7e, 0x6018, 0xa065, 0x0040,
-+      0x5ea3, 0x1078, 0x3a36, 0x0c7f, 0x2c08, 0x1078, 0x747b, 0x037f,
-+      0x027f, 0x017f, 0x1078, 0x3834, 0x1078, 0x5d1a, 0x1078, 0x4d96,
-+      0x007c, 0x1078, 0x5f6d, 0x0078, 0x5eac, 0x1078, 0x5f7c, 0x0078,
-+      0x5eac, 0xa186, 0x0014, 0x00c0, 0x5eb0, 0x1078, 0x4c9d, 0x1078,
-+      0x22b5, 0x1078, 0x6bcf, 0x00c0, 0x5ed8, 0x1078, 0x22d7, 0x6018,
-+      0xa080, 0x0028, 0x200c, 0x1078, 0x5f6d, 0xa186, 0x007e, 0x00c0,
-+      0x5ed6, 0x2001, 0x772f, 0x200c, 0xc185, 0x2102, 0x0078, 0x5eac,
-+      0x1078, 0x6be3, 0x00c0, 0x5ee0, 0x1078, 0x5f6d, 0x0078, 0x5eac,
-+      0x6004, 0xa08e, 0x0021, 0x0040, 0x5edc, 0xa08e, 0x0022, 0x1040,
-+      0x5f7c, 0x0078, 0x5eac, 0x5f1d, 0x5f1f, 0x5f23, 0x5f27, 0x5f2b,
-+      0x5f2f, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
-+      0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
-+      0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
-+      0x5f1b, 0x5f33, 0x5f39, 0x5f1b, 0x5f43, 0x5f39, 0x5f1b, 0x5f1b,
-+      0x5f1b, 0x5f1b, 0x5f1b, 0x5f39, 0x5f39, 0x5f1b, 0x5f1b, 0x5f1b,
-+      0x5f1b, 0x5f1b, 0x5f1b, 0x1078, 0x12cd, 0x0078, 0x5f39, 0x2001,
-+      0x000b, 0x0078, 0x5f4c, 0x2001, 0x0003, 0x0078, 0x5f4c, 0x2001,
-+      0x0005, 0x0078, 0x5f4c, 0x2001, 0x0001, 0x0078, 0x5f4c, 0x2001,
-+      0x0009, 0x0078, 0x5f4c, 0x1078, 0x12cd, 0x0078, 0x5f4b, 0x1078,
-+      0x37f4, 0x1078, 0x4c9d, 0x6003, 0x0002, 0x6017, 0x0028, 0x1078,
-+      0x4d96, 0x0078, 0x5f4b, 0x1078, 0x4c9d, 0x6003, 0x0004, 0x6017,
-+      0x0028, 0x1078, 0x4d96, 0x007c, 0x1078, 0x37f4, 0x1078, 0x4c9d,
-+      0x6003, 0x0002, 0x037e, 0x2019, 0x775c, 0x2304, 0xa084, 0xff00,
-+      0x00c0, 0x5f5e, 0x2019, 0x0028, 0x0078, 0x5f67, 0x8007, 0xa09a,
-+      0x0004, 0x0048, 0x5f5a, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316,
-+      0x037f, 0x1078, 0x4d96, 0x0078, 0x5f4b, 0x0e7e, 0x1078, 0x6a58,
-+      0x0040, 0x5f7a, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
-+      0x7033, 0x0100, 0x0e7f, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74,
-+      0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001, 0x0e7f, 0x007c,
-+      0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa0b2,
-+      0x000c, 0x10c8, 0x12cd, 0x6604, 0xa6b6, 0x0028, 0x00c0, 0x5f9c,
-+      0x1078, 0x6c18, 0x0078, 0x5fce, 0x6604, 0xa6b6, 0x0029, 0x00c0,
-+      0x5fa5, 0x1078, 0x6c32, 0x0078, 0x5fce, 0x6604, 0xa6b6, 0x001f,
-+      0x00c0, 0x5fae, 0x1078, 0x5dab, 0x0078, 0x5fce, 0x6604, 0xa6b6,
-+      0x0000, 0x00c0, 0x5fb7, 0x1078, 0x5df0, 0x0078, 0x5fce, 0x6604,
-+      0xa6b6, 0x0022, 0x00c0, 0x5fc0, 0x1078, 0x5dd4, 0x0078, 0x5fce,
-+      0xa1b6, 0x0015, 0x00c0, 0x5fc8, 0x1079, 0x5fd3, 0x0078, 0x5fce,
-+      0xa1b6, 0x0016, 0x00c0, 0x5fcf, 0x1079, 0x6110, 0x007c, 0x1078,
-+      0x5d4f, 0x0078, 0x5fce, 0x5ff7, 0x5ffa, 0x5ff7, 0x603b, 0x5ff7,
-+      0x60ac, 0x5ff7, 0x5ff7, 0x5ff7, 0x60e8, 0x5ff7, 0x60fe, 0xa1b6,
-+      0x0048, 0x0040, 0x5feb, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
-+      0x1078, 0x156a, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000,
-+      0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x0005,
-+      0x0005, 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7078, 0xa086, 0x0074,
-+      0x00c0, 0x6024, 0x1078, 0x744f, 0x00c0, 0x6016, 0x0d7e, 0x6018,
-+      0x2068, 0x1078, 0x6028, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x37f4,
-+      0x1078, 0x22d7, 0x1078, 0x5d1a, 0x0078, 0x6026, 0x2001, 0x000a,
-+      0x1078, 0x37f4, 0x1078, 0x22d7, 0x6003, 0x0001, 0x6007, 0x0001,
-+      0x1078, 0x498e, 0x0078, 0x6026, 0x1078, 0x609c, 0x0e7f, 0x007c,
-+      0x6800, 0xd084, 0x0040, 0x603a, 0x2001, 0x0000, 0x1078, 0x37e0,
-+      0x2069, 0x7751, 0x6804, 0xd0a4, 0x0040, 0x603a, 0x2001, 0x0006,
-+      0x1078, 0x3802, 0x007c, 0x0d7e, 0x2011, 0x771e, 0x2204, 0xa086,
-+      0x0074, 0x00c0, 0x6098, 0x1078, 0x61ea, 0x6018, 0x2068, 0xa080,
-+      0x0028, 0x2014, 0xa286, 0x007e, 0x0040, 0x6063, 0xa286, 0x0080,
-+      0x00c0, 0x608c, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
-+      0x0040, 0x6082, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
-+      0x0200, 0x0078, 0x6082, 0x0e7e, 0x0f7e, 0x6813, 0x00ff, 0x6817,
-+      0xfffe, 0x2071, 0x772f, 0x2e04, 0xa085, 0x0003, 0x2072, 0x2071,
-+      0x7c80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0x7719,
-+      0x206a, 0x78e6, 0x8e70, 0x2e04, 0x2069, 0x771a, 0x206a, 0x78ea,
-+      0x0f7f, 0x0e7f, 0x2001, 0x0006, 0x1078, 0x37f4, 0x1078, 0x22d7,
-+      0x1078, 0x5d1a, 0x0078, 0x609a, 0x2001, 0x0004, 0x1078, 0x37f4,
-+      0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x498e, 0x0078, 0x609a,
-+      0x1078, 0x609c, 0x0d7f, 0x007c, 0x2001, 0x7700, 0x2004, 0xa086,
-+      0x0003, 0x0040, 0x60a7, 0x2001, 0x0007, 0x1078, 0x37f4, 0x1078,
-+      0x22d7, 0x1078, 0x5d1a, 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7078,
-+      0xa086, 0x0014, 0x00c0, 0x60e2, 0x7000, 0xa086, 0x0003, 0x00c0,
-+      0x60bf, 0x6010, 0xa005, 0x00c0, 0x60bf, 0x1078, 0x2dd7, 0x0d7e,
-+      0x6018, 0x2068, 0x1078, 0x38c8, 0x1078, 0x6028, 0x0d7f, 0x1078,
-+      0x61f4, 0x00c0, 0x60e2, 0x2001, 0x0006, 0x1078, 0x37f4, 0x0e7e,
-+      0x6010, 0xa005, 0x0040, 0x60db, 0x2070, 0x7007, 0x0000, 0x7037,
-+      0x0103, 0x7033, 0x0200, 0x0e7f, 0x1078, 0x22d7, 0x1078, 0x5d1a,
-+      0x0078, 0x60e6, 0x1078, 0x5f6d, 0x1078, 0x609c, 0x0e7f, 0x007c,
-+      0x2011, 0x771e, 0x2204, 0xa086, 0x0014, 0x00c0, 0x60fb, 0x2001,
-+      0x0002, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
-+      0x498e, 0x0078, 0x60fd, 0x1078, 0x609c, 0x007c, 0x2011, 0x771e,
-+      0x2204, 0xa086, 0x0004, 0x00c0, 0x610d, 0x2001, 0x0007, 0x1078,
-+      0x37f4, 0x1078, 0x5d1a, 0x0078, 0x610f, 0x1078, 0x609c, 0x007c,
-+      0x5ff7, 0x611c, 0x5ff7, 0x6142, 0x5ff7, 0x619d, 0x5ff7, 0x5ff7,
-+      0x5ff7, 0x61b2, 0x5ff7, 0x61c5, 0x0c7e, 0x1078, 0x61d8, 0x00c0,
-+      0x6131, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078,
-+      0x37f4, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x498e, 0x0078,
-+      0x6140, 0x2009, 0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
-+      0x00c0, 0x613e, 0x1078, 0x5d1a, 0x0078, 0x6140, 0x1078, 0x609c,
-+      0x0c7f, 0x007c, 0x1078, 0x61e7, 0x00c0, 0x6156, 0x2001, 0x0000,
-+      0x1078, 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x6003, 0x0001,
-+      0x6007, 0x0002, 0x1078, 0x498e, 0x0078, 0x6178, 0x1078, 0x5f6d,
-+      0x2009, 0x7c8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
-+      0x6179, 0x2009, 0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
-+      0x00c0, 0x6176, 0xa686, 0x0009, 0x0040, 0x6179, 0x2001, 0x0004,
-+      0x1078, 0x37f4, 0x1078, 0x5d1a, 0x0078, 0x6178, 0x1078, 0x609c,
-+      0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6187,
-+      0x6838, 0xd0fc, 0x0040, 0x6187, 0x0d7f, 0x0078, 0x6176, 0x6018,
-+      0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6198, 0x8001,
-+      0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x6178,
-+      0x1078, 0x22b5, 0x0d7f, 0x0078, 0x6176, 0x1078, 0x61e7, 0x00c0,
-+      0x61ad, 0x2001, 0x0004, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007,
-+      0x0003, 0x1078, 0x498e, 0x0078, 0x61b1, 0x1078, 0x5f6d, 0x1078,
-+      0x609c, 0x007c, 0x1078, 0x61e7, 0x00c0, 0x61c2, 0x2001, 0x0008,
-+      0x1078, 0x37f4, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x498e,
-+      0x0078, 0x61c4, 0x1078, 0x609c, 0x007c, 0x1078, 0x61e7, 0x00c0,
-+      0x61d5, 0x2001, 0x000a, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x1078, 0x498e, 0x0078, 0x61d7, 0x1078, 0x609c, 0x007c,
-+      0x2009, 0x7c8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x61e6, 0x2009,
-+      0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085,
-+      0x0001, 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078,
-+      0x385e, 0x017f, 0x0c7f, 0x007c, 0x0e7e, 0x2071, 0x7c8c, 0x7004,
-+      0xa086, 0x0014, 0x00c0, 0x6217, 0x7008, 0xa086, 0x0800, 0x00c0,
-+      0x6217, 0x700c, 0xd0ec, 0x0040, 0x6215, 0xa084, 0x0f00, 0xa086,
-+      0x0100, 0x00c0, 0x6215, 0x7024, 0xd0a4, 0x0040, 0x6215, 0xd08c,
-+      0x0040, 0x6215, 0xa006, 0x0078, 0x6217, 0xa085, 0x0001, 0x0e7f,
-+      0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e,
-+      0x007e, 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c, 0x2021,
-+      0x7945, 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7244, 0x7060,
-+      0xa202, 0x00c8, 0x626e, 0x1078, 0x7659, 0x0040, 0x6266, 0x671c,
-+      0xa786, 0x0001, 0x0040, 0x6266, 0xa786, 0x0007, 0x0040, 0x6266,
-+      0x2500, 0xac06, 0x0040, 0x6266, 0x2400, 0xac06, 0x0040, 0x6266,
-+      0x0c7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6250, 0x1078, 0x166e,
-+      0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6263, 0xa786, 0x0003,
-+      0x00c0, 0x6278, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
-+      0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6, 0x0c7f, 0xace0, 0x0008,
-+      0x7054, 0xac02, 0x00c8, 0x626e, 0x0078, 0x622e, 0x127f, 0x007f,
-+      0x027f, 0x047f, 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c,
-+      0xa786, 0x0006, 0x00c0, 0x625a, 0x1078, 0x75fd, 0x0078, 0x6263,
-+      0x220c, 0x2304, 0xa106, 0x00c0, 0x628b, 0x8210, 0x8318, 0x00f0,
-+      0x6280, 0xa006, 0x007c, 0x2304, 0xa102, 0x0048, 0x6293, 0x2001,
-+      0x0001, 0x0078, 0x6295, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c,
-+      0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x6bcf, 0x0040,
-+      0x62a7, 0x1078, 0x6be3, 0x0040, 0x62b0, 0x0078, 0x62a9, 0x1078,
-+      0x22d7, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c,
-+      0x1078, 0x5f6d, 0x0078, 0x62a9, 0xa182, 0x0040, 0x0079, 0x62b8,
-+      0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8,
-+      0x62c8, 0x62c8, 0x62c8, 0x62ca, 0x62ca, 0x62ca, 0x62ca, 0x62c8,
-+      0x1078, 0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e,
-+      0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c, 0xa186, 0x0013,
-+      0x00c0, 0x62df, 0x6004, 0xa082, 0x0040, 0x0079, 0x6355, 0xa186,
-+      0x0027, 0x00c0, 0x62fc, 0x1078, 0x4c9d, 0x1078, 0x22b5, 0x0d7e,
-+      0x6110, 0x2168, 0x1078, 0x6a58, 0x0040, 0x62f6, 0x6837, 0x0103,
-+      0x684b, 0x0029, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
-+      0x5d1a, 0x1078, 0x4d96, 0x007c, 0xa186, 0x0014, 0x00c0, 0x6305,
-+      0x6004, 0xa082, 0x0040, 0x0079, 0x6325, 0xa186, 0x0047, 0x10c0,
-+      0x12cd, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x6322, 0x127e,
-+      0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x4802, 0x027f,
-+      0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0, 0x6322,
-+      0x0078, 0x637c, 0x1078, 0x5d4f, 0x007c, 0x6337, 0x6335, 0x6335,
-+      0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335,
-+      0x634e, 0x634e, 0x634e, 0x634e, 0x6335, 0x1078, 0x12cd, 0x1078,
-+      0x4c9d, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6a58, 0x0040, 0x6348,
-+      0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x3b92, 0x1078, 0x6ba9,
-+      0x0d7f, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d,
-+      0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x6367, 0x6365, 0x6365,
-+      0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365,
-+      0x6375, 0x6375, 0x6375, 0x6375, 0x6365, 0x1078, 0x12cd, 0x1078,
-+      0x4c9d, 0x6003, 0x0002, 0x1078, 0x4d96, 0x6010, 0xa088, 0x0013,
-+      0x2104, 0xa085, 0x0400, 0x200a, 0x007c, 0x1078, 0x4c9d, 0x6003,
-+      0x000f, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040, 0x0079, 0x6380,
-+      0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6392, 0x641b, 0x6433,
-+      0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390,
-+      0x1078, 0x12cd, 0x0e7e, 0x0d7e, 0x2071, 0x7c8c, 0x6110, 0x2168,
-+      0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x63ff, 0xa68c, 0x00ff,
-+      0xa186, 0x0002, 0x0040, 0x63c4, 0xa186, 0x0028, 0x00c0, 0x63ae,
-+      0x1078, 0x6bbd, 0x684b, 0x001c, 0x0078, 0x63c6, 0xd6dc, 0x0040,
-+      0x63b9, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078,
-+      0x63c6, 0xd6d4, 0x0040, 0x63c4, 0x684b, 0x0007, 0x7318, 0x6b62,
-+      0x731c, 0x6b5e, 0x0078, 0x63c6, 0x684b, 0x0000, 0x6837, 0x0103,
-+      0x6e46, 0xa01e, 0xd6c4, 0x0040, 0x63d9, 0x7328, 0x732c, 0x6b56,
-+      0x037e, 0x2308, 0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, 0x6841,
-+      0x037f, 0xd6cc, 0x0040, 0x640f, 0x7124, 0x695a, 0xa192, 0x0021,
-+      0x00c8, 0x63ed, 0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90,
-+      0x001d, 0x1078, 0x6841, 0x0078, 0x640f, 0x6838, 0xd0fc, 0x0040,
-+      0x63f6, 0x2009, 0x0020, 0x695a, 0x0078, 0x63e2, 0x0f7e, 0x2d78,
-+      0x1078, 0x67d9, 0x0f7f, 0x1078, 0x682e, 0x0078, 0x6411, 0x684b,
-+      0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x640f,
-+      0x6810, 0x6914, 0xa115, 0x0040, 0x640f, 0x1078, 0x6587, 0x1078,
-+      0x3b92, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f,
-+      0x1078, 0x5d1a, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c,
-+      0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16,
-+      0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x49ad,
-+      0x1078, 0x4e56, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
-+      0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x007c, 0xa182, 0x0040,
-+      0x0079, 0x6442, 0x6452, 0x6452, 0x6452, 0x6452, 0x6452, 0x6454,
-+      0x64eb, 0x6452, 0x6452, 0x6501, 0x6563, 0x6452, 0x6452, 0x6452,
-+      0x6452, 0x656e, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
-+      0x2071, 0x7c8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
-+      0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e,
-+      0x86ff, 0x0040, 0x64e6, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
-+      0x6475, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
-+      0x64e6, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
-+      0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e,
-+      0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040,
-+      0x64af, 0xa186, 0x0028, 0x00c0, 0x6499, 0x684b, 0x001c, 0x0078,
-+      0x64b1, 0xd6dc, 0x0040, 0x64a4, 0x684b, 0x0015, 0x7318, 0x6b62,
-+      0x731c, 0x6b5e, 0x0078, 0x64b1, 0xd6d4, 0x0040, 0x64af, 0x684b,
-+      0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x64b1, 0x684b,
-+      0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4,
-+      0x0040, 0x64c6, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019,
-+      0x7c98, 0xad90, 0x0019, 0x1078, 0x6841, 0x037f, 0xd6cc, 0x0040,
-+      0x64e6, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x64da, 0x2071,
-+      0x7c98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6841,
-+      0x0078, 0x64e6, 0x7838, 0xd0fc, 0x0040, 0x64e3, 0x2009, 0x0020,
-+      0x695a, 0x0078, 0x64cf, 0x2d78, 0x1078, 0x67d9, 0x0d7f, 0x0e7f,
-+      0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c,
-+      0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16,
-+      0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x5681,
-+      0x007c, 0x0d7e, 0x6003, 0x0002, 0x1078, 0x4d45, 0x1078, 0x4e56,
-+      0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x6561, 0xd1cc, 0x0040,
-+      0x653c, 0x6948, 0x6838, 0xd0fc, 0x0040, 0x6534, 0x017e, 0x684c,
-+      0x007e, 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009,
-+      0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0,
-+      0x6523, 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168,
-+      0x1078, 0x1350, 0x0078, 0x655f, 0x017e, 0x1078, 0x1350, 0x0d7f,
-+      0x1078, 0x682e, 0x0078, 0x655f, 0x6837, 0x0103, 0x6944, 0xa184,
-+      0x00ff, 0xa186, 0x0002, 0x0040, 0x655b, 0xa086, 0x0028, 0x00c0,
-+      0x654d, 0x684b, 0x001c, 0x0078, 0x655d, 0xd1dc, 0x0040, 0x6554,
-+      0x684b, 0x0015, 0x0078, 0x655d, 0xd1d4, 0x0040, 0x655b, 0x684b,
-+      0x0007, 0x0078, 0x655d, 0x684b, 0x0000, 0x1078, 0x3b92, 0x1078,
-+      0x5d1a, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x5880, 0x6003,
-+      0x0002, 0x1078, 0x4d45, 0x1078, 0x4e56, 0x007c, 0x1078, 0x4d45,
-+      0x1078, 0x22b5, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6a58, 0x0040,
-+      0x6581, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3b92, 0x1078,
-+      0x6ba9, 0x0d7f, 0x1078, 0x5d1a, 0x1078, 0x4e56, 0x007c, 0x684b,
-+      0x0015, 0xd1fc, 0x0040, 0x6593, 0x684b, 0x0007, 0x8002, 0x8000,
-+      0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040,
-+      0x0079, 0x659a, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65ac,
-+      0x65aa, 0x6650, 0x6658, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65aa,
-+      0x65aa, 0x65aa, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
-+      0x2071, 0x7c8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
-+      0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e,
-+      0x86ff, 0x0040, 0x6642, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
-+      0x65cd, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
-+      0x663f, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
-+      0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
-+      0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002,
-+      0x0040, 0x6608, 0xa186, 0x0028, 0x00c0, 0x65f2, 0x684b, 0x001c,
-+      0x0078, 0x660a, 0xd6dc, 0x0040, 0x65fd, 0x684b, 0x0015, 0x7318,
-+      0x6b62, 0x731c, 0x6b5e, 0x0078, 0x660a, 0xd6d4, 0x0040, 0x6608,
-+      0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x660a,
-+      0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
-+      0xd6c4, 0x0040, 0x661f, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308,
-+      0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, 0x6841, 0x037f, 0xd6cc,
-+      0x0040, 0x663f, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x6633,
-+      0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
-+      0x6841, 0x0078, 0x663f, 0x7838, 0xd0fc, 0x0040, 0x663c, 0x2009,
-+      0x0020, 0x695a, 0x0078, 0x6628, 0x2d78, 0x1078, 0x67d9, 0xd6dc,
-+      0x00c0, 0x6645, 0xa006, 0x0078, 0x6649, 0x2001, 0x0001, 0x7218,
-+      0x731c, 0x1078, 0x15ae, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
-+      0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x007c,
-+      0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
-+      0x66bf, 0xd1cc, 0x0040, 0x668f, 0x6948, 0x6838, 0xd0fc, 0x0040,
-+      0x6687, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d,
-+      0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012,
-+      0x8318, 0x8210, 0x00f0, 0x6676, 0x157f, 0x007f, 0x6852, 0x007f,
-+      0x684e, 0x017f, 0x2168, 0x1078, 0x1350, 0x0078, 0x66bd, 0x017e,
-+      0x1078, 0x1350, 0x0d7f, 0x1078, 0x682e, 0x0078, 0x66bd, 0x6837,
-+      0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x66ae,
-+      0xa086, 0x0028, 0x00c0, 0x66a0, 0x684b, 0x001c, 0x0078, 0x66bb,
-+      0xd1dc, 0x0040, 0x66a7, 0x684b, 0x0015, 0x0078, 0x66bb, 0xd1d4,
-+      0x0040, 0x66ae, 0x684b, 0x0007, 0x0078, 0x66bb, 0x684b, 0x0000,
-+      0x684c, 0xd0ac, 0x0040, 0x66bb, 0x6810, 0x6914, 0xa115, 0x0040,
-+      0x66bb, 0x1078, 0x6587, 0x1078, 0x3b92, 0x1078, 0x5d1a, 0x0d7f,
-+      0x007c, 0x1078, 0x4c9d, 0x0078, 0x66c7, 0x1078, 0x4d45, 0x1078,
-+      0x6a58, 0x0040, 0x66de, 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103,
-+      0x2009, 0x770c, 0x210c, 0xd18c, 0x00c0, 0x66e7, 0xd184, 0x00c0,
-+      0x66e3, 0x6108, 0x694a, 0x1078, 0x3b92, 0x0d7f, 0x1078, 0x5d1a,
-+      0x1078, 0x4d96, 0x007c, 0x684b, 0x0004, 0x0078, 0x66db, 0x684b,
-+      0x0004, 0x0078, 0x66db, 0xa182, 0x0040, 0x0079, 0x66ef, 0x66ff,
-+      0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x6701, 0x66ff, 0x6704, 0x66ff,
-+      0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x1078,
-+      0x12cd, 0x1078, 0x5d1a, 0x007c, 0x007e, 0x027e, 0xa016, 0x1078,
-+      0x156a, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085, 0x0079, 0x6710,
-+      0x6719, 0x6717, 0x6717, 0x6717, 0x6717, 0x6717, 0x6717, 0x1078,
-+      0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x4d96, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
-+      0x672f, 0x6004, 0xa082, 0x0085, 0x2008, 0x0079, 0x6763, 0xa186,
-+      0x0027, 0x00c0, 0x6750, 0x1078, 0x4c9d, 0x1078, 0x22b5, 0x0d7e,
-+      0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6746, 0x6837, 0x0103,
-+      0x684b, 0x0029, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
-+      0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x5d4f, 0x0078, 0x674b,
-+      0xa186, 0x0014, 0x00c0, 0x674c, 0x1078, 0x4c9d, 0x0d7e, 0x6010,
-+      0x2068, 0x1078, 0x6a58, 0x0040, 0x6746, 0x6837, 0x0103, 0x684b,
-+      0x0006, 0x0078, 0x6742, 0x676c, 0x676a, 0x676a, 0x676a, 0x676a,
-+      0x676a, 0x6775, 0x1078, 0x12cd, 0x1078, 0x4c9d, 0x6017, 0x0014,
-+      0x6003, 0x000c, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x6017,
-+      0x0014, 0x6003, 0x000e, 0x1078, 0x4d96, 0x007c, 0xa182, 0x008c,
-+      0x00c8, 0x6788, 0xa182, 0x0085, 0x0048, 0x6788, 0x0079, 0x678b,
-+      0x1078, 0x5d4f, 0x007c, 0x6792, 0x6792, 0x6792, 0x6792, 0x6794,
-+      0x67b3, 0x6792, 0x1078, 0x12cd, 0x0d7e, 0x1078, 0x6ba9, 0x1078,
-+      0x6a58, 0x0040, 0x67af, 0x6010, 0x2068, 0x6837, 0x0103, 0x6850,
-+      0xd0b4, 0x0040, 0x67a7, 0x684b, 0x0006, 0x0078, 0x67ab, 0x684b,
-+      0x0005, 0x1078, 0x6c5c, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078,
-+      0x5d1a, 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58,
-+      0x0040, 0x67ce, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x67c4,
-+      0x684b, 0x0006, 0x0078, 0x67c8, 0x684b, 0x0005, 0x1078, 0x6c5c,
-+      0x6847, 0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
-+      0x5d1a, 0x007c, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96,
-+      0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, 0xa182,
-+      0x0101, 0x00c8, 0x67e5, 0x0078, 0x67e7, 0x2009, 0x0100, 0x2130,
-+      0x2069, 0x7c98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90,
-+      0x001d, 0x1078, 0x6841, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0040,
-+      0x67fb, 0x1078, 0x1350, 0x1078, 0x1327, 0x0040, 0x6825, 0x8528,
-+      0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d,
-+      0x00c8, 0x6811, 0x2608, 0xad90, 0x000f, 0x1078, 0x6841, 0x0078,
-+      0x6825, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f,
-+      0x1078, 0x6841, 0x0078, 0x67fb, 0x0f7f, 0x852f, 0xa5ad, 0x0003,
-+      0x7d36, 0xa5ac, 0x0000, 0x0078, 0x682a, 0x0f7f, 0x852f, 0xa5ad,
-+      0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, 0x8dff,
-+      0x0040, 0x683f, 0x6804, 0xa07d, 0x0040, 0x683d, 0x6807, 0x0000,
-+      0x1078, 0x3b92, 0x2f68, 0x0078, 0x6832, 0x1078, 0x3b92, 0x0f7f,
-+      0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x6847, 0x8108, 0x810c,
-+      0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6849,
-+      0x157f, 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, 0x000f,
-+      0x1079, 0x685c, 0x127f, 0x007c, 0x686b, 0x6864, 0x6866, 0x6884,
-+      0x6864, 0x6866, 0x6866, 0x6866, 0x1078, 0x12cd, 0xa006, 0x007c,
-+      0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58,
-+      0x0040, 0x6881, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3c22, 0x1078,
-+      0x6c5c, 0x1078, 0x3b92, 0x1078, 0x5d1a, 0xa085, 0x0001, 0x0d7f,
-+      0x007c, 0xa006, 0x0078, 0x687f, 0x6000, 0xa08a, 0x0010, 0x10c8,
-+      0x12cd, 0x1079, 0x688c, 0x007c, 0x689c, 0x68b9, 0x689e, 0x68ca,
-+      0x68b5, 0x689c, 0x6866, 0x686b, 0x686b, 0x6866, 0x6866, 0x6866,
-+      0x6866, 0x6866, 0x6866, 0x6866, 0x1078, 0x12cd, 0x0d7e, 0x6010,
-+      0x2068, 0x1078, 0x6a58, 0x0040, 0x68a7, 0x1078, 0x6c5c, 0x0d7f,
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x4941,
-+      0x1078, 0x4d96, 0xa085, 0x0001, 0x007c, 0x1078, 0x166e, 0x0078,
-+      0x689e, 0x0e7e, 0x2071, 0x7936, 0x7024, 0xac06, 0x00c0, 0x68c2,
-+      0x1078, 0x57ee, 0x1078, 0x5725, 0x0e7f, 0x00c0, 0x689e, 0x1078,
-+      0x6866, 0x007c, 0x037e, 0x0e7e, 0x2071, 0x7936, 0x703c, 0xac06,
-+      0x00c0, 0x68da, 0x2019, 0x0000, 0x1078, 0x5880, 0x0e7f, 0x037f,
-+      0x0078, 0x689e, 0x1078, 0x5b5c, 0x0e7f, 0x037f, 0x00c0, 0x689e,
-+      0x1078, 0x6866, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x000f, 0x1079,
-+      0x68eb, 0x0c7f, 0x007c, 0x68fa, 0x6957, 0x69fc, 0x68fe, 0x68fa,
-+      0x68fa, 0x72dd, 0x5d1a, 0x6957, 0x1078, 0x6be3, 0x00c0, 0x68fa,
-+      0x1078, 0x5f6d, 0x007c, 0x6017, 0x0001, 0x007c, 0x6000, 0xa08a,
-+      0x0010, 0x10c8, 0x12cd, 0x1079, 0x6906, 0x007c, 0x6916, 0x6918,
-+      0x6938, 0x694a, 0x694a, 0x6916, 0x68fa, 0x68fa, 0x68fa, 0x694a,
-+      0x694a, 0x6916, 0x6916, 0x6916, 0x6916, 0x6954, 0x1078, 0x12cd,
-+      0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0x7936,
-+      0x7024, 0xac06, 0x0040, 0x6934, 0x1078, 0x5725, 0x6007, 0x0085,
-+      0x6003, 0x000b, 0x601f, 0x0002, 0x6017, 0x0014, 0x1078, 0x4941,
-+      0x1078, 0x4d96, 0x0e7f, 0x007c, 0x6017, 0x0001, 0x0078, 0x6932,
-+      0x0d7e, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x6007,
-+      0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x4941, 0x1078,
-+      0x4d96, 0x007c, 0x0d7e, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850,
-+      0xc0b5, 0x6852, 0x0d7f, 0x007c, 0x1078, 0x5d1a, 0x007c, 0x6000,
-+      0xa08a, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x695f, 0x007c, 0x696f,
-+      0x68fb, 0x6971, 0x696f, 0x6971, 0x696f, 0x696f, 0x696f, 0x68f4,
-+      0x68f4, 0x696f, 0x696f, 0x696f, 0x696f, 0x696f, 0x696f, 0x1078,
-+      0x12cd, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
-+      0xa08a, 0x000c, 0x10c8, 0x12cd, 0x1079, 0x697f, 0x007c, 0x698b,
-+      0x69aa, 0x698b, 0x69aa, 0x698b, 0x69aa, 0x698d, 0x6996, 0x698b,
-+      0x69aa, 0x698b, 0x69a3, 0x1078, 0x12cd, 0x6004, 0xa08e, 0x0004,
-+      0x0040, 0x69a5, 0xa08e, 0x0002, 0x0040, 0x69a5, 0x6004, 0x1078,
-+      0x6be3, 0x0040, 0x69f4, 0xa08e, 0x0021, 0x0040, 0x69f8, 0xa08e,
-+      0x0022, 0x0040, 0x69f4, 0x1078, 0x22b5, 0x1078, 0x5f6d, 0x1078,
-+      0x5d1a, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016, 0x0040,
-+      0x69e4, 0xa186, 0x0002, 0x00c0, 0x69d3, 0x6018, 0x2068, 0x68a0,
-+      0xd0bc, 0x00c0, 0x69d3, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
-+      0x69d3, 0x8001, 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017,
-+      0x0398, 0x1078, 0x5cb4, 0x0040, 0x69d3, 0x2d00, 0x601a, 0x601f,
-+      0x0001, 0x0078, 0x69e4, 0x0d7f, 0x0c7f, 0x1078, 0x5f6d, 0x1078,
-+      0x22b5, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x22d7, 0x127f,
-+      0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x2001, 0x0002, 0x1078, 0x37f4,
-+      0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x498e, 0x1078, 0x4d96,
-+      0x0d7f, 0x0c7f, 0x0078, 0x69e3, 0x1078, 0x5f6d, 0x0078, 0x69a7,
-+      0x1078, 0x5f7c, 0x0078, 0x69a7, 0x6000, 0xa08a, 0x0010, 0x10c8,
-+      0x12cd, 0x1079, 0x6a04, 0x007c, 0x6a14, 0x6a14, 0x6a14, 0x6a14,
-+      0x6a14, 0x6a14, 0x6a14, 0x6a14, 0x6a14, 0x68fa, 0x6a14, 0x68fb,
-+      0x6a16, 0x68fb, 0x6a1f, 0x6a14, 0x1078, 0x12cd, 0x6007, 0x008b,
-+      0x6003, 0x000d, 0x1078, 0x4941, 0x1078, 0x4d96, 0x007c, 0x1078,
-+      0x6ba9, 0x1078, 0x6a58, 0x0040, 0x6a41, 0x1078, 0x22b5, 0x0d7e,
-+      0x1078, 0x6a58, 0x0040, 0x6a34, 0x6010, 0x2068, 0x6837, 0x0103,
-+      0x684b, 0x0006, 0x1078, 0x3b92, 0x0d7f, 0x601f, 0x0001, 0x6007,
-+      0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x1078, 0x4d96, 0x0078,
-+      0x6a43, 0x1078, 0x5d1a, 0x007c, 0xa284, 0x0007, 0x00c0, 0x6a55,
-+      0xa282, 0x7e00, 0x0048, 0x6a55, 0x2001, 0x7715, 0x2004, 0xa202,
-+      0x00c8, 0x6a55, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x6a54,
-+      0x027e, 0x0e7e, 0x2071, 0x7700, 0x6210, 0x7058, 0xa202, 0x0048,
-+      0x6a6a, 0x705c, 0xa202, 0x00c8, 0x6a6a, 0xa085, 0x0001, 0x0e7f,
-+      0x027f, 0x007c, 0xa006, 0x0078, 0x6a67, 0x0e7e, 0x0c7e, 0x037e,
-+      0x007e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7e00, 0x2071, 0x7700,
-+      0x7344, 0x7060, 0xa302, 0x00c8, 0x6a93, 0x601c, 0xa206, 0x00c0,
-+      0x6a8b, 0x1078, 0x6be3, 0x00c0, 0x6a87, 0x1078, 0x5f6d, 0x0c7e,
-+      0x1078, 0x5d1a, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8,
-+      0x6a93, 0x0078, 0x6a78, 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f,
-+      0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0x7820, 0x210c, 0x81ff,
-+      0x0040, 0x6ab1, 0x2061, 0x7e00, 0x2071, 0x7700, 0x017e, 0x1078,
-+      0x5cb4, 0x017f, 0x0040, 0x6ab4, 0x611a, 0x1078, 0x22b5, 0x1078,
-+      0x5d1a, 0xa006, 0x0078, 0x6ab6, 0xa085, 0x0001, 0x017f, 0x0c7f,
-+      0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-+      0x1078, 0x5cb4, 0x057f, 0x0040, 0x6ad3, 0x6612, 0x651a, 0x601f,
-+      0x0003, 0x2009, 0x004b, 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f,
-+      0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6acf, 0x0c7e, 0x057e,
-+      0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5cb4, 0x057f,
-+      0x0040, 0x6afd, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
-+      0x2560, 0x1078, 0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1,
-+      0x2c08, 0x1078, 0x747b, 0x2009, 0x004c, 0x1078, 0x5d41, 0xa085,
-+      0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6af9,
-+      0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078,
-+      0x5cb4, 0x057f, 0x0040, 0x6b28, 0x6612, 0x651a, 0x601f, 0x0003,
-+      0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x3a36, 0x0c7f, 0x1078,
-+      0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078, 0x747b, 0x2009, 0x004d,
-+      0x1078, 0x5d41, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c,
-+      0xa006, 0x0078, 0x6b24, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000,
-+      0x62a0, 0x0c7e, 0x1078, 0x5cb4, 0x057f, 0x0040, 0x6b53, 0x6612,
-+      0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078,
-+      0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078,
-+      0x747b, 0x2009, 0x004e, 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f,
-+      0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b4f, 0x0c7e, 0x127e,
-+      0x2091, 0x8000, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x6b6f,
-+      0x660a, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f,
-+      0x1078, 0x5d41, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
-+      0x0078, 0x6b6c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-+      0x5cb4, 0x017f, 0x0040, 0x6b8b, 0x660a, 0x611a, 0x601f, 0x0008,
-+      0x2d00, 0x6012, 0x2009, 0x0021, 0x1078, 0x5d41, 0xa085, 0x0001,
-+      0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b88, 0x0c7e, 0x127e,
-+      0x2091, 0x8000, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x6ba6,
-+      0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
-+      0x5d41, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
-+      0x6ba3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
-+      0x6bb3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000,
-+      0x601f, 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, 0x0d7e,
-+      0x2031, 0x7752, 0x2634, 0xd6e4, 0x0040, 0x6bcb, 0x6618, 0x2660,
-+      0x6e48, 0x1078, 0x3942, 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e,
-+      0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x6be0, 0xa08e, 0x0003,
-+      0x0040, 0x6be0, 0xa08e, 0x0004, 0x0040, 0x6be0, 0xa085, 0x0001,
-+      0x017f, 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0000,
-+      0x0040, 0x6bf8, 0xa08e, 0x001f, 0x0040, 0x6bf8, 0xa08e, 0x0028,
-+      0x0040, 0x6bf8, 0xa08e, 0x0029, 0x0040, 0x6bf8, 0xa085, 0x0001,
-+      0x017f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-+      0x1078, 0x5cb4, 0x017f, 0x0040, 0x6c15, 0x611a, 0x601f, 0x0001,
-+      0x2d00, 0x6012, 0x1078, 0x22b5, 0x2009, 0x0028, 0x1078, 0x5d41,
-+      0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6c12,
-+      0xa186, 0x0015, 0x00c0, 0x6c2d, 0x2011, 0x771e, 0x2204, 0xa086,
-+      0x0074, 0x00c0, 0x6c2d, 0x1078, 0x61ea, 0x6003, 0x0001, 0x6007,
-+      0x0029, 0x1078, 0x498e, 0x0078, 0x6c31, 0x1078, 0x5f6d, 0x1078,
-+      0x5d1a, 0x007c, 0xa186, 0x0015, 0x00c0, 0x6c4f, 0x2011, 0x771e,
-+      0x2204, 0xa086, 0x0014, 0x00c0, 0x6c4f, 0x0d7e, 0x6018, 0x2068,
-+      0x1078, 0x38c8, 0x0d7f, 0x1078, 0x61f4, 0x00c0, 0x6c4f, 0x2001,
-+      0x0006, 0x1078, 0x37f4, 0x1078, 0x5dc5, 0x0078, 0x6c53, 0x1078,
-+      0x5f6d, 0x1078, 0x5d1a, 0x007c, 0x6848, 0xa086, 0x0005, 0x00c0,
-+      0x6c5b, 0x1078, 0x6c5c, 0x007c, 0x6850, 0xc0ad, 0x6852, 0x007c,
-+      0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6c6a,
-+      0x067f, 0x007c, 0x6c7a, 0x6e51, 0x6f32, 0x6c7a, 0x6c7a, 0x6c7a,
-+      0x6c7a, 0x6c7a, 0x6cb4, 0x6fa0, 0x6c7a, 0x6c7a, 0x6c7a, 0x6c7a,
-+      0x6c7a, 0x6c7a, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010,
-+      0x10c8, 0x12cd, 0x1079, 0x6c86, 0x067f, 0x007c, 0x6c96, 0x728c,
-+      0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x7267, 0x72d6,
-+      0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x1078, 0x12cd,
-+      0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6ca2,
-+      0x067f, 0x007c, 0x6cb2, 0x70d8, 0x714a, 0x716c, 0x71b8, 0x6cb2,
-+      0x6cb2, 0x7212, 0x6fac, 0x724f, 0x7253, 0x6cb2, 0x6cb2, 0x6cb2,
-+      0x6cb2, 0x6cb2, 0x1078, 0x12cd, 0xa1b2, 0x0030, 0x10c8, 0x12cd,
-+      0x2100, 0x0079, 0x6cbb, 0x6ceb, 0x6dc8, 0x6ceb, 0x6ceb, 0x6ceb,
-+      0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb,
-+      0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb,
-+      0x6ceb, 0x6ceb, 0x6ced, 0x6d1c, 0x6d27, 0x6d4f, 0x6d55, 0x6d89,
-+      0x6dc1, 0x6ceb, 0x6ceb, 0x6dd0, 0x6ceb, 0x6ceb, 0x6dd7, 0x6dde,
-+      0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6dfb, 0x6ceb, 0x6ceb,
-+      0x6e06, 0x6ceb, 0x6ceb, 0x1078, 0x12cd, 0x1078, 0x3b3e, 0x6618,
-+      0x0c7e, 0x2660, 0x1078, 0x385e, 0x0c7f, 0xa6b0, 0x0001, 0x2634,
-+      0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x6d0e, 0x1078, 0x73b7,
-+      0x00c0, 0x6d49, 0x1078, 0x7355, 0x00c0, 0x6d0a, 0x6007, 0x0008,
-+      0x0078, 0x6dc3, 0x6007, 0x0009, 0x0078, 0x6dc3, 0x1078, 0x754c,
-+      0x0040, 0x6d18, 0x1078, 0x73b7, 0x0040, 0x6d02, 0x0078, 0x6d49,
-+      0x6013, 0x1900, 0x0078, 0x6d0a, 0x6106, 0x1078, 0x7317, 0x6007,
-+      0x0006, 0x0078, 0x6dc3, 0x6007, 0x0007, 0x0078, 0x6dc3, 0x0d7e,
-+      0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006,
-+      0x0040, 0x6d39, 0xa686, 0x0004, 0x0040, 0x6d39, 0x0d7f, 0x0078,
-+      0x6d49, 0x1078, 0x7415, 0x00c0, 0x6d44, 0x1078, 0x38c8, 0x6007,
-+      0x000a, 0x0d7f, 0x0078, 0x6dc3, 0x6007, 0x000b, 0x0d7f, 0x0078,
-+      0x6dc3, 0x1078, 0x22b5, 0x6007, 0x0001, 0x0078, 0x6dc3, 0x1078,
-+      0x22b5, 0x6007, 0x000c, 0x0078, 0x6dc3, 0x1078, 0x3b3e, 0x6618,
-+      0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048,
-+      0x6d76, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6d49,
-+      0x1078, 0x7424, 0x00c0, 0x6d70, 0x6007, 0x000e, 0x0078, 0x6dc3,
-+      0x1078, 0x22b5, 0x6007, 0x000f, 0x0078, 0x6dc3, 0x1078, 0x754c,
-+      0x0040, 0x6d83, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
-+      0x6d68, 0x0078, 0x6d49, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
-+      0x6dc3, 0x1078, 0x3b3e, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684,
-+      0x00ff, 0xa082, 0x0006, 0x0048, 0x6dae, 0xa6b4, 0xff00, 0x8637,
-+      0xa686, 0x0006, 0x00c0, 0x6d49, 0x1078, 0x744f, 0x00c0, 0x6da8,
-+      0x1078, 0x7355, 0x00c0, 0x6da8, 0x6007, 0x0010, 0x0078, 0x6dc3,
-+      0x1078, 0x22b5, 0x6007, 0x0011, 0x0078, 0x6dc3, 0x1078, 0x754c,
-+      0x0040, 0x6dbb, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
-+      0x6d9c, 0x0078, 0x6d49, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
-+      0x6dc3, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c,
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x0078, 0x6dc7,
-+      0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c, 0x6007,
-+      0x0023, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c, 0x017e, 0x027e,
-+      0x2011, 0x7c88, 0x2214, 0x2c08, 0x1078, 0x7614, 0x00c0, 0x6def,
-+      0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, 0x6df4, 0x1078,
-+      0x5d1a, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x498e,
-+      0x027f, 0x017f, 0x007c, 0x6106, 0x1078, 0x6e0d, 0x6007, 0x002b,
-+      0x0078, 0x6dc3, 0x6007, 0x002c, 0x0078, 0x6dc3, 0x6106, 0x1078,
-+      0x6e12, 0x6007, 0x002e, 0x0078, 0x6dc3, 0x0d7e, 0x1078, 0x6e38,
-+      0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x6e47, 0x00c0, 0x6e31, 0x680c,
-+      0xa08c, 0xff00, 0x6824, 0xa084, 0x00ff, 0xa115, 0x6212, 0xd1e4,
-+      0x0040, 0x6e26, 0x2009, 0x0001, 0x0078, 0x6e2d, 0xd1ec, 0x0040,
-+      0x6e31, 0x2009, 0x0000, 0xa294, 0x00ff, 0x1078, 0x22f9, 0x0078,
-+      0x6e35, 0xa085, 0x0001, 0x0078, 0x6e36, 0xa006, 0x0d7f, 0x007c,
-+      0x2069, 0x7c8d, 0x6800, 0xa082, 0x0010, 0x00c8, 0x6e45, 0x6013,
-+      0x0000, 0xa085, 0x0001, 0x0078, 0x6e46, 0xa006, 0x007c, 0x6013,
-+      0x0000, 0x2069, 0x7c8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800,
-+      0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12cd, 0xa1b6, 0x0013,
-+      0x00c0, 0x6e5d, 0x2008, 0x0079, 0x6e70, 0xa1b6, 0x0027, 0x0040,
-+      0x6e65, 0xa1b6, 0x0014, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078,
-+      0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c,
-+      0x6ea0, 0x6ea2, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea2, 0x6eaa, 0x6f0d,
-+      0x6ed0, 0x6f0d, 0x6ee4, 0x6f0d, 0x6eaa, 0x6f0d, 0x6f05, 0x6f0d,
-+      0x6f05, 0x6f0d, 0x6f0d, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0,
-+      0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0,
-+      0x6f0d, 0x6ea0, 0x6ea0, 0x6f0d, 0x6ea0, 0x6f0d, 0x6f0d, 0x6ea0,
-+      0x6ea0, 0x6ea0, 0x6ea0, 0x6f0d, 0x6f0d, 0x6ea0, 0x6f0d, 0x6f0d,
-+      0x1078, 0x12cd, 0x1078, 0x4c9d, 0x6003, 0x0002, 0x1078, 0x4d96,
-+      0x0078, 0x6f13, 0x0f7e, 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac,
-+      0x00c0, 0x6f0d, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002,
-+      0x1078, 0x37f4, 0x1078, 0x4c9d, 0x601f, 0x0001, 0x6003, 0x0001,
-+      0x6007, 0x0002, 0x1078, 0x498e, 0x1078, 0x4d96, 0x0c7e, 0x6118,
-+      0x2160, 0x2009, 0x0001, 0x1078, 0x4696, 0x0c7f, 0x0078, 0x6f13,
-+      0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00, 0x8637,
-+      0xa686, 0x0006, 0x0040, 0x6f0d, 0xa686, 0x0004, 0x0040, 0x6f0d,
-+      0x2001, 0x0004, 0x0078, 0x6f0b, 0x2001, 0x7700, 0x2004, 0xa086,
-+      0x0003, 0x00c0, 0x6eed, 0x1078, 0x2dd7, 0x2001, 0x0006, 0x1078,
-+      0x6f14, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0006, 0x0040, 0x6f0d, 0x2001, 0x0006, 0x0078,
-+      0x6f0b, 0x2001, 0x0004, 0x0078, 0x6f0b, 0x2001, 0x0006, 0x1078,
-+      0x6f14, 0x0078, 0x6f0d, 0x1078, 0x3802, 0x1078, 0x4c9d, 0x1078,
-+      0x5d1a, 0x1078, 0x4d96, 0x007c, 0x017e, 0x0d7e, 0x6118, 0x2168,
-+      0x6900, 0xd184, 0x0040, 0x6f2f, 0x6104, 0xa18e, 0x000a, 0x00c0,
-+      0x6f27, 0x699c, 0xd1a4, 0x00c0, 0x6f27, 0x2001, 0x0007, 0x1078,
-+      0x37f4, 0x2001, 0x0000, 0x1078, 0x37e0, 0x1078, 0x22d7, 0x0d7f,
-+      0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00,
-+      0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x12cd, 0xa1b6, 0x0015,
-+      0x00c0, 0x6f46, 0x1079, 0x6f4d, 0x0078, 0x6f4c, 0xa1b6, 0x0016,
-+      0x10c0, 0x12cd, 0x1079, 0x6f85, 0x007c, 0x5ff7, 0x5ff7, 0x5ff7,
-+      0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x6f59, 0x5ff7, 0x5ff7, 0x5ff7,
-+      0x5ff7, 0x0f7e, 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac, 0x00c0,
-+      0x6f75, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078,
-+      0x37f4, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
-+      0x498e, 0x1078, 0x4d96, 0x0078, 0x6f84, 0x2011, 0x7c83, 0x220c,
-+      0x017e, 0x0c7e, 0x1078, 0x384c, 0x00c0, 0x6f84, 0x1078, 0x3637,
-+      0x0c7f, 0x017f, 0x1078, 0x5d1a, 0x007c, 0x5ff7, 0x5ff7, 0x5ff7,
-+      0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x6f91, 0x5ff7, 0x5ff7, 0x5ff7,
-+      0x5ff7, 0x1078, 0x61e7, 0x00c0, 0x6f9d, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x1078, 0x498e, 0x0078, 0x6f9f, 0x1078, 0x5d1a, 0x007c,
-+      0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x4c9d, 0x1078,
-+      0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040, 0x0079, 0x6fb0,
-+      0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc2, 0x6fc0, 0x6fc0, 0x6fc0,
-+      0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0,
-+      0x1078, 0x12cd, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e, 0x027e,
-+      0x6106, 0x2071, 0x7c80, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x7026,
-+      0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x2c68, 0x0c7f, 0x6a00,
-+      0xa284, 0x0001, 0x0040, 0x7091, 0x1078, 0x47e6, 0x0040, 0x70bc,
-+      0xa295, 0x0200, 0x6a02, 0x0078, 0x6feb, 0x2009, 0x0001, 0x2011,
-+      0x0200, 0x1078, 0x47d0, 0x1078, 0x1327, 0x1040, 0x12cd, 0x6003,
-+      0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000,
-+      0x6c5a, 0x2c00, 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
-+      0x694a, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036,
-+      0x1078, 0x3b92, 0xa486, 0x2000, 0x00c0, 0x7014, 0x2019, 0x0017,
-+      0x1078, 0x75d9, 0x0078, 0x707e, 0xa486, 0x0400, 0x00c0, 0x701e,
-+      0x2019, 0x0002, 0x1078, 0x75d9, 0x0078, 0x707e, 0xa486, 0x0200,
-+      0x00c0, 0x7024, 0x1078, 0x75ca, 0x0078, 0x707e, 0x2009, 0x0000,
-+      0x0c7e, 0x1078, 0x4727, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001,
-+      0x0040, 0x70d4, 0xa284, 0x0300, 0x00c0, 0x70cc, 0x6804, 0xa005,
-+      0x0040, 0x70bc, 0x8001, 0x6806, 0x6003, 0x0007, 0x1078, 0x130c,
-+      0x0040, 0x7085, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116,
-+      0x683b, 0x0000, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007,
-+      0x7130, 0x6986, 0x6846, 0x6853, 0x003d, 0x7044, 0xa084, 0x0003,
-+      0xa086, 0x0002, 0x00c0, 0x7060, 0x684f, 0x0040, 0x0078, 0x706a,
-+      0xa086, 0x0001, 0x00c0, 0x7068, 0x684f, 0x0080, 0x0078, 0x706a,
-+      0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0x7c90, 0xad90, 0x0015,
-+      0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x7070, 0x200c,
-+      0x6982, 0x8000, 0x200c, 0x697e, 0x1078, 0x3b92, 0x027f, 0x047f,
-+      0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x6013, 0x0100, 0x6003,
-+      0x0001, 0x6007, 0x0041, 0x1078, 0x4941, 0x1078, 0x4d96, 0x0078,
-+      0x707e, 0x2069, 0x7c92, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200,
-+      0x00c0, 0x70b0, 0x2069, 0x7c80, 0x686c, 0xa084, 0x00ff, 0x017e,
-+      0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003, 0x0001,
-+      0x6007, 0x0043, 0x1078, 0x4941, 0x1078, 0x4d96, 0x0078, 0x707e,
-+      0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4941,
-+      0x1078, 0x4d96, 0x0078, 0x707e, 0x6013, 0x0300, 0x0078, 0x70c2,
-+      0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4941,
-+      0x1078, 0x4d96, 0x0078, 0x707e, 0x6013, 0x0500, 0x0078, 0x70c2,
-+      0x6013, 0x0600, 0x0078, 0x7091, 0x6013, 0x0200, 0x0078, 0x7091,
-+      0xa186, 0x0013, 0x00c0, 0x70ea, 0x6004, 0xa08a, 0x0040, 0x1048,
-+      0x12cd, 0xa08a, 0x0050, 0x10c8, 0x12cd, 0xa082, 0x0040, 0x2008,
-+      0x0079, 0x711b, 0xa186, 0x0047, 0x00c0, 0x70f0, 0x0078, 0x714a,
-+      0xa186, 0x0027, 0x0040, 0x70f8, 0xa186, 0x0014, 0x10c0, 0x12cd,
-+      0x6004, 0xa082, 0x0040, 0x2008, 0x0079, 0x70fe, 0x710e, 0x7110,
-+      0x7110, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e,
-+      0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x1078, 0x12cd,
-+      0x2001, 0x0007, 0x1078, 0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6,
-+      0x1078, 0x4d96, 0x007c, 0x712b, 0x713b, 0x7134, 0x7144, 0x712b,
-+      0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b,
-+      0x712b, 0x712b, 0x712b, 0x1078, 0x12cd, 0x6010, 0xa088, 0x0013,
-+      0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x4c9d, 0x6003, 0x0002,
-+      0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x1078, 0x47a8, 0x1078,
-+      0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x2009, 0x0041,
-+      0x0078, 0x7212, 0xa182, 0x0040, 0x0079, 0x714e, 0x715e, 0x7160,
-+      0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x7161, 0x715e, 0x715e,
-+      0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x1078, 0x12cd,
-+      0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
-+      0x2c10, 0x1078, 0x156a, 0x007c, 0xa182, 0x0040, 0x0079, 0x7170,
-+      0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180,
-+      0x7180, 0x7182, 0x71a5, 0x7180, 0x7180, 0x7180, 0x7180, 0x71a5,
-+      0x1078, 0x12cd, 0x1078, 0x4d45, 0x1078, 0x4e56, 0x6010, 0x0d7e,
-+      0x2068, 0x684c, 0xd0fc, 0x0040, 0x7198, 0xa08c, 0x0003, 0xa18e,
-+      0x0002, 0x0040, 0x719e, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x7212,
-+      0x6003, 0x0007, 0x1078, 0x47a8, 0x0d7f, 0x007c, 0x1078, 0x47a8,
-+      0x1078, 0x5d1a, 0x0d7f, 0x0078, 0x719d, 0x037e, 0x1078, 0x4d45,
-+      0x1078, 0x4e56, 0x6010, 0x0d7e, 0x2068, 0x2019, 0x0004, 0x1078,
-+      0x75fd, 0x1078, 0x6bb6, 0x6017, 0x0028, 0x0d7f, 0x037f, 0x007c,
-+      0xa186, 0x0013, 0x00c0, 0x71c6, 0x6004, 0xa086, 0x0042, 0x10c0,
-+      0x12cd, 0x1078, 0x4c9d, 0x1078, 0x4d96, 0x007c, 0xa186, 0x0027,
-+      0x0040, 0x71ce, 0xa186, 0x0014, 0x00c0, 0x71de, 0x6004, 0xa086,
-+      0x0042, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078, 0x3802, 0x1078,
-+      0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040,
-+      0x0079, 0x71e2, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2,
-+      0x71f2, 0x71f4, 0x7200, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2,
-+      0x71f2, 0x71f2, 0x1078, 0x12cd, 0x037e, 0x047e, 0x20e1, 0x0005,
-+      0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x047f, 0x037f, 0x007c,
-+      0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x720c, 0x2009,
-+      0x0041, 0x0d7f, 0x0078, 0x7212, 0x6003, 0x0007, 0x1078, 0x47a8,
-+      0x0d7f, 0x007c, 0xa182, 0x0040, 0x0079, 0x7216, 0x7226, 0x7228,
-+      0x7234, 0x7240, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226,
-+      0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x1078, 0x12cd,
-+      0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e, 0x2091, 0x8000,
-+      0x1078, 0x4d96, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078,
-+      0x4941, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c,
-+      0x6003, 0x0003, 0x6106, 0x2c10, 0x1078, 0x19c7, 0x127e, 0x2091,
-+      0x8000, 0x1078, 0x49ad, 0x1078, 0x4e56, 0x127f, 0x007c, 0x1078,
-+      0x4c9d, 0x0078, 0x7255, 0x1078, 0x4d45, 0x6110, 0x81ff, 0x0040,
-+      0x7262, 0x0d7e, 0x2168, 0x037e, 0x2019, 0x0029, 0x1078, 0x75fd,
-+      0x037f, 0x0d7f, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182,
-+      0x0085, 0x0079, 0x726b, 0x7272, 0x7272, 0x7272, 0x7274, 0x7272,
-+      0x7272, 0x7272, 0x1078, 0x12cd, 0x027e, 0x0e7e, 0x2071, 0x7c80,
-+      0x7220, 0x1078, 0x7517, 0x0040, 0x7281, 0x6007, 0x0086, 0x0078,
-+      0x7283, 0x6007, 0x0087, 0x6003, 0x0001, 0x1078, 0x4941, 0x1078,
-+      0x4d96, 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x729d,
-+      0x6004, 0xa08a, 0x0085, 0x1048, 0x12cd, 0xa08a, 0x008c, 0x10c8,
-+      0x12cd, 0xa082, 0x0085, 0x0079, 0x72b0, 0xa186, 0x0027, 0x0040,
-+      0x72a5, 0xa186, 0x0014, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078,
-+      0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c,
-+      0x72b7, 0x72b9, 0x72b9, 0x72b7, 0x72b7, 0x72b7, 0x72b7, 0x1078,
-+      0x12cd, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c,
-+      0xa182, 0x0085, 0x1048, 0x12cd, 0xa182, 0x008c, 0x10c8, 0x12cd,
-+      0xa182, 0x0085, 0x0079, 0x72cc, 0x72d3, 0x72d3, 0x72d3, 0x72d5,
-+      0x72d3, 0x72d3, 0x72d3, 0x1078, 0x12cd, 0x007c, 0x1078, 0x4c9d,
-+      0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0x037e, 0x2019, 0x000b,
-+      0x1078, 0x72e6, 0x601f, 0x0006, 0x037f, 0x007c, 0x127e, 0x037e,
-+      0x087e, 0x2091, 0x8000, 0x2c40, 0x1078, 0x5a2d, 0x00c0, 0x7313,
-+      0x1078, 0x5ace, 0x00c0, 0x7313, 0x6000, 0xa086, 0x0000, 0x0040,
-+      0x7313, 0x601c, 0xa086, 0x0007, 0x0040, 0x7313, 0x0d7e, 0x6000,
-+      0xa086, 0x0004, 0x00c0, 0x7306, 0x1078, 0x166e, 0x6010, 0x2068,
-+      0x1078, 0x6a58, 0x0040, 0x730e, 0x1078, 0x75fd, 0x0d7f, 0x6013,
-+      0x0000, 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e,
-+      0x0c7e, 0x037e, 0x157e, 0x2079, 0x7c80, 0x7838, 0xa08c, 0x00ff,
-+      0x783c, 0x1078, 0x207f, 0x00c0, 0x734e, 0x017e, 0x0c7e, 0x1078,
-+      0x384c, 0x00c0, 0x734e, 0x2011, 0x7c90, 0xac98, 0x000a, 0x20a9,
-+      0x0004, 0x1078, 0x6280, 0x00c0, 0x734e, 0x017f, 0x027f, 0x027e,
-+      0x017e, 0x2019, 0x0029, 0x1078, 0x5ba2, 0x1078, 0x4a7e, 0x1078,
-+      0x49c1, 0x017f, 0x1078, 0x747b, 0x1078, 0x3a36, 0x017f, 0x1078,
-+      0x3637, 0x6612, 0x6516, 0xa006, 0x0078, 0x7350, 0x0c7f, 0x017f,
-+      0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e,
-+      0x2009, 0x771e, 0x2104, 0xa086, 0x0074, 0x00c0, 0x73ac, 0x2069,
-+      0x7c8e, 0x690c, 0xa182, 0x0100, 0x0048, 0x739c, 0x6908, 0xa184,
-+      0x8000, 0x0040, 0x73a8, 0xa184, 0x0800, 0x0040, 0x73a8, 0x6910,
-+      0xa18a, 0x0001, 0x0048, 0x73a0, 0x6914, 0x2069, 0x7cae, 0x6904,
-+      0x81ff, 0x00c0, 0x7394, 0x690c, 0xa182, 0x0100, 0x0048, 0x739c,
-+      0x6908, 0x81ff, 0x00c0, 0x7398, 0x6910, 0xa18a, 0x0001, 0x0048,
-+      0x73a0, 0x6918, 0xa18a, 0x0001, 0x0048, 0x73a8, 0x0078, 0x73b2,
-+      0x6013, 0x0100, 0x0078, 0x73ae, 0x6013, 0x0300, 0x0078, 0x73ae,
-+      0x6013, 0x0500, 0x0078, 0x73ae, 0x6013, 0x0700, 0x0078, 0x73ae,
-+      0x6013, 0x0900, 0x0078, 0x73ae, 0x6013, 0x0b00, 0x0078, 0x73ae,
-+      0x6013, 0x0f00, 0x0078, 0x73ae, 0x6013, 0x2d00, 0xa085, 0x0001,
-+      0x0078, 0x73b3, 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
-+      0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
-+      0x00ff, 0xa286, 0x0006, 0x0040, 0x73db, 0xa286, 0x0004, 0x0040,
-+      0x73db, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x73db,
-+      0xa286, 0x0004, 0x0040, 0x73db, 0x0c7e, 0x2d60, 0x1078, 0x385e,
-+      0x0c7f, 0x0078, 0x740e, 0x2011, 0x7c96, 0xad98, 0x000a, 0x20a9,
-+      0x0004, 0x1078, 0x6280, 0x00c0, 0x740f, 0x2011, 0x7c9a, 0xad98,
-+      0x0006, 0x20a9, 0x0004, 0x1078, 0x6280, 0x00c0, 0x740f, 0x047e,
-+      0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x7752,
-+      0x210c, 0xd1a4, 0x0040, 0x7403, 0x2009, 0x0029, 0x1078, 0x7641,
-+      0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x4a7e, 0x1078,
-+      0x49c1, 0x2c08, 0x1078, 0x747b, 0x017f, 0x047f, 0xa006, 0x157f,
-+      0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x7c8e,
-+      0x6800, 0xa086, 0x0800, 0x0040, 0x7421, 0x6013, 0x0000, 0x0078,
-+      0x7422, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
-+      0x037e, 0x157e, 0x2079, 0x7c8c, 0x7930, 0x7834, 0x1078, 0x207f,
-+      0x00c0, 0x7448, 0x1078, 0x384c, 0x00c0, 0x7448, 0x2011, 0x7c90,
-+      0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x6280, 0x00c0, 0x7448,
-+      0x2011, 0x7c94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x6280,
-+      0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
-+      0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0x7c83, 0x2204,
-+      0x8211, 0x220c, 0x1078, 0x207f, 0x00c0, 0x7474, 0x1078, 0x384c,
-+      0x00c0, 0x7474, 0x2011, 0x7c96, 0xac98, 0x000a, 0x20a9, 0x0004,
-+      0x1078, 0x6280, 0x00c0, 0x7474, 0x2011, 0x7c9a, 0xac98, 0x0006,
-+      0x20a9, 0x0004, 0x1078, 0x6280, 0x157f, 0x037f, 0x027f, 0x017f,
-+      0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e,
-+      0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c,
-+      0x2021, 0x7945, 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7644,
-+      0x7060, 0x8001, 0xa602, 0x00c8, 0x74e0, 0x2100, 0xac06, 0x0040,
-+      0x74d6, 0x1078, 0x7659, 0x0040, 0x74d6, 0x671c, 0xa786, 0x0001,
-+      0x0040, 0x74f5, 0xa786, 0x0007, 0x0040, 0x74d6, 0x2500, 0xac06,
-+      0x0040, 0x74d6, 0x2400, 0xac06, 0x0040, 0x74d6, 0x1078, 0x766d,
-+      0x00c0, 0x74d6, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x74bc,
-+      0x017e, 0x1078, 0x166e, 0x017f, 0x6010, 0x2068, 0x1078, 0x6a58,
-+      0x0040, 0x74d3, 0xa786, 0x0003, 0x00c0, 0x74e9, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x017e, 0x1078, 0x6c54, 0x1078, 0x3b92,
-+      0x017f, 0x1078, 0x6ba9, 0x0d7f, 0x1078, 0x6bb6, 0xace0, 0x0008,
-+      0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x74e0, 0x0078, 0x748d,
-+      0x127f, 0x027f, 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
-+      0x007c, 0xa786, 0x0006, 0x00c0, 0x74c6, 0xa386, 0x0005, 0x0040,
-+      0x74d6, 0x1078, 0x75fd, 0x0078, 0x74d3, 0x1078, 0x766d, 0x00c0,
-+      0x74d6, 0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, 0x74d6,
-+      0x6000, 0xa086, 0x0002, 0x00c0, 0x74d6, 0x1078, 0x6bcf, 0x0040,
-+      0x7511, 0x1078, 0x6be3, 0x00c0, 0x74d6, 0x1078, 0x5f6d, 0x0078,
-+      0x7513, 0x1078, 0x22d7, 0x1078, 0x6bb6, 0x0078, 0x74d6, 0x0c7e,
-+      0x0e7e, 0x017e, 0x2c08, 0x2170, 0x1078, 0x7614, 0x017f, 0x0040,
-+      0x7526, 0x601c, 0xa084, 0x000f, 0x1079, 0x7529, 0x0e7f, 0x0c7f,
-+      0x007c, 0x7531, 0x7531, 0x7531, 0x7531, 0x7531, 0x7531, 0x7533,
-+      0x7531, 0xa006, 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, 0x0028,
-+      0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x1078,
-+      0x7641, 0x017f, 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, 0x72e6,
-+      0x037f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x37e0,
-+      0x157e, 0x017e, 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x7705,
-+      0x2011, 0x7c96, 0x1078, 0x6280, 0x037f, 0x027f, 0x017f, 0x157f,
-+      0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e,
-+      0x127e, 0x2091, 0x8000, 0x2061, 0x7e00, 0x2079, 0x0001, 0x8fff,
-+      0x0040, 0x75bd, 0x2071, 0x7700, 0x7644, 0x7060, 0x8001, 0xa602,
-+      0x00c8, 0x75bd, 0x88ff, 0x0040, 0x7583, 0x2800, 0xac06, 0x00c0,
-+      0x75b3, 0x2079, 0x0000, 0x1078, 0x7659, 0x0040, 0x75b3, 0x2400,
-+      0xac06, 0x0040, 0x75b3, 0x671c, 0xa786, 0x0006, 0x00c0, 0x75b3,
-+      0xa786, 0x0007, 0x0040, 0x75b3, 0x88ff, 0x00c0, 0x759b, 0x6018,
-+      0xa206, 0x00c0, 0x75b3, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0,
-+      0x75a3, 0x1078, 0x166e, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040,
-+      0x75ad, 0x047e, 0x1078, 0x75fd, 0x047f, 0x0d7f, 0x1078, 0x6bb6,
-+      0x88ff, 0x00c0, 0x75c6, 0xace0, 0x0008, 0x2001, 0x7715, 0x2004,
-+      0xac02, 0x00c8, 0x75bd, 0x0078, 0x756f, 0xa006, 0x127f, 0x027f,
-+      0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001,
-+      0x0078, 0x75be, 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, 0x0002,
-+      0x6218, 0x1078, 0x5a2d, 0x1078, 0x5ace, 0x1078, 0x7562, 0x087f,
-+      0x007c, 0x027e, 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9,
-+      0x007f, 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x384c, 0x00c0,
-+      0x75f2, 0x2c10, 0x2041, 0x0000, 0x1078, 0x5a2d, 0x1078, 0x5ace,
-+      0x1078, 0x7562, 0x037f, 0x017f, 0x8108, 0x00f0, 0x75e3, 0x157f,
-+      0x0c7f, 0x087f, 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff,
-+      0x0040, 0x7611, 0x6800, 0xa07d, 0x0040, 0x760e, 0x6803, 0x0000,
-+      0x6b52, 0x1078, 0x3b92, 0x2f68, 0x0078, 0x7602, 0x6b52, 0x1078,
-+      0x3b92, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061,
-+      0x7e00, 0x2071, 0x7700, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8,
-+      0x763c, 0x2100, 0xac06, 0x0040, 0x762e, 0x6000, 0xa086, 0x0000,
-+      0x0040, 0x762e, 0x6008, 0xa206, 0x0040, 0x7638, 0xace0, 0x0008,
-+      0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x763c, 0x0078, 0x7619,
-+      0xa085, 0x0001, 0x0078, 0x763d, 0xa006, 0x037f, 0x047f, 0x0e7f,
-+      0x007c, 0x0d7e, 0x007e, 0x1078, 0x1327, 0x007f, 0x1040, 0x12cd,
-+      0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000,
-+      0x685e, 0x6956, 0x6c46, 0x684f, 0x0000, 0x1078, 0x3b92, 0x0d7f,
-+      0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0x766c, 0xa786, 0x0001,
-+      0x0040, 0x766c, 0xa786, 0x000a, 0x0040, 0x766c, 0xa786, 0x0009,
-+      0x0040, 0x766c, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018, 0x2070,
-+      0x70a0, 0xa206, 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091,
-+      0x8000, 0x2071, 0x7740, 0xd5a4, 0x0040, 0x7681, 0x7034, 0x8000,
-+      0x7036, 0xd5b4, 0x0040, 0x7687, 0x7030, 0x8000, 0x7032, 0xd5ac,
-+      0x0040, 0x768e, 0x2071, 0x774a, 0x1078, 0x76bd, 0x0e7f, 0x007f,
-+      0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
-+      0x7740, 0xd5a4, 0x0040, 0x769f, 0x7034, 0x8000, 0x7036, 0xd5b4,
-+      0x0040, 0x76a5, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x76ac,
-+      0x2071, 0x774a, 0x1078, 0x76bd, 0x0e7f, 0x007f, 0x127f, 0x007c,
-+      0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7742, 0x1078,
-+      0x76bd, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072,
-+      0x00c8, 0x76c6, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e,
-+      0x2071, 0x7740, 0x1078, 0x76bd, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-+      0x7744, 0x1078, 0x76bd, 0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004,
-+      0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400,
-+      0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x687d
-+};
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_2200.h     2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,5286 @@
-+/* @(#)asm_2200.h 1.5 */
-+/*
-+ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 by Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */ 
-+
-+/************************************************************************
-+ *                                                                    *
-+ *               --- ISP2200 Initiator/Target Firmware ---              *
-+ *             with Fabric (Public Loop), Point-point, and              *
-+ *             expanded LUN addressing for FCTAPE                       *
-+ *                                                                    *
-+ ************************************************************************/
-+/*
-+ *    Firmware Version 2.02.03 (08:58 May 02, 2002)
-+ */
-+static const u_int16_t isp_2200_risc_code[] = {
-+      0x0470, 0x0000, 0x0000, 0xa3f2, 0x0000, 0x0002, 0x0002, 0x0003,
-+      0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-+      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-+      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972,
-+      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-+      0x322e, 0x3032, 0x2e30, 0x3320, 0x2020, 0x2020, 0x2400, 0x20c1,
-+      0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0xb9ff, 0x2091,
-+      0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x2930,
-+      0x2051, 0xb400, 0x2a70, 0x2029, 0xec00, 0x2031, 0xffff, 0x2039,
-+      0xebe9, 0x2021, 0x0200, 0x0804, 0x1464, 0x20a1, 0xb3f2, 0xa00e,
-+      0x20a9, 0x080e, 0x41a4, 0x3400, 0x7562, 0x7666, 0x775e, 0x746a,
-+      0x746e, 0x20a1, 0xbc00, 0x7164, 0x810d, 0x810d, 0x810d, 0x810d,
-+      0xa18c, 0x000f, 0x2001, 0x000b, 0xa112, 0xa00e, 0x21a8, 0x41a4,
-+      0x3400, 0x8211, 0x1dd8, 0x7164, 0x3400, 0xa102, 0x0120, 0x0218,
-+      0x20a8, 0xa00e, 0x41a4, 0x3800, 0xd08c, 0x01d8, 0x2009, 0xb400,
-+      0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0001,
-+      0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0,
-+      0x2009, 0xb400, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e,
-+      0x41a4, 0x080c, 0x140d, 0x080c, 0x162e, 0x080c, 0x17c7, 0x080c,
-+      0x1f73, 0x080c, 0x4bb9, 0x080c, 0x8562, 0x080c, 0x15b7, 0x080c,
-+      0x2e88, 0x080c, 0x5d4b, 0x080c, 0x5302, 0x080c, 0x6893, 0x080c,
-+      0x24d9, 0x080c, 0x6b26, 0x080c, 0x637c, 0x080c, 0x239b, 0x080c,
-+      0x24a7, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004, 0x10c5, 0x7820,
-+      0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04, 0x10bd, 0x781b,
-+      0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000,
-+      0x2a70, 0x7000, 0xa08e, 0x0003, 0x1158, 0x080c, 0x3ec6, 0x080c,
-+      0x2eaf, 0x080c, 0x5d99, 0x080c, 0x54b1, 0x080c, 0x68be, 0x0c80,
-+      0x000b, 0x0c98, 0x10e4, 0x10e5, 0x1210, 0x10e2, 0x12d9, 0x140a,
-+      0x140b, 0x140c, 0x080c, 0x1511, 0x0005, 0x0126, 0x00f6, 0x2091,
-+      0x8000, 0x7000, 0xa086, 0x0001, 0x1904, 0x11ed, 0x080c, 0x1584,
-+      0x080c, 0x5a90, 0x0150, 0x080c, 0x5ab6, 0x15c0, 0x2079, 0x0100,
-+      0x7828, 0xa085, 0x1800, 0x782a, 0x0488, 0x080c, 0x59c8, 0x7000,
-+      0xa086, 0x0001, 0x1904, 0x11ed, 0x708c, 0xa086, 0x0028, 0x1904,
-+      0x11ed, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827,
-+      0xffff, 0x7a28, 0xa295, 0x1e2f, 0x7a2a, 0x2011, 0x5963, 0x080c,
-+      0x6961, 0x2011, 0x5956, 0x080c, 0x6a21, 0x2011, 0x59a5, 0x080c,
-+      0x6961, 0x2011, 0x4a96, 0x080c, 0x6961, 0x2011, 0x8030, 0x2019,
-+      0x0000, 0x708b, 0x0000, 0x080c, 0x1db8, 0x00e8, 0x080c, 0x4449,
-+      0x2079, 0x0100, 0x7844, 0xa005, 0x1904, 0x11ed, 0x2011, 0x4a96,
-+      0x080c, 0x6961, 0x2011, 0x59a5, 0x080c, 0x6961, 0x080c, 0x1db8,
-+      0x2001, 0xb68d, 0x2004, 0x780e, 0x7840, 0xa084, 0xfffb, 0x7842,
-+      0x2011, 0x8010, 0x73cc, 0x080c, 0x3e8a, 0x723c, 0xc284, 0x723e,
-+      0x2001, 0xb40c, 0x200c, 0xc1ac, 0x2102, 0x080c, 0x7edf, 0x2011,
-+      0x0004, 0x080c, 0x9bf1, 0x080c, 0x520e, 0x080c, 0x5a90, 0x0158,
-+      0x080c, 0x4ba2, 0x0140, 0x708b, 0x0001, 0x70c7, 0x0000, 0x080c,
-+      0x45e6, 0x0804, 0x11ed, 0x080c, 0x52ca, 0x0120, 0x7a0c, 0xc2b4,
-+      0x7a0e, 0x0060, 0x7073, 0x0000, 0x080c, 0x9f99, 0x70d4, 0xd09c,
-+      0x1128, 0x70a0, 0xa005, 0x0110, 0x080c, 0x4b80, 0x70df, 0x0000,
-+      0x70db, 0x0000, 0x72d4, 0x080c, 0x5a90, 0x1178, 0x2011, 0x0000,
-+      0x0016, 0x080c, 0x28b1, 0x2019, 0xb68f, 0x211a, 0x001e, 0x7053,
-+      0xffff, 0x7057, 0x00ef, 0x7077, 0x0000, 0x2079, 0xb452, 0x7804,
-+      0xd0ac, 0x0108, 0xc295, 0x72d6, 0x080c, 0x5a90, 0x0118, 0xa296,
-+      0x0004, 0x0548, 0x2011, 0x0001, 0x080c, 0x9bf1, 0x709b, 0x0000,
-+      0x709f, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003,
-+      0x7828, 0xa085, 0x0003, 0x782a, 0x00fe, 0x080c, 0x2a7e, 0x2011,
-+      0x0005, 0x080c, 0x801f, 0x080c, 0x7134, 0x080c, 0x5a90, 0x0148,
-+      0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x28b1, 0x61e2, 0x001e,
-+      0x00ce, 0x012e, 0x0420, 0x709b, 0x0000, 0x709f, 0xffff, 0x7003,
-+      0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0xa085,
-+      0x0003, 0x782a, 0x00fe, 0x2011, 0x0005, 0x080c, 0x801f, 0x080c,
-+      0x7134, 0x080c, 0x5a90, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
-+      0x080c, 0x28b1, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005,
-+      0x00c6, 0x080c, 0x5a90, 0x1118, 0x20a9, 0x0100, 0x0010, 0x20a9,
-+      0x0082, 0x080c, 0x5a90, 0x1118, 0x2009, 0x0000, 0x0010, 0x2009,
-+      0x007e, 0x080c, 0x2d5b, 0x8108, 0x1f04, 0x1201, 0x00ce, 0x7073,
-+      0x0000, 0x7074, 0xa084, 0x00ff, 0x7076, 0x70a3, 0x0000, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x7000, 0xa086, 0x0002, 0x1904, 0x12d7,
-+      0x709c, 0xa086, 0xffff, 0x0130, 0x080c, 0x2a7e, 0x080c, 0x7134,
-+      0x0804, 0x12d7, 0x70d4, 0xd0ac, 0x1110, 0xd09c, 0x0540, 0xd084,
-+      0x0530, 0x0006, 0x0016, 0x2001, 0x0103, 0x2009, 0xb68d, 0x210c,
-+      0x2102, 0x001e, 0x000e, 0xd08c, 0x01d0, 0x70d8, 0xa086, 0xffff,
-+      0x0190, 0x080c, 0x2bdd, 0x080c, 0x7134, 0x70d4, 0xd094, 0x1904,
-+      0x12d7, 0x2011, 0x0001, 0x2019, 0x0000, 0x080c, 0x2c13, 0x080c,
-+      0x7134, 0x0804, 0x12d7, 0x70dc, 0xa005, 0x1904, 0x12d7, 0x7098,
-+      0xa005, 0x1904, 0x12d7, 0x70d4, 0xd0a4, 0x0118, 0xd0b4, 0x0904,
-+      0x12d7, 0x080c, 0x52ca, 0x1904, 0x12d7, 0x2001, 0xb453, 0x2004,
-+      0xd0ac, 0x01c8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000,
-+      0x0016, 0x080c, 0x4f6a, 0x1118, 0x6000, 0xd0ec, 0x1138, 0x001e,
-+      0x8108, 0x1f04, 0x1268, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce,
-+      0x015e, 0x0804, 0x12d7, 0x0006, 0x0016, 0x2001, 0x0103, 0x2009,
-+      0xb68d, 0x210c, 0x2102, 0x001e, 0x000e, 0xa006, 0x2009, 0x0700,
-+      0x20a9, 0x0002, 0x20a1, 0xb6ce, 0x40a1, 0x7070, 0x8007, 0x7174,
-+      0x810f, 0x20a9, 0x0002, 0x40a1, 0x2009, 0x0000, 0x080c, 0x14f7,
-+      0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x40a1, 0xa006, 0x2009,
-+      0x0200, 0x20a9, 0x0002, 0x20a1, 0xb6de, 0x40a1, 0x7030, 0xc08c,
-+      0x7032, 0x7003, 0x0003, 0x709f, 0xffff, 0x080c, 0x157d, 0xa006,
-+      0x080c, 0x2789, 0x080c, 0x3efc, 0x00f6, 0x2079, 0x0100, 0x080c,
-+      0x5ab6, 0x0150, 0x080c, 0x5a90, 0x7828, 0x0118, 0xa084, 0xe1ff,
-+      0x0010, 0xa084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0xb6e1, 0x2004,
-+      0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x801f, 0x2011,
-+      0x0000, 0x080c, 0x8029, 0x080c, 0x7134, 0x080c, 0x71f1, 0x012e,
-+      0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
-+      0x0100, 0x2009, 0xb434, 0x2104, 0xa005, 0x1110, 0x080c, 0x28dd,
-+      0x2009, 0x00f7, 0x080c, 0x4b69, 0x7940, 0xa18c, 0x0010, 0x7942,
-+      0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827,
-+      0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x1347,
-+      0x080c, 0x5aa2, 0x0158, 0x080c, 0x5ab6, 0x1128, 0x2001, 0xb69e,
-+      0x2003, 0x0000, 0x0070, 0x080c, 0x5a98, 0x0dc0, 0x2001, 0xb69e,
-+      0x2003, 0xaaaa, 0x2001, 0xb69f, 0x2003, 0x0001, 0x080c, 0x59c8,
-+      0x0058, 0x080c, 0x5a90, 0x0140, 0x2009, 0x00f8, 0x080c, 0x4b69,
-+      0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c,
-+      0x1138, 0x080c, 0x5a90, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x13f1,
-+      0x1f04, 0x1326, 0x0070, 0x7824, 0x080c, 0x5aac, 0x0118, 0xd0ac,
-+      0x1904, 0x13f1, 0xa084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804,
-+      0x13f1, 0x2001, 0x0001, 0x080c, 0x2789, 0x0804, 0x1400, 0x7850,
-+      0xa084, 0x0180, 0x7852, 0x782f, 0x0020, 0x20a9, 0x0046, 0x1d04,
-+      0x134f, 0x080c, 0x6a09, 0x1f04, 0x134f, 0x7850, 0xa084, 0x0180,
-+      0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x5aa2, 0x0158,
-+      0x080c, 0x5ab6, 0x1128, 0x2001, 0xb69e, 0x2003, 0x0000, 0x0070,
-+      0x080c, 0x5a98, 0x0dc0, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001,
-+      0xb69f, 0x2003, 0x0001, 0x080c, 0x59c8, 0x0020, 0x2009, 0x00f8,
-+      0x080c, 0x4b69, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x137c, 0x7850,
-+      0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x5a90, 0x0120,
-+      0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, 0x2019, 0xea60,
-+      0x7820, 0xd09c, 0x1558, 0x080c, 0x5a90, 0x05d8, 0x7824, 0xd0ac,
-+      0x1904, 0x13f1, 0x080c, 0x5ab6, 0x1508, 0x0046, 0x2021, 0x0190,
-+      0x8421, 0x1df0, 0x004e, 0x8421, 0x11c8, 0x7827, 0x0048, 0x20a9,
-+      0x01f4, 0x1d04, 0x13a9, 0x080c, 0x6a09, 0x1f04, 0x13a9, 0x7824,
-+      0xa084, 0x0068, 0x15c8, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001,
-+      0xb69f, 0x2003, 0x0001, 0x7003, 0x0001, 0x0498, 0x1d04, 0x13c2,
-+      0x080c, 0x6a09, 0x8319, 0x1960, 0x2009, 0xb434, 0x2104, 0x8000,
-+      0x200a, 0xa084, 0xfff0, 0x0120, 0x200b, 0x0000, 0x080c, 0x28dd,
-+      0x00d8, 0x080c, 0x5aa2, 0x1140, 0xa4a2, 0x0064, 0x1128, 0x080c,
-+      0x5a67, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0xe000, 0xe000,
-+      0x7824, 0x080c, 0x5aac, 0x0110, 0xd0ac, 0x1158, 0xa084, 0x1800,
-+      0x09a8, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x2789,
-+      0x0048, 0x2001, 0xb434, 0x2003, 0x0000, 0x7827, 0x0048, 0x7828,
-+      0xc09d, 0x782a, 0x7850, 0xa084, 0x0180, 0xa085, 0x0400, 0x7852,
-+      0x015e, 0x003e, 0x000e, 0x080c, 0x1554, 0x012e, 0x00fe, 0x004e,
-+      0x001e, 0x0005, 0x0005, 0x0005, 0x0005, 0x2a70, 0x2061, 0xb6c1,
-+      0x2063, 0x0002, 0x6007, 0x0002, 0x600b, 0x0003, 0x600f, 0x0017,
-+      0x2001, 0xb69e, 0x2003, 0x0000, 0x708b, 0x0000, 0x2009, 0x0100,
-+      0x2104, 0xa082, 0x0002, 0x0218, 0x7053, 0xffff, 0x0010, 0x7053,
-+      0x0000, 0x705b, 0xffff, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
-+      0x9f99, 0x2061, 0xb68e, 0x6003, 0x0909, 0x6007, 0x0000, 0x600b,
-+      0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x601b,
-+      0x0000, 0x601f, 0x07d0, 0x2061, 0xb696, 0x6003, 0x8000, 0x6007,
-+      0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017,
-+      0x0000, 0x601b, 0x0001, 0x601f, 0x0000, 0x2061, 0xb6b9, 0x6003,
-+      0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
-+      0xb428, 0x2003, 0x0000, 0x0005, 0x04a0, 0x2011, 0x0000, 0x81ff,
-+      0x0570, 0xa186, 0x0001, 0x1148, 0x2031, 0x8fff, 0x2039, 0xd401,
-+      0x2021, 0x0100, 0x2029, 0xd400, 0x00e8, 0xa186, 0x0002, 0x1118,
-+      0x2011, 0x0000, 0x00b8, 0xa186, 0x0005, 0x1118, 0x2011, 0x0001,
-+      0x0088, 0xa186, 0x0009, 0x1118, 0x2011, 0x0002, 0x0058, 0xa186,
-+      0x000a, 0x1118, 0x2011, 0x0002, 0x0028, 0xa186, 0x0055, 0x1110,
-+      0x2011, 0x0003, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0804,
-+      0x104d, 0xa00e, 0x2011, 0x0003, 0x2019, 0x14a0, 0x0804, 0x14f1,
-+      0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14, 0x2362, 0xe000, 0xe000,
-+      0x2c04, 0xa306, 0x2262, 0x1110, 0xc1b5, 0xc1a5, 0x2011, 0x0000,
-+      0x2019, 0x14b3, 0x04f0, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14,
-+      0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061, 0x7fff, 0xe000, 0xe000,
-+      0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x0110, 0xc18d, 0x0008,
-+      0xc185, 0x2011, 0x0002, 0x2019, 0x14ce, 0x0418, 0x2061, 0xffff,
-+      0x2019, 0xaaaa, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c04, 0x2262,
-+      0xa306, 0x1180, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061,
-+      0x7fff, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x1110, 0xc195,
-+      0x0008, 0xc19d, 0x2011, 0x0001, 0x2019, 0x14ef, 0x0010, 0x0804,
-+      0x1465, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0837, 0x2011,
-+      0x0000, 0x080c, 0x4f6a, 0x1178, 0x6004, 0xa0c4, 0x00ff, 0xa8c6,
-+      0x0006, 0x0128, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1120, 0xa186,
-+      0x0080, 0x0108, 0x8210, 0x8108, 0xa186, 0x0100, 0x1d50, 0x2208,
-+      0x0005, 0x2091, 0x8000, 0x0e04, 0x1513, 0x0006, 0x0016, 0x2079,
-+      0x0000, 0x7818, 0xd084, 0x1de8, 0x001e, 0x792e, 0x000e, 0x782a,
-+      0x000e, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001,
-+      0x2091, 0x5000, 0x0126, 0x0156, 0x0146, 0x20a9, 0x0010, 0x20a1,
-+      0xb80c, 0x2091, 0x2000, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2200,
-+      0x40a1, 0x20a9, 0x0010, 0x2091, 0x2400, 0x40a1, 0x20a9, 0x0010,
-+      0x2091, 0x2600, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2800, 0x40a1,
-+      0x014e, 0x015e, 0x012e, 0x2079, 0xb400, 0x7803, 0x0005, 0x2091,
-+      0x4080, 0x04c9, 0x0cf8, 0x0005, 0x0006, 0x080c, 0x159f, 0x1518,
-+      0x00f6, 0x2079, 0xb424, 0x2f04, 0x8000, 0x207a, 0xa082, 0x000f,
-+      0x0258, 0xa006, 0x207a, 0x2079, 0xb426, 0x2f04, 0xa084, 0x0001,
-+      0xa086, 0x0001, 0x207a, 0x0070, 0x2079, 0xb426, 0x2f7c, 0x8fff,
-+      0x1128, 0x2001, 0x0c03, 0x2003, 0x0040, 0x0020, 0x2001, 0x0c03,
-+      0x2003, 0x00c0, 0x00fe, 0x000e, 0x0005, 0x0409, 0x1120, 0x2001,
-+      0x0c03, 0x2003, 0x0080, 0x0005, 0x00d1, 0x1120, 0x2001, 0x0c03,
-+      0x2003, 0x0040, 0x0005, 0x0006, 0x0091, 0x1178, 0x2001, 0x0c03,
-+      0x2003, 0x0040, 0x2009, 0x0fff, 0x00a1, 0x2001, 0x0c03, 0x2003,
-+      0x0080, 0x2009, 0x0fff, 0x0069, 0x0c88, 0x000e, 0x0005, 0x00c6,
-+      0x2061, 0x0c00, 0x2c04, 0xa084, 0x00ff, 0xa086, 0x00aa, 0x00ce,
-+      0x0005, 0x0156, 0x0126, 0xa18c, 0x0fff, 0x21a8, 0x1d04, 0x15ae,
-+      0x2091, 0x6000, 0x1f04, 0x15ae, 0x012e, 0x015e, 0x0005, 0x2071,
-+      0xb400, 0x7160, 0x712e, 0x2021, 0x0001, 0xa190, 0x0030, 0xa298,
-+      0x0030, 0x0240, 0x7064, 0xa302, 0x1228, 0x220a, 0x2208, 0x2310,
-+      0x8420, 0x0ca8, 0x3800, 0xd08c, 0x0148, 0x7064, 0xa086, 0xb400,
-+      0x0128, 0x7067, 0xb400, 0x2011, 0x1000, 0x0c48, 0x200b, 0x0000,
-+      0x74b2, 0x74b6, 0x0005, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
-+      0xb400, 0x70b4, 0xa0ea, 0x0010, 0x0268, 0x8001, 0x70b6, 0x702c,
-+      0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x012e,
-+      0x00ee, 0x0005, 0xa06e, 0x0cd8, 0x00e6, 0x2071, 0xb400, 0x0126,
-+      0x2091, 0x8000, 0x70b4, 0x8001, 0x0260, 0x70b6, 0x702c, 0x2068,
-+      0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x012e, 0x00ee,
-+      0x0005, 0xa06e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
-+      0xb400, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70b4, 0x8000, 0x70b6,
-+      0x012e, 0x00ee, 0x0005, 0x8dff, 0x0138, 0x6804, 0x6807, 0x0000,
-+      0x0006, 0x0c49, 0x00de, 0x0cb8, 0x0005, 0x00e6, 0x2071, 0xb400,
-+      0x70b4, 0xa08a, 0x0010, 0xa00d, 0x00ee, 0x0005, 0x00e6, 0x2071,
-+      0xb712, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071,
-+      0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x00ee, 0x0005, 0x00e6,
-+      0x2270, 0x700b, 0x0000, 0x2071, 0xb712, 0x7018, 0xa088, 0xb71b,
-+      0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x1128,
-+      0x00f6, 0x2079, 0x0010, 0x0081, 0x00fe, 0x00ee, 0x0005, 0x00e6,
-+      0x2071, 0xb712, 0x7004, 0xa005, 0x1128, 0x00f6, 0x2079, 0x0010,
-+      0x0019, 0x00fe, 0x00ee, 0x0005, 0x7000, 0x0002, 0x166a, 0x16ce,
-+      0x16eb, 0x16eb, 0x7018, 0x711c, 0xa106, 0x1118, 0x7007, 0x0000,
-+      0x0005, 0x00d6, 0xa180, 0xb71b, 0x2004, 0x700a, 0x2068, 0x8108,
-+      0xa18c, 0x0007, 0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828,
-+      0x7836, 0x682c, 0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c,
-+      0x7016, 0x6804, 0x00de, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029,
-+      0x0005, 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c,
-+      0x2011, 0x0040, 0xa182, 0x0040, 0x1210, 0x2110, 0xa006, 0x700e,
-+      0x7212, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803, 0x0041, 0x002e,
-+      0x001e, 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014,
-+      0x2098, 0x20a1, 0x0014, 0x7803, 0x0026, 0x710c, 0x2011, 0x0040,
-+      0xa182, 0x0040, 0x1210, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6,
-+      0x8203, 0x7822, 0x7803, 0x0020, 0x3300, 0x7016, 0x7803, 0x0001,
-+      0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x0136, 0x0146,
-+      0x0156, 0x2099, 0xb4fa, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3,
-+      0x7803, 0x0020, 0x0126, 0x2091, 0x8000, 0x7803, 0x0041, 0x7007,
-+      0x0003, 0x7000, 0xc084, 0x7002, 0x700b, 0xb4f5, 0x012e, 0x015e,
-+      0x014e, 0x013e, 0x0005, 0x0136, 0x0146, 0x0156, 0x2001, 0xb529,
-+      0x209c, 0x20a1, 0x0014, 0x7803, 0x0026, 0x2001, 0xb52a, 0x20ac,
-+      0x53a6, 0x2099, 0xb52b, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3,
-+      0x7803, 0x0020, 0x0126, 0x2091, 0x8000, 0x7803, 0x0001, 0x7007,
-+      0x0004, 0x7000, 0xc08c, 0x7002, 0x700b, 0xb526, 0x012e, 0x015e,
-+      0x014e, 0x013e, 0x0005, 0x0016, 0x00e6, 0x2071, 0xb712, 0x00f6,
-+      0x2079, 0x0010, 0x7904, 0x7803, 0x0002, 0xd1fc, 0x0120, 0xa18c,
-+      0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x1664,
-+      0x172e, 0x175c, 0x1786, 0x17b6, 0x172d, 0x0cf8, 0xa18c, 0x0700,
-+      0x1528, 0x0136, 0x0146, 0x0156, 0x7014, 0x20a0, 0x2099, 0x0014,
-+      0x7803, 0x0040, 0x7010, 0x20a8, 0x53a5, 0x3400, 0x7016, 0x015e,
-+      0x014e, 0x013e, 0x700c, 0xa005, 0x0570, 0x7830, 0x7832, 0x7834,
-+      0x7836, 0x080c, 0x1695, 0x0005, 0x7008, 0xa080, 0x0002, 0x2003,
-+      0x0100, 0x7007, 0x0000, 0x080c, 0x1664, 0x0005, 0x7008, 0xa080,
-+      0x0002, 0x2003, 0x0200, 0x0ca8, 0xa18c, 0x0700, 0x1150, 0x700c,
-+      0xa005, 0x0188, 0x7830, 0x7832, 0x7834, 0x7836, 0x080c, 0x16aa,
-+      0x0005, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x7007, 0x0000,
-+      0x080c, 0x1664, 0x0005, 0x00d6, 0x7008, 0x2068, 0x7830, 0x6826,
-+      0x7834, 0x682a, 0x7838, 0x682e, 0x783c, 0x6832, 0x680b, 0x0100,
-+      0x00de, 0x7007, 0x0000, 0x080c, 0x1664, 0x0005, 0xa18c, 0x0700,
-+      0x1540, 0x0136, 0x0146, 0x0156, 0x2001, 0xb4f8, 0x2004, 0xa080,
-+      0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020,
-+      0x53a5, 0x2001, 0xb4fa, 0x2004, 0xd0bc, 0x0148, 0x2001, 0xb503,
-+      0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, 0x015e,
-+      0x014e, 0x013e, 0x7007, 0x0000, 0x080c, 0x5e30, 0x080c, 0x1664,
-+      0x0005, 0x2011, 0x8003, 0x080c, 0x3e8a, 0x0cf8, 0xa18c, 0x0700,
-+      0x1148, 0x2001, 0xb528, 0x2003, 0x0100, 0x7007, 0x0000, 0x080c,
-+      0x1664, 0x0005, 0x2011, 0x8004, 0x080c, 0x3e8a, 0x0cf8, 0x0126,
-+      0x2091, 0x2200, 0x2079, 0x0030, 0x2071, 0xb723, 0x7003, 0x0000,
-+      0x700f, 0xb72f, 0x7013, 0xb72f, 0x780f, 0x00f6, 0x7803, 0x0004,
-+      0x012e, 0x0005, 0x6934, 0xa184, 0x0007, 0x0002, 0x17e6, 0x1824,
-+      0x17e6, 0x17e6, 0x17e6, 0x180c, 0x17f3, 0x17ea, 0xa085, 0x0001,
-+      0x0804, 0x183e, 0x684c, 0xd0bc, 0x0dc8, 0x6860, 0x682e, 0x685c,
-+      0x682a, 0x6858, 0x04c8, 0xa18c, 0x00ff, 0xa186, 0x001e, 0x1d70,
-+      0x684c, 0xd0bc, 0x0d58, 0x6860, 0x682e, 0x685c, 0x682a, 0x6804,
-+      0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x22b6,
-+      0x2005, 0x6832, 0x6858, 0x0440, 0xa18c, 0x00ff, 0xa186, 0x0015,
-+      0x19a8, 0x684c, 0xd0ac, 0x0990, 0x6804, 0x681a, 0xa080, 0x000d,
-+      0x2004, 0xa084, 0x000f, 0xa080, 0x22b6, 0x2005, 0x6832, 0xa006,
-+      0x682e, 0x682a, 0x6858, 0x0080, 0x684c, 0xd0ac, 0x0904, 0x17e6,
-+      0xa006, 0x682e, 0x682a, 0x6858, 0xa18c, 0x000f, 0xa188, 0x22b6,
-+      0x210d, 0x6932, 0x2d08, 0x691a, 0x6826, 0x684c, 0xc0dd, 0x684e,
-+      0xa006, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x0005, 0x684c,
-+      0xd0ac, 0x090c, 0x1511, 0x6833, 0x22b3, 0x2d08, 0x691a, 0x6858,
-+      0x8001, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x682e,
-+      0x682a, 0x697c, 0x6912, 0x6980, 0x6916, 0x0005, 0x20e1, 0x0007,
-+      0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x82ff, 0x01e8, 0xa280,
-+      0x0004, 0x00d6, 0x206c, 0x684c, 0xd0dc, 0x1190, 0xa280, 0x0007,
-+      0x2004, 0xa086, 0x000a, 0x1110, 0x0891, 0x0010, 0x080c, 0x17da,
-+      0x0138, 0x00de, 0xa280, 0x0000, 0x2003, 0x0002, 0xa016, 0x0020,
-+      0x6808, 0x8000, 0x680a, 0x00de, 0x0126, 0x0046, 0x0036, 0x0026,
-+      0x2091, 0x2200, 0x002e, 0x003e, 0x004e, 0x7000, 0xa005, 0x01d0,
-+      0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
-+      0xb74a, 0x0210, 0x2009, 0xb72f, 0x710e, 0x7010, 0xa102, 0xa082,
-+      0x0009, 0x0118, 0xa080, 0x001b, 0x1118, 0x2009, 0x0138, 0x200a,
-+      0x012e, 0x0005, 0x7206, 0x2001, 0x18a0, 0x0006, 0x2260, 0x0804,
-+      0x19cc, 0x0126, 0x0026, 0x0036, 0x00c6, 0x0006, 0x2091, 0x2200,
-+      0x000e, 0x004e, 0x003e, 0x002e, 0x00d6, 0x00c6, 0x2460, 0x6110,
-+      0x2168, 0x6a62, 0x6b5e, 0xa005, 0x0904, 0x1901, 0x6808, 0xa005,
-+      0x0904, 0x1938, 0x7000, 0xa005, 0x1108, 0x0488, 0x700c, 0x7110,
-+      0xa106, 0x1904, 0x1940, 0x7004, 0xa406, 0x1548, 0x2001, 0x0005,
-+      0x2004, 0xd08c, 0x0168, 0x0046, 0x080c, 0x1ad5, 0x004e, 0x2460,
-+      0x6010, 0xa080, 0x0002, 0x2004, 0xa005, 0x0904, 0x1938, 0x0c10,
-+      0x2001, 0x0207, 0x2004, 0xd09c, 0x1d48, 0x7804, 0xa084, 0x6000,
-+      0x0120, 0xa086, 0x6000, 0x0108, 0x0c08, 0x7818, 0x6812, 0x781c,
-+      0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6100,
-+      0xa18e, 0x0004, 0x1904, 0x1940, 0x2009, 0x0048, 0x080c, 0x85ef,
-+      0x04f8, 0x6808, 0xa005, 0x05a0, 0x7000, 0xa005, 0x0588, 0x700c,
-+      0x7110, 0xa106, 0x1118, 0x7004, 0xa406, 0x1550, 0x2001, 0x0005,
-+      0x2004, 0xd08c, 0x0160, 0x0046, 0x080c, 0x1ad5, 0x004e, 0x2460,
-+      0x6010, 0xa080, 0x0002, 0x2004, 0xa005, 0x01d0, 0x0c28, 0x2001,
-+      0x0207, 0x2004, 0xd09c, 0x1d50, 0x2001, 0x0005, 0x2004, 0xd08c,
-+      0x1d50, 0x7804, 0xa084, 0x6000, 0x0118, 0xa086, 0x6000, 0x19f0,
-+      0x7818, 0x6812, 0x781c, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000,
-+      0x6100, 0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x85ef,
-+      0x00ce, 0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x0026, 0x0036,
-+      0x0046, 0x0056, 0x2071, 0xb723, 0x7000, 0xa086, 0x0000, 0x0904,
-+      0x19aa, 0x7004, 0xac06, 0x1904, 0x199c, 0x2079, 0x0030, 0x7000,
-+      0xa086, 0x0003, 0x0904, 0x199c, 0x7804, 0xd0fc, 0x15c8, 0x20e1,
-+      0x6000, 0x2011, 0x0032, 0x2001, 0x0208, 0x200c, 0x2001, 0x0209,
-+      0x2004, 0xa106, 0x1d88, 0x8211, 0x1db0, 0x7804, 0xd0fc, 0x1540,
-+      0x080c, 0x1e3f, 0x0026, 0x0056, 0x7803, 0x0004, 0x7804, 0xd0ac,
-+      0x1de8, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007,
-+      0x0000, 0x005e, 0x002e, 0x2001, 0x015d, 0x2003, 0x0000, 0x080c,
-+      0x5a90, 0x1138, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b12, 0x006e,
-+      0x0058, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0020,
-+      0x080c, 0x1ad5, 0x0804, 0x194c, 0x0156, 0x20a9, 0x0009, 0x2009,
-+      0xb72f, 0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04,
-+      0x19a1, 0x015e, 0x005e, 0x004e, 0x003e, 0x002e, 0x00ee, 0x00fe,
-+      0x0005, 0x700c, 0x7110, 0xa106, 0x0904, 0x1a40, 0x2104, 0x7006,
-+      0x2060, 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0xb74a,
-+      0x0210, 0x2009, 0xb72f, 0x7112, 0x700c, 0xa106, 0x1128, 0x080c,
-+      0x28b1, 0x2001, 0x0138, 0x2102, 0x8cff, 0x0598, 0x6010, 0x2068,
-+      0x2d58, 0x6828, 0xa406, 0x1590, 0x682c, 0xa306, 0x1578, 0x7004,
-+      0x2060, 0x6020, 0xc0d4, 0x6022, 0x684c, 0xd0f4, 0x0128, 0x6817,
-+      0xffff, 0x6813, 0xffff, 0x00e8, 0x6850, 0xd0f4, 0x1130, 0x7803,
-+      0x0004, 0x6810, 0x781a, 0x6814, 0x781e, 0x6824, 0x2050, 0x6818,
-+      0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, 0x0011,
-+      0x080c, 0x1a43, 0x0120, 0x2009, 0x0001, 0x080c, 0x1a43, 0x2d58,
-+      0x0005, 0x080c, 0x1dac, 0x0904, 0x19b1, 0x0cd0, 0x6020, 0xd0f4,
-+      0x11e0, 0xd0d4, 0x01b8, 0x6038, 0xa402, 0x6034, 0xa303, 0x0108,
-+      0x1288, 0x643a, 0x6336, 0x6c2a, 0x6b2e, 0x0046, 0x0036, 0x2400,
-+      0x6c7c, 0xa402, 0x6812, 0x2300, 0x6b80, 0xa303, 0x6816, 0x003e,
-+      0x004e, 0x0018, 0x080c, 0x9f2b, 0x09e0, 0x601c, 0xa08e, 0x0008,
-+      0x0904, 0x19d7, 0xa08e, 0x000a, 0x0904, 0x19d7, 0x2001, 0xb474,
-+      0x2004, 0xd0b4, 0x1140, 0x6018, 0x2004, 0xd0bc, 0x1120, 0x6817,
-+      0x7fff, 0x6813, 0xffff, 0x080c, 0x22d6, 0x1918, 0x0804, 0x19d7,
-+      0x7003, 0x0000, 0x0005, 0x8aff, 0x0904, 0x1aaf, 0xa03e, 0x2730,
-+      0x6850, 0xd0fc, 0x11b8, 0xd0f4, 0x1528, 0x00d6, 0x2805, 0xac68,
-+      0x2900, 0x0002, 0x1a93, 0x1a78, 0x1a78, 0x1a93, 0x1a93, 0x1a8c,
-+      0x1a93, 0x1a78, 0x1a93, 0x1a7d, 0x1a7d, 0x1a93, 0x1a93, 0x1a93,
-+      0x1a84, 0x1a7d, 0x7803, 0x0004, 0xc0fc, 0x6852, 0x6b6c, 0x6a70,
-+      0x6d1c, 0x6c20, 0x00d6, 0xd99c, 0x0548, 0x2805, 0xac68, 0x6f08,
-+      0x6e0c, 0x0420, 0xc0f4, 0x6852, 0x6b6c, 0x6a70, 0x00d6, 0x0458,
-+      0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00c8, 0x6b10, 0x6a14, 0x6d00,
-+      0x6c04, 0x6f08, 0x6e0c, 0x0090, 0x00de, 0x00d6, 0x6834, 0xa084,
-+      0x00ff, 0xa086, 0x001e, 0x1138, 0x00de, 0x080c, 0x2278, 0x1904,
-+      0x1a43, 0xa00e, 0x00e0, 0x00de, 0x080c, 0x1511, 0x7b22, 0x7a26,
-+      0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7316, 0x721a, 0x751e, 0x7422,
-+      0x7726, 0x762a, 0x7902, 0x7000, 0x8000, 0x7002, 0x00de, 0x6828,
-+      0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x080c, 0x2278, 0x0005,
-+      0x080c, 0x1511, 0x080c, 0x1f26, 0x7004, 0x2060, 0x00d6, 0x6010,
-+      0x2068, 0x7003, 0x0000, 0x080c, 0x1dcd, 0x080c, 0x9beb, 0x0170,
-+      0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x682b,
-+      0xffff, 0x682f, 0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de, 0x080c,
-+      0x98c3, 0x0804, 0x1cfa, 0x080c, 0x1511, 0x0126, 0x2091, 0x2200,
-+      0x0006, 0x0016, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002,
-+      0xa184, 0x0700, 0x1978, 0xa184, 0x0003, 0xa086, 0x0003, 0x0d58,
-+      0x7000, 0x0002, 0x1af2, 0x1af8, 0x1c09, 0x1cd5, 0x1ce9, 0x1af2,
-+      0x1af2, 0x1af2, 0x7804, 0xd09c, 0x1904, 0x1cfa, 0x080c, 0x1511,
-+      0x8001, 0x7002, 0xd1bc, 0x11a0, 0xd19c, 0x1904, 0x1b8d, 0xd1dc,
-+      0x1178, 0x8aff, 0x0904, 0x1b8d, 0x2009, 0x0001, 0x080c, 0x1a43,
-+      0x0904, 0x1cfa, 0x2009, 0x0001, 0x080c, 0x1a43, 0x0804, 0x1cfa,
-+      0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904, 0x1b6d, 0x0026,
-+      0x0036, 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7818, 0x6812, 0x781c,
-+      0x6816, 0x2001, 0x0201, 0x2004, 0xa005, 0x0140, 0x7808, 0xd0ec,
-+      0x1128, 0x7803, 0x0009, 0x7003, 0x0004, 0x0010, 0x080c, 0x1cfe,
-+      0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a, 0x2500, 0x6872, 0xa213,
-+      0x6b2a, 0x6a2e, 0x00c6, 0x7004, 0x2060, 0x6020, 0xd0f4, 0x1110,
-+      0x633a, 0x6236, 0x00ce, 0x003e, 0x002e, 0x6e1e, 0x6f22, 0x2500,
-+      0xa405, 0x0128, 0x080c, 0x228e, 0x6850, 0xc0fd, 0x6852, 0x2a00,
-+      0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6808, 0x8001, 0x680a,
-+      0x1148, 0x684c, 0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009, 0x0048,
-+      0x080c, 0x85ef, 0x7000, 0xa086, 0x0004, 0x0904, 0x1cfa, 0x7003,
-+      0x0000, 0x080c, 0x19b1, 0x0804, 0x1cfa, 0x0056, 0x7d0c, 0xd5bc,
-+      0x1110, 0x080c, 0xb38a, 0x005e, 0x080c, 0x1dcd, 0x00f6, 0x7004,
-+      0x2078, 0x080c, 0x52c6, 0x0118, 0x7820, 0xc0f5, 0x7822, 0x00fe,
-+      0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c,
-+      0x791a, 0x6980, 0x791e, 0x0804, 0x1cfa, 0x7004, 0x00c6, 0x2060,
-+      0x6020, 0x00ce, 0xd0f4, 0x0120, 0x6808, 0x8001, 0x680a, 0x04c0,
-+      0x7818, 0x6812, 0x7a1c, 0x6a16, 0xd19c, 0x0160, 0xa205, 0x0150,
-+      0x7004, 0xa080, 0x0007, 0x2004, 0xa084, 0xfffd, 0xa086, 0x0008,
-+      0x1904, 0x1b10, 0x684c, 0xc0f5, 0x684e, 0x7814, 0xa005, 0x1520,
-+      0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x01a0, 0x7004, 0x2060,
-+      0x601c, 0xa086, 0x000a, 0x11a0, 0x0156, 0x20a9, 0x0009, 0x2009,
-+      0xb72f, 0x2104, 0xac06, 0x1108, 0x200a, 0xa188, 0x0003, 0x1f04,
-+      0x1bc1, 0x015e, 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x85ef,
-+      0x080c, 0x19b1, 0x0804, 0x1cfa, 0x7818, 0x6812, 0x781c, 0x6816,
-+      0x7814, 0x7908, 0xa18c, 0x0fff, 0xa192, 0x0841, 0x1a04, 0x1ab2,
-+      0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, 0x8104, 0x8004,
-+      0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x080c, 0x1e6a, 0x7803,
-+      0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, 0xd0fc, 0x0de8,
-+      0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x00f6, 0x7004, 0x7007,
-+      0x0000, 0x2060, 0x2009, 0x0048, 0x080c, 0x85ef, 0x080c, 0x1ec0,
-+      0x0838, 0x8001, 0x7002, 0xd194, 0x01b0, 0x7804, 0xd0fc, 0x1904,
-+      0x1ca5, 0xd09c, 0x0138, 0x7804, 0xd0fc, 0x1904, 0x1ca5, 0xd09c,
-+      0x1904, 0x1ca9, 0x8aff, 0x0904, 0x1cfa, 0x2009, 0x0001, 0x080c,
-+      0x1a43, 0x0804, 0x1cfa, 0xa184, 0x0888, 0x1148, 0x8aff, 0x0904,
-+      0x1cfa, 0x2009, 0x0001, 0x080c, 0x1a43, 0x0804, 0x1cfa, 0x7818,
-+      0x6812, 0x7a1c, 0x6a16, 0xa205, 0x0904, 0x1baa, 0x7803, 0x0004,
-+      0x7003, 0x0000, 0xd1bc, 0x1904, 0x1c87, 0x6834, 0xa084, 0x00ff,
-+      0xa086, 0x0029, 0x1118, 0xd19c, 0x1904, 0x1baa, 0x0026, 0x0036,
-+      0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7818, 0x6812, 0x781c, 0x6816,
-+      0x2001, 0x0201, 0x2004, 0xa005, 0x0140, 0x7808, 0xd0ec, 0x1128,
-+      0x7803, 0x0009, 0x7003, 0x0004, 0x0020, 0x0016, 0x080c, 0x1cfe,
-+      0x001e, 0x6b28, 0x6a2c, 0x080c, 0x228e, 0x00d6, 0x2805, 0xac68,
-+      0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a, 0x680c, 0xa213, 0x0020,
-+      0x6810, 0xa31a, 0x6814, 0xa213, 0x00de, 0xd194, 0x0904, 0x1b32,
-+      0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6808, 0x8001,
-+      0x680a, 0x6b2a, 0x6a2e, 0x003e, 0x002e, 0x0804, 0x1bd0, 0x0056,
-+      0x7d0c, 0x080c, 0xb38a, 0x005e, 0x080c, 0x1dcd, 0x00f6, 0x7004,
-+      0x2078, 0x080c, 0x52c6, 0x0118, 0x7820, 0xc0f5, 0x7822, 0x00fe,
-+      0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c,
-+      0x791a, 0x6980, 0x791e, 0x0804, 0x1cfa, 0x7804, 0xd09c, 0x0904,
-+      0x1add, 0x7c20, 0x7824, 0xa405, 0x1904, 0x1add, 0x7818, 0x6812,
-+      0x7c1c, 0x6c16, 0xa405, 0x1120, 0x7803, 0x0002, 0x0804, 0x1baa,
-+      0x751c, 0x7420, 0x7724, 0x7628, 0x7014, 0xa528, 0x7018, 0xa421,
-+      0xa7b9, 0x0000, 0xa6b1, 0x0000, 0x7830, 0xa506, 0x1150, 0x7834,
-+      0xa406, 0x1138, 0x7838, 0xa706, 0x1120, 0x783c, 0xa606, 0x0904,
-+      0x1add, 0x7803, 0x0002, 0x0804, 0x1c36, 0x7803, 0x0004, 0x7003,
-+      0x0000, 0x7004, 0xa00d, 0x0150, 0x6808, 0x8001, 0x680a, 0x1130,
-+      0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x85ef, 0x080c, 0x19b1,
-+      0x0088, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x6010,
-+      0xa005, 0x0da0, 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c,
-+      0x080c, 0x19cc, 0x001e, 0x000e, 0x012e, 0x0005, 0x700c, 0x7110,
-+      0xa106, 0x0904, 0x1da0, 0x7004, 0x0016, 0x210c, 0xa106, 0x001e,
-+      0x0904, 0x1da0, 0x00d6, 0x00c6, 0x216c, 0x2d00, 0xa005, 0x0904,
-+      0x1d9e, 0x681c, 0xa086, 0x0008, 0x0904, 0x1d9e, 0x6820, 0xd0d4,
-+      0x1904, 0x1d9e, 0x6810, 0x2068, 0x6850, 0xd0fc, 0x05a8, 0x8108,
-+      0x2104, 0x6b2c, 0xa306, 0x1904, 0x1d9e, 0x8108, 0x2104, 0x6a28,
-+      0xa206, 0x1904, 0x1d9e, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c,
-+      0x7822, 0x7016, 0x6870, 0x7826, 0x701a, 0x681c, 0x7832, 0x701e,
-+      0x6820, 0x7836, 0x7022, 0x6818, 0x2060, 0x6034, 0xd09c, 0x0168,
-+      0x6830, 0x2005, 0x00d6, 0xac68, 0x6808, 0x783a, 0x7026, 0x680c,
-+      0x783e, 0x702a, 0x00de, 0x0804, 0x1d98, 0xa006, 0x783a, 0x783e,
-+      0x7026, 0x702a, 0x0804, 0x1d98, 0x8108, 0x2104, 0xa005, 0x1904,
-+      0x1d9e, 0x6b2c, 0xa306, 0x1904, 0x1d9e, 0x8108, 0x2104, 0xa005,
-+      0x15e8, 0x6a28, 0xa206, 0x15d0, 0x6850, 0xc0f5, 0x6852, 0x6830,
-+      0x2005, 0x6918, 0xa160, 0xa180, 0x000d, 0x2004, 0xd09c, 0x11a0,
-+      0x6008, 0x7822, 0x7016, 0x686e, 0x600c, 0x7826, 0x701a, 0x6872,
-+      0x6000, 0x7832, 0x701e, 0x6004, 0x7836, 0x7022, 0xa006, 0x783a,
-+      0x783e, 0x7026, 0x702a, 0x00a0, 0x6010, 0x7822, 0x7016, 0x686e,
-+      0x6014, 0x7826, 0x701a, 0x6872, 0x6000, 0x7832, 0x701e, 0x6004,
-+      0x7836, 0x7022, 0x6008, 0x783a, 0x7026, 0x600c, 0x783e, 0x702a,
-+      0x6810, 0x781a, 0x6814, 0x781e, 0x7803, 0x0011, 0x00ce, 0x00de,
-+      0x0005, 0x2011, 0x0201, 0x2009, 0x003c, 0x2204, 0xa005, 0x1118,
-+      0x8109, 0x1dd8, 0x0005, 0x0005, 0x0ca1, 0x0118, 0x780c, 0xd0a4,
-+      0x0120, 0x00d9, 0xa085, 0x0001, 0x0010, 0x080c, 0x1ec0, 0x0005,
-+      0x0126, 0x2091, 0x2200, 0x7000, 0xa086, 0x0003, 0x1160, 0x700c,
-+      0x7110, 0xa106, 0x0140, 0x080c, 0x2922, 0x20e1, 0x9028, 0x700f,
-+      0xb72f, 0x7013, 0xb72f, 0x012e, 0x0005, 0x00c6, 0x080c, 0x5a90,
-+      0x11b8, 0x2001, 0x0160, 0x2003, 0x0000, 0x2001, 0x0138, 0x2003,
-+      0x0000, 0x2011, 0x00c8, 0xe000, 0xe000, 0x8211, 0x1de0, 0x04c1,
-+      0x0066, 0x2031, 0x0000, 0x080c, 0x5b12, 0x006e, 0x00ce, 0x0005,
-+      0x080c, 0x1e3f, 0x080c, 0x2922, 0x20e1, 0x9028, 0x700c, 0x7110,
-+      0xa106, 0x01d0, 0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060,
-+      0x6008, 0x8001, 0x600a, 0xa188, 0x0003, 0xa182, 0xb74a, 0x0210,
-+      0x2009, 0xb72f, 0x7112, 0x700c, 0xa106, 0x1d40, 0x080c, 0x28b1,
-+      0x2001, 0x0138, 0x2102, 0x0c10, 0x2001, 0x015d, 0x2003, 0x0000,
-+      0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x00ce, 0x0005,
-+      0x080c, 0x2922, 0x20e1, 0x9028, 0x2001, 0x015d, 0x2003, 0x0000,
-+      0x00e6, 0x00c6, 0x0016, 0x2071, 0xb723, 0x700c, 0x7110, 0xa106,
-+      0x0190, 0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008,
-+      0x8001, 0x600a, 0xa188, 0x0003, 0xa182, 0xb74a, 0x0210, 0x2009,
-+      0xb72f, 0x7112, 0x0c50, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x2001,
-+      0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003,
-+      0x0000, 0x080c, 0x5a90, 0x1148, 0x2021, 0x0002, 0x1d04, 0x1e4e,
-+      0x2091, 0x6000, 0x8421, 0x1dd0, 0x0005, 0x2021, 0xb015, 0x2001,
-+      0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0xa39c,
-+      0x0048, 0x1138, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421,
-+      0x1d70, 0x0005, 0x00e6, 0x2071, 0x0200, 0x7808, 0xa084, 0xf000,
-+      0xa10d, 0x0869, 0x2001, 0x0105, 0x2004, 0xa084, 0x0003, 0x1130,
-+      0x2001, 0xb74a, 0x2004, 0xa086, 0x0000, 0x0548, 0xa026, 0x2019,
-+      0xf000, 0x8319, 0x1148, 0x2001, 0x012b, 0x2003, 0x95f5, 0x2001,
-+      0x0129, 0x2003, 0x95f5, 0x00d8, 0x2001, 0x0105, 0x2004, 0xa084,
-+      0x0003, 0x1130, 0x2001, 0xb74a, 0x2004, 0xa086, 0x0000, 0x0178,
-+      0x2001, 0x0132, 0x2004, 0xa436, 0x0110, 0x2020, 0x0c00, 0x2001,
-+      0x0021, 0x2004, 0xd0fc, 0x09e8, 0x080c, 0x211b, 0x08c0, 0x20e1,
-+      0x7000, 0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001,
-+      0x810f, 0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422,
-+      0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x00ee, 0x0005,
-+      0x0026, 0x2001, 0x015d, 0x2003, 0x0000, 0x7908, 0xa18c, 0x0fff,
-+      0xa182, 0x0ffd, 0x0210, 0x2009, 0x0000, 0xa190, 0x0007, 0xa294,
-+      0x1ff8, 0x8214, 0x8214, 0x8214, 0x2001, 0x020a, 0x82ff, 0x0140,
-+      0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x8211, 0x1dd0,
-+      0x20e1, 0x7000, 0x200c, 0x200c, 0x7003, 0x0000, 0x20e1, 0x6000,
-+      0x2001, 0x0208, 0x200c, 0x2001, 0x0209, 0x2004, 0xa106, 0x0158,
-+      0x080c, 0x1da1, 0x0130, 0x7908, 0xd1ec, 0x1128, 0x790c, 0xd1a4,
-+      0x0960, 0x080c, 0x1dcd, 0xa006, 0x002e, 0x0005, 0x00f6, 0x00e6,
-+      0x0016, 0x0026, 0x2071, 0xb723, 0x2079, 0x0030, 0x2011, 0x0050,
-+      0x7000, 0xa086, 0x0000, 0x01a8, 0x8211, 0x0188, 0x2001, 0x0005,
-+      0x2004, 0xd08c, 0x0dc8, 0x7904, 0xa18c, 0x0780, 0x0016, 0x080c,
-+      0x1ad5, 0x001e, 0x81ff, 0x1118, 0x2011, 0x0050, 0x0c48, 0xa085,
-+      0x0001, 0x002e, 0x001e, 0x00ee, 0x00fe, 0x0005, 0x7803, 0x0004,
-+      0x2009, 0x0064, 0x7804, 0xd0ac, 0x0904, 0x1f72, 0x8109, 0x1dd0,
-+      0x2009, 0x0100, 0x210c, 0xa18a, 0x0003, 0x0a0c, 0x1511, 0x080c,
-+      0x2222, 0x00e6, 0x00f6, 0x2071, 0xb712, 0x2079, 0x0010, 0x7004,
-+      0xa086, 0x0000, 0x0538, 0x7800, 0x0006, 0x7820, 0x0006, 0x7830,
-+      0x0006, 0x7834, 0x0006, 0x7838, 0x0006, 0x783c, 0x0006, 0x7803,
-+      0x0004, 0xe000, 0xe000, 0x2079, 0x0030, 0x7804, 0xd0ac, 0x190c,
-+      0x1511, 0x2079, 0x0010, 0x000e, 0x783e, 0x000e, 0x783a, 0x000e,
-+      0x7836, 0x000e, 0x7832, 0x000e, 0x7822, 0x000e, 0x7802, 0x00fe,
-+      0x00ee, 0x0030, 0x00fe, 0x00ee, 0x7804, 0xd0ac, 0x190c, 0x1511,
-+      0x080c, 0x71f1, 0x0005, 0x00e6, 0x2071, 0xb74a, 0x7003, 0x0000,
-+      0x00ee, 0x0005, 0x00d6, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc,
-+      0x1904, 0x1ff0, 0x6934, 0xa184, 0x0007, 0x0002, 0x1f8e, 0x1fdb,
-+      0x1f8e, 0x1f8e, 0x1f8e, 0x1fc2, 0x1fa1, 0x1f90, 0x080c, 0x1511,
-+      0x684c, 0xd0b4, 0x0904, 0x20d8, 0x6860, 0x682e, 0x6816, 0x685c,
-+      0x682a, 0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0804,
-+      0x1fe3, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x1d38, 0x684c,
-+      0xd0b4, 0x0904, 0x20d8, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a,
-+      0x6812, 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080,
-+      0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x22b6, 0x2005, 0x6832,
-+      0x6958, 0x0450, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x1548, 0x684c,
-+      0xd0b4, 0x0904, 0x20d8, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004,
-+      0xa084, 0x000f, 0xa080, 0x22b6, 0x2005, 0x6832, 0x6958, 0xa006,
-+      0x682e, 0x682a, 0x0088, 0x684c, 0xd0b4, 0x0904, 0x1ab0, 0x6958,
-+      0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, 0x000f,
-+      0xa080, 0x22b6, 0x2005, 0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e,
-+      0x00de, 0x0005, 0x00f6, 0x2079, 0x0020, 0x7804, 0xd0fc, 0x190c,
-+      0x211b, 0x00e6, 0x00d6, 0x2071, 0xb74a, 0x7000, 0xa005, 0x1904,
-+      0x2058, 0x00c6, 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, 0x2068,
-+      0x7803, 0x0004, 0x6818, 0x00d6, 0x2068, 0x686c, 0x7812, 0x6890,
-+      0x00f6, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100,
-+      0x8004, 0x78d6, 0x00fe, 0x00de, 0x2b68, 0x6824, 0x2050, 0x6818,
-+      0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0x791a,
-+      0x7116, 0x680c, 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004,
-+      0x692c, 0x6814, 0xa106, 0x1120, 0x6928, 0x6810, 0xa106, 0x0158,
-+      0x0036, 0x0046, 0x6b14, 0x6c10, 0x080c, 0x22d6, 0x004e, 0x003e,
-+      0x0110, 0x00ce, 0x00a8, 0x8aff, 0x1120, 0x00ce, 0xa085, 0x0001,
-+      0x0078, 0x0126, 0x2091, 0x8000, 0x2079, 0x0020, 0x2009, 0x0001,
-+      0x0059, 0x0118, 0x2009, 0x0001, 0x0039, 0x012e, 0x00ce, 0xa006,
-+      0x00de, 0x00ee, 0x00fe, 0x0005, 0x0076, 0x0066, 0x0056, 0x0046,
-+      0x0036, 0x0026, 0x8aff, 0x0904, 0x20d1, 0x700c, 0x7214, 0xa23a,
-+      0x7010, 0x7218, 0xa203, 0x0a04, 0x20d0, 0xa705, 0x0904, 0x20d0,
-+      0xa03e, 0x2730, 0x6850, 0xd0fc, 0x11a8, 0x00d6, 0x2805, 0xac68,
-+      0x2900, 0x0002, 0x20b3, 0x2098, 0x2098, 0x20b3, 0x20b3, 0x20ac,
-+      0x20b3, 0x2098, 0x20b3, 0x209d, 0x209d, 0x20b3, 0x20b3, 0x20b3,
-+      0x20a4, 0x209d, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20,
-+      0xd99c, 0x0528, 0x00d6, 0x2805, 0xac68, 0x6f08, 0x6e0c, 0x00f0,
-+      0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00c8, 0x6b10, 0x6a14, 0x6d00,
-+      0x6c04, 0x6f08, 0x6e0c, 0x0090, 0x00de, 0x00d6, 0x6834, 0xa084,
-+      0x00ff, 0xa086, 0x001e, 0x1138, 0x00de, 0x080c, 0x2278, 0x1904,
-+      0x2062, 0xa00e, 0x00f0, 0x00de, 0x080c, 0x1511, 0x00de, 0x7b22,
-+      0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000,
-+      0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c,
-+      0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x080c, 0x2278, 0x0008,
-+      0xa006, 0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005,
-+      0x080c, 0x1511, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1,
-+      0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x00d6,
-+      0x6010, 0x2068, 0x080c, 0x9beb, 0x0118, 0x6850, 0xc0bd, 0x6852,
-+      0x601c, 0xa086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001,
-+      0x00fa, 0x8001, 0x1df0, 0x60c8, 0xa206, 0x1dc0, 0x60c4, 0x686a,
-+      0x60c8, 0x6866, 0x7004, 0x2060, 0x00de, 0x00c6, 0x080c, 0x98c3,
-+      0x00ce, 0x2001, 0xb6ef, 0x2004, 0xac06, 0x1150, 0x20e1, 0x9040,
-+      0x080c, 0x8200, 0x2011, 0x0000, 0x080c, 0x8029, 0x080c, 0x71f1,
-+      0x002e, 0x0804, 0x21d5, 0x0126, 0x2091, 0x2400, 0x0006, 0x0016,
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x2079, 0x0020, 0x2071, 0xb74a,
-+      0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700,
-+      0x1904, 0x20da, 0x7000, 0x0002, 0x21d5, 0x2138, 0x21a8, 0x21d3,
-+      0x8001, 0x7002, 0xd19c, 0x1170, 0x8aff, 0x05d0, 0x2009, 0x0001,
-+      0x080c, 0x205c, 0x0904, 0x21d5, 0x2009, 0x0001, 0x080c, 0x205c,
-+      0x0804, 0x21d5, 0x7803, 0x0004, 0xd194, 0x0148, 0x6850, 0xc0fc,
-+      0x6852, 0x8aff, 0x11d8, 0x684c, 0xc0f5, 0x684e, 0x00b8, 0x0026,
-+      0x0036, 0x6b28, 0x6a2c, 0x7820, 0x686e, 0xa31a, 0x7824, 0x6872,
-+      0xa213, 0x7830, 0x681e, 0x7834, 0x6822, 0x6b2a, 0x6a2e, 0x003e,
-+      0x002e, 0x080c, 0x228e, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826,
-+      0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0804, 0x21d5,
-+      0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100,
-+      0x7a14, 0xa284, 0x0184, 0xa085, 0x0012, 0x7816, 0x0036, 0x2019,
-+      0x1000, 0x8319, 0x090c, 0x1511, 0x7820, 0xd0bc, 0x1dd0, 0x003e,
-+      0x79c8, 0x000e, 0xa102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e,
-+      0xa103, 0x78c6, 0x000e, 0x78ca, 0xa284, 0x0184, 0xa085, 0x0012,
-+      0x7816, 0x002e, 0x00fe, 0x7803, 0x0008, 0x7003, 0x0000, 0x0468,
-+      0x8001, 0x7002, 0xd194, 0x0168, 0x7804, 0xd0fc, 0x1904, 0x212b,
-+      0xd19c, 0x11f8, 0x8aff, 0x0508, 0x2009, 0x0001, 0x080c, 0x205c,
-+      0x00e0, 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x080c, 0x228e, 0x00d6,
-+      0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a, 0x680c,
-+      0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de, 0x0804,
-+      0x215b, 0x0804, 0x2157, 0x080c, 0x1511, 0x00ce, 0x00de, 0x00ee,
-+      0x00fe, 0x001e, 0x000e, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071,
-+      0xb74a, 0x7000, 0xa086, 0x0000, 0x05d0, 0x2079, 0x0020, 0x0016,
-+      0x2009, 0x0207, 0x210c, 0xd194, 0x0198, 0x2009, 0x020c, 0x210c,
-+      0xa184, 0x0003, 0x0168, 0x080c, 0xb3d3, 0x2001, 0x0133, 0x2004,
-+      0xa005, 0x090c, 0x1511, 0x20e1, 0x9040, 0x2001, 0x020c, 0x2102,
-+      0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0xa106, 0x1110,
-+      0x20e1, 0x9040, 0x7804, 0xd0fc, 0x09d8, 0x080c, 0x211b, 0x7000,
-+      0xa086, 0x0000, 0x19a8, 0x001e, 0x7803, 0x0004, 0x7804, 0xd0ac,
-+      0x1de8, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x00ee,
-+      0x00fe, 0x0005, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2071,
-+      0xb74a, 0x2079, 0x0020, 0x7000, 0xa086, 0x0000, 0x0540, 0x7004,
-+      0x2060, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0158, 0x6850, 0xc0b5,
-+      0x6852, 0x680c, 0x7a1c, 0xa206, 0x1120, 0x6808, 0x7a18, 0xa206,
-+      0x01e0, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803,
-+      0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x080c, 0x98c3, 0x20e1,
-+      0x9040, 0x080c, 0x8200, 0x2011, 0x0000, 0x080c, 0x8029, 0x00fe,
-+      0x00ee, 0x00de, 0x00ce, 0x002e, 0x0005, 0x6810, 0x6a14, 0xa205,
-+      0x1d00, 0x684c, 0xc0dc, 0x684e, 0x2c10, 0x080c, 0x1f7a, 0x2001,
-+      0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003,
-+      0x0000, 0x2069, 0xb6e0, 0x6833, 0x0000, 0x683f, 0x0000, 0x08f8,
-+      0x8840, 0x2805, 0xa005, 0x1170, 0x6004, 0xa005, 0x0168, 0x681a,
-+      0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x22b6, 0x2045, 0x88ff,
-+      0x090c, 0x1511, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50, 0x8841,
-+      0x2805, 0xa005, 0x1190, 0x2c00, 0xad06, 0x0120, 0x6000, 0xa005,
-+      0x1108, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, 0xa080,
-+      0x22c6, 0x2045, 0x88ff, 0x090c, 0x1511, 0x0005, 0x0000, 0x0011,
-+      0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f,
-+      0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, 0x22ab,
-+      0x22a7, 0x0000, 0x0000, 0x22b5, 0x0000, 0x22ab, 0x0000, 0x22b2,
-+      0x22af, 0x0000, 0x0000, 0x0000, 0x22b5, 0x22b2, 0x0000, 0x22ad,
-+      0x22ad, 0x0000, 0x0000, 0x22b5, 0x0000, 0x22ad, 0x0000, 0x22b3,
-+      0x22b3, 0x0000, 0x0000, 0x0000, 0x22b5, 0x22b3, 0x00a6, 0x0096,
-+      0x0086, 0x6b2e, 0x6c2a, 0x6858, 0xa055, 0x0904, 0x2367, 0x2d60,
-+      0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x22b6, 0xa986, 0x0007, 0x0130,
-+      0xa986, 0x000e, 0x0118, 0xa986, 0x000f, 0x1120, 0x605c, 0xa422,
-+      0x6060, 0xa31a, 0x2805, 0xa045, 0x1140, 0x0310, 0x0804, 0x2367,
-+      0x6004, 0xa065, 0x0904, 0x2367, 0x0c18, 0x2805, 0xa005, 0x01a8,
-+      0xac68, 0xd99c, 0x1128, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0020,
-+      0x6810, 0xa422, 0x6814, 0xa31b, 0x0620, 0x2300, 0xa405, 0x0150,
-+      0x8a51, 0x0904, 0x2367, 0x8840, 0x0c40, 0x6004, 0xa065, 0x0904,
-+      0x2367, 0x0830, 0x8a51, 0x0904, 0x2367, 0x8840, 0x2805, 0xa005,
-+      0x1158, 0x6004, 0xa065, 0x0904, 0x2367, 0x6034, 0xa0cc, 0x000f,
-+      0xa9c0, 0x22b6, 0x2805, 0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852,
-+      0x0458, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x00d6, 0x2b68,
-+      0x6c6e, 0x6b72, 0x00de, 0xd99c, 0x1168, 0x6908, 0x2400, 0xa122,
-+      0x690c, 0x2300, 0xa11b, 0x0a0c, 0x1511, 0x6800, 0xa420, 0x6804,
-+      0xa319, 0x0060, 0x6910, 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b,
-+      0x0a0c, 0x1511, 0x6800, 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e,
-+      0x6b22, 0x6850, 0xc0fd, 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832,
-+      0x2a00, 0x6826, 0x000e, 0x000e, 0x000e, 0xa006, 0x0028, 0x008e,
-+      0x009e, 0x00ae, 0xa085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004,
-+      0xa084, 0x0007, 0x0002, 0x237b, 0x237c, 0x237f, 0x2382, 0x2387,
-+      0x238a, 0x238f, 0x2394, 0x0005, 0x080c, 0x211b, 0x0005, 0x080c,
-+      0x1ad5, 0x0005, 0x080c, 0x1ad5, 0x080c, 0x211b, 0x0005, 0x080c,
-+      0x1713, 0x0005, 0x080c, 0x211b, 0x080c, 0x1713, 0x0005, 0x080c,
-+      0x1ad5, 0x080c, 0x1713, 0x0005, 0x080c, 0x1ad5, 0x080c, 0x211b,
-+      0x080c, 0x1713, 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200,
-+      0x2071, 0xba80, 0x2069, 0xb400, 0x080c, 0x2489, 0x080c, 0x2479,
-+      0x2009, 0x0004, 0x7912, 0x7817, 0x0004, 0x080c, 0x27be, 0x781b,
-+      0x0002, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a9, 0x0080, 0x782f,
-+      0x0000, 0x1f04, 0x23b7, 0x20e1, 0x9080, 0x783b, 0x001f, 0x20e1,
-+      0x8700, 0x012e, 0x0005, 0x0126, 0x2091, 0x2600, 0x781c, 0xd0a4,
-+      0x190c, 0x2476, 0xa084, 0x0007, 0x0002, 0x23e7, 0x23d5, 0x23d8,
-+      0x23db, 0x23e0, 0x23e2, 0x23e4, 0x23e6, 0x080c, 0x6385, 0x0078,
-+      0x080c, 0x63c4, 0x0060, 0x080c, 0x6385, 0x080c, 0x63c4, 0x0038,
-+      0x0041, 0x0028, 0x0031, 0x0018, 0x0021, 0x0008, 0x0011, 0x012e,
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xb3d3, 0x7930, 0xa184,
-+      0x0003, 0x0170, 0x2001, 0xb6ef, 0x2004, 0xa005, 0x0130, 0x2001,
-+      0x0133, 0x2004, 0xa005, 0x090c, 0x1511, 0x20e1, 0x9040, 0x04a0,
-+      0xa184, 0x0030, 0x01e0, 0x6a00, 0xa286, 0x0003, 0x1108, 0x00a0,
-+      0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001,
-+      0xb400, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5ad4, 0x080c,
-+      0x59c8, 0x0010, 0x080c, 0x4ad9, 0x080c, 0x2479, 0x00a8, 0xa184,
-+      0x00c0, 0x0168, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0xb723,
-+      0x080c, 0x1dcd, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0028, 0xa184,
-+      0x0300, 0x0110, 0x20e1, 0x9020, 0x7932, 0x002e, 0x001e, 0x000e,
-+      0x0005, 0x0016, 0x00e6, 0x00f6, 0x2071, 0xb400, 0x7128, 0x2001,
-+      0xb691, 0x2102, 0x2001, 0xb699, 0x2102, 0xa182, 0x0211, 0x1218,
-+      0x2009, 0x0008, 0x0400, 0xa182, 0x0259, 0x1218, 0x2009, 0x0007,
-+      0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0xa182,
-+      0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0xa182, 0x0421, 0x1218,
-+      0x2009, 0x0004, 0x0040, 0xa182, 0x0581, 0x1218, 0x2009, 0x0003,
-+      0x0010, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0x7817, 0x0004,
-+      0x080c, 0x27be, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x7938, 0x080c,
-+      0x1511, 0x00e6, 0x0026, 0x2071, 0x0200, 0x20e1, 0x1000, 0x7220,
-+      0x7028, 0x7020, 0xa206, 0x0de0, 0x20e1, 0x9010, 0x002e, 0x00ee,
-+      0x0005, 0x20e1, 0xa000, 0x7837, 0x0001, 0x782f, 0x0000, 0x782f,
-+      0x0000, 0x782f, 0x0000, 0x782f, 0x0000, 0x7837, 0x0005, 0x20a9,
-+      0x0210, 0x7830, 0xd0bc, 0x1110, 0x1f04, 0x2499, 0x7837, 0x0001,
-+      0x7837, 0x0000, 0xe000, 0xe000, 0x20e1, 0xa000, 0x0005, 0x0126,
-+      0x2091, 0x2800, 0x2061, 0x0100, 0x2071, 0xb400, 0x6024, 0x6026,
-+      0x6053, 0x0030, 0x080c, 0x27fd, 0x6050, 0xa084, 0xfe7f, 0x6052,
-+      0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x280d, 0x60e7, 0x0000,
-+      0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
-+      0x0080, 0x602f, 0x0000, 0x6007, 0x0e9f, 0x601b, 0x001e, 0x600f,
-+      0x00ff, 0x2001, 0xb68d, 0x2003, 0x00ff, 0x602b, 0x002f, 0x012e,
-+      0x0005, 0x2001, 0xb432, 0x2003, 0x0000, 0x2001, 0xb431, 0x2003,
-+      0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
-+      0x6124, 0xa184, 0x1e2c, 0x1118, 0xa184, 0x0007, 0x002a, 0xa195,
-+      0x0004, 0xa284, 0x0007, 0x0002, 0x2516, 0x24fc, 0x24ff, 0x2502,
-+      0x2507, 0x2509, 0x250d, 0x2511, 0x080c, 0x6b39, 0x00b8, 0x080c,
-+      0x6c14, 0x00a0, 0x080c, 0x6c14, 0x080c, 0x6b39, 0x0078, 0x0099,
-+      0x0068, 0x080c, 0x6b39, 0x0079, 0x0048, 0x080c, 0x6c14, 0x0059,
-+      0x0028, 0x080c, 0x6c14, 0x080c, 0x6b39, 0x0029, 0x002e, 0x001e,
-+      0x000e, 0x012e, 0x0005, 0x6124, 0xd19c, 0x1904, 0x272c, 0x080c,
-+      0x5a90, 0x0578, 0x7000, 0xa086, 0x0003, 0x0198, 0x6024, 0xa084,
-+      0x1800, 0x0178, 0x080c, 0x5ab6, 0x0118, 0x080c, 0x5aa2, 0x1148,
-+      0x6027, 0x0020, 0x6043, 0x0000, 0x2001, 0xb69e, 0x2003, 0xaaaa,
-+      0x0458, 0x080c, 0x5ab6, 0x15d0, 0x6024, 0xa084, 0x1800, 0x1108,
-+      0x04a8, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001, 0xb69f, 0x2003,
-+      0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0x080c, 0x59c8, 0x0804,
-+      0x272c, 0xd1ac, 0x1518, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1188,
-+      0xd0d4, 0x11a0, 0xd0cc, 0x0130, 0x708c, 0xa086, 0x0028, 0x1110,
-+      0x080c, 0x5c1f, 0x0804, 0x272c, 0x2001, 0xb69f, 0x2003, 0x0000,
-+      0x0048, 0x2001, 0xb69f, 0x2003, 0x0002, 0x0020, 0x080c, 0x5b92,
-+      0x0804, 0x272c, 0x080c, 0x5cc4, 0x0804, 0x272c, 0xd1ac, 0x0904,
-+      0x2674, 0x080c, 0x5a90, 0x11d8, 0x6027, 0x0020, 0x0006, 0x0026,
-+      0x0036, 0x080c, 0x5aac, 0x1170, 0x2001, 0xb69f, 0x2003, 0x0001,
-+      0x2001, 0xb400, 0x2003, 0x0001, 0x080c, 0x59c8, 0x003e, 0x002e,
-+      0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x5a67, 0x0016,
-+      0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138, 0x2061, 0x0100,
-+      0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74ce, 0xa48c, 0xff00,
-+      0x7034, 0xd084, 0x0178, 0xa186, 0xf800, 0x1160, 0x703c, 0xd084,
-+      0x1148, 0xc085, 0x703e, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c,
-+      0x3e8a, 0x003e, 0xa196, 0xff00, 0x05b8, 0x7054, 0xa084, 0x00ff,
-+      0x810f, 0xa116, 0x0588, 0x7130, 0xd184, 0x1570, 0x2011, 0xb453,
-+      0x2214, 0xd2ec, 0x0138, 0xc18d, 0x7132, 0x2011, 0xb453, 0x2214,
-+      0xd2ac, 0x1510, 0x6240, 0xa294, 0x0010, 0x0130, 0x6248, 0xa294,
-+      0xff00, 0xa296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2641,
-+      0x7034, 0xd08c, 0x1140, 0x2001, 0xb40c, 0x200c, 0xd1ac, 0x1904,
-+      0x2641, 0xc1ad, 0x2102, 0x0036, 0x73cc, 0x2011, 0x8013, 0x080c,
-+      0x3e8a, 0x003e, 0x0804, 0x2641, 0x7034, 0xd08c, 0x1140, 0x2001,
-+      0xb40c, 0x200c, 0xd1ac, 0x1904, 0x2641, 0xc1ad, 0x2102, 0x0036,
-+      0x73cc, 0x2011, 0x8013, 0x080c, 0x3e8a, 0x003e, 0x7130, 0xc185,
-+      0x7132, 0x2011, 0xb453, 0x220c, 0xd1a4, 0x01d0, 0x0016, 0x2009,
-+      0x0001, 0x2011, 0x0100, 0x080c, 0x6adf, 0x2019, 0x000e, 0x080c,
-+      0xafe8, 0xa484, 0x00ff, 0xa080, 0x2d88, 0x200d, 0xa18c, 0xff00,
-+      0x810f, 0x8127, 0xa006, 0x2009, 0x000e, 0x080c, 0xb06b, 0x001e,
-+      0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
-+      0x2c33, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
-+      0x080c, 0x4f6a, 0x1110, 0x080c, 0x4bc5, 0x8108, 0x1f04, 0x2638,
-+      0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011,
-+      0x0002, 0x080c, 0x8029, 0x080c, 0x7f03, 0x0036, 0x2019, 0x0000,
-+      0x080c, 0x7f8e, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001, 0xb400,
-+      0x2014, 0xa296, 0x0004, 0x1128, 0xd19c, 0x11b0, 0x6228, 0xc29d,
-+      0x622a, 0x2003, 0x0001, 0x2001, 0xb423, 0x2003, 0x0000, 0x6027,
-+      0x0020, 0x080c, 0x5ab6, 0x1140, 0x0016, 0x2009, 0x07d0, 0x2011,
-+      0x59a5, 0x080c, 0x69e7, 0x001e, 0xd194, 0x0904, 0x272c, 0x0016,
-+      0x6220, 0xd2b4, 0x0904, 0x26dd, 0x080c, 0x69d5, 0x080c, 0x7d24,
-+      0x6027, 0x0004, 0x00f6, 0x2019, 0xb6e9, 0x2304, 0xa07d, 0x0570,
-+      0x7804, 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6, 0x00e6, 0x2069,
-+      0x0140, 0x618c, 0x6288, 0x7818, 0x608e, 0x7808, 0x608a, 0x6043,
-+      0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x6803,
-+      0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x7055, 0x080c,
-+      0x7134, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, 0x85c0,
-+      0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe, 0x00d6,
-+      0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120, 0x6803, 0x1000,
-+      0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0xb6e0, 0x6028, 0xa09a,
-+      0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x7d17, 0x0804,
-+      0x272b, 0x2019, 0xb6e9, 0x2304, 0xa065, 0x0120, 0x2009, 0x0027,
-+      0x080c, 0x85ef, 0x00ce, 0x0804, 0x272b, 0xd2bc, 0x0904, 0x272b,
-+      0x080c, 0x69e2, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, 0x6016,
-+      0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
-+      0x0120, 0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061,
-+      0xb6e0, 0x6044, 0xa09a, 0x00c8, 0x12f0, 0x8000, 0x6046, 0x603c,
-+      0x00ce, 0xa005, 0x0540, 0x2009, 0x07d0, 0x080c, 0x69da, 0xa080,
-+      0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114, 0xa18c, 0x0184,
-+      0xa18d, 0x0012, 0x6116, 0x00b8, 0x6114, 0xa18c, 0x0184, 0xa18d,
-+      0x0016, 0x6116, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x7f8e,
-+      0x003e, 0x2019, 0xb6ef, 0x2304, 0xa065, 0x0120, 0x2009, 0x004f,
-+      0x080c, 0x85ef, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2785, 0x7034,
-+      0xd0ac, 0x1560, 0x0016, 0x0156, 0x6027, 0x0008, 0x602f, 0x0020,
-+      0x20a9, 0x0006, 0x1d04, 0x273a, 0x2091, 0x6000, 0x1f04, 0x273a,
-+      0x602f, 0x0000, 0x6150, 0xa185, 0x1400, 0x6052, 0x20a9, 0x0366,
-+      0x1d04, 0x2748, 0x2091, 0x6000, 0x6020, 0xd09c, 0x1130, 0x015e,
-+      0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c, 0x28cd, 0x1f04,
-+      0x2748, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028,
-+      0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002,
-+      0x080c, 0x8029, 0x080c, 0x7f03, 0x0036, 0x2019, 0x0000, 0x080c,
-+      0x7f8e, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb3b2, 0x080c, 0xb3cd,
-+      0xa085, 0x0001, 0x080c, 0x5ad4, 0x2001, 0xb400, 0x2003, 0x0004,
-+      0x6027, 0x0008, 0x080c, 0x12d9, 0x001e, 0xa18c, 0xffd0, 0x6126,
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0126, 0x2091,
-+      0x8000, 0x2071, 0xb400, 0x71c4, 0x70c6, 0xa116, 0x0500, 0x81ff,
-+      0x0128, 0x2011, 0x8011, 0x080c, 0x3e8a, 0x00c8, 0x2011, 0x8012,
-+      0x080c, 0x3e8a, 0x2001, 0xb472, 0x2004, 0xd0fc, 0x1180, 0x0036,
-+      0x00c6, 0x080c, 0x2858, 0x080c, 0x7edf, 0x2061, 0x0100, 0x2019,
-+      0x0028, 0x2009, 0x0000, 0x080c, 0x2c33, 0x00ce, 0x003e, 0x012e,
-+      0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005, 0x00c6, 0x00f6,
-+      0x0006, 0x0026, 0x2061, 0x0100, 0xa190, 0x27d1, 0x2205, 0x60f2,
-+      0x2011, 0x27de, 0x2205, 0x60ee, 0x002e, 0x000e, 0x00fe, 0x00ce,
-+      0x0005, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, 0x02c0,
-+      0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8,
-+      0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff, 0x2130, 0xa094,
-+      0xff00, 0x1110, 0x81ff, 0x0118, 0x080c, 0x6672, 0x0038, 0xa080,
-+      0x2d88, 0x200d, 0xa18c, 0xff00, 0x810f, 0xa006, 0x0005, 0xa080,
-+      0x2d88, 0x200d, 0xa18c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,
-+      0x2001, 0xb415, 0x2003, 0x00ef, 0x20a9, 0x0010, 0xa006, 0x6852,
-+      0x6856, 0x1f04, 0x2808, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026,
-+      0x2069, 0x0140, 0x2001, 0xb415, 0x2102, 0x8114, 0x8214, 0x8214,
-+      0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0xa006, 0x82ff, 0x1128,
-+      0xa184, 0x000f, 0xa080, 0xb3e1, 0x2005, 0x6856, 0x8211, 0x1f04,
-+      0x281d, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0xb400,
-+      0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005,
-+      0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980,
-+      0xa116, 0x0180, 0xa112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001,
-+      0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x284d,
-+      0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005,
-+      0x2001, 0xb453, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006,
-+      0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xb06b, 0x004e, 0x0005,
-+      0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0548,
-+      0xa084, 0x0700, 0xa08e, 0x0300, 0x1520, 0x2011, 0x0000, 0x2009,
-+      0x0002, 0x2300, 0xa080, 0x0020, 0x2018, 0x2300, 0x080c, 0x6b05,
-+      0x2011, 0x0030, 0x2200, 0x8007, 0xa085, 0x004c, 0x78c2, 0x2009,
-+      0x0204, 0x210c, 0x2200, 0xa100, 0x2009, 0x0138, 0x200a, 0x080c,
-+      0x5a90, 0x1118, 0x2009, 0xb68f, 0x200a, 0x002e, 0x001e, 0x00fe,
-+      0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006,
-+      0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0xa184,
-+      0x0003, 0x0110, 0x0804, 0x1ad3, 0x002e, 0x001e, 0x000e, 0x012e,
-+      0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0xa082, 0x0005, 0x000e,
-+      0x0268, 0x2001, 0x0170, 0x200c, 0xa18c, 0x00ff, 0xa18e, 0x004c,
-+      0x1128, 0x200c, 0xa18c, 0xff00, 0x810f, 0x0010, 0x2009, 0x0000,
-+      0x2001, 0x0204, 0x2004, 0xa108, 0x0005, 0x0006, 0x0156, 0x00f6,
-+      0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd08c, 0x1110, 0x1f04,
-+      0x28d4, 0x00fe, 0x015e, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006,
-+      0x2061, 0x0100, 0x6030, 0x0006, 0x6048, 0x0006, 0x60e4, 0x0006,
-+      0x60e8, 0x0006, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006,
-+      0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x60e0, 0x0006,
-+      0x602f, 0x0100, 0x602f, 0x0000, 0xe000, 0xe000, 0xe000, 0xe000,
-+      0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x60e2, 0x000e, 0x602a,
-+      0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2,
-+      0x000e, 0x6052, 0x000e, 0x60ea, 0x000e, 0x60e6, 0x000e, 0x604a,
-+      0x000e, 0x6032, 0x6036, 0x2008, 0x080c, 0x280d, 0x000e, 0x00ce,
-+      0x001e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009,
-+      0x0170, 0x2104, 0x200b, 0x0080, 0xe000, 0xe000, 0x200a, 0x0005,
-+      0x29c0, 0x29c4, 0x29c8, 0x29ce, 0x29d4, 0x29da, 0x29e0, 0x29e8,
-+      0x29f0, 0x29f6, 0x29fc, 0x2a04, 0x2a0c, 0x2a14, 0x2a1c, 0x2a26,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+      0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a32, 0x2a32, 0x2a38, 0x2a38, 0x2a3f, 0x2a3f, 0x2a46, 0x2a46,
-+      0x2a4f, 0x2a4f, 0x2a56, 0x2a56, 0x2a5f, 0x2a5f, 0x2a68, 0x2a68,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+      0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73, 0x2a73,
-+      0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+      0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30, 0x2a30,
-+      0x0106, 0x0006, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x0804, 0x2a7b,
-+      0x0106, 0x0006, 0x080c, 0x24e2, 0x0804, 0x2a7b, 0x0106, 0x0006,
-+      0x080c, 0x24e2, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d,
-+      0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d, 0x0804, 0x2a7b,
-+      0x0106, 0x0006, 0x080c, 0x24e2, 0x080c, 0x236d, 0x0804, 0x2a7b,
-+      0x0106, 0x0006, 0x080c, 0x24e2, 0x080c, 0x236d, 0x0804, 0x2a7b,
-+      0x0106, 0x0006, 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006,
-+      0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x24e2,
-+      0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x24e2,
-+      0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d,
-+      0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x236d,
-+      0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006, 0x080c, 0x24e2,
-+      0x080c, 0x236d, 0x080c, 0x23c3, 0x0804, 0x2a7b, 0x0106, 0x0006,
-+      0x080c, 0x24e2, 0x080c, 0x236d, 0x080c, 0x23c3, 0x0804, 0x2a7b,
-+      0xe000, 0x0cf0, 0x0106, 0x0006, 0x080c, 0x289c, 0x0804, 0x2a7b,
-+      0x0106, 0x0006, 0x080c, 0x289c, 0x080c, 0x24e2, 0x04e0, 0x0106,
-+      0x0006, 0x080c, 0x289c, 0x080c, 0x236d, 0x04a8, 0x0106, 0x0006,
-+      0x080c, 0x289c, 0x080c, 0x24e2, 0x080c, 0x236d, 0x0460, 0x0106,
-+      0x0006, 0x080c, 0x289c, 0x080c, 0x23c3, 0x0428, 0x0106, 0x0006,
-+      0x080c, 0x289c, 0x080c, 0x24e2, 0x080c, 0x23c3, 0x00e0, 0x0106,
-+      0x0006, 0x080c, 0x289c, 0x080c, 0x236d, 0x080c, 0x23c3, 0x0098,
-+      0x0106, 0x0006, 0x080c, 0x289c, 0x080c, 0x24e2, 0x080c, 0x236d,
-+      0x080c, 0x23c3, 0x0040, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1,
-+      0x0000, 0x080c, 0x1511, 0x000e, 0x010e, 0x000d, 0x00c6, 0x0026,
-+      0x0046, 0x2021, 0x0000, 0x080c, 0x52ca, 0x1904, 0x2b5b, 0x72d4,
-+      0x2001, 0xb69e, 0x2004, 0xa005, 0x1110, 0xd29c, 0x0148, 0xd284,
-+      0x1138, 0xd2bc, 0x1904, 0x2b5b, 0x080c, 0x2b5f, 0x0804, 0x2b5b,
-+      0xd2cc, 0x1904, 0x2b5b, 0x080c, 0x5a90, 0x1120, 0x709f, 0xffff,
-+      0x0804, 0x2b5b, 0xd294, 0x0120, 0x709f, 0xffff, 0x0804, 0x2b5b,
-+      0x2001, 0xb415, 0x203c, 0x7288, 0xd284, 0x0904, 0x2afd, 0xd28c,
-+      0x1904, 0x2afd, 0x0036, 0x739c, 0xa38e, 0xffff, 0x1110, 0x2019,
-+      0x0001, 0x8314, 0xa2e0, 0xbbc0, 0x2c04, 0xa38c, 0x0001, 0x0120,
-+      0xa084, 0xff00, 0x8007, 0x0010, 0xa084, 0x00ff, 0xa70e, 0x0560,
-+      0xa08e, 0x0000, 0x0548, 0xa08e, 0x00ff, 0x1150, 0x7230, 0xd284,
-+      0x1538, 0x7288, 0xc28d, 0x728a, 0x709f, 0xffff, 0x003e, 0x0428,
-+      0x2009, 0x0000, 0x080c, 0x27e3, 0x080c, 0x4f0e, 0x11b8, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x1150, 0x7030, 0xd08c, 0x0118,
-+      0x6000, 0xd0bc, 0x0120, 0x080c, 0x2b72, 0x0140, 0x0028, 0x080c,
-+      0x2ca1, 0x080c, 0x2ba0, 0x0110, 0x8318, 0x0818, 0x739e, 0x0010,
-+      0x709f, 0xffff, 0x003e, 0x0804, 0x2b5b, 0xa780, 0x2d88, 0x203d,
-+      0xa7bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x709c, 0xa096, 0xffff,
-+      0x1120, 0x2009, 0x0000, 0x28a8, 0x0050, 0xa812, 0x0220, 0x2008,
-+      0xa802, 0x20a8, 0x0020, 0x709f, 0xffff, 0x0804, 0x2b5b, 0x2700,
-+      0x0156, 0x0016, 0xa106, 0x05a0, 0xc484, 0x080c, 0x4f6a, 0x0120,
-+      0x080c, 0x4f0e, 0x15a8, 0x0008, 0xc485, 0x6004, 0xa084, 0x00ff,
-+      0xa086, 0x0006, 0x1130, 0x7030, 0xd08c, 0x01e8, 0x6000, 0xd0bc,
-+      0x11d0, 0x7288, 0xd28c, 0x0188, 0x6004, 0xa084, 0x00ff, 0xa082,
-+      0x0006, 0x02b0, 0xd484, 0x1118, 0x080c, 0x4f2d, 0x0028, 0x080c,
-+      0x2d2e, 0x0170, 0x080c, 0x2d5b, 0x0058, 0x080c, 0x2ca1, 0x080c,
-+      0x2ba0, 0x0170, 0x0028, 0x080c, 0x2d2e, 0x0110, 0x0419, 0x0140,
-+      0x001e, 0x8108, 0x015e, 0x1f04, 0x2b17, 0x709f, 0xffff, 0x0018,
-+      0x001e, 0x015e, 0x719e, 0x004e, 0x002e, 0x00ce, 0x0005, 0x00c6,
-+      0x0016, 0x709f, 0x0001, 0x2009, 0x007e, 0x080c, 0x4f0e, 0x1138,
-+      0x080c, 0x2ca1, 0x04a9, 0x0118, 0x70d4, 0xc0bd, 0x70d6, 0x001e,
-+      0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001,
-+      0xb457, 0x2004, 0xa084, 0x00ff, 0x6842, 0x080c, 0x9e67, 0x01d8,
-+      0x2d00, 0x601a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2001, 0x0000,
-+      0x080c, 0x4eac, 0x2001, 0x0000, 0x080c, 0x4ebe, 0x0126, 0x2091,
-+      0x8000, 0x7098, 0x8000, 0x709a, 0x012e, 0x2009, 0x0004, 0x080c,
-+      0x85ef, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
-+      0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001, 0xb457, 0x2004,
-+      0xa084, 0x00ff, 0x6842, 0x080c, 0x9e67, 0x0550, 0x2d00, 0x601a,
-+      0x6800, 0xc0c4, 0x6802, 0x68a0, 0xa086, 0x007e, 0x0140, 0x6804,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x1110, 0x080c, 0x2c60, 0x080c,
-+      0x9fb8, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2001,
-+      0x0002, 0x080c, 0x4ebe, 0x0126, 0x2091, 0x8000, 0x7098, 0x8000,
-+      0x709a, 0x012e, 0x2009, 0x0002, 0x080c, 0x85ef, 0xa085, 0x0001,
-+      0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x0026, 0x2009,
-+      0x0080, 0x080c, 0x4f0e, 0x1120, 0x0031, 0x0110, 0x70db, 0xffff,
-+      0x002e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68,
-+      0x080c, 0x856a, 0x01d8, 0x2d00, 0x601a, 0x080c, 0x9fb8, 0x601f,
-+      0x0001, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2001, 0x0002, 0x080c,
-+      0x4ebe, 0x0126, 0x2091, 0x8000, 0x70dc, 0x8000, 0x70de, 0x012e,
-+      0x2009, 0x0002, 0x080c, 0x85ef, 0xa085, 0x0001, 0x00ce, 0x00de,
-+      0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000,
-+      0x2009, 0x007f, 0x080c, 0x4f0e, 0x1190, 0x2c68, 0x080c, 0x856a,
-+      0x0170, 0x2d00, 0x601a, 0x6312, 0x601f, 0x0001, 0x620a, 0x080c,
-+      0x9fb8, 0x2009, 0x0022, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e,
-+      0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026,
-+      0x080c, 0x6dc6, 0x080c, 0x6d69, 0x080c, 0x900f, 0x2130, 0x81ff,
-+      0x0128, 0x20a9, 0x007e, 0x2009, 0x0000, 0x0020, 0x20a9, 0x007f,
-+      0x2009, 0x0000, 0x0016, 0x080c, 0x4f6a, 0x1120, 0x080c, 0x516b,
-+      0x080c, 0x4bc5, 0x001e, 0x8108, 0x1f04, 0x2c4a, 0x86ff, 0x1110,
-+      0x080c, 0x11f0, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005,
-+      0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6218, 0x2270, 0x72a0,
-+      0x0026, 0x2019, 0x0029, 0x080c, 0x6dba, 0x0076, 0x2039, 0x0000,
-+      0x080c, 0x6cc7, 0x2c08, 0x080c, 0xae05, 0x007e, 0x001e, 0x2e60,
-+      0x080c, 0x516b, 0x6210, 0x6314, 0x080c, 0x4bc5, 0x6212, 0x6316,
-+      0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006,
-+      0x6018, 0xa080, 0x0028, 0x2004, 0xa086, 0x0080, 0x0150, 0x2071,
-+      0xb400, 0x7098, 0xa005, 0x0110, 0x8001, 0x709a, 0x000e, 0x00ee,
-+      0x0005, 0x2071, 0xb400, 0x70dc, 0xa005, 0x0dc0, 0x8001, 0x70de,
-+      0x0ca8, 0x6000, 0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-+      0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
-+      0x0001, 0x0098, 0x2001, 0xb453, 0x2004, 0xd0c4, 0x0150, 0xd0a4,
-+      0x0140, 0xa006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xb06b,
-+      0x004e, 0x20a9, 0x00ff, 0x2011, 0x0000, 0x0026, 0xa28e, 0x007e,
-+      0x0904, 0x2d0d, 0xa28e, 0x007f, 0x0904, 0x2d0d, 0xa28e, 0x0080,
-+      0x05e0, 0xa288, 0xb535, 0x210c, 0x81ff, 0x05b8, 0x8fff, 0x1148,
-+      0x2001, 0xb6be, 0x0006, 0x2003, 0x0001, 0x04d9, 0x000e, 0x2003,
-+      0x0000, 0x00c6, 0x2160, 0x2001, 0x0001, 0x080c, 0x52d4, 0x00ce,
-+      0x2019, 0x0029, 0x080c, 0x6dba, 0x0076, 0x2039, 0x0000, 0x080c,
-+      0x6cc7, 0x00c6, 0x0026, 0x2160, 0x6204, 0xa294, 0x00ff, 0xa286,
-+      0x0006, 0x1118, 0x6007, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007,
-+      0xa215, 0x6206, 0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xae05,
-+      0x001e, 0x007e, 0x2160, 0x080c, 0x516b, 0x002e, 0x8210, 0x1f04,
-+      0x2cc5, 0x015e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x00fe,
-+      0x0005, 0x0046, 0x0026, 0x0016, 0x2001, 0xb453, 0x2004, 0xd0c4,
-+      0x0148, 0xd0a4, 0x0138, 0xa006, 0x2220, 0x8427, 0x2009, 0x0029,
-+      0x080c, 0xb06b, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026,
-+      0x0036, 0x00c6, 0x7288, 0x82ff, 0x01f8, 0x2011, 0xb453, 0x2214,
-+      0xd2ac, 0x11d0, 0x2100, 0x080c, 0x27f7, 0x81ff, 0x01b8, 0x2019,
-+      0x0001, 0x8314, 0xa2e0, 0xbbc0, 0x2c04, 0xd384, 0x0120, 0xa084,
-+      0xff00, 0x8007, 0x0010, 0xa084, 0x00ff, 0xa116, 0x0138, 0xa096,
-+      0x00ff, 0x0110, 0x8318, 0x0c68, 0xa085, 0x0001, 0x00ce, 0x003e,
-+      0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,
-+      0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019, 0x0029, 0x080c,
-+      0x823c, 0x002e, 0x080c, 0xb310, 0x003e, 0x002e, 0x001e, 0xa180,
-+      0xb535, 0x2004, 0xa065, 0x0158, 0x0016, 0x00c6, 0x2061, 0xb7f4,
-+      0x001e, 0x611a, 0x080c, 0x2c60, 0x001e, 0x080c, 0x4f2d, 0x012e,
-+      0x00ce, 0x001e, 0x0005, 0x2001, 0xb435, 0x2004, 0xd0cc, 0x0005,
-+      0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
-+      0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
-+      0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
-+      0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
-+      0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
-+      0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
-+      0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
-+      0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
-+      0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
-+      0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
-+      0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
-+      0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
-+      0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
-+      0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
-+      0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
-+      0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
-+      0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
-+      0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
-+      0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
-+      0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
-+      0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
-+      0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
-+      0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
-+      0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
-+      0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
-+      0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
-+      0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
-+      0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
-+      0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x2071, 0xb482, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016, 0x703a,
-+      0x703e, 0x7033, 0xb492, 0x7037, 0xb492, 0x7007, 0x0001, 0x2061,
-+      0xb4d2, 0x6003, 0x0002, 0x0005, 0x1004, 0x2eae, 0x0e04, 0x2eae,
-+      0x2071, 0xb482, 0x2b78, 0x7818, 0xd084, 0x1140, 0x2a60, 0x7820,
-+      0xa08e, 0x0069, 0x1904, 0x2f93, 0x0804, 0x2f2c, 0x0005, 0x2071,
-+      0xb482, 0x7004, 0x0002, 0x2eb7, 0x2eb8, 0x2ec1, 0x2ed2, 0x0005,
-+      0x1004, 0x2ec0, 0x0e04, 0x2ec0, 0x2b78, 0x7818, 0xd084, 0x01e8,
-+      0x0005, 0x2b78, 0x2061, 0xb4d2, 0x6008, 0xa08e, 0x0100, 0x0128,
-+      0xa086, 0x0200, 0x0904, 0x2f8d, 0x0005, 0x7014, 0x2068, 0x2a60,
-+      0x7018, 0x0807, 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0108,
-+      0x0005, 0x2a60, 0x2b78, 0x7018, 0x0807, 0x2a60, 0x7820, 0xa08a,
-+      0x0040, 0x1210, 0x61c4, 0x0042, 0x2100, 0xa08a, 0x003f, 0x1a04,
-+      0x2f8a, 0x61c4, 0x0804, 0x2f2c, 0x2f6e, 0x2f99, 0x2fa1, 0x2fa5,
-+      0x2fad, 0x2fb3, 0x2fb7, 0x2fc3, 0x2fc6, 0x2fd0, 0x2fd3, 0x2f8a,
-+      0x2f8a, 0x2f8a, 0x2fd6, 0x2f8a, 0x2fe5, 0x2ffc, 0x3013, 0x308d,
-+      0x3092, 0x30bb, 0x310c, 0x311d, 0x313c, 0x3174, 0x317e, 0x318b,
-+      0x319e, 0x31bf, 0x31c8, 0x31fe, 0x3204, 0x2f8a, 0x322d, 0x2f8a,
-+      0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x3234, 0x323e, 0x2f8a, 0x2f8a,
-+      0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x3246, 0x2f8a,
-+      0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x3258, 0x3262, 0x2f8a, 0x2f8a,
-+      0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x0002, 0x328c, 0x32e0, 0x333b,
-+      0x334e, 0x2f8a, 0x337f, 0x37b2, 0x41f1, 0x2f8a, 0x2f8a, 0x2f8a,
-+      0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a, 0x2fd0, 0x2fd3, 0x37b4,
-+      0x2f8a, 0x37c1, 0x428a, 0x42e5, 0x4349, 0x2f8a, 0x43ac, 0x43d2,
-+      0x43f1, 0x4423, 0x2f8a, 0x2f8a, 0x2f8a, 0x37c5, 0x396a, 0x3984,
-+      0x39a2, 0x3a03, 0x3a63, 0x3a6e, 0x3aa6, 0x3ab5, 0x3ac4, 0x3ac7,
-+      0x3aea, 0x3b34, 0x3baa, 0x3bb7, 0x3cb8, 0x3de1, 0x3e0a, 0x3f08,
-+      0x3f2a, 0x3f36, 0x3f6f, 0x4033, 0x2f8a, 0x2f8a, 0x2f8a, 0x2f8a,
-+      0x409b, 0x40b6, 0x4128, 0x41da, 0x713c, 0x0000, 0x2021, 0x4000,
-+      0x080c, 0x3e67, 0x0126, 0x2091, 0x8000, 0x0e04, 0x2f7a, 0x7818,
-+      0xd084, 0x0110, 0x012e, 0x0cb0, 0x7c22, 0x7926, 0x7a2a, 0x7b2e,
-+      0x781b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091, 0x5000,
-+      0x012e, 0x0005, 0x2021, 0x4001, 0x0c18, 0x2021, 0x4002, 0x0c00,
-+      0x2021, 0x4003, 0x08e8, 0x2021, 0x4005, 0x08d0, 0x2021, 0x4006,
-+      0x08b8, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804,
-+      0x3e74, 0x7823, 0x0004, 0x7824, 0x0807, 0xa02e, 0x2520, 0x7b28,
-+      0x7a2c, 0x7824, 0x7930, 0x0804, 0x3e77, 0x7924, 0x7828, 0x2114,
-+      0x200a, 0x0804, 0x2f6e, 0x7924, 0x2114, 0x0804, 0x2f6e, 0x2099,
-+      0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x7924, 0x7a28,
-+      0x7b2c, 0x0804, 0x2f6e, 0x7824, 0x2060, 0x0090, 0x2009, 0x0002,
-+      0x2011, 0x0002, 0x2019, 0x0003, 0x783b, 0x0017, 0x0804, 0x2f6e,
-+      0x7d38, 0x7c3c, 0x0840, 0x7d38, 0x7c3c, 0x0888, 0x2061, 0x1000,
-+      0xe10c, 0xa006, 0x2c15, 0xa200, 0x8c60, 0x8109, 0x1dd8, 0x2010,
-+      0xa005, 0x0904, 0x2f6e, 0x0804, 0x2f90, 0x2069, 0xb452, 0x7824,
-+      0x7930, 0xa11a, 0x1a04, 0x2f96, 0x8019, 0x0904, 0x2f96, 0x684a,
-+      0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006, 0x685a, 0x685e,
-+      0x080c, 0x5d66, 0x0804, 0x2f6e, 0x2069, 0xb452, 0x7824, 0x7934,
-+      0xa11a, 0x1a04, 0x2f96, 0x8019, 0x0904, 0x2f96, 0x684e, 0x6946,
-+      0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a, 0x686e, 0x080c,
-+      0x5396, 0x0804, 0x2f6e, 0xa02e, 0x2520, 0x81ff, 0x1904, 0x2f93,
-+      0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0xb489, 0x41a1,
-+      0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009, 0x0020, 0x080c, 0x3e74,
-+      0x701b, 0x302b, 0x0005, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096,
-+      0x0011, 0x0138, 0xa096, 0x0019, 0x0120, 0xa096, 0x0015, 0x1904,
-+      0x2f93, 0x810f, 0xa18c, 0x00ff, 0x0904, 0x2f93, 0x710e, 0x700c,
-+      0x8001, 0x0528, 0x700e, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009,
-+      0x0020, 0x2061, 0xb4d2, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290,
-+      0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x080c,
-+      0x3e74, 0x701b, 0x305c, 0x0005, 0x6834, 0xa084, 0x00ff, 0xa096,
-+      0x0002, 0x0120, 0xa096, 0x000a, 0x1904, 0x2f93, 0x08c0, 0x7010,
-+      0x2068, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x4e0a, 0x1128, 0x7007,
-+      0x0003, 0x701b, 0x3076, 0x0005, 0x080c, 0x549c, 0x0126, 0x2091,
-+      0x8000, 0x20a9, 0x0005, 0x2099, 0xb489, 0x530a, 0x2100, 0xa210,
-+      0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d,
-+      0x2009, 0x0020, 0x012e, 0x0804, 0x3e77, 0x61ac, 0x7824, 0x60ae,
-+      0x0804, 0x2f6e, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953,
-+      0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832,
-+      0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
-+      0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b,
-+      0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1,
-+      0x00f0, 0x0804, 0x0427, 0x81ff, 0x1904, 0x2f93, 0x7924, 0x810f,
-+      0xa18c, 0x00ff, 0x080c, 0x4f6a, 0x1904, 0x2f96, 0x7e38, 0xa684,
-+      0x3fff, 0xa082, 0x4000, 0x0210, 0x0804, 0x2f96, 0x7c28, 0x7d2c,
-+      0x080c, 0x5132, 0xd28c, 0x1118, 0x080c, 0x50db, 0x0010, 0x080c,
-+      0x510b, 0x1518, 0x2061, 0xbc00, 0x0126, 0x2091, 0x8000, 0x6000,
-+      0xa086, 0x0000, 0x0148, 0x6010, 0xa06d, 0x0130, 0x683c, 0xa406,
-+      0x1118, 0x6840, 0xa506, 0x0150, 0x012e, 0xace0, 0x0018, 0x2001,
-+      0xb417, 0x2004, 0xac02, 0x1a04, 0x2f93, 0x0c30, 0x080c, 0x98c3,
-+      0x012e, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0xa00e, 0x2001, 0x0005,
-+      0x080c, 0x549c, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e63, 0x080c,
-+      0x53c9, 0x012e, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x080c,
-+      0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904, 0x2f93, 0x080c,
-+      0x513e, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93,
-+      0x080c, 0x3e58, 0x0904, 0x2f96, 0x080c, 0x51aa, 0x0904, 0x2f93,
-+      0x2019, 0x0005, 0x7924, 0x080c, 0x5159, 0x0904, 0x2f93, 0x7828,
-+      0xa08a, 0x1000, 0x1a04, 0x2f96, 0x8003, 0x800b, 0x810b, 0xa108,
-+      0x080c, 0x696d, 0x0804, 0x2f6e, 0x0126, 0x2091, 0x8000, 0x81ff,
-+      0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x00ff, 0x6450, 0x2400,
-+      0xa506, 0x01f8, 0x2508, 0x080c, 0x4f6a, 0x11d8, 0x080c, 0x51aa,
-+      0x1128, 0x2009, 0x0002, 0x62b4, 0x2518, 0x00c0, 0x2019, 0x0004,
-+      0xa00e, 0x080c, 0x5159, 0x1118, 0x2009, 0x0006, 0x0078, 0x7824,
-+      0xa08a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c,
-+      0x696d, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x2f6e, 0x012e, 0x0804,
-+      0x2f93, 0x012e, 0x0804, 0x2f96, 0x080c, 0x3e48, 0x0904, 0x2f96,
-+      0x080c, 0x5096, 0x080c, 0x5132, 0x0804, 0x2f6e, 0x81ff, 0x1904,
-+      0x2f93, 0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5087, 0x080c,
-+      0x5132, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e48,
-+      0x0904, 0x2f96, 0x080c, 0x510d, 0x0904, 0x2f93, 0x080c, 0x4e4e,
-+      0x080c, 0x50d4, 0x080c, 0x5132, 0x0804, 0x2f6e, 0x080c, 0x3e48,
-+      0x0904, 0x2f96, 0x080c, 0x5030, 0x0904, 0x2f93, 0x62a0, 0x2019,
-+      0x0005, 0x00c6, 0x080c, 0x516b, 0x2061, 0x0000, 0x080c, 0x6dba,
-+      0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2009, 0x0000, 0x080c,
-+      0xae05, 0x007e, 0x00ce, 0x080c, 0x5132, 0x0804, 0x2f6e, 0x080c,
-+      0x3e48, 0x0904, 0x2f96, 0x080c, 0x5132, 0x2208, 0x0804, 0x2f6e,
-+      0x0156, 0x00d6, 0x00e6, 0x2069, 0xb514, 0x6810, 0x6914, 0xa10a,
-+      0x1210, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000,
-+      0x20a9, 0x007e, 0x2069, 0xb535, 0x2d04, 0xa075, 0x0130, 0x704c,
-+      0x0071, 0xa210, 0x7080, 0x0059, 0xa318, 0x8d68, 0x1f04, 0x31dc,
-+      0x2300, 0xa218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x2f6e, 0x00f6,
-+      0x0016, 0xa07d, 0x0140, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff,
-+      0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0xb514,
-+      0x6910, 0x62b0, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x6150,
-+      0xa190, 0x2d88, 0x2215, 0xa294, 0x00ff, 0x6370, 0x83ff, 0x0108,
-+      0x6274, 0x67d4, 0xd79c, 0x0118, 0x2031, 0x0001, 0x0090, 0xd7ac,
-+      0x0118, 0x2031, 0x0003, 0x0068, 0xd7a4, 0x0118, 0x2031, 0x0002,
-+      0x0040, 0x080c, 0x5a90, 0x1118, 0x2031, 0x0004, 0x0010, 0x2031,
-+      0x0000, 0x7e3a, 0x7f3e, 0x0804, 0x2f6e, 0x6140, 0x6244, 0x2019,
-+      0xb6b6, 0x231c, 0x0804, 0x2f6e, 0x0126, 0x2091, 0x8000, 0x6134,
-+      0xa006, 0x2010, 0x6338, 0x012e, 0x0804, 0x2f6e, 0x080c, 0x3e58,
-+      0x0904, 0x2f96, 0x6244, 0x6338, 0x0804, 0x2f6e, 0x6140, 0x6244,
-+      0x7824, 0x6042, 0x7b28, 0x6346, 0x2069, 0xb452, 0x831f, 0xa305,
-+      0x6816, 0x782c, 0x2069, 0xb6b6, 0x2d1c, 0x206a, 0x0804, 0x2f6e,
-+      0x0126, 0x2091, 0x8000, 0x7824, 0x6036, 0x782c, 0x603a, 0x012e,
-+      0x0804, 0x2f6e, 0x7838, 0xa005, 0x01a8, 0x7828, 0xa025, 0x0904,
-+      0x2f96, 0x782c, 0xa02d, 0x0904, 0x2f96, 0xa00e, 0x080c, 0x4f6a,
-+      0x1120, 0x6244, 0x6338, 0x6446, 0x653a, 0xa186, 0x00ff, 0x0190,
-+      0x8108, 0x0ca0, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x7828, 0xa00d,
-+      0x0904, 0x2f96, 0x782c, 0xa005, 0x0904, 0x2f96, 0x6244, 0x6146,
-+      0x6338, 0x603a, 0x0804, 0x2f6e, 0x2001, 0xb400, 0x2004, 0xa086,
-+      0x0003, 0x1904, 0x2f93, 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f,
-+      0xa18c, 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001, 0xb415, 0x2004,
-+      0xa085, 0xff00, 0x0078, 0xa182, 0x007f, 0x16a0, 0xa188, 0x2d88,
-+      0x210d, 0xa18c, 0x00ff, 0x2001, 0xb415, 0x2004, 0xa116, 0x0550,
-+      0x810f, 0xa105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x856a,
-+      0x000e, 0x01e0, 0x601a, 0x600b, 0xbc09, 0x601f, 0x0001, 0x080c,
-+      0x3e33, 0x01d8, 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000,
-+      0x6838, 0xc0fd, 0x683a, 0x701b, 0x3334, 0x2d00, 0x6012, 0x2009,
-+      0x0032, 0x080c, 0x85ef, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce,
-+      0x0804, 0x2f93, 0x00ce, 0x0804, 0x2f96, 0x080c, 0x85c0, 0x0cb0,
-+      0x2001, 0xb400, 0x2004, 0xa086, 0x0003, 0x1904, 0x2f93, 0x00c6,
-+      0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff,
-+      0x1130, 0x2001, 0xb415, 0x2004, 0xa085, 0xff00, 0x0078, 0xa182,
-+      0x007f, 0x16a0, 0xa188, 0x2d88, 0x210d, 0xa18c, 0x00ff, 0x2001,
-+      0xb415, 0x2004, 0xa116, 0x0550, 0x810f, 0xa105, 0x0126, 0x2091,
-+      0x8000, 0x0006, 0x080c, 0x856a, 0x000e, 0x01e0, 0x601a, 0x600b,
-+      0xbc05, 0x601f, 0x0001, 0x080c, 0x3e33, 0x01d8, 0x6837, 0x0000,
-+      0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b,
-+      0x3334, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c, 0x85ef, 0x012e,
-+      0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x2f93, 0x00ce, 0x0804,
-+      0x2f96, 0x080c, 0x85c0, 0x0cb0, 0x6830, 0xa086, 0x0100, 0x0904,
-+      0x2f93, 0x0804, 0x2f6e, 0x2061, 0xb774, 0x0126, 0x2091, 0x8000,
-+      0x6000, 0xd084, 0x0140, 0x6104, 0x6208, 0x2019, 0xb412, 0x231c,
-+      0x012e, 0x0804, 0x2f6e, 0x012e, 0x0804, 0x2f96, 0x81ff, 0x1904,
-+      0x2f93, 0x080c, 0x5a90, 0x0904, 0x2f93, 0x0126, 0x2091, 0x8000,
-+      0x6248, 0x6068, 0xa202, 0x0248, 0xa085, 0x0001, 0x080c, 0x282d,
-+      0x080c, 0x45e6, 0x012e, 0x0804, 0x2f6e, 0x012e, 0x0804, 0x2f96,
-+      0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0xb6bf, 0x2070, 0x2061,
-+      0xb452, 0x6008, 0x2072, 0x2009, 0x0000, 0x2011, 0x1000, 0x080c,
-+      0x6b05, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x7824, 0xa084, 0x0007, 0x0002, 0x3391, 0x339a,
-+      0x33a1, 0x338e, 0x338e, 0x338e, 0x338e, 0x338e, 0x012e, 0x0804,
-+      0x2f96, 0x2009, 0x0114, 0x2104, 0xa085, 0x0800, 0x200a, 0x080c,
-+      0x350c, 0x0070, 0x2009, 0x010b, 0x200b, 0x0010, 0x080c, 0x350c,
-+      0x0038, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x2f70,
-+      0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
-+      0x080c, 0x3368, 0x2009, 0x0101, 0x210c, 0x0016, 0x2001, 0x0138,
-+      0x200c, 0x2003, 0x0001, 0x0016, 0x2001, 0x007a, 0x2034, 0x2001,
-+      0x007b, 0x202c, 0xa006, 0x2048, 0x2050, 0x2058, 0x080c, 0x3757,
-+      0x080c, 0x36bb, 0xa03e, 0x2720, 0x00f6, 0x00e6, 0x00c6, 0x2d60,
-+      0x2071, 0xb74a, 0x2079, 0x0020, 0x00d6, 0x2069, 0x0000, 0x6824,
-+      0xd0b4, 0x0140, 0x2001, 0x007d, 0x2004, 0x783e, 0x2001, 0x007c,
-+      0x2004, 0x783a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3667, 0x080c,
-+      0x3667, 0x00ce, 0x00ee, 0x00fe, 0x080c, 0x35b2, 0x080c, 0x368f,
-+      0x080c, 0x360c, 0x080c, 0x3571, 0x080c, 0x35a2, 0x00f6, 0x2079,
-+      0x0100, 0x7824, 0xd094, 0x0530, 0x7814, 0xa084, 0x0184, 0xa085,
-+      0x0010, 0x7816, 0x2079, 0x0140, 0x080c, 0x34ea, 0x1110, 0x00fe,
-+      0x0430, 0x7804, 0xd0dc, 0x0dc0, 0x2079, 0x0100, 0x7827, 0x0086,
-+      0x7814, 0xa084, 0x0184, 0xa085, 0x0032, 0x7816, 0x080c, 0x34ea,
-+      0x1110, 0x00fe, 0x00a0, 0x7824, 0xd0bc, 0x0dc0, 0x7827, 0x0080,
-+      0xa026, 0x7c16, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x34f4,
-+      0x00fe, 0x0804, 0x34b4, 0x00fe, 0x080c, 0x34ea, 0x1150, 0x8948,
-+      0x2001, 0x007a, 0x2602, 0x2001, 0x007b, 0x2502, 0x080c, 0x34f4,
-+      0x0088, 0x87ff, 0x0140, 0x2001, 0x0201, 0x2004, 0xa005, 0x1904,
-+      0x33ee, 0x8739, 0x0038, 0x2001, 0xb723, 0x2004, 0xa086, 0x0000,
-+      0x1904, 0x33ee, 0x2001, 0x0033, 0x2003, 0x00f6, 0x8631, 0x1208,
-+      0x8529, 0x2500, 0xa605, 0x0904, 0x34b4, 0x7824, 0xd0bc, 0x0128,
-+      0x2900, 0xaa05, 0xab05, 0x1904, 0x34b4, 0x6033, 0x000d, 0x2001,
-+      0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac, 0x1148, 0x2001, 0xb723,
-+      0x2003, 0x0003, 0x2001, 0x0030, 0x2003, 0x0009, 0x0040, 0x6027,
-+      0x0001, 0x2001, 0x0075, 0x2004, 0xa005, 0x0108, 0x6026, 0x2c00,
-+      0x601a, 0x20e1, 0x9040, 0x2d00, 0x681a, 0x6833, 0x000d, 0x7824,
-+      0xd0a4, 0x1180, 0x6827, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061,
-+      0x0020, 0x6003, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3489,
-+      0x00ce, 0x0040, 0x6827, 0x0001, 0x2001, 0x0074, 0x2004, 0xa005,
-+      0x0108, 0x6826, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0020,
-+      0x7827, 0x0002, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x601a,
-+      0x0006, 0x2001, 0x0073, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca,
-+      0x00ce, 0x00fe, 0x0804, 0x33cc, 0x2061, 0x0100, 0x6027, 0x0002,
-+      0x001e, 0x61e2, 0x001e, 0x6106, 0x7824, 0xa084, 0x0003, 0xa086,
-+      0x0002, 0x0188, 0x20e1, 0x9028, 0x6050, 0xa084, 0xf7ef, 0x6052,
-+      0x602f, 0x0000, 0x602c, 0xc0ac, 0x602e, 0x604b, 0xf7f7, 0x6043,
-+      0x0090, 0x6043, 0x0010, 0x2908, 0x2a10, 0x2b18, 0x2b00, 0xaa05,
-+      0xa905, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-+      0x008e, 0x1118, 0x012e, 0x0804, 0x2f6e, 0x012e, 0x2021, 0x400c,
-+      0x0804, 0x2f70, 0xa085, 0x0001, 0x1d04, 0x34f3, 0x2091, 0x6000,
-+      0x8420, 0xa486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
-+      0x2001, 0x0030, 0x2003, 0x0004, 0x2001, 0x0020, 0x2003, 0x0004,
-+      0x2001, 0xb723, 0x2003, 0x0000, 0x2001, 0xb74a, 0x2003, 0x0000,
-+      0x20e1, 0xf000, 0xa026, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001,
-+      0xb415, 0x200c, 0x7932, 0x7936, 0x080c, 0x280d, 0x7850, 0xa084,
-+      0x0980, 0xa085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0,
-+      0xa084, 0x0980, 0x7852, 0x782c, 0xc0ad, 0x782e, 0x20a9, 0x0046,
-+      0x1d04, 0x3528, 0x2091, 0x6000, 0x1f04, 0x3528, 0x7850, 0xa085,
-+      0x0400, 0x7852, 0x2001, 0x0009, 0x2004, 0xa084, 0x0003, 0xa086,
-+      0x0001, 0x1118, 0x782c, 0xc0ac, 0x782e, 0x784b, 0xf7f7, 0x7843,
-+      0x0090, 0x7843, 0x0010, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x3545,
-+      0x7850, 0xa085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xe000,
-+      0xe000, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850,
-+      0xa085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xe000,
-+      0xe000, 0x8319, 0x1de0, 0x2001, 0x0140, 0x2003, 0x0100, 0x7827,
-+      0x0020, 0x7843, 0x0000, 0x2003, 0x0000, 0x7827, 0x0048, 0x00fe,
-+      0x0005, 0x7824, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0xb723,
-+      0x2079, 0x0030, 0x2001, 0x0201, 0x2004, 0xa005, 0x0160, 0x7000,
-+      0xa086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003,
-+      0x0003, 0x7803, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x780c, 0xa08c,
-+      0x0070, 0x0178, 0x2009, 0x007a, 0x260a, 0x2009, 0x007b, 0x250a,
-+      0xd0b4, 0x0108, 0x8a50, 0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108,
-+      0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0140,
-+      0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x0ca8,
-+      0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0xb6c0, 0x2004,
-+      0x70e2, 0x2009, 0xb415, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166,
-+      0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078,
-+      0xa080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa,
-+      0xa006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af,
-+      0x95d5, 0x7027, 0x0080, 0x7014, 0xa084, 0x0184, 0xa085, 0x0032,
-+      0x7016, 0x080c, 0x368f, 0x080c, 0x34ea, 0x1110, 0x8421, 0x0028,
-+      0x7024, 0xd0bc, 0x0db0, 0x7027, 0x0080, 0x00f6, 0x00e6, 0x2071,
-+      0xb723, 0x2079, 0x0030, 0x00d6, 0x2069, 0x0000, 0x6824, 0xd0b4,
-+      0x0120, 0x683c, 0x783e, 0x6838, 0x783a, 0x00de, 0x2011, 0x0011,
-+      0x080c, 0x3667, 0x2011, 0x0001, 0x080c, 0x3667, 0x00ee, 0x00fe,
-+      0x7017, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0xb723,
-+      0x2079, 0x0030, 0x7904, 0xd1fc, 0x0904, 0x3664, 0x7803, 0x0002,
-+      0xa026, 0xd19c, 0x1904, 0x3660, 0x7000, 0x0002, 0x3664, 0x3622,
-+      0x3646, 0x3660, 0xd1bc, 0x1150, 0xd1dc, 0x1150, 0x8001, 0x7002,
-+      0x2011, 0x0001, 0x04e1, 0x05c0, 0x04d1, 0x04b0, 0x780f, 0x0000,
-+      0x7820, 0x7924, 0x7803, 0x0004, 0x7822, 0x7926, 0x2001, 0x0201,
-+      0x200c, 0x81ff, 0x0de8, 0x080c, 0x358e, 0x2009, 0x0001, 0x7808,
-+      0xd0ec, 0x0110, 0x2009, 0x0011, 0x7902, 0x00f0, 0x8001, 0x7002,
-+      0xa184, 0x0880, 0x1138, 0x7804, 0xd0fc, 0x1940, 0x2011, 0x0001,
-+      0x00b1, 0x0090, 0x6030, 0xa092, 0x0004, 0xa086, 0x0009, 0x1120,
-+      0x6000, 0x601a, 0x2011, 0x0025, 0x6232, 0xd1dc, 0x1988, 0x0870,
-+      0x7803, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x6024,
-+      0xa005, 0x0520, 0x8001, 0x6026, 0x6018, 0x6130, 0xa140, 0x2804,
-+      0x7832, 0x8840, 0x2804, 0x7836, 0x8840, 0x2804, 0x7822, 0x8840,
-+      0x2804, 0x7826, 0x8840, 0x7a02, 0x7000, 0x8000, 0x7002, 0x6018,
-+      0xa802, 0xa08a, 0x0029, 0x1138, 0x6018, 0xa080, 0x0001, 0x2004,
-+      0x601a, 0x2001, 0x000d, 0x6032, 0xa085, 0x0001, 0x0005, 0x00f6,
-+      0x00e6, 0x00c6, 0x2071, 0xb74a, 0x2079, 0x0020, 0x7904, 0xd1fc,
-+      0x01f0, 0x7803, 0x0002, 0x2d60, 0xa026, 0x7000, 0x0002, 0x36b7,
-+      0x36a2, 0x36ae, 0x8001, 0x7002, 0xd19c, 0x1188, 0x2011, 0x0001,
-+      0x080c, 0x3667, 0x0160, 0x080c, 0x3667, 0x0048, 0x8001, 0x7002,
-+      0x7804, 0xd0fc, 0x1d30, 0x2011, 0x0001, 0x080c, 0x3667, 0x00ce,
-+      0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200,
-+      0x2001, 0xb6c0, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0xb6bf,
-+      0x2004, 0x60ce, 0x6004, 0xc0ac, 0xa085, 0x0200, 0x6006, 0x2001,
-+      0x0074, 0x2004, 0xa005, 0x01f8, 0x2038, 0x2001, 0x0076, 0x2024,
-+      0x2001, 0x0077, 0x201c, 0x080c, 0x3e33, 0x6833, 0x000d, 0x6f26,
-+      0x2d00, 0x681a, 0xa78a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007,
-+      0x0010, 0x2708, 0xa03e, 0x6818, 0xa080, 0x000d, 0x04b1, 0x1d90,
-+      0x2d00, 0x681a, 0x0088, 0x080c, 0x3e33, 0x6833, 0x000d, 0x2070,
-+      0x6827, 0x0001, 0x2d00, 0x681a, 0x2001, 0x0076, 0x2004, 0x2072,
-+      0x2001, 0x0077, 0x2004, 0x7006, 0x2061, 0x0020, 0x2079, 0x0100,
-+      0x2001, 0xb6bf, 0x2004, 0x6012, 0x20e1, 0x9040, 0x2001, 0x0072,
-+      0x2004, 0xa084, 0xfff8, 0x700a, 0x601a, 0x0006, 0x2001, 0x0073,
-+      0x2004, 0x700e, 0x601e, 0x78c6, 0x000e, 0x78ca, 0xa006, 0x603a,
-+      0x603e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0010,
-+      0x20a0, 0x2099, 0x0014, 0x7003, 0x0026, 0x7432, 0x7336, 0xa006,
-+      0x703a, 0x703e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7122, 0x7003,
-+      0x0041, 0x7004, 0xd0fc, 0x0de8, 0x7003, 0x0002, 0x7003, 0x0040,
-+      0x53a5, 0x7430, 0x7334, 0x87ff, 0x0180, 0x00c6, 0x00d6, 0x2d60,
-+      0x00c6, 0x080c, 0x3e33, 0x00ce, 0x6018, 0x2070, 0x2d00, 0x7006,
-+      0x601a, 0x00de, 0x00ce, 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-+      0x2001, 0x0075, 0x2004, 0xa005, 0x0508, 0x2038, 0x2001, 0x0078,
-+      0x2024, 0x2001, 0x0079, 0x201c, 0x080c, 0x3e33, 0x2d60, 0x6833,
-+      0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a, 0x0007, 0x0220, 0x2138,
-+      0x2009, 0x0007, 0x0010, 0x2708, 0xa03e, 0x6818, 0xa080, 0x000d,
-+      0x080c, 0x3725, 0x1d88, 0x2d00, 0x681a, 0x00e0, 0x080c, 0x3e33,
-+      0x2d60, 0x6033, 0x000d, 0x2070, 0x6027, 0x0001, 0x2c00, 0x601a,
-+      0x2001, 0x0078, 0x2004, 0x2072, 0x2001, 0x0079, 0x2004, 0x7006,
-+      0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x700a, 0x2001, 0x0073,
-+      0x2004, 0x700e, 0x2001, 0x0030, 0x2003, 0x0004, 0x7824, 0xd0ac,
-+      0x1178, 0x2001, 0x0101, 0x200c, 0xc1ed, 0x2102, 0x6027, 0x0000,
-+      0x2001, 0xb723, 0x2003, 0x0003, 0x2001, 0x0030, 0x2003, 0x0009,
-+      0x00ee, 0x0005, 0x0804, 0x2f6e, 0x0126, 0x2091, 0x8000, 0x20a9,
-+      0x0012, 0x2001, 0xb440, 0x20a0, 0xa006, 0x40a4, 0x012e, 0x0804,
-+      0x2f6e, 0x7d38, 0x7c3c, 0x0804, 0x3015, 0x080c, 0x3e33, 0x0904,
-+      0x2f93, 0x080c, 0x5a90, 0x0110, 0x080c, 0x4baa, 0x2009, 0x001c,
-+      0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x37d9,
-+      0x0005, 0xade8, 0x000d, 0x6800, 0xa005, 0x0904, 0x2f96, 0x6804,
-+      0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x2f96, 0xd094, 0x00c6, 0x2061,
-+      0x0100, 0x6104, 0x0138, 0x6200, 0xa292, 0x0005, 0x0218, 0xa18c,
-+      0xffdf, 0x0010, 0xa18d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6,
-+      0x2061, 0x0100, 0x6104, 0x0118, 0xa18d, 0x0010, 0x0010, 0xa18c,
-+      0xffef, 0x6106, 0x00ce, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002,
-+      0x0268, 0xd084, 0x0158, 0x6a28, 0xa28a, 0x007f, 0x1a04, 0x2f96,
-+      0xa288, 0x2d88, 0x210d, 0xa18c, 0x00ff, 0x615a, 0xd0dc, 0x0130,
-+      0x6828, 0xa08a, 0x007f, 0x1a04, 0x2f96, 0x6052, 0x6808, 0xa08a,
-+      0x0100, 0x0a04, 0x2f96, 0xa08a, 0x0841, 0x1a04, 0x2f96, 0xa084,
-+      0x0007, 0x1904, 0x2f96, 0x680c, 0xa005, 0x0904, 0x2f96, 0x6810,
-+      0xa005, 0x0904, 0x2f96, 0x6848, 0x6940, 0xa10a, 0x1a04, 0x2f96,
-+      0x8001, 0x0904, 0x2f96, 0x684c, 0x6944, 0xa10a, 0x1a04, 0x2f96,
-+      0x8001, 0x0904, 0x2f96, 0x6804, 0xd0fc, 0x0560, 0x080c, 0x3e33,
-+      0x0904, 0x2f93, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-+      0xa290, 0x0038, 0xa399, 0x0000, 0x080c, 0x3e74, 0x701b, 0x3859,
-+      0x0005, 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0xb46e,
-+      0x2da0, 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x2001, 0xb472, 0x200c,
-+      0xd1e4, 0x0140, 0x00c6, 0x2061, 0x0100, 0x6004, 0xa085, 0x0b00,
-+      0x6006, 0x00ce, 0x2009, 0xb6b1, 0x200b, 0x0000, 0x2001, 0xb474,
-+      0x2004, 0xd0ac, 0x0158, 0x7824, 0x200a, 0x2009, 0x017f, 0x200a,
-+      0x3200, 0xa084, 0x003f, 0xa085, 0x3020, 0x2090, 0x20a9, 0x001c,
-+      0x2d98, 0x2069, 0xb452, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff,
-+      0x6142, 0x8007, 0xa084, 0x00ff, 0x6046, 0x080c, 0x5d66, 0x080c,
-+      0x532d, 0x080c, 0x5396, 0x6000, 0xa086, 0x0000, 0x1904, 0x3954,
-+      0x6808, 0x602a, 0x080c, 0x2439, 0x0006, 0x2001, 0x0100, 0x2004,
-+      0xa082, 0x0005, 0x000e, 0x0268, 0x2009, 0x0170, 0x200b, 0x0080,
-+      0xe000, 0xe000, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2868,
-+      0x003e, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217,
-+      0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148,
-+      0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f,
-+      0x0010, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007,
-+      0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0xb6c6, 0x40a1,
-+      0x080c, 0x6a2d, 0x6904, 0xd1fc, 0x0520, 0x00c6, 0x2009, 0x0000,
-+      0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0,
-+      0x3508, 0x8109, 0x080c, 0x631d, 0x6878, 0x6016, 0x6874, 0x2008,
-+      0xa084, 0xff00, 0x8007, 0x600a, 0xa184, 0x00ff, 0x6006, 0x8108,
-+      0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x38ee,
-+      0x00ce, 0x2069, 0xb452, 0x2001, 0xb69e, 0x6a80, 0xa294, 0x0030,
-+      0xa28e, 0x0000, 0x0170, 0xa28e, 0x0010, 0x0118, 0xa28e, 0x0020,
-+      0x0140, 0x2003, 0xaaaa, 0x080c, 0x28b1, 0x2001, 0xb68f, 0x2102,
-+      0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f,
-+      0x0000, 0x00ce, 0x080c, 0x5a90, 0x0128, 0x080c, 0x408d, 0x0110,
-+      0x080c, 0x282d, 0x60c8, 0xa005, 0x01d0, 0x6003, 0x0001, 0x2009,
-+      0x393a, 0x00e0, 0x080c, 0x5a90, 0x1178, 0x2011, 0x5963, 0x080c,
-+      0x6961, 0x2011, 0x5956, 0x080c, 0x6a21, 0x2001, 0xb69f, 0x2003,
-+      0x0000, 0x080c, 0x59c8, 0x0040, 0x080c, 0x4ad9, 0x0028, 0x6003,
-+      0x0004, 0x2009, 0x3954, 0x0010, 0x0804, 0x2f6e, 0x2001, 0x0100,
-+      0x2004, 0xa082, 0x0005, 0x0258, 0x2001, 0x0170, 0x2004, 0xa084,
-+      0x00ff, 0xa086, 0x004c, 0x1118, 0x2091, 0x309d, 0x0817, 0x2091,
-+      0x301d, 0x0817, 0x6000, 0xa086, 0x0000, 0x0904, 0x2f93, 0x2069,
-+      0xb452, 0x7830, 0x6842, 0x7834, 0x6846, 0x6804, 0xd0fc, 0x0118,
-+      0x2009, 0x0030, 0x0010, 0x2009, 0x001c, 0x2d00, 0x7a2c, 0x7b28,
-+      0x7c3c, 0x7d38, 0x0804, 0x3e77, 0xa006, 0x080c, 0x282d, 0x81ff,
-+      0x1904, 0x2f93, 0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f, 0x2003,
-+      0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c,
-+      0x5ad4, 0x080c, 0x59c8, 0x0020, 0x080c, 0x4baa, 0x080c, 0x4ad9,
-+      0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x5a90, 0x1110,
-+      0x0804, 0x2f93, 0x6188, 0x81ff, 0x0198, 0x703f, 0x0000, 0x2001,
-+      0xbbc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x3e77, 0x701b, 0x2f6c, 0x012e, 0x0005,
-+      0x703f, 0x0001, 0x00d6, 0x2069, 0xbbc0, 0x20a9, 0x0040, 0x20a1,
-+      0xbbc0, 0x2019, 0xffff, 0x43a4, 0x6550, 0xa588, 0x2d88, 0x210d,
-+      0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506,
-+      0x01a8, 0x080c, 0x4f6a, 0x1190, 0x6014, 0x821c, 0x0238, 0xa398,
-+      0xbbc0, 0xa085, 0xff00, 0x8007, 0x201a, 0x0038, 0xa398, 0xbbc0,
-+      0x2324, 0xa4a4, 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182,
-+      0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a,
-+      0x00de, 0x20a9, 0x0040, 0x20a1, 0xbbc0, 0x2099, 0xbbc0, 0x080c,
-+      0x4b49, 0x0804, 0x39af, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x00c6,
-+      0x080c, 0x3e33, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2f93,
-+      0x2001, 0xb453, 0x2004, 0xd0b4, 0x0550, 0x7824, 0xa084, 0xff00,
-+      0xa08e, 0x7e00, 0x0520, 0xa08e, 0x7f00, 0x0508, 0xa08e, 0x8000,
-+      0x01f0, 0x6000, 0xd08c, 0x11d8, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x11a8, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c,
-+      0x9d6b, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007, 0x0003,
-+      0x701b, 0x3a3b, 0x0005, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x20a9,
-+      0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004,
-+      0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x080c, 0x4b49,
-+      0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0,
-+      0x080c, 0x4b49, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x0804, 0x3e77, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e48,
-+      0x0904, 0x2f96, 0x080c, 0x5147, 0x0804, 0x2f6e, 0x81ff, 0x1904,
-+      0x2f93, 0x7828, 0xa08a, 0x1000, 0x1a04, 0x2f96, 0x080c, 0x3e58,
-+      0x0904, 0x2f96, 0x080c, 0x51aa, 0x0904, 0x2f93, 0x2019, 0x0004,
-+      0xa00e, 0x080c, 0x5159, 0x7924, 0x810f, 0x7a28, 0x0011, 0x0804,
-+      0x2f6e, 0xa186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e,
-+      0x2061, 0xb400, 0x6450, 0x2400, 0xa506, 0x0110, 0x2508, 0x0019,
-+      0x8529, 0x1ec8, 0x0005, 0x080c, 0x4f6a, 0x1138, 0x2200, 0x8003,
-+      0x800b, 0x810b, 0xa108, 0x080c, 0x696d, 0x0005, 0x81ff, 0x1904,
-+      0x2f93, 0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904,
-+      0x2f93, 0x080c, 0x5150, 0x0804, 0x2f6e, 0x81ff, 0x1904, 0x2f93,
-+      0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904, 0x2f93,
-+      0x080c, 0x513e, 0x0804, 0x2f6e, 0x6100, 0x0804, 0x2f6e, 0x080c,
-+      0x3e58, 0x0904, 0x2f96, 0x2001, 0xb400, 0x2004, 0xa086, 0x0003,
-+      0x1904, 0x2f93, 0x00d6, 0xace8, 0x000a, 0x7924, 0xd184, 0x0110,
-+      0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
-+      0x6b04, 0x831f, 0x6a00, 0x8217, 0x00de, 0x6100, 0xa18c, 0x0200,
-+      0x0804, 0x2f6e, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x1a04,
-+      0x2f93, 0x6250, 0xa294, 0x00ff, 0xa084, 0xff00, 0x8007, 0xa206,
-+      0x1150, 0x2001, 0xb440, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c,
-+      0x7d38, 0x0804, 0x3e77, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e58,
-+      0x0904, 0x2f96, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1904,
-+      0x2f93, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x0904, 0x2f93, 0x6837,
-+      0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x9d17, 0x0904, 0x2f93,
-+      0x7007, 0x0003, 0x701b, 0x3b25, 0x0005, 0x6830, 0xa086, 0x0100,
-+      0x0904, 0x2f93, 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28,
-+      0x7c3c, 0x7d38, 0x0804, 0x3e77, 0xa006, 0x080c, 0x282d, 0x7824,
-+      0xa084, 0x00ff, 0xa086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x2f93,
-+      0x080c, 0x5a90, 0x0110, 0x080c, 0x4baa, 0x7828, 0xa08a, 0x1000,
-+      0x1a04, 0x2f96, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff,
-+      0x0138, 0xa182, 0x007f, 0x1a04, 0x2f96, 0x2100, 0x080c, 0x27f7,
-+      0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0xb6f3, 0x601b,
-+      0x0000, 0x601f, 0x0000, 0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f,
-+      0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001,
-+      0x080c, 0x5ad4, 0x080c, 0x59c8, 0x0420, 0x2011, 0x0003, 0x080c,
-+      0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03, 0x0036,
-+      0x2019, 0x0000, 0x080c, 0x7f8e, 0x003e, 0x2061, 0x0100, 0x2001,
-+      0xb415, 0x2004, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043,
-+      0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4b0e, 0x080c,
-+      0x69e7, 0x7924, 0xa18c, 0xff00, 0x810f, 0x080c, 0x5a90, 0x1110,
-+      0x2009, 0x00ff, 0x7a28, 0x080c, 0x3a89, 0x012e, 0x00ce, 0x002e,
-+      0x0804, 0x2f6e, 0x7924, 0xa18c, 0xff00, 0x810f, 0x00c6, 0x080c,
-+      0x4f0e, 0x2c08, 0x00ce, 0x1904, 0x2f96, 0x0804, 0x2f6e, 0x81ff,
-+      0x0120, 0x2009, 0x0001, 0x0804, 0x2f93, 0x60d4, 0xd0ac, 0x1130,
-+      0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x2f93, 0x080c, 0x3e33,
-+      0x1120, 0x2009, 0x0002, 0x0804, 0x2f93, 0x7924, 0x7a2c, 0x7b28,
-+      0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x3bd7, 0x0005, 0x2009,
-+      0x0080, 0x080c, 0x4f6a, 0x1130, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x0120, 0x2021, 0x400a, 0x0804, 0x2f70, 0x00d6, 0xade8,
-+      0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820,
-+      0xa0be, 0x0100, 0x0904, 0x3c4e, 0xa0be, 0x0112, 0x0904, 0x3c4e,
-+      0xa0be, 0x0113, 0x0904, 0x3c4e, 0xa0be, 0x0114, 0x0904, 0x3c4e,
-+      0xa0be, 0x0117, 0x0904, 0x3c4e, 0xa0be, 0x011a, 0x0904, 0x3c4e,
-+      0xa0be, 0x011c, 0x0904, 0x3c4e, 0xa0be, 0x0121, 0x05b0, 0xa0be,
-+      0x0131, 0x0598, 0xa0be, 0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0,
-+      0xa0be, 0x01a1, 0x1120, 0x6830, 0x8007, 0x6832, 0x04a8, 0xa0be,
-+      0x0212, 0x0540, 0xa0be, 0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0,
-+      0xa0be, 0x0217, 0x0168, 0xa0be, 0x021a, 0x1120, 0x6838, 0x8007,
-+      0x683a, 0x00e0, 0xa0be, 0x0300, 0x01c8, 0x00de, 0x0804, 0x2f96,
-+      0xad80, 0x0010, 0x20a9, 0x0007, 0x080c, 0x3c94, 0xad80, 0x000e,
-+      0x20a9, 0x0001, 0x080c, 0x3c94, 0x0048, 0xad80, 0x000c, 0x080c,
-+      0x3ca2, 0x0050, 0xad80, 0x000e, 0x080c, 0x3ca2, 0xad80, 0x000c,
-+      0x20a9, 0x0001, 0x080c, 0x3c94, 0x00c6, 0x080c, 0x3e33, 0x0568,
-+      0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119, 0x6853, 0x0000, 0x684f,
-+      0x0020, 0x685b, 0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86,
-+      0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b, 0x0000, 0x00ce, 0x00de,
-+      0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x6804,
-+      0x2068, 0x080c, 0x9d33, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93,
-+      0x7007, 0x0003, 0x701b, 0x3c8b, 0x0005, 0x00ce, 0x00de, 0x2009,
-+      0x0002, 0x0804, 0x2f93, 0x6820, 0xa086, 0x8001, 0x1904, 0x2f6e,
-+      0x2009, 0x0004, 0x0804, 0x2f93, 0x0016, 0x2008, 0x2044, 0x8000,
-+      0x204c, 0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x1f04, 0x3c96,
-+      0x001e, 0x0005, 0x0016, 0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000,
-+      0x204c, 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a,
-+      0x8108, 0x290a, 0x8108, 0x280a, 0x00be, 0x00ae, 0x001e, 0x0005,
-+      0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2f93, 0x60d4, 0xd0ac,
-+      0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x2f93, 0x7924,
-+      0x2140, 0xa18c, 0xff00, 0x810f, 0x60d4, 0xd0ac, 0x1120, 0xa182,
-+      0x0080, 0x0a04, 0x2f96, 0xa182, 0x00ff, 0x1a04, 0x2f96, 0x7a2c,
-+      0x7b28, 0x6070, 0xa306, 0x1140, 0x6074, 0xa24e, 0x0904, 0x2f96,
-+      0xa9cc, 0xff00, 0x0904, 0x2f96, 0x00c6, 0x080c, 0x3d81, 0x2c68,
-+      0x00ce, 0x0538, 0xa0c6, 0x4000, 0x1180, 0x00c6, 0x0006, 0x2d60,
-+      0x2009, 0x0000, 0x080c, 0x520b, 0x1108, 0xc185, 0x6000, 0xd0bc,
-+      0x0108, 0xc18d, 0x000e, 0x00ce, 0x0088, 0xa0c6, 0x4007, 0x1110,
-+      0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030,
-+      0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001, 0x4006, 0x2020, 0x0804,
-+      0x2f70, 0x2d00, 0x7022, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70,
-+      0x080c, 0x856a, 0x05d8, 0x2d00, 0x601a, 0x080c, 0x9fb8, 0x2e58,
-+      0x00ee, 0x00e6, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x2b70, 0x1150,
-+      0x080c, 0x85c0, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x2009, 0x0002,
-+      0x0804, 0x2f93, 0x6837, 0x0000, 0x683b, 0x0000, 0x2d00, 0x6012,
-+      0x6833, 0x0000, 0x6838, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0x683a,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x2c60, 0x012e, 0x601f, 0x0001,
-+      0x2001, 0x0000, 0x080c, 0x4eac, 0x2001, 0x0002, 0x080c, 0x4ebe,
-+      0x2009, 0x0002, 0x080c, 0x85ef, 0xa085, 0x0001, 0x00ee, 0x00ce,
-+      0x00be, 0x001e, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007,
-+      0x0003, 0x701b, 0x3d64, 0x0005, 0x6830, 0xa086, 0x0100, 0x7020,
-+      0x2060, 0x1138, 0x2009, 0x0004, 0x6204, 0xa294, 0x00ff, 0x0804,
-+      0x2f93, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1904, 0x2f6e, 0x080c,
-+      0x520b, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x0804,
-+      0x2f6e, 0x00e6, 0x00d6, 0x2029, 0x0000, 0x2001, 0xb435, 0x2004,
-+      0xd0ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071, 0xb535,
-+      0x0030, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071, 0xb5b5, 0x2e04,
-+      0xa005, 0x1130, 0x2100, 0xa406, 0x1570, 0x2428, 0xc5fd, 0x0458,
-+      0x2068, 0x6f10, 0x2700, 0xa306, 0x11b0, 0x6e14, 0x2600, 0xa206,
-+      0x1190, 0x2400, 0xa106, 0x1160, 0x2d60, 0xd884, 0x0568, 0x6004,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x1538, 0x2001, 0x4000, 0x0428,
-+      0x2001, 0x4007, 0x0410, 0x2400, 0xa106, 0x1168, 0x6e14, 0x87ff,
-+      0x1138, 0x86ff, 0x09d0, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x19a8,
-+      0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x3d97, 0x85ff,
-+      0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c,
-+      0x4f0e, 0x1dd0, 0x6312, 0x6216, 0xa006, 0xa005, 0x00de, 0x00ee,
-+      0x0005, 0x81ff, 0x1904, 0x2f93, 0x080c, 0x3e33, 0x0904, 0x2f93,
-+      0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0904,
-+      0x2f96, 0xa096, 0x00ff, 0x0120, 0xa092, 0x0004, 0x1a04, 0x2f96,
-+      0x2010, 0x2d18, 0x080c, 0x2c13, 0x0904, 0x2f93, 0x7007, 0x0003,
-+      0x701b, 0x3e03, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, 0x2f93,
-+      0x0804, 0x2f6e, 0x7924, 0xa18c, 0xff00, 0x810f, 0x60d4, 0xd0ac,
-+      0x1120, 0xa182, 0x0080, 0x0a04, 0x2f96, 0xa182, 0x00ff, 0x1a04,
-+      0x2f96, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c1b, 0x1188, 0xa190,
-+      0xb535, 0x2204, 0xa065, 0x0160, 0x080c, 0x4bc5, 0x2001, 0xb435,
-+      0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000, 0x012e, 0x0804, 0x2f6e,
-+      0x012e, 0x0804, 0x2f93, 0x080c, 0x15f4, 0x0188, 0xa006, 0x6802,
-+      0x7010, 0xa005, 0x1120, 0x2d00, 0x7012, 0x7016, 0x0030, 0x7014,
-+      0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x0005,
-+      0x7924, 0x810f, 0xa18c, 0x00ff, 0x080c, 0x4f6a, 0x1130, 0x7e28,
-+      0xa684, 0x3fff, 0xa082, 0x4000, 0x0208, 0xa066, 0x8cff, 0x0005,
-+      0x7e24, 0x860f, 0xa18c, 0x00ff, 0x080c, 0x4f6a, 0x1128, 0xa6b4,
-+      0x00ff, 0xa682, 0x4000, 0x0208, 0xa066, 0x8cff, 0x0005, 0x0016,
-+      0x7110, 0x81ff, 0x0128, 0x2168, 0x6904, 0x080c, 0x160b, 0x0cc8,
-+      0x7112, 0x7116, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031,
-+      0x0000, 0x2061, 0xb4d2, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a,
-+      0x642e, 0x6532, 0x2c10, 0x080c, 0x163f, 0x7007, 0x0002, 0x701b,
-+      0x2f6e, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000,
-+      0x2001, 0xb490, 0x2004, 0xa005, 0x1168, 0x0e04, 0x3ea2, 0x7818,
-+      0xd084, 0x1140, 0x7a22, 0x7b26, 0x7c2a, 0x781b, 0x0001, 0x2091,
-+      0x4080, 0x0408, 0x0016, 0x00c6, 0x00e6, 0x2071, 0xb482, 0x7138,
-+      0xa182, 0x0010, 0x0218, 0x7030, 0x2060, 0x0078, 0x7030, 0xa0e0,
-+      0x0004, 0xac82, 0xb4d2, 0x0210, 0x2061, 0xb492, 0x2c00, 0x7032,
-+      0x81ff, 0x1108, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
-+      0x00ee, 0x00ce, 0x001e, 0x012e, 0x00fe, 0x0005, 0x00e6, 0x2071,
-+      0xb482, 0x7038, 0xa005, 0x0570, 0x0126, 0x2091, 0x8000, 0x0e04,
-+      0x3ef9, 0x00f6, 0x2079, 0x0000, 0x7818, 0xd084, 0x1508, 0x00c6,
-+      0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826, 0x6008, 0x782a,
-+      0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, 0xa005,
-+      0x1130, 0x7033, 0xb492, 0x7037, 0xb492, 0x00ce, 0x0048, 0xac80,
-+      0x0004, 0xa0fa, 0xb4d2, 0x0210, 0x2001, 0xb492, 0x7036, 0x00ce,
-+      0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026, 0x2001, 0xb453, 0x2004,
-+      0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x3e8a, 0x002e, 0x0005,
-+      0x81ff, 0x1904, 0x2f93, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d,
-+      0xc085, 0xc0ac, 0x6032, 0x080c, 0x5a90, 0x1178, 0x2001, 0xb69f,
-+      0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001,
-+      0x080c, 0x5ad4, 0x080c, 0x59c8, 0x0010, 0x080c, 0x4ad9, 0x012e,
-+      0x0804, 0x2f6e, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x1128, 0x61e0,
-+      0xa10d, 0x61e2, 0x0804, 0x2f6e, 0x0804, 0x2f96, 0x81ff, 0x1904,
-+      0x2f93, 0x6000, 0xa086, 0x0003, 0x1904, 0x2f93, 0x2001, 0xb453,
-+      0x2004, 0xd0ac, 0x1904, 0x2f93, 0x080c, 0x3e58, 0x0904, 0x2f96,
-+      0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1120, 0x7828, 0xa005,
-+      0x0904, 0x2f6e, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x0904, 0x2f93,
-+      0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c,
-+      0x9dfc, 0x0904, 0x2f93, 0x7007, 0x0003, 0x701b, 0x3f68, 0x0005,
-+      0x6830, 0xa086, 0x0100, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0x2001,
-+      0xb400, 0x2004, 0xa086, 0x0003, 0x1904, 0x2f93, 0x7f24, 0x7a2c,
-+      0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009,
-+      0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80,
-+      0x0005, 0x7026, 0x20a0, 0x080c, 0x4f6a, 0x1904, 0x3fe2, 0x6004,
-+      0xa0c4, 0x00ff, 0xa8c6, 0x0006, 0x0130, 0xa0c4, 0xff00, 0xa8c6,
-+      0x0600, 0x1904, 0x3fe2, 0x2001, 0xb453, 0x2004, 0xd0ac, 0x1128,
-+      0x080c, 0x520b, 0x1110, 0xd79c, 0x05e8, 0xd794, 0x1110, 0xd784,
-+      0x0158, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3,
-+      0x080c, 0x3ca2, 0xd794, 0x0148, 0xac80, 0x000a, 0x2098, 0x3400,
-+      0x20a9, 0x0004, 0x53a3, 0x080c, 0x3ca2, 0x21a2, 0xd794, 0x01d8,
-+      0xac80, 0x0000, 0x2098, 0x94a0, 0x20a9, 0x0002, 0x53a3, 0xac80,
-+      0x0003, 0x20a6, 0x94a0, 0xac80, 0x0004, 0x2098, 0x3400, 0x20a9,
-+      0x0002, 0x53a3, 0x080c, 0x3c94, 0xac80, 0x0026, 0x2098, 0x20a9,
-+      0x0002, 0x53a3, 0x0008, 0x94a0, 0xd794, 0x0110, 0xa6b0, 0x000b,
-+      0xa6b0, 0x0005, 0x8108, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x0118,
-+      0xa186, 0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100, 0x0170,
-+      0x0018, 0xa186, 0x007e, 0x0150, 0xd794, 0x0118, 0xa686, 0x0020,
-+      0x0010, 0xa686, 0x0028, 0x0150, 0x0804, 0x3f8b, 0x86ff, 0x1120,
-+      0x7120, 0x810b, 0x0804, 0x2f6e, 0x702f, 0x0001, 0x711e, 0x7020,
-+      0xa600, 0x7022, 0x772a, 0x2061, 0xb4d2, 0x6007, 0x0000, 0x6612,
-+      0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c,
-+      0x163f, 0x7007, 0x0002, 0x701b, 0x401e, 0x0005, 0x702c, 0xa005,
-+      0x1170, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061,
-+      0xb4d2, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x3f8b, 0x7120,
-+      0x810b, 0x0804, 0x2f6e, 0x2029, 0x007e, 0x7924, 0x7a28, 0x7b2c,
-+      0x7c38, 0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x2f96,
-+      0xa502, 0x0a04, 0x2f96, 0xa184, 0x00ff, 0xa0e2, 0x0020, 0x0a04,
-+      0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa284, 0xff00, 0x8007, 0xa0e2,
-+      0x0020, 0x0a04, 0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa284, 0x00ff,
-+      0xa0e2, 0x0020, 0x0a04, 0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa384,
-+      0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x2f96, 0xa502, 0x0a04,
-+      0x2f96, 0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x2f96, 0xa502,
-+      0x0a04, 0x2f96, 0xa484, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04,
-+      0x2f96, 0xa502, 0x0a04, 0x2f96, 0xa484, 0x00ff, 0xa0e2, 0x0020,
-+      0x0a04, 0x2f96, 0xa502, 0x0a04, 0x2f96, 0x2061, 0xb6b9, 0x6102,
-+      0x6206, 0x630a, 0x640e, 0x0804, 0x2f6e, 0x0006, 0x2001, 0xb453,
-+      0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001, 0xb472, 0x2004,
-+      0xd0bc, 0x000e, 0x0005, 0x6168, 0x7a24, 0x6300, 0x82ff, 0x1118,
-+      0x7926, 0x0804, 0x2f6e, 0x83ff, 0x1904, 0x2f96, 0x2001, 0xfff0,
-+      0xa200, 0x1a04, 0x2f96, 0x2019, 0xffff, 0x606c, 0xa302, 0xa200,
-+      0x0a04, 0x2f96, 0x7926, 0x626a, 0x0804, 0x2f6e, 0x2001, 0xb400,
-+      0x2004, 0xa086, 0x0003, 0x1904, 0x2f93, 0x7c28, 0x7d24, 0x7e38,
-+      0x7f2c, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x2009, 0x0000, 0x2019,
-+      0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80, 0x0003, 0x7026,
-+      0x20a0, 0xa1e0, 0xb535, 0x2c64, 0x8cff, 0x01b8, 0x6004, 0xa084,
-+      0x00ff, 0xa086, 0x0006, 0x0130, 0x6004, 0xa084, 0xff00, 0xa086,
-+      0x0600, 0x1158, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, 0xa105,
-+      0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, 0x00ff,
-+      0x0120, 0xa386, 0x002a, 0x0148, 0x08e0, 0x83ff, 0x1120, 0x7120,
-+      0x810c, 0x0804, 0x2f6e, 0x702f, 0x0001, 0x711e, 0x7020, 0xa300,
-+      0x7022, 0x2061, 0xb4d2, 0x6007, 0x0000, 0x6312, 0x7024, 0x600e,
-+      0x6426, 0x652a, 0x662e, 0x6732, 0x2c10, 0x080c, 0x163f, 0x7007,
-+      0x0002, 0x701b, 0x4114, 0x0005, 0x702c, 0xa005, 0x1168, 0x711c,
-+      0x7024, 0x20a0, 0x2019, 0x0000, 0x2061, 0xb4d2, 0x6424, 0x6528,
-+      0x662c, 0x6730, 0x0804, 0x40d1, 0x7120, 0x810c, 0x0804, 0x2f6e,
-+      0x81ff, 0x1904, 0x2f93, 0x60d4, 0xd0ac, 0x1118, 0xd09c, 0x0904,
-+      0x2f93, 0x080c, 0x3e33, 0x0904, 0x2f93, 0x7924, 0x7a2c, 0x7b28,
-+      0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x413f, 0x0005, 0x00d6,
-+      0xade8, 0x000d, 0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be, 0x7100,
-+      0x0130, 0xa0be, 0x7200, 0x0118, 0x00de, 0x0804, 0x2f96, 0x6820,
-+      0x6924, 0x080c, 0x27e3, 0x1510, 0x080c, 0x4f0e, 0x11f8, 0x7122,
-+      0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c, 0x3e33, 0x01b8, 0x080c,
-+      0x3e33, 0x01a0, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd,
-+      0x683a, 0x6823, 0x0000, 0x6804, 0x2068, 0x080c, 0x9d4f, 0x0904,
-+      0x2f93, 0x7007, 0x0003, 0x701b, 0x4179, 0x0005, 0x00de, 0x0804,
-+      0x2f93, 0x7120, 0x080c, 0x2d5b, 0x6820, 0xa086, 0x8001, 0x0904,
-+      0x2f93, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002, 0x0006, 0x20a9,
-+      0x002a, 0x2098, 0x20a0, 0x080c, 0x4b49, 0x000e, 0xade8, 0x000d,
-+      0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0xb4d2, 0x6007, 0x0000,
-+      0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6, 0x7100,
-+      0x1140, 0xa6c2, 0x0004, 0x0a04, 0x2f96, 0x2009, 0x0004, 0x0804,
-+      0x3e77, 0xa7c6, 0x7200, 0x1904, 0x2f96, 0xa6c2, 0x0054, 0x0a04,
-+      0x2f96, 0x600e, 0x6013, 0x002a, 0x6226, 0x632a, 0x642e, 0x6532,
-+      0x2c10, 0x080c, 0x163f, 0x7007, 0x0002, 0x701b, 0x41c0, 0x0005,
-+      0x701c, 0x2068, 0x6804, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002,
-+      0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x4b49, 0x000e,
-+      0x2009, 0x002a, 0x2061, 0xb4d2, 0x6224, 0x6328, 0x642c, 0x6530,
-+      0x0804, 0x3e77, 0x81ff, 0x1904, 0x2f93, 0x792c, 0x2001, 0xb6a0,
-+      0x2102, 0x080c, 0x3e48, 0x0904, 0x2f96, 0x080c, 0x5030, 0x0904,
-+      0x2f93, 0x0126, 0x2091, 0x8000, 0x080c, 0x5162, 0x012e, 0x0804,
-+      0x2f6e, 0x7824, 0xd08c, 0x1118, 0xd084, 0x0904, 0x3a03, 0x080c,
-+      0x3e58, 0x0904, 0x2f96, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x1120,
-+      0x2009, 0x0002, 0x0804, 0x2f93, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x0128, 0xa08e, 0x0004, 0x0110, 0xa08e, 0x0005, 0x15b8,
-+      0x7824, 0xd08c, 0x0120, 0x6000, 0xc08c, 0x6002, 0x0030, 0x2001,
-+      0xb453, 0x2004, 0xd0b4, 0x0904, 0x3a3f, 0x7824, 0xa084, 0xff00,
-+      0xa08e, 0x7e00, 0x0904, 0x3a3f, 0xa08e, 0x7f00, 0x0904, 0x3a3f,
-+      0xa08e, 0x8000, 0x0904, 0x3a3f, 0x6000, 0xd08c, 0x1904, 0x3a3f,
-+      0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x9d6b, 0x1120,
-+      0x2009, 0x0003, 0x0804, 0x2f93, 0x7007, 0x0003, 0x701b, 0x4241,
-+      0x0005, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x0804, 0x3a3f, 0x2009,
-+      0xb431, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2f93,
-+      0x2001, 0xb400, 0x2004, 0xa086, 0x0003, 0x0120, 0x2009, 0x0007,
-+      0x0804, 0x2f93, 0x2001, 0xb453, 0x2004, 0xd0ac, 0x0120, 0x2009,
-+      0x0008, 0x0804, 0x2f93, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904,
-+      0x3a3f, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
-+      0x080c, 0x9dfc, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007,
-+      0x0003, 0x701b, 0x427c, 0x0005, 0x6830, 0xa086, 0x0100, 0x1120,
-+      0x2009, 0x0004, 0x0804, 0x2f93, 0x080c, 0x3e58, 0x0904, 0x2f96,
-+      0x0804, 0x4210, 0x81ff, 0x2009, 0x0001, 0x1904, 0x2f93, 0x6000,
-+      0xa086, 0x0003, 0x2009, 0x0007, 0x1904, 0x2f93, 0x2001, 0xb453,
-+      0x2004, 0xd0ac, 0x2009, 0x0008, 0x1904, 0x2f93, 0x080c, 0x3e58,
-+      0x0904, 0x2f96, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x2009,
-+      0x0009, 0x1904, 0x2f93, 0x00c6, 0x080c, 0x3e33, 0x00ce, 0x2009,
-+      0x0002, 0x0904, 0x2f93, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838,
-+      0xc0fd, 0x683a, 0x7928, 0xa194, 0xff00, 0xa18c, 0x00ff, 0xa006,
-+      0x82ff, 0x1128, 0xc0ed, 0x6952, 0x792c, 0x6956, 0x0048, 0xa28e,
-+      0x0100, 0x1904, 0x2f96, 0xc0e5, 0x6853, 0x0000, 0x6857, 0x0000,
-+      0x683e, 0x080c, 0x9fb9, 0x2009, 0x0003, 0x0904, 0x2f93, 0x7007,
-+      0x0003, 0x701b, 0x42dc, 0x0005, 0x6830, 0xa086, 0x0100, 0x2009,
-+      0x0004, 0x0904, 0x2f93, 0x0804, 0x2f6e, 0x81ff, 0x2009, 0x0001,
-+      0x1904, 0x2f93, 0x6000, 0xa086, 0x0003, 0x2009, 0x0007, 0x1904,
-+      0x2f93, 0x080c, 0x3e58, 0x0904, 0x2f96, 0x6004, 0xa084, 0x00ff,
-+      0xa086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2f93, 0x00c6, 0x080c,
-+      0x3e33, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2f93, 0xad80, 0x000f,
-+      0x2009, 0x0008, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e74,
-+      0x701b, 0x4313, 0x0005, 0x00d6, 0xade8, 0x000f, 0x6800, 0xa086,
-+      0x0500, 0x1140, 0x6804, 0xa005, 0x1128, 0x6808, 0xa084, 0xff00,
-+      0x1108, 0x0018, 0x00de, 0x1904, 0x2f96, 0x00de, 0x6837, 0x0000,
-+      0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x00c6, 0x080c, 0x3e58,
-+      0x1118, 0x00ce, 0x0804, 0x2f96, 0x080c, 0xa008, 0x2009, 0x0003,
-+      0x00ce, 0x0904, 0x2f93, 0x7007, 0x0003, 0x701b, 0x4340, 0x0005,
-+      0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904, 0x2f93, 0x0804,
-+      0x2f6e, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2f93, 0x6000,
-+      0xa086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804, 0x2f93, 0x7e24,
-+      0x860f, 0xa18c, 0x00ff, 0xa6b4, 0x00ff, 0x080c, 0x4f6a, 0x1904,
-+      0x2f96, 0xa186, 0x007f, 0x0150, 0x6004, 0xa084, 0x00ff, 0xa086,
-+      0x0006, 0x0120, 0x2009, 0x0009, 0x0804, 0x2f93, 0x00c6, 0x080c,
-+      0x3e33, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2f93, 0x6837,
-+      0x0000, 0x6838, 0xc0fd, 0x683a, 0x2001, 0x0100, 0x8007, 0x680a,
-+      0x080c, 0x9d86, 0x1120, 0x2009, 0x0003, 0x0804, 0x2f93, 0x7007,
-+      0x0003, 0x701b, 0x438c, 0x0005, 0x6808, 0x8007, 0xa086, 0x0100,
-+      0x1120, 0x2009, 0x0004, 0x0804, 0x2f93, 0x68b0, 0x6836, 0x6810,
-+      0x8007, 0xa084, 0x00ff, 0x800c, 0x6814, 0x8007, 0xa084, 0x00ff,
-+      0x8004, 0xa080, 0x0002, 0xa108, 0xad80, 0x0004, 0x7a2c, 0x7b28,
-+      0x7c3c, 0x7d38, 0x0804, 0x3e77, 0x080c, 0x3e33, 0x1120, 0x2009,
-+      0x0002, 0x0804, 0x2f93, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff,
-+      0x8217, 0x82ff, 0x0110, 0x0804, 0x2f96, 0x2009, 0x001a, 0x7a2c,
-+      0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3e74, 0x701b, 0x43c8, 0x0005,
-+      0xad80, 0x000d, 0x2098, 0x20a9, 0x001a, 0x20a1, 0xb6c6, 0x53a3,
-+      0x0804, 0x2f6e, 0x080c, 0x3e33, 0x1120, 0x2009, 0x0002, 0x0804,
-+      0x2f93, 0x7924, 0xa194, 0xff00, 0xa18c, 0x00ff, 0x8217, 0x82ff,
-+      0x0110, 0x0804, 0x2f96, 0x2099, 0xb6c6, 0x20a0, 0x20a9, 0x001a,
-+      0x53a3, 0x2009, 0x001a, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804,
-+      0x3e77, 0x7824, 0xa08a, 0x1000, 0x1a04, 0x2f96, 0x0126, 0x2091,
-+      0x8000, 0x8003, 0x800b, 0x810b, 0xa108, 0x00c6, 0x2061, 0xb6f3,
-+      0x6142, 0x00ce, 0x012e, 0x0804, 0x2f6e, 0x00c6, 0x080c, 0x5a90,
-+      0x1188, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003,
-+      0x0001, 0xa085, 0x0001, 0x080c, 0x5ad4, 0x080c, 0x59c8, 0x080c,
-+      0x1511, 0x0038, 0x2061, 0xb400, 0x6030, 0xc09d, 0x6032, 0x080c,
-+      0x4ad9, 0x00ce, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061,
-+      0xb6f3, 0x7924, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009,
-+      0x7838, 0x606a, 0x783c, 0x6066, 0x7828, 0x6062, 0x782c, 0x605e,
-+      0x2061, 0xb6a1, 0x2001, 0xb708, 0x600e, 0x6013, 0x0001, 0x6017,
-+      0x0002, 0x6007, 0x0000, 0x6037, 0x0000, 0x00ce, 0x012e, 0x0804,
-+      0x2f6e, 0x0126, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb400,
-+      0x6044, 0xd0a4, 0x11b0, 0xd084, 0x0118, 0x080c, 0x45c0, 0x0068,
-+      0xd08c, 0x0118, 0x080c, 0x44e1, 0x0040, 0xd094, 0x0118, 0x080c,
-+      0x44b2, 0x0018, 0xd09c, 0x0108, 0x0061, 0x00ee, 0x00ce, 0x012e,
-+      0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e,
-+      0x0ca0, 0x624c, 0xa286, 0xf0f0, 0x1150, 0x6048, 0xa086, 0xf0f0,
-+      0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0xa294,
-+      0xff00, 0xa296, 0xf700, 0x0178, 0x7134, 0xd1a4, 0x1160, 0x6240,
-+      0xa295, 0x0100, 0x6242, 0xa294, 0x0010, 0x0128, 0x2009, 0x00f7,
-+      0x080c, 0x4b69, 0x00f0, 0x6040, 0xa084, 0x0010, 0xa085, 0x0140,
-+      0x6042, 0x6043, 0x0000, 0x707b, 0x0000, 0x7097, 0x0001, 0x70bb,
-+      0x0000, 0x70d7, 0x0000, 0x2009, 0xbbc0, 0x200b, 0x0000, 0x708b,
-+      0x0000, 0x707f, 0x000a, 0x2009, 0x000a, 0x2011, 0x4a8f, 0x080c,
-+      0x69e7, 0x0005, 0x0156, 0x2001, 0xb474, 0x2004, 0xd08c, 0x0110,
-+      0x7053, 0xffff, 0x707c, 0xa005, 0x1510, 0x2011, 0x4a8f, 0x080c,
-+      0x6961, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, 0x20a9,
-+      0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x44c9, 0x6242, 0x708f,
-+      0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, 0x6042, 0x6242,
-+      0x0030, 0x6242, 0x708f, 0x0000, 0x7083, 0x0000, 0x0000, 0x015e,
-+      0x0005, 0x7080, 0xa08a, 0x0003, 0x1210, 0x0023, 0x0010, 0x080c,
-+      0x1511, 0x0005, 0x44ed, 0x453d, 0x45bf, 0x00f6, 0x7083, 0x0001,
-+      0x20e1, 0xa000, 0xe000, 0x20e1, 0x8700, 0x080c, 0x2439, 0x20e1,
-+      0x9080, 0x20e1, 0x4000, 0x2079, 0xba00, 0x207b, 0x2200, 0x7807,
-+      0x00ef, 0x780b, 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817,
-+      0x0000, 0x781b, 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827,
-+      0xffff, 0x782b, 0x0000, 0x782f, 0x0000, 0x2079, 0xba0c, 0x207b,
-+      0x1101, 0x7807, 0x0000, 0x2099, 0xb405, 0x20a1, 0xba0e, 0x20a9,
-+      0x0004, 0x53a3, 0x2079, 0xba12, 0x207b, 0x0000, 0x7807, 0x0000,
-+      0x2099, 0xba00, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3,
-+      0x000c, 0x600f, 0x0000, 0x080c, 0x4ac0, 0x00fe, 0x7087, 0x0000,
-+      0x6043, 0x0008, 0x6043, 0x0000, 0x0005, 0x00d6, 0x7084, 0x7087,
-+      0x0000, 0xa025, 0x0904, 0x45a7, 0x6020, 0xd0b4, 0x1904, 0x45a5,
-+      0x7194, 0x81ff, 0x0904, 0x4595, 0xa486, 0x000c, 0x1904, 0x45a0,
-+      0xa480, 0x0018, 0x8004, 0x20a8, 0x2011, 0xba80, 0x2019, 0xba00,
-+      0x220c, 0x2304, 0xa106, 0x11b8, 0x8210, 0x8318, 0x1f04, 0x4558,
-+      0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006,
-+      0x7083, 0x0002, 0x708f, 0x0002, 0x2009, 0x07d0, 0x2011, 0x4a96,
-+      0x080c, 0x69e7, 0x0490, 0x2069, 0xba80, 0x6930, 0xa18e, 0x1101,
-+      0x1538, 0x6834, 0xa005, 0x1520, 0x6900, 0xa18c, 0x00ff, 0x1118,
-+      0x6804, 0xa005, 0x0190, 0x2011, 0xba8e, 0x2019, 0xb405, 0x20a9,
-+      0x0004, 0x220c, 0x2304, 0xa102, 0x0230, 0x1190, 0x8210, 0x8318,
-+      0x1f04, 0x4589, 0x0068, 0x7097, 0x0000, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6,
-+      0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00de, 0x0005, 0x6040,
-+      0xa085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x60c3, 0x000c,
-+      0x2011, 0xb6ea, 0x2013, 0x0000, 0x7087, 0x0000, 0x20e1, 0x9080,
-+      0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x7d1b, 0x0c30, 0x0005,
-+      0x708c, 0xa08a, 0x001d, 0x1210, 0x0023, 0x0010, 0x080c, 0x1511,
-+      0x0005, 0x45f3, 0x4602, 0x462a, 0x4643, 0x4667, 0x468f, 0x46b3,
-+      0x46e4, 0x4708, 0x4730, 0x4767, 0x478f, 0x47ab, 0x47c1, 0x47e1,
-+      0x47f4, 0x47fc, 0x482c, 0x4850, 0x4878, 0x489c, 0x48cd, 0x490a,
-+      0x4939, 0x4955, 0x4994, 0x49b4, 0x49cd, 0x49ce, 0x00c6, 0x2061,
-+      0xb400, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, 0xfff9,
-+      0x6006, 0x00ce, 0x0005, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043,
-+      0x0002, 0x708f, 0x0001, 0x2009, 0x07d0, 0x2011, 0x4a96, 0x080c,
-+      0x69e7, 0x0005, 0x00f6, 0x7084, 0xa086, 0x0014, 0x1508, 0x6043,
-+      0x0000, 0x6020, 0xd0b4, 0x11e0, 0x2079, 0xba80, 0x7a30, 0xa296,
-+      0x1102, 0x11a0, 0x7834, 0xa005, 0x1188, 0x7a38, 0xd2fc, 0x0128,
-+      0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x2011, 0x4a96, 0x080c,
-+      0x6961, 0x708f, 0x0010, 0x080c, 0x47fc, 0x0010, 0x080c, 0x4ad9,
-+      0x00fe, 0x0005, 0x708f, 0x0003, 0x6043, 0x0004, 0x2011, 0x4a96,
-+      0x080c, 0x6961, 0x080c, 0x4b51, 0x20a3, 0x1102, 0x20a3, 0x0000,
-+      0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x463a, 0x60c3, 0x0014,
-+      0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011,
-+      0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x11a8, 0x2079, 0xba80,
-+      0x7a30, 0xa296, 0x1102, 0x1178, 0x7834, 0xa005, 0x1160, 0x7a38,
-+      0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f,
-+      0x0004, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f,
-+      0x0005, 0x080c, 0x4b51, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430,
-+      0x2011, 0xba8e, 0x080c, 0x4ba2, 0x1160, 0x7078, 0xa005, 0x1148,
-+      0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4a5a, 0x0110, 0x080c,
-+      0x4b80, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6,
-+      0x7084, 0xa005, 0x01f0, 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086,
-+      0x0014, 0x11a8, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1103, 0x1178,
-+      0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
-+      0x1110, 0x70bb, 0x0001, 0x708f, 0x0006, 0x0029, 0x0010, 0x080c,
-+      0x4ad9, 0x00fe, 0x0005, 0x708f, 0x0007, 0x080c, 0x4b51, 0x20a3,
-+      0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xba8e, 0x080c, 0x4ba2,
-+      0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186, 0xffff, 0x0170,
-+      0xa180, 0x2d88, 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4a5a,
-+      0x0128, 0x080c, 0x4094, 0x0110, 0x080c, 0x282d, 0x20a9, 0x0008,
-+      0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0,
-+      0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x11a8, 0x2079,
-+      0xba80, 0x7a30, 0xa296, 0x1104, 0x1178, 0x7834, 0xa005, 0x1160,
-+      0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
-+      0x708f, 0x0008, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005,
-+      0x708f, 0x0009, 0x080c, 0x4b51, 0x20a3, 0x1105, 0x20a3, 0x0100,
-+      0x3430, 0x080c, 0x4ba2, 0x1150, 0x7078, 0xa005, 0x1138, 0x080c,
-+      0x49cf, 0x1170, 0xa085, 0x0001, 0x080c, 0x282d, 0x20a9, 0x0008,
-+      0x2099, 0xba8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0010, 0x080c, 0x45e6, 0x0005,
-+      0x00f6, 0x7084, 0xa005, 0x0588, 0x2011, 0x4a96, 0x080c, 0x6961,
-+      0xa086, 0x0014, 0x1540, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1105,
-+      0x1510, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1160, 0x7a38, 0xd2fc,
-+      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x000a,
-+      0x00b1, 0x0098, 0xa005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
-+      0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000, 0x708f, 0x000e,
-+      0x080c, 0x47e1, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f,
-+      0x000b, 0x2011, 0xba0e, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff,
-+      0x43a4, 0x20a9, 0x0002, 0x2009, 0x0000, 0x41a4, 0x080c, 0x4b51,
-+      0x20a3, 0x1106, 0x20a3, 0x0000, 0x080c, 0x4ba2, 0x0118, 0x2013,
-+      0x0000, 0x0020, 0x7054, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9,
-+      0x0042, 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4ac0, 0x0005, 0x00f6,
-+      0x7084, 0xa005, 0x01b0, 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086,
-+      0x0084, 0x1168, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1106, 0x1138,
-+      0x7834, 0xa005, 0x1120, 0x708f, 0x000c, 0x0029, 0x0010, 0x080c,
-+      0x4ad9, 0x00fe, 0x0005, 0x708f, 0x000d, 0x080c, 0x4b51, 0x20a3,
-+      0x1107, 0x20a3, 0x0000, 0x2099, 0xba8e, 0x20a9, 0x0040, 0x53a6,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x080c, 0x4ac0,
-+      0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0, 0x2011, 0x4a96, 0x080c,
-+      0x6961, 0xa086, 0x0084, 0x1188, 0x2079, 0xba80, 0x7a30, 0xa296,
-+      0x1107, 0x1158, 0x7834, 0xa005, 0x1140, 0x708b, 0x0001, 0x080c,
-+      0x4b43, 0x708f, 0x000e, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe,
-+      0x0005, 0x708f, 0x000f, 0x7087, 0x0000, 0x608b, 0xbc85, 0x608f,
-+      0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011,
-+      0x4a96, 0x080c, 0x6955, 0x0005, 0x7084, 0xa005, 0x0120, 0x2011,
-+      0x4a96, 0x080c, 0x6961, 0x0005, 0x708f, 0x0011, 0x080c, 0x4ba2,
-+      0x11a0, 0x7170, 0x81ff, 0x0188, 0x2009, 0x0000, 0x7074, 0xa084,
-+      0x00ff, 0x080c, 0x27e3, 0xa186, 0x007e, 0x0138, 0xa186, 0x0080,
-+      0x0120, 0x2011, 0xba8e, 0x080c, 0x4a5a, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x7484, 0xa480, 0x0018,
-+      0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3,
-+      0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01f0,
-+      0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x11a8, 0x2079,
-+      0xba80, 0x7a30, 0xa296, 0x1103, 0x1178, 0x7834, 0xa005, 0x1160,
-+      0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001,
-+      0x708f, 0x0012, 0x0029, 0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005,
-+      0x708f, 0x0013, 0x080c, 0x4b5d, 0x20a3, 0x1103, 0x20a3, 0x0000,
-+      0x3430, 0x2011, 0xba8e, 0x080c, 0x4ba2, 0x1160, 0x7078, 0xa005,
-+      0x1148, 0x7150, 0xa186, 0xffff, 0x0128, 0x080c, 0x4a5a, 0x0110,
-+      0x080c, 0x4b80, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0005,
-+      0x00f6, 0x7084, 0xa005, 0x01f0, 0x2011, 0x4a96, 0x080c, 0x6961,
-+      0xa086, 0x0014, 0x11a8, 0x2079, 0xba80, 0x7a30, 0xa296, 0x1104,
-+      0x1178, 0x7834, 0xa005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70b8,
-+      0xa005, 0x1110, 0x70bb, 0x0001, 0x708f, 0x0014, 0x0029, 0x0010,
-+      0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x0015, 0x080c, 0x4b5d,
-+      0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0xba8e, 0x080c,
-+      0x4ba2, 0x11a8, 0x7078, 0xa005, 0x1190, 0x7158, 0xa186, 0xffff,
-+      0x0170, 0xa180, 0x2d88, 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c,
-+      0x4a5a, 0x0128, 0x080c, 0x4094, 0x0110, 0x080c, 0x282d, 0x20a9,
-+      0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005,
-+      0x05b8, 0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0014, 0x1570,
-+      0x2079, 0xba80, 0x7a30, 0xa296, 0x1105, 0x1540, 0x7834, 0x2011,
-+      0x0100, 0xa21e, 0x1148, 0x7a38, 0xd2fc, 0x0128, 0x70b8, 0xa005,
-+      0x1110, 0x70bb, 0x0001, 0x0060, 0xa005, 0x11c0, 0x7a38, 0xd2fc,
-+      0x0128, 0x70b8, 0xa005, 0x1110, 0x70bb, 0x0001, 0x708b, 0x0000,
-+      0x7a38, 0xd2f4, 0x0138, 0x2001, 0xb474, 0x2004, 0xd0a4, 0x1110,
-+      0x70d7, 0x0008, 0x708f, 0x0016, 0x0029, 0x0010, 0x080c, 0x4ad9,
-+      0x00fe, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xba80,
-+      0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0xba8e,
-+      0x708f, 0x0017, 0x080c, 0x4ba2, 0x1150, 0x7078, 0xa005, 0x1138,
-+      0x080c, 0x49cf, 0x1170, 0xa085, 0x0001, 0x080c, 0x282d, 0x20a9,
-+      0x0008, 0x2099, 0xba8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x60c3, 0x0014, 0x080c, 0x4ac0, 0x0010, 0x080c, 0x45e6,
-+      0x0005, 0x00f6, 0x7084, 0xa005, 0x01b0, 0x2011, 0x4a96, 0x080c,
-+      0x6961, 0xa086, 0x0084, 0x1168, 0x2079, 0xba80, 0x7a30, 0xa296,
-+      0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708f, 0x0018, 0x0029,
-+      0x0010, 0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x0019, 0x080c,
-+      0x4b5d, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0xba8e,
-+      0x2039, 0xba0e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x080c, 0x4ba2,
-+      0x11e8, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018,
-+      0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, 0x7054, 0x2310, 0x8214,
-+      0xa2a0, 0xba0e, 0x2414, 0xa38c, 0x0001, 0x0118, 0xa294, 0xff00,
-+      0x0018, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0,
-+      0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0084, 0x080c, 0x4ac0, 0x0005, 0x00f6, 0x7084, 0xa005, 0x01d0,
-+      0x2011, 0x4a96, 0x080c, 0x6961, 0xa086, 0x0084, 0x1188, 0x2079,
-+      0xba80, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, 0x1140,
-+      0x708b, 0x0001, 0x080c, 0x4b43, 0x708f, 0x001a, 0x0029, 0x0010,
-+      0x080c, 0x4ad9, 0x00fe, 0x0005, 0x708f, 0x001b, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x7484, 0xa480,
-+      0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6,
-+      0x60c3, 0x0084, 0x080c, 0x4ac0, 0x0005, 0x0005, 0x0005, 0x0086,
-+      0x0096, 0x2029, 0xb453, 0x252c, 0x20a9, 0x0008, 0x2041, 0xba0e,
-+      0x28a0, 0x2099, 0xba8e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007,
-+      0xd5d4, 0x0110, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6,
-+      0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04,
-+      0x49e4, 0x0804, 0x4a52, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0xa1a6,
-+      0x3fff, 0x0d90, 0x0020, 0xa1a6, 0x3fff, 0x0904, 0x4a52, 0xa18d,
-+      0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019,
-+      0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240,
-+      0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x4a0a, 0x04d0,
-+      0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x4a1c, 0x2328,
-+      0x8529, 0xa2be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200,
-+      0xa73a, 0x000e, 0x27a8, 0xa5a8, 0x0010, 0x1f04, 0x4a2b, 0x7552,
-+      0xa5c8, 0x2d88, 0x292d, 0xa5ac, 0x00ff, 0x7576, 0x6532, 0x6536,
-+      0x0016, 0x2508, 0x080c, 0x280d, 0x001e, 0x60e7, 0x0000, 0x65ea,
-+      0x2018, 0x2304, 0xa405, 0x201a, 0x707b, 0x0001, 0x26a0, 0x2898,
-+      0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085,
-+      0x0001, 0x0028, 0xa006, 0x0018, 0xa006, 0x080c, 0x1511, 0x009e,
-+      0x008e, 0x0005, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a,
-+      0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120,
-+      0xa39a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118,
-+      0x8423, 0x8319, 0x1de8, 0xa238, 0x2704, 0xa42c, 0x11b8, 0xa405,
-+      0x203a, 0x7152, 0xa1a0, 0x2d88, 0x242d, 0xa5ac, 0x00ff, 0x7576,
-+      0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x280d, 0x001e, 0x60e7,
-+      0x0000, 0x65ea, 0x707b, 0x0001, 0xa084, 0x0000, 0x0005, 0x00e6,
-+      0x2071, 0xb400, 0x707f, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6,
-+      0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x7d24, 0x7004, 0xa084,
-+      0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000, 0x0126, 0x2091,
-+      0x8000, 0x2071, 0xb423, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016,
-+      0x2009, 0x00f7, 0x080c, 0x4b69, 0x001e, 0xa094, 0x0010, 0xa285,
-+      0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x2011, 0xb6ea, 0x2013, 0x0000, 0x7087,
-+      0x0000, 0x012e, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
-+      0x080c, 0x7d1b, 0x2009, 0x07d0, 0x2011, 0x4a96, 0x080c, 0x69e7,
-+      0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2011,
-+      0x0003, 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c,
-+      0x7f03, 0x0036, 0x2019, 0x0000, 0x080c, 0x7f8e, 0x003e, 0x2009,
-+      0x00f7, 0x080c, 0x4b69, 0x2061, 0xb6f3, 0x601b, 0x0000, 0x601f,
-+      0x0000, 0x2061, 0xb400, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043,
-+      0x0090, 0x6043, 0x0010, 0x2009, 0x002d, 0x2011, 0x4b0e, 0x080c,
-+      0x6955, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006,
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x0100, 0x080c, 0x7d24, 0x2071,
-+      0x0140, 0x7004, 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003,
-+      0x0000, 0x080c, 0x5a98, 0x01a8, 0x080c, 0x5ab6, 0x1190, 0x2001,
-+      0xb69e, 0x2003, 0xaaaa, 0x0016, 0x080c, 0x28b1, 0x2001, 0xb68f,
-+      0x2102, 0x001e, 0x2001, 0xb69f, 0x2003, 0x0000, 0x080c, 0x59c8,
-+      0x0030, 0x2001, 0x0001, 0x080c, 0x2789, 0x080c, 0x4ad9, 0x012e,
-+      0x000e, 0x00ee, 0x0005, 0x20a9, 0x0040, 0x20a1, 0xbbc0, 0x2099,
-+      0xba8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x1f04, 0x4b49,
-+      0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0xba00, 0x20a1,
-+      0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x2099, 0xba80, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6,
-+      0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0xb431,
-+      0x2004, 0xa005, 0x1138, 0x2001, 0xb415, 0x2004, 0xa084, 0x00ff,
-+      0xa105, 0x0010, 0xa185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005,
-+      0x0016, 0x0046, 0x2001, 0xb453, 0x2004, 0xd0a4, 0x0158, 0xa006,
-+      0x2020, 0x2009, 0x002a, 0x080c, 0xb06b, 0x2001, 0xb40c, 0x200c,
-+      0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0000, 0x080c, 0x2c33,
-+      0x004e, 0x001e, 0x0005, 0x080c, 0x4ad9, 0x708f, 0x0000, 0x7087,
-+      0x0000, 0x0005, 0x0006, 0x2001, 0xb40c, 0x2004, 0xd09c, 0x0100,
-+      0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001,
-+      0x0101, 0x200c, 0xa18d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e,
-+      0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009, 0xb535, 0xa006, 0x200a,
-+      0x8108, 0x1f04, 0x4bbf, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156,
-+      0x0136, 0x0146, 0x2069, 0xb452, 0xa006, 0x6002, 0x6007, 0x0707,
-+      0x600a, 0x600e, 0x6012, 0xa198, 0x2d88, 0x231d, 0xa39c, 0x00ff,
-+      0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0, 0x40a4, 0x20a9,
-+      0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e, 0x6042, 0x604e,
-+      0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066, 0x606a, 0x606e,
-+      0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086, 0x608a, 0x608e,
-+      0x6092, 0x6096, 0x609a, 0x609e, 0x60ae, 0x61a2, 0x00d6, 0x60a4,
-+      0xa06d, 0x0110, 0x080c, 0x160b, 0x60a7, 0x0000, 0x60a8, 0xa06d,
-+      0x0110, 0x080c, 0x160b, 0x60ab, 0x0000, 0x00de, 0xa006, 0x604a,
-+      0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042,
-+      0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000, 0x1a04,
-+      0x4cd4, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x1a04, 0x4cd9,
-+      0x2001, 0xb40c, 0x2004, 0xa084, 0x0003, 0x01c0, 0x2001, 0xb40c,
-+      0x2004, 0xd084, 0x1904, 0x4cbc, 0xa188, 0xb535, 0x2104, 0xa065,
-+      0x0904, 0x4cbc, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904,
-+      0x4cbc, 0x6000, 0xd0c4, 0x0904, 0x4cbc, 0x0068, 0xa188, 0xb535,
-+      0x2104, 0xa065, 0x0904, 0x4ca0, 0x6004, 0xa084, 0x00ff, 0xa08e,
-+      0x0006, 0x1904, 0x4ca5, 0x60a4, 0xa00d, 0x0118, 0x080c, 0x5195,
-+      0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, 0x51e0, 0x1170, 0x694c,
-+      0xd1fc, 0x1118, 0x080c, 0x4e9f, 0x0448, 0x080c, 0x4e4e, 0x694c,
-+      0xd1ec, 0x1520, 0x080c, 0x5087, 0x0408, 0x694c, 0xa184, 0xa000,
-+      0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, 0x080c, 0x5096, 0x0028,
-+      0x080c, 0x5096, 0x0028, 0xd1fc, 0x0118, 0x080c, 0x4e4e, 0x0070,
-+      0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
-+      0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x080c, 0x6c6f,
-+      0xa006, 0x012e, 0x0005, 0x2001, 0x0005, 0x2009, 0x0000, 0x04e8,
-+      0x2001, 0x0028, 0x2009, 0x0000, 0x04c0, 0xa082, 0x0006, 0x12a0,
-+      0x2001, 0xb435, 0x2004, 0xd0ac, 0x1160, 0x60a0, 0xd0bc, 0x1148,
-+      0x6100, 0xd1fc, 0x0904, 0x4c5b, 0x2001, 0x0029, 0x2009, 0x1000,
-+      0x0420, 0x2001, 0x0028, 0x00a8, 0x2009, 0xb40c, 0x210c, 0xd18c,
-+      0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,
-+      0x0040, 0x2001, 0x0029, 0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000,
-+      0x0060, 0x2009, 0x0000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000,
-+      0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x012e, 0x0005,
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x6844, 0x8007, 0xa084, 0x00ff,
-+      0x2008, 0xa182, 0x00ff, 0x1a04, 0x4d33, 0xa188, 0xb535, 0x2104,
-+      0xa065, 0x01c0, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11a8,
-+      0x2c70, 0x080c, 0x856a, 0x05e8, 0x2e00, 0x601a, 0x2d00, 0x6012,
-+      0x600b, 0xffff, 0x601f, 0x000a, 0x2009, 0x0003, 0x080c, 0x85ef,
-+      0xa006, 0x0460, 0x2001, 0x0028, 0x0440, 0xa082, 0x0006, 0x1298,
-+      0x2001, 0xb435, 0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc, 0x1140,
-+      0x6100, 0xd1fc, 0x09e8, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8,
-+      0x2001, 0x0028, 0x0090, 0x2009, 0xb40c, 0x210c, 0xd18c, 0x0118,
-+      0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028,
-+      0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0xa005, 0x012e, 0x00ee,
-+      0x0005, 0x2001, 0x002c, 0x0cc8, 0x00f6, 0x00e6, 0x0126, 0x2091,
-+      0x8000, 0x2011, 0x0000, 0x2079, 0xb400, 0x6944, 0xa18c, 0xff00,
-+      0x810f, 0xa182, 0x00ff, 0x1a04, 0x4e05, 0x2001, 0xb40c, 0x2004,
-+      0xa084, 0x0003, 0x1904, 0x4df3, 0x080c, 0x4f6a, 0x11a0, 0x6004,
-+      0xa084, 0x00ff, 0xa082, 0x0006, 0x1270, 0x6864, 0xa0c6, 0x006f,
-+      0x0150, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1904, 0x4dee, 0x60a0,
-+      0xd0bc, 0x1904, 0x4dee, 0x6864, 0xa0c6, 0x006f, 0x0118, 0x2008,
-+      0x0804, 0x4db7, 0x6968, 0x2140, 0xa18c, 0xff00, 0x810f, 0x78d4,
-+      0xd0ac, 0x1118, 0xa182, 0x0080, 0x06d0, 0xa182, 0x00ff, 0x16b8,
-+      0x6a70, 0x6b6c, 0x7870, 0xa306, 0x1160, 0x7874, 0xa24e, 0x1118,
-+      0x2208, 0x2310, 0x0460, 0xa9cc, 0xff00, 0x1118, 0x2208, 0x2310,
-+      0x0430, 0x080c, 0x3d81, 0x2c70, 0x0550, 0x2009, 0x0000, 0x2011,
-+      0x0000, 0xa0c6, 0x4000, 0x1160, 0x0006, 0x2e60, 0x080c, 0x520b,
-+      0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x0088,
-+      0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008, 0x1118,
-+      0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010, 0x2001,
-+      0x4006, 0x6866, 0x696a, 0x6a6e, 0x2001, 0x0030, 0x0450, 0x080c,
-+      0x856a, 0x1138, 0x2001, 0x4005, 0x2009, 0x0003, 0x2011, 0x0000,
-+      0x0c80, 0x2e00, 0x601a, 0x080c, 0x9fb8, 0x2d00, 0x6012, 0x601f,
-+      0x0001, 0x6838, 0xd88c, 0x0108, 0xc0f5, 0x683a, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x2c60, 0x012e, 0x2001, 0x0000, 0x080c, 0x4eac,
-+      0x2001, 0x0002, 0x080c, 0x4ebe, 0x2009, 0x0002, 0x080c, 0x85ef,
-+      0xa006, 0xa005, 0x012e, 0x00ee, 0x00fe, 0x0005, 0x2001, 0x0028,
-+      0x2009, 0x0000, 0x0cb0, 0x2009, 0xb40c, 0x210c, 0xd18c, 0x0118,
-+      0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
-+      0x2001, 0x0029, 0x2009, 0x0000, 0x0c20, 0x2001, 0x0029, 0x2009,
-+      0x0000, 0x08f8, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, 0x4000,
-+      0x16b8, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x12e0, 0xa188,
-+      0xb535, 0x2104, 0xa065, 0x01b8, 0x6004, 0xa084, 0x00ff, 0xa08e,
-+      0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120, 0x080c, 0x5096, 0x0431,
-+      0x0030, 0x0421, 0x684c, 0xd0fc, 0x0110, 0x080c, 0x5087, 0x080c,
-+      0x50d4, 0xa006, 0x00c8, 0x2001, 0x0028, 0x2009, 0x0000, 0x00a0,
-+      0xa082, 0x0006, 0x1240, 0x6100, 0xd1fc, 0x0d20, 0x2001, 0x0029,
-+      0x2009, 0x1000, 0x0048, 0x2001, 0x0029, 0x2009, 0x0000, 0x0020,
-+      0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00, 0x200a, 0x6803, 0x0000,
-+      0x6052, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000,
-+      0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c, 0xa005, 0x0170, 0x00e6,
-+      0x2071, 0xb6e0, 0x7004, 0xa086, 0x0002, 0x0168, 0x00ee, 0x604c,
-+      0x6802, 0x2d00, 0x604e, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e,
-+      0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06, 0x1d80, 0x604c, 0x2070,
-+      0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee, 0x012e, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108,
-+      0x6052, 0x604e, 0xad05, 0x012e, 0x0005, 0x604c, 0xa06d, 0x0130,
-+      0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x0005, 0x6803,
-+      0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00, 0x200a, 0x6086, 0x0005,
-+      0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126, 0x00c6, 0x0026, 0x2091,
-+      0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0110, 0xc285, 0x0008,
-+      0xc284, 0x6202, 0x002e, 0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6,
-+      0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0x0006, 0xa086, 0x0006,
-+      0x1180, 0x609c, 0xd0ac, 0x0168, 0x2001, 0xb453, 0x2004, 0xd0a4,
-+      0x0140, 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, 0x1110, 0x2011,
-+      0x0600, 0x000e, 0xa294, 0xff00, 0xa215, 0x6206, 0x0006, 0xa086,
-+      0x0006, 0x1128, 0x6290, 0x82ff, 0x1110, 0x080c, 0x1511, 0x000e,
-+      0x00ce, 0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218,
-+      0x2260, 0x6204, 0x0006, 0xa086, 0x0006, 0x1178, 0x609c, 0xd0a4,
-+      0x0160, 0x2001, 0xb453, 0x2004, 0xd0ac, 0x1138, 0xa284, 0x00ff,
-+      0xa086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0xa294, 0x00ff,
-+      0x8007, 0xa215, 0x6206, 0x00ce, 0x012e, 0x0005, 0x0026, 0xa182,
-+      0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0, 0xa190, 0xb535, 0x2204,
-+      0xa065, 0x1180, 0x0016, 0x00d6, 0x080c, 0x15db, 0x2d60, 0x00de,
-+      0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000,
-+      0x080c, 0x4bc5, 0xa006, 0x002e, 0x0005, 0x0126, 0x2091, 0x8000,
-+      0x0026, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, 0x0480, 0x00d6,
-+      0xa190, 0xb535, 0x2204, 0xa06d, 0x0540, 0x2013, 0x0000, 0x00d6,
-+      0x00c6, 0x2d60, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x160b, 0x60a8,
-+      0xa06d, 0x0110, 0x080c, 0x160b, 0x00ce, 0x00de, 0x00d6, 0x00c6,
-+      0x68ac, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6010, 0x2068,
-+      0x080c, 0x9beb, 0x0110, 0x080c, 0x161b, 0x080c, 0x85c0, 0x00ce,
-+      0x0c88, 0x00ce, 0x00de, 0x080c, 0x160b, 0x00de, 0xa006, 0x002e,
-+      0x012e, 0x0005, 0x0016, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001,
-+      0x0030, 0xa188, 0xb535, 0x2104, 0xa065, 0x0dc0, 0xa006, 0x001e,
-+      0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x600b, 0x0000, 0x600f,
-+      0x0000, 0x6000, 0xc08c, 0x6002, 0x080c, 0x5a90, 0x1558, 0x60a0,
-+      0xa086, 0x007e, 0x2069, 0xba90, 0x0130, 0x2001, 0xb435, 0x2004,
-+      0xd0ac, 0x1500, 0x0098, 0x2d04, 0xd0e4, 0x01e0, 0x00d6, 0x2069,
-+      0xba8e, 0x00c6, 0x2061, 0xb6b2, 0x6810, 0x2062, 0x6814, 0x6006,
-+      0x6818, 0x600a, 0x681c, 0x600e, 0x00ce, 0x00de, 0x8d69, 0x2d04,
-+      0x2069, 0x0140, 0xa005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
-+      0xb400, 0x68a6, 0x2069, 0xba8e, 0x6808, 0x605e, 0x6810, 0x6062,
-+      0x6138, 0xa10a, 0x0208, 0x603a, 0x6814, 0x6066, 0x2099, 0xba96,
-+      0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0xba9a,
-+      0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0xbaae,
-+      0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
-+      0x60a0, 0xa086, 0x007e, 0x1120, 0x2069, 0xba8e, 0x690c, 0x616e,
-+      0xa182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182, 0x0259,
-+      0x1218, 0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218, 0x2009,
-+      0x0006, 0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070,
-+      0xa182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182, 0x0581,
-+      0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x6192, 0x014e,
-+      0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071,
-+      0xba8d, 0x2e04, 0x6896, 0x2071, 0xba8e, 0x7004, 0x689a, 0x701c,
-+      0x689e, 0x6a00, 0x2009, 0xb472, 0x210c, 0xd0bc, 0x0120, 0xd1ec,
-+      0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0120, 0xd1e4, 0x0110,
-+      0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee, 0x002e, 0x001e, 0x0005,
-+      0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x01c0, 0x6900,
-+      0x81ff, 0x1540, 0x6a04, 0xa282, 0x0010, 0x1648, 0xad88, 0x0004,
-+      0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04,
-+      0x5042, 0x080c, 0x1511, 0x260a, 0x8210, 0x6a06, 0x0098, 0x080c,
-+      0x15f4, 0x01a8, 0x2d00, 0x60a6, 0x6803, 0x0000, 0xad88, 0x0004,
-+      0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x505a, 0x6807,
-+      0x0001, 0x6e12, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006,
-+      0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6, 0x60a4, 0xa00d, 0x01a0,
-+      0x2168, 0x6800, 0xa005, 0x1160, 0x080c, 0x5195, 0x1168, 0x200b,
-+      0xffff, 0x6804, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6806, 0x0020,
-+      0x080c, 0x160b, 0x60a7, 0x0000, 0x00de, 0x012e, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x51f3, 0x0010, 0x080c, 0x4e4e, 0x080c,
-+      0x510d, 0x1dd8, 0x080c, 0x50d4, 0x012e, 0x0005, 0x00d6, 0x0126,
-+      0x2091, 0x8000, 0x60a8, 0xa06d, 0x01c0, 0x6950, 0x81ff, 0x1540,
-+      0x6a54, 0xa282, 0x0010, 0x1670, 0xad88, 0x0018, 0x20a9, 0x0010,
-+      0x2104, 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04, 0x50a8, 0x080c,
-+      0x1511, 0x260a, 0x8210, 0x6a56, 0x0098, 0x080c, 0x15f4, 0x01d0,
-+      0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010,
-+      0x200b, 0xffff, 0x8108, 0x1f04, 0x50c0, 0x6857, 0x0001, 0x6e62,
-+      0x0010, 0x080c, 0x4e9f, 0x0089, 0x1de0, 0xa085, 0x0001, 0x012e,
-+      0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x080c,
-+      0x6c6f, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e,
-+      0x0126, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x1170,
-+      0x8dff, 0x01f8, 0x83ff, 0x0120, 0x6848, 0xa606, 0x0158, 0x0030,
-+      0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800,
-+      0x2068, 0x0c70, 0x080c, 0x80c8, 0x6a00, 0x604c, 0xad06, 0x1110,
-+      0x624e, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6152,
-+      0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e,
-+      0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff, 0x0120, 0x6848, 0xa606,
-+      0x0158, 0x0030, 0x683c, 0xa406, 0x1118, 0x6840, 0xa506, 0x0120,
-+      0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00, 0x6080, 0xad06, 0x1110,
-+      0x6282, 0x0018, 0xa180, 0x0000, 0x2202, 0x82ff, 0x1110, 0x6186,
-+      0x8dff, 0x0005, 0xa016, 0x080c, 0x518f, 0x1110, 0x2011, 0x0001,
-+      0x080c, 0x51da, 0x1110, 0xa295, 0x0002, 0x0005, 0x080c, 0x520b,
-+      0x0118, 0x080c, 0x9ca0, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c,
-+      0x520b, 0x0118, 0x080c, 0x9c30, 0x0010, 0xa085, 0x0001, 0x0005,
-+      0x080c, 0x520b, 0x0118, 0x080c, 0x9c83, 0x0010, 0xa085, 0x0001,
-+      0x0005, 0x080c, 0x520b, 0x0118, 0x080c, 0x9c4c, 0x0010, 0xa085,
-+      0x0001, 0x0005, 0x080c, 0x520b, 0x0118, 0x080c, 0x9cbc, 0x0010,
-+      0xa085, 0x0001, 0x0005, 0x0126, 0x0006, 0x00d6, 0x2091, 0x8000,
-+      0x6080, 0xa06d, 0x01a0, 0x6800, 0x0006, 0x6837, 0x0103, 0x6b4a,
-+      0x6847, 0x0000, 0x080c, 0x9e5d, 0x0006, 0x6000, 0xd0fc, 0x0110,
-+      0x080c, 0xb30c, 0x000e, 0x080c, 0x53c9, 0x000e, 0x0c50, 0x6083,
-+      0x0000, 0x6087, 0x0000, 0x00de, 0x000e, 0x012e, 0x0005, 0x60a4,
-+      0xa00d, 0x1118, 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7000,
-+      0xa005, 0x1168, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606,
-+      0x0130, 0x8108, 0x1f04, 0x519e, 0xa085, 0x0001, 0x0008, 0xa006,
-+      0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d,
-+      0x1128, 0x080c, 0x15f4, 0x01a0, 0x2d00, 0x60a6, 0x6803, 0x0001,
-+      0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff,
-+      0x8108, 0x1f04, 0x51be, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005,
-+      0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0xa06d,
-+      0x0130, 0x60a7, 0x0000, 0x080c, 0x160b, 0xa085, 0x0001, 0x012e,
-+      0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118, 0xa085, 0x0001, 0x0005,
-+      0x00e6, 0x2170, 0x7050, 0xa005, 0x1160, 0x20a9, 0x0010, 0xae88,
-+      0x0018, 0x2104, 0xa606, 0x0128, 0x8108, 0x1f04, 0x51e9, 0xa085,
-+      0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x0c19, 0x1188,
-+      0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002,
-+      0x0218, 0x8001, 0x6856, 0x0020, 0x080c, 0x160b, 0x60ab, 0x0000,
-+      0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4, 0x0005, 0x00f6, 0x080c,
-+      0x5a90, 0x01b0, 0x71b8, 0x81ff, 0x1198, 0x71d4, 0xd19c, 0x0180,
-+      0x2001, 0x007e, 0xa080, 0xb535, 0x2004, 0xa07d, 0x0148, 0x7804,
-+      0xa084, 0x00ff, 0xa086, 0x0006, 0x1118, 0x7800, 0xc0ed, 0x7802,
-+      0x2079, 0xb452, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x00c6, 0x20a9,
-+      0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x4f6a, 0x1168, 0x6004,
-+      0xa084, 0xff00, 0x8007, 0xa096, 0x0004, 0x0118, 0xa086, 0x0006,
-+      0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108, 0x1f04, 0x5233,
-+      0x00ce, 0x015e, 0x080c, 0x52ca, 0x0120, 0x2001, 0xb6b5, 0x200c,
-+      0x0038, 0x2079, 0xb452, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0,
-+      0x2011, 0x525e, 0x080c, 0x69e7, 0x00fe, 0x0005, 0x2011, 0x525e,
-+      0x080c, 0x6961, 0x080c, 0x52ca, 0x01f0, 0x2001, 0xb5b3, 0x2004,
-+      0xa080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x2001, 0xb453, 0x2004,
-+      0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011, 0x525e, 0x080c, 0x69e7,
-+      0x00e6, 0x2071, 0xb400, 0x7073, 0x0000, 0x7077, 0x0000, 0x080c,
-+      0x2a7e, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009,
-+      0x0000, 0x0016, 0x080c, 0x4f6a, 0x1530, 0x6000, 0xd0ec, 0x0518,
-+      0x0046, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029,
-+      0x080c, 0xb06b, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084,
-+      0x00ff, 0xa085, 0x0700, 0x6006, 0x2019, 0x0029, 0x080c, 0x6dba,
-+      0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2009, 0x0000, 0x080c,
-+      0xae05, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x5289, 0x00ce,
-+      0x015e, 0x0005, 0x00c6, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002,
-+      0x00ce, 0x0005, 0x7818, 0x2004, 0xd0ac, 0x0005, 0x7818, 0x2004,
-+      0xd0bc, 0x0005, 0x00f6, 0x2001, 0xb5b3, 0x2004, 0xa07d, 0x0110,
-+      0x7800, 0xd0ec, 0x00fe, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000,
-+      0x0006, 0x62a0, 0xa290, 0xb535, 0x2204, 0xac06, 0x190c, 0x1511,
-+      0x000e, 0x6200, 0xa005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0x6202,
-+      0x002e, 0x012e, 0x0005, 0x2011, 0xb435, 0x2204, 0xd0cc, 0x0138,
-+      0x2001, 0xb6b3, 0x200c, 0x2011, 0x52f8, 0x080c, 0x69e7, 0x0005,
-+      0x2011, 0x52f8, 0x080c, 0x6961, 0x2011, 0xb435, 0x2204, 0xc0cc,
-+      0x2012, 0x0005, 0x2071, 0xb514, 0x7003, 0x0001, 0x7007, 0x0000,
-+      0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000,
-+      0x700b, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020,
-+      0x705f, 0x0040, 0x707f, 0x0000, 0x2071, 0xb67d, 0x7003, 0xb514,
-+      0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0xb65d, 0x7013, 0x0020,
-+      0x7017, 0x0040, 0x7037, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071,
-+      0xb635, 0xa00e, 0x7186, 0x718a, 0x7097, 0x0001, 0x2001, 0xb453,
-+      0x2004, 0xd0fc, 0x1150, 0x2001, 0xb453, 0x2004, 0xa00e, 0xd09c,
-+      0x0108, 0x8108, 0x7102, 0x0804, 0x5393, 0x2001, 0xb472, 0x200c,
-+      0xa184, 0x000f, 0x2009, 0xb473, 0x210c, 0x0002, 0x533b, 0x536e,
-+      0x5375, 0x537f, 0x5384, 0x533b, 0x533b, 0x533b, 0x535e, 0x533b,
-+      0x533b, 0x533b, 0x533b, 0x533b, 0x533b, 0x533b, 0x7003, 0x0004,
-+      0x0136, 0x0146, 0x0156, 0x2099, 0xb476, 0x20a1, 0xb686, 0x20a9,
-+      0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x0428, 0x708f, 0x0005,
-+      0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, 0x0002, 0x7007,
-+      0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, 0x0088, 0x7007,
-+      0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, 0x2001, 0x0003,
-+      0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, 0x8007, 0x709a,
-+      0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071,
-+      0xb514, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085,
-+      0x0001, 0x0428, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e,
-+      0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, 0x7032,
-+      0x2009, 0x000d, 0x200a, 0x700b, 0x0000, 0x8007, 0x8006, 0x8006,
-+      0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e,
-+      0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x00ee,
-+      0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904, 0x5422,
-+      0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0xb400, 0xa016, 0x702c,
-+      0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e,
-+      0x70b4, 0xa200, 0x70b6, 0x00de, 0x2071, 0xb514, 0x701c, 0xa005,
-+      0x1904, 0x5432, 0x20a9, 0x0032, 0x0f04, 0x5430, 0x0e04, 0x53ec,
-+      0x2071, 0xb635, 0x7200, 0x82ff, 0x05d8, 0x6934, 0xa186, 0x0103,
-+      0x1904, 0x5440, 0x6948, 0x6844, 0xa105, 0x1540, 0x2009, 0x8020,
-+      0x2200, 0x0002, 0x5430, 0x5407, 0x5458, 0x5464, 0x5430, 0x2071,
-+      0x0000, 0x20a9, 0x0032, 0x0f04, 0x5430, 0x7018, 0xd084, 0x1dd8,
-+      0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091,
-+      0x4080, 0x2071, 0xb400, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70b4,
-+      0x8000, 0x70b6, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844, 0xa086,
-+      0x0100, 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020, 0x0880,
-+      0x2071, 0xb514, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012,
-+      0x7018, 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x0c10,
-+      0xa18c, 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118,
-+      0xa18e, 0x001f, 0x1d28, 0x684c, 0xd0cc, 0x0d10, 0x6850, 0xa084,
-+      0x00ff, 0xa086, 0x0001, 0x19e0, 0x2009, 0x8021, 0x0804, 0x5400,
-+      0x7084, 0x8008, 0xa092, 0x001e, 0x1a98, 0x7186, 0xae90, 0x0003,
-+      0xa210, 0x683c, 0x2012, 0x0078, 0x7084, 0x8008, 0xa092, 0x000f,
-+      0x1a38, 0x7186, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012,
-+      0x8210, 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04, 0x5419, 0x718c,
-+      0x7084, 0xa10a, 0x0a04, 0x5419, 0x2071, 0x0000, 0x7018, 0xd084,
-+      0x1904, 0x5419, 0x2071, 0xb635, 0x7000, 0xa086, 0x0002, 0x1150,
-+      0x080c, 0x56e3, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080,
-+      0x0804, 0x5419, 0x080c, 0x570d, 0x2071, 0x0000, 0x701b, 0x0001,
-+      0x2091, 0x4080, 0x0804, 0x5419, 0x0006, 0x684c, 0x0006, 0x6837,
-+      0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000,
-+      0x40a4, 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e, 0x684a, 0x6952,
-+      0x0005, 0x2071, 0xb514, 0x7004, 0x0002, 0x54bf, 0x54d0, 0x56ce,
-+      0x56cf, 0x56dc, 0x56e2, 0x54c0, 0x56bf, 0x5655, 0x56ab, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x0e04, 0x54cf, 0x2009, 0x000d, 0x7030,
-+      0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x700b, 0x0000, 0x012e,
-+      0x2069, 0xb6f3, 0x683c, 0xa005, 0x03f8, 0x11f0, 0x0126, 0x2091,
-+      0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0xb520, 0x2004, 0xa10a,
-+      0x0170, 0x0e04, 0x54f3, 0x2069, 0x0000, 0x6818, 0xd084, 0x1158,
-+      0x2009, 0x8040, 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x2069,
-+      0xb6f3, 0x683f, 0xffff, 0x012e, 0x2069, 0xb400, 0x6848, 0x6968,
-+      0xa102, 0x2069, 0xb635, 0x688a, 0x6984, 0x701c, 0xa06d, 0x0120,
-+      0x81ff, 0x0904, 0x5549, 0x00a0, 0x81ff, 0x0904, 0x560f, 0x2071,
-+      0xb635, 0x7184, 0x7088, 0xa10a, 0x1258, 0x7190, 0x2071, 0xb6f3,
-+      0x7038, 0xa005, 0x0128, 0x1b04, 0x560f, 0x713a, 0x0804, 0x560f,
-+      0x2071, 0xb635, 0x718c, 0x0126, 0x2091, 0x8000, 0x7084, 0xa10a,
-+      0x0a04, 0x562a, 0x0e04, 0x55cb, 0x2071, 0x0000, 0x7018, 0xd084,
-+      0x1904, 0x55cb, 0x2001, 0xffff, 0x2071, 0xb6f3, 0x703a, 0x2071,
-+      0xb635, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c, 0x56e3, 0x2071,
-+      0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x55cb, 0x080c,
-+      0x570d, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804,
-+      0x55cb, 0x2071, 0xb635, 0x7000, 0xa005, 0x0904, 0x55f1, 0x6934,
-+      0xa186, 0x0103, 0x1904, 0x55ce, 0x684c, 0xd0bc, 0x1904, 0x55f1,
-+      0x6948, 0x6844, 0xa105, 0x1904, 0x55e6, 0x2009, 0x8020, 0x2071,
-+      0xb635, 0x7000, 0x0002, 0x55f1, 0x55b1, 0x5589, 0x559b, 0x5568,
-+      0x0136, 0x0146, 0x0156, 0x2099, 0xb476, 0x20a1, 0xb686, 0x20a9,
-+      0x0004, 0x53a3, 0x015e, 0x014e, 0x013e, 0x2071, 0xb67d, 0xad80,
-+      0x000f, 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000,
-+      0x2e10, 0x080c, 0x163f, 0x2071, 0xb514, 0x7007, 0x0009, 0x0804,
-+      0x560f, 0x7084, 0x8008, 0xa092, 0x001e, 0x1a04, 0x560f, 0xae90,
-+      0x0003, 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0xb514, 0x080c,
-+      0x5764, 0x0804, 0x560f, 0x7084, 0x8008, 0xa092, 0x000f, 0x1a04,
-+      0x560f, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210,
-+      0x6840, 0x2012, 0x7186, 0x2071, 0xb514, 0x080c, 0x5764, 0x0804,
-+      0x560f, 0x0126, 0x2091, 0x8000, 0x0e04, 0x55cb, 0x2071, 0x0000,
-+      0x7018, 0xd084, 0x1180, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a,
-+      0x701b, 0x0001, 0x2091, 0x4080, 0x012e, 0x2071, 0xb514, 0x080c,
-+      0x5764, 0x0804, 0x560f, 0x012e, 0x0804, 0x560f, 0xa18c, 0x00ff,
-+      0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e, 0x001f,
-+      0x11c0, 0x684c, 0xd0cc, 0x01a8, 0x6850, 0xa084, 0x00ff, 0xa086,
-+      0x0001, 0x1178, 0x2009, 0x8021, 0x0804, 0x555f, 0x6844, 0xa086,
-+      0x0100, 0x1138, 0x6868, 0xa005, 0x1120, 0x2009, 0x8020, 0x0804,
-+      0x555f, 0x2071, 0xb514, 0x080c, 0x5776, 0x01c8, 0x2071, 0xb514,
-+      0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003, 0x1130,
-+      0x810f, 0xa18c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x7007, 0x0003,
-+      0x080c, 0x578f, 0x7050, 0xa086, 0x0100, 0x0904, 0x56cf, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0xb514, 0x7008, 0xa086, 0x0001, 0x1180,
-+      0x0e04, 0x5628, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, 0x4080,
-+      0x700b, 0x0000, 0x7004, 0xa086, 0x0006, 0x1110, 0x7007, 0x0001,
-+      0x012e, 0x0005, 0x2071, 0xb514, 0x080c, 0x5776, 0x0518, 0x2071,
-+      0xb635, 0x7084, 0x700a, 0x20a9, 0x0020, 0x2099, 0xb636, 0x20a1,
-+      0xb65d, 0x53a3, 0x7087, 0x0000, 0x2071, 0xb514, 0x2069, 0xb67d,
-+      0x706c, 0x6826, 0x7070, 0x682a, 0x7074, 0x682e, 0x7078, 0x6832,
-+      0x2d10, 0x080c, 0x163f, 0x7007, 0x0008, 0x2001, 0xffff, 0x2071,
-+      0xb6f3, 0x703a, 0x012e, 0x0804, 0x560f, 0x2069, 0xb67d, 0x6808,
-+      0xa08e, 0x0000, 0x0904, 0x56aa, 0xa08e, 0x0200, 0x0904, 0x56a8,
-+      0xa08e, 0x0100, 0x1904, 0x56aa, 0x0126, 0x2091, 0x8000, 0x0e04,
-+      0x56a6, 0x2069, 0x0000, 0x6818, 0xd084, 0x15c0, 0x702c, 0x7130,
-+      0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
-+      0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081,
-+      0x0000, 0x7072, 0x7132, 0x6936, 0x700b, 0x0000, 0x2001, 0xb65a,
-+      0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0xb635, 0x689c, 0x699e,
-+      0x2069, 0xb6f3, 0xa102, 0x1118, 0x683c, 0xa005, 0x1368, 0x2001,
-+      0xb65b, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009, 0x8040, 0x6922,
-+      0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x012e, 0x0010,
-+      0x7007, 0x0005, 0x0005, 0x2001, 0xb67f, 0x2004, 0xa08e, 0x0100,
-+      0x1128, 0x7007, 0x0001, 0x080c, 0x5764, 0x0005, 0xa08e, 0x0000,
-+      0x0de0, 0xa08e, 0x0200, 0x1dc8, 0x7007, 0x0005, 0x0005, 0x701c,
-+      0xa06d, 0x0158, 0x080c, 0x5776, 0x0140, 0x7007, 0x0003, 0x080c,
-+      0x578f, 0x7050, 0xa086, 0x0100, 0x0110, 0x0005, 0x0005, 0x7050,
-+      0xa09e, 0x0100, 0x1118, 0x7007, 0x0004, 0x0030, 0xa086, 0x0200,
-+      0x1110, 0x7007, 0x0005, 0x0005, 0x080c, 0x5732, 0x7006, 0x080c,
-+      0x5764, 0x0005, 0x0005, 0x00e6, 0x0156, 0x2071, 0xb635, 0x7184,
-+      0x81ff, 0x0500, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071, 0x0000,
-+      0x21a8, 0x2014, 0x7226, 0x8000, 0x0f04, 0x5707, 0x2014, 0x722a,
-+      0x8000, 0x0f04, 0x5707, 0x2014, 0x722e, 0x8000, 0x0f04, 0x5707,
-+      0x2014, 0x723a, 0x8000, 0x0f04, 0x5707, 0x2014, 0x723e, 0xa180,
-+      0x8030, 0x7022, 0x015e, 0x00ee, 0x0005, 0x00e6, 0x0156, 0x2071,
-+      0xb635, 0x7184, 0x81ff, 0x01d8, 0xa006, 0x7086, 0xae80, 0x0003,
-+      0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, 0x2014, 0x722a,
-+      0x8000, 0x0f04, 0x5729, 0x2014, 0x723a, 0x8000, 0x2014, 0x723e,
-+      0x0018, 0x2001, 0x8020, 0x0010, 0x2001, 0x8042, 0x7022, 0x015e,
-+      0x00ee, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e,
-+      0x7034, 0x706e, 0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040,
-+      0x706e, 0x1220, 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c,
-+      0x8001, 0x700e, 0x1180, 0x0126, 0x2091, 0x8000, 0x0e04, 0x575e,
-+      0x2001, 0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x700b,
-+      0x0000, 0x012e, 0x0005, 0x2001, 0x0007, 0x0005, 0x2001, 0x0006,
-+      0x700b, 0x0001, 0x012e, 0x0005, 0x701c, 0xa06d, 0x0170, 0x0126,
-+      0x2091, 0x8000, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005,
-+      0x1108, 0x701a, 0x012e, 0x080c, 0x160b, 0x0005, 0x2019, 0x000d,
-+      0x2304, 0x230c, 0xa10e, 0x0130, 0x2304, 0x230c, 0xa10e, 0x0110,
-+      0xa006, 0x0060, 0x732c, 0x8319, 0x7130, 0xa102, 0x1118, 0x2300,
-+      0xa005, 0x0020, 0x0210, 0xa302, 0x0008, 0x8002, 0x0005, 0x2d00,
-+      0x7026, 0xa080, 0x000d, 0x7056, 0x7053, 0x0000, 0x0126, 0x2091,
-+      0x8000, 0x2009, 0xb712, 0x2104, 0xc08d, 0x200a, 0x012e, 0x080c,
-+      0x1657, 0x0005, 0x708c, 0xa08a, 0x0029, 0x1220, 0xa082, 0x001d,
-+      0x0033, 0x0010, 0x080c, 0x1511, 0x6027, 0x1e00, 0x0005, 0x589d,
-+      0x5818, 0x5830, 0x586d, 0x588e, 0x58c8, 0x58da, 0x5830, 0x58b4,
-+      0x57bc, 0x57ea, 0x57bb, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
-+      0xa005, 0x1180, 0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069,
-+      0xb6c5, 0x2d04, 0x7002, 0x080c, 0x5b92, 0x6028, 0xa085, 0x0600,
-+      0x602a, 0x00b0, 0x708f, 0x0028, 0x2069, 0xb6c5, 0x2d04, 0x7002,
-+      0x6028, 0xa085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056,
-+      0x2071, 0xb723, 0x080c, 0x1dcd, 0x005e, 0x004e, 0x003e, 0x00ee,
-+      0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0xa005, 0x1180,
-+      0x6808, 0xa005, 0x1518, 0x708f, 0x0028, 0x2069, 0xb6c5, 0x2d04,
-+      0x7002, 0x080c, 0x5c1f, 0x6028, 0xa085, 0x0600, 0x602a, 0x00b0,
-+      0x708f, 0x0028, 0x2069, 0xb6c5, 0x2d04, 0x7002, 0x6028, 0xa085,
-+      0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0xb723,
-+      0x080c, 0x1dcd, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
-+      0x6803, 0x0090, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x5945, 0xd1d4,
-+      0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x708f, 0x0020, 0x080c,
-+      0x5945, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005,
-+      0x6803, 0x0088, 0x6124, 0xd1cc, 0x1590, 0xd1dc, 0x1568, 0xd1e4,
-+      0x1540, 0xa184, 0x1e00, 0x1580, 0x60e3, 0x0001, 0x600c, 0xc0b4,
-+      0x600e, 0x080c, 0x5ac0, 0x080c, 0x2479, 0x0156, 0x6803, 0x0100,
-+      0x20a9, 0x0014, 0x6804, 0xd0dc, 0x1118, 0x1f04, 0x584a, 0x0048,
-+      0x20a9, 0x0014, 0x6803, 0x0080, 0x6804, 0xd0d4, 0x1130, 0x1f04,
-+      0x5854, 0x080c, 0x5ae1, 0x015e, 0x0078, 0x015e, 0x708f, 0x0028,
-+      0x0058, 0x708f, 0x001e, 0x0040, 0x708f, 0x001d, 0x0028, 0x708f,
-+      0x0020, 0x0010, 0x708f, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c,
-+      0xc0b4, 0x600e, 0x080c, 0x5ac0, 0x080c, 0x2479, 0x6803, 0x0080,
-+      0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0xa184,
-+      0x1e00, 0x1158, 0x708f, 0x0028, 0x0040, 0x708f, 0x001e, 0x0028,
-+      0x708f, 0x001d, 0x0010, 0x708f, 0x001f, 0x0005, 0x6803, 0x00a0,
-+      0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1e18, 0x708f,
-+      0x001e, 0x0010, 0x708f, 0x001d, 0x0005, 0x080c, 0x59b7, 0x6124,
-+      0xd1dc, 0x1188, 0x080c, 0x5945, 0x0016, 0x080c, 0x1e18, 0x001e,
-+      0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x708f, 0x001e, 0x0020, 0x708f,
-+      0x001f, 0x080c, 0x5945, 0x0005, 0x6803, 0x00a0, 0x6124, 0xd1d4,
-+      0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x708f,
-+      0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f, 0x0021, 0x0005,
-+      0x080c, 0x59b7, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
-+      0x0140, 0x708f, 0x001e, 0x0028, 0x708f, 0x001d, 0x0010, 0x708f,
-+      0x001f, 0x0005, 0x6803, 0x0090, 0x6124, 0xd1d4, 0x1178, 0xd1cc,
-+      0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x708f, 0x001e, 0x0040,
-+      0x708f, 0x001d, 0x0028, 0x708f, 0x0020, 0x0010, 0x708f, 0x001f,
-+      0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100,
-+      0x2069, 0x0140, 0x2071, 0xb400, 0x2091, 0x8000, 0x080c, 0x5a90,
-+      0x11e8, 0x2001, 0xb40c, 0x200c, 0xd1b4, 0x01c0, 0xc1b4, 0x2102,
-+      0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc, 0x0158, 0x6803,
-+      0x00a0, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003,
-+      0x0001, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x5aac,
-+      0x0150, 0x080c, 0x5aa2, 0x1138, 0x2001, 0x0001, 0x080c, 0x2789,
-+      0x080c, 0x5a67, 0x00a0, 0x080c, 0x59b4, 0x0178, 0x2001, 0x0001,
-+      0x080c, 0x2789, 0x708c, 0xa086, 0x001e, 0x0120, 0x708c, 0xa086,
-+      0x0022, 0x1118, 0x708f, 0x0025, 0x0010, 0x708f, 0x0021, 0x012e,
-+      0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x5956,
-+      0x080c, 0x6a21, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011,
-+      0x5956, 0x080c, 0x6a18, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6,
-+      0x0016, 0x080c, 0x7d24, 0x2071, 0xb400, 0x080c, 0x58f1, 0x001e,
-+      0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+      0x00e6, 0x00f6, 0x0126, 0x080c, 0x7d24, 0x2061, 0x0100, 0x2069,
-+      0x0140, 0x2071, 0xb400, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a,
-+      0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029,
-+      0x080c, 0x7f03, 0x080c, 0x69d5, 0x0036, 0x2019, 0x0000, 0x080c,
-+      0x7f8e, 0x003e, 0x60e3, 0x0000, 0x080c, 0xb3b2, 0x080c, 0xb3cd,
-+      0x2001, 0xb400, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x12d9,
-+      0x2001, 0x0001, 0x080c, 0x2789, 0x012e, 0x00fe, 0x00ee, 0x00de,
-+      0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x2001, 0xb400, 0x2004,
-+      0xa086, 0x0004, 0x0140, 0x2001, 0xb69e, 0x2003, 0xaaaa, 0x2001,
-+      0xb69f, 0x2003, 0x0000, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800,
-+      0xa086, 0x00c0, 0x0160, 0x6803, 0x00c0, 0x0156, 0x20a9, 0x002d,
-+      0x1d04, 0x59c0, 0x2091, 0x6000, 0x1f04, 0x59c0, 0x015e, 0x0005,
-+      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-+      0xb400, 0x2001, 0xb69f, 0x200c, 0xa186, 0x0000, 0x0158, 0xa186,
-+      0x0001, 0x0158, 0xa186, 0x0002, 0x0158, 0xa186, 0x0003, 0x0158,
-+      0x0804, 0x5a55, 0x708f, 0x0022, 0x0040, 0x708f, 0x0021, 0x0028,
-+      0x708f, 0x0023, 0x0020, 0x708f, 0x0024, 0x6043, 0x0000, 0x60e3,
-+      0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2838, 0x0026,
-+      0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029,
-+      0x080c, 0x7f03, 0x0036, 0x2019, 0x0000, 0x080c, 0x7f8e, 0x003e,
-+      0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010,
-+      0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005,
-+      0x6024, 0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804, 0x5a63, 0x6800,
-+      0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6904, 0xd1d4, 0x1130, 0x6803,
-+      0x0100, 0x1f04, 0x5a18, 0x080c, 0x5ae1, 0x012e, 0x015e, 0x080c,
-+      0x5aa2, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050, 0x0006, 0xa085,
-+      0x0020, 0x6052, 0x080c, 0x5ae1, 0xa006, 0x8001, 0x1df0, 0x000e,
-+      0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x5ae1, 0x0016,
-+      0x0026, 0x2009, 0x00c8, 0x2011, 0x5963, 0x080c, 0x69e7, 0x002e,
-+      0x001e, 0x2001, 0xb69f, 0x2003, 0x0004, 0x080c, 0x57a2, 0x080c,
-+      0x5aa2, 0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100, 0x2001,
-+      0xb69f, 0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6,
-+      0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb400,
-+      0x2001, 0xb69e, 0x2003, 0x0000, 0x2001, 0xb68f, 0x2003, 0x0000,
-+      0x708f, 0x0000, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000,
-+      0x080c, 0x2838, 0x6803, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010,
-+      0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005,
-+      0x0006, 0x2001, 0xb69e, 0x2004, 0xa086, 0xaaaa, 0x000e, 0x0005,
-+      0x0006, 0x2001, 0xb472, 0x2004, 0xa084, 0x0030, 0xa086, 0x0000,
-+      0x000e, 0x0005, 0x0006, 0x2001, 0xb472, 0x2004, 0xa084, 0x0030,
-+      0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001, 0xb472, 0x2004,
-+      0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005, 0x0006, 0x2001,
-+      0xb472, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020, 0x000e, 0x0005,
-+      0x2001, 0xb40c, 0x2004, 0xd0a4, 0x0170, 0x080c, 0x2858, 0x0036,
-+      0x0016, 0x2009, 0x0000, 0x2019, 0x0028, 0x080c, 0x2c33, 0x001e,
-+      0x003e, 0xa006, 0x0009, 0x0005, 0x00e6, 0x2071, 0xb40c, 0x2e04,
-+      0x0118, 0xa085, 0x0010, 0x0010, 0xa084, 0xffef, 0x2072, 0x00ee,
-+      0x0005, 0x6050, 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c,
-+      0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, 0x602f,
-+      0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e,
-+      0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2, 0x60e3,
-+      0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2838, 0x6800,
-+      0xa084, 0x00a0, 0xc0bd, 0x6802, 0x6803, 0x00a0, 0x000e, 0x6052,
-+      0x6050, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0xb400, 0x6020,
-+      0xa084, 0x0080, 0x0138, 0x2001, 0xb40c, 0x200c, 0xc1bd, 0x2102,
-+      0x0804, 0x5b8a, 0x2001, 0xb40c, 0x200c, 0xc1bc, 0x2102, 0x6028,
-+      0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x6803, 0x0090, 0x20a9,
-+      0x0384, 0x6024, 0xd0cc, 0x1508, 0x1d04, 0x5b39, 0x2091, 0x6000,
-+      0x1f04, 0x5b39, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011, 0x0002,
-+      0x080c, 0x8029, 0x080c, 0x7f03, 0x2019, 0x0000, 0x080c, 0x7f8e,
-+      0x6803, 0x00a0, 0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400,
-+      0x2003, 0x0001, 0xa085, 0x0001, 0x0468, 0x86ff, 0x1110, 0x080c,
-+      0x1e18, 0x60e3, 0x0000, 0x2001, 0xb68f, 0x2004, 0x080c, 0x2838,
-+      0x60e2, 0x080c, 0x2479, 0x6803, 0x0080, 0x20a9, 0x0384, 0x6027,
-+      0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, 0xa10c, 0x0138, 0x1d04,
-+      0x5b6f, 0x2091, 0x6000, 0x1f04, 0x5b6f, 0x0820, 0x6028, 0xa085,
-+      0x1e00, 0x602a, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008,
-+      0x6886, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-+      0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+      0x00e6, 0x2061, 0x0100, 0x2071, 0xb400, 0x2069, 0x0140, 0x6020,
-+      0xa084, 0x00c0, 0x0120, 0x6884, 0xa005, 0x1904, 0x5be6, 0x6803,
-+      0x0088, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000, 0x080c,
-+      0x2838, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118, 0x6808, 0xa005,
-+      0x01c0, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069,
-+      0xb6c5, 0x7000, 0x206a, 0x708f, 0x0026, 0x7003, 0x0001, 0x20a9,
-+      0x0002, 0x1d04, 0x5bc9, 0x2091, 0x6000, 0x1f04, 0x5bc9, 0x0804,
-+      0x5c17, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009,
-+      0x1e00, 0xe000, 0x6024, 0xa10c, 0x0520, 0xa084, 0x1a00, 0x1508,
-+      0x1d04, 0x5bd5, 0x2091, 0x6000, 0x1f04, 0x5bd5, 0x2011, 0x0003,
-+      0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03,
-+      0x2019, 0x0000, 0x080c, 0x7f8e, 0x6803, 0x00a0, 0x2001, 0xb69f,
-+      0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001,
-+      0x00b0, 0x080c, 0x2479, 0x6803, 0x0080, 0x2069, 0x0140, 0x60e3,
-+      0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
-+      0x2001, 0xb68f, 0x2004, 0x080c, 0x2838, 0x60e2, 0xa006, 0x00ee,
-+      0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
-+      0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
-+      0x2071, 0xb400, 0x6020, 0xa084, 0x00c0, 0x01e0, 0x2011, 0x0003,
-+      0x080c, 0x801f, 0x2011, 0x0002, 0x080c, 0x8029, 0x080c, 0x7f03,
-+      0x2019, 0x0000, 0x080c, 0x7f8e, 0x2069, 0x0140, 0x6803, 0x00a0,
-+      0x2001, 0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001,
-+      0x0804, 0x5cbc, 0x2001, 0xb40c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
-+      0x2102, 0x080c, 0x594b, 0x2069, 0x0140, 0x080c, 0x2479, 0x6803,
-+      0x0080, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118,
-+      0x6808, 0xa005, 0x01c0, 0x6028, 0xa084, 0xfdff, 0x602a, 0x6027,
-+      0x0200, 0x2069, 0xb6c5, 0x7000, 0x206a, 0x708f, 0x0027, 0x7003,
-+      0x0001, 0x20a9, 0x0002, 0x1d04, 0x5c73, 0x2091, 0x6000, 0x1f04,
-+      0x5c73, 0x0804, 0x5cbc, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000,
-+      0x6024, 0xa10c, 0x01c8, 0xa084, 0x1c00, 0x11b0, 0x1d04, 0x5c7b,
-+      0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x68be, 0x00ee,
-+      0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0xb6f3, 0x7018,
-+      0x00ee, 0xa005, 0x1d00, 0x0500, 0x0026, 0x2011, 0x5963, 0x080c,
-+      0x6961, 0x2011, 0x5956, 0x080c, 0x6a21, 0x002e, 0x2069, 0x0140,
-+      0x60e3, 0x0000, 0x70a4, 0xa005, 0x1118, 0x6887, 0x0001, 0x0008,
-+      0x6886, 0x2001, 0xb68f, 0x2004, 0x080c, 0x2838, 0x60e2, 0x2001,
-+      0xb40c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
-+      0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
-+      0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0xb400, 0x7130,
-+      0xd184, 0x1180, 0x2011, 0xb453, 0x2214, 0xd2ec, 0x0138, 0xc18d,
-+      0x7132, 0x2011, 0xb453, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c,
-+      0x0904, 0x5d29, 0x7130, 0xc185, 0x7132, 0x2011, 0xb453, 0x220c,
-+      0xd1a4, 0x0530, 0x0016, 0x2019, 0x000e, 0x080c, 0xafe8, 0x0156,
-+      0x20a9, 0x007f, 0x2009, 0x0000, 0xa186, 0x007e, 0x01a0, 0xa186,
-+      0x0080, 0x0188, 0x080c, 0x4f6a, 0x1170, 0x8127, 0xa006, 0x0016,
-+      0x2009, 0x000e, 0x080c, 0xb06b, 0x2009, 0x0001, 0x2011, 0x0100,
-+      0x080c, 0x6adf, 0x001e, 0x8108, 0x1f04, 0x5cf4, 0x015e, 0x001e,
-+      0xd1ac, 0x1148, 0x0016, 0x2009, 0x0000, 0x2019, 0x0004, 0x080c,
-+      0x2c33, 0x001e, 0x0070, 0x0156, 0x20a9, 0x007f, 0x2009, 0x0000,
-+      0x080c, 0x4f6a, 0x1110, 0x080c, 0x4bc5, 0x8108, 0x1f04, 0x5d20,
-+      0x015e, 0x080c, 0x1e18, 0x2011, 0x0003, 0x080c, 0x801f, 0x2011,
-+      0x0002, 0x080c, 0x8029, 0x080c, 0x7f03, 0x0036, 0x2019, 0x0000,
-+      0x080c, 0x7f8e, 0x003e, 0x60e3, 0x0000, 0x2001, 0xb400, 0x2003,
-+      0x0001, 0x080c, 0x59c8, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e,
-+      0x001e, 0x015e, 0x0005, 0x2071, 0xb4e2, 0x7003, 0x0000, 0x7007,
-+      0x0000, 0x700f, 0x0000, 0x702b, 0x0001, 0x704f, 0x0000, 0x7053,
-+      0x0001, 0x705f, 0x0020, 0x7063, 0x0040, 0x7083, 0x0000, 0x708b,
-+      0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, 0x0005, 0x00e6, 0x2071,
-+      0xb4e2, 0x6848, 0xa005, 0x1130, 0x7028, 0xc085, 0x702a, 0xa085,
-+      0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e,
-+      0x707a, 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032,
-+      0x2009, 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f,
-+      0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028,
-+      0xc084, 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x00ee,
-+      0x0005, 0x2b78, 0x2071, 0xb4e2, 0x7004, 0x0043, 0x700c, 0x0002,
-+      0x5da5, 0x5d9c, 0x5d9c, 0x5d9c, 0x5d9c, 0x0005, 0x5dfb, 0x5dfc,
-+      0x5e2e, 0x5e2f, 0x5df9, 0x5e7d, 0x5e82, 0x5eb3, 0x5eb4, 0x5ecf,
-+      0x5ed0, 0x5ed1, 0x5ed2, 0x5ed3, 0x5ed4, 0x5f8a, 0x5fb1, 0x700c,
-+      0x0002, 0x5dbe, 0x5df9, 0x5df9, 0x5dfa, 0x5dfa, 0x7830, 0x7930,
-+      0xa106, 0x0120, 0x7830, 0x7930, 0xa106, 0x1510, 0x7030, 0xa10a,
-+      0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, 0x0002, 0x12d0, 0x080c,
-+      0x15db, 0x01b0, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003,
-+      0x7057, 0x0000, 0x0126, 0x0006, 0x2091, 0x8000, 0x2009, 0xb712,
-+      0x2104, 0xc085, 0x200a, 0x000e, 0x700e, 0x012e, 0x080c, 0x1657,
-+      0x0005, 0x080c, 0x15db, 0x0de0, 0x2d00, 0x705a, 0x080c, 0x15db,
-+      0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004,
-+      0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, 0x0002, 0x5e03, 0x5e06,
-+      0x5e14, 0x5e2d, 0x5e2d, 0x080c, 0x5db7, 0x0005, 0x0126, 0x8001,
-+      0x700e, 0x7058, 0x0006, 0x080c, 0x6304, 0x0120, 0x2091, 0x8000,
-+      0x080c, 0x5db7, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c,
-+      0x6304, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
-+      0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x003a, 0x1218, 0x00db,
-+      0x012e, 0x0005, 0x012e, 0x080c, 0x5ed5, 0x0005, 0x0005, 0x0005,
-+      0x00e6, 0x2071, 0xb4e2, 0x700c, 0x0002, 0x5e3a, 0x5e3a, 0x5e3a,
-+      0x5e3c, 0x5e3f, 0x00ee, 0x0005, 0x700f, 0x0001, 0x0010, 0x700f,
-+      0x0002, 0x00ee, 0x0005, 0x5ed5, 0x5ed5, 0x5ef1, 0x5ed5, 0x606e,
-+      0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ef1, 0x60b0, 0x60f3,
-+      0x613c, 0x6150, 0x5ed5, 0x5ed5, 0x5f0d, 0x5ef1, 0x5ed5, 0x5ed5,
-+      0x5f67, 0x61fc, 0x6217, 0x5ed5, 0x5f0d, 0x5ed5, 0x5ed5, 0x5ed5,
-+      0x5ed5, 0x5f5d, 0x6217, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5,
-+      0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5f21, 0x5ed5, 0x5ed5, 0x5ed5,
-+      0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x6322, 0x5ed5,
-+      0x5ed5, 0x5ed5, 0x5ed5, 0x5ed5, 0x5f36, 0x7020, 0x2068, 0x080c,
-+      0x160b, 0x0005, 0x700c, 0x0002, 0x5e89, 0x5e8c, 0x5e9a, 0x5eb2,
-+      0x5eb2, 0x080c, 0x5db7, 0x0005, 0x0126, 0x8001, 0x700e, 0x7058,
-+      0x0006, 0x080c, 0x6304, 0x0120, 0x2091, 0x8000, 0x080c, 0x5db7,
-+      0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c, 0x6304, 0x7058,
-+      0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834,
-+      0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b, 0x012e, 0x0005,
-+      0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x5ed5, 0x5ef1, 0x605a,
-+      0x5ed5, 0x5ef1, 0x5ed5, 0x5ef1, 0x5ef1, 0x5ed5, 0x5ef1, 0x605a,
-+      0x5ef1, 0x5ef1, 0x5ef1, 0x5ef1, 0x5ef1, 0x5ed5, 0x5ef1, 0x605a,
-+      0x5ed5, 0x5ed5, 0x5ef1, 0x5ed5, 0x5ed5, 0x5ed5, 0x5ef1, 0x0005,
-+      0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007, 0x0001, 0x6838,
-+      0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c,
-+      0x53c9, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff,
-+      0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e,
-+      0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e, 0x0005, 0x7007,
-+      0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x53c9, 0x012e, 0x0005, 0x6834, 0x8007, 0xa084,
-+      0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x601a,
-+      0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x601a,
-+      0x0005, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0904, 0x5ee3, 0x8001,
-+      0x1120, 0x7007, 0x0001, 0x0804, 0x6037, 0x7007, 0x0006, 0x7012,
-+      0x2d00, 0x7016, 0x701a, 0x704b, 0x6037, 0x0005, 0x6834, 0x8007,
-+      0xa084, 0x00ff, 0xa086, 0x0001, 0x1904, 0x5ee3, 0x7007, 0x0001,
-+      0x2009, 0xb431, 0x210c, 0x81ff, 0x11a8, 0x6838, 0xa084, 0x00ff,
-+      0x683a, 0x6853, 0x0000, 0x080c, 0x4d3c, 0x1108, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x6837, 0x0139, 0x684a, 0x6952, 0x080c, 0x53c9,
-+      0x012e, 0x0ca0, 0x2001, 0x0028, 0x0c90, 0x684c, 0xa084, 0x00c0,
-+      0xa086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x622f, 0x2d00,
-+      0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098, 0x20a1,
-+      0xb50d, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x1a04, 0x5eff,
-+      0x6a84, 0xa28a, 0x0002, 0x1a04, 0x5eff, 0x82ff, 0x1138, 0x6888,
-+      0x698c, 0xa105, 0x0118, 0x2001, 0x5fed, 0x0018, 0xa280, 0x5fe3,
-+      0x2005, 0x70c6, 0x7010, 0xa015, 0x0904, 0x5fcf, 0x080c, 0x15db,
-+      0x1118, 0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060,
-+      0x2c05, 0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210,
-+      0xa00e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004,
-+      0x0108, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c,
-+      0x163f, 0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118,
-+      0x7007, 0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x160b, 0x7014,
-+      0x2068, 0x0804, 0x5eff, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807,
-+      0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x5f8a, 0x7014,
-+      0x2068, 0x7007, 0x0001, 0x6884, 0xa005, 0x1128, 0x6888, 0x698c,
-+      0xa105, 0x0108, 0x00b1, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e,
-+      0x0904, 0x622f, 0x04b8, 0x5fe5, 0x5fe9, 0x0002, 0x0011, 0x0007,
-+      0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x000a, 0x0011, 0x0005,
-+      0x0004, 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6f88, 0x6e8c,
-+      0x6804, 0x2060, 0xacf0, 0x0021, 0xacf8, 0x0027, 0x2009, 0x0005,
-+      0x700c, 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000, 0x7802,
-+      0x7e0e, 0x7f0a, 0x8109, 0x0128, 0xaef2, 0x0004, 0xaffa, 0x0006,
-+      0x0c78, 0x6004, 0xa065, 0x1d30, 0x006e, 0x007e, 0x00ce, 0x00ee,
-+      0x00fe, 0x0005, 0x2009, 0xb431, 0x210c, 0x81ff, 0x1198, 0x6838,
-+      0xa084, 0x00ff, 0x683a, 0x080c, 0x4c1e, 0x1108, 0x0005, 0x080c,
-+      0x549c, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e5d, 0x080c, 0x53c9,
-+      0x012e, 0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c80, 0x2009,
-+      0xb431, 0x210c, 0x81ff, 0x11b0, 0x6858, 0xa005, 0x01c0, 0x6838,
-+      0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x4ce0, 0x1108,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x684a, 0x6952, 0x080c, 0x53c9,
-+      0x012e, 0x0cb0, 0x2001, 0x0028, 0x2009, 0x0000, 0x0c90, 0x2001,
-+      0x0000, 0x0c78, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
-+      0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014,
-+      0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
-+      0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9,
-+      0x0001, 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x00ff,
-+      0xa096, 0x0002, 0x0178, 0xa005, 0x11f0, 0x6944, 0x810f, 0xa18c,
-+      0x00ff, 0x080c, 0x4f6a, 0x11b8, 0x0066, 0x6e50, 0x080c, 0x5069,
-+      0x006e, 0x0088, 0x0046, 0x2011, 0xb40c, 0x2224, 0xc484, 0x2412,
-+      0x004e, 0x00c6, 0x080c, 0x4f6a, 0x1110, 0x080c, 0x51ca, 0x8108,
-+      0x1f04, 0x609a, 0x00ce, 0x684c, 0xd084, 0x1118, 0x080c, 0x160b,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0xb453, 0x2004,
-+      0xd0a4, 0x0580, 0x2061, 0xb774, 0x6100, 0xd184, 0x0178, 0x6858,
-+      0xa084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005,
-+      0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001,
-+      0x6860, 0xa005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858,
-+      0xa084, 0x00ff, 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff,
-+      0x0148, 0x600a, 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e,
-+      0x0804, 0x62f3, 0x012e, 0x0804, 0x62ed, 0x012e, 0x0804, 0x62e7,
-+      0x012e, 0x0804, 0x62ea, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
-+      0x2001, 0xb453, 0x2004, 0xd0a4, 0x05e0, 0x2061, 0xb774, 0x6000,
-+      0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484,
-+      0x0003, 0x0170, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100,
-+      0xa210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0,
-+      0xa484, 0x000c, 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082,
-+      0x0004, 0x1120, 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004,
-+      0x1168, 0x2100, 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000,
-+      0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x62f3, 0x012e, 0x0804,
-+      0x62f0, 0x012e, 0x0804, 0x62ed, 0x0126, 0x2091, 0x8000, 0x7007,
-+      0x0001, 0x2061, 0xb774, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
-+      0x0220, 0x630a, 0x012e, 0x0804, 0x6301, 0x012e, 0x0804, 0x62f0,
-+      0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac,
-+      0x0148, 0x00c6, 0x2061, 0xb774, 0x6000, 0xa084, 0xfcff, 0x6002,
-+      0x00ce, 0x0448, 0x6858, 0xa005, 0x05d0, 0x685c, 0xa065, 0x0598,
-+      0x2001, 0xb431, 0x2004, 0xa005, 0x0118, 0x080c, 0x9dae, 0x0068,
-+      0x6013, 0x0400, 0x6057, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950,
-+      0x6156, 0x2009, 0x0041, 0x080c, 0x85ef, 0x6958, 0xa18c, 0xff00,
-+      0xa186, 0x2000, 0x1140, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff,
-+      0x080c, 0x6adf, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0xb774,
-+      0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
-+      0x012e, 0x0804, 0x62f3, 0x00ce, 0x012e, 0x0804, 0x62ed, 0x6954,
-+      0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x0045,
-+      0x0528, 0xa186, 0x002a, 0x1130, 0x2001, 0xb40c, 0x200c, 0xc194,
-+      0x2102, 0x08c8, 0xa186, 0x0020, 0x0170, 0xa186, 0x0029, 0x1d18,
-+      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4f6a, 0x1960, 0x6000,
-+      0xc0e4, 0x6002, 0x0840, 0x685c, 0xa065, 0x09a8, 0x6007, 0x0024,
-+      0x2001, 0xb6b6, 0x2004, 0x6016, 0x0804, 0x618b, 0x685c, 0xa065,
-+      0x0950, 0x00e6, 0x6860, 0xa075, 0x2001, 0xb431, 0x2004, 0xa005,
-+      0x0150, 0x080c, 0x9dae, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9dae,
-+      0x00ee, 0x0804, 0x618b, 0x6020, 0xc0dc, 0xc0d5, 0x6022, 0x2e60,
-+      0x6007, 0x003a, 0x6870, 0xa005, 0x0130, 0x6007, 0x003b, 0x6874,
-+      0x602a, 0x6878, 0x6012, 0x6003, 0x0001, 0x080c, 0x6c52, 0x080c,
-+      0x7134, 0x00ee, 0x0804, 0x618b, 0x2061, 0xb774, 0x6000, 0xd084,
-+      0x0190, 0xd08c, 0x1904, 0x6301, 0x0126, 0x2091, 0x8000, 0x6204,
-+      0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x6301, 0x012e, 0x6853,
-+      0x0016, 0x0804, 0x62fa, 0x6853, 0x0007, 0x0804, 0x62fa, 0x6834,
-+      0x8007, 0xa084, 0x00ff, 0x1118, 0x080c, 0x5ee3, 0x0078, 0x2030,
-+      0x8001, 0x1120, 0x7007, 0x0001, 0x0051, 0x0040, 0x7007, 0x0006,
-+      0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x622f, 0x0005, 0x00e6,
-+      0x0126, 0x2091, 0x8000, 0xa03e, 0x2009, 0xb431, 0x210c, 0x81ff,
-+      0x1904, 0x62ad, 0x2009, 0xb40c, 0x210c, 0xd194, 0x1904, 0x62d7,
-+      0x6848, 0x2070, 0xae82, 0xbc00, 0x0a04, 0x62a1, 0x2001, 0xb417,
-+      0x2004, 0xae02, 0x1a04, 0x62a1, 0x711c, 0xa186, 0x0006, 0x1904,
-+      0x6290, 0x7018, 0xa005, 0x0904, 0x62ad, 0x2004, 0xd0e4, 0x1904,
-+      0x62d2, 0x2061, 0xb774, 0x6100, 0xa184, 0x0301, 0xa086, 0x0001,
-+      0x1550, 0x7020, 0xd0dc, 0x1904, 0x62da, 0x6853, 0x0000, 0x6803,
-+      0x0000, 0x2d08, 0x7010, 0xa005, 0x1158, 0x7112, 0x684c, 0xd0f4,
-+      0x1904, 0x62dd, 0x2e60, 0x080c, 0x6a3b, 0x012e, 0x00ee, 0x0005,
-+      0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x2168, 0x684c, 0xd0f4,
-+      0x1904, 0x62dd, 0x012e, 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853,
-+      0x0006, 0x0804, 0x62fa, 0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8,
-+      0x6944, 0xa18c, 0xff00, 0x810f, 0x080c, 0x4f6a, 0x15d8, 0x6000,
-+      0xd0e4, 0x15c0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002,
-+      0x0498, 0x6853, 0x0008, 0x0480, 0x6853, 0x000e, 0x0468, 0x6853,
-+      0x0017, 0x0450, 0x6853, 0x0035, 0x0438, 0x2001, 0xb472, 0x2004,
-+      0xd0fc, 0x01e8, 0x6848, 0x2070, 0xae82, 0xbc00, 0x02c0, 0x605c,
-+      0xae02, 0x12a8, 0x711c, 0xa186, 0x0006, 0x1188, 0x7018, 0xa005,
-+      0x0170, 0x2004, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0xa086,
-+      0x0007, 0x1904, 0x623a, 0x7003, 0x0002, 0x0804, 0x623a, 0x6853,
-+      0x0028, 0x0010, 0x6853, 0x0029, 0x012e, 0x00ee, 0x0418, 0x6853,
-+      0x002a, 0x0cd0, 0x6853, 0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002,
-+      0x6017, 0x0014, 0x080c, 0xac63, 0x012e, 0x00ee, 0x0005, 0x2009,
-+      0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028,
-+      0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00,
-+      0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e,
-+      0x0005, 0x080c, 0x160b, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102,
-+      0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070,
-+      0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076,
-+      0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x6a32,
-+      0x00de, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x7007,
-+      0x0001, 0x6a44, 0xa282, 0x0004, 0x1a04, 0x636d, 0xd284, 0x0170,
-+      0x6a4c, 0xa290, 0xb535, 0x2204, 0xa065, 0x6004, 0x05e0, 0x8007,
-+      0xa084, 0x00ff, 0xa084, 0x0006, 0x1108, 0x04a8, 0x2c10, 0x080c,
-+      0x856a, 0x1118, 0x080c, 0x9e67, 0x05a0, 0x621a, 0x6844, 0x0002,
-+      0x634c, 0x6351, 0x6354, 0x635a, 0x2019, 0x0002, 0x080c, 0xafe8,
-+      0x0060, 0x080c, 0xaf7f, 0x0048, 0x2019, 0x0002, 0x6950, 0x080c,
-+      0xaf9a, 0x0018, 0x6950, 0x080c, 0xaf7f, 0x080c, 0x85c0, 0x6857,
-+      0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x53c9, 0x012e, 0x001e,
-+      0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0x6857, 0x0006, 0x0c88,
-+      0x6857, 0x0002, 0x0c70, 0x6857, 0x0005, 0x0c58, 0x6857, 0x0004,
-+      0x0c40, 0x6857, 0x0007, 0x0c28, 0x00d6, 0x2011, 0x0004, 0x2204,
-+      0xa085, 0x8002, 0x2012, 0x00de, 0x0005, 0x20e1, 0x0002, 0x3d08,
-+      0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0118, 0xa086, 0x1000,
-+      0x1570, 0x20e1, 0x0000, 0x3d00, 0xa094, 0xff00, 0x8217, 0xa084,
-+      0xf000, 0xa086, 0x3000, 0x1160, 0xa184, 0xff00, 0x8007, 0xa086,
-+      0x0008, 0x11e8, 0x080c, 0x2d83, 0x11d0, 0x080c, 0x65c4, 0x0098,
-+      0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x1108, 0x3e60, 0xac84, 0x0007,
-+      0x1170, 0xac82, 0xbc00, 0x0258, 0x685c, 0xac02, 0x1240, 0x2009,
-+      0x0047, 0x080c, 0x85ef, 0x7a1c, 0xd284, 0x1938, 0x0005, 0xa016,
-+      0x080c, 0x1856, 0x0cc0, 0x0cd8, 0x781c, 0xd08c, 0x0500, 0x0156,
-+      0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0076,
-+      0x1538, 0xa484, 0x7000, 0xa086, 0x1000, 0x11a8, 0x080c, 0x643f,
-+      0x01f8, 0x20e1, 0x3000, 0x7828, 0x7828, 0x080c, 0x645b, 0x014e,
-+      0x013e, 0x015e, 0x2009, 0xb6e8, 0x2104, 0xa005, 0x1108, 0x0005,
-+      0x080c, 0x7134, 0x0ce0, 0xa484, 0x7000, 0x1548, 0x080c, 0x643f,
-+      0x01d8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x0d10, 0x00a0,
-+      0xd5a4, 0x0178, 0x0056, 0x0046, 0x080c, 0x1e3f, 0x080c, 0x2479,
-+      0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x004e, 0x005e,
-+      0x0048, 0x04a9, 0x6887, 0x0000, 0x080c, 0xb362, 0x20e1, 0x3000,
-+      0x7828, 0x7828, 0x00b9, 0x014e, 0x013e, 0x015e, 0x0880, 0x0439,
-+      0x1130, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x1d68, 0x080c,
-+      0xb362, 0x20e1, 0x3000, 0x7828, 0x7828, 0x0056, 0x080c, 0x6839,
-+      0x005e, 0x0c40, 0x2001, 0xb40e, 0x2004, 0xd08c, 0x0178, 0x2001,
-+      0xb400, 0x2004, 0xa086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011,
-+      0x8048, 0x2518, 0x080c, 0x3e8a, 0x003e, 0x002e, 0x0005, 0xa484,
-+      0x01ff, 0x6886, 0xa005, 0x0160, 0xa080, 0x001f, 0xa084, 0x03f8,
-+      0x80ac, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x0005,
-+      0x20a9, 0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5,
-+      0xa085, 0x0001, 0x0ca0, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000,
-+      0x8007, 0xa196, 0x0000, 0x1118, 0x0804, 0x66c9, 0x0005, 0xa196,
-+      0x2000, 0x1148, 0x6900, 0xa18e, 0x0001, 0x1118, 0x080c, 0x4449,
-+      0x0ca8, 0x0039, 0x0c98, 0xa196, 0x8000, 0x1d80, 0x080c, 0x6779,
-+      0x0c68, 0x00c6, 0x6a84, 0x82ff, 0x0904, 0x65be, 0x7110, 0xa18c,
-+      0xff00, 0x810f, 0xa196, 0x0001, 0x0120, 0xa196, 0x0023, 0x1904,
-+      0x65be, 0xa08e, 0x0023, 0x1570, 0x080c, 0x6814, 0x0904, 0x65be,
-+      0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1150, 0x7034, 0xa005,
-+      0x1904, 0x65be, 0x2009, 0x0015, 0x080c, 0x85ef, 0x0804, 0x65be,
-+      0xa08e, 0x0214, 0x0118, 0xa08e, 0x0210, 0x1130, 0x2009, 0x0015,
-+      0x080c, 0x85ef, 0x0804, 0x65be, 0xa08e, 0x0100, 0x1904, 0x65be,
-+      0x7034, 0xa005, 0x1904, 0x65be, 0x2009, 0x0016, 0x080c, 0x85ef,
-+      0x0804, 0x65be, 0xa08e, 0x0022, 0x1904, 0x65be, 0x7030, 0xa08e,
-+      0x0300, 0x1580, 0x68d4, 0xd0a4, 0x0528, 0xc0b5, 0x68d6, 0x7100,
-+      0xa18c, 0x00ff, 0x6972, 0x7004, 0x6876, 0x00f6, 0x2079, 0x0100,
-+      0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, 0x0016, 0x2008, 0x080c,
-+      0x280d, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x27e3,
-+      0x6952, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0xb400,
-+      0x70a6, 0x00ee, 0x7034, 0xa005, 0x1904, 0x65be, 0x2009, 0x0017,
-+      0x0804, 0x6584, 0xa08e, 0x0400, 0x1158, 0x7034, 0xa005, 0x1904,
-+      0x65be, 0x68d4, 0xc0a5, 0x68d6, 0x2009, 0x0030, 0x0804, 0x6584,
-+      0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, 0x1904, 0x65be, 0x2009,
-+      0x0018, 0x0804, 0x6584, 0xa08e, 0x2010, 0x1120, 0x2009, 0x0019,
-+      0x0804, 0x6584, 0xa08e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804,
-+      0x6584, 0xa08e, 0x5200, 0x1140, 0x7034, 0xa005, 0x1904, 0x65be,
-+      0x2009, 0x001b, 0x0804, 0x6584, 0xa08e, 0x5000, 0x1140, 0x7034,
-+      0xa005, 0x1904, 0x65be, 0x2009, 0x001c, 0x0804, 0x6584, 0xa08e,
-+      0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6584, 0xa08e, 0x1200,
-+      0x1140, 0x7034, 0xa005, 0x1904, 0x65be, 0x2009, 0x0024, 0x0804,
-+      0x6584, 0xa08c, 0xff00, 0xa18e, 0x2400, 0x1118, 0x2009, 0x002d,
-+      0x04d8, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x1118, 0x2009, 0x002a,
-+      0x0498, 0xa08e, 0x0f00, 0x1118, 0x2009, 0x0020, 0x0468, 0xa08e,
-+      0x5300, 0x1108, 0x00d8, 0xa08e, 0x6104, 0x11c0, 0x2011, 0xba8d,
-+      0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011,
-+      0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x3e8a, 0x004e,
-+      0x8108, 0x1f04, 0x6567, 0x2009, 0x0023, 0x0070, 0xa08e, 0x6000,
-+      0x1118, 0x2009, 0x003f, 0x0040, 0xa08e, 0x7800, 0x1118, 0x2009,
-+      0x0045, 0x0010, 0x2009, 0x001d, 0x0016, 0x2011, 0xba83, 0x2204,
-+      0x8211, 0x220c, 0x080c, 0x27e3, 0x1598, 0x080c, 0x4f0e, 0x1580,
-+      0x6612, 0x6516, 0x86ff, 0x01e8, 0x001e, 0x0016, 0xa186, 0x0017,
-+      0x1158, 0x6870, 0xa606, 0x11a8, 0x6874, 0xa506, 0xa084, 0xff00,
-+      0x1180, 0x6000, 0xc0f5, 0x6002, 0xa186, 0x0046, 0x1150, 0x6870,
-+      0xa606, 0x1138, 0x6874, 0xa506, 0xa084, 0xff00, 0x1110, 0x001e,
-+      0x0068, 0x00c6, 0x080c, 0x856a, 0x0168, 0x001e, 0x611a, 0x601f,
-+      0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x85ef, 0x00ce, 0x0005,
-+      0x001e, 0x0ce0, 0x00ce, 0x0ce0, 0x00c6, 0x0046, 0x080c, 0x6618,
-+      0x1904, 0x6615, 0xa28e, 0x0033, 0x11e8, 0x080c, 0x6814, 0x0904,
-+      0x6615, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, 0x1140, 0x7034,
-+      0xa005, 0x15d8, 0x2009, 0x0015, 0x080c, 0x85ef, 0x04b0, 0xa08e,
-+      0x0100, 0x1598, 0x7034, 0xa005, 0x1580, 0x2009, 0x0016, 0x080c,
-+      0x85ef, 0x0458, 0xa28e, 0x0032, 0x1540, 0x7030, 0xa08e, 0x1400,
-+      0x1520, 0x2009, 0x0038, 0x0016, 0x2011, 0xba83, 0x2204, 0x8211,
-+      0x220c, 0x080c, 0x27e3, 0x11c0, 0x080c, 0x4f0e, 0x11a8, 0x6612,
-+      0x6516, 0x00c6, 0x080c, 0x856a, 0x0170, 0x001e, 0x611a, 0x080c,
-+      0x9fb8, 0x601f, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x85ef,
-+      0x080c, 0x7134, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x0005,
-+      0x00f6, 0x00d6, 0x0026, 0x0016, 0x0136, 0x0146, 0x0156, 0x3c00,
-+      0x0006, 0x2079, 0x0030, 0x2069, 0x0200, 0x080c, 0x1efe, 0x1590,
-+      0x080c, 0x1da1, 0x05e0, 0x04f1, 0x1130, 0x7908, 0xa18c, 0x1fff,
-+      0xa182, 0x0011, 0x1688, 0x20a9, 0x000c, 0x20e1, 0x0000, 0x2ea0,
-+      0x2099, 0x020a, 0x53a5, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004,
-+      0x7a0c, 0x7808, 0xa080, 0x0007, 0xa084, 0x1ff8, 0x0419, 0x1120,
-+      0xa08a, 0x0140, 0x1a0c, 0x1511, 0x80ac, 0x20e1, 0x6000, 0x2099,
-+      0x020a, 0x53a5, 0x20e1, 0x7000, 0x6828, 0x6828, 0x7803, 0x0004,
-+      0xa294, 0x0070, 0x000e, 0x20e0, 0x015e, 0x014e, 0x013e, 0x001e,
-+      0x002e, 0x00de, 0x00fe, 0x0005, 0xa016, 0x080c, 0x1856, 0xa085,
-+      0x0001, 0x0c80, 0x0006, 0x2001, 0x0111, 0x2004, 0xa084, 0x0003,
-+      0x000e, 0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0xa696,
-+      0x00ff, 0x1198, 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804,
-+      0x66c4, 0xa596, 0xfffe, 0x1118, 0x2009, 0x007e, 0x04e8, 0xa596,
-+      0xfffc, 0x1118, 0x2009, 0x0080, 0x04b8, 0x2011, 0x0000, 0x2019,
-+      0xb435, 0x231c, 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff,
-+      0x2071, 0xb535, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071,
-+      0xb5b6, 0x2e1c, 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, 0xc2fd,
-+      0x0080, 0x2368, 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, 0x6b14,
-+      0x1120, 0xa346, 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, 0x83ff,
-+      0x0d58, 0x8420, 0x8e70, 0x1f04, 0x66a1, 0x82ff, 0x1118, 0xa085,
-+      0x0001, 0x0018, 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, 0x004e,
-+      0x0005, 0xa084, 0x0007, 0x000a, 0x0005, 0x66d5, 0x66d5, 0x66d5,
-+      0x6826, 0x66d5, 0x66d6, 0x66eb, 0x6764, 0x0005, 0x7110, 0xd1bc,
-+      0x0188, 0x7120, 0x2160, 0xac8c, 0x0007, 0x1160, 0xac8a, 0xbc00,
-+      0x0248, 0x685c, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046,
-+      0x080c, 0x85ef, 0x0005, 0x00c6, 0xa484, 0x01ff, 0x0904, 0x6742,
-+      0x7110, 0xd1bc, 0x1904, 0x6742, 0x2011, 0xba83, 0x2204, 0x8211,
-+      0x220c, 0x080c, 0x27e3, 0x1904, 0x6742, 0x080c, 0x4f0e, 0x1904,
-+      0x6742, 0x6612, 0x6516, 0x6000, 0xd0ec, 0x15e0, 0x6204, 0xa294,
-+      0xff00, 0x8217, 0xa286, 0x0006, 0x0160, 0x080c, 0x5a90, 0x11d0,
-+      0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x11a0, 0xa295, 0x0600,
-+      0x6206, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0530, 0x611a, 0x601f,
-+      0x0006, 0x7120, 0x610a, 0x7130, 0x6152, 0x2009, 0x0044, 0x080c,
-+      0x85ef, 0x00c0, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0198, 0x611a,
-+      0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x1118, 0x6007,
-+      0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x6c98,
-+      0x080c, 0x7134, 0x00ce, 0x0005, 0x2001, 0xb40d, 0x2004, 0xd0ec,
-+      0x0120, 0x2011, 0x8049, 0x080c, 0x3e8a, 0x00c6, 0x080c, 0x9e67,
-+      0x001e, 0x0d80, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130,
-+      0x6152, 0x6013, 0x0300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-+      0x6c52, 0x080c, 0x7134, 0x08f0, 0x7110, 0xd1bc, 0x0188, 0x7020,
-+      0x2060, 0xac84, 0x0007, 0x1160, 0xac82, 0xbc00, 0x0248, 0x685c,
-+      0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0045, 0x080c, 0x85ef,
-+      0x0005, 0x0006, 0x080c, 0x2d83, 0x000e, 0x1168, 0x7110, 0xa18c,
-+      0xff00, 0x810f, 0xa18e, 0x0000, 0x1130, 0xa084, 0x000f, 0xa08a,
-+      0x0006, 0x1208, 0x000b, 0x0005, 0x6792, 0x6793, 0x6792, 0x6792,
-+      0x67fc, 0x6808, 0x0005, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084,
-+      0x0904, 0x67fb, 0x700c, 0x7108, 0x080c, 0x27e3, 0x1904, 0x67fb,
-+      0x080c, 0x4f0e, 0x1904, 0x67fb, 0x6612, 0x6516, 0x6204, 0x7110,
-+      0xd1bc, 0x01f8, 0xa28c, 0x00ff, 0xa186, 0x0004, 0x0118, 0xa186,
-+      0x0006, 0x15c8, 0x00c6, 0x080c, 0x6814, 0x00ce, 0x0904, 0x67fb,
-+      0x00c6, 0x080c, 0x856a, 0x001e, 0x05f0, 0x611a, 0x080c, 0x9fb8,
-+      0x601f, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x85ef,
-+      0x0490, 0xa28c, 0x00ff, 0xa186, 0x0006, 0x0160, 0xa186, 0x0004,
-+      0x0148, 0xa294, 0xff00, 0x8217, 0xa286, 0x0004, 0x0118, 0xa286,
-+      0x0006, 0x1188, 0x00c6, 0x080c, 0x856a, 0x001e, 0x01e0, 0x611a,
-+      0x080c, 0x9fb8, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088,
-+      0x080c, 0x85ef, 0x0080, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0158,
-+      0x611a, 0x080c, 0x9fb8, 0x601f, 0x0004, 0x7120, 0x610a, 0x2009,
-+      0x0001, 0x080c, 0x85ef, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x00a1,
-+      0x0130, 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x85ef, 0x0005,
-+      0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130, 0x7124, 0x610a, 0x2009,
-+      0x008a, 0x080c, 0x85ef, 0x0005, 0x7020, 0x2060, 0xac84, 0x0007,
-+      0x1158, 0xac82, 0xbc00, 0x0240, 0x2001, 0xb417, 0x2004, 0xac02,
-+      0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8, 0x7110, 0xd1bc,
-+      0x1178, 0x7024, 0x2060, 0xac84, 0x0007, 0x1150, 0xac82, 0xbc00,
-+      0x0238, 0x685c, 0xac02, 0x1220, 0x2009, 0x0051, 0x080c, 0x85ef,
-+      0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
-+      0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
-+      0x0005, 0x00c6, 0x00d6, 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086,
-+      0xc000, 0x05b0, 0x080c, 0x856a, 0x0598, 0x0066, 0x00c6, 0x0046,
-+      0x2011, 0xba83, 0x2204, 0x8211, 0x220c, 0x080c, 0x27e3, 0x1580,
-+      0x080c, 0x4f0e, 0x1568, 0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce,
-+      0x601a, 0x080c, 0x9fb8, 0x080c, 0x15f4, 0x01f0, 0x2d00, 0x6056,
-+      0x6803, 0x0000, 0x6837, 0x0000, 0x6c3a, 0xadf8, 0x000f, 0x20a9,
-+      0x000e, 0x2fa0, 0x2e98, 0x53a3, 0x006e, 0x6612, 0x6007, 0x003e,
-+      0x601f, 0x0001, 0x6003, 0x0001, 0x080c, 0x6c98, 0x080c, 0x7134,
-+      0x00fe, 0x00de, 0x00ce, 0x0005, 0x080c, 0x85c0, 0x006e, 0x0cc0,
-+      0x004e, 0x00ce, 0x0cc8, 0x2071, 0xb6f3, 0x7003, 0x0003, 0x700f,
-+      0x0361, 0xa006, 0x701a, 0x7076, 0x7012, 0x7017, 0xbc00, 0x7007,
-+      0x0000, 0x7026, 0x702b, 0x7d3b, 0x7032, 0x7037, 0x7d9b, 0x703b,
-+      0xffff, 0x703f, 0xffff, 0x7042, 0x7047, 0x4405, 0x704a, 0x705b,
-+      0x69f0, 0x2001, 0xb6a1, 0x2003, 0x0003, 0x2001, 0xb6a3, 0x2003,
-+      0x0100, 0x3a00, 0xa084, 0x0005, 0x706e, 0x0005, 0x2071, 0xb6f3,
-+      0x1d04, 0x6950, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1518,
-+      0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x7040,
-+      0xa00d, 0x0128, 0x8109, 0x7142, 0x1110, 0x7044, 0x080f, 0x00c6,
-+      0x2061, 0xb400, 0x6034, 0x00ce, 0xd0cc, 0x0180, 0x3a00, 0xa084,
-+      0x0005, 0x726c, 0xa216, 0x0150, 0x706e, 0x2011, 0x8043, 0x2018,
-+      0x080c, 0x3e8a, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0xa00d,
-+      0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109,
-+      0x7126, 0xa186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110,
-+      0x7028, 0x080f, 0x7030, 0xa00d, 0x0180, 0x702c, 0x8001, 0x702e,
-+      0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0xa184, 0x007f,
-+      0x090c, 0x7de0, 0x0010, 0x7034, 0x080f, 0x7038, 0xa005, 0x0118,
-+      0x0310, 0x8001, 0x703a, 0x703c, 0xa005, 0x0118, 0x0310, 0x8001,
-+      0x703e, 0x704c, 0xa00d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148,
-+      0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058,
-+      0x080f, 0x7018, 0xa00d, 0x01d8, 0x0016, 0x7074, 0xa00d, 0x0158,
-+      0x7070, 0x8001, 0x7072, 0x1138, 0x7073, 0x0009, 0x8109, 0x7176,
-+      0x1110, 0x7078, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138,
-+      0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e,
-+      0x7004, 0x0002, 0x6976, 0x6977, 0x698f, 0x00e6, 0x2071, 0xb6f3,
-+      0x7018, 0xa005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee,
-+      0x0005, 0x00e6, 0x0006, 0x2071, 0xb6f3, 0x701c, 0xa206, 0x1110,
-+      0x701a, 0x701e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xb6f3,
-+      0x6088, 0xa102, 0x0208, 0x618a, 0x00ee, 0x0005, 0x0005, 0x7110,
-+      0x080c, 0x4f6a, 0x1158, 0x6088, 0x8001, 0x0240, 0x608a, 0x1130,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x8108, 0xa182,
-+      0x00ff, 0x0218, 0xa00e, 0x7007, 0x0002, 0x7112, 0x0005, 0x7014,
-+      0x2060, 0x0126, 0x2091, 0x8000, 0x603c, 0xa005, 0x0128, 0x8001,
-+      0x603e, 0x1110, 0x080c, 0x9ea6, 0x6014, 0xa005, 0x0500, 0x8001,
-+      0x6016, 0x11e8, 0x611c, 0xa186, 0x0003, 0x0118, 0xa186, 0x0006,
-+      0x11a0, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0270, 0xa082,
-+      0x1999, 0x6856, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
-+      0x800b, 0x810b, 0xa108, 0x6116, 0x0010, 0x080c, 0x997e, 0x012e,
-+      0xac88, 0x0018, 0x7116, 0x2001, 0xec00, 0xa102, 0x0220, 0x7017,
-+      0xbc00, 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0xb6f3, 0x7027,
-+      0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0xb6fc, 0x2003,
-+      0x0000, 0x0005, 0x00e6, 0x2071, 0xb6f3, 0x7132, 0x702f, 0x0009,
-+      0x00ee, 0x0005, 0x2011, 0xb6ff, 0x2013, 0x0000, 0x0005, 0x00e6,
-+      0x2071, 0xb6f3, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005,
-+      0x00c6, 0x0026, 0x7054, 0x8000, 0x7056, 0x2061, 0xb6a1, 0x6008,
-+      0xa086, 0x0000, 0x0158, 0x7068, 0x6032, 0x7064, 0x602e, 0x7060,
-+      0x602a, 0x705c, 0x6026, 0x2c10, 0x080c, 0x163f, 0x002e, 0x00ce,
-+      0x0005, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
-+      0x68be, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005,
-+      0x00e6, 0x2071, 0xb6f3, 0x7176, 0x727a, 0x7073, 0x0009, 0x00ee,
-+      0x0005, 0x00e6, 0x0006, 0x2071, 0xb6f3, 0x7078, 0xa206, 0x1110,
-+      0x7076, 0x707a, 0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0xb774,
-+      0x00ce, 0x0005, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080,
-+      0xb774, 0x2060, 0x0005, 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001,
-+      0x1999, 0xa005, 0x1150, 0x00c6, 0x2061, 0xb774, 0x6014, 0x00ce,
-+      0xa005, 0x1138, 0x2001, 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108,
-+      0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c,
-+      0x00c0, 0xa18e, 0x00c0, 0x05e8, 0xd0b4, 0x1138, 0xd0bc, 0x1550,
-+      0x2009, 0x0006, 0x080c, 0x6ab6, 0x0005, 0xd0fc, 0x0138, 0xa084,
-+      0x0003, 0x0120, 0xa086, 0x0003, 0x1904, 0x6ab0, 0x6020, 0xd0d4,
-+      0x0130, 0xc0d4, 0x6022, 0x6860, 0x602a, 0x685c, 0x602e, 0x2009,
-+      0xb474, 0x2104, 0xd084, 0x0138, 0x87ff, 0x1120, 0x2009, 0x0042,
-+      0x080c, 0x85ef, 0x0005, 0x87ff, 0x1120, 0x2009, 0x0043, 0x080c,
-+      0x85ef, 0x0005, 0xd0fc, 0x0130, 0xa084, 0x0003, 0x0118, 0xa086,
-+      0x0003, 0x11f0, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, 0x85ef,
-+      0x0005, 0xd0fc, 0x0160, 0xa084, 0x0003, 0xa08e, 0x0002, 0x0148,
-+      0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x85ef, 0x0005, 0x0061,
-+      0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x85ef, 0x0cb0,
-+      0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6010,
-+      0xa0ec, 0xf000, 0x0510, 0x2068, 0x6952, 0x6800, 0x6012, 0xa186,
-+      0x0001, 0x1188, 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x1158,
-+      0x00c6, 0x2061, 0xb774, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210,
-+      0x0208, 0x6206, 0x00ce, 0x080c, 0x53c9, 0x6010, 0xa06d, 0x0076,
-+      0x2039, 0x0000, 0x190c, 0x6a3b, 0x007e, 0x00de, 0x0005, 0x0156,
-+      0x00c6, 0x2061, 0xb774, 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008,
-+      0xa204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138,
-+      0x6808, 0xa005, 0x0120, 0x8001, 0x680a, 0xa085, 0x0001, 0x0005,
-+      0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x1208, 0xa200,
-+      0x1f04, 0x6afc, 0x8086, 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010,
-+      0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a,
-+      0x1220, 0x1f04, 0x6b0c, 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04,
-+      0x6b0c, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080, 0x000e, 0x015e,
-+      0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8, 0x0126, 0x2091,
-+      0x2800, 0x2079, 0xb6e0, 0x012e, 0x00d6, 0x2069, 0xb6e0, 0x6803,
-+      0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, 0x206a, 0x00de,
-+      0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0xa084, 0x0007, 0x0002,
-+      0x6b4a, 0x6b6b, 0x6bbe, 0x6b50, 0x6b6b, 0x6b4a, 0x6b48, 0x6b48,
-+      0x080c, 0x1511, 0x080c, 0x69d5, 0x080c, 0x7134, 0x00ce, 0x0005,
-+      0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, 0x4a96, 0x080c,
-+      0x6961, 0x7828, 0xa092, 0x00c8, 0x1228, 0x8000, 0x782a, 0x080c,
-+      0x4ad0, 0x0c88, 0x080c, 0x4a96, 0x7807, 0x0003, 0x7827, 0x0000,
-+      0x782b, 0x0000, 0x0c40, 0x080c, 0x69d5, 0x3c00, 0x0006, 0x2011,
-+      0x0209, 0x20e1, 0x4000, 0x2214, 0x000e, 0x20e0, 0x82ff, 0x0178,
-+      0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0xa065, 0x090c,
-+      0x1511, 0x2009, 0x0013, 0x080c, 0x85ef, 0x00ce, 0x0005, 0x3900,
-+      0xa082, 0xb82c, 0x1210, 0x080c, 0x82d5, 0x00c6, 0x7824, 0xa065,
-+      0x090c, 0x1511, 0x7804, 0xa086, 0x0004, 0x0904, 0x6bfe, 0x7828,
-+      0xa092, 0x2710, 0x1230, 0x8000, 0x782a, 0x00ce, 0x080c, 0x7d17,
-+      0x0c20, 0x6104, 0xa186, 0x0003, 0x1188, 0x00e6, 0x2071, 0xb400,
-+      0x70e0, 0x00ee, 0xd08c, 0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100,
-+      0x2071, 0xb400, 0x080c, 0x4ad9, 0x00ee, 0x00ce, 0x080c, 0xb3c7,
-+      0x2009, 0x0014, 0x080c, 0x85ef, 0x00ce, 0x0838, 0x2001, 0xb6fc,
-+      0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824,
-+      0xa065, 0x090c, 0x1511, 0x2009, 0x0013, 0x080c, 0x8643, 0x00ce,
-+      0x0005, 0x00c6, 0x00d6, 0x3900, 0xa082, 0xb82c, 0x1210, 0x080c,
-+      0x82d5, 0x7824, 0xa005, 0x090c, 0x1511, 0x781c, 0xa06d, 0x090c,
-+      0x1511, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x080c, 0x85c0,
-+      0x693c, 0x81ff, 0x090c, 0x1511, 0x8109, 0x693e, 0x6854, 0xa015,
-+      0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827,
-+      0x0000, 0x00de, 0x00ce, 0x080c, 0x7134, 0x0888, 0x6104, 0xa186,
-+      0x0002, 0x0128, 0xa186, 0x0004, 0x0110, 0x0804, 0x6b97, 0x7808,
-+      0xac06, 0x0904, 0x6b97, 0x080c, 0x7055, 0x080c, 0x6c98, 0x00ce,
-+      0x080c, 0x7134, 0x0804, 0x6b85, 0x00c6, 0x6027, 0x0002, 0x62c8,
-+      0x60c4, 0xa205, 0x1178, 0x793c, 0xa1e5, 0x0000, 0x0130, 0x2009,
-+      0x0049, 0x080c, 0x85ef, 0x00ce, 0x0005, 0x2011, 0xb6ff, 0x2013,
-+      0x0000, 0x0cc8, 0x3908, 0xa192, 0xb82c, 0x1210, 0x080c, 0x82d5,
-+      0x793c, 0x81ff, 0x0d90, 0x7944, 0xa192, 0x7530, 0x12b8, 0x8108,
-+      0x7946, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x1138,
-+      0x6014, 0xa084, 0x0184, 0xa085, 0x0012, 0x6016, 0x08e0, 0x6014,
-+      0xa084, 0x0184, 0xa085, 0x0016, 0x6016, 0x08a8, 0x7848, 0xc085,
-+      0x784a, 0x0888, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,
-+      0x600f, 0x0000, 0x2c08, 0x2061, 0xb6e0, 0x6020, 0x8000, 0x6022,
-+      0x6010, 0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x6112, 0x012e,
-+      0x00ce, 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6,
-+      0x2069, 0xb6e0, 0x6000, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822,
-+      0xa086, 0x0001, 0x1110, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007,
-+      0x0804, 0x713a, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0158, 0x6056,
-+      0x605b, 0x0000, 0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069,
-+      0xb6e0, 0x0c18, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x08e8,
-+      0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
-+      0x2c08, 0x2061, 0xb6e0, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005,
-+      0x0148, 0xa080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,
-+      0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,
-+      0x2c08, 0x2061, 0xb6e0, 0x6034, 0xa005, 0x0130, 0xa080, 0x0003,
-+      0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x0cd8, 0x00f6,
-+      0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026,
-+      0x0016, 0x0006, 0x0126, 0xa02e, 0x2071, 0xb6e0, 0x7638, 0x2660,
-+      0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x6d40, 0x6018, 0xa080,
-+      0x0028, 0x2004, 0xa206, 0x1904, 0x6d3b, 0x87ff, 0x0120, 0x6050,
-+      0xa106, 0x1904, 0x6d3b, 0x703c, 0xac06, 0x1190, 0x0036, 0x2019,
-+      0x0001, 0x080c, 0x7f8e, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043,
-+      0x0000, 0x7047, 0x0000, 0x704b, 0x0000, 0x003e, 0x2029, 0x0001,
-+      0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140,
-+      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
-+      0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0x080c, 0x9beb, 0x01c8, 0x6010, 0x2068, 0x601c,
-+      0xa086, 0x0003, 0x1580, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x0016, 0x0036, 0x0076, 0x080c, 0x9e5d, 0x080c, 0xb303, 0x080c,
-+      0x53c9, 0x007e, 0x003e, 0x001e, 0x080c, 0x9da2, 0x080c, 0x9dae,
-+      0x00ce, 0x0804, 0x6cdb, 0x2c78, 0x600c, 0x2060, 0x0804, 0x6cdb,
-+      0x85ff, 0x0120, 0x0036, 0x080c, 0x71f1, 0x003e, 0x012e, 0x000e,
-+      0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
-+      0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x1158, 0x0016,
-+      0x0036, 0x0076, 0x080c, 0xb303, 0x080c, 0xb01c, 0x007e, 0x003e,
-+      0x001e, 0x08a0, 0x601c, 0xa086, 0x000a, 0x0904, 0x6d25, 0x0804,
-+      0x6d23, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x00f6, 0x2031, 0x0000,
-+      0x0126, 0x2091, 0x8000, 0x2079, 0xb6e0, 0x7838, 0xa065, 0x0568,
-+      0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0xac06, 0x1180, 0x0036,
-+      0x2019, 0x0001, 0x080c, 0x7f8e, 0x7833, 0x0000, 0x783f, 0x0000,
-+      0x7843, 0x0000, 0x7847, 0x0000, 0x784b, 0x0000, 0x003e, 0x080c,
-+      0x9beb, 0x0178, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x11b0,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c,
-+      0x9da2, 0x080c, 0x9dae, 0x000e, 0x0888, 0x7e3a, 0x7e36, 0x012e,
-+      0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x601c, 0xa086,
-+      0x0006, 0x1118, 0x080c, 0xb01c, 0x0c60, 0x601c, 0xa086, 0x000a,
-+      0x0d08, 0x08f0, 0x0016, 0x0026, 0x0086, 0x2041, 0x0000, 0x0099,
-+      0x080c, 0x6e88, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
-+      0x2079, 0xb6e0, 0x2091, 0x8000, 0x080c, 0x6f15, 0x080c, 0x6f87,
-+      0x012e, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
-+      0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x7614,
-+      0x2660, 0x2678, 0x8cff, 0x0904, 0x6e5e, 0x6018, 0xa080, 0x0028,
-+      0x2004, 0xa206, 0x1904, 0x6e59, 0x88ff, 0x0120, 0x6050, 0xa106,
-+      0x1904, 0x6e59, 0x7024, 0xac06, 0x1538, 0x2069, 0x0100, 0x68c0,
-+      0xa005, 0x01f0, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3, 0x0000,
-+      0x080c, 0x81f0, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+      0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069,
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0020,
-+      0x6003, 0x0009, 0x630a, 0x04e8, 0x7014, 0xac36, 0x1110, 0x660c,
-+      0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
-+      0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06,
-+      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068,
-+      0x080c, 0x9beb, 0x01b8, 0x601c, 0xa086, 0x0003, 0x1540, 0x6837,
-+      0x0103, 0x6b4a, 0x6847, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c,
-+      0x9e5d, 0x080c, 0xb303, 0x080c, 0x53c9, 0x008e, 0x003e, 0x001e,
-+      0x080c, 0x9da2, 0x080c, 0x9dae, 0x080c, 0x80c8, 0x00ce, 0x0804,
-+      0x6de2, 0x2c78, 0x600c, 0x2060, 0x0804, 0x6de2, 0x012e, 0x000e,
-+      0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c,
-+      0xa086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xb303,
-+      0x080c, 0xb01c, 0x008e, 0x003e, 0x001e, 0x08e0, 0x601c, 0xa086,
-+      0x0002, 0x1128, 0x6004, 0xa086, 0x0085, 0x0908, 0x0898, 0x601c,
-+      0xa086, 0x0005, 0x1978, 0x6004, 0xa086, 0x0085, 0x0d20, 0x0850,
-+      0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0xa280, 0xb535, 0x2004,
-+      0xa065, 0x0904, 0x6f11, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071,
-+      0xb6e0, 0x6654, 0x7018, 0xac06, 0x1108, 0x761a, 0x701c, 0xac06,
-+      0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0x6058,
-+      0xa07d, 0x0108, 0x7e56, 0xa6ed, 0x0000, 0x0110, 0x2f00, 0x685a,
-+      0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002,
-+      0x080c, 0x4e95, 0x0904, 0x6f0d, 0x7624, 0x86ff, 0x05e8, 0xa680,
-+      0x0004, 0x2004, 0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0,
-+      0xa005, 0x0548, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3, 0x0000,
-+      0x080c, 0x81f0, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+      0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069,
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de,
-+      0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c,
-+      0x9dae, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009,
-+      0x630a, 0x00ce, 0x0804, 0x6eb8, 0x8dff, 0x0158, 0x6837, 0x0103,
-+      0x6b4a, 0x6847, 0x0000, 0x080c, 0x9e5d, 0x080c, 0xb303, 0x080c,
-+      0x53c9, 0x080c, 0x80c8, 0x0804, 0x6eb8, 0x006e, 0x00de, 0x00ee,
-+      0x00fe, 0x012e, 0x000e, 0x00ce, 0x0005, 0x0006, 0x0066, 0x00c6,
-+      0x00d6, 0x2031, 0x0000, 0x7814, 0xa065, 0x0904, 0x6f67, 0x600c,
-+      0x0006, 0x600f, 0x0000, 0x7824, 0xac06, 0x1540, 0x2069, 0x0100,
-+      0x68c0, 0xa005, 0x01f0, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3,
-+      0x0000, 0x080c, 0x81f0, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140,
-+      0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000,
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+      0x0028, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00b0, 0x6010, 0x2068,
-+      0x080c, 0x9beb, 0x0168, 0x601c, 0xa086, 0x0003, 0x11b8, 0x6837,
-+      0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9da2,
-+      0x080c, 0x9dae, 0x080c, 0x80c8, 0x000e, 0x0804, 0x6f1c, 0x7e16,
-+      0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x601c, 0xa086,
-+      0x0006, 0x1118, 0x080c, 0xb01c, 0x0c58, 0x601c, 0xa086, 0x0002,
-+      0x1128, 0x6004, 0xa086, 0x0085, 0x09d0, 0x0c10, 0x601c, 0xa086,
-+      0x0005, 0x19f0, 0x6004, 0xa086, 0x0085, 0x0d60, 0x08c8, 0x0006,
-+      0x0066, 0x00c6, 0x00d6, 0x7818, 0xa065, 0x0904, 0x6fed, 0x6054,
-+      0x0006, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
-+      0x6002, 0x080c, 0x4e95, 0x0904, 0x6fea, 0x7e24, 0x86ff, 0x05e8,
-+      0xa680, 0x0004, 0x2004, 0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100,
-+      0x68c0, 0xa005, 0x0548, 0x080c, 0x69d5, 0x080c, 0x7d24, 0x68c3,
-+      0x0000, 0x080c, 0x81f0, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140,
-+      0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000,
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+      0x00de, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e, 0x2660,
-+      0x080c, 0x9dae, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,
-+      0x0009, 0x630a, 0x00ce, 0x0804, 0x6f99, 0x8dff, 0x0138, 0x6837,
-+      0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x80c8,
-+      0x0804, 0x6f99, 0x000e, 0x0804, 0x6f8c, 0x781e, 0x781a, 0x00de,
-+      0x00ce, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0066, 0x6000,
-+      0xd0dc, 0x01a0, 0x604c, 0xa06d, 0x0188, 0x6848, 0xa606, 0x1170,
-+      0x2071, 0xb6e0, 0x7024, 0xa035, 0x0148, 0xa080, 0x0004, 0x2004,
-+      0xad06, 0x1120, 0x6000, 0xc0dc, 0x6002, 0x0021, 0x006e, 0x00de,
-+      0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100, 0x78c0, 0xa005, 0x1138,
-+      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x04a0, 0x080c,
-+      0x7d24, 0x78c3, 0x0000, 0x080c, 0x81f0, 0x7027, 0x0000, 0x0036,
-+      0x2079, 0x0140, 0x7b04, 0xa384, 0x1000, 0x0120, 0x7803, 0x0100,
-+      0x7803, 0x0000, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827,
-+      0x0001, 0x080c, 0x81f0, 0x003e, 0x080c, 0x4e95, 0x00c6, 0x603c,
-+      0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0x85c0, 0x00ce,
-+      0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x9e5d, 0x080c,
-+      0x53c9, 0x080c, 0x80c8, 0x00fe, 0x0005, 0x00e6, 0x00c6, 0x2071,
-+      0xb6e0, 0x7004, 0xa084, 0x0007, 0x0002, 0x7067, 0x706a, 0x7080,
-+      0x7099, 0x70d2, 0x7067, 0x7065, 0x7065, 0x080c, 0x1511, 0x00ce,
-+      0x00ee, 0x0005, 0x7024, 0xa065, 0x0148, 0x7020, 0x8001, 0x7022,
-+      0x600c, 0xa015, 0x0150, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000,
-+      0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x7216, 0x7212, 0x0cb0,
-+      0x6018, 0x2060, 0x080c, 0x4e95, 0x6000, 0xc0dc, 0x6002, 0x7020,
-+      0x8001, 0x7022, 0x0120, 0x6054, 0xa015, 0x0140, 0x721e, 0x7007,
-+      0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x7218, 0x721e,
-+      0x0cb0, 0x7024, 0xa065, 0x0598, 0x700c, 0xac06, 0x1160, 0x080c,
-+      0x80c8, 0x600c, 0xa015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0428,
-+      0x720e, 0x720a, 0x0410, 0x7014, 0xac06, 0x1160, 0x080c, 0x80c8,
-+      0x600c, 0xa015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00b0, 0x7216,
-+      0x7212, 0x0098, 0x6018, 0x2060, 0x080c, 0x4e95, 0x6000, 0xc0dc,
-+      0x6002, 0x080c, 0x80c8, 0x701c, 0xa065, 0x0138, 0x6054, 0xa015,
-+      0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce,
-+      0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, 0x80c8, 0x600c,
-+      0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, 0x81f0, 0x7027,
-+      0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6,
-+      0x2069, 0xb6e0, 0x6830, 0xa084, 0x0003, 0x0002, 0x70f4, 0x70f6,
-+      0x711a, 0x70f2, 0x080c, 0x1511, 0x00de, 0x0005, 0x00c6, 0x6840,
-+      0xa086, 0x0001, 0x01b8, 0x683c, 0xa065, 0x0130, 0x600c, 0xa015,
-+      0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
-+      0x2011, 0xb6ff, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
-+      0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0xa065, 0x0d68, 0x6003,
-+      0x0003, 0x0c50, 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x684b,
-+      0x0000, 0x683c, 0xa065, 0x0168, 0x600c, 0xa015, 0x0130, 0x6a3a,
-+      0x600f, 0x0000, 0x683f, 0x0000, 0x0020, 0x683f, 0x0000, 0x683a,
-+      0x6836, 0x00ce, 0x00de, 0x0005, 0x00d6, 0x2069, 0xb6e0, 0x6804,
-+      0xa084, 0x0007, 0x0002, 0x7145, 0x71e1, 0x71e1, 0x71e1, 0x71e1,
-+      0x71e3, 0x7143, 0x7143, 0x080c, 0x1511, 0x6820, 0xa005, 0x1110,
-+      0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0150, 0x6807, 0x0004,
-+      0x6826, 0x682b, 0x0000, 0x080c, 0x7233, 0x00ce, 0x00de, 0x0005,
-+      0x6814, 0xa065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000,
-+      0x080c, 0x7233, 0x00ce, 0x00de, 0x0005, 0x00e6, 0x0036, 0x6a1c,
-+      0xa2f5, 0x0000, 0x0904, 0x71dd, 0x704c, 0xa00d, 0x0118, 0x7088,
-+      0xa005, 0x01a0, 0x7054, 0xa075, 0x0120, 0xa20e, 0x0904, 0x71dd,
-+      0x0028, 0x6818, 0xa20e, 0x0904, 0x71dd, 0x2070, 0x704c, 0xa00d,
-+      0x0d88, 0x7088, 0xa005, 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038,
-+      0xa302, 0x1e40, 0x080c, 0x8597, 0x0904, 0x71dd, 0x8318, 0x733e,
-+      0x6112, 0x2e10, 0x621a, 0xa180, 0x0014, 0x2004, 0xa084, 0x00ff,
-+      0x605a, 0xa180, 0x0014, 0x2003, 0x0000, 0xa180, 0x0015, 0x2004,
-+      0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b,
-+      0xa318, 0x6316, 0x003e, 0x00f6, 0x2c78, 0x71a0, 0x2001, 0xb435,
-+      0x2004, 0xd0ac, 0x1110, 0xd1bc, 0x0150, 0x7100, 0xd1f4, 0x0120,
-+      0x7114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0,
-+      0x2d88, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x080c,
-+      0x785c, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26,
-+      0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040,
-+      0x00fe, 0x00ee, 0x00ce, 0x00de, 0x0005, 0x003e, 0x00ee, 0x00ce,
-+      0x0cd0, 0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, 0x0138, 0x6807,
-+      0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x7233, 0x00ce, 0x00de,
-+      0x0005, 0x00f6, 0x00d6, 0x2069, 0xb6e0, 0x6830, 0xa086, 0x0000,
-+      0x11d0, 0x2001, 0xb40c, 0x200c, 0xd1bc, 0x1560, 0x6838, 0xa07d,
-+      0x0190, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000,
-+      0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1ff2, 0x1130,
-+      0x012e, 0x080c, 0x7b95, 0x00de, 0x00fe, 0x0005, 0x012e, 0xe000,
-+      0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0140, 0x6a3a,
-+      0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c60, 0x683a,
-+      0x6836, 0x0cc0, 0xc1bc, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c,
-+      0x5b12, 0x006e, 0x0858, 0x601c, 0xa084, 0x000f, 0x000b, 0x0005,
-+      0x7241, 0x7246, 0x76fd, 0x7819, 0x7246, 0x76fd, 0x7819, 0x7241,
-+      0x7246, 0x080c, 0x7055, 0x080c, 0x7134, 0x0005, 0x0156, 0x0136,
-+      0x0146, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1511,
-+      0x6118, 0x2178, 0x79a0, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110,
-+      0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff,
-+      0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x2d88, 0x2f0d, 0xa18c,
-+      0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa08a, 0x0040, 0x1a04,
-+      0x72ba, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005,
-+      0x7369, 0x73b4, 0x73e1, 0x74ae, 0x74dc, 0x74e4, 0x750a, 0x751b,
-+      0x752c, 0x7534, 0x754a, 0x7534, 0x75a4, 0x751b, 0x75c5, 0x75cd,
-+      0x752c, 0x75cd, 0x75de, 0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x72b8,
-+      0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x72b8, 0x7e2f, 0x7e54,
-+      0x7e69, 0x7e8c, 0x7ead, 0x750a, 0x72b8, 0x750a, 0x7534, 0x72b8,
-+      0x73e1, 0x74ae, 0x72b8, 0x82f2, 0x7534, 0x72b8, 0x8312, 0x7534,
-+      0x72b8, 0x752c, 0x7362, 0x72cd, 0x72b8, 0x8337, 0x83ac, 0x8483,
-+      0x72b8, 0x8494, 0x7505, 0x84b0, 0x72b8, 0x7ec2, 0x850b, 0x72b8,
-+      0x080c, 0x1511, 0x2100, 0x0033, 0x00fe, 0x00ce, 0x014e, 0x013e,
-+      0x015e, 0x0005, 0x72cb, 0x72cb, 0x72cb, 0x7301, 0x731f, 0x7335,
-+      0x72cb, 0x72cb, 0x72cb, 0x080c, 0x1511, 0x00d6, 0x20a1, 0x020b,
-+      0x080c, 0x75fb, 0x7810, 0x2068, 0x20a3, 0x2414, 0x20a3, 0x0018,
-+      0x20a3, 0x0800, 0x683c, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x6850, 0x20a2, 0x6854, 0x20a2,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x7d11,
-+      0x00de, 0x0005, 0x00d6, 0x7818, 0x2068, 0x68a0, 0x2069, 0xb400,
-+      0x6ad4, 0xd2ac, 0x1110, 0xd0bc, 0x0110, 0xa085, 0x0001, 0x00de,
-+      0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x0500,
-+      0x20a3, 0x0000, 0x7810, 0xa0e8, 0x000f, 0x6808, 0x20a2, 0x680c,
-+      0x20a2, 0x6810, 0x20a2, 0x6814, 0x20a2, 0x6818, 0x20a2, 0x681c,
-+      0x20a2, 0x60c3, 0x0010, 0x080c, 0x7d11, 0x00de, 0x0005, 0x0156,
-+      0x0146, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x7800, 0x20a3,
-+      0x0000, 0x7808, 0x8007, 0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0008,
-+      0x080c, 0x7d11, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1,
-+      0x020b, 0x080c, 0x7697, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3,
-+      0xdf10, 0x20a3, 0x0034, 0x2099, 0xb405, 0x20a9, 0x0004, 0x53a6,
-+      0x2099, 0xb401, 0x20a9, 0x0004, 0x53a6, 0x2099, 0xb6c6, 0x20a9,
-+      0x001a, 0x3304, 0x8007, 0x20a2, 0x9398, 0x1f04, 0x7351, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x004c, 0x080c, 0x7d11, 0x014e,
-+      0x015e, 0x0005, 0x2001, 0xb415, 0x2004, 0x609a, 0x080c, 0x7d11,
-+      0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x5200, 0x20a3,
-+      0x0000, 0x00d6, 0x2069, 0xb452, 0x6804, 0xd084, 0x0150, 0x6828,
-+      0x20a3, 0x0000, 0x0016, 0x080c, 0x27f7, 0x21a2, 0x001e, 0x00de,
-+      0x0028, 0x00de, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004,
-+      0x2099, 0xb405, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb401, 0x53a6,
-+      0x2001, 0xb435, 0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xa082, 0x007f, 0x0238, 0x2001, 0xb41c, 0x20a6, 0x2001,
-+      0xb41d, 0x20a6, 0x0040, 0x20a3, 0x0000, 0x2001, 0xb415, 0x2004,
-+      0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x001c, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb,
-+      0x20a3, 0x0500, 0x20a3, 0x0000, 0x2001, 0xb435, 0x2004, 0xd0ac,
-+      0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082, 0x007f, 0x0238,
-+      0x2001, 0xb41c, 0x20a6, 0x2001, 0xb41d, 0x20a6, 0x0040, 0x20a3,
-+      0x0000, 0x2001, 0xb415, 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a9,
-+      0x0004, 0x2099, 0xb405, 0x53a6, 0x60c3, 0x0010, 0x080c, 0x7d11,
-+      0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb, 0x00c6, 0x7818, 0x2060,
-+      0x2001, 0x0000, 0x080c, 0x52d4, 0x00ce, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0xa086, 0x007e, 0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4,
-+      0x620e, 0x0010, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080,
-+      0x0028, 0x2004, 0xa086, 0x007e, 0x1904, 0x7470, 0x2001, 0xb435,
-+      0x2004, 0xd0a4, 0x01c8, 0x2099, 0xb68e, 0x33a6, 0x9398, 0x20a3,
-+      0x0000, 0x9398, 0x3304, 0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6,
-+      0x9398, 0x20a3, 0x0000, 0x9398, 0x2001, 0x2710, 0x20a2, 0x9398,
-+      0x33a6, 0x9398, 0x33a6, 0x00d0, 0x2099, 0xb68e, 0x33a6, 0x9398,
-+      0x33a6, 0x9398, 0x3304, 0x080c, 0x5a90, 0x1118, 0xa084, 0x37ff,
-+      0x0010, 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004,
-+      0x2099, 0xb405, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb401, 0x53a6,
-+      0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x744a, 0x20a9, 0x0008,
-+      0x20a3, 0x0000, 0x1f04, 0x7450, 0x2099, 0xb696, 0x3304, 0xc0dd,
-+      0x20a2, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0158, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x9398, 0x9398, 0x9398, 0x33a6, 0x20a9, 0x0004,
-+      0x0010, 0x20a9, 0x0007, 0x20a3, 0x0000, 0x1f04, 0x746b, 0x0468,
-+      0x2001, 0xb435, 0x2004, 0xd0a4, 0x0140, 0x2001, 0xb68f, 0x2004,
-+      0x60e3, 0x0000, 0x080c, 0x2838, 0x60e2, 0x2099, 0xb68e, 0x20a9,
-+      0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0xb405, 0x53a6, 0x20a9,
-+      0x0004, 0x2099, 0xb401, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000,
-+      0x1f04, 0x748e, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x7494,
-+      0x2099, 0xb696, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3,
-+      0x0000, 0x1f04, 0x749f, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04,
-+      0x74a5, 0x60c3, 0x0074, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b,
-+      0x080c, 0x75fb, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800,
-+      0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-+      0x00f6, 0x2079, 0xb452, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0xa085,
-+      0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0xa085, 0x0002, 0x00d6,
-+      0x0804, 0x7586, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-+      0x0014, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x75fb,
-+      0x20a3, 0x5000, 0x0804, 0x73fc, 0x20a1, 0x020b, 0x080c, 0x75fb,
-+      0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c,
-+      0x768f, 0x0020, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3, 0x0200,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004,
-+      0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+      0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3,
-+      0x0008, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697,
-+      0x20a3, 0x0200, 0x0804, 0x73fc, 0x20a1, 0x020b, 0x080c, 0x7697,
-+      0x20a3, 0x0100, 0x20a3, 0x0000, 0x7828, 0xa005, 0x0110, 0x20a2,
-+      0x0010, 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c,
-+      0x7d11, 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+      0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894,
-+      0xa086, 0x0014, 0x1178, 0x6998, 0xa184, 0xc000, 0x1140, 0xd1ec,
-+      0x0118, 0x20a3, 0x2100, 0x0040, 0x20a3, 0x0100, 0x0028, 0x20a3,
-+      0x0400, 0x0010, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-+      0x20a2, 0x20a2, 0x00f6, 0x2079, 0xb452, 0x7904, 0x00fe, 0xd1ac,
-+      0x1110, 0xa085, 0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0x2009,
-+      0xb474, 0x210c, 0xd184, 0x1110, 0xa085, 0x0002, 0x0026, 0x2009,
-+      0xb472, 0x210c, 0xd1e4, 0x0130, 0xc0c5, 0xa094, 0x0030, 0xa296,
-+      0x0010, 0x0140, 0xd1ec, 0x0130, 0xa094, 0x0030, 0xa296, 0x0010,
-+      0x0108, 0xc0bd, 0x002e, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014,
-+      0x080c, 0x7d11, 0x00de, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697,
-+      0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x60c3, 0x0014, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c,
-+      0x7697, 0x20a3, 0x0200, 0x0804, 0x736f, 0x20a1, 0x020b, 0x080c,
-+      0x7697, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3,
-+      0x2a00, 0x60c3, 0x0008, 0x080c, 0x7d11, 0x0005, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008,
-+      0x080c, 0x7d11, 0x0005, 0x0026, 0x0036, 0x0046, 0x2019, 0x3200,
-+      0x2021, 0x0800, 0x0038, 0x0026, 0x0036, 0x0046, 0x2019, 0x2200,
-+      0x2021, 0x0100, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
-+      0x0028, 0x2014, 0xa286, 0x007e, 0x11a0, 0xa385, 0x00ff, 0x20a2,
-+      0x20a3, 0xfffe, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x2001,
-+      0xb69e, 0x2004, 0xa005, 0x0118, 0x2011, 0xb41d, 0x2214, 0x22a2,
-+      0x04d0, 0xa286, 0x007f, 0x1138, 0x00d6, 0xa385, 0x00ff, 0x20a2,
-+      0x20a3, 0xfffd, 0x00c8, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1110,
-+      0xd2bc, 0x01c8, 0xa286, 0x0080, 0x00d6, 0x1130, 0xa385, 0x00ff,
-+      0x20a2, 0x20a3, 0xfffc, 0x0040, 0xa2e8, 0xb535, 0x2d6c, 0x6810,
-+      0xa305, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68,
-+      0x2da6, 0x00de, 0x0080, 0x00d6, 0xa2e8, 0xb535, 0x2d6c, 0x6810,
-+      0xa305, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011,
-+      0xb415, 0x2214, 0x22a2, 0xa485, 0x0029, 0x20a2, 0x004e, 0x003e,
-+      0x20a3, 0x0000, 0x080c, 0x7d00, 0x22a2, 0x20a3, 0x0000, 0x2fa2,
-+      0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005,
-+      0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011,
-+      0xfffc, 0x22a2, 0x00d6, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6,
-+      0x00de, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x08e0, 0x20a3, 0x0100,
-+      0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x0005, 0x0026,
-+      0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800, 0x0038, 0x0026,
-+      0x0036, 0x0046, 0x2019, 0x2300, 0x2021, 0x0100, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435,
-+      0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x02d8, 0x00d6, 0xa0e8,
-+      0xb535, 0x2d6c, 0x6810, 0xa305, 0x20a2, 0x6814, 0x20a2, 0x6810,
-+      0xa005, 0x1140, 0x6814, 0xa005, 0x1128, 0x20a3, 0x00ff, 0x20a3,
-+      0xfffe, 0x0028, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+      0x0080, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa305, 0x20a2,
-+      0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214,
-+      0x22a2, 0xa485, 0x0098, 0x20a2, 0x20a3, 0x0000, 0x004e, 0x003e,
-+      0x080c, 0x7d00, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x080c, 0x7d00,
-+      0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7810, 0x20a2, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00c6, 0x00f6, 0x6004,
-+      0xa08a, 0x0085, 0x0a0c, 0x1511, 0xa08a, 0x008c, 0x1a0c, 0x1511,
-+      0x6118, 0x2178, 0x79a0, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110,
-+      0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, 0x00ff,
-+      0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x2d88, 0x2f0d, 0xa18c,
-+      0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x001b,
-+      0x00fe, 0x00ce, 0x0005, 0x7734, 0x773e, 0x7759, 0x7732, 0x7732,
-+      0x7732, 0x7734, 0x080c, 0x1511, 0x0146, 0x20a1, 0x020b, 0x04a1,
-+      0x60c3, 0x0000, 0x080c, 0x7d11, 0x014e, 0x0005, 0x0146, 0x20a1,
-+      0x020b, 0x080c, 0x77a5, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808,
-+      0x20a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x7d11, 0x014e,
-+      0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x77df, 0x20a3, 0x0003,
-+      0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004,
-+      0x080c, 0x7d11, 0x014e, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214,
-+      0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, 0xb535,
-+      0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069,
-+      0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8,
-+      0xb535, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2,
-+      0x00de, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x22a2, 0x20a3,
-+      0x0009, 0x20a3, 0x0000, 0x0804, 0x7662, 0x0026, 0x20e1, 0x9080,
-+      0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435,
-+      0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8,
-+      0xb535, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2,
-+      0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6,
-+      0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814,
-+      0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x22a2,
-+      0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804, 0x76ee, 0x0026,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
-+      0x2011, 0xb435, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288,
-+      0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+      0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x8500,
-+      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+      0x2214, 0x22a2, 0x2001, 0x0099, 0x20a2, 0x20a3, 0x0000, 0x0804,
-+      0x76ee, 0x00c6, 0x00f6, 0x2c78, 0x7804, 0xa08a, 0x0040, 0x0a0c,
-+      0x1511, 0xa08a, 0x0053, 0x1a0c, 0x1511, 0x7918, 0x2160, 0x61a0,
-+      0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x6100,
-+      0xd1f4, 0x0120, 0x6114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000,
-+      0x0028, 0xa1e0, 0x2d88, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100,
-+      0x619a, 0xa082, 0x0040, 0x001b, 0x00fe, 0x00ce, 0x0005, 0x785c,
-+      0x7968, 0x7905, 0x7b0a, 0x785a, 0x785a, 0x785a, 0x785a, 0x785a,
-+      0x785a, 0x785a, 0x8081, 0x8091, 0x80a1, 0x80b1, 0x785a, 0x84c1,
-+      0x785a, 0x8070, 0x080c, 0x1511, 0x00d6, 0x0156, 0x0146, 0x780b,
-+      0xffff, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7910, 0x2168, 0x6948,
-+      0x7952, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184,
-+      0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001,
-+      0x0004, 0x0018, 0xa084, 0x0006, 0x8004, 0x0016, 0x2008, 0x7858,
-+      0xa084, 0x00ff, 0x8007, 0xa105, 0x001e, 0x20a2, 0xd1ac, 0x0118,
-+      0x20a3, 0x0002, 0x0048, 0xd1b4, 0x0118, 0x20a3, 0x0001, 0x0020,
-+      0x20a3, 0x0000, 0x2230, 0x0010, 0x6a80, 0x6e7c, 0x20a9, 0x0008,
-+      0x0136, 0xad88, 0x0017, 0x2198, 0x20a1, 0x021b, 0x53a6, 0x013e,
-+      0x20a1, 0x020b, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080,
-+      0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0xb6fc,
-+      0x2003, 0x07d0, 0x2001, 0xb6fb, 0x2003, 0x0009, 0x080c, 0x17da,
-+      0x014e, 0x015e, 0x00de, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000,
-+      0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202,
-+      0x8217, 0x7818, 0xa080, 0x0028, 0x2004, 0x2019, 0xb435, 0x231c,
-+      0xd3ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb535, 0x2d6c,
-+      0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c,
-+      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb535,
-+      0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x00de,
-+      0x20a3, 0x0000, 0x2009, 0xb415, 0x210c, 0x21a2, 0x20a3, 0x0829,
-+      0x20a3, 0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x0005, 0x00d6, 0x0156, 0x0136,
-+      0x0146, 0x20a1, 0x020b, 0x00c1, 0x7810, 0x2068, 0x6860, 0x20a2,
-+      0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
-+      0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x080c, 0x7d11, 0x014e,
-+      0x013e, 0x015e, 0x00de, 0x0005, 0x0026, 0x20e1, 0x9080, 0x20e1,
-+      0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214,
-+      0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb535, 0x2d6c,
-+      0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c,
-+      0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0xb535,
-+      0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2, 0x00de,
-+      0x20a3, 0x0000, 0x2011, 0xb415, 0x2214, 0x22a2, 0x20a3, 0x0889,
-+      0x20a3, 0x0000, 0x080c, 0x7d00, 0x22a2, 0x20a3, 0x0000, 0x7a08,
-+      0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005,
-+      0x00d6, 0x0156, 0x0136, 0x0146, 0x7810, 0xa0ec, 0xf000, 0x0168,
-+      0xa06d, 0x080c, 0x52c2, 0x0148, 0x684c, 0xa084, 0x2020, 0xa086,
-+      0x2020, 0x1118, 0x7820, 0xc0cd, 0x7822, 0x20a1, 0x020b, 0x080c,
-+      0x7ac0, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810,
-+      0xa084, 0xf000, 0x1130, 0x7810, 0xa084, 0x0700, 0x8007, 0x0043,
-+      0x0010, 0xa006, 0x002b, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
-+      0x79a2, 0x7a37, 0x7a40, 0x7a69, 0x7a7c, 0x7a97, 0x7aa0, 0x79a0,
-+      0x080c, 0x1511, 0x0016, 0x0036, 0x694c, 0xa18c, 0x0003, 0x0118,
-+      0xa186, 0x0003, 0x1170, 0x6b78, 0x7820, 0xd0cc, 0x0108, 0xc3e5,
-+      0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x003e, 0x001e, 0x0804,
-+      0x7a73, 0xa186, 0x0001, 0x190c, 0x1511, 0x6b78, 0x7820, 0xd0cc,
-+      0x0108, 0xc3e5, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2,
-+      0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384,
-+      0x0300, 0x0904, 0x7a31, 0xd3c4, 0x0110, 0x687c, 0xa108, 0xd3cc,
-+      0x0110, 0x6874, 0xa108, 0x0156, 0x20a9, 0x000d, 0xad80, 0x0020,
-+      0x201c, 0x831f, 0x23a2, 0x8000, 0x1f04, 0x79e0, 0x015e, 0x22a2,
-+      0x22a2, 0x22a2, 0xa184, 0x0003, 0x0904, 0x7a31, 0x20a1, 0x020b,
-+      0x20e1, 0x9080, 0x20e1, 0x4000, 0x0006, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
-+      0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+      0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700,
-+      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+      0x2214, 0x22a2, 0x000e, 0x7b20, 0xd3cc, 0x0118, 0x20a3, 0x0889,
-+      0x0010, 0x20a3, 0x0898, 0x20a2, 0x080c, 0x7d00, 0x22a2, 0x20a3,
-+      0x0000, 0x61c2, 0x003e, 0x001e, 0x080c, 0x7d11, 0x0005, 0x2011,
-+      0x0008, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0488,
-+      0x2011, 0x0302, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016,
-+      0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500,
-+      0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2,
-+      0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x080c, 0x7d11,
-+      0x0005, 0x2011, 0x0028, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2,
-+      0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
-+      0x0018, 0x080c, 0x7d11, 0x0005, 0x2011, 0x0100, 0x7820, 0xd0cc,
-+      0x0108, 0xc2e5, 0x22a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-+      0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7854, 0xa084, 0x00ff, 0x20a2,
-+      0x22a2, 0x22a2, 0x60c3, 0x0020, 0x080c, 0x7d11, 0x0005, 0x2011,
-+      0x0008, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0xa016, 0x0888,
-+      0x0036, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001,
-+      0x1138, 0x7820, 0xd0cc, 0x0108, 0xc2e5, 0x22a2, 0x003e, 0x0808,
-+      0x0046, 0x2021, 0x0800, 0x0006, 0x7820, 0xd0cc, 0x000e, 0x0108,
-+      0xc4e5, 0x24a2, 0x004e, 0x22a2, 0x20a2, 0x003e, 0x0804, 0x7a73,
-+      0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
-+      0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+      0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0700,
-+      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+      0x2214, 0x22a2, 0x7820, 0xd0cc, 0x0118, 0x20a3, 0x0889, 0x0010,
-+      0x20a3, 0x0898, 0x20a3, 0x0000, 0x080c, 0x7d00, 0x22a2, 0x20a3,
-+      0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x002e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x0016, 0x0036,
-+      0x7810, 0xa084, 0x0700, 0x8007, 0x003b, 0x003e, 0x001e, 0x014e,
-+      0x013e, 0x015e, 0x00de, 0x0005, 0x7b24, 0x7b24, 0x7b26, 0x7b24,
-+      0x7b24, 0x7b24, 0x7b48, 0x7b24, 0x080c, 0x1511, 0x7910, 0xa18c,
-+      0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003,
-+      0x00f9, 0x00d6, 0x2069, 0xb452, 0x6804, 0xd0bc, 0x0130, 0x682c,
-+      0xa084, 0x00ff, 0x8007, 0x20a2, 0x0010, 0x20a3, 0x3f00, 0x00de,
-+      0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x080c, 0x7d11, 0x0005,
-+      0x20a1, 0x020b, 0x2009, 0x0003, 0x0019, 0x20a3, 0x7f00, 0x0c80,
-+      0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-+      0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188,
-+      0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2,
-+      0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6, 0x00de,
-+      0x0088, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085, 0x0100,
-+      0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0xb415,
-+      0x2214, 0x22a2, 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x080c,
-+      0x7d00, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3,
-+      0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6,
-+      0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0xb400, 0x7154,
-+      0x7818, 0x2068, 0x68a0, 0x2028, 0x76d4, 0xd6ac, 0x1130, 0xd0bc,
-+      0x1120, 0x6910, 0x6a14, 0x7454, 0x0020, 0x6910, 0x6a14, 0x7370,
-+      0x7474, 0x781c, 0xa0be, 0x0006, 0x0904, 0x7c4b, 0xa0be, 0x000a,
-+      0x15e8, 0xa185, 0x0200, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073,
-+      0x2029, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e,
-+      0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086,
-+      0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6,
-+      0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+      0x609f, 0x0000, 0x080c, 0x855c, 0x2009, 0x07d0, 0x60c4, 0xa084,
-+      0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x69da, 0x003e,
-+      0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x70d4, 0xd0ac,
-+      0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a,
-+      0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000,
-+      0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084,
-+      0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082,
-+      0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010, 0x608e,
-+      0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+      0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120,
-+      0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c,
-+      0x855c, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, 0xa005, 0x0110,
-+      0x2009, 0x1b58, 0x080c, 0x69da, 0x003e, 0x004e, 0x005e, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003,
-+      0xa086, 0x0002, 0x0904, 0x7ca1, 0x2001, 0xb435, 0x2004, 0xd0ac,
-+      0x1110, 0xd5bc, 0x0138, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a,
-+      0x646e, 0x0038, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000,
-+      0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084,
-+      0x00ff, 0x688e, 0x8007, 0x607a, 0x7834, 0x607e, 0x2f00, 0x6086,
-+      0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6,
-+      0x707c, 0x60ca, 0x707c, 0x792c, 0xa108, 0x792e, 0x7080, 0x7928,
-+      0xa109, 0x792a, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+      0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294,
-+      0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x8559, 0x0804,
-+      0x7c39, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138,
-+      0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038, 0xa185,
-+      0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x080c, 0x52c2,
-+      0x0180, 0x00d6, 0x7810, 0xa06d, 0x684c, 0x00de, 0xa084, 0x2020,
-+      0xa086, 0x2020, 0x1130, 0x7820, 0xc0cd, 0x7822, 0x6073, 0x0889,
-+      0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084,
-+      0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086,
-+      0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6,
-+      0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-+      0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294,
-+      0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x7820, 0xd0cc, 0x0120,
-+      0x080c, 0x855c, 0x0804, 0x7c39, 0x080c, 0x8559, 0x0804, 0x7c39,
-+      0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202,
-+      0x8217, 0x0005, 0x00d6, 0x2069, 0xb6e0, 0x6843, 0x0001, 0x00de,
-+      0x0005, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x0019,
-+      0x080c, 0x69cc, 0x0005, 0x0006, 0x6014, 0xa084, 0x0004, 0xa085,
-+      0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061,
-+      0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0xa084, 0x0004, 0xa085,
-+      0x0008, 0x6016, 0x000e, 0xe000, 0xe000, 0xe000, 0xe000, 0x61a6,
-+      0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061,
-+      0x0100, 0x2069, 0x0140, 0x080c, 0x5a90, 0x1198, 0x2001, 0xb6fc,
-+      0x2004, 0xa005, 0x15b8, 0x0066, 0x2031, 0x0001, 0x080c, 0x5b12,
-+      0x006e, 0x1118, 0x080c, 0x69cc, 0x0468, 0x00c6, 0x2061, 0xb6e0,
-+      0x00d8, 0x6904, 0xa194, 0x4000, 0x0550, 0x0831, 0x6803, 0x1000,
-+      0x6803, 0x0000, 0x00c6, 0x2061, 0xb6e0, 0x6128, 0xa192, 0x00c8,
-+      0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c,
-+      0x69cc, 0x080c, 0x7d1b, 0x0070, 0x6124, 0xa1e5, 0x0000, 0x0140,
-+      0x080c, 0xb3c7, 0x080c, 0x69d5, 0x2009, 0x0014, 0x080c, 0x85ef,
-+      0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001,
-+      0xb6fc, 0x2004, 0xa005, 0x1db0, 0x00c6, 0x2061, 0xb6e0, 0x6128,
-+      0xa192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x69cc,
-+      0x080c, 0x4ad9, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026,
-+      0x080c, 0x69e2, 0x2071, 0xb6e0, 0x713c, 0x81ff, 0x0590, 0x2061,
-+      0x0100, 0x2069, 0x0140, 0x080c, 0x5a90, 0x11a8, 0x0036, 0x2019,
-+      0x0002, 0x080c, 0x7f8e, 0x003e, 0x713c, 0x2160, 0x080c, 0xb3c7,
-+      0x2009, 0x004a, 0x080c, 0x85ef, 0x0066, 0x2031, 0x0001, 0x080c,
-+      0x5b12, 0x006e, 0x00b0, 0x6904, 0xa194, 0x4000, 0x01c0, 0x6803,
-+      0x1000, 0x6803, 0x0000, 0x0036, 0x2019, 0x0001, 0x080c, 0x7f8e,
-+      0x003e, 0x713c, 0x2160, 0x080c, 0xb3c7, 0x2009, 0x004a, 0x080c,
-+      0x85ef, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c58,
-+      0x0026, 0x00e6, 0x2071, 0xb6e0, 0x7048, 0xd084, 0x01c0, 0x713c,
-+      0x81ff, 0x01a8, 0x2071, 0x0100, 0xa188, 0x0007, 0x2114, 0xa28e,
-+      0x0006, 0x1138, 0x7014, 0xa084, 0x0184, 0xa085, 0x0012, 0x7016,
-+      0x0030, 0x7014, 0xa084, 0x0184, 0xa085, 0x0016, 0x7016, 0x00ee,
-+      0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071,
-+      0xb6e0, 0x7018, 0x2068, 0x8dff, 0x0188, 0x68a0, 0xa406, 0x0118,
-+      0x6854, 0x2068, 0x0cc0, 0x6010, 0x2060, 0x643c, 0x6540, 0x6648,
-+      0x2d60, 0x080c, 0x50db, 0x0110, 0xa085, 0x0001, 0x012e, 0x000e,
-+      0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x20a1,
-+      0x020b, 0x080c, 0x75fb, 0x20a3, 0x1200, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x781c, 0xa086, 0x0004, 0x1110, 0x6098, 0x0018, 0x2001,
-+      0xb415, 0x2004, 0x20a2, 0x7834, 0x20a2, 0x7838, 0x20a2, 0x20a9,
-+      0x0010, 0xa006, 0x20a2, 0x1f04, 0x7e4a, 0x20a2, 0x20a2, 0x60c3,
-+      0x002c, 0x080c, 0x7d11, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b,
-+      0x080c, 0x75fb, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d11, 0x014e, 0x015e,
-+      0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+      0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0xb440, 0x2019,
-+      0xb441, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, 0x1f04,
-+      0x7e79, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x080c,
-+      0x7d11, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x0016, 0x0026,
-+      0x20a1, 0x020b, 0x080c, 0x7670, 0x080c, 0x7686, 0x7810, 0xa080,
-+      0x0000, 0x2004, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002,
-+      0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x7d11,
-+      0x002e, 0x001e, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1,
-+      0x020b, 0x080c, 0x75fb, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d11, 0x014e,
-+      0x015e, 0x0005, 0x0156, 0x0146, 0x0016, 0x0026, 0x20a1, 0x020b,
-+      0x080c, 0x75fb, 0x7810, 0xa080, 0x0000, 0x2004, 0xa080, 0x0017,
-+      0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, 0x8003, 0x60c2,
-+      0x080c, 0x7d11, 0x002e, 0x001e, 0x014e, 0x015e, 0x0005, 0x00e6,
-+      0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x700c,
-+      0x2060, 0x8cff, 0x0178, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc,
-+      0x600c, 0x0006, 0x080c, 0x9fb0, 0x080c, 0x85c0, 0x080c, 0x80c8,
-+      0x00ce, 0x0c78, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x000e,
-+      0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6,
-+      0x00c6, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100,
-+      0x2079, 0x0140, 0x2071, 0xb6e0, 0x7024, 0x2060, 0x8cff, 0x05a0,
-+      0x080c, 0x7d24, 0x68c3, 0x0000, 0x080c, 0x69d5, 0x2009, 0x0013,
-+      0x080c, 0x85ef, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827,
-+      0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803,
-+      0x0000, 0x0078, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04,
-+      0x7f24, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803,
-+      0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee,
-+      0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0xb400, 0x2004, 0xa096,
-+      0x0001, 0x0590, 0xa096, 0x0004, 0x0578, 0x080c, 0x69d5, 0x6814,
-+      0xa084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3,
-+      0x0000, 0x2011, 0x4a96, 0x080c, 0x6961, 0x20a9, 0x01f4, 0x6824,
-+      0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0,
-+      0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827,
-+      0x0001, 0x0010, 0x1f04, 0x7f67, 0x7804, 0xa084, 0x1000, 0x0120,
-+      0x7803, 0x0100, 0x7803, 0x0000, 0x000e, 0x001e, 0x002e, 0x00ce,
-+      0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126, 0x0156,
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091,
-+      0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0xb6e0, 0x703c,
-+      0x2060, 0x8cff, 0x0904, 0x8015, 0xa386, 0x0002, 0x1128, 0x6814,
-+      0xa084, 0x0002, 0x0904, 0x8015, 0x68af, 0x95f5, 0x6817, 0x0010,
-+      0x2009, 0x00fa, 0x8109, 0x1df0, 0x68c7, 0x0000, 0x68cb, 0x0008,
-+      0x080c, 0x69e2, 0x080c, 0x21dd, 0x0046, 0x2009, 0x017f, 0x200b,
-+      0x00a5, 0x2021, 0x0169, 0x2404, 0xa084, 0x000f, 0xa086, 0x0004,
-+      0x1500, 0x68af, 0x95f5, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x00e6,
-+      0x00f6, 0x2079, 0x0020, 0x2071, 0xb74a, 0x6814, 0xa084, 0x0184,
-+      0xa085, 0x0012, 0x6816, 0x7803, 0x0008, 0x7003, 0x0000, 0x00fe,
-+      0x00ee, 0xa386, 0x0002, 0x1128, 0x7884, 0xa005, 0x1110, 0x7887,
-+      0x0001, 0x2001, 0xb6b1, 0x2004, 0x200a, 0x004e, 0xa39d, 0x0000,
-+      0x1120, 0x2009, 0x0049, 0x080c, 0x85ef, 0x20a9, 0x03e8, 0x6824,
-+      0xd094, 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0,
-+      0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0xd08c, 0x0118, 0x6827,
-+      0x0002, 0x0010, 0x1f04, 0x7ff7, 0x7804, 0xa084, 0x1000, 0x0120,
-+      0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x000e, 0x001e, 0x002e,
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
-+      0x0126, 0x2091, 0x8000, 0x2069, 0xb6e0, 0x6a06, 0x012e, 0x00de,
-+      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0xb6e0, 0x6a32,
-+      0x012e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006,
-+      0x0126, 0x2071, 0xb6e0, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000,
-+      0x8cff, 0x0538, 0x601c, 0xa206, 0x1500, 0x7014, 0xac36, 0x1110,
-+      0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118,
-+      0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00,
-+      0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
-+      0x9dae, 0x080c, 0x80c8, 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060,
-+      0x08b8, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-+      0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810, 0x20a2,
-+      0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804,
-+      0x80c0, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000,
-+      0x0478, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000,
-+      0x00f8, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400,
-+      0x0078, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x78bc, 0x7810,
-+      0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200,
-+      0x0089, 0x60c3, 0x0020, 0x080c, 0x7d11, 0x014e, 0x015e, 0x0005,
-+      0x00e6, 0x2071, 0xb6e0, 0x7020, 0xa005, 0x0110, 0x8001, 0x7022,
-+      0x00ee, 0x0005, 0x20a9, 0x0008, 0x20a2, 0x1f04, 0x80d4, 0x20a2,
-+      0x20a2, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x7614, 0x2660,
-+      0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x8169, 0x8cff, 0x0904,
-+      0x8169, 0x601c, 0xa086, 0x0006, 0x1904, 0x8164, 0x88ff, 0x0138,
-+      0x2800, 0xac06, 0x1904, 0x8164, 0x2039, 0x0000, 0x0050, 0x6018,
-+      0xa206, 0x1904, 0x8164, 0x85ff, 0x0120, 0x6050, 0xa106, 0x1904,
-+      0x8164, 0x7024, 0xac06, 0x1560, 0x2069, 0x0100, 0x68c0, 0xa005,
-+      0x0518, 0x080c, 0x69d5, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5,
-+      0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0x81f0, 0x7027, 0x0000,
-+      0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803,
-+      0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-+      0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x0460,
-+      0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140,
-+      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
-+      0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x89ff, 0x1158, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x9beb,
-+      0x0110, 0x080c, 0xb01c, 0x080c, 0x9dae, 0x080c, 0x80c8, 0x88ff,
-+      0x1190, 0x00ce, 0x0804, 0x80eb, 0x2c78, 0x600c, 0x2060, 0x0804,
-+      0x80eb, 0xa006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de,
-+      0x00ee, 0x00fe, 0x0005, 0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001,
-+      0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006,
-+      0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x7638, 0x2660, 0x2678,
-+      0x8cff, 0x0904, 0x81e0, 0x601c, 0xa086, 0x0006, 0x1904, 0x81db,
-+      0x87ff, 0x0128, 0x2700, 0xac06, 0x1904, 0x81db, 0x0048, 0x6018,
-+      0xa206, 0x1904, 0x81db, 0x85ff, 0x0118, 0x6050, 0xa106, 0x15d8,
-+      0x703c, 0xac06, 0x1180, 0x0036, 0x2019, 0x0001, 0x080c, 0x7f8e,
-+      0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, 0x0000,
-+      0x704b, 0x0000, 0x003e, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a,
-+      0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036,
-+      0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110,
-+      0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x080c,
-+      0x9beb, 0x0110, 0x080c, 0xb01c, 0x080c, 0x9dae, 0x87ff, 0x1190,
-+      0x00ce, 0x0804, 0x8188, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8188,
-+      0xa006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
-+      0x00fe, 0x0005, 0x6017, 0x0000, 0x00ce, 0xa7bd, 0x0001, 0x0c88,
-+      0x00e6, 0x2071, 0xb6e0, 0x2001, 0xb400, 0x2004, 0xa086, 0x0002,
-+      0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005,
-+      0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
-+      0x8000, 0x2071, 0xb6e0, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff,
-+      0x0518, 0x2200, 0xac06, 0x11e0, 0x7038, 0xac36, 0x1110, 0x660c,
-+      0x763a, 0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00,
-+      0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, 0x0110,
-+      0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0xa085, 0x0001, 0x0020,
-+      0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e,
-+      0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
-+      0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0xb6e0, 0x760c,
-+      0x2660, 0x2678, 0x8cff, 0x0904, 0x82c6, 0x6018, 0xa080, 0x0028,
-+      0x2004, 0xa206, 0x1904, 0x82c1, 0x7024, 0xac06, 0x1508, 0x2069,
-+      0x0100, 0x68c0, 0xa005, 0x0904, 0x829d, 0x080c, 0x7d24, 0x68c3,
-+      0x0000, 0x080c, 0x81f0, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
-+      0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000,
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+      0x700c, 0xac36, 0x1110, 0x660c, 0x760e, 0x7008, 0xac36, 0x1140,
-+      0x2c00, 0xaf36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000,
-+      0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0x080c, 0x9dd8, 0x1158, 0x080c, 0x2c86, 0x080c,
-+      0x9de9, 0x11f0, 0x080c, 0x8bbc, 0x00d8, 0x080c, 0x81f0, 0x08c0,
-+      0x080c, 0x9de9, 0x1118, 0x080c, 0x8bbc, 0x0090, 0x6010, 0x2068,
-+      0x080c, 0x9beb, 0x0168, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837,
-+      0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9da2,
-+      0x080c, 0x9fb0, 0x080c, 0x9dae, 0x080c, 0x80c8, 0x00ce, 0x0804,
-+      0x824a, 0x2c78, 0x600c, 0x2060, 0x0804, 0x824a, 0x012e, 0x000e,
-+      0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086,
-+      0x0006, 0x1d30, 0x080c, 0xb01c, 0x0c18, 0x0036, 0x0156, 0x0136,
-+      0x0146, 0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2a7d,
-+      0x1118, 0x8210, 0x8000, 0x0cc8, 0xa005, 0x0138, 0x20a9, 0x0020,
-+      0x2198, 0xa110, 0x22a0, 0x22c8, 0x53a3, 0x014e, 0x013e, 0x015e,
-+      0x003e, 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+      0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x2099, 0xb6b9, 0x20a9, 0x0004, 0x53a6, 0x20a3, 0x0004,
-+      0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x080c, 0x7d11,
-+      0x00de, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3, 0x0214,
-+      0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, 0x20a2,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-+      0x7810, 0xa084, 0x00ff, 0x20a2, 0x7828, 0x20a2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x60c3, 0x0018, 0x080c, 0x7d11, 0x0005, 0x00d6,
-+      0x0016, 0x2f68, 0x2009, 0x0035, 0x080c, 0xa09b, 0x1904, 0x83a5,
-+      0x20a1, 0x020b, 0x080c, 0x75fb, 0x20a3, 0x1300, 0x20a3, 0x0000,
-+      0x7828, 0x2068, 0x681c, 0xa086, 0x0003, 0x0580, 0x7818, 0xa080,
-+      0x0028, 0x2014, 0x2001, 0xb435, 0x2004, 0xd0ac, 0x11d0, 0xa286,
-+      0x007e, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x04b8, 0xa286,
-+      0x007f, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffd, 0x0478, 0xd2bc,
-+      0x0180, 0xa286, 0x0080, 0x1128, 0x20a3, 0x00ff, 0x20a3, 0xfffc,
-+      0x0428, 0xa2e8, 0xb535, 0x2d6c, 0x6810, 0x20a2, 0x6814, 0x20a2,
-+      0x00e8, 0x20a3, 0x0000, 0x6098, 0x20a2, 0x00c0, 0x2001, 0xb435,
-+      0x2004, 0xd0ac, 0x1138, 0x7818, 0xa080, 0x0028, 0x2004, 0xa082,
-+      0x007e, 0x0240, 0x00d6, 0x2069, 0xb41c, 0x2da6, 0x8d68, 0x2da6,
-+      0x00de, 0x0020, 0x20a3, 0x0000, 0x6034, 0x20a2, 0x7834, 0x20a2,
-+      0x7838, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c,
-+      0x080c, 0x7d11, 0x001e, 0x00de, 0x0005, 0x7817, 0x0001, 0x7803,
-+      0x0006, 0x001e, 0x00de, 0x0005, 0x00d6, 0x0026, 0x7928, 0x2168,
-+      0x691c, 0xa186, 0x0006, 0x01c0, 0xa186, 0x0003, 0x0904, 0x841b,
-+      0xa186, 0x0005, 0x0904, 0x8404, 0xa186, 0x0004, 0x05b8, 0xa186,
-+      0x0008, 0x0904, 0x840c, 0x7807, 0x0037, 0x7813, 0x1700, 0x080c,
-+      0x8483, 0x002e, 0x00de, 0x0005, 0x080c, 0x843f, 0x2009, 0x4000,
-+      0x6800, 0x0002, 0x83e5, 0x83f0, 0x83e7, 0x83f0, 0x83ec, 0x83e5,
-+      0x83e5, 0x83f0, 0x83f0, 0x83f0, 0x83f0, 0x83e5, 0x83e5, 0x83e5,
-+      0x83e5, 0x83e5, 0x83f0, 0x83e5, 0x83f0, 0x080c, 0x1511, 0x6820,
-+      0xd0e4, 0x0110, 0xd0cc, 0x0110, 0xa00e, 0x0010, 0x2009, 0x2000,
-+      0x6828, 0x20a2, 0x682c, 0x20a2, 0x0804, 0x8435, 0x080c, 0x843f,
-+      0x20a3, 0x0000, 0x20a3, 0x0000, 0x2009, 0x4000, 0x6a00, 0xa286,
-+      0x0002, 0x1108, 0xa00e, 0x0488, 0x04d1, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x2009, 0x4000, 0x0448, 0x0491, 0x20a3, 0x0000, 0x20a3,
-+      0x0000, 0x2009, 0x4000, 0xa286, 0x0005, 0x0118, 0xa286, 0x0002,
-+      0x1108, 0xa00e, 0x00d0, 0x0419, 0x6810, 0x2068, 0x697c, 0x6810,
-+      0xa112, 0x6980, 0x6814, 0xa103, 0x20a2, 0x22a2, 0x7928, 0xa180,
-+      0x0000, 0x2004, 0xa08e, 0x0002, 0x0130, 0xa08e, 0x0004, 0x0118,
-+      0x2009, 0x4000, 0x0010, 0x2009, 0x0000, 0x21a2, 0x20a3, 0x0000,
-+      0x60c3, 0x0018, 0x080c, 0x7d11, 0x002e, 0x00de, 0x0005, 0x0036,
-+      0x0046, 0x0056, 0x0066, 0x20a1, 0x020b, 0x080c, 0x7697, 0xa006,
-+      0x20a3, 0x0200, 0x20a2, 0x7934, 0x21a2, 0x7938, 0x21a2, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1118,
-+      0xa092, 0x007e, 0x0268, 0x00d6, 0x2069, 0xb41c, 0x2d2c, 0x8d68,
-+      0x2d34, 0xa0e8, 0xb535, 0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0030,
-+      0x2019, 0x0000, 0x6498, 0x2029, 0x0000, 0x6634, 0x7828, 0xa080,
-+      0x0007, 0x2004, 0xa086, 0x0003, 0x1128, 0x25a2, 0x26a2, 0x23a2,
-+      0x24a2, 0x0020, 0x23a2, 0x24a2, 0x25a2, 0x26a2, 0x006e, 0x005e,
-+      0x004e, 0x003e, 0x0005, 0x20a1, 0x020b, 0x080c, 0x7697, 0x20a3,
-+      0x0100, 0x20a3, 0x0000, 0x20a3, 0x0009, 0x7810, 0x20a2, 0x60c3,
-+      0x0008, 0x080c, 0x7d11, 0x0005, 0x20a1, 0x020b, 0x080c, 0x75f3,
-+      0x20a3, 0x1400, 0x20a3, 0x0000, 0x7834, 0x20a2, 0x7838, 0x20a2,
-+      0x7828, 0x20a2, 0x782c, 0x20a2, 0x7830, 0xa084, 0x00ff, 0x8007,
-+      0x20a2, 0x20a3, 0x0000, 0x60c3, 0x0010, 0x080c, 0x7d11, 0x0005,
-+      0x20a1, 0x020b, 0x080c, 0x768f, 0x20a3, 0x0100, 0x20a3, 0x0000,
-+      0x7828, 0x20a2, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x7d11,
-+      0x0005, 0x0146, 0x20a1, 0x020b, 0x0031, 0x60c3, 0x0000, 0x080c,
-+      0x7d11, 0x014e, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-+      0xa080, 0x0028, 0x2004, 0x2011, 0xb435, 0x2214, 0xd2ac, 0x1110,
-+      0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810, 0xa085,
-+      0x0300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0xb41c, 0x2da6, 0x8d68,
-+      0x2da6, 0x00de, 0x0078, 0x00d6, 0xa0e8, 0xb535, 0x2d6c, 0x6810,
-+      0xa085, 0x0300, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000,
-+      0x6234, 0x22a2, 0x20a3, 0x0819, 0x20a3, 0x0000, 0x080c, 0x7d00,
-+      0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x7a08, 0x22a2, 0x20a3, 0x0000,
-+      0x20a3, 0x0000, 0x0005, 0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2,
-+      0x20a3, 0x0000, 0x60c3, 0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575,
-+      0x080c, 0x7d1b, 0x080c, 0x69cc, 0x0005, 0x0156, 0x0136, 0x0036,
-+      0x00d6, 0x00e6, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7854, 0x2068,
-+      0xadf0, 0x000f, 0x7210, 0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212,
-+      0x7214, 0xa294, 0x0300, 0x7216, 0x7100, 0xa194, 0x00ff, 0x7308,
-+      0xa384, 0x00ff, 0xa08d, 0xc200, 0x7102, 0xa384, 0xff00, 0xa215,
-+      0x720a, 0x7004, 0x720c, 0x700e, 0x7206, 0x20a9, 0x000a, 0x2e98,
-+      0x53a6, 0x60a3, 0x0035, 0x6a38, 0xa294, 0x7000, 0xa286, 0x3000,
-+      0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x003e, 0x013e, 0x015e,
-+      0x0005, 0x2009, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036,
-+      0x6116, 0x0005, 0x2061, 0xbc00, 0x2a70, 0x7068, 0x704a, 0x704f,
-+      0xbc00, 0x0005, 0x00e6, 0x0126, 0x2071, 0xb400, 0x2091, 0x8000,
-+      0x7548, 0xa582, 0x0010, 0x0608, 0x704c, 0x2060, 0x6000, 0xa086,
-+      0x0000, 0x0148, 0xace0, 0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0,
-+      0x2061, 0xbc00, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754a, 0xaca8,
-+      0x0018, 0x705c, 0xa502, 0x1230, 0x754e, 0xa085, 0x0001, 0x012e,
-+      0x00ee, 0x0005, 0x704f, 0xbc00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6,
-+      0x2071, 0xb400, 0x7548, 0xa582, 0x0010, 0x0600, 0x704c, 0x2060,
-+      0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x0018, 0x705c, 0xac02,
-+      0x1208, 0x0cb0, 0x2061, 0xbc00, 0x0c98, 0x6003, 0x0008, 0x8529,
-+      0x754a, 0xaca8, 0x0018, 0x705c, 0xa502, 0x1228, 0x754e, 0xa085,
-+      0x0001, 0x00ee, 0x0005, 0x704f, 0xbc00, 0x0cc8, 0xa006, 0x0cc8,
-+      0xac82, 0xbc00, 0x0a0c, 0x1511, 0x2001, 0xb417, 0x2004, 0xac02,
-+      0x1a0c, 0x1511, 0xa006, 0x6006, 0x600a, 0x600e, 0x6012, 0x6016,
-+      0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x6052, 0x6056, 0x6022,
-+      0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x2061,
-+      0xb400, 0x6048, 0x8000, 0x604a, 0xa086, 0x0001, 0x0108, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0cc0, 0x601c,
-+      0xa084, 0x000f, 0x0002, 0x85fe, 0x860d, 0x8628, 0x8643, 0xa0df,
-+      0xa0fa, 0xa115, 0x85fe, 0x860d, 0x85fe, 0x865e, 0xa186, 0x0013,
-+      0x1128, 0x080c, 0x7055, 0x080c, 0x7134, 0x0005, 0xa18e, 0x0047,
-+      0x1118, 0xa016, 0x080c, 0x1856, 0x0005, 0x0066, 0x6000, 0xa0b2,
-+      0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005, 0x8626, 0x8a3e,
-+      0x8bf6, 0x8626, 0x8c6b, 0x871c, 0x8626, 0x8626, 0x89d0, 0x908f,
-+      0x8626, 0x8626, 0x8626, 0x8626, 0x8626, 0x8626, 0x080c, 0x1511,
-+      0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e,
-+      0x0005, 0x8641, 0x96bb, 0x8641, 0x8641, 0x8641, 0x8641, 0x8641,
-+      0x8641, 0x9666, 0x9827, 0x8641, 0x96e8, 0x975f, 0x96e8, 0x975f,
-+      0x8641, 0x080c, 0x1511, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c,
-+      0x1511, 0x0013, 0x006e, 0x0005, 0x865c, 0x90d0, 0x919a, 0x92ce,
-+      0x942a, 0x865c, 0x865c, 0x865c, 0x90aa, 0x9616, 0x9619, 0x865c,
-+      0x865c, 0x865c, 0x865c, 0x9643, 0x080c, 0x1511, 0x0066, 0x6000,
-+      0xa0b2, 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005, 0x8677,
-+      0x8677, 0x8677, 0x86a5, 0x86f2, 0x8677, 0x8677, 0x8677, 0x8679,
-+      0x8677, 0x8677, 0x8677, 0x8677, 0x8677, 0x8677, 0x8677, 0x080c,
-+      0x1511, 0xa186, 0x0003, 0x190c, 0x1511, 0x00d6, 0x6003, 0x0003,
-+      0x6106, 0x6010, 0x2068, 0x684f, 0x0040, 0x687c, 0x680a, 0x6880,
-+      0x680e, 0x6813, 0x0000, 0x6817, 0x0000, 0x6854, 0xa092, 0x199a,
-+      0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0xa210, 0x6216,
-+      0x00de, 0x2c10, 0x080c, 0x1f7a, 0x080c, 0x6cb5, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x71f1, 0x012e, 0x0005, 0xa182, 0x0047, 0x0002,
-+      0x86b1, 0x86b1, 0x86b3, 0x86cc, 0x86b1, 0x86b1, 0x86b1, 0x86b1,
-+      0x86de, 0x080c, 0x1511, 0x00d6, 0x0016, 0x080c, 0x70e7, 0x080c,
-+      0x71f1, 0x6003, 0x0004, 0x6110, 0x2168, 0x684f, 0x0020, 0x685c,
-+      0x685a, 0x6874, 0x687e, 0x6878, 0x6882, 0x6897, 0x0000, 0x689b,
-+      0x0000, 0x001e, 0x00de, 0x0005, 0x080c, 0x70e7, 0x00d6, 0x6110,
-+      0x2168, 0x080c, 0x9beb, 0x0120, 0x684b, 0x0006, 0x080c, 0x53c9,
-+      0x00de, 0x080c, 0x85c0, 0x080c, 0x71f1, 0x0005, 0x080c, 0x70e7,
-+      0x080c, 0x2c60, 0x00d6, 0x6110, 0x2168, 0x080c, 0x9beb, 0x0120,
-+      0x684b, 0x0029, 0x080c, 0x53c9, 0x00de, 0x080c, 0x85c0, 0x080c,
-+      0x71f1, 0x0005, 0xa182, 0x0047, 0x0002, 0x8700, 0x870f, 0x86fe,
-+      0x86fe, 0x86fe, 0x86fe, 0x86fe, 0x86fe, 0x86fe, 0x080c, 0x1511,
-+      0x00d6, 0x6010, 0x2068, 0x684c, 0xc0f4, 0x684e, 0x00de, 0x20e1,
-+      0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0x00d6,
-+      0x6110, 0x2168, 0x684b, 0x0000, 0x6853, 0x0000, 0x080c, 0x53c9,
-+      0x00de, 0x080c, 0x85c0, 0x0005, 0xa1b6, 0x0015, 0x1118, 0x080c,
-+      0x85c0, 0x0030, 0xa1b6, 0x0016, 0x190c, 0x1511, 0x080c, 0x85c0,
-+      0x0005, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0x20a9,
-+      0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318, 0x3428, 0x222e,
-+      0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398, 0x0002, 0xa4a0,
-+      0x0002, 0x1f04, 0x8737, 0x00e6, 0x080c, 0x9beb, 0x0130, 0x6010,
-+      0x2070, 0x7007, 0x0000, 0x7037, 0x0103, 0x00ee, 0x080c, 0x85c0,
-+      0x0005, 0x00d6, 0x0036, 0x7330, 0xa386, 0x0200, 0x1130, 0x6018,
-+      0x2068, 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6010, 0xa005, 0x0130,
-+      0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6b32, 0x080c, 0x85c0,
-+      0x003e, 0x00de, 0x0005, 0x0016, 0x20a9, 0x002a, 0xae80, 0x000c,
-+      0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a,
-+      0x6010, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3,
-+      0x00e6, 0x6010, 0x2004, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c,
-+      0x85c0, 0x001e, 0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0xa086,
-+      0x0100, 0x0140, 0x7038, 0xa084, 0x00ff, 0x800c, 0x703c, 0xa084,
-+      0x00ff, 0x8004, 0xa080, 0x0004, 0xa108, 0x21a8, 0xae80, 0x000c,
-+      0x2098, 0x6010, 0xa080, 0x0002, 0x20a0, 0x080c, 0x4b49, 0x00e6,
-+      0x080c, 0x9beb, 0x0140, 0x6010, 0x2070, 0x7007, 0x0000, 0x7034,
-+      0x70b2, 0x7037, 0x0103, 0x00ee, 0x080c, 0x85c0, 0x001e, 0x0005,
-+      0x00e6, 0x00d6, 0x603f, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035,
-+      0x080c, 0xa09b, 0x001e, 0x1168, 0x0026, 0x6228, 0x2268, 0x002e,
-+      0x2071, 0xba8c, 0x6b1c, 0xa386, 0x0003, 0x0130, 0xa386, 0x0006,
-+      0x0128, 0x080c, 0x85c0, 0x0020, 0x0031, 0x0010, 0x080c, 0x8899,
-+      0x00de, 0x00ee, 0x0005, 0x00f6, 0x6810, 0x2078, 0xa186, 0x0015,
-+      0x0904, 0x8880, 0xa18e, 0x0016, 0x1904, 0x8897, 0x700c, 0xa08c,
-+      0xff00, 0xa186, 0x1700, 0x0120, 0xa186, 0x0300, 0x1904, 0x885f,
-+      0x8fff, 0x1138, 0x6800, 0xa086, 0x000f, 0x0904, 0x8843, 0x0804,
-+      0x8895, 0x6808, 0xa086, 0xffff, 0x1904, 0x8882, 0x784c, 0xa084,
-+      0x0060, 0xa086, 0x0020, 0x1150, 0x797c, 0x7810, 0xa106, 0x1904,
-+      0x8882, 0x7980, 0x7814, 0xa106, 0x1904, 0x8882, 0x080c, 0x9da2,
-+      0x6858, 0x7852, 0x784c, 0xc0dc, 0xc0f4, 0xc0d4, 0x784e, 0x0026,
-+      0xa00e, 0x6a14, 0x2001, 0x000a, 0x080c, 0x6b05, 0x7854, 0xa20a,
-+      0x0208, 0x8011, 0x7a56, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60,
-+      0x080c, 0x99a2, 0x00ce, 0x0804, 0x8895, 0x00c6, 0x00d6, 0x2f68,
-+      0x6838, 0xd0fc, 0x1118, 0x080c, 0x4c1e, 0x0010, 0x080c, 0x4e0a,
-+      0x00de, 0x00ce, 0x1904, 0x8882, 0x00c6, 0x2d60, 0x080c, 0x85c0,
-+      0x00ce, 0x0804, 0x8895, 0x00c6, 0x080c, 0x9e67, 0x0190, 0x6013,
-+      0x0000, 0x6818, 0x601a, 0x080c, 0x9fb8, 0x601f, 0x0003, 0x6904,
-+      0x00c6, 0x2d60, 0x080c, 0x85c0, 0x00ce, 0x080c, 0x85ef, 0x00ce,
-+      0x04e0, 0x2001, 0xb6b8, 0x2004, 0x683e, 0x00ce, 0x04b0, 0x7008,
-+      0xa086, 0x000b, 0x11a0, 0x6018, 0x200c, 0xc1bc, 0x2102, 0x00c6,
-+      0x2d60, 0x7853, 0x0003, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f,
-+      0x0002, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ce, 0x00f0, 0x700c,
-+      0xa086, 0x2a00, 0x1138, 0x2001, 0xb6b8, 0x2004, 0x683e, 0x00a8,
-+      0x0481, 0x00a8, 0x8fff, 0x090c, 0x1511, 0x00c6, 0x00d6, 0x2d60,
-+      0x2f68, 0x6837, 0x0103, 0x684b, 0x0003, 0x080c, 0x9896, 0x080c,
-+      0x9da2, 0x080c, 0x9dae, 0x00de, 0x00ce, 0x080c, 0x85c0, 0x00fe,
-+      0x0005, 0xa186, 0x0015, 0x1128, 0x2001, 0xb6b8, 0x2004, 0x683e,
-+      0x0068, 0xa18e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c,
-+      0xb2bd, 0x080c, 0x6ab4, 0x080c, 0x85c0, 0x00ce, 0x080c, 0x85c0,
-+      0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0x7c80, 0x7b7c, 0xd2f4,
-+      0x0130, 0x2001, 0xb6b8, 0x2004, 0x683e, 0x0804, 0x8913, 0x00c6,
-+      0x2d60, 0x080c, 0x98b6, 0x00ce, 0x6804, 0xa086, 0x0050, 0x1168,
-+      0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c,
-+      0x6c52, 0x080c, 0x7134, 0x00ce, 0x04f0, 0x6800, 0xa086, 0x000f,
-+      0x01c8, 0x8fff, 0x090c, 0x1511, 0x6820, 0xd0dc, 0x1198, 0x6800,
-+      0xa086, 0x0004, 0x1198, 0x784c, 0xd0ac, 0x0180, 0x784c, 0xc0dc,
-+      0xc0f4, 0x784e, 0x7850, 0xc0f4, 0xc0fc, 0x7852, 0x2001, 0x0001,
-+      0x682e, 0x00e0, 0x2001, 0x0007, 0x682e, 0x00c0, 0x784c, 0xd0b4,
-+      0x1130, 0xd0ac, 0x0db8, 0x784c, 0xd0f4, 0x1da0, 0x0c38, 0xd2ec,
-+      0x1d88, 0x7024, 0xa306, 0x1118, 0x7020, 0xa406, 0x0d58, 0x7020,
-+      0x6836, 0x7024, 0x683a, 0x2001, 0x0005, 0x682e, 0x080c, 0x9ef4,
-+      0x080c, 0x7134, 0x0010, 0x080c, 0x85c0, 0x004e, 0x003e, 0x002e,
-+      0x0005, 0x00e6, 0x00d6, 0x0026, 0x6034, 0x2068, 0x6a1c, 0xa286,
-+      0x0007, 0x0904, 0x8977, 0xa286, 0x0002, 0x0904, 0x8977, 0xa286,
-+      0x0000, 0x0904, 0x8977, 0x6808, 0x6338, 0xa306, 0x1904, 0x8977,
-+      0x2071, 0xba8c, 0xa186, 0x0015, 0x05e0, 0xa18e, 0x0016, 0x1190,
-+      0x6030, 0xa084, 0x00ff, 0xa086, 0x0001, 0x1160, 0x700c, 0xa086,
-+      0x2a00, 0x1140, 0x6034, 0xa080, 0x0008, 0x200c, 0xc1dd, 0xc1f5,
-+      0x2102, 0x0438, 0x00c6, 0x6034, 0x2060, 0x6104, 0xa186, 0x004b,
-+      0x01a0, 0xa186, 0x004c, 0x0188, 0xa186, 0x004d, 0x0170, 0xa186,
-+      0x004e, 0x0158, 0xa186, 0x0052, 0x0140, 0x6010, 0x2068, 0x080c,
-+      0x9beb, 0x090c, 0x1511, 0x6853, 0x0003, 0x6007, 0x0085, 0x6003,
-+      0x000b, 0x601f, 0x0002, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ce,
-+      0x0030, 0x6034, 0x2070, 0x2001, 0xb6b8, 0x2004, 0x703e, 0x080c,
-+      0x85c0, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6, 0x20a9, 0x000e,
-+      0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, 0x1558, 0x6018,
-+      0x2068, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c, 0xa290, 0x0004,
-+      0x20a9, 0x0004, 0xad98, 0x000a, 0x080c, 0x907a, 0x002e, 0x003e,
-+      0x015e, 0x11d8, 0x0156, 0x0036, 0x0026, 0xae90, 0x000c, 0xa290,
-+      0x0008, 0x20a9, 0x0004, 0xad98, 0x0006, 0x080c, 0x907a, 0x002e,
-+      0x003e, 0x015e, 0x1150, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800,
-+      0xc08d, 0x6802, 0x00de, 0x0804, 0x8743, 0x080c, 0x2c60, 0x00c6,
-+      0x080c, 0x856a, 0x2f00, 0x601a, 0x6013, 0x0000, 0x601f, 0x0001,
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x4ebe,
-+      0x080c, 0x4eeb, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00ce, 0x0c10,
-+      0x2100, 0xa1b2, 0x0080, 0x1a0c, 0x1511, 0xa1b2, 0x0040, 0x1a04,
-+      0x8a34, 0x0002, 0x8a28, 0x8a1c, 0x8a28, 0x8a28, 0x8a28, 0x8a28,
-+      0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+      0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+      0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+      0x8a1a, 0x8a28, 0x8a1a, 0x8a28, 0x8a28, 0x8a1a, 0x8a1a, 0x8a1a,
-+      0x8a1a, 0x8a1a, 0x8a28, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a,
-+      0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a28, 0x8a28, 0x8a1a, 0x8a1a,
-+      0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a1a, 0x8a28,
-+      0x8a1a, 0x8a1a, 0x080c, 0x1511, 0x6003, 0x0001, 0x6106, 0x080c,
-+      0x6c98, 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005,
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x6c98, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x7134, 0x012e, 0x0005, 0x2600, 0x0002, 0x8a28, 0x8a28,
-+      0x8a3c, 0x8a28, 0x8a28, 0x8a3c, 0x080c, 0x1511, 0x6004, 0xa0b2,
-+      0x0080, 0x1a0c, 0x1511, 0xa1b6, 0x0013, 0x0904, 0x8aee, 0xa1b6,
-+      0x0027, 0x1904, 0x8ab4, 0x080c, 0x7055, 0x6004, 0x080c, 0x9dd8,
-+      0x0190, 0x080c, 0x9de9, 0x0904, 0x8aae, 0xa08e, 0x0021, 0x0904,
-+      0x8ab1, 0xa08e, 0x0022, 0x0904, 0x8aae, 0xa08e, 0x003d, 0x0904,
-+      0x8ab1, 0x0804, 0x8aa7, 0x080c, 0x2c86, 0x2001, 0x0007, 0x080c,
-+      0x4ebe, 0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x8bbc, 0xa186,
-+      0x007e, 0x1148, 0x2001, 0xb435, 0x2014, 0xc285, 0x080c, 0x5a90,
-+      0x1108, 0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026,
-+      0x2019, 0x0028, 0x080c, 0x823c, 0x002e, 0x080c, 0xb310, 0x003e,
-+      0x002e, 0x001e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,
-+      0x080c, 0x6dba, 0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x00c6,
-+      0x6018, 0xa065, 0x0110, 0x080c, 0x516b, 0x00ce, 0x2c08, 0x080c,
-+      0xae05, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0x4f2d, 0x080c,
-+      0x9fb0, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x8bbc,
-+      0x0cb0, 0x080c, 0x8bea, 0x0c98, 0xa186, 0x0014, 0x1db0, 0x080c,
-+      0x7055, 0x080c, 0x2c60, 0x080c, 0x9dd8, 0x1188, 0x080c, 0x2c86,
-+      0x6018, 0xa080, 0x0028, 0x200c, 0x080c, 0x8bbc, 0xa186, 0x007e,
-+      0x1128, 0x2001, 0xb435, 0x200c, 0xc185, 0x2102, 0x08c0, 0x080c,
-+      0x9de9, 0x1118, 0x080c, 0x8bbc, 0x0890, 0x6004, 0xa08e, 0x0032,
-+      0x1158, 0x00e6, 0x00f6, 0x2071, 0xb482, 0x2079, 0x0000, 0x080c,
-+      0x2f93, 0x00fe, 0x00ee, 0x0818, 0x6004, 0xa08e, 0x0021, 0x0d50,
-+      0xa08e, 0x0022, 0x090c, 0x8bbc, 0x0804, 0x8aa7, 0xa0b2, 0x0040,
-+      0x1a04, 0x8bb1, 0x2008, 0x0002, 0x8b36, 0x8b37, 0x8b3a, 0x8b3d,
-+      0x8b40, 0x8b43, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34,
-+      0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34,
-+      0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34,
-+      0x8b34, 0x8b34, 0x8b46, 0x8b55, 0x8b34, 0x8b57, 0x8b55, 0x8b34,
-+      0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b55, 0x8b55, 0x8b34, 0x8b34,
-+      0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b34, 0x8b91, 0x8b55,
-+      0x8b34, 0x8b51, 0x8b34, 0x8b34, 0x8b34, 0x8b52, 0x8b34, 0x8b34,
-+      0x8b34, 0x8b55, 0x8b88, 0x8b34, 0x080c, 0x1511, 0x00f0, 0x2001,
-+      0x000b, 0x0460, 0x2001, 0x0003, 0x0448, 0x2001, 0x0005, 0x0430,
-+      0x2001, 0x0001, 0x0418, 0x2001, 0x0009, 0x0400, 0x080c, 0x7055,
-+      0x6003, 0x0005, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x080c, 0x7134,
-+      0x00a0, 0x0018, 0x0010, 0x080c, 0x4ebe, 0x0804, 0x8ba2, 0x080c,
-+      0x7055, 0x2001, 0xb6b6, 0x2004, 0x6016, 0x2001, 0xb6b8, 0x2004,
-+      0x603e, 0x6003, 0x0004, 0x080c, 0x7134, 0x0005, 0x080c, 0x4ebe,
-+      0x080c, 0x7055, 0x6003, 0x0002, 0x2001, 0xb6b8, 0x2004, 0x603e,
-+      0x0036, 0x2019, 0xb45d, 0x2304, 0xa084, 0xff00, 0x1120, 0x2001,
-+      0xb6b6, 0x201c, 0x0040, 0x8007, 0xa09a, 0x0004, 0x0ec0, 0x8003,
-+      0x801b, 0x831b, 0xa318, 0x6316, 0x003e, 0x080c, 0x7134, 0x08e8,
-+      0x080c, 0x7055, 0x080c, 0x9fb0, 0x080c, 0x85c0, 0x080c, 0x7134,
-+      0x08a0, 0x00e6, 0x00f6, 0x2071, 0xb482, 0x2079, 0x0000, 0x080c,
-+      0x2f93, 0x00fe, 0x00ee, 0x080c, 0x7055, 0x080c, 0x85c0, 0x080c,
-+      0x7134, 0x0818, 0x080c, 0x7055, 0x2001, 0xb6b8, 0x2004, 0x603e,
-+      0x6003, 0x0002, 0x2001, 0xb6b6, 0x2004, 0x6016, 0x080c, 0x7134,
-+      0x0005, 0x2600, 0x2008, 0x0002, 0x8bba, 0x8bba, 0x8bba, 0x8ba2,
-+      0x8ba2, 0x8bba, 0x080c, 0x1511, 0x00e6, 0x0026, 0x0016, 0x080c,
-+      0x9beb, 0x0508, 0x6010, 0x2070, 0x7034, 0xa086, 0x0139, 0x1148,
-+      0x2001, 0x0030, 0x2009, 0x0000, 0x2011, 0x4005, 0x080c, 0xa067,
-+      0x0090, 0x7038, 0xd0fc, 0x0178, 0x7007, 0x0000, 0x0016, 0x6004,
-+      0xa08e, 0x0021, 0x0160, 0xa08e, 0x003d, 0x0148, 0x001e, 0x7037,
-+      0x0103, 0x7033, 0x0100, 0x001e, 0x002e, 0x00ee, 0x0005, 0x001e,
-+      0x0009, 0x0cc8, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070,
-+      0x7037, 0x0103, 0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6, 0x6618,
-+      0x2668, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa0b2, 0x000c, 0x1a0c,
-+      0x1511, 0x6604, 0xa6b6, 0x0043, 0x1120, 0x080c, 0xa023, 0x0804,
-+      0x8c5b, 0x6604, 0xa6b6, 0x0033, 0x1120, 0x080c, 0x9fd3, 0x0804,
-+      0x8c5b, 0x6604, 0xa6b6, 0x0028, 0x1120, 0x080c, 0x9e19, 0x0804,
-+      0x8c5b, 0x6604, 0xa6b6, 0x0029, 0x1118, 0x080c, 0x9e30, 0x04d8,
-+      0x6604, 0xa6b6, 0x001f, 0x1118, 0x080c, 0x8729, 0x04a0, 0x6604,
-+      0xa6b6, 0x0000, 0x1118, 0x080c, 0x897d, 0x0468, 0x6604, 0xa6b6,
-+      0x0022, 0x1118, 0x080c, 0x8751, 0x0430, 0x6604, 0xa6b6, 0x0035,
-+      0x1118, 0x080c, 0x87b8, 0x00f8, 0x6604, 0xa6b6, 0x0039, 0x1118,
-+      0x080c, 0x8919, 0x00c0, 0x6604, 0xa6b6, 0x003d, 0x1118, 0x080c,
-+      0x876b, 0x0088, 0x6604, 0xa6b6, 0x0044, 0x1118, 0x080c, 0x878b,
-+      0x0050, 0xa1b6, 0x0015, 0x1110, 0x0053, 0x0028, 0xa1b6, 0x0016,
-+      0x1118, 0x0804, 0x8e1f, 0x0005, 0x080c, 0x8606, 0x0ce0, 0x8c82,
-+      0x8c85, 0x8c82, 0x8cc7, 0x8c82, 0x8dac, 0x8e2d, 0x8c82, 0x8c82,
-+      0x8dfb, 0x8c82, 0x8e0f, 0xa1b6, 0x0048, 0x0140, 0x20e1, 0x0005,
-+      0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0x00e6, 0xacf0,
-+      0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, 0x0103, 0x00ee, 0x080c,
-+      0x85c0, 0x0005, 0xe000, 0xe000, 0x0005, 0x00e6, 0x2071, 0xb400,
-+      0x7084, 0xa086, 0x0074, 0x1530, 0x080c, 0xaddc, 0x11b0, 0x00d6,
-+      0x6018, 0x2068, 0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110,
-+      0xc0c5, 0x6802, 0x00d9, 0x00de, 0x2001, 0x0006, 0x080c, 0x4ebe,
-+      0x080c, 0x2c86, 0x080c, 0x85c0, 0x0078, 0x2001, 0x000a, 0x080c,
-+      0x4ebe, 0x080c, 0x2c86, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
-+      0x6c98, 0x0010, 0x080c, 0x8d99, 0x00ee, 0x0005, 0x6800, 0xd084,
-+      0x0168, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2069, 0xb452, 0x6804,
-+      0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x4eeb, 0x0005, 0x00d6,
-+      0x2011, 0xb421, 0x2204, 0xa086, 0x0074, 0x1904, 0x8d96, 0x6018,
-+      0x2068, 0x6aa0, 0xa286, 0x007e, 0x1120, 0x080c, 0x8f42, 0x0804,
-+      0x8d35, 0x080c, 0x8f38, 0x6018, 0x2068, 0xa080, 0x0028, 0x2014,
-+      0xa286, 0x0080, 0x11c0, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010,
-+      0xa005, 0x0138, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
-+      0x0200, 0x2001, 0x0006, 0x080c, 0x4ebe, 0x080c, 0x2c86, 0x080c,
-+      0x85c0, 0x0804, 0x8d97, 0x00e6, 0x2071, 0xb435, 0x2e04, 0xd09c,
-+      0x0188, 0x2071, 0xba80, 0x7108, 0x720c, 0xa18c, 0x00ff, 0x1118,
-+      0xa284, 0xff00, 0x0138, 0x6018, 0x2070, 0x70a0, 0xd0bc, 0x1110,
-+      0x7112, 0x7216, 0x00ee, 0x6010, 0xa005, 0x0198, 0x2068, 0x6838,
-+      0xd0f4, 0x0178, 0x6834, 0xa084, 0x00ff, 0xa086, 0x0039, 0x1958,
-+      0x2001, 0x0000, 0x2009, 0x0000, 0x2011, 0x4000, 0x080c, 0xa067,
-+      0x0840, 0x2001, 0x0004, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+      0x0003, 0x080c, 0x6c98, 0x0804, 0x8d97, 0x685c, 0xd0e4, 0x01d8,
-+      0x080c, 0x9f63, 0x080c, 0x5a90, 0x0118, 0xd0dc, 0x1904, 0x8cf1,
-+      0x2011, 0xb435, 0x2204, 0xc0ad, 0x2012, 0x2001, 0xb68f, 0x2004,
-+      0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2838, 0x78e2,
-+      0x00fe, 0x0804, 0x8cf1, 0x080c, 0x9f99, 0x2011, 0xb435, 0x2204,
-+      0xc0a5, 0x2012, 0x0006, 0x080c, 0xaefe, 0x000e, 0x1904, 0x8cf1,
-+      0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x4ebe, 0x2001, 0x0000,
-+      0x080c, 0x4eac, 0x00c6, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,
-+      0x79ea, 0x7932, 0x7936, 0x00fe, 0x080c, 0x280d, 0x00f6, 0x2079,
-+      0xb400, 0x7976, 0x2100, 0x2009, 0x0000, 0x080c, 0x27e3, 0x7952,
-+      0x00fe, 0x8108, 0x080c, 0x4f0e, 0x2c00, 0x00ce, 0x1904, 0x8cf1,
-+      0x601a, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x601f, 0x0001, 0x6003,
-+      0x0001, 0x6007, 0x0002, 0x080c, 0x6c98, 0x0008, 0x0011, 0x00de,
-+      0x0005, 0x2001, 0x0007, 0x080c, 0x4ebe, 0x2001, 0xb400, 0x2004,
-+      0xa086, 0x0003, 0x1120, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x080c,
-+      0x2c86, 0x080c, 0x85c0, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071,
-+      0xb400, 0x7084, 0xa086, 0x0014, 0x15f0, 0x7000, 0xa086, 0x0003,
-+      0x1128, 0x6010, 0xa005, 0x1110, 0x080c, 0x3efc, 0x00d6, 0x6018,
-+      0x2068, 0x080c, 0x500c, 0x080c, 0x8cb6, 0x00de, 0x080c, 0x8ff1,
-+      0x1550, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005, 0x0518,
-+      0x2001, 0x0006, 0x080c, 0x4ebe, 0x00e6, 0x6010, 0xa075, 0x01a8,
-+      0x7034, 0xa084, 0x00ff, 0xa086, 0x0039, 0x1148, 0x2001, 0x0000,
-+      0x2009, 0x0000, 0x2011, 0x4000, 0x080c, 0xa067, 0x0030, 0x7007,
-+      0x0000, 0x7037, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2c86,
-+      0x080c, 0x85c0, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x8d99, 0x001e,
-+      0x002e, 0x00ee, 0x0005, 0x2011, 0xb421, 0x2204, 0xa086, 0x0014,
-+      0x1158, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x080c, 0x6c98, 0x0010, 0x080c, 0x8d99, 0x0005, 0x2011,
-+      0xb421, 0x2204, 0xa086, 0x0004, 0x1138, 0x2001, 0x0007, 0x080c,
-+      0x4ebe, 0x080c, 0x85c0, 0x0010, 0x080c, 0x8d99, 0x0005, 0x000b,
-+      0x0005, 0x8c82, 0x8e38, 0x8c82, 0x8e6c, 0x8c82, 0x8ef4, 0x8e2d,
-+      0x8c82, 0x8c82, 0x8f07, 0x8c82, 0x8f17, 0x6604, 0xa686, 0x0003,
-+      0x0904, 0x8dac, 0xa6b6, 0x001e, 0x1110, 0x080c, 0x85c0, 0x0005,
-+      0x00d6, 0x00c6, 0x080c, 0x8f27, 0x1178, 0x2001, 0x0000, 0x080c,
-+      0x4eac, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+      0x0002, 0x080c, 0x6c98, 0x00e8, 0x2009, 0xba8e, 0x2104, 0xa086,
-+      0x0009, 0x1160, 0x6018, 0x2068, 0x6840, 0xa084, 0x00ff, 0xa005,
-+      0x0170, 0x8001, 0x6842, 0x6017, 0x000a, 0x0058, 0x2009, 0xba8f,
-+      0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x1108, 0x08d0, 0x080c,
-+      0x8d99, 0x00ce, 0x00de, 0x0005, 0x0026, 0x2011, 0x0000, 0x080c,
-+      0x8f35, 0x00d6, 0x2069, 0xb69e, 0x2d04, 0xa005, 0x0168, 0x6018,
-+      0x2068, 0x68a0, 0xa086, 0x007e, 0x1138, 0x2069, 0xb41d, 0x2d04,
-+      0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0078, 0x2001, 0x0000,
-+      0x080c, 0x4eac, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001,
-+      0x6007, 0x0002, 0x080c, 0x6c98, 0x0468, 0x00d6, 0x6010, 0x2068,
-+      0x080c, 0x9beb, 0x00de, 0x0108, 0x6a34, 0x080c, 0x8bbc, 0x2009,
-+      0xba8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x01e8, 0xa686,
-+      0x000b, 0x01b0, 0x2009, 0xba8f, 0x2104, 0xa084, 0xff00, 0x1118,
-+      0xa686, 0x0009, 0x0188, 0xa086, 0x1900, 0x1150, 0xa686, 0x0009,
-+      0x0158, 0x2001, 0x0004, 0x080c, 0x4ebe, 0x080c, 0x85c0, 0x0010,
-+      0x080c, 0x8d99, 0x002e, 0x0005, 0x00d6, 0xa286, 0x0139, 0x0160,
-+      0x6010, 0x2068, 0x080c, 0x9beb, 0x0148, 0x6834, 0xa086, 0x0139,
-+      0x0118, 0x6838, 0xd0fc, 0x0110, 0x00de, 0x0c50, 0x6018, 0x2068,
-+      0x6840, 0xa084, 0x00ff, 0xa005, 0x0140, 0x8001, 0x6842, 0x6017,
-+      0x000a, 0x6007, 0x0016, 0x00de, 0x08e8, 0x68a0, 0xa086, 0x007e,
-+      0x1138, 0x00e6, 0x2071, 0xb400, 0x080c, 0x4b80, 0x00ee, 0x0010,
-+      0x080c, 0x2c60, 0x00de, 0x0860, 0x080c, 0x8f35, 0x1158, 0x2001,
-+      0x0004, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
-+      0x6c98, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x8d99, 0x0005, 0x0469,
-+      0x1158, 0x2001, 0x0008, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+      0x0005, 0x080c, 0x6c98, 0x0010, 0x080c, 0x8d99, 0x0005, 0x00e9,
-+      0x1158, 0x2001, 0x000a, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x080c, 0x6c98, 0x0010, 0x080c, 0x8d99, 0x0005, 0x2009,
-+      0xba8e, 0x2104, 0xa086, 0x0003, 0x1138, 0x2009, 0xba8f, 0x2104,
-+      0xa084, 0xff00, 0xa086, 0x2a00, 0x0005, 0xa085, 0x0001, 0x0005,
-+      0x00c6, 0x0016, 0xac88, 0x0006, 0x2164, 0x080c, 0x4f79, 0x001e,
-+      0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6018,
-+      0x2068, 0x2071, 0xb435, 0x2e04, 0xa085, 0x0003, 0x2072, 0x080c,
-+      0x8fc6, 0x0560, 0x2009, 0xb435, 0x2104, 0xc0cd, 0x200a, 0x2001,
-+      0xb453, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009, 0x002a,
-+      0x080c, 0xb06b, 0x2001, 0xb40c, 0x200c, 0xc195, 0x2102, 0x2019,
-+      0x002a, 0x2009, 0x0001, 0x080c, 0x2c33, 0x2071, 0xb400, 0x080c,
-+      0x2a7e, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009, 0x007f, 0x080c,
-+      0x2d5b, 0x8108, 0x1f04, 0x8f77, 0x015e, 0x00ce, 0x080c, 0x8f38,
-+      0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0xba80, 0x2079, 0x0100,
-+      0x2e04, 0xa084, 0x00ff, 0x2069, 0xb41c, 0x206a, 0x78e6, 0x0006,
-+      0x8e70, 0x2e04, 0x2069, 0xb41d, 0x206a, 0x78ea, 0x7832, 0x7836,
-+      0x2010, 0xa084, 0xff00, 0x001e, 0xa105, 0x2009, 0xb428, 0x200a,
-+      0x2200, 0xa084, 0x00ff, 0x2008, 0x080c, 0x280d, 0x080c, 0x5a90,
-+      0x0170, 0x2069, 0xba8e, 0x2071, 0xb6b2, 0x6810, 0x2072, 0x6814,
-+      0x7006, 0x6818, 0x700a, 0x681c, 0x700e, 0x080c, 0x9f63, 0x0040,
-+      0x2001, 0x0006, 0x080c, 0x4ebe, 0x080c, 0x2c86, 0x080c, 0x85c0,
-+      0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0026, 0x0036,
-+      0x00e6, 0x0156, 0x2019, 0xb428, 0x231c, 0x83ff, 0x01e8, 0x2071,
-+      0xba80, 0x2e14, 0xa294, 0x00ff, 0x7004, 0xa084, 0xff00, 0xa205,
-+      0xa306, 0x1190, 0x2011, 0xba96, 0xad98, 0x000a, 0x20a9, 0x0004,
-+      0x080c, 0x907a, 0x1148, 0x2011, 0xba9a, 0xad98, 0x0006, 0x20a9,
-+      0x0004, 0x080c, 0x907a, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
-+      0x0005, 0x00e6, 0x2071, 0xba8c, 0x7004, 0xa086, 0x0014, 0x11a8,
-+      0x7008, 0xa086, 0x0800, 0x1188, 0x700c, 0xd0ec, 0x0160, 0xa084,
-+      0x0f00, 0xa086, 0x0100, 0x1138, 0x7024, 0xd0a4, 0x1110, 0xd0ac,
-+      0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-+      0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2029, 0xb6e9, 0x252c, 0x2021, 0xb6ef, 0x2424,
-+      0x2061, 0xbc00, 0x2071, 0xb400, 0x7248, 0x7068, 0xa202, 0x16f0,
-+      0x080c, 0xb093, 0x05a0, 0x671c, 0xa786, 0x0001, 0x0580, 0xa786,
-+      0x0007, 0x0568, 0x2500, 0xac06, 0x0550, 0x2400, 0xac06, 0x0538,
-+      0x00c6, 0x6000, 0xa086, 0x0004, 0x1110, 0x080c, 0x1944, 0xa786,
-+      0x0008, 0x1148, 0x080c, 0x9de9, 0x1130, 0x00ce, 0x080c, 0x8bbc,
-+      0x080c, 0x9dae, 0x00a0, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0160,
-+      0xa786, 0x0003, 0x11e8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x080c, 0x53c9, 0x080c, 0x9da2, 0x080c, 0x9dae, 0x00ce, 0xace0,
-+      0x0018, 0x705c, 0xac02, 0x1210, 0x0804, 0x9024, 0x012e, 0x000e,
-+      0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005,
-+      0xa786, 0x0006, 0x1118, 0x080c, 0xb01c, 0x0c30, 0xa786, 0x000a,
-+      0x09e0, 0x08c8, 0x220c, 0x2304, 0xa106, 0x1130, 0x8210, 0x8318,
-+      0x1f04, 0x907a, 0xa006, 0x0005, 0x2304, 0xa102, 0x0218, 0x2001,
-+      0x0001, 0x0010, 0x2001, 0x0000, 0xa18d, 0x0001, 0x0005, 0x6004,
-+      0xa08a, 0x0080, 0x1a0c, 0x1511, 0x080c, 0x9dd8, 0x0120, 0x080c,
-+      0x9de9, 0x0168, 0x0028, 0x080c, 0x2c86, 0x080c, 0x9de9, 0x0138,
-+      0x080c, 0x7055, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c,
-+      0x8bbc, 0x0cb0, 0xa182, 0x0040, 0x0002, 0x90c0, 0x90c0, 0x90c0,
-+      0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0, 0x90c0,
-+      0x90c2, 0x90c2, 0x90c2, 0x90c2, 0x90c0, 0x90c0, 0x90c0, 0x90c2,
-+      0x080c, 0x1511, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c,
-+      0x6c52, 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005,
-+      0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0x915c,
-+      0xa186, 0x0027, 0x11e8, 0x080c, 0x7055, 0x080c, 0x2c60, 0x00d6,
-+      0x6110, 0x2168, 0x080c, 0x9beb, 0x0168, 0x6837, 0x0103, 0x684b,
-+      0x0029, 0x6847, 0x0000, 0x694c, 0xc1c5, 0x694e, 0x080c, 0x53c9,
-+      0x080c, 0x9da2, 0x00de, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005,
-+      0xa186, 0x0014, 0x1120, 0x6004, 0xa082, 0x0040, 0x0428, 0xa186,
-+      0x0046, 0x0138, 0xa186, 0x0045, 0x0120, 0xa186, 0x0047, 0x190c,
-+      0x1511, 0x2001, 0x0109, 0x2004, 0xd084, 0x0198, 0x0126, 0x2091,
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x6b39, 0x002e, 0x001e,
-+      0x000e, 0x012e, 0xe000, 0x6000, 0xa086, 0x0002, 0x1110, 0x0804,
-+      0x919a, 0x080c, 0x8606, 0x0005, 0x0002, 0x913a, 0x9138, 0x9138,
-+      0x9138, 0x9138, 0x9138, 0x9138, 0x9138, 0x9138, 0x9138, 0x9138,
-+      0x9155, 0x9155, 0x9155, 0x9155, 0x9138, 0x9155, 0x9138, 0x9155,
-+      0x080c, 0x1511, 0x080c, 0x7055, 0x00d6, 0x6110, 0x2168, 0x080c,
-+      0x9beb, 0x0168, 0x6837, 0x0103, 0x684b, 0x0006, 0x6847, 0x0000,
-+      0x6850, 0xc0ec, 0x6852, 0x080c, 0x53c9, 0x080c, 0x9da2, 0x00de,
-+      0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x7055, 0x080c,
-+      0x85c0, 0x080c, 0x7134, 0x0005, 0x0002, 0x9172, 0x9170, 0x9170,
-+      0x9170, 0x9170, 0x9170, 0x9170, 0x9170, 0x9170, 0x9170, 0x9170,
-+      0x9184, 0x9184, 0x9184, 0x9184, 0x9170, 0x9193, 0x9170, 0x9184,
-+      0x080c, 0x1511, 0x080c, 0x7055, 0x2001, 0xb6b8, 0x2004, 0x603e,
-+      0x6003, 0x0002, 0x080c, 0x7134, 0x6010, 0xa088, 0x0013, 0x2104,
-+      0xa085, 0x0400, 0x200a, 0x0005, 0x080c, 0x7055, 0x2001, 0xb6b6,
-+      0x2004, 0x6016, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x6003, 0x000f,
-+      0x080c, 0x7134, 0x0005, 0x080c, 0x7055, 0x080c, 0x85c0, 0x080c,
-+      0x7134, 0x0005, 0xa182, 0x0040, 0x0002, 0x91b0, 0x91b0, 0x91b0,
-+      0x91b0, 0x91b0, 0x91b2, 0x9290, 0x92bf, 0x91b0, 0x91b0, 0x91b0,
-+      0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0, 0x91b0,
-+      0x080c, 0x1511, 0x00e6, 0x00d6, 0x603f, 0x0000, 0x2071, 0xba80,
-+      0x7124, 0x610a, 0x2071, 0xba8c, 0x6110, 0x2168, 0x7614, 0xa6b4,
-+      0x0fff, 0x86ff, 0x0904, 0x925a, 0xa68c, 0x0c00, 0x01e8, 0x00f6,
-+      0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0198, 0x684c, 0xd0ac, 0x0180,
-+      0x6020, 0xd0dc, 0x1168, 0x6850, 0xd0bc, 0x1150, 0x7318, 0x6814,
-+      0xa306, 0x1904, 0x926c, 0x731c, 0x6810, 0xa306, 0x1904, 0x926c,
-+      0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002,
-+      0x0518, 0xa186, 0x0028, 0x1128, 0x080c, 0x9dc7, 0x684b, 0x001c,
-+      0x00e8, 0xd6dc, 0x01a0, 0x684b, 0x0015, 0x684c, 0xd0ac, 0x0170,
-+      0x6914, 0x6a10, 0x2100, 0xa205, 0x0148, 0x7018, 0xa106, 0x1118,
-+      0x701c, 0xa206, 0x0118, 0x6962, 0x6a5e, 0xc6dc, 0x0038, 0xd6d4,
-+      0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6837, 0x0103,
-+      0x6e46, 0xa01e, 0xd6c4, 0x01f0, 0xa686, 0x0100, 0x1140, 0x2001,
-+      0xba99, 0x2004, 0xa005, 0x1118, 0xc6c4, 0x0804, 0x91c1, 0x7328,
-+      0x732c, 0x6b56, 0x83ff, 0x0170, 0xa38a, 0x0009, 0x0210, 0x2019,
-+      0x0008, 0x0036, 0x2308, 0x2019, 0xba98, 0xad90, 0x0019, 0x080c,
-+      0x98a6, 0x003e, 0xd6cc, 0x0904, 0x927f, 0x7124, 0x695a, 0x81ff,
-+      0x0904, 0x927f, 0xa192, 0x0021, 0x1260, 0x2071, 0xba98, 0x831c,
-+      0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x98a6, 0x080c, 0xa0c8,
-+      0x04b0, 0x6838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c68,
-+      0x00f6, 0x2d78, 0x080c, 0x984b, 0x00fe, 0x080c, 0xa0c8, 0x080c,
-+      0x9896, 0x0438, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0188,
-+      0x684c, 0xd0ac, 0x0170, 0x6020, 0xd0dc, 0x1158, 0x6850, 0xd0bc,
-+      0x1140, 0x684c, 0xd0f4, 0x1128, 0x080c, 0x9ec6, 0x00de, 0x00ee,
-+      0x00f0, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac,
-+      0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x080c,
-+      0x53c9, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e,
-+      0x080c, 0x9e94, 0x00de, 0x00ee, 0x1110, 0x080c, 0x85c0, 0x0005,
-+      0x00f6, 0x6003, 0x0003, 0x2079, 0xba8c, 0x7c04, 0x7b00, 0x7e0c,
-+      0x7d08, 0x6010, 0x2078, 0x784c, 0xd0ac, 0x0138, 0x6003, 0x0002,
-+      0x00fe, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0x797c, 0xa10a,
-+      0x2300, 0x7a80, 0xa213, 0x2600, 0xa102, 0x2500, 0xa203, 0x0e90,
-+      0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x603f, 0x0000, 0x2c10,
-+      0x080c, 0x1f7a, 0x080c, 0x6cb5, 0x080c, 0x71f1, 0x0005, 0x2001,
-+      0xb6b8, 0x2004, 0x603e, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
-+      0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0xa182, 0x0040,
-+      0x0002, 0x92e4, 0x92e4, 0x92e4, 0x92e4, 0x92e4, 0x92e6, 0x9379,
-+      0x92e4, 0x92e4, 0x938f, 0x93f3, 0x92e4, 0x92e4, 0x92e4, 0x92e4,
-+      0x9402, 0x92e4, 0x92e4, 0x92e4, 0x080c, 0x1511, 0x0076, 0x00f6,
-+      0x00e6, 0x00d6, 0x2071, 0xba8c, 0x6110, 0x2178, 0x7614, 0xa6b4,
-+      0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c,
-+      0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x9374, 0xa694,
-+      0xff00, 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e,
-+      0xa284, 0x0300, 0x0904, 0x9374, 0x080c, 0x15f4, 0x090c, 0x1511,
-+      0x2d00, 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838,
-+      0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
-+      0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186,
-+      0x0002, 0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060,
-+      0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b,
-+      0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
-+      0x6856, 0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff,
-+      0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
-+      0x2019, 0xba98, 0xad90, 0x0019, 0x080c, 0x98a6, 0x003e, 0xd6cc,
-+      0x01d8, 0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250,
-+      0x2071, 0xba98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c,
-+      0x98a6, 0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a,
-+      0x0c78, 0x2d78, 0x080c, 0x984b, 0x00de, 0x00ee, 0x00fe, 0x007e,
-+      0x0005, 0x00f6, 0x6003, 0x0003, 0x2079, 0xba8c, 0x7c04, 0x7b00,
-+      0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e,
-+      0x00fe, 0x2c10, 0x080c, 0x1f7a, 0x080c, 0x7d0a, 0x0005, 0x00d6,
-+      0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0120, 0x2001, 0xb6b8,
-+      0x2004, 0x603e, 0x6003, 0x0002, 0x080c, 0x70e7, 0x080c, 0x71f1,
-+      0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904, 0x93f1, 0xd1cc, 0x0540,
-+      0x6948, 0x6838, 0xd0fc, 0x01e8, 0x0016, 0x684c, 0x0006, 0x6850,
-+      0x0006, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x0156,
-+      0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0x93b9, 0x015e,
-+      0x000e, 0x6852, 0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x161b,
-+      0x0418, 0x0016, 0x080c, 0x161b, 0x00de, 0x080c, 0x9896, 0x00e0,
-+      0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180,
-+      0xa086, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd1dc, 0x0118,
-+      0x684b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0010,
-+      0x684b, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9e94, 0x1110, 0x080c,
-+      0x85c0, 0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x7f8e, 0x6003,
-+      0x0002, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x080c, 0x70e7, 0x080c,
-+      0x71f1, 0x0005, 0x080c, 0x70e7, 0x080c, 0x2c60, 0x00d6, 0x6110,
-+      0x2168, 0x080c, 0x9beb, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029,
-+      0x6847, 0x0000, 0x080c, 0x53c9, 0x080c, 0x9da2, 0x00de, 0x080c,
-+      0x85c0, 0x080c, 0x71f1, 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138,
-+      0x684b, 0x0007, 0x8002, 0x8000, 0x810a, 0xa189, 0x0000, 0x6962,
-+      0x685e, 0x0005, 0xa182, 0x0040, 0x0002, 0x9440, 0x9440, 0x9440,
-+      0x9440, 0x9440, 0x9442, 0x9440, 0x94fd, 0x9509, 0x9440, 0x9440,
-+      0x9440, 0x9440, 0x9440, 0x9440, 0x9440, 0x9440, 0x9440, 0x9440,
-+      0x080c, 0x1511, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0xba8c,
-+      0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x00f6, 0x2c78, 0x080c,
-+      0x52c6, 0x00fe, 0x0150, 0xa684, 0x00ff, 0x1138, 0x6020, 0xd0f4,
-+      0x0120, 0x080c, 0x9ec6, 0x0804, 0x94f8, 0x7e46, 0x7f4c, 0xc7e5,
-+      0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e,
-+      0x86ff, 0x0904, 0x94ee, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0120,
-+      0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0904, 0x94ec,
-+      0xa686, 0x0100, 0x1140, 0x2001, 0xba99, 0x2004, 0xa005, 0x1118,
-+      0xc6c4, 0x7e46, 0x0c28, 0x080c, 0x15f4, 0x090c, 0x1511, 0x2d00,
-+      0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838,
-+      0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00,
-+      0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186,
-+      0x0002, 0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060,
-+      0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b,
-+      0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854,
-+      0x6856, 0xa01e, 0xd6c4, 0x0198, 0x7328, 0x732c, 0x6b56, 0x83ff,
-+      0x0170, 0xa38a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
-+      0x2019, 0xba98, 0xad90, 0x0019, 0x080c, 0x98a6, 0x003e, 0xd6cc,
-+      0x01d8, 0x7124, 0x695a, 0x81ff, 0x01b8, 0xa192, 0x0021, 0x1250,
-+      0x2071, 0xba98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c,
-+      0x98a6, 0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a,
-+      0x0c78, 0x2d78, 0x080c, 0x984b, 0xd6dc, 0x1110, 0xa006, 0x0030,
-+      0x2001, 0x0001, 0x2071, 0xba8c, 0x7218, 0x731c, 0x080c, 0x18a9,
-+      0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x2001, 0xb6b8, 0x2004,
-+      0x603e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856,
-+      0x0005, 0x2001, 0xb6b8, 0x2004, 0x603e, 0x00d6, 0x6003, 0x0002,
-+      0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904, 0x9614, 0x603f, 0x0000,
-+      0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0560, 0x6814, 0x6910,
-+      0xa115, 0x0540, 0x6a60, 0xa206, 0x1118, 0x685c, 0xa106, 0x0510,
-+      0x684c, 0xc0e4, 0x684e, 0x6847, 0x0000, 0x6863, 0x0000, 0x685f,
-+      0x0000, 0x6020, 0xd0f4, 0x1158, 0x697c, 0x6810, 0xa102, 0x603a,
-+      0x6980, 0x6814, 0xa103, 0x6036, 0x6020, 0xc0f5, 0x6022, 0x00d6,
-+      0x6018, 0x2068, 0x683c, 0x8000, 0x683e, 0x00de, 0x080c, 0x9ec6,
-+      0x0804, 0x9614, 0x694c, 0xd1cc, 0x0904, 0x95e4, 0x6948, 0x6838,
-+      0xd0fc, 0x0904, 0x95a7, 0x0016, 0x684c, 0x0006, 0x6850, 0x0006,
-+      0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0,
-+      0xa086, 0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8,
-+      0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xa050,
-+      0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b,
-+      0x0007, 0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810,
-+      0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x6848, 0x784a, 0x6860,
-+      0x7862, 0x685c, 0x785e, 0xad90, 0x000d, 0xaf98, 0x000d, 0x2009,
-+      0x0020, 0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04,
-+      0x9593, 0x015e, 0x00fe, 0x000e, 0x6852, 0x000e, 0x684e, 0x080c,
-+      0xa0c8, 0x001e, 0x2168, 0x080c, 0x161b, 0x0804, 0x960f, 0x0016,
-+      0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x01e0,
-+      0xa086, 0x0028, 0x1128, 0x684b, 0x001c, 0x784b, 0x001c, 0x00e8,
-+      0xd1dc, 0x0158, 0x684b, 0x0015, 0x784b, 0x0015, 0x080c, 0xa050,
-+      0x0118, 0x7944, 0xc1dc, 0x7946, 0x0080, 0xd1d4, 0x0128, 0x684b,
-+      0x0007, 0x784b, 0x0007, 0x0048, 0x684c, 0xd0ac, 0x0130, 0x6810,
-+      0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x6860, 0x7862, 0x685c,
-+      0x785e, 0x684c, 0x784e, 0x00fe, 0x080c, 0x161b, 0x00de, 0x080c,
-+      0xa0c8, 0x080c, 0x9896, 0x0458, 0x6837, 0x0103, 0x6944, 0xa184,
-+      0x00ff, 0xa0b6, 0x0002, 0x01b0, 0xa086, 0x0028, 0x1118, 0x684b,
-+      0x001c, 0x00d8, 0xd1dc, 0x0148, 0x684b, 0x0015, 0x080c, 0xa050,
-+      0x0118, 0x6944, 0xc1dc, 0x6946, 0x0080, 0xd1d4, 0x0118, 0x684b,
-+      0x0007, 0x0058, 0x684b, 0x0000, 0x684c, 0xd0ac, 0x0130, 0x6810,
-+      0x6914, 0xa115, 0x0110, 0x080c, 0x941c, 0x080c, 0x53c9, 0x080c,
-+      0x9e94, 0x1110, 0x080c, 0x85c0, 0x00de, 0x0005, 0x080c, 0x7055,
-+      0x0010, 0x080c, 0x70e7, 0x080c, 0x9beb, 0x01c0, 0x00d6, 0x6110,
-+      0x2168, 0x6837, 0x0103, 0x2009, 0xb40c, 0x210c, 0xd18c, 0x11c0,
-+      0xd184, 0x1198, 0x6108, 0x694a, 0xa18e, 0x0029, 0x1110, 0x080c,
-+      0xb303, 0x6847, 0x0000, 0x080c, 0x53c9, 0x00de, 0x080c, 0x85c0,
-+      0x080c, 0x7134, 0x080c, 0x71f1, 0x0005, 0x684b, 0x0004, 0x0c88,
-+      0x684b, 0x0004, 0x0c70, 0xa182, 0x0040, 0x0002, 0x9659, 0x9659,
-+      0x9659, 0x9659, 0x9659, 0x965b, 0x9659, 0x965e, 0x9659, 0x9659,
-+      0x9659, 0x9659, 0x9659, 0x9659, 0x9659, 0x9659, 0x9659, 0x9659,
-+      0x9659, 0x080c, 0x1511, 0x080c, 0x85c0, 0x0005, 0x0006, 0x0026,
-+      0xa016, 0x080c, 0x1856, 0x002e, 0x000e, 0x0005, 0xa182, 0x0085,
-+      0x0002, 0x9672, 0x9670, 0x9670, 0x967e, 0x9670, 0x9670, 0x9670,
-+      0x080c, 0x1511, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005, 0x0026, 0x0056,
-+      0x00d6, 0x00e6, 0x2071, 0xba80, 0x7224, 0x6212, 0x7220, 0x080c,
-+      0x9bdb, 0x01a0, 0x2268, 0x6800, 0xa086, 0x0000, 0x0178, 0x6018,
-+      0x6d18, 0xa52e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0x98b6, 0x00ce,
-+      0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087,
-+      0x6003, 0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00f6, 0x2278,
-+      0x080c, 0x52c6, 0x00fe, 0x0150, 0x6820, 0xd0ec, 0x0138, 0x00c6,
-+      0x2260, 0x603f, 0x0000, 0x080c, 0x9ec6, 0x00ce, 0x00ee, 0x00de,
-+      0x005e, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a,
-+      0x0085, 0x0a0c, 0x1511, 0xa08a, 0x008c, 0x1a0c, 0x1511, 0xa082,
-+      0x0085, 0x0072, 0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c,
-+      0x1511, 0x080c, 0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005,
-+      0x96df, 0x96e1, 0x96e1, 0x96df, 0x96df, 0x96df, 0x96df, 0x080c,
-+      0x1511, 0x080c, 0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005,
-+      0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x04a8,
-+      0xa186, 0x0027, 0x11e8, 0x080c, 0x7055, 0x080c, 0x2c60, 0x00d6,
-+      0x6010, 0x2068, 0x080c, 0x9beb, 0x0150, 0x6837, 0x0103, 0x6847,
-+      0x0000, 0x684b, 0x0029, 0x080c, 0x53c9, 0x080c, 0x9da2, 0x00de,
-+      0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x8606, 0x0ce0,
-+      0xa186, 0x0014, 0x1dd0, 0x080c, 0x7055, 0x00d6, 0x6010, 0x2068,
-+      0x080c, 0x9beb, 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b,
-+      0x0006, 0x6850, 0xc0ec, 0x6852, 0x08f0, 0x0002, 0x972f, 0x972d,
-+      0x972d, 0x972d, 0x972d, 0x972d, 0x9747, 0x080c, 0x1511, 0x080c,
-+      0x7055, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118,
-+      0xa186, 0x0035, 0x1118, 0x2001, 0xb6b6, 0x0010, 0x2001, 0xb6b7,
-+      0x2004, 0x6016, 0x6003, 0x000c, 0x080c, 0x7134, 0x0005, 0x080c,
-+      0x7055, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118,
-+      0xa186, 0x0035, 0x1118, 0x2001, 0xb6b6, 0x0010, 0x2001, 0xb6b7,
-+      0x2004, 0x6016, 0x6003, 0x000e, 0x080c, 0x7134, 0x0005, 0xa182,
-+      0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x8606,
-+      0x0005, 0x9770, 0x9770, 0x9770, 0x9770, 0x9772, 0x97cb, 0x9770,
-+      0x080c, 0x1511, 0x00d6, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe,
-+      0x0168, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0039, 0x0118,
-+      0xa186, 0x0035, 0x1118, 0x00de, 0x0804, 0x97de, 0x080c, 0x9beb,
-+      0x1118, 0x080c, 0x9da2, 0x00f0, 0x6010, 0x2068, 0x684c, 0xd0e4,
-+      0x1110, 0x080c, 0x9da2, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128,
-+      0x684b, 0x0006, 0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118, 0x684b,
-+      0x0002, 0x0020, 0x684b, 0x0005, 0x080c, 0x9e63, 0x6847, 0x0000,
-+      0x080c, 0x53c9, 0x2c68, 0x080c, 0x856a, 0x01c0, 0x6003, 0x0001,
-+      0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0xba8e, 0x210c, 0x6136,
-+      0x2009, 0xba8f, 0x210c, 0x613a, 0x6918, 0x611a, 0x080c, 0x9fb8,
-+      0x6950, 0x6152, 0x601f, 0x0001, 0x080c, 0x6c52, 0x2d60, 0x080c,
-+      0x85c0, 0x00de, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe,
-+      0x0598, 0x6030, 0xa08c, 0xff00, 0x810f, 0xa186, 0x0035, 0x0130,
-+      0xa186, 0x001e, 0x0118, 0xa186, 0x0039, 0x1530, 0x00d6, 0x2c68,
-+      0x080c, 0xa09b, 0x1904, 0x9823, 0x080c, 0x856a, 0x01d8, 0x6106,
-+      0x6003, 0x0001, 0x601f, 0x0001, 0x6918, 0x611a, 0x6928, 0x612a,
-+      0x692c, 0x612e, 0x6930, 0xa18c, 0x00ff, 0x6132, 0x6934, 0x6136,
-+      0x6938, 0x613a, 0x6950, 0x6152, 0x080c, 0x9fb8, 0x080c, 0x6c52,
-+      0x080c, 0x7134, 0x2d60, 0x00f8, 0x00d6, 0x6010, 0x2068, 0x080c,
-+      0x9beb, 0x01c8, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0xc0ec,
-+      0x6852, 0x684b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002,
-+      0x0020, 0x684b, 0x0005, 0x080c, 0x9e63, 0x6847, 0x0000, 0x080c,
-+      0x53c9, 0x080c, 0x9da2, 0x00de, 0x080c, 0x85c0, 0x0005, 0x0016,
-+      0x00d6, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0140, 0x6837, 0x0103,
-+      0x684b, 0x0028, 0x6847, 0x0000, 0x080c, 0x53c9, 0x00de, 0x001e,
-+      0xa186, 0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, 0x0027,
-+      0x0118, 0x080c, 0x8606, 0x0030, 0x080c, 0x7055, 0x080c, 0x9dae,
-+      0x080c, 0x7134, 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029,
-+      0x0001, 0xa182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130,
-+      0x2069, 0xba98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90,
-+      0x001d, 0x080c, 0x98a6, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0110,
-+      0x080c, 0x161b, 0x080c, 0x15f4, 0x0500, 0x8528, 0x6837, 0x0110,
-+      0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228, 0x2608,
-+      0xad90, 0x000f, 0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009, 0x003c,
-+      0x2d78, 0xad90, 0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f, 0xa5ad,
-+      0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f, 0xa5ad,
-+      0x0003, 0x7d36, 0x00de, 0x006e, 0x005e, 0x0005, 0x00f6, 0x8dff,
-+      0x0158, 0x6804, 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, 0x53c9,
-+      0x2f68, 0x0cb8, 0x080c, 0x53c9, 0x00fe, 0x0005, 0x0156, 0xa184,
-+      0x0001, 0x0108, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, 0x2012,
-+      0x8318, 0x8210, 0x1f04, 0x98ad, 0x015e, 0x0005, 0x0066, 0x0126,
-+      0x2091, 0x8000, 0x2031, 0x0001, 0x601c, 0xa084, 0x000f, 0x0083,
-+      0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031,
-+      0x0000, 0x601c, 0xa084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005,
-+      0x98ed, 0x98ed, 0x98e8, 0x990f, 0x98db, 0x98e8, 0x990f, 0x98e8,
-+      0x98e8, 0x98db, 0x98e8, 0x080c, 0x1511, 0x0036, 0x2019, 0x0010,
-+      0x080c, 0xac63, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005,
-+      0xa006, 0x0005, 0xa085, 0x0001, 0x0005, 0x00d6, 0x86ff, 0x11d8,
-+      0x6010, 0x2068, 0x080c, 0x9beb, 0x01c0, 0x6834, 0xa086, 0x0139,
-+      0x1128, 0x684b, 0x0005, 0x6853, 0x0000, 0x0028, 0xa00e, 0x2001,
-+      0x0005, 0x080c, 0x549c, 0x080c, 0x9e63, 0x080c, 0x53c9, 0x080c,
-+      0x85c0, 0xa085, 0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0, 0x6000,
-+      0xa08a, 0x0010, 0x1a0c, 0x1511, 0x000b, 0x0005, 0x9926, 0x9947,
-+      0x9928, 0x9966, 0x9944, 0x9926, 0x98e8, 0x98ed, 0x98ed, 0x98e8,
-+      0x98e8, 0x98e8, 0x98e8, 0x98e8, 0x98e8, 0x98e8, 0x080c, 0x1511,
-+      0x86ff, 0x11b8, 0x601c, 0xa086, 0x0006, 0x0198, 0x00d6, 0x6010,
-+      0x2068, 0x080c, 0x9beb, 0x0110, 0x080c, 0x9e63, 0x00de, 0x6007,
-+      0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x6c52, 0x080c,
-+      0x7134, 0xa085, 0x0001, 0x0005, 0x080c, 0x1944, 0x0c08, 0x00e6,
-+      0x2071, 0xb6e0, 0x7024, 0xac06, 0x1110, 0x080c, 0x7f03, 0x601c,
-+      0xa084, 0x000f, 0xa086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
-+      0x0001, 0x2c40, 0x080c, 0x80da, 0x009e, 0x008e, 0x0010, 0x080c,
-+      0x7e02, 0x00ee, 0x1928, 0x080c, 0x98e8, 0x0005, 0x0036, 0x00e6,
-+      0x2071, 0xb6e0, 0x703c, 0xac06, 0x1140, 0x2019, 0x0000, 0x080c,
-+      0x7f8e, 0x00ee, 0x003e, 0x0804, 0x9928, 0x080c, 0x8200, 0x00ee,
-+      0x003e, 0x1904, 0x9928, 0x080c, 0x98e8, 0x0005, 0x00c6, 0x601c,
-+      0xa084, 0x000f, 0x0013, 0x00ce, 0x0005, 0x9997, 0x9a04, 0x9b4a,
-+      0x99a2, 0x9dae, 0x9997, 0xac55, 0x85c0, 0x9a04, 0x9990, 0x9bb5,
-+      0x080c, 0x1511, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc, 0x0005,
-+      0x080c, 0x7055, 0x080c, 0x7134, 0x080c, 0x85c0, 0x0005, 0x6017,
-+      0x0001, 0x0005, 0x080c, 0x9beb, 0x0120, 0x6010, 0xa080, 0x0019,
-+      0x2c02, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1511, 0x000b, 0x0005,
-+      0x99c0, 0x99c2, 0x99e2, 0x99f4, 0x9a01, 0x99c0, 0x9997, 0x9997,
-+      0x9997, 0x99f4, 0x99f4, 0x99c0, 0x99c0, 0x99c0, 0x99c0, 0x99fe,
-+      0x080c, 0x1511, 0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052,
-+      0x2071, 0xb6e0, 0x7024, 0xac06, 0x0190, 0x080c, 0x7e02, 0x6007,
-+      0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x2001, 0xb6b7, 0x2004,
-+      0x6016, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ee, 0x0005, 0x6017,
-+      0x0001, 0x0cd8, 0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852,
-+      0x00de, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c,
-+      0x6c52, 0x080c, 0x7134, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010,
-+      0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x85c0,
-+      0x0005, 0x080c, 0x1944, 0x08f0, 0x6000, 0xa08a, 0x0010, 0x1a0c,
-+      0x1511, 0x000b, 0x0005, 0x9a1b, 0x999f, 0x9a1d, 0x9a1b, 0x9a1d,
-+      0x9a1d, 0x9998, 0x9a1b, 0x9992, 0x9992, 0x9a1b, 0x9a1b, 0x9a1b,
-+      0x9a1b, 0x9a1b, 0x9a1b, 0x080c, 0x1511, 0x00d6, 0x6018, 0x2068,
-+      0x6804, 0xa084, 0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c, 0x1511,
-+      0x000b, 0x0005, 0x9a36, 0x9af0, 0x9a38, 0x9a72, 0x9a38, 0x9a72,
-+      0x9a38, 0x9a42, 0x9a36, 0x9a72, 0x9a36, 0x9a5e, 0x080c, 0x1511,
-+      0x6004, 0xa08e, 0x0016, 0x0588, 0xa08e, 0x0004, 0x0570, 0xa08e,
-+      0x0002, 0x0558, 0x6004, 0x080c, 0x9de9, 0x0904, 0x9b09, 0xa08e,
-+      0x0021, 0x0904, 0x9b0d, 0xa08e, 0x0022, 0x0904, 0x9b09, 0xa08e,
-+      0x003d, 0x0904, 0x9b0d, 0xa08e, 0x0039, 0x0904, 0x9b11, 0xa08e,
-+      0x0035, 0x0904, 0x9b11, 0xa08e, 0x001e, 0x0188, 0xa08e, 0x0001,
-+      0x1150, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x00de,
-+      0xa086, 0x0006, 0x0110, 0x080c, 0x2c60, 0x080c, 0x8bbc, 0x080c,
-+      0x9dae, 0x0005, 0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016, 0x0904,
-+      0x9ae1, 0xa186, 0x0002, 0x15d8, 0x2001, 0xb435, 0x2004, 0xd08c,
-+      0x1198, 0x080c, 0x5a90, 0x1180, 0x2001, 0xb69f, 0x2003, 0x0001,
-+      0x2001, 0xb400, 0x2003, 0x0001, 0xa085, 0x0001, 0x080c, 0x5ad4,
-+      0x080c, 0x59c8, 0x0804, 0x9b33, 0x6018, 0x2068, 0x2001, 0xb435,
-+      0x2004, 0xd0ac, 0x1904, 0x9b33, 0x68a0, 0xd0bc, 0x1904, 0x9b33,
-+      0x6840, 0xa084, 0x00ff, 0xa005, 0x0190, 0x8001, 0x6842, 0x6013,
-+      0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x080c,
-+      0x856a, 0x0128, 0x2d00, 0x601a, 0x601f, 0x0001, 0x0450, 0x00de,
-+      0x00ce, 0x6004, 0xa08e, 0x0002, 0x11a8, 0x6018, 0xa080, 0x0028,
-+      0x2004, 0xa086, 0x007e, 0x1170, 0x2009, 0xb435, 0x2104, 0xc085,
-+      0x200a, 0x00e6, 0x2071, 0xb400, 0x080c, 0x4b80, 0x00ee, 0x080c,
-+      0x8bbc, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x2c60, 0x00e6, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x2c86, 0x012e, 0x00ee, 0x080c, 0x9dae,
-+      0x0005, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x6003, 0x0001, 0x6007,
-+      0x0002, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00de, 0x00ce, 0x0c80,
-+      0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016, 0x0d58, 0x6018, 0x2068,
-+      0x6840, 0xa084, 0x00ff, 0xa005, 0x0904, 0x9ab7, 0x8001, 0x6842,
-+      0x6003, 0x0001, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00de, 0x00ce,
-+      0x08b8, 0x080c, 0x8bbc, 0x0804, 0x9a6f, 0x080c, 0x8bea, 0x0804,
-+      0x9a6f, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xa09b, 0x00de, 0x0118,
-+      0x080c, 0x85c0, 0x00b8, 0x6004, 0x8007, 0x6130, 0xa18c, 0x00ff,
-+      0xa105, 0x6032, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002,
-+      0x6038, 0x600a, 0x2001, 0xb6b7, 0x2004, 0x6016, 0x080c, 0x6c52,
-+      0x080c, 0x7134, 0x0005, 0x00de, 0x00ce, 0x080c, 0x8bbc, 0x080c,
-+      0x2c60, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2c86, 0x6013,
-+      0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x603f, 0x0000, 0x012e,
-+      0x00ee, 0x0005, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1511, 0x000b,
-+      0x0005, 0x9b61, 0x9b61, 0x9b61, 0x9b61, 0x9b61, 0x9b61, 0x9b61,
-+      0x9b61, 0x9b61, 0x9997, 0x9b61, 0x999f, 0x9b63, 0x999f, 0x9b70,
-+      0x9b61, 0x080c, 0x1511, 0x6004, 0xa086, 0x008b, 0x0148, 0x6007,
-+      0x008b, 0x6003, 0x000d, 0x080c, 0x6c52, 0x080c, 0x7134, 0x0005,
-+      0x080c, 0x9da2, 0x080c, 0x9beb, 0x0580, 0x080c, 0x2c60, 0x00d6,
-+      0x080c, 0x9beb, 0x0168, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b,
-+      0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, 0x53c9,
-+      0x2c68, 0x080c, 0x856a, 0x0150, 0x6818, 0x601a, 0x080c, 0x9fb8,
-+      0x00c6, 0x2d60, 0x080c, 0x9dae, 0x00ce, 0x0008, 0x2d60, 0x00de,
-+      0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
-+      0x080c, 0x6c98, 0x080c, 0x7134, 0x0078, 0x6030, 0xa08c, 0xff00,
-+      0x810f, 0xa186, 0x0039, 0x0118, 0xa186, 0x0035, 0x1118, 0x080c,
-+      0x2c60, 0x08b0, 0x080c, 0x9dae, 0x0005, 0x6000, 0xa08a, 0x0010,
-+      0x1a0c, 0x1511, 0x000b, 0x0005, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bce,
-+      0x9bce, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc,
-+      0x9bcc, 0x9bcc, 0x9bcc, 0x9bcc, 0x080c, 0x1511, 0x080c, 0x8200,
-+      0x190c, 0x1511, 0x6110, 0x2168, 0x684b, 0x0006, 0x080c, 0x53c9,
-+      0x080c, 0x85c0, 0x0005, 0xa284, 0x0007, 0x1158, 0xa282, 0xbc00,
-+      0x0240, 0x2001, 0xb417, 0x2004, 0xa202, 0x1218, 0xa085, 0x0001,
-+      0x0005, 0xa006, 0x0ce8, 0x0026, 0x6210, 0xa294, 0xf000, 0x002e,
-+      0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000,
-+      0x2061, 0xbc00, 0x2071, 0xb400, 0x7348, 0x7068, 0xa302, 0x12a8,
-+      0x601c, 0xa206, 0x1160, 0x080c, 0x9f43, 0x0148, 0x080c, 0x9de9,
-+      0x1110, 0x080c, 0x8bbc, 0x00c6, 0x080c, 0x85c0, 0x00ce, 0xace0,
-+      0x0018, 0x705c, 0xac02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e,
-+      0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188, 0xb535,
-+      0x210c, 0x81ff, 0x0128, 0x2061, 0xb7f4, 0x611a, 0x080c, 0x2c60,
-+      0xa006, 0x0010, 0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005,
-+      0x00c6, 0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a,
-+      0x005e, 0x0180, 0x6612, 0x651a, 0x080c, 0x9fb8, 0x601f, 0x0003,
-+      0x2009, 0x004b, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x005e,
-+      0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091,
-+      0x8000, 0x62a0, 0x00c6, 0x080c, 0x9e67, 0x005e, 0x0550, 0x6013,
-+      0x0000, 0x651a, 0x080c, 0x9fb8, 0x601f, 0x0003, 0x0016, 0x00c6,
-+      0x2560, 0x080c, 0x516b, 0x00ce, 0x080c, 0x6dba, 0x0076, 0x2039,
-+      0x0000, 0x080c, 0x6cc7, 0x2c08, 0x080c, 0xae05, 0x007e, 0x001e,
-+      0xd184, 0x0128, 0x080c, 0x85c0, 0xa085, 0x0001, 0x0030, 0x2009,
-+      0x004c, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce,
-+      0x0005, 0xa006, 0x0cd0, 0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c,
-+      0x856a, 0x2c78, 0x00ce, 0x0180, 0x7e12, 0x2c00, 0x781a, 0x781f,
-+      0x0003, 0x2021, 0x0005, 0x080c, 0x9ce1, 0x2f60, 0x2009, 0x004d,
-+      0x080c, 0x85ef, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
-+      0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x856a, 0x2c78, 0x00ce,
-+      0x0178, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, 0x2021, 0x0005,
-+      0x0481, 0x2f60, 0x2009, 0x004e, 0x080c, 0x85ef, 0xa085, 0x0001,
-+      0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6,
-+      0x080c, 0x856a, 0x2c78, 0x00ce, 0x01c0, 0x7e12, 0x2c00, 0x781a,
-+      0x781f, 0x0003, 0x2021, 0x0004, 0x00a1, 0x2001, 0xb6a0, 0x2004,
-+      0xd0fc, 0x0120, 0x2f60, 0x080c, 0x85c0, 0x0028, 0x2f60, 0x2009,
-+      0x0052, 0x080c, 0x85ef, 0xa085, 0x0001, 0x004e, 0x00ce, 0x00fe,
-+      0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x510d,
-+      0x0118, 0x2001, 0x9ce6, 0x0028, 0x080c, 0x50dd, 0x0158, 0x2001,
-+      0x9cec, 0x0006, 0xa00e, 0x2400, 0x080c, 0x549c, 0x080c, 0x53c9,
-+      0x000e, 0x0807, 0x2418, 0x080c, 0x6ff4, 0x62a0, 0x0086, 0x2041,
-+      0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x6dd3, 0x008e, 0x080c,
-+      0x6cc7, 0x2f08, 0x2648, 0x080c, 0xae05, 0x613c, 0x81ff, 0x090c,
-+      0x6e88, 0x080c, 0x7134, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6,
-+      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0188,
-+      0x660a, 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012,
-+      0x2009, 0x001f, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+      0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6,
-+      0x080c, 0x856a, 0x001e, 0x0188, 0x660a, 0x611a, 0x080c, 0x9fb8,
-+      0x601f, 0x0008, 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x85ef,
-+      0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6,
-+      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0188,
-+      0x660a, 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012,
-+      0x2009, 0x003d, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+      0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6,
-+      0x080c, 0x9e67, 0x001e, 0x0180, 0x611a, 0x080c, 0x9fb8, 0x601f,
-+      0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x080c, 0x85ef, 0xa085,
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e, 0x0188, 0x660a,
-+      0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009,
-+      0x0044, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0xa006, 0x0cd8, 0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c, 0x82ff,
-+      0x0110, 0x8211, 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x6000,
-+      0xa086, 0x0000, 0x0190, 0x6013, 0x0000, 0x601f, 0x0007, 0x2001,
-+      0xb6b6, 0x2004, 0x0006, 0xa082, 0x0051, 0x000e, 0x0208, 0x8004,
-+      0x6016, 0x080c, 0xb2bd, 0x603f, 0x0000, 0x000e, 0x0005, 0x0066,
-+      0x00c6, 0x00d6, 0x2031, 0xb453, 0x2634, 0xd6e4, 0x0128, 0x6618,
-+      0x2660, 0x6e48, 0x080c, 0x5096, 0x00de, 0x00ce, 0x006e, 0x0005,
-+      0x0006, 0x0016, 0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e, 0x0003,
-+      0x0128, 0xa08e, 0x0004, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e,
-+      0x0005, 0x0006, 0x00d6, 0x6010, 0xa06d, 0x0148, 0x6834, 0xa086,
-+      0x0139, 0x0138, 0x6838, 0xd0fc, 0x0110, 0xa006, 0x0010, 0xa085,
-+      0x0001, 0x00de, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
-+      0x00c6, 0x080c, 0x856a, 0x001e, 0x0190, 0x611a, 0x080c, 0x9fb8,
-+      0x601f, 0x0001, 0x2d00, 0x6012, 0x080c, 0x2c60, 0x2009, 0x0028,
-+      0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006,
-+      0x0cd8, 0xa186, 0x0015, 0x1178, 0x2011, 0xb421, 0x2204, 0xa086,
-+      0x0074, 0x1148, 0x080c, 0x8f38, 0x6003, 0x0001, 0x6007, 0x0029,
-+      0x080c, 0x6c98, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x85c0, 0x0005,
-+      0xa186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x4ebe, 0x00e8,
-+      0xa186, 0x0015, 0x11e8, 0x2011, 0xb421, 0x2204, 0xa086, 0x0014,
-+      0x11b8, 0x00d6, 0x6018, 0x2068, 0x080c, 0x500c, 0x00de, 0x080c,
-+      0x8ff1, 0x1170, 0x00d6, 0x6018, 0x2068, 0x6890, 0x00de, 0xa005,
-+      0x0138, 0x2001, 0x0006, 0x080c, 0x4ebe, 0x080c, 0x8743, 0x0020,
-+      0x080c, 0x8bbc, 0x080c, 0x85c0, 0x0005, 0x6848, 0xa086, 0x0005,
-+      0x1108, 0x0009, 0x0005, 0x6850, 0xc0ad, 0x6852, 0x0005, 0x00e6,
-+      0x0126, 0x2071, 0xb400, 0x2091, 0x8000, 0x7548, 0xa582, 0x0001,
-+      0x0608, 0x704c, 0x2060, 0x6000, 0xa086, 0x0000, 0x0148, 0xace0,
-+      0x0018, 0x705c, 0xac02, 0x1208, 0x0cb0, 0x2061, 0xbc00, 0x0c98,
-+      0x6003, 0x0008, 0x8529, 0x754a, 0xaca8, 0x0018, 0x705c, 0xa502,
-+      0x1230, 0x754e, 0xa085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x704f,
-+      0xbc00, 0x0cc0, 0xa006, 0x0cc0, 0x00e6, 0x2071, 0xba8c, 0x7014,
-+      0xd0e4, 0x0150, 0x6013, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050,
-+      0x080c, 0x6c52, 0x080c, 0x7134, 0x00ee, 0x0005, 0x00c6, 0x00f6,
-+      0x2c78, 0x080c, 0x52c6, 0x00fe, 0x0120, 0x601c, 0xa084, 0x000f,
-+      0x0013, 0x00ce, 0x0005, 0x9997, 0x9ebe, 0x9ec1, 0x9ec4, 0xb0aa,
-+      0xb0c5, 0xb0c8, 0x9997, 0x9997, 0x080c, 0x1511, 0xe000, 0xe000,
-+      0x0005, 0xe000, 0xe000, 0x0005, 0x0009, 0x0005, 0x00f6, 0x2c78,
-+      0x080c, 0x52c6, 0x0538, 0x080c, 0x856a, 0x1128, 0x2001, 0xb6b8,
-+      0x2004, 0x783e, 0x00f8, 0x7818, 0x601a, 0x080c, 0x9fb8, 0x781c,
-+      0xa086, 0x0003, 0x0128, 0x7808, 0x6036, 0x2f00, 0x603a, 0x0020,
-+      0x7808, 0x603a, 0x2f00, 0x6036, 0x602a, 0x601f, 0x0001, 0x6007,
-+      0x0035, 0x6003, 0x0001, 0x7950, 0x6152, 0x080c, 0x6c52, 0x080c,
-+      0x7134, 0x2f60, 0x00fe, 0x0005, 0x0016, 0x00f6, 0x682c, 0x6032,
-+      0xa08e, 0x0001, 0x0138, 0xa086, 0x0005, 0x0140, 0xa006, 0x602a,
-+      0x602e, 0x00a0, 0x6820, 0xc0f4, 0xc0d5, 0x6822, 0x6810, 0x2078,
-+      0x787c, 0x6938, 0xa102, 0x7880, 0x6934, 0xa103, 0x1e78, 0x6834,
-+      0x602a, 0x6838, 0xa084, 0xfffc, 0x683a, 0x602e, 0x2d00, 0x6036,
-+      0x6808, 0x603a, 0x6918, 0x611a, 0x6950, 0x6152, 0x601f, 0x0001,
-+      0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x6c52, 0x6803, 0x0002,
-+      0x00fe, 0x001e, 0x0005, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x1118,
-+      0xa085, 0x0001, 0x0070, 0x6020, 0xd0f4, 0x1150, 0xc0f5, 0x6022,
-+      0x6010, 0x2078, 0x7828, 0x603a, 0x782c, 0x6036, 0x080c, 0x1944,
-+      0xa006, 0x00fe, 0x0005, 0x0006, 0x0016, 0x6004, 0xa08e, 0x0034,
-+      0x01b8, 0xa08e, 0x0035, 0x01a0, 0xa08e, 0x0036, 0x0188, 0xa08e,
-+      0x0037, 0x0170, 0xa08e, 0x0038, 0x0158, 0xa08e, 0x0039, 0x0140,
-+      0xa08e, 0x003a, 0x0128, 0xa08e, 0x003b, 0x0110, 0xa085, 0x0001,
-+      0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6,
-+      0x2001, 0xb6b2, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c,
-+      0x6b05, 0x2001, 0xb6b6, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202,
-+      0x2001, 0xb6b4, 0x200c, 0x8000, 0x2014, 0x2071, 0xb68e, 0x711a,
-+      0x721e, 0x2001, 0x0064, 0x080c, 0x6b05, 0x2001, 0xb6b7, 0x82ff,
-+      0x1110, 0x2011, 0x0014, 0x2202, 0x2009, 0xb6b8, 0xa280, 0x000a,
-+      0x200a, 0x080c, 0x52eb, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e,
-+      0x0005, 0x0006, 0x00e6, 0x2001, 0xb6b6, 0x2003, 0x0028, 0x2001,
-+      0xb6b7, 0x2003, 0x0014, 0x2071, 0xb68e, 0x701b, 0x0000, 0x701f,
-+      0x07d0, 0x2001, 0xb6b8, 0x2003, 0x001e, 0x00ee, 0x000e, 0x0005,
-+      0x00d6, 0x6054, 0xa06d, 0x0110, 0x080c, 0x160b, 0x00de, 0x0005,
-+      0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a,
-+      0x001e, 0x0178, 0x611a, 0x0ca1, 0x601f, 0x0001, 0x2d00, 0x6012,
-+      0x2009, 0x0033, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+      0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xb400,
-+      0xa186, 0x0015, 0x1500, 0x7084, 0xa086, 0x0018, 0x11e0, 0x6010,
-+      0x2068, 0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x72f2, 0x01d8,
-+      0x7070, 0x6a50, 0xa206, 0x1160, 0x7074, 0x6a54, 0xa206, 0x1140,
-+      0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2ca5,
-+      0x080c, 0x8743, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x85c0, 0x00fe,
-+      0x00ee, 0x00de, 0x0005, 0x7054, 0x6a54, 0xa206, 0x0d48, 0x0c80,
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x856a, 0x001e,
-+      0x0180, 0x611a, 0x080c, 0x9fb8, 0x601f, 0x0001, 0x2d00, 0x6012,
-+      0x2009, 0x0043, 0x080c, 0x85ef, 0xa085, 0x0001, 0x012e, 0x00ce,
-+      0x0005, 0xa006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0xb400,
-+      0xa186, 0x0015, 0x11c0, 0x7084, 0xa086, 0x0004, 0x11a0, 0x6010,
-+      0xa0e8, 0x000f, 0x2c78, 0x080c, 0x72f2, 0x01a8, 0x7070, 0x6a08,
-+      0xa206, 0x1130, 0x7074, 0x6a0c, 0xa206, 0x1110, 0x080c, 0x2c60,
-+      0x080c, 0x8743, 0x0020, 0x080c, 0x8bbc, 0x080c, 0x85c0, 0x00fe,
-+      0x00ee, 0x00de, 0x0005, 0x7054, 0x6a0c, 0xa206, 0x0d78, 0x0c80,
-+      0x0016, 0x0026, 0x684c, 0xd0ac, 0x0178, 0x6914, 0x6a10, 0x2100,
-+      0xa205, 0x0150, 0x6860, 0xa106, 0x1118, 0x685c, 0xa206, 0x0120,
-+      0x6962, 0x6a5e, 0xa085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00d6,
-+      0x0036, 0x6310, 0x2368, 0x684a, 0x6952, 0xa29e, 0x4000, 0x11a0,
-+      0x00c6, 0x6318, 0x2360, 0x2009, 0x0000, 0x6838, 0xd0f4, 0x1140,
-+      0x080c, 0x520b, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d,
-+      0x6a66, 0x696a, 0x00ce, 0x0080, 0x6a66, 0x3918, 0xa398, 0x0006,
-+      0x231c, 0x686b, 0x0004, 0x6b72, 0x00c6, 0x6318, 0x2360, 0x6004,
-+      0xa084, 0x00ff, 0x686e, 0x00ce, 0x080c, 0x53c9, 0x6013, 0x0000,
-+      0x003e, 0x00de, 0x0005, 0x00c6, 0x0026, 0x0016, 0xa186, 0x0035,
-+      0x0110, 0x6a34, 0x0008, 0x6a28, 0x080c, 0x9bdb, 0x01f0, 0x2260,
-+      0x611c, 0xa186, 0x0003, 0x0118, 0xa186, 0x0006, 0x1190, 0x6834,
-+      0xa206, 0x0140, 0x6838, 0xa206, 0x1160, 0x6108, 0x6834, 0xa106,
-+      0x1140, 0x0020, 0x6008, 0x6938, 0xa106, 0x1118, 0x6018, 0x6918,
-+      0xa106, 0x001e, 0x002e, 0x00ce, 0x0005, 0xa085, 0x0001, 0x0cc8,
-+      0x6944, 0xd1cc, 0x0198, 0xa18c, 0x00ff, 0xa18e, 0x0002, 0x1170,
-+      0xad88, 0x001e, 0x210c, 0xa18c, 0x0f00, 0x810f, 0xa18e, 0x0001,
-+      0x1128, 0x6810, 0x6914, 0xa115, 0x190c, 0x941c, 0x0005, 0x0066,
-+      0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005,
-+      0xa0f8, 0xa5cf, 0xa6f5, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8,
-+      0xa130, 0xa779, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8, 0xa0f8,
-+      0x080c, 0x1511, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1511,
-+      0x0013, 0x006e, 0x0005, 0xa113, 0xabfa, 0xa113, 0xa113, 0xa113,
-+      0xa113, 0xa113, 0xa113, 0xabbe, 0xac42, 0xa113, 0xb1ef, 0xb21f,
-+      0xb1ef, 0xb21f, 0xa113, 0x080c, 0x1511, 0x0066, 0x6000, 0xa0b2,
-+      0x0010, 0x1a0c, 0x1511, 0x0013, 0x006e, 0x0005, 0xa12e, 0xa8c5,
-+      0xa992, 0xa9bf, 0xaa43, 0xa12e, 0xab30, 0xaadb, 0xa785, 0xab94,
-+      0xaba9, 0xa12e, 0xa12e, 0xa12e, 0xa12e, 0xa12e, 0x080c, 0x1511,
-+      0xa1b2, 0x0080, 0x1a0c, 0x1511, 0x2100, 0xa1b2, 0x0040, 0x1a04,
-+      0xa543, 0x0002, 0xa17a, 0xa345, 0xa17a, 0xa17a, 0xa17a, 0xa34c,
-+      0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a,
-+      0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a,
-+      0xa17a, 0xa17c, 0xa1da, 0xa1e9, 0xa237, 0xa255, 0xa2d3, 0xa332,
-+      0xa17a, 0xa17a, 0xa34f, 0xa17a, 0xa17a, 0xa362, 0xa36d, 0xa17a,
-+      0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa3f8, 0xa17a, 0xa17a, 0xa407,
-+      0xa17a, 0xa17a, 0xa3c3, 0xa17a, 0xa17a, 0xa17a, 0xa41f, 0xa17a,
-+      0xa17a, 0xa17a, 0xa499, 0xa17a, 0xa17a, 0xa17a, 0xa17a, 0xa17a,
-+      0xa17a, 0xa50a, 0x080c, 0x1511, 0x080c, 0x52ca, 0x1150, 0x2001,
-+      0xb435, 0x2004, 0xd0cc, 0x1128, 0xa084, 0x0009, 0xa086, 0x0008,
-+      0x1140, 0x6007, 0x0009, 0x602b, 0x0009, 0x6013, 0x0000, 0x0804,
-+      0xa340, 0x080c, 0x52ba, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016,
-+      0x6218, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x6dba,
-+      0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2c08, 0x080c, 0xae05,
-+      0x007e, 0x001e, 0x2e60, 0x080c, 0x516b, 0x001e, 0x002e, 0x003e,
-+      0x00ce, 0x00ee, 0x6618, 0x00c6, 0x2660, 0x080c, 0x4f79, 0x00ce,
-+      0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0278,
-+      0x080c, 0xad49, 0x1904, 0xa231, 0x080c, 0xace9, 0x1120, 0x6007,
-+      0x0008, 0x0804, 0xa340, 0x6007, 0x0009, 0x0804, 0xa340, 0x080c,
-+      0xaefe, 0x0128, 0x080c, 0xad49, 0x0d78, 0x0804, 0xa231, 0x6013,
-+      0x1900, 0x0c88, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6106, 0x080c,
-+      0xaca3, 0x6007, 0x0006, 0x0804, 0xa340, 0x6007, 0x0007, 0x0804,
-+      0xa340, 0x080c, 0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904,
-+      0xa540, 0x00d6, 0x6618, 0x2668, 0x6e04, 0xa684, 0x00ff, 0xa082,
-+      0x0006, 0x1220, 0x2001, 0x0001, 0x080c, 0x4eac, 0xa6b4, 0xff00,
-+      0x8637, 0xa686, 0x0006, 0x0188, 0xa686, 0x0004, 0x0170, 0x6e04,
-+      0xa6b4, 0x00ff, 0xa686, 0x0006, 0x0140, 0xa686, 0x0004, 0x0128,
-+      0xa686, 0x0005, 0x0110, 0x00de, 0x00e0, 0x080c, 0xada7, 0x11a0,
-+      0xa686, 0x0006, 0x1150, 0x0026, 0x6218, 0xa290, 0x0028, 0x2214,
-+      0x2009, 0x0000, 0x080c, 0x2ca5, 0x002e, 0x080c, 0x500c, 0x6007,
-+      0x000a, 0x00de, 0x0804, 0xa340, 0x6007, 0x000b, 0x00de, 0x0804,
-+      0xa340, 0x080c, 0x2c60, 0x6007, 0x0001, 0x0804, 0xa340, 0x080c,
-+      0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6618,
-+      0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686, 0x0707, 0x0d50, 0x0026,
-+      0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x2ca5,
-+      0x002e, 0x6007, 0x000c, 0x0804, 0xa340, 0x080c, 0x52ca, 0x1140,
-+      0x2001, 0xb435, 0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110,
-+      0x0804, 0xa189, 0x080c, 0x52ba, 0x6618, 0xa6b0, 0x0001, 0x2634,
-+      0xa684, 0x00ff, 0xa082, 0x0006, 0x06e8, 0x1138, 0x0026, 0x2001,
-+      0x0006, 0x080c, 0x4eeb, 0x002e, 0x0050, 0xa6b4, 0xff00, 0x8637,
-+      0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0xa231, 0x080c,
-+      0xadb4, 0x1120, 0x6007, 0x000e, 0x0804, 0xa340, 0x0046, 0x6418,
-+      0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046, 0x080c,
-+      0x2c60, 0x004e, 0x0016, 0xa006, 0x2009, 0xb453, 0x210c, 0xd1a4,
-+      0x0158, 0x2009, 0x0029, 0x080c, 0xb06b, 0x6018, 0x00d6, 0x2068,
-+      0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001,
-+      0x0804, 0xa340, 0x2001, 0x0001, 0x080c, 0x4eac, 0x0156, 0x0016,
-+      0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xb405, 0x2011, 0xba90,
-+      0x080c, 0x907a, 0x003e, 0x002e, 0x001e, 0x015e, 0xa005, 0x0168,
-+      0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004, 0x0a04, 0xa231, 0xa682,
-+      0x0007, 0x0a04, 0xa27f, 0x0804, 0xa231, 0x6013, 0x1900, 0x6007,
-+      0x0009, 0x0804, 0xa340, 0x080c, 0x52ca, 0x1140, 0x2001, 0xb435,
-+      0x2004, 0xa084, 0x0009, 0xa086, 0x0008, 0x1110, 0x0804, 0xa189,
-+      0x080c, 0x52ba, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff,
-+      0xa082, 0x0006, 0x06b8, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004,
-+      0x0120, 0xa686, 0x0006, 0x1904, 0xa231, 0x080c, 0xaddc, 0x1138,
-+      0x080c, 0xace9, 0x1120, 0x6007, 0x0010, 0x0804, 0xa340, 0x0046,
-+      0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x0046,
-+      0x080c, 0x2c60, 0x004e, 0x0016, 0xa006, 0x2009, 0xb453, 0x210c,
-+      0xd1a4, 0x0158, 0x2009, 0x0029, 0x080c, 0xb06b, 0x6018, 0x00d6,
-+      0x2068, 0x6800, 0xc0e5, 0x6802, 0x00de, 0x001e, 0x004e, 0x6007,
-+      0x0001, 0x00f0, 0x080c, 0xaefe, 0x0140, 0xa6b4, 0xff00, 0x8637,
-+      0xa686, 0x0006, 0x0950, 0x0804, 0xa231, 0x6013, 0x1900, 0x6007,
-+      0x0009, 0x0070, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c, 0xb253,
-+      0x1904, 0xa540, 0x080c, 0xa568, 0x1904, 0xa231, 0x6007, 0x0012,
-+      0x6003, 0x0001, 0x080c, 0x6c98, 0x0005, 0x6007, 0x0001, 0x6003,
-+      0x0001, 0x080c, 0x6c98, 0x0cc0, 0x6007, 0x0005, 0x0cc0, 0x080c,
-+      0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c,
-+      0xa568, 0x1904, 0xa231, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c,
-+      0x6c98, 0x0005, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6007, 0x0023,
-+      0x6003, 0x0001, 0x080c, 0x6c98, 0x0005, 0x080c, 0xb253, 0x1904,
-+      0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c, 0xa568, 0x1904,
-+      0xa231, 0x0016, 0x0026, 0x2011, 0xba91, 0x2214, 0xa286, 0xffff,
-+      0x0190, 0x2c08, 0x080c, 0x9bdb, 0x01e0, 0x2260, 0x2011, 0xba90,
-+      0x2214, 0x6008, 0xa206, 0x11a8, 0x6018, 0xa190, 0x0006, 0x2214,
-+      0xa206, 0x01e8, 0x0070, 0x2011, 0xba90, 0x2214, 0x2c08, 0xa006,
-+      0x080c, 0xb03d, 0x11a0, 0x2011, 0xba91, 0x2214, 0xa286, 0xffff,
-+      0x01c0, 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0xba89,
-+      0x2214, 0xa296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x601c,
-+      0xa086, 0x0007, 0x1d70, 0x6004, 0xa086, 0x0024, 0x1110, 0x080c,
-+      0x85c0, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x6c98,
-+      0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x4eac, 0x0156,
-+      0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0xb405, 0x2011,
-+      0xba96, 0x080c, 0x907a, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120,
-+      0x6007, 0x0031, 0x0804, 0xa340, 0x080c, 0x8d99, 0x080c, 0x5a90,
-+      0x11b0, 0x0006, 0x0026, 0x0036, 0x080c, 0x5aac, 0x1158, 0x2001,
-+      0xb69f, 0x2003, 0x0001, 0x2001, 0xb400, 0x2003, 0x0001, 0x080c,
-+      0x59c8, 0x0010, 0x080c, 0x5a67, 0x003e, 0x002e, 0x000e, 0x0005,
-+      0x080c, 0x2d83, 0x1904, 0xa540, 0x6106, 0x080c, 0xa584, 0x6007,
-+      0x002b, 0x0804, 0xa340, 0x6007, 0x002c, 0x0804, 0xa340, 0x080c,
-+      0xb253, 0x1904, 0xa540, 0x080c, 0x2d83, 0x1904, 0xa540, 0x080c,
-+      0xa568, 0x1904, 0xa231, 0x6106, 0x080c, 0xa588, 0x1120, 0x6007,
-+      0x002e, 0x0804, 0xa340, 0x6007, 0x002f, 0x0804, 0xa340, 0x080c,
-+      0x2d83, 0x1904, 0xa540, 0x00e6, 0x00d6, 0x00c6, 0x6018, 0xa080,
-+      0x0001, 0x200c, 0xa184, 0x00ff, 0xa086, 0x0006, 0x0158, 0xa184,
-+      0xff00, 0x8007, 0xa086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee,
-+      0x0804, 0xa345, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0904, 0xa496,
-+      0x2071, 0xba8c, 0x7010, 0x6036, 0x7014, 0x603a, 0x7108, 0x720c,
-+      0x2001, 0xb453, 0x2004, 0xd0a4, 0x0140, 0x6018, 0x2068, 0x6810,
-+      0xa106, 0x1118, 0x6814, 0xa206, 0x01f8, 0x2001, 0xb453, 0x2004,
-+      0xd0ac, 0x1590, 0x2069, 0xb400, 0x6874, 0xa206, 0x1568, 0x6870,
-+      0xa106, 0x1550, 0x7210, 0x080c, 0x9bdb, 0x0558, 0x080c, 0xb0d7,
-+      0x0540, 0x622a, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x6c52,
-+      0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0xa286, 0xffff, 0x0150,
-+      0x080c, 0x9bdb, 0x01b0, 0xa280, 0x0002, 0x2004, 0x7110, 0xa106,
-+      0x1180, 0x0c08, 0x7210, 0x2c08, 0xa085, 0x0001, 0x080c, 0xb03d,
-+      0x2c10, 0x2160, 0x0130, 0x08b8, 0x6007, 0x0037, 0x6013, 0x1500,
-+      0x08d8, 0x6007, 0x0037, 0x6013, 0x1700, 0x08b0, 0x6007, 0x0012,
-+      0x0898, 0x080c, 0x2d83, 0x1904, 0xa540, 0x6018, 0xa080, 0x0001,
-+      0x2004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006, 0x1904, 0xa345,
-+      0x00e6, 0x00d6, 0x00c6, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0904,
-+      0xa502, 0x2069, 0xb400, 0x2071, 0xba8c, 0x7008, 0x6036, 0x720c,
-+      0x623a, 0xa286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0xa085,
-+      0x0001, 0x080c, 0xb03d, 0x2c10, 0x00ce, 0x0588, 0x080c, 0x9bdb,
-+      0x0570, 0x00c6, 0x0026, 0x2260, 0x080c, 0x98b6, 0x002e, 0x00ce,
-+      0x7118, 0xa18c, 0xff00, 0x810f, 0xa186, 0x0001, 0x0158, 0xa186,
-+      0x0005, 0x0118, 0xa186, 0x0007, 0x1178, 0xa280, 0x0004, 0x2004,
-+      0xa005, 0x0150, 0x0056, 0x7510, 0x7614, 0x080c, 0xb0ee, 0x005e,
-+      0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602b, 0x0009,
-+      0x6013, 0x2a00, 0x6003, 0x0001, 0x080c, 0x6c52, 0x0c88, 0x6007,
-+      0x003b, 0x602b, 0x0009, 0x6013, 0x1700, 0x6003, 0x0001, 0x080c,
-+      0x6c52, 0x0c30, 0x6007, 0x003b, 0x602b, 0x000b, 0x6013, 0x0000,
-+      0x0804, 0xa46c, 0x00e6, 0x0026, 0x080c, 0x52ca, 0x0558, 0x080c,
-+      0x52ba, 0x080c, 0xb2ce, 0x1520, 0x2071, 0xb400, 0x70d4, 0xc085,
-+      0x70d6, 0x00f6, 0x2079, 0x0100, 0x72a0, 0xa284, 0x00ff, 0x7072,
-+      0x78e6, 0xa284, 0xff00, 0x7274, 0xa205, 0x7076, 0x78ea, 0x00fe,
-+      0x70df, 0x0000, 0x2001, 0xb453, 0x2004, 0xd0a4, 0x0120, 0x2011,
-+      0xb6f9, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2a7e, 0x0010,
-+      0x080c, 0xb2fa, 0x002e, 0x00ee, 0x080c, 0x85c0, 0x0804, 0xa344,
-+      0x080c, 0x85c0, 0x0005, 0x2600, 0x0002, 0xa54e, 0xa54e, 0xa54e,
-+      0xa54e, 0xa54e, 0xa550, 0xa54e, 0xa54e, 0xa54e, 0x080c, 0x1511,
-+      0x080c, 0xb253, 0x1d68, 0x080c, 0x2d83, 0x1d50, 0x0089, 0x1138,
-+      0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x6c98, 0x0005, 0x080c,
-+      0x2c60, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x6c98, 0x0005,
-+      0x00d6, 0x0066, 0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637,
-+      0xa686, 0x0006, 0x0170, 0xa686, 0x0004, 0x0158, 0x6e04, 0xa6b4,
-+      0x00ff, 0xa686, 0x0006, 0x0128, 0xa686, 0x0004, 0x0110, 0xa085,
-+      0x0001, 0x006e, 0x00de, 0x0005, 0x00d6, 0x0449, 0x00de, 0x0005,
-+      0x00d6, 0x0491, 0x11f0, 0x680c, 0xa08c, 0xff00, 0x6820, 0xa084,
-+      0x00ff, 0xa115, 0x6212, 0x6824, 0x602a, 0xd1e4, 0x0118, 0x2009,
-+      0x0001, 0x0060, 0xd1ec, 0x0168, 0x6920, 0xa18c, 0x00ff, 0x6824,
-+      0x080c, 0x27e3, 0x1130, 0x2110, 0x2009, 0x0000, 0x080c, 0x2ca5,
-+      0x0018, 0xa085, 0x0001, 0x0008, 0xa006, 0x00de, 0x0005, 0x2069,
-+      0xba8d, 0x6800, 0xa082, 0x0010, 0x1228, 0x6013, 0x0000, 0xa085,
-+      0x0001, 0x0008, 0xa006, 0x0005, 0x6013, 0x0000, 0x2069, 0xba8c,
-+      0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x1140, 0x6800, 0xa084,
-+      0x00ff, 0xa08e, 0x0014, 0x0110, 0xa08e, 0x0010, 0x0005, 0x6004,
-+      0xa0b2, 0x0080, 0x1a0c, 0x1511, 0xa1b6, 0x0013, 0x1130, 0x2008,
-+      0xa1b2, 0x0040, 0x1a04, 0xa6cf, 0x0092, 0xa1b6, 0x0027, 0x0120,
-+      0xa1b6, 0x0014, 0x190c, 0x1511, 0x2001, 0x0007, 0x080c, 0x4eeb,
-+      0x080c, 0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa62f,
-+      0xa631, 0xa62f, 0xa62f, 0xa62f, 0xa631, 0xa643, 0xa6c8, 0xa693,
-+      0xa6c8, 0xa6a4, 0xa6c8, 0xa643, 0xa6c8, 0xa6c0, 0xa6c8, 0xa6c0,
-+      0xa6c8, 0xa6c8, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa62f,
-+      0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa631, 0xa62f, 0xa6c8,
-+      0xa62f, 0xa62f, 0xa6c8, 0xa62f, 0xa6c5, 0xa6c8, 0xa62f, 0xa62f,
-+      0xa62f, 0xa62f, 0xa6c8, 0xa6c8, 0xa62f, 0xa6c8, 0xa6c8, 0xa62f,
-+      0xa63d, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0xa6c4, 0xa6c8, 0xa62f,
-+      0xa62f, 0xa6c8, 0xa6c8, 0xa62f, 0xa62f, 0xa62f, 0xa62f, 0x080c,
-+      0x1511, 0x080c, 0x7055, 0x2001, 0xb6b6, 0x2004, 0x6016, 0x6003,
-+      0x0002, 0x080c, 0x7134, 0x0804, 0xa6ce, 0x2001, 0x0000, 0x080c,
-+      0x4eac, 0x0804, 0xa6c8, 0x00f6, 0x2079, 0xb452, 0x7804, 0x00fe,
-+      0xd0ac, 0x1904, 0xa6c8, 0x2001, 0x0000, 0x080c, 0x4eac, 0x6018,
-+      0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x1140, 0x00f6, 0x2079,
-+      0xb400, 0x7898, 0x8000, 0x789a, 0x00fe, 0x00e0, 0x00c6, 0x6018,
-+      0x2060, 0x6000, 0xd0f4, 0x1140, 0x6010, 0xa005, 0x0128, 0x00ce,
-+      0x080c, 0x3efc, 0x0804, 0xa6c8, 0x00ce, 0x2001, 0xb400, 0x2004,
-+      0xa086, 0x0002, 0x1138, 0x00f6, 0x2079, 0xb400, 0x7898, 0x8000,
-+      0x789a, 0x00fe, 0x2001, 0x0002, 0x080c, 0x4ebe, 0x080c, 0x7055,
-+      0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x6c98,
-+      0x080c, 0x7134, 0x00c6, 0x6118, 0x2160, 0x2009, 0x0001, 0x080c,
-+      0x696d, 0x00ce, 0x04d8, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de,
-+      0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0550, 0xa686, 0x0004,
-+      0x0538, 0x2001, 0x0004, 0x0410, 0x2001, 0xb400, 0x2004, 0xa086,
-+      0x0003, 0x1110, 0x080c, 0x3efc, 0x2001, 0x0006, 0x04a1, 0x6618,
-+      0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686,
-+      0x0006, 0x0170, 0x2001, 0x0006, 0x0048, 0x2001, 0x0004, 0x0030,
-+      0x2001, 0x0006, 0x0401, 0x0020, 0x0018, 0x0010, 0x080c, 0x4eeb,
-+      0x080c, 0x7055, 0x080c, 0x85c0, 0x080c, 0x7134, 0x0005, 0x2600,
-+      0x0002, 0xa6da, 0xa6da, 0xa6da, 0xa6da, 0xa6da, 0xa6dc, 0xa6da,
-+      0xa6da, 0xa6da, 0x080c, 0x1511, 0x080c, 0x7055, 0x080c, 0x85c0,
-+      0x080c, 0x7134, 0x0005, 0x0016, 0x00d6, 0x6118, 0x2168, 0x6900,
-+      0xd184, 0x0140, 0x080c, 0x4ebe, 0x2001, 0x0000, 0x080c, 0x4eac,
-+      0x080c, 0x2c86, 0x00de, 0x001e, 0x0005, 0x00d6, 0x6618, 0x2668,
-+      0x6804, 0xa084, 0xff00, 0x8007, 0x00de, 0xa0b2, 0x000c, 0x1a0c,
-+      0x1511, 0xa1b6, 0x0015, 0x1110, 0x003b, 0x0028, 0xa1b6, 0x0016,
-+      0x190c, 0x1511, 0x006b, 0x0005, 0x8c82, 0x8c82, 0x8c82, 0x8c82,
-+      0x8c82, 0x8c82, 0xa765, 0xa724, 0x8c82, 0x8c82, 0x8c82, 0x8c82,
-+      0x8c82, 0x8c82, 0x8c82, 0x8c82, 0x8c82, 0x8c82, 0xa765, 0xa76c,
-+      0x8c82, 0x8c82, 0x8c82, 0x8c82, 0x00f6, 0x2079, 0xb452, 0x7804,
-+      0xd0ac, 0x11e0, 0x6018, 0xa07d, 0x01c8, 0x7800, 0xd0f4, 0x1118,
-+      0x7810, 0xa005, 0x1198, 0x2001, 0x0000, 0x080c, 0x4eac, 0x2001,
-+      0x0002, 0x080c, 0x4ebe, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007,
-+      0x0002, 0x080c, 0x6c98, 0x080c, 0x7134, 0x00e8, 0x2011, 0xba83,
-+      0x2204, 0x8211, 0x220c, 0x080c, 0x27e3, 0x11a8, 0x00c6, 0x080c,
-+      0x4f6a, 0x0120, 0x00ce, 0x080c, 0x85c0, 0x0068, 0x6010, 0x0006,
-+      0x6014, 0x0006, 0x080c, 0x4bc5, 0x000e, 0x6016, 0x000e, 0x6012,
-+      0x00ce, 0x080c, 0x85c0, 0x00fe, 0x0005, 0x6604, 0xa6b6, 0x001e,
-+      0x1110, 0x080c, 0x85c0, 0x0005, 0x080c, 0x8f35, 0x1138, 0x6003,
-+      0x0001, 0x6007, 0x0001, 0x080c, 0x6c98, 0x0010, 0x080c, 0x85c0,
-+      0x0005, 0x6004, 0xa08a, 0x0080, 0x1a0c, 0x1511, 0x080c, 0x7055,
-+      0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa182, 0x0040, 0x0002,
-+      0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79d, 0xa79b, 0xa79b, 0xa79b,
-+      0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b, 0xa79b,
-+      0xa79b, 0xa79b, 0xa79b, 0x080c, 0x1511, 0x00d6, 0x00e6, 0x00f6,
-+      0x0156, 0x0046, 0x0026, 0x6218, 0xa280, 0x002b, 0x2004, 0xa005,
-+      0x0120, 0x2021, 0x0000, 0x080c, 0xb29f, 0x6106, 0x2071, 0xba80,
-+      0x7444, 0xa4a4, 0xff00, 0x0904, 0xa801, 0xa486, 0x2000, 0x1130,
-+      0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x6adf, 0x080c, 0x15f4,
-+      0x090c, 0x1511, 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803,
-+      0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2,
-+      0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x694a, 0x0016, 0xa084,
-+      0xff00, 0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6857, 0x0036,
-+      0x080c, 0x53c9, 0x001e, 0xa486, 0x2000, 0x1130, 0x2019, 0x0017,
-+      0x080c, 0xafe8, 0x0804, 0xa85e, 0xa486, 0x0400, 0x1130, 0x2019,
-+      0x0002, 0x080c, 0xaf9a, 0x0804, 0xa85e, 0xa486, 0x0200, 0x1110,
-+      0x080c, 0xaf7f, 0xa486, 0x1000, 0x1110, 0x080c, 0xafcd, 0x0804,
-+      0xa85e, 0x2069, 0xb774, 0x6a00, 0xd284, 0x0904, 0xa8c1, 0xa284,
-+      0x0300, 0x1904, 0xa8ba, 0x6804, 0xa005, 0x0904, 0xa8a2, 0x2d78,
-+      0x6003, 0x0007, 0x080c, 0x15db, 0x0904, 0xa865, 0x7800, 0xd08c,
-+      0x1118, 0x7804, 0x8001, 0x7806, 0x6013, 0x0000, 0x6803, 0x0000,
-+      0x6837, 0x0116, 0x683b, 0x0000, 0x6008, 0x68b2, 0x2c00, 0x684a,
-+      0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0x6986, 0x6846, 0x7928,
-+      0x698a, 0x792c, 0x698e, 0x7930, 0x6992, 0x7934, 0x6996, 0x6853,
-+      0x003d, 0x7244, 0xa294, 0x0003, 0xa286, 0x0002, 0x1118, 0x684f,
-+      0x0040, 0x0040, 0xa286, 0x0001, 0x1118, 0x684f, 0x0080, 0x0010,
-+      0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0xba90, 0xad90, 0x0015,
-+      0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x1f04, 0xa850, 0x200c,
-+      0x6982, 0x8000, 0x200c, 0x697e, 0x080c, 0x53c9, 0x002e, 0x004e,
-+      0x015e, 0x00fe, 0x00ee, 0x00de, 0x0005, 0x2001, 0xb40e, 0x2004,
-+      0xd084, 0x0120, 0x080c, 0x15f4, 0x1904, 0xa816, 0x6013, 0x0100,
-+      0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c52, 0x080c, 0x7134,
-+      0x0c28, 0x2069, 0xba92, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200,
-+      0x11a8, 0x2069, 0xba80, 0x686c, 0xa084, 0x00ff, 0x0016, 0x6110,
-+      0xa18c, 0x0700, 0xa10d, 0x6112, 0x001e, 0x6003, 0x0001, 0x6007,
-+      0x0043, 0x080c, 0x6c52, 0x080c, 0x7134, 0x0840, 0x6013, 0x0200,
-+      0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c52, 0x080c, 0x7134,
-+      0x0804, 0xa85e, 0x2001, 0xb40d, 0x2004, 0xd0ec, 0x0120, 0x2011,
-+      0x8049, 0x080c, 0x3e8a, 0x6013, 0x0300, 0x0010, 0x6013, 0x0100,
-+      0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x6c52, 0x080c, 0x7134,
-+      0x0804, 0xa85e, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600, 0x0804,
-+      0xa879, 0x6013, 0x0200, 0x0804, 0xa879, 0xa186, 0x0013, 0x1170,
-+      0x6004, 0xa08a, 0x0040, 0x0a0c, 0x1511, 0xa08a, 0x0053, 0x1a0c,
-+      0x1511, 0xa082, 0x0040, 0x2008, 0x0804, 0xa94f, 0xa186, 0x0051,
-+      0x0138, 0xa186, 0x0047, 0x11d8, 0x6004, 0xa086, 0x0041, 0x0518,
-+      0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091, 0x2800,
-+      0x0006, 0x0016, 0x0026, 0x080c, 0x6b39, 0x002e, 0x001e, 0x000e,
-+      0x012e, 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0xa992, 0xa186,
-+      0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1511, 0x6004, 0xa082,
-+      0x0040, 0x2008, 0x001a, 0x080c, 0x8606, 0x0005, 0xa919, 0xa91b,
-+      0xa91b, 0xa93f, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919,
-+      0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919, 0xa919,
-+      0xa919, 0x080c, 0x1511, 0x080c, 0x7055, 0x080c, 0x7134, 0x0036,
-+      0x00d6, 0x6010, 0xa06d, 0x01c0, 0xad84, 0xf000, 0x01a8, 0x6003,
-+      0x0002, 0x6018, 0x2004, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c,
-+      0xb01c, 0x6013, 0x0000, 0x6014, 0xa005, 0x1120, 0x2001, 0xb6b7,
-+      0x2004, 0x6016, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005, 0x00d6,
-+      0x080c, 0x7055, 0x080c, 0x7134, 0x080c, 0x9beb, 0x0120, 0x6010,
-+      0x2068, 0x080c, 0x160b, 0x080c, 0x9dae, 0x00de, 0x0005, 0x0002,
-+      0xa963, 0xa980, 0xa96c, 0xa98c, 0xa963, 0xa963, 0xa963, 0xa963,
-+      0xa963, 0xa963, 0xa963, 0xa963, 0xa963, 0xa963, 0xa963, 0xa963,
-+      0xa963, 0xa963, 0xa963, 0x080c, 0x1511, 0x6010, 0xa088, 0x0013,
-+      0x2104, 0xa085, 0x0400, 0x200a, 0x080c, 0x7055, 0x6010, 0xa080,
-+      0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
-+      0x080c, 0x85ef, 0x0010, 0x6003, 0x0002, 0x080c, 0x7134, 0x0005,
-+      0x080c, 0x7055, 0x080c, 0xb25a, 0x1120, 0x080c, 0x6ab4, 0x080c,
-+      0x85c0, 0x080c, 0x7134, 0x0005, 0x080c, 0x7055, 0x2009, 0x0041,
-+      0x0804, 0xaadb, 0xa182, 0x0040, 0x0002, 0xa9a8, 0xa9aa, 0xa9a8,
-+      0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9ab, 0xa9a8, 0xa9a8, 0xa9a8,
-+      0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9a8, 0xa9b6, 0xa9a8,
-+      0x080c, 0x1511, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
-+      0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x0005, 0x00d6, 0x080c,
-+      0x6ab4, 0x00de, 0x080c, 0xb2bd, 0x080c, 0x85c0, 0x0005, 0xa182,
-+      0x0040, 0x0002, 0xa9d5, 0xa9d5, 0xa9d5, 0xa9d5, 0xa9d5, 0xa9d5,
-+      0xa9d5, 0xa9d7, 0xa9d5, 0xa9da, 0xaa13, 0xa9d5, 0xa9d5, 0xa9d5,
-+      0xa9d5, 0xaa13, 0xa9d5, 0xa9d5, 0xa9d5, 0x080c, 0x1511, 0x080c,
-+      0x8606, 0x0005, 0x2001, 0xb472, 0x2004, 0xd0e4, 0x0158, 0x2001,
-+      0x0100, 0x2004, 0xa082, 0x0005, 0x0228, 0x2001, 0x011f, 0x2004,
-+      0x6036, 0x0010, 0x6037, 0x0000, 0x080c, 0x70e7, 0x080c, 0x71f1,
-+      0x6010, 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c, 0x0003,
-+      0xa18e, 0x0002, 0x0168, 0x2009, 0x0041, 0x00de, 0x0804, 0xaadb,
-+      0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x6ab4, 0x00de, 0x0005,
-+      0x080c, 0xb25a, 0x0110, 0x00de, 0x0005, 0x080c, 0x6ab4, 0x080c,
-+      0x85c0, 0x00de, 0x0ca0, 0x0036, 0x080c, 0x70e7, 0x080c, 0x71f1,
-+      0x6010, 0x00d6, 0x2068, 0x6018, 0x2004, 0xd0bc, 0x0188, 0x684c,
-+      0xa084, 0x0003, 0xa086, 0x0002, 0x0140, 0x687c, 0x632c, 0xa31a,
-+      0x632e, 0x6880, 0x6328, 0xa31b, 0x632a, 0x6003, 0x0002, 0x0080,
-+      0x2019, 0x0004, 0x080c, 0xb01c, 0x6014, 0xa005, 0x1128, 0x2001,
-+      0xb6b7, 0x2004, 0x8003, 0x6016, 0x6013, 0x0000, 0x6003, 0x0007,
-+      0x00de, 0x003e, 0x0005, 0xa186, 0x0013, 0x1150, 0x6004, 0xa086,
-+      0x0042, 0x190c, 0x1511, 0x080c, 0x7055, 0x080c, 0x7134, 0x0005,
-+      0xa186, 0x0027, 0x0118, 0xa186, 0x0014, 0x1180, 0x6004, 0xa086,
-+      0x0042, 0x190c, 0x1511, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x080c,
-+      0x7055, 0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa182, 0x0040,
-+      0x0002, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c,
-+      0xaa7e, 0xaa8a, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c,
-+      0xaa7c, 0xaa7c, 0xaa7c, 0xaa7c, 0x080c, 0x1511, 0x0036, 0x0046,
-+      0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x1856, 0x004e,
-+      0x003e, 0x0005, 0x6010, 0x00d6, 0x2068, 0x6810, 0x6a14, 0x0006,
-+      0x0046, 0x0056, 0x6c7c, 0xa422, 0x6d80, 0x2200, 0xa52b, 0x602c,
-+      0xa420, 0x642e, 0x6028, 0xa529, 0x652a, 0x005e, 0x004e, 0x000e,
-+      0xa20d, 0x1178, 0x684c, 0xd0fc, 0x0120, 0x2009, 0x0041, 0x00de,
-+      0x0490, 0x6003, 0x0007, 0x6017, 0x0000, 0x080c, 0x6ab4, 0x00de,
-+      0x0005, 0x0006, 0x00f6, 0x2c78, 0x080c, 0x52c6, 0x00fe, 0x000e,
-+      0x0120, 0x6003, 0x0002, 0x00de, 0x0005, 0x2009, 0xb40d, 0x210c,
-+      0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0021,
-+      0x080c, 0x6ab6, 0x00de, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
-+      0x8212, 0xa291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,
-+      0x6a6a, 0x6866, 0x0005, 0xa182, 0x0040, 0x0208, 0x0062, 0xa186,
-+      0x0013, 0x0120, 0xa186, 0x0014, 0x190c, 0x1511, 0x6020, 0xd0dc,
-+      0x090c, 0x1511, 0x0005, 0xaafe, 0xab05, 0xab11, 0xab1d, 0xaafe,
-+      0xaafe, 0xaafe, 0xab2c, 0xaafe, 0xab00, 0xab00, 0xaafe, 0xaafe,
-+      0xaafe, 0xaafe, 0xab00, 0xaafe, 0xab00, 0xaafe, 0x080c, 0x1511,
-+      0x6020, 0xd0dc, 0x090c, 0x1511, 0x0005, 0x6003, 0x0001, 0x6106,
-+      0x080c, 0x6c52, 0x0126, 0x2091, 0x8000, 0x080c, 0x7134, 0x012e,
-+      0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x7134, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
-+      0x2c10, 0x080c, 0x1f7a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6cb5,
-+      0x080c, 0x71f1, 0x012e, 0x0005, 0xa016, 0x080c, 0x1856, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0xa182, 0x0040, 0x0023,
-+      0x00de, 0x003e, 0x012e, 0x0005, 0xab4c, 0xab4e, 0xab60, 0xab7b,
-+      0xab4c, 0xab4c, 0xab4c, 0xab90, 0xab4c, 0xab4c, 0xab4c, 0xab4c,
-+      0xab4c, 0xab4c, 0xab4c, 0xab4c, 0x080c, 0x1511, 0x6010, 0x2068,
-+      0x684c, 0xd0fc, 0x01f8, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x01d0,
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x080c, 0x7134, 0x0498,
-+      0x6010, 0x2068, 0x684c, 0xd0fc, 0x0168, 0xa09c, 0x0003, 0xa39e,
-+      0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x6c52, 0x080c,
-+      0x7134, 0x0408, 0x6013, 0x0000, 0x6017, 0x0000, 0x2019, 0x0004,
-+      0x080c, 0xb01c, 0x00c0, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0d90,
-+      0xa09c, 0x0003, 0xa39e, 0x0003, 0x0d68, 0x6003, 0x0003, 0x6106,
-+      0x2c10, 0x080c, 0x1f7a, 0x080c, 0x6cb5, 0x080c, 0x71f1, 0x0018,
-+      0xa016, 0x080c, 0x1856, 0x0005, 0x080c, 0x7055, 0x6110, 0x81ff,
-+      0x0158, 0x00d6, 0x2168, 0x080c, 0xb303, 0x0036, 0x2019, 0x0029,
-+      0x080c, 0xb01c, 0x003e, 0x00de, 0x080c, 0x9dae, 0x080c, 0x7134,
-+      0x0005, 0x080c, 0x70e7, 0x6110, 0x81ff, 0x0158, 0x00d6, 0x2168,
-+      0x080c, 0xb303, 0x0036, 0x2019, 0x0029, 0x080c, 0xb01c, 0x003e,
-+      0x00de, 0x080c, 0x9dae, 0x080c, 0x71f1, 0x0005, 0xa182, 0x0085,
-+      0x0002, 0xabca, 0xabc8, 0xabc8, 0xabd6, 0xabc8, 0xabc8, 0xabc8,
-+      0x080c, 0x1511, 0x6003, 0x000b, 0x6106, 0x080c, 0x6c52, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x7134, 0x012e, 0x0005, 0x0026, 0x00e6,
-+      0x080c, 0xb253, 0x0118, 0x080c, 0x85c0, 0x00c8, 0x2071, 0xba80,
-+      0x7224, 0x6212, 0x7220, 0x080c, 0xaeca, 0x0118, 0x6007, 0x0086,
-+      0x0040, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x1110, 0x6007,
-+      0x0086, 0x6003, 0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00ee,
-+      0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a, 0x0085,
-+      0x0a0c, 0x1511, 0xa08a, 0x008c, 0x1a0c, 0x1511, 0xa082, 0x0085,
-+      0x00a2, 0xa186, 0x0027, 0x0130, 0xa186, 0x0014, 0x0118, 0x080c,
-+      0x8606, 0x0050, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x080c, 0x7055,
-+      0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xac24, 0xac26, 0xac26,
-+      0xac24, 0xac24, 0xac24, 0xac24, 0x080c, 0x1511, 0x080c, 0x7055,
-+      0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0xa182, 0x0085, 0x0a0c,
-+      0x1511, 0xa182, 0x008c, 0x1a0c, 0x1511, 0xa182, 0x0085, 0x0002,
-+      0xac3f, 0xac3f, 0xac3f, 0xac41, 0xac3f, 0xac3f, 0xac3f, 0x080c,
-+      0x1511, 0x0005, 0xa186, 0x0013, 0x0148, 0xa186, 0x0014, 0x0130,
-+      0xa186, 0x0027, 0x0118, 0x080c, 0x8606, 0x0030, 0x080c, 0x7055,
-+      0x080c, 0x9dae, 0x080c, 0x7134, 0x0005, 0x0036, 0x080c, 0xb2bd,
-+      0x603f, 0x0000, 0x2019, 0x000b, 0x0031, 0x601f, 0x0006, 0x6003,
-+      0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x0086,
-+      0x2c40, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da, 0x009e, 0x008e,
-+      0x1578, 0x0076, 0x2c38, 0x080c, 0x8179, 0x007e, 0x1548, 0x6000,
-+      0xa086, 0x0000, 0x0528, 0x601c, 0xa086, 0x0007, 0x0508, 0x00d6,
-+      0x6000, 0xa086, 0x0004, 0x1150, 0x080c, 0xb2bd, 0x601f, 0x0007,
-+      0x2001, 0xb6b6, 0x2004, 0x6016, 0x080c, 0x1944, 0x6010, 0x2068,
-+      0x080c, 0x9beb, 0x0110, 0x080c, 0xb01c, 0x00de, 0x6013, 0x0000,
-+      0x080c, 0xb2bd, 0x601f, 0x0007, 0x2001, 0xb6b6, 0x2004, 0x6016,
-+      0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x0036, 0x0156, 0x2079,
-+      0xba80, 0x7938, 0x783c, 0x080c, 0x27e3, 0x15b0, 0x0016, 0x00c6,
-+      0x080c, 0x4f6a, 0x1578, 0x001e, 0x002e, 0x0026, 0x0016, 0x2019,
-+      0x0029, 0x080c, 0x823c, 0x080c, 0x6dba, 0x0076, 0x2039, 0x0000,
-+      0x080c, 0x6cc7, 0x007e, 0x001e, 0x0076, 0x2039, 0x0000, 0x080c,
-+      0xae05, 0x007e, 0x080c, 0x516b, 0x0026, 0x6204, 0xa294, 0xff00,
-+      0x8217, 0xa286, 0x0006, 0x0118, 0xa286, 0x0004, 0x1118, 0x62a0,
-+      0x080c, 0x2d19, 0x002e, 0x001e, 0x080c, 0x4bc5, 0x6612, 0x6516,
-+      0xa006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00ce, 0x00fe,
-+      0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009, 0xb421, 0x2104,
-+      0xa086, 0x0074, 0x1904, 0xad3e, 0x2069, 0xba8e, 0x690c, 0xa182,
-+      0x0100, 0x06c0, 0x6908, 0xa184, 0x8000, 0x05e8, 0x2001, 0xb69e,
-+      0x2004, 0xa005, 0x1160, 0x6018, 0x2070, 0x7010, 0xa084, 0x00ff,
-+      0x0118, 0x7000, 0xd0f4, 0x0118, 0xa184, 0x0800, 0x0560, 0x6910,
-+      0xa18a, 0x0001, 0x0610, 0x6914, 0x2069, 0xbaae, 0x6904, 0x81ff,
-+      0x1198, 0x690c, 0xa182, 0x0100, 0x02a8, 0x6908, 0x81ff, 0x1178,
-+      0x6910, 0xa18a, 0x0001, 0x0288, 0x6918, 0xa18a, 0x0001, 0x0298,
-+      0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013, 0x0300, 0x0088, 0x6013,
-+      0x0500, 0x0070, 0x6013, 0x0700, 0x0058, 0x6013, 0x0900, 0x0040,
-+      0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00, 0x0010, 0x6013, 0x2d00,
-+      0xa085, 0x0001, 0x0008, 0xa006, 0x001e, 0x00ee, 0x00de, 0x00ce,
-+      0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036, 0x0156, 0x6218, 0x2268,
-+      0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0190, 0xa286, 0x0004,
-+      0x0178, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0148, 0xa286,
-+      0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c, 0x4f79, 0x00ce, 0x04c0,
-+      0x2011, 0xba96, 0xad98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x907a,
-+      0x1580, 0x2011, 0xba9a, 0xad98, 0x0006, 0x20a9, 0x0004, 0x080c,
-+      0x907a, 0x1538, 0x0046, 0x0016, 0x6aa0, 0xa294, 0x00ff, 0x8227,
-+      0xa006, 0x2009, 0xb453, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029,
-+      0x080c, 0xb06b, 0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x080c,
-+      0x6dba, 0x0076, 0x2039, 0x0000, 0x080c, 0x6cc7, 0x2c08, 0x080c,
-+      0xae05, 0x007e, 0x2001, 0x0007, 0x080c, 0x4eeb, 0x001e, 0x004e,
-+      0xa006, 0x015e, 0x003e, 0x002e, 0x00de, 0x00ce, 0x0005, 0x00d6,
-+      0x2069, 0xba8e, 0x6800, 0xa086, 0x0800, 0x0118, 0x6013, 0x0000,
-+      0x0008, 0xa006, 0x00de, 0x0005, 0x00c6, 0x00f6, 0x0016, 0x0026,
-+      0x0036, 0x0156, 0x2079, 0xba8c, 0x7930, 0x7834, 0x080c, 0x27e3,
-+      0x11a0, 0x080c, 0x4f6a, 0x1188, 0x2011, 0xba90, 0xac98, 0x000a,
-+      0x20a9, 0x0004, 0x080c, 0x907a, 0x1140, 0x2011, 0xba94, 0xac98,
-+      0x0006, 0x20a9, 0x0004, 0x080c, 0x907a, 0x015e, 0x003e, 0x002e,
-+      0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6, 0x0006, 0x0016, 0x0026,
-+      0x0036, 0x0156, 0x2011, 0xba83, 0x2204, 0x8211, 0x220c, 0x080c,
-+      0x27e3, 0x11a0, 0x080c, 0x4f6a, 0x1188, 0x2011, 0xba96, 0xac98,
-+      0x000a, 0x20a9, 0x0004, 0x080c, 0x907a, 0x1140, 0x2011, 0xba9a,
-+      0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x907a, 0x015e, 0x003e,
-+      0x002e, 0x001e, 0x000e, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0086,
-+      0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000,
-+      0x2740, 0x2029, 0xb6e9, 0x252c, 0x2021, 0xb6ef, 0x2424, 0x2061,
-+      0xbc00, 0x2071, 0xb400, 0x7648, 0x7068, 0x81ff, 0x0150, 0x0006,
-+      0xa186, 0xb7f4, 0x000e, 0x0128, 0x8001, 0xa602, 0x1a04, 0xae86,
-+      0x0018, 0xa606, 0x0904, 0xae86, 0x2100, 0xac06, 0x0904, 0xae7d,
-+      0x080c, 0xb093, 0x0904, 0xae7d, 0x671c, 0xa786, 0x0001, 0x0904,
-+      0xaea1, 0xa786, 0x0004, 0x0904, 0xaea1, 0xa786, 0x0007, 0x05e8,
-+      0x2500, 0xac06, 0x05d0, 0x2400, 0xac06, 0x05b8, 0x080c, 0xb0a3,
-+      0x15a0, 0x88ff, 0x0118, 0x6050, 0xa906, 0x1578, 0x00d6, 0x6000,
-+      0xa086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1944, 0x001e, 0xa786,
-+      0x0008, 0x1148, 0x080c, 0x9de9, 0x1130, 0x080c, 0x8bbc, 0x00de,
-+      0x080c, 0x9dae, 0x00d0, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0190,
-+      0xa786, 0x0003, 0x1528, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-+      0x080c, 0xb303, 0x0016, 0x080c, 0x9e5d, 0x080c, 0x53c9, 0x001e,
-+      0x080c, 0x9da2, 0x00de, 0x080c, 0x9dae, 0xace0, 0x0018, 0x2001,
-+      0xb417, 0x2004, 0xac02, 0x1210, 0x0804, 0xae19, 0x012e, 0x002e,
-+      0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005,
-+      0xa786, 0x0006, 0x1150, 0xa386, 0x0005, 0x0128, 0x080c, 0xb303,
-+      0x080c, 0xb01c, 0x08f8, 0x00de, 0x0c00, 0xa786, 0x000a, 0x0968,
-+      0x0850, 0x080c, 0xb0a3, 0x19c8, 0x81ff, 0x09b8, 0xa180, 0x0001,
-+      0x2004, 0xa086, 0x0018, 0x0130, 0xa180, 0x0001, 0x2004, 0xa086,
-+      0x002d, 0x1958, 0x6000, 0xa086, 0x0002, 0x1938, 0x080c, 0x9dd8,
-+      0x0130, 0x080c, 0x9de9, 0x1908, 0x080c, 0x8bbc, 0x0038, 0x080c,
-+      0x2c86, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc, 0x080c, 0x9dae,
-+      0x0804, 0xae7d, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0xa006,
-+      0x080c, 0xb03d, 0x001e, 0x0120, 0x601c, 0xa084, 0x000f, 0x001b,
-+      0x00ee, 0x00ce, 0x0005, 0xaee3, 0xaee3, 0xaee3, 0xaee3, 0xaee3,
-+      0xaee3, 0xaee5, 0xaee3, 0xa006, 0x0005, 0x0046, 0x0016, 0x7018,
-+      0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009,
-+      0x0020, 0x080c, 0xb06b, 0x001e, 0x004e, 0x0036, 0x2019, 0x0002,
-+      0x080c, 0xac63, 0x003e, 0xa085, 0x0001, 0x0005, 0x2001, 0x0001,
-+      0x080c, 0x4eac, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
-+      0x2019, 0xb405, 0x2011, 0xba96, 0x080c, 0x907a, 0x003e, 0x002e,
-+      0x001e, 0x015e, 0xa005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086,
-+      0x0076, 0x0066, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061,
-+      0xbc00, 0x2079, 0x0001, 0x8fff, 0x0904, 0xaf72, 0x2071, 0xb400,
-+      0x7648, 0x7068, 0x8001, 0xa602, 0x1a04, 0xaf72, 0x88ff, 0x0128,
-+      0x2800, 0xac06, 0x15b0, 0x2079, 0x0000, 0x080c, 0xb093, 0x0588,
-+      0x2400, 0xac06, 0x0570, 0x671c, 0xa786, 0x0006, 0x1550, 0xa786,
-+      0x0007, 0x0538, 0x88ff, 0x1140, 0x6018, 0xa206, 0x1510, 0x85ff,
-+      0x0118, 0x6050, 0xa106, 0x11e8, 0x00d6, 0x6000, 0xa086, 0x0004,
-+      0x1150, 0x080c, 0xb2bd, 0x601f, 0x0007, 0x2001, 0xb6b6, 0x2004,
-+      0x6016, 0x080c, 0x1944, 0x6010, 0x2068, 0x080c, 0x9beb, 0x0120,
-+      0x0046, 0x080c, 0xb01c, 0x004e, 0x00de, 0x080c, 0x9dae, 0x88ff,
-+      0x1198, 0xace0, 0x0018, 0x2001, 0xb417, 0x2004, 0xac02, 0x1210,
-+      0x0804, 0xaf23, 0xa006, 0x012e, 0x002e, 0x006e, 0x007e, 0x008e,
-+      0x00ce, 0x00ee, 0x00fe, 0x0005, 0xa8c5, 0x0001, 0x0ca0, 0x0076,
-+      0x0056, 0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2c20, 0x2019,
-+      0x0002, 0x6218, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da, 0x009e,
-+      0x008e, 0x2039, 0x0000, 0x080c, 0x8179, 0x080c, 0xaf14, 0x005e,
-+      0x007e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
-+      0x2c20, 0x2128, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x0036,
-+      0x080c, 0x4f6a, 0x11b0, 0x2c10, 0x0056, 0x0086, 0x2041, 0x0000,
-+      0x2508, 0x2029, 0x0001, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da,
-+      0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x8179, 0x080c, 0xaf14,
-+      0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xafa6, 0x015e, 0x00ce,
-+      0x007e, 0x005e, 0x004e, 0x002e, 0x0005, 0x0076, 0x0056, 0x6218,
-+      0x0086, 0x2041, 0x0000, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096,
-+      0x2049, 0x0000, 0x080c, 0x80da, 0x009e, 0x008e, 0x2039, 0x0000,
-+      0x080c, 0x8179, 0x2c20, 0x080c, 0xaf14, 0x005e, 0x007e, 0x0005,
-+      0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9,
-+      0x007f, 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x4f6a, 0x11c0,
-+      0x2c10, 0x0086, 0x2041, 0x0000, 0x2828, 0x0046, 0x2021, 0x0001,
-+      0x080c, 0xb29f, 0x004e, 0x0096, 0x2049, 0x0000, 0x080c, 0x80da,
-+      0x009e, 0x008e, 0x2039, 0x0000, 0x080c, 0x8179, 0x080c, 0xaf14,
-+      0x003e, 0x001e, 0x8108, 0x1f04, 0xaff3, 0x015e, 0x00ce, 0x007e,
-+      0x005e, 0x004e, 0x002e, 0x0005, 0x0016, 0x00f6, 0x3800, 0xd08c,
-+      0x0130, 0xad82, 0x1000, 0x02b0, 0xad82, 0xb400, 0x0230, 0xad82,
-+      0xec00, 0x0280, 0xad82, 0xffff, 0x1268, 0x6800, 0xa07d, 0x0138,
-+      0x6803, 0x0000, 0x6b52, 0x080c, 0x53c9, 0x2f68, 0x0cb0, 0x6b52,
-+      0x080c, 0x53c9, 0x00fe, 0x001e, 0x0005, 0x00e6, 0x0046, 0x0036,
-+      0x2061, 0xbc00, 0xa005, 0x1138, 0x2071, 0xb400, 0x7448, 0x7068,
-+      0x8001, 0xa402, 0x12d8, 0x2100, 0xac06, 0x0168, 0x6000, 0xa086,
-+      0x0000, 0x0148, 0x6008, 0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006,
-+      0x2424, 0xa406, 0x0140, 0xace0, 0x0018, 0x2001, 0xb417, 0x2004,
-+      0xac02, 0x1220, 0x0c40, 0xa085, 0x0001, 0x0008, 0xa006, 0x003e,
-+      0x004e, 0x00ee, 0x0005, 0x00d6, 0x0006, 0x080c, 0x15f4, 0x000e,
-+      0x090c, 0x1511, 0x6837, 0x010d, 0x685e, 0x0026, 0x2010, 0x080c,
-+      0x9bdb, 0x2001, 0x0000, 0x0120, 0x2200, 0xa080, 0x0014, 0x2004,
-+      0x002e, 0x684a, 0x6956, 0x6c46, 0x684f, 0x0000, 0x2001, 0xb6be,
-+      0x2004, 0x6852, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x080c,
-+      0x53c9, 0x00de, 0x0005, 0x6700, 0xa786, 0x0000, 0x0158, 0xa786,
-+      0x0001, 0x0140, 0xa786, 0x000a, 0x0128, 0xa786, 0x0009, 0x0110,
-+      0xa085, 0x0001, 0x0005, 0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206,
-+      0x00ee, 0x0005, 0x0016, 0x6004, 0xa08e, 0x001e, 0x11a0, 0x8007,
-+      0x6130, 0xa18c, 0x00ff, 0xa105, 0x6032, 0x6007, 0x0085, 0x6003,
-+      0x000b, 0x601f, 0x0005, 0x2001, 0xb6b7, 0x2004, 0x6016, 0x080c,
-+      0x6c52, 0x080c, 0x7134, 0x001e, 0x0005, 0xe000, 0xe000, 0x0005,
-+      0x6020, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0x9ec6, 0x0030,
-+      0x080c, 0xb2bd, 0x080c, 0x6ab4, 0x080c, 0x85c0, 0x0005, 0xa280,
-+      0x0007, 0x2004, 0xa084, 0x000f, 0x0002, 0xb0e6, 0xb0e6, 0xb0e6,
-+      0xb0eb, 0xb0e6, 0xb0e8, 0xb0e8, 0xb0e6, 0xb0e8, 0xa006, 0x0005,
-+      0x00c6, 0x2260, 0x00ce, 0xa085, 0x0001, 0x0005, 0xa280, 0x0007,
-+      0x2004, 0xa084, 0x000f, 0x0002, 0xb0fd, 0xb0fd, 0xb0fd, 0xb0fd,
-+      0xb0fd, 0xb0fd, 0xb108, 0xb0fd, 0xb0fd, 0x6007, 0x003b, 0x602b,
-+      0x0009, 0x6013, 0x2a00, 0x6003, 0x0001, 0x080c, 0x6c52, 0x0005,
-+      0x00c6, 0x2260, 0x080c, 0xb2bd, 0x603f, 0x0000, 0x6020, 0xc0f4,
-+      0xc0cc, 0x6022, 0x6037, 0x0000, 0x00ce, 0x00d6, 0x2268, 0xa186,
-+      0x0007, 0x1904, 0xb163, 0x6810, 0xa005, 0x0138, 0xa080, 0x0013,
-+      0x2004, 0xd0fc, 0x1110, 0x00de, 0x08c0, 0x6007, 0x003a, 0x6003,
-+      0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00c6, 0x2d60, 0x6100,
-+      0xa186, 0x0002, 0x1904, 0xb1ec, 0x6010, 0xa005, 0x1138, 0x6000,
-+      0xa086, 0x0007, 0x190c, 0x1511, 0x0804, 0xb1ec, 0xa08c, 0xf000,
-+      0x1130, 0x0028, 0x2068, 0x6800, 0xa005, 0x1de0, 0x2d00, 0xa080,
-+      0x0013, 0x2004, 0xa084, 0x0003, 0xa086, 0x0002, 0x1180, 0x6010,
-+      0x2068, 0x684c, 0xc0dc, 0xc0f4, 0x684e, 0x6850, 0xc0f4, 0xc0fc,
-+      0x6852, 0x2009, 0x0043, 0x080c, 0xaadb, 0x0804, 0xb1ec, 0x2009,
-+      0x0041, 0x0804, 0xb1e6, 0xa186, 0x0005, 0x15f0, 0x6810, 0xa080,
-+      0x0013, 0x2004, 0xd0bc, 0x1118, 0x00de, 0x0804, 0xb0fd, 0xd0b4,
-+      0x0128, 0xd0fc, 0x090c, 0x1511, 0x0804, 0xb11b, 0x6007, 0x003a,
-+      0x6003, 0x0001, 0x080c, 0x6c52, 0x080c, 0x7134, 0x00c6, 0x2d60,
-+      0x6100, 0xa186, 0x0002, 0x0120, 0xa186, 0x0004, 0x1904, 0xb1ec,
-+      0x2071, 0xb723, 0x7000, 0xa086, 0x0003, 0x1128, 0x7004, 0xac06,
-+      0x1110, 0x7003, 0x0000, 0x6810, 0xa080, 0x0013, 0x200c, 0xc1f4,
-+      0xc1dc, 0x2102, 0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102,
-+      0x2009, 0x0042, 0x0804, 0xb1e6, 0x0036, 0x00d6, 0x00d6, 0x080c,
-+      0x15f4, 0x003e, 0x090c, 0x1511, 0x6837, 0x010d, 0x6803, 0x0000,
-+      0x683b, 0x0000, 0x685b, 0x0000, 0x6b5e, 0x6857, 0x0045, 0x2c00,
-+      0x6862, 0x6034, 0x6872, 0x2360, 0x6020, 0xc0dd, 0x6022, 0x6018,
-+      0xa080, 0x0028, 0x2004, 0xa084, 0x00ff, 0x8007, 0x6350, 0x6b4a,
-+      0x6846, 0x684f, 0x0000, 0x6853, 0x0000, 0x6d6a, 0x6e66, 0x686f,
-+      0x0001, 0x080c, 0x53c9, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c,
-+      0xac63, 0x2d00, 0x600a, 0x601f, 0x0006, 0x6003, 0x0007, 0x6017,
-+      0x0000, 0x603f, 0x0000, 0x00de, 0x003e, 0x0038, 0x603f, 0x0000,
-+      0x6003, 0x0007, 0x080c, 0xaadb, 0x00ce, 0x00de, 0x0005, 0xa186,
-+      0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x00c2, 0xa186,
-+      0x0027, 0x1178, 0x080c, 0x7055, 0x0036, 0x00d6, 0x6010, 0x2068,
-+      0x2019, 0x0004, 0x080c, 0xb01c, 0x00de, 0x003e, 0x080c, 0x7134,
-+      0x0005, 0xa186, 0x0014, 0x0d70, 0x080c, 0x8606, 0x0005, 0xb218,
-+      0xb216, 0xb216, 0xb216, 0xb216, 0xb216, 0xb218, 0x080c, 0x1511,
-+      0x080c, 0x7055, 0x6003, 0x000c, 0x080c, 0x7134, 0x0005, 0xa182,
-+      0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x8606,
-+      0x0005, 0xb230, 0xb230, 0xb230, 0xb230, 0xb232, 0xb250, 0xb230,
-+      0x080c, 0x1511, 0x00d6, 0x2c68, 0x080c, 0x856a, 0x01a0, 0x6003,
-+      0x0001, 0x6007, 0x001e, 0x2009, 0xba8e, 0x210c, 0x6136, 0x2009,
-+      0xba8f, 0x210c, 0x613a, 0x600b, 0xffff, 0x6918, 0x611a, 0x601f,
-+      0x0004, 0x080c, 0x6c52, 0x2d60, 0x080c, 0x85c0, 0x00de, 0x0005,
-+      0x080c, 0x85c0, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec,
-+      0x00ee, 0x0005, 0x6010, 0xa08c, 0xf000, 0x0904, 0xb29e, 0xa080,
-+      0x0013, 0x200c, 0xd1ec, 0x05d0, 0x2001, 0xb472, 0x2004, 0xd0ec,
-+      0x05a8, 0x6003, 0x0002, 0x6020, 0xc0e5, 0x6022, 0xd1ac, 0x0180,
-+      0x00f6, 0x2c78, 0x080c, 0x52c2, 0x00fe, 0x0150, 0x2001, 0xb6b8,
-+      0x2004, 0x603e, 0x2009, 0xb472, 0x210c, 0xd1f4, 0x11e8, 0x0080,
-+      0x2009, 0xb472, 0x210c, 0xd1f4, 0x0128, 0x6020, 0xc0e4, 0x6022,
-+      0xa006, 0x00a0, 0x2001, 0xb6b8, 0x200c, 0x8103, 0xa100, 0x603e,
-+      0x6018, 0xa088, 0x002b, 0x2104, 0xa005, 0x0118, 0xa088, 0x0003,
-+      0x0cd0, 0x2c0a, 0x600f, 0x0000, 0xa085, 0x0001, 0x0005, 0x0016,
-+      0x00c6, 0x00e6, 0x6150, 0xa2f0, 0x002b, 0x2e04, 0x2060, 0x8cff,
-+      0x0180, 0x84ff, 0x1118, 0x6050, 0xa106, 0x1138, 0x600c, 0x2072,
-+      0x080c, 0x6ab4, 0x080c, 0x85c0, 0x0010, 0xacf0, 0x0003, 0x2e64,
-+      0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x6018, 0xa0e8,
-+      0x002b, 0x2d04, 0xa005, 0x0140, 0xac06, 0x0120, 0x2d04, 0xa0e8,
-+      0x0003, 0x0cb8, 0x600c, 0x206a, 0x00de, 0x0005, 0x0026, 0x0036,
-+      0x0156, 0x2011, 0xb428, 0x2204, 0xa084, 0x00ff, 0x2019, 0xba8e,
-+      0x2334, 0xa636, 0x11d8, 0x8318, 0x2334, 0x2204, 0xa084, 0xff00,
-+      0xa636, 0x11a0, 0x2011, 0xba90, 0x6018, 0xa098, 0x000a, 0x20a9,
-+      0x0004, 0x080c, 0x907a, 0x1150, 0x2011, 0xba94, 0x6018, 0xa098,
-+      0x0006, 0x20a9, 0x0004, 0x080c, 0x907a, 0x1100, 0x015e, 0x003e,
-+      0x002e, 0x0005, 0x00e6, 0x2071, 0xb400, 0x080c, 0x4b80, 0x080c,
-+      0x2a7e, 0x00ee, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0fc,
-+      0x0108, 0x0011, 0x00ee, 0x0005, 0x6850, 0xc0e5, 0x6852, 0x0005,
-+      0x00e6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016,
-+      0x0126, 0x2091, 0x8000, 0x2029, 0xb6e9, 0x252c, 0x2021, 0xb6ef,
-+      0x2424, 0x2061, 0xbc00, 0x2071, 0xb400, 0x7648, 0x7068, 0xa606,
-+      0x0578, 0x671c, 0xa786, 0x0001, 0x0118, 0xa786, 0x0008, 0x1500,
-+      0x2500, 0xac06, 0x01e8, 0x2400, 0xac06, 0x01d0, 0x080c, 0xb093,
-+      0x01b8, 0x080c, 0xb0a3, 0x11a0, 0x6000, 0xa086, 0x0004, 0x1120,
-+      0x0016, 0x080c, 0x1944, 0x001e, 0x080c, 0x9dd8, 0x1110, 0x080c,
-+      0x2c86, 0x080c, 0x9de9, 0x1110, 0x080c, 0x8bbc, 0x080c, 0x9dae,
-+      0xace0, 0x0018, 0x2001, 0xb417, 0x2004, 0xac02, 0x1208, 0x0858,
-+      0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce,
-+      0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,
-+      0x2071, 0xb440, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4,
-+      0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084,
-+      0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e,
-+      0x0005, 0x0118, 0x2071, 0xb44a, 0x04c9, 0x001e, 0x00ee, 0x000e,
-+      0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,
-+      0x2071, 0xb440, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4,
-+      0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0xa084,
-+      0x0007, 0xa08e, 0x0003, 0x0148, 0xa08e, 0x0004, 0x0130, 0xa08e,
-+      0x0005, 0x0118, 0x2071, 0xb44a, 0x0089, 0x001e, 0x00ee, 0x000e,
-+      0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
-+      0xb442, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000,
-+      0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6,
-+      0x2071, 0xb440, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xb444,
-+      0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
-+      0x2071, 0xb440, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e, 0x012e,
-+      0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,
-+      0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000,
-+      0x8000, 0x622c
-+};
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/asm_2300.h     2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,6195 @@
-+/* @(#)asm_2300.h 1.6 */
-+/*
-+ * Copyright (C) 2001 Qlogic, Inc.
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms are permitted provided
-+ * that the following conditions are met:
-+ * 1. Redistribution of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistribution in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */ 
-+
-+/************************************************************************
-+ *                                                                    *
-+ *               --- ISP2300 Initiator/Target Firmware ---              *
-+ *             with Fabric (Public Loop), Point-point, and              *
-+ *             expanded LUN addressing for FCTAPE                       *
-+ *                                                                    *
-+ ************************************************************************/
-+/*
-+ *    Firmware Version 3.01.20 (15:30 Dec 19, 2002)
-+ */
-+static const u_int16_t isp_2300_risc_code[] = {
-+      0x0470, 0x0000, 0x0000, 0xc060, 0x0000, 0x0003, 0x0001, 0x0014,
-+      0x0017, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
-+      0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
-+      0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
-+      0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-+      0x332e, 0x3031, 0x2e32, 0x3020, 0x2020, 0x2020, 0x2400, 0x20a9,
-+      0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
-+      0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
-+      0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
-+      0x400f, 0x2091, 0x2800, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f,
-+      0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091,
-+      0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
-+      0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
-+      0x0000, 0x20c1, 0x0004, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9,
-+      0x14ff, 0x2059, 0x0000, 0x2b78, 0x7883, 0x0004, 0x2089, 0x240d,
-+      0x2051, 0x1100, 0x2a70, 0x20e1, 0x0001, 0x20e9, 0x0001, 0x2029,
-+      0x45c0, 0x2031, 0xffff, 0x2039, 0x45a9, 0x2021, 0x0200, 0x20e9,
-+      0x0001, 0x20a1, 0x1000, 0x900e, 0x20a9, 0x05c0, 0x4104, 0x7566,
-+      0x766a, 0x7762, 0x746e, 0x7472, 0x00e6, 0x2071, 0x13a1, 0x2472,
-+      0x00ee, 0x20a1, 0x15c0, 0x7168, 0x810d, 0x810d, 0x810d, 0x810d,
-+      0x918c, 0x000f, 0x2001, 0x0001, 0x9112, 0x900e, 0x21a8, 0x4104,
-+      0x8211, 0x1de0, 0x7168, 0x3400, 0x8001, 0x9102, 0x0120, 0x0218,
-+      0x20a8, 0x900e, 0x4104, 0x2009, 0x1100, 0x810d, 0x810d, 0x810d,
-+      0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9,
-+      0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211,
-+      0x1dd8, 0x2009, 0x1100, 0x3400, 0x9102, 0x0120, 0x0218, 0x20a8,
-+      0x900e, 0x4104, 0x080c, 0x0f11, 0x080c, 0x10cf, 0x080c, 0x15fe,
-+      0x080c, 0x0d19, 0x080c, 0x50f4, 0x080c, 0x8e7a, 0x080c, 0x0e85,
-+      0x080c, 0x2a8c, 0x080c, 0x65b0, 0x080c, 0x58d0, 0x080c, 0x7133,
-+      0x080c, 0x1c09, 0x080c, 0x7420, 0x080c, 0x6bb9, 0x080c, 0x19df,
-+      0x080c, 0x1b7a, 0x080c, 0x1bfe, 0x2091, 0x3009, 0x7883, 0x0000,
-+      0x1004, 0x0910, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000,
-+      0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0904, 0x2091, 0x5000,
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd,
-+      0x2a70, 0x7003, 0x0000, 0x2a70, 0x7000, 0x908e, 0x0003, 0x1168,
-+      0x080c, 0x3fa0, 0x080c, 0x2aa2, 0x080c, 0x6610, 0x080c, 0x5dab,
-+      0x080c, 0x715a, 0x080c, 0x23a5, 0x0c70, 0x000b, 0x0c88, 0x0931,
-+      0x0932, 0x0a98, 0x092f, 0x0b68, 0x0d18, 0x0d18, 0x0d18, 0x080c,
-+      0x0d7e, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086,
-+      0x0001, 0x1904, 0x0a76, 0x7034, 0xd0b4, 0x1130, 0x0026, 0x2011,
-+      0x0080, 0x080c, 0x0e3a, 0x002e, 0x080c, 0x62e4, 0x0150, 0x080c,
-+      0x630a, 0x1580, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
-+      0x0448, 0x080c, 0x621a, 0x7000, 0x9086, 0x0001, 0x1904, 0x0a76,
-+      0x7090, 0x9086, 0x0028, 0x1904, 0x0a76, 0x2001, 0x0161, 0x2003,
-+      0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x1e2f,
-+      0x7a2a, 0x2011, 0x61aa, 0x080c, 0x71fa, 0x2011, 0x619d, 0x080c,
-+      0x72bf, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x2011, 0x8030, 0x901e,
-+      0x738e, 0x00d8, 0x080c, 0x483b, 0x2079, 0x0100, 0x7844, 0x9005,
-+      0x1904, 0x0a76, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x2001, 0x0265,
-+      0x2001, 0x0205, 0x2003, 0x0000, 0x780f, 0x006b, 0x7840, 0x9084,
-+      0xfffb, 0x7842, 0x2011, 0x8010, 0x73d4, 0x080c, 0x2261, 0x080c,
-+      0x3f23, 0x7240, 0xc284, 0x7242, 0x2001, 0x110c, 0x200c, 0xc1ac,
-+      0xc1cc, 0x2102, 0x080c, 0x877f, 0x2011, 0x0004, 0x080c, 0xa948,
-+      0x080c, 0x57d9, 0x080c, 0x62e4, 0x1120, 0x080c, 0x22a5, 0x02f0,
-+      0x0410, 0x080c, 0x50b1, 0x0140, 0x708f, 0x0001, 0x70cf, 0x0000,
-+      0x080c, 0x49f2, 0x0804, 0x0a76, 0x2001, 0x1153, 0x2004, 0xd094,
-+      0x0190, 0x2011, 0x110c, 0x2204, 0xc0cd, 0x2012, 0x2001, 0x1172,
-+      0x2004, 0xd0d4, 0x1118, 0x080c, 0x22a5, 0x1278, 0x2011, 0x110c,
-+      0x2204, 0xc0bc, 0x00b0, 0x2001, 0x1172, 0x2004, 0xd0d4, 0x1db0,
-+      0x2011, 0x110c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x110c, 0x2204,
-+      0xc0bd, 0x2012, 0x080c, 0x58c6, 0x1128, 0xd0a4, 0x0118, 0x2204,
-+      0xc0fd, 0x2012, 0x080c, 0x588e, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,
-+      0x00a8, 0x7077, 0x0000, 0x080c, 0x62e4, 0x1130, 0x70a8, 0x9005,
-+      0x1168, 0x080c, 0xad47, 0x0050, 0x080c, 0xad47, 0x70d8, 0xd09c,
-+      0x1128, 0x70a8, 0x9005, 0x0110, 0x080c, 0x5092, 0x70e3, 0x0000,
-+      0x70df, 0x0000, 0x709f, 0x0000, 0x72d8, 0x080c, 0x62e4, 0x1170,
-+      0x9016, 0x0016, 0x080c, 0x205d, 0x2019, 0x1298, 0x211a, 0x001e,
-+      0x7057, 0xffff, 0x705b, 0x00ef, 0x707b, 0x0000, 0x2079, 0x1152,
-+      0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da, 0x080c, 0x62e4, 0x0118,
-+      0x9296, 0x0004, 0x0548, 0x2011, 0x0001, 0x080c, 0xa948, 0x70a3,
-+      0x0000, 0x70a7, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827,
-+      0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x080c, 0x2679,
-+      0x2011, 0x0005, 0x080c, 0x88e2, 0x080c, 0x7aa4, 0x080c, 0x62e4,
-+      0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x205d, 0x61e2,
-+      0x001e, 0x00ce, 0x012e, 0x0420, 0x70a3, 0x0000, 0x70a7, 0xffff,
-+      0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828,
-+      0x9085, 0x0003, 0x782a, 0x00fe, 0x2011, 0x0005, 0x080c, 0x88e2,
-+      0x080c, 0x7aa4, 0x080c, 0x62e4, 0x0148, 0x00c6, 0x2061, 0x0100,
-+      0x0016, 0x080c, 0x205d, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e,
-+      0x0005, 0x00c6, 0x080c, 0x62e4, 0x1118, 0x20a9, 0x0100, 0x0010,
-+      0x20a9, 0x0082, 0x080c, 0x62e4, 0x1110, 0x900e, 0x0010, 0x2009,
-+      0x007e, 0x080c, 0x2955, 0x8108, 0x1f04, 0x0a89, 0x00ce, 0x7077,
-+      0x0000, 0x7078, 0x9084, 0x00ff, 0x707a, 0x70ab, 0x0000, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0b66,
-+      0x70a4, 0x9086, 0xffff, 0x0130, 0x080c, 0x2679, 0x080c, 0x7aa4,
-+      0x0804, 0x0b66, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0518, 0xd084,
-+      0x0508, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c,
-+      0x01c8, 0x70dc, 0x9086, 0xffff, 0x0188, 0x080c, 0x27da, 0x080c,
-+      0x7aa4, 0x70d8, 0xd094, 0x1904, 0x0b66, 0x2011, 0x0001, 0x901e,
-+      0x080c, 0x2811, 0x080c, 0x7aa4, 0x0804, 0x0b66, 0x70e0, 0x9005,
-+      0x1904, 0x0b66, 0x70a0, 0x9005, 0x1904, 0x0b66, 0x70d8, 0xd0a4,
-+      0x0118, 0xd0b4, 0x0904, 0x0b66, 0x080c, 0x588e, 0x1904, 0x0b66,
-+      0x080c, 0x58c6, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e,
-+      0x0016, 0x080c, 0x5608, 0x1118, 0x6000, 0xd0ec, 0x1138, 0x001e,
-+      0x8108, 0x1f04, 0x0ae8, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce,
-+      0x015e, 0x0804, 0x0b66, 0x0006, 0x2001, 0x0103, 0x2003, 0x006b,
-+      0x000e, 0x20e9, 0x0001, 0x71b0, 0x81ff, 0x11b0, 0x9006, 0x2009,
-+      0x0200, 0x20a9, 0x0002, 0x20a1, 0x1302, 0x4001, 0x2009, 0x0700,
-+      0x20a9, 0x0002, 0x20a1, 0x12f2, 0x4001, 0x7074, 0x8007, 0x7178,
-+      0x810f, 0x20a9, 0x0002, 0x4001, 0x20a1, 0x12f6, 0x900e, 0x080c,
-+      0x0d65, 0x9006, 0x810f, 0x20a9, 0x0002, 0x4001, 0x7030, 0xc08c,
-+      0x7032, 0x7003, 0x0003, 0x70a7, 0xffff, 0x7034, 0xd0b4, 0x1130,
-+      0x0026, 0x2011, 0x0040, 0x080c, 0x0e3a, 0x002e, 0x9006, 0x080c,
-+      0x1f11, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c,
-+      0x4026, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x630a,
-+      0x0150, 0x080c, 0x62e4, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010,
-+      0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x1305, 0x2004, 0x9086,
-+      0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x88e2, 0x2011, 0x0000,
-+      0x080c, 0x88ec, 0x080c, 0x7aa4, 0x080c, 0x7b72, 0x012e, 0x0005,
-+      0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
-+      0x7904, 0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x507b,
-+      0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827,
-+      0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156,
-+      0x7954, 0xd1ac, 0x1904, 0x0bf6, 0x080c, 0x2328, 0x1148, 0x2001,
-+      0x0001, 0x080c, 0x2290, 0x2001, 0x0001, 0x080c, 0x2273, 0x00b8,
-+      0x080c, 0x2330, 0x1138, 0x9006, 0x080c, 0x2290, 0x9006, 0x080c,
-+      0x2273, 0x0068, 0x080c, 0x2338, 0x1d50, 0x2001, 0x12d2, 0x2004,
-+      0xd0fc, 0x0108, 0x0020, 0x080c, 0x2089, 0x0804, 0x0cda, 0x080c,
-+      0x62f6, 0x0158, 0x080c, 0x630a, 0x1128, 0x2001, 0x12a7, 0x2003,
-+      0x0000, 0x0070, 0x080c, 0x62ec, 0x0dc0, 0x2001, 0x12a7, 0x2003,
-+      0xaaaa, 0x2001, 0x12a8, 0x2003, 0x0001, 0x080c, 0x621a, 0x0058,
-+      0x080c, 0x62e4, 0x0140, 0x2009, 0x00f8, 0x080c, 0x507b, 0x7843,
-+      0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138,
-+      0x080c, 0x62e4, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x0cdf, 0x1f04,
-+      0x0bd5, 0x0070, 0x7824, 0x080c, 0x6300, 0x0118, 0xd0ac, 0x1904,
-+      0x0cdf, 0x9084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0cdf,
-+      0x2001, 0x0001, 0x080c, 0x1f11, 0x0804, 0x0cf2, 0x080c, 0x2328,
-+      0x1148, 0x2001, 0x0001, 0x080c, 0x2290, 0x2001, 0x0001, 0x080c,
-+      0x2273, 0x00b8, 0x080c, 0x2330, 0x1138, 0x9006, 0x080c, 0x2290,
-+      0x9006, 0x080c, 0x2273, 0x0068, 0x080c, 0x2338, 0x1d50, 0x2001,
-+      0x12d2, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2089, 0x0804,
-+      0x0cda, 0x080c, 0x2346, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
-+      0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2340, 0x9085, 0x2000,
-+      0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c2c, 0x080c, 0x72a5,
-+      0x1f04, 0x0c2c, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
-+      0x793a, 0x080c, 0x62f6, 0x0158, 0x080c, 0x630a, 0x1128, 0x2001,
-+      0x12a7, 0x2003, 0x0000, 0x0070, 0x080c, 0x62ec, 0x0dc0, 0x2001,
-+      0x12a7, 0x2003, 0xaaaa, 0x2001, 0x12a8, 0x2003, 0x0001, 0x080c,
-+      0x621a, 0x0020, 0x2009, 0x00f8, 0x080c, 0x507b, 0x20a9, 0x0028,
-+      0xa001, 0x1f04, 0x0c58, 0x7850, 0x9085, 0x1400, 0x7852, 0x080c,
-+      0x62e4, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,
-+      0x2019, 0xea60, 0x7820, 0xd09c, 0x15a0, 0x080c, 0x62e4, 0x0904,
-+      0x0cbf, 0x7824, 0xd0ac, 0x1904, 0x0cdf, 0x080c, 0x630a, 0x1548,
-+      0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, 0x7827, 0x1800,
-+      0x080c, 0x2340, 0x7824, 0x9084, 0x1800, 0x1160, 0x9484, 0x0fff,
-+      0x1138, 0x2001, 0x110f, 0x2004, 0xd0fc, 0x0110, 0x080c, 0x0d01,
-+      0x8421, 0x1178, 0x1d04, 0x0c96, 0x080c, 0x72a5, 0x2001, 0x12a7,
-+      0x2003, 0xaaaa, 0x2001, 0x12a8, 0x2003, 0x0001, 0x7003, 0x0001,
-+      0x04f0, 0x8319, 0x1938, 0x1d04, 0x0ca7, 0x080c, 0x72a5, 0x2009,
-+      0x12d5, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b,
-+      0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2321, 0x7924,
-+      0x080c, 0x2340, 0xd19c, 0x0110, 0x080c, 0x2261, 0x00d8, 0x080c,
-+      0x62f6, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x62be, 0x7003,
-+      0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2340, 0x7824, 0x080c,
-+      0x6300, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,
-+      0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x1f11, 0x0078, 0x2009,
-+      0x110c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906,
-+      0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085,
-+      0x0400, 0x7852, 0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x7034,
-+      0xd0b4, 0x1110, 0x080c, 0x0df3, 0x012e, 0x00fe, 0x004e, 0x001e,
-+      0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6,
-+      0x00e6, 0x00f6, 0x0156, 0x080c, 0x2aa2, 0x015e, 0x00fe, 0x00ee,
-+      0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e, 0x0005,
-+      0x0005, 0x2a70, 0x2061, 0x12e3, 0x2063, 0x0003, 0x6007, 0x0001,
-+      0x600b, 0x0014, 0x600f, 0x0017, 0x2001, 0x12a7, 0x900e, 0x2102,
-+      0x718e, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x7057,
-+      0xffff, 0x0008, 0x7156, 0x705f, 0xffff, 0x7176, 0x717a, 0x080c,
-+      0xad47, 0x2061, 0x1297, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
-+      0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f,
-+      0x07d0, 0x2061, 0x129f, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,
-+      0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,
-+      0x12c3, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,
-+      0x2020, 0x2001, 0x112a, 0x2102, 0x0005, 0x9016, 0x080c, 0x5608,
-+      0x1178, 0x6004, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,
-+      0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,
-+      0x8108, 0x9186, 0x0100, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,
-+      0x0e04, 0x0d80, 0x0006, 0x0016, 0x2079, 0x0000, 0x001e, 0x798e,
-+      0x000e, 0x788a, 0x000e, 0x7886, 0x3900, 0x789a, 0x7883, 0x8002,
-+      0x7837, 0x8002, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, 0x00d6,
-+      0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x137c, 0x7a18, 0x226a,
-+      0x8d68, 0x7a1c, 0x226a, 0x782c, 0x2019, 0x1389, 0x201a, 0x2019,
-+      0x138c, 0x9016, 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210,
-+      0x8318, 0x9386, 0x13a1, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110,
-+      0x2011, 0xdead, 0x2019, 0x138a, 0x782c, 0x201a, 0x8318, 0x221a,
-+      0x7803, 0x0000, 0x2069, 0x135c, 0x901e, 0x20a9, 0x0020, 0x7b26,
-+      0x7a28, 0x226a, 0x8d68, 0x8318, 0x1f04, 0x0dc7, 0x002e, 0x003e,
-+      0x00de, 0x015e, 0x2079, 0x1100, 0x7803, 0x0005, 0x2091, 0x4080,
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1336, 0x2004,
-+      0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001,
-+      0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x7834, 0xd0b4, 0x1108,
-+      0x04b9, 0x0cd8, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1125, 0x2f04,
-+      0x8000, 0x207a, 0x080c, 0x2338, 0x1150, 0x0006, 0x2001, 0x12d2,
-+      0x2004, 0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010, 0x9082,
-+      0x000f, 0x0258, 0x9006, 0x207a, 0x2079, 0x1128, 0x2f04, 0x9084,
-+      0x0001, 0x9086, 0x0001, 0x207a, 0x0080, 0x2079, 0x1128, 0x2f7c,
-+      0x8fff, 0x1130, 0x0026, 0x2011, 0x0080, 0x00e1, 0x002e, 0x0028,
-+      0x0026, 0x2011, 0x0000, 0x00b1, 0x002e, 0x000e, 0x00fe, 0x0005,
-+      0x0026, 0x2011, 0x0080, 0x0071, 0x002e, 0x2009, 0x0fff, 0x00b9,
-+      0x0026, 0x2011, 0x0040, 0x0031, 0x002e, 0x2009, 0x0fff, 0x0079,
-+      0x0c78, 0x0005, 0x0016, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0,
-+      0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, 0x0005, 0x0156,
-+      0x0126, 0x918c, 0x0fff, 0x21a8, 0x1d04, 0x0e4c, 0x2091, 0x6000,
-+      0x1f04, 0x0e4c, 0x012e, 0x015e, 0x0005, 0x890b, 0x810b, 0x810b,
-+      0x810b, 0x810b, 0x810b, 0x9994, 0xfc00, 0x8217, 0x8214, 0x8214,
-+      0x0005, 0x0006, 0x814c, 0x894c, 0x894c, 0x894c, 0x894c, 0x894c,
-+      0x9284, 0x003f, 0x8007, 0x8003, 0x8003, 0x994d, 0x000e, 0x0005,
-+      0x0016, 0x0026, 0x0096, 0x3348, 0x0c01, 0x2100, 0x9300, 0x2098,
-+      0x22e0, 0x009e, 0x002e, 0x001e, 0x3518, 0x20a9, 0x0001, 0x4002,
-+      0x8007, 0x4004, 0x8319, 0x1dd8, 0x0005, 0x2071, 0x1100, 0x7164,
-+      0x712e, 0x2021, 0x0001, 0x9190, 0x0040, 0x9298, 0x0040, 0x0240,
-+      0x7068, 0x9302, 0x1228, 0x220a, 0x2208, 0x2310, 0x8420, 0x0ca8,
-+      0x200b, 0x0000, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0126, 0x2091,
-+      0x8000, 0x2071, 0x1100, 0x70bc, 0x90ea, 0x0010, 0x0268, 0x8001,
-+      0x70be, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807,
-+      0x0000, 0x012e, 0x00ee, 0x0005, 0x906e, 0x0cd8, 0x00e6, 0x2071,
-+      0x1100, 0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be,
-+      0x702c, 0x2068, 0x9085, 0x0001, 0x2d04, 0x702e, 0x206b, 0x0000,
-+      0x6807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x906e, 0x0cd8, 0x00e6,
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x1100, 0x702c, 0x206a, 0x2d00,
-+      0x702e, 0x70bc, 0x8000, 0x70be, 0x012e, 0x00ee, 0x0005, 0x8dff,
-+      0x0138, 0x6804, 0x6807, 0x0000, 0x0006, 0x0c49, 0x00de, 0x0cb8,
-+      0x0005, 0x00d6, 0x0859, 0x0148, 0x0016, 0x0026, 0x2d08, 0x2011,
-+      0x0001, 0x080c, 0x0e61, 0x002e, 0x001e, 0x00de, 0x0005, 0x00d6,
-+      0x080c, 0x0e9d, 0x0148, 0x0016, 0x0026, 0x2d08, 0x2011, 0x0001,
-+      0x080c, 0x0e61, 0x002e, 0x001e, 0x00de, 0x0005, 0x00d6, 0x0016,
-+      0x0026, 0x080c, 0x0e55, 0x2168, 0x002e, 0x001e, 0x0801, 0x00de,
-+      0x0005, 0x00e6, 0x2071, 0x1335, 0x7007, 0x0000, 0x9006, 0x701e,
-+      0x7022, 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8004, 0x7012,
-+      0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2270, 0x700b,
-+      0x0000, 0x2071, 0x1335, 0x701c, 0x9088, 0x133f, 0x220a, 0x8000,
-+      0x9084, 0x0007, 0x701e, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079,
-+      0x0080, 0x0089, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x00e6, 0x2071,
-+      0x1335, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0019,
-+      0x00fe, 0x00ee, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110, 0x7007,
-+      0x0006, 0x7000, 0x0002, 0x0f5d, 0x0f5b, 0x0f5b, 0x0f5b, 0x10be,
-+      0x10be, 0x10be, 0x10be, 0x080c, 0x0d7e, 0x701c, 0x7120, 0x9106,
-+      0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007,
-+      0x0000, 0x0005, 0x00d6, 0x9180, 0x133f, 0x2004, 0x700a, 0x2068,
-+      0x8108, 0x918c, 0x0007, 0x7122, 0x782b, 0x0026, 0x6828, 0x7802,
-+      0x682c, 0x7806, 0x6830, 0x780a, 0x6834, 0x780e, 0x6814, 0x700e,
-+      0x680c, 0x7016, 0x6810, 0x701a, 0x6804, 0x00de, 0xd084, 0x0120,
-+      0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005,
-+      0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210,
-+      0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b, 0x0020,
-+      0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0136,
-+      0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000,
-+      0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182,
-+      0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203,
-+      0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001, 0x015e,
-+      0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009, 0x1335, 0x2104,
-+      0xc095, 0x200a, 0x080c, 0x0f3e, 0x0005, 0x0016, 0x00e6, 0x2071,
-+      0x1335, 0x00f6, 0x2079, 0x0080, 0x792c, 0x782b, 0x0002, 0xd1fc,
-+      0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e,
-+      0x0005, 0x0f4b, 0x0ff2, 0x1024, 0x0ff0, 0x0ff0, 0x10ca, 0x0ff0,
-+      0x080c, 0x0d7e, 0x918c, 0x0700, 0x1548, 0x0136, 0x0146, 0x0156,
-+      0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088,
-+      0x782b, 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e,
-+      0x014e, 0x013e, 0x700c, 0x9005, 0x0560, 0x7800, 0x7802, 0x7804,
-+      0x7806, 0x080c, 0x0f90, 0x0005, 0x7008, 0x9080, 0x0002, 0x2003,
-+      0x0100, 0x7007, 0x0000, 0x080c, 0x0f4b, 0x0005, 0x7008, 0x9080,
-+      0x0002, 0x2003, 0x0200, 0x0ca8, 0x918c, 0x0700, 0x1150, 0x700c,
-+      0x9005, 0x0178, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x0fa5,
-+      0x0005, 0x7008, 0x9080, 0x0002, 0x2003, 0x0200, 0x7007, 0x0000,
-+      0x0080, 0x00d6, 0x7008, 0x2068, 0x7800, 0x682a, 0x7804, 0x682e,
-+      0x7808, 0x6832, 0x780c, 0x6836, 0x680b, 0x0100, 0x00de, 0x7007,
-+      0x0000, 0x00c6, 0x00d6, 0x7008, 0x2060, 0x9086, 0x11fb, 0x1128,
-+      0x6038, 0x080f, 0x00de, 0x00ce, 0x0078, 0x00de, 0x00ce, 0x00c6,
-+      0x00d6, 0x7008, 0x2060, 0x0059, 0x0128, 0x6038, 0x080f, 0x00de,
-+      0x00ce, 0x0005, 0x00de, 0x00ce, 0x080c, 0x0f4b, 0x0005, 0x00e6,
-+      0x2071, 0x1100, 0x8cff, 0x0140, 0x7064, 0x9c02, 0x0238, 0x9c82,
-+      0xffff, 0x1220, 0x9085, 0x0001, 0x00ee, 0x0005, 0x9006, 0x0ce0,
-+      0x603c, 0x906d, 0x090c, 0x0d7e, 0x6008, 0x908e, 0x0100, 0x0130,
-+      0x687b, 0x0030, 0x6883, 0x0000, 0x6897, 0x4002, 0x080c, 0x5b76,
-+      0x603b, 0x0000, 0x603f, 0x0000, 0x2c00, 0x2068, 0x080c, 0x0ecf,
-+      0x0005, 0x00f6, 0x603c, 0x906d, 0x090c, 0x0d7e, 0x6008, 0x908e,
-+      0x0100, 0x0128, 0x687b, 0x0001, 0x6883, 0x0000, 0x0080, 0x680c,
-+      0x2078, 0x7804, 0x9005, 0x0158, 0x680e, 0x2078, 0x9080, 0x0002,
-+      0x6012, 0x7800, 0x6016, 0x2c10, 0x080c, 0x0f22, 0x0068, 0x00d6,
-+      0x080c, 0x5b76, 0x00de, 0x687c, 0xd0f4, 0x0130, 0x6894, 0x00c6,
-+      0x2060, 0x080c, 0x8ed9, 0x00ce, 0x00fe, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002,
-+      0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x0f4b, 0x0005, 0x0126,
-+      0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1347, 0x7003, 0x0000,
-+      0x78bf, 0x00f6, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9,
-+      0x01ea, 0x2061, 0xc47d, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002,
-+      0x7916, 0x1f04, 0x10e3, 0x7807, 0x0001, 0x7803, 0x0000, 0x7803,
-+      0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c,
-+      0x0110, 0x7820, 0x0cd8, 0x2001, 0x1348, 0x2003, 0x0000, 0x78ab,
-+      0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0001,
-+      0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x135c,
-+      0x781f, 0xff00, 0x781b, 0xff00, 0x2001, 0x0200, 0x2004, 0xd0dc,
-+      0x0110, 0x781f, 0x0303, 0x2061, 0x135c, 0x602f, 0x15c0, 0x6033,
-+      0x3000, 0x603b, 0x18fe, 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200,
-+      0x7808, 0xd09c, 0x0158, 0x7820, 0x908c, 0xf000, 0x1578, 0x908c,
-+      0x0fe0, 0x190c, 0x0d7e, 0x0043, 0x012e, 0x0005, 0x9084, 0x0070,
-+      0x190c, 0x0d7e, 0x012e, 0x0005, 0x115c, 0x115c, 0x1165, 0x116a,
-+      0x116e, 0x1173, 0x119a, 0x119e, 0x11ab, 0x11af, 0x115c, 0x1233,
-+      0x1237, 0x1296, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c,
-+      0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x115c, 0x1175,
-+      0x115c, 0x115c, 0x115c, 0x115c, 0x080c, 0x0d7e, 0x2009, 0x0048,
-+      0x2060, 0x080c, 0x8f53, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5,
-+      0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x129d,
-+      0x080c, 0x133c, 0x0005, 0x080c, 0x0d7e, 0x080c, 0x129d, 0x2060,
-+      0x6014, 0x9080, 0x000e, 0x2003, 0xffff, 0x2009, 0x0048, 0x080c,
-+      0x8f53, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109,
-+      0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218,
-+      0x2004, 0xd0ec, 0x1110, 0x080c, 0x12a2, 0x2001, 0x0307, 0x2003,
-+      0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x129d,
-+      0x2060, 0x6014, 0x9080, 0x000e, 0x2003, 0xffff, 0x2009, 0x0048,
-+      0x080c, 0x8f53, 0x0005, 0x080c, 0x129d, 0x080c, 0x0d7e, 0x080c,
-+      0x129d, 0x080c, 0x121e, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540,
-+      0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001,
-+      0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005,
-+      0x1180, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc,
-+      0x090c, 0x0d7e, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
-+      0x0460, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x1237, 0x0005,
-+      0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d7e, 0x6014, 0x2068,
-+      0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x1577, 0x080c,
-+      0xa942, 0x0158, 0x69ac, 0x6936, 0x69b0, 0x693a, 0x683f, 0xffff,
-+      0x6843, 0xffff, 0x6880, 0xc0bd, 0x6882, 0x080c, 0xa5f3, 0x0005,
-+      0x6010, 0x2004, 0xd0bc, 0x190c, 0xace0, 0x2029, 0x00c8, 0x8529,
-+      0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c,
-+      0xc426, 0xd5a4, 0x1118, 0x080c, 0x12a2, 0x0005, 0x080c, 0x1577,
-+      0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066,
-+      0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186,
-+      0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x130c, 0x00fe, 0x007e,
-+      0x006e, 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104,
-+      0x9184, 0x0004, 0x190c, 0x0d7e, 0xd184, 0x1189, 0xd19c, 0x0158,
-+      0xc19c, 0x7106, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
-+      0x080c, 0x12a2, 0x0005, 0x81ff, 0x190c, 0x0d7e, 0x0005, 0xc184,
-+      0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6, 0x15c0, 0x2071, 0x0200,
-+      0x080c, 0x1330, 0x6014, 0x9005, 0x0588, 0x9080, 0x0019, 0x2004,
-+      0x9084, 0x00ff, 0x908e, 0x0029, 0x0148, 0x908e, 0x0048, 0x1530,
-+      0x00f6, 0x2c78, 0x080c, 0x137e, 0x00fe, 0x00a8, 0x00f6, 0x2c78,
-+      0x080c, 0x1436, 0x00fe, 0x2009, 0x01f4, 0x8109, 0x0160, 0x2001,
-+      0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec,
-+      0x1110, 0x0401, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c,
-+      0x10f3, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d,
-+      0x2003, 0x0050, 0x2003, 0x0020, 0x0069, 0x0ca8, 0x0031, 0x2060,
-+      0x2009, 0x0053, 0x080c, 0x8f53, 0x0005, 0x7808, 0xd09c, 0x0de8,
-+      0x7820, 0x0005, 0x080c, 0x121e, 0x00d6, 0x2069, 0x0200, 0x2009,
-+      0x01f4, 0x8109, 0x0508, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d,
-+      0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1520, 0x79b8, 0x918c, 0x0fff,
-+      0x0178, 0x9182, 0x0841, 0x1260, 0x9188, 0x0007, 0x918c, 0x0ff8,
-+      0x810c, 0x810c, 0x810c, 0x04d1, 0x6827, 0x0001, 0x8109, 0x1dd8,
-+      0x04a9, 0x6827, 0x0002, 0x0491, 0x6804, 0x9005, 0x1130, 0x682c,
-+      0xd0e4, 0x11d0, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1120,
-+      0x08c8, 0x080c, 0x1577, 0x0070, 0x7827, 0x0015, 0x782b, 0x0000,
-+      0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300,
-+      0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086,
-+      0x5400, 0x0d50, 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001,
-+      0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084,
-+      0x0003, 0x1de0, 0x0005, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021,
-+      0x7830, 0x9086, 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006,
-+      0x7808, 0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x1125,
-+      0x00ce, 0x002e, 0x001e, 0x000e, 0x7832, 0x7936, 0x7a3a, 0x781b,
-+      0x8080, 0x2009, 0xff00, 0x8109, 0x0128, 0x7818, 0xd0bc, 0x1dd8,
-+      0x00fe, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0d7e,
-+      0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc,
-+      0x1110, 0x7054, 0x2060, 0x0005, 0x00e6, 0x0016, 0x2071, 0x0200,
-+      0x0c79, 0x7358, 0x745c, 0x6014, 0x905d, 0x0568, 0x2b68, 0x6010,
-+      0x2004, 0xd0bc, 0x190c, 0xacbb, 0x6b42, 0x6c3e, 0x2001, 0x1174,
-+      0x2004, 0xd0b4, 0x1158, 0x601c, 0xd0e4, 0x1140, 0x6010, 0x2004,
-+      0xd0bc, 0x1120, 0x683b, 0x7fff, 0x6837, 0xffff, 0x080c, 0x191e,
-+      0x1190, 0x080c, 0x1484, 0x2a00, 0x6816, 0x0130, 0x2c00, 0x680e,
-+      0x2805, 0x680a, 0x2800, 0x6812, 0x7037, 0x0020, 0x781f, 0x0300,
-+      0x001e, 0x00ee, 0x0005, 0x7037, 0x0050, 0x7037, 0x0020, 0x001e,
-+      0x00ee, 0x080c, 0x12a2, 0x0005, 0x080c, 0x0d7e, 0x2ff0, 0x0126,
-+      0x2091, 0x2200, 0x3e60, 0x6014, 0x2068, 0x2d60, 0x903e, 0x2730,
-+      0x6964, 0x691a, 0x9184, 0x000f, 0x9088, 0x18fe, 0x2145, 0x0002,
-+      0x13a0, 0x1407, 0x13a0, 0x13a0, 0x13a0, 0x13e0, 0x13a0, 0x13a4,
-+      0x13a0, 0x13f5, 0x13a0, 0x13a0, 0x13a0, 0x13a0, 0x13ca, 0x13b6,
-+      0x9085, 0x0001, 0x0804, 0x142e, 0x687c, 0xd0bc, 0x0dc8, 0x6890,
-+      0x6842, 0x688c, 0x683e, 0x6888, 0x00d6, 0x2805, 0x9c68, 0x6b08,
-+      0x6a0c, 0x6d00, 0x6c04, 0x00de, 0x0804, 0x1416, 0x687c, 0xd0bc,
-+      0x0d38, 0x6890, 0x6842, 0x688c, 0x683e, 0x6888, 0x00d6, 0x2805,
-+      0x9c68, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x00de,
-+      0x0804, 0x1416, 0x687c, 0xd0bc, 0x0998, 0x6890, 0x6842, 0x688c,
-+      0x683e, 0x6804, 0x2060, 0x9080, 0x0019, 0x200c, 0x691a, 0x91cc,
-+      0x000f, 0x9980, 0x18fe, 0x2045, 0x6888, 0xd19c, 0x11e8, 0x0470,
-+      0x687c, 0xd0ac, 0x0904, 0x13a0, 0x6804, 0x2060, 0x9080, 0x0019,
-+      0x200c, 0x691a, 0x91cc, 0x000f, 0x9980, 0x18fe, 0x2045, 0x9006,
-+      0x6842, 0x683e, 0xd19c, 0x1140, 0x00c8, 0x687c, 0xd0ac, 0x0904,
-+      0x13a0, 0x9006, 0x6842, 0x683e, 0x00d6, 0x2805, 0x9c68, 0x6b10,
-+      0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x00de, 0x0078, 0x687c,
-+      0xd0ac, 0x0904, 0x13a0, 0x9006, 0x6842, 0x683e, 0x00d6, 0x2805,
-+      0x9c68, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00de, 0x6b2e, 0x6a32,
-+      0x6d1e, 0x6c22, 0x6f26, 0x6e2a, 0x6988, 0x8840, 0x281d, 0x68ac,
-+      0x6ab0, 0x6836, 0x6a3a, 0x8109, 0x6916, 0x1150, 0x3e60, 0x601c,
-+      0xc085, 0x601e, 0x687c, 0xc0dd, 0x687e, 0x9006, 0x012e, 0x0005,
-+      0x2c00, 0x680e, 0x6b0a, 0x2800, 0x6812, 0x0c80, 0x2ff0, 0x0126,
-+      0x2091, 0x2200, 0x3e60, 0x6014, 0x2068, 0x2d60, 0x680e, 0x2041,
-+      0x18fb, 0x680b, 0x18fb, 0x2805, 0x6812, 0x6964, 0x691a, 0x687c,
-+      0xd0ac, 0x090c, 0x0d7e, 0x9006, 0x6842, 0x683e, 0x00d6, 0x2805,
-+      0x9c68, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x00de,
-+      0x6b2e, 0x6a32, 0x6d1e, 0x6c22, 0x6f26, 0x6e2a, 0x68ac, 0x6ab0,
-+      0x6836, 0x6a3a, 0x6988, 0x918a, 0x0002, 0x6916, 0x1150, 0x3e60,
-+      0x601c, 0xc085, 0x601e, 0x687c, 0xc0dd, 0x687e, 0x9006, 0x012e,
-+      0x0005, 0x6804, 0x9065, 0x090c, 0x0d7e, 0x680e, 0x6064, 0x681a,
-+      0x9084, 0x000f, 0x9080, 0x18fe, 0x2015, 0x82ff, 0x090c, 0x0d7e,
-+      0x6a0a, 0x2205, 0x6812, 0x0c18, 0x903e, 0x2730, 0x6880, 0xd0fc,
-+      0x11a8, 0x00d6, 0x2805, 0x9c68, 0x2900, 0x0002, 0x14c6, 0x14ac,
-+      0x14ac, 0x14c6, 0x14c6, 0x14c0, 0x14c6, 0x14ac, 0x14c6, 0x14b1,
-+      0x14b1, 0x14c6, 0x14c6, 0x14c6, 0x14b8, 0x14b1, 0xc0fc, 0x6882,
-+      0x6b2c, 0x6a30, 0x6d1c, 0x6c20, 0x00d6, 0xd99c, 0x0510, 0x2805,
-+      0x9c68, 0x6f08, 0x6e0c, 0x00e8, 0x6b08, 0x6a0c, 0x6d00, 0x6c04,
-+      0x00c0, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0088,
-+      0x00de, 0x00d6, 0x6864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1130,
-+      0x00de, 0x080c, 0x18be, 0x1900, 0x900e, 0x0060, 0x00de, 0x080c,
-+      0x0d7e, 0x00de, 0x6b2e, 0x6a32, 0x6d1e, 0x6c22, 0x6f26, 0x6e2a,
-+      0x080c, 0x18be, 0x0005, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0110,
-+      0xd0d4, 0x1180, 0x6014, 0x9080, 0x0021, 0x6118, 0x810c, 0x810c,
-+      0x810c, 0x81ff, 0x1118, 0x2003, 0x0001, 0x0008, 0x2102, 0x601b,
-+      0x0002, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x2001,
-+      0x0037, 0x2c08, 0x080c, 0x130c, 0x7808, 0xd09c, 0x0140, 0x0016,
-+      0x0026, 0x00c6, 0x080c, 0x1125, 0x00ce, 0x002e, 0x001e, 0x6000,
-+      0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x8f53, 0x012e,
-+      0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c,
-+      0x0007, 0x9186, 0x0000, 0x0904, 0x156c, 0x9186, 0x0003, 0x0904,
-+      0x156c, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0190, 0x00c6,
-+      0x7808, 0xd09c, 0x190c, 0x1125, 0x00ce, 0x2001, 0x0038, 0x2c08,
-+      0x621c, 0x080c, 0x130c, 0x7930, 0x9186, 0x0040, 0x05c8, 0x9186,
-+      0x0042, 0x190c, 0x0d7e, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631,
-+      0x1d30, 0x080c, 0x15c6, 0x0026, 0x0056, 0x2001, 0x00d2, 0x8001,
-+      0x1df0, 0x2031, 0x2000, 0x8631, 0x1138, 0x0489, 0x601c, 0xc084,
-+      0x601e, 0x005e, 0x002e, 0x00e0, 0x2001, 0x020b, 0x2004, 0xd0e4,
-+      0x0d90, 0x2001, 0x015d, 0x2003, 0x0000, 0x78ab, 0x0004, 0x080c,
-+      0x10f3, 0x601c, 0xc084, 0x601e, 0x7803, 0x0000, 0x7803, 0x0001,
-+      0x005e, 0x002e, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
-+      0x000e, 0x6022, 0x012e, 0x0005, 0x601c, 0xc084, 0x601e, 0x7827,
-+      0x0015, 0x7828, 0x9c06, 0x1db0, 0x782b, 0x0000, 0x0c98, 0x00f6,
-+      0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c,
-+      0x62e4, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160,
-+      0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0,
-+      0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x6380, 0x006e, 0x0005,
-+      0x0469, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
-+      0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x235b, 0x2009, 0x003c,
-+      0x080c, 0x1b67, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084,
-+      0x003c, 0x1de0, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e,
-+      0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c,
-+      0x10f3, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138,
-+      0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000,
-+      0x080c, 0x62e4, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141,
-+      0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048,
-+      0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70,
-+      0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019,
-+      0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048, 0x0120,
-+      0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x00e6, 0x2071,
-+      0x134a, 0x7003, 0x0000, 0x00ee, 0x0005, 0x00d6, 0x9280, 0x0005,
-+      0x206c, 0x697c, 0xd1dc, 0x1904, 0x167b, 0x6964, 0x9184, 0x0007,
-+      0x0002, 0x1619, 0x1666, 0x1619, 0x1619, 0x1619, 0x164d, 0x162c,
-+      0x161b, 0x080c, 0x0d7e, 0x687c, 0xd0b4, 0x0904, 0x176d, 0x6890,
-+      0x6842, 0x683a, 0x688c, 0x683e, 0x6836, 0x68ac, 0x6846, 0x68b0,
-+      0x684a, 0x6988, 0x0804, 0x166e, 0x6864, 0x9084, 0x00ff, 0x9086,
-+      0x001e, 0x1d38, 0x687c, 0xd0b4, 0x0904, 0x176d, 0x6890, 0x6842,
-+      0x683a, 0x688c, 0x683e, 0x6836, 0x68ac, 0x6846, 0x68b0, 0x684a,
-+      0x6804, 0x685a, 0x9080, 0x0019, 0x2004, 0x9084, 0x000f, 0x9080,
-+      0x18fe, 0x2005, 0x6812, 0x6988, 0x0450, 0x918c, 0x00ff, 0x9186,
-+      0x0015, 0x1548, 0x687c, 0xd0b4, 0x0904, 0x176d, 0x6804, 0x685a,
-+      0x9080, 0x0019, 0x2004, 0x9084, 0x000f, 0x9080, 0x18fe, 0x2005,
-+      0x6812, 0x6988, 0x9006, 0x6842, 0x683e, 0x0088, 0x687c, 0xd0b4,
-+      0x0904, 0x176d, 0x6988, 0x9006, 0x6842, 0x683e, 0x2d00, 0x685a,
-+      0x6864, 0x9084, 0x000f, 0x9080, 0x18fe, 0x2005, 0x6812, 0x6916,
-+      0x687c, 0xc0dd, 0x687e, 0x00de, 0x0005, 0x00f6, 0x2079, 0x0090,
-+      0x782c, 0xd0fc, 0x190c, 0x17b0, 0x00e6, 0x00d6, 0x2071, 0x134a,
-+      0x7000, 0x9005, 0x1904, 0x16de, 0x00c6, 0x7206, 0x9280, 0x0005,
-+      0x205c, 0x7004, 0x2068, 0x782b, 0x0004, 0x2001, 0x0200, 0x2003,
-+      0x0040, 0x6810, 0x00d6, 0x2068, 0x686c, 0x7836, 0x6890, 0x00f6,
-+      0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001, 0xa001, 0xa001,
-+      0xa001, 0xa001, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe,
-+      0x00de, 0x2b68, 0x6814, 0x2050, 0x6858, 0x2060, 0x6810, 0x2040,
-+      0x6064, 0x90cc, 0x000f, 0x6944, 0x791a, 0x7116, 0x6848, 0x781e,
-+      0x701a, 0x9006, 0x700e, 0x7012, 0x7004, 0x6940, 0x6838, 0x9106,
-+      0x11c8, 0x693c, 0x6834, 0x9106, 0x11a8, 0x8aff, 0x01f0, 0x0126,
-+      0x2091, 0x8000, 0x2079, 0x0090, 0x2009, 0x0001, 0x00d1, 0x0118,
-+      0x2009, 0x0001, 0x00b1, 0x012e, 0x00ce, 0x9006, 0x00de, 0x00ee,
-+      0x00fe, 0x0005, 0x0036, 0x0046, 0x6b38, 0x6c34, 0x080c, 0x191e,
-+      0x004e, 0x003e, 0x0d10, 0x00ce, 0x0c88, 0x00ce, 0x9085, 0x0001,
-+      0x0c68, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff,
-+      0x0904, 0x1766, 0x700c, 0x7214, 0x923a, 0x7010, 0x7218, 0x9203,
-+      0x0a04, 0x1765, 0x9705, 0x0904, 0x1765, 0x903e, 0x2730, 0x6880,
-+      0xd0fc, 0x11a8, 0x00d6, 0x2805, 0x9c68, 0x2900, 0x0002, 0x1748,
-+      0x172d, 0x172d, 0x1748, 0x1748, 0x1741, 0x1748, 0x172d, 0x1748,
-+      0x1732, 0x1732, 0x1748, 0x1748, 0x1748, 0x1739, 0x1732, 0xc0fc,
-+      0x6882, 0x6b2c, 0x6a30, 0x6d1c, 0x6c20, 0xd99c, 0x0528, 0x00d6,
-+      0x2805, 0x9c68, 0x6f08, 0x6e0c, 0x00f0, 0x6b08, 0x6a0c, 0x6d00,
-+      0x6c04, 0x00c8, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c,
-+      0x0090, 0x00de, 0x00d6, 0x6864, 0x9084, 0x00ff, 0x9086, 0x001e,
-+      0x1138, 0x00de, 0x080c, 0x18be, 0x1904, 0x16f7, 0x900e, 0x00f0,
-+      0x00de, 0x080c, 0x0d7e, 0x00de, 0x7b12, 0x7a16, 0x7d02, 0x7c06,
-+      0x7f0a, 0x7e0e, 0x792a, 0x7000, 0x8000, 0x7002, 0x683c, 0x9300,
-+      0x683e, 0x6840, 0x9201, 0x6842, 0x700c, 0x9300, 0x700e, 0x7010,
-+      0x9201, 0x7012, 0x080c, 0x18be, 0x0008, 0x9006, 0x002e, 0x003e,
-+      0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0d7e, 0x0026,
-+      0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000,
-+      0x7004, 0x2060, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0118,
-+      0x6880, 0xc0bd, 0x6882, 0x6020, 0x9086, 0x0006, 0x1180, 0x2061,
-+      0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206,
-+      0x1dc0, 0x60c4, 0x689a, 0x60c8, 0x6896, 0x7004, 0x2060, 0x00de,
-+      0x00c6, 0x080c, 0xa5f3, 0x00ce, 0x2001, 0x1313, 0x2004, 0x9c06,
-+      0x1160, 0x2009, 0x0040, 0x080c, 0x1b67, 0x080c, 0x8a8d, 0x2011,
-+      0x0000, 0x080c, 0x88ec, 0x080c, 0x7b72, 0x002e, 0x0804, 0x186a,
-+      0x0126, 0x2091, 0x2400, 0x0006, 0x0016, 0x00f6, 0x00e6, 0x00d6,
-+      0x00c6, 0x2079, 0x0090, 0x2071, 0x134a, 0x2b68, 0x6858, 0x2060,
-+      0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x176f, 0x7000,
-+      0x0002, 0x186a, 0x17cd, 0x183d, 0x1868, 0x8001, 0x7002, 0xd19c,
-+      0x1170, 0x8aff, 0x05d0, 0x2009, 0x0001, 0x080c, 0x16f1, 0x0904,
-+      0x186a, 0x2009, 0x0001, 0x080c, 0x16f1, 0x0804, 0x186a, 0x782b,
-+      0x0004, 0xd194, 0x0148, 0x6880, 0xc0fc, 0x6882, 0x8aff, 0x11d8,
-+      0x687c, 0xc0f5, 0x687e, 0x00b8, 0x0026, 0x0036, 0x6b3c, 0x6a40,
-+      0x7810, 0x682e, 0x931a, 0x7814, 0x6832, 0x9213, 0x7800, 0x681e,
-+      0x7804, 0x6822, 0x6b3e, 0x6a42, 0x003e, 0x002e, 0x080c, 0x18d6,
-+      0x6880, 0xc0fd, 0x6882, 0x2a00, 0x6816, 0x2c00, 0x685a, 0x2800,
-+      0x6812, 0x7003, 0x0000, 0x0804, 0x186a, 0x00f6, 0x0026, 0x781c,
-+      0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984,
-+      0x9085, 0x0012, 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c,
-+      0x0d7e, 0x7820, 0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102,
-+      0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e,
-+      0x78ca, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe,
-+      0x782b, 0x0008, 0x7003, 0x0000, 0x0468, 0x8001, 0x7002, 0xd194,
-+      0x0168, 0x782c, 0xd0fc, 0x1904, 0x17c0, 0xd19c, 0x11f8, 0x8aff,
-+      0x0508, 0x2009, 0x0001, 0x080c, 0x16f1, 0x00e0, 0x0026, 0x0036,
-+      0x6b3c, 0x6a40, 0x080c, 0x18d6, 0x00d6, 0x2805, 0x9c68, 0x6064,
-+      0xd09c, 0x1128, 0x6808, 0x931a, 0x680c, 0x9213, 0x0020, 0x6810,
-+      0x931a, 0x6814, 0x9213, 0x00de, 0x0804, 0x17f0, 0x0804, 0x17ec,
-+      0x080c, 0x0d7e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x001e, 0x000e,
-+      0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x134a, 0x7000, 0x9086,
-+      0x0000, 0x0904, 0x18bb, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
-+      0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,
-+      0x080c, 0xc46f, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7e,
-+      0x0016, 0x2009, 0x0040, 0x080c, 0x1b67, 0x001e, 0x2001, 0x020c,
-+      0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
-+      0x1120, 0x2009, 0x0040, 0x080c, 0x1b67, 0x782c, 0xd0fc, 0x09a8,
-+      0x080c, 0x17b0, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
-+      0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x1b67, 0x782b,
-+      0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x8840, 0x2805,
-+      0x9005, 0x0110, 0x8a51, 0x0005, 0x6004, 0x9005, 0x0168, 0x685a,
-+      0x2060, 0x6064, 0x9084, 0x000f, 0x9080, 0x18fe, 0x2045, 0x88ff,
-+      0x090c, 0x0d7e, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50, 0x8841,
-+      0x2805, 0x9005, 0x1190, 0x2c00, 0x9d06, 0x0120, 0x6000, 0x9005,
-+      0x1108, 0x2d00, 0x2060, 0x685a, 0x6064, 0x9084, 0x000f, 0x9080,
-+      0x190e, 0x2045, 0x88ff, 0x090c, 0x0d7e, 0x0005, 0x0000, 0x001d,
-+      0x0021, 0x0025, 0x0029, 0x002d, 0x0031, 0x0035, 0x0000, 0x001b,
-+      0x0021, 0x0027, 0x002d, 0x0033, 0x0000, 0x0000, 0x0000, 0x18f3,
-+      0x18ef, 0x0000, 0x0000, 0x18fd, 0x0000, 0x18f3, 0x0000, 0x18fa,
-+      0x18f7, 0x0000, 0x0000, 0x0000, 0x18fd, 0x18fa, 0x0000, 0x18f5,
-+      0x18f5, 0x0000, 0x0000, 0x18fd, 0x0000, 0x18f5, 0x0000, 0x18fb,
-+      0x18fb, 0x0000, 0x0000, 0x0000, 0x18fd, 0x18fb, 0x00a6, 0x0096,
-+      0x0086, 0x6b42, 0x6c3e, 0x6888, 0x9055, 0x0904, 0x19af, 0x2d60,
-+      0x6064, 0x90cc, 0x000f, 0x99c0, 0x18fe, 0x9986, 0x0007, 0x0130,
-+      0x9986, 0x000e, 0x0118, 0x9986, 0x000f, 0x1120, 0x608c, 0x9422,
-+      0x6090, 0x931b, 0x2805, 0x9045, 0x1140, 0x0310, 0x0804, 0x19af,
-+      0x6004, 0x9065, 0x0904, 0x19af, 0x0c18, 0x2805, 0x9005, 0x01a8,
-+      0x9c68, 0xd99c, 0x1128, 0x6808, 0x9422, 0x680c, 0x931b, 0x0020,
-+      0x6810, 0x9422, 0x6814, 0x931b, 0x0620, 0x2300, 0x9405, 0x0150,
-+      0x8a51, 0x0904, 0x19af, 0x8840, 0x0c40, 0x6004, 0x9065, 0x0904,
-+      0x19af, 0x0830, 0x8a51, 0x0904, 0x19af, 0x8840, 0x2805, 0x9005,
-+      0x1158, 0x6004, 0x9065, 0x0904, 0x19af, 0x6064, 0x90cc, 0x000f,
-+      0x99c0, 0x18fe, 0x2805, 0x2040, 0x2b68, 0x6880, 0xc0fc, 0x6882,
-+      0x0458, 0x8422, 0x8420, 0x831a, 0x9399, 0x0000, 0x00d6, 0x2b68,
-+      0x6c2e, 0x6b32, 0x00de, 0xd99c, 0x1168, 0x6908, 0x2400, 0x9122,
-+      0x690c, 0x2300, 0x911b, 0x0a0c, 0x0d7e, 0x6800, 0x9420, 0x6804,
-+      0x9319, 0x0060, 0x6910, 0x2400, 0x9122, 0x6914, 0x2300, 0x911b,
-+      0x0a0c, 0x0d7e, 0x6800, 0x9420, 0x6804, 0x9319, 0x2b68, 0x6c1e,
-+      0x6b22, 0x6880, 0xc0fd, 0x6882, 0x2c00, 0x685a, 0x2800, 0x6812,
-+      0x2a00, 0x6816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e,
-+      0x009e, 0x00ae, 0x9085, 0x0001, 0x0005, 0x2008, 0x9026, 0x2410,
-+      0x780f, 0x0000, 0x7810, 0x9420, 0x9291, 0x0000, 0x7814, 0x9210,
-+      0x8109, 0x1dc0, 0x9284, 0x000f, 0x9405, 0x0005, 0x2001, 0x0005,
-+      0x2004, 0x9084, 0x0007, 0x0002, 0x19de, 0x17b0, 0x19de, 0x19d4,
-+      0x19d7, 0x19da, 0x19d7, 0x19da, 0x080c, 0x17b0, 0x0005, 0x080c,
-+      0x0fd5, 0x0005, 0x080c, 0x17b0, 0x080c, 0x0fd5, 0x0005, 0x0126,
-+      0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260, 0x2069, 0x1100,
-+      0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406, 0x789f, 0x0410,
-+      0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, 0x001f,
-+      0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600,
-+      0x781c, 0xd0a4, 0x190c, 0x1b64, 0x7900, 0xd1dc, 0x1118, 0x9084,
-+      0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x1a27, 0x1a1d, 0x6bd6,
-+      0x1a1f, 0x1a21, 0x1a21, 0x1a21, 0x1a21, 0x6bba, 0x1a1d, 0x1a23,
-+      0x1a1d, 0x1a21, 0x1a1d, 0x1a21, 0x1a1d, 0x080c, 0x0d7e, 0x080c,
-+      0x0d7e, 0x0031, 0x0020, 0x080c, 0x6bba, 0x080c, 0x6bd6, 0x0005,
-+      0x0006, 0x0016, 0x0026, 0x080c, 0xc46f, 0x7930, 0x9184, 0x0003,
-+      0x01c0, 0x2001, 0x1313, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133,
-+      0x2004, 0x9005, 0x090c, 0x0d7e, 0x00c6, 0x2001, 0x1313, 0x2064,
-+      0x080c, 0xa5f3, 0x00ce, 0x0460, 0x2009, 0x0040, 0x080c, 0x1b67,
-+      0x0438, 0x9184, 0x0014, 0x01b0, 0x6a00, 0x9286, 0x0003, 0x0180,
-+      0x080c, 0x62e4, 0x1158, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001,
-+      0x1100, 0x2003, 0x0001, 0x080c, 0x621a, 0x0010, 0x080c, 0x4faa,
-+      0x0099, 0x0070, 0x9184, 0x1400, 0x0110, 0x0071, 0x0048, 0x9184,
-+      0x0140, 0x0110, 0x0049, 0x0020, 0x9184, 0x8000, 0x0108, 0x0021,
-+      0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056,
-+      0x2071, 0x1347, 0x080c, 0x1577, 0x005e, 0x004e, 0x003e, 0x00ee,
-+      0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1100, 0x7128, 0x2001,
-+      0x129a, 0x2102, 0x2001, 0x12a2, 0x2102, 0x2001, 0x013b, 0x2102,
-+      0x2079, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x2320,
-+      0x9182, 0x0224, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0088,
-+      0x9182, 0x02d4, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0048,
-+      0x9182, 0x0444, 0x1220, 0x2011, 0x0002, 0x8423, 0x0010, 0x2011,
-+      0x0001, 0x9482, 0x0110, 0x8002, 0x8020, 0x8301, 0x9402, 0x0110,
-+      0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x2001, 0x0201, 0x789e,
-+      0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0003, 0x2320,
-+      0x9182, 0x0204, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0088,
-+      0x9182, 0x02b4, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0048,
-+      0x9182, 0x041c, 0x1220, 0x2011, 0x0002, 0x8423, 0x0010, 0x2011,
-+      0x0001, 0x9482, 0x010c, 0x8002, 0x8020, 0x8301, 0x9402, 0x0110,
-+      0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x78a3, 0x0200, 0x9198,
-+      0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005, 0x2320, 0x9182,
-+      0x0204, 0x1230, 0x2011, 0x0008, 0x8423, 0x8423, 0x8423, 0x0488,
-+      0x9182, 0x024c, 0x1240, 0x2011, 0x0007, 0x8403, 0x8003, 0x9400,
-+      0x9400, 0x9420, 0x0430, 0x9182, 0x02bc, 0x1238, 0x2011, 0x0006,
-+      0x8403, 0x8003, 0x9400, 0x9420, 0x00e0, 0x9182, 0x034c, 0x1230,
-+      0x2011, 0x0005, 0x8403, 0x8003, 0x9420, 0x0098, 0x9182, 0x042c,
-+      0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0058, 0x9182, 0x059c,
-+      0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0018, 0x2011, 0x0002,
-+      0x8423, 0x9482, 0x0228, 0x8002, 0x8020, 0x8301, 0x9402, 0x0110,
-+      0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x789a, 0x012e, 0x0005,
-+      0x0006, 0x00d6, 0x2069, 0x0200, 0x6814, 0x9084, 0xffc0, 0x910d,
-+      0x6916, 0x00de, 0x000e, 0x0005, 0x00d6, 0x2069, 0x0200, 0x9005,
-+      0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812, 0x00de, 0x0005,
-+      0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084, 0xfff8, 0x910d,
-+      0x6912, 0x00de, 0x000e, 0x0005, 0x7938, 0x080c, 0x0d7e, 0x00f6,
-+      0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,
-+      0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001,
-+      0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, 0x0100, 0x2071,
-+      0x1100, 0x2009, 0x0000, 0x080c, 0x2355, 0x080c, 0x2261, 0x6054,
-+      0x8004, 0x8004, 0x8004, 0x8004, 0x9084, 0x000c, 0x6150, 0x918c,
-+      0xfff3, 0x9105, 0x6052, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000,
-+      0x6052, 0x2009, 0x12d7, 0x2011, 0x12d8, 0x6358, 0x939c, 0x38f0,
-+      0x2320, 0x080c, 0x22a5, 0x1238, 0x939d, 0x4003, 0x94a5, 0x8603,
-+      0x230a, 0x2412, 0x0030, 0x939d, 0x0203, 0x94a5, 0x8603, 0x230a,
-+      0x2412, 0x9006, 0x080c, 0x2290, 0x9006, 0x080c, 0x2273, 0x20a9,
-+      0x0012, 0x1d04, 0x1bb9, 0x2091, 0x6000, 0x1f04, 0x1bb9, 0x602f,
-+      0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff,
-+      0x6052, 0x6024, 0x6026, 0x080c, 0x1f7d, 0x2009, 0x00ef, 0x6132,
-+      0x6136, 0x080c, 0x1f8d, 0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008,
-+      0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000,
-+      0x6007, 0x049f, 0x60bb, 0x0000, 0x20a9, 0x0018, 0x60bf, 0x0000,
-+      0x1f04, 0x1be6, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012,
-+      0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e,
-+      0x600f, 0x006b, 0x602b, 0x402f, 0x012e, 0x0005, 0x00f6, 0x2079,
-+      0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe,
-+      0x0005, 0x2001, 0x1134, 0x2003, 0x0000, 0x2001, 0x1133, 0x2003,
-+      0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
-+      0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x002a, 0x9195,
-+      0x0004, 0x9284, 0x0007, 0x0002, 0x1c46, 0x1c2c, 0x1c2f, 0x1c32,
-+      0x1c37, 0x1c39, 0x1c3d, 0x1c41, 0x080c, 0x745c, 0x00b8, 0x080c,
-+      0x752d, 0x00a0, 0x080c, 0x752d, 0x080c, 0x745c, 0x0078, 0x0099,
-+      0x0068, 0x080c, 0x745c, 0x0079, 0x0048, 0x080c, 0x752d, 0x0059,
-+      0x0028, 0x080c, 0x752d, 0x080c, 0x745c, 0x0029, 0x002e, 0x001e,
-+      0x000e, 0x012e, 0x0005, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c,
-+      0x1904, 0x1e92, 0xd1f4, 0x0110, 0x080c, 0x0d7e, 0x080c, 0x62e4,
-+      0x05d0, 0x7000, 0x9086, 0x0003, 0x01f0, 0x6024, 0x9084, 0x1800,
-+      0x01d0, 0x080c, 0x630a, 0x0118, 0x080c, 0x62f6, 0x11a0, 0x6027,
-+      0x0020, 0x6043, 0x0000, 0x709c, 0x9005, 0x1140, 0x709f, 0x0001,
-+      0x00d6, 0x2069, 0x0140, 0x080c, 0x633e, 0x00de, 0x2001, 0x12a7,
-+      0x2003, 0xaaaa, 0x0458, 0x080c, 0x630a, 0x15d0, 0x6024, 0x9084,
-+      0x1800, 0x1108, 0x04a8, 0x2001, 0x12a7, 0x2003, 0xaaaa, 0x2001,
-+      0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c,
-+      0x621a, 0x0804, 0x1e92, 0xd1ac, 0x1518, 0x6024, 0xd0dc, 0x1170,
-+      0xd0e4, 0x1188, 0xd0d4, 0x11a0, 0xd0cc, 0x0130, 0x7090, 0x9086,
-+      0x0028, 0x1110, 0x080c, 0x6492, 0x0804, 0x1e92, 0x2001, 0x12a8,
-+      0x2003, 0x0000, 0x0048, 0x2001, 0x12a8, 0x2003, 0x0002, 0x0020,
-+      0x080c, 0x6404, 0x0804, 0x1e92, 0x080c, 0x6531, 0x0804, 0x1e92,
-+      0xd1ac, 0x0904, 0x1db5, 0x080c, 0x62e4, 0x11d8, 0x6027, 0x0020,
-+      0x0006, 0x0026, 0x0036, 0x080c, 0x6300, 0x1170, 0x2001, 0x12a8,
-+      0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c, 0x621a,
-+      0x003e, 0x002e, 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c,
-+      0x62be, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138,
-+      0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74d6,
-+      0x948c, 0xff00, 0x7034, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160,
-+      0x7040, 0xd084, 0x1148, 0xc085, 0x7042, 0x0036, 0x2418, 0x2011,
-+      0x8016, 0x080c, 0x3f23, 0x003e, 0x9196, 0xff00, 0x05a8, 0x7058,
-+      0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130,
-+      0xd184, 0x1550, 0x080c, 0x2987, 0x0128, 0xc18d, 0x7132, 0x080c,
-+      0x58c6, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,
-+      0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x1d83,
-+      0x7034, 0xd08c, 0x1140, 0x2001, 0x110c, 0x200c, 0xd1ac, 0x1904,
-+      0x1d83, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c,
-+      0x3f23, 0x003e, 0x0804, 0x1d83, 0x7034, 0xd08c, 0x1140, 0x2001,
-+      0x110c, 0x200c, 0xd1ac, 0x1904, 0x1d83, 0xc1ad, 0x2102, 0x0036,
-+      0x73d4, 0x2011, 0x8013, 0x080c, 0x3f23, 0x003e, 0x7130, 0xc185,
-+      0x7132, 0x2011, 0x1153, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009,
-+      0x0001, 0x2011, 0x0100, 0x080c, 0x73af, 0x2019, 0x000e, 0x00c6,
-+      0x2061, 0x0000, 0x080c, 0xc0b9, 0x00ce, 0x9484, 0x00ff, 0x9080,
-+      0x298c, 0x200d, 0x918c, 0xff00, 0x810f, 0x8127, 0x9006, 0x2009,
-+      0x000e, 0x080c, 0xc12f, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e,
-+      0x2019, 0x0004, 0x080c, 0x2831, 0x001e, 0x0068, 0x0156, 0x20a9,
-+      0x007f, 0x900e, 0x080c, 0x5608, 0x1110, 0x080c, 0x5100, 0x8108,
-+      0x1f04, 0x1d7a, 0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c,
-+      0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x080c, 0x87a2, 0x0036,
-+      0x901e, 0x080c, 0x8847, 0x003e, 0x60e3, 0x0000, 0x001e, 0x2001,
-+      0x1100, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0, 0x2011,
-+      0x110c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206,
-+      0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1124, 0x2003,
-+      0x0000, 0x080c, 0x483b, 0x6027, 0x0020, 0xd194, 0x0904, 0x1e92,
-+      0x0016, 0x6220, 0xd2b4, 0x0904, 0x1e3e, 0x080c, 0x7271, 0x080c,
-+      0x85a2, 0x6027, 0x0004, 0x00f6, 0x2019, 0x130d, 0x2304, 0x907d,
-+      0x0904, 0x1e0f, 0x7804, 0x9086, 0x0032, 0x1904, 0x1e0f, 0x00d6,
-+      0x00c6, 0x00e6, 0x2069, 0x0140, 0x7810, 0x685e, 0x7808, 0x685a,
-+      0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000,
-+      0x2001, 0x003c, 0x8001, 0x1df0, 0x2001, 0x1000, 0x080c, 0x2401,
-+      0x9006, 0x080c, 0x2401, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9,
-+      0x0009, 0x080c, 0x2321, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001,
-+      0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x080c, 0x79ab,
-+      0x080c, 0x7aa4, 0x7814, 0x2070, 0x7067, 0x0103, 0x2f60, 0x080c,
-+      0x8ed9, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe,
-+      0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0138, 0x2001,
-+      0x1000, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x00de, 0x00c6,
-+      0x2061, 0x1304, 0x6028, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a,
-+      0x00ce, 0x080c, 0x857e, 0x0804, 0x1e91, 0x2061, 0x0100, 0x62c0,
-+      0x080c, 0x8dc7, 0x2019, 0x130d, 0x2304, 0x9065, 0x0120, 0x2009,
-+      0x0027, 0x080c, 0x8f53, 0x00ce, 0x0804, 0x1e91, 0xd2bc, 0x05f0,
-+      0x080c, 0x727e, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016,
-+      0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000,
-+      0x0138, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+      0x00de, 0x00c6, 0x2061, 0x1304, 0x6044, 0x909a, 0x00c8, 0x1608,
-+      0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558, 0x2009, 0x07d0,
-+      0x080c, 0x7276, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138,
-+      0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x00d0, 0x6114,
-+      0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098, 0x6027, 0x0004,
-+      0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x8847, 0x003e, 0x2019,
-+      0x1313, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f, 0x080c, 0x8f53,
-+      0x00ce, 0x001e, 0xd19c, 0x0904, 0x1f0d, 0x7034, 0xd0ac, 0x1904,
-+      0x1edb, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2346, 0x6050,
-+      0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c,
-+      0x2340, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04, 0x1eae,
-+      0x2091, 0x6000, 0x1f04, 0x1eae, 0x6050, 0x9085, 0x0400, 0x9084,
-+      0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x1ebc, 0x6150,
-+      0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x1ec5, 0x2091,
-+      0x6000, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027,
-+      0x0008, 0x04d8, 0x080c, 0x2304, 0x1f04, 0x1ec5, 0x015e, 0x6152,
-+      0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x2011,
-+      0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x080c,
-+      0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x60e3, 0x0000,
-+      0x080c, 0xc44e, 0x080c, 0xc469, 0x2001, 0x1172, 0x2004, 0xd0fc,
-+      0x1120, 0x9085, 0x0001, 0x080c, 0x6331, 0x9006, 0x080c, 0x2401,
-+      0x2009, 0x0002, 0x080c, 0x2355, 0x2001, 0x1100, 0x2003, 0x0004,
-+      0x6027, 0x0008, 0x080c, 0x0b68, 0x001e, 0x918c, 0xffd0, 0x6126,
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0x1100, 0x71cc, 0x70ce, 0x9116, 0x05d8,
-+      0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2355, 0x2011, 0x8011,
-+      0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001,
-+      0x0010, 0x2019, 0x0000, 0x080c, 0x3f23, 0x0428, 0x2001, 0x12e0,
-+      0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118,
-+      0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x3f23,
-+      0x2001, 0x1172, 0x2004, 0xd0fc, 0x1170, 0x00c6, 0x080c, 0x1fd8,
-+      0x080c, 0x877f, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,
-+      0x080c, 0x2831, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,
-+      0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
-+      0xff00, 0x1110, 0x81ff, 0x0118, 0x080c, 0x6e62, 0x0038, 0x9080,
-+      0x298c, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080,
-+      0x298c, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,
-+      0x2001, 0x1116, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852,
-+      0x6856, 0x1f04, 0x1f88, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026,
-+      0x2069, 0x0140, 0x2001, 0x1116, 0x2102, 0x8114, 0x8214, 0x8214,
-+      0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128,
-+      0x9184, 0x000f, 0x9080, 0xc84f, 0x2005, 0x6856, 0x8211, 0x1f04,
-+      0x1f9d, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1100,
-+      0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005,
-+      0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980,
-+      0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001,
-+      0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x1fcd,
-+      0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005,
-+      0x2001, 0x1153, 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006,
-+      0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xc12f, 0x004e, 0x0005,
-+      0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904,
-+      0x2045, 0x080c, 0x22a5, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600,
-+      0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120,
-+      0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, 0x9016,
-+      0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, 0x2009,
-+      0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004,
-+      0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040,
-+      0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058,
-+      0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x73f0, 0x928c, 0xff00,
-+      0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2,
-+      0x2009, 0x0138, 0x220a, 0x080c, 0x62e4, 0x1118, 0x2009, 0x1298,
-+      0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8,
-+      0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170,
-+      0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d7e,
-+      0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x0171, 0x2004,
-+      0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, 0x918e,
-+      0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, 0x900e,
-+      0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
-+      0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9108,
-+      0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, 0x1000,
-+      0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, 0x12ca,
-+      0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d7e, 0x0033, 0x00ee, 0x002e,
-+      0x001e, 0x000e, 0x015e, 0x0005, 0x20a3, 0x20c1, 0x20e5, 0x20e7,
-+      0x2110, 0x2112, 0x2114, 0x2001, 0x0001, 0x080c, 0x1f11, 0x080c,
-+      0x22fd, 0x2001, 0x12cc, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7,
-+      0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x22b9, 0x2001, 0x12ca,
-+      0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2115, 0x080c, 0x7283,
-+      0x0005, 0x2009, 0x12cf, 0x200b, 0x0000, 0x2001, 0x12d4, 0x2003,
-+      0x0036, 0x2001, 0x12d3, 0x2003, 0x002a, 0x2001, 0x12cc, 0x2003,
-+      0x0001, 0x9006, 0x080c, 0x2273, 0x2001, 0xffff, 0x20a9, 0x0009,
-+      0x080c, 0x22b9, 0x2001, 0x12ca, 0x2003, 0x0006, 0x2009, 0x001e,
-+      0x2011, 0x2115, 0x080c, 0x7283, 0x0005, 0x080c, 0x0d7e, 0x2001,
-+      0x12d4, 0x2003, 0x0036, 0x2001, 0x12cc, 0x2003, 0x0003, 0x7a38,
-+      0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001,
-+      0x0001, 0x080c, 0x2273, 0x2001, 0x12d0, 0x2003, 0x0000, 0x2001,
-+      0xffff, 0x20a9, 0x0009, 0x080c, 0x22b9, 0x2001, 0x12ca, 0x2003,
-+      0x0006, 0x2009, 0x001e, 0x2011, 0x2115, 0x080c, 0x7283, 0x0005,
-+      0x080c, 0x0d7e, 0x080c, 0x0d7e, 0x0005, 0x0006, 0x0016, 0x0026,
-+      0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100,
-+      0x2001, 0x12cc, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d7e, 0x0043,
-+      0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, 0x0005,
-+      0x2137, 0x2157, 0x2197, 0x21c7, 0x21eb, 0x21fb, 0x21fd, 0x080c,
-+      0x22ad, 0x11b0, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, 0x12d2,
-+      0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d,
-+      0x0008, 0xc085, 0x200a, 0x2001, 0x12ca, 0x2003, 0x0001, 0x0030,
-+      0x080c, 0x2221, 0x2001, 0xffff, 0x080c, 0x20b2, 0x0005, 0x080c,
-+      0x21ff, 0x05e0, 0x2009, 0x12d3, 0x2104, 0x8001, 0x200a, 0x080c,
-+      0x22ad, 0x1178, 0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, 0x9294,
-+      0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x12d2, 0x2104, 0xc085,
-+      0x200a, 0x2009, 0x12cf, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
-+      0x0118, 0x080c, 0x2207, 0x00c0, 0x200b, 0x0000, 0x7a38, 0x9294,
-+      0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
-+      0x080c, 0x2290, 0x2001, 0x12cc, 0x2003, 0x0002, 0x0028, 0x2001,
-+      0x12ca, 0x2003, 0x0003, 0x0010, 0x080c, 0x20d4, 0x0005, 0x080c,
-+      0x21ff, 0x0560, 0x2009, 0x12d3, 0x2104, 0x8001, 0x200a, 0x080c,
-+      0x22ad, 0x1168, 0x7850, 0x9084, 0xefff, 0x7852, 0x2001, 0x12ca,
-+      0x2003, 0x0003, 0x2001, 0x12cb, 0x2003, 0x0000, 0x00b8, 0x2009,
-+      0x12d3, 0x2104, 0x9005, 0x1118, 0x080c, 0x2245, 0x0010, 0x080c,
-+      0x2214, 0x080c, 0x2207, 0x2009, 0x12cf, 0x200b, 0x0000, 0x2001,
-+      0x12cc, 0x2003, 0x0001, 0x080c, 0x20d4, 0x0000, 0x0005, 0x04b9,
-+      0x0508, 0x080c, 0x22ad, 0x11b8, 0x7850, 0x9084, 0xefff, 0x7852,
-+      0x2009, 0x12d0, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, 0x0108,
-+      0x0078, 0x2001, 0x12d5, 0x2003, 0x000a, 0x2009, 0x12d2, 0x2104,
-+      0xc0fd, 0x200a, 0x0038, 0x0419, 0x2001, 0x12cc, 0x2003, 0x0004,
-+      0x080c, 0x20ff, 0x0005, 0x0099, 0x0168, 0x080c, 0x22ad, 0x1138,
-+      0x7850, 0x9084, 0xefff, 0x7852, 0x080c, 0x20eb, 0x0018, 0x0079,
-+      0x080c, 0x20ff, 0x0005, 0x080c, 0x0d7e, 0x080c, 0x0d7e, 0x2009,
-+      0x12d4, 0x2104, 0x8001, 0x200a, 0x090c, 0x2261, 0x0005, 0x7a38,
-+      0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001,
-+      0x0001, 0x080c, 0x2290, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296,
-+      0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2273,
-+      0x0005, 0x2009, 0x12cf, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005,
-+      0x0108, 0x0070, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296,
-+      0x0006, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, 0x04d9,
-+      0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010,
-+      0x2001, 0x0001, 0x080c, 0x2290, 0x0005, 0x0086, 0x2001, 0x12d2,
-+      0x2004, 0x9084, 0x7fff, 0x090c, 0x0d7e, 0x2009, 0x12d1, 0x2144,
-+      0x8846, 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120,
-+      0x080c, 0x0d7e, 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e,
-+      0x0005, 0x0006, 0x0156, 0x2001, 0x12ca, 0x20a9, 0x0009, 0x2003,
-+      0x0000, 0x8000, 0x1f04, 0x2267, 0x2001, 0x12d1, 0x2003, 0x8000,
-+      0x015e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000,
-+      0x0158, 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009,
-+      0x12d7, 0x210c, 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085,
-+      0x0006, 0x783a, 0x2009, 0x12d8, 0x210c, 0x795a, 0x00fe, 0x0005,
-+      0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084,
-+      0xfffa, 0x9085, 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb,
-+      0x9085, 0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100,
-+      0x2004, 0x9082, 0x0007, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064,
-+      0x7820, 0x080c, 0x2340, 0xd09c, 0x1110, 0x1f04, 0x22b0, 0x015e,
-+      0x0005, 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x080c, 0x2346,
-+      0x7850, 0x9085, 0x0040, 0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852,
-+      0x080c, 0x2340, 0x9085, 0x2000, 0x7852, 0x000e, 0x2008, 0x9186,
-+      0x0000, 0x1118, 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118,
-+      0x783b, 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005,
-+      0x0030, 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006,
-+      0x1d04, 0x22e8, 0x080c, 0x72a5, 0x1f04, 0x22e8, 0x7850, 0x9085,
-+      0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c, 0x2340, 0x9085, 0x1000,
-+      0x7852, 0x000e, 0x001e, 0x012e, 0x0005, 0x080c, 0x2346, 0x7850,
-+      0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079,
-+      0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820, 0xd0e4,
-+      0x1140, 0x1f04, 0x230e, 0x0028, 0x7854, 0xd08c, 0x1110, 0x1f04,
-+      0x2314, 0x00fe, 0x015e, 0x000e, 0x0005, 0x7820, 0x0409, 0xd09c,
-+      0x0005, 0x1d04, 0x2321, 0x080c, 0x72a5, 0x1f04, 0x2321, 0x0005,
-+      0x0006, 0x2001, 0x12d6, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005,
-+      0x0006, 0x2001, 0x12d6, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005,
-+      0x0006, 0x2001, 0x12d6, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005,
-+      0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x0016,
-+      0x2009, 0x0140, 0x2104, 0x080c, 0x6300, 0x1110, 0xc0bd, 0x0008,
-+      0xc0bc, 0x200a, 0x001e, 0x000e, 0x0005, 0x0006, 0x2001, 0x12e0,
-+      0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140,
-+      0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a,
-+      0x0005, 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
-+      0x9186, 0x2000, 0x0118, 0x9186, 0x0100, 0x1560, 0x2009, 0x017f,
-+      0x200b, 0x00a2, 0x2009, 0x0169, 0x2019, 0x0160, 0x2324, 0x2011,
-+      0x0003, 0x2104, 0x9084, 0x0007, 0x9086, 0x0003, 0x11b8, 0x2304,
-+      0x9402, 0x02a0, 0x1d98, 0x8211, 0x1da0, 0x84ff, 0x0170, 0x2001,
-+      0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x0100, 0x0130, 0x2009,
-+      0x110c, 0x2104, 0xc0dd, 0x200a, 0x0008, 0x0419, 0x2001, 0x017f,
-+      0x2003, 0x0000, 0x004e, 0x003e, 0x0005, 0x2001, 0x110c, 0x2004,
-+      0xd0dc, 0x01b0, 0x2001, 0x0160, 0x2004, 0x9005, 0x0140, 0x2001,
-+      0x0141, 0x2004, 0x9084, 0xff00, 0x9086, 0x0100, 0x1148, 0x0126,
-+      0x2091, 0x8000, 0x0016, 0x0026, 0x0021, 0x002e, 0x001e, 0x012e,
-+      0x0005, 0x00c6, 0x2061, 0x0100, 0x6014, 0x0006, 0x2001, 0x0161,
-+      0x2003, 0x0000, 0x6017, 0x0018, 0xa001, 0xa001, 0x602f, 0x0008,
-+      0x6104, 0x918e, 0x0010, 0x6106, 0x918e, 0x0010, 0x6106, 0x6017,
-+      0x0040, 0x2001, 0x1000, 0x0429, 0x9006, 0x0419, 0x001e, 0x9184,
-+      0x0003, 0x01c0, 0x0036, 0x2019, 0x0141, 0x2304, 0x9084, 0xff00,
-+      0x9086, 0x0800, 0x1dd0, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118,
-+      0x9385, 0x0009, 0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012,
-+      0x6016, 0x003e, 0x2001, 0x110c, 0x200c, 0xc1dc, 0x2102, 0x00ce,
-+      0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
-+      0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x2678, 0x2678, 0x249d,
-+      0x249d, 0x24a9, 0x24a9, 0x24b5, 0x24b5, 0x24c3, 0x24c3, 0x24cf,
-+      0x24cf, 0x24dd, 0x24dd, 0x24eb, 0x24eb, 0x24fd, 0x24fd, 0x2509,
-+      0x2509, 0x2517, 0x2517, 0x2535, 0x2535, 0x2555, 0x2555, 0x2525,
-+      0x2525, 0x2545, 0x2545, 0x2563, 0x2563, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x2575, 0x2575, 0x2581,
-+      0x2581, 0x258f, 0x258f, 0x259d, 0x259d, 0x25ad, 0x25ad, 0x25bb,
-+      0x25bb, 0x25cb, 0x25cb, 0x25db, 0x25db, 0x25ed, 0x25ed, 0x25fb,
-+      0x25fb, 0x260b, 0x260b, 0x262d, 0x262d, 0x264f, 0x264f, 0x261b,
-+      0x261b, 0x263e, 0x263e, 0x265e, 0x265e, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb,
-+      0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1c12, 0x0804,
-+      0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-+      0x0156, 0x080c, 0x19c6, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+      0x1c12, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106,
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+      0x1c12, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+      0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c, 0x1c12, 0x080c,
-+      0x19fe, 0x0804, 0x2670, 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1125, 0x0804,
-+      0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-+      0x0156, 0x080c, 0x1c12, 0x080c, 0x1125, 0x0804, 0x2670, 0x0106,
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+      0x19c6, 0x080c, 0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1c12, 0x080c,
-+      0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+      0x1c12, 0x080c, 0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c,
-+      0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1125, 0x080c,
-+      0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x19c6, 0x080c, 0x1c12, 0x080c,
-+      0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x0804,
-+      0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-+      0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x0804, 0x2670, 0x0106,
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+      0x2048, 0x080c, 0x19c6, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+      0x19c6, 0x080c, 0x1c12, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+      0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x080c,
-+      0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x19c6, 0x080c,
-+      0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x19c6, 0x080c,
-+      0x1c12, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+      0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x080c,
-+      0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x19c6, 0x080c,
-+      0x1125, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-+      0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c, 0x1c12, 0x080c,
-+      0x1125, 0x080c, 0x19fe, 0x0804, 0x2670, 0x0106, 0x0006, 0x0126,
-+      0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048, 0x080c,
-+      0x19c6, 0x080c, 0x1c12, 0x080c, 0x1125, 0x0490, 0x0106, 0x0006,
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048,
-+      0x080c, 0x19c6, 0x080c, 0x1125, 0x080c, 0x19fe, 0x0408, 0x0106,
-+      0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-+      0x2048, 0x080c, 0x1125, 0x080c, 0x19fe, 0x0090, 0x0106, 0x0006,
-+      0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2048,
-+      0x080c, 0x19c6, 0x080c, 0x1c12, 0x080c, 0x1125, 0x080c, 0x19fe,
-+      0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e,
-+      0x000d, 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x588e, 0x1904,
-+      0x275a, 0x72d8, 0x2001, 0x12a7, 0x2004, 0x9005, 0x1110, 0xd29c,
-+      0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x275a, 0x080c, 0x275e,
-+      0x0804, 0x275a, 0xd2cc, 0x1904, 0x275a, 0x080c, 0x62e4, 0x1120,
-+      0x70a7, 0xffff, 0x0804, 0x275a, 0xd294, 0x0120, 0x70a7, 0xffff,
-+      0x0804, 0x275a, 0x080c, 0x2982, 0x0120, 0x70a7, 0xffff, 0x0804,
-+      0x275a, 0x2001, 0x1116, 0x203c, 0x728c, 0xd284, 0x0904, 0x26fd,
-+      0xd28c, 0x1904, 0x26fd, 0x0036, 0x73a4, 0x938e, 0xffff, 0x1110,
-+      0x2019, 0x0001, 0x8314, 0x92e0, 0x1580, 0x2c04, 0x938c, 0x0001,
-+      0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e,
-+      0x0558, 0x908e, 0x0000, 0x0540, 0x908e, 0x00ff, 0x1150, 0x7230,
-+      0xd284, 0x1530, 0x728c, 0xc28d, 0x728e, 0x70a7, 0xffff, 0x003e,
-+      0x0420, 0x900e, 0x080c, 0x1f63, 0x080c, 0x55b3, 0x11b8, 0x6004,
-+      0x9084, 0x00ff, 0x9086, 0x0006, 0x1150, 0x7030, 0xd08c, 0x0118,
-+      0x6000, 0xd0bc, 0x0120, 0x080c, 0x2771, 0x0140, 0x0028, 0x080c,
-+      0x28a1, 0x080c, 0x279e, 0x0110, 0x8318, 0x0820, 0x73a6, 0x0010,
-+      0x70a7, 0xffff, 0x003e, 0x0804, 0x275a, 0x9780, 0x298c, 0x203d,
-+      0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70a4, 0x9096, 0xffff,
-+      0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802,
-+      0x20a8, 0x0020, 0x70a7, 0xffff, 0x0804, 0x275a, 0x2700, 0x0156,
-+      0x0016, 0x9106, 0x05a0, 0xc484, 0x080c, 0x5608, 0x0120, 0x080c,
-+      0x55b3, 0x15a8, 0x0008, 0xc485, 0x6004, 0x9084, 0x00ff, 0x9086,
-+      0x0006, 0x1130, 0x7030, 0xd08c, 0x01e8, 0x6000, 0xd0bc, 0x11d0,
-+      0x728c, 0xd28c, 0x0188, 0x6004, 0x9084, 0x00ff, 0x9082, 0x0006,
-+      0x02b0, 0xd484, 0x1118, 0x080c, 0x55d0, 0x0028, 0x080c, 0x292a,
-+      0x0170, 0x080c, 0x2955, 0x0058, 0x080c, 0x28a1, 0x080c, 0x279e,
-+      0x0170, 0x0028, 0x080c, 0x292a, 0x0110, 0x0419, 0x0140, 0x001e,
-+      0x8108, 0x015e, 0x1f04, 0x2716, 0x70a7, 0xffff, 0x0018, 0x001e,
-+      0x015e, 0x71a6, 0x004e, 0x002e, 0x00ce, 0x0005, 0x00c6, 0x0016,
-+      0x70a7, 0x0001, 0x2009, 0x007e, 0x080c, 0x55b3, 0x1138, 0x080c,
-+      0x28a1, 0x04a1, 0x0118, 0x70d8, 0xc0bd, 0x70da, 0x001e, 0x00ce,
-+      0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x2001, 0x1157,
-+      0x2004, 0x9084, 0x00ff, 0x6842, 0x080c, 0x8f26, 0x01d0, 0x2d00,
-+      0x6012, 0x080c, 0xad70, 0x6023, 0x0001, 0x9006, 0x080c, 0x5556,
-+      0x2001, 0x0000, 0x080c, 0x5568, 0x0126, 0x2091, 0x8000, 0x70a0,
-+      0x8000, 0x70a2, 0x012e, 0x2009, 0x0004, 0x080c, 0x8f53, 0x9085,
-+      0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076,
-+      0x00d6, 0x00c6, 0x2c68, 0x2001, 0x1157, 0x2004, 0x9084, 0x00ff,
-+      0x6842, 0x080c, 0x8f26, 0x0548, 0x2d00, 0x6012, 0x6800, 0xc0c4,
-+      0x6802, 0x68a0, 0x9086, 0x007e, 0x0140, 0x6804, 0x9084, 0x00ff,
-+      0x9086, 0x0006, 0x1110, 0x080c, 0x2862, 0x080c, 0xad70, 0x6023,
-+      0x0001, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002, 0x080c, 0x5568,
-+      0x0126, 0x2091, 0x8000, 0x70a0, 0x8000, 0x70a2, 0x012e, 0x2009,
-+      0x0002, 0x080c, 0x8f53, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e,
-+      0x001e, 0x0005, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x55b3,
-+      0x1120, 0x0031, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, 0x0005,
-+      0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x8e83, 0x01e0,
-+      0x2d00, 0x6012, 0x080c, 0xad70, 0x6023, 0x0001, 0x9006, 0x080c,
-+      0x5556, 0x2001, 0x0002, 0x080c, 0x5568, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x2862, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002,
-+      0x080c, 0x8f53, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
-+      0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f,
-+      0x080c, 0x55b3, 0x1190, 0x2c68, 0x080c, 0x8e83, 0x0170, 0x2d00,
-+      0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xad70, 0x2009,
-+      0x0022, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce,
-+      0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x21f0, 0x080c,
-+      0x76fb, 0x080c, 0x768d, 0x080c, 0x9ce7, 0x3e08, 0x2130, 0x81ff,
-+      0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e,
-+      0x0016, 0x080c, 0x5608, 0x1140, 0x9686, 0x0002, 0x1118, 0x6000,
-+      0xd0bc, 0x1110, 0x080c, 0x5100, 0x001e, 0x8108, 0x1f04, 0x2848,
-+      0x86ff, 0x1110, 0x080c, 0x0a79, 0x002e, 0x003e, 0x006e, 0x00ce,
-+      0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210,
-+      0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x76f0, 0x0076,
-+      0x2039, 0x0000, 0x080c, 0x75ee, 0x2c08, 0x080c, 0xbec2, 0x007e,
-+      0x001e, 0x2e60, 0x6210, 0x6314, 0x080c, 0x5100, 0x6212, 0x6316,
-+      0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006,
-+      0x6010, 0x9080, 0x0028, 0x2004, 0x9086, 0x0080, 0x0150, 0x2071,
-+      0x1100, 0x70a0, 0x9005, 0x0110, 0x8001, 0x70a2, 0x000e, 0x00ee,
-+      0x0005, 0x2071, 0x1100, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2,
-+      0x0ca8, 0x6000, 0xc08c, 0x6002, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-+      0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
-+      0x0001, 0x0090, 0x2001, 0x1153, 0x2004, 0xd0c4, 0x0150, 0xd0a4,
-+      0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xc12f,
-+      0x004e, 0x20a9, 0x00ff, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904,
-+      0x2909, 0x928e, 0x007f, 0x05e8, 0x928e, 0x0080, 0x05d0, 0x9288,
-+      0x1000, 0x210c, 0x81ff, 0x05a8, 0x8fff, 0x1148, 0x2001, 0x12c8,
-+      0x0006, 0x2003, 0x0001, 0x04c9, 0x000e, 0x2003, 0x0000, 0x00c6,
-+      0x2160, 0x2001, 0x0001, 0x080c, 0x5898, 0x00ce, 0x2019, 0x0029,
-+      0x080c, 0x76f0, 0x0076, 0x2039, 0x0000, 0x080c, 0x75ee, 0x00c6,
-+      0x0026, 0x2160, 0x6204, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118,
-+      0x6007, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0x6206,
-+      0x002e, 0x00ce, 0x0016, 0x2c08, 0x080c, 0xbec2, 0x001e, 0x007e,
-+      0x2160, 0x002e, 0x8210, 0x1f04, 0x28c4, 0x015e, 0x001e, 0x002e,
-+      0x003e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016,
-+      0x2001, 0x1153, 0x2004, 0xd0c4, 0x0148, 0xd0a4, 0x0138, 0x9006,
-+      0x2220, 0x8427, 0x2009, 0x0029, 0x080c, 0xc12f, 0x001e, 0x002e,
-+      0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x728c, 0x82ff,
-+      0x01e8, 0x080c, 0x58c6, 0x11d0, 0x2100, 0x080c, 0x1f77, 0x81ff,
-+      0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1580, 0x2c04, 0xd384,
-+      0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116,
-+      0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001,
-+      0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019,
-+      0x0029, 0x080c, 0x8ac9, 0x002e, 0x080c, 0xc3d4, 0x003e, 0x002e,
-+      0x001e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6,
-+      0x2061, 0x1389, 0x001e, 0x6112, 0x080c, 0x2862, 0x001e, 0x080c,
-+      0x55d0, 0x012e, 0x00ce, 0x001e, 0x0005, 0x2001, 0x1136, 0x2004,
-+      0xd0cc, 0x0005, 0x2001, 0x1174, 0x2004, 0xd0bc, 0x0005, 0x2011,
-+      0x1153, 0x2214, 0xd2ec, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
-+      0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
-+      0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
-+      0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,
-+      0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,
-+      0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,
-+      0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,
-+      0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,
-+      0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,
-+      0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,
-+      0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,
-+      0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,
-+      0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,
-+      0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,
-+      0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,
-+      0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,
-+      0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,
-+      0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,
-+      0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,
-+      0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,
-+      0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,
-+      0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,
-+      0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,
-+      0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,
-+      0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,
-+      0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,
-+      0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,
-+      0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-+      0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x1193, 0x7003, 0x0002,
-+      0x9006, 0x7012, 0x7016, 0x7042, 0x7046, 0x703a, 0x703e, 0x7033,
-+      0x11aa, 0x7037, 0x11aa, 0x7007, 0x0001, 0x2061, 0x11ea, 0x6003,
-+      0x0002, 0x0005, 0x2071, 0x1193, 0x7004, 0x0002, 0x2aaa, 0x2aab,
-+      0x2ab2, 0x2ac3, 0x0005, 0x1004, 0x2ab1, 0x0e04, 0x2ab1, 0x2b78,
-+      0x0430, 0x0005, 0x2b78, 0x2061, 0x11ea, 0x6008, 0x908e, 0x0100,
-+      0x0128, 0x9086, 0x0200, 0x0904, 0x2b92, 0x0005, 0x7014, 0x2068,
-+      0x2a60, 0x7018, 0x0807, 0x7010, 0x2068, 0x6864, 0x9094, 0x00ff,
-+      0x9296, 0x0029, 0x1120, 0x6a78, 0xd2fc, 0x0128, 0x0005, 0x9086,
-+      0x0103, 0x0108, 0x0005, 0x2a60, 0x2b78, 0x7018, 0x0807, 0x2a60,
-+      0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a,
-+      0x003f, 0x1a04, 0x2b8f, 0x61cc, 0x0804, 0x2b26, 0x2b68, 0x2b9e,
-+      0x2ba8, 0x2bac, 0x2bb6, 0x2bbc, 0x2bc0, 0x2bd0, 0x2bd3, 0x2bdd,
-+      0x2be2, 0x2be7, 0x2bf2, 0x2bfd, 0x2c0c, 0x2c1b, 0x2c29, 0x2c40,
-+      0x2c5b, 0x2cf4, 0x2cf9, 0x2d37, 0x2de5, 0x2df6, 0x2e15, 0x2b8f,
-+      0x2b8f, 0x2b8f, 0x2e4d, 0x2e6b, 0x2e74, 0x2ea3, 0x2ea9, 0x2b8f,
-+      0x2ed2, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2edd, 0x2ee6,
-+      0x2eee, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f,
-+      0x2ef0, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2f0d, 0x2f64,
-+      0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x0002, 0x2f8e,
-+      0x2fe1, 0x303b, 0x3053, 0x3083, 0x3301, 0x2b8f, 0x44b5, 0x2b8f,
-+      0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2b8f, 0x2bdd,
-+      0x2be2, 0x376a, 0x2b8f, 0x3781, 0x454f, 0x45a5, 0x464b, 0x2b8f,
-+      0x46b0, 0x46e0, 0x4705, 0x4813, 0x4736, 0x478d, 0x2b8f, 0x3785,
-+      0x394a, 0x3960, 0x3980, 0x39e5, 0x3a4e, 0x3a59, 0x3ac1, 0x3ad0,
-+      0x3adf, 0x3ae2, 0x3b05, 0x3b77, 0x3bf0, 0x3bfd, 0x3cfe, 0x3e22,
-+      0x3e4b, 0x4032, 0x4054, 0x4060, 0x40d5, 0x419b, 0x2b8f, 0x2b8f,
-+      0x2b8f, 0x2b8f, 0x4203, 0x421e, 0x43b9, 0x4473, 0x7144, 0x0000,
-+      0x2021, 0x4000, 0x080c, 0x3eff, 0x0126, 0x2091, 0x8000, 0x0e04,
-+      0x2b72, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118,
-+      0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a,
-+      0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+      0x0fcd, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005, 0x2021,
-+      0x4001, 0x08c0, 0x2021, 0x4002, 0x08a8, 0x2021, 0x4003, 0x0890,
-+      0x2021, 0x4005, 0x0878, 0x2021, 0x4006, 0x0860, 0x2039, 0x0001,
-+      0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x3f0c,
-+      0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520,
-+      0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x3f0f, 0x7984, 0x7888,
-+      0x2114, 0x200a, 0x0804, 0x2b68, 0x7984, 0x2114, 0x0804, 0x2b68,
-+      0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021,
-+      0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x2b68,
-+      0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0001, 0x2019,
-+      0x0014, 0x789b, 0x0017, 0x0804, 0x2b68, 0x2039, 0x0001, 0x7d98,
-+      0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0,
-+      0x9182, 0x0040, 0x0210, 0x0804, 0x2b9b, 0x2138, 0x7d98, 0x7c9c,
-+      0x0804, 0x2ba2, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x2b9b,
-+      0x2138, 0x7d98, 0x7c9c, 0x0804, 0x2bb0, 0x79a0, 0x9182, 0x0040,
-+      0x0210, 0x0804, 0x2b9b, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001,
-+      0x21a0, 0x4004, 0x0804, 0x2b68, 0x2061, 0x0800, 0xe10c, 0x9006,
-+      0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904,
-+      0x2b68, 0x0804, 0x2b95, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
-+      0x2b9b, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804,
-+      0x2b68, 0x2069, 0x1152, 0x7884, 0x7990, 0x911a, 0x1a04, 0x2b9b,
-+      0x8019, 0x0904, 0x2b9b, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888,
-+      0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x65bd, 0x0804, 0x2b68,
-+      0x2069, 0x1152, 0x7884, 0x7994, 0x911a, 0x1a04, 0x2b9b, 0x8019,
-+      0x0904, 0x2b9b, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866,
-+      0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x5946,
-+      0x012e, 0x0804, 0x2b68, 0x902e, 0x2520, 0x81ff, 0x1904, 0x2b98,
-+      0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1,
-+      0x119a, 0x4101, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x2009, 0x0020,
-+      0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b, 0x2c77, 0x0005, 0x6864,
-+      0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0150, 0x9096, 0x0019,
-+      0x0138, 0x9096, 0x0015, 0x0120, 0x9096, 0x0029, 0x1904, 0x2b98,
-+      0x810f, 0x918c, 0x00ff, 0x0904, 0x2b98, 0x710e, 0x700c, 0x8001,
-+      0x0538, 0x700e, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x2009, 0x0020,
-+      0x2061, 0x11ea, 0x6228, 0x632c, 0x6430, 0x6534, 0x9290, 0x0040,
-+      0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0x2039, 0x0001,
-+      0x080c, 0x3f0c, 0x701b, 0x2cad, 0x0005, 0x6864, 0x9084, 0x00ff,
-+      0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x2b98, 0x08b0,
-+      0x7010, 0x2068, 0x6868, 0xc0fd, 0x686a, 0x6864, 0x9084, 0x00ff,
-+      0x9096, 0x0029, 0x1160, 0xc2fd, 0x6a7a, 0x080c, 0x51e5, 0x0150,
-+      0x0126, 0x2091, 0x8000, 0x687a, 0x6982, 0x012e, 0x0050, 0x080c,
-+      0x54d0, 0x1128, 0x7007, 0x0003, 0x701b, 0x2cd9, 0x0005, 0x080c,
-+      0x5d95, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001,
-+      0x2099, 0x119a, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1,
-+      0x0000, 0x95a9, 0x0000, 0x9d80, 0x0019, 0x2009, 0x0020, 0x012e,
-+      0x2039, 0x0001, 0x0804, 0x3f0f, 0x61b4, 0x7884, 0x60b6, 0x0804,
-+      0x2b68, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883,
-+      0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009,
-+      0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200,
-+      0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd,
-+      0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089,
-+      0x2004, 0xd084, 0x0180, 0x2001, 0x1336, 0x2004, 0x9005, 0x0128,
-+      0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,
-+      0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff,
-+      0x1904, 0x2b98, 0x7984, 0x810f, 0x918c, 0x00ff, 0x080c, 0x5608,
-+      0x1904, 0x2b9b, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0210,
-+      0x0804, 0x2b9b, 0x7c88, 0x7d8c, 0x080c, 0x5758, 0x080c, 0x5728,
-+      0x0000, 0x1518, 0x2061, 0x15c0, 0x0126, 0x2091, 0x8000, 0x6000,
-+      0x9086, 0x0000, 0x0148, 0x6014, 0x906d, 0x0130, 0x686c, 0x9406,
-+      0x1118, 0x6870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001,
-+      0x1118, 0x2004, 0x9c02, 0x1a04, 0x2b98, 0x0c30, 0x080c, 0xa5f3,
-+      0x012e, 0x0904, 0x2b98, 0x0804, 0x2b68, 0x900e, 0x2001, 0x0005,
-+      0x080c, 0x5d95, 0x0126, 0x2091, 0x8000, 0x080c, 0xac07, 0x080c,
-+      0x5b76, 0x012e, 0x0804, 0x2b68, 0x00f6, 0x2d78, 0x7998, 0x810f,
-+      0x918c, 0x00ff, 0x080c, 0x5608, 0x1904, 0x2dd2, 0x7ea4, 0x9684,
-+      0x3fff, 0x9082, 0x4000, 0x0208, 0x04e8, 0x7c9c, 0x7da0, 0x080c,
-+      0x5758, 0x080c, 0x5728, 0x1520, 0x2061, 0x15c0, 0x0126, 0x2091,
-+      0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x906d, 0x0130,
-+      0x686c, 0x9406, 0x1118, 0x6870, 0x9506, 0x0158, 0x012e, 0x9ce0,
-+      0x0018, 0x2001, 0x1118, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0,
-+      0x0c28, 0x080c, 0xa5f3, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0,
-+      0x900e, 0x2001, 0x0005, 0x080c, 0x5d95, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0xac07, 0x080c, 0x5b76, 0x012e, 0x0070, 0x7897, 0x4005,
-+      0x799a, 0x0010, 0x7897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
-+      0x0030, 0x2f68, 0x00fe, 0x0005, 0x7897, 0x4000, 0x9006, 0x918d,
-+      0x0001, 0x2008, 0x2f68, 0x00fe, 0x0005, 0x81ff, 0x1904, 0x2b98,
-+      0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c, 0x56ca, 0x0904, 0x2b98,
-+      0x080c, 0x575e, 0x0904, 0x2b98, 0x0804, 0x2b68, 0x81ff, 0x1904,
-+      0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x080c, 0x57a6, 0x0904,
-+      0x2b98, 0x2019, 0x0005, 0x7984, 0x080c, 0x5779, 0x0904, 0x2b98,
-+      0x7888, 0x908a, 0x1000, 0x1a04, 0x2b9b, 0x8003, 0x800b, 0x810b,
-+      0x9108, 0x080c, 0x7206, 0x0804, 0x2b68, 0x0126, 0x2091, 0x8000,
-+      0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x00ff, 0x6454,
-+      0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x5608, 0x11d8, 0x080c,
-+      0x57a6, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019,
-+      0x0004, 0x900e, 0x080c, 0x5779, 0x1118, 0x2009, 0x0006, 0x0078,
-+      0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108,
-+      0x080c, 0x7206, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x2b68, 0x012e,
-+      0x0804, 0x2b98, 0x012e, 0x0804, 0x2b9b, 0x080c, 0x3ece, 0x0904,
-+      0x2b9b, 0x080c, 0x56ca, 0x0904, 0x2b98, 0x62a0, 0x2019, 0x0005,
-+      0x00c6, 0x2061, 0x0000, 0x080c, 0x76f0, 0x0076, 0x2039, 0x0000,
-+      0x080c, 0x75ee, 0x900e, 0x080c, 0xbec2, 0x007e, 0x00ce, 0x080c,
-+      0x5758, 0x0804, 0x2b68, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c,
-+      0x5758, 0x2208, 0x0804, 0x2b68, 0x0156, 0x00d6, 0x00e6, 0x2069,
-+      0x1240, 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016,
-+      0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x9075, 0x0118,
-+      0x704c, 0x0059, 0x9210, 0x8d68, 0x1f04, 0x2e85, 0x2300, 0x9218,
-+      0x00ee, 0x00de, 0x015e, 0x0804, 0x2b68, 0x00f6, 0x0016, 0x907d,
-+      0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0,
-+      0x001e, 0x00fe, 0x0005, 0x2069, 0x1240, 0x6910, 0x62b8, 0x0804,
-+      0x2b68, 0x81ff, 0x1904, 0x2b98, 0x6154, 0x9190, 0x298c, 0x2215,
-+      0x9294, 0x00ff, 0x6374, 0x83ff, 0x0108, 0x6278, 0x67d8, 0xd79c,
-+      0x0118, 0x2031, 0x0001, 0x0090, 0xd7ac, 0x0118, 0x2031, 0x0003,
-+      0x0068, 0xd7a4, 0x0118, 0x2031, 0x0002, 0x0040, 0x080c, 0x62e4,
-+      0x1118, 0x2031, 0x0004, 0x0010, 0x2031, 0x0000, 0x7e9a, 0x7f9e,
-+      0x0804, 0x2b68, 0x6144, 0x6248, 0x2019, 0x12c0, 0x231c, 0x2001,
-+      0x12c1, 0x2004, 0x789a, 0x0804, 0x2b68, 0x0126, 0x2091, 0x8000,
-+      0x6134, 0x6238, 0x633c, 0x012e, 0x0804, 0x2b68, 0x080c, 0x3ef0,
-+      0x0904, 0x2b9b, 0x6244, 0x6338, 0x0804, 0x2b68, 0x080c, 0x0d7e,
-+      0x6144, 0x6248, 0x7884, 0x6046, 0x7b88, 0x634a, 0x2069, 0x1152,
-+      0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x12c0, 0x2d1c, 0x206a,
-+      0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x12c1,
-+      0x2d04, 0x266a, 0x789a, 0x0804, 0x2b68, 0x0126, 0x2091, 0x8000,
-+      0x7884, 0x6036, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x12d7,
-+      0x200a, 0x78ac, 0x2011, 0x12d8, 0x2012, 0x2069, 0x0100, 0x6838,
-+      0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a,
-+      0x00de, 0x7884, 0xd0b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8,
-+      0x7888, 0x603a, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118,
-+      0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x788c, 0x603e,
-+      0x012e, 0x0804, 0x2b68, 0x00f6, 0x2079, 0x1100, 0x7a34, 0x6898,
-+      0x9084, 0xfeff, 0x9215, 0x689c, 0x9084, 0xfeff, 0x8002, 0x9214,
-+      0xd2b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7834, 0xd0c4,
-+      0x0108, 0xc2c5, 0x7a36, 0x6897, 0x4000, 0x900e, 0x9085, 0x0001,
-+      0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888,
-+      0x9025, 0x0904, 0x2b9b, 0x788c, 0x902d, 0x0904, 0x2b9b, 0x900e,
-+      0x080c, 0x5608, 0x1120, 0x6244, 0x6338, 0x6446, 0x653a, 0x9186,
-+      0x00ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x3ef0, 0x0904, 0x2b9b,
-+      0x7888, 0x900d, 0x0904, 0x2b9b, 0x788c, 0x9005, 0x0904, 0x2b9b,
-+      0x6244, 0x6146, 0x6338, 0x603a, 0x0804, 0x2b68, 0x2001, 0x1100,
-+      0x2004, 0x9086, 0x0003, 0x1904, 0x2b98, 0x00c6, 0x2061, 0x0100,
-+      0x7984, 0x810f, 0x918c, 0x00ff, 0x9196, 0x00ff, 0x1130, 0x2001,
-+      0x1116, 0x2004, 0x9085, 0xff00, 0x0078, 0x9182, 0x007f, 0x1698,
-+      0x9188, 0x298c, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1116, 0x2004,
-+      0x9116, 0x0548, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006,
-+      0x080c, 0x8e83, 0x000e, 0x01d8, 0x6012, 0x600b, 0xbc09, 0x6023,
-+      0x0001, 0x080c, 0x3eb9, 0x01d0, 0x9006, 0x6866, 0x7007, 0x0003,
-+      0x6832, 0x6868, 0xc0fd, 0x686a, 0x701b, 0x3034, 0x2d00, 0x6016,
-+      0x2009, 0x0032, 0x080c, 0x8f53, 0x012e, 0x00ce, 0x0005, 0x012e,
-+      0x00ce, 0x0804, 0x2b98, 0x00ce, 0x0804, 0x2b9b, 0x080c, 0x8ed9,
-+      0x0cb0, 0x2001, 0x1100, 0x2004, 0x9086, 0x0003, 0x1904, 0x2b98,
-+      0x00c6, 0x2061, 0x0100, 0x7984, 0x810f, 0x918c, 0x00ff, 0x9196,
-+      0x00ff, 0x1130, 0x2001, 0x1116, 0x2004, 0x9085, 0xff00, 0x0078,
-+      0x9182, 0x007f, 0x1698, 0x9188, 0x298c, 0x210d, 0x918c, 0x00ff,
-+      0x2001, 0x1116, 0x2004, 0x9116, 0x0548, 0x810f, 0x9105, 0x0126,
-+      0x2091, 0x8000, 0x0006, 0x080c, 0x8e83, 0x000e, 0x01d8, 0x6012,
-+      0x600b, 0xbc05, 0x6023, 0x0001, 0x080c, 0x3eb9, 0x01d0, 0x9006,
-+      0x6866, 0x7007, 0x0003, 0x6832, 0x6868, 0xc0fd, 0x686a, 0x701b,
-+      0x3034, 0x2d00, 0x6016, 0x2009, 0x0032, 0x080c, 0x8f53, 0x012e,
-+      0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x2b98, 0x00ce, 0x0804,
-+      0x2b9b, 0x080c, 0x8ed9, 0x0cb0, 0x6830, 0x9086, 0x0100, 0x0904,
-+      0x2b98, 0x0804, 0x2b68, 0x2061, 0x1354, 0x0126, 0x2091, 0x8000,
-+      0x6000, 0xd084, 0x0168, 0x6104, 0x6208, 0x2a60, 0x634c, 0x606c,
-+      0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x2b68,
-+      0x900e, 0x2110, 0x0c90, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4,
-+      0x0904, 0x2b98, 0x0126, 0x2091, 0x8000, 0x624c, 0x606c, 0x9202,
-+      0x0248, 0x9085, 0x0001, 0x080c, 0x1fad, 0x080c, 0x49f2, 0x012e,
-+      0x0804, 0x2b68, 0x012e, 0x0804, 0x2b9b, 0x0006, 0x0016, 0x00c6,
-+      0x00e6, 0x2001, 0x12e1, 0x2070, 0x2061, 0x1152, 0x6008, 0x2072,
-+      0x900e, 0x2011, 0x1400, 0x080c, 0x73f0, 0x7206, 0x00ee, 0x00ce,
-+      0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128,
-+      0x012e, 0x2021, 0x400b, 0x0804, 0x2b6a, 0x7884, 0xd0fc, 0x0148,
-+      0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x02a8, 0x012e, 0x0804,
-+      0x2b9b, 0x2001, 0x002a, 0x2004, 0x2069, 0x1152, 0x6908, 0x9102,
-+      0x1218, 0x012e, 0x0804, 0x2b9b, 0x614c, 0x606c, 0x9106, 0x0118,
-+      0x012e, 0x0804, 0x2b98, 0x60d8, 0xd0ac, 0x0dd0, 0x7884, 0xd0fc,
-+      0x0904, 0x30fd, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x0d88, 0x6867,
-+      0x0000, 0x7884, 0x680a, 0x7898, 0x680e, 0x789c, 0x6812, 0x2001,
-+      0x002e, 0x2004, 0x681a, 0x2001, 0x002f, 0x2004, 0x681e, 0x2001,
-+      0x0030, 0x2004, 0x6822, 0x2001, 0x0031, 0x2004, 0x6826, 0x2001,
-+      0x0034, 0x2004, 0x682a, 0x2001, 0x0035, 0x2004, 0x682e, 0x2001,
-+      0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0x6816,
-+      0x080c, 0x3262, 0x0928, 0x7010, 0x2068, 0x6d2c, 0x6c28, 0x6b1c,
-+      0x6a18, 0x6930, 0x6808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,
-+      0x0000, 0x9d80, 0x001b, 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b,
-+      0x31c0, 0x701f, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086, 0x0096,
-+      0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x306d,
-+      0x2001, 0x12d9, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100,
-+      0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012,
-+      0x080c, 0x32d2, 0x080c, 0x3290, 0x00f6, 0x00e6, 0x00c6, 0x2d60,
-+      0x2071, 0x134a, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884,
-+      0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034,
-+      0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x360c, 0x00ce,
-+      0x00ee, 0x00fe, 0x080c, 0x3542, 0x080c, 0x3472, 0x05b8, 0x2001,
-+      0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x3634, 0x00f6,
-+      0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560, 0x2071,
-+      0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086, 0x3200,
-+      0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086, 0xe100,
-+      0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c, 0x9106,
-+      0x1190, 0x2001, 0x111e, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061,
-+      0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x347c,
-+      0x080c, 0x328b, 0x0058, 0x080c, 0x328b, 0x080c, 0x35a4, 0x080c,
-+      0x3538, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a,
-+      0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x6106,
-+      0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108,
-+      0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102,
-+      0x080c, 0x10cf, 0x2009, 0x0028, 0x080c, 0x1b67, 0x2001, 0x0227,
-+      0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
-+      0x009e, 0x008e, 0x004e, 0x2001, 0x12d9, 0x2004, 0x9005, 0x1118,
-+      0x012e, 0x0804, 0x2b68, 0x012e, 0x2021, 0x400c, 0x0804, 0x2b6a,
-+      0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x00d6, 0x0156,
-+      0x7010, 0x2068, 0x701c, 0x20a8, 0x8000, 0x701e, 0x6804, 0x9005,
-+      0x05d0, 0x2068, 0x1f04, 0x31ce, 0x2061, 0x11ea, 0x6228, 0x632c,
-+      0x6430, 0x6534, 0x6930, 0x6808, 0xd0b4, 0x1120, 0x2029, 0x0000,
-+      0x2021, 0x0000, 0x00d6, 0x7010, 0x2068, 0x6864, 0x00de, 0x9086,
-+      0x0103, 0x0148, 0x9d80, 0x001b, 0x2039, 0x0001, 0x080c, 0x3f0c,
-+      0x701b, 0x31c0, 0x0078, 0x9d80, 0x001b, 0x21a8, 0x20a0, 0x2098,
-+      0x0006, 0x080c, 0x504f, 0x000e, 0x2039, 0x0001, 0x080c, 0x3f0f,
-+      0x701b, 0x31c0, 0x015e, 0x00de, 0x007e, 0x005e, 0x004e, 0x003e,
-+      0x002e, 0x001e, 0x0005, 0x7010, 0x2068, 0x6864, 0x9086, 0x0103,
-+      0x1118, 0x701b, 0x3260, 0x0410, 0x7010, 0x2068, 0x6868, 0xc0fd,
-+      0x686a, 0x2009, 0x007f, 0x080c, 0x55b3, 0x0110, 0x9006, 0x0010,
-+      0x080c, 0xadbf, 0x015e, 0x00de, 0x007e, 0x005e, 0x004e, 0x003e,
-+      0x002e, 0x001e, 0x0904, 0x2b98, 0x0016, 0x0026, 0x0036, 0x0046,
-+      0x0056, 0x0076, 0x00d6, 0x0156, 0x701b, 0x3239, 0x7007, 0x0003,
-+      0x0848, 0x0076, 0x6830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904,
-+      0x2b6a, 0x6d10, 0x6c0c, 0x6b24, 0x6a20, 0x6930, 0x6808, 0xd0b4,
-+      0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x9d80, 0x001b, 0x21a8,
-+      0x20a0, 0x2098, 0x0006, 0x080c, 0x504f, 0x000e, 0x2039, 0x0001,
-+      0x080c, 0x3f0f, 0x007e, 0x701b, 0x31c0, 0x701f, 0x0001, 0x0005,
-+      0x0804, 0x2b68, 0x0156, 0x00c6, 0x6814, 0x908a, 0x001e, 0x0218,
-+      0x6833, 0x001e, 0x0010, 0x6832, 0x0078, 0x81ff, 0x0168, 0x0016,
-+      0x080c, 0x3eb9, 0x001e, 0x0130, 0x6800, 0x2060, 0x6008, 0x680a,
-+      0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e,
-+      0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044,
-+      0x00fe, 0x000e, 0x0005, 0x2001, 0x12d9, 0x2003, 0x0001, 0x0005,
-+      0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x12e2, 0x2004,
-+      0x601a, 0x2061, 0x0100, 0x2001, 0x12e1, 0x2004, 0x60ce, 0x6104,
-+      0xc1ac, 0x6106, 0x080c, 0x3eb9, 0x6813, 0x0019, 0x2070, 0x6817,
-+      0x0001, 0x2d00, 0x685a, 0x2001, 0x002e, 0x2004, 0x2072, 0x2001,
-+      0x002f, 0x2004, 0x7006, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001,
-+      0x12e1, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x1b67, 0x2001,
-+      0x002a, 0x2004, 0x9084, 0xfff8, 0x700a, 0x601a, 0x700f, 0x0000,
-+      0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee,
-+      0x00fe, 0x0005, 0x00e6, 0x080c, 0x3eb9, 0x2d60, 0x6013, 0x0019,
-+      0x2070, 0x6017, 0x0001, 0x2c00, 0x605a, 0x2001, 0x0030, 0x2004,
-+      0x2072, 0x2001, 0x0031, 0x2004, 0x7006, 0x2001, 0x002a, 0x2004,
-+      0x9084, 0xfff8, 0x700a, 0x700f, 0x0000, 0x2001, 0x032a, 0x2003,
-+      0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003,
-+      0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2338,
-+      0x1130, 0x9006, 0x080c, 0x2290, 0x9006, 0x080c, 0x2273, 0x7884,
-+      0x9084, 0x0007, 0x0002, 0x331e, 0x3327, 0x3330, 0x331b, 0x331b,
-+      0x331b, 0x331b, 0x331b, 0x012e, 0x0804, 0x2b9b, 0x2009, 0x0114,
-+      0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x349a, 0x0080, 0x2009,
-+      0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x349a, 0x0038,
-+      0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x2b6a, 0x0086,
-+      0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
-+      0x306d, 0x2009, 0x0101, 0x210c, 0x0016, 0x2001, 0x0032, 0x2034,
-+      0x2001, 0x0033, 0x202c, 0x9006, 0x2048, 0x2050, 0x2058, 0x080c,
-+      0x3700, 0x080c, 0x3660, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x00c6,
-+      0x2d60, 0x2071, 0x134a, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
-+      0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001,
-+      0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x360c,
-+      0x080c, 0x360c, 0x00ce, 0x00ee, 0x00fe, 0x080c, 0x3542, 0x00f6,
-+      0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201,
-+      0x200c, 0x81ff, 0x0150, 0x080c, 0x3520, 0x2900, 0x9a05, 0x9b05,
-+      0x0120, 0x080c, 0x347c, 0x0804, 0x342b, 0x080c, 0x3634, 0x080c,
-+      0x35a4, 0x080c, 0x3503, 0x080c, 0x3538, 0x00f6, 0x2079, 0x0100,
-+      0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x347c, 0x00fe, 0x0804,
-+      0x342b, 0x00fe, 0x080c, 0x3472, 0x1150, 0x8948, 0x2001, 0x0032,
-+      0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x347c, 0x0080, 0x87ff,
-+      0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038,
-+      0x2001, 0x1347, 0x2004, 0x9086, 0x0000, 0x1904, 0x3377, 0x2001,
-+      0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605,
-+      0x0904, 0x342b, 0x7884, 0xd0bc, 0x0128, 0x2900, 0x9a05, 0x9b05,
-+      0x1904, 0x342b, 0x6013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004,
-+      0x7884, 0xd0ac, 0x1148, 0x2001, 0x1347, 0x2003, 0x0003, 0x2001,
-+      0x032a, 0x2003, 0x0009, 0x0040, 0x6017, 0x0001, 0x2001, 0x002d,
-+      0x2004, 0x9005, 0x0108, 0x6016, 0x2c00, 0x605a, 0x2009, 0x0040,
-+      0x080c, 0x1b67, 0x2d00, 0x685a, 0x6813, 0x0019, 0x7884, 0xd0a4,
-+      0x1180, 0x6817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090,
-+      0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3400, 0x00ce,
-+      0x0040, 0x6817, 0x0001, 0x2001, 0x002c, 0x2004, 0x9005, 0x0108,
-+      0x6816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827,
-+      0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,
-+      0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce,
-+      0x00fe, 0x0804, 0x3355, 0x001e, 0x2001, 0x032a, 0x2003, 0x0004,
-+      0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013,
-+      0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c,
-+      0x10cf, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009,
-+      0x0028, 0x080c, 0x1b67, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050,
-+      0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043,
-+      0x0090, 0x6043, 0x0010, 0x2908, 0x2a10, 0x2b18, 0x2b00, 0x9a05,
-+      0x9905, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-+      0x008e, 0x1118, 0x012e, 0x0804, 0x2b68, 0x012e, 0x2021, 0x400c,
-+      0x0804, 0x2b6a, 0x9085, 0x0001, 0x1d04, 0x347b, 0x2091, 0x6000,
-+      0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
-+      0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x009a, 0x2003, 0x0004,
-+      0x2001, 0x1347, 0x2003, 0x0000, 0x2001, 0x134a, 0x2003, 0x0000,
-+      0x2009, 0x0048, 0x080c, 0x1b67, 0x2001, 0x0227, 0x2024, 0x2402,
-+      0x9026, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1116, 0x200c,
-+      0x7932, 0x7936, 0x080c, 0x1f8d, 0x7850, 0x9084, 0xfbff, 0x9085,
-+      0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf,
-+      0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x34b5, 0x2091,
-+      0x6000, 0x1f04, 0x34b5, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff,
-+      0x7852, 0x2001, 0x0021, 0x2004, 0x9084, 0x0003, 0x9086, 0x0001,
-+      0x1120, 0x7850, 0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843,
-+      0x0090, 0x7843, 0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x34d5,
-+      0x7850, 0x9085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001,
-+      0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850,
-+      0x9085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001,
-+      0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2401, 0x7827,
-+      0x0020, 0x7843, 0x0000, 0x2001, 0x0000, 0x080c, 0x2401, 0x7827,
-+      0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6,
-+      0x2071, 0x1347, 0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005,
-+      0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108,
-+      0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005,
-+      0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178,
-+      0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108,
-+      0x8a50, 0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108, 0x8b58, 0x0005,
-+      0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050,
-+      0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0x12e2, 0x2004,
-+      0x70e2, 0x080c, 0x3281, 0x1188, 0x2001, 0x111e, 0x2004, 0x2009,
-+      0x111d, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d,
-+      0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002,
-+      0x702e, 0x2009, 0x1116, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166,
-+      0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078,
-+      0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa,
-+      0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af,
-+      0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x080c,
-+      0x3634, 0x00f6, 0x2071, 0x1347, 0x2079, 0x0320, 0x00d6, 0x2069,
-+      0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a,
-+      0x00de, 0x2011, 0x0011, 0x080c, 0x360c, 0x2011, 0x0001, 0x080c,
-+      0x360c, 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1347,
-+      0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3609, 0x782b, 0x0002,
-+      0x9026, 0xd19c, 0x1904, 0x3605, 0x7000, 0x0002, 0x3609, 0x35ba,
-+      0x35ea, 0x3605, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002,
-+      0x2011, 0x0001, 0x080c, 0x360c, 0x0904, 0x3609, 0x080c, 0x360c,
-+      0x0804, 0x3609, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe,
-+      0x7810, 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201,
-+      0x200c, 0x81ff, 0x0de8, 0x080c, 0x3520, 0x2009, 0x0001, 0x00f6,
-+      0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011,
-+      0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c,
-+      0xd0fc, 0x1904, 0x35ae, 0x2011, 0x0001, 0x00b1, 0x0090, 0x6010,
-+      0x9092, 0x0004, 0x9086, 0x0015, 0x1120, 0x6000, 0x605a, 0x2011,
-+      0x0031, 0x6212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003,
-+      0x0000, 0x00ee, 0x00fe, 0x0005, 0x6014, 0x9005, 0x0520, 0x8001,
-+      0x6016, 0x6058, 0x6110, 0x9140, 0x2804, 0x7802, 0x8840, 0x2804,
-+      0x7806, 0x8840, 0x2804, 0x7812, 0x8840, 0x2804, 0x7816, 0x8840,
-+      0x7a2a, 0x7000, 0x8000, 0x7002, 0x6058, 0x9802, 0x908a, 0x0029,
-+      0x1138, 0x6058, 0x9080, 0x0001, 0x2004, 0x605a, 0x2001, 0x0019,
-+      0x6012, 0x9085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2071,
-+      0x134a, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01f0, 0x782b, 0x0002,
-+      0x2d60, 0x9026, 0x7000, 0x0002, 0x365c, 0x3647, 0x3653, 0x8001,
-+      0x7002, 0xd19c, 0x1188, 0x2011, 0x0001, 0x080c, 0x360c, 0x0160,
-+      0x080c, 0x360c, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d30,
-+      0x2011, 0x0001, 0x080c, 0x360c, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-+      0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x12e2, 0x2004,
-+      0x601a, 0x2061, 0x0100, 0x2001, 0x12e1, 0x2004, 0x60ce, 0x6104,
-+      0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x01f8, 0x2038,
-+      0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x3eb9,
-+      0x6813, 0x0019, 0x6f16, 0x2d00, 0x685a, 0x978a, 0x0007, 0x0220,
-+      0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x6858, 0x9080,
-+      0x0019, 0x04c1, 0x1d90, 0x2d00, 0x685a, 0x0088, 0x080c, 0x3eb9,
-+      0x6813, 0x0019, 0x2070, 0x6817, 0x0001, 0x2d00, 0x685a, 0x2001,
-+      0x002e, 0x2004, 0x2072, 0x2001, 0x002f, 0x2004, 0x7006, 0x2061,
-+      0x0090, 0x2079, 0x0100, 0x2001, 0x12e1, 0x2004, 0x6036, 0x2009,
-+      0x0040, 0x080c, 0x1b67, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
-+      0x700a, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x700e, 0x601e,
-+      0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee,
-+      0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0x20e9, 0x0001, 0x20a0,
-+      0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306,
-+      0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112,
-+      0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b,
-+      0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0180, 0x00c6, 0x00d6,
-+      0x2d60, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x6058, 0x2070, 0x2d00,
-+      0x7006, 0x605a, 0x00de, 0x00ce, 0x9085, 0x0001, 0x00ee, 0x0005,
-+      0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0508, 0x2038, 0x2001,
-+      0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x3eb9, 0x2d60,
-+      0x6813, 0x0019, 0x6f16, 0x2d00, 0x685a, 0x978a, 0x0007, 0x0220,
-+      0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x6858, 0x9080,
-+      0x0019, 0x080c, 0x36ca, 0x1d88, 0x2d00, 0x685a, 0x00e0, 0x080c,
-+      0x3eb9, 0x2d60, 0x6013, 0x0019, 0x2070, 0x6017, 0x0001, 0x2c00,
-+      0x605a, 0x2001, 0x0030, 0x2004, 0x2072, 0x2001, 0x0031, 0x2004,
-+      0x7006, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x700a, 0x2001,
-+      0x002b, 0x2004, 0x700e, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884,
-+      0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d, 0x0200, 0x2102,
-+      0x6017, 0x0000, 0x2001, 0x1347, 0x2003, 0x0003, 0x2001, 0x032a,
-+      0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d,
-+      0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102,
-+      0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0012, 0x2001,
-+      0x1140, 0x20e9, 0x0001, 0x20a0, 0x9006, 0x4004, 0x2009, 0x013c,
-+      0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, 0x0804,
-+      0x2b68, 0x7d98, 0x7c9c, 0x0804, 0x2c5d, 0x080c, 0x62e4, 0x0110,
-+      0x080c, 0x50b9, 0x2069, 0x1152, 0x2d00, 0x2009, 0x0030, 0x7a8c,
-+      0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b,
-+      0x379a, 0x0005, 0x2001, 0x110d, 0x2004, 0xd0b4, 0x1130, 0x3b00,
-+      0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1152, 0x6800,
-+      0x9005, 0x0904, 0x2b9b, 0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904,
-+      0x2b9b, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200,
-+      0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020,
-+      0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118,
-+      0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084,
-+      0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x2b9b, 0x9288, 0x298c,
-+      0x210d, 0x918c, 0x00ff, 0x615e, 0xd0dc, 0x0130, 0x6828, 0x908a,
-+      0x007f, 0x1a04, 0x2b9b, 0x6056, 0x6888, 0x9084, 0x0030, 0x8004,
-+      0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x12e8, 0x9080, 0x2081,
-+      0x2005, 0x200a, 0x000e, 0x2009, 0x12e9, 0x9080, 0x2085, 0x2005,
-+      0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x2b9b, 0x908a, 0x0841,
-+      0x1a04, 0x2b9b, 0x9084, 0x0007, 0x1904, 0x2b9b, 0x680c, 0x9005,
-+      0x0904, 0x2b9b, 0x6810, 0x9005, 0x0904, 0x2b9b, 0x6848, 0x6940,
-+      0x910a, 0x1a04, 0x2b9b, 0x8001, 0x0904, 0x2b9b, 0x684c, 0x6944,
-+      0x910a, 0x1a04, 0x2b9b, 0x8001, 0x0904, 0x2b9b, 0x6980, 0xd1e4,
-+      0x0140, 0x00c6, 0x2061, 0x0100, 0x6004, 0x9085, 0x0100, 0x6006,
-+      0x00ce, 0x2009, 0x12bb, 0x200b, 0x0000, 0x2001, 0x1174, 0x2004,
-+      0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f, 0x200a, 0x3b00,
-+      0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff, 0x6146, 0x8007, 0x9084,
-+      0x00ff, 0x604a, 0x080c, 0x65bd, 0x080c, 0x58f4, 0x080c, 0x5946,
-+      0x6808, 0x602a, 0x080c, 0x1a81, 0x2009, 0x0170, 0x200b, 0x0080,
-+      0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x1fe8,
-+      0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x393a, 0x6818, 0x691c,
-+      0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a,
-+      0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38,
-+      0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff,
-+      0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f,
-+      0x20a9, 0x0004, 0x20a1, 0x12ea, 0x20e9, 0x0001, 0x4001, 0x080c,
-+      0x72cb, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510,
-+      0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d,
-+      0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x6b21,
-+      0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a,
-+      0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010,
-+      0x6003, 0x0001, 0x1f04, 0x3891, 0x00ce, 0x00c6, 0x2061, 0x12d6,
-+      0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063,
-+      0x0000, 0x2001, 0x0001, 0x080c, 0x2290, 0x2001, 0x0001, 0x080c,
-+      0x2273, 0x0090, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006,
-+      0x080c, 0x2290, 0x9006, 0x080c, 0x2273, 0x0030, 0x9286, 0x8000,
-+      0x1d30, 0x2063, 0x0002, 0x0c98, 0x00ce, 0x6888, 0xd0ec, 0x0130,
-+      0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284,
-+      0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020,
-+      0x6a82, 0x2001, 0x12a7, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000,
-+      0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003,
-+      0xaaaa, 0x080c, 0x205d, 0x2001, 0x1298, 0x2102, 0x0008, 0x2102,
-+      0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce,
-+      0x080c, 0x62e4, 0x0128, 0x080c, 0x41f5, 0x0110, 0x080c, 0x1fad,
-+      0x60d0, 0x9005, 0x01d0, 0x6003, 0x0001, 0x2009, 0x3920, 0x00e0,
-+      0x080c, 0x62e4, 0x1178, 0x2011, 0x61aa, 0x080c, 0x71fa, 0x2011,
-+      0x619d, 0x080c, 0x72bf, 0x2001, 0x12a8, 0x2003, 0x0000, 0x080c,
-+      0x621a, 0x0040, 0x080c, 0x4faa, 0x0028, 0x6003, 0x0004, 0x2009,
-+      0x393a, 0x0010, 0x0804, 0x2b68, 0x2001, 0x0170, 0x2004, 0x9084,
-+      0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091,
-+      0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x2b98, 0x2069,
-+      0x1152, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030,
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x3f0f,
-+      0x9006, 0x080c, 0x1fad, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4,
-+      0x1188, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003,
-+      0x0001, 0x080c, 0x2987, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,
-+      0x621a, 0x0020, 0x080c, 0x50b9, 0x080c, 0x4faa, 0x0804, 0x2b68,
-+      0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4, 0x1110, 0x0804, 0x2b98,
-+      0x618c, 0x81ff, 0x01a8, 0x7047, 0x0000, 0x2001, 0x1580, 0x2009,
-+      0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000,
-+      0x2039, 0x0001, 0x080c, 0x3f0f, 0x701b, 0x2b66, 0x012e, 0x0005,
-+      0x7047, 0x0001, 0x00d6, 0x2069, 0x1580, 0x20a9, 0x0040, 0x20e9,
-+      0x0001, 0x20a1, 0x1580, 0x2019, 0xffff, 0x4304, 0x6554, 0x9588,
-+      0x298c, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
-+      0x2100, 0x9506, 0x01a8, 0x080c, 0x5608, 0x1190, 0x6014, 0x821c,
-+      0x0238, 0x9398, 0x1580, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
-+      0x9398, 0x1580, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
-+      0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
-+      0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1580, 0x2099,
-+      0x1580, 0x080c, 0x504f, 0x0804, 0x398d, 0x080c, 0x3ef0, 0x0904,
-+      0x2b9b, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009, 0x0002,
-+      0x0804, 0x2b98, 0x2001, 0x1153, 0x2004, 0xd0b4, 0x0568, 0x7884,
-+      0x9084, 0xff00, 0x908e, 0x7e00, 0x0538, 0x908e, 0x7f00, 0x0520,
-+      0x908e, 0x8000, 0x0508, 0x080c, 0x2982, 0x1148, 0x6000, 0xd08c,
-+      0x11d8, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0x6867,
-+      0x0000, 0x6868, 0xc0fd, 0x686a, 0x080c, 0xaabe, 0x1120, 0x2009,
-+      0x0003, 0x0804, 0x2b98, 0x7007, 0x0003, 0x701b, 0x3a20, 0x0005,
-+      0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x20a9, 0x002b, 0x20e1, 0x0001,
-+      0x2c98, 0x9de8, 0x0002, 0x20e9, 0x0001, 0x2da0, 0x4003, 0x20a9,
-+      0x0004, 0x9d80, 0x0006, 0x20a0, 0x9c80, 0x0006, 0x2098, 0x080c,
-+      0x504f, 0x20a9, 0x0004, 0x9d80, 0x000a, 0x20a0, 0x9c80, 0x000a,
-+      0x2098, 0x080c, 0x504f, 0x2d00, 0x2039, 0x0001, 0x2009, 0x002b,
-+      0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x3f0f, 0x81ff, 0x1904,
-+      0x2b98, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c, 0x5767, 0x0804,
-+      0x2b68, 0x81ff, 0x1904, 0x2b98, 0x7888, 0x908a, 0x1000, 0x1a04,
-+      0x2b9b, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x080c, 0x57a6, 0x0904,
-+      0x2b98, 0x2019, 0x0004, 0x900e, 0x080c, 0x5779, 0x7984, 0x810f,
-+      0x7a88, 0x0491, 0x0804, 0x2b68, 0x00f6, 0x2d78, 0x789c, 0x908a,
-+      0x1000, 0x12c0, 0x080c, 0x3eee, 0x01a8, 0x080c, 0x57a6, 0x2009,
-+      0x0002, 0x0160, 0x2019, 0x0004, 0x080c, 0x5779, 0x2009, 0x0003,
-+      0x0128, 0x7998, 0x7a9c, 0x810f, 0x00b9, 0x0070, 0x7897, 0x4005,
-+      0x799a, 0x0010, 0x7897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
-+      0x0030, 0x2f68, 0x00fe, 0x0005, 0x7897, 0x4000, 0x900e, 0x9085,
-+      0x0001, 0x2f68, 0x00fe, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071,
-+      0x0060, 0x2029, 0x007e, 0x2061, 0x1100, 0x6454, 0x2400, 0x9506,
-+      0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x5608,
-+      0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x7206,
-+      0x0005, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x3ece, 0x0904, 0x2b9b,
-+      0x080c, 0x56ca, 0x0904, 0x2b98, 0x080c, 0x5770, 0x0804, 0x2b68,
-+      0x81ff, 0x1904, 0x2b98, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c,
-+      0x56ca, 0x0904, 0x2b98, 0x080c, 0x575e, 0x0804, 0x2b68, 0x6100,
-+      0x0804, 0x2b68, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x2001, 0x1100,
-+      0x2004, 0x9086, 0x0003, 0x1904, 0x2b98, 0x00d6, 0x9ce8, 0x000a,
-+      0x7984, 0xd184, 0x0110, 0x9ce8, 0x0006, 0x680c, 0x8007, 0x789e,
-+      0x6808, 0x8007, 0x789a, 0x6b04, 0x831f, 0x6a00, 0x8217, 0x00de,
-+      0x6100, 0x918c, 0x0200, 0x0804, 0x2b68, 0x7884, 0x909c, 0x007f,
-+      0x939a, 0x0003, 0x1a04, 0x2b98, 0x6254, 0x9294, 0x00ff, 0x9084,
-+      0xff00, 0x8007, 0x9206, 0x1560, 0x2031, 0x1148, 0x2009, 0x013c,
-+      0x2136, 0x2001, 0x1140, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
-+      0x7d98, 0x2039, 0x0001, 0x0006, 0x7884, 0x9084, 0x0080, 0x1118,
-+      0x000e, 0x0804, 0x3f0f, 0x000e, 0x2031, 0x0000, 0x2061, 0x11ea,
-+      0x6606, 0x6116, 0x670e, 0x6012, 0x622a, 0x632e, 0x6432, 0x6536,
-+      0x2c10, 0x080c, 0x0f22, 0x7007, 0x0002, 0x701b, 0x3b62, 0x0005,
-+      0x81ff, 0x1904, 0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x6004,
-+      0x9084, 0x00ff, 0x9086, 0x0006, 0x1904, 0x2b98, 0x00c6, 0x080c,
-+      0x3eb9, 0x00ce, 0x0904, 0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd,
-+      0x686a, 0x080c, 0xaa65, 0x0904, 0x2b98, 0x7007, 0x0003, 0x701b,
-+      0x3b66, 0x0005, 0x080c, 0x376a, 0x0804, 0x2b68, 0x6830, 0x9086,
-+      0x0100, 0x0904, 0x2b98, 0x9d80, 0x001b, 0x2009, 0x000c, 0x7a8c,
-+      0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x3f0f, 0x9006,
-+      0x080c, 0x1fad, 0x7884, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118,
-+      0x81ff, 0x1904, 0x2b98, 0x080c, 0x62e4, 0x0110, 0x080c, 0x50b9,
-+      0x7888, 0x908a, 0x1000, 0x1a04, 0x2b9b, 0x7984, 0x918c, 0xff00,
-+      0x810f, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x2b9b,
-+      0x2100, 0x080c, 0x1f77, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
-+      0x2061, 0x1317, 0x601b, 0x0000, 0x601f, 0x0000, 0x080c, 0x62e4,
-+      0x1178, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003,
-+      0x0001, 0x9085, 0x0001, 0x080c, 0x6331, 0x080c, 0x621a, 0x0438,
-+      0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+      0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x2061,
-+      0x0100, 0x2001, 0x1116, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105,
-+      0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x12d3, 0x200b,
-+      0x0000, 0x2009, 0x002d, 0x2011, 0x4fe1, 0x080c, 0x7283, 0x7984,
-+      0x918c, 0xff00, 0x810f, 0x080c, 0x62e4, 0x1110, 0x2009, 0x00ff,
-+      0x7a88, 0x080c, 0x3aa4, 0x012e, 0x00ce, 0x002e, 0x0804, 0x2b68,
-+      0x7984, 0x918c, 0xff00, 0x810f, 0x00c6, 0x080c, 0x55b3, 0x2c08,
-+      0x00ce, 0x1904, 0x2b9b, 0x0804, 0x2b68, 0x81ff, 0x0120, 0x2009,
-+      0x0001, 0x0804, 0x2b98, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120,
-+      0x2009, 0x0005, 0x0804, 0x2b98, 0x080c, 0x3eb9, 0x1120, 0x2009,
-+      0x0002, 0x0804, 0x2b98, 0x7984, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-+      0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b, 0x3c1f, 0x0005, 0x2009,
-+      0x0080, 0x080c, 0x5608, 0x1130, 0x6004, 0x9084, 0x00ff, 0x9086,
-+      0x0006, 0x0120, 0x2021, 0x400a, 0x0804, 0x2b6a, 0x00d6, 0x9de8,
-+      0x0019, 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820,
-+      0x90be, 0x0100, 0x0904, 0x3c99, 0x90be, 0x0112, 0x0904, 0x3c99,
-+      0x90be, 0x0113, 0x0904, 0x3c99, 0x90be, 0x0114, 0x0904, 0x3c99,
-+      0x90be, 0x0117, 0x0904, 0x3c99, 0x90be, 0x011a, 0x0904, 0x3c99,
-+      0x90be, 0x011c, 0x0904, 0x3c99, 0x90be, 0x0121, 0x05c8, 0x90be,
-+      0x0131, 0x05b0, 0x90be, 0x0171, 0x05e0, 0x90be, 0x0173, 0x05c8,
-+      0x90be, 0x01a1, 0x1120, 0x6830, 0x8007, 0x6832, 0x04b8, 0x90be,
-+      0x0212, 0x0558, 0x90be, 0x0213, 0x0540, 0x90be, 0x0214, 0x01c8,
-+      0x90be, 0x0217, 0x0180, 0x90be, 0x021a, 0x1120, 0x6838, 0x8007,
-+      0x683a, 0x00f8, 0x90be, 0x021f, 0x01e0, 0x90be, 0x0300, 0x01c8,
-+      0x00de, 0x0804, 0x2b9b, 0x9d80, 0x0010, 0x20a9, 0x0007, 0x080c,
-+      0x3cda, 0x9d80, 0x000e, 0x20a9, 0x0001, 0x080c, 0x3cda, 0x0048,
-+      0x9d80, 0x000c, 0x080c, 0x3ce8, 0x0048, 0x9d80, 0x000e, 0x080c,
-+      0x3ce8, 0x9d80, 0x000c, 0x20a9, 0x0001, 0x04e1, 0x00c6, 0x080c,
-+      0x3eb9, 0x0548, 0x6868, 0xc0fd, 0x686a, 0x6867, 0x0119, 0x9006,
-+      0x6882, 0x687f, 0x0020, 0x688b, 0x0001, 0x810b, 0x69ae, 0x68b2,
-+      0x6ab6, 0x6bba, 0x6cbe, 0x6dc2, 0x69c6, 0x68ca, 0x00ce, 0x00de,
-+      0x6866, 0x6822, 0x6868, 0xc0fd, 0x686a, 0x6804, 0x2068, 0x080c,
-+      0xaa81, 0x1120, 0x2009, 0x0003, 0x0804, 0x2b98, 0x7007, 0x0003,
-+      0x701b, 0x3cd1, 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002, 0x0804,
-+      0x2b98, 0x6820, 0x9086, 0x8001, 0x1904, 0x2b68, 0x2009, 0x0004,
-+      0x0804, 0x2b98, 0x0016, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000,
-+      0x290a, 0x8108, 0x280a, 0x8108, 0x1f04, 0x3cdc, 0x001e, 0x0005,
-+      0x0016, 0x00a6, 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000,
-+      0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a,
-+      0x8108, 0x280a, 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120,
-+      0x2009, 0x0001, 0x0804, 0x2b98, 0x60d8, 0xd0ac, 0x1130, 0xd09c,
-+      0x1120, 0x2009, 0x0005, 0x0804, 0x2b98, 0x7984, 0x2140, 0x918c,
-+      0xff00, 0x810f, 0x60d8, 0xd0ac, 0x1120, 0x9182, 0x0080, 0x0a04,
-+      0x2b9b, 0x9182, 0x00ff, 0x1a04, 0x2b9b, 0x7a8c, 0x7b88, 0x6074,
-+      0x9306, 0x1140, 0x6078, 0x924e, 0x0904, 0x2b9b, 0x99cc, 0xff00,
-+      0x0904, 0x2b9b, 0x00c6, 0x080c, 0x3dc2, 0x2c68, 0x00ce, 0x0530,
-+      0x90c6, 0x4000, 0x1178, 0x00c6, 0x0006, 0x2d60, 0x900e, 0x080c,
-+      0x57d6, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d, 0x000e,
-+      0x00ce, 0x0088, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0060, 0x90c6,
-+      0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0x90c6, 0x4009, 0x1108,
-+      0x0010, 0x2001, 0x4006, 0x2020, 0x0804, 0x2b6a, 0x2d00, 0x7022,
-+      0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x8f26, 0x05c0,
-+      0x2d00, 0x6012, 0x080c, 0xad70, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
-+      0x080c, 0x3eb9, 0x00ce, 0x2b70, 0x1150, 0x080c, 0x8ed9, 0x00ee,
-+      0x00ce, 0x00be, 0x001e, 0x2009, 0x0002, 0x0804, 0x2b98, 0x900e,
-+      0x6966, 0x696a, 0x2d00, 0x6016, 0x6932, 0x6868, 0xc0fd, 0xd88c,
-+      0x0108, 0xc0f5, 0x686a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2862,
-+      0x012e, 0x6023, 0x0001, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002,
-+      0x080c, 0x5568, 0x2009, 0x0002, 0x080c, 0x8f53, 0x9085, 0x0001,
-+      0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120, 0x2009, 0x0003, 0x0804,
-+      0x2b98, 0x7007, 0x0003, 0x701b, 0x3da6, 0x0005, 0x6830, 0x9086,
-+      0x0100, 0x7020, 0x2060, 0x1138, 0x2009, 0x0004, 0x6204, 0x9294,
-+      0x00ff, 0x0804, 0x47e3, 0x900e, 0x6868, 0xd0f4, 0x1904, 0x2b68,
-+      0x080c, 0x57d6, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d,
-+      0x0804, 0x2b68, 0x00e6, 0x00d6, 0x2029, 0x0000, 0x2001, 0x1136,
-+      0x2004, 0xd0ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, 0x2071,
-+      0x1000, 0x0030, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071, 0x1080,
-+      0x2e04, 0x9005, 0x1130, 0x2100, 0x9406, 0x1570, 0x2428, 0xc5fd,
-+      0x0458, 0x2068, 0x6f10, 0x2700, 0x9306, 0x11b0, 0x6e14, 0x2600,
-+      0x9206, 0x1190, 0x2400, 0x9106, 0x1160, 0x2d60, 0xd884, 0x0568,
-+      0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1538, 0x2001, 0x4000,
-+      0x0428, 0x2001, 0x4007, 0x0410, 0x2400, 0x9106, 0x1168, 0x6e14,
-+      0x87ff, 0x1138, 0x86ff, 0x09d0, 0x2001, 0x1136, 0x2004, 0xd0ac,
-+      0x19a8, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x3dd8,
-+      0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
-+      0x080c, 0x55b3, 0x1dd0, 0x6312, 0x6216, 0x9006, 0x9005, 0x00de,
-+      0x00ee, 0x0005, 0x81ff, 0x1904, 0x2b98, 0x080c, 0x3eb9, 0x0904,
-+      0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd, 0x686a, 0x7884, 0x9005,
-+      0x0904, 0x2b9b, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04,
-+      0x2b9b, 0x2010, 0x2d18, 0x080c, 0x2811, 0x0904, 0x2b98, 0x7007,
-+      0x0003, 0x701b, 0x3e44, 0x0005, 0x6830, 0x9086, 0x0100, 0x0904,
-+      0x2b98, 0x0804, 0x2b68, 0x7984, 0x918c, 0xff00, 0x810f, 0x60d8,
-+      0xd0ac, 0x1120, 0x9182, 0x0080, 0x0a04, 0x2b9b, 0x9182, 0x00ff,
-+      0x1a04, 0x2b9b, 0x0126, 0x2091, 0x8000, 0x080c, 0xa972, 0x1188,
-+      0x9190, 0x1000, 0x2204, 0x9065, 0x0160, 0x080c, 0x5100, 0x2001,
-+      0x1136, 0x2004, 0xd0ac, 0x0110, 0x6017, 0x0000, 0x012e, 0x0804,
-+      0x2b68, 0x012e, 0x0804, 0x2b98, 0x00f6, 0x2d78, 0x7998, 0x918c,
-+      0xff00, 0x810f, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1118, 0x9182,
-+      0x0080, 0x02e8, 0x9182, 0x00ff, 0x12d0, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0xa972, 0x1530, 0x9190, 0x1000, 0x2204, 0x9065, 0x0528,
-+      0x080c, 0x5100, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x0110, 0x6017,
-+      0x0000, 0x012e, 0x0070, 0x7897, 0x4005, 0x799a, 0x0010, 0x7897,
-+      0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2f68, 0x00fe,
-+      0x0005, 0x7897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2f68, 0x00fe,
-+      0x0005, 0x012e, 0x2009, 0x0003, 0x0c30, 0x012e, 0x2009, 0x000a,
-+      0x0c10, 0x080c, 0x0eb6, 0x0188, 0x9006, 0x6802, 0x7010, 0x9005,
-+      0x1120, 0x2d00, 0x7012, 0x7016, 0x0030, 0x7014, 0x6802, 0x2060,
-+      0x2d00, 0x6006, 0x7016, 0x9d80, 0x0019, 0x0005, 0x7984, 0x810f,
-+      0x918c, 0x00ff, 0x080c, 0x5608, 0x1130, 0x7e88, 0x9684, 0x3fff,
-+      0x9082, 0x4000, 0x0208, 0x9066, 0x8cff, 0x0005, 0x7998, 0x810f,
-+      0x918c, 0x00ff, 0x080c, 0x5608, 0x1130, 0x7e9c, 0x9684, 0x3fff,
-+      0x9082, 0x4000, 0x0208, 0x9066, 0x8cff, 0x0005, 0x7e98, 0x0008,
-+      0x7e84, 0x860f, 0x918c, 0x00ff, 0x080c, 0x5608, 0x1128, 0x96b4,
-+      0x00ff, 0x9682, 0x4000, 0x0208, 0x9066, 0x8cff, 0x0005, 0x0016,
-+      0x7110, 0x81ff, 0x0128, 0x2168, 0x6904, 0x080c, 0x0ecf, 0x0cc8,
-+      0x7112, 0x7116, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031,
-+      0x0000, 0x2061, 0x11ea, 0x6606, 0x6116, 0x670e, 0x6012, 0x622a,
-+      0x632e, 0x6432, 0x6536, 0x2c10, 0x080c, 0x0f22, 0x7007, 0x0002,
-+      0x701b, 0x2b68, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079,
-+      0x0000, 0x2001, 0x11a3, 0x2004, 0x9005, 0x1190, 0x0e04, 0x3f40,
-+      0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080,
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x0804, 0x3f9d,
-+      0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0x1193, 0x703c, 0x9005,
-+      0x1540, 0x7140, 0x9182, 0x0010, 0x0288, 0x7030, 0x2060, 0x080c,
-+      0x0eb6, 0x0904, 0x3f96, 0x684b, 0x0000, 0x2d00, 0x703e, 0x2001,
-+      0x0002, 0x9080, 0x18fe, 0x2005, 0x6846, 0x0098, 0x7030, 0x90e0,
-+      0x0004, 0x2001, 0x11aa, 0x9c82, 0x11ea, 0x0210, 0x2061, 0x11aa,
-+      0x2c00, 0x7032, 0x7140, 0x81ff, 0x1108, 0x7036, 0x8108, 0x7142,
-+      0x0428, 0x7140, 0x8108, 0x7142, 0x703c, 0x2078, 0x7944, 0x2105,
-+      0x9f60, 0x8108, 0x2105, 0x9005, 0x7946, 0x11c0, 0x080c, 0x0eb6,
-+      0x1130, 0x8109, 0x7946, 0x7140, 0x8109, 0x7142, 0x0078, 0x9006,
-+      0x6806, 0x684a, 0x7846, 0x2f00, 0x6802, 0x2d00, 0x7806, 0x703e,
-+      0x2001, 0x0002, 0x9080, 0x18fe, 0x2005, 0x6846, 0x2262, 0x6306,
-+      0x640a, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x012e, 0x00fe, 0x0005,
-+      0x00e6, 0x2071, 0x1193, 0x7040, 0x9005, 0x0904, 0x4024, 0x0126,
-+      0x2091, 0x8000, 0x0e04, 0x4023, 0x00f6, 0x2079, 0x0000, 0x00c6,
-+      0x00d6, 0x0086, 0x9006, 0x2040, 0x7038, 0x2068, 0x9005, 0x01c0,
-+      0x6948, 0x2105, 0x9d60, 0x8108, 0x2105, 0x9005, 0x694a, 0x1190,
-+      0x6804, 0x9005, 0x090c, 0x0d7e, 0x703a, 0x2d40, 0x2068, 0x6803,
-+      0x0000, 0x2001, 0x0002, 0x9080, 0x18fe, 0x2005, 0x684a, 0x0010,
-+      0x7034, 0x2060, 0x2c04, 0x7836, 0x7833, 0x0012, 0x7882, 0x6004,
-+      0x7886, 0x6008, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-+      0xd084, 0x190c, 0x0fcd, 0x88ff, 0x0118, 0x2868, 0x080c, 0x0ecf,
-+      0x7040, 0x8001, 0x7042, 0x9005, 0x1170, 0x7038, 0x2068, 0x9005,
-+      0x0128, 0x080c, 0x0ecf, 0x9006, 0x703a, 0x703e, 0x7033, 0x11aa,
-+      0x7037, 0x11aa, 0x0420, 0x7038, 0x9005, 0x1508, 0x7230, 0x2c00,
-+      0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x11ea, 0x0210, 0x2001,
-+      0x11aa, 0x7036, 0x00a0, 0x9006, 0x7036, 0x7032, 0x703c, 0x9005,
-+      0x090c, 0x0d7e, 0x2068, 0x6800, 0x9005, 0x1de0, 0x2d00, 0x703a,
-+      0x2001, 0x0002, 0x9080, 0x18fe, 0x2005, 0x684a, 0x0000, 0x008e,
-+      0x00de, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x0026, 0x2001,
-+      0x1153, 0x2004, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x3f23,
-+      0x002e, 0x0005, 0x81ff, 0x1904, 0x2b98, 0x0126, 0x2091, 0x8000,
-+      0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x62e4, 0x1178,
-+      0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001,
-+      0x9085, 0x0001, 0x080c, 0x6331, 0x080c, 0x621a, 0x0010, 0x080c,
-+      0x4faa, 0x012e, 0x0804, 0x2b68, 0x7884, 0x2008, 0x918c, 0xfffd,
-+      0x1128, 0x61e4, 0x910d, 0x61e6, 0x0804, 0x2b68, 0x0804, 0x2b9b,
-+      0x81ff, 0x1904, 0x2b98, 0x6000, 0x9086, 0x0003, 0x1904, 0x2b98,
-+      0x080c, 0x58c6, 0x1904, 0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b,
-+      0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1120, 0x7888, 0x9005,
-+      0x0904, 0x2b68, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x0904, 0x2b98,
-+      0x9006, 0x6866, 0x6832, 0x6868, 0xc0fd, 0x686a, 0x080c, 0xab41,
-+      0x0904, 0x2b98, 0x7007, 0x0003, 0x701b, 0x40ce, 0x0005, 0x00f6,
-+      0x2d78, 0x2061, 0x1100, 0x6000, 0x9086, 0x0003, 0x2009, 0x0007,
-+      0x11d0, 0x080c, 0x58c6, 0x2009, 0x0008, 0x11a8, 0x080c, 0x3eee,
-+      0x01b0, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, 0x789c,
-+      0x9005, 0x01b8, 0x2f68, 0x6868, 0xc0fc, 0x686a, 0x080c, 0xab41,
-+      0x11c8, 0x2009, 0x0003, 0x7897, 0x4005, 0x799a, 0x0010, 0x7897,
-+      0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2f68, 0x00fe,
-+      0x0005, 0x7897, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2f68,
-+      0x00fe, 0x0005, 0x9006, 0x2f68, 0x00fe, 0x0005, 0x6830, 0x9086,
-+      0x0100, 0x1904, 0x2b68, 0x0804, 0x47e3, 0x2001, 0x1100, 0x2004,
-+      0x9086, 0x0003, 0x1904, 0x2b98, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c,
-+      0x7d98, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x900e, 0x2130, 0x7122,
-+      0x712e, 0x9d80, 0x0005, 0x7026, 0x20a0, 0x20e1, 0x0001, 0x20e9,
-+      0x0001, 0x080c, 0x5608, 0x1904, 0x4149, 0x6004, 0x90c4, 0x00ff,
-+      0x98c6, 0x0006, 0x0130, 0x90c4, 0xff00, 0x98c6, 0x0600, 0x1904,
-+      0x4149, 0x080c, 0x58c6, 0x1130, 0x080c, 0x57d6, 0x1118, 0xd79c,
-+      0x0904, 0x4149, 0xd794, 0x1110, 0xd784, 0x0158, 0x9c80, 0x0006,
-+      0x2098, 0x3400, 0x20a9, 0x0004, 0x4003, 0x080c, 0x3ce8, 0xd794,
-+      0x0148, 0x9c80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003,
-+      0x080c, 0x3ce8, 0x21a2, 0x3400, 0x8000, 0x20a0, 0xd794, 0x01d8,
-+      0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003,
-+      0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400,
-+      0x20a9, 0x0002, 0x4003, 0x080c, 0x3cda, 0x9c80, 0x0026, 0x2098,
-+      0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0,
-+      0x0005, 0x8108, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x0118, 0x9186,
-+      0x0100, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0100, 0x0170, 0x0018,
-+      0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010,
-+      0x9686, 0x0028, 0x0150, 0x0804, 0x40ed, 0x86ff, 0x1120, 0x7120,
-+      0x810b, 0x0804, 0x2b68, 0x702f, 0x0001, 0x711e, 0x7020, 0x9600,
-+      0x7022, 0x772a, 0x2061, 0x11ea, 0x6007, 0x0000, 0x6616, 0x7024,
-+      0x600f, 0x0001, 0x6012, 0x622a, 0x632e, 0x6432, 0x6536, 0x2c10,
-+      0x080c, 0x0f22, 0x7007, 0x0002, 0x701b, 0x4187, 0x0005, 0x702c,
-+      0x9005, 0x1168, 0x711c, 0x7024, 0x20a0, 0x7728, 0x9036, 0x2061,
-+      0x11ea, 0x6228, 0x632c, 0x6430, 0x6534, 0x0804, 0x40ed, 0x7120,
-+      0x810b, 0x0804, 0x2b68, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c,
-+      0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x2b9b,
-+      0x9502, 0x0a04, 0x2b9b, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04,
-+      0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9284, 0xff00, 0x8007, 0x90e2,
-+      0x0020, 0x0a04, 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9284, 0x00ff,
-+      0x90e2, 0x0020, 0x0a04, 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9384,
-+      0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x2b9b, 0x9502, 0x0a04,
-+      0x2b9b, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x2b9b, 0x9502,
-+      0x0a04, 0x2b9b, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04,
-+      0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x9484, 0x00ff, 0x90e2, 0x0020,
-+      0x0a04, 0x2b9b, 0x9502, 0x0a04, 0x2b9b, 0x2061, 0x12c3, 0x6102,
-+      0x6206, 0x630a, 0x640e, 0x0804, 0x2b68, 0x0006, 0x2001, 0x1153,
-+      0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001, 0x1172, 0x2004,
-+      0xd0bc, 0x000e, 0x0005, 0x616c, 0x7a84, 0x6300, 0x82ff, 0x1118,
-+      0x7986, 0x0804, 0x2b68, 0x83ff, 0x1904, 0x2b9b, 0x2001, 0xfff0,
-+      0x9200, 0x1a04, 0x2b9b, 0x2019, 0xffff, 0x6070, 0x9302, 0x9200,
-+      0x0a04, 0x2b9b, 0x7986, 0x626e, 0x0804, 0x2b68, 0x2001, 0x1100,
-+      0x2004, 0x9086, 0x0003, 0x1904, 0x2b98, 0x7c88, 0x7d84, 0x7e98,
-+      0x7f8c, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x900e, 0x901e, 0x7322,
-+      0x732e, 0x9d80, 0x0003, 0x7026, 0x20a0, 0x91e0, 0x1000, 0x2c64,
-+      0x8cff, 0x01d8, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0130,
-+      0x6004, 0x9084, 0xff00, 0x9086, 0x0600, 0x1178, 0x00d6, 0x3468,
-+      0x6014, 0x206a, 0x8d68, 0x6010, 0x8007, 0x9105, 0x8007, 0x206a,
-+      0x8d68, 0x2da0, 0x00de, 0x9398, 0x0002, 0x8108, 0x9182, 0x00ff,
-+      0x0120, 0x9386, 0x002a, 0x0148, 0x08c0, 0x83ff, 0x1120, 0x7120,
-+      0x810c, 0x0804, 0x2b68, 0x702f, 0x0001, 0x711e, 0x7020, 0x9300,
-+      0x7022, 0x2061, 0x11ea, 0x6007, 0x0000, 0x6316, 0x7024, 0x6012,
-+      0x600f, 0x0001, 0x642a, 0x652e, 0x6632, 0x6736, 0x2c10, 0x080c,
-+      0x0f22, 0x7007, 0x0002, 0x701b, 0x427e, 0x0005, 0x702c, 0x9005,
-+      0x1160, 0x711c, 0x7024, 0x20a0, 0x901e, 0x2061, 0x11ea, 0x6428,
-+      0x652c, 0x6630, 0x6734, 0x0804, 0x4235, 0x7120, 0x810c, 0x0804,
-+      0x2b68, 0x00f6, 0x2d78, 0x00e6, 0x2001, 0x1100, 0x2004, 0x9086,
-+      0x0003, 0x2009, 0x0007, 0x1904, 0x4311, 0x2071, 0x1193, 0x7454,
-+      0x84ff, 0x2009, 0x000e, 0x1904, 0x4311, 0x7c9c, 0x7d98, 0x7ea4,
-+      0x7fa0, 0x080c, 0x0e9d, 0x2009, 0x0002, 0x0904, 0x4311, 0x2d00,
-+      0x7056, 0x900e, 0x901e, 0x734e, 0x735a, 0x9d80, 0x0003, 0x7052,
-+      0x20a0, 0x91e0, 0x1000, 0x2c64, 0x8cff, 0x01d8, 0x6004, 0x9084,
-+      0x00ff, 0x9086, 0x0006, 0x0130, 0x6004, 0x9084, 0xff00, 0x9086,
-+      0x0600, 0x1178, 0x00d6, 0x3468, 0x6014, 0x206a, 0x8d68, 0x6010,
-+      0x8007, 0x9105, 0x8007, 0x206a, 0x8d68, 0x2da0, 0x00de, 0x9398,
-+      0x0002, 0x8108, 0x9182, 0x00ff, 0x0120, 0x9386, 0x002a, 0x01b8,
-+      0x08c0, 0x83ff, 0x1190, 0x714c, 0x810c, 0x7897, 0x4000, 0x799a,
-+      0x7154, 0x81ff, 0x090c, 0x0d7e, 0x2168, 0x080c, 0x0ecf, 0x9006,
-+      0x7056, 0x918d, 0x0001, 0x2008, 0x0420, 0x705b, 0x0001, 0x714a,
-+      0x704c, 0x9300, 0x704e, 0x2061, 0x11fb, 0x6007, 0x0000, 0x6316,
-+      0x7050, 0x6012, 0x600f, 0x0001, 0x642a, 0x652e, 0x6632, 0x6736,
-+      0x603b, 0x431d, 0x2f00, 0x603e, 0x2c10, 0x080c, 0x0f22, 0x9006,
-+      0x0040, 0x7897, 0x4005, 0x799a, 0x900e, 0x9085, 0x0001, 0x2001,
-+      0x0030, 0x00ee, 0x2f68, 0x00fe, 0x0005, 0x00f6, 0x603c, 0x907d,
-+      0x090c, 0x0d7e, 0x00e6, 0x2071, 0x1193, 0x6008, 0x908e, 0x0100,
-+      0x0138, 0x787b, 0x0030, 0x7883, 0x0000, 0x7897, 0x4002, 0x00a8,
-+      0x7058, 0x9005, 0x1148, 0x7148, 0x7050, 0x20a0, 0x901e, 0x6428,
-+      0x652c, 0x6630, 0x6734, 0x0400, 0x787b, 0x0000, 0x7883, 0x0000,
-+      0x7897, 0x4000, 0x714c, 0x810c, 0x799a, 0x7154, 0x81ff, 0x090c,
-+      0x0d7e, 0x2168, 0x080c, 0x0ecf, 0x7057, 0x0000, 0x2f68, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x603b, 0x0000, 0x603f,
-+      0x0000, 0x00ee, 0x00fe, 0x0005, 0x91e0, 0x1000, 0x2c64, 0x8cff,
-+      0x01d8, 0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0130, 0x6004,
-+      0x9084, 0xff00, 0x9086, 0x0600, 0x1178, 0x00d6, 0x3468, 0x6014,
-+      0x206a, 0x8d68, 0x6010, 0x8007, 0x9105, 0x8007, 0x206a, 0x8d68,
-+      0x2da0, 0x00de, 0x9398, 0x0002, 0x8108, 0x9182, 0x00ff, 0x0120,
-+      0x9386, 0x002a, 0x0520, 0x08c0, 0x83ff, 0x11f8, 0x714c, 0x810c,
-+      0x799a, 0x7897, 0x4000, 0x7154, 0x81ff, 0x090c, 0x0d7e, 0x2168,
-+      0x080c, 0x0ecf, 0x9006, 0x7056, 0x918d, 0x0001, 0x2008, 0x2f68,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x2061, 0x11fb,
-+      0x603b, 0x0000, 0x603f, 0x0000, 0x0088, 0x705b, 0x0001, 0x714a,
-+      0x704c, 0x9300, 0x704e, 0x2061, 0x11fb, 0x6316, 0x642a, 0x652e,
-+      0x6632, 0x6736, 0x2c10, 0x080c, 0x0f22, 0x9006, 0x00ee, 0x00fe,
-+      0x0005, 0x81ff, 0x1904, 0x2b98, 0x60d8, 0xd0ac, 0x1118, 0xd09c,
-+      0x0904, 0x2b98, 0x080c, 0x3eb9, 0x0904, 0x2b98, 0x7984, 0x7a8c,
-+      0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x3f0c, 0x701b,
-+      0x43d2, 0x0005, 0x00d6, 0x9de8, 0x0019, 0x6828, 0x90be, 0x7000,
-+      0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x00de,
-+      0x0804, 0x2b9b, 0x6820, 0x6924, 0x080c, 0x1f63, 0x1510, 0x080c,
-+      0x55b3, 0x11f8, 0x7122, 0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c,
-+      0x3eb9, 0x01b8, 0x080c, 0x3eb9, 0x01a0, 0x00ce, 0x00de, 0x6867,
-+      0x0000, 0x6868, 0xc0fd, 0x686a, 0x6823, 0x0000, 0x6804, 0x2068,
-+      0x080c, 0xaaa2, 0x0904, 0x2b98, 0x7007, 0x0003, 0x701b, 0x440c,
-+      0x0005, 0x00de, 0x0804, 0x2b98, 0x7120, 0x080c, 0x2955, 0x6820,
-+      0x9086, 0x8001, 0x0904, 0x2b98, 0x2d00, 0x701e, 0x6804, 0x9080,
-+      0x0002, 0x0006, 0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x504f,
-+      0x000e, 0x9de8, 0x0019, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061,
-+      0x11ea, 0x6007, 0x0000, 0x6e00, 0x6f28, 0x97c6, 0x7000, 0x1108,
-+      0x0018, 0x97c6, 0x7100, 0x1150, 0x96c2, 0x0004, 0x0a04, 0x2b9b,
-+      0x2009, 0x0004, 0x2039, 0x0001, 0x0804, 0x3f0f, 0x97c6, 0x7200,
-+      0x1904, 0x2b9b, 0x96c2, 0x0054, 0x0a04, 0x2b9b, 0x600f, 0x0001,
-+      0x6012, 0x6017, 0x002a, 0x622a, 0x632e, 0x6432, 0x6536, 0x2c10,
-+      0x080c, 0x0f22, 0x7007, 0x0002, 0x701b, 0x4457, 0x0005, 0x701c,
-+      0x2068, 0x6804, 0x9080, 0x0001, 0x2004, 0x9080, 0x0002, 0x0006,
-+      0x20a9, 0x002a, 0x2098, 0x20a0, 0x080c, 0x504f, 0x000e, 0x2061,
-+      0x11ea, 0x6228, 0x632c, 0x6430, 0x6534, 0x2039, 0x0001, 0x2009,
-+      0x002a, 0x0804, 0x3f0f, 0x81ff, 0x1904, 0x2b98, 0x798c, 0x2001,
-+      0x12a9, 0x2102, 0x080c, 0x3ece, 0x0904, 0x2b9b, 0x080c, 0x56ca,
-+      0x0904, 0x2b98, 0x0126, 0x2091, 0x8000, 0x080c, 0x5782, 0x012e,
-+      0x0804, 0x2b68, 0x00f6, 0x69a0, 0x2001, 0x12a9, 0x2102, 0x2d78,
-+      0x080c, 0x3ede, 0x0170, 0x080c, 0x56ca, 0x2009, 0x0002, 0x0128,
-+      0x080c, 0x5782, 0x1180, 0x2009, 0x0003, 0x7897, 0x4005, 0x799a,
-+      0x0010, 0x7897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
-+      0x2f68, 0x00fe, 0x0005, 0x7897, 0x4000, 0x900e, 0x9085, 0x0001,
-+      0x2001, 0x0000, 0x2f68, 0x00fe, 0x0005, 0x7884, 0xd08c, 0x1118,
-+      0xd084, 0x0904, 0x39e5, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x00c6,
-+      0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804, 0x2b98,
-+      0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0128, 0x908e, 0x0004,
-+      0x0110, 0x908e, 0x0005, 0x15b8, 0x7884, 0xd08c, 0x0120, 0x6000,
-+      0xc08c, 0x6002, 0x0030, 0x2001, 0x1153, 0x2004, 0xd0b4, 0x0904,
-+      0x3a24, 0x7884, 0x9084, 0xff00, 0x908e, 0x7e00, 0x0904, 0x3a24,
-+      0x908e, 0x7f00, 0x0904, 0x3a24, 0x908e, 0x8000, 0x0904, 0x3a24,
-+      0x6000, 0xd08c, 0x1904, 0x3a24, 0x6867, 0x0000, 0x6868, 0xc0fd,
-+      0x686a, 0x080c, 0xaabe, 0x1120, 0x2009, 0x0003, 0x0804, 0x2b98,
-+      0x7007, 0x0003, 0x701b, 0x4505, 0x0005, 0x080c, 0x3ef0, 0x0904,
-+      0x2b9b, 0x0804, 0x3a24, 0x080c, 0x2982, 0x0108, 0x0005, 0x2009,
-+      0x1133, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2b98,
-+      0x2001, 0x1100, 0x2004, 0x9086, 0x0003, 0x0120, 0x2009, 0x0007,
-+      0x0804, 0x2b98, 0x080c, 0x58c6, 0x0120, 0x2009, 0x0008, 0x0804,
-+      0x2b98, 0x609c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x3a24, 0x9006,
-+      0x6866, 0x6832, 0x6868, 0xc0fd, 0x686a, 0x080c, 0xab41, 0x1120,
-+      0x2009, 0x0003, 0x0804, 0x2b98, 0x7007, 0x0003, 0x701b, 0x4541,
-+      0x0005, 0x6830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804,
-+      0x47e3, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x0804, 0x44d4, 0x81ff,
-+      0x2009, 0x0001, 0x1904, 0x2b98, 0x6000, 0x9086, 0x0003, 0x2009,
-+      0x0007, 0x1904, 0x2b98, 0x080c, 0x58c6, 0x2009, 0x0008, 0x1904,
-+      0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x6004, 0x9084, 0x00ff,
-+      0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2b98, 0x00c6, 0x080c,
-+      0x3eb9, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2b98, 0x9006, 0x6866,
-+      0x6832, 0x6868, 0xc0fd, 0x686a, 0x7988, 0x9194, 0xff00, 0x918c,
-+      0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0x6952, 0x798c, 0x6956,
-+      0x0038, 0x928e, 0x0100, 0x1904, 0x2b9b, 0xc0e5, 0x6952, 0x6956,
-+      0x683e, 0x080c, 0xad71, 0x2009, 0x0003, 0x0904, 0x2b98, 0x7007,
-+      0x0003, 0x701b, 0x459c, 0x0005, 0x6830, 0x9086, 0x0100, 0x2009,
-+      0x0004, 0x0904, 0x2b98, 0x0804, 0x2b68, 0x81ff, 0x2009, 0x0001,
-+      0x1904, 0x2b98, 0x6000, 0x9086, 0x0003, 0x2009, 0x0007, 0x1904,
-+      0x2b98, 0x080c, 0x3ef0, 0x0904, 0x2b9b, 0x6004, 0x9084, 0x00ff,
-+      0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x2b98, 0x00c6, 0x080c,
-+      0x3eb9, 0x00ce, 0x2009, 0x0002, 0x0904, 0x2b98, 0x9d80, 0x001b,
-+      0x2039, 0x0001, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-+      0x080c, 0x3f0c, 0x701b, 0x45d5, 0x0005, 0x00d6, 0x9de8, 0x001b,
-+      0x6800, 0x9086, 0x0500, 0x1138, 0x6804, 0x9005, 0x1120, 0x6808,
-+      0x9084, 0xff00, 0x0118, 0x00de, 0x1904, 0x2b9b, 0x00de, 0x6866,
-+      0x6832, 0x6868, 0xc0fd, 0x686a, 0x00c6, 0x080c, 0x3ef0, 0x1118,
-+      0x00ce, 0x0804, 0x2b9b, 0x2009, 0x0043, 0x080c, 0xadda, 0x2009,
-+      0x0003, 0x00ce, 0x0904, 0x2b98, 0x7007, 0x0003, 0x701b, 0x4601,
-+      0x0005, 0x6830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x2b98,
-+      0x0804, 0x2b68, 0x00f6, 0x00c6, 0x2d78, 0x2061, 0x1100, 0x6000,
-+      0x9086, 0x0003, 0x2009, 0x0007, 0x1528, 0x080c, 0x3eee, 0x0530,
-+      0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x11d0,
-+      0x9fe8, 0x0031, 0x6800, 0x9086, 0x0500, 0x11c0, 0x6804, 0x9005,
-+      0x11a8, 0x6808, 0x9084, 0xff00, 0x1188, 0x080c, 0x3eee, 0x1108,
-+      0x0068, 0x2f68, 0x2009, 0x004b, 0x080c, 0xadda, 0x2009, 0x0003,
-+      0x0108, 0x0078, 0x7897, 0x4005, 0x799a, 0x0010, 0x7897, 0x4006,
-+      0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x2f68, 0x00fe,
-+      0x0005, 0x9006, 0x0cd0, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-+      0x2b98, 0x6000, 0x9086, 0x0003, 0x0120, 0x2009, 0x0007, 0x0804,
-+      0x2b98, 0x7e84, 0x860f, 0x918c, 0x00ff, 0x96b4, 0x00ff, 0x080c,
-+      0x5608, 0x1904, 0x2b9b, 0x9186, 0x007f, 0x0150, 0x6004, 0x9084,
-+      0x00ff, 0x9086, 0x0006, 0x0120, 0x2009, 0x0009, 0x0804, 0x2b98,
-+      0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009, 0x0002, 0x0804,
-+      0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd, 0x686a, 0x2001, 0x0100,
-+      0x8007, 0x680a, 0x080c, 0xaad9, 0x1120, 0x2009, 0x0003, 0x0804,
-+      0x2b98, 0x7007, 0x0003, 0x701b, 0x468e, 0x0005, 0x6808, 0x8007,
-+      0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x2b98, 0x68e0,
-+      0x6866, 0x6810, 0x8007, 0x9084, 0x00ff, 0x800c, 0x6814, 0x8007,
-+      0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x9d80, 0x0004,
-+      0x2039, 0x0001, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x3f0f,
-+      0x080c, 0x3eb9, 0x1120, 0x2009, 0x0002, 0x0804, 0x2b98, 0x7984,
-+      0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804,
-+      0x2b9b, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
-+      0x0001, 0x080c, 0x3f0c, 0x701b, 0x46ce, 0x0005, 0x2001, 0x112c,
-+      0x2003, 0x0001, 0x9d80, 0x0019, 0x2098, 0x20e1, 0x0001, 0x20a9,
-+      0x001a, 0x20a1, 0x12ea, 0x20e9, 0x0001, 0x4003, 0x0804, 0x2b68,
-+      0x080c, 0x3eb9, 0x1120, 0x2009, 0x0002, 0x0804, 0x2b98, 0x7984,
-+      0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x0110, 0x0804,
-+      0x2b9b, 0x2099, 0x12ea, 0x20a0, 0x20e9, 0x0001, 0x20a9, 0x001a,
-+      0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c,
-+      0x7d98, 0x2039, 0x0001, 0x0804, 0x3f0f, 0x7884, 0x908a, 0x1000,
-+      0x1a04, 0x2b9b, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b,
-+      0x9108, 0x00c6, 0x2061, 0x1317, 0x6142, 0x00ce, 0x012e, 0x0804,
-+      0x2b68, 0x00c6, 0x080c, 0x62e4, 0x1180, 0x2001, 0x12a8, 0x2003,
-+      0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x9085, 0x0001, 0x080c,
-+      0x6331, 0x080c, 0x621a, 0x080c, 0x0d7e, 0x2061, 0x1100, 0x6030,
-+      0xc09d, 0x6032, 0x080c, 0x4faa, 0x00ce, 0x0005, 0x00c6, 0x2001,
-+      0x1100, 0x2004, 0x908e, 0x0000, 0x0904, 0x2b98, 0x7884, 0x9005,
-+      0x0188, 0x7888, 0x2061, 0x12d6, 0x2c0c, 0x2062, 0x080c, 0x2328,
-+      0x01a0, 0x080c, 0x2330, 0x0188, 0x080c, 0x2338, 0x0170, 0x2162,
-+      0x0804, 0x2b9b, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,
-+      0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,
-+      0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011,
-+      0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x002e,
-+      0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x60e3,
-+      0x0000, 0x080c, 0xc44e, 0x080c, 0xc469, 0x9085, 0x0001, 0x080c,
-+      0x6331, 0x9006, 0x080c, 0x2401, 0x2001, 0x1100, 0x2003, 0x0004,
-+      0x6027, 0x0008, 0x00ce, 0x0804, 0x2b68, 0x81ff, 0x0120, 0x2009,
-+      0x0001, 0x0804, 0x2b98, 0x6000, 0x9086, 0x0003, 0x0120, 0x2009,
-+      0x0007, 0x0804, 0x2b98, 0x7e84, 0x860f, 0x918c, 0x00ff, 0x96b4,
-+      0x00ff, 0x080c, 0x5608, 0x1904, 0x2b9b, 0x9186, 0x007f, 0x0150,
-+      0x6004, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0120, 0x2009, 0x0009,
-+      0x0804, 0x2b98, 0x00c6, 0x080c, 0x3eb9, 0x00ce, 0x1120, 0x2009,
-+      0x0002, 0x0804, 0x2b98, 0x6867, 0x0000, 0x6868, 0xc0fd, 0x686a,
-+      0x080c, 0xaaf5, 0x1120, 0x2009, 0x0003, 0x0804, 0x2b98, 0x7007,
-+      0x0003, 0x701b, 0x47cc, 0x0005, 0x6830, 0x9086, 0x0100, 0x1120,
-+      0x2009, 0x0004, 0x0804, 0x2b98, 0x68e0, 0x6866, 0x6834, 0x8007,
-+      0x800c, 0x9d80, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
-+      0x0001, 0x0804, 0x3f0f, 0x6898, 0x9086, 0x000d, 0x1904, 0x2b98,
-+      0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x47f0, 0x0010,
-+      0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011,
-+      0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0x6998, 0x7986, 0x69a4,
-+      0x799a, 0x69a8, 0x799e, 0x080c, 0x3eff, 0x2091, 0x4080, 0x2001,
-+      0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x7007, 0x0001, 0x2091,
-+      0x5000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061,
-+      0x1317, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009,
-+      0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e,
-+      0x2061, 0x12aa, 0x2001, 0x132c, 0x6012, 0x600f, 0x0001, 0x6017,
-+      0x0001, 0x601b, 0x0002, 0x6007, 0x0000, 0x603b, 0x0000, 0x00ce,
-+      0x012e, 0x0804, 0x2b68, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6,
-+      0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069,
-+      0x0200, 0x2071, 0x1100, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118,
-+      0x080c, 0x49ce, 0x0068, 0xd08c, 0x0118, 0x080c, 0x48e1, 0x0040,
-+      0xd094, 0x0118, 0x080c, 0x48b4, 0x0018, 0xd09c, 0x0108, 0x0099,
-+      0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,
-+      0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d,
-+      0x612a, 0x001e, 0x0c68, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048,
-+      0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010,
-+      0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7134, 0xd1a4,
-+      0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128,
-+      0x2009, 0x00f7, 0x080c, 0x507b, 0x00f0, 0x6040, 0x9084, 0x0010,
-+      0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x707f, 0x0000, 0x709b,
-+      0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009, 0x1580, 0x200b,
-+      0x0000, 0x708f, 0x0000, 0x7083, 0x000f, 0x2009, 0x000f, 0x2011,
-+      0x4f50, 0x080c, 0x7283, 0x0005, 0x2001, 0x1174, 0x2004, 0xd08c,
-+      0x0110, 0x7057, 0xffff, 0x7080, 0x9005, 0x1510, 0x2011, 0x4f50,
-+      0x080c, 0x71fa, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042,
-+      0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x48ca, 0x6242,
-+      0x7093, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042,
-+      0x6242, 0x0030, 0x6242, 0x7093, 0x0000, 0x7087, 0x0000, 0x0000,
-+      0x0005, 0x7084, 0x908a, 0x0003, 0x1a0c, 0x0d7e, 0x000b, 0x0005,
-+      0x48eb, 0x4932, 0x49cd, 0x00f6, 0x7087, 0x0001, 0x6803, 0x00fc,
-+      0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x48f2,
-+      0x080c, 0x0d7e, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a,
-+      0xa001, 0x6803, 0x1600, 0x6837, 0x0020, 0x080c, 0x50d5, 0x2079,
-+      0x1500, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099,
-+      0x1105, 0x20e9, 0x0001, 0x20a1, 0x150e, 0x20a9, 0x0004, 0x4003,
-+      0x080c, 0x8dc3, 0x20e1, 0x0001, 0x2099, 0x1500, 0x20e9, 0x0000,
-+      0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f,
-+      0x0000, 0x080c, 0x4f86, 0x00fe, 0x9006, 0x708a, 0x6043, 0x0008,
-+      0x6042, 0x0005, 0x00f6, 0x7088, 0x708b, 0x0000, 0x9025, 0x0904,
-+      0x49aa, 0x6020, 0xd0b4, 0x1904, 0x49a8, 0x7198, 0x81ff, 0x0904,
-+      0x4996, 0x9486, 0x000c, 0x1904, 0x49a3, 0x9480, 0x0018, 0x8004,
-+      0x20a8, 0x080c, 0x50ce, 0x2011, 0x0260, 0x2019, 0x1500, 0x220c,
-+      0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x494f, 0x6043,
-+      0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061,
-+      0x0100, 0x6043, 0x0006, 0x7087, 0x0002, 0x7093, 0x0002, 0x2009,
-+      0x07d0, 0x2011, 0x4f57, 0x080c, 0x7283, 0x080c, 0x50d5, 0x04c0,
-+      0x080c, 0x50ce, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558,
-+      0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804,
-+      0x9005, 0x0190, 0x080c, 0x50ce, 0x2011, 0x026e, 0x2019, 0x1105,
-+      0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210,
-+      0x8318, 0x1f04, 0x498a, 0x0078, 0x709b, 0x0000, 0x080c, 0x50ce,
-+      0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1500,
-+      0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010,
-+      0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4,
-+      0x1db8, 0x080c, 0x8dc3, 0x20e1, 0x0001, 0x2099, 0x1500, 0x20e9,
-+      0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c,
-+      0x2011, 0x130e, 0x2013, 0x0000, 0x708b, 0x0000, 0x60a3, 0x0056,
-+      0x60a7, 0x9575, 0x080c, 0x8599, 0x08d8, 0x0005, 0x7090, 0x908a,
-+      0x001d, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0x49ff, 0x4a12, 0x4a3b,
-+      0x4a5b, 0x4a81, 0x4ab0, 0x4ad6, 0x4b0e, 0x4b34, 0x4b62, 0x4b9b,
-+      0x4bd3, 0x4bf1, 0x4c1c, 0x4c3e, 0x4c55, 0x4c5d, 0x4c91, 0x4cb7,
-+      0x4ce6, 0x4d0c, 0x4d44, 0x4d7e, 0x4db3, 0x4dd1, 0x4e2a, 0x4e4c,
-+      0x4e76, 0x4e76, 0x00c6, 0x2061, 0x1100, 0x6003, 0x0007, 0x2061,
-+      0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061,
-+      0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043,
-+      0x0002, 0x7093, 0x0001, 0x2009, 0x07d0, 0x2011, 0x4f57, 0x080c,
-+      0x7283, 0x0005, 0x00f6, 0x7088, 0x9086, 0x0014, 0x1510, 0x6042,
-+      0x6020, 0xd0b4, 0x11f0, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30,
-+      0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc,
-+      0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011, 0x4f57,
-+      0x080c, 0x71fa, 0x7093, 0x0010, 0x080c, 0x4c5d, 0x0010, 0x708b,
-+      0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0003, 0x6043, 0x0004,
-+      0x2011, 0x4f57, 0x080c, 0x71fa, 0x080c, 0x505d, 0x2079, 0x0240,
-+      0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e,
-+      0x200b, 0x0000, 0x8108, 0x1f04, 0x4a50, 0x60c3, 0x0014, 0x080c,
-+      0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011,
-+      0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014, 0x11b8, 0x080c, 0x50ce,
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005,
-+      0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
-+      0x0001, 0x7093, 0x0004, 0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe,
-+      0x0005, 0x00f6, 0x7093, 0x0005, 0x080c, 0x505d, 0x2079, 0x0240,
-+      0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x50ce, 0x080c, 0x50b1,
-+      0x1170, 0x707c, 0x9005, 0x1158, 0x7154, 0x9186, 0xffff, 0x0138,
-+      0x2011, 0x0008, 0x080c, 0x4f04, 0x0168, 0x080c, 0x5092, 0x20a9,
-+      0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
-+      0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x4f86, 0x00fe, 0x0005,
-+      0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x4f57, 0x080c, 0x71fa,
-+      0x9086, 0x0014, 0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30,
-+      0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
-+      0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0006,
-+      0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe, 0x0005, 0x00f6, 0x7093,
-+      0x0007, 0x080c, 0x505d, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837,
-+      0x0000, 0x080c, 0x50ce, 0x080c, 0x50b1, 0x11b8, 0x707c, 0x9005,
-+      0x11a0, 0x715c, 0x9186, 0xffff, 0x0180, 0x9180, 0x298c, 0x200d,
-+      0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x4f04, 0x0180,
-+      0x080c, 0x41fc, 0x0110, 0x080c, 0x1fad, 0x20a9, 0x0008, 0x20e1,
-+      0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-+      0x60c3, 0x0014, 0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088,
-+      0x9005, 0x0500, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014,
-+      0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104,
-+      0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-+      0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0008, 0x0029, 0x0010,
-+      0x080c, 0x50aa, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0009, 0x080c,
-+      0x505d, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c,
-+      0x50b1, 0x1150, 0x707c, 0x9005, 0x1138, 0x080c, 0x4e77, 0x1188,
-+      0x9085, 0x0001, 0x080c, 0x1fad, 0x20a9, 0x0008, 0x080c, 0x50ce,
-+      0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
-+      0x4003, 0x60c3, 0x0014, 0x080c, 0x4f86, 0x0010, 0x080c, 0x49f2,
-+      0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0598, 0x2011, 0x4f57,
-+      0x080c, 0x71fa, 0x9086, 0x0014, 0x1550, 0x080c, 0x50ce, 0x2079,
-+      0x0260, 0x7a30, 0x9296, 0x1105, 0x1510, 0x7834, 0x2011, 0x0100,
-+      0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
-+      0x70c3, 0x0001, 0x7093, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178,
-+      0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
-+      0x708f, 0x0000, 0x7093, 0x000e, 0x080c, 0x4c3e, 0x0010, 0x080c,
-+      0x50aa, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x000b, 0x2011, 0x150e,
-+      0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304,
-+      0x080c, 0x505d, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
-+      0x080c, 0x50b1, 0x0118, 0x2013, 0x0000, 0x0020, 0x7058, 0x9085,
-+      0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x150e,
-+      0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,
-+      0x6812, 0x2009, 0x0240, 0x1f04, 0x4bc0, 0x60c3, 0x0084, 0x080c,
-+      0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01c0, 0x2011,
-+      0x4f57, 0x080c, 0x71fa, 0x9086, 0x0084, 0x1178, 0x080c, 0x50ce,
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005,
-+      0x1120, 0x7093, 0x000c, 0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe,
-+      0x0005, 0x00f6, 0x7093, 0x000d, 0x080c, 0x505d, 0x2079, 0x0240,
-+      0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x50ce, 0x20a9, 0x0040,
-+      0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186,
-+      0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,
-+      0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x4c04, 0x60c3, 0x0084,
-+      0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0,
-+      0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0084, 0x1198, 0x080c,
-+      0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834,
-+      0x9005, 0x1140, 0x708f, 0x0001, 0x080c, 0x502f, 0x7093, 0x000e,
-+      0x0029, 0x0010, 0x080c, 0x50aa, 0x00fe, 0x0005, 0x7093, 0x000f,
-+      0x708b, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5,
-+      0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0,
-+      0x2011, 0x4f57, 0x080c, 0x71ee, 0x0005, 0x7088, 0x9005, 0x0120,
-+      0x2011, 0x4f57, 0x080c, 0x71fa, 0x0005, 0x7093, 0x0011, 0x080c,
-+      0x8dc3, 0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
-+      0x0000, 0x20a1, 0x0240, 0x7488, 0x9480, 0x0018, 0x9080, 0x0007,
-+      0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x50b1, 0x11a0,
-+      0x7174, 0x81ff, 0x0188, 0x900e, 0x7078, 0x9084, 0x00ff, 0x0160,
-+      0x080c, 0x1f63, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120,
-+      0x2011, 0x0008, 0x080c, 0x4f04, 0x60c3, 0x0014, 0x080c, 0x4f86,
-+      0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x4f57, 0x080c,
-+      0x71fa, 0x9086, 0x0014, 0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260,
-+      0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
-+      0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093,
-+      0x0012, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6,
-+      0x7093, 0x0013, 0x080c, 0x506b, 0x2079, 0x0240, 0x7833, 0x1103,
-+      0x7837, 0x0000, 0x080c, 0x50ce, 0x080c, 0x50b1, 0x1170, 0x707c,
-+      0x9005, 0x1158, 0x7154, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008,
-+      0x080c, 0x4f04, 0x0168, 0x080c, 0x5092, 0x20a9, 0x0008, 0x20e1,
-+      0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-+      0x60c3, 0x0014, 0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088,
-+      0x9005, 0x0500, 0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014,
-+      0x11b8, 0x080c, 0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104,
-+      0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-+      0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0014, 0x0029, 0x0010,
-+      0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0015, 0x080c,
-+      0x506b, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c,
-+      0x50ce, 0x080c, 0x50b1, 0x11b8, 0x707c, 0x9005, 0x11a0, 0x715c,
-+      0x9186, 0xffff, 0x0180, 0x9180, 0x298c, 0x200d, 0x918c, 0xff00,
-+      0x810f, 0x2011, 0x0008, 0x080c, 0x4f04, 0x0180, 0x080c, 0x41fc,
-+      0x0110, 0x080c, 0x1fad, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
-+      0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
-+      0x080c, 0x4f86, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x05a0,
-+      0x2011, 0x4f57, 0x080c, 0x71fa, 0x9086, 0x0014, 0x1558, 0x080c,
-+      0x50ce, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1518, 0x7834,
-+      0x2011, 0x0100, 0x921e, 0x1148, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-+      0x9005, 0x1110, 0x70c3, 0x0001, 0x0060, 0x9005, 0x1198, 0x7a38,
-+      0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x708f,
-+      0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7093, 0x0016,
-+      0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x080c, 0x8dc3,
-+      0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
-+      0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026e, 0x7093,
-+      0x0017, 0x080c, 0x50b1, 0x1150, 0x707c, 0x9005, 0x1138, 0x080c,
-+      0x4e77, 0x1188, 0x9085, 0x0001, 0x080c, 0x1fad, 0x20a9, 0x0008,
-+      0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-+      0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x4f86, 0x0010,
-+      0x080c, 0x49f2, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01c0, 0x2011,
-+      0x4f57, 0x080c, 0x71fa, 0x9086, 0x0084, 0x1178, 0x080c, 0x50ce,
-+      0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005,
-+      0x1120, 0x7093, 0x0018, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe,
-+      0x0005, 0x00f6, 0x7093, 0x0019, 0x080c, 0x506b, 0x2079, 0x0240,
-+      0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x50ce, 0x2009, 0x026e,
-+      0x2039, 0x150e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186,
-+      0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04,
-+      0x4de4, 0x2039, 0x150e, 0x080c, 0x50b1, 0x11e8, 0x2728, 0x2514,
-+      0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007,
-+      0x9205, 0x202a, 0x7058, 0x2310, 0x8214, 0x92a0, 0x150e, 0x2414,
-+      0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff,
-+      0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e,
-+      0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812,
-+      0x2009, 0x0240, 0x1f04, 0x4e17, 0x60c3, 0x0084, 0x080c, 0x4f86,
-+      0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0, 0x2011, 0x4f57,
-+      0x080c, 0x71fa, 0x9086, 0x0084, 0x1198, 0x080c, 0x50ce, 0x2079,
-+      0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,
-+      0x708f, 0x0001, 0x080c, 0x502f, 0x7093, 0x001a, 0x0029, 0x0010,
-+      0x708b, 0x0000, 0x00fe, 0x0005, 0x7093, 0x001b, 0x080c, 0x8dc3,
-+      0x080c, 0x50ce, 0x2011, 0x0260, 0x2009, 0x0240, 0x7488, 0x9480,
-+      0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e,
-+      0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
-+      0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
-+      0x4e5f, 0x60c3, 0x0084, 0x080c, 0x4f86, 0x0005, 0x0005, 0x0086,
-+      0x0096, 0x2029, 0x1153, 0x252c, 0x20a9, 0x0008, 0x2041, 0x150e,
-+      0x20e9, 0x0001, 0x28a0, 0x080c, 0x50ce, 0x20e1, 0x0000, 0x2099,
-+      0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108,
-+      0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4,
-+      0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x4e91, 0x0804, 0x4f00,
-+      0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020,
-+      0x91a6, 0x3fff, 0x0904, 0x4f00, 0x918d, 0xc000, 0x20a9, 0x0010,
-+      0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
-+      0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
-+      0x0008, 0x8318, 0x1f04, 0x4eb7, 0x04d8, 0x23a8, 0x2021, 0x0001,
-+      0x8426, 0x8425, 0x1f04, 0x4ec9, 0x2328, 0x8529, 0x92be, 0x0007,
-+      0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8,
-+      0x95a8, 0x0010, 0x1f04, 0x4ed8, 0x7556, 0x95c8, 0x298c, 0x292d,
-+      0x95ac, 0x00ff, 0x757a, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
-+      0x1f8d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405,
-+      0x201a, 0x707f, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1,
-+      0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008,
-+      0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136,
-+      0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-+      0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce,
-+      0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218,
-+      0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010,
-+      0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
-+      0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8,
-+      0x9405, 0x203a, 0x7156, 0x91a0, 0x298c, 0x242d, 0x95ac, 0x00ff,
-+      0x757a, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x1f8d, 0x001e,
-+      0x60e7, 0x0000, 0x65ea, 0x707f, 0x0001, 0x9084, 0x0000, 0x0005,
-+      0x00e6, 0x2071, 0x1100, 0x7083, 0x0000, 0x00ee, 0x0005, 0x00e6,
-+      0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x501e, 0x080c,
-+      0x85a2, 0x7004, 0x9084, 0x4000, 0x0138, 0x2001, 0x1000, 0x080c,
-+      0x2401, 0x9006, 0x080c, 0x2401, 0x0126, 0x2091, 0x8000, 0x2071,
-+      0x1124, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7,
-+      0x080c, 0x507b, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842,
-+      0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x2011, 0x130e, 0x2013, 0x0000, 0x708b, 0x0000, 0x012e,
-+      0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8599, 0x6144, 0xd184,
-+      0x0120, 0x7190, 0x918d, 0x2000, 0x0018, 0x7184, 0x918d, 0x1000,
-+      0x2011, 0x12d3, 0x2112, 0x2009, 0x07d0, 0x2011, 0x4f57, 0x080c,
-+      0x7283, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
-+      0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+      0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x2009,
-+      0x00f7, 0x080c, 0x507b, 0x2061, 0x1317, 0x900e, 0x611a, 0x611e,
-+      0x2061, 0x1100, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090,
-+      0x6043, 0x0010, 0x2009, 0x12d3, 0x200b, 0x0000, 0x2009, 0x002d,
-+      0x2011, 0x4fe1, 0x080c, 0x71ee, 0x012e, 0x00ce, 0x002e, 0x001e,
-+      0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x04b9, 0x2071,
-+      0x0100, 0x080c, 0x85a2, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000,
-+      0x0138, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+      0x080c, 0x62ec, 0x01a8, 0x080c, 0x630a, 0x1190, 0x2001, 0x12a7,
-+      0x2003, 0xaaaa, 0x0016, 0x080c, 0x205d, 0x2001, 0x1298, 0x2102,
-+      0x001e, 0x2001, 0x12a8, 0x2003, 0x0000, 0x080c, 0x621a, 0x0050,
-+      0x2009, 0x0001, 0x080c, 0x2355, 0x2001, 0x0001, 0x080c, 0x1f11,
-+      0x080c, 0x4faa, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x110d,
-+      0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001,
-+      0x12d3, 0x201c, 0x080c, 0x3f23, 0x003e, 0x002e, 0x0005, 0x20a9,
-+      0x0012, 0x20e9, 0x0001, 0x20a1, 0x1580, 0x080c, 0x50ce, 0x20e9,
-+      0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x50c8,
-+      0x2099, 0x0260, 0x20a1, 0x1592, 0x0051, 0x20a9, 0x000e, 0x080c,
-+      0x50cb, 0x2099, 0x0260, 0x20a1, 0x15b2, 0x0009, 0x0005, 0x0016,
-+      0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210,
-+      0x1f04, 0x5053, 0x002e, 0x001e, 0x0005, 0x080c, 0x8dc3, 0x20e1,
-+      0x0001, 0x2099, 0x1500, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-+      0x000c, 0x4003, 0x0005, 0x080c, 0x8dc3, 0x080c, 0x50ce, 0x20e1,
-+      0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-+      0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f,
-+      0x2001, 0x1133, 0x2004, 0x9005, 0x1138, 0x2001, 0x1116, 0x2004,
-+      0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e,
-+      0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x58cb, 0x0158, 0x9006,
-+      0x2020, 0x2009, 0x002a, 0x080c, 0xc12f, 0x2001, 0x110c, 0x200c,
-+      0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x2831, 0x004e,
-+      0x001e, 0x0005, 0x080c, 0x4faa, 0x7093, 0x0000, 0x708b, 0x0000,
-+      0x0005, 0x0006, 0x2001, 0x110c, 0x2004, 0xd09c, 0x0100, 0x000e,
-+      0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101,
-+      0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005,
-+      0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814,
-+      0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146,
-+      0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1500,
-+      0x4004, 0x2079, 0x1500, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f,
-+      0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de,
-+      0x014e, 0x015e, 0x00fe, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009,
-+      0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x50fa, 0x015e, 0x0005,
-+      0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x1152, 0x9006,
-+      0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0x9198, 0x298c,
-+      0x231d, 0x939c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0x9c98, 0x0006,
-+      0x20e9, 0x0001, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9c98, 0x000a,
-+      0x23a0, 0x4004, 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a,
-+      0x605e, 0x6062, 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a,
-+      0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x60ae, 0x61a2,
-+      0x00d6, 0x60a4, 0x906d, 0x0110, 0x080c, 0x0ecf, 0x60a7, 0x0000,
-+      0x00de, 0x9006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814,
-+      0x9084, 0x00ff, 0x6042, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x6974, 0x6e78, 0x9684, 0x3fff,
-+      0x9082, 0x4000, 0x1a04, 0x51c0, 0x918c, 0xff00, 0x810f, 0x9182,
-+      0x00ff, 0x1a04, 0x51c4, 0x2001, 0x110c, 0x2004, 0x9084, 0x0003,
-+      0x1904, 0x51ca, 0x9188, 0x1000, 0x2104, 0x9065, 0x0500, 0x6004,
-+      0x9084, 0x00ff, 0x908e, 0x0006, 0x11f0, 0x60a4, 0x900d, 0x1904,
-+      0x51df, 0x6050, 0x900d, 0x1148, 0x6802, 0x2d00, 0x6052, 0x604e,
-+      0x080c, 0x758b, 0x9006, 0x012e, 0x0005, 0x2d00, 0x200a, 0x6803,
-+      0x0000, 0x6052, 0x0ca8, 0x2001, 0x0005, 0x900e, 0x04c0, 0x2001,
-+      0x0028, 0x900e, 0x04a0, 0x9082, 0x0006, 0x1298, 0x2001, 0x1136,
-+      0x2004, 0xd0ac, 0x1158, 0x60a0, 0xd0bc, 0x1140, 0x6100, 0xd1fc,
-+      0x09a0, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001, 0x0028,
-+      0x00a8, 0x2009, 0x110c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
-+      0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001, 0x0029,
-+      0x6100, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e, 0x0038,
-+      0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,
-+      0x012e, 0x0005, 0x2001, 0x110c, 0x2004, 0xd084, 0x19d0, 0x9188,
-+      0x1000, 0x2104, 0x9065, 0x09a8, 0x6004, 0x9084, 0x00ff, 0x908e,
-+      0x0006, 0x1978, 0x6000, 0xd0c4, 0x0960, 0x0804, 0x5175, 0x080c,
-+      0x5791, 0x0904, 0x518b, 0x0804, 0x5179, 0x00e6, 0x0126, 0x2091,
-+      0x8000, 0x6874, 0x8007, 0x9084, 0x00ff, 0x2008, 0x9182, 0x00ff,
-+      0x1a04, 0x5247, 0x9188, 0x1000, 0x2104, 0x9065, 0x0538, 0x6004,
-+      0x908c, 0x00ff, 0x918e, 0x0006, 0x0128, 0x908c, 0xff00, 0x918e,
-+      0x0600, 0x11f8, 0x2c70, 0x687c, 0xd0fc, 0x0138, 0x6894, 0x9005,
-+      0x0120, 0x2060, 0x2d00, 0x6016, 0x0058, 0x080c, 0x8e83, 0x05e8,
-+      0x2e00, 0x6012, 0x2d00, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a,
-+      0x2009, 0x0003, 0x080c, 0x8f53, 0x9006, 0x0460, 0x2001, 0x0028,
-+      0x0440, 0x9082, 0x0006, 0x1298, 0x2001, 0x1136, 0x2004, 0xd0ac,
-+      0x1158, 0x60a0, 0xd0bc, 0x1140, 0x6100, 0xd1fc, 0x0998, 0x2001,
-+      0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009,
-+      0x110c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184,
-+      0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001,
-+      0x0029, 0x9005, 0x012e, 0x00ee, 0x0005, 0x2001, 0x002c, 0x0cc8,
-+      0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x68e0, 0x9005, 0x1568,
-+      0x68dc, 0x9082, 0x0101, 0x1648, 0x68c8, 0x9005, 0x1530, 0x68c4,
-+      0x9082, 0x0101, 0x1610, 0x6974, 0x2079, 0x1100, 0x918c, 0xff00,
-+      0x810f, 0x9182, 0x00ff, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130,
-+      0x6a98, 0x6b94, 0x6878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c,
-+      0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,
-+      0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e,
-+      0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e,
-+      0x00ee, 0x00fe, 0x0005, 0x52e3, 0x529b, 0x52b4, 0x52e3, 0x52e3,
-+      0x52e3, 0x52e3, 0x52e3, 0x2100, 0x9082, 0x007e, 0x1280, 0x080c,
-+      0x55b3, 0x2c70, 0x0148, 0x7010, 0x9306, 0x1904, 0x52eb, 0x7014,
-+      0x9206, 0x1904, 0x52eb, 0x0028, 0x7312, 0x7216, 0x0010, 0x080c,
-+      0x3dc2, 0x2c70, 0x0158, 0x04b8, 0x080c, 0x5608, 0x15a0, 0x2c70,
-+      0x7010, 0x9306, 0x1580, 0x7014, 0x9206, 0x1568, 0x080c, 0x8e83,
-+      0x0530, 0x2e00, 0x6012, 0x080c, 0xad70, 0x2d00, 0x6016, 0x600b,
-+      0xffff, 0x6023, 0x000a, 0x6878, 0x9086, 0x0001, 0x1170, 0x080c,
-+      0x2862, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002, 0x080c, 0x5568,
-+      0x2001, 0x0200, 0x706e, 0x7093, 0x0002, 0x2009, 0x0003, 0x080c,
-+      0x8f53, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001,
-+      0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000,
-+      0x012e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x0126, 0x2091,
-+      0x8000, 0x6894, 0x90c6, 0x0015, 0x0904, 0x54b0, 0x90c6, 0x0056,
-+      0x0904, 0x54b4, 0x90c6, 0x0066, 0x0904, 0x54b8, 0x90c6, 0x0071,
-+      0x0904, 0x54bc, 0x90c6, 0x0074, 0x0904, 0x54c0, 0x90c6, 0x007c,
-+      0x0904, 0x54c4, 0x90c6, 0x007e, 0x0904, 0x54c8, 0x90c6, 0x0037,
-+      0x0904, 0x54cc, 0x9016, 0x2079, 0x1100, 0x6974, 0x918c, 0xff00,
-+      0x810f, 0x9182, 0x00ff, 0x1a04, 0x54ab, 0x080c, 0x5608, 0x11a0,
-+      0x6004, 0x9084, 0x00ff, 0x9082, 0x0006, 0x1270, 0x6894, 0x90c6,
-+      0x006f, 0x0150, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1904, 0x5496,
-+      0x60a0, 0xd0bc, 0x1904, 0x5496, 0x6894, 0x90c6, 0x006f, 0x0158,
-+      0x90c6, 0x005e, 0x0904, 0x53df, 0x90c6, 0x0064, 0x0904, 0x5413,
-+      0x2008, 0x0804, 0x53aa, 0x6998, 0x2140, 0x918c, 0xff00, 0x810f,
-+      0x78d8, 0xd0ac, 0x1120, 0x9182, 0x0080, 0x0a04, 0x53aa, 0x9182,
-+      0x00ff, 0x1a04, 0x53aa, 0x6aa0, 0x6b9c, 0x7874, 0x9306, 0x1168,
-+      0x7878, 0x924e, 0x1120, 0x2208, 0x2310, 0x0804, 0x53aa, 0x99cc,
-+      0xff00, 0x1118, 0x2208, 0x2310, 0x04e8, 0x080c, 0x3dc2, 0x2c70,
-+      0x0904, 0x53b2, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1520, 0x0006,
-+      0x2e60, 0x080c, 0x57d6, 0x1108, 0xc185, 0x7000, 0xd0bc, 0x0108,
-+      0xc18d, 0x20a9, 0x0004, 0x9d80, 0x0031, 0x20a0, 0x20e9, 0x0001,
-+      0x9e80, 0x0006, 0x2098, 0x080c, 0x504f, 0x20a9, 0x0004, 0x9d80,
-+      0x0035, 0x20a0, 0x20e9, 0x0001, 0x9e80, 0x000a, 0x2098, 0x080c,
-+      0x504f, 0x000e, 0x0088, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0060,
-+      0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0030, 0x90c6, 0x4009,
-+      0x1108, 0x0010, 0x2001, 0x4006, 0x6896, 0x699a, 0x6a9e, 0x2001,
-+      0x0030, 0x0440, 0x080c, 0x8e83, 0x1130, 0x2001, 0x4005, 0x2009,
-+      0x0003, 0x9016, 0x0c88, 0x2e00, 0x6012, 0x080c, 0xad70, 0x2d00,
-+      0x6016, 0x6023, 0x0001, 0x6868, 0xd88c, 0x0108, 0xc0f5, 0x686a,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x2862, 0x012e, 0x9006, 0x080c,
-+      0x5556, 0x2001, 0x0002, 0x080c, 0x5568, 0x2009, 0x0002, 0x080c,
-+      0x8f53, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x0005, 0x7800,
-+      0x9086, 0x0003, 0x0118, 0x2009, 0x0007, 0x0448, 0x6e98, 0x860f,
-+      0x918c, 0x00ff, 0x96b4, 0x00ff, 0x080c, 0x5608, 0x0120, 0x2009,
-+      0x000a, 0x0804, 0x53aa, 0x9186, 0x007f, 0x0148, 0x6004, 0x9084,
-+      0x00ff, 0x9086, 0x0006, 0x0118, 0x2009, 0x0009, 0x0080, 0x00d6,
-+      0x080c, 0x0e9d, 0x1120, 0x00de, 0x2009, 0x0002, 0x0040, 0x2d00,
-+      0x00de, 0x6806, 0x080c, 0xaaf5, 0x1960, 0x2009, 0x0003, 0x2001,
-+      0x4005, 0x0804, 0x53ac, 0x6e98, 0x860f, 0x918c, 0x00ff, 0x96b4,
-+      0x00ff, 0x080c, 0x5608, 0x0120, 0x2009, 0x000a, 0x0804, 0x53aa,
-+      0x00d6, 0x080c, 0x0e9d, 0x1128, 0x00de, 0x2009, 0x0002, 0x0804,
-+      0x547a, 0x2d00, 0x00de, 0x6806, 0x00d6, 0x2068, 0x20a9, 0x002b,
-+      0x20e1, 0x0001, 0x2c98, 0x9de8, 0x0002, 0x20e9, 0x0001, 0x2da0,
-+      0x4003, 0x20a9, 0x0004, 0x9d80, 0x0006, 0x20a0, 0x9c80, 0x0006,
-+      0x2098, 0x080c, 0x504f, 0x20a9, 0x0004, 0x9d80, 0x000a, 0x20a0,
-+      0x9c80, 0x000a, 0x2098, 0x080c, 0x504f, 0x00de, 0x687b, 0x0000,
-+      0x6883, 0x0000, 0x6897, 0x4000, 0xd684, 0x1170, 0x2001, 0x1153,
-+      0x2004, 0xd0b4, 0x1118, 0x689b, 0x000b, 0x0400, 0x6000, 0xd08c,
-+      0x0118, 0x689b, 0x000c, 0x00d0, 0x6004, 0x9084, 0x00ff, 0x9086,
-+      0x0006, 0x0118, 0x689b, 0x0009, 0x0088, 0x7800, 0x9086, 0x0003,
-+      0x0118, 0x689b, 0x0007, 0x0050, 0x080c, 0xaabe, 0x1904, 0x53d9,
-+      0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x53ac, 0x687b, 0x0030,
-+      0x6897, 0x4005, 0x6804, 0x2009, 0x002b, 0x6aa0, 0x6b9c, 0x6ca8,
-+      0x6da4, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1078, 0x080c,
-+      0x9367, 0x1904, 0x53d9, 0x2009, 0x0002, 0x0c20, 0x2001, 0x0028,
-+      0x900e, 0x0804, 0x53da, 0x2009, 0x110c, 0x210c, 0xd18c, 0x0118,
-+      0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
-+      0x2001, 0x0029, 0x900e, 0x2001, 0x0029, 0x900e, 0x0804, 0x53da,
-+      0x080c, 0x2d84, 0x0804, 0x53db, 0x080c, 0x460a, 0x0804, 0x53db,
-+      0x080c, 0x3a74, 0x0804, 0x53db, 0x080c, 0x3e74, 0x0804, 0x53db,
-+      0x080c, 0x408f, 0x0804, 0x53db, 0x080c, 0x4291, 0x0804, 0x53db,
-+      0x080c, 0x448a, 0x0804, 0x53db, 0x080c, 0x2f43, 0x0804, 0x53db,
-+      0x6974, 0x6e78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1648, 0x918c,
-+      0xff00, 0x810f, 0x9182, 0x00ff, 0x1280, 0x9188, 0x1000, 0x2104,
-+      0x9065, 0x0158, 0x6004, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1148,
-+      0x00e1, 0x080c, 0x5721, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
-+      0x0090, 0x9082, 0x0006, 0x1240, 0x6100, 0xd1fc, 0x0d88, 0x2001,
-+      0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
-+      0x2001, 0x0029, 0x900e, 0x9005, 0x0005, 0x0126, 0x2091, 0x8000,
-+      0x6050, 0x900d, 0x0138, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052,
-+      0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0,
-+      0x0126, 0x2091, 0x8000, 0x604c, 0x9005, 0x0170, 0x00e6, 0x2071,
-+      0x1304, 0x7004, 0x9086, 0x0002, 0x0168, 0x00ee, 0x604c, 0x6802,
-+      0x2d00, 0x604e, 0x012e, 0x0005, 0x2d00, 0x6052, 0x604e, 0x6803,
-+      0x0000, 0x0cc0, 0x701c, 0x9c06, 0x1d80, 0x604c, 0x2070, 0x7000,
-+      0x6802, 0x2d00, 0x7002, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091,
-+      0x8000, 0x604c, 0x906d, 0x0130, 0x6800, 0x9005, 0x1108, 0x6052,
-+      0x604e, 0x9d05, 0x012e, 0x0005, 0x604c, 0x906d, 0x0130, 0x6800,
-+      0x9005, 0x1108, 0x6052, 0x604e, 0x9d05, 0x0005, 0x0126, 0x00c6,
-+      0x0026, 0x2091, 0x8000, 0x6210, 0x2260, 0x6200, 0x9005, 0x0110,
-+      0xc285, 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e, 0x0005,
-+      0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2260, 0x6204, 0x0006,
-+      0x9086, 0x0006, 0x1170, 0x609c, 0xd0ac, 0x0158, 0x080c, 0x58cb,
-+      0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011,
-+      0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0x6206, 0x0006, 0x9086,
-+      0x0006, 0x1120, 0x6290, 0x82ff, 0x090c, 0x0d7e, 0x000e, 0x00ce,
-+      0x012e, 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2260,
-+      0x6204, 0x0006, 0x9086, 0x0006, 0x1168, 0x609c, 0xd0a4, 0x0150,
-+      0x080c, 0x58c6, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110,
-+      0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215, 0x6206,
-+      0x00ce, 0x012e, 0x0005, 0x0026, 0x9182, 0x00ff, 0x0218, 0x9085,
-+      0x0001, 0x00a0, 0x9190, 0x1000, 0x2204, 0x9065, 0x1170, 0x0016,
-+      0x00d6, 0x080c, 0x0e9d, 0x2d60, 0x00de, 0x001e, 0x0d80, 0x2c00,
-+      0x2012, 0x9006, 0x60a6, 0x080c, 0x5100, 0x9006, 0x002e, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x0026, 0x9182, 0x00ff, 0x0218, 0x9085,
-+      0x0001, 0x0458, 0x00d6, 0x9190, 0x1000, 0x2204, 0x906d, 0x0518,
-+      0x2013, 0x0000, 0x00d6, 0x00c6, 0x2d60, 0x60a4, 0x906d, 0x0110,
-+      0x080c, 0x0ecf, 0x00ce, 0x00de, 0x00d6, 0x00c6, 0x68ac, 0x2060,
-+      0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2068, 0x080c, 0xa942,
-+      0x0110, 0x080c, 0x0edf, 0x080c, 0x8ed9, 0x00ce, 0x0c88, 0x00ce,
-+      0x00de, 0x080c, 0x0ecf, 0x00de, 0x9006, 0x002e, 0x012e, 0x0005,
-+      0x0016, 0x9182, 0x00ff, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188,
-+      0x1000, 0x2104, 0x9065, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6,
-+      0x0156, 0x0136, 0x0146, 0x9006, 0x600a, 0x600e, 0x6000, 0xc08c,
-+      0x6002, 0x080c, 0x62e4, 0x1520, 0x60a0, 0x9086, 0x007e, 0x0130,
-+      0x2001, 0x1136, 0x2004, 0xd0ac, 0x11d8, 0x0078, 0x7040, 0xd0e4,
-+      0x01b8, 0x00c6, 0x2061, 0x12bc, 0x7048, 0x2062, 0x704c, 0x6006,
-+      0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140,
-+      0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1100, 0x68ae,
-+      0x7040, 0x605e, 0x7048, 0x6062, 0x6138, 0x910a, 0x0208, 0x603a,
-+      0x704c, 0x6066, 0x20e1, 0x0000, 0x2099, 0x0276, 0x9c88, 0x000a,
-+      0x20e9, 0x0001, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a,
-+      0x9c88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200,
-+      0x6817, 0x0001, 0x7040, 0x606a, 0x7144, 0x616e, 0x7048, 0x6072,
-+      0x7050, 0x6076, 0x2069, 0x0200, 0x6817, 0x0000, 0x60a0, 0x9086,
-+      0x007e, 0x1110, 0x7144, 0x616e, 0x9182, 0x0211, 0x1218, 0x2009,
-+      0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0,
-+      0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349,
-+      0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009,
-+      0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010,
-+      0x2009, 0x0002, 0x6192, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
-+      0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0x6896, 0x703c,
-+      0x689a, 0x7054, 0x689e, 0x6a00, 0x2009, 0x1172, 0x210c, 0xd0bc,
-+      0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0120,
-+      0xd1e4, 0x0110, 0xc2bd, 0x0008, 0xc2bc, 0x6a02, 0x00ee, 0x002e,
-+      0x001e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a4, 0x906d,
-+      0x01c0, 0x6900, 0x81ff, 0x1540, 0x6a04, 0x9282, 0x0010, 0x1648,
-+      0x9d88, 0x0004, 0x20a9, 0x0010, 0x2104, 0x9086, 0xffff, 0x0128,
-+      0x8108, 0x1f04, 0x56dc, 0x080c, 0x0d7e, 0x260a, 0x8210, 0x6a06,
-+      0x0098, 0x080c, 0x0eb6, 0x01a8, 0x2d00, 0x60a6, 0x6803, 0x0000,
-+      0x9d88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04,
-+      0x56f4, 0x6807, 0x0001, 0x6e12, 0x9085, 0x0001, 0x012e, 0x00de,
-+      0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000, 0x00d6, 0x60a4,
-+      0x900d, 0x01a0, 0x2168, 0x6800, 0x9005, 0x1160, 0x080c, 0x5791,
-+      0x1168, 0x200b, 0xffff, 0x6804, 0x908a, 0x0002, 0x0218, 0x8001,
-+      0x6806, 0x0020, 0x080c, 0x0ecf, 0x60a7, 0x0000, 0x00de, 0x012e,
-+      0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x758b, 0x012e, 0x0005,
-+      0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000,
-+      0x604c, 0x2068, 0x6000, 0xd0dc, 0x1170, 0x8dff, 0x01f8, 0x83ff,
-+      0x0120, 0x6878, 0x9606, 0x0158, 0x0030, 0x686c, 0x9406, 0x1118,
-+      0x6870, 0x9506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x080c,
-+      0x895e, 0x6a00, 0x604c, 0x9d06, 0x1110, 0x624e, 0x0018, 0x9180,
-+      0x0000, 0x2202, 0x82ff, 0x1110, 0x6152, 0x8dff, 0x012e, 0x0005,
-+      0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x57d6,
-+      0x0118, 0x080c, 0xa9f4, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,
-+      0x57d6, 0x0118, 0x080c, 0xa987, 0x0010, 0x9085, 0x0001, 0x0005,
-+      0x080c, 0x57d6, 0x0118, 0x080c, 0xa9d7, 0x0010, 0x9085, 0x0001,
-+      0x0005, 0x080c, 0x57d6, 0x0118, 0x080c, 0xa9a3, 0x0010, 0x9085,
-+      0x0001, 0x0005, 0x080c, 0x57d6, 0x0118, 0x080c, 0xaa10, 0x0010,
-+      0x9085, 0x0001, 0x0005, 0x60a4, 0x900d, 0x1118, 0x9085, 0x0001,
-+      0x0005, 0x00e6, 0x2170, 0x7000, 0x9005, 0x1168, 0x20a9, 0x0010,
-+      0x9e88, 0x0004, 0x2104, 0x9606, 0x0130, 0x8108, 0x1f04, 0x579a,
-+      0x9085, 0x0001, 0x0008, 0x9006, 0x00ee, 0x0005, 0x00d6, 0x0126,
-+      0x2091, 0x8000, 0x60a4, 0x906d, 0x1128, 0x080c, 0x0eb6, 0x01a0,
-+      0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0x9d88, 0x0004,
-+      0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x57ba, 0x9085,
-+      0x0001, 0x012e, 0x00de, 0x0005, 0x9006, 0x0cd8, 0x00d6, 0x0126,
-+      0x2091, 0x8000, 0x60a4, 0x906d, 0x0130, 0x60a7, 0x0000, 0x080c,
-+      0x0ecf, 0x9085, 0x0001, 0x012e, 0x00de, 0x0005, 0x609c, 0xd0a4,
-+      0x0005, 0x00f6, 0x080c, 0x62e4, 0x01b0, 0x71c0, 0x81ff, 0x1198,
-+      0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
-+      0x907d, 0x0148, 0x7804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
-+      0x7800, 0xc0ed, 0x7802, 0x2079, 0x1152, 0x7804, 0xd0a4, 0x01e0,
-+      0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5608,
-+      0x1168, 0x6004, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118,
-+      0x9086, 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108,
-+      0x1f04, 0x57fd, 0x00ce, 0x015e, 0x080c, 0x588e, 0x0120, 0x2001,
-+      0x12bf, 0x200c, 0x0038, 0x2079, 0x1152, 0x7804, 0xd0a4, 0x0130,
-+      0x2009, 0x07d0, 0x2011, 0x5828, 0x080c, 0x7283, 0x00fe, 0x0005,
-+      0x2011, 0x5828, 0x080c, 0x71fa, 0x080c, 0x588e, 0x01d8, 0x2001,
-+      0x107e, 0x2004, 0x9080, 0x0000, 0x200c, 0xc1ec, 0x2102, 0x080c,
-+      0x58cb, 0x0130, 0x2009, 0x07d0, 0x2011, 0x5828, 0x080c, 0x7283,
-+      0x00e6, 0x2071, 0x1100, 0x9006, 0x7076, 0x707a, 0x080c, 0x2679,
-+      0x00ee, 0x0498, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,
-+      0x080c, 0x5608, 0x1520, 0x6000, 0xd0ec, 0x0508, 0x0046, 0x62a0,
-+      0x9294, 0x00ff, 0x8227, 0x9006, 0x2009, 0x0029, 0x080c, 0xc12f,
-+      0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0x9084, 0x00ff, 0x9085,
-+      0x0700, 0x6006, 0x2019, 0x0029, 0x080c, 0x76f0, 0x0076, 0x903e,
-+      0x080c, 0x75ee, 0x900e, 0x080c, 0xbec2, 0x007e, 0x004e, 0x001e,
-+      0x8108, 0x1f04, 0x584f, 0x00ce, 0x015e, 0x0005, 0x00c6, 0x6010,
-+      0x2060, 0x6000, 0xc0ec, 0x6002, 0x00ce, 0x0005, 0x7810, 0x2004,
-+      0xd0ac, 0x0005, 0x7810, 0x2004, 0xd0bc, 0x0005, 0x00f6, 0x2001,
-+      0x107e, 0x2004, 0x907d, 0x0110, 0x7800, 0xd0ec, 0x00fe, 0x0005,
-+      0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0x62a0, 0x9290, 0x1000,
-+      0x2204, 0x9c06, 0x190c, 0x0d7e, 0x000e, 0x6200, 0x9005, 0x0110,
-+      0xc2fd, 0x0008, 0xc2fc, 0x6202, 0x002e, 0x012e, 0x0005, 0x2011,
-+      0x1136, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x12bd, 0x200c, 0x2011,
-+      0x58bc, 0x080c, 0x7283, 0x0005, 0x2011, 0x58bc, 0x080c, 0x71fa,
-+      0x2011, 0x1136, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x2001, 0x1153,
-+      0x2004, 0xd0ac, 0x0005, 0x2001, 0x1153, 0x2004, 0xd0a4, 0x0005,
-+      0x2071, 0x1240, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012,
-+      0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2071, 0x1286, 0x7003,
-+      0x1240, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, 0x0001, 0x7013,
-+      0x1266, 0x7017, 0x0020, 0x701b, 0x0040, 0x703b, 0x0000, 0x2001,
-+      0x1262, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1263,
-+      0x900e, 0x710a, 0x2001, 0x1153, 0x2004, 0xd0fc, 0x1148, 0x2001,
-+      0x1153, 0x2004, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x04d8,
-+      0x2001, 0x1172, 0x200c, 0x9184, 0x000f, 0x0002, 0x58ff, 0x58ff,
-+      0x58ff, 0x58ff, 0x58ff, 0x591e, 0x592c, 0x58ff, 0x592f, 0x58ff,
-+      0x58ff, 0x58ff, 0x58ff, 0x58ff, 0x58ff, 0x58ff, 0x7003, 0x0003,
-+      0x2009, 0x1173, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110,
-+      0x2001, 0x0002, 0x7006, 0x00b8, 0x7003, 0x0005, 0x0c88, 0x7003,
-+      0x0004, 0x0136, 0x0146, 0x0156, 0x20e1, 0x0001, 0x2099, 0x1176,
-+      0x20e9, 0x0001, 0x20a1, 0x1290, 0x20a9, 0x0004, 0x4003, 0x015e,
-+      0x014e, 0x013e, 0x0000, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071,
-+      0x0050, 0x684c, 0x9005, 0x1158, 0x00e6, 0x2071, 0x1240, 0x7028,
-+      0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0804, 0x5998, 0x6844,
-+      0x9005, 0x01d8, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011,
-+      0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
-+      0x3e08, 0x1f04, 0x595e, 0x015e, 0x6a60, 0x9200, 0x7002, 0x6864,
-+      0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864,
-+      0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110,
-+      0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
-+      0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1240, 0x7028,
-+      0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006,
-+      0x00ee, 0x0005, 0x6868, 0xd0fc, 0x11d0, 0x00e6, 0x0026, 0x2001,
-+      0x1263, 0x2004, 0x9005, 0x0904, 0x5b7b, 0x687c, 0xd0bc, 0x1904,
-+      0x5b7b, 0x6978, 0x6874, 0x9105, 0x1904, 0x5b7b, 0x2001, 0x1263,
-+      0x2004, 0x0002, 0x5b7b, 0x59dc, 0x5a16, 0x5a16, 0x5efd, 0x0005,
-+      0x6868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x1263, 0x210c,
-+      0x81ff, 0x0904, 0x5b7b, 0x687c, 0xd0cc, 0x0904, 0x5b7b, 0x6880,
-+      0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x5b7b, 0x9186, 0x0003,
-+      0x0904, 0x5a16, 0x9186, 0x0004, 0x0904, 0x5efd, 0x684f, 0x8021,
-+      0x6853, 0x0017, 0x0028, 0x0005, 0x684f, 0x8020, 0x6853, 0x0016,
-+      0x2071, 0x1240, 0x701c, 0x9005, 0x1904, 0x5d24, 0x0e04, 0x5d6d,
-+      0x2071, 0x0000, 0x684c, 0x7082, 0x6850, 0x7032, 0x686c, 0x7086,
-+      0x7036, 0x6870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-+      0xd084, 0x190c, 0x0fcd, 0x2071, 0x1100, 0x2011, 0x0001, 0x6804,
-+      0x900d, 0x702c, 0x1148, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x9200,
-+      0x70be, 0x002e, 0x00ee, 0x0005, 0x00d6, 0x2168, 0x6904, 0x206a,
-+      0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x00de, 0x0c68, 0x684f, 0x0000,
-+      0x00f6, 0x2079, 0x0050, 0x2071, 0x1240, 0x206b, 0x0000, 0x7010,
-+      0x9005, 0x1904, 0x5b0a, 0x782c, 0x908c, 0x0780, 0x190c, 0x5f3b,
-+      0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x5a34, 0x5b0a,
-+      0x5a5a, 0x5aa3, 0x080c, 0x0d7e, 0x2071, 0x1100, 0x8d07, 0x8005,
-+      0x8005, 0xc0d5, 0x7822, 0x6804, 0x900d, 0x1170, 0x2071, 0x1317,
-+      0x703c, 0x9005, 0x1328, 0x2001, 0x1264, 0x2004, 0x8005, 0x703e,
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2168, 0x6904,
-+      0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
-+      0x70be, 0x0c20, 0x2071, 0x1100, 0x8d07, 0x8005, 0x8005, 0xc0d5,
-+      0x7822, 0x6804, 0x900d, 0x1588, 0x7824, 0x00e6, 0x2071, 0x0040,
-+      0x712c, 0xd19c, 0x1148, 0x2009, 0x112f, 0x210c, 0x918a, 0x0010,
-+      0x0218, 0x7022, 0x00ee, 0x0060, 0x00ee, 0xc0d4, 0x8006, 0x8006,
-+      0x806f, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be,
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x19e8, 0x2071,
-+      0x1317, 0x703c, 0x9005, 0x1328, 0x2001, 0x1264, 0x2004, 0x8005,
-+      0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2168,
-+      0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-+      0x9200, 0x70be, 0x0808, 0x00d6, 0x00e6, 0x7824, 0xc0d4, 0x8006,
-+      0x8006, 0x806f, 0x2071, 0x1100, 0x702c, 0x206a, 0x2d00, 0x702e,
-+      0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b,
-+      0xd0a4, 0x1d58, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b,
-+      0xd09c, 0x11b8, 0x00de, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822,
-+      0x6804, 0x900d, 0x1560, 0x2071, 0x1317, 0x703c, 0x9005, 0x1328,
-+      0x2001, 0x1264, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee,
-+      0x0005, 0x00de, 0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d,
-+      0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d,
-+      0x1170, 0x2071, 0x1317, 0x703c, 0x9005, 0x1328, 0x2001, 0x1264,
-+      0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
-+      0x1100, 0x9016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00,
-+      0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x00fe, 0x002e,
-+      0x00ee, 0x0005, 0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d,
-+      0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d,
-+      0x1904, 0x5b63, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c,
-+      0x11b0, 0x701c, 0x906d, 0x0198, 0x7010, 0x8001, 0x7012, 0x1108,
-+      0x701a, 0x2d04, 0x701e, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822,
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c, 0x0d50, 0x782c,
-+      0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x01b8, 0x00e6, 0x7824,
-+      0xc0d4, 0x8006, 0x8006, 0x806f, 0x2071, 0x1100, 0x702c, 0x206a,
-+      0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780,
-+      0x190c, 0x5f3b, 0xd0a4, 0x1d58, 0x00ee, 0x2071, 0x1317, 0x703c,
-+      0x9005, 0x1328, 0x2001, 0x1264, 0x2004, 0x8005, 0x703e, 0x00fe,
-+      0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1100, 0x9016, 0x702c,
-+      0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e,
-+      0x70bc, 0x9200, 0x70be, 0x00ee, 0x0804, 0x5b1a, 0x6868, 0xd0fc,
-+      0x1500, 0x00e6, 0x0026, 0x684f, 0x0000, 0x00f6, 0x2079, 0x0050,
-+      0x2071, 0x1240, 0x206b, 0x0000, 0x7010, 0x9005, 0x1904, 0x5c9c,
-+      0x782c, 0x908c, 0x0780, 0x190c, 0x5f3b, 0x8004, 0x8004, 0x8004,
-+      0x9084, 0x0003, 0x0002, 0x5b9a, 0x5c9c, 0x5bb6, 0x5c29, 0x080c,
-+      0x0d7e, 0x0005, 0x2071, 0x1100, 0x8d07, 0x8005, 0x8005, 0xc0d5,
-+      0x7822, 0x6804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005,
-+      0x9016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-+      0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0c70, 0x2071, 0x1100,
-+      0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822, 0x6804, 0x900d, 0x1904,
-+      0x5c1a, 0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005, 0x1220,
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040,
-+      0x712c, 0xd19c, 0x1148, 0x2009, 0x112f, 0x210c, 0x918a, 0x0010,
-+      0x0218, 0x7022, 0x00ee, 0x0060, 0x00ee, 0xc0d4, 0x8006, 0x8006,
-+      0x806f, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be,
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x19e8, 0x0e04,
-+      0x5c11, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
-+      0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1251, 0x200c, 0xc184,
-+      0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+      0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee,
-+      0x0005, 0x2001, 0x1251, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
-+      0x00ee, 0x0005, 0x9016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210,
-+      0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x0804,
-+      0x5bcc, 0x00d6, 0x00e6, 0x7824, 0xc0d4, 0x8006, 0x8006, 0x806f,
-+      0x2071, 0x1100, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000,
-+      0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x1d58,
-+      0x00ee, 0x0e04, 0x5c71, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
-+      0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084,
-+      0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+      0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780,
-+      0x190c, 0x5f3b, 0xd09c, 0x1188, 0x00de, 0x8d07, 0x8005, 0x8005,
-+      0xc0d5, 0x7822, 0x6804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee,
-+      0x0005, 0x7044, 0xc085, 0x7046, 0x0c40, 0x00de, 0x2d08, 0x7010,
-+      0x8000, 0x7012, 0x7018, 0x906d, 0x711a, 0x0110, 0x6902, 0x0008,
-+      0x711e, 0x2168, 0x6804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee,
-+      0x0005, 0x2071, 0x1100, 0x9016, 0x702c, 0x2168, 0x6904, 0x206a,
-+      0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
-+      0x00fe, 0x002e, 0x00ee, 0x0005, 0x2d08, 0x7010, 0x8000, 0x7012,
-+      0x7018, 0x906d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168,
-+      0x6804, 0x900d, 0x1904, 0x5d11, 0x782c, 0x9094, 0x0780, 0x190c,
-+      0x5f3b, 0xd09c, 0x11c8, 0x701c, 0x906d, 0x01b0, 0x684c, 0x9005,
-+      0x1198, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0x2d04, 0x701e,
-+      0x8d07, 0x8005, 0x8005, 0xc0d5, 0x7822, 0x782c, 0x9094, 0x0780,
-+      0x190c, 0x5f3b, 0xd09c, 0x0d38, 0x782c, 0x9094, 0x0780, 0x190c,
-+      0x5f3b, 0xd0a4, 0x05d0, 0x00e6, 0x7824, 0xc0d4, 0x8006, 0x8006,
-+      0x806f, 0x2071, 0x1100, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc,
-+      0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4,
-+      0x1d58, 0x00ee, 0x0e04, 0x5d0a, 0x7838, 0x7938, 0x910e, 0x1de0,
-+      0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
-+      0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-+      0x190c, 0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x00fe, 0x002e,
-+      0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,
-+      0x0005, 0x00e6, 0x2071, 0x1100, 0x9016, 0x702c, 0x2168, 0x6904,
-+      0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
-+      0x70be, 0x00ee, 0x0804, 0x5cac, 0x2071, 0x1240, 0x206b, 0x0000,
-+      0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d, 0x711a, 0x0110,
-+      0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d, 0x1128, 0x1e04,
-+      0x5d4d, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1100, 0x9016, 0x702c,
-+      0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e,
-+      0x70bc, 0x9200, 0x70be, 0x0e04, 0x5d39, 0x2071, 0x1240, 0x701c,
-+      0x2068, 0x684c, 0x900d, 0x0d28, 0x2071, 0x0000, 0x7182, 0x6850,
-+      0x7032, 0x686c, 0x7086, 0x7036, 0x6870, 0x708a, 0x2091, 0x4080,
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x2071, 0x1240,
-+      0x080c, 0x5f27, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1240, 0x206b,
-+      0x0000, 0x2d08, 0x7010, 0x8000, 0x7012, 0x7018, 0x906d, 0x711a,
-+      0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804, 0x900d, 0x1118,
-+      0x002e, 0x00ee, 0x0005, 0x2071, 0x1100, 0x9016, 0x702c, 0x2168,
-+      0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-+      0x9200, 0x70be, 0x002e, 0x00ee, 0x0005, 0x0006, 0x687c, 0x0006,
-+      0x6867, 0x0103, 0x20a9, 0x001c, 0x9d80, 0x001d, 0x20a0, 0x9006,
-+      0x20e9, 0x0001, 0x4004, 0x000e, 0x9084, 0x00ff, 0x687e, 0x000e,
-+      0x687a, 0x6982, 0x0005, 0x2071, 0x1240, 0x7004, 0x0002, 0x5db7,
-+      0x5db8, 0x5efc, 0x5eea, 0x5db5, 0x5efc, 0x080c, 0x0d7e, 0x0005,
-+      0x2001, 0x1263, 0x2004, 0x0002, 0x5dc2, 0x5dc2, 0x5e1a, 0x5e1b,
-+      0x5e85, 0x5e1b, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x5f40, 0x701c,
-+      0x906d, 0x01e0, 0x684c, 0x9005, 0x01d8, 0x0e04, 0x5de6, 0x694c,
-+      0x2071, 0x0000, 0x7182, 0x6850, 0x7032, 0x686c, 0x7086, 0x7036,
-+      0x6870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-+      0x190c, 0x0fcd, 0x2071, 0x1240, 0x080c, 0x5f27, 0x012e, 0x0488,
-+      0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c,
-+      0x2071, 0x1240, 0x1528, 0x2071, 0x1240, 0x700f, 0x0001, 0x6964,
-+      0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
-+      0x8101, 0x0108, 0x710e, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x00d6,
-+      0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1240, 0x701c, 0x2068,
-+      0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0x9005, 0x1108, 0x701a,
-+      0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, 0x1317, 0x683c,
-+      0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1113,
-+      0x2004, 0x2009, 0x13a1, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091,
-+      0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04,
-+      0x5e4d, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883,
-+      0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-+      0x0fcd, 0x2069, 0x1317, 0x683f, 0xffff, 0x012e, 0x00de, 0x0126,
-+      0x2091, 0x8000, 0x1e0c, 0x5fb5, 0x701c, 0x906d, 0x0560, 0x2001,
-+      0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c, 0x1518,
-+      0x2071, 0x1240, 0x700f, 0x0001, 0x6964, 0x9184, 0x00ff, 0x9086,
-+      0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e,
-+      0x8d07, 0x8005, 0x8005, 0xc0d5, 0x00d6, 0x2069, 0x0050, 0x6822,
-+      0x00de, 0x701c, 0x2068, 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e,
-+      0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
-+      0x1e0c, 0x5f40, 0x701c, 0x906d, 0x0548, 0x684c, 0x9086, 0x0004,
-+      0x1538, 0x0136, 0x0146, 0x0156, 0x2099, 0x1176, 0x20e1, 0x0001,
-+      0x20a1, 0x1290, 0x20e9, 0x0001, 0x20a9, 0x0004, 0x4003, 0x015e,
-+      0x014e, 0x013e, 0x2071, 0x1286, 0x9d80, 0x001b, 0x700f, 0x0001,
-+      0x7012, 0x7017, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000, 0x2e10,
-+      0x080c, 0x0f22, 0x2071, 0x1240, 0x7007, 0x0003, 0x012e, 0x0005,
-+      0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd09c,
-+      0x2071, 0x1240, 0x1d98, 0x2071, 0x1240, 0x700f, 0x0001, 0x6964,
-+      0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
-+      0x8101, 0x0108, 0x710e, 0x8d07, 0x8005, 0x8005, 0xc0d5, 0x00d6,
-+      0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1240, 0x701c, 0x2068,
-+      0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0x9005, 0x1978, 0x701a,
-+      0x012e, 0x0005, 0x2001, 0x1288, 0x2004, 0x908e, 0x0100, 0x1120,
-+      0x7007, 0x0001, 0x04a1, 0x0005, 0x908e, 0x0000, 0x0de0, 0x908e,
-+      0x0200, 0x1dc8, 0x080c, 0x5f3b, 0x0005, 0x684f, 0x0004, 0x206b,
-+      0x0000, 0x2d08, 0x2071, 0x1240, 0x7010, 0x8000, 0x7012, 0x7018,
-+      0x906d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x2168, 0x6804,
-+      0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1100, 0x9016,
-+      0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8,
-+      0x702e, 0x70bc, 0x9200, 0x70be, 0x002e, 0x00ee, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x701c, 0x906d, 0x0160, 0x7010, 0x8001, 0x7012,
-+      0x2d04, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x0ecf,
-+      0x0005, 0x012e, 0x0005, 0x2011, 0x8004, 0x080c, 0x3f23, 0x0cf8,
-+      0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01d8, 0xc084, 0x7046,
-+      0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
-+      0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-+      0xd084, 0x190c, 0x0fcd, 0x2009, 0x1262, 0x200b, 0x0000, 0x00fe,
-+      0x0005, 0x782c, 0x9094, 0x0780, 0x19b1, 0xd0a4, 0x0dc0, 0x2001,
-+      0x1263, 0x2004, 0x9086, 0x0004, 0x0140, 0x2009, 0x1262, 0x2104,
-+      0x8000, 0x200a, 0x9082, 0x000f, 0x0e50, 0x00e6, 0x2071, 0x1100,
-+      0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009,
-+      0x112f, 0x210c, 0x918a, 0x0010, 0x0218, 0x7022, 0x00ee, 0x0060,
-+      0x00ee, 0xc0d4, 0x8006, 0x8006, 0x806f, 0x702c, 0x206a, 0x2d00,
-+      0x702e, 0x70bc, 0x8000, 0x70be, 0x782c, 0x9094, 0x0780, 0x190c,
-+      0x5f3b, 0xd0a4, 0x19e8, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
-+      0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,
-+      0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd, 0x2009, 0x1262,
-+      0x200b, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0050,
-+      0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e,
-+      0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,
-+      0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x0fcd,
-+      0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4,
-+      0x0db8, 0x00e6, 0x2071, 0x1100, 0x7824, 0xc0d4, 0x8006, 0x8006,
-+      0x806f, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70bc, 0x8000, 0x70be,
-+      0x782c, 0x9094, 0x0780, 0x190c, 0x5f3b, 0xd0a4, 0x1d68, 0x00d6,
-+      0x2069, 0x0050, 0x693c, 0x2069, 0x1263, 0x6808, 0x690a, 0x2069,
-+      0x1317, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001, 0x1264,
-+      0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7090,
-+      0x908a, 0x0029, 0x1a0c, 0x0d7e, 0x9082, 0x001d, 0x001b, 0x6027,
-+      0x1e00, 0x0005, 0x60da, 0x6064, 0x6080, 0x60a8, 0x60c9, 0x6109,
-+      0x611b, 0x6080, 0x60f1, 0x601f, 0x604d, 0x601e, 0x0005, 0x00d6,
-+      0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518,
-+      0x7093, 0x0028, 0x2069, 0x12c9, 0x2d04, 0x7002, 0x080c, 0x6404,
-+      0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7093, 0x0028, 0x2069,
-+      0x12c9, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6,
-+      0x0036, 0x0046, 0x0056, 0x2071, 0x1347, 0x080c, 0x1577, 0x005e,
-+      0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200,
-+      0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7093, 0x0028,
-+      0x2069, 0x12c9, 0x2d04, 0x7002, 0x080c, 0x6492, 0x6028, 0x9085,
-+      0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c,
-+      0x2401, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x618c, 0xd1d4,
-+      0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7093, 0x0020, 0x080c,
-+      0x618c, 0x0028, 0x7093, 0x001d, 0x0010, 0x7093, 0x001f, 0x0005,
-+      0x2001, 0x0088, 0x080c, 0x2401, 0x6124, 0xd1cc, 0x11d8, 0xd1dc,
-+      0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3, 0x0001,
-+      0x600c, 0xc0b4, 0x600e, 0x080c, 0x6314, 0x2001, 0x0080, 0x080c,
-+      0x2401, 0x7093, 0x0028, 0x0058, 0x7093, 0x001e, 0x0040, 0x7093,
-+      0x001d, 0x0028, 0x7093, 0x0020, 0x0010, 0x7093, 0x001f, 0x0005,
-+      0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6314, 0x2001,
-+      0x0080, 0x080c, 0x2401, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
-+      0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7093, 0x0028, 0x0040,
-+      0x7093, 0x001e, 0x0028, 0x7093, 0x001d, 0x0010, 0x7093, 0x001f,
-+      0x0005, 0x2001, 0x00a0, 0x080c, 0x2401, 0x6124, 0xd1dc, 0x1138,
-+      0xd1e4, 0x0138, 0x080c, 0x15a1, 0x7093, 0x001e, 0x0010, 0x7093,
-+      0x001d, 0x0005, 0x080c, 0x6205, 0x6124, 0xd1dc, 0x1188, 0x080c,
-+      0x618c, 0x0016, 0x080c, 0x15a1, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
-+      0x0138, 0x7093, 0x001e, 0x0020, 0x7093, 0x001f, 0x080c, 0x618c,
-+      0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2401, 0x000e, 0x6124,
-+      0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
-+      0x7093, 0x001e, 0x0028, 0x7093, 0x001d, 0x0010, 0x7093, 0x0021,
-+      0x0005, 0x080c, 0x6205, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
-+      0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d, 0x0010,
-+      0x7093, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2401,
-+      0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
-+      0xd1e4, 0x0158, 0x7093, 0x001e, 0x0040, 0x7093, 0x001d, 0x0028,
-+      0x7093, 0x0020, 0x0010, 0x7093, 0x001f, 0x0005, 0x0016, 0x00c6,
-+      0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-+      0x1100, 0x2091, 0x8000, 0x080c, 0x62e4, 0x11f8, 0x2001, 0x110c,
-+      0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c,
-+      0x2340, 0x6024, 0xd0cc, 0x0168, 0x2001, 0x00a0, 0x080c, 0x2401,
-+      0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001,
-+      0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6300, 0x0150,
-+      0x080c, 0x62f6, 0x1138, 0x2001, 0x0001, 0x080c, 0x1f11, 0x080c,
-+      0x62be, 0x00a0, 0x080c, 0x6202, 0x0178, 0x2001, 0x0001, 0x080c,
-+      0x1f11, 0x7090, 0x9086, 0x001e, 0x0120, 0x7090, 0x9086, 0x0022,
-+      0x1118, 0x7093, 0x0025, 0x0010, 0x7093, 0x0021, 0x012e, 0x00ee,
-+      0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x619d, 0x080c,
-+      0x72bf, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x619d,
-+      0x080c, 0x72b6, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,
-+      0x080c, 0x85a2, 0x2071, 0x1100, 0x080c, 0x6136, 0x001e, 0x00fe,
-+      0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
-+      0x00f6, 0x0126, 0x080c, 0x85a2, 0x2061, 0x0100, 0x2069, 0x0140,
-+      0x2071, 0x1100, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011,
-+      0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec, 0x080c,
-+      0x87a2, 0x080c, 0x7271, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e,
-+      0x60e3, 0x0000, 0x080c, 0xc44e, 0x080c, 0xc469, 0x2009, 0x0004,
-+      0x080c, 0x2355, 0x080c, 0x2261, 0x2001, 0x1100, 0x2003, 0x0004,
-+      0x6027, 0x0008, 0x080c, 0x0b68, 0x2001, 0x0001, 0x080c, 0x1f11,
-+      0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-+      0x0005, 0x0026, 0x00e6, 0x2011, 0x61aa, 0x2071, 0x1317, 0x701c,
-+      0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee,
-+      0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe,
-+      0x9086, 0x00c0, 0x0170, 0x2001, 0x00c0, 0x080c, 0x2401, 0x0156,
-+      0x20a9, 0x002d, 0x1d04, 0x6212, 0x2091, 0x6000, 0x1f04, 0x6212,
-+      0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
-+      0x0140, 0x2071, 0x1100, 0x2001, 0x12a8, 0x200c, 0x9186, 0x0000,
-+      0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,
-+      0x0003, 0x0158, 0x0804, 0x62ac, 0x7093, 0x0022, 0x0040, 0x7093,
-+      0x0021, 0x0028, 0x7093, 0x0023, 0x0010, 0x7093, 0x0024, 0x60e3,
-+      0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x1fb8, 0x0026,
-+      0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+      0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e, 0x002e,
-+      0x7000, 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b,
-+      0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024,
-+      0xd0ac, 0x0120, 0x012e, 0x015e, 0x0804, 0x62ba, 0x6800, 0x9084,
-+      0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2340, 0x6904, 0xd1d4, 0x1140,
-+      0x2001, 0x0100, 0x080c, 0x2401, 0x1f04, 0x6267, 0x080c, 0x633e,
-+      0x012e, 0x015e, 0x080c, 0x62f6, 0x01a8, 0x6044, 0x9005, 0x0168,
-+      0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x633e, 0x9006,
-+      0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110,
-+      0x080c, 0x633e, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130,
-+      0x2009, 0x00c8, 0x2011, 0x61aa, 0x080c, 0x7283, 0x002e, 0x001e,
-+      0x2001, 0x12a8, 0x2003, 0x0004, 0x080c, 0x6007, 0x080c, 0x62f6,
-+      0x0148, 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100, 0x2001, 0x12a8,
-+      0x2003, 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+      0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1100, 0x2001,
-+      0x12a7, 0x2003, 0x0000, 0x2001, 0x1298, 0x2003, 0x0000, 0x9006,
-+      0x7092, 0x60e2, 0x6886, 0x080c, 0x1fb8, 0x9006, 0x080c, 0x2401,
-+      0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f,
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x12a7, 0x2004,
-+      0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x2001, 0x1172, 0x2004,
-+      0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001,
-+      0x1172, 0x2004, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005,
-+      0x0006, 0x2001, 0x1172, 0x2004, 0x9084, 0x0030, 0x9086, 0x0010,
-+      0x000e, 0x0005, 0x0006, 0x2001, 0x1172, 0x2004, 0x9084, 0x0030,
-+      0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x110c,
-+      0x2004, 0x908c, 0x0013, 0x0190, 0x9084, 0x0011, 0x0120, 0x080c,
-+      0x1fd8, 0x900e, 0x0028, 0x080c, 0x58c6, 0x1dc8, 0x2009, 0x0002,
-+      0x2019, 0x0028, 0x080c, 0x2831, 0x9006, 0x0019, 0x001e, 0x003e,
-+      0x0005, 0x00e6, 0x2071, 0x110c, 0x2e04, 0x0118, 0x9085, 0x0010,
-+      0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006,
-+      0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006,
-+      0x0016, 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052,
-+      0x613a, 0x20a9, 0x0012, 0x1d04, 0x6353, 0x2091, 0x6000, 0x1f04,
-+      0x6353, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400,
-+      0x9084, 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f,
-+      0x0000, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e,
-+      0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
-+      0x1fb8, 0x2001, 0x00a0, 0x080c, 0x2401, 0x000e, 0x6052, 0x0005,
-+      0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
-+      0x0100, 0x2069, 0x0140, 0x2071, 0x1100, 0x6020, 0x9084, 0x0080,
-+      0x0138, 0x2001, 0x110c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x63fc,
-+      0x2001, 0x110c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff,
-+      0x602a, 0x6027, 0x0200, 0x2001, 0x0090, 0x080c, 0x2401, 0x20a9,
-+      0x0366, 0x6024, 0xd0cc, 0x1510, 0x1d04, 0x63a9, 0x2091, 0x6000,
-+      0x1f04, 0x63a9, 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002,
-+      0x080c, 0x88ec, 0x080c, 0x87a2, 0x901e, 0x080c, 0x8847, 0x2001,
-+      0x00a0, 0x080c, 0x2401, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001,
-+      0x1100, 0x2003, 0x0001, 0x9085, 0x0001, 0x0470, 0x86ff, 0x1110,
-+      0x080c, 0x15a1, 0x60e3, 0x0000, 0x2001, 0x1298, 0x2004, 0x080c,
-+      0x1fb8, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2401, 0x20a9, 0x0366,
-+      0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2340, 0x6024, 0x910c,
-+      0x0138, 0x1d04, 0x63e0, 0x2091, 0x6000, 0x1f04, 0x63e0, 0x0810,
-+      0x6028, 0x9085, 0x1e00, 0x602a, 0x70ac, 0x9005, 0x1118, 0x6887,
-+      0x0001, 0x0008, 0x6886, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e,
-+      0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
-+      0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1100, 0x2069,
-+      0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,
-+      0x6458, 0x2001, 0x0088, 0x080c, 0x2401, 0x9006, 0x60e2, 0x6886,
-+      0x080c, 0x1fb8, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
-+      0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400,
-+      0x2069, 0x12c9, 0x7000, 0x206a, 0x7093, 0x0026, 0x7003, 0x0001,
-+      0x20a9, 0x0002, 0x1d04, 0x643a, 0x2091, 0x6000, 0x1f04, 0x643a,
-+      0x0804, 0x648a, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,
-+      0x2009, 0x1e00, 0x080c, 0x2340, 0x6024, 0x910c, 0x0528, 0x9084,
-+      0x1a00, 0x1510, 0x1d04, 0x6446, 0x2091, 0x6000, 0x1f04, 0x6446,
-+      0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c, 0x88ec,
-+      0x080c, 0x87a2, 0x901e, 0x080c, 0x8847, 0x2001, 0x00a0, 0x080c,
-+      0x2401, 0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003,
-+      0x0001, 0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2401,
-+      0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac, 0x9005, 0x1118, 0x6887,
-+      0x0001, 0x0008, 0x6886, 0x2001, 0x1298, 0x2004, 0x080c, 0x1fb8,
-+      0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-+      0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-+      0x00e6, 0x2061, 0x0100, 0x2071, 0x1100, 0x6020, 0x9084, 0x00c0,
-+      0x01e8, 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c,
-+      0x88ec, 0x080c, 0x87a2, 0x901e, 0x080c, 0x8847, 0x2069, 0x0140,
-+      0x2001, 0x00a0, 0x080c, 0x2401, 0x2001, 0x12a8, 0x2003, 0x0001,
-+      0x2001, 0x1100, 0x2003, 0x0001, 0x0804, 0x6529, 0x2001, 0x110c,
-+      0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6192, 0x2069,
-+      0x0140, 0x2001, 0x0080, 0x080c, 0x2401, 0x60e3, 0x0000, 0x2069,
-+      0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028,
-+      0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x12c9, 0x7000,
-+      0x206a, 0x7093, 0x0027, 0x7003, 0x0001, 0x0804, 0x6529, 0x6027,
-+      0x1e00, 0x2009, 0x1e00, 0x080c, 0x2340, 0x6024, 0x910c, 0x01c8,
-+      0x9084, 0x1c00, 0x11b0, 0x1d04, 0x64e7, 0x0006, 0x0016, 0x00c6,
-+      0x00d6, 0x00e6, 0x080c, 0x715a, 0x00ee, 0x00de, 0x00ce, 0x001e,
-+      0x000e, 0x00e6, 0x2071, 0x1317, 0x7018, 0x00ee, 0x9005, 0x19f8,
-+      0x0500, 0x0026, 0x2011, 0x61aa, 0x080c, 0x71fa, 0x2011, 0x619d,
-+      0x080c, 0x72bf, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70ac,
-+      0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x1298,
-+      0x2004, 0x080c, 0x1fb8, 0x60e2, 0x2001, 0x110c, 0x200c, 0xc1b4,
-+      0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
-+      0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,
-+      0x2061, 0x0100, 0x2071, 0x1100, 0x7130, 0xd184, 0x1170, 0x080c,
-+      0x2987, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1153, 0x2214, 0xd2ac,
-+      0x1120, 0x7030, 0xd08c, 0x0904, 0x658f, 0x2011, 0x1153, 0x220c,
-+      0xd1a4, 0x0528, 0x0016, 0x2019, 0x000e, 0x080c, 0xc0b9, 0x0156,
-+      0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080,
-+      0x0188, 0x080c, 0x5608, 0x1170, 0x8127, 0x9006, 0x0016, 0x2009,
-+      0x000e, 0x080c, 0xc12f, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
-+      0x73af, 0x001e, 0x8108, 0x1f04, 0x655b, 0x015e, 0x001e, 0xd1ac,
-+      0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2831,
-+      0x001e, 0x0068, 0x0156, 0x20a9, 0x007f, 0x900e, 0x080c, 0x5608,
-+      0x1110, 0x080c, 0x5100, 0x8108, 0x1f04, 0x6586, 0x015e, 0x080c,
-+      0x15a1, 0x2011, 0x0003, 0x080c, 0x88e2, 0x2011, 0x0002, 0x080c,
-+      0x88ec, 0x080c, 0x87a2, 0x0036, 0x901e, 0x080c, 0x8847, 0x003e,
-+      0x60e3, 0x0000, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c, 0x621a,
-+      0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
-+      0x2071, 0x120c, 0x7003, 0x0000, 0x7007, 0x0000, 0x708f, 0x0000,
-+      0x7093, 0x0001, 0x70c7, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,
-+      0x6848, 0x9005, 0x1120, 0x9085, 0x0001, 0x0804, 0x660e, 0x6840,
-+      0x9005, 0x01d8, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011,
-+      0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
-+      0x3e08, 0x1f04, 0x65ce, 0x015e, 0x6a50, 0x9200, 0x7002, 0x6854,
-+      0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854,
-+      0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110,
-+      0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
-+      0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c,
-+      0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x120c,
-+      0x6807, 0x0001, 0x00de, 0x080c, 0x6b26, 0x9006, 0x00ee, 0x0005,
-+      0x2079, 0x0040, 0x2071, 0x120c, 0x7004, 0x0002, 0x6620, 0x6621,
-+      0x6bb3, 0x66b3, 0x67a9, 0x661e, 0x661e, 0x67d2, 0x080c, 0x0d7e,
-+      0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, 0x6bb4,
-+      0xd0a4, 0x0508, 0x7824, 0xc0d4, 0x8006, 0x8006, 0x806f, 0x9006,
-+      0x6802, 0x6806, 0x6864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x12c0,
-+      0x04d3, 0x2001, 0x1100, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104,
-+      0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003,
-+      0x19d0, 0x080c, 0x66b3, 0x782c, 0xd09c, 0x090c, 0x6b26, 0x0005,
-+      0x9082, 0x005a, 0x1218, 0x2100, 0x0023, 0x0c18, 0x080c, 0x66ec,
-+      0x0c90, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+      0x66ec, 0x670e, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+      0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+      0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66f8, 0x66ec, 0x688e,
-+      0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66f8, 0x68cf, 0x6910,
-+      0x6957, 0x696b, 0x66ec, 0x66ec, 0x670e, 0x66f8, 0x66ec, 0x66ec,
-+      0x6782, 0x6a16, 0x6a31, 0x66ec, 0x670e, 0x66ec, 0x66ec, 0x66ec,
-+      0x66ec, 0x6778, 0x6a31, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec,
-+      0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x6722, 0x66ec, 0x66ec, 0x66ec,
-+      0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x6b59, 0x66ec,
-+      0x66ec, 0x66ec, 0x66ec, 0x66ec, 0x6736, 0x66ec, 0x66ec, 0x66ec,
-+      0x66ec, 0x66ec, 0x66ec, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003,
-+      0x11b0, 0x782c, 0x080c, 0x6b52, 0xd0a4, 0x0188, 0x7824, 0xc0d4,
-+      0x8006, 0x8006, 0x806f, 0x9006, 0x6802, 0x6806, 0x6864, 0x9084,
-+      0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c38, 0x00e9, 0x080c,
-+      0x6b26, 0x0005, 0x66ec, 0x66f8, 0x687a, 0x66ec, 0x66f8, 0x66ec,
-+      0x66f8, 0x66f8, 0x66ec, 0x66f8, 0x687a, 0x66f8, 0x66f8, 0x66f8,
-+      0x66f8, 0x66f8, 0x66ec, 0x66f8, 0x687a, 0x66ec, 0x66ec, 0x66f8,
-+      0x66ec, 0x66ec, 0x66ec, 0x66f8, 0x00e6, 0x2071, 0x120c, 0x2009,
-+      0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005,
-+      0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005,
-+      0x7007, 0x0001, 0x6868, 0x9084, 0x00ff, 0x9105, 0x686a, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x0005, 0x6864, 0x8007,
-+      0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
-+      0x683b, 0x7007, 0x0003, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b,
-+      0x683b, 0x0005, 0x6864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001,
-+      0x1120, 0x7007, 0x0001, 0x0804, 0x6853, 0x7007, 0x0003, 0x7012,
-+      0x2d00, 0x7016, 0x701a, 0x704b, 0x6853, 0x0005, 0x6864, 0x8007,
-+      0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x66f4, 0x7007, 0x0001,
-+      0x2009, 0x1133, 0x210c, 0x81ff, 0x11a8, 0x6868, 0x9084, 0x00ff,
-+      0x686a, 0x6883, 0x0000, 0x080c, 0x52f4, 0x1108, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x6867, 0x0139, 0x687a, 0x6982, 0x080c, 0x5b76,
-+      0x012e, 0x0ca0, 0x6994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064,
-+      0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186,
-+      0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8,
-+      0x6897, 0x4005, 0x689b, 0x0001, 0x2001, 0x0030, 0x900e, 0x08b8,
-+      0x687c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001,
-+      0x0804, 0x6a48, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0x20e1,
-+      0x0001, 0x20e9, 0x0001, 0x9080, 0x0030, 0x2098, 0x20a1, 0x1239,
-+      0x4003, 0x6888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x66fc, 0x6ab4,
-+      0x928a, 0x0002, 0x1a04, 0x66fc, 0x82ff, 0x1138, 0x68b8, 0x69bc,
-+      0x9105, 0x0118, 0x2001, 0x680e, 0x0018, 0x9280, 0x6804, 0x2005,
-+      0x70ce, 0x7010, 0x9015, 0x0904, 0x67f0, 0x080c, 0x0e9d, 0x1118,
-+      0x7007, 0x0004, 0x0005, 0x2d00, 0x7022, 0x70cc, 0x2060, 0xe000,
-+      0x6866, 0xe004, 0x9d00, 0x709e, 0x709b, 0x0001, 0xe008, 0x920a,
-+      0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296,
-+      0x0004, 0x0108, 0x9108, 0x71a2, 0x810b, 0x71a6, 0x9e90, 0x0023,
-+      0x080c, 0x0f22, 0x7094, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
-+      0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2068, 0x080c, 0x0ecf,
-+      0x7014, 0x2068, 0x0804, 0x66fc, 0x7020, 0x2068, 0x7018, 0x6802,
-+      0x6807, 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x67a9,
-+      0x7014, 0x2068, 0x7007, 0x0001, 0x68b4, 0x9005, 0x1128, 0x68b8,
-+      0x69bc, 0x9105, 0x0108, 0x00b1, 0x6864, 0x9084, 0x00ff, 0x9086,
-+      0x001e, 0x0904, 0x6a48, 0x04b8, 0x6806, 0x680a, 0x0002, 0x001d,
-+      0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a, 0x001d,
-+      0x0005, 0x0004, 0x00f6, 0x00e6, 0x00c6, 0x0076, 0x0066, 0x6fb8,
-+      0x6ebc, 0x6804, 0x2060, 0x9cf0, 0x002d, 0x9cf8, 0x0033, 0x2009,
-+      0x0005, 0x700c, 0x7816, 0x7008, 0x7812, 0x7004, 0x7806, 0x7000,
-+      0x7802, 0x7e0e, 0x7f0a, 0x8109, 0x0128, 0x9ef2, 0x0004, 0x9ffa,
-+      0x0006, 0x0c78, 0x6004, 0x9065, 0x1d30, 0x006e, 0x007e, 0x00ce,
-+      0x00ee, 0x00fe, 0x0005, 0x2009, 0x1133, 0x210c, 0x81ff, 0x1178,
-+      0x080c, 0x5151, 0x1108, 0x0005, 0x080c, 0x5d95, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0xac01, 0x080c, 0x5b76, 0x012e, 0x0ca0, 0x2001,
-+      0x0028, 0x900e, 0x0c88, 0x2009, 0x1133, 0x210c, 0x81ff, 0x11d8,
-+      0x6888, 0x9005, 0x01e0, 0x6883, 0x0000, 0x687c, 0xd0f4, 0x0120,
-+      0x080c, 0x5250, 0x1138, 0x0005, 0x9006, 0x687a, 0x080c, 0x51e5,
-+      0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0x687a, 0x6982, 0x080c,
-+      0x5b76, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001,
-+      0x0000, 0x0c80, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a,
-+      0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014,
-+      0x2068, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001,
-+      0x6974, 0x810f, 0x918c, 0x00ff, 0x6878, 0x9084, 0x00ff, 0x20a9,
-+      0x0001, 0x9096, 0x0001, 0x01a8, 0x900e, 0x20a9, 0x00ff, 0x9096,
-+      0x0002, 0x0178, 0x9005, 0x11f0, 0x6974, 0x810f, 0x918c, 0x00ff,
-+      0x080c, 0x5608, 0x11b8, 0x0066, 0x6e80, 0x080c, 0x5703, 0x006e,
-+      0x0088, 0x0046, 0x2011, 0x110c, 0x2224, 0xc484, 0x2412, 0x004e,
-+      0x00c6, 0x080c, 0x5608, 0x1110, 0x080c, 0x57c6, 0x8108, 0x1f04,
-+      0x68b9, 0x00ce, 0x687c, 0xd084, 0x1118, 0x080c, 0x0ecf, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x0005, 0x0126,
-+      0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x58cb, 0x0580, 0x2061,
-+      0x1354, 0x6100, 0xd184, 0x0178, 0x6888, 0x9084, 0x00ff, 0x1550,
-+      0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000,
-+      0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0x6890, 0x9005, 0x1110,
-+      0x2001, 0x001e, 0x8000, 0x6016, 0x6888, 0x9084, 0x00ff, 0x0178,
-+      0x6006, 0x6888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0x6888,
-+      0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x6b10, 0x012e,
-+      0x0804, 0x6b0a, 0x012e, 0x0804, 0x6b04, 0x012e, 0x0804, 0x6b07,
-+      0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x58cb, 0x05e0,
-+      0x2061, 0x1354, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c,
-+      0x1530, 0x6c78, 0x9484, 0x0003, 0x0170, 0x6988, 0x918c, 0x00ff,
-+      0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508,
-+      0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0x6988, 0x810f,
-+      0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288,
-+      0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0x6890,
-+      0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804,
-+      0x6b10, 0x012e, 0x0804, 0x6b0d, 0x012e, 0x0804, 0x6b0a, 0x0126,
-+      0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1354, 0x6300, 0xd38c,
-+      0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x6b1e,
-+      0x012e, 0x0804, 0x6b0d, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007,
-+      0x0001, 0x687c, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1354, 0x6000,
-+      0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0x6888, 0x9005, 0x05c8,
-+      0x688c, 0x9065, 0x0590, 0x2001, 0x1133, 0x2004, 0x9005, 0x0118,
-+      0x080c, 0x8f09, 0x0068, 0x6017, 0x0400, 0x605b, 0x0000, 0x697c,
-+      0xd1a4, 0x0110, 0x6980, 0x615a, 0x2009, 0x0041, 0x080c, 0x8f53,
-+      0x6988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e,
-+      0x2011, 0xfdff, 0x080c, 0x73af, 0x002e, 0x687c, 0xd0c4, 0x0148,
-+      0x2061, 0x1354, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208,
-+      0x600a, 0x00ce, 0x012e, 0x0804, 0x6b10, 0x00ce, 0x012e, 0x0804,
-+      0x6b0a, 0x6984, 0x9186, 0x002e, 0x0d40, 0x9186, 0x002d, 0x0d28,
-+      0x9186, 0x0045, 0x0528, 0x9186, 0x002a, 0x1130, 0x2001, 0x110c,
-+      0x200c, 0xc194, 0x2102, 0x08c8, 0x9186, 0x0020, 0x0170, 0x9186,
-+      0x0029, 0x1d18, 0x6974, 0x918c, 0xff00, 0x810f, 0x080c, 0x5608,
-+      0x1960, 0x6000, 0xc0e4, 0x6002, 0x0840, 0x688c, 0x9065, 0x09a8,
-+      0x6007, 0x0024, 0x2001, 0x12c0, 0x2004, 0x601a, 0x0804, 0x69a5,
-+      0x688c, 0x9065, 0x0950, 0x00e6, 0x6890, 0x9075, 0x2001, 0x1133,
-+      0x2004, 0x9005, 0x0150, 0x080c, 0x8f09, 0x8eff, 0x0118, 0x2e60,
-+      0x080c, 0x8f09, 0x00ee, 0x0804, 0x69a5, 0x6024, 0xc0dc, 0xc0d5,
-+      0x6026, 0x2e60, 0x6007, 0x003a, 0x68a0, 0x9005, 0x0130, 0x6007,
-+      0x003b, 0x68a4, 0x602e, 0x68a8, 0x6016, 0x6003, 0x0001, 0x080c,
-+      0x756e, 0x080c, 0x7aa4, 0x00ee, 0x0804, 0x69a5, 0x2061, 0x1354,
-+      0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x6b1e, 0x0126, 0x2091,
-+      0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x6b1e,
-+      0x012e, 0x6883, 0x0016, 0x0804, 0x6b17, 0x6883, 0x0007, 0x0804,
-+      0x6b17, 0x6864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138,
-+      0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x66f4, 0x0040, 0x7007,
-+      0x0003, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x6a48, 0x0005,
-+      0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1100, 0x61cc,
-+      0x81ff, 0x1904, 0x6aca, 0x6130, 0xd194, 0x1904, 0x6af4, 0x6878,
-+      0x2070, 0x9e82, 0x15c0, 0x0a04, 0x6abe, 0x6060, 0x9e02, 0x1a04,
-+      0x6abe, 0x7120, 0x9186, 0x0006, 0x1904, 0x6aad, 0x7010, 0x9005,
-+      0x0904, 0x6aca, 0x2004, 0xd0e4, 0x1904, 0x6aef, 0x2061, 0x1354,
-+      0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x1590, 0x7024, 0xd0dc,
-+      0x1904, 0x6af7, 0x6883, 0x0000, 0x6803, 0x0000, 0x2d08, 0x7014,
-+      0x9005, 0x1198, 0x7116, 0x687c, 0xd0f4, 0x1904, 0x6afa, 0x2001,
-+      0x1153, 0x2004, 0xd09c, 0x1118, 0x687c, 0xc0cc, 0x687e, 0x2e60,
-+      0x080c, 0x72d9, 0x012e, 0x00ee, 0x0005, 0x2068, 0x6800, 0x9005,
-+      0x1de0, 0x6902, 0x2168, 0x687c, 0xd0f4, 0x1904, 0x6afa, 0x012e,
-+      0x00ee, 0x0005, 0x012e, 0x00ee, 0x6883, 0x0006, 0x0804, 0x6b17,
-+      0xd184, 0x0dc0, 0xd1c4, 0x11a8, 0x00b8, 0x6974, 0x918c, 0xff00,
-+      0x810f, 0x080c, 0x5608, 0x15d8, 0x6000, 0xd0e4, 0x15c0, 0x7120,
-+      0x9186, 0x0007, 0x1118, 0x6883, 0x0002, 0x0498, 0x6883, 0x0008,
-+      0x0480, 0x6883, 0x000e, 0x0468, 0x6883, 0x0017, 0x0450, 0x6883,
-+      0x0035, 0x0438, 0x2001, 0x1172, 0x2004, 0xd0fc, 0x01e8, 0x6878,
-+      0x2070, 0x9e82, 0x15c0, 0x02c0, 0x6060, 0x9e02, 0x12a8, 0x7120,
-+      0x9186, 0x0006, 0x1188, 0x7010, 0x9005, 0x0170, 0x2004, 0xd0bc,
-+      0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x6a53,
-+      0x7003, 0x0002, 0x0804, 0x6a53, 0x6883, 0x0028, 0x0010, 0x6883,
-+      0x0029, 0x012e, 0x00ee, 0x0418, 0x6883, 0x002a, 0x0cd0, 0x6883,
-+      0x0045, 0x0cb8, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c,
-+      0xbd23, 0x012e, 0x00ee, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009,
-+      0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010,
-+      0x2009, 0x0001, 0x6884, 0x9084, 0xff00, 0x9105, 0x6886, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x0005, 0x080c, 0x0ecf,
-+      0x0005, 0x00d6, 0x080c, 0x72d0, 0x00de, 0x0005, 0x00d6, 0x00e6,
-+      0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01f0,
-+      0x908c, 0x0780, 0x190c, 0x6bb4, 0xd09c, 0x11c0, 0x2071, 0x1100,
-+      0x70bc, 0x90ea, 0x0010, 0x0290, 0x8001, 0x70be, 0x702c, 0x2068,
-+      0x2d04, 0x702e, 0x9006, 0x206a, 0x6806, 0x2071, 0x0040, 0x8d07,
-+      0x8005, 0x8005, 0xc0d5, 0x7022, 0x702c, 0x0c10, 0x012e, 0x00ee,
-+      0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x6bb4, 0x000e,
-+      0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x7007, 0x0001,
-+      0x6a74, 0x9282, 0x0004, 0x1a04, 0x6ba4, 0x697c, 0x9188, 0x1000,
-+      0x2104, 0x9065, 0x6004, 0xd284, 0x0140, 0x05e0, 0x8007, 0x9084,
-+      0x00ff, 0x9084, 0x0006, 0x1108, 0x04a8, 0x2c10, 0x080c, 0x8e83,
-+      0x1118, 0x080c, 0x8f26, 0x05a0, 0x6212, 0x6874, 0x0002, 0x6b83,
-+      0x6b88, 0x6b8b, 0x6b91, 0x2019, 0x0002, 0x080c, 0xc0b9, 0x0060,
-+      0x080c, 0xc05a, 0x0048, 0x2019, 0x0002, 0x6980, 0x080c, 0xc072,
-+      0x0018, 0x6980, 0x080c, 0xc05a, 0x080c, 0x8ed9, 0x6887, 0x0000,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x001e, 0x002e,
-+      0x003e, 0x00ce, 0x00de, 0x0005, 0x6887, 0x0006, 0x0c88, 0x6887,
-+      0x0002, 0x0c70, 0x6887, 0x0005, 0x0c58, 0x6887, 0x0004, 0x0c40,
-+      0x6887, 0x0007, 0x0c28, 0x0005, 0x2011, 0x8003, 0x080c, 0x3f23,
-+      0x0cf8, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c,
-+      0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120,
-+      0x080c, 0x12a2, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
-+      0x2001, 0x0307, 0x2003, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c,
-+      0x05d8, 0x7d44, 0x7c40, 0x9584, 0x00f6, 0x1508, 0x9484, 0x7000,
-+      0x0138, 0x908a, 0x2000, 0x1258, 0x9584, 0x0700, 0x8007, 0x0498,
-+      0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484,
-+      0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11b0,
-+      0x080c, 0xc426, 0x080c, 0x709e, 0x7817, 0x0140, 0x0098, 0x9584,
-+      0x0076, 0x1118, 0x080c, 0x70fb, 0x19c8, 0xd5a4, 0x0138, 0x0046,
-+      0x0056, 0x080c, 0x1a74, 0x005e, 0x004e, 0x0020, 0x080c, 0xc426,
-+      0x7817, 0x0140, 0x080c, 0x6c56, 0x2001, 0x130d, 0x2004, 0x9005,
-+      0x090c, 0x7aa4, 0x0005, 0x0002, 0x6c2d, 0x6eb5, 0x6c24, 0x6c24,
-+      0x6c24, 0x6c24, 0x6c24, 0x6c24, 0x7817, 0x0140, 0x2001, 0x130d,
-+      0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x7000, 0x908c, 0xff00,
-+      0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688a, 0x9286, 0x2000,
-+      0x1148, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x483b, 0x0068,
-+      0x0451, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x6e02, 0x0028,
-+      0x9286, 0x8000, 0x1110, 0x080c, 0x6fc8, 0x7817, 0x0140, 0x2001,
-+      0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x2001, 0x110f,
-+      0x2004, 0xd08c, 0x0178, 0x2001, 0x1100, 0x2004, 0x9086, 0x0003,
-+      0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x3f23,
-+      0x003e, 0x002e, 0x0005, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
-+      0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x6dd3, 0x9186,
-+      0x0023, 0x1550, 0x080c, 0x7061, 0x0904, 0x6dd3, 0x7124, 0x610a,
-+      0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0x8f53,
-+      0x0804, 0x6dd3, 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130,
-+      0x2009, 0x0015, 0x080c, 0x8f53, 0x0804, 0x6dd3, 0x908e, 0x0100,
-+      0x1904, 0x6dd3, 0x7034, 0x9005, 0x1904, 0x6dd3, 0x2009, 0x0016,
-+      0x080c, 0x8f53, 0x0804, 0x6dd3, 0x9186, 0x0022, 0x1904, 0x6dd3,
-+      0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5,
-+      0x68da, 0x7100, 0x918c, 0x00ff, 0x6976, 0x7004, 0x687a, 0x00f6,
-+      0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016,
-+      0x2008, 0x080c, 0x1f8d, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
-+      0x080c, 0x1f63, 0x6956, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
-+      0x2071, 0x1100, 0x70ae, 0x00ee, 0x7034, 0x9005, 0x1904, 0x6dd3,
-+      0x2009, 0x0017, 0x0804, 0x6d92, 0x908e, 0x0400, 0x1158, 0x7034,
-+      0x9005, 0x1904, 0x6dd3, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030,
-+      0x0804, 0x6d92, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904,
-+      0x6dd3, 0x2009, 0x0018, 0x0804, 0x6d92, 0x908e, 0x2010, 0x1120,
-+      0x2009, 0x0019, 0x0804, 0x6d92, 0x908e, 0x2110, 0x1120, 0x2009,
-+      0x001a, 0x0804, 0x6d92, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005,
-+      0x1904, 0x6dd3, 0x2009, 0x001b, 0x0804, 0x6d92, 0x908e, 0x5000,
-+      0x1140, 0x7034, 0x9005, 0x1904, 0x6dd3, 0x2009, 0x001c, 0x0804,
-+      0x6d92, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x6d92,
-+      0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x6dd3, 0x2009,
-+      0x0024, 0x0804, 0x6d92, 0x908c, 0xff00, 0x918e, 0x2400, 0x1120,
-+      0x2009, 0x002d, 0x0804, 0x6d92, 0x908c, 0xff00, 0x918e, 0x5300,
-+      0x1120, 0x2009, 0x002a, 0x0804, 0x6d92, 0x908e, 0x0f00, 0x1120,
-+      0x2009, 0x0020, 0x0804, 0x6d92, 0x908e, 0x5300, 0x1108, 0x00d8,
-+      0x908e, 0x6104, 0x11c0, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082,
-+      0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108,
-+      0x0046, 0x2124, 0x080c, 0x3f23, 0x004e, 0x8108, 0x1f04, 0x6d54,
-+      0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f,
-+      0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e,
-+      0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118,
-+      0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118,
-+      0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118,
-+      0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6834, 0xd0d4, 0x0110,
-+      0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
-+      0x080c, 0x1f63, 0x15d0, 0x080c, 0x55b3, 0x15b8, 0x6612, 0x6516,
-+      0x86ff, 0x01e8, 0x001e, 0x0016, 0x9186, 0x0017, 0x1158, 0x6874,
-+      0x9606, 0x11a8, 0x6878, 0x9506, 0x9084, 0xff00, 0x1180, 0x6000,
-+      0xc0f5, 0x6002, 0x9186, 0x0046, 0x1150, 0x6874, 0x9606, 0x1138,
-+      0x6878, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x00a0, 0x00c6,
-+      0x080c, 0x8e83, 0x001e, 0x0198, 0x6112, 0x6023, 0x0004, 0x7120,
-+      0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016,
-+      0x001e, 0x080c, 0x8f53, 0x00ce, 0x0005, 0x001e, 0x0ce0, 0x2001,
-+      0x110d, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x3f23,
-+      0x00c6, 0x080c, 0x8f26, 0x001e, 0x0d80, 0x6112, 0x6023, 0x0004,
-+      0x7120, 0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186,
-+      0x0030, 0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007,
-+      0x0051, 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c,
-+      0x75be, 0x0898, 0x080c, 0x297d, 0x1140, 0x7010, 0x9084, 0xff00,
-+      0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00c6, 0x0046,
-+      0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c,
-+      0x7061, 0x0904, 0x6e5f, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200,
-+      0x1140, 0x7034, 0x9005, 0x15d8, 0x2009, 0x0015, 0x080c, 0x8f53,
-+      0x04b0, 0x908e, 0x0100, 0x1598, 0x7034, 0x9005, 0x1580, 0x2009,
-+      0x0016, 0x080c, 0x8f53, 0x0458, 0x9186, 0x0032, 0x1540, 0x7030,
-+      0x908e, 0x1400, 0x1520, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263,
-+      0x2204, 0x8211, 0x220c, 0x080c, 0x1f63, 0x11c0, 0x080c, 0x55b3,
-+      0x11a8, 0x6612, 0x6516, 0x00c6, 0x080c, 0x8e83, 0x0170, 0x001e,
-+      0x6112, 0x080c, 0xad70, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e,
-+      0x080c, 0x8f53, 0x080c, 0x7aa4, 0x0010, 0x00ce, 0x001e, 0x004e,
-+      0x00ce, 0x0005, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696,
-+      0x00ff, 0x11a8, 0x9592, 0xfffc, 0x0290, 0x9596, 0xfffd, 0x1118,
-+      0x2009, 0x007f, 0x04e8, 0x9596, 0xfffe, 0x1118, 0x2009, 0x007e,
-+      0x04b8, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x0488, 0x9016,
-+      0x2019, 0x1136, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x00ff,
-+      0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071,
-+      0x1081, 0x2e1c, 0x93ed, 0x0000, 0x1128, 0x82ff, 0x1170, 0x2410,
-+      0xc2fd, 0x0058, 0x6f10, 0x2600, 0x9706, 0x6814, 0x1120, 0x9546,
-+      0x1110, 0x2408, 0x0068, 0x9745, 0x0d80, 0x8420, 0x8e70, 0x1f04,
-+      0x6e91, 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208,
-+      0x9006, 0x00de, 0x00ee, 0x004e, 0x0005, 0x7000, 0x908c, 0xff00,
-+      0x810f, 0x9184, 0x000f, 0x004a, 0x7817, 0x0140, 0x2001, 0x130d,
-+      0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x6ed5, 0x6ed5, 0x6ed5,
-+      0x7073, 0x6ed5, 0x6ede, 0x6f0b, 0x6f9b, 0x6ed5, 0x6ed5, 0x6ed5,
-+      0x6ed5, 0x6ed5, 0x6ed5, 0x6ed5, 0x6ed5, 0x7817, 0x0140, 0x2001,
-+      0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x7110, 0xd1bc,
-+      0x0508, 0x7120, 0x2160, 0x9c8c, 0x0007, 0x11e0, 0x9c8a, 0x15c0,
-+      0x02c8, 0x6860, 0x9c02, 0x12b0, 0x7008, 0x9084, 0x00ff, 0x6110,
-+      0x9188, 0x0004, 0x210c, 0x9106, 0x1168, 0x700c, 0x6110, 0x9188,
-+      0x0005, 0x210c, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009, 0x0046,
-+      0x080c, 0x8f53, 0x7817, 0x0140, 0x2001, 0x130d, 0x2004, 0x9005,
-+      0x090c, 0x7aa4, 0x0005, 0x00c6, 0x9484, 0x0fff, 0x0904, 0x6f71,
-+      0x7110, 0xd1bc, 0x1904, 0x6f71, 0x7108, 0x700c, 0x2028, 0x918c,
-+      0x00ff, 0x2130, 0x9094, 0xff00, 0x15c0, 0x81ff, 0x15b0, 0x9080,
-+      0x298c, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, 0x9106,
-+      0x0904, 0x6f71, 0x080c, 0x55b3, 0x1904, 0x6f71, 0x6612, 0x6516,
-+      0x6000, 0xd0ec, 0x15f0, 0x6204, 0x9294, 0xff00, 0x8217, 0x9286,
-+      0x0006, 0x1188, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x05e0, 0x6112,
-+      0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044,
-+      0x080c, 0xb7dd, 0x0430, 0x6204, 0x9294, 0x00ff, 0x9286, 0x0006,
-+      0x1140, 0x9295, 0x0600, 0x6206, 0x0c28, 0x190c, 0x6e62, 0x11c8,
-+      0x0888, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0198, 0x6112, 0x6023,
-+      0x0004, 0x7120, 0x610a, 0x9286, 0x0004, 0x1118, 0x6007, 0x0005,
-+      0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c,
-+      0x7aa4, 0x7817, 0x0140, 0x2001, 0x130d, 0x2004, 0x9005, 0x090c,
-+      0x7aa4, 0x00ce, 0x0005, 0x2001, 0x110d, 0x2004, 0xd0ec, 0x0120,
-+      0x2011, 0x8049, 0x080c, 0x3f23, 0x00c6, 0x080c, 0x8f26, 0x001e,
-+      0x0d40, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156,
-+      0x6017, 0x0300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x756e,
-+      0x080c, 0x7aa4, 0x08b0, 0x7110, 0xd1bc, 0x0508, 0x7020, 0x2060,
-+      0x9c84, 0x0007, 0x11e0, 0x9c82, 0x15c0, 0x02c8, 0x6860, 0x9c02,
-+      0x12b0, 0x7008, 0x9084, 0x00ff, 0x6110, 0x9188, 0x0004, 0x210c,
-+      0x9106, 0x1168, 0x700c, 0x6110, 0x9188, 0x0005, 0x210c, 0x9106,
-+      0x1130, 0x7124, 0x610a, 0x2009, 0x0045, 0x080c, 0x8f53, 0x7817,
-+      0x0140, 0x2001, 0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005,
-+      0x080c, 0x297d, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,
-+      0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,
-+      0x0005, 0x6fdf, 0x6fe0, 0x6fdf, 0x6fdf, 0x7049, 0x7055, 0x0005,
-+      0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7048, 0x700c,
-+      0x7108, 0x080c, 0x1f63, 0x1904, 0x7048, 0x080c, 0x55b3, 0x1904,
-+      0x7048, 0x6612, 0x6516, 0x6204, 0x7110, 0xd1bc, 0x01f8, 0x928c,
-+      0x00ff, 0x9186, 0x0004, 0x0118, 0x9186, 0x0006, 0x15c8, 0x00c6,
-+      0x080c, 0x7061, 0x00ce, 0x0904, 0x7048, 0x00c6, 0x080c, 0x8e83,
-+      0x001e, 0x05f0, 0x6112, 0x080c, 0xad70, 0x6023, 0x0002, 0x7120,
-+      0x610a, 0x2009, 0x0088, 0x080c, 0x8f53, 0x0490, 0x928c, 0x00ff,
-+      0x9186, 0x0006, 0x0160, 0x9186, 0x0004, 0x0148, 0x9294, 0xff00,
-+      0x8217, 0x9286, 0x0004, 0x0118, 0x9286, 0x0006, 0x1188, 0x00c6,
-+      0x080c, 0x8e83, 0x001e, 0x01e0, 0x6112, 0x080c, 0xad70, 0x6023,
-+      0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x8f53, 0x0080,
-+      0x00c6, 0x080c, 0x8e83, 0x001e, 0x0158, 0x6112, 0x080c, 0xad70,
-+      0x6023, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x8f53,
-+      0x0005, 0x7110, 0xd1bc, 0x0140, 0x00a1, 0x0130, 0x7124, 0x610a,
-+      0x2009, 0x0089, 0x080c, 0x8f53, 0x0005, 0x7110, 0xd1bc, 0x0140,
-+      0x0041, 0x0130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x8f53,
-+      0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82, 0x15c0,
-+      0x0240, 0x2001, 0x1118, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001,
-+      0x0005, 0x9006, 0x0ce8, 0x7110, 0xd1bc, 0x11f8, 0x7024, 0x2060,
-+      0x9c84, 0x0007, 0x11d0, 0x9c82, 0x15c0, 0x02b8, 0x6860, 0x9c02,
-+      0x12a0, 0x7008, 0x9084, 0x00ff, 0x6110, 0x9188, 0x0004, 0x210c,
-+      0x9106, 0x1158, 0x700c, 0x6110, 0x9188, 0x0005, 0x210c, 0x9106,
-+      0x1120, 0x2009, 0x0051, 0x080c, 0x8f53, 0x7817, 0x0140, 0x2001,
-+      0x130d, 0x2004, 0x9005, 0x090c, 0x7aa4, 0x0005, 0x2031, 0x0105,
-+      0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031, 0x0207,
-+      0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6, 0x00d6,
-+      0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000, 0x05c8, 0x080c,
-+      0x8e83, 0x05b0, 0x0066, 0x00c6, 0x0046, 0x2011, 0x0263, 0x2204,
-+      0x8211, 0x220c, 0x080c, 0x1f63, 0x1598, 0x080c, 0x55b3, 0x1580,
-+      0x6612, 0x6516, 0x2c00, 0x004e, 0x00ce, 0x6012, 0x080c, 0xad70,
-+      0x080c, 0x0eb6, 0x0508, 0x2d00, 0x605a, 0x9006, 0x6802, 0x6866,
-+      0x6c6a, 0x9df8, 0x001b, 0x20a9, 0x000e, 0x20e9, 0x0001, 0x20e1,
-+      0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e, 0x6616, 0x6007, 0x003e,
-+      0x6023, 0x0001, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4,
-+      0x00fe, 0x00de, 0x00ce, 0x0005, 0x080c, 0x8ed9, 0x006e, 0x0cc0,
-+      0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184,
-+      0xf000, 0x810f, 0x9086, 0x2000, 0x1540, 0x9186, 0x0022, 0x11d0,
-+      0x2001, 0x0111, 0x2004, 0x9005, 0x1510, 0x7030, 0x908e, 0x0400,
-+      0x01f0, 0x908e, 0x6000, 0x01d8, 0x908e, 0x5400, 0x01c0, 0x908e,
-+      0x0300, 0x1138, 0x2009, 0x1136, 0x210c, 0xd18c, 0x1180, 0xd1a4,
-+      0x1170, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7061, 0x0128,
-+      0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085,
-+      0x0001, 0x00ce, 0x0005, 0x2071, 0x1317, 0x7003, 0x0003, 0x700f,
-+      0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x15c0, 0x7007,
-+      0x0000, 0x7026, 0x702b, 0x85b8, 0x7032, 0x7037, 0x861b, 0x703b,
-+      0xffff, 0x703f, 0xffff, 0x7042, 0x7047, 0x4719, 0x704a, 0x705b,
-+      0x728c, 0x2001, 0x12aa, 0x2003, 0x0003, 0x2001, 0x12ac, 0x2003,
-+      0x0100, 0x0005, 0x2071, 0x1317, 0x1d04, 0x71e9, 0x2091, 0x6000,
-+      0x700c, 0x8001, 0x700e, 0x1500, 0x2001, 0x1174, 0x2004, 0xd0c4,
-+      0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001,
-+      0x20d1, 0x0000, 0x080c, 0x0d7e, 0x700f, 0x0361, 0x7007, 0x0001,
-+      0x0126, 0x2091, 0x8000, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142,
-+      0x1130, 0x7044, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024,
-+      0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009,
-+      0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff,
-+      0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001,
-+      0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184,
-+      0x007f, 0x090c, 0x8696, 0x0010, 0x7034, 0x080f, 0x7038, 0x9005,
-+      0x0118, 0x0310, 0x8001, 0x703a, 0x703c, 0x9005, 0x0118, 0x0310,
-+      0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a,
-+      0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e,
-+      0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, 0x900d,
-+      0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109,
-+      0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
-+      0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
-+      0x012e, 0x7004, 0x0002, 0x720f, 0x7210, 0x7228, 0x00e6, 0x2071,
-+      0x1317, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
-+      0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1317, 0x701c, 0x9206,
-+      0x1110, 0x701a, 0x701e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071,
-+      0x1317, 0x6088, 0x9102, 0x0208, 0x618a, 0x00ee, 0x0005, 0x0005,
-+      0x7110, 0x080c, 0x5608, 0x1158, 0x6088, 0x8001, 0x0240, 0x608a,
-+      0x1130, 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e, 0x8108,
-+      0x9182, 0x00ff, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x0005,
-+      0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128,
-+      0x8001, 0x6042, 0x1110, 0x080c, 0xac18, 0x6018, 0x9005, 0x0518,
-+      0x8001, 0x601a, 0x1500, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-+      0x0006, 0x11b8, 0x6014, 0x2068, 0x6884, 0x908a, 0x199a, 0x0288,
-+      0x9082, 0x1999, 0x6886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999,
-+      0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x687c, 0x9084, 0x1000,
-+      0x0110, 0x080c, 0xa6b1, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001,
-+      0x45c0, 0x9102, 0x0220, 0x7017, 0x15c0, 0x7007, 0x0000, 0x0005,
-+      0x00e6, 0x2071, 0x1317, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee,
-+      0x0005, 0x2001, 0x1320, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071,
-+      0x1317, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1323,
-+      0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1317, 0x711a, 0x721e,
-+      0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6, 0x0026, 0x7054, 0x8000,
-+      0x7056, 0x2061, 0x12aa, 0x6008, 0x9086, 0x0000, 0x0158, 0x7068,
-+      0x6036, 0x7064, 0x6032, 0x7060, 0x602e, 0x705c, 0x602a, 0x2c10,
-+      0x080c, 0x0f22, 0x002e, 0x00ce, 0x0005, 0x0006, 0x0016, 0x00c6,
-+      0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x715a, 0x015e, 0x00fe,
-+      0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,
-+      0x1317, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6,
-+      0x0006, 0x2071, 0x1317, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076,
-+      0x000e, 0x00ee, 0x0005, 0x00c6, 0x2061, 0x1354, 0x00ce, 0x0005,
-+      0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080, 0x1354, 0x2060,
-+      0x0005, 0x6884, 0x908a, 0x199a, 0x1630, 0x9005, 0x1150, 0x00c6,
-+      0x2061, 0x1354, 0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e,
-+      0x0018, 0x908e, 0xffff, 0x01a8, 0x8003, 0x800b, 0x810b, 0x9108,
-+      0x611a, 0x687c, 0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x735c,
-+      0xd0b4, 0x1160, 0xd0bc, 0x15e0, 0x2009, 0x0006, 0x080c, 0x7386,
-+      0x0005, 0x900e, 0x0c68, 0x2001, 0x1999, 0x08b8, 0xd0fc, 0x0160,
-+      0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x7380, 0x908c,
-+      0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11d0, 0x2009,
-+      0x1174, 0x2104, 0xd084, 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043,
-+      0x0804, 0x8f53, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804,
-+      0x8f53, 0x6110, 0x210c, 0xd1ac, 0x0d38, 0x6024, 0xc0cd, 0x6026,
-+      0x0c18, 0xc0d4, 0x6026, 0x6890, 0x602e, 0x688c, 0x6032, 0x08f8,
-+      0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904,
-+      0x7380, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6,
-+      0x2c78, 0x080c, 0x137e, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009,
-+      0x0042, 0x080c, 0x8f53, 0x0005, 0x6110, 0x210c, 0xd1ac, 0x0d70,
-+      0x6124, 0xc1cd, 0x6126, 0x0c50, 0xd0fc, 0x0188, 0x908c, 0x2020,
-+      0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002, 0x0148,
-+      0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x8f53, 0x0005, 0x00a1,
-+      0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x8f53, 0x0cb0,
-+      0x6110, 0x210c, 0xd1ac, 0x0d38, 0x6124, 0xc1cd, 0x6126, 0x0c18,
-+      0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x00d6, 0x6014,
-+      0x90ec, 0xf000, 0x0510, 0x2068, 0x6982, 0x6800, 0x6016, 0x9186,
-+      0x0001, 0x1188, 0x697c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158,
-+      0x00c6, 0x2061, 0x1354, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210,
-+      0x0208, 0x6206, 0x00ce, 0x080c, 0x59b8, 0x6014, 0x906d, 0x0076,
-+      0x2039, 0x0000, 0x190c, 0x72d9, 0x007e, 0x00de, 0x0005, 0x0156,
-+      0x00c6, 0x2061, 0x1354, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008,
-+      0x9204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138,
-+      0x6808, 0x9005, 0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006,
-+      0x8004, 0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086,
-+      0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200,
-+      0x1f04, 0x73d1, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020,
-+      0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005,
-+      0x0510, 0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be,
-+      0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a,
-+      0x1220, 0x1f04, 0x73fb, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,
-+      0x73fb, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,
-+      0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,
-+      0x0126, 0x2091, 0x2800, 0x2079, 0x1304, 0x012e, 0x00d6, 0x2069,
-+      0x1304, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,
-+      0x2069, 0x0200, 0x080c, 0x8dc3, 0x0401, 0x080c, 0x8dae, 0x00e9,
-+      0x080c, 0x8db1, 0x00d1, 0x080c, 0x8db4, 0x00b9, 0x080c, 0x8db7,
-+      0x00a1, 0x080c, 0x8dba, 0x0089, 0x080c, 0x8dbd, 0x0071, 0x080c,
-+      0x8dc0, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04,
-+      0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1,
-+      0x0240, 0x9006, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804,
-+      0x9084, 0x0007, 0x0002, 0x746d, 0x7491, 0x74db, 0x7473, 0x7491,
-+      0x746d, 0x746b, 0x746b, 0x080c, 0x0d7e, 0x080c, 0x7271, 0x080c,
-+      0x7aa4, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005,
-+      0x2011, 0x4f57, 0x080c, 0x71fa, 0x7828, 0x9092, 0x00c8, 0x1228,
-+      0x8000, 0x782a, 0x080c, 0x4f94, 0x0c88, 0x62c0, 0x080c, 0x8dc7,
-+      0x080c, 0x4f57, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000,
-+      0x0c28, 0x080c, 0x7271, 0x6220, 0xd2a4, 0x0178, 0x62c0, 0x82ff,
-+      0x1160, 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0d7e, 0x2009,
-+      0x0013, 0x080c, 0x8f53, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065,
-+      0x090c, 0x0d7e, 0x7804, 0x9086, 0x0004, 0x0904, 0x7517, 0x7828,
-+      0x9092, 0xc350, 0x1230, 0x8000, 0x782a, 0x00ce, 0x080c, 0x857e,
-+      0x0c50, 0x2011, 0x0130, 0x2214, 0x080c, 0x8dc7, 0x6104, 0x9186,
-+      0x0003, 0x1188, 0x00e6, 0x2071, 0x1100, 0x70e4, 0x00ee, 0xd08c,
-+      0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1100, 0x080c,
-+      0x4faa, 0x00ee, 0x00ce, 0x080c, 0xc463, 0x2009, 0x0014, 0x080c,
-+      0x8f53, 0x00ce, 0x0840, 0x2001, 0x1320, 0x2003, 0x0000, 0x62c0,
-+      0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0d7e,
-+      0x2009, 0x0013, 0x080c, 0x8fab, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+      0x7824, 0x9005, 0x090c, 0x0d7e, 0x781c, 0x906d, 0x090c, 0x0d7e,
-+      0x080c, 0x8dc7, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x080c,
-+      0x8ed9, 0x693c, 0x81ff, 0x090c, 0x0d7e, 0x8109, 0x693e, 0x6854,
-+      0x9015, 0x0110, 0x7a1e, 0x0010, 0x7918, 0x791e, 0x7807, 0x0000,
-+      0x7827, 0x0000, 0x00de, 0x00ce, 0x080c, 0x7aa4, 0x08a8, 0x6104,
-+      0x9186, 0x0002, 0x0128, 0x9186, 0x0004, 0x0110, 0x0804, 0x74af,
-+      0x7808, 0x9c06, 0x0904, 0x74af, 0x080c, 0x79ab, 0x080c, 0x75be,
-+      0x00ce, 0x080c, 0x7aa4, 0x0804, 0x74a3, 0x00c6, 0x6024, 0x6027,
-+      0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205, 0x1170, 0x783c,
-+      0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0x8f53, 0x00ce, 0x0005,
-+      0x2011, 0x1323, 0x2013, 0x0000, 0x0cc8, 0x793c, 0x81ff, 0x0dc0,
-+      0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7946, 0x793c, 0x9188,
-+      0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, 0x9084, 0x1984,
-+      0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, 0x9084, 0x1984, 0x9085,
-+      0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, 0x2009, 0x004a, 0x080c,
-+      0x8f53, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880, 0x0006, 0x0016,
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
-+      0x1304, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, 0x0148, 0x9080,
-+      0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005,
-+      0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x1304, 0x6000, 0xd0d4,
-+      0x01b8, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, 0x1110, 0x2c00,
-+      0x681e, 0x2001, 0x110c, 0x2004, 0xd0fc, 0x0118, 0x00de, 0x0804,
-+      0x7aa4, 0x6804, 0x9084, 0x0007, 0x0804, 0x7abb, 0x00de, 0x0005,
-+      0xc0d5, 0x6002, 0x6818, 0x9005, 0x0158, 0x6056, 0x605b, 0x0000,
-+      0x0006, 0x2c00, 0x681a, 0x00de, 0x685a, 0x2069, 0x1304, 0x08c8,
-+      0x6056, 0x605a, 0x2c00, 0x681a, 0x681e, 0x0898, 0x0006, 0x0016,
-+      0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
-+      0x1304, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148, 0x9080,
-+      0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005,
-+      0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, 0x2061,
-+      0x1304, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6136,
-+      0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, 0x00f6, 0x00e6,
-+      0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016,
-+      0x0006, 0x0126, 0x902e, 0x2071, 0x1304, 0x7638, 0x2660, 0x2678,
-+      0x2091, 0x8000, 0x8cff, 0x0904, 0x7664, 0x6010, 0x9080, 0x0028,
-+      0x2004, 0x9206, 0x1904, 0x765f, 0x87ff, 0x0120, 0x6054, 0x9106,
-+      0x1904, 0x765f, 0x703c, 0x9c06, 0x1178, 0x0036, 0x2019, 0x0001,
-+      0x080c, 0x8847, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046,
-+      0x704a, 0x003e, 0x2029, 0x0001, 0x7038, 0x9c36, 0x1110, 0x660c,
-+      0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-+      0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
-+      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xa942,
-+      0x01c8, 0x6014, 0x2068, 0x6020, 0x9086, 0x0003, 0x1580, 0x6867,
-+      0x0103, 0x6b7a, 0x6877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
-+      0xac01, 0x080c, 0xc3c7, 0x080c, 0x5b76, 0x007e, 0x003e, 0x001e,
-+      0x080c, 0xab11, 0x080c, 0x8f09, 0x00ce, 0x0804, 0x7602, 0x2c78,
-+      0x600c, 0x2060, 0x0804, 0x7602, 0x85ff, 0x0120, 0x0036, 0x080c,
-+      0x7b72, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
-+      0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
-+      0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xc3c7,
-+      0x080c, 0xc0e9, 0x007e, 0x003e, 0x001e, 0x08a0, 0x6020, 0x9086,
-+      0x000a, 0x0904, 0x7649, 0x0804, 0x7647, 0x0006, 0x0066, 0x00c6,
-+      0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x1304,
-+      0x7838, 0x9065, 0x0904, 0x76db, 0x600c, 0x0006, 0x600f, 0x0000,
-+      0x783c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x8847,
-+      0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e,
-+      0x080c, 0xa942, 0x0518, 0x6014, 0x2068, 0x6020, 0x9086, 0x0003,
-+      0x1558, 0x3e08, 0x918e, 0x0002, 0x1180, 0x6010, 0x9005, 0x0168,
-+      0x9080, 0x0000, 0x2004, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180,
-+      0x2001, 0x12c2, 0x2004, 0x6042, 0x0058, 0x6867, 0x0103, 0x6b7a,
-+      0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11, 0x080c, 0x8f09,
-+      0x000e, 0x0804, 0x7699, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de,
-+      0x00ce, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,
-+      0x080c, 0xc0e9, 0x0c58, 0x6020, 0x9086, 0x000a, 0x0d00, 0x08e8,
-+      0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x77c0, 0x008e,
-+      0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0x1304, 0x2091,
-+      0x8000, 0x080c, 0x7851, 0x080c, 0x78c5, 0x012e, 0x00fe, 0x0005,
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0x1304, 0x7614, 0x2660, 0x2678, 0x8cff,
-+      0x0904, 0x7796, 0x6010, 0x9080, 0x0028, 0x2004, 0x9206, 0x1904,
-+      0x7791, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x7791, 0x7024,
-+      0x9c06, 0x1550, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0508, 0x080c,
-+      0x7271, 0x080c, 0x85a2, 0x68c3, 0x0000, 0x080c, 0x8a7d, 0x7027,
-+      0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
-+      0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x2069,
-+      0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0020,
-+      0x6003, 0x0009, 0x630a, 0x04e8, 0x7014, 0x9c36, 0x1110, 0x660c,
-+      0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-+      0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
-+      0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2068,
-+      0x080c, 0xa942, 0x01b8, 0x6020, 0x9086, 0x0003, 0x1540, 0x6867,
-+      0x0103, 0x6b7a, 0x6877, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c,
-+      0xac01, 0x080c, 0xc3c7, 0x080c, 0x5b76, 0x008e, 0x003e, 0x001e,
-+      0x080c, 0xab11, 0x080c, 0x8f09, 0x080c, 0x895e, 0x00ce, 0x0804,
-+      0x7717, 0x2c78, 0x600c, 0x2060, 0x0804, 0x7717, 0x012e, 0x000e,
-+      0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
-+      0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xc3c7,
-+      0x080c, 0xc0e9, 0x008e, 0x003e, 0x001e, 0x08e0, 0x6020, 0x9086,
-+      0x0002, 0x1128, 0x6004, 0x9086, 0x0085, 0x0908, 0x0898, 0x6020,
-+      0x9086, 0x0005, 0x1978, 0x6004, 0x9086, 0x0085, 0x0d20, 0x0850,
-+      0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004,
-+      0x9065, 0x0904, 0x784d, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071,
-+      0x1304, 0x6654, 0x7018, 0x9c06, 0x1108, 0x761a, 0x701c, 0x9c06,
-+      0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0x6058,
-+      0x907d, 0x0108, 0x7e56, 0x96ed, 0x0000, 0x0110, 0x2f00, 0x685a,
-+      0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002,
-+      0x080c, 0x554c, 0x0904, 0x7849, 0x7624, 0x86ff, 0x0904, 0x7838,
-+      0x9680, 0x0005, 0x2004, 0x9d06, 0x15d8, 0x00d6, 0x2069, 0x0100,
-+      0x68c0, 0x9005, 0x0560, 0x080c, 0x7271, 0x080c, 0x85a2, 0x68c3,
-+      0x0000, 0x080c, 0x8a7d, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
-+      0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2401,
-+      0x9006, 0x080c, 0x2401, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-+      0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, 0x9005, 0x0110,
-+      0x8001, 0x603e, 0x2660, 0x080c, 0x8f09, 0x00ce, 0x0048, 0x00de,
-+      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x77f0,
-+      0x8dff, 0x0158, 0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c,
-+      0xac01, 0x080c, 0xc3c7, 0x080c, 0x5b76, 0x080c, 0x895e, 0x0804,
-+      0x77f0, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce,
-+      0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065,
-+      0x0904, 0x78a5, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06,
-+      0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0508, 0x080c, 0x7271,
-+      0x080c, 0x85a2, 0x68c3, 0x0000, 0x080c, 0x8a7d, 0x7827, 0x0000,
-+      0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
-+      0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x2069, 0x0100,
-+      0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003,
-+      0x0009, 0x630a, 0x2c30, 0x00b0, 0x6014, 0x2068, 0x080c, 0xa942,
-+      0x0168, 0x6020, 0x9086, 0x0003, 0x11b8, 0x6867, 0x0103, 0x6b7a,
-+      0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11, 0x080c, 0x8f09,
-+      0x080c, 0x895e, 0x000e, 0x0804, 0x7857, 0x7e16, 0x7e12, 0x00de,
-+      0x00ce, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,
-+      0x080c, 0xc0e9, 0x0c58, 0x6020, 0x9086, 0x0002, 0x1128, 0x6004,
-+      0x9086, 0x0085, 0x09d0, 0x0c10, 0x6020, 0x9086, 0x0005, 0x19f0,
-+      0x6004, 0x9086, 0x0085, 0x0d60, 0x08c8, 0x0006, 0x0066, 0x00c6,
-+      0x00d6, 0x7818, 0x9065, 0x0904, 0x7940, 0x6054, 0x0006, 0x9006,
-+      0x6056, 0x605a, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x554c,
-+      0x0904, 0x793d, 0x7e24, 0x86ff, 0x0904, 0x7930, 0x9680, 0x0005,
-+      0x2004, 0x9d06, 0x1904, 0x7930, 0x00d6, 0x2069, 0x0100, 0x68c0,
-+      0x9005, 0x05e8, 0x080c, 0x7271, 0x080c, 0x85a2, 0x68c3, 0x0000,
-+      0x080c, 0x8a7d, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-+      0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2401, 0x9006,
-+      0x080c, 0x2401, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-+      0x0001, 0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168,
-+      0x6000, 0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1508,
-+      0x2009, 0x12c2, 0x210c, 0x2102, 0x00e0, 0x603c, 0x9005, 0x0110,
-+      0x8001, 0x603e, 0x2660, 0x080c, 0x8f09, 0x00ce, 0x0048, 0x00de,
-+      0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x78d6,
-+      0x8dff, 0x0138, 0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c,
-+      0x5b76, 0x080c, 0x895e, 0x0804, 0x78d6, 0x000e, 0x0804, 0x78ca,
-+      0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x00e6,
-+      0x00d6, 0x0066, 0x6000, 0xd0dc, 0x01a0, 0x604c, 0x906d, 0x0188,
-+      0x6878, 0x9606, 0x1170, 0x2071, 0x1304, 0x7024, 0x9035, 0x0148,
-+      0x9080, 0x0005, 0x2004, 0x9d06, 0x1120, 0x6000, 0xc0dc, 0x6002,
-+      0x0021, 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100,
-+      0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a,
-+      0x00ce, 0x04b8, 0x080c, 0x85a2, 0x78c3, 0x0000, 0x080c, 0x8a7d,
-+      0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000,
-+      0x0138, 0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+      0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c,
-+      0x8a7d, 0x003e, 0x080c, 0x554c, 0x00c6, 0x603c, 0x9005, 0x0110,
-+      0x8001, 0x603e, 0x2660, 0x080c, 0x8ed9, 0x00ce, 0x6867, 0x0103,
-+      0x6b7a, 0x6877, 0x0000, 0x080c, 0xac01, 0x080c, 0x5b76, 0x080c,
-+      0x895e, 0x00fe, 0x0005, 0x00e6, 0x00c6, 0x2001, 0x110c, 0x2014,
-+      0xc2e4, 0x2202, 0x2071, 0x1304, 0x7004, 0x9084, 0x0007, 0x0002,
-+      0x79c2, 0x79c5, 0x79db, 0x7a03, 0x7a40, 0x79c2, 0x79c0, 0x79c0,
-+      0x080c, 0x0d7e, 0x00ce, 0x00ee, 0x0005, 0x7024, 0x9065, 0x0148,
-+      0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0150, 0x7216, 0x600f,
-+      0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005,
-+      0x7216, 0x7212, 0x0cb0, 0x6010, 0x2060, 0x080c, 0x554c, 0x6000,
-+      0xc0dc, 0x6002, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001,
-+      0x7022, 0x1140, 0x2001, 0x110c, 0x2014, 0xd2ec, 0x1178, 0x00ce,
-+      0x00ee, 0x0005, 0x6054, 0x9015, 0x0120, 0x721e, 0x080c, 0x7aa4,
-+      0x0cb0, 0x7218, 0x721e, 0x080c, 0x7aa4, 0x0c88, 0xc2ec, 0x2202,
-+      0x080c, 0x7b72, 0x0c60, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06,
-+      0x1160, 0x080c, 0x895e, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f,
-+      0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160,
-+      0x080c, 0x895e, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000,
-+      0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198,
-+      0x6010, 0x2060, 0x080c, 0x554c, 0x6000, 0xc0dc, 0x6002, 0x080c,
-+      0x895e, 0x701c, 0x9065, 0x0138, 0x6054, 0x9015, 0x0110, 0x721e,
-+      0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005,
-+      0x7024, 0x9065, 0x0140, 0x080c, 0x895e, 0x600c, 0x9015, 0x0150,
-+      0x720e, 0x600f, 0x0000, 0x080c, 0x8a7d, 0x7027, 0x0000, 0x00ce,
-+      0x00ee, 0x0005, 0x720e, 0x720a, 0x0cb0, 0x00d6, 0x2069, 0x1304,
-+      0x6830, 0x9084, 0x0003, 0x0002, 0x7a62, 0x7a64, 0x7a88, 0x7a60,
-+      0x080c, 0x0d7e, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001,
-+      0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a,
-+      0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1323,
-+      0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90,
-+      0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50,
-+      0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065, 0x0160,
-+      0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
-+      0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0xc1e5,
-+      0x2001, 0x110c, 0x2102, 0x0005, 0x2001, 0x110c, 0x200c, 0xd1ec,
-+      0x0138, 0xc1ec, 0x2102, 0x080c, 0x7b72, 0x2001, 0x110c, 0x200c,
-+      0x9184, 0x0600, 0x9086, 0x0600, 0x0d50, 0x00d6, 0x2069, 0x1304,
-+      0x6804, 0x9084, 0x0007, 0x0002, 0x7ac6, 0x7b51, 0x7b51, 0x7b51,
-+      0x7b51, 0x7b53, 0x7ac4, 0x7ac4, 0x080c, 0x0d7e, 0x6820, 0x9005,
-+      0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150, 0x6807,
-+      0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x7bb7, 0x00ce, 0x00de,
-+      0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b,
-+      0x0000, 0x080c, 0x7bb7, 0x00ce, 0x00de, 0x0005, 0x00e6, 0x6a1c,
-+      0x92f5, 0x0000, 0x0904, 0x7b4e, 0x704c, 0x900d, 0x0118, 0x7088,
-+      0x9005, 0x01a0, 0x7054, 0x9075, 0x0120, 0x920e, 0x0904, 0x7b4e,
-+      0x0028, 0x6818, 0x920e, 0x0904, 0x7b4e, 0x2070, 0x704c, 0x900d,
-+      0x0d88, 0x7088, 0x9005, 0x1d70, 0x2e00, 0x681e, 0x733c, 0x7038,
-+      0x9302, 0x1e40, 0x080c, 0x8eb0, 0x0904, 0x7b4e, 0x8318, 0x733e,
-+      0x6116, 0x2e10, 0x6212, 0x9180, 0x0020, 0x2004, 0x9084, 0x00ff,
-+      0x605e, 0x9180, 0x0020, 0x2003, 0x0000, 0x9180, 0x0021, 0x2004,
-+      0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b,
-+      0x9318, 0x631a, 0x00f6, 0x2c78, 0x2061, 0x0100, 0x609b, 0x0000,
-+      0x00d6, 0x00e6, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c, 0x81a1,
-+      0x00ee, 0x00de, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18,
-+      0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001, 0x7807,
-+      0x0040, 0x00fe, 0x00ee, 0x00ce, 0x00de, 0x0005, 0x00ee, 0x00ce,
-+      0x0cd8, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0138, 0x6807,
-+      0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x7bb7, 0x00ce, 0x00de,
-+      0x0005, 0x2001, 0x110c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe,
-+      0x0005, 0x2001, 0x110c, 0x2014, 0xd2e4, 0x0120, 0xc2e4, 0x2202,
-+      0x080c, 0x7ab5, 0x00f6, 0x00d6, 0x2069, 0x1304, 0x6830, 0x9086,
-+      0x0000, 0x11f0, 0x2001, 0x110c, 0x200c, 0xd1c4, 0x11e0, 0x6838,
-+      0x907d, 0x01b0, 0x6a04, 0x9296, 0x0000, 0x19d8, 0x6833, 0x0001,
-+      0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091,
-+      0x2400, 0x002e, 0x080c, 0x167d, 0x1178, 0x012e, 0x080c, 0x83f0,
-+      0x00de, 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001,
-+      0x080c, 0x6380, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000, 0x7803,
-+      0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833,
-+      0x0000, 0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x6020,
-+      0x9084, 0x000f, 0x000b, 0x0005, 0x7bcb, 0x7bd0, 0x8097, 0x8157,
-+      0x7bd0, 0x8097, 0x8157, 0x7bcb, 0x7bd0, 0x7bcb, 0x7bcb, 0x7bcb,
-+      0x7bcb, 0x7bcb, 0x7bcb, 0x080c, 0x79ab, 0x080c, 0x7aa4, 0x0005,
-+      0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
-+      0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053,
-+      0x1a0c, 0x0d7e, 0x6110, 0x2178, 0x79a0, 0x2011, 0x1136, 0x2214,
-+      0xd2ac, 0x1110, 0xd1bc, 0x0148, 0x7900, 0xd1f4, 0x0120, 0x7914,
-+      0x918c, 0x00ff, 0x0038, 0x900e, 0x0028, 0x91f8, 0x298c, 0x2f0d,
-+      0x918c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, 0x0040,
-+      0x1a04, 0x7c4f, 0x0053, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,
-+      0x01ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x7dc3, 0x7e04, 0x7e33,
-+      0x7ee5, 0x7f08, 0x7f0e, 0x7f1c, 0x7f25, 0x7f32, 0x7f38, 0x7f4a,
-+      0x7f38, 0x7fa1, 0x7f25, 0x7fae, 0x7fb4, 0x7f32, 0x7fb4, 0x7fc1,
-+      0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d, 0x7c4d,
-+      0x7c4d, 0x7c4d, 0x7c4d, 0x86e5, 0x86fc, 0x8707, 0x8728, 0x8757,
-+      0x7f1c, 0x7c4d, 0x7f1c, 0x7f38, 0x7c4d, 0x7e33, 0x7ee5, 0x7c4d,
-+      0x8b65, 0x7f38, 0x7c4d, 0x8b81, 0x7f38, 0x7c4d, 0x7f32, 0x7dbc,
-+      0x7c6f, 0x7c4d, 0x8b98, 0x8c05, 0x8cda, 0x7c4d, 0x8ce7, 0x7f19,
-+      0x8cfd, 0x7c4d, 0x8762, 0x8d37, 0x7c4d, 0x080c, 0x0d7e, 0x2100,
-+      0x0053, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
-+      0x013e, 0x015e, 0x0005, 0x7c6d, 0x7c6d, 0x7c6d, 0x7c95, 0x7d39,
-+      0x7d49, 0x7c6d, 0x7c6d, 0x7c6d, 0x7d8e, 0x7d9d, 0x7caf, 0x7c6d,
-+      0x7cc9, 0x7cfa, 0x8de7, 0x8e2c, 0x7f38, 0x080c, 0x0d7e, 0x00d6,
-+      0x080c, 0x7fd5, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800,
-+      0x7814, 0x2068, 0x683c, 0x700e, 0x6850, 0x7022, 0x6854, 0x7026,
-+      0x60c3, 0x0018, 0x080c, 0x8576, 0x00de, 0x0005, 0x00d6, 0x7810,
-+      0x2068, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1110, 0xd0bc,
-+      0x0110, 0x9085, 0x0001, 0x00de, 0x0005, 0x00d6, 0x080c, 0x7fd5,
-+      0x7003, 0x0500, 0x7814, 0x90e8, 0x001b, 0x6808, 0x700a, 0x680c,
-+      0x700e, 0x6810, 0x7012, 0x6814, 0x7016, 0x6818, 0x701a, 0x681c,
-+      0x701e, 0x60c3, 0x0010, 0x080c, 0x8576, 0x00de, 0x0005, 0x00d6,
-+      0x080c, 0x7fd5, 0x7003, 0x0500, 0x7814, 0x90e8, 0x0031, 0x6808,
-+      0x700a, 0x680c, 0x700e, 0x6810, 0x7012, 0x6814, 0x7016, 0x6818,
-+      0x701a, 0x681c, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8576, 0x00de,
-+      0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x080c, 0x7fd5, 0x20e9,
-+      0x0000, 0x20e1, 0x0001, 0x2001, 0x12dd, 0x2003, 0x0000, 0x7814,
-+      0x2068, 0x6814, 0x8003, 0x60c2, 0x6830, 0x20a8, 0x9d80, 0x001b,
-+      0x2098, 0x2001, 0x12dd, 0x0016, 0x200c, 0x2001, 0x0001, 0x080c,
-+      0x1b4c, 0x080c, 0xb539, 0x9006, 0x080c, 0x1b4c, 0x001e, 0x6804,
-+      0x9005, 0x0110, 0x2068, 0x0c40, 0x04b9, 0x080c, 0x8576, 0x012e,
-+      0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x080c, 0x804b,
-+      0x20e9, 0x0000, 0x20e1, 0x0001, 0x2001, 0x12dd, 0x2003, 0x0000,
-+      0x7814, 0x2068, 0x686f, 0x0200, 0x6873, 0x0000, 0x6814, 0x8003,
-+      0x60c2, 0x6830, 0x20a8, 0x9d80, 0x001b, 0x2098, 0x2001, 0x12dd,
-+      0x0016, 0x200c, 0x080c, 0xb539, 0x001e, 0x6804, 0x9005, 0x0110,
-+      0x2068, 0x0c78, 0x0049, 0x7814, 0x2068, 0x080c, 0x0edf, 0x080c,
-+      0x8576, 0x012e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,
-+      0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,
-+      0x0005, 0x080c, 0x7fd5, 0x7003, 0x7800, 0x7007, 0x0000, 0x7808,
-+      0x8007, 0x700a, 0x700f, 0x0000, 0x60c3, 0x0008, 0x080c, 0x8576,
-+      0x0005, 0x00d6, 0x00e6, 0x080c, 0x804b, 0x2073, 0x0200, 0x8e70,
-+      0x2073, 0x0000, 0x8e70, 0x2073, 0xdf10, 0x8e70, 0x2073, 0x0034,
-+      0x8e70, 0x2069, 0x1105, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
-+      0x1f04, 0x7d5d, 0x2069, 0x1101, 0x20a9, 0x0004, 0x2d76, 0x8d68,
-+      0x8e70, 0x1f04, 0x7d66, 0x2069, 0x12ea, 0x20a9, 0x001a, 0x9e86,
-+      0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012,
-+      0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70,
-+      0x1f04, 0x7d6f, 0x2073, 0x0000, 0x8e70, 0x2073, 0x0000, 0x60c3,
-+      0x004c, 0x080c, 0x8576, 0x00ee, 0x00de, 0x0005, 0x080c, 0x7fd5,
-+      0x7003, 0x6300, 0x7007, 0x0028, 0x700b, 0x0000, 0x7808, 0x700e,
-+      0x60c3, 0x0008, 0x080c, 0x8576, 0x0005, 0x00d6, 0x0026, 0x0016,
-+      0x080c, 0x804b, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0,
-+      0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70,
-+      0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8576,
-+      0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1116, 0x2004, 0x609a,
-+      0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003, 0x5200, 0x2069,
-+      0x1152, 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x1f77,
-+      0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1105,
-+      0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099,
-+      0x1101, 0x20a1, 0x0254, 0x4003, 0x2001, 0x1136, 0x2004, 0xd0ac,
-+      0x1138, 0x7810, 0x9080, 0x0028, 0x2004, 0x9082, 0x007f, 0x0248,
-+      0x2001, 0x111d, 0x2004, 0x7032, 0x2001, 0x111e, 0x2004, 0x7036,
-+      0x0030, 0x2001, 0x1116, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3,
-+      0x001c, 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003, 0x0500,
-+      0x2001, 0x1136, 0x2004, 0xd0ac, 0x1138, 0x7810, 0x9080, 0x0028,
-+      0x2004, 0x9082, 0x007f, 0x0248, 0x2001, 0x111d, 0x2004, 0x700a,
-+      0x2001, 0x111e, 0x2004, 0x700e, 0x0030, 0x2001, 0x1116, 0x2004,
-+      0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
-+      0x1105, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x60c3, 0x0010,
-+      0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x00c6, 0x7810, 0x2060,
-+      0x9006, 0x080c, 0x5898, 0x00ce, 0x7810, 0x9080, 0x0028, 0x2004,
-+      0x9086, 0x007e, 0x1130, 0x7003, 0x0400, 0x620c, 0xc2b4, 0x620e,
-+      0x0068, 0x7814, 0x00d6, 0x906d, 0x0130, 0x689b, 0x0000, 0x68a7,
-+      0x0000, 0x68ab, 0x0000, 0x00de, 0x7003, 0x0300, 0x7810, 0x9080,
-+      0x0028, 0x2004, 0x9086, 0x007e, 0x1904, 0x7eab, 0x00d6, 0x2069,
-+      0x1297, 0x2001, 0x1136, 0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a,
-+      0x6808, 0x9084, 0x2000, 0x7012, 0x680c, 0x7016, 0x701f, 0x2710,
-+      0x6818, 0x7022, 0x681c, 0x7026, 0x0080, 0x6800, 0x700a, 0x6804,
-+      0x700e, 0x6808, 0x080c, 0x62e4, 0x1118, 0x9084, 0x37ff, 0x0010,
-+      0x9084, 0x3fff, 0x7012, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004,
-+      0x20e1, 0x0001, 0x2099, 0x1105, 0x20e9, 0x0000, 0x20a1, 0x0256,
-+      0x4003, 0x20a9, 0x0004, 0x2099, 0x1101, 0x20a1, 0x025a, 0x4003,
-+      0x00d6, 0x080c, 0x8dae, 0x2069, 0x129f, 0x2071, 0x024e, 0x6800,
-+      0xc0dd, 0x7002, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x0110, 0x680c,
-+      0x700e, 0x00de, 0x04a8, 0x2001, 0x1136, 0x2004, 0xd0a4, 0x0170,
-+      0x0016, 0x2001, 0x1298, 0x200c, 0x60e0, 0x9106, 0x0130, 0x2100,
-+      0x60e3, 0x0000, 0x080c, 0x1fb8, 0x61e2, 0x001e, 0x20e1, 0x0001,
-+      0x2099, 0x1297, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008,
-+      0x4003, 0x20a9, 0x0004, 0x2099, 0x1105, 0x20a1, 0x0256, 0x4003,
-+      0x20a9, 0x0004, 0x2099, 0x1101, 0x20a1, 0x025a, 0x4003, 0x080c,
-+      0x8dae, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x129f, 0x4003,
-+      0x60c3, 0x0074, 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003,
-+      0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006,
-+      0x00f6, 0x2079, 0x1152, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085,
-+      0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6,
-+      0x0804, 0x7f85, 0x7026, 0x60c3, 0x0014, 0x080c, 0x8576, 0x0005,
-+      0x080c, 0x7fd5, 0x7003, 0x5000, 0x0804, 0x7e56, 0x080c, 0x7fd5,
-+      0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x080c, 0x8576,
-+      0x0005, 0x080c, 0x8042, 0x0010, 0x080c, 0x804b, 0x7003, 0x0200,
-+      0x60c3, 0x0004, 0x080c, 0x8576, 0x0005, 0x080c, 0x804b, 0x7003,
-+      0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x080c,
-+      0x8576, 0x0005, 0x080c, 0x804b, 0x7003, 0x0200, 0x0804, 0x7e56,
-+      0x080c, 0x804b, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a,
-+      0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x080c,
-+      0x8576, 0x0005, 0x00d6, 0x080c, 0x804b, 0x7003, 0x0210, 0x7007,
-+      0x0014, 0x700b, 0x0800, 0x7810, 0x2068, 0x6894, 0x9086, 0x0014,
-+      0x1198, 0x699c, 0x9184, 0x0030, 0x0190, 0x6998, 0x9184, 0xc000,
-+      0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f, 0x0100,
-+      0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010, 0x700f,
-+      0x0800, 0x00f6, 0x2079, 0x1152, 0x7904, 0x00fe, 0xd1ac, 0x1110,
-+      0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009, 0x1174,
-+      0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009, 0x1172,
-+      0x210c, 0xd1e4, 0x0130, 0xc0c5, 0x9094, 0x0030, 0x9296, 0x0010,
-+      0x0140, 0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108,
-+      0xc0bd, 0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x080c, 0x8576,
-+      0x0005, 0x080c, 0x804b, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f,
-+      0x0100, 0x60c3, 0x0014, 0x080c, 0x8576, 0x0005, 0x080c, 0x804b,
-+      0x7003, 0x0200, 0x0804, 0x7dc7, 0x080c, 0x804b, 0x7003, 0x0100,
-+      0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x080c, 0x8576,
-+      0x0005, 0x080c, 0x804b, 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3,
-+      0x0008, 0x080c, 0x8576, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046,
-+      0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036,
-+      0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x8dc3, 0x7810,
-+      0x2068, 0x6810, 0x9305, 0x7002, 0x6814, 0x7006, 0x6aa0, 0x2069,
-+      0x1100, 0x6858, 0x700e, 0x9286, 0x007e, 0x1168, 0x9385, 0x00ff,
-+      0x7002, 0x7007, 0xfffe, 0x2001, 0x12a7, 0x2004, 0x9005, 0x01e8,
-+      0x6a78, 0x720e, 0x00d0, 0x9286, 0x007f, 0x1130, 0x9385, 0x00ff,
-+      0x7002, 0x7007, 0xfffd, 0x0068, 0x68d8, 0xd0ac, 0x1110, 0xd2bc,
-+      0x0160, 0x9286, 0x0080, 0x1128, 0x9385, 0x00ff, 0x7002, 0x7007,
-+      0xfffc, 0x6874, 0x700a, 0x6878, 0x700e, 0x9485, 0x0029, 0x7012,
-+      0x004e, 0x003e, 0x00de, 0x080c, 0x8565, 0x721a, 0x9f95, 0x0000,
-+      0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026,
-+      0x080c, 0x8dc3, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,
-+      0x1100, 0x6874, 0x700a, 0x6878, 0x700e, 0x00de, 0x7013, 0x2029,
-+      0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f,
-+      0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300,
-+      0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
-+      0x2300, 0x2021, 0x0100, 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810,
-+      0x9305, 0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6a58,
-+      0x720e, 0x6ad8, 0xd2ac, 0x1118, 0x9092, 0x007e, 0x02a0, 0x7810,
-+      0x00c6, 0x2060, 0x6010, 0x9005, 0x1140, 0x6014, 0x9005, 0x1128,
-+      0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6874, 0x700a, 0x6878,
-+      0x700e, 0x00ce, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e,
-+      0x00de, 0x080c, 0x8565, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
-+      0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x8565, 0x721a, 0x7a08,
-+      0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00c6,
-+      0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
-+      0x908a, 0x0085, 0x0a0c, 0x0d7e, 0x908a, 0x0092, 0x1a0c, 0x0d7e,
-+      0x6110, 0x2178, 0x79a0, 0x2011, 0x1136, 0x2214, 0xd2ac, 0x1110,
-+      0xd1bc, 0x0148, 0x7900, 0xd1f4, 0x0120, 0x7914, 0x918c, 0x00ff,
-+      0x0038, 0x900e, 0x0028, 0x91f8, 0x298c, 0x2f0d, 0x918c, 0x00ff,
-+      0x2c78, 0x2061, 0x0100, 0x619a, 0x9082, 0x0085, 0x002b, 0x00fe,
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x80db, 0x80e1, 0x80ed, 0x80d9,
-+      0x80d9, 0x80d9, 0x80db, 0x80d9, 0x80d9, 0x80d9, 0x80d9, 0x80d9,
-+      0x80d9, 0x080c, 0x0d7e, 0x00e1, 0x60c3, 0x0000, 0x080c, 0x8576,
-+      0x0005, 0x04a9, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff,
-+      0x60c3, 0x000c, 0x080c, 0x8576, 0x0005, 0x080c, 0x8137, 0x7003,
-+      0x0003, 0x7007, 0x0300, 0x60c3, 0x0004, 0x080c, 0x8576, 0x0005,
-+      0x0026, 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x8100,
-+      0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+      0x1118, 0x9092, 0x007e, 0x0240, 0x6874, 0x700a, 0x6878, 0x700e,
-+      0x7013, 0x0009, 0x0804, 0x801b, 0x6a58, 0x720e, 0x0cc8, 0x0026,
-+      0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x8400, 0x7002,
-+      0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1118,
-+      0x9092, 0x007e, 0x0248, 0x6874, 0x700a, 0x6878, 0x700e, 0x2001,
-+      0x0099, 0x7012, 0x0804, 0x808c, 0x6a58, 0x720e, 0x0cc0, 0x0026,
-+      0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x8500, 0x7002,
-+      0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1118,
-+      0x9092, 0x007e, 0x0248, 0x6874, 0x700a, 0x6878, 0x700e, 0x2001,
-+      0x0099, 0x7012, 0x0804, 0x808c, 0x6a58, 0x720e, 0x0cc0, 0x00c6,
-+      0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240,
-+      0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d7e, 0x908a, 0x0054, 0x1a0c,
-+      0x0d7e, 0x7910, 0x2160, 0x61a0, 0x2011, 0x1136, 0x2214, 0xd2ac,
-+      0x1110, 0xd1bc, 0x0148, 0x6100, 0xd1f4, 0x0120, 0x6114, 0x918c,
-+      0x00ff, 0x0038, 0x900e, 0x0028, 0x91e0, 0x298c, 0x2c0d, 0x918c,
-+      0x00ff, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x002b, 0x00fe,
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x81a1, 0x825f, 0x8226, 0x8391,
-+      0x819f, 0x819f, 0x819f, 0x819f, 0x819f, 0x819f, 0x819f, 0x893a,
-+      0x8942, 0x894a, 0x8952, 0x819f, 0x8d0a, 0x819f, 0x8932, 0x080c,
-+      0x0d7e, 0x780b, 0xffff, 0x080c, 0x81f4, 0x7914, 0x2168, 0x6978,
-+      0x7956, 0x7132, 0x697c, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005,
-+      0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006,
-+      0x8004, 0x2010, 0x785c, 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042,
-+      0xd1ac, 0x0128, 0x7047, 0x0002, 0x080c, 0x137e, 0x0050, 0xd1b4,
-+      0x0118, 0x7047, 0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230,
-+      0x0010, 0x6ab0, 0x6eac, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9,
-+      0x0000, 0x9d88, 0x0023, 0x20e1, 0x0001, 0x2198, 0x20a1, 0x0252,
-+      0x2069, 0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3,
-+      0x0020, 0x6017, 0x0009, 0x2001, 0x1320, 0x2003, 0x07d0, 0x2001,
-+      0x131f, 0x2003, 0x0009, 0x0005, 0x00d6, 0x6813, 0x0008, 0x7a10,
-+      0x2268, 0x6a8c, 0x8210, 0x9294, 0x00ff, 0x6a8e, 0x8217, 0x721a,
-+      0x6a10, 0x9295, 0x0600, 0x7202, 0x6a14, 0x7206, 0x68a0, 0x6900,
-+      0x2069, 0x1100, 0x6bd8, 0xd3ac, 0x1138, 0xd0bc, 0x0188, 0xd1f4,
-+      0x0118, 0x9294, 0x00ff, 0x629a, 0x6a74, 0x720a, 0x6a78, 0x720e,
-+      0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x00de, 0x0005,
-+      0x9294, 0x00ff, 0x629a, 0x6a58, 0x720e, 0x0c90, 0x00d6, 0x0081,
-+      0x7814, 0x2068, 0x6890, 0x7002, 0x688c, 0x7006, 0x68b0, 0x700a,
-+      0x68ac, 0x700e, 0x60c3, 0x000c, 0x00de, 0x080c, 0x8576, 0x0005,
-+      0x00d6, 0x6813, 0x0008, 0x7810, 0x2068, 0x6810, 0x9085, 0x0500,
-+      0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+      0x1110, 0xd0bc, 0x0188, 0x6874, 0x700a, 0x6878, 0x700e, 0x7013,
-+      0x0889, 0x080c, 0x8565, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
-+      0x2071, 0x024c, 0x00de, 0x0005, 0x6a58, 0x720e, 0x0c80, 0x00d6,
-+      0x080c, 0x8364, 0x7814, 0x2068, 0x9084, 0xf000, 0x1130, 0x7814,
-+      0x9084, 0x0700, 0x8007, 0x002b, 0x0010, 0x9006, 0x0013, 0x00de,
-+      0x0005, 0x827b, 0x82e8, 0x82f8, 0x831f, 0x832c, 0x833e, 0x8346,
-+      0x8279, 0x080c, 0x0d7e, 0x0016, 0x0036, 0x697c, 0x918c, 0x0003,
-+      0x0118, 0x9186, 0x0003, 0x11a0, 0x6ba8, 0x7824, 0xd0cc, 0x1170,
-+      0x7316, 0x6898, 0x701a, 0x6894, 0x701e, 0x003e, 0x001e, 0x2001,
-+      0x12e8, 0x2004, 0x60c2, 0x080c, 0x8576, 0x0005, 0xc3e5, 0x0c80,
-+      0x9186, 0x0001, 0x190c, 0x0d7e, 0x6ba8, 0x7824, 0xd0cc, 0x1904,
-+      0x82e5, 0x7316, 0x6898, 0x701a, 0x6894, 0x701e, 0x68a4, 0x7026,
-+      0x68ac, 0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0580, 0xd3c4,
-+      0x0110, 0x68ac, 0x9108, 0xd3cc, 0x0110, 0x68a4, 0x9108, 0x2011,
-+      0x0258, 0x0156, 0x20a9, 0x0008, 0x9d80, 0x002c, 0x201c, 0x831f,
-+      0x2312, 0x8000, 0x8210, 0x1f04, 0x82be, 0x0016, 0x00d6, 0x2069,
-+      0x0200, 0x080c, 0x8dae, 0x00de, 0x001e, 0x2011, 0x0240, 0x20a9,
-+      0x0005, 0x201c, 0x831f, 0x2312, 0x8000, 0x8210, 0x1f04, 0x82d1,
-+      0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2,
-+      0x003e, 0x001e, 0x080c, 0x8576, 0x0005, 0xc3e5, 0x0804, 0x82a1,
-+      0x2011, 0x0008, 0x2001, 0x110e, 0x2004, 0xd0a4, 0x0110, 0x2011,
-+      0x0028, 0x7824, 0xd0cc, 0x1110, 0x7216, 0x0478, 0x0ce8, 0xc2e5,
-+      0x2011, 0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e, 0x9105,
-+      0x0108, 0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,
-+      0x7027, 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500,
-+      0x704f, 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240,
-+      0x700b, 0x2500, 0x60c3, 0x0032, 0x080c, 0x8576, 0x0005, 0x2011,
-+      0x0028, 0x7824, 0xd0cc, 0x1130, 0x7216, 0x60c3, 0x0018, 0x080c,
-+      0x8576, 0x0005, 0x0cc8, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc,
-+      0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff,
-+      0x7036, 0x60c3, 0x0020, 0x080c, 0x8576, 0x0005, 0x2011, 0x0008,
-+      0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x08f8, 0x0036, 0x7b14,
-+      0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138, 0x7824,
-+      0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0878, 0x0046, 0x2021,
-+      0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x7416,
-+      0x004e, 0x701e, 0x003e, 0x0808, 0x00d6, 0x6813, 0x0008, 0x7a10,
-+      0x2268, 0x6810, 0x9085, 0x0700, 0x7002, 0x6814, 0x7006, 0x68a0,
-+      0x2069, 0x1100, 0x6ad8, 0xd2ac, 0x1110, 0xd0bc, 0x01a0, 0x6874,
-+      0x700a, 0x6878, 0x700e, 0x7824, 0xd0cc, 0x1180, 0x7013, 0x0898,
-+      0x080c, 0x8565, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
-+      0x024c, 0x00de, 0x0005, 0x6a58, 0x720e, 0x0c68, 0x7013, 0x0889,
-+      0x0c78, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e,
-+      0x0005, 0x83a1, 0x83a1, 0x83a3, 0x83a1, 0x83a1, 0x83a1, 0x83c0,
-+      0x83a1, 0x080c, 0x0d7e, 0x7914, 0x918c, 0xf8ff, 0x918d, 0x0600,
-+      0x7916, 0x2009, 0x0003, 0x00d1, 0x00d6, 0x2069, 0x1152, 0x6804,
-+      0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010,
-+      0x7033, 0x3f00, 0x00de, 0x60c3, 0x0001, 0x080c, 0x8576, 0x0005,
-+      0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0ca8, 0x00d6, 0x0016,
-+      0x080c, 0x8dc3, 0x001e, 0x7810, 0x2068, 0x6810, 0x9085, 0x0100,
-+      0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+      0x1110, 0xd0bc, 0x0190, 0x6a74, 0x720a, 0x6a78, 0x720e, 0x7013,
-+      0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x8565, 0x721a, 0x7a08,
-+      0x7222, 0x2f10, 0x7226, 0x00de, 0x0005, 0x6a58, 0x720e, 0x0c78,
-+      0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
-+      0x2071, 0x1100, 0x7158, 0x7810, 0x2068, 0x68a0, 0x2028, 0x6910,
-+      0x6a14, 0x76d8, 0xd6ac, 0x1128, 0xd0bc, 0x1118, 0x901e, 0x7458,
-+      0x0010, 0x7374, 0x7478, 0x7820, 0x90be, 0x0006, 0x0904, 0x84dd,
-+      0x90be, 0x000a, 0x1904, 0x8496, 0x609f, 0x0000, 0x7814, 0x2070,
-+      0x707c, 0xd0fc, 0x0904, 0x845d, 0x7790, 0x9784, 0xff00, 0x9105,
-+      0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x9080, 0x001e,
-+      0x2004, 0x9005, 0x000e, 0x1160, 0x7794, 0x87ff, 0x0548, 0x2039,
-+      0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0470,
-+      0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0x609f,
-+      0x0000, 0x2001, 0x1136, 0x2004, 0x9084, 0x0020, 0x11d8, 0x2001,
-+      0x1136, 0x2004, 0x9084, 0x0008, 0x0140, 0x7814, 0x9080, 0x001d,
-+      0x2004, 0x8007, 0x9082, 0x0080, 0x1268, 0x6814, 0x609e, 0x0050,
-+      0x2039, 0x0029, 0x9705, 0x6072, 0x0028, 0x9185, 0x0200, 0x6062,
-+      0x6073, 0x2029, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a,
-+      0x646e, 0x6077, 0x0000, 0x688c, 0x8000, 0x9084, 0x00ff, 0x688e,
-+      0x8007, 0x607a, 0x607f, 0x0000, 0x7038, 0x608a, 0x7034, 0x608e,
-+      0x7048, 0x60c6, 0x7044, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+      0x60d7, 0x0000, 0x080c, 0x8da8, 0x2009, 0x07d0, 0x60c4, 0x9084,
-+      0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7276, 0x003e,
-+      0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x9185, 0x0100,
-+      0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008,
-+      0x60af, 0x95d5, 0x60d7, 0x0000, 0x688c, 0x8000, 0x9084, 0x00ff,
-+      0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,
-+      0x6086, 0x7814, 0x2070, 0x7038, 0x608a, 0x7034, 0x608e, 0x7048,
-+      0x60c6, 0x7044, 0x60ca, 0x686c, 0x60ce, 0x9582, 0x0080, 0x0240,
-+      0x6a00, 0xd2f4, 0x0120, 0x6a14, 0x9294, 0x00ff, 0x0008, 0x9016,
-+      0x629e, 0x080c, 0x8da8, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0,
-+      0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7276, 0x003e, 0x004e,
-+      0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7814, 0x2070, 0x707c,
-+      0x9084, 0x0003, 0x9086, 0x0002, 0x05e8, 0x9185, 0x0100, 0x6062,
-+      0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c,
-+      0x8000, 0x9084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x7838, 0x607e,
-+      0x2f00, 0x6086, 0x7808, 0x6082, 0x7090, 0x608a, 0x708c, 0x608e,
-+      0x70b0, 0x60c6, 0x70ac, 0x60ca, 0x70ac, 0x7930, 0x9108, 0x7932,
-+      0x70b0, 0x792c, 0x9109, 0x792e, 0x686c, 0x60ce, 0x60af, 0x95d5,
-+      0x60d7, 0x0000, 0x9582, 0x0080, 0x0240, 0x6a00, 0xd2f4, 0x0120,
-+      0x6a14, 0x9294, 0x00ff, 0x0008, 0x9016, 0x629e, 0x080c, 0x8d83,
-+      0x0804, 0x84cb, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
-+      0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073,
-+      0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0x9084, 0x00ff, 0x688e,
-+      0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
-+      0x7038, 0x608a, 0x7034, 0x608e, 0x7048, 0x60c6, 0x7044, 0x60ca,
-+      0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x9582, 0x0080,
-+      0x0240, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0x9294, 0x00ff, 0x0008,
-+      0x9016, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0x8da8, 0x0804,
-+      0x84cb, 0x080c, 0x8d83, 0x0804, 0x84cb, 0x7a10, 0x9280, 0x0023,
-+      0x2014, 0x8210, 0x9294, 0x00ff, 0x2202, 0x8217, 0x0005, 0x00d6,
-+      0x2069, 0x1304, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056,
-+      0x60a7, 0x9575, 0x00f1, 0x080c, 0x7268, 0x0005, 0x0016, 0x2001,
-+      0x110c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089,
-+      0x080c, 0x7268, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x110c, 0x2102,
-+      0x2001, 0x1305, 0x2003, 0x0000, 0x2001, 0x130d, 0x2003, 0x0000,
-+      0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016,
-+      0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4,
-+      0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016,
-+      0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005,
-+      0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140,
-+      0x080c, 0x62e4, 0x1198, 0x2001, 0x1320, 0x2004, 0x9005, 0x15d0,
-+      0x0066, 0x2031, 0x0001, 0x080c, 0x6380, 0x006e, 0x1118, 0x080c,
-+      0x7268, 0x0480, 0x00c6, 0x2061, 0x1304, 0x00f0, 0x6904, 0x9194,
-+      0x4000, 0x0568, 0x0839, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006,
-+      0x080c, 0x2401, 0x00c6, 0x2061, 0x1304, 0x6128, 0x9192, 0x00c8,
-+      0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c,
-+      0x7268, 0x080c, 0x8599, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140,
-+      0x080c, 0xc463, 0x080c, 0x7271, 0x2009, 0x0014, 0x080c, 0x8f53,
-+      0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001,
-+      0x1320, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x1304, 0x6128,
-+      0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x7268,
-+      0x080c, 0x4faa, 0x0c38, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026,
-+      0x080c, 0x727e, 0x2071, 0x1304, 0x713c, 0x81ff, 0x0904, 0x868e,
-+      0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x62e4, 0x11b0, 0x0036,
-+      0x2019, 0x0002, 0x080c, 0x8847, 0x003e, 0x713c, 0x2160, 0x080c,
-+      0xc463, 0x2009, 0x004a, 0x080c, 0x8f53, 0x0066, 0x2031, 0x0001,
-+      0x080c, 0x6380, 0x006e, 0x0804, 0x868e, 0x6904, 0x9194, 0x4000,
-+      0x0904, 0x8694, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c,
-+      0x2401, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0d7e, 0x6020, 0x00ce,
-+      0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009,
-+      0x110c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128,
-+      0x6224, 0x9294, 0x0002, 0x1510, 0x0030, 0xc0d4, 0x200a, 0xd0cc,
-+      0x0110, 0x080c, 0x2369, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010,
-+      0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0x8f53, 0x0070,
-+      0x0036, 0x2019, 0x0001, 0x080c, 0x8847, 0x003e, 0x713c, 0x2160,
-+      0x080c, 0xc463, 0x2009, 0x004a, 0x080c, 0x8f53, 0x002e, 0x001e,
-+      0x00ee, 0x00de, 0x00ce, 0x0005, 0x0804, 0x8651, 0x0026, 0x00e6,
-+      0x2071, 0x1304, 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8,
-+      0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138,
-+      0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014,
-+      0x9084, 0x1984, 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005,
-+      0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x6010, 0x2068, 0x6ca0, 0x2071, 0x1304, 0x7018,
-+      0x2068, 0x8dff, 0x0188, 0x68a0, 0x9406, 0x0118, 0x6854, 0x2068,
-+      0x0cc0, 0x6014, 0x2060, 0x646c, 0x6570, 0x6678, 0x2d60, 0x080c,
-+      0x5728, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e,
-+      0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x080c, 0x7fd5, 0x7003,
-+      0x1200, 0x7820, 0x9086, 0x0004, 0x1110, 0x6098, 0x0018, 0x2001,
-+      0x1116, 0x2004, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
-+      0x002c, 0x080c, 0x8576, 0x0005, 0x080c, 0x7fd5, 0x7003, 0x0f00,
-+      0x7808, 0x700e, 0x60c3, 0x0008, 0x080c, 0x8576, 0x0005, 0x0156,
-+      0x080c, 0x804b, 0x7003, 0x0200, 0x2011, 0x1148, 0x63f0, 0x2312,
-+      0x20a9, 0x0006, 0x2011, 0x1140, 0x2019, 0x1141, 0x9ef0, 0x0002,
-+      0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
-+      0x1f04, 0x8718, 0x60c3, 0x001c, 0x080c, 0x8576, 0x015e, 0x0005,
-+      0x0016, 0x0026, 0x080c, 0x8027, 0x080c, 0x8039, 0x9e80, 0x0004,
-+      0x20e9, 0x0000, 0x20a0, 0x7814, 0x9080, 0x0000, 0x2004, 0x9080,
-+      0x0021, 0x20e1, 0x0001, 0x2098, 0x7808, 0x9088, 0x0002, 0x21a8,
-+      0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2,
-+      0x080c, 0x8576, 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003,
-+      0x080c, 0x8dae, 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c,
-+      0x7fd5, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x080c,
-+      0x8576, 0x0005, 0x0016, 0x0026, 0x080c, 0x7fd5, 0x20e9, 0x0000,
-+      0x20a1, 0x024c, 0x7814, 0x9080, 0x0000, 0x2004, 0x9080, 0x0023,
-+      0x20e1, 0x0001, 0x2098, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003,
-+      0x8003, 0x60c2, 0x080c, 0x8576, 0x002e, 0x001e, 0x0005, 0x00e6,
-+      0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1304, 0x700c,
-+      0x2060, 0x8cff, 0x0178, 0x080c, 0xab2e, 0x1110, 0x080c, 0x97dc,
-+      0x600c, 0x0006, 0x080c, 0xad68, 0x080c, 0x8ed9, 0x080c, 0x895e,
-+      0x00ce, 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce,
-+      0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
-+      0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x110c, 0x200c,
-+      0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-+      0x1304, 0x7024, 0x2060, 0x8cff, 0x0904, 0x87ff, 0x080c, 0x85a2,
-+      0x6ac0, 0x68c3, 0x0000, 0x080c, 0x7271, 0x00c6, 0x2061, 0x0100,
-+      0x080c, 0x8dc7, 0x00ce, 0x2009, 0x0013, 0x080c, 0x8f53, 0x20a9,
-+      0x01f4, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804, 0x9084,
-+      0x4000, 0x01d0, 0x2001, 0x1000, 0x080c, 0x2401, 0x9006, 0x080c,
-+      0x2401, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04,
-+      0x87d1, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-+      0x2401, 0x9006, 0x080c, 0x2401, 0x6824, 0x000e, 0x001e, 0x002e,
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001,
-+      0x1100, 0x2004, 0x9096, 0x0001, 0x05c0, 0x9096, 0x0004, 0x05a8,
-+      0x080c, 0x7271, 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5,
-+      0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x4f57, 0x080c, 0x71fa,
-+      0x20a9, 0x01f4, 0x6824, 0xd094, 0x0170, 0x6827, 0x0004, 0x7804,
-+      0x9084, 0x4000, 0x01d0, 0x7803, 0x1000, 0x080c, 0x2401, 0x9006,
-+      0x080c, 0x2401, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010,
-+      0x1f04, 0x881a, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,
-+      0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x000e, 0x001e, 0x002e,
-+      0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126,
-+      0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006,
-+      0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2001, 0x110c,
-+      0x200c, 0x918c, 0xdbff, 0x2102, 0x2071, 0x1304, 0x703c, 0x2060,
-+      0x8cff, 0x0904, 0x88d8, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084,
-+      0x0002, 0x0904, 0x88d8, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009,
-+      0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x727e,
-+      0x080c, 0x1872, 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021,
-+      0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af,
-+      0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090,
-+      0x2071, 0x134a, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816,
-+      0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002,
-+      0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x12bb,
-+      0x2004, 0x200a, 0x004e, 0x939d, 0x0000, 0x1120, 0x2009, 0x0049,
-+      0x080c, 0x8f53, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0170, 0x6827,
-+      0x0004, 0x7804, 0x9084, 0x4000, 0x01d0, 0x2001, 0x1000, 0x080c,
-+      0x2401, 0x9006, 0x080c, 0x2401, 0x0090, 0xd08c, 0x0118, 0x6827,
-+      0x0002, 0x0010, 0x1f04, 0x88b4, 0x7804, 0x9084, 0x1000, 0x0138,
-+      0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401, 0x6824,
-+      0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e,
-+      0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x1304,
-+      0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000,
-+      0x2069, 0x1304, 0x6a32, 0x012e, 0x00de, 0x0005, 0x00f6, 0x00e6,
-+      0x00c6, 0x0066, 0x0006, 0x0126, 0x2071, 0x1304, 0x7614, 0x2660,
-+      0x2678, 0x2091, 0x8000, 0x8cff, 0x0530, 0x6020, 0x9206, 0x11f8,
-+      0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140,
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0x080c, 0x8f09, 0x04c9, 0x00ce, 0x08e0, 0x2c78,
-+      0x600c, 0x2060, 0x08c0, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00ee,
-+      0x00fe, 0x0005, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+      0x1000, 0x00f8, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+      0x4000, 0x00b8, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+      0x2000, 0x0078, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+      0x0400, 0x0038, 0x080c, 0x81f4, 0x7814, 0x7032, 0x7042, 0x7047,
-+      0x0200, 0x60c3, 0x0020, 0x080c, 0x8576, 0x0005, 0x00e6, 0x2071,
-+      0x1304, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005,
-+      0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0x1304, 0x7614, 0x2660, 0x2678, 0x2039,
-+      0x0001, 0x87ff, 0x0904, 0x89fa, 0x8cff, 0x0904, 0x89fa, 0x6020,
-+      0x9086, 0x0006, 0x1904, 0x89f5, 0x88ff, 0x0138, 0x2800, 0x9c06,
-+      0x1904, 0x89f5, 0x2039, 0x0000, 0x0050, 0x6010, 0x9206, 0x1904,
-+      0x89f5, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x89f5, 0x7024,
-+      0x9c06, 0x1578, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0530, 0x080c,
-+      0x7271, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,
-+      0x68c3, 0x0000, 0x080c, 0x8a7d, 0x7027, 0x0000, 0x0036, 0x2069,
-+      0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-+      0x2401, 0x9006, 0x080c, 0x2401, 0x2069, 0x0100, 0x6824, 0xd084,
-+      0x0110, 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a,
-+      0x0460, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36,
-+      0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013,
-+      0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
-+      0x2678, 0x89ff, 0x1158, 0x600f, 0x0000, 0x6014, 0x2068, 0x080c,
-+      0xa942, 0x0110, 0x080c, 0xc0e9, 0x080c, 0x8f09, 0x080c, 0x895e,
-+      0x88ff, 0x1190, 0x00ce, 0x0804, 0x8979, 0x2c78, 0x600c, 0x2060,
-+      0x0804, 0x8979, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce,
-+      0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5,
-+      0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
-+      0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1304, 0x7638, 0x2660,
-+      0x2678, 0x8cff, 0x0904, 0x8a6d, 0x6020, 0x9086, 0x0006, 0x1904,
-+      0x8a68, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0x8a68, 0x0040,
-+      0x6010, 0x9206, 0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0,
-+      0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x8847,
-+      0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e,
-+      0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0x6014, 0x2068, 0x080c, 0xa942, 0x0110, 0x080c,
-+      0xc0e9, 0x080c, 0x8f09, 0x87ff, 0x1190, 0x00ce, 0x0804, 0x8a19,
-+      0x2c78, 0x600c, 0x2060, 0x0804, 0x8a19, 0x9006, 0x012e, 0x000e,
-+      0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b,
-+      0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c88, 0x00e6, 0x2071, 0x1304,
-+      0x2001, 0x1100, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005,
-+      0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-+      0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1304,
-+      0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06,
-+      0x11e0, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36,
-+      0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037,
-+      0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060,
-+      0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe,
-+      0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2071, 0x1304, 0x760c, 0x2660, 0x2678, 0x8cff,
-+      0x0904, 0x8b56, 0x6010, 0x9080, 0x0028, 0x2004, 0x9206, 0x1904,
-+      0x8b51, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005,
-+      0x0904, 0x8b2d, 0x080c, 0x85a2, 0x68c3, 0x0000, 0x080c, 0x8a7d,
-+      0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
-+      0x0138, 0x2001, 0x0100, 0x080c, 0x2401, 0x9006, 0x080c, 0x2401,
-+      0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-+      0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140,
-+      0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000,
-+      0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-+      0x600f, 0x0000, 0x080c, 0xab1d, 0x1158, 0x080c, 0x2886, 0x080c,
-+      0xab2e, 0x11f0, 0x080c, 0x97dc, 0x00d8, 0x080c, 0x8a7d, 0x08c0,
-+      0x080c, 0xab2e, 0x1118, 0x080c, 0x97dc, 0x0090, 0x6014, 0x2068,
-+      0x080c, 0xa942, 0x0168, 0x6020, 0x9086, 0x0003, 0x11f8, 0x6867,
-+      0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11,
-+      0x080c, 0xad68, 0x080c, 0x8f09, 0x080c, 0x895e, 0x00ce, 0x0804,
-+      0x8ad7, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8ad7, 0x012e, 0x000e,
-+      0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086,
-+      0x0006, 0x1d30, 0x080c, 0xc0e9, 0x0c18, 0x00d6, 0x080c, 0x804b,
-+      0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001,
-+      0x2099, 0x12c3, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004,
-+      0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8576, 0x00de,
-+      0x0005, 0x080c, 0x804b, 0x7003, 0x0214, 0x7007, 0x0018, 0x700b,
-+      0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff,
-+      0x7022, 0x782c, 0x7026, 0x60c3, 0x0018, 0x080c, 0x8576, 0x0005,
-+      0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xaf4e,
-+      0x00de, 0x1904, 0x8bfe, 0x080c, 0x7fd5, 0x7003, 0x1300, 0x782c,
-+      0x2068, 0x6820, 0x9086, 0x0003, 0x0570, 0x7810, 0x9080, 0x0028,
-+      0x2014, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x11d0, 0x9286, 0x007e,
-+      0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x04a8, 0x9286, 0x007f,
-+      0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0468, 0xd2bc, 0x0180,
-+      0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0418,
-+      0x92e8, 0x1000, 0x2d6c, 0x6810, 0x700a, 0x6814, 0x700e, 0x00d8,
-+      0x6098, 0x700e, 0x00c0, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1138,
-+      0x7810, 0x9080, 0x0028, 0x2004, 0x9082, 0x007e, 0x0250, 0x00d6,
-+      0x2069, 0x111d, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de,
-+      0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
-+      0x000c, 0x001e, 0x00de, 0x080c, 0x8576, 0x0005, 0x781b, 0x0001,
-+      0x7803, 0x0006, 0x001e, 0x00de, 0x0005, 0x792c, 0x9180, 0x0008,
-+      0x200c, 0x9186, 0x0006, 0x01b0, 0x9186, 0x0003, 0x0904, 0x8c75,
-+      0x9186, 0x0005, 0x0904, 0x8c5e, 0x9186, 0x0004, 0x05c8, 0x9186,
-+      0x0008, 0x0904, 0x8c66, 0x7807, 0x0037, 0x7817, 0x1700, 0x080c,
-+      0x8cda, 0x0005, 0x080c, 0x8c9a, 0x00d6, 0x0026, 0x792c, 0x2168,
-+      0x2009, 0x4000, 0x6800, 0x0002, 0x8c3f, 0x8c4a, 0x8c41, 0x8c4a,
-+      0x8c46, 0x8c3f, 0x8c3f, 0x8c4a, 0x8c4a, 0x8c4a, 0x8c4a, 0x8c3f,
-+      0x8c3f, 0x8c3f, 0x8c3f, 0x8c3f, 0x8c4a, 0x8c3f, 0x8c4a, 0x080c,
-+      0x0d7e, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010,
-+      0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x8c92,
-+      0x080c, 0x8c9a, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
-+      0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04a0, 0x04d9, 0x00d6,
-+      0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0460, 0x0499, 0x00d6,
-+      0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118,
-+      0x9286, 0x0002, 0x1108, 0x900e, 0x00e8, 0x0421, 0x00d6, 0x0026,
-+      0x792c, 0x2168, 0x6814, 0x2068, 0x69ac, 0x6834, 0x9112, 0x69b0,
-+      0x6838, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, 0x0000, 0x2004,
-+      0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000,
-+      0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x080c,
-+      0x8576, 0x0005, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x804b,
-+      0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810,
-+      0x9080, 0x0028, 0x2004, 0x2011, 0x1136, 0x2214, 0xd2ac, 0x1118,
-+      0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x111d, 0x2d2c, 0x8d68,
-+      0x2d34, 0x90e8, 0x1000, 0x2d6c, 0x6b10, 0x6c14, 0x00de, 0x0028,
-+      0x901e, 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008,
-+      0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e,
-+      0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e,
-+      0x003e, 0x0005, 0x080c, 0x804b, 0x7003, 0x0100, 0x700b, 0x0009,
-+      0x7814, 0x700e, 0x60c3, 0x0008, 0x080c, 0x8576, 0x0005, 0x080c,
-+      0x7fcc, 0x7003, 0x1400, 0x7838, 0x700a, 0x783c, 0x700e, 0x782c,
-+      0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a,
-+      0x60c3, 0x0010, 0x080c, 0x8576, 0x0005, 0x080c, 0x8042, 0x7003,
-+      0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x080c,
-+      0x8576, 0x0005, 0x0029, 0x60c3, 0x0000, 0x080c, 0x8576, 0x0005,
-+      0x00d6, 0x080c, 0x8dc3, 0x7810, 0x2068, 0x6810, 0x9085, 0x0300,
-+      0x7002, 0x6814, 0x7006, 0x68a0, 0x2069, 0x1100, 0x6ad8, 0xd2ac,
-+      0x1110, 0xd0bc, 0x0188, 0x6874, 0x700a, 0x6878, 0x700e, 0x7013,
-+      0x0819, 0x080c, 0x8565, 0x721a, 0x2f10, 0x7222, 0x7a08, 0x7226,
-+      0x2071, 0x024c, 0x00de, 0x0005, 0x6234, 0x720e, 0x0c80, 0x0059,
-+      0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x080c, 0x8599,
-+      0x080c, 0x7268, 0x0005, 0x0036, 0x00d6, 0x00e6, 0x7858, 0x2068,
-+      0x9df0, 0x001b, 0x7210, 0x9296, 0x00c0, 0x9294, 0xfffd, 0x7212,
-+      0x7214, 0x9294, 0x0300, 0x7216, 0x7100, 0x9194, 0x00ff, 0x7308,
-+      0x9384, 0x00ff, 0x908d, 0xc200, 0x7102, 0x9384, 0xff00, 0x9215,
-+      0x720a, 0x7004, 0x720c, 0x700e, 0x7206, 0x00d6, 0x2069, 0x0200,
-+      0x080c, 0x8dc3, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-+      0x000a, 0x20e1, 0x0001, 0x2e98, 0x4003, 0x60a3, 0x0035, 0x6a68,
-+      0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee,
-+      0x00de, 0x003e, 0x0005, 0x900e, 0x7814, 0x9080, 0x001f, 0x2004,
-+      0xd0fc, 0x01d8, 0x9084, 0x0003, 0x11c0, 0x2001, 0x110c, 0x2004,
-+      0xd0bc, 0x0198, 0x7824, 0xd0cc, 0x1180, 0xd0c4, 0x1170, 0x7814,
-+      0x9080, 0x002a, 0x2004, 0x9005, 0x1140, 0x2001, 0x110c, 0x200c,
-+      0xc1d5, 0x2102, 0x2009, 0x12e9, 0x210c, 0x918d, 0x0092, 0x0010,
-+      0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009,
-+      0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009,
-+      0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028,
-+      0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6,
-+      0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813,
-+      0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292,
-+      0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff,
-+      0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6,
-+      0x0156, 0x080c, 0x804b, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,
-+      0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,
-+      0x0000, 0x2069, 0x1100, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,
-+      0xc38d, 0x0060, 0x080c, 0x62e4, 0x1110, 0xc3ad, 0x0008, 0xc3a5,
-+      0x6ad8, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011,
-+      0x1148, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1140, 0x2019,
-+      0x1141, 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
-+      0x0002, 0x9290, 0x0002, 0x1f04, 0x8e1b, 0x60c3, 0x0040, 0x080c,
-+      0x8576, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x804b, 0x7a14,
-+      0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,
-+      0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x04b8, 0x7003,
-+      0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x12f4, 0x2204,
-+      0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x2001, 0x1136,
-+      0x2004, 0xd0ac, 0x1138, 0x7810, 0x9080, 0x0028, 0x2004, 0x9082,
-+      0x007f, 0x0248, 0x2001, 0x111d, 0x2004, 0x7022, 0x2001, 0x111e,
-+      0x2004, 0x7026, 0x0030, 0x2001, 0x1116, 0x2004, 0x9084, 0x00ff,
-+      0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1105, 0x20e9,
-+      0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x080c, 0x8576,
-+      0x015e, 0x0005, 0x2061, 0x15c0, 0x2071, 0x1100, 0x706c, 0x704e,
-+      0x7053, 0x15c0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1100, 0x2091,
-+      0x8000, 0x754c, 0x9582, 0x0010, 0x0608, 0x7050, 0x2060, 0x6000,
-+      0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208,
-+      0x0cb0, 0x2061, 0x15c0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e,
-+      0x9ca8, 0x0018, 0x7060, 0x9502, 0x1230, 0x7552, 0x9085, 0x0001,
-+      0x012e, 0x00ee, 0x0005, 0x7053, 0x15c0, 0x0cc0, 0x9006, 0x0cc0,
-+      0x00e6, 0x2071, 0x1100, 0x754c, 0x9582, 0x0010, 0x0600, 0x7050,
-+      0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7060,
-+      0x9c02, 0x1208, 0x0cb0, 0x2061, 0x15c0, 0x0c98, 0x6003, 0x0008,
-+      0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1228, 0x7552,
-+      0x9085, 0x0001, 0x00ee, 0x0005, 0x7053, 0x15c0, 0x0cc8, 0x9006,
-+      0x0cc8, 0x9c82, 0x15c0, 0x0a0c, 0x0d7e, 0x2001, 0x1118, 0x2004,
-+      0x9c02, 0x1a0c, 0x0d7e, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016,
-+      0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056,
-+      0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e,
-+      0x6042, 0x2061, 0x1100, 0x604c, 0x8000, 0x604e, 0x9086, 0x0001,
-+      0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e,
-+      0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084,
-+      0x190c, 0x1509, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x12c0,
-+      0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a,
-+      0x080c, 0xc381, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126,
-+      0x2071, 0x1100, 0x2091, 0x8000, 0x754c, 0x9582, 0x0001, 0x0608,
-+      0x7050, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018,
-+      0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x15c0, 0x0c98, 0x6003,
-+      0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1230,
-+      0x7552, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7053, 0x15c0,
-+      0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0x8f66,
-+      0x8f75, 0x8f90, 0x8fab, 0xaf90, 0xafab, 0xafc6, 0x8f66, 0x8f75,
-+      0x8f66, 0x8fc7, 0x8f66, 0x8f66, 0x8f66, 0x8f66, 0x9186, 0x0013,
-+      0x1128, 0x080c, 0x79ab, 0x080c, 0x7aa4, 0x0005, 0x9186, 0x0047,
-+      0x1118, 0x9016, 0x080c, 0x137c, 0x0005, 0x0066, 0x6000, 0x90b2,
-+      0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e, 0x0005, 0x8f8e, 0x9655,
-+      0x9815, 0x8f8e, 0x98a2, 0x9248, 0x8f8e, 0x8f8e, 0x95e1, 0x9d9e,
-+      0x8f8e, 0x8f8e, 0x8f8e, 0x8f8e, 0x8f8e, 0x8f8e, 0x080c, 0x0d7e,
-+      0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e,
-+      0x0005, 0x8fa9, 0xa3c8, 0x8fa9, 0x8fa9, 0x8fa9, 0x8fa9, 0x8fa9,
-+      0x8fa9, 0xa36e, 0xa544, 0x8fa9, 0xa3fb, 0xa478, 0xa3fb, 0xa478,
-+      0x8fa9, 0x080c, 0x0d7e, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d7e,
-+      0x6000, 0x0002, 0x8fc5, 0x9ddf, 0x9eaf, 0x9fd9, 0xa13a, 0x8fc5,
-+      0x8fc5, 0x8fc5, 0x9db9, 0xa31e, 0xa321, 0x8fc5, 0x8fc5, 0x8fc5,
-+      0x8fc5, 0xa34b, 0x8fc5, 0x8fc5, 0x8fc5, 0x080c, 0x0d7e, 0x0066,
-+      0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e, 0x0005,
-+      0x8fe0, 0x8fe0, 0x901f, 0x90ad, 0x910e, 0x8fe0, 0x8fe0, 0x8fe0,
-+      0x8fe2, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0,
-+      0x080c, 0x0d7e, 0x9186, 0x004c, 0x0588, 0x9186, 0x0003, 0x190c,
-+      0x0d7e, 0x00d6, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106,
-+      0x6014, 0x2068, 0x687c, 0x9084, 0x8000, 0xc0b5, 0x687e, 0x68ac,
-+      0x6846, 0x68b0, 0x684a, 0x9006, 0x6836, 0x683a, 0x6884, 0x9092,
-+      0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210,
-+      0x621a, 0x00de, 0x2c10, 0x080c, 0x1605, 0x080c, 0x75db, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x7b72, 0x012e, 0x0005, 0x6010, 0x9080,
-+      0x0028, 0x2024, 0x8427, 0x2c00, 0x080c, 0x912f, 0x0005, 0x00d6,
-+      0x00f6, 0x2079, 0x1100, 0x7a88, 0x9290, 0x0018, 0x6014, 0x2068,
-+      0x6c78, 0x0046, 0x68e0, 0x9005, 0x1140, 0x68dc, 0x921a, 0x0140,
-+      0x0220, 0x687b, 0x0007, 0x2010, 0x0028, 0x687b, 0x0015, 0x0010,
-+      0x687b, 0x0000, 0x8214, 0x6883, 0x0000, 0x6a02, 0x0006, 0x0016,
-+      0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108,
-+      0x009a, 0x2100, 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038,
-+      0x2100, 0x9086, 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4,
-+      0x0007, 0x8423, 0x9405, 0x0002, 0x907e, 0x907e, 0x9079, 0x907c,
-+      0x907e, 0x9076, 0x906c, 0x906c, 0x906c, 0x906c, 0x906c, 0x906c,
-+      0x906c, 0x906c, 0x906c, 0x906c, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-+      0x002e, 0x001e, 0x000e, 0x000e, 0x080c, 0x0d7e, 0x080c, 0x9a2c,
-+      0x0028, 0x080c, 0x9b03, 0x0010, 0x080c, 0x9bfa, 0x00fe, 0x00ee,
-+      0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0x6896, 0x000e, 0x080c,
-+      0x91df, 0x01e8, 0x6804, 0x680e, 0x200c, 0x9080, 0x0002, 0x6acc,
-+      0x6bd0, 0x6cd4, 0x6dd8, 0x2039, 0x0001, 0x2031, 0x0000, 0x2041,
-+      0x1091, 0x080c, 0x9367, 0x0158, 0x000e, 0x9005, 0x0118, 0x00fe,
-+      0x00de, 0x0005, 0x00fe, 0x00de, 0x080c, 0x8ed9, 0x0005, 0x2001,
-+      0x002c, 0x900e, 0x080c, 0x923d, 0x0c78, 0x9182, 0x0047, 0x0002,
-+      0x90b9, 0x90b9, 0x90bb, 0x90e8, 0x90b9, 0x90b9, 0x90b9, 0x90b9,
-+      0x90fa, 0x080c, 0x0d7e, 0x00d6, 0x0016, 0x080c, 0x7a55, 0x080c,
-+      0x7b72, 0x6003, 0x0004, 0x6114, 0x2168, 0x687c, 0xd0fc, 0x0188,
-+      0x6878, 0x9005, 0x1158, 0x6894, 0x9005, 0x0140, 0x2001, 0x0000,
-+      0x900e, 0x080c, 0x923d, 0x080c, 0x8ed9, 0x0078, 0x6003, 0x0002,
-+      0x0060, 0x687f, 0x0020, 0x688c, 0x688a, 0x68a4, 0x68ae, 0x68a8,
-+      0x68b2, 0x68c7, 0x0000, 0x68cb, 0x0000, 0x001e, 0x00de, 0x0005,
-+      0x080c, 0x7a55, 0x00d6, 0x6114, 0x2168, 0x080c, 0xa942, 0x0120,
-+      0x687b, 0x0006, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8ed9, 0x080c,
-+      0x7b72, 0x0005, 0x080c, 0x7a55, 0x080c, 0x2862, 0x00d6, 0x6114,
-+      0x2168, 0x080c, 0xa942, 0x0120, 0x687b, 0x0029, 0x080c, 0x5b76,
-+      0x00de, 0x080c, 0x8ed9, 0x080c, 0x7b72, 0x0005, 0x9182, 0x0047,
-+      0x0002, 0x911e, 0x9120, 0x911e, 0x911e, 0x911e, 0x911e, 0x911e,
-+      0x911e, 0x911e, 0x911e, 0x911e, 0x911e, 0x9120, 0x080c, 0x0d7e,
-+      0x00d6, 0x080c, 0x1303, 0x6114, 0x2168, 0x687b, 0x0000, 0x6883,
-+      0x0000, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8ed9, 0x0005, 0x0026,
-+      0x0036, 0x0056, 0x0066, 0x00d6, 0x00f6, 0x0006, 0x080c, 0x0eb6,
-+      0x000e, 0x090c, 0x0d7e, 0x20e9, 0x0001, 0x9d88, 0x0019, 0x21a0,
-+      0x900e, 0x20a9, 0x0020, 0x4104, 0x687a, 0x2079, 0x1100, 0x7988,
-+      0x9188, 0x0018, 0x918c, 0x0fff, 0x6972, 0x6c76, 0x2d78, 0x00f6,
-+      0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182,
-+      0x0034, 0x1228, 0x9f90, 0x001f, 0x080c, 0xa5c9, 0x04c0, 0x2130,
-+      0x2009, 0x0034, 0x9f90, 0x001f, 0x080c, 0xa5c9, 0x96b2, 0x0034,
-+      0x7804, 0x906d, 0x0110, 0x080c, 0x0edf, 0x080c, 0x0eb6, 0x01d0,
-+      0x8528, 0x6867, 0x0110, 0x686b, 0x0000, 0x2d20, 0x7c06, 0x968a,
-+      0x003d, 0x1230, 0x2608, 0x9d90, 0x001b, 0x080c, 0xa5c9, 0x00b8,
-+      0x96b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0x9d90, 0x001b, 0x080c,
-+      0xa5c9, 0x0c18, 0x2079, 0x0200, 0x7817, 0x0000, 0x00fe, 0x852f,
-+      0x95ad, 0x0050, 0x7d66, 0x7870, 0xc0fd, 0x7872, 0x0048, 0x2079,
-+      0x0200, 0x7817, 0x0000, 0x00fe, 0x852f, 0x95ad, 0x0050, 0x7d66,
-+      0x2f68, 0x6804, 0x6807, 0x0000, 0x0006, 0x080c, 0x5b76, 0x000e,
-+      0x2068, 0x9005, 0x1db0, 0x00fe, 0x00de, 0x006e, 0x005e, 0x003e,
-+      0x002e, 0x0005, 0x00d6, 0x00f6, 0x0006, 0x080c, 0x0eb6, 0x000e,
-+      0x090c, 0x0d7e, 0x20e9, 0x0001, 0x9d88, 0x0019, 0x21a0, 0x900e,
-+      0x20a9, 0x0020, 0x4104, 0x6a66, 0x687a, 0x2079, 0x1100, 0x7988,
-+      0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210, 0x2009, 0x001a,
-+      0x21a8, 0x810b, 0x6972, 0x6c76, 0x2e98, 0x9d80, 0x001f, 0x20a0,
-+      0x080c, 0x504f, 0x080c, 0x5b76, 0x00fe, 0x00de, 0x0005, 0x0016,
-+      0x00d6, 0x00f6, 0x2079, 0x0200, 0x2e98, 0x2021, 0x003e, 0x901e,
-+      0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e,
-+      0x1168, 0x00d6, 0x080c, 0x0e9d, 0x2d00, 0x00de, 0x05f0, 0x6806,
-+      0x2068, 0x20e9, 0x0001, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e,
-+      0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010,
-+      0x2100, 0x9318, 0x2200, 0x9402, 0x1220, 0x2410, 0x9006, 0x9398,
-+      0x0002, 0x2020, 0x22a8, 0x6800, 0x9200, 0x6802, 0x0016, 0x0026,
-+      0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04,
-+      0x921a, 0x22a0, 0x2198, 0x002e, 0x001e, 0x83ff, 0x0170, 0x3300,
-+      0x9086, 0x0280, 0x1120, 0x7814, 0x8000, 0x7816, 0x2e98, 0x2310,
-+      0x84ff, 0x0904, 0x91e5, 0x0804, 0x91e7, 0x9085, 0x0001, 0x7817,
-+      0x0000, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x6314,
-+      0x2368, 0x687a, 0x6982, 0x080c, 0x5b76, 0x003e, 0x00de, 0x0005,
-+      0x91b6, 0x0015, 0x1118, 0x080c, 0x8ed9, 0x0030, 0x91b6, 0x0016,
-+      0x190c, 0x0d7e, 0x080c, 0x8ed9, 0x0005, 0x20a9, 0x000e, 0x20e1,
-+      0x0000, 0x2e98, 0x6014, 0x20e9, 0x0001, 0x20a0, 0x4003, 0x9080,
-+      0x001b, 0x2020, 0x20a9, 0x0006, 0x3310, 0x9298, 0x0001, 0x94a8,
-+      0x0001, 0x222e, 0x2326, 0x9290, 0x0002, 0x95a8, 0x0002, 0x9398,
-+      0x0002, 0x94a0, 0x0002, 0x1f04, 0x9269, 0x00e6, 0x080c, 0xa942,
-+      0x0130, 0x6014, 0x2070, 0x7007, 0x0000, 0x7067, 0x0103, 0x00ee,
-+      0x080c, 0x8ed9, 0x0005, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,
-+      0x1130, 0x6010, 0x2068, 0x6813, 0x00ff, 0x6817, 0xfffd, 0x6014,
-+      0x9005, 0x0130, 0x2068, 0x6807, 0x0000, 0x6867, 0x0103, 0x6b32,
-+      0x080c, 0x8ed9, 0x003e, 0x00de, 0x0005, 0x0016, 0x20a9, 0x0014,
-+      0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x9080, 0x0002,
-+      0x20e9, 0x0001, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,
-+      0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0x6014,
-+      0x9080, 0x0001, 0x2004, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
-+      0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
-+      0x2003, 0x0000, 0x00e6, 0x6014, 0x2004, 0x2070, 0x7067, 0x0103,
-+      0x00ee, 0x080c, 0x8ed9, 0x001e, 0x0005, 0x0016, 0x900e, 0x7030,
-+      0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c,
-+      0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x9192, 0x0014,
-+      0x1218, 0x2011, 0x0000, 0x0010, 0x2009, 0x0014, 0x21a8, 0x9e80,
-+      0x000c, 0x2098, 0x6014, 0x9080, 0x0002, 0x20a0, 0x080c, 0x504f,
-+      0x82ff, 0x0170, 0x2009, 0x0205, 0x2104, 0x8000, 0x200a, 0x2e00,
-+      0x2098, 0x3400, 0x9080, 0x0014, 0x20a0, 0x22a8, 0x080c, 0x504f,
-+      0x00e6, 0x080c, 0xa942, 0x0140, 0x6014, 0x2070, 0x7007, 0x0000,
-+      0x7064, 0x70e2, 0x7067, 0x0103, 0x00ee, 0x080c, 0x8ed9, 0x001e,
-+      0x0005, 0x0016, 0x00d6, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009,
-+      0x0004, 0x0010, 0x7034, 0x800c, 0x21a8, 0x9e80, 0x000c, 0x2098,
-+      0x6014, 0x2068, 0x6804, 0x9005, 0x1108, 0x2d00, 0x9080, 0x000c,
-+      0x20a0, 0x080c, 0x504f, 0x080c, 0xa942, 0x0148, 0x6804, 0x9005,
-+      0x1158, 0x6807, 0x0000, 0x6864, 0x68e2, 0x6867, 0x0103, 0x080c,
-+      0x8ed9, 0x00de, 0x001e, 0x0005, 0x00e6, 0x2070, 0x7030, 0x8007,
-+      0x9086, 0x0100, 0x1118, 0x080c, 0x97dc, 0x00b8, 0x7034, 0x8007,
-+      0x800c, 0x9e80, 0x000c, 0x687b, 0x0000, 0x6883, 0x0000, 0x6897,
-+      0x4000, 0x6aa0, 0x6b9c, 0x6ca8, 0x6da4, 0x2031, 0x0000, 0x2039,
-+      0x0001, 0x2041, 0x1078, 0x0019, 0x0d30, 0x00ee, 0x08c0, 0x00d6,
-+      0x0006, 0x080c, 0x0e9d, 0x000e, 0x0190, 0x6812, 0x000e, 0x683e,
-+      0x0006, 0x6e06, 0x2800, 0x683a, 0x6916, 0x6f0e, 0x6a2a, 0x6b2e,
-+      0x6c32, 0x6d36, 0x2d10, 0x080c, 0x0f22, 0x9085, 0x0001, 0x00de,
-+      0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,
-+      0x9290, 0x0004, 0x2214, 0x9206, 0x1518, 0x700c, 0x6210, 0x9290,
-+      0x0005, 0x2214, 0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68, 0x0016,
-+      0x2009, 0x0035, 0x080c, 0xaf4e, 0x001e, 0x1158, 0x622c, 0x2268,
-+      0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006,
-+      0x0128, 0x080c, 0x8ed9, 0x0020, 0x0039, 0x0010, 0x080c, 0x946d,
-+      0x002e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x6814, 0x2078, 0x9186,
-+      0x0015, 0x0904, 0x9454, 0x918e, 0x0016, 0x1904, 0x946b, 0x700c,
-+      0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904,
-+      0x9433, 0x8fff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0x9417,
-+      0x0804, 0x9469, 0x6808, 0x9086, 0xffff, 0x1904, 0x9456, 0x787c,
-+      0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0x783c, 0x7940, 0x9105,
-+      0x1904, 0x9456, 0x080c, 0xab11, 0x685c, 0x7882, 0x787c, 0xc0dc,
-+      0xc0f4, 0xc0d4, 0x787e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a,
-+      0x080c, 0x73f0, 0x7884, 0x920a, 0x0208, 0x8011, 0x7a86, 0x82ff,
-+      0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xa6d9, 0x00ce, 0x0804,
-+      0x9469, 0x00c6, 0x00d6, 0x2f68, 0x6868, 0xd0fc, 0x1118, 0x080c,
-+      0x5151, 0x0010, 0x080c, 0x54d0, 0x00de, 0x00ce, 0x1904, 0x9456,
-+      0x00c6, 0x2d60, 0x080c, 0x8ed9, 0x00ce, 0x0804, 0x9469, 0x00c6,
-+      0x080c, 0x8f26, 0x0190, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c,
-+      0xad70, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x8ed9,
-+      0x00ce, 0x080c, 0x8f53, 0x00ce, 0x04e0, 0x2001, 0x12c2, 0x2004,
-+      0x6842, 0x00ce, 0x04b0, 0x7008, 0x9086, 0x000b, 0x11a0, 0x6010,
-+      0x200c, 0xc1bc, 0x2102, 0x00c6, 0x2d60, 0x7883, 0x0003, 0x6007,
-+      0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x756e, 0x080c,
-+      0x7aa4, 0x00ce, 0x00f0, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001,
-+      0x12c2, 0x2004, 0x6842, 0x00a8, 0x0481, 0x00a8, 0x8fff, 0x090c,
-+      0x0d7e, 0x00c6, 0x00d6, 0x2d60, 0x2f68, 0x6867, 0x0103, 0x687b,
-+      0x0003, 0x080c, 0xa5b9, 0x080c, 0xab11, 0x080c, 0x8f09, 0x00de,
-+      0x00ce, 0x080c, 0x8ed9, 0x00fe, 0x0005, 0x9186, 0x0015, 0x1128,
-+      0x2001, 0x12c2, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160,
-+      0x00c6, 0x2d00, 0x2060, 0x080c, 0xc381, 0x080c, 0x7384, 0x080c,
-+      0x8ed9, 0x00ce, 0x080c, 0x8ed9, 0x0005, 0x0026, 0x0036, 0x0046,
-+      0x7228, 0x7cb0, 0x7bac, 0xd2f4, 0x0130, 0x2001, 0x12c2, 0x2004,
-+      0x6842, 0x0804, 0x94e9, 0x00c6, 0x2d60, 0x080c, 0xa5e6, 0x00ce,
-+      0x6804, 0x9086, 0x0050, 0x1170, 0x00c6, 0x2d00, 0x2060, 0x6003,
-+      0x0001, 0x6007, 0x0050, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ce,
-+      0x0804, 0x94e9, 0x6800, 0x9086, 0x000f, 0x01c8, 0x8fff, 0x090c,
-+      0x0d7e, 0x6824, 0xd0dc, 0x1198, 0x6800, 0x9086, 0x0004, 0x1198,
-+      0x787c, 0xd0ac, 0x0180, 0x7843, 0x0fff, 0x783f, 0x0fff, 0x7880,
-+      0xc0f4, 0xc0fc, 0x7882, 0x2001, 0x0001, 0x6832, 0x00e8, 0x2001,
-+      0x0007, 0x6832, 0x00c8, 0x787c, 0xd0b4, 0x1138, 0xd0ac, 0x0db8,
-+      0x7838, 0x7934, 0x9105, 0x0d98, 0x0c30, 0xd2ec, 0x1d80, 0x7024,
-+      0x9306, 0x1118, 0x7020, 0x9406, 0x0d50, 0x7020, 0x683e, 0x7024,
-+      0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xac68, 0x080c, 0x7aa4,
-+      0x0010, 0x080c, 0x8ed9, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6,
-+      0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x9290, 0x0004,
-+      0x2214, 0x9206, 0x1904, 0x9561, 0x700c, 0x6210, 0x9290, 0x0005,
-+      0x2214, 0x9206, 0x1904, 0x9561, 0x6038, 0x2068, 0x6a20, 0x9286,
-+      0x0007, 0x0904, 0x955f, 0x9286, 0x0002, 0x0904, 0x955f, 0x9286,
-+      0x0000, 0x0904, 0x955f, 0x6808, 0x633c, 0x9306, 0x1904, 0x955f,
-+      0x2071, 0x026c, 0x9186, 0x0015, 0x05e0, 0x918e, 0x0016, 0x1190,
-+      0x6034, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1160, 0x700c, 0x9086,
-+      0x2a00, 0x1140, 0x6038, 0x9080, 0x0009, 0x200c, 0xc1dd, 0xc1f5,
-+      0x2102, 0x0438, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b,
-+      0x01a0, 0x9186, 0x004c, 0x0188, 0x9186, 0x004d, 0x0170, 0x9186,
-+      0x004e, 0x0158, 0x9186, 0x0052, 0x0140, 0x6014, 0x2068, 0x080c,
-+      0xa942, 0x090c, 0x0d7e, 0x6883, 0x0003, 0x6007, 0x0085, 0x6003,
-+      0x000b, 0x6023, 0x0002, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ce,
-+      0x0030, 0x6038, 0x2070, 0x2001, 0x12c2, 0x2004, 0x7042, 0x080c,
-+      0x8ed9, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00d6, 0x00f6, 0x6014,
-+      0x2068, 0x6010, 0x2078, 0x91b6, 0x0015, 0x0130, 0x7a08, 0x7b0c,
-+      0x7c00, 0xc48c, 0x7c02, 0x0448, 0x0156, 0x0036, 0x0026, 0x9e90,
-+      0x000c, 0x9290, 0x0004, 0x20a9, 0x0004, 0x9f98, 0x000a, 0x080c,
-+      0x9d60, 0x002e, 0x003e, 0x015e, 0x15f0, 0x0156, 0x0036, 0x0026,
-+      0x9e90, 0x000c, 0x9290, 0x0008, 0x20a9, 0x0004, 0x9f98, 0x0006,
-+      0x080c, 0x9d60, 0x002e, 0x003e, 0x015e, 0x1568, 0x7238, 0x7a0a,
-+      0x733c, 0x7b0e, 0x7c00, 0xc48d, 0x7c02, 0x6804, 0x9005, 0x1120,
-+      0x00fe, 0x00de, 0x0804, 0x9275, 0x9080, 0x0002, 0x00d6, 0x2068,
-+      0x6a0a, 0x6b0e, 0x6c02, 0x00de, 0x2009, 0x002b, 0x6aa0, 0x6b9c,
-+      0x6ca8, 0x6da4, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1078,
-+      0x080c, 0x9367, 0x0128, 0x00fe, 0x00de, 0x080c, 0x8ed9, 0x0005,
-+      0x080c, 0x97dc, 0x0cc0, 0x00f6, 0x080c, 0x2862, 0x00fe, 0x00c6,
-+      0x080c, 0x8e83, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001,
-+      0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x5568,
-+      0x080c, 0x5592, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x00ce, 0x0804,
-+      0x959d, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d7e, 0x91b2, 0x0040,
-+      0x1a04, 0x963f, 0x0002, 0x962d, 0x962d, 0x962d, 0x962d, 0x962d,
-+      0x962d, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+      0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+      0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+      0x962b, 0x962b, 0x962d, 0x962b, 0x962d, 0x962d, 0x962b, 0x962b,
-+      0x962b, 0x962b, 0x962b, 0x962d, 0x962b, 0x962b, 0x962b, 0x962b,
-+      0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962d, 0x962d, 0x962b,
-+      0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b, 0x962b,
-+      0x962d, 0x962b, 0x962b, 0x080c, 0x0d7e, 0x6003, 0x0001, 0x6106,
-+      0x9186, 0x0032, 0x0118, 0x080c, 0x75be, 0x0010, 0x080c, 0x756e,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e, 0x0005, 0x2600,
-+      0x0002, 0x9653, 0x9653, 0x9653, 0x962d, 0x962d, 0x9653, 0x9653,
-+      0x9653, 0x9653, 0x962d, 0x9653, 0x962d, 0x9653, 0x962d, 0x9653,
-+      0x9653, 0x9653, 0x9653, 0x080c, 0x0d7e, 0x6004, 0x90b2, 0x0053,
-+      0x1a0c, 0x0d7e, 0x91b6, 0x0013, 0x0904, 0x9702, 0x91b6, 0x0027,
-+      0x1904, 0x96c8, 0x080c, 0x79ab, 0x6004, 0x080c, 0xab1d, 0x0190,
-+      0x080c, 0xab2e, 0x0904, 0x96c2, 0x908e, 0x0021, 0x0904, 0x96c5,
-+      0x908e, 0x0022, 0x0904, 0x96c2, 0x908e, 0x003d, 0x0904, 0x96c5,
-+      0x0804, 0x96bb, 0x080c, 0x2886, 0x2001, 0x0007, 0x080c, 0x5568,
-+      0x6010, 0x9080, 0x0028, 0x200c, 0x080c, 0x97dc, 0x9186, 0x007e,
-+      0x1148, 0x2001, 0x1136, 0x2014, 0xc285, 0x080c, 0x62e4, 0x1108,
-+      0xc2ad, 0x2202, 0x0016, 0x0026, 0x0036, 0x2110, 0x0026, 0x2019,
-+      0x0028, 0x080c, 0x8ac9, 0x002e, 0x080c, 0xc3d4, 0x003e, 0x002e,
-+      0x001e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c,
-+      0x76f0, 0x0076, 0x903e, 0x080c, 0x75ee, 0x6010, 0x00c6, 0x9065,
-+      0x0100, 0x00ce, 0x2c08, 0x080c, 0xbec2, 0x007e, 0x003e, 0x002e,
-+      0x001e, 0x080c, 0x55d0, 0x080c, 0xad68, 0x080c, 0x8ed9, 0x080c,
-+      0x7aa4, 0x0005, 0x080c, 0x97dc, 0x0cb0, 0x080c, 0x9809, 0x0c98,
-+      0x9186, 0x0014, 0x1db0, 0x080c, 0x79ab, 0x080c, 0x2862, 0x080c,
-+      0xab1d, 0x1188, 0x080c, 0x2886, 0x6010, 0x9080, 0x0028, 0x200c,
-+      0x080c, 0x97dc, 0x9186, 0x007e, 0x1128, 0x2001, 0x1136, 0x200c,
-+      0xc185, 0x2102, 0x08c0, 0x080c, 0xab2e, 0x1118, 0x080c, 0x97dc,
-+      0x0890, 0x6004, 0x908e, 0x0032, 0x1158, 0x00e6, 0x00f6, 0x2071,
-+      0x1193, 0x2079, 0x0000, 0x080c, 0x2b98, 0x00fe, 0x00ee, 0x0818,
-+      0x6004, 0x908e, 0x0021, 0x0d50, 0x908e, 0x0022, 0x090c, 0x97dc,
-+      0x0804, 0x96bb, 0x90b2, 0x0040, 0x1a04, 0x97c5, 0x2008, 0x0002,
-+      0x974a, 0x974b, 0x974e, 0x9751, 0x9754, 0x9757, 0x9748, 0x9748,
-+      0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+      0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+      0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x975a, 0x9769,
-+      0x9748, 0x976b, 0x9769, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+      0x9769, 0x9769, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748, 0x9748,
-+      0x9748, 0x9748, 0x97a5, 0x9769, 0x9748, 0x9765, 0x9748, 0x9748,
-+      0x9748, 0x9766, 0x9748, 0x9748, 0x9748, 0x9769, 0x979c, 0x9748,
-+      0x080c, 0x0d7e, 0x00f0, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003,
-+      0x0448, 0x2001, 0x0005, 0x0430, 0x2001, 0x0001, 0x0418, 0x2001,
-+      0x0009, 0x0400, 0x080c, 0x79ab, 0x6003, 0x0005, 0x2001, 0x12c2,
-+      0x2004, 0x6042, 0x080c, 0x7aa4, 0x00a0, 0x0018, 0x0010, 0x080c,
-+      0x5568, 0x0804, 0x97b6, 0x080c, 0x79ab, 0x2001, 0x12c0, 0x2004,
-+      0x601a, 0x2001, 0x12c2, 0x2004, 0x6042, 0x6003, 0x0004, 0x080c,
-+      0x7aa4, 0x0005, 0x080c, 0x5568, 0x080c, 0x79ab, 0x6003, 0x0002,
-+      0x2001, 0x12c2, 0x2004, 0x6042, 0x0036, 0x2019, 0x115d, 0x2304,
-+      0x9084, 0xff00, 0x1120, 0x2001, 0x12c0, 0x201c, 0x0040, 0x8007,
-+      0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a,
-+      0x003e, 0x080c, 0x7aa4, 0x08e8, 0x080c, 0x79ab, 0x080c, 0xad68,
-+      0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x08a0, 0x00e6, 0x00f6, 0x2071,
-+      0x1193, 0x2079, 0x0000, 0x080c, 0x2b98, 0x00fe, 0x00ee, 0x080c,
-+      0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0818, 0x080c, 0x79ab,
-+      0x2001, 0x12c2, 0x2004, 0x6042, 0x6003, 0x0002, 0x2001, 0x12c0,
-+      0x2004, 0x601a, 0x080c, 0x7aa4, 0x0005, 0x2600, 0x2008, 0x0002,
-+      0x97da, 0x97da, 0x97da, 0x97b6, 0x97b6, 0x97da, 0x97da, 0x97da,
-+      0x97da, 0x97b6, 0x97da, 0x97b6, 0x97da, 0x97b6, 0x97da, 0x97da,
-+      0x97da, 0x97da, 0x080c, 0x0d7e, 0x00e6, 0x0026, 0x0016, 0x080c,
-+      0xa942, 0x0500, 0x6014, 0x2070, 0x7064, 0x9086, 0x0139, 0x1140,
-+      0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xaec0, 0x0090,
-+      0x7068, 0xd0fc, 0x0178, 0x7007, 0x0000, 0x0016, 0x6004, 0x908e,
-+      0x0021, 0x0160, 0x908e, 0x003d, 0x0148, 0x001e, 0x7067, 0x0103,
-+      0x7033, 0x0100, 0x001e, 0x002e, 0x00ee, 0x0005, 0x001e, 0x0009,
-+      0x0cc8, 0x00e6, 0x9cf0, 0x0005, 0x2e74, 0x7000, 0x2070, 0x7067,
-+      0x0103, 0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6, 0x6610, 0x2668,
-+      0x6804, 0x9084, 0x00ff, 0x00de, 0x90b2, 0x000c, 0x1a0c, 0x0d7e,
-+      0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xadf6, 0x0804, 0x9892,
-+      0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xae39, 0x0804, 0x9892,
-+      0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xae66, 0x0804, 0x9892,
-+      0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xad8b, 0x0804, 0x9892,
-+      0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xab5e, 0x0804, 0x9892,
-+      0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xab9a, 0x0804, 0x9892,
-+      0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0x9255, 0x04d8, 0x6604,
-+      0x96b6, 0x0000, 0x1118, 0x080c, 0x9565, 0x04a0, 0x6604, 0x96b6,
-+      0x0022, 0x1118, 0x080c, 0x9283, 0x0468, 0x6604, 0x96b6, 0x0035,
-+      0x1118, 0x080c, 0x9381, 0x0430, 0x6604, 0x96b6, 0x0039, 0x1118,
-+      0x080c, 0x94ef, 0x00f8, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
-+      0x929d, 0x00c0, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0x92d5,
-+      0x0088, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0x9319, 0x0050,
-+      0x91b6, 0x0015, 0x1110, 0x0053, 0x0028, 0x91b6, 0x0016, 0x1118,
-+      0x0804, 0x9ab5, 0x0005, 0x080c, 0x8f6e, 0x0ce0, 0x98b0, 0x98b3,
-+      0x98b0, 0x98f6, 0x98b0, 0x9a2c, 0x9ac3, 0x98b0, 0x98b0, 0x9a8f,
-+      0x98b0, 0x9aa5, 0x00e6, 0x080c, 0x1303, 0x9cf0, 0x0005, 0x2e74,
-+      0x7000, 0x2070, 0x7067, 0x0103, 0x00ee, 0x080c, 0x8ed9, 0x0005,
-+      0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1100, 0x7088, 0x9086,
-+      0x0074, 0x1540, 0x080c, 0xbe99, 0x11b0, 0x6010, 0x00d6, 0x2068,
-+      0x7030, 0xd08c, 0x0128, 0x6800, 0xd0bc, 0x0110, 0xc0c5, 0x6802,
-+      0x00e9, 0x00de, 0x2001, 0x0006, 0x080c, 0x5568, 0x080c, 0x2886,
-+      0x080c, 0x8ed9, 0x0088, 0x2001, 0x000a, 0x080c, 0x5568, 0x080c,
-+      0x2886, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x75be, 0x080c,
-+      0x7aa4, 0x0010, 0x080c, 0x9a13, 0x00ee, 0x0005, 0x6800, 0xd084,
-+      0x0160, 0x9006, 0x080c, 0x5556, 0x2069, 0x1152, 0x6804, 0xd0a4,
-+      0x0120, 0x2001, 0x0006, 0x080c, 0x5592, 0x0005, 0x00d6, 0x2011,
-+      0x1122, 0x2204, 0x9086, 0x0074, 0x1904, 0x9a10, 0x6010, 0x2068,
-+      0x6aa0, 0x9286, 0x007e, 0x1120, 0x080c, 0x9c04, 0x0804, 0x9971,
-+      0x080c, 0x9bfa, 0x6010, 0x2068, 0x6aa0, 0x9286, 0x0080, 0x1530,
-+      0x6813, 0x00ff, 0x6817, 0xfffc, 0x6014, 0x9005, 0x01a8, 0x2068,
-+      0x6864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000,
-+      0x900e, 0x2011, 0x4000, 0x080c, 0xaec0, 0x0030, 0x6807, 0x0000,
-+      0x6867, 0x0103, 0x6833, 0x0200, 0x2001, 0x0006, 0x080c, 0x5568,
-+      0x080c, 0x2886, 0x080c, 0x8ed9, 0x0804, 0x9a11, 0x00e6, 0x2071,
-+      0x1136, 0x2e04, 0xd09c, 0x0188, 0x2071, 0x0260, 0x7108, 0x720c,
-+      0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0138, 0x6010, 0x2070,
-+      0x70a0, 0xd0bc, 0x1110, 0x7112, 0x7216, 0x00ee, 0x6014, 0x9005,
-+      0x0190, 0x2068, 0x6868, 0xd0f4, 0x0170, 0x6864, 0x9084, 0x00ff,
-+      0x9086, 0x0039, 0x1958, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
-+      0x080c, 0xaec0, 0x0848, 0x2001, 0x0004, 0x080c, 0x5568, 0x6003,
-+      0x0001, 0x6007, 0x0003, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0804,
-+      0x9a11, 0x685c, 0xd0e4, 0x01d8, 0x080c, 0xad0a, 0x080c, 0x62e4,
-+      0x0118, 0xd0dc, 0x1904, 0x992c, 0x2011, 0x1136, 0x2204, 0xc0ad,
-+      0x2012, 0x2001, 0x1298, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3,
-+      0x0000, 0x080c, 0x1fb8, 0x78e2, 0x00fe, 0x0804, 0x992c, 0x080c,
-+      0xad47, 0x2011, 0x1136, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c,
-+      0xbfdb, 0x000e, 0x1904, 0x992c, 0xc0b5, 0x2012, 0x2001, 0x0006,
-+      0x080c, 0x5568, 0x9006, 0x080c, 0x5556, 0x00c6, 0x2001, 0x110e,
-+      0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071,
-+      0x1100, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x7076, 0x7010, 0x78ea,
-+      0x707a, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe,
-+      0x080c, 0x1f8d, 0x00f6, 0x2100, 0x900e, 0x080c, 0x1f63, 0x7956,
-+      0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009,
-+      0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c,
-+      0xc0b5, 0x780e, 0x00fe, 0x080c, 0x1f8d, 0x00f6, 0x2079, 0x1100,
-+      0x797a, 0x2100, 0x900e, 0x080c, 0x1f63, 0x7956, 0x00fe, 0x8108,
-+      0x080c, 0x55b3, 0x2c00, 0x00ce, 0x1904, 0x992c, 0x6012, 0x2009,
-+      0x110e, 0x210c, 0xd19c, 0x0168, 0x2009, 0x027c, 0x9080, 0x0004,
-+      0x210c, 0x918c, 0x00ff, 0x2102, 0x2009, 0x027d, 0x210c, 0x8000,
-+      0x2102, 0x2001, 0x0002, 0x080c, 0x5568, 0x6023, 0x0001, 0x6003,
-+      0x0001, 0x6007, 0x0002, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0008,
-+      0x0011, 0x00de, 0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x5568,
-+      0x2001, 0x1100, 0x2004, 0x9086, 0x0003, 0x1120, 0x2001, 0x0007,
-+      0x080c, 0x5592, 0x080c, 0x2886, 0x6020, 0x9086, 0x000a, 0x1108,
-+      0x0005, 0x080c, 0x8ed9, 0x0005, 0x00e6, 0x0026, 0x0016, 0x2071,
-+      0x1100, 0x7088, 0x9086, 0x0014, 0x1904, 0x9a87, 0x7000, 0x9086,
-+      0x0003, 0x1178, 0x6014, 0x9005, 0x1160, 0x0036, 0x0046, 0x6010,
-+      0x9080, 0x0028, 0x201c, 0x2021, 0x0006, 0x080c, 0x4026, 0x004e,
-+      0x003e, 0x00d6, 0x6010, 0x2068, 0x080c, 0x56a8, 0x080c, 0x98e6,
-+      0x00de, 0x080c, 0x9cc9, 0x1598, 0x6010, 0x00d6, 0x2068, 0x6890,
-+      0x00de, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x5568, 0x00e6,
-+      0x6014, 0x9075, 0x01d0, 0x7064, 0x9084, 0x00ff, 0x9086, 0x0039,
-+      0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xaec0,
-+      0x0060, 0x7064, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0x7007,
-+      0x0000, 0x7067, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, 0x2886,
-+      0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0x8ed9, 0x0020, 0x080c,
-+      0x97dc, 0x080c, 0x9a13, 0x001e, 0x002e, 0x00ee, 0x0005, 0x2011,
-+      0x1122, 0x2204, 0x9086, 0x0014, 0x1168, 0x2001, 0x0002, 0x080c,
-+      0x5568, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x75be, 0x080c,
-+      0x7aa4, 0x0010, 0x080c, 0x9a13, 0x0005, 0x2011, 0x1122, 0x2204,
-+      0x9086, 0x0004, 0x1138, 0x2001, 0x0007, 0x080c, 0x5568, 0x080c,
-+      0x8ed9, 0x0010, 0x080c, 0x9a13, 0x0005, 0x000b, 0x0005, 0x98b0,
-+      0x9ace, 0x98b0, 0x9b03, 0x98b0, 0x9bb0, 0x9ac3, 0x98b0, 0x98b0,
-+      0x9bc5, 0x98b0, 0x9bd7, 0x6604, 0x9686, 0x0003, 0x0904, 0x9a2c,
-+      0x96b6, 0x001e, 0x1110, 0x080c, 0x8ed9, 0x0005, 0x00d6, 0x00c6,
-+      0x080c, 0x9be9, 0x1180, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002,
-+      0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x75be,
-+      0x080c, 0x7aa4, 0x00e8, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009,
-+      0x1160, 0x6010, 0x2068, 0x6840, 0x9084, 0x00ff, 0x9005, 0x0170,
-+      0x8001, 0x6842, 0x601b, 0x000a, 0x0058, 0x2009, 0x026f, 0x2104,
-+      0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08c0, 0x080c, 0x9a13,
-+      0x00ce, 0x00de, 0x0005, 0x0026, 0x9016, 0x080c, 0x9bf7, 0x00d6,
-+      0x2069, 0x12a7, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2068, 0x68a0,
-+      0x9086, 0x007e, 0x1138, 0x2069, 0x111e, 0x2d04, 0x8000, 0x206a,
-+      0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x5556, 0x2001,
-+      0x0002, 0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
-+      0x75be, 0x080c, 0x7aa4, 0x0804, 0x9b7e, 0x080c, 0xa942, 0x01b0,
-+      0x6014, 0x9080, 0x0019, 0x2004, 0x2010, 0x9086, 0x0139, 0x1128,
-+      0x2001, 0x0002, 0x080c, 0xaf0f, 0x00c8, 0x6014, 0x9080, 0x001a,
-+      0x2004, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca0, 0x2001, 0x110d,
-+      0x2004, 0xd0dc, 0x0158, 0x6010, 0x00d6, 0x2068, 0x6840, 0x00de,
-+      0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c20, 0x080c, 0x97dc,
-+      0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0500,
-+      0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00,
-+      0x1118, 0x9686, 0x0009, 0x01a0, 0x9086, 0x1900, 0x1168, 0x9686,
-+      0x0009, 0x0170, 0x2001, 0x0004, 0x080c, 0x5568, 0x2001, 0x0028,
-+      0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0x9a13, 0x002e, 0x0005,
-+      0x00d6, 0x9286, 0x0139, 0x0160, 0x6014, 0x2068, 0x080c, 0xa942,
-+      0x0148, 0x6864, 0x9086, 0x0139, 0x0118, 0x6868, 0xd0fc, 0x0110,
-+      0x00de, 0x0c50, 0x6010, 0x2068, 0x6840, 0x9084, 0x00ff, 0x9005,
-+      0x0140, 0x8001, 0x6842, 0x601b, 0x000a, 0x6007, 0x0016, 0x00de,
-+      0x08e8, 0x68a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1100,
-+      0x080c, 0x5092, 0x00ee, 0x0010, 0x080c, 0x2862, 0x00de, 0x0860,
-+      0x080c, 0x9bf7, 0x1168, 0x2001, 0x0004, 0x080c, 0x5568, 0x6003,
-+      0x0001, 0x6007, 0x0003, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0020,
-+      0x080c, 0x97dc, 0x080c, 0x9a13, 0x0005, 0x0489, 0x1168, 0x2001,
-+      0x0008, 0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c,
-+      0x75be, 0x080c, 0x7aa4, 0x0010, 0x080c, 0x9a13, 0x0005, 0x00f9,
-+      0x1168, 0x2001, 0x000a, 0x080c, 0x5568, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0010, 0x080c, 0x9a13,
-+      0x0005, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009,
-+      0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085,
-+      0x0001, 0x0005, 0x00c6, 0x0016, 0x9c88, 0x0004, 0x2164, 0x080c,
-+      0x5617, 0x001e, 0x00ce, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x0036,
-+      0x0016, 0x6010, 0x2068, 0x2009, 0x1136, 0x2104, 0x9085, 0x0003,
-+      0x200a, 0x080c, 0x9c9e, 0x0560, 0x2009, 0x1136, 0x2104, 0xc0cd,
-+      0x200a, 0x080c, 0x58cb, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,
-+      0x080c, 0xc12f, 0x2001, 0x110c, 0x200c, 0xc195, 0x2102, 0x2019,
-+      0x002a, 0x2009, 0x0001, 0x080c, 0x2831, 0x00e6, 0x2071, 0x1100,
-+      0x080c, 0x2679, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0081, 0x2009,
-+      0x007f, 0x080c, 0x2955, 0x8108, 0x1f04, 0x9c39, 0x015e, 0x00ce,
-+      0x080c, 0x9bfa, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0x0260,
-+      0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1136, 0x200c, 0xc1c5,
-+      0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108,
-+      0xc1c4, 0x7817, 0x0000, 0x2001, 0x1136, 0x2102, 0x2079, 0x0100,
-+      0x2e04, 0x9084, 0x00ff, 0x2069, 0x111d, 0x206a, 0x78e6, 0x0006,
-+      0x8e70, 0x2e04, 0x2069, 0x111e, 0x206a, 0x78ea, 0x7832, 0x7836,
-+      0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, 0x112a, 0x200a,
-+      0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x1f8d, 0x080c, 0x62e4,
-+      0x0170, 0x2071, 0x0260, 0x2069, 0x12bc, 0x7048, 0x206a, 0x704c,
-+      0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, 0xad0a, 0x0040,
-+      0x2001, 0x0006, 0x080c, 0x5568, 0x080c, 0x2886, 0x080c, 0x8ed9,
-+      0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0026, 0x0036,
-+      0x00e6, 0x0156, 0x2019, 0x112a, 0x231c, 0x83ff, 0x01e8, 0x2071,
-+      0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205,
-+      0x9306, 0x1190, 0x2011, 0x0276, 0x20a9, 0x0004, 0x9d98, 0x000a,
-+      0x080c, 0x9d60, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x9d98,
-+      0x0006, 0x080c, 0x9d60, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
-+      0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8,
-+      0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084,
-+      0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac,
-+      0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-+      0x00d6, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,
-+      0x2091, 0x8000, 0x2029, 0x130d, 0x252c, 0x2021, 0x1313, 0x2424,
-+      0x2061, 0x15c0, 0x2071, 0x1100, 0x724c, 0x706c, 0x9202, 0x1a04,
-+      0x9d4c, 0x080c, 0xc15b, 0x0904, 0x9d45, 0x6720, 0x9786, 0x0001,
-+      0x05e0, 0x9786, 0x0007, 0x05c8, 0x2500, 0x9c06, 0x05b0, 0x2400,
-+      0x9c06, 0x0598, 0x3e08, 0x9186, 0x0002, 0x1140, 0x6010, 0x9005,
-+      0x0128, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x1538, 0x00c6, 0x6000,
-+      0x9086, 0x0004, 0x1110, 0x080c, 0x1509, 0x9786, 0x0008, 0x1148,
-+      0x080c, 0xab2e, 0x1130, 0x00ce, 0x080c, 0x97dc, 0x080c, 0x8f09,
-+      0x00a0, 0x6014, 0x2068, 0x080c, 0xa942, 0x0160, 0x9786, 0x0003,
-+      0x11e8, 0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c, 0x5b76,
-+      0x080c, 0xab11, 0x080c, 0x8f09, 0x00ce, 0x9ce0, 0x0018, 0x7060,
-+      0x9c02, 0x1210, 0x0804, 0x9cfc, 0x012e, 0x000e, 0x002e, 0x004e,
-+      0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x9786, 0x0006,
-+      0x1118, 0x080c, 0xc0e9, 0x0c30, 0x9786, 0x000a, 0x09e0, 0x08c8,
-+      0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0x9d60,
-+      0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008,
-+      0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906,
-+      0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300,
-+      0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140,
-+      0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005,
-+      0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000,
-+      0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004, 0x908a,
-+      0x0053, 0x1a0c, 0x0d7e, 0x080c, 0xab1d, 0x0120, 0x080c, 0xab2e,
-+      0x0168, 0x0028, 0x080c, 0x2886, 0x080c, 0xab2e, 0x0138, 0x080c,
-+      0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x080c, 0x97dc,
-+      0x0cb0, 0x9182, 0x0040, 0x0002, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf,
-+      0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dd1,
-+      0x9dd1, 0x9dd1, 0x9dd1, 0x9dcf, 0x9dcf, 0x9dcf, 0x9dd1, 0x080c,
-+      0x0d7e, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x756e,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e, 0x0005, 0x9186,
-+      0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0x9e6c, 0x9186,
-+      0x0027, 0x11e8, 0x080c, 0x79ab, 0x080c, 0x2862, 0x00d6, 0x6114,
-+      0x2168, 0x080c, 0xa942, 0x0168, 0x6867, 0x0103, 0x687b, 0x0029,
-+      0x6877, 0x0000, 0x697c, 0xc1c5, 0x697e, 0x080c, 0x5b76, 0x080c,
-+      0xab11, 0x00de, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x9186,
-+      0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x0430, 0x9186, 0x0046,
-+      0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186,
-+      0x0048, 0x190c, 0x0d7e, 0x2001, 0x0109, 0x2004, 0xd084, 0x0198,
-+      0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x745c,
-+      0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002,
-+      0x1110, 0x0804, 0x9eaf, 0x0005, 0x0002, 0x9e4a, 0x9e48, 0x9e48,
-+      0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48, 0x9e48,
-+      0x9e65, 0x9e65, 0x9e65, 0x9e65, 0x9e48, 0x9e65, 0x9e48, 0x9e65,
-+      0x080c, 0x0d7e, 0x080c, 0x79ab, 0x00d6, 0x6114, 0x2168, 0x080c,
-+      0xa942, 0x0168, 0x6867, 0x0103, 0x687b, 0x0006, 0x6877, 0x0000,
-+      0x6880, 0xc0ec, 0x6882, 0x080c, 0x5b76, 0x080c, 0xab11, 0x00de,
-+      0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x080c, 0x79ab, 0x080c,
-+      0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x0002, 0x9e82, 0x9e80, 0x9e80,
-+      0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e80,
-+      0x9e99, 0x9e99, 0x9e99, 0x9e99, 0x9e80, 0x9ea8, 0x9e80, 0x9e99,
-+      0x080c, 0x0d7e, 0x00d6, 0x080c, 0x79ab, 0x6014, 0x2068, 0x2001,
-+      0x12c2, 0x2004, 0x6042, 0x697c, 0xd1ac, 0x0140, 0x6003, 0x0004,
-+      0x687c, 0x9085, 0x0400, 0x687e, 0x00de, 0x0005, 0x6003, 0x0002,
-+      0x0cb8, 0x080c, 0x79ab, 0x2001, 0x12c0, 0x2004, 0x601a, 0x2001,
-+      0x12c2, 0x2004, 0x6042, 0x6003, 0x000f, 0x080c, 0x7aa4, 0x0005,
-+      0x080c, 0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x9182,
-+      0x0040, 0x0002, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec8,
-+      0x9fa9, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6,
-+      0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9ec6, 0x9fd8, 0x080c, 0x0d7e,
-+      0x00d6, 0x6114, 0x2168, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1518,
-+      0x6010, 0x2004, 0xd0bc, 0x1904, 0x9f94, 0x687b, 0x0000, 0x6867,
-+      0x0103, 0x6e76, 0x687c, 0xd0ac, 0x0128, 0x6834, 0x6938, 0x9115,
-+      0x190c, 0xa12c, 0x080c, 0x599a, 0x6210, 0x2268, 0x6a3c, 0x82ff,
-+      0x0110, 0x8211, 0x6a3e, 0x7044, 0xd0e4, 0x1904, 0x9f74, 0x080c,
-+      0x8ed9, 0x00de, 0x0005, 0x968c, 0x0c00, 0x0148, 0x6010, 0x2004,
-+      0xd0bc, 0x1904, 0x9f78, 0x7348, 0x6b92, 0x734c, 0x6b8e, 0x968c,
-+      0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0x687b,
-+      0x001c, 0x00e8, 0xd6dc, 0x01a0, 0x687b, 0x0015, 0x687c, 0xd0ac,
-+      0x0170, 0x6938, 0x6a34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106,
-+      0x1118, 0x704c, 0x9206, 0x0118, 0x6992, 0x6a8e, 0xc6dc, 0x0038,
-+      0xd6d4, 0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x6867,
-+      0x0103, 0x6e76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130,
-+      0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0x9ece, 0x735c, 0x6b86,
-+      0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
-+      0x2308, 0x2019, 0x0018, 0x9d90, 0x0025, 0x080c, 0xa5c9, 0x003e,
-+      0xd6cc, 0x0904, 0x9ee2, 0x7154, 0x698a, 0x81ff, 0x0904, 0x9ee2,
-+      0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x9d90, 0x0029,
-+      0x080c, 0xa5c9, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xaf7b,
-+      0x0804, 0x9ee2, 0x6868, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x698a,
-+      0x0c50, 0x00f6, 0x2d78, 0x080c, 0xa568, 0x00fe, 0x080c, 0xaf7b,
-+      0x080c, 0xa5b9, 0x0804, 0x9ee4, 0x080c, 0xac0b, 0x0804, 0x9ef1,
-+      0x687c, 0xd0ac, 0x0904, 0x9efb, 0x6024, 0xd0dc, 0x1904, 0x9efb,
-+      0x6880, 0xd0bc, 0x1904, 0x9efb, 0x7348, 0x6838, 0x9306, 0x11e8,
-+      0x734c, 0x6834, 0x931e, 0x0904, 0x9efb, 0xd6d4, 0x01b0, 0x6b38,
-+      0x9305, 0x0904, 0x9efb, 0x0088, 0x687c, 0xd0ac, 0x0904, 0x9ed5,
-+      0x6838, 0x6934, 0x9105, 0x0904, 0x9ed5, 0x6024, 0xd0dc, 0x1904,
-+      0x9ed5, 0x6880, 0xd0bc, 0x1904, 0x9ed5, 0x080c, 0xac39, 0x0804,
-+      0x9ef1, 0x00f6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00,
-+      0x7e0c, 0x7d08, 0x6014, 0x2078, 0x787c, 0xd0ac, 0x0138, 0x6003,
-+      0x0002, 0x00fe, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0x79ac,
-+      0x910a, 0x2300, 0x7ab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203,
-+      0x0e90, 0x7c36, 0x7b3a, 0x7e46, 0x7d4a, 0x00fe, 0x6043, 0x0000,
-+      0x2c10, 0x080c, 0x1605, 0x080c, 0x75db, 0x080c, 0x7b72, 0x0005,
-+      0x0005, 0x9182, 0x0040, 0x0002, 0x9fef, 0x9fef, 0x9fef, 0x9fef,
-+      0x9fef, 0x9ff1, 0xa085, 0x9fef, 0x9fef, 0xa09b, 0xa103, 0x9fef,
-+      0x9fef, 0x9fef, 0x9fef, 0xa112, 0x9fef, 0x9fef, 0x9fef, 0x080c,
-+      0x0d7e, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071, 0x0260, 0x6114,
-+      0x2178, 0x7644, 0x7e76, 0x96b4, 0x0fff, 0x7f7c, 0xc7e5, 0x7f7e,
-+      0x6210, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, 0x6a3e, 0x86ff,
-+      0x0904, 0xa080, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
-+      0x7892, 0x704c, 0x788e, 0x9284, 0x0300, 0x0904, 0xa080, 0x080c,
-+      0x0eb6, 0x090c, 0x0d7e, 0x2d00, 0x787a, 0x7f7c, 0xc7cd, 0x7f7e,
-+      0x6867, 0x0103, 0x7868, 0x686a, 0x786c, 0x686e, 0x7870, 0x6872,
-+      0x6e76, 0x968c, 0x0c00, 0x0120, 0x7348, 0x6b92, 0x734c, 0x6b8e,
-+      0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
-+      0x687b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0x687b, 0x0015, 0x0038,
-+      0xd6d4, 0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x6f7e,
-+      0x7880, 0x6882, 0x7884, 0x6886, 0x901e, 0xd6c4, 0x0190, 0x735c,
-+      0x6b86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
-+      0x0036, 0x2308, 0x2019, 0x0018, 0x9d90, 0x0025, 0x080c, 0xa5c9,
-+      0x003e, 0xd6cc, 0x01e8, 0x7154, 0x698a, 0x81ff, 0x01c8, 0x9192,
-+      0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x9d90, 0x0029, 0x080c,
-+      0xa5c9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0x7868, 0xd0fc,
-+      0x0120, 0x2009, 0x0020, 0x698a, 0x0c68, 0x2d78, 0x080c, 0xa568,
-+      0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x00f6, 0x6003, 0x0003,
-+      0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2078,
-+      0x7c36, 0x7b3a, 0x7e46, 0x7d4a, 0x00fe, 0x2c10, 0x080c, 0x1605,
-+      0x080c, 0x856f, 0x0005, 0x00d6, 0x2001, 0x12c2, 0x2004, 0x6042,
-+      0x6003, 0x0002, 0x080c, 0x7a55, 0x080c, 0x7b72, 0x6114, 0x2168,
-+      0x697c, 0xd1e4, 0x0904, 0xa0fe, 0xd1cc, 0x0570, 0x6978, 0x6868,
-+      0xd0fc, 0x0500, 0x0016, 0x687c, 0x0006, 0x6880, 0x0006, 0x9d90,
-+      0x0019, 0x9198, 0x0019, 0x2009, 0x0020, 0x0156, 0x21a8, 0x2304,
-+      0x2012, 0x8318, 0x8210, 0x1f04, 0xa0bf, 0x015e, 0x000e, 0x6882,
-+      0x000e, 0x687e, 0x001e, 0x6874, 0x0006, 0x2168, 0x080c, 0x0edf,
-+      0x001e, 0x0440, 0x0016, 0x080c, 0x0edf, 0x00de, 0x6974, 0x0016,
-+      0x080c, 0xa5b9, 0x001e, 0x00f0, 0x6867, 0x0103, 0x6974, 0x9184,
-+      0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0x687b,
-+      0x001c, 0x0060, 0xd1dc, 0x0118, 0x687b, 0x0015, 0x0038, 0xd1d4,
-+      0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x0016, 0x080c,
-+      0x599a, 0x001e, 0xd1e4, 0x1120, 0x080c, 0x8ed9, 0x00de, 0x0005,
-+      0x080c, 0xac0b, 0x0cd8, 0x2019, 0x0001, 0x080c, 0x8847, 0x6003,
-+      0x0002, 0x2001, 0x12c2, 0x2004, 0x6042, 0x080c, 0x7a55, 0x080c,
-+      0x7b72, 0x0005, 0x080c, 0x7a55, 0x080c, 0x2862, 0x00d6, 0x6114,
-+      0x2168, 0x080c, 0xa942, 0x0150, 0x6867, 0x0103, 0x687b, 0x0029,
-+      0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11, 0x00de, 0x080c,
-+      0x8ed9, 0x080c, 0x7b72, 0x0005, 0x687b, 0x0015, 0xd1fc, 0x0138,
-+      0x687b, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x6992,
-+      0x688e, 0x0005, 0x9182, 0x0040, 0x0002, 0xa151, 0xa151, 0xa151,
-+      0xa151, 0xa151, 0xa153, 0xa151, 0xa151, 0xa1f7, 0xa151, 0xa151,
-+      0xa151, 0xa151, 0xa151, 0xa151, 0xa151, 0xa151, 0xa151, 0xa151,
-+      0xa31d, 0x080c, 0x0d7e, 0x0076, 0x00f6, 0x00e6, 0x00d6, 0x2071,
-+      0x0260, 0x6114, 0x2178, 0x7644, 0x7e76, 0x96b4, 0x0fff, 0x7f7c,
-+      0xc7e5, 0x7f7e, 0x6210, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211,
-+      0x6a3e, 0x86ff, 0x0904, 0xa1f0, 0x9694, 0xff00, 0x9284, 0x0c00,
-+      0x0120, 0x7048, 0x7892, 0x704c, 0x788e, 0x9284, 0x0300, 0x0904,
-+      0xa1f0, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,
-+      0x7e76, 0x0c38, 0x080c, 0x0eb6, 0x090c, 0x0d7e, 0x2d00, 0x787a,
-+      0x7f7c, 0x97bd, 0x0200, 0x7f7e, 0x6867, 0x0103, 0x7868, 0x686a,
-+      0x786c, 0x686e, 0x7870, 0x6872, 0x7044, 0x9084, 0xf000, 0x9635,
-+      0x6e76, 0x968c, 0x0c00, 0x0120, 0x7348, 0x6b92, 0x734c, 0x6b8e,
-+      0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
-+      0x687b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0x687b, 0x0015, 0x0038,
-+      0xd6d4, 0x0118, 0x687b, 0x0007, 0x0010, 0x687b, 0x0000, 0x6f7e,
-+      0x7880, 0x6882, 0x7884, 0x6886, 0x901e, 0xd6c4, 0x0190, 0x735c,
-+      0x6b86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
-+      0x0036, 0x2308, 0x2019, 0x0018, 0x9d90, 0x0025, 0x080c, 0xa5c9,
-+      0x003e, 0xd6cc, 0x01e8, 0x7154, 0x698a, 0x81ff, 0x01c8, 0x9192,
-+      0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x9d90, 0x0029, 0x080c,
-+      0xa5c9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0x7868, 0xd0fc,
-+      0x0120, 0x2009, 0x0020, 0x698a, 0x0c68, 0x2d78, 0x080c, 0xa568,
-+      0x080c, 0x14d3, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x2001,
-+      0x12c2, 0x2004, 0x6042, 0x00d6, 0x6114, 0x2168, 0x683c, 0x6940,
-+      0x9105, 0x1118, 0x687c, 0xc0dc, 0x687e, 0x6003, 0x0002, 0x697c,
-+      0xd1e4, 0x0904, 0xa318, 0x6043, 0x0000, 0x6010, 0x2004, 0xd0bc,
-+      0x11f8, 0xd1cc, 0x0904, 0xa2e7, 0x6978, 0x6868, 0xd0fc, 0x0904,
-+      0xa2a8, 0x0016, 0x687c, 0x0006, 0x6880, 0x0006, 0x00f6, 0x2178,
-+      0x7974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xa27b, 0x9086,
-+      0x0028, 0x15e8, 0x687b, 0x001c, 0x787b, 0x001c, 0x0804, 0xa283,
-+      0x6024, 0xd0f4, 0x11d0, 0x6838, 0x6a34, 0x9205, 0x09d0, 0x6838,
-+      0x6a90, 0x9206, 0x1120, 0x688c, 0x6a34, 0x9206, 0x0990, 0x6024,
-+      0xd0d4, 0x1148, 0x69ac, 0x6834, 0x9102, 0x603a, 0x69b0, 0x6838,
-+      0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00d6, 0x2068,
-+      0x683c, 0x8000, 0x683e, 0x00de, 0x9006, 0x6876, 0x6892, 0x688e,
-+      0x687c, 0xc0e4, 0x687e, 0xd0cc, 0x0130, 0x00d6, 0x6878, 0x2068,
-+      0x080c, 0x0edf, 0x00de, 0x080c, 0xac39, 0x0804, 0xa318, 0xd1dc,
-+      0x0158, 0x687b, 0x0015, 0x787b, 0x0015, 0x080c, 0xaea9, 0x0118,
-+      0x7974, 0xc1dc, 0x7976, 0x0078, 0xd1d4, 0x0128, 0x687b, 0x0007,
-+      0x787b, 0x0007, 0x0040, 0x687c, 0xd0ac, 0x0128, 0x6834, 0x6938,
-+      0x9115, 0x190c, 0xa12c, 0x687c, 0x787e, 0x6890, 0x7892, 0x688c,
-+      0x788e, 0x9d90, 0x0019, 0x9f98, 0x0019, 0x2009, 0x0020, 0x0156,
-+      0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0xa291, 0x015e,
-+      0x00fe, 0x000e, 0x6882, 0x000e, 0x687e, 0x080c, 0xaf7b, 0x001e,
-+      0x6874, 0x0006, 0x2168, 0x080c, 0x0edf, 0x001e, 0x0804, 0xa314,
-+      0x0016, 0x00f6, 0x2178, 0x7974, 0x9184, 0x00ff, 0x90b6, 0x0002,
-+      0x01e0, 0x9086, 0x0028, 0x1128, 0x687b, 0x001c, 0x787b, 0x001c,
-+      0x00e0, 0xd1dc, 0x0158, 0x687b, 0x0015, 0x787b, 0x0015, 0x080c,
-+      0xaea9, 0x0118, 0x7974, 0xc1dc, 0x7976, 0x0078, 0xd1d4, 0x0128,
-+      0x687b, 0x0007, 0x787b, 0x0007, 0x0040, 0x687c, 0xd0ac, 0x0128,
-+      0x6834, 0x6938, 0x9115, 0x190c, 0xa12c, 0x6890, 0x7892, 0x688c,
-+      0x788e, 0x687c, 0x787e, 0x00fe, 0x080c, 0x0edf, 0x00de, 0x080c,
-+      0xaf7b, 0x6974, 0x0016, 0x080c, 0xa5b9, 0x001e, 0x0468, 0x6867,
-+      0x0103, 0x6974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086,
-+      0x0028, 0x1118, 0x687b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0x687b,
-+      0x0015, 0x080c, 0xaea9, 0x0118, 0x6974, 0xc1dc, 0x6976, 0x0078,
-+      0xd1d4, 0x0118, 0x687b, 0x0007, 0x0050, 0x687b, 0x0000, 0x687c,
-+      0xd0ac, 0x0128, 0x6834, 0x6938, 0x9115, 0x190c, 0xa12c, 0x6974,
-+      0x0016, 0x080c, 0x599a, 0x001e, 0xd1e4, 0x1120, 0x080c, 0x8ed9,
-+      0x00de, 0x0005, 0x080c, 0xac0b, 0x0cd8, 0x0005, 0x080c, 0x79ab,
-+      0x0010, 0x080c, 0x7a55, 0x080c, 0xa942, 0x01c0, 0x00d6, 0x6114,
-+      0x2168, 0x6867, 0x0103, 0x2009, 0x110c, 0x210c, 0xd18c, 0x11c0,
-+      0xd184, 0x1198, 0x6108, 0x697a, 0x918e, 0x0029, 0x1110, 0x080c,
-+      0xc3c7, 0x6877, 0x0000, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8ed9,
-+      0x080c, 0x7aa4, 0x080c, 0x7b72, 0x0005, 0x687b, 0x0004, 0x0c88,
-+      0x687b, 0x0004, 0x0c70, 0x9182, 0x0040, 0x0002, 0xa361, 0xa361,
-+      0xa361, 0xa361, 0xa361, 0xa363, 0xa361, 0xa366, 0xa361, 0xa361,
-+      0xa361, 0xa361, 0xa361, 0xa361, 0xa361, 0xa361, 0xa361, 0xa361,
-+      0xa361, 0x080c, 0x0d7e, 0x080c, 0x8ed9, 0x0005, 0x0006, 0x0026,
-+      0x9016, 0x080c, 0x137c, 0x002e, 0x000e, 0x0005, 0x9182, 0x0085,
-+      0x0002, 0xa380, 0xa37e, 0xa37e, 0xa38c, 0xa37e, 0xa37e, 0xa37e,
-+      0xa37e, 0xa37e, 0xa37e, 0xa37e, 0xa37e, 0xa37e, 0x080c, 0x0d7e,
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x0126, 0x2091, 0x8000,
-+      0x080c, 0x7aa4, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,
-+      0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xa932, 0x01a0,
-+      0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e,
-+      0x1158, 0x00c6, 0x2d60, 0x080c, 0xa5e6, 0x00ce, 0x0128, 0x6803,
-+      0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,
-+      0x080c, 0x756e, 0x080c, 0x7aa4, 0x9280, 0x0004, 0x2004, 0xd0bc,
-+      0x0150, 0x6824, 0xd0ec, 0x0138, 0x00c6, 0x2260, 0x6043, 0x0000,
-+      0x080c, 0xac39, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005,
-+      0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7e,
-+      0x908a, 0x0092, 0x1a0c, 0x0d7e, 0x9082, 0x0085, 0x0072, 0x9186,
-+      0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7e, 0x080c, 0x79ab,
-+      0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0xa3f2, 0xa3f4, 0xa3f4,
-+      0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2, 0xa3f2,
-+      0xa3f2, 0xa3f2, 0x080c, 0x0d7e, 0x080c, 0x79ab, 0x080c, 0x8f09,
-+      0x080c, 0x7aa4, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,
-+      0x0085, 0x2008, 0x04a8, 0x9186, 0x0027, 0x11e8, 0x080c, 0x79ab,
-+      0x080c, 0x2862, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0150,
-+      0x6867, 0x0103, 0x6877, 0x0000, 0x687b, 0x0029, 0x080c, 0x5b76,
-+      0x080c, 0xab11, 0x00de, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005,
-+      0x080c, 0x8f6e, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x79ab,
-+      0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0d60, 0x6867, 0x0103,
-+      0x6877, 0x0000, 0x687b, 0x0006, 0x6880, 0xc0ec, 0x6882, 0x08f0,
-+      0x0002, 0xa448, 0xa446, 0xa446, 0xa446, 0xa446, 0xa446, 0xa460,
-+      0xa446, 0xa446, 0xa446, 0xa446, 0xa446, 0xa446, 0x080c, 0x0d7e,
-+      0x080c, 0x79ab, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-+      0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x12c0, 0x0010, 0x2001,
-+      0x12c1, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x7aa4, 0x0005,
-+      0x080c, 0x79ab, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-+      0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x12c0, 0x0010, 0x2001,
-+      0x12c1, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x7aa4, 0x0005,
-+      0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c,
-+      0x8f6e, 0x0005, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa491, 0xa4ea,
-+      0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0xa48f, 0x080c,
-+      0x0d7e, 0x00d6, 0x6010, 0x2004, 0xd0bc, 0x0168, 0x6034, 0x908c,
-+      0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
-+      0x00de, 0x0804, 0xa4fb, 0x080c, 0xa942, 0x1118, 0x080c, 0xab11,
-+      0x00f0, 0x6014, 0x2068, 0x687c, 0xd0e4, 0x1110, 0x080c, 0xab11,
-+      0x6867, 0x0103, 0x6880, 0xd0b4, 0x0128, 0x687b, 0x0006, 0xc0ec,
-+      0x6882, 0x0048, 0xd0bc, 0x0118, 0x687b, 0x0002, 0x0020, 0x687b,
-+      0x0005, 0x080c, 0xac07, 0x6877, 0x0000, 0x080c, 0x5b76, 0x2c68,
-+      0x080c, 0x8e83, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b,
-+      0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,
-+      0x613e, 0x6910, 0x6112, 0x080c, 0xad70, 0x6954, 0x6156, 0x6023,
-+      0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2d60, 0x080c, 0x8ed9,
-+      0x00de, 0x0005, 0x6010, 0x2004, 0xd0bc, 0x0598, 0x6034, 0x908c,
-+      0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118,
-+      0x9186, 0x0039, 0x1530, 0x00d6, 0x2c68, 0x080c, 0xaf4e, 0x1904,
-+      0xa540, 0x080c, 0x8e83, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023,
-+      0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934,
-+      0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954,
-+      0x6156, 0x080c, 0xad70, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2d60,
-+      0x00f8, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x01c8, 0x6867,
-+      0x0103, 0x6880, 0xd0b4, 0x0128, 0xc0ec, 0x6882, 0x687b, 0x0006,
-+      0x0048, 0xd0bc, 0x0118, 0x687b, 0x0002, 0x0020, 0x687b, 0x0005,
-+      0x080c, 0xac07, 0x6877, 0x0000, 0x080c, 0x5b76, 0x080c, 0xab11,
-+      0x00de, 0x080c, 0x8ed9, 0x0005, 0x0016, 0x00d6, 0x6014, 0x2068,
-+      0x080c, 0xa942, 0x0140, 0x6867, 0x0103, 0x687b, 0x0028, 0x6877,
-+      0x0000, 0x080c, 0x5b76, 0x00de, 0x001e, 0x9186, 0x0013, 0x0148,
-+      0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x8f6e,
-+      0x0030, 0x080c, 0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005,
-+      0x0056, 0x0066, 0x00d6, 0x00f6, 0x2029, 0x0001, 0x9182, 0x0101,
-+      0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018,
-+      0x2009, 0x0020, 0x9f90, 0x0029, 0x080c, 0xa5c9, 0x96b2, 0x0020,
-+      0x7804, 0x906d, 0x0110, 0x080c, 0x0edf, 0x080c, 0x0eb6, 0x0520,
-+      0x8528, 0x6867, 0x0110, 0x686b, 0x0000, 0x2d20, 0x7c06, 0x968a,
-+      0x003d, 0x1228, 0x2608, 0x9d90, 0x001b, 0x0499, 0x00a8, 0x96b2,
-+      0x003c, 0x2009, 0x003c, 0x2d78, 0x9d90, 0x001b, 0x0451, 0x0c28,
-+      0x2079, 0x0200, 0x7817, 0x0000, 0x00fe, 0x852f, 0x95ad, 0x0003,
-+      0x7d66, 0x95ac, 0x0000, 0x0048, 0x2079, 0x0200, 0x7817, 0x0000,
-+      0x00fe, 0x852f, 0x95ad, 0x0003, 0x7d66, 0x00de, 0x006e, 0x005e,
-+      0x0005, 0x00f6, 0x8dff, 0x0158, 0x6804, 0x907d, 0x0130, 0x6807,
-+      0x0000, 0x080c, 0x5b76, 0x2f68, 0x0cb8, 0x080c, 0x5b76, 0x00fe,
-+      0x0005, 0x00f6, 0x0156, 0x2079, 0x0200, 0x9184, 0x0001, 0x0108,
-+      0x8108, 0x810c, 0x21a8, 0x2300, 0x9e00, 0x2004, 0x8007, 0x2012,
-+      0x8318, 0x9386, 0x0020, 0x1120, 0x2018, 0x7814, 0x8000, 0x7816,
-+      0x8210, 0x1f04, 0xa5d3, 0x015e, 0x00fe, 0x0005, 0x0066, 0x0126,
-+      0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083,
-+      0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031,
-+      0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005,
-+      0xa621, 0xa621, 0xa61c, 0xa643, 0xa60f, 0xa61c, 0xa643, 0xa61c,
-+      0xa60f, 0xa60f, 0xa61c, 0xa61c, 0xa61c, 0xa60f, 0xa60f, 0x080c,
-+      0x0d7e, 0x0036, 0x2019, 0x0010, 0x080c, 0xbd23, 0x6023, 0x0006,
-+      0x6003, 0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001,
-+      0x0005, 0x00d6, 0x86ff, 0x11d8, 0x6014, 0x2068, 0x080c, 0xa942,
-+      0x01c0, 0x6864, 0x9086, 0x0139, 0x1128, 0x687b, 0x0005, 0x6883,
-+      0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x5d95, 0x080c,
-+      0xac07, 0x080c, 0x5b76, 0x080c, 0x8f09, 0x9085, 0x0001, 0x00de,
-+      0x0005, 0x9006, 0x0ce0, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e,
-+      0x000b, 0x0005, 0xa65a, 0xa67b, 0xa65c, 0xa69a, 0xa678, 0xa65a,
-+      0xa61c, 0xa621, 0xa621, 0xa61c, 0xa61c, 0xa61c, 0xa61c, 0xa61c,
-+      0xa61c, 0xa61c, 0x080c, 0x0d7e, 0x86ff, 0x11b8, 0x6020, 0x9086,
-+      0x0006, 0x0198, 0x00d6, 0x6014, 0x2068, 0x080c, 0xa942, 0x0110,
-+      0x080c, 0xac07, 0x00de, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-+      0x0002, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x9085, 0x0001, 0x0005,
-+      0x080c, 0x1509, 0x0c08, 0x00e6, 0x2071, 0x1304, 0x7024, 0x9c06,
-+      0x1110, 0x080c, 0x87a2, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006,
-+      0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x8968,
-+      0x009e, 0x008e, 0x0010, 0x080c, 0x86b8, 0x00ee, 0x1928, 0x080c,
-+      0xa61c, 0x0005, 0x0036, 0x00e6, 0x2071, 0x1304, 0x703c, 0x9c06,
-+      0x1138, 0x901e, 0x080c, 0x8847, 0x00ee, 0x003e, 0x0804, 0xa65c,
-+      0x080c, 0x8a8d, 0x00ee, 0x003e, 0x1904, 0xa65c, 0x080c, 0xa61c,
-+      0x0005, 0x00c6, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005,
-+      0xa6ce, 0xa759, 0xa8a3, 0xa6d9, 0x8f09, 0xa6ce, 0xbd15, 0x8ed9,
-+      0xa759, 0xa6c7, 0xa90e, 0xa6c7, 0xa6c7, 0xa6c7, 0xa6c7, 0x080c,
-+      0x0d7e, 0x080c, 0xab2e, 0x1110, 0x080c, 0x97dc, 0x0005, 0x080c,
-+      0x79ab, 0x080c, 0x7aa4, 0x080c, 0x8ed9, 0x0005, 0x601b, 0x0001,
-+      0x0005, 0x080c, 0xa942, 0x0120, 0x6014, 0x9080, 0x0025, 0x2c02,
-+      0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0xa6f7,
-+      0xa6f9, 0xa719, 0xa72b, 0xa738, 0xa6f7, 0xa6ce, 0xa6ce, 0xa6ce,
-+      0xa72b, 0xa72b, 0xa6f7, 0xa6f7, 0xa6f7, 0xa6f7, 0xa735, 0x080c,
-+      0x0d7e, 0x00e6, 0x6014, 0x2070, 0x7080, 0xc0b5, 0x7082, 0x2071,
-+      0x1304, 0x7024, 0x9c06, 0x0190, 0x080c, 0x86b8, 0x6007, 0x0085,
-+      0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x12c1, 0x2004, 0x601a,
-+      0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ee, 0x0005, 0x601b, 0x0001,
-+      0x0cd8, 0x00d6, 0x6014, 0x2068, 0x6880, 0xc0b5, 0x6882, 0x00de,
-+      0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x756e,
-+      0x080c, 0x7aa4, 0x0005, 0x00d6, 0x601b, 0x0001, 0x6014, 0x2068,
-+      0x6880, 0xc0b5, 0x6882, 0x00de, 0x0005, 0x080c, 0x8ed9, 0x0005,
-+      0x6014, 0x9005, 0x01d8, 0x9088, 0x001f, 0x210c, 0xd1e4, 0x01b0,
-+      0x9080, 0x0021, 0x2004, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
-+      0x2001, 0x0037, 0x2c08, 0x080c, 0x130c, 0x6000, 0x9086, 0x0004,
-+      0x1120, 0x2009, 0x0048, 0x080c, 0x8f53, 0x0005, 0x080c, 0x1509,
-+      0x0800, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e, 0x000b, 0x0005,
-+      0xa770, 0xa6d6, 0xa772, 0xa770, 0xa772, 0xa772, 0xa6cf, 0xa770,
-+      0xa6c9, 0xa6c9, 0xa770, 0xa770, 0xa770, 0xa770, 0xa770, 0xa770,
-+      0x080c, 0x0d7e, 0x6010, 0x00d6, 0x2068, 0x6804, 0x9084, 0x00ff,
-+      0x00de, 0x908a, 0x000c, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0xa78b,
-+      0xa849, 0xa78d, 0xa7cb, 0xa78d, 0xa7cb, 0xa78d, 0xa79b, 0xa78b,
-+      0xa7cb, 0xa78b, 0xa7b7, 0x080c, 0x0d7e, 0x6004, 0x908e, 0x0016,
-+      0x05a8, 0x908e, 0x0004, 0x0590, 0x908e, 0x0002, 0x0578, 0x908e,
-+      0x0052, 0x0904, 0xa845, 0x6004, 0x080c, 0xab2e, 0x0904, 0xa862,
-+      0x908e, 0x0021, 0x0904, 0xa866, 0x908e, 0x0022, 0x0904, 0xa862,
-+      0x908e, 0x003d, 0x0904, 0xa866, 0x908e, 0x0039, 0x0904, 0xa86a,
-+      0x908e, 0x0035, 0x0904, 0xa86a, 0x908e, 0x001e, 0x0188, 0x908e,
-+      0x0001, 0x1150, 0x6010, 0x00d6, 0x2068, 0x6804, 0x9084, 0x00ff,
-+      0x00de, 0x9086, 0x0006, 0x0110, 0x080c, 0x2862, 0x080c, 0x97dc,
-+      0x080c, 0x8f09, 0x0005, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016,
-+      0x0904, 0xa836, 0x9186, 0x0002, 0x15b8, 0x2001, 0x1136, 0x2004,
-+      0xd08c, 0x1178, 0x080c, 0x62e4, 0x1160, 0x2001, 0x12a8, 0x2003,
-+      0x0001, 0x2001, 0x1100, 0x2003, 0x0001, 0x080c, 0x621a, 0x0804,
-+      0xa88c, 0x6010, 0x2068, 0x2001, 0x1136, 0x2004, 0xd0ac, 0x1904,
-+      0xa88c, 0x68a0, 0xd0bc, 0x1904, 0xa88c, 0x6840, 0x9084, 0x00ff,
-+      0x9005, 0x0190, 0x8001, 0x6842, 0x6017, 0x0000, 0x6023, 0x0007,
-+      0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x8e83, 0x0128, 0x2d00,
-+      0x6012, 0x6023, 0x0001, 0x0450, 0x00de, 0x00ce, 0x6004, 0x908e,
-+      0x0002, 0x11a8, 0x6010, 0x9080, 0x0028, 0x2004, 0x9086, 0x007e,
-+      0x1170, 0x2009, 0x1136, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071,
-+      0x1100, 0x080c, 0x5092, 0x00ee, 0x080c, 0x97dc, 0x0020, 0x080c,
-+      0x97dc, 0x080c, 0x2862, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c,
-+      0x2886, 0x012e, 0x00ee, 0x080c, 0x8f09, 0x0005, 0x2001, 0x0002,
-+      0x080c, 0x5568, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x75be,
-+      0x080c, 0x7aa4, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x2886, 0x0804,
-+      0xa7c6, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010,
-+      0x2068, 0x6840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xa80c, 0x8001,
-+      0x6842, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x00de,
-+      0x00ce, 0x0898, 0x080c, 0x97dc, 0x0804, 0xa7c8, 0x080c, 0x9809,
-+      0x0804, 0xa7c8, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xaf4e, 0x00de,
-+      0x0118, 0x080c, 0x8ed9, 0x00b8, 0x6004, 0x8007, 0x6134, 0x918c,
-+      0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-+      0x0002, 0x603c, 0x600a, 0x2001, 0x12c1, 0x2004, 0x601a, 0x080c,
-+      0x756e, 0x080c, 0x7aa4, 0x0005, 0x00de, 0x00ce, 0x080c, 0x97dc,
-+      0x080c, 0x2862, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2886,
-+      0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000,
-+      0x012e, 0x00ee, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7e,
-+      0x00d6, 0x0013, 0x00de, 0x0005, 0xa8bc, 0xa8bc, 0xa8bc, 0xa8bc,
-+      0xa8bc, 0xa8bc, 0xa8bc, 0xa8bc, 0xa8bc, 0xa6ce, 0xa8bc, 0xa6d6,
-+      0xa8be, 0xa6d6, 0xa8cb, 0xa8bc, 0x080c, 0x0d7e, 0x6004, 0x9086,
-+      0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x756e,
-+      0x080c, 0x7aa4, 0x0005, 0x080c, 0xab11, 0x080c, 0xa942, 0x0570,
-+      0x080c, 0x2862, 0x080c, 0xa942, 0x0168, 0x6014, 0x2068, 0x6867,
-+      0x0103, 0x687b, 0x0006, 0x6877, 0x0000, 0x6880, 0xc0ed, 0x6882,
-+      0x080c, 0x5b76, 0x2c68, 0x080c, 0x8e83, 0x0150, 0x6810, 0x6012,
-+      0x080c, 0xad70, 0x00c6, 0x2d60, 0x080c, 0x8f09, 0x00ce, 0x0008,
-+      0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003,
-+      0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0078, 0x6034, 0x908c,
-+      0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
-+      0x080c, 0x2862, 0x08b8, 0x080c, 0x8f09, 0x0005, 0x6000, 0x908a,
-+      0x0016, 0x1a0c, 0x0d7e, 0x000b, 0x0005, 0xa925, 0xa925, 0xa927,
-+      0xa927, 0xa927, 0xa925, 0xa925, 0xa925, 0xa925, 0xa925, 0xa925,
-+      0xa925, 0xa925, 0xa925, 0xa925, 0xa925, 0x080c, 0x0d7e, 0x080c,
-+      0x8a8d, 0x6114, 0x2168, 0x687b, 0x0006, 0x080c, 0x5b76, 0x080c,
-+      0x8ed9, 0x0005, 0x9284, 0x0007, 0x1158, 0x9282, 0x15c0, 0x0240,
-+      0x2001, 0x1118, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005,
-+      0x9006, 0x0ce8, 0x0026, 0x6214, 0x9294, 0xf000, 0x002e, 0x0005,
-+      0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061,
-+      0x15c0, 0x2071, 0x1100, 0x734c, 0x706c, 0x9302, 0x12a8, 0x6020,
-+      0x9206, 0x1160, 0x080c, 0xacea, 0x0148, 0x080c, 0xab2e, 0x1110,
-+      0x080c, 0x97dc, 0x00c6, 0x080c, 0x8ed9, 0x00ce, 0x9ce0, 0x0018,
-+      0x7060, 0x9c02, 0x1208, 0x0c38, 0x012e, 0x000e, 0x003e, 0x00ce,
-+      0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c,
-+      0x81ff, 0x0128, 0x2061, 0x1389, 0x6112, 0x080c, 0x2862, 0x9006,
-+      0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
-+      0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83, 0x005e,
-+      0x0180, 0x6616, 0x6512, 0x080c, 0xad70, 0x6023, 0x0003, 0x2009,
-+      0x004b, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x005e, 0x00ce,
-+      0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000,
-+      0x62a0, 0x00c6, 0x080c, 0x8f26, 0x005e, 0x0538, 0x6017, 0x0000,
-+      0x6512, 0x080c, 0xad70, 0x6023, 0x0003, 0x0016, 0x00c6, 0x2560,
-+      0x00ce, 0x080c, 0x76f0, 0x0076, 0x903e, 0x080c, 0x75ee, 0x2c08,
-+      0x080c, 0xbec2, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x8ed9,
-+      0x9085, 0x0001, 0x0030, 0x2009, 0x004c, 0x080c, 0x8f53, 0x9085,
-+      0x0001, 0x012e, 0x005e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00f6,
-+      0x00c6, 0x0046, 0x00c6, 0x080c, 0x8e83, 0x2c78, 0x00ce, 0x0180,
-+      0x7e16, 0x2c00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c,
-+      0xaa35, 0x2f60, 0x2009, 0x004d, 0x080c, 0x8f53, 0x9085, 0x0001,
-+      0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x00c6,
-+      0x080c, 0x8e83, 0x2c78, 0x00ce, 0x0178, 0x7e16, 0x2c00, 0x7812,
-+      0x7823, 0x0003, 0x2021, 0x0005, 0x0481, 0x2f60, 0x2009, 0x004e,
-+      0x080c, 0x8f53, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
-+      0x00f6, 0x00c6, 0x0046, 0x00c6, 0x080c, 0x8e83, 0x2c78, 0x00ce,
-+      0x01c0, 0x7e16, 0x2c00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0004,
-+      0x00a1, 0x2001, 0x12a9, 0x2004, 0xd0fc, 0x0120, 0x2f60, 0x080c,
-+      0x8ed9, 0x0028, 0x2f60, 0x2009, 0x0052, 0x080c, 0x8f53, 0x9085,
-+      0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x0096, 0x0076, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x572a, 0x0158, 0x2001, 0xaa3a, 0x0006,
-+      0x900e, 0x2400, 0x080c, 0x5d95, 0x080c, 0x5b76, 0x000e, 0x0807,
-+      0x2418, 0x080c, 0x7947, 0x62a0, 0x0086, 0x2041, 0x0001, 0x2039,
-+      0x0001, 0x2608, 0x080c, 0x7708, 0x008e, 0x080c, 0x75ee, 0x2f08,
-+      0x2648, 0x080c, 0xbec2, 0x613c, 0x81ff, 0x090c, 0x77c0, 0x080c,
-+      0x7aa4, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091,
-+      0x8000, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0188, 0x660a, 0x6112,
-+      0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009, 0x001f,
-+      0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-+      0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+      0x001e, 0x01b0, 0x660a, 0x6112, 0x080c, 0xad70, 0x6023, 0x0008,
-+      0x2d00, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x137e, 0x00fe, 0x2009,
-+      0x0021, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c,
-+      0x8e83, 0x001e, 0x0188, 0x660a, 0x6112, 0x080c, 0xad70, 0x6023,
-+      0x0001, 0x2d00, 0x6016, 0x2009, 0x003d, 0x080c, 0x8f53, 0x9085,
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126,
-+      0x2091, 0x8000, 0x00c6, 0x080c, 0x8f26, 0x001e, 0x0180, 0x6112,
-+      0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009, 0x0000,
-+      0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-+      0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+      0x001e, 0x0188, 0x660a, 0x6112, 0x080c, 0xad70, 0x6023, 0x0001,
-+      0x2d00, 0x6016, 0x2009, 0x0044, 0x080c, 0x8f53, 0x9085, 0x0001,
-+      0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
-+      0x8000, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0188, 0x660a, 0x6112,
-+      0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009, 0x0049,
-+      0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-+      0x0cd8, 0x0026, 0x00d6, 0x6210, 0x2268, 0x6a3c, 0x82ff, 0x0110,
-+      0x8211, 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004,
-+      0x908e, 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004,
-+      0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x00d6,
-+      0x6014, 0x906d, 0x0148, 0x6864, 0x9086, 0x0139, 0x0138, 0x6868,
-+      0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00de, 0x000e,
-+      0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+      0x001e, 0x0190, 0x6112, 0x080c, 0xad70, 0x6023, 0x0001, 0x2d00,
-+      0x6016, 0x080c, 0x2862, 0x2009, 0x0028, 0x080c, 0x8f53, 0x9085,
-+      0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015,
-+      0x1188, 0x2011, 0x1122, 0x2204, 0x9086, 0x0074, 0x1158, 0x080c,
-+      0x9bfa, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x75be, 0x080c,
-+      0x7aa4, 0x0070, 0x6014, 0x9080, 0x001a, 0x2004, 0xd0fc, 0x0148,
-+      0x2001, 0x0001, 0x080c, 0xaf0f, 0x080c, 0x97dc, 0x080c, 0x8ed9,
-+      0x0005, 0x00d6, 0x6014, 0x906d, 0x090c, 0x0d7e, 0x687b, 0x0030,
-+      0x6883, 0x0000, 0x6897, 0x4005, 0x689b, 0x0004, 0x6867, 0x0139,
-+      0x0126, 0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x00de, 0x080c,
-+      0x8ed9, 0x0c30, 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c,
-+      0x5568, 0x00e8, 0x9186, 0x0015, 0x1518, 0x2011, 0x1122, 0x2204,
-+      0x9086, 0x0014, 0x11e8, 0x6010, 0x00d6, 0x2068, 0x080c, 0x56a8,
-+      0x00de, 0x080c, 0x9cc9, 0x11a0, 0x6010, 0x00d6, 0x2068, 0x6890,
-+      0x00de, 0x9005, 0x0168, 0x2001, 0x0006, 0x080c, 0x5568, 0x6014,
-+      0x9080, 0x001a, 0x2004, 0xd0fc, 0x0170, 0x080c, 0x9275, 0x0050,
-+      0x6014, 0x9080, 0x001a, 0x2004, 0xd0fc, 0x01d0, 0x080c, 0x97dc,
-+      0x080c, 0x8ed9, 0x0005, 0x6014, 0x00d6, 0x906d, 0x090c, 0x0d7e,
-+      0x687b, 0x0000, 0x6883, 0x0000, 0x6897, 0x4000, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x5b76, 0x012e, 0x00de, 0x080c, 0x8ed9, 0x0c50,
-+      0x6014, 0x00d6, 0x906d, 0x090c, 0x0d7e, 0x687b, 0x0030, 0x6883,
-+      0x0000, 0x6897, 0x4005, 0x689b, 0x0004, 0x6867, 0x0139, 0x0126,
-+      0x2091, 0x8000, 0x080c, 0x5b76, 0x012e, 0x00de, 0x080c, 0x8ed9,
-+      0x0888, 0x6878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, 0x6880,
-+      0xc0ad, 0x6882, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000, 0x6003,
-+      0x0001, 0x6007, 0x0050, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0005,
-+      0x00c6, 0x6010, 0x2004, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f,
-+      0x0013, 0x00ce, 0x0005, 0xa6ce, 0xac34, 0xac34, 0xac37, 0xc172,
-+      0xc18d, 0xc190, 0xa6ce, 0xa6ce, 0xa6ce, 0xa6ce, 0xa6ce, 0xa6ce,
-+      0xa6ce, 0xa6ce, 0x080c, 0x0d7e, 0xa001, 0xa001, 0x0005, 0x0009,
-+      0x0005, 0x6010, 0x2004, 0xd0bc, 0x0550, 0x00f6, 0x2c78, 0x080c,
-+      0x8e83, 0x1128, 0x2001, 0x12c2, 0x2004, 0x7842, 0x00f8, 0x7810,
-+      0x6012, 0x080c, 0xad70, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
-+      0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
-+      0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
-+      0x6156, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2f60, 0x00fe, 0x0005,
-+      0x0016, 0x00f6, 0x6814, 0x2078, 0x787c, 0xd0e4, 0x0180, 0xc0e4,
-+      0x787e, 0x7877, 0x0000, 0x7893, 0x0000, 0x788f, 0x0000, 0xd0cc,
-+      0x0130, 0x7878, 0x00d6, 0x2068, 0x080c, 0x0edf, 0x00de, 0x6830,
-+      0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005,
-+      0x0168, 0x9006, 0x602e, 0x6032, 0x00c8, 0x681c, 0xc085, 0x681e,
-+      0x6803, 0x0004, 0x6824, 0xc0f4, 0xc0d5, 0x6826, 0x6814, 0x2078,
-+      0x78ac, 0x6938, 0x9102, 0x78b0, 0x693c, 0x9103, 0x1e50, 0x683c,
-+      0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
-+      0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001,
-+      0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4,
-+      0x00fe, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
-+      0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
-+      0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0x6c3e, 0x6b42, 0x0046,
-+      0x0036, 0x2400, 0x6cac, 0x9402, 0x6836, 0x2300, 0x6bb0, 0x9303,
-+      0x683a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
-+      0xd0f4, 0x1138, 0x683c, 0x603a, 0x6840, 0x603e, 0x6024, 0xc0f5,
-+      0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
-+      0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
-+      0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
-+      0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
-+      0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
-+      0x12bc, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x73f0,
-+      0x2001, 0x12c0, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
-+      0x12be, 0x200c, 0x8000, 0x2014, 0x2071, 0x1297, 0x711a, 0x721e,
-+      0x2001, 0x0064, 0x080c, 0x73f0, 0x2001, 0x12c1, 0x82ff, 0x1110,
-+      0x2011, 0x0014, 0x2202, 0x2001, 0x12c2, 0x9288, 0x000a, 0x2102,
-+      0x2001, 0x136b, 0x2102, 0x2001, 0x0032, 0x080c, 0x130c, 0x080c,
-+      0x58af, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
-+      0x0016, 0x00e6, 0x2001, 0x12c0, 0x2003, 0x0028, 0x2001, 0x12c1,
-+      0x2003, 0x0014, 0x2071, 0x1297, 0x701b, 0x0000, 0x701f, 0x07d0,
-+      0x2001, 0x12c2, 0x2009, 0x001e, 0x2102, 0x2001, 0x136b, 0x2102,
-+      0x2001, 0x0032, 0x080c, 0x130c, 0x00ee, 0x001e, 0x000e, 0x0005,
-+      0x00d6, 0x6058, 0x906d, 0x0110, 0x080c, 0x0ecf, 0x00de, 0x0005,
-+      0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83,
-+      0x001e, 0x0178, 0x6112, 0x0ca1, 0x6023, 0x0001, 0x2d00, 0x6016,
-+      0x2009, 0x0033, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce,
-+      0x0005, 0x9006, 0x0cd8, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0x1100,
-+      0x9186, 0x0015, 0x11f8, 0x7088, 0x9086, 0x0018, 0x11d8, 0x6014,
-+      0x2068, 0x6a3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x7c86, 0x01d0,
-+      0x7074, 0x6a50, 0x9206, 0x1158, 0x7078, 0x6a54, 0x9206, 0x1138,
-+      0x6210, 0x9290, 0x0028, 0x2214, 0x900e, 0x080c, 0x28a5, 0x080c,
-+      0x9275, 0x0020, 0x080c, 0x97dc, 0x080c, 0x8ed9, 0x00fe, 0x00ee,
-+      0x00de, 0x0005, 0x7058, 0x6a54, 0x9206, 0x0d50, 0x0c80, 0x00c6,
-+      0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x8e83, 0x001e, 0x0180,
-+      0x6112, 0x080c, 0xad70, 0x6023, 0x0001, 0x2d00, 0x6016, 0x2009,
-+      0x004d, 0x080c, 0x8f53, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-+      0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x00c6,
-+      0x080c, 0x8e83, 0x001e, 0x0178, 0x6112, 0x080c, 0xad70, 0x6023,
-+      0x0001, 0x2d00, 0x6016, 0x001e, 0x080c, 0x8f53, 0x9085, 0x0001,
-+      0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026,
-+      0x0036, 0x0046, 0x0056, 0x0066, 0x00d6, 0x00e6, 0x00f6, 0x2071,
-+      0x1100, 0x9186, 0x0015, 0x1538, 0x7188, 0x6014, 0x2068, 0x6814,
-+      0x8003, 0x9106, 0x1500, 0x20e1, 0x0000, 0x2001, 0x12da, 0x2003,
-+      0x0000, 0x6014, 0x20e9, 0x0001, 0x2068, 0x6830, 0x20a8, 0x9d80,
-+      0x001b, 0x20a0, 0x2001, 0x12da, 0x0016, 0x200c, 0x080c, 0xb4ed,
-+      0x001e, 0x6804, 0x9005, 0x0110, 0x2068, 0x0c78, 0x6014, 0x2070,
-+      0x7067, 0x0103, 0x0010, 0x080c, 0x97dc, 0x080c, 0x8ed9, 0x00fe,
-+      0x00ee, 0x00de, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
-+      0x0005, 0x00d6, 0x00e6, 0x00f6, 0x2071, 0x1100, 0x9186, 0x0015,
-+      0x11c0, 0x7088, 0x9086, 0x0004, 0x11a0, 0x6014, 0x90e8, 0x001b,
-+      0x2c78, 0x080c, 0x7c86, 0x01a8, 0x7074, 0x6a08, 0x9206, 0x1130,
-+      0x7078, 0x6a0c, 0x9206, 0x1110, 0x080c, 0x2862, 0x080c, 0x9275,
-+      0x0020, 0x080c, 0x97dc, 0x080c, 0x8ed9, 0x00fe, 0x00ee, 0x00de,
-+      0x0005, 0x7058, 0x6a0c, 0x9206, 0x0d78, 0x0c80, 0x00d6, 0x00e6,
-+      0x00f6, 0x2071, 0x1100, 0x9186, 0x0015, 0x11f0, 0x7088, 0x9086,
-+      0x0004, 0x11d0, 0x6014, 0x90e8, 0x0031, 0x2c78, 0x080c, 0x7c86,
-+      0x0558, 0x7074, 0x6a08, 0x9206, 0x1130, 0x7078, 0x6a0c, 0x9206,
-+      0x1110, 0x080c, 0x2862, 0x6014, 0x2068, 0x687b, 0x0000, 0x6883,
-+      0x0000, 0x6897, 0x4000, 0x0050, 0x6014, 0x2068, 0x687b, 0x0030,
-+      0x6883, 0x0000, 0x6897, 0x4005, 0x689b, 0x0004, 0x0126, 0x2091,
-+      0x8000, 0x6867, 0x0139, 0x080c, 0x5b76, 0x012e, 0x080c, 0x8ed9,
-+      0x00fe, 0x00ee, 0x00de, 0x0005, 0x7058, 0x6a0c, 0x9206, 0x09c8,
-+      0x08d0, 0x0016, 0x0026, 0x687c, 0xd0ac, 0x0178, 0x6938, 0x6a34,
-+      0x2100, 0x9205, 0x0150, 0x6890, 0x9106, 0x1118, 0x688c, 0x9206,
-+      0x0120, 0x6992, 0x6a8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,
-+      0x00d6, 0x0036, 0x6314, 0x2368, 0x687a, 0x6982, 0x929e, 0x4000,
-+      0x1558, 0x6310, 0x00c6, 0x2360, 0x900e, 0x6868, 0xd0f4, 0x1140,
-+      0x080c, 0x57d6, 0x1108, 0xc185, 0x6000, 0xd0bc, 0x0108, 0xc18d,
-+      0x6a96, 0x699a, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x20e9, 0x0001,
-+      0x9d80, 0x0031, 0x20a0, 0x9c80, 0x0006, 0x2098, 0x080c, 0x504f,
-+      0x20a9, 0x0004, 0x9d80, 0x0035, 0x20a0, 0x9c80, 0x000a, 0x2098,
-+      0x080c, 0x504f, 0x00ce, 0x00a0, 0x6a96, 0x3918, 0x9398, 0x0006,
-+      0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0x689b, 0x0004, 0x6ba2,
-+      0x6310, 0x00c6, 0x2360, 0x6004, 0x00ce, 0x9084, 0x00ff, 0x689e,
-+      0x080c, 0x5b76, 0x6017, 0x0000, 0x003e, 0x00de, 0x0005, 0x0026,
-+      0x0036, 0x0046, 0x00e6, 0x00d6, 0x00f6, 0x6214, 0x2268, 0x6210,
-+      0x2270, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0x7014, 0x9084,
-+      0x00ff, 0x900e, 0x080c, 0x1f63, 0x2118, 0x831f, 0x939c, 0xff00,
-+      0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
-+      0x3f23, 0x00a8, 0x9096, 0x0001, 0x1148, 0x8dff, 0x0180, 0x689b,
-+      0x000d, 0x7838, 0x68a6, 0x783c, 0x68aa, 0x0048, 0x9096, 0x0002,
-+      0x1130, 0x689b, 0x000d, 0x7838, 0x68a6, 0x783c, 0x68aa, 0x00fe,
-+      0x00de, 0x00ee, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6, 0x0026,
-+      0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c, 0x080c,
-+      0xa932, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-+      0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206, 0x1160,
-+      0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c, 0x9106,
-+      0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce, 0x0005,
-+      0x9085, 0x0001, 0x0cc8, 0x6974, 0xd1cc, 0x0188, 0x918c, 0x00ff,
-+      0x918e, 0x0002, 0x1160, 0x69a8, 0x918c, 0x0f00, 0x810f, 0x918e,
-+      0x0001, 0x1128, 0x6834, 0x6938, 0x9115, 0x190c, 0xa12c, 0x0005,
-+      0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7e, 0x0013, 0x006e,
-+      0x0005, 0xafa9, 0xb5ee, 0xb74e, 0xafa9, 0xafa9, 0xafa9, 0xafa9,
-+      0xafa9, 0xafe0, 0xb7d1, 0xafa9, 0xafa9, 0xafa9, 0xafa9, 0xafa9,
-+      0xafa9, 0x080c, 0x0d7e, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
-+      0x0d7e, 0x0013, 0x006e, 0x0005, 0xafc4, 0xbcae, 0xafc4, 0xafc4,
-+      0xafc4, 0xafc4, 0xafc4, 0xafc4, 0xbc5d, 0xbd02, 0xafc4, 0xc2b5,
-+      0xc2eb, 0xc2b5, 0xc2eb, 0xafc4, 0x080c, 0x0d7e, 0x6000, 0x9082,
-+      0x0016, 0x1a0c, 0x0d7e, 0x6000, 0x000a, 0x0005, 0xafde, 0xb91e,
-+      0xba17, 0xba39, 0xbaf9, 0xafde, 0xbbd0, 0xbb7b, 0xb7dd, 0xbc33,
-+      0xbc48, 0xafde, 0xafde, 0xafde, 0xafde, 0xafde, 0x080c, 0x0d7e,
-+      0x91b2, 0x0053, 0x1a0c, 0x0d7e, 0x2100, 0x91b2, 0x0040, 0x1a04,
-+      0xb414, 0x0002, 0xb02a, 0xb214, 0xb02a, 0xb02a, 0xb02a, 0xb21d,
-+      0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a,
-+      0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a,
-+      0xb02a, 0xb02c, 0xb087, 0xb096, 0xb0f8, 0xb122, 0xb1a0, 0xb1ff,
-+      0xb02a, 0xb02a, 0xb220, 0xb02a, 0xb02a, 0xb235, 0xb242, 0xb02a,
-+      0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb2c9, 0xb02a, 0xb02a, 0xb2d8,
-+      0xb02a, 0xb02a, 0xb294, 0xb02a, 0xb02a, 0xb02a, 0xb2f0, 0xb02a,
-+      0xb02a, 0xb02a, 0xb368, 0xb02a, 0xb02a, 0xb02a, 0xb02a, 0xb02a,
-+      0xb02a, 0xb3dd, 0x080c, 0x0d7e, 0x080c, 0x588e, 0x1150, 0x2001,
-+      0x1136, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008,
-+      0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804,
-+      0xb20d, 0x080c, 0x587e, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016,
-+      0x6210, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x76f0,
-+      0x0076, 0x903e, 0x080c, 0x75ee, 0x2c08, 0x080c, 0xbec2, 0x007e,
-+      0x001e, 0x2e60, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,
-+      0x00c6, 0x2660, 0x080c, 0x5617, 0x00ce, 0x96b0, 0x0001, 0x2634,
-+      0x9684, 0x00ff, 0x9082, 0x0006, 0x0278, 0x080c, 0xbe06, 0x1904,
-+      0xb0f2, 0x080c, 0xbda3, 0x1120, 0x6007, 0x0008, 0x0804, 0xb20d,
-+      0x6007, 0x0009, 0x0804, 0xb20d, 0x080c, 0xbfdb, 0x0128, 0x080c,
-+      0xbe06, 0x0d78, 0x0804, 0xb0f2, 0x6017, 0x1900, 0x0c88, 0x080c,
-+      0x297d, 0x1904, 0xb411, 0x6106, 0x080c, 0xbd61, 0x6007, 0x0006,
-+      0x0804, 0xb20d, 0x6007, 0x0007, 0x0804, 0xb20d, 0x080c, 0xc327,
-+      0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411, 0x00d6, 0x6610,
-+      0x2668, 0x6e04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001,
-+      0x0001, 0x080c, 0x5556, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
-+      0x0188, 0x9686, 0x0004, 0x0170, 0x6e04, 0x96b4, 0x00ff, 0x9686,
-+      0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110,
-+      0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003,
-+      0x1138, 0x90b2, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130,
-+      0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b8, 0x00ee, 0x080c,
-+      0xbe64, 0x1198, 0x9686, 0x0006, 0x1148, 0x0026, 0x6210, 0x9290,
-+      0x0028, 0x2214, 0x900e, 0x080c, 0x28a5, 0x002e, 0x080c, 0x56a8,
-+      0x6007, 0x000a, 0x00de, 0x0804, 0xb20d, 0x6007, 0x000b, 0x00de,
-+      0x0804, 0xb20d, 0x080c, 0x2862, 0x6007, 0x0001, 0x0804, 0xb20d,
-+      0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411,
-+      0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1950, 0x90b2, 0x0014,
-+      0x0a38, 0x7030, 0x9084, 0x0003, 0x1918, 0x6610, 0x00d6, 0x2668,
-+      0x6e04, 0x00de, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x9290,
-+      0x0028, 0x2214, 0x900e, 0x080c, 0x28a5, 0x002e, 0x6007, 0x000c,
-+      0x0804, 0xb20d, 0x080c, 0x588e, 0x1140, 0x2001, 0x1136, 0x2004,
-+      0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xb039, 0x080c,
-+      0x587e, 0x6610, 0x96b0, 0x0001, 0x2634, 0x9684, 0x00ff, 0x9082,
-+      0x0006, 0x06e8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x5592,
-+      0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
-+      0x9686, 0x0006, 0x1904, 0xb0f2, 0x080c, 0xbe71, 0x1120, 0x6007,
-+      0x000e, 0x0804, 0xb20d, 0x0046, 0x6410, 0x94a0, 0x0028, 0x2424,
-+      0x94a4, 0x00ff, 0x8427, 0x0046, 0x080c, 0x2862, 0x004e, 0x0016,
-+      0x9006, 0x2009, 0x1153, 0x210c, 0xd1a4, 0x0158, 0x2009, 0x0029,
-+      0x080c, 0xc12f, 0x6010, 0x00d6, 0x2068, 0x6800, 0xc0e5, 0x6802,
-+      0x00de, 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xb20d, 0x2001,
-+      0x0001, 0x080c, 0x5556, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
-+      0x0004, 0x2019, 0x1105, 0x2011, 0x0270, 0x080c, 0x9d60, 0x003e,
-+      0x002e, 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637,
-+      0x9682, 0x0004, 0x0a04, 0xb0f2, 0x9682, 0x0007, 0x0a04, 0xb14c,
-+      0x0804, 0xb0f2, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xb20d,
-+      0x080c, 0x588e, 0x1140, 0x2001, 0x1136, 0x2004, 0x9084, 0x0009,
-+      0x9086, 0x0008, 0x1110, 0x0804, 0xb039, 0x080c, 0x587e, 0x6610,
-+      0x96b0, 0x0001, 0x2634, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06b8,
-+      0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006,
-+      0x1904, 0xb0f2, 0x080c, 0xbe99, 0x1138, 0x080c, 0xbda3, 0x1120,
-+      0x6007, 0x0010, 0x0804, 0xb20d, 0x0046, 0x6410, 0x94a0, 0x0028,
-+      0x2424, 0x94a4, 0x00ff, 0x8427, 0x0046, 0x080c, 0x2862, 0x004e,
-+      0x0016, 0x9006, 0x2009, 0x1153, 0x210c, 0xd1a4, 0x0158, 0x2009,
-+      0x0029, 0x080c, 0xc12f, 0x6010, 0x00d6, 0x2068, 0x6800, 0xc0e5,
-+      0x6802, 0x00de, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c,
-+      0xbfdb, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0950,
-+      0x0804, 0xb0f2, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c,
-+      0x297d, 0x1904, 0xb411, 0x080c, 0xc327, 0x1904, 0xb411, 0x080c,
-+      0xb588, 0x1904, 0xb0f2, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c,
-+      0x75be, 0x080c, 0x7aa4, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
-+      0x080c, 0x75be, 0x080c, 0x7aa4, 0x0cb0, 0x6007, 0x0005, 0x0c68,
-+      0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411,
-+      0x080c, 0xb588, 0x1904, 0xb0f2, 0x6007, 0x0020, 0x6003, 0x0001,
-+      0x080c, 0x75be, 0x080c, 0x7aa4, 0x0005, 0x080c, 0x297d, 0x1904,
-+      0xb411, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c,
-+      0x7aa4, 0x0005, 0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d,
-+      0x1904, 0xb411, 0x080c, 0xb588, 0x1904, 0xb0f2, 0x0016, 0x0026,
-+      0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08,
-+      0x080c, 0xa932, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188,
-+      0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240,
-+      0x2c08, 0x9006, 0x080c, 0xc101, 0x1180, 0x7244, 0x9286, 0xffff,
-+      0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296,
-+      0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007,
-+      0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x8ed9, 0x2160,
-+      0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4,
-+      0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x5556,
-+      0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1105,
-+      0x2011, 0x0276, 0x080c, 0x9d60, 0x003e, 0x002e, 0x001e, 0x015e,
-+      0x0120, 0x6007, 0x0031, 0x0804, 0xb20d, 0x080c, 0x9a13, 0x080c,
-+      0x62e4, 0x11b0, 0x0006, 0x0026, 0x0036, 0x080c, 0x6300, 0x1158,
-+      0x2001, 0x12a8, 0x2003, 0x0001, 0x2001, 0x1100, 0x2003, 0x0001,
-+      0x080c, 0x621a, 0x0010, 0x080c, 0x62be, 0x003e, 0x002e, 0x000e,
-+      0x0005, 0x080c, 0x297d, 0x1904, 0xb411, 0x6106, 0x080c, 0xb5a4,
-+      0x6007, 0x002b, 0x0804, 0xb20d, 0x6007, 0x002c, 0x0804, 0xb20d,
-+      0x080c, 0xc327, 0x1904, 0xb411, 0x080c, 0x297d, 0x1904, 0xb411,
-+      0x080c, 0xb588, 0x1904, 0xb0f2, 0x6106, 0x080c, 0xb5a8, 0x1120,
-+      0x6007, 0x002e, 0x0804, 0xb20d, 0x6007, 0x002f, 0x0804, 0xb20d,
-+      0x080c, 0x297d, 0x1904, 0xb411, 0x00e6, 0x00d6, 0x00c6, 0x6010,
-+      0x9080, 0x0001, 0x200c, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158,
-+      0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de,
-+      0x00ee, 0x0804, 0xb214, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x0904,
-+      0xb365, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108,
-+      0x720c, 0x080c, 0x58cb, 0x0140, 0x6010, 0x2068, 0x6810, 0x9106,
-+      0x1118, 0x6814, 0x9206, 0x01f8, 0x080c, 0x58c6, 0x15a0, 0x2069,
-+      0x1100, 0x6878, 0x9206, 0x1578, 0x6874, 0x9106, 0x1560, 0x7210,
-+      0x080c, 0xa932, 0x0568, 0x080c, 0xc19f, 0x0550, 0x622e, 0x6007,
-+      0x0036, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c,
-+      0xa932, 0x01b0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1180,
-+      0x08f8, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xc101, 0x2c10,
-+      0x2160, 0x0130, 0x08a8, 0x6007, 0x0037, 0x6017, 0x1500, 0x08c8,
-+      0x6007, 0x0037, 0x6017, 0x1700, 0x08a0, 0x6007, 0x0012, 0x0888,
-+      0x080c, 0x297d, 0x1904, 0xb411, 0x6010, 0x9080, 0x0001, 0x2004,
-+      0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xb214, 0x00e6,
-+      0x00d6, 0x00c6, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x0904, 0xb3d5,
-+      0x2069, 0x1100, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e,
-+      0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001,
-+      0x080c, 0xc101, 0x2c10, 0x00ce, 0x0598, 0x080c, 0xa932, 0x0580,
-+      0x00c6, 0x0026, 0x2260, 0x080c, 0xa5e6, 0x002e, 0x00ce, 0x7118,
-+      0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0158, 0x9186, 0x0005,
-+      0x0118, 0x9186, 0x0007, 0x1178, 0x9280, 0x0005, 0x2004, 0x9005,
-+      0x0150, 0x0056, 0x7510, 0x7614, 0x080c, 0xc1b8, 0x005e, 0x00ce,
-+      0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017,
-+      0x2a00, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0c78,
-+      0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x1700, 0x6003, 0x0001,
-+      0x080c, 0x756e, 0x080c, 0x7aa4, 0x0c10, 0x6007, 0x003b, 0x602f,
-+      0x000b, 0x6017, 0x0000, 0x0804, 0xb339, 0x00e6, 0x0026, 0x080c,
-+      0x588e, 0x0548, 0x080c, 0x587e, 0x080c, 0xc392, 0x1510, 0x2071,
-+      0x1100, 0x70d8, 0xc085, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72a8,
-+      0x9284, 0x00ff, 0x7076, 0x78e6, 0x9284, 0xff00, 0x7278, 0x9205,
-+      0x707a, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x58cb, 0x0120,
-+      0x2011, 0x131d, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2679,
-+      0x0010, 0x080c, 0xc3be, 0x002e, 0x00ee, 0x080c, 0x8ed9, 0x0804,
-+      0xb213, 0x080c, 0x8ed9, 0x0005, 0x2600, 0x0002, 0xb428, 0xb428,
-+      0xb428, 0xb428, 0xb428, 0xb42a, 0xb428, 0xb428, 0xb428, 0xb428,
-+      0xb443, 0xb428, 0xb428, 0xb428, 0xb455, 0xb462, 0xb491, 0xb428,
-+      0x080c, 0x0d7e, 0x080c, 0xc327, 0x1d20, 0x080c, 0x297d, 0x1d08,
-+      0x080c, 0xb588, 0x1138, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c,
-+      0x75be, 0x0005, 0x080c, 0x2862, 0x6007, 0x0001, 0x6003, 0x0001,
-+      0x080c, 0x75be, 0x0005, 0x080c, 0xc327, 0x1958, 0x080c, 0x297d,
-+      0x1940, 0x080c, 0xb588, 0x1d70, 0x703c, 0x6016, 0x6007, 0x004a,
-+      0x6003, 0x0001, 0x080c, 0x75be, 0x0005, 0x080c, 0xb496, 0x0904,
-+      0xb411, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c,
-+      0x7aa4, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c,
-+      0x00ff, 0x81ff, 0x01f8, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001,
-+      0x12f4, 0x2004, 0x9106, 0x11a0, 0x7144, 0x2001, 0x12f5, 0x2004,
-+      0x9106, 0x0180, 0x9186, 0x0002, 0x1158, 0x2011, 0x0276, 0x20a9,
-+      0x0004, 0x6010, 0x6010, 0x9098, 0x000a, 0x080c, 0x9d60, 0x0110,
-+      0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4,
-+      0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00d6,
-+      0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1100,
-+      0x7088, 0x908a, 0x00f9, 0x16c8, 0x20e1, 0x0000, 0x20e9, 0x0001,
-+      0x2001, 0x12da, 0x2003, 0x0000, 0x080c, 0x0e9d, 0x0570, 0x2d00,
-+      0x6016, 0x7088, 0x8004, 0x6816, 0x908a, 0x001e, 0x02b8, 0x6833,
-+      0x001e, 0x20a9, 0x001e, 0x9d80, 0x001b, 0x20a0, 0x2001, 0x12da,
-+      0x0016, 0x200c, 0x0451, 0x001e, 0x2d70, 0x080c, 0x0e9d, 0x01a8,
-+      0x2d00, 0x7006, 0x2100, 0x81ff, 0x0168, 0x0c30, 0x6832, 0x20a8,
-+      0x9d80, 0x001b, 0x20a0, 0x2001, 0x12da, 0x0016, 0x200c, 0x00a9,
-+      0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1100, 0x708b,
-+      0x0000, 0x6014, 0x2068, 0x080c, 0x0edf, 0x9006, 0x012e, 0x01de,
-+      0x01ce, 0x00ee, 0x00de, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026,
-+      0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x1b40, 0x2099,
-+      0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003,
-+      0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x1b40, 0x2099,
-+      0x0260, 0x0ca8, 0x080c, 0x1b40, 0x2061, 0x12da, 0x6004, 0x2098,
-+      0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,
-+      0x4003, 0x22a8, 0x8108, 0x080c, 0x1b40, 0x2099, 0x0260, 0x0ca8,
-+      0x2061, 0x12da, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,
-+      0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
-+      0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
-+      0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,
-+      0x080c, 0x1b58, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
-+      0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,
-+      0x22a8, 0x8108, 0x080c, 0x1b58, 0x20a1, 0x0240, 0x0c98, 0x080c,
-+      0x1b58, 0x2061, 0x12dd, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
-+      0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,
-+      0x22a8, 0x8108, 0x080c, 0x1b58, 0x20a1, 0x0240, 0x0c98, 0x2061,
-+      0x12dd, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,
-+      0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
-+      0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
-+      0x00d6, 0x0066, 0x6610, 0x2668, 0x6e04, 0x96b4, 0xff00, 0x8637,
-+      0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0x6e04, 0x96b4,
-+      0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,
-+      0x0001, 0x006e, 0x00de, 0x0005, 0x00d6, 0x0441, 0x00de, 0x0005,
-+      0x00d6, 0x0489, 0x11e8, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084,
-+      0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0118, 0x2009,
-+      0x0001, 0x0058, 0xd1ec, 0x0160, 0x6920, 0x918c, 0x00ff, 0x6824,
-+      0x080c, 0x1f63, 0x1128, 0x2110, 0x900e, 0x080c, 0x28a5, 0x0018,
-+      0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x2069, 0x026d,
-+      0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,
-+      0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,
-+      0x9084, 0xff00, 0x9086, 0x0800, 0x1140, 0x6800, 0x9084, 0x00ff,
-+      0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2,
-+      0x0053, 0x1a0c, 0x0d7e, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2,
-+      0x0040, 0x1a04, 0xb720, 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6,
-+      0x0014, 0x190c, 0x0d7e, 0x2001, 0x0007, 0x080c, 0x5592, 0x080c,
-+      0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0xb64e, 0xb650,
-+      0xb64e, 0xb64e, 0xb64e, 0xb650, 0xb661, 0xb719, 0xb6b8, 0xb719,
-+      0xb6cc, 0xb719, 0xb661, 0xb719, 0xb711, 0xb719, 0xb711, 0xb719,
-+      0xb719, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb64e,
-+      0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb650, 0xb64e, 0xb719, 0xb64e,
-+      0xb64e, 0xb719, 0xb64e, 0xb716, 0xb719, 0xb64e, 0xb64e, 0xb64e,
-+      0xb64e, 0xb719, 0xb719, 0xb64e, 0xb719, 0xb719, 0xb64e, 0xb65c,
-+      0xb64e, 0xb64e, 0xb64e, 0xb64e, 0xb715, 0xb719, 0xb64e, 0xb64e,
-+      0xb719, 0xb719, 0xb64e, 0xb64e, 0xb64e, 0xb64e, 0x080c, 0x0d7e,
-+      0x080c, 0x79ab, 0x2001, 0x12c0, 0x2004, 0x601a, 0x6003, 0x0002,
-+      0x080c, 0x7aa4, 0x0804, 0xb71f, 0x9006, 0x080c, 0x5556, 0x0804,
-+      0xb719, 0x080c, 0x58c6, 0x1904, 0xb719, 0x9006, 0x080c, 0x5556,
-+      0x6010, 0x9080, 0x0004, 0x2004, 0x9086, 0x00ff, 0x1140, 0x00f6,
-+      0x2079, 0x1100, 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x0438, 0x6010,
-+      0x00c6, 0x2060, 0x6000, 0xd0f4, 0x1178, 0x6010, 0x9005, 0x0160,
-+      0x0036, 0x0046, 0x63a0, 0x2021, 0x0007, 0x080c, 0x4026, 0x004e,
-+      0x003e, 0x00ce, 0x0804, 0xb719, 0x00ce, 0x080c, 0x2982, 0x1904,
-+      0xb719, 0x2001, 0x1100, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6,
-+      0x2079, 0x1100, 0x78a0, 0x8000, 0x78a2, 0x00fe, 0x2001, 0x0002,
-+      0x080c, 0x5568, 0x080c, 0x79ab, 0x6023, 0x0001, 0x6003, 0x0001,
-+      0x6007, 0x0002, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x6110, 0x00c6,
-+      0x2160, 0x2009, 0x0001, 0x080c, 0x7206, 0x00ce, 0x0804, 0xb71f,
-+      0x6610, 0x00d6, 0x2668, 0x6e04, 0x00de, 0x96b4, 0xff00, 0x8637,
-+      0x9686, 0x0006, 0x0904, 0xb719, 0x9686, 0x0004, 0x0904, 0xb719,
-+      0x2001, 0x0004, 0x0804, 0xb717, 0x2001, 0x1100, 0x2004, 0x9086,
-+      0x0003, 0x1160, 0x0036, 0x0046, 0x6010, 0x9080, 0x0028, 0x201c,
-+      0x2021, 0x0006, 0x080c, 0x4026, 0x004e, 0x003e, 0x2001, 0x0006,
-+      0x080c, 0xb73d, 0x6610, 0x00d6, 0x2668, 0x6e04, 0x00de, 0x0066,
-+      0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0120, 0x2001,
-+      0x0006, 0x080c, 0x5592, 0x080c, 0x58c6, 0x1518, 0x2001, 0x1136,
-+      0x2004, 0xd0a4, 0x01f0, 0x00d6, 0x6610, 0x2668, 0x6e04, 0x00de,
-+      0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1100,
-+      0x78a0, 0x8000, 0x78a2, 0x00fe, 0x0804, 0xb69e, 0x2001, 0x0004,
-+      0x0030, 0x2001, 0x0006, 0x0449, 0x0020, 0x0018, 0x0010, 0x080c,
-+      0x5592, 0x080c, 0x79ab, 0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005,
-+      0x2600, 0x0002, 0xb734, 0xb734, 0xb734, 0xb734, 0xb734, 0xb736,
-+      0xb734, 0xb734, 0xb734, 0xb734, 0xb736, 0xb734, 0xb734, 0xb734,
-+      0xb736, 0xb736, 0xb736, 0xb736, 0x080c, 0x0d7e, 0x080c, 0x79ab,
-+      0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x0016, 0x00d6, 0x6110,
-+      0x2168, 0x6900, 0xd184, 0x0138, 0x080c, 0x5568, 0x9006, 0x080c,
-+      0x5556, 0x080c, 0x2886, 0x00de, 0x001e, 0x0005, 0x6610, 0x00d6,
-+      0x2668, 0x6804, 0x9084, 0xff00, 0x8007, 0x00de, 0x90b2, 0x000c,
-+      0x1a0c, 0x0d7e, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6,
-+      0x0016, 0x190c, 0x0d7e, 0x006b, 0x0005, 0x98b0, 0x98b0, 0x98b0,
-+      0x98b0, 0x98b0, 0x98b0, 0xb7bb, 0xb77d, 0x98b0, 0x98b0, 0x98b0,
-+      0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0xb7bb,
-+      0xb7c2, 0x98b0, 0x98b0, 0x98b0, 0x98b0, 0x00f6, 0x080c, 0x58c6,
-+      0x11d8, 0x6010, 0x907d, 0x01c0, 0x7800, 0xd0f4, 0x1118, 0x7810,
-+      0x9005, 0x1190, 0x9006, 0x080c, 0x5556, 0x2001, 0x0002, 0x080c,
-+      0x5568, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
-+      0x75be, 0x080c, 0x7aa4, 0x00e8, 0x2011, 0x0263, 0x2204, 0x8211,
-+      0x220c, 0x080c, 0x1f63, 0x11a8, 0x00c6, 0x080c, 0x5608, 0x0120,
-+      0x00ce, 0x080c, 0x8ed9, 0x0068, 0x6010, 0x0006, 0x6014, 0x0006,
-+      0x080c, 0x5100, 0x000e, 0x6016, 0x000e, 0x6012, 0x00ce, 0x080c,
-+      0x8ed9, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c,
-+      0x8ed9, 0x0005, 0x080c, 0x9bf7, 0x1148, 0x6003, 0x0001, 0x6007,
-+      0x0001, 0x080c, 0x75be, 0x080c, 0x7aa4, 0x0010, 0x080c, 0x8ed9,
-+      0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7e, 0x080c, 0x79ab,
-+      0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0x9182, 0x0040, 0x0002,
-+      0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f5, 0xb7f3, 0xb7f3, 0xb7f3,
-+      0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3, 0xb7f3,
-+      0xb7f3, 0xb7f3, 0xb7f3, 0x080c, 0x0d7e, 0x00d6, 0x00e6, 0x00f6,
-+      0x0046, 0x0026, 0x6210, 0x9280, 0x002b, 0x2004, 0x9005, 0x1190,
-+      0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xb858,
-+      0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011, 0x0200, 0x080c,
-+      0x73af, 0x0020, 0x9026, 0x080c, 0xc363, 0x0c50, 0x080c, 0x0eb6,
-+      0x090c, 0x0d7e, 0x6003, 0x0007, 0x2d00, 0x6867, 0x010d, 0x9006,
-+      0x6802, 0x686a, 0x6c8a, 0x2c00, 0x688e, 0x6008, 0x68e2, 0x6010,
-+      0x2078, 0x78a0, 0x8007, 0x7130, 0x697a, 0x0016, 0x9084, 0xff00,
-+      0x6876, 0x687f, 0x0000, 0x6883, 0x0000, 0x6887, 0x0036, 0x080c,
-+      0x5b76, 0x001e, 0x9486, 0x2000, 0x1130, 0x2019, 0x0017, 0x080c,
-+      0xc0b9, 0x0804, 0xb8b2, 0x9486, 0x0400, 0x1130, 0x2019, 0x0002,
-+      0x080c, 0xc072, 0x0804, 0xb8b2, 0x9486, 0x0200, 0x1110, 0x080c,
-+      0xc05a, 0x9486, 0x1000, 0x1110, 0x080c, 0xc0a1, 0x0804, 0xb8b2,
-+      0x2069, 0x1354, 0x6a00, 0xd284, 0x0904, 0xb91a, 0x9284, 0x0300,
-+      0x1904, 0xb913, 0x6804, 0x9005, 0x0904, 0xb8fb, 0x2d78, 0x6003,
-+      0x0007, 0x080c, 0x0e9d, 0x0904, 0xb8bc, 0x7800, 0xd08c, 0x1118,
-+      0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x9006, 0x6802, 0x6867,
-+      0x0116, 0x686a, 0x6008, 0x68e2, 0x2c00, 0x687a, 0x6010, 0x2078,
-+      0x78a0, 0x8007, 0x7130, 0x69b6, 0x6876, 0x7928, 0x69ba, 0x792c,
-+      0x69be, 0x7930, 0x69c2, 0x7934, 0x69c6, 0x6883, 0x003d, 0x7044,
-+      0x9084, 0x0003, 0x9080, 0xb8b8, 0x2005, 0x687e, 0x20a9, 0x000a,
-+      0x2001, 0x0270, 0x9d90, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,
-+      0x20e1, 0x0000, 0x20e9, 0x0001, 0x2098, 0x22a0, 0x4003, 0x200b,
-+      0x0000, 0x2001, 0x027a, 0x200c, 0x69b2, 0x8000, 0x200c, 0x69ae,
-+      0x080c, 0x5b76, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x0005,
-+      0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x110f, 0x2004, 0xd084,
-+      0x0120, 0x080c, 0x0eb6, 0x1904, 0xb86d, 0x6017, 0x0100, 0x6003,
-+      0x0001, 0x6007, 0x0041, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0c10,
-+      0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200, 0x1198,
-+      0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0x0700, 0x910d,
-+      0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x756e,
-+      0x080c, 0x7aa4, 0x0838, 0x6868, 0x602e, 0x686c, 0x6032, 0x6017,
-+      0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x756e, 0x080c,
-+      0x7aa4, 0x0804, 0xb8b2, 0x2001, 0x110d, 0x2004, 0xd0ec, 0x0120,
-+      0x2011, 0x8049, 0x080c, 0x3f23, 0x6017, 0x0300, 0x0010, 0x6017,
-+      0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x756e, 0x080c,
-+      0x7aa4, 0x0804, 0xb8b2, 0x6017, 0x0500, 0x0c98, 0x6017, 0x0600,
-+      0x0804, 0xb8d0, 0x6017, 0x0200, 0x0804, 0xb8d0, 0x9186, 0x0013,
-+      0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0d7e, 0x9082, 0x0040,
-+      0x0a0c, 0x0d7e, 0x2008, 0x0804, 0xb9ca, 0x9186, 0x0051, 0x0140,
-+      0x9186, 0x0047, 0x11e8, 0x6004, 0x9086, 0x0041, 0x0904, 0xb97e,
-+      0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xb97e, 0x0126, 0x2091,
-+      0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x745c, 0x002e, 0x001e,
-+      0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xba17,
-+      0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
-+      0x0500, 0x190c, 0x0d7e, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,
-+      0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006,
-+      0x0016, 0x0026, 0x080c, 0x745c, 0x002e, 0x001e, 0x000e, 0x00ce,
-+      0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0d7e, 0x0804,
-+      0xbaf9, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x8f6e,
-+      0x0005, 0xb994, 0xb996, 0xb996, 0xb9ba, 0xb994, 0xb994, 0xb994,
-+      0xb994, 0xb994, 0xb994, 0xb994, 0xb994, 0xb994, 0xb994, 0xb994,
-+      0xb994, 0xb994, 0xb994, 0xb994, 0x080c, 0x0d7e, 0x080c, 0x79ab,
-+      0x080c, 0x7aa4, 0x0036, 0x00d6, 0x6014, 0x906d, 0x01c0, 0x9d84,
-+      0xf000, 0x01a8, 0x6003, 0x0002, 0x6010, 0x2004, 0xd0bc, 0x1178,
-+      0x2019, 0x0004, 0x080c, 0xc0e9, 0x6017, 0x0000, 0x6018, 0x9005,
-+      0x1120, 0x2001, 0x12c1, 0x2004, 0x601a, 0x6003, 0x0007, 0x00de,
-+      0x003e, 0x0005, 0x00d6, 0x080c, 0x79ab, 0x080c, 0x7aa4, 0x080c,
-+      0xa942, 0x0120, 0x6014, 0x2068, 0x080c, 0x0ecf, 0x080c, 0x8f09,
-+      0x00de, 0x0005, 0x0002, 0xb9de, 0xb9fb, 0xb9e7, 0xba11, 0xb9de,
-+      0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de,
-+      0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0xb9de, 0x080c, 0x0d7e,
-+      0x6014, 0x9088, 0x001f, 0x2104, 0x9085, 0x0400, 0x200a, 0x080c,
-+      0x79ab, 0x6014, 0x9080, 0x001f, 0x2004, 0xd0b4, 0x0138, 0x6003,
-+      0x0007, 0x2009, 0x0043, 0x080c, 0x8f53, 0x0010, 0x6003, 0x0004,
-+      0x080c, 0x7aa4, 0x0005, 0x080c, 0x79ab, 0x6114, 0x9184, 0xf000,
-+      0x0128, 0x9180, 0x001f, 0x200c, 0xd1ec, 0x1138, 0x080c, 0x7384,
-+      0x080c, 0x8ed9, 0x080c, 0x7aa4, 0x0005, 0x080c, 0xc32e, 0x0db0,
-+      0x0cc8, 0x080c, 0x79ab, 0x2009, 0x0041, 0x0804, 0xbb7b, 0x9182,
-+      0x0040, 0x0002, 0xba2d, 0xba2f, 0xba2d, 0xba2d, 0xba2d, 0xba2d,
-+      0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d, 0xba2d,
-+      0xba2d, 0xba2d, 0xba2d, 0xba30, 0xba2d, 0x080c, 0x0d7e, 0x0005,
-+      0x00d6, 0x080c, 0x7384, 0x00de, 0x080c, 0xc381, 0x080c, 0x8ed9,
-+      0x0005, 0x9182, 0x0040, 0x0002, 0xba4f, 0xba4f, 0xba4f, 0xba4f,
-+      0xba4f, 0xba4f, 0xba4f, 0xba51, 0xba4f, 0xba54, 0xbac4, 0xba4f,
-+      0xba4f, 0xba4f, 0xba4f, 0xbac4, 0xba4f, 0xba4f, 0xba4f, 0x080c,
-+      0x0d7e, 0x080c, 0x8f6e, 0x0005, 0x2001, 0x0105, 0x2004, 0x9084,
-+      0x1800, 0x01c8, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004,
-+      0x9105, 0x1904, 0xbac4, 0x2009, 0x110c, 0x2104, 0xd0d4, 0x0904,
-+      0xbac4, 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd,
-+      0x9085, 0x0010, 0x200a, 0x2001, 0x1172, 0x2004, 0xd0e4, 0x1528,
-+      0x603b, 0x0000, 0x080c, 0x7a55, 0x6014, 0x00d6, 0x2068, 0x687c,
-+      0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002, 0x0508, 0x2001,
-+      0x110c, 0x2004, 0xd0d4, 0x11e0, 0x080c, 0x7b69, 0x2009, 0x0041,
-+      0x00de, 0x0804, 0xbb7b, 0x080c, 0x7b69, 0x6003, 0x0007, 0x601b,
-+      0x0000, 0x080c, 0x7384, 0x00de, 0x0005, 0x2001, 0x0100, 0x2004,
-+      0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f, 0x2004, 0x603a, 0x0890,
-+      0x2001, 0x110c, 0x200c, 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c,
-+      0x2369, 0x080c, 0x7b69, 0x6014, 0x9080, 0x001f, 0x200c, 0xd1ec,
-+      0x1130, 0x080c, 0x7384, 0x080c, 0x8ed9, 0x00de, 0x0005, 0x080c,
-+      0xc32e, 0x0db8, 0x00de, 0x0005, 0x2001, 0x110c, 0x200c, 0xc1d4,
-+      0x2102, 0x0036, 0x080c, 0x7a55, 0x080c, 0x7b69, 0x6014, 0x00d6,
-+      0x2068, 0x6010, 0x2004, 0xd0bc, 0x0188, 0x687c, 0x9084, 0x0003,
-+      0x9086, 0x0002, 0x0140, 0x68ac, 0x6330, 0x931a, 0x6332, 0x68b0,
-+      0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004,
-+      0x080c, 0xc0e9, 0x6018, 0x9005, 0x1128, 0x2001, 0x12c1, 0x2004,
-+      0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x00de, 0x003e,
-+      0x0005, 0x9182, 0x0040, 0x0002, 0xbb10, 0xbb10, 0xbb10, 0xbb10,
-+      0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb12, 0xbb10, 0xbb10, 0xbb10,
-+      0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb10, 0xbb57,
-+      0x080c, 0x0d7e, 0x6014, 0x00d6, 0x2068, 0x6834, 0x6a38, 0x6110,
-+      0x210c, 0xd1bc, 0x1190, 0x920d, 0x1518, 0x687c, 0xd0fc, 0x0128,
-+      0x2009, 0x0041, 0x00de, 0x0804, 0xbb7b, 0x6003, 0x0007, 0x601b,
-+      0x0000, 0x080c, 0x7384, 0x00de, 0x0005, 0x6124, 0xd1f4, 0x1d58,
-+      0x0006, 0x0046, 0x6cac, 0x9422, 0x69b0, 0x2200, 0x910b, 0x6030,
-+      0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,
-+      0x6110, 0x210c, 0xd1bc, 0x1178, 0x2009, 0x110d, 0x210c, 0xd19c,
-+      0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c,
-+      0x7386, 0x00de, 0x0005, 0x6003, 0x0002, 0x00de, 0x0005, 0x6024,
-+      0xd0f4, 0x0128, 0x080c, 0x1303, 0x1904, 0xbb12, 0x0005, 0x6014,
-+      0x00d6, 0x2068, 0x6834, 0x6938, 0x00de, 0x9105, 0x1120, 0x080c,
-+      0x1303, 0x1904, 0xbb12, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
-+      0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,
-+      0x6a9a, 0x6896, 0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186,
-+      0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7e, 0x6024, 0xd0dc,
-+      0x090c, 0x0d7e, 0x0005, 0xbb9e, 0xbba5, 0xbbb1, 0xbbbd, 0xbb9e,
-+      0xbb9e, 0xbb9e, 0xbbcc, 0xbb9e, 0xbba0, 0xbba0, 0xbb9e, 0xbb9e,
-+      0xbb9e, 0xbb9e, 0xbba0, 0xbb9e, 0xbba0, 0xbb9e, 0x080c, 0x0d7e,
-+      0x6024, 0xd0dc, 0x090c, 0x0d7e, 0x0005, 0x6003, 0x0001, 0x6106,
-+      0x080c, 0x756e, 0x0126, 0x2091, 0x8000, 0x080c, 0x7aa4, 0x012e,
-+      0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x0126, 0x2091,
-+      0x8000, 0x080c, 0x7aa4, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
-+      0x2c10, 0x080c, 0x1605, 0x0126, 0x2091, 0x8000, 0x080c, 0x75db,
-+      0x080c, 0x7b72, 0x012e, 0x0005, 0x9016, 0x080c, 0x137c, 0x0005,
-+      0x0126, 0x2091, 0x8000, 0x0036, 0x00d6, 0x9182, 0x0040, 0x0023,
-+      0x00de, 0x003e, 0x012e, 0x0005, 0xbbec, 0xbbee, 0xbc00, 0xbc1a,
-+      0xbbec, 0xbbec, 0xbbec, 0xbc2f, 0xbbec, 0xbbec, 0xbbec, 0xbbec,
-+      0xbbec, 0xbbec, 0xbbec, 0xbbec, 0x080c, 0x0d7e, 0x6014, 0x2068,
-+      0x687c, 0xd0fc, 0x01f8, 0x909c, 0x0003, 0x939e, 0x0003, 0x01d0,
-+      0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x0490,
-+      0x6014, 0x2068, 0x687c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e,
-+      0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x080c, 0x756e, 0x080c,
-+      0x7aa4, 0x0400, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c,
-+      0xc0e9, 0x00c0, 0x6014, 0x2068, 0x687c, 0xd0fc, 0x0d98, 0x909c,
-+      0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x2c10,
-+      0x080c, 0x1605, 0x080c, 0x75db, 0x080c, 0x7b72, 0x0018, 0x9016,
-+      0x080c, 0x137c, 0x0005, 0x080c, 0x79ab, 0x6114, 0x81ff, 0x0158,
-+      0x00d6, 0x2168, 0x080c, 0xc3c7, 0x0036, 0x2019, 0x0029, 0x080c,
-+      0xc0e9, 0x003e, 0x00de, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005,
-+      0x080c, 0x7a55, 0x6114, 0x81ff, 0x0158, 0x00d6, 0x2168, 0x080c,
-+      0xc3c7, 0x0036, 0x2019, 0x0029, 0x080c, 0xc0e9, 0x003e, 0x00de,
-+      0x080c, 0x8f09, 0x080c, 0x7b72, 0x0005, 0x9182, 0x0085, 0x0002,
-+      0xbc6f, 0xbc6d, 0xbc6d, 0xbc7b, 0xbc6d, 0xbc6d, 0xbc6d, 0xbc6d,
-+      0xbc6d, 0xbc6d, 0xbc6d, 0xbc6d, 0xbc6d, 0x080c, 0x0d7e, 0x6003,
-+      0x000b, 0x6106, 0x080c, 0x756e, 0x0126, 0x2091, 0x8000, 0x080c,
-+      0x7aa4, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xc327, 0x0118,
-+      0x080c, 0x8ed9, 0x0440, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,
-+      0x110d, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x9080, 0x0028, 0x2024,
-+      0x8427, 0x2c00, 0x2011, 0x014e, 0x080c, 0x91b2, 0x7220, 0x080c,
-+      0xbf8f, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,
-+      0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,
-+      0x756e, 0x080c, 0x7aa4, 0x00ee, 0x002e, 0x0005, 0x9186, 0x0013,
-+      0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7e, 0x908a, 0x0092,
-+      0x1a0c, 0x0d7e, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027, 0x0130,
-+      0x9186, 0x0014, 0x0118, 0x080c, 0x8f6e, 0x0050, 0x2001, 0x0007,
-+      0x080c, 0x5592, 0x080c, 0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4,
-+      0x0005, 0xbcde, 0xbce0, 0xbce0, 0xbcde, 0xbcde, 0xbcde, 0xbcde,
-+      0xbcde, 0xbcde, 0xbcde, 0xbcde, 0xbcde, 0xbcde, 0x080c, 0x0d7e,
-+      0x080c, 0x79ab, 0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0x9182,
-+      0x0085, 0x0a0c, 0x0d7e, 0x9182, 0x0092, 0x1a0c, 0x0d7e, 0x9182,
-+      0x0085, 0x0002, 0xbcff, 0xbcff, 0xbcff, 0xbd01, 0xbcff, 0xbcff,
-+      0xbcff, 0xbcff, 0xbcff, 0xbcff, 0xbcff, 0xbcff, 0xbcff, 0x080c,
-+      0x0d7e, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130,
-+      0x9186, 0x0027, 0x0118, 0x080c, 0x8f6e, 0x0030, 0x080c, 0x79ab,
-+      0x080c, 0x8f09, 0x080c, 0x7aa4, 0x0005, 0x0036, 0x080c, 0xc381,
-+      0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003,
-+      0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x0086,
-+      0x2c40, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e, 0x1570,
-+      0x0076, 0x2c38, 0x080c, 0x8a0a, 0x007e, 0x1540, 0x6000, 0x9086,
-+      0x0000, 0x0520, 0x6020, 0x9086, 0x0007, 0x0500, 0x00d6, 0x601c,
-+      0xd084, 0x0150, 0x080c, 0xc381, 0x2001, 0x12c0, 0x2004, 0x601a,
-+      0x080c, 0x1509, 0x6023, 0x0007, 0x6014, 0x2068, 0x080c, 0xa942,
-+      0x0110, 0x080c, 0xc0e9, 0x00de, 0x6017, 0x0000, 0x080c, 0xc381,
-+      0x6023, 0x0007, 0x2001, 0x12c0, 0x2004, 0x601a, 0x003e, 0x012e,
-+      0x0005, 0x00f6, 0x00c6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938,
-+      0x783c, 0x080c, 0x1f63, 0x1590, 0x0016, 0x00c6, 0x080c, 0x5608,
-+      0x1558, 0x001e, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c,
-+      0x8ac9, 0x080c, 0x76f0, 0x0076, 0x903e, 0x080c, 0x75ee, 0x007e,
-+      0x001e, 0x0076, 0x903e, 0x080c, 0xbec2, 0x007e, 0x0026, 0x6204,
-+      0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004,
-+      0x1118, 0x62a0, 0x080c, 0x2915, 0x002e, 0x001e, 0x080c, 0x5100,
-+      0x6612, 0x6516, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e,
-+      0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x2009,
-+      0x1122, 0x2104, 0x9086, 0x0074, 0x1904, 0xbdfb, 0x2069, 0x0260,
-+      0x6944, 0x9182, 0x0100, 0x06d8, 0x6940, 0x9184, 0x8000, 0x0904,
-+      0xbdf8, 0x2001, 0x12a7, 0x2004, 0x9005, 0x1160, 0x6010, 0x2070,
-+      0x7010, 0x9084, 0x00ff, 0x0118, 0x7000, 0xd0f4, 0x0118, 0x9184,
-+      0x0800, 0x0570, 0x6948, 0x918a, 0x0001, 0x0620, 0x694c, 0x2009,
-+      0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182,
-+      0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001,
-+      0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100,
-+      0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017,
-+      0x0700, 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028,
-+      0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008,
-+      0x9006, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-+      0x0026, 0x0036, 0x0156, 0x6210, 0x2268, 0x6b04, 0x9394, 0x00ff,
-+      0x9286, 0x0006, 0x0190, 0x9286, 0x0004, 0x0178, 0x9394, 0xff00,
-+      0x8217, 0x9286, 0x0006, 0x0148, 0x9286, 0x0004, 0x0130, 0x00c6,
-+      0x2d60, 0x080c, 0x5617, 0x00ce, 0x04c0, 0x2011, 0x0276, 0x20a9,
-+      0x0004, 0x9d98, 0x000a, 0x080c, 0x9d60, 0x1580, 0x2011, 0x027a,
-+      0x20a9, 0x0004, 0x9d98, 0x0006, 0x080c, 0x9d60, 0x1538, 0x0046,
-+      0x0016, 0x6aa0, 0x9294, 0x00ff, 0x8227, 0x9006, 0x2009, 0x1153,
-+      0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xc12f, 0x6800,
-+      0xc0e5, 0x6802, 0x2019, 0x0029, 0x080c, 0x76f0, 0x0076, 0x2039,
-+      0x0000, 0x080c, 0x75ee, 0x2c08, 0x080c, 0xbec2, 0x007e, 0x2001,
-+      0x0007, 0x080c, 0x5592, 0x001e, 0x004e, 0x9006, 0x015e, 0x003e,
-+      0x002e, 0x00de, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, 0x6800,
-+      0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, 0x00de,
-+      0x0005, 0x00c6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079,
-+      0x026c, 0x7930, 0x7834, 0x080c, 0x1f63, 0x11a0, 0x080c, 0x5608,
-+      0x1188, 0x2011, 0x0270, 0x20a9, 0x0004, 0x9c98, 0x000a, 0x080c,
-+      0x9d60, 0x1140, 0x2011, 0x0274, 0x20a9, 0x0004, 0x9c98, 0x0006,
-+      0x080c, 0x9d60, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce,
-+      0x0005, 0x00c6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011,
-+      0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x1f63, 0x11a0, 0x080c,
-+      0x5608, 0x1188, 0x2011, 0x0276, 0x20a9, 0x0004, 0x9c98, 0x000a,
-+      0x080c, 0x9d60, 0x1140, 0x2011, 0x027a, 0x20a9, 0x0004, 0x9c98,
-+      0x0006, 0x080c, 0x9d60, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e,
-+      0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056,
-+      0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x130d,
-+      0x252c, 0x2021, 0x1313, 0x2424, 0x2061, 0x15c0, 0x2071, 0x1100,
-+      0x764c, 0x706c, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1389, 0x000e,
-+      0x0128, 0x8001, 0x9602, 0x1a04, 0xbf4b, 0x0018, 0x9606, 0x0904,
-+      0xbf4b, 0x2100, 0x9c06, 0x0904, 0xbf42, 0x080c, 0xc15b, 0x0904,
-+      0xbf42, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x2982, 0x0904,
-+      0xbf66, 0x6004, 0x9086, 0x0000, 0x1904, 0xbf66, 0x9786, 0x0004,
-+      0x0904, 0xbf66, 0x9786, 0x0007, 0x05e8, 0x2500, 0x9c06, 0x05d0,
-+      0x2400, 0x9c06, 0x05b8, 0x080c, 0xc16b, 0x15a0, 0x88ff, 0x0118,
-+      0x6054, 0x9906, 0x1578, 0x00d6, 0x6000, 0x9086, 0x0004, 0x1120,
-+      0x0016, 0x080c, 0x1509, 0x001e, 0x9786, 0x0008, 0x1148, 0x080c,
-+      0xab2e, 0x1130, 0x080c, 0x97dc, 0x00de, 0x080c, 0x8f09, 0x00d0,
-+      0x6014, 0x2068, 0x080c, 0xa942, 0x0190, 0x9786, 0x0003, 0x1528,
-+      0x6867, 0x0103, 0x6b7a, 0x6877, 0x0000, 0x080c, 0xc3c7, 0x0016,
-+      0x080c, 0xac01, 0x080c, 0x5b76, 0x001e, 0x080c, 0xab11, 0x00de,
-+      0x080c, 0x8f09, 0x9ce0, 0x0018, 0x2001, 0x1118, 0x2004, 0x9c02,
-+      0x1210, 0x0804, 0xbed6, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
-+      0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150,
-+      0x9386, 0x0005, 0x0128, 0x080c, 0xc3c7, 0x080c, 0xc0e9, 0x08f8,
-+      0x00de, 0x0c00, 0x9786, 0x000a, 0x0968, 0x0850, 0x080c, 0xc16b,
-+      0x19c8, 0x81ff, 0x09b8, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018,
-+      0x0130, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1958, 0x6000,
-+      0x9086, 0x0002, 0x1938, 0x080c, 0xab1d, 0x0130, 0x080c, 0xab2e,
-+      0x1908, 0x080c, 0x97dc, 0x0038, 0x080c, 0x2886, 0x080c, 0xab2e,
-+      0x1110, 0x080c, 0x97dc, 0x080c, 0x8f09, 0x0804, 0xbf42, 0x00c6,
-+      0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xc101, 0x001e,
-+      0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,
-+      0xbfae, 0xbfae, 0xbfae, 0xbfae, 0xbfae, 0xbfae, 0xbfb0, 0xbfae,
-+      0xbfae, 0xbfae, 0xbfae, 0x8f09, 0x8f09, 0xbfae, 0x9006, 0x0005,
-+      0x0046, 0x0016, 0x7010, 0x9080, 0x0028, 0x2024, 0x94a4, 0x00ff,
-+      0x8427, 0x2c00, 0x2009, 0x0020, 0x080c, 0xc12f, 0x001e, 0x004e,
-+      0x0036, 0x2019, 0x0002, 0x080c, 0xbd23, 0x003e, 0x9085, 0x0001,
-+      0x0005, 0x00d6, 0x6014, 0x906d, 0x9084, 0xf000, 0x0130, 0x080c,
-+      0xa5f3, 0x687b, 0x0005, 0x080c, 0x5b76, 0x00de, 0x080c, 0x8f09,
-+      0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x5556, 0x0156,
-+      0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1105, 0x2011,
-+      0x0276, 0x080c, 0x9d60, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005,
-+      0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0026,
-+      0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x15c0, 0x2079, 0x0001,
-+      0x8fff, 0x0904, 0xc04d, 0x2071, 0x1100, 0x764c, 0x706c, 0x8001,
-+      0x9602, 0x1a04, 0xc04d, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x15a0,
-+      0x2078, 0x080c, 0xc15b, 0x0580, 0x2400, 0x9c06, 0x0568, 0x6720,
-+      0x9786, 0x0006, 0x1548, 0x9786, 0x0007, 0x0530, 0x88ff, 0x1140,
-+      0x6010, 0x9206, 0x1508, 0x85ff, 0x0118, 0x6054, 0x9106, 0x11e0,
-+      0x00d6, 0x601c, 0xd084, 0x0150, 0x080c, 0xc381, 0x2001, 0x12c0,
-+      0x2004, 0x601a, 0x080c, 0x1509, 0x6023, 0x0007, 0x6014, 0x2068,
-+      0x080c, 0xa942, 0x0120, 0x0046, 0x080c, 0xc0e9, 0x004e, 0x00de,
-+      0x080c, 0x8f09, 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1118,
-+      0x2004, 0x9c02, 0x1210, 0x0804, 0xc000, 0x9006, 0x012e, 0x002e,
-+      0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5,
-+      0x0001, 0x0ca0, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001,
-+      0x2c20, 0x2019, 0x0002, 0x6210, 0x0096, 0x904e, 0x080c, 0x8968,
-+      0x009e, 0x008e, 0x903e, 0x080c, 0x8a0a, 0x080c, 0xbff1, 0x005e,
-+      0x007e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
-+      0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,
-+      0x5608, 0x1198, 0x2c10, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029,
-+      0x0001, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e, 0x903e,
-+      0x080c, 0x8a0a, 0x080c, 0xbff1, 0x005e, 0x003e, 0x001e, 0x8108,
-+      0x1f04, 0xc07d, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e,
-+      0x0005, 0x0076, 0x0056, 0x6210, 0x0086, 0x9046, 0x2029, 0x0001,
-+      0x2019, 0x0048, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e,
-+      0x903e, 0x080c, 0x8a0a, 0x2c20, 0x080c, 0xbff1, 0x005e, 0x007e,
-+      0x0005, 0x0026, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
-+      0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x5608, 0x11a8,
-+      0x2c10, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c,
-+      0xc363, 0x004e, 0x0096, 0x904e, 0x080c, 0x8968, 0x009e, 0x008e,
-+      0x903e, 0x080c, 0x8a0a, 0x080c, 0xbff1, 0x003e, 0x001e, 0x8108,
-+      0x1f04, 0xc0c3, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x002e,
-+      0x0005, 0x0016, 0x00f6, 0x9d82, 0x45c0, 0x0280, 0x9d82, 0xffff,
-+      0x1268, 0x6800, 0x907d, 0x0138, 0x6803, 0x0000, 0x6b82, 0x080c,
-+      0x5b76, 0x2f68, 0x0cb0, 0x6b82, 0x080c, 0x5b76, 0x00fe, 0x001e,
-+      0x0005, 0x00e6, 0x0046, 0x0036, 0x2061, 0x15c0, 0x9005, 0x1138,
-+      0x2071, 0x1100, 0x744c, 0x706c, 0x8001, 0x9402, 0x12d8, 0x2100,
-+      0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206,
-+      0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0,
-+      0x0018, 0x2001, 0x1118, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085,
-+      0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x00d6,
-+      0x0006, 0x080c, 0x0eb6, 0x000e, 0x090c, 0x0d7e, 0x6867, 0x010d,
-+      0x688e, 0x0026, 0x2010, 0x080c, 0xa932, 0x2001, 0x0000, 0x0120,
-+      0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0x687a, 0x6986, 0x6c76,
-+      0x687f, 0x0000, 0x2001, 0x12c8, 0x2004, 0x6882, 0x9006, 0x68e2,
-+      0x6802, 0x686a, 0x688a, 0x0126, 0x2091, 0x8000, 0x080c, 0x5b76,
-+      0x012e, 0x00de, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786,
-+      0x0001, 0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110,
-+      0x9085, 0x0001, 0x0005, 0x00e6, 0x6010, 0x2070, 0x70a0, 0x9206,
-+      0x00ee, 0x0005, 0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007,
-+      0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003,
-+      0x000b, 0x6023, 0x0005, 0x2001, 0x12c1, 0x2004, 0x601a, 0x080c,
-+      0x756e, 0x080c, 0x7aa4, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005,
-+      0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xac39, 0x0030,
-+      0x080c, 0xc381, 0x080c, 0x7384, 0x080c, 0x8ed9, 0x0005, 0x9280,
-+      0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xc1b3, 0xc1b3, 0xc1b3,
-+      0xc1b5, 0xc1b3, 0xc1b5, 0xc1b5, 0xc1b3, 0xc1b5, 0xc1b3, 0xc1b3,
-+      0xc1b3, 0xc1b3, 0xc1b3, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,
-+      0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xc1cc, 0xc1cc,
-+      0xc1cc, 0xc1cc, 0xc1cc, 0xc1cc, 0xc1d9, 0xc1cc, 0xc1cc, 0xc1cc,
-+      0xc1cc, 0xc1cc, 0xc1cc, 0xc1cc, 0x6007, 0x003b, 0x602f, 0x0009,
-+      0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4,
-+      0x0005, 0x00c6, 0x2260, 0x080c, 0xc381, 0x6043, 0x0000, 0x6024,
-+      0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268,
-+      0x9186, 0x0007, 0x1904, 0xc234, 0x6814, 0x9005, 0x0138, 0x9080,
-+      0x001f, 0x2004, 0xd0fc, 0x1110, 0x00de, 0x08b0, 0x6007, 0x003a,
-+      0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00c6, 0x2d60,
-+      0x6100, 0x9186, 0x0002, 0x1904, 0xc2b2, 0x6014, 0x9005, 0x1138,
-+      0x6000, 0x9086, 0x0007, 0x190c, 0x0d7e, 0x0804, 0xc2b2, 0x908c,
-+      0xf000, 0x1130, 0x0028, 0x2068, 0x6800, 0x9005, 0x1de0, 0x2d00,
-+      0x9080, 0x001f, 0x2004, 0x9084, 0x0003, 0x9086, 0x0002, 0x1180,
-+      0x6014, 0x2068, 0x687c, 0xc0dc, 0xc0f4, 0x687e, 0x6880, 0xc0f4,
-+      0xc0fc, 0x6882, 0x2009, 0x0043, 0x080c, 0xbb7b, 0x0804, 0xc2b2,
-+      0x2009, 0x0041, 0x0804, 0xc2ac, 0x9186, 0x0005, 0x15b8, 0x6814,
-+      0x9080, 0x001f, 0x2004, 0xd0bc, 0x1118, 0x00de, 0x0804, 0xc1cc,
-+      0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0d7e, 0x0804, 0xc1ec, 0x6007,
-+      0x003a, 0x6003, 0x0001, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x00c6,
-+      0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904,
-+      0xc2b2, 0x6814, 0x9080, 0x001f, 0x200c, 0xc1f4, 0xc1dc, 0x2102,
-+      0x8000, 0x200c, 0xc1f4, 0xc1fc, 0xc1bc, 0x2102, 0x00f6, 0x2c78,
-+      0x080c, 0x137e, 0x00fe, 0x2009, 0x0042, 0x04f0, 0x0036, 0x00d6,
-+      0x00d6, 0x080c, 0x0eb6, 0x003e, 0x090c, 0x0d7e, 0x6867, 0x010d,
-+      0x9006, 0x6802, 0x686a, 0x688a, 0x6b8e, 0x6887, 0x0045, 0x2c00,
-+      0x6892, 0x6038, 0x68a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010,
-+      0x9080, 0x0028, 0x2004, 0x9084, 0x00ff, 0x8007, 0x6354, 0x6b7a,
-+      0x6876, 0x9006, 0x687e, 0x6882, 0x6d9a, 0x6e96, 0x689f, 0x0001,
-+      0x080c, 0x5b76, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xbd23,
-+      0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a,
-+      0x6342, 0x00de, 0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007,
-+      0x080c, 0xbb7b, 0x00ce, 0x00de, 0x0005, 0x9186, 0x0013, 0x1128,
-+      0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178,
-+      0x080c, 0x79ab, 0x0036, 0x00d6, 0x6014, 0x2068, 0x2019, 0x0004,
-+      0x080c, 0xc0e9, 0x00de, 0x003e, 0x080c, 0x7aa4, 0x0005, 0x9186,
-+      0x0014, 0x0d70, 0x080c, 0x8f6e, 0x0005, 0xc2e4, 0xc2e2, 0xc2e2,
-+      0xc2e2, 0xc2e2, 0xc2e2, 0xc2e4, 0xc2e2, 0xc2e2, 0xc2e2, 0xc2e2,
-+      0xc2e2, 0xc2e2, 0x080c, 0x0d7e, 0x080c, 0x79ab, 0x6003, 0x000c,
-+      0x080c, 0x7aa4, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085,
-+      0x0208, 0x001a, 0x080c, 0x8f6e, 0x0005, 0xc302, 0xc302, 0xc302,
-+      0xc302, 0xc304, 0xc324, 0xc302, 0xc302, 0xc302, 0xc302, 0xc302,
-+      0xc302, 0xc302, 0x080c, 0x0d7e, 0x00d6, 0x2c68, 0x080c, 0x8e83,
-+      0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c,
-+      0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910,
-+      0x6112, 0x6023, 0x0004, 0x080c, 0x756e, 0x080c, 0x7aa4, 0x2d60,
-+      0x080c, 0x8ed9, 0x00de, 0x0005, 0x080c, 0x8ed9, 0x0005, 0x00e6,
-+      0x6010, 0x2070, 0x7000, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1172,
-+      0x210c, 0xd1ec, 0x0578, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026,
-+      0xd0cc, 0x0150, 0x2001, 0x12c2, 0x2004, 0x6042, 0x2009, 0x1172,
-+      0x210c, 0xd1f4, 0x11e8, 0x0080, 0x2009, 0x1172, 0x210c, 0xd1f4,
-+      0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00a0, 0x2001, 0x12c2,
-+      0x200c, 0x8103, 0x9100, 0x6042, 0x6010, 0x9088, 0x002b, 0x2104,
-+      0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000,
-+      0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6154, 0x92f0,
-+      0x002b, 0x2e04, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6054,
-+      0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x7384, 0x080c, 0x8ed9,
-+      0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e,
-+      0x0005, 0x00d6, 0x6010, 0x90e8, 0x002b, 0x2d04, 0x9005, 0x0140,
-+      0x9c06, 0x0120, 0x2d04, 0x90e8, 0x0003, 0x0cb8, 0x600c, 0x206a,
-+      0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x112a, 0x2204,
-+      0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x9636, 0x11d8, 0x8318,
-+      0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11a0, 0x2011, 0x0270,
-+      0x20a9, 0x0004, 0x6010, 0x9098, 0x000a, 0x080c, 0x9d60, 0x1150,
-+      0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x9098, 0x0006, 0x080c,
-+      0x9d60, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071,
-+      0x1100, 0x080c, 0x5092, 0x080c, 0x2679, 0x00ee, 0x0005, 0x00e6,
-+      0x6010, 0x2070, 0x7000, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005,
-+      0x6880, 0xc0e5, 0x6882, 0x0005, 0x00e6, 0x00c6, 0x0076, 0x0066,
-+      0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029,
-+      0x130d, 0x252c, 0x2021, 0x1313, 0x2424, 0x2061, 0x15c0, 0x2071,
-+      0x1100, 0x764c, 0x706c, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001,
-+      0x0118, 0x9786, 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400,
-+      0x9c06, 0x01d0, 0x080c, 0xc15b, 0x01b8, 0x080c, 0xc16b, 0x11a0,
-+      0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1509, 0x001e,
-+      0x080c, 0xab1d, 0x1110, 0x080c, 0x2886, 0x080c, 0xab2e, 0x1110,
-+      0x080c, 0x97dc, 0x080c, 0x8f09, 0x9ce0, 0x0018, 0x2001, 0x1118,
-+      0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e,
-+      0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006,
-+      0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0x1140, 0xd5a4, 0x0118,
-+      0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032,
-+      0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, 0x908e, 0x0003, 0x0148,
-+      0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x2071, 0x114a,
-+      0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
-+      0x00e6, 0x2091, 0x8000, 0x2071, 0x1142, 0x0021, 0x00ee, 0x000e,
-+      0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04,
-+      0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0x1140, 0x0c99, 0x00ee,
-+      0x0005, 0x00e6, 0x2071, 0x1144, 0x0c69, 0x00ee, 0x0005, 0x0126,
-+      0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1140, 0x7044, 0x8000,
-+      0x7046, 0x00ee, 0x000e, 0x012e, 0x0005, 0x8064, 0x0008, 0x0010,
-+      0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4404, 0x0003, 0x8060,
-+      0x0000, 0x0400, 0x0000, 0x580a, 0x0003, 0x7933, 0x0003, 0x5089,
-+      0x0003, 0x4c07, 0x000b, 0xbac0, 0x0009, 0x0082, 0x0008, 0x0c07,
-+      0x0003, 0x15fe, 0x0008, 0x3407, 0x000b, 0x808c, 0x0008, 0x0001,
-+      0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002,
-+      0x0000, 0x0819, 0x000b, 0x4022, 0x0000, 0x001a, 0x0003, 0x4122,
-+      0x0008, 0x4447, 0x0002, 0x0de5, 0x000b, 0x0bfe, 0x0008, 0x11a0,
-+      0x0001, 0x11c7, 0x0003, 0x0ca0, 0x0001, 0x11c7, 0x0003, 0x9180,
-+      0x0001, 0x0004, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
-+      0x0008, 0x4426, 0x0003, 0x8080, 0x0001, 0x0004, 0x0000, 0x7f62,
-+      0x0008, 0x8066, 0x0000, 0x0411, 0x0000, 0x442c, 0x0003, 0x808c,
-+      0x0008, 0x0000, 0x0008, 0x03fe, 0x0000, 0x43e0, 0x0001, 0x0dc4,
-+      0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x02e0, 0x0001, 0x0dc4,
-+      0x000b, 0x9180, 0x0001, 0x0005, 0x0008, 0x7f62, 0x0008, 0x8066,
-+      0x0000, 0x0019, 0x0000, 0x443b, 0x0003, 0x0240, 0x0002, 0x09c1,
-+      0x0003, 0x00fe, 0x0000, 0x31c4, 0x000b, 0x112a, 0x0000, 0x002e,
-+      0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c07, 0x0003, 0x9780,
-+      0x0001, 0x000f, 0x0008, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0011,
-+      0x0008, 0x444a, 0x0003, 0x808c, 0x0008, 0x0002, 0x0000, 0x01fe,
-+      0x0008, 0x42e0, 0x0009, 0x0db7, 0x0003, 0x00fe, 0x0000, 0x43e0,
-+      0x0001, 0x0db7, 0x0003, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632,
-+      0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x7f62,
-+      0x0008, 0x8066, 0x0000, 0x1e0a, 0x0008, 0x445c, 0x000b, 0x808a,
-+      0x0008, 0x0003, 0x0008, 0x9a80, 0x0009, 0x0002, 0x0000, 0x7f62,
-+      0x0008, 0x5862, 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x4465,
-+      0x000b, 0x5866, 0x0003, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074,
-+      0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x3007, 0x0003, 0x006f,
-+      0x0004, 0x0007, 0x0003, 0x1cfe, 0x0008, 0x1b80, 0x0009, 0x7f62,
-+      0x0008, 0x8066, 0x0000, 0x0231, 0x0008, 0x4474, 0x000b, 0x5875,
-+      0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, 0x0002, 0x0c7f,
-+      0x0003, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a,
-+      0x0008, 0x0083, 0x0003, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548,
-+      0x0008, 0x064a, 0x0000, 0x5883, 0x000b, 0x8054, 0x0008, 0x0001,
-+      0x0000, 0x8074, 0x0000, 0x2020, 0x0008, 0x4000, 0x000f, 0x3a40,
-+      0x000a, 0x0c0a, 0x000b, 0x2b24, 0x0008, 0x2b24, 0x0008, 0x588d,
-+      0x0003, 0x8054, 0x0008, 0x0002, 0x0000, 0x1242, 0x0002, 0x08d7,
-+      0x0003, 0x3a45, 0x000a, 0x08c8, 0x000b, 0x1e10, 0x000a, 0x7f3c,
-+      0x0000, 0x08c5, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60,
-+      0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x449d,
-+      0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x00fe, 0x0000, 0x34c2,
-+      0x000b, 0x1cfe, 0x0008, 0xff80, 0x0009, 0x0001, 0x0000, 0x7f62,
-+      0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x44a8, 0x0003, 0x00fe,
-+      0x0000, 0x31a0, 0x0003, 0x0038, 0x0000, 0x00fe, 0x0000, 0xff80,
-+      0x0009, 0x0019, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
-+      0x0008, 0x44b2, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e,
-+      0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62,
-+      0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x44bc, 0x0003, 0x8060,
-+      0x0000, 0x0400, 0x0000, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x0099,
-+      0x000b, 0x0036, 0x0008, 0x006f, 0x0004, 0x00d7, 0x000b, 0x8074,
-+      0x0000, 0x2000, 0x0000, 0x00d7, 0x000b, 0x3a44, 0x0002, 0x09ca,
-+      0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e,
-+      0x0000, 0x35a0, 0x000b, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700,
-+      0x0008, 0x2700, 0x0008, 0x00d0, 0x0009, 0x0ce5, 0x0003, 0x8074,
-+      0x0000, 0x4040, 0x0008, 0x58d7, 0x0003, 0x5089, 0x0003, 0x3a46,
-+      0x000a, 0x0ce5, 0x0003, 0x3a47, 0x0002, 0x08e2, 0x0003, 0x8054,
-+      0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x0126,
-+      0x000b, 0x92c0, 0x0009, 0x0f88, 0x0008, 0x0807, 0x000b, 0x9a80,
-+      0x0009, 0x0002, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x362a,
-+      0x0000, 0x44ea, 0x0003, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102,
-+      0x0000, 0x2102, 0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306,
-+      0x0000, 0x2306, 0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a,
-+      0x0000, 0x250a, 0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e,
-+      0x0000, 0x270e, 0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912,
-+      0x0000, 0x2912, 0x0000, 0x9a80, 0x0009, 0x0007, 0x0000, 0x7f62,
-+      0x0008, 0x8066, 0x0000, 0x0052, 0x0000, 0x4504, 0x000b, 0x92c0,
-+      0x0009, 0x0780, 0x0008, 0x0db1, 0x0003, 0x124b, 0x0002, 0x090d,
-+      0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002, 0x09a0, 0x000b, 0x3a46,
-+      0x000a, 0x0d1a, 0x000b, 0x590f, 0x000b, 0x8054, 0x0008, 0x0004,
-+      0x0000, 0x1243, 0x000a, 0x0924, 0x000b, 0x8010, 0x0008, 0x000d,
-+      0x0000, 0x0191, 0x0004, 0x1810, 0x0000, 0x0191, 0x0004, 0x0124,
-+      0x0003, 0x194d, 0x000a, 0x091e, 0x000b, 0x1243, 0x000a, 0x09a7,
-+      0x0003, 0x591e, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x0188,
-+      0x000c, 0x1810, 0x0000, 0x0191, 0x0004, 0x8074, 0x0000, 0xf000,
-+      0x0008, 0x3a42, 0x0002, 0x0d2c, 0x000b, 0x15fe, 0x0008, 0x3445,
-+      0x000b, 0x0d30, 0x0000, 0x0007, 0x0003, 0x0d30, 0x0000, 0x8074,
-+      0x0000, 0x0501, 0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x0191,
-+      0x0004, 0x0007, 0x0003, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0d43,
-+      0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0940, 0x0003, 0x15fe,
-+      0x0008, 0x3ce0, 0x0009, 0x0940, 0x0003, 0x0183, 0x0004, 0x8076,
-+      0x0008, 0x0040, 0x0000, 0x0180, 0x000b, 0x8076, 0x0008, 0x0041,
-+      0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0d48,
-+      0x0003, 0x3c1e, 0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0037,
-+      0x0000, 0x0d65, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0d40,
-+      0x000b, 0x1afe, 0x0008, 0xff80, 0x0009, 0x000d, 0x0000, 0x7f62,
-+      0x0008, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706,
-+      0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a,
-+      0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x455c, 0x0003, 0x0188,
-+      0x000c, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000,
-+      0x0008, 0x8072, 0x0000, 0x8000, 0x0000, 0x0126, 0x000b, 0xbbe0,
-+      0x0009, 0x0038, 0x0000, 0x0d77, 0x0003, 0x18fe, 0x0000, 0x3ce0,
-+      0x0009, 0x0974, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0d3c,
-+      0x0003, 0x0183, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072,
-+      0x0000, 0x8000, 0x0000, 0x01c1, 0x000b, 0x8076, 0x0008, 0x0042,
-+      0x0008, 0x0180, 0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0d80,
-+      0x000b, 0x3a44, 0x0002, 0x0c09, 0x000b, 0x8072, 0x0000, 0x8000,
-+      0x0000, 0x8000, 0x000f, 0x0007, 0x0003, 0x8072, 0x0000, 0x8000,
-+      0x0000, 0x0007, 0x0003, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80,
-+      0x0001, 0x0007, 0x0000, 0x018c, 0x000b, 0x1930, 0x000a, 0x7f00,
-+      0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x7f62, 0x0008, 0x8066,
-+      0x0000, 0x000a, 0x0008, 0x458f, 0x000b, 0x4000, 0x000f, 0x2191,
-+      0x0003, 0x0870, 0x0008, 0x4000, 0x000f, 0xbac0, 0x0009, 0x0090,
-+      0x0008, 0x099a, 0x000b, 0x8074, 0x0000, 0x0706, 0x0000, 0x019c,
-+      0x0003, 0x8074, 0x0000, 0x0703, 0x0000, 0x4000, 0x000f, 0x8010,
-+      0x0008, 0x0008, 0x0000, 0x01cf, 0x0003, 0x0188, 0x000c, 0x8010,
-+      0x0008, 0x0007, 0x0000, 0x0191, 0x0004, 0x1810, 0x0000, 0x0191,
-+      0x0004, 0x01d9, 0x000b, 0x0188, 0x000c, 0x8010, 0x0008, 0x001b,
-+      0x0008, 0x0191, 0x0004, 0x1810, 0x0000, 0x0191, 0x0004, 0x8074,
-+      0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x0007, 0x0003, 0x8010,
-+      0x0008, 0x0009, 0x0008, 0x01cf, 0x0003, 0x8010, 0x0008, 0x0005,
-+      0x0008, 0x01cf, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
-+      0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x0853, 0x0003, 0x3a44,
-+      0x0002, 0x0c07, 0x0003, 0x0d2a, 0x0008, 0x01cf, 0x0003, 0x8010,
-+      0x0008, 0x0003, 0x0008, 0x01d1, 0x0003, 0x8010, 0x0008, 0x000b,
-+      0x0000, 0x01d1, 0x0003, 0x8010, 0x0008, 0x0002, 0x0000, 0x01d1,
-+      0x0003, 0x3a47, 0x0002, 0x0cd7, 0x000b, 0x8010, 0x0008, 0x0006,
-+      0x0008, 0x01d1, 0x0003, 0x8074, 0x0000, 0xf000, 0x0008, 0x0191,
-+      0x0004, 0x0194, 0x0004, 0x3a40, 0x000a, 0x0807, 0x000b, 0x8010,
-+      0x0008, 0x000c, 0x0008, 0x0191, 0x0004, 0x0007, 0x0003, 0x8074,
-+      0x0000, 0xf080, 0x0000, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
-+      0x0002, 0x09e2, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, 0x0007,
-+      0x0003, 0x8054, 0x0008, 0x0009, 0x0008, 0x0007, 0x0003, 0x3a44,
-+      0x0002, 0x0c07, 0x0003, 0x01c4, 0x000b, 0xde59, 0xf666, 0x0001,
-+      0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100,
-+      0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xfe91
-+};
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp.c  2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,6714 @@
-+/* @(#)isp.c 1.86 */
-+/*
-+ * Machine and OS Independent (well, as best as possible)
-+ * code for the Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * Feral Software
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice immediately at the beginning of the file, without modification,
-+ *    this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * Inspiration and ideas about this driver are from Erik Moe's Linux driver
-+ * (qlogicisp.c) and Dave Miller's SBus version of same (qlogicisp.c). Some
-+ * ideas dredged from the Solaris driver.
-+ */
-+
-+/*
-+ * Include header file appropriate for platform we're building on.
-+ */
-+
-+#ifdef        __NetBSD__
-+#include <dev/ic/isp_netbsd.h>
-+#endif
-+#ifdef        __FreeBSD__
-+#include <dev/isp/isp_freebsd.h>
-+#endif
-+#ifdef        __OpenBSD__
-+#include <dev/ic/isp_openbsd.h>
-+#endif
-+#ifdef        __linux__
-+#include "isp_linux.h"
-+#endif
-+#ifdef        __svr4__
-+#include "isp_solaris.h"
-+#endif
-+
-+/*
-+ * General defines
-+ */
-+
-+#define       MBOX_DELAY_COUNT        1000000 / 100
-+
-+/*
-+ * Local static data
-+ */
-+static const char portshift[] =
-+    "Target %d Loop ID 0x%x (Port 0x%x) => Loop 0x%x (Port 0x%x)";
-+static const char portdup[] =
-+    "Target %d duplicates Target %d- killing off both";
-+static const char retained[] =
-+    "Retaining Loop ID 0x%x for Target %d (Port 0x%x)";
-+static const char lretained[] =
-+    "Retained login of Target %d (Loop ID 0x%x) Port 0x%x";
-+static const char plogout[] =
-+    "Logging out Target %d at Loop ID 0x%x (Port 0x%x)";
-+static const char plogierr[] =
-+    "Command Error in PLOGI for Port 0x%x (0x%x)";
-+static const char nopdb[] =
-+    "Could not get PDB for Device @ Port 0x%x";
-+static const char pdbmfail1[] =
-+    "PDB Loop ID info for Device @ Port 0x%x does not match up (0x%x)";
-+static const char pdbmfail2[] =
-+    "PDB Port info for Device @ Port 0x%x does not match up (0x%x)";
-+static const char ldumped[] =
-+    "Target %d (Loop ID 0x%x) Port 0x%x dumped after login info mismatch";
-+static const char notresp[] =
-+  "Not RESPONSE in RESPONSE Queue (type 0x%x) @ idx %d (next %d) nlooked %d";
-+static const char xact1[] =
-+    "HBA attempted queued transaction with disconnect not set for %d.%d.%d";
-+static const char xact2[] =
-+    "HBA attempted queued transaction to target routine %d on target %d bus %d";
-+static const char xact3[] =
-+    "HBA attempted queued cmd for %d.%d.%d when queueing disabled";
-+static const char pskip[] =
-+    "SCSI phase skipped for target %d.%d.%d";
-+static const char topology[] =
-+    "Loop ID %d, AL_PA 0x%x, Port ID 0x%x, Loop State 0x%x, Topology '%s'";
-+static const char swrej[] =
-+    "Fabric Nameserver rejected %s (Reason=0x%x Expl=0x%x) for Port ID 0x%x";
-+static const char finmsg[] =
-+    "(%d.%d.%d): FIN dl%d resid %d STS 0x%x SKEY %c XS_ERR=0x%x";
-+static const char sc0[] =
-+    "%s CHAN %d FTHRSH %d IID %d RESETD %d RETRYC %d RETRYD %d ASD 0x%x";
-+static const char sc1[] =
-+    "%s RAAN 0x%x DLAN 0x%x DDMAB 0x%x CDMAB 0x%x SELTIME %d MQD %d";
-+static const char sc2[] = "%s CHAN %d TGT %d FLAGS 0x%x 0x%x/0x%x";
-+static const char sc3[] = "Generated";
-+static const char sc4[] = "NVRAM";
-+static const char bun[] =
-+    "bad underrun for %d.%d (count %d, resid %d, status %s)";
-+
-+/*
-+ * Local function prototypes.
-+ */
-+static int isp_parse_async(struct ispsoftc *, u_int16_t);
-+static int isp_handle_other_response(struct ispsoftc *, int, isphdr_t *,
-+    u_int16_t *);
-+static void
-+isp_parse_status(struct ispsoftc *, ispstatusreq_t *, XS_T *);
-+static void isp_fastpost_complete(struct ispsoftc *, u_int16_t);
-+static int isp_mbox_continue(struct ispsoftc *);
-+static void isp_scsi_init(struct ispsoftc *);
-+static void isp_scsi_channel_init(struct ispsoftc *, int);
-+static void isp_fibre_init(struct ispsoftc *);
-+static void isp_mark_getpdb_all(struct ispsoftc *);
-+static int isp_getmap(struct ispsoftc *, fcpos_map_t *);
-+static int isp_getpdb(struct ispsoftc *, int, isp_pdb_t *);
-+static u_int64_t isp_get_portname(struct ispsoftc *, int, int);
-+static int isp_fclink_test(struct ispsoftc *, int);
-+static char *isp2100_fw_statename(int);
-+static int isp_pdb_sync(struct ispsoftc *);
-+static int isp_scan_loop(struct ispsoftc *);
-+static int isp_fabric_mbox_cmd(struct ispsoftc *, mbreg_t *);
-+static int isp_scan_fabric(struct ispsoftc *, int);
-+static void isp_register_fc4_type(struct ispsoftc *);
-+static void isp_fw_state(struct ispsoftc *);
-+static void isp_mboxcmd_qnw(struct ispsoftc *, mbreg_t *, int);
-+static void isp_mboxcmd(struct ispsoftc *, mbreg_t *, int);
-+
-+static void isp_update(struct ispsoftc *);
-+static void isp_update_bus(struct ispsoftc *, int);
-+static void isp_setdfltparm(struct ispsoftc *, int);
-+static int isp_read_nvram(struct ispsoftc *);
-+static void isp_rdnvram_word(struct ispsoftc *, int, u_int16_t *);
-+static void isp_parse_nvram_1020(struct ispsoftc *, u_int8_t *);
-+static void isp_parse_nvram_1080(struct ispsoftc *, int, u_int8_t *);
-+static void isp_parse_nvram_12160(struct ispsoftc *, int, u_int8_t *);
-+static void isp_parse_nvram_2100(struct ispsoftc *, u_int8_t *);
-+
-+/*
-+ * Reset Hardware.
-+ *
-+ * Hit the chip over the head, download new f/w if available and set it running.
-+ *
-+ * Locking done elsewhere.
-+ */
-+
-+void
-+isp_reset(struct ispsoftc *isp)
-+{
-+      mbreg_t mbs;
-+      u_int16_t code_org;
-+      int loops, i, dodnld = 1;
-+      char *btype = "????";
-+
-+      isp->isp_state = ISP_NILSTATE;
-+
-+      /*
-+       * Basic types (SCSI, FibreChannel and PCI or SBus)
-+       * have been set in the MD code. We figure out more
-+       * here. Possibly more refined types based upon PCI
-+       * identification. Chip revision has been gathered.
-+       *
-+       * After we've fired this chip up, zero out the conf1 register
-+       * for SCSI adapters and do other settings for the 2100.
-+       */
-+
-+      /*
-+       * Get the current running firmware revision out of the
-+       * chip before we hit it over the head (if this is our
-+       * first time through). Note that we store this as the
-+       * 'ROM' firmware revision- which it may not be. In any
-+       * case, we don't really use this yet, but we may in
-+       * the future.
-+       */
-+      if (isp->isp_touched == 0) {
-+              /*
-+               * First see whether or not we're sitting in the ISP PROM.
-+               * If we've just been reset, we'll have the string "ISP   "
-+               * spread through outgoing mailbox registers 1-3. We do
-+               * this for PCI cards because otherwise we really don't
-+               * know what state the card is in and we could hang if
-+               * we try this command otherwise.
-+               *
-+               * For SBus cards, we just do this because they almost
-+               * certainly will be running firmware by now.
-+               */
-+              if (ISP_READ(isp, OUTMAILBOX1) != 0x4953 ||
-+                  ISP_READ(isp, OUTMAILBOX2) != 0x5020 ||
-+                  ISP_READ(isp, OUTMAILBOX3) != 0x2020) {
-+                      /*
-+                       * Just in case it was paused...
-+                       */
-+                      ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
-+                      mbs.param[0] = MBOX_ABOUT_FIRMWARE;
-+                      isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+                      if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+                              isp->isp_romfw_rev[0] = mbs.param[1];
-+                              isp->isp_romfw_rev[1] = mbs.param[2];
-+                              isp->isp_romfw_rev[2] = mbs.param[3];
-+                      }
-+              }
-+              isp->isp_touched = 1;
-+      }
-+
-+      DISABLE_INTS(isp);
-+
-+      /*
-+       * Set up default request/response queue in-pointer/out-pointer
-+       * register indices.
-+       */
-+      if (IS_23XX(isp)) {
-+              isp->isp_rqstinrp = BIU_REQINP;
-+              isp->isp_rqstoutrp = BIU_REQOUTP;
-+              isp->isp_respinrp = BIU_RSPINP;
-+              isp->isp_respoutrp = BIU_RSPOUTP;
-+      } else {
-+              isp->isp_rqstinrp = INMAILBOX4;
-+              isp->isp_rqstoutrp = OUTMAILBOX4;
-+              isp->isp_respinrp = OUTMAILBOX5;
-+              isp->isp_respoutrp = INMAILBOX5;
-+      }
-+
-+      /*
-+       * Put the board into PAUSE mode (so we can read the SXP registers
-+       * or write FPM/FBM registers).
-+       */
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+
-+      if (IS_FC(isp)) {
-+              switch (isp->isp_type) {
-+              case ISP_HA_FC_2100:
-+                      btype = "2100";
-+                      break;
-+              case ISP_HA_FC_2200:
-+                      btype = "2200";
-+                      break;
-+              case ISP_HA_FC_2300:
-+                      btype = "2300";
-+                      break;
-+              case ISP_HA_FC_2312:
-+                      btype = "2312";
-+                      break;
-+              default:
-+                      break;
-+              }
-+              /*
-+               * While we're paused, reset the FPM module and FBM fifos.
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
-+              ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
-+              ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
-+              ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
-+              ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
-+      } else if (IS_1240(isp)) {
-+              sdparam *sdp = isp->isp_param;
-+              btype = "1240";
-+              isp->isp_clock = 60;
-+              sdp->isp_ultramode = 1;
-+              sdp++;
-+              sdp->isp_ultramode = 1;
-+              /*
-+               * XXX: Should probably do some bus sensing.
-+               */
-+      } else if (IS_ULTRA2(isp)) {
-+              static const char m[] = "bus %d is in %s Mode";
-+              u_int16_t l;
-+              sdparam *sdp = isp->isp_param;
-+
-+              isp->isp_clock = 100;
-+
-+              if (IS_1280(isp))
-+                      btype = "1280";
-+              else if (IS_1080(isp))
-+                      btype = "1080";
-+              else if (IS_10160(isp))
-+                      btype = "10160";
-+              else if (IS_12160(isp))
-+                      btype = "12160";
-+              else
-+                      btype = "<UNKLVD>";
-+
-+              l = ISP_READ(isp, SXP_PINS_DIFF) & ISP1080_MODE_MASK;
-+              switch (l) {
-+              case ISP1080_LVD_MODE:
-+                      sdp->isp_lvdmode = 1;
-+                      isp_prt(isp, ISP_LOGCONFIG, m, 0, "LVD");
-+                      break;
-+              case ISP1080_HVD_MODE:
-+                      sdp->isp_diffmode = 1;
-+                      isp_prt(isp, ISP_LOGCONFIG, m, 0, "Differential");
-+                      break;
-+              case ISP1080_SE_MODE:
-+                      sdp->isp_ultramode = 1;
-+                      isp_prt(isp, ISP_LOGCONFIG, m, 0, "Single-Ended");
-+                      break;
-+              default:
-+                      isp_prt(isp, ISP_LOGERR,
-+                          "unknown mode on bus %d (0x%x)", 0, l);
-+                      break;
-+              }
-+
-+              if (IS_DUALBUS(isp)) {
-+                      sdp++;
-+                      l = ISP_READ(isp, SXP_PINS_DIFF|SXP_BANK1_SELECT);
-+                      l &= ISP1080_MODE_MASK;
-+                      switch(l) {
-+                      case ISP1080_LVD_MODE:
-+                              sdp->isp_lvdmode = 1;
-+                              isp_prt(isp, ISP_LOGCONFIG, m, 1, "LVD");
-+                              break;
-+                      case ISP1080_HVD_MODE:
-+                              sdp->isp_diffmode = 1;
-+                              isp_prt(isp, ISP_LOGCONFIG,
-+                                  m, 1, "Differential");
-+                              break;
-+                      case ISP1080_SE_MODE:
-+                              sdp->isp_ultramode = 1;
-+                              isp_prt(isp, ISP_LOGCONFIG,
-+                                  m, 1, "Single-Ended");
-+                              break;
-+                      default:
-+                              isp_prt(isp, ISP_LOGERR,
-+                                  "unknown mode on bus %d (0x%x)", 1, l);
-+                              break;
-+                      }
-+              }
-+      } else {
-+              sdparam *sdp = isp->isp_param;
-+              i = ISP_READ(isp, BIU_CONF0) & BIU_CONF0_HW_MASK;
-+              switch (i) {
-+              default:
-+                      isp_prt(isp, ISP_LOGALL, "Unknown Chip Type 0x%x", i);
-+                      /* FALLTHROUGH */
-+              case 1:
-+                      btype = "1020";
-+                      isp->isp_type = ISP_HA_SCSI_1020;
-+                      isp->isp_clock = 40;
-+                      break;
-+              case 2:
-+                      /*
-+                       * Some 1020A chips are Ultra Capable, but don't
-+                       * run the clock rate up for that unless told to
-+                       * do so by the Ultra Capable bits being set.
-+                       */
-+                      btype = "1020A";
-+                      isp->isp_type = ISP_HA_SCSI_1020A;
-+                      isp->isp_clock = 40;
-+                      break;
-+              case 3:
-+                      btype = "1040";
-+                      isp->isp_type = ISP_HA_SCSI_1040;
-+                      isp->isp_clock = 60;
-+                      break;
-+              case 4:
-+                      btype = "1040A";
-+                      isp->isp_type = ISP_HA_SCSI_1040A;
-+                      isp->isp_clock = 60;
-+                      break;
-+              case 5:
-+                      btype = "1040B";
-+                      isp->isp_type = ISP_HA_SCSI_1040B;
-+                      isp->isp_clock = 60;
-+                      break;
-+              case 6:
-+                      btype = "1040C";
-+                      isp->isp_type = ISP_HA_SCSI_1040C;
-+                      isp->isp_clock = 60;
-+                        break;
-+              }
-+              /*
-+               * Now, while we're at it, gather info about ultra
-+               * and/or differential mode.
-+               */
-+              if (ISP_READ(isp, SXP_PINS_DIFF) & SXP_PINS_DIFF_MODE) {
-+                      isp_prt(isp, ISP_LOGCONFIG, "Differential Mode");
-+                      sdp->isp_diffmode = 1;
-+              } else {
-+                      sdp->isp_diffmode = 0;
-+              }
-+              i = ISP_READ(isp, RISC_PSR);
-+              if (isp->isp_bustype == ISP_BT_SBUS) {
-+                      i &= RISC_PSR_SBUS_ULTRA;
-+              } else {
-+                      i &= RISC_PSR_PCI_ULTRA;
-+              }
-+              if (i != 0) {
-+                      isp_prt(isp, ISP_LOGCONFIG, "Ultra Mode Capable");
-+                      sdp->isp_ultramode = 1;
-+                      /*
-+                       * If we're in Ultra Mode, we have to be 60MHz clock-
-+                       * even for the SBus version.
-+                       */
-+                      isp->isp_clock = 60;
-+              } else {
-+                      sdp->isp_ultramode = 0;
-+                      /*
-+                       * Clock is known. Gronk.
-+                       */
-+              }
-+
-+              /*
-+               * Machine dependent clock (if set) overrides
-+               * our generic determinations.
-+               */
-+              if (isp->isp_mdvec->dv_clock) {
-+                      if (isp->isp_mdvec->dv_clock < isp->isp_clock) {
-+                              isp->isp_clock = isp->isp_mdvec->dv_clock;
-+                      }
-+              }
-+
-+      }
-+
-+      /*
-+       * Clear instrumentation
-+       */
-+      isp->isp_intcnt = isp->isp_intbogus = 0;
-+
-+      /*
-+       * Do MD specific pre initialization
-+       */
-+      ISP_RESET0(isp);
-+
-+again:
-+
-+      /*
-+       * Hit the chip over the head with hammer,
-+       * and give the ISP a chance to recover.
-+       */
-+
-+      if (IS_SCSI(isp)) {
-+              ISP_WRITE(isp, BIU_ICR, BIU_ICR_SOFT_RESET);
-+              /*
-+               * A slight delay...
-+               */
-+              USEC_DELAY(100);
-+
-+              /*
-+               * Clear data && control DMA engines.
-+               */
-+              ISP_WRITE(isp, CDMA_CONTROL,
-+                  DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT);
-+              ISP_WRITE(isp, DDMA_CONTROL,
-+                  DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT);
-+
-+
-+      } else {
-+              ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET);
-+              /*
-+               * A slight delay...
-+               */
-+              USEC_DELAY(100);
-+
-+              /*
-+               * Clear data && control DMA engines.
-+               */
-+              ISP_WRITE(isp, CDMA2100_CONTROL,
-+                      DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT);
-+              ISP_WRITE(isp, TDMA2100_CONTROL,
-+                      DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT);
-+              ISP_WRITE(isp, RDMA2100_CONTROL,
-+                      DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT);
-+      }
-+
-+      /*
-+       * Wait for ISP to be ready to go...
-+       */
-+      loops = MBOX_DELAY_COUNT;
-+      for (;;) {
-+              if (IS_SCSI(isp)) {
-+                      if (!(ISP_READ(isp, BIU_ICR) & BIU_ICR_SOFT_RESET))
-+                              break;
-+              } else {
-+                      if (!(ISP_READ(isp, BIU2100_CSR) & BIU2100_SOFT_RESET))
-+                              break;
-+              }
-+              USEC_DELAY(100);
-+              if (--loops < 0) {
-+                      ISP_DUMPREGS(isp, "chip reset timed out");
-+                      return;
-+              }
-+      }
-+
-+      /*
-+       * After we've fired this chip up, zero out the conf1 register
-+       * for SCSI adapters and other settings for the 2100.
-+       */
-+
-+      if (IS_SCSI(isp)) {
-+              ISP_WRITE(isp, BIU_CONF1, 0);
-+      } else {
-+              ISP_WRITE(isp, BIU2100_CSR, 0);
-+      }
-+
-+      /*
-+       * Reset RISC Processor
-+       */
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_RESET);
-+      USEC_DELAY(100);
-+      /* Clear semaphore register (just to be sure) */
-+      ISP_WRITE(isp, BIU_SEMA, 0);
-+
-+      /*
-+       * Establish some initial burst rate stuff.
-+       * (only for the 1XX0 boards). This really should
-+       * be done later after fetching from NVRAM.
-+       */
-+      if (IS_SCSI(isp)) {
-+              u_int16_t tmp = isp->isp_mdvec->dv_conf1;
-+              /*
-+               * Busted FIFO. Turn off all but burst enables.
-+               */
-+              if (isp->isp_type == ISP_HA_SCSI_1040A) {
-+                      tmp &= BIU_BURST_ENABLE;
-+              }
-+              ISP_SETBITS(isp, BIU_CONF1, tmp);
-+              if (tmp & BIU_BURST_ENABLE) {
-+                      ISP_SETBITS(isp, CDMA_CONF, DMA_ENABLE_BURST);
-+                      ISP_SETBITS(isp, DDMA_CONF, DMA_ENABLE_BURST);
-+              }
-+#ifdef        PTI_CARDS
-+              if (((sdparam *) isp->isp_param)->isp_ultramode) {
-+                      while (ISP_READ(isp, RISC_MTR) != 0x1313) {
-+                              ISP_WRITE(isp, RISC_MTR, 0x1313);
-+                              ISP_WRITE(isp, HCCR, HCCR_CMD_STEP);
-+                      }
-+              } else {
-+                      ISP_WRITE(isp, RISC_MTR, 0x1212);
-+              }
-+              /*
-+               * PTI specific register
-+               */
-+              ISP_WRITE(isp, RISC_EMB, DUAL_BANK)
-+#else
-+              ISP_WRITE(isp, RISC_MTR, 0x1212);
-+#endif
-+      } else {
-+              ISP_WRITE(isp, RISC_MTR2100, 0x1212);
-+              if (IS_2200(isp) || IS_23XX(isp)) {
-+                      ISP_WRITE(isp, HCCR, HCCR_2X00_DISABLE_PARITY_PAUSE);
-+              }
-+      }
-+
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE); /* release paused processor */
-+
-+      /*
-+       * Do MD specific post initialization
-+       */
-+      ISP_RESET1(isp);
-+
-+      /*
-+       * Wait for everything to finish firing up.
-+       *
-+       * Avoid doing this on the 2312 because you can generate a PCI
-+       * parity error (chip breakage).
-+       */
-+      if (IS_23XX(isp)) {
-+              USEC_DELAY(5);
-+      } else {
-+              loops = MBOX_DELAY_COUNT;
-+              while (ISP_READ(isp, OUTMAILBOX0) == MBOX_BUSY) {
-+                      USEC_DELAY(100);
-+                      if (--loops < 0) {
-+                              isp_prt(isp, ISP_LOGERR,
-+                                  "MBOX_BUSY never cleared on reset");
-+                              return;
-+                      }
-+              }
-+      }
-+
-+      /*
-+       * Up until this point we've done everything by just reading or
-+       * setting registers. From this point on we rely on at least *some*
-+       * kind of firmware running in the card.
-+       */
-+
-+      /*
-+       * Do some sanity checking.
-+       */
-+      mbs.param[0] = MBOX_NO_OP;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+
-+      if (IS_SCSI(isp)) {
-+              mbs.param[0] = MBOX_MAILBOX_REG_TEST;
-+              mbs.param[1] = 0xdead;
-+              mbs.param[2] = 0xbeef;
-+              mbs.param[3] = 0xffff;
-+              mbs.param[4] = 0x1111;
-+              mbs.param[5] = 0xa5a5;
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      return;
-+              }
-+              if (mbs.param[1] != 0xdead || mbs.param[2] != 0xbeef ||
-+                  mbs.param[3] != 0xffff || mbs.param[4] != 0x1111 ||
-+                  mbs.param[5] != 0xa5a5) {
-+                      isp_prt(isp, ISP_LOGERR,
-+                          "Register Test Failed (0x%x 0x%x 0x%x 0x%x 0x%x)",
-+                          mbs.param[1], mbs.param[2], mbs.param[3],
-+                          mbs.param[4], mbs.param[5]);
-+                      return;
-+              }
-+
-+      }
-+
-+      /*
-+       * Download new Firmware, unless requested not to do so.
-+       * This is made slightly trickier in some cases where the
-+       * firmware of the ROM revision is newer than the revision
-+       * compiled into the driver. So, where we used to compare
-+       * versions of our f/w and the ROM f/w, now we just see
-+       * whether we have f/w at all and whether a config flag
-+       * has disabled our download.
-+       */
-+      if ((isp->isp_mdvec->dv_ispfw == NULL) ||
-+          (isp->isp_confopts & ISP_CFG_NORELOAD)) {
-+              dodnld = 0;
-+      }
-+
-+      if (IS_23XX(isp))
-+              code_org = ISP_CODE_ORG_2300;
-+      else
-+              code_org = ISP_CODE_ORG;
-+
-+      if (dodnld) {
-+              isp->isp_mbxworkp = (void *) &isp->isp_mdvec->dv_ispfw[1];
-+              isp->isp_mbxwrk0 = isp->isp_mdvec->dv_ispfw[3] - 1;
-+              isp->isp_mbxwrk1 = code_org + 1;
-+              mbs.param[0] = MBOX_WRITE_RAM_WORD;
-+              mbs.param[1] = code_org;
-+              mbs.param[2] = isp->isp_mdvec->dv_ispfw[0];
-+              isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      isp_prt(isp, ISP_LOGERR,
-+                          "F/W download failed at word %d",
-+                          isp->isp_mbxwrk1 - code_org);
-+                      dodnld = 0;
-+                      goto again;
-+              }
-+              /*
-+               * Verify that it downloaded correctly.
-+               */
-+              mbs.param[0] = MBOX_VERIFY_CHECKSUM;
-+              mbs.param[1] = code_org;
-+              isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      isp_prt(isp, ISP_LOGERR, "Ram Checksum Failure");
-+                      return;
-+              }
-+              isp->isp_loaded_fw = 1;
-+      } else {
-+              isp->isp_loaded_fw = 0;
-+              isp_prt(isp, ISP_LOGDEBUG2, "skipping f/w download");
-+      }
-+
-+      /*
-+       * Now start it rolling.
-+       *
-+       * If we didn't actually download f/w,
-+       * we still need to (re)start it.
-+       */
-+
-+
-+      mbs.param[0] = MBOX_EXEC_FIRMWARE;
-+      mbs.param[1] = code_org;
-+      isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+      /*
-+       * Give it a chance to start.
-+       */
-+      USEC_DELAY(500);
-+
-+      if (IS_SCSI(isp)) {
-+              /*
-+               * Set CLOCK RATE, but only if asked to.
-+               */
-+              if (isp->isp_clock) {
-+                      mbs.param[0] = MBOX_SET_CLOCK_RATE;
-+                      mbs.param[1] = isp->isp_clock;
-+                      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+                      /* we will try not to care if this fails */
-+              }
-+      }
-+
-+      mbs.param[0] = MBOX_ABOUT_FIRMWARE;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+
-+      /*
-+       * The SBus firmware that we are using apparently does not return
-+       * major, minor, micro revisions in the mailbox registers, which
-+       * is really, really, annoying.
-+       */
-+      if (ISP_SBUS_SUPPORTED && isp->isp_bustype == ISP_BT_SBUS) {
-+              if (dodnld) {
-+#ifdef        ISP_TARGET_MODE
-+                      isp->isp_fwrev[0] = 7;
-+                      isp->isp_fwrev[1] = 55;
-+#else
-+                      isp->isp_fwrev[0] = 1;
-+                      isp->isp_fwrev[1] = 37;
-+#endif
-+                      isp->isp_fwrev[2] = 0;
-+              } 
-+      } else {
-+              isp->isp_fwrev[0] = mbs.param[1];
-+              isp->isp_fwrev[1] = mbs.param[2];
-+              isp->isp_fwrev[2] = mbs.param[3];
-+      }
-+      isp_prt(isp, ISP_LOGCONFIG,
-+          "Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d",
-+          btype, isp->isp_revision, dodnld? "loaded" : "resident",
-+          isp->isp_fwrev[0], isp->isp_fwrev[1], isp->isp_fwrev[2]);
-+
-+      if (IS_FC(isp)) {
-+              /*
-+               * We do not believe firmware attributes for 2100 code less
-+               * than 1.17.0, unless it's the firmware we specifically
-+               * are loading.
-+               *
-+               * Note that all 22XX and 23XX f/w is greater than 1.X.0.
-+               */
-+              if (!(ISP_FW_NEWER_THAN(isp, 1, 17, 0))) {
-+#ifdef        USE_SMALLER_2100_FIRMWARE
-+                      FCPARAM(isp)->isp_fwattr = ISP_FW_ATTR_SCCLUN;
-+#else
-+                      FCPARAM(isp)->isp_fwattr = 0;
-+#endif
-+              } else {
-+                      FCPARAM(isp)->isp_fwattr = mbs.param[6];
-+                      isp_prt(isp, ISP_LOGDEBUG0,
-+                          "Firmware Attributes = 0x%x", mbs.param[6]);
-+              }
-+              if (ISP_READ(isp, BIU2100_CSR) & BIU2100_PCI64) {
-+                      isp_prt(isp, ISP_LOGCONFIG,
-+                          "Installed in 64-Bit PCI slot");
-+              }
-+      }
-+
-+      if (isp->isp_romfw_rev[0] || isp->isp_romfw_rev[1] ||
-+          isp->isp_romfw_rev[2]) {
-+              isp_prt(isp, ISP_LOGCONFIG, "Last F/W revision was %d.%d.%d",
-+                  isp->isp_romfw_rev[0], isp->isp_romfw_rev[1],
-+                  isp->isp_romfw_rev[2]);
-+      }
-+
-+      mbs.param[0] = MBOX_GET_FIRMWARE_STATUS;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+      isp->isp_maxcmds = mbs.param[2];
-+      isp_prt(isp, ISP_LOGINFO,
-+          "%d max I/O commands supported", mbs.param[2]);
-+      isp_fw_state(isp);
-+
-+      /*
-+       * Set up DMA for the request and result mailboxes.
-+       */
-+      if (ISP_MBOXDMASETUP(isp) != 0) {
-+              isp_prt(isp, ISP_LOGERR, "Cannot setup DMA");
-+              return;
-+      }
-+      isp->isp_state = ISP_RESETSTATE;
-+
-+      /*
-+       * Okay- now that we have new firmware running, we now (re)set our
-+       * notion of how many luns we support. This is somewhat tricky because
-+       * if we haven't loaded firmware, we sometimes do not have an easy way
-+       * of knowing how many luns we support.
-+       *
-+       * Expanded lun firmware gives you 32 luns for SCSI cards and
-+       * 16384 luns for Fibre Channel cards.
-+       *
-+       * It turns out that even for QLogic 2100s with ROM 1.10 and above
-+       * we do get a firmware attributes word returned in mailbox register 6.
-+       *
-+       * Because the lun is in a different position in the Request Queue
-+       * Entry structure for Fibre Channel with expanded lun firmware, we
-+       * can only support one lun (lun zero) when we don't know what kind
-+       * of firmware we're running.
-+       */
-+      if (IS_SCSI(isp)) {
-+              if (dodnld) {
-+                      if (IS_ULTRA2(isp) || IS_ULTRA3(isp)) {
-+                              isp->isp_maxluns = 32;
-+                      } else {
-+                              isp->isp_maxluns = 8;
-+                      }
-+              } else {
-+                      isp->isp_maxluns = 8;
-+              }
-+      } else {
-+              if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+                      isp->isp_maxluns = 16384;
-+              } else {
-+                      isp->isp_maxluns = 16;
-+              }
-+      }
-+}
-+
-+/*
-+ * Initialize Parameters of Hardware to a known state.
-+ *
-+ * Locks are held before coming here.
-+ */
-+
-+void
-+isp_init(struct ispsoftc *isp)
-+{
-+      /*
-+       * Must do this first to get defaults established.
-+       */
-+      isp_setdfltparm(isp, 0);
-+      if (IS_DUALBUS(isp)) {
-+              isp_setdfltparm(isp, 1);
-+      }
-+      if (IS_FC(isp)) {
-+              isp_fibre_init(isp);
-+      } else {
-+              isp_scsi_init(isp);
-+      }
-+}
-+
-+static void
-+isp_scsi_init(struct ispsoftc *isp)
-+{
-+      sdparam *sdp_chan0, *sdp_chan1;
-+      mbreg_t mbs;
-+
-+      sdp_chan0 = isp->isp_param;
-+      sdp_chan1 = sdp_chan0;
-+      if (IS_DUALBUS(isp)) {
-+              sdp_chan1++;
-+      }
-+
-+      /*
-+       * If we have no role (neither target nor initiator), return.
-+       */
-+      if (isp->isp_role == ISP_ROLE_NONE) {
-+              return;
-+      }
-+
-+      /* First do overall per-card settings. */
-+
-+      /*
-+       * If we have fast memory timing enabled, turn it on.
-+       */
-+      if (sdp_chan0->isp_fast_mttr) {
-+              ISP_WRITE(isp, RISC_MTR, 0x1313);
-+      }
-+
-+      /*
-+       * Set Retry Delay and Count.
-+       * You set both channels at the same time.
-+       */
-+      mbs.param[0] = MBOX_SET_RETRY_COUNT;
-+      mbs.param[1] = sdp_chan0->isp_retry_count;
-+      mbs.param[2] = sdp_chan0->isp_retry_delay;
-+      mbs.param[6] = sdp_chan1->isp_retry_count;
-+      mbs.param[7] = sdp_chan1->isp_retry_delay;
-+
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+
-+      /*
-+       * Set ASYNC DATA SETUP time. This is very important.
-+       */
-+      mbs.param[0] = MBOX_SET_ASYNC_DATA_SETUP_TIME;
-+      mbs.param[1] = sdp_chan0->isp_async_data_setup;
-+      mbs.param[2] = sdp_chan1->isp_async_data_setup;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+
-+      /*
-+       * Set ACTIVE Negation State.
-+       */
-+      mbs.param[0] = MBOX_SET_ACT_NEG_STATE;
-+      mbs.param[1] =
-+          (sdp_chan0->isp_req_ack_active_neg << 4) |
-+          (sdp_chan0->isp_data_line_active_neg << 5);
-+      mbs.param[2] =
-+          (sdp_chan1->isp_req_ack_active_neg << 4) |
-+          (sdp_chan1->isp_data_line_active_neg << 5);
-+
-+      isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "failed to set active negation state (%d,%d), (%d,%d)",
-+                  sdp_chan0->isp_req_ack_active_neg,
-+                  sdp_chan0->isp_data_line_active_neg,
-+                  sdp_chan1->isp_req_ack_active_neg,
-+                  sdp_chan1->isp_data_line_active_neg);
-+              /*
-+               * But don't return.
-+               */
-+      }
-+
-+      /*
-+       * Set the Tag Aging limit
-+       */
-+      mbs.param[0] = MBOX_SET_TAG_AGE_LIMIT;
-+      mbs.param[1] = sdp_chan0->isp_tag_aging;
-+      mbs.param[2] = sdp_chan1->isp_tag_aging;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              isp_prt(isp, ISP_LOGERR, "failed to set tag age limit (%d,%d)",
-+                  sdp_chan0->isp_tag_aging, sdp_chan1->isp_tag_aging);
-+              return;
-+      }
-+
-+      /*
-+       * Set selection timeout.
-+       */
-+      mbs.param[0] = MBOX_SET_SELECT_TIMEOUT;
-+      mbs.param[1] = sdp_chan0->isp_selection_timeout;
-+      mbs.param[2] = sdp_chan1->isp_selection_timeout;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+
-+      /* now do per-channel settings */
-+      isp_scsi_channel_init(isp, 0);
-+      if (IS_DUALBUS(isp))
-+              isp_scsi_channel_init(isp, 1);
-+
-+      /*
-+       * Now enable request/response queues
-+       */
-+
-+      if (IS_ULTRA2(isp) || IS_1240(isp)) {
-+              mbs.param[0] = MBOX_INIT_RES_QUEUE_A64;
-+              mbs.param[1] = RESULT_QUEUE_LEN(isp);
-+              mbs.param[2] = DMA_WD1(isp->isp_result_dma);
-+              mbs.param[3] = DMA_WD0(isp->isp_result_dma);
-+              mbs.param[4] = 0;
-+              mbs.param[6] = DMA_WD3(isp->isp_result_dma);
-+              mbs.param[7] = DMA_WD2(isp->isp_result_dma);
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      return;
-+              }
-+              isp->isp_residx = mbs.param[5];
-+
-+              mbs.param[0] = MBOX_INIT_REQ_QUEUE_A64;
-+              mbs.param[1] = RQUEST_QUEUE_LEN(isp);
-+              mbs.param[2] = DMA_WD1(isp->isp_rquest_dma);
-+              mbs.param[3] = DMA_WD0(isp->isp_rquest_dma);
-+              mbs.param[5] = 0;
-+              mbs.param[6] = DMA_WD3(isp->isp_result_dma);
-+              mbs.param[7] = DMA_WD2(isp->isp_result_dma);
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      return;
-+              }
-+              isp->isp_reqidx = isp->isp_reqodx = mbs.param[4];
-+      } else {
-+              mbs.param[0] = MBOX_INIT_RES_QUEUE;
-+              mbs.param[1] = RESULT_QUEUE_LEN(isp);
-+              mbs.param[2] = DMA_WD1(isp->isp_result_dma);
-+              mbs.param[3] = DMA_WD0(isp->isp_result_dma);
-+              mbs.param[4] = 0;
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      return;
-+              }
-+              isp->isp_residx = mbs.param[5];
-+
-+              mbs.param[0] = MBOX_INIT_REQ_QUEUE;
-+              mbs.param[1] = RQUEST_QUEUE_LEN(isp);
-+              mbs.param[2] = DMA_WD1(isp->isp_rquest_dma);
-+              mbs.param[3] = DMA_WD0(isp->isp_rquest_dma);
-+              mbs.param[5] = 0;
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      return;
-+              }
-+              isp->isp_reqidx = isp->isp_reqodx = mbs.param[4];
-+      }
-+
-+      /*
-+       * Turn on Fast Posting, LVD transitions
-+       *
-+       * Ultra2 F/W always has had fast posting (and LVD transitions)
-+       *
-+       * Ultra and older (i.e., SBus) cards may not. It's just safer
-+       * to assume not for them.
-+       */
-+
-+      mbs.param[0] = MBOX_SET_FW_FEATURES;
-+      mbs.param[1] = 0;
-+      if (IS_ULTRA2(isp))
-+              mbs.param[1] |= FW_FEATURE_LVD_NOTIFY;
-+#ifndef       ISP_NO_RIO
-+      if (IS_ULTRA2(isp) || IS_1240(isp))
-+              mbs.param[1] |= FW_FEATURE_RIO_16BIT;
-+#else
-+#ifndef       ISP_NO_FASTPOST
-+      if (IS_ULTRA2(isp) || IS_1240(isp))
-+              mbs.param[1] |= FW_FEATURE_FAST_POST;
-+#endif
-+#endif
-+      if (mbs.param[1] != 0) {
-+              u_int16_t sfeat = mbs.param[1];
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+                      isp_prt(isp, ISP_LOGINFO,
-+                          "Enabled FW features (0x%x)", sfeat);
-+              }
-+      }
-+
-+      /*
-+       * Let the outer layers decide whether to issue a SCSI bus reset.
-+       */
-+      isp->isp_state = ISP_INITSTATE;
-+}
-+
-+static void
-+isp_scsi_channel_init(struct ispsoftc *isp, int channel)
-+{
-+      sdparam *sdp;
-+      mbreg_t mbs;
-+      int tgt;
-+
-+      sdp = isp->isp_param;
-+      sdp += channel;
-+
-+      /*
-+       * Set (possibly new) Initiator ID.
-+       */
-+      mbs.param[0] = MBOX_SET_INIT_SCSI_ID;
-+      mbs.param[1] = (channel << 7) | sdp->isp_initiator_id;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+      isp_prt(isp, ISP_LOGINFO, "Initiator ID is %d on Channel %d",
-+          sdp->isp_initiator_id, channel);
-+
-+
-+      /*
-+       * Set current per-target parameters to an initial safe minimum.
-+       */
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              int lun;
-+              u_int16_t sdf;
-+
-+              if (sdp->isp_devparam[tgt].dev_enable == 0) {
-+                      continue;
-+              }
-+#ifndef       ISP_TARGET_MODE
-+              sdf = sdp->isp_devparam[tgt].goal_flags;
-+              sdf &= DPARM_SAFE_DFLT;
-+              /*
-+               * It is not quite clear when this changed over so that
-+               * we could force narrow and async for 1000/1020 cards,
-+               * but assume that this is only the case for loaded
-+               * firmware.
-+               */
-+              if (isp->isp_loaded_fw) {
-+                      sdf |= DPARM_NARROW | DPARM_ASYNC;
-+              }
-+#else
-+              /*
-+               * The !$*!)$!$)* f/w uses the same index into some
-+               * internal table to decide how to respond to negotiations,
-+               * so if we've said "let's be safe" for ID X, and ID X
-+               * selects *us*, the negotiations will back to 'safe'
-+               * (as in narrow/async). What the f/w *should* do is
-+               * use the initiator id settings to decide how to respond.
-+               */
-+              sdp->isp_devparam[tgt].goal_flags = sdf = DPARM_DEFAULT;
-+#endif
-+              mbs.param[0] = MBOX_SET_TARGET_PARAMS;
-+              mbs.param[1] = (channel << 15) | (tgt << 8);
-+              mbs.param[2] = sdf;
-+              if ((sdf & DPARM_SYNC) == 0) {
-+                      mbs.param[3] = 0;
-+              } else {
-+                      mbs.param[3] =
-+                          (sdp->isp_devparam[tgt].goal_offset << 8) |
-+                          (sdp->isp_devparam[tgt].goal_period);
-+              }
-+              isp_prt(isp, ISP_LOGDEBUG0,
-+                  "Initial Settings bus%d tgt%d flags 0x%x off 0x%x per 0x%x",
-+                  channel, tgt, mbs.param[2], mbs.param[3] >> 8,
-+                  mbs.param[3] & 0xff);
-+              isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      sdf = DPARM_SAFE_DFLT;
-+                      mbs.param[0] = MBOX_SET_TARGET_PARAMS;
-+                      mbs.param[1] = (tgt << 8) | (channel << 15);
-+                      mbs.param[2] = sdf;
-+                      mbs.param[3] = 0;
-+                      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+                      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                              continue;
-+                      }
-+              }
-+
-+              /*
-+               * We don't update any information directly from the f/w
-+               * because we need to run at least one command to cause a
-+               * new state to be latched up. So, we just assume that we
-+               * converge to the values we just had set.
-+               *
-+               * Ensure that we don't believe tagged queuing is enabled yet.
-+               * It turns out that sometimes the ISP just ignores our
-+               * attempts to set parameters for devices that it hasn't
-+               * seen yet.
-+               */
-+              sdp->isp_devparam[tgt].actv_flags = sdf & ~DPARM_TQING;
-+              for (lun = 0; lun < (int) isp->isp_maxluns; lun++) {
-+                      mbs.param[0] = MBOX_SET_DEV_QUEUE_PARAMS;
-+                      mbs.param[1] = (channel << 15) | (tgt << 8) | lun;
-+                      mbs.param[2] = sdp->isp_max_queue_depth;
-+                      mbs.param[3] = sdp->isp_devparam[tgt].exc_throttle;
-+                      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+                      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                              break;
-+                      }
-+              }
-+      }
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              if (sdp->isp_devparam[tgt].dev_refresh) {
-+                      isp->isp_sendmarker |= (1 << channel);
-+                      isp->isp_update |= (1 << channel);
-+                      break;
-+              }
-+      }
-+}
-+
-+/*
-+ * Fibre Channel specific initialization.
-+ *
-+ * Locks are held before coming here.
-+ */
-+static void
-+isp_fibre_init(struct ispsoftc *isp)
-+{
-+      fcparam *fcp;
-+      isp_icb_t local, *icbp = &local;
-+      mbreg_t mbs;
-+      int loopid;
-+      u_int64_t nwwn, pwwn;
-+
-+      fcp = isp->isp_param;
-+
-+      /*
-+       * Do this *before* initializing the firmware.
-+       */
-+      isp_mark_getpdb_all(isp);
-+      fcp->isp_fwstate = FW_CONFIG_WAIT;
-+      fcp->isp_loopstate = LOOP_NIL;
-+
-+      /*
-+       * If we have no role (neither target nor initiator), return.
-+       */
-+      if (isp->isp_role == ISP_ROLE_NONE) {
-+              return;
-+      }
-+
-+      loopid = fcp->isp_loopid;
-+      MEMZERO(icbp, sizeof (*icbp));
-+      icbp->icb_version = ICB_VERSION1;
-+
-+      /*
-+       * Firmware Options are either retrieved from NVRAM or
-+       * are patched elsewhere. We check them for sanity here
-+       * and make changes based on board revision, but otherwise
-+       * let others decide policy.
-+       */
-+
-+      /*
-+       * If this is a 2100 < revision 5, we have to turn off FAIRNESS.
-+       */
-+      if ((isp->isp_type == ISP_HA_FC_2100) && isp->isp_revision < 5) {
-+              fcp->isp_fwoptions &= ~ICBOPT_FAIRNESS;
-+      }
-+
-+      /*
-+       * We have to use FULL LOGIN even though it resets the loop too much
-+       * because otherwise port database entries don't get updated after
-+       * a LIP- this is a known f/w bug for 2100 f/w less than 1.17.0.
-+       */
-+      if (!ISP_FW_NEWER_THAN(isp, 1, 17, 0)) {
-+              fcp->isp_fwoptions |= ICBOPT_FULL_LOGIN;
-+      }
-+
-+      /*
-+       * Insist on Port Database Update Async notifications
-+       */
-+      fcp->isp_fwoptions |= ICBOPT_PDBCHANGE_AE;
-+
-+      /*
-+       * Make sure that target role reflects into fwoptions.
-+       */
-+      if (isp->isp_role & ISP_ROLE_TARGET) {
-+              fcp->isp_fwoptions |= ICBOPT_TGT_ENABLE;
-+      } else {
-+              fcp->isp_fwoptions &= ~ICBOPT_TGT_ENABLE;
-+      }
-+
-+      /*
-+       * Propagate all of this into the ICB structure.
-+       */
-+      icbp->icb_fwoptions = fcp->isp_fwoptions;
-+      icbp->icb_maxfrmlen = fcp->isp_maxfrmlen;
-+      if (icbp->icb_maxfrmlen < ICB_MIN_FRMLEN ||
-+          icbp->icb_maxfrmlen > ICB_MAX_FRMLEN) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "bad frame length (%d) from NVRAM- using %d",
-+                  fcp->isp_maxfrmlen, ICB_DFLT_FRMLEN);
-+              icbp->icb_maxfrmlen = ICB_DFLT_FRMLEN;
-+      }
-+      icbp->icb_maxalloc = fcp->isp_maxalloc;
-+      if (icbp->icb_maxalloc < 1) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "bad maximum allocation (%d)- using 16", fcp->isp_maxalloc);
-+              icbp->icb_maxalloc = 16;
-+      }
-+      icbp->icb_execthrottle = fcp->isp_execthrottle;
-+      if (icbp->icb_execthrottle < 1) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "bad execution throttle of %d- using 16",
-+                  fcp->isp_execthrottle);
-+              icbp->icb_execthrottle = ICB_DFLT_THROTTLE;
-+      }
-+      icbp->icb_retry_delay = fcp->isp_retry_delay;
-+      icbp->icb_retry_count = fcp->isp_retry_count;
-+      icbp->icb_hardaddr = loopid;
-+      /*
-+       * Right now we just set extended options to prefer point-to-point
-+       * over loop based upon some soft config options.
-+       * 
-+       * NB: for the 2300, ICBOPT_EXTENDED is required.
-+       */
-+      if (IS_2200(isp) || IS_23XX(isp)) {
-+              icbp->icb_fwoptions |= ICBOPT_EXTENDED;
-+              /*
-+               * Prefer or force Point-To-Point instead Loop?
-+               */
-+              switch(isp->isp_confopts & ISP_CFG_PORT_PREF) {
-+              case ISP_CFG_NPORT:
-+                      icbp->icb_xfwoptions |= ICBXOPT_PTP_2_LOOP;
-+                      break;
-+              case ISP_CFG_NPORT_ONLY:
-+                      icbp->icb_xfwoptions |= ICBXOPT_PTP_ONLY;
-+                      break;
-+              case ISP_CFG_LPORT_ONLY:
-+                      icbp->icb_xfwoptions |= ICBXOPT_LOOP_ONLY;
-+                      break;
-+              default:
-+                      icbp->icb_xfwoptions |= ICBXOPT_LOOP_2_PTP;
-+                      break;
-+              }
-+              if (IS_23XX(isp)) {
-+                      /*
-+                       * QLogic recommends that FAST Posting be turned
-+                       * off for 23XX cards and instead allow the HBA
-+                       * to write response queue entries and interrupt
-+                       * after a delay (ZIO).
-+                       *
-+                       * If we set ZIO, it will disable fast posting,
-+                       * so we don't need to clear it in fwoptions.
-+                       */
-+#ifndef       ISP_NO_ZIO
-+                      icbp->icb_xfwoptions |= ICBXOPT_ZIO;
-+#else
-+                      icbp->icb_fwoptions |= ICBOPT_FAST_POST;
-+#endif
-+#if   0
-+                      /*
-+                       * Values, in 100us increments. The default
-+                       * is 2 (200us) if a value 0 (default) is
-+                       * selected.
-+                       */
-+                      icbp->icb_idelaytimer = 2;
-+#endif
-+
-+                      if (isp->isp_confopts & ISP_CFG_ONEGB) {
-+                              icbp->icb_zfwoptions |= ICBZOPT_RATE_ONEGB;
-+                      } else if (isp->isp_confopts & ISP_CFG_TWOGB) {
-+                              icbp->icb_zfwoptions |= ICBZOPT_RATE_TWOGB;
-+                      } else {
-+                              icbp->icb_zfwoptions |= ICBZOPT_RATE_AUTO;
-+                      }
-+              }
-+      }
-+
-+#ifndef       ISP_NO_RIO_FC
-+      /*
-+       * RIO seems to be enabled in 2100s for fw >= 1.17.0.
-+       *
-+       * I've had some questionable problems with RIO on 2200.
-+       * More specifically, on a 2204 I had problems with RIO
-+       * on a Linux system where I was dropping commands right
-+       * and left. It's not clear to me what the actual problem
-+       * was.
-+       *
-+       * 23XX Cards do not support RIO. Instead they support ZIO.
-+       */
-+#if   0
-+      if (!IS_23XX(isp) && ISP_FW_NEWER_THAN(isp, 1, 17, 0)) {
-+              icbp->icb_xfwoptions |= ICBXOPT_RIO_16BIT;
-+              icbp->icb_racctimer = 4;
-+              icbp->icb_idelaytimer = 8;
-+      }
-+#endif
-+#endif
-+
-+      /*
-+       * For 22XX > 2.1.26 && 23XX, set someoptions.
-+       * XXX: Probably okay for newer 2100 f/w too.
-+       */
-+      if (ISP_FW_NEWER_THAN(isp, 2, 26, 0)) {
-+              /*
-+               * Turn on LIP F8 async event (1)
-+               * Turn on generate AE 8013 on all LIP Resets (2)
-+               * Disable LIP F7 switching (8)
-+               */
-+              mbs.param[0] = MBOX_SET_FIRMWARE_OPTIONS;
-+              mbs.param[1] = 0xb;
-+              mbs.param[2] = 0;
-+              mbs.param[3] = 0;
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      }
-+      icbp->icb_logintime = 30;       /* 30 second login timeout */
-+
-+      if (IS_23XX(isp)) {
-+              ISP_WRITE(isp, isp->isp_rqstinrp, 0);
-+              ISP_WRITE(isp, isp->isp_rqstoutrp, 0);
-+              ISP_WRITE(isp, isp->isp_respinrp, 0);
-+              ISP_WRITE(isp, isp->isp_respoutrp, 0);
-+      }
-+
-+      nwwn = ISP_NODEWWN(isp);
-+      pwwn = ISP_PORTWWN(isp);
-+      if (nwwn && pwwn) {
-+              icbp->icb_fwoptions |= ICBOPT_BOTH_WWNS;
-+              MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, nwwn);
-+              MAKE_NODE_NAME_FROM_WWN(icbp->icb_portname, pwwn);
-+              isp_prt(isp, ISP_LOGDEBUG1,
-+                  "Setting ICB Node 0x%08x%08x Port 0x%08x%08x",
-+                  ((u_int32_t) (nwwn >> 32)),
-+                  ((u_int32_t) (nwwn & 0xffffffff)),
-+                  ((u_int32_t) (pwwn >> 32)),
-+                  ((u_int32_t) (pwwn & 0xffffffff)));
-+      } else {
-+              isp_prt(isp, ISP_LOGDEBUG1, "Not using any WWNs");
-+              icbp->icb_fwoptions &= ~(ICBOPT_BOTH_WWNS|ICBOPT_FULL_LOGIN);
-+      }
-+      icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp);
-+      icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp);
-+      icbp->icb_rqstaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_rquest_dma);
-+      icbp->icb_rqstaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_rquest_dma);
-+      icbp->icb_rqstaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_rquest_dma);
-+      icbp->icb_rqstaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_rquest_dma);
-+      icbp->icb_respaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_result_dma);
-+      icbp->icb_respaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_result_dma);
-+      icbp->icb_respaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_result_dma);
-+      icbp->icb_respaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_result_dma);
-+      isp_prt(isp, ISP_LOGDEBUG0,
-+          "isp_fibre_init: fwopt 0x%x xfwopt 0x%x zfwopt 0x%x",
-+          icbp->icb_fwoptions, icbp->icb_xfwoptions, icbp->icb_zfwoptions);
-+
-+      FC_SCRATCH_ACQUIRE(isp);
-+      isp_put_icb(isp, icbp, (isp_icb_t *)fcp->isp_scratch);
-+
-+      /*
-+       * Init the firmware
-+       */
-+      mbs.param[0] = MBOX_INIT_FIRMWARE;
-+      mbs.param[1] = 0;
-+      mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+      mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+      mbs.param[4] = 0;
-+      mbs.param[5] = 0;
-+      mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+      mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      FC_SCRATCH_RELEASE(isp);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return;
-+      }
-+      isp->isp_reqidx = isp->isp_reqodx = 0;
-+      isp->isp_residx = 0;
-+      isp->isp_sendmarker = 1;
-+
-+      /*
-+       * Whatever happens, we're now committed to being here.
-+       */
-+      isp->isp_state = ISP_INITSTATE;
-+}
-+
-+/*
-+ * Fibre Channel Support- get the port database for the id.
-+ *
-+ * Locks are held before coming here. Return 0 if success,
-+ * else failure.
-+ */
-+
-+static int
-+isp_getmap(struct ispsoftc *isp, fcpos_map_t *map)
-+{
-+      fcparam *fcp = (fcparam *) isp->isp_param;
-+      mbreg_t mbs;
-+
-+      mbs.param[0] = MBOX_GET_FC_AL_POSITION_MAP;
-+      mbs.param[1] = 0;
-+      mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+      mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+      /*
-+       * Unneeded. For the 2100, except for initializing f/w, registers
-+       * 4/5 have to not be written to.
-+       *      mbs.param[4] = 0;
-+       *      mbs.param[5] = 0;
-+       *
-+       */
-+      mbs.param[6] = 0;
-+      mbs.param[7] = 0;
-+      FC_SCRATCH_ACQUIRE(isp);
-+      isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR);
-+      if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+              MEMCPY(map, fcp->isp_scratch, sizeof (fcpos_map_t));
-+              map->fwmap = mbs.param[1] != 0;
-+              FC_SCRATCH_RELEASE(isp);
-+              return (0);
-+      }
-+      FC_SCRATCH_RELEASE(isp);
-+      return (-1);
-+}
-+
-+static void
-+isp_mark_getpdb_all(struct ispsoftc *isp)
-+{
-+      fcparam *fcp = (fcparam *) isp->isp_param;
-+      int i;
-+      for (i = 0; i < MAX_FC_TARG; i++) {
-+              fcp->portdb[i].valid = fcp->portdb[i].fabric_dev = 0;
-+      }
-+}
-+
-+static int
-+isp_getpdb(struct ispsoftc *isp, int id, isp_pdb_t *pdbp)
-+{
-+      fcparam *fcp = (fcparam *) isp->isp_param;
-+      mbreg_t mbs;
-+
-+      mbs.param[0] = MBOX_GET_PORT_DB;
-+      mbs.param[1] = id << 8;
-+      mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+      mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+      /*
-+       * Unneeded. For the 2100, except for initializing f/w, registers
-+       * 4/5 have to not be written to.
-+       *      mbs.param[4] = 0;
-+       *      mbs.param[5] = 0;
-+       *
-+       */
-+      mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+      mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+      FC_SCRATCH_ACQUIRE(isp);
-+      isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR);
-+      if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+              isp_get_pdb(isp, (isp_pdb_t *)fcp->isp_scratch, pdbp);
-+              FC_SCRATCH_RELEASE(isp);
-+              return (0);
-+      }
-+      FC_SCRATCH_RELEASE(isp);
-+      return (-1);
-+}
-+
-+static u_int64_t
-+isp_get_portname(struct ispsoftc *isp, int loopid, int nodename)
-+{
-+      u_int64_t wwn = 0;
-+      mbreg_t mbs;
-+
-+      mbs.param[0] = MBOX_GET_PORT_NAME;
-+      mbs.param[1] = loopid << 8;
-+      if (nodename)
-+              mbs.param[1] |= 1;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR);
-+      if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+              wwn =
-+                  (((u_int64_t)(mbs.param[2] & 0xff)) << 56) |
-+                  (((u_int64_t)(mbs.param[2] >> 8))   << 48) |
-+                  (((u_int64_t)(mbs.param[3] & 0xff)) << 40) |
-+                  (((u_int64_t)(mbs.param[3] >> 8))   << 32) |
-+                  (((u_int64_t)(mbs.param[6] & 0xff)) << 24) |
-+                  (((u_int64_t)(mbs.param[6] >> 8))   << 16) |
-+                  (((u_int64_t)(mbs.param[7] & 0xff)) <<  8) |
-+                  (((u_int64_t)(mbs.param[7] >> 8)));
-+      }
-+      return (wwn);
-+}
-+
-+/*
-+ * Make sure we have good FC link and know our Loop ID.
-+ */
-+
-+static int
-+isp_fclink_test(struct ispsoftc *isp, int usdelay)
-+{
-+      static char *toponames[] = {
-+              "Private Loop",
-+              "FL Port",
-+              "N-Port to N-Port",
-+              "F Port",
-+              "F Port (no FLOGI_ACC response)"
-+      };
-+      mbreg_t mbs;
-+      int count, check_for_fabric;
-+      u_int8_t lwfs;
-+      fcparam *fcp;
-+      struct lportdb *lp;
-+      isp_pdb_t pdb;
-+
-+      fcp = isp->isp_param;
-+
-+      /*
-+       * XXX: Here is where we would start a 'loop dead' timeout
-+       */
-+
-+      /*
-+       * Wait up to N microseconds for F/W to go to a ready state.
-+       */
-+      lwfs = FW_CONFIG_WAIT;
-+      count = 0;
-+      while (count < usdelay) {
-+              u_int64_t enano;
-+              u_int32_t wrk;
-+              NANOTIME_T hra, hrb;
-+
-+              GET_NANOTIME(&hra);
-+              isp_fw_state(isp);
-+              if (lwfs != fcp->isp_fwstate) {
-+                      isp_prt(isp, ISP_LOGINFO, "Firmware State <%s->%s>",
-+                          isp2100_fw_statename((int)lwfs),
-+                          isp2100_fw_statename((int)fcp->isp_fwstate));
-+                      lwfs = fcp->isp_fwstate;
-+              }
-+              if (fcp->isp_fwstate == FW_READY) {
-+                      break;
-+              }
-+              GET_NANOTIME(&hrb);
-+
-+              /*
-+               * Get the elapsed time in nanoseconds.
-+               * Always guaranteed to be non-zero.
-+               */
-+              enano = NANOTIME_SUB(&hrb, &hra);
-+
-+              isp_prt(isp, ISP_LOGDEBUG1,
-+                  "usec%d: 0x%lx->0x%lx enano 0x%x%08x",
-+                  count, (long) GET_NANOSEC(&hra), (long) GET_NANOSEC(&hrb),
-+                  (u_int32_t)(enano >> 32), (u_int32_t)(enano & 0xffffffff));
-+
-+              /*
-+               * If the elapsed time is less than 1 millisecond,
-+               * delay a period of time up to that millisecond of
-+               * waiting.
-+               *
-+               * This peculiar code is an attempt to try and avoid
-+               * invoking u_int64_t math support functions for some
-+               * platforms where linkage is a problem.
-+               */
-+              if (enano < (1000 * 1000)) {
-+                      count += 1000;
-+                      enano = (1000 * 1000) - enano;
-+                      while (enano > (u_int64_t) 4000000000U) {
-+                              USEC_SLEEP(isp, 4000000);
-+                              enano -= (u_int64_t) 4000000000U;
-+                      }
-+                      wrk = enano;
-+                      wrk /= 1000;
-+                      USEC_SLEEP(isp, wrk);
-+              } else {
-+                      while (enano > (u_int64_t) 4000000000U) {
-+                              count += 4000000;
-+                              enano -= (u_int64_t) 4000000000U;
-+                      }
-+                      wrk = enano;
-+                      count += (wrk / 1000);
-+              }
-+      }
-+
-+      /*
-+       * If we haven't gone to 'ready' state, return.
-+       */
-+      if (fcp->isp_fwstate != FW_READY) {
-+              return (-1);
-+      }
-+
-+      /*
-+       * Get our Loop ID (if possible). We really need to have it.
-+       */
-+      mbs.param[0] = MBOX_GET_LOOP_ID;
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              return (-1);
-+      }
-+      fcp->isp_loopid = mbs.param[1];
-+      if (IS_2200(isp) || IS_23XX(isp)) {
-+              int topo = (int) mbs.param[6];
-+              if (topo < TOPO_NL_PORT || topo > TOPO_PTP_STUB)
-+                      topo = TOPO_PTP_STUB;
-+              fcp->isp_topo = topo;
-+      } else {
-+              fcp->isp_topo = TOPO_NL_PORT;
-+      }
-+      fcp->isp_portid = fcp->isp_alpa = mbs.param[2] & 0xff;
-+
-+      /*
-+       * Check to see if we're on a fabric by trying to see if we
-+       * can talk to the fabric name server. This can be a bit
-+       * tricky because if we're a 2100, we should check always
-+       * (in case we're connected to a server doing aliasing).
-+       */
-+      fcp->isp_onfabric = 0;
-+
-+      if (IS_2100(isp)) {
-+              /*
-+               * Don't bother with fabric if we are using really old
-+               * 2100 firmware. It's just not worth it.
-+               */
-+              if (ISP_FW_NEWER_THAN(isp, 1, 15, 37)) {
-+                      check_for_fabric = 1;
-+              } else {
-+                      check_for_fabric = 0;
-+              }
-+      } else if (fcp->isp_topo == TOPO_FL_PORT ||
-+          fcp->isp_topo == TOPO_F_PORT) {
-+              check_for_fabric = 1;
-+      } else
-+              check_for_fabric = 0;
-+
-+      if (check_for_fabric && isp_getpdb(isp, FL_PORT_ID, &pdb) == 0) {
-+              int loopid = FL_PORT_ID;
-+              if (IS_2100(isp)) {
-+                      fcp->isp_topo = TOPO_FL_PORT;
-+              }
-+
-+              if (BITS2WORD(pdb.pdb_portid_bits) == 0) {
-+                      /*
-+                       * Crock.
-+                       */
-+                      fcp->isp_topo = TOPO_NL_PORT;
-+                      goto not_on_fabric;
-+              }
-+              fcp->isp_portid = mbs.param[2] | ((int) mbs.param[3] << 16);
-+
-+              /*
-+               * Save the Fabric controller's port database entry.
-+               */
-+              lp = &fcp->portdb[loopid];
-+              lp->node_wwn =
-+                  (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+                  (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+                  (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+                  (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+                  (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+                  (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+                  (((u_int64_t)pdb.pdb_nodename[6]) <<  8) |
-+                  (((u_int64_t)pdb.pdb_nodename[7]));
-+              lp->port_wwn =
-+                  (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+                  (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+                  (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+                  (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+                  (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+                  (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+                  (((u_int64_t)pdb.pdb_portname[6]) <<  8) |
-+                  (((u_int64_t)pdb.pdb_portname[7]));
-+              lp->roles =
-+                  (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
-+              lp->portid = BITS2WORD(pdb.pdb_portid_bits);
-+              lp->loopid = pdb.pdb_loopid;
-+              lp->loggedin = lp->valid = 1;
-+              fcp->isp_onfabric = 1;
-+              (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+              isp_register_fc4_type(isp);
-+      } else {
-+not_on_fabric:
-+              fcp->isp_onfabric = 0;
-+              fcp->portdb[FL_PORT_ID].valid = 0;
-+      }
-+
-+      fcp->isp_gbspeed = 1;
-+      if (IS_23XX(isp)) {
-+              mbs.param[0] = MBOX_GET_SET_DATA_RATE;
-+              mbs.param[1] = MBGSD_GET_RATE;
-+              /* mbs.param[2] undefined if we're just getting rate */
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+                      if (mbs.param[1] == MBGSD_TWOGB) {
-+                              isp_prt(isp, ISP_LOGINFO, "2Gb link speed/s");
-+                              fcp->isp_gbspeed = 2;
-+                      }
-+              }
-+      }
-+
-+      isp_prt(isp, ISP_LOGCONFIG, topology, fcp->isp_loopid, fcp->isp_alpa,
-+          fcp->isp_portid, fcp->isp_loopstate, toponames[fcp->isp_topo]);
-+
-+      /*
-+       * Announce ourselves, too. This involves synthesizing an entry.
-+       */
-+      if (fcp->isp_iid_set == 0) {
-+              fcp->isp_iid_set = 1;
-+              fcp->isp_iid = fcp->isp_loopid;
-+              lp = &fcp->portdb[fcp->isp_iid];
-+      } else {
-+              lp = &fcp->portdb[fcp->isp_iid];
-+              if (fcp->isp_portid != lp->portid ||
-+                  fcp->isp_loopid != lp->loopid ||
-+                  fcp->isp_nodewwn != ISP_NODEWWN(isp) ||
-+                  fcp->isp_portwwn != ISP_PORTWWN(isp)) {
-+                      lp->valid = 0;
-+                      count = fcp->isp_iid;
-+                      (void) isp_async(isp, ISPASYNC_PROMENADE, &count);
-+              }
-+      }
-+      lp->loopid = fcp->isp_loopid;
-+      lp->portid = fcp->isp_portid;
-+      lp->node_wwn = ISP_NODEWWN(isp);
-+      lp->port_wwn = ISP_PORTWWN(isp);
-+      switch (isp->isp_role) {
-+      case ISP_ROLE_NONE:
-+              lp->roles = 0;
-+              break;
-+      case ISP_ROLE_TARGET:
-+              lp->roles = SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT;
-+              break;
-+      case ISP_ROLE_INITIATOR:
-+              lp->roles = SVC3_INI_ROLE >> SVC3_ROLE_SHIFT;
-+              break;
-+      case ISP_ROLE_BOTH:
-+              lp->roles = (SVC3_INI_ROLE|SVC3_TGT_ROLE) >> SVC3_ROLE_SHIFT;
-+              break;
-+      }
-+      lp->loggedin = lp->valid = 1;
-+      count = fcp->isp_iid;
-+      (void) isp_async(isp, ISPASYNC_PROMENADE, &count);
-+      return (0);
-+}
-+
-+static char *
-+isp2100_fw_statename(int state)
-+{
-+      switch(state) {
-+      case FW_CONFIG_WAIT:    return "Config Wait";
-+      case FW_WAIT_AL_PA:     return "Waiting for AL_PA";
-+      case FW_WAIT_LOGIN:     return "Wait Login";
-+      case FW_READY:          return "Ready";
-+      case FW_LOSS_OF_SYNC:   return "Loss Of Sync";
-+      case FW_ERROR:          return "Error";
-+      case FW_REINIT:         return "Re-Init";
-+      case FW_NON_PART:       return "Nonparticipating";
-+      default:                return "?????";
-+      }
-+}
-+
-+/*
-+ * Synchronize our soft copy of the port database with what the f/w thinks
-+ * (with a view toward possibly for a specific target....)
-+ */
-+
-+static int
-+isp_pdb_sync(struct ispsoftc *isp)
-+{
-+      struct lportdb *lp;
-+      fcparam *fcp = isp->isp_param;
-+      isp_pdb_t pdb;
-+      int loopid, base, lim;
-+
-+      /*
-+       * Make sure we're okay for doing this right now.
-+       */
-+      if (fcp->isp_loopstate != LOOP_PDB_RCVD &&
-+          fcp->isp_loopstate != LOOP_FSCAN_DONE &&
-+          fcp->isp_loopstate != LOOP_LSCAN_DONE) {
-+              return (-1);
-+      }
-+
-+      if (fcp->isp_topo == TOPO_FL_PORT || fcp->isp_topo == TOPO_NL_PORT ||
-+          fcp->isp_topo == TOPO_N_PORT) {
-+              if (fcp->isp_loopstate < LOOP_LSCAN_DONE) {
-+                      if (isp_scan_loop(isp) != 0) {
-+                              return (-1);
-+                      }
-+              }
-+      }
-+      fcp->isp_loopstate = LOOP_SYNCING_PDB;
-+
-+      /*
-+       * If we get this far, we've settled our differences with the f/w
-+       * (for local loop device) and we can say that the loop state is ready.
-+       */
-+
-+      if (fcp->isp_topo == TOPO_NL_PORT) {
-+              fcp->loop_seen_once = 1;
-+              fcp->isp_loopstate = LOOP_READY;
-+              return (0);
-+      }
-+
-+      /*
-+       * Find all Fabric Entities that didn't make it from one scan to the
-+       * next and let the world know they went away. Scan the whole database.
-+       */
-+      for (lp = &fcp->portdb[0]; lp < &fcp->portdb[MAX_FC_TARG]; lp++) {
-+              if (lp->was_fabric_dev && lp->fabric_dev == 0) {
-+                      loopid = lp - fcp->portdb;
-+                      lp->valid = 0;  /* should already be set */
-+                      (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+                      MEMZERO((void *) lp, sizeof (*lp));
-+                      continue;
-+              }
-+              lp->was_fabric_dev = lp->fabric_dev;
-+      }
-+
-+      if (fcp->isp_topo == TOPO_FL_PORT)
-+              base = FC_SNS_ID+1;
-+      else
-+              base = 0;
-+
-+      if (fcp->isp_topo == TOPO_N_PORT)
-+              lim = 1;
-+      else
-+              lim = MAX_FC_TARG;
-+
-+      /*
-+       * Now log in any fabric devices that the outer layer has
-+       * left for us to see. This seems the most sane policy
-+       * for the moment.
-+       */
-+      for (lp = &fcp->portdb[base]; lp < &fcp->portdb[lim]; lp++) {
-+              u_int32_t portid;
-+              mbreg_t mbs;
-+
-+              loopid = lp - fcp->portdb;
-+              if (loopid >= FL_PORT_ID && loopid <= FC_SNS_ID) {
-+                      continue;
-+              }
-+
-+              /*
-+               * Anything here?
-+               */
-+              if (lp->port_wwn == 0) {
-+                      continue;
-+              }
-+
-+              /*
-+               * Don't try to log into yourself.
-+               */
-+              if ((portid = lp->portid) == fcp->isp_portid) {
-+                      continue;
-+              }
-+
-+
-+              /*
-+               * If we'd been logged in- see if we still are and we haven't
-+               * changed. If so, no need to log ourselves out, etc..
-+               *
-+               * Unfortunately, our charming Qlogic f/w has decided to
-+               * return a valid port database entry for a fabric device
-+               * that has, in fact, gone away. And it hangs trying to
-+               * log it out.
-+               */
-+              if (lp->loggedin && lp->force_logout == 0 &&
-+                  isp_getpdb(isp, lp->loopid, &pdb) == 0) {
-+                      int nrole;
-+                      u_int64_t nwwnn, nwwpn;
-+                      nwwnn =
-+                          (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+                          (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+                          (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+                          (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+                          (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+                          (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+                          (((u_int64_t)pdb.pdb_nodename[6]) <<  8) |
-+                          (((u_int64_t)pdb.pdb_nodename[7]));
-+                      nwwpn =
-+                          (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+                          (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+                          (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+                          (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+                          (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+                          (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+                          (((u_int64_t)pdb.pdb_portname[6]) <<  8) |
-+                          (((u_int64_t)pdb.pdb_portname[7]));
-+                      nrole = (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >>
-+                          SVC3_ROLE_SHIFT;
-+                      if (pdb.pdb_loopid == lp->loopid && lp->portid ==
-+                          (u_int32_t) BITS2WORD(pdb.pdb_portid_bits) &&
-+                          nwwnn == lp->node_wwn && nwwpn == lp->port_wwn &&
-+                          lp->roles == nrole && lp->force_logout == 0) {
-+                              lp->loggedin = lp->valid = 1;
-+                              isp_prt(isp, ISP_LOGCONFIG, lretained,
-+                                  (int) (lp - fcp->portdb),
-+                                  (int) lp->loopid, lp->portid);
-+                              continue;
-+                      }
-+              }
-+
-+              if (fcp->isp_fwstate != FW_READY ||
-+                  fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+                      return (-1);
-+              }
-+
-+              /*
-+               * Force a logout if we were logged in.
-+               */
-+              if (lp->loggedin) {
-+                      if (lp->force_logout ||
-+                          isp_getpdb(isp, lp->loopid, &pdb) == 0) {
-+                              mbs.param[0] = MBOX_FABRIC_LOGOUT;
-+                              mbs.param[1] = lp->loopid << 8;
-+                              mbs.param[2] = 0;
-+                              mbs.param[3] = 0;
-+                              isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+                              isp_prt(isp, ISP_LOGINFO, plogout,
-+                                  (int) (lp - fcp->portdb), lp->loopid,
-+                                  lp->portid);
-+                      }
-+                      lp->force_logout = lp->loggedin = 0;
-+                      if (fcp->isp_fwstate != FW_READY ||
-+                          fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+                              return (-1);
-+                      }
-+              }
-+
-+              /*
-+               * And log in....
-+               */
-+              loopid = lp - fcp->portdb;
-+              lp->loopid = FL_PORT_ID;
-+              do {
-+                      mbs.param[0] = MBOX_FABRIC_LOGIN;
-+                      mbs.param[1] = loopid << 8;
-+                      mbs.param[2] = portid >> 16;
-+                      mbs.param[3] = portid & 0xffff;
-+                      isp_mboxcmd(isp, &mbs, MBLOGALL & ~(MBOX_LOOP_ID_USED |
-+                          MBOX_PORT_ID_USED | MBOX_COMMAND_ERROR));
-+                      if (fcp->isp_fwstate != FW_READY ||
-+                          fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+                              return (-1);
-+                      }
-+                      switch (mbs.param[0]) {
-+                      case MBOX_LOOP_ID_USED:
-+                              /*
-+                               * Try the next available loop id.
-+                               */
-+                              loopid++;
-+                              break;
-+                      case MBOX_PORT_ID_USED:
-+                              /*
-+                               * This port is already logged in.
-+                               * Snaffle the loop id it's using if it's
-+                               * nonzero, otherwise we're hosed.
-+                               */
-+                              if (mbs.param[1] != 0) {
-+                                      loopid = mbs.param[1];
-+                                      isp_prt(isp, ISP_LOGINFO, retained,
-+                                          loopid, (int) (lp - fcp->portdb),
-+                                          lp->portid);
-+                              } else {
-+                                      loopid = MAX_FC_TARG;
-+                                      break;
-+                              }
-+                              /* FALLTHROUGH */
-+                      case MBOX_COMMAND_COMPLETE:
-+                              lp->loggedin = 1;
-+                              lp->loopid = loopid;
-+                              break;
-+                      case MBOX_COMMAND_ERROR:
-+                              isp_prt(isp, ISP_LOGINFO, plogierr,
-+                                  portid, mbs.param[1]);
-+                              /* FALLTHROUGH */
-+                      case MBOX_ALL_IDS_USED: /* We're outta IDs */
-+                      default:
-+                              loopid = MAX_FC_TARG;
-+                              break;
-+                      }
-+              } while (lp->loopid == FL_PORT_ID && loopid < MAX_FC_TARG);
-+
-+              /*
-+               * If we get here and we haven't set a Loop ID,
-+               * we failed to log into this device.
-+               */
-+
-+              if (lp->loopid == FL_PORT_ID) {
-+                      lp->loopid = 0;
-+                      continue;
-+              }
-+
-+              /*
-+               * Make sure we can get the approriate port information.
-+               */
-+              if (isp_getpdb(isp, lp->loopid, &pdb) != 0) {
-+                      isp_prt(isp, ISP_LOGWARN, nopdb, lp->portid);
-+                      goto dump_em;
-+              }
-+
-+              if (fcp->isp_fwstate != FW_READY ||
-+                  fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+                      return (-1);
-+              }
-+
-+              if (pdb.pdb_loopid != lp->loopid) {
-+                      isp_prt(isp, ISP_LOGWARN, pdbmfail1,
-+                          lp->portid, pdb.pdb_loopid);
-+                      goto dump_em;
-+              }
-+
-+              if (lp->portid != (u_int32_t) BITS2WORD(pdb.pdb_portid_bits)) {
-+                      isp_prt(isp, ISP_LOGWARN, pdbmfail2,
-+                          lp->portid, BITS2WORD(pdb.pdb_portid_bits));
-+                      goto dump_em;
-+              }
-+
-+              lp->roles =
-+                  (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
-+              lp->node_wwn =
-+                  (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+                  (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+                  (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+                  (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+                  (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+                  (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+                  (((u_int64_t)pdb.pdb_nodename[6]) <<  8) |
-+                  (((u_int64_t)pdb.pdb_nodename[7]));
-+              lp->port_wwn =
-+                  (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+                  (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+                  (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+                  (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+                  (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+                  (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+                  (((u_int64_t)pdb.pdb_portname[6]) <<  8) |
-+                  (((u_int64_t)pdb.pdb_portname[7]));
-+              /*
-+               * Check to make sure this all makes sense.
-+               */
-+              if (lp->node_wwn && lp->port_wwn) {
-+                      lp->valid = 1;
-+                      loopid = lp - fcp->portdb;
-+                      (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+                      continue;
-+              }
-+dump_em:
-+              lp->valid = 0;
-+              isp_prt(isp, ISP_LOGINFO,
-+                  ldumped, loopid, lp->loopid, lp->portid);
-+              mbs.param[0] = MBOX_FABRIC_LOGOUT;
-+              mbs.param[1] = lp->loopid << 8;
-+              mbs.param[2] = 0;
-+              mbs.param[3] = 0;
-+              isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+              if (fcp->isp_fwstate != FW_READY ||
-+                  fcp->isp_loopstate != LOOP_SYNCING_PDB) {
-+                      return (-1);
-+              }
-+      }
-+      /*
-+       * If we get here, we've for sure seen not only a valid loop
-+       * but know what is or isn't on it, so mark this for usage
-+       * in isp_start.
-+       */
-+      fcp->loop_seen_once = 1;
-+      fcp->isp_loopstate = LOOP_READY;
-+      return (0);
-+}
-+
-+static int
-+isp_scan_loop(struct ispsoftc *isp)
-+{
-+      struct lportdb *lp;
-+      fcparam *fcp = isp->isp_param;
-+      isp_pdb_t pdb;
-+      int loopid, lim, hival;
-+
-+      switch (fcp->isp_topo) {
-+      case TOPO_NL_PORT:
-+              hival = FL_PORT_ID;
-+              break;
-+      case TOPO_N_PORT:
-+              hival = 2;
-+              break;
-+      case TOPO_FL_PORT:
-+              hival = FC_PORT_ID;
-+              break;
-+      default:
-+              fcp->isp_loopstate = LOOP_LSCAN_DONE;
-+              return (0);
-+      }
-+      fcp->isp_loopstate = LOOP_SCANNING_LOOP;
-+
-+      /*
-+       * make sure the temp port database is clean...
-+       */
-+      MEMZERO((void *)fcp->tport, sizeof (fcp->tport));
-+
-+      /*
-+       * Run through the local loop ports and get port database info
-+       * for each loop ID.
-+       *
-+       * There's a somewhat unexplained situation where the f/w passes back
-+       * the wrong database entity- if that happens, just restart (up to
-+       * FL_PORT_ID times).
-+       */
-+      for (lim = loopid = 0; loopid < hival; loopid++) {
-+              lp = &fcp->tport[loopid];
-+
-+              /*
-+               * Don't even try for ourselves...
-+               */
-+              if (loopid == fcp->isp_loopid)
-+                      continue;
-+
-+              lp->node_wwn = isp_get_portname(isp, loopid, 1);
-+              if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
-+                      return (-1);
-+              if (lp->node_wwn == 0)
-+                      continue;
-+              lp->port_wwn = isp_get_portname(isp, loopid, 0);
-+              if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
-+                      return (-1);
-+              if (lp->port_wwn == 0) {
-+                      lp->node_wwn = 0;
-+                      continue;
-+              }
-+
-+              /*
-+               * Get an entry....
-+               */
-+              if (isp_getpdb(isp, loopid, &pdb) != 0) {
-+                      if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
-+                              return (-1);
-+                      continue;
-+              }
-+              if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
-+                      return (-1);
-+              }
-+
-+              /*
-+               * If the returned database element doesn't match what we
-+               * asked for, restart the process entirely (up to a point...).
-+               */
-+              if (pdb.pdb_loopid != loopid) {
-+                      loopid = 0;
-+                      if (lim++ < hival) {
-+                              continue;
-+                      }
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "giving up on synchronizing the port database");
-+                      return (-1);
-+              }
-+
-+              /*
-+               * Save the pertinent info locally.
-+               */
-+              lp->node_wwn =
-+                  (((u_int64_t)pdb.pdb_nodename[0]) << 56) |
-+                  (((u_int64_t)pdb.pdb_nodename[1]) << 48) |
-+                  (((u_int64_t)pdb.pdb_nodename[2]) << 40) |
-+                  (((u_int64_t)pdb.pdb_nodename[3]) << 32) |
-+                  (((u_int64_t)pdb.pdb_nodename[4]) << 24) |
-+                  (((u_int64_t)pdb.pdb_nodename[5]) << 16) |
-+                  (((u_int64_t)pdb.pdb_nodename[6]) <<  8) |
-+                  (((u_int64_t)pdb.pdb_nodename[7]));
-+              lp->port_wwn =
-+                  (((u_int64_t)pdb.pdb_portname[0]) << 56) |
-+                  (((u_int64_t)pdb.pdb_portname[1]) << 48) |
-+                  (((u_int64_t)pdb.pdb_portname[2]) << 40) |
-+                  (((u_int64_t)pdb.pdb_portname[3]) << 32) |
-+                  (((u_int64_t)pdb.pdb_portname[4]) << 24) |
-+                  (((u_int64_t)pdb.pdb_portname[5]) << 16) |
-+                  (((u_int64_t)pdb.pdb_portname[6]) <<  8) |
-+                  (((u_int64_t)pdb.pdb_portname[7]));
-+              lp->roles =
-+                  (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
-+              lp->portid = BITS2WORD(pdb.pdb_portid_bits);
-+              lp->loopid = pdb.pdb_loopid;
-+      }
-+
-+      /*
-+       * Mark all of the permanent local loop database entries as invalid
-+       * (except our own entry).
-+       */
-+      for (loopid = 0; loopid < hival; loopid++) {
-+              if (loopid == fcp->isp_iid) {
-+                      fcp->portdb[loopid].valid = 1;
-+                      fcp->portdb[loopid].loopid = fcp->isp_loopid;
-+                      continue;
-+              }
-+              fcp->portdb[loopid].valid = 0;
-+      }
-+
-+      /*
-+       * Now merge our local copy of the port database into our saved copy.
-+       * Notify the outer layers of new devices arriving.
-+       */
-+      for (loopid = 0; loopid < hival; loopid++) {
-+              int i;
-+
-+              /*
-+               * If we don't have a non-zero Port WWN, we're not here.
-+               */
-+              if (fcp->tport[loopid].port_wwn == 0) {
-+                      continue;
-+              }
-+
-+              /*
-+               * Skip ourselves.
-+               */
-+              if (loopid == fcp->isp_iid) {
-+                      continue;
-+              }
-+
-+              /*
-+               * For the purposes of deciding whether this is the
-+               * 'same' device or not, we only search for an identical
-+               * Port WWN. Node WWNs may or may not be the same as
-+               * the Port WWN, and there may be multiple different
-+               * Port WWNs with the same Node WWN. It would be chaos
-+               * to have multiple identical Port WWNs, so we don't
-+               * allow that.
-+               */
-+
-+              for (i = 0; i < hival; i++) {
-+                      int j;
-+                      if (fcp->portdb[i].port_wwn == 0)
-+                              continue;
-+                      if (fcp->portdb[i].port_wwn !=
-+                          fcp->tport[loopid].port_wwn)
-+                              continue;
-+                      /*
-+                       * We found this WWN elsewhere- it's changed
-+                       * loopids then. We don't change it's actual
-+                       * position in our cached port database- we
-+                       * just change the actual loop ID we'd use.
-+                       */
-+                      if (fcp->portdb[i].loopid != loopid) {
-+                              isp_prt(isp, ISP_LOGINFO, portshift, i,
-+                                  fcp->portdb[i].loopid,
-+                                  fcp->portdb[i].portid, loopid,
-+                                  fcp->tport[loopid].portid);
-+                      }
-+                      fcp->portdb[i].portid = fcp->tport[loopid].portid;
-+                      fcp->portdb[i].loopid = loopid;
-+                      fcp->portdb[i].valid = 1;
-+                      fcp->portdb[i].roles = fcp->tport[loopid].roles;
-+
-+                      /*
-+                       * Now make sure this Port WWN doesn't exist elsewhere
-+                       * in the port database.
-+                       */
-+                      for (j = i+1; j < hival; j++) {
-+                              if (fcp->portdb[i].port_wwn !=
-+                                  fcp->portdb[j].port_wwn) {
-+                                      continue;
-+                              }
-+                              isp_prt(isp, ISP_LOGWARN, portdup, j, i);
-+                              /*
-+                               * Invalidate the 'old' *and* 'new' ones.
-+                               * This is really harsh and not quite right,
-+                               * but if this happens, we really don't know
-+                               * who is what at this point.
-+                               */
-+                              fcp->portdb[i].valid = 0;
-+                              fcp->portdb[j].valid = 0;
-+                      }
-+                      break;
-+              }
-+
-+              /*
-+               * If we didn't traverse the entire port database,
-+               * then we found (and remapped) an existing entry.
-+               * No need to notify anyone- go for the next one.
-+               */
-+              if (i < hival) {
-+                      isp_prt(isp, ISP_LOGINFO, retained,
-+                          fcp->portdb[i].loopid, i, fcp->portdb[i].portid);
-+                      continue;
-+              }
-+
-+              /*
-+               * We've not found this Port WWN anywhere. It's a new entry.
-+               * See if we can leave it where it is (with target == loopid).
-+               */
-+              if (fcp->portdb[loopid].port_wwn != 0) {
-+                      for (lim = 0; lim < hival; lim++) {
-+                              if (fcp->portdb[lim].port_wwn == 0)
-+                                      break;
-+                      }
-+                      /* "Cannot Happen" */
-+                      if (lim == hival) {
-+                              isp_prt(isp, ISP_LOGWARN, "Remap Overflow");
-+                              continue;
-+                      }
-+                      i = lim;
-+              } else {
-+                      i = loopid;
-+              }
-+
-+              /*
-+               * NB:  The actual loopid we use here is loopid- we may
-+               *      in fact be at a completely different index (target).
-+               */
-+              fcp->portdb[i].loopid = loopid;
-+              fcp->portdb[i].port_wwn = fcp->tport[loopid].port_wwn;
-+              fcp->portdb[i].node_wwn = fcp->tport[loopid].node_wwn;
-+              fcp->portdb[i].roles = fcp->tport[loopid].roles;
-+              fcp->portdb[i].portid = fcp->tport[loopid].portid;
-+              fcp->portdb[i].valid = 1;
-+
-+              /*
-+               * Tell the outside world we've arrived.
-+               */
-+              (void) isp_async(isp, ISPASYNC_PROMENADE, &i);
-+      }
-+
-+      /*
-+       * Now find all previously used targets that are now invalid and
-+       * notify the outer layers that they're gone.
-+       */
-+      for (lp = &fcp->portdb[0]; lp < &fcp->portdb[hival]; lp++) {
-+              if (lp->valid || lp->port_wwn == 0) {
-+                      continue;
-+              }
-+
-+              /*
-+               * Tell the outside world we've gone
-+               * away and erase our pdb entry.
-+               *
-+               */
-+              loopid = lp - fcp->portdb;
-+              (void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);
-+              MEMZERO((void *) lp, sizeof (*lp));
-+      }
-+      fcp->isp_loopstate = LOOP_LSCAN_DONE;
-+      return (0);
-+}
-+
-+
-+static int
-+isp_fabric_mbox_cmd(struct ispsoftc *isp, mbreg_t *mbp)
-+{
-+      isp_mboxcmd(isp, mbp, MBLOGNONE);
-+      if (mbp->param[0] != MBOX_COMMAND_COMPLETE) {
-+              if (FCPARAM(isp)->isp_loopstate == LOOP_SCANNING_FABRIC) {
-+                      FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+              }
-+              if (mbp->param[0] == MBOX_COMMAND_ERROR) {
-+                      char tbuf[16];
-+                      char *m;
-+                      switch (mbp->param[1]) {
-+                      case 1:
-+                              m = "No Loop";
-+                              break;
-+                      case 2:
-+                              m = "Failed to allocate IOCB buffer";
-+                              break;
-+                      case 3:
-+                              m = "Failed to allocate XCB buffer";
-+                              break;
-+                      case 4:
-+                              m = "timeout or transmit failed";
-+                              break;
-+                      case 5:
-+                              m = "no fabric loop";
-+                              break;
-+                      case 6:
-+                              m = "remote device not a target";
-+                              break;
-+                      default:
-+                              SNPRINTF(tbuf, sizeof tbuf, "%x",
-+                                  mbp->param[1]);
-+                              m = tbuf;
-+                              break;
-+                      }
-+                      isp_prt(isp, ISP_LOGERR, "SNS Failed- %s", m);
-+              }
-+              return (-1);
-+      }
-+
-+      if (FCPARAM(isp)->isp_fwstate != FW_READY ||
-+          FCPARAM(isp)->isp_loopstate < LOOP_SCANNING_FABRIC) {
-+              return (-1);
-+      }
-+      return(0);
-+}
-+
-+#ifdef        ISP_USE_GA_NXT
-+static int
-+isp_scan_fabric(struct ispsoftc *isp, int ftype)
-+{
-+      fcparam *fcp = isp->isp_param;
-+      u_int32_t portid, first_portid, last_portid;
-+      int hicap, last_port_same;
-+
-+      if (fcp->isp_onfabric == 0) {
-+              fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+              return (0);
-+      }
-+
-+      FC_SCRATCH_ACQUIRE(isp);
-+
-+      /*
-+       * Since Port IDs are 24 bits, we can check against having seen
-+       * anything yet with this value.
-+       */
-+      last_port_same = 0;
-+      last_portid = 0xffffffff;       /* not a port */
-+      first_portid = portid = fcp->isp_portid;
-+      fcp->isp_loopstate = LOOP_SCANNING_FABRIC;
-+
-+      for (hicap = 0; hicap < GA_NXT_MAX; hicap++) {
-+              mbreg_t mbs;
-+              sns_screq_t *rq;
-+              sns_ga_nxt_rsp_t *rs0, *rs1;
-+              struct lportdb lcl;
-+              u_int8_t sc[SNS_GA_NXT_RESP_SIZE];
-+
-+              rq = (sns_screq_t *)sc;
-+              MEMZERO((void *) rq, SNS_GA_NXT_REQ_SIZE);
-+              rq->snscb_rblen = SNS_GA_NXT_RESP_SIZE >> 1;
-+              rq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+0x100);
-+              rq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+0x100);
-+              rq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+0x100);
-+              rq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+0x100);
-+              rq->snscb_sblen = 6;
-+              rq->snscb_data[0] = SNS_GA_NXT;
-+              rq->snscb_data[4] = portid & 0xffff;
-+              rq->snscb_data[5] = (portid >> 16) & 0xff;
-+              isp_put_sns_request(isp, rq, (sns_screq_t *) fcp->isp_scratch);
-+              MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GA_NXT_REQ_SIZE);
-+              mbs.param[0] = MBOX_SEND_SNS;
-+              mbs.param[1] = SNS_GA_NXT_REQ_SIZE >> 1;
-+              mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+              mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+              /*
-+               * Leave 4 and 5 alone
-+               */
-+              mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+              mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+              if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+                      if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+                              fcp->isp_loopstate = LOOP_PDB_RCVD;
-+                      }
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (-1);
-+              }
-+              MEMORYBARRIER(isp, SYNC_SFORCPU, 0x100, SNS_GA_NXT_RESP_SIZE);
-+              rs1 = (sns_ga_nxt_rsp_t *) sc;
-+              rs0 = (sns_ga_nxt_rsp_t *) ((u_int8_t *)fcp->isp_scratch+0x100);
-+              isp_get_ga_nxt_response(isp, rs0, rs1);
-+              if (rs1->snscb_cthdr.ct_response != FS_ACC) {
-+                      int level;
-+                      if (rs1->snscb_cthdr.ct_reason == 9 &&
-+                          rs1->snscb_cthdr.ct_explanation == 7)
-+                              level = ISP_LOGDEBUG0;
-+                      else
-+                              level = ISP_LOGWARN;
-+                      isp_prt(isp, level, swrej, "GA_NXT",
-+                          rs1->snscb_cthdr.ct_reason,
-+                          rs1->snscb_cthdr.ct_explanation, portid);
-+                      FC_SCRATCH_RELEASE(isp);
-+                      fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+                      return (0);
-+              }
-+              portid =
-+                  (((u_int32_t) rs1->snscb_port_id[0]) << 16) |
-+                  (((u_int32_t) rs1->snscb_port_id[1]) << 8) |
-+                  (((u_int32_t) rs1->snscb_port_id[2]));
-+
-+              /*
-+               * XXX: We should check to make sure that this entry
-+               * XXX: supports the type(s) we are interested in.
-+               */
-+              /*
-+               * Okay, we now have information about a fabric object.
-+               * If it is the type we're interested in, tell the outer layers
-+               * about it. The outer layer needs to  know: Port ID, WWNN,
-+               * WWPN, FC4 type, and port type.
-+               *
-+               * The lportdb structure is adequate for this.
-+               */
-+              MEMZERO(&lcl, sizeof (lcl));
-+              lcl.port_type = rs1->snscb_port_type;
-+              lcl.fc4_type = ftype;
-+              lcl.portid = portid;
-+              lcl.node_wwn =
-+                  (((u_int64_t)rs1->snscb_nodename[0]) << 56) |
-+                  (((u_int64_t)rs1->snscb_nodename[1]) << 48) |
-+                  (((u_int64_t)rs1->snscb_nodename[2]) << 40) |
-+                  (((u_int64_t)rs1->snscb_nodename[3]) << 32) |
-+                  (((u_int64_t)rs1->snscb_nodename[4]) << 24) |
-+                  (((u_int64_t)rs1->snscb_nodename[5]) << 16) |
-+                  (((u_int64_t)rs1->snscb_nodename[6]) <<  8) |
-+                  (((u_int64_t)rs1->snscb_nodename[7]));
-+              lcl.port_wwn =
-+                  (((u_int64_t)rs1->snscb_portname[0]) << 56) |
-+                  (((u_int64_t)rs1->snscb_portname[1]) << 48) |
-+                  (((u_int64_t)rs1->snscb_portname[2]) << 40) |
-+                  (((u_int64_t)rs1->snscb_portname[3]) << 32) |
-+                  (((u_int64_t)rs1->snscb_portname[4]) << 24) |
-+                  (((u_int64_t)rs1->snscb_portname[5]) << 16) |
-+                  (((u_int64_t)rs1->snscb_portname[6]) <<  8) |
-+                  (((u_int64_t)rs1->snscb_portname[7]));
-+
-+              /*
-+               * Does this fabric object support the type we want?
-+               * If not, skip it.
-+               */
-+              if (rs1->snscb_fc4_types[ftype >> 5] & (1 << (ftype & 0x1f))) {
-+                      if (first_portid == portid) {
-+                              lcl.last_fabric_dev = 1;
-+                      } else {
-+                              lcl.last_fabric_dev = 0;
-+                      }
-+                      (void) isp_async(isp, ISPASYNC_FABRIC_DEV, &lcl);
-+              } else {
-+                      isp_prt(isp, ISP_LOGDEBUG0,
-+                          "PortID 0x%x doesn't support FC4 type 0x%x",
-+                          portid, ftype);
-+              }
-+              if (first_portid == portid) {
-+                      fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (0);
-+              }
-+              if (portid == last_portid) {
-+                      if (last_port_same++ > 20) {
-+                              isp_prt(isp, ISP_LOGWARN,
-+                                  "tangled fabric database detected");
-+                              break;
-+                      }
-+              } else {
-+                      last_port_same = 0 ;
-+                      last_portid = portid;
-+              }
-+      }
-+      FC_SCRATCH_RELEASE(isp);
-+      if (hicap >= GA_NXT_MAX) {
-+              isp_prt(isp, ISP_LOGWARN, "fabric too big (> %d)", GA_NXT_MAX);
-+      }
-+      fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+      return (0);
-+}
-+#else
-+#define       GIDLEN  ((ISP2100_SCRLEN >> 1) + 16)
-+#define       NGENT   ((GIDLEN - 16) >> 2)
-+
-+#define       IGPOFF  (ISP2100_SCRLEN - GIDLEN)
-+#define       GXOFF   (256)
-+
-+static int
-+isp_scan_fabric(struct ispsoftc *isp, int ftype)
-+{
-+      fcparam *fcp = FCPARAM(isp);
-+      mbreg_t mbs;
-+      int i;
-+      sns_gid_ft_req_t *rq;
-+      sns_gid_ft_rsp_t *rs0, *rs1;
-+
-+      if (fcp->isp_onfabric == 0) {
-+              fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+              return (0);
-+      }
-+
-+      FC_SCRATCH_ACQUIRE(isp);
-+      fcp->isp_loopstate = LOOP_SCANNING_FABRIC;
-+
-+      rq = (sns_gid_ft_req_t *)fcp->tport;
-+      MEMZERO((void *) rq, SNS_GID_FT_REQ_SIZE);
-+      rq->snscb_rblen = GIDLEN >> 1;
-+      rq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+IGPOFF);
-+      rq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+IGPOFF);
-+      rq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+IGPOFF);
-+      rq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+IGPOFF);
-+      rq->snscb_sblen = 6;
-+      rq->snscb_cmd = SNS_GID_FT;
-+      rq->snscb_mword_div_2 = NGENT;
-+      rq->snscb_fc4_type = ftype;
-+      isp_put_gid_ft_request(isp, rq, (sns_gid_ft_req_t *) fcp->isp_scratch);
-+      MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GID_FT_REQ_SIZE);
-+      mbs.param[0] = MBOX_SEND_SNS;
-+      mbs.param[1] = SNS_GID_FT_REQ_SIZE >> 1;
-+      mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+      mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+
-+      /*
-+       * Leave 4 and 5 alone
-+       */
-+      mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+      mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+      if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+              if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+                      fcp->isp_loopstate = LOOP_PDB_RCVD;
-+              }
-+              FC_SCRATCH_RELEASE(isp);
-+              return (-1);
-+      }
-+      if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+              FC_SCRATCH_RELEASE(isp);
-+              return (-1);
-+      }
-+      MEMORYBARRIER(isp, SYNC_SFORCPU, IGPOFF, GIDLEN);
-+      rs1 = (sns_gid_ft_rsp_t *) fcp->tport;
-+      rs0 = (sns_gid_ft_rsp_t *) ((u_int8_t *)fcp->isp_scratch+IGPOFF);
-+      isp_get_gid_ft_response(isp, rs0, rs1, NGENT);
-+      if (rs1->snscb_cthdr.ct_response != FS_ACC) {
-+              int level;
-+              if (rs1->snscb_cthdr.ct_reason == 9 &&
-+                  rs1->snscb_cthdr.ct_explanation == 7)
-+                      level = ISP_LOGDEBUG0;
-+              else
-+                      level = ISP_LOGWARN;
-+              isp_prt(isp, level, swrej, "GID_FT",
-+                  rs1->snscb_cthdr.ct_reason,
-+                  rs1->snscb_cthdr.ct_explanation, 0);
-+              FC_SCRATCH_RELEASE(isp);
-+              fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+              return (0);
-+      }
-+
-+      /*
-+       * Okay, we now have a list of Port IDs for this class of device.
-+       * Go through the list and for each one get the WWPN/WWNN for it
-+       * and tell the outer layers about it. The outer layer needs to
-+       * know: Port ID, WWNN, WWPN, FC4 type, and (possibly) port type.
-+       *
-+       * The lportdb structure is adequate for this.
-+       */
-+      i = -1;
-+      do {
-+              sns_gxn_id_req_t grqbuf, *gq = &grqbuf;
-+              sns_gxn_id_rsp_t *gs0, grsbuf, *gs1 = &grsbuf;
-+              struct lportdb lcl;
-+#if   0
-+              sns_gff_id_rsp_t *fs0, ffsbuf, *fs1 = &ffsbuf;
-+#endif
-+
-+              i++;
-+              MEMZERO(&lcl, sizeof (lcl));
-+              lcl.fc4_type = ftype;
-+              lcl.portid =
-+                  (((u_int32_t) rs1->snscb_ports[i].portid[0]) << 16) |
-+                  (((u_int32_t) rs1->snscb_ports[i].portid[1]) << 8) |
-+                  (((u_int32_t) rs1->snscb_ports[i].portid[2]));
-+
-+              MEMZERO((void *) gq, sizeof (sns_gxn_id_req_t));
-+              gq->snscb_rblen = SNS_GXN_ID_RESP_SIZE >> 1;
-+              gq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+GXOFF);
-+              gq->snscb_sblen = 6;
-+              gq->snscb_cmd = SNS_GPN_ID;
-+              gq->snscb_portid = lcl.portid;
-+              isp_put_gxn_id_request(isp, gq,
-+                  (sns_gxn_id_req_t *) fcp->isp_scratch);
-+              MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GXN_ID_REQ_SIZE);
-+              mbs.param[0] = MBOX_SEND_SNS;
-+              mbs.param[1] = SNS_GXN_ID_REQ_SIZE >> 1;
-+              mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+              mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+              /*
-+               * Leave 4 and 5 alone
-+               */
-+              mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+              mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+              if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+                      if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+                              fcp->isp_loopstate = LOOP_PDB_RCVD;
-+                      }
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (-1);
-+              }
-+              if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (-1);
-+              }
-+              MEMORYBARRIER(isp, SYNC_SFORCPU, GXOFF, SNS_GXN_ID_RESP_SIZE);
-+              gs0 = (sns_gxn_id_rsp_t *) ((u_int8_t *)fcp->isp_scratch+GXOFF);
-+              isp_get_gxn_id_response(isp, gs0, gs1);
-+              if (gs1->snscb_cthdr.ct_response != FS_ACC) {
-+                      isp_prt(isp, ISP_LOGWARN, swrej, "GPN_ID",
-+                          gs1->snscb_cthdr.ct_reason,
-+                          gs1->snscb_cthdr.ct_explanation, lcl.portid);
-+                      if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+                              FC_SCRATCH_RELEASE(isp);
-+                              return (-1);
-+                      }
-+                      continue;
-+              }
-+              lcl.port_wwn = 
-+                  (((u_int64_t)gs1->snscb_wwn[0]) << 56) |
-+                  (((u_int64_t)gs1->snscb_wwn[1]) << 48) |
-+                  (((u_int64_t)gs1->snscb_wwn[2]) << 40) |
-+                  (((u_int64_t)gs1->snscb_wwn[3]) << 32) |
-+                  (((u_int64_t)gs1->snscb_wwn[4]) << 24) |
-+                  (((u_int64_t)gs1->snscb_wwn[5]) << 16) |
-+                  (((u_int64_t)gs1->snscb_wwn[6]) <<  8) |
-+                  (((u_int64_t)gs1->snscb_wwn[7]));
-+
-+              MEMZERO((void *) gq, sizeof (sns_gxn_id_req_t));
-+              gq->snscb_rblen = SNS_GXN_ID_RESP_SIZE >> 1;
-+              gq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+GXOFF);
-+              gq->snscb_sblen = 6;
-+              gq->snscb_cmd = SNS_GNN_ID;
-+              gq->snscb_portid = lcl.portid;
-+              isp_put_gxn_id_request(isp, gq,
-+                  (sns_gxn_id_req_t *) fcp->isp_scratch);
-+              MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GXN_ID_REQ_SIZE);
-+              mbs.param[0] = MBOX_SEND_SNS;
-+              mbs.param[1] = SNS_GXN_ID_REQ_SIZE >> 1;
-+              mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+              mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+              /*
-+               * Leave 4 and 5 alone
-+               */
-+              mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+              mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+              if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+                      if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+                              fcp->isp_loopstate = LOOP_PDB_RCVD;
-+                      }
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (-1);
-+              }
-+              if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (-1);
-+              }
-+              MEMORYBARRIER(isp, SYNC_SFORCPU, GXOFF, SNS_GXN_ID_RESP_SIZE);
-+              gs0 = (sns_gxn_id_rsp_t *) ((u_int8_t *)fcp->isp_scratch+GXOFF);
-+              isp_get_gxn_id_response(isp, gs0, gs1);
-+              if (gs1->snscb_cthdr.ct_response != FS_ACC) {
-+                      isp_prt(isp, ISP_LOGWARN, swrej, "GNN_ID",
-+                          gs1->snscb_cthdr.ct_reason,
-+                          gs1->snscb_cthdr.ct_explanation, lcl.portid);
-+                      if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+                              FC_SCRATCH_RELEASE(isp);
-+                              return (-1);
-+                      }
-+                      continue;
-+              }
-+              lcl.node_wwn = 
-+                  (((u_int64_t)gs1->snscb_wwn[0]) << 56) |
-+                  (((u_int64_t)gs1->snscb_wwn[1]) << 48) |
-+                  (((u_int64_t)gs1->snscb_wwn[2]) << 40) |
-+                  (((u_int64_t)gs1->snscb_wwn[3]) << 32) |
-+                  (((u_int64_t)gs1->snscb_wwn[4]) << 24) |
-+                  (((u_int64_t)gs1->snscb_wwn[5]) << 16) |
-+                  (((u_int64_t)gs1->snscb_wwn[6]) <<  8) |
-+                  (((u_int64_t)gs1->snscb_wwn[7]));
-+
-+              /*
-+               * The QLogic f/w is bouncing this with a parameter error.
-+               */
-+#if   0
-+              /*
-+               * Try and get FC4 Features (FC-GS-3 only).
-+               * We can use the sns_gxn_id_req_t for this request.
-+               */
-+              MEMZERO((void *) gq, sizeof (sns_gxn_id_req_t));
-+              gq->snscb_rblen = SNS_GFF_ID_RESP_SIZE >> 1;
-+              gq->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma+GXOFF);
-+              gq->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma+GXOFF);
-+              gq->snscb_sblen = 6;
-+              gq->snscb_cmd = SNS_GFF_ID;
-+              gq->snscb_portid = lcl.portid;
-+              isp_put_gxn_id_request(isp, gq,
-+                  (sns_gxn_id_req_t *) fcp->isp_scratch);
-+              MEMORYBARRIER(isp, SYNC_SFORDEV, 0, SNS_GXN_ID_REQ_SIZE);
-+              mbs.param[0] = MBOX_SEND_SNS;
-+              mbs.param[1] = SNS_GXN_ID_REQ_SIZE >> 1;
-+              mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+              mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+              /*
-+               * Leave 4 and 5 alone
-+               */
-+              mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+              mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+              if (isp_fabric_mbox_cmd(isp, &mbs)) {
-+                      if (fcp->isp_loopstate >= LOOP_SCANNING_FABRIC) {
-+                              fcp->isp_loopstate = LOOP_PDB_RCVD;
-+                      }
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (-1);
-+              }
-+              if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+                      FC_SCRATCH_RELEASE(isp);
-+                      return (-1);
-+              }
-+              MEMORYBARRIER(isp, SYNC_SFORCPU, GXOFF, SNS_GFF_ID_RESP_SIZE);
-+              fs0 = (sns_gff_id_rsp_t *) ((u_int8_t *)fcp->isp_scratch+GXOFF);
-+              isp_get_gff_id_response(isp, fs0, fs1);
-+              if (fs1->snscb_cthdr.ct_response != FS_ACC) {
-+                      isp_prt(isp, /* ISP_LOGDEBUG0 */ ISP_LOGWARN,
-+                          swrej, "GFF_ID",
-+                          fs1->snscb_cthdr.ct_reason,
-+                          fs1->snscb_cthdr.ct_explanation, lcl.portid);
-+                      if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
-+                              FC_SCRATCH_RELEASE(isp);
-+                              return (-1);
-+                      }
-+              } else {
-+                      int index = (ftype >> 3);
-+                      int bshft = (ftype & 0x7) * 4;
-+                      int fc4_fval =
-+                          (fs1->snscb_fc4_features[index] >> bshft) & 0xf;
-+                      if (fc4_fval & 0x1) {
-+                              lcl.roles |=
-+                                  (SVC3_INI_ROLE >> SVC3_ROLE_SHIFT);
-+                      }
-+                      if (fc4_fval & 0x2) {
-+                              lcl.roles |=
-+                                  (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT);
-+                      }
-+              }
-+#endif
-+
-+              /*
-+               * If we really want to know what kind of port type this is,
-+               * we have to run another CT command. Otherwise, we'll leave
-+               * it as undefined.
-+               *
-+              lcl.port_type = 0;
-+               */
-+              if (rs1->snscb_ports[i].control & 0x80) {
-+                      lcl.last_fabric_dev = 1;
-+              } else {
-+                      lcl.last_fabric_dev = 0;
-+              }
-+              (void) isp_async(isp, ISPASYNC_FABRIC_DEV, &lcl);
-+
-+      } while ((rs1->snscb_ports[i].control & 0x80) == 0 && i < NGENT-1);
-+
-+      /*
-+       * If we're not at the last entry, our list isn't big enough.
-+       */
-+      if ((rs1->snscb_ports[i].control & 0x80) == 0) {
-+              isp_prt(isp, ISP_LOGWARN, "fabric too big for scratch area");
-+      }
-+
-+      FC_SCRATCH_RELEASE(isp);
-+      fcp->isp_loopstate = LOOP_FSCAN_DONE;
-+      return (0);
-+}
-+#endif
-+
-+static void
-+isp_register_fc4_type(struct ispsoftc *isp)
-+{
-+      fcparam *fcp = isp->isp_param;
-+      u_int8_t local[SNS_RFT_ID_REQ_SIZE];
-+      sns_screq_t *reqp = (sns_screq_t *) local;
-+      mbreg_t mbs;
-+
-+      MEMZERO((void *) reqp, SNS_RFT_ID_REQ_SIZE);
-+      reqp->snscb_rblen = SNS_RFT_ID_RESP_SIZE >> 1;
-+      reqp->snscb_addr[RQRSP_ADDR0015] = DMA_WD0(fcp->isp_scdma + 0x100);
-+      reqp->snscb_addr[RQRSP_ADDR1631] = DMA_WD1(fcp->isp_scdma + 0x100);
-+      reqp->snscb_addr[RQRSP_ADDR3247] = DMA_WD2(fcp->isp_scdma + 0x100);
-+      reqp->snscb_addr[RQRSP_ADDR4863] = DMA_WD3(fcp->isp_scdma + 0x100);
-+      reqp->snscb_sblen = 22;
-+      reqp->snscb_data[0] = SNS_RFT_ID;
-+      reqp->snscb_data[4] = fcp->isp_portid & 0xffff;
-+      reqp->snscb_data[5] = (fcp->isp_portid >> 16) & 0xff;
-+      reqp->snscb_data[6] = (1 << FC4_SCSI);
-+#if   0
-+      reqp->snscb_data[6] |= (1 << FC4_IP);   /* ISO/IEC 8802-2 LLC/SNAP */
-+#endif
-+      FC_SCRATCH_ACQUIRE(isp);
-+      isp_put_sns_request(isp, reqp, (sns_screq_t *) fcp->isp_scratch);
-+      mbs.param[0] = MBOX_SEND_SNS;
-+      mbs.param[1] = SNS_RFT_ID_REQ_SIZE >> 1;
-+      mbs.param[2] = DMA_WD1(fcp->isp_scdma);
-+      mbs.param[3] = DMA_WD0(fcp->isp_scdma);
-+      /*
-+       * Leave 4 and 5 alone
-+       */
-+      mbs.param[6] = DMA_WD3(fcp->isp_scdma);
-+      mbs.param[7] = DMA_WD2(fcp->isp_scdma);
-+      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+      FC_SCRATCH_RELEASE(isp);
-+      if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+              isp_prt(isp, ISP_LOGDEBUG0, "Register FC4 types succeeded");
-+      }
-+}
-+
-+/*
-+ * Start a command. Locking is assumed done in the caller.
-+ */
-+
-+int
-+isp_start(XS_T *xs)
-+{
-+      struct ispsoftc *isp;
-+      u_int16_t nxti, optr, handle;
-+      u_int8_t local[QENTRY_LEN];
-+      ispreq_t *reqp, *qep;
-+      int target, i;
-+
-+      XS_INITERR(xs);
-+      isp = XS_ISP(xs);
-+
-+      /*
-+       * Check to make sure we're supporting initiator role.
-+       */
-+      if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
-+              XS_SETERR(xs, HBA_SELTIMEOUT);
-+              return (CMD_COMPLETE);
-+      }
-+
-+      /*
-+       * Now make sure we're running.
-+       */
-+
-+      if (isp->isp_state != ISP_RUNSTATE) {
-+              isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE");
-+              XS_SETERR(xs, HBA_BOTCH);
-+              return (CMD_COMPLETE);
-+      }
-+
-+      /*
-+       * Check command CDB length, etc.. We really are limited to 16 bytes
-+       * for Fibre Channel, but can do up to 44 bytes in parallel SCSI,
-+       * but probably only if we're running fairly new firmware (we'll
-+       * let the old f/w choke on an extended command queue entry).
-+       */
-+
-+      if (XS_CDBLEN(xs) > (IS_FC(isp)? 16 : 44) || XS_CDBLEN(xs) == 0) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "unsupported cdb length (%d, CDB[0]=0x%x)",
-+                  XS_CDBLEN(xs), XS_CDBP(xs)[0] & 0xff);
-+              XS_SETERR(xs, HBA_BOTCH);
-+              return (CMD_COMPLETE);
-+      }
-+
-+      /*
-+       * Check to see whether we have good firmware state still or
-+       * need to refresh our port database for this target.
-+       */
-+      target = XS_TGT(xs);
-+      if (IS_FC(isp)) {
-+              fcparam *fcp = isp->isp_param;
-+              struct lportdb *lp;
-+#ifdef        HANDLE_LOOPSTATE_IN_OUTER_LAYERS
-+              if (fcp->isp_fwstate != FW_READY ||
-+                  fcp->isp_loopstate != LOOP_READY) {
-+                      return (CMD_RQLATER);
-+              }
-+
-+              /*
-+               * If we're not on a Fabric, we can't have a target
-+               * above FL_PORT_ID-1.
-+               *
-+               * If we're on a fabric and *not* connected as an F-port,
-+               * we can't have a target less than FC_SNS_ID+1. This
-+               * keeps us from having to sort out the difference between
-+               * local public loop devices and those which we might get
-+               * from a switch's database.
-+               */
-+              if (fcp->isp_onfabric == 0) {
-+                      if (target >= FL_PORT_ID) {
-+                              XS_SETERR(xs, HBA_SELTIMEOUT);
-+                              return (CMD_COMPLETE);
-+                      }
-+              } else {
-+                      if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+                              XS_SETERR(xs, HBA_SELTIMEOUT);
-+                              return (CMD_COMPLETE);
-+                      }
-+                      /*
-+                       * We used to exclude having local loop ports
-+                       * at the same time that we have fabric ports.
-+                       * That is, we used to exclude having ports
-+                       * at < FL_PORT_ID if we're FL-port.
-+                       *
-+                       * That's wrong. The only thing that could be
-+                       * dicey is if the switch you're connected to
-+                       * has these local loop ports appear on the
-+                       * fabric and we somehow attach them twice.
-+                       */
-+              }
-+#else
-+              /*
-+               * Check for f/w being in ready state. If the f/w
-+               * isn't in ready state, then we don't know our
-+               * loop ID and the f/w hasn't completed logging
-+               * into all targets on the loop. If this is the
-+               * case, then bounce the command. We pretend this is
-+               * a SELECTION TIMEOUT error if we've never gone to
-+               * FW_READY state at all- in this case we may not
-+               * be hooked to a loop at all and we shouldn't hang
-+               * the machine for this. Otherwise, defer this command
-+               * until later.
-+               */
-+              if (fcp->isp_fwstate != FW_READY) {
-+                      /*
-+                       * Give ourselves at most a 250ms delay.
-+                       */
-+                      if (isp_fclink_test(isp, 250000)) {
-+                              XS_SETERR(xs, HBA_SELTIMEOUT);
-+                              if (fcp->loop_seen_once) {
-+                                      return (CMD_RQLATER);
-+                              } else {
-+                                      return (CMD_COMPLETE);
-+                              }
-+                      }
-+              }
-+
-+              /*
-+               * If we're not on a Fabric, we can't have a target
-+               * above FL_PORT_ID-1.
-+               *
-+               * If we're on a fabric and *not* connected as an F-port,
-+               * we can't have a target less than FC_SNS_ID+1. This
-+               * keeps us from having to sort out the difference between
-+               * local public loop devices and those which we might get
-+               * from a switch's database.
-+               */
-+              if (fcp->isp_onfabric == 0) {
-+                      if (target >= FL_PORT_ID) {
-+                              XS_SETERR(xs, HBA_SELTIMEOUT);
-+                              return (CMD_COMPLETE);
-+                      }
-+              } else {
-+                      if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+                              XS_SETERR(xs, HBA_SELTIMEOUT);
-+                              return (CMD_COMPLETE);
-+                      }
-+                      if (fcp->isp_topo != TOPO_F_PORT &&
-+                          target < FL_PORT_ID) {
-+                              XS_SETERR(xs, HBA_SELTIMEOUT);
-+                              return (CMD_COMPLETE);
-+                      }
-+              }
-+
-+              /*
-+               * If our loop state is such that we haven't yet received
-+               * a "Port Database Changed" notification (after a LIP or
-+               * a Loop Reset or firmware initialization), then defer
-+               * sending commands for a little while, but only if we've
-+               * seen a valid loop at one point (otherwise we can get
-+               * stuck at initialization time).
-+               */
-+              if (fcp->isp_loopstate < LOOP_PDB_RCVD) {
-+                      XS_SETERR(xs, HBA_SELTIMEOUT);
-+                      if (fcp->loop_seen_once) {
-+                              return (CMD_RQLATER);
-+                      } else {
-+                              return (CMD_COMPLETE);
-+                      }
-+              }
-+
-+              /*
-+               * If we're in the middle of loop or fabric scanning
-+               * or merging the port databases, retry this command later.
-+               */
-+              if (fcp->isp_loopstate == LOOP_SCANNING_FABRIC ||
-+                  fcp->isp_loopstate == LOOP_SCANNING_LOOP ||
-+                  fcp->isp_loopstate == LOOP_SYNCING_PDB) {
-+                      return (CMD_RQLATER);
-+              }
-+
-+              /*
-+               * If our loop state is now such that we've just now
-+               * received a Port Database Change notification, then
-+               * we have to go off and (re)scan the fabric. We back
-+               * out and try again later if this doesn't work.
-+               */
-+              if (fcp->isp_loopstate == LOOP_PDB_RCVD && fcp->isp_onfabric) {
-+                      if (isp_scan_fabric(isp, FC4_SCSI)) {
-+                              return (CMD_RQLATER);
-+                      }
-+                      if (fcp->isp_fwstate != FW_READY ||
-+                          fcp->isp_loopstate < LOOP_FSCAN_DONE) {
-+                              return (CMD_RQLATER);
-+                      }
-+              }
-+
-+              /*
-+               * If our loop state is now such that we've just now
-+               * received a Port Database Change notification, then
-+               * we have to go off and (re)synchronize our port
-+               * database.
-+               */
-+              if (fcp->isp_loopstate < LOOP_READY) {
-+                      if (isp_pdb_sync(isp)) {
-+                              return (CMD_RQLATER);
-+                      }
-+                      if (fcp->isp_fwstate != FW_READY ||
-+                          fcp->isp_loopstate != LOOP_READY) {
-+                              return (CMD_RQLATER);
-+                      }
-+              }
-+
-+              /*
-+               * XXX: Here's were we would cancel any loop_dead flag
-+               * XXX: also cancel in dead_loop timeout that's running
-+               */
-+#endif
-+
-+              /*
-+               * Now check whether we should even think about pursuing this.
-+               */
-+              lp = &fcp->portdb[target];
-+              if (lp->valid == 0) {
-+                      XS_SETERR(xs, HBA_SELTIMEOUT);
-+                      return (CMD_COMPLETE);
-+              }
-+              if ((lp->roles & (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT)) == 0) {
-+                      isp_prt(isp, ISP_LOGDEBUG2,
-+                          "Target %d does not have target service", target);
-+                      XS_SETERR(xs, HBA_SELTIMEOUT);
-+                      return (CMD_COMPLETE);
-+              }
-+              /*
-+               * Now turn target into what the actual Loop ID is.
-+               */
-+              target = lp->loopid;
-+      }
-+
-+      /*
-+       * Next check to see if any HBA or Device
-+       * parameters need to be updated.
-+       */
-+      if (isp->isp_update != 0) {
-+              isp_update(isp);
-+      }
-+
-+      if (isp_getrqentry(isp, &nxti, &optr, (void *)&qep)) {
-+              isp_prt(isp, ISP_LOGDEBUG0, "Request Queue Overflow");
-+              XS_SETERR(xs, HBA_BOTCH);
-+              return (CMD_EAGAIN);
-+      }
-+
-+      /*
-+       * Now see if we need to synchronize the ISP with respect to anything.
-+       * We do dual duty here (cough) for synchronizing for busses other
-+       * than which we got here to send a command to.
-+       */
-+      reqp = (ispreq_t *) local;
-+      if (isp->isp_sendmarker) {
-+              u_int8_t n = (IS_DUALBUS(isp)? 2: 1);
-+              /*
-+               * Check ports to send markers for...
-+               */
-+              for (i = 0; i < n; i++) {
-+                      if ((isp->isp_sendmarker & (1 << i)) == 0) {
-+                              continue;
-+                      }
-+                      MEMZERO((void *) reqp, QENTRY_LEN);
-+                      reqp->req_header.rqs_entry_count = 1;
-+                      reqp->req_header.rqs_entry_type = RQSTYPE_MARKER;
-+                      reqp->req_modifier = SYNC_ALL;
-+                      reqp->req_target = i << 7;      /* insert bus number */
-+                      isp_put_request(isp, reqp, qep);
-+                      ISP_ADD_REQUEST(isp, nxti);
-+                      isp->isp_sendmarker &= ~(1 << i);
-+                      if (isp_getrqentry(isp, &nxti, &optr, (void *) &qep)) {
-+                              isp_prt(isp, ISP_LOGDEBUG0,
-+                                  "Request Queue Overflow+");
-+                              XS_SETERR(xs, HBA_BOTCH);
-+                              return (CMD_EAGAIN);
-+                      }
-+              }
-+      }
-+
-+      MEMZERO((void *)reqp, QENTRY_LEN);
-+      reqp->req_header.rqs_entry_count = 1;
-+      if (IS_FC(isp)) {
-+              reqp->req_header.rqs_entry_type = RQSTYPE_T2RQS;
-+      } else {
-+              if (XS_CDBLEN(xs) > 12)
-+                      reqp->req_header.rqs_entry_type = RQSTYPE_CMDONLY;
-+              else
-+                      reqp->req_header.rqs_entry_type = RQSTYPE_REQUEST;
-+      }
-+      /* reqp->req_header.rqs_flags = 0; */
-+      /* reqp->req_header.rqs_seqno = 0; */
-+      if (IS_FC(isp)) {
-+              /*
-+               * See comment in isp_intr
-+               */
-+              /* XS_RESID(xs) = 0; */
-+
-+              /*
-+               * Fibre Channel always requires some kind of tag.
-+               * The Qlogic drivers seem be happy not to use a tag,
-+               * but this breaks for some devices (IBM drives).
-+               */
-+              if (XS_TAG_P(xs)) {
-+                      ((ispreqt2_t *)reqp)->req_flags = XS_TAG_TYPE(xs);
-+              } else {
-+                      /*
-+                       * If we don't know what tag to use, use HEAD OF QUEUE
-+                       * for Request Sense or Simple.
-+                       */
-+                      if (XS_CDBP(xs)[0] == 0x3)      /* REQUEST SENSE */
-+                              ((ispreqt2_t *)reqp)->req_flags = REQFLAG_HTAG;
-+                      else
-+                              ((ispreqt2_t *)reqp)->req_flags = REQFLAG_STAG;
-+              }
-+      } else {
-+              sdparam *sdp = (sdparam *)isp->isp_param;
-+              sdp += XS_CHANNEL(xs);
-+              if ((sdp->isp_devparam[target].actv_flags & DPARM_TQING) &&
-+                  XS_TAG_P(xs)) {
-+                      reqp->req_flags = XS_TAG_TYPE(xs);
-+              }
-+      }
-+      reqp->req_target = target | (XS_CHANNEL(xs) << 7);
-+      if (IS_SCSI(isp)) {
-+              reqp->req_lun_trn = XS_LUN(xs);
-+              reqp->req_cdblen = XS_CDBLEN(xs);
-+      } else {
-+              if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN)
-+                      ((ispreqt2_t *)reqp)->req_scclun = XS_LUN(xs);
-+              else
-+                      ((ispreqt2_t *)reqp)->req_lun_trn = XS_LUN(xs);
-+      }
-+      MEMCPY(reqp->req_cdb, XS_CDBP(xs), XS_CDBLEN(xs));
-+
-+      reqp->req_time = XS_TIME(xs) / 1000;
-+      if (reqp->req_time == 0 && XS_TIME(xs)) {
-+              reqp->req_time = 1;
-+      }
-+
-+      if (isp_save_xs(isp, xs, &handle)) {
-+              isp_prt(isp, ISP_LOGDEBUG0, "out of xflist pointers");
-+              XS_SETERR(xs, HBA_BOTCH);
-+              return (CMD_EAGAIN);
-+      }
-+      reqp->req_handle = handle;
-+
-+      /*
-+       * Set up DMA and/or do any bus swizzling of the request entry
-+       * so that the Qlogic F/W understands what is being asked of it.
-+       */
-+      i = ISP_DMASETUP(isp, xs, reqp, &nxti, optr);
-+      if (i != CMD_QUEUED) {
-+              isp_destroy_handle(isp, handle);
-+              /*
-+               * dmasetup sets actual error in packet, and
-+               * return what we were given to return.
-+               */
-+              return (i);
-+      }
-+      XS_SETERR(xs, HBA_NOERROR);
-+      isp_prt(isp, ISP_LOGDEBUG2,
-+          "START cmd for %d.%d.%d cmd 0x%x datalen %ld",
-+          XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), XS_CDBP(xs)[0],
-+          (long) XS_XFRLEN(xs));
-+      ISP_ADD_REQUEST(isp, nxti);
-+      isp->isp_nactive++;
-+      return (CMD_QUEUED);
-+}
-+
-+/*
-+ * isp control
-+ * Locks (ints blocked) assumed held.
-+ */
-+
-+int
-+isp_control(struct ispsoftc *isp, ispctl_t ctl, void *arg)
-+{
-+      XS_T *xs;
-+      mbreg_t mbs;
-+      int bus, tgt;
-+      u_int16_t handle;
-+
-+      switch (ctl) {
-+      default:
-+              isp_prt(isp, ISP_LOGERR, "Unknown Control Opcode 0x%x", ctl);
-+              break;
-+
-+      case ISPCTL_RESET_BUS:
-+              /*
-+               * Issue a bus reset.
-+               */
-+              mbs.param[0] = MBOX_BUS_RESET;
-+              mbs.param[2] = 0;
-+              if (IS_SCSI(isp)) {
-+                      mbs.param[1] =
-+                          ((sdparam *) isp->isp_param)->isp_bus_reset_delay;
-+                      if (mbs.param[1] < 2)
-+                              mbs.param[1] = 2;
-+                      bus = *((int *) arg);
-+                      if (IS_DUALBUS(isp))
-+                              mbs.param[2] = bus;
-+              } else {
-+                      mbs.param[1] = 10;
-+                      bus = 0;
-+              }
-+              isp->isp_sendmarker |= (1 << bus);
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      break;
-+              }
-+              isp_prt(isp, ISP_LOGINFO,
-+                  "driver initiated bus reset of bus %d", bus);
-+              return (0);
-+
-+      case ISPCTL_RESET_DEV:
-+              tgt = (*((int *) arg)) & 0xffff;
-+              bus = (*((int *) arg)) >> 16;
-+              mbs.param[0] = MBOX_ABORT_TARGET;
-+              mbs.param[1] = (tgt << 8) | (bus << 15);
-+              mbs.param[2] = 3;       /* 'delay', in seconds */
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      break;
-+              }
-+              isp_prt(isp, ISP_LOGINFO,
-+                  "Target %d on Bus %d Reset Succeeded", tgt, bus);
-+              isp->isp_sendmarker |= (1 << bus);
-+              return (0);
-+
-+      case ISPCTL_ABORT_CMD:
-+              xs = (XS_T *) arg;
-+              tgt = XS_TGT(xs);
-+              handle = isp_find_handle(isp, xs);
-+              if (handle == 0) {
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "cannot find handle for command to abort");
-+                      break;
-+              }
-+              bus = XS_CHANNEL(xs);
-+              mbs.param[0] = MBOX_ABORT;
-+              if (IS_FC(isp)) {
-+                      if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN)  {
-+                              mbs.param[1] = tgt << 8;
-+                              mbs.param[4] = 0;
-+                              mbs.param[5] = 0;
-+                              mbs.param[6] = XS_LUN(xs);
-+                      } else {
-+                              mbs.param[1] = tgt << 8 | XS_LUN(xs);
-+                      }
-+              } else {
-+                      mbs.param[1] =
-+                          (bus << 15) | (XS_TGT(xs) << 8) | XS_LUN(xs);
-+              }
-+              mbs.param[3] = 0;
-+              mbs.param[2] = handle;
-+              isp_mboxcmd(isp, &mbs, MBLOGALL & ~MBOX_COMMAND_ERROR);
-+              if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+                      return (0);
-+              }
-+              /*
-+               * XXX: Look for command in the REQUEST QUEUE. That is,
-+               * XXX: It hasen't been picked up by firmware yet.
-+               */
-+              break;
-+
-+      case ISPCTL_UPDATE_PARAMS:
-+
-+              isp_update(isp);
-+              return (0);
-+
-+      case ISPCTL_FCLINK_TEST:
-+
-+              if (IS_FC(isp)) {
-+                      int usdelay = (arg)? *((int *) arg) : 250000;
-+                      return (isp_fclink_test(isp, usdelay));
-+              }
-+              break;
-+
-+      case ISPCTL_SCAN_FABRIC:
-+
-+              if (IS_FC(isp)) {
-+                      int ftype = (arg)? *((int *) arg) : FC4_SCSI;
-+                      return (isp_scan_fabric(isp, ftype));
-+              }
-+              break;
-+
-+      case ISPCTL_SCAN_LOOP:
-+
-+              if (IS_FC(isp)) {
-+                      return (isp_scan_loop(isp));
-+              }
-+              break;
-+
-+      case ISPCTL_PDB_SYNC:
-+
-+              if (IS_FC(isp)) {
-+                      return (isp_pdb_sync(isp));
-+              }
-+              break;
-+
-+      case ISPCTL_SEND_LIP:
-+
-+              if (IS_FC(isp)) {
-+                      mbs.param[0] = MBOX_INIT_LIP;
-+                      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+                      if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+                              return (0);
-+                      }
-+              }
-+              break;
-+
-+      case ISPCTL_GET_POSMAP:
-+
-+              if (IS_FC(isp) && arg) {
-+                      return (isp_getmap(isp, arg));
-+              }
-+              break;
-+
-+      case ISPCTL_RUN_MBOXCMD:
-+
-+              isp_mboxcmd(isp, arg, MBLOGALL);
-+              return(0);
-+
-+#ifdef        ISP_TARGET_MODE
-+      case ISPCTL_TOGGLE_TMODE:
-+      {
-+
-+              /*
-+               * We don't check/set against role here- that's the
-+               * responsibility for the outer layer to coordinate.
-+               */
-+              if (IS_SCSI(isp)) {
-+                      int param = *(int *)arg;
-+                      mbs.param[0] = MBOX_ENABLE_TARGET_MODE;
-+                      mbs.param[1] = param & 0xffff;
-+                      mbs.param[2] = param >> 16;
-+                      isp_mboxcmd(isp, &mbs, MBLOGALL);
-+                      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                              break;
-+                      }
-+              }
-+              return (0);
-+      }
-+#endif
-+      }
-+      return (-1);
-+}
-+
-+/*
-+ * Interrupt Service Routine(s).
-+ *
-+ * External (OS) framework has done the appropriate locking,
-+ * and the locking will be held throughout this function.
-+ */
-+
-+/*
-+ * Limit our stack depth by sticking with the max likely number
-+ * of completions on a request queue at any one time.
-+ */
-+#ifndef       MAX_REQUESTQ_COMPLETIONS
-+#define       MAX_REQUESTQ_COMPLETIONS        64
-+#endif
-+
-+void
-+isp_intr(struct ispsoftc *isp, u_int16_t isr, u_int16_t sema, u_int16_t mbox)
-+{
-+      XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs;
-+      u_int16_t iptr, optr, junk;
-+      int i, nlooked = 0, ndone = 0;
-+
-+again:
-+      /*
-+       * Is this a mailbox related interrupt?
-+       * The mailbox semaphore will be nonzero if so.
-+       */
-+      if (sema) {
-+              if (mbox & 0x4000) {
-+                      isp->isp_intmboxc++;
-+                      if (isp->isp_mboxbsy) {
-+                              int i = 0, obits = isp->isp_obits;
-+                              isp->isp_mboxtmp[i++] = mbox;
-+                              for (i = 1; i < MAX_MAILBOX; i++) {
-+                                      if ((obits & (1 << i)) == 0) {
-+                                              continue;
-+                                      }
-+                                      isp->isp_mboxtmp[i] =
-+                                          ISP_READ(isp, MBOX_OFF(i));
-+                              }
-+                              if (isp->isp_mbxwrk0) {
-+                                      if (isp_mbox_continue(isp) == 0) {
-+                                              return;
-+                                      }
-+                              }
-+                              MBOX_NOTIFY_COMPLETE(isp);
-+                      } else {
-+                              isp_prt(isp, ISP_LOGWARN,
-+                                  "Mbox Command Async (0x%x) with no waiters",
-+                                  mbox);
-+                      }
-+              } else if (isp_parse_async(isp, mbox) < 0) {
-+                      return;
-+              }
-+              if ((IS_FC(isp) && mbox != ASYNC_RIO_RESP) ||
-+                  isp->isp_state != ISP_RUNSTATE) {
-+                      ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+                      ISP_WRITE(isp, BIU_SEMA, 0);
-+                      return;
-+              }
-+      }
-+
-+      /*
-+       * We can't be getting this now.
-+       */
-+      if (isp->isp_state != ISP_RUNSTATE) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "interrupt (ISR=%x SEMA=%x) when not ready", isr, sema);
-+              /*
-+               * Thank you very much!  *Burrrp*!
-+               */
-+              WRITE_RESPONSE_QUEUE_OUT_POINTER(isp,
-+                  READ_RESPONSE_QUEUE_IN_POINTER(isp));
-+
-+              ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+              ISP_WRITE(isp, BIU_SEMA, 0);
-+              return;
-+      }
-+
-+      /*
-+       * Get the current Response Queue Out Pointer.
-+       *
-+       * If we're a 2300, we can ask what hardware what it thinks.
-+       */
-+      if (IS_23XX(isp)) {
-+              optr = ISP_READ(isp, isp->isp_respoutrp);
-+              /*
-+               * Debug: to be taken out eventually
-+               */
-+              if (isp->isp_residx != optr) {
-+                      isp_prt(isp, ISP_LOGWARN, "optr %x soft optr %x",
-+                          optr, isp->isp_residx);
-+              }
-+      } else {
-+              optr = isp->isp_residx;
-+      }
-+
-+      /*
-+       * You *must* read the Response Queue In Pointer
-+       * prior to clearing the RISC interrupt.
-+       *
-+       * Debounce the 2300 if revision less than 2.
-+       */
-+      if (IS_2100(isp) || (IS_2300(isp) && isp->isp_revision < 2)) {
-+              i = 0;
-+              do {
-+                      iptr = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+                      junk = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+              } while (junk != iptr && ++i < 1000);
-+
-+              if (iptr != junk) {
-+                      ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "Response Queue Out Pointer Unstable (%x, %x)",
-+                          iptr, junk);
-+                      return;
-+              }
-+      } else {
-+              iptr = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+      }
-+      isp->isp_resodx = iptr;
-+
-+
-+      if (optr == iptr && sema == 0) {
-+              /*
-+               * There are a lot of these- reasons unknown- mostly on
-+               * faster Alpha machines.
-+               *
-+               * I tried delaying after writing HCCR_CMD_CLEAR_RISC_INT to
-+               * make sure the old interrupt went away (to avoid 'ringing'
-+               * effects), but that didn't stop this from occurring.
-+               */
-+              if (IS_23XX(isp)) {
-+                      USEC_DELAY(100);
-+                      iptr = READ_RESPONSE_QUEUE_IN_POINTER(isp);
-+                      junk = ISP_READ(isp, BIU_R2HSTSLO);
-+              } else {
-+                      junk = ISP_READ(isp, BIU_ISR);
-+              }
-+              if (optr == iptr) {
-+                      if (IS_23XX(isp)) {
-+                              ;
-+                      } else {
-+                              sema = ISP_READ(isp, BIU_SEMA);
-+                              mbox = ISP_READ(isp, OUTMAILBOX0);
-+                              if ((sema & 0x3) && (mbox & 0x8000)) {
-+                                      goto again;
-+                              }
-+                      }
-+                      isp->isp_intbogus++;
-+                      isp_prt(isp, ISP_LOGDEBUG1,
-+                          "bogus intr- isr %x (%x) iptr %x optr %x",
-+                          isr, junk, iptr, optr);
-+              }
-+      }
-+      isp->isp_resodx = iptr;
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+      ISP_WRITE(isp, BIU_SEMA, 0);
-+
-+      if (isp->isp_rspbsy) {
-+              return;
-+      }
-+      isp->isp_rspbsy = 1;
-+
-+      while (optr != iptr) {
-+              ispstatusreq_t local, *sp = &local;
-+              isphdr_t *hp;
-+              int type;
-+              u_int16_t oop;
-+              int buddaboom = 0;
-+
-+              hp = (isphdr_t *) ISP_QUEUE_ENTRY(isp->isp_result, optr);
-+              oop = optr;
-+              optr = ISP_NXT_QENTRY(optr, RESULT_QUEUE_LEN(isp));
-+              nlooked++;
-+              /*
-+               * Synchronize our view of this response queue entry.
-+               */
-+              MEMORYBARRIER(isp, SYNC_RESULT, oop, QENTRY_LEN);
-+
-+              type = isp_get_response_type(isp, hp);
-+
-+              if (type == RQSTYPE_RESPONSE) {
-+                      isp_get_response(isp, (ispstatusreq_t *) hp, sp);
-+              } else if (type == RQSTYPE_RIO2) {
-+                      isp_rio2_t rio;
-+                      isp_get_rio2(isp, (isp_rio2_t *) hp, &rio);
-+                      for (i = 0; i < rio.req_header.rqs_seqno; i++) {
-+                              isp_fastpost_complete(isp, rio.req_handles[i]);
-+                      }
-+                      if (isp->isp_fpcchiwater < rio.req_header.rqs_seqno)
-+                              isp->isp_fpcchiwater = rio.req_header.rqs_seqno;
-+                      MEMZERO(hp, QENTRY_LEN);        /* PERF */
-+                      continue;
-+              } else {
-+                      /*
-+                       * Somebody reachable via isp_handle_other_response
-+                       * may have updated the response queue pointers for
-+                       * us, so we reload our goal index.
-+                       */
-+                      if (isp_handle_other_response(isp, type, hp, &optr)) {
-+                              iptr = isp->isp_resodx;
-+                              MEMZERO(hp, QENTRY_LEN);        /* PERF */
-+                              continue;
-+                      }
-+
-+                      /*
-+                       * After this point, we'll just look at the header as
-+                       * we don't know how to deal with the rest of the
-+                       * response.
-+                       */
-+                      isp_get_response(isp, (ispstatusreq_t *) hp, sp);
-+
-+                      /*
-+                       * It really has to be a bounced request just copied
-+                       * from the request queue to the response queue. If
-+                       * not, something bad has happened.
-+                       */
-+                      if (sp->req_header.rqs_entry_type != RQSTYPE_REQUEST) {
-+                              isp_prt(isp, ISP_LOGERR, notresp,
-+                                  sp->req_header.rqs_entry_type, oop, optr,
-+                                  nlooked);
-+                              if (isp->isp_dblev & ISP_LOGDEBUG0) {
-+                                      isp_print_bytes(isp, "Queue Entry",
-+                                          QENTRY_LEN, sp);
-+                              }
-+                              MEMZERO(hp, QENTRY_LEN);        /* PERF */
-+                              continue;
-+                      }
-+                      buddaboom = 1;
-+              }
-+
-+              if (sp->req_header.rqs_flags & 0xf) {
-+#define       _RQS_OFLAGS     \
-+      ~(RQSFLAG_CONTINUATION|RQSFLAG_FULL|RQSFLAG_BADHEADER|RQSFLAG_BADPACKET)
-+                      if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) {
-+                              isp_prt(isp, ISP_LOGWARN,
-+                                  "continuation segment");
-+                              WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+                              continue;
-+                      }
-+                      if (sp->req_header.rqs_flags & RQSFLAG_FULL) {
-+                              isp_prt(isp, ISP_LOGDEBUG1,
-+                                  "internal queues full");
-+                              /*
-+                               * We'll synthesize a QUEUE FULL message below.
-+                               */
-+                      }
-+                      if (sp->req_header.rqs_flags & RQSFLAG_BADHEADER) {
-+                              isp_prt(isp, ISP_LOGERR,  "bad header flag");
-+                              buddaboom++;
-+                      }
-+                      if (sp->req_header.rqs_flags & RQSFLAG_BADPACKET) {
-+                              isp_prt(isp, ISP_LOGERR, "bad request packet");
-+                              buddaboom++;
-+                      }
-+                      if (sp->req_header.rqs_flags & _RQS_OFLAGS) {
-+                              isp_prt(isp, ISP_LOGERR,
-+                                  "unknown flags (0x%x) in response",
-+                                  sp->req_header.rqs_flags);
-+                              buddaboom++;
-+                      }
-+#undef        _RQS_OFLAGS
-+              }
-+              if (sp->req_handle > isp->isp_maxcmds || sp->req_handle < 1) {
-+                      MEMZERO(hp, QENTRY_LEN);        /* PERF */
-+                      isp_prt(isp, ISP_LOGERR,
-+                          "bad request handle %d (type 0x%x, flags 0x%x)",
-+                          sp->req_handle, sp->req_header.rqs_entry_type,
-+                          sp->req_header.rqs_flags);
-+                      WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+                      continue;
-+              }
-+              xs = isp_find_xs(isp, sp->req_handle);
-+              if (xs == NULL) {
-+                      u_int8_t ts = sp->req_completion_status & 0xff;
-+                      MEMZERO(hp, QENTRY_LEN);        /* PERF */
-+                      /*
-+                       * Only whine if this isn't the expected fallout of
-+                       * aborting the command.
-+                       */
-+                      if (sp->req_header.rqs_entry_type != RQSTYPE_RESPONSE) {
-+                              isp_prt(isp, ISP_LOGERR,
-+                                  "cannot find handle 0x%x (type 0x%x)",
-+                                  sp->req_handle,
-+                                  sp->req_header.rqs_entry_type);
-+                      } else if (ts != RQCS_ABORTED) {
-+                              isp_prt(isp, ISP_LOGERR,
-+                                  "cannot find handle 0x%x (status 0x%x)",
-+                                  sp->req_handle, ts);
-+                      }
-+                      WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+                      continue;
-+              }
-+              isp_destroy_handle(isp, sp->req_handle);
-+              if (sp->req_status_flags & RQSTF_BUS_RESET) {
-+                      XS_SETERR(xs, HBA_BUSRESET);
-+                      isp->isp_sendmarker |= (1 << XS_CHANNEL(xs));
-+              }
-+              if (buddaboom) {
-+                      XS_SETERR(xs, HBA_BOTCH);
-+              }
-+
-+              if (IS_FC(isp) && (sp->req_scsi_status & RQCS_SV)) {
-+                      /*
-+                       * Fibre Channel F/W doesn't say we got status
-+                       * if there's Sense Data instead. I guess they
-+                       * think it goes w/o saying.
-+                       */
-+                      sp->req_state_flags |= RQSF_GOT_STATUS;
-+              }
-+              if (sp->req_state_flags & RQSF_GOT_STATUS) {
-+                      *XS_STSP(xs) = sp->req_scsi_status & 0xff;
-+              }
-+
-+              switch (sp->req_header.rqs_entry_type) {
-+              case RQSTYPE_RESPONSE:
-+                      XS_SET_STATE_STAT(isp, xs, sp);
-+                      isp_parse_status(isp, sp, xs);
-+                      if ((XS_NOERR(xs) || XS_ERR(xs) == HBA_NOERROR) &&
-+                          (*XS_STSP(xs) == SCSI_BUSY)) {
-+                              XS_SETERR(xs, HBA_TGTBSY);
-+                      }
-+                      if (IS_SCSI(isp)) {
-+                              XS_RESID(xs) = sp->req_resid;
-+                              if ((sp->req_state_flags & RQSF_GOT_STATUS) &&
-+                                  (*XS_STSP(xs) == SCSI_CHECK) &&
-+                                  (sp->req_state_flags & RQSF_GOT_SENSE)) {
-+                                      XS_SAVE_SENSE(xs, sp);
-+                              }
-+                              /*
-+                               * A new synchronous rate was negotiated for
-+                               * this target. Mark state such that we'll go
-+                               * look up that which has changed later.
-+                               */
-+                              if (sp->req_status_flags & RQSTF_NEGOTIATION) {
-+                                      int t = XS_TGT(xs);
-+                                      sdparam *sdp = isp->isp_param;
-+                                      sdp += XS_CHANNEL(xs);
-+                                      sdp->isp_devparam[t].dev_refresh = 1;
-+                                      isp->isp_update |=
-+                                          (1 << XS_CHANNEL(xs));
-+                              }
-+                      } else {
-+                              if (sp->req_status_flags & RQSF_XFER_COMPLETE) {
-+                                      XS_RESID(xs) = 0;
-+                              } else if (sp->req_scsi_status & RQCS_RESID) {
-+                                      XS_RESID(xs) = sp->req_resid;
-+                              } else {
-+                                      XS_RESID(xs) = 0;
-+                              }
-+                              if ((sp->req_state_flags & RQSF_GOT_STATUS) &&
-+                                  (*XS_STSP(xs) == SCSI_CHECK) &&
-+                                  (sp->req_scsi_status & RQCS_SV)) {
-+                                      XS_SAVE_SENSE(xs, sp);
-+                                      /* solely for the benefit of debug */
-+                                      sp->req_state_flags |= RQSF_GOT_SENSE;
-+                              }
-+                      }
-+                      isp_prt(isp, ISP_LOGDEBUG2,
-+                         "asked for %ld got resid %ld", (long) XS_XFRLEN(xs),
-+                         (long) sp->req_resid);
-+                      break;
-+              case RQSTYPE_REQUEST:
-+                      if (sp->req_header.rqs_flags & RQSFLAG_FULL) {
-+                              /*
-+                               * Force Queue Full status.
-+                               */
-+                              *XS_STSP(xs) = SCSI_QFULL;
-+                              XS_SETERR(xs, HBA_NOERROR);
-+                      } else if (XS_NOERR(xs)) {
-+                              /*
-+                               * ????
-+                               */
-+                              isp_prt(isp, ISP_LOGDEBUG0,
-+                                  "Request Queue Entry bounced back");
-+                              XS_SETERR(xs, HBA_BOTCH);
-+                      }
-+                      XS_RESID(xs) = XS_XFRLEN(xs);
-+                      break;
-+              default:
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "unhandled response queue type 0x%x",
-+                          sp->req_header.rqs_entry_type);
-+                      if (XS_NOERR(xs)) {
-+                              XS_SETERR(xs, HBA_BOTCH);
-+                      }
-+                      break;
-+              }
-+
-+              /*
-+               * Free any dma resources. As a side effect, this may
-+               * also do any cache flushing necessary for data coherence.                      */
-+              if (XS_XFRLEN(xs)) {
-+                      ISP_DMAFREE(isp, xs, sp->req_handle);
-+              }
-+
-+              if (((isp->isp_dblev & (ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
-+                  ((isp->isp_dblev & ISP_LOGDEBUG1) && ((!XS_NOERR(xs)) ||
-+                  (*XS_STSP(xs) != SCSI_GOOD)))) {
-+                      char skey;
-+                      if (sp->req_state_flags & RQSF_GOT_SENSE) {
-+                              skey = XS_SNSKEY(xs) & 0xf;
-+                              if (skey < 10)
-+                                      skey += '0';
-+                              else
-+                                      skey += 'a' - 10;
-+                      } else if (*XS_STSP(xs) == SCSI_CHECK) {
-+                              skey = '?';
-+                      } else {
-+                              skey = '.';
-+                      }
-+                      isp_prt(isp, ISP_LOGALL, finmsg, XS_CHANNEL(xs),
-+                          XS_TGT(xs), XS_LUN(xs), XS_XFRLEN(xs), XS_RESID(xs),
-+                          *XS_STSP(xs), skey, XS_ERR(xs));
-+              }
-+
-+              if (isp->isp_nactive > 0)
-+                  isp->isp_nactive--;
-+              complist[ndone++] = xs; /* defer completion call until later */
-+              MEMZERO(hp, QENTRY_LEN);        /* PERF */
-+              if (ndone == MAX_REQUESTQ_COMPLETIONS) {
-+                      break;
-+              }
-+      }
-+
-+      /*
-+       * If we looked at any commands, then it's valid to find out
-+       * what the outpointer is. It also is a trigger to update the
-+       * ISP's notion of what we've seen so far.
-+       */
-+      if (nlooked) {
-+              WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, optr);
-+              /*
-+               * While we're at it, read the requst queue out pointer.
-+               */
-+              isp->isp_reqodx = READ_REQUEST_QUEUE_OUT_POINTER(isp);
-+              if (isp->isp_rscchiwater < ndone)
-+                      isp->isp_rscchiwater = ndone;
-+      }
-+
-+      isp->isp_residx = optr;
-+      isp->isp_rspbsy = 0;
-+      for (i = 0; i < ndone; i++) {
-+              xs = complist[i];
-+              if (xs) {
-+                      isp->isp_rsltccmplt++;
-+                      isp_done(xs);
-+              }
-+      }
-+}
-+
-+/*
-+ * Support routines.
-+ */
-+
-+static int
-+isp_parse_async(struct ispsoftc *isp, u_int16_t mbox)
-+{
-+      int rval = 0;
-+      int bus;
-+
-+      if (IS_DUALBUS(isp)) {
-+              bus = ISP_READ(isp, OUTMAILBOX6);
-+      } else {
-+              bus = 0;
-+      }
-+      isp_prt(isp, ISP_LOGDEBUG2, "Async Mbox 0x%x", mbox);
-+
-+      switch (mbox) {
-+      case ASYNC_BUS_RESET:
-+              isp->isp_sendmarker |= (1 << bus);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              isp_async(isp, ISPASYNC_BUS_RESET, &bus);
-+              break;
-+      case ASYNC_SYSTEM_ERROR:
-+#ifdef        ISP_FW_CRASH_DUMP
-+              /*
-+               * If we have crash dumps enabled, it's up to the handler
-+               * for isp_async to reinit stuff and restart the firmware
-+               * after performing the crash dump. The reason we do things
-+               * this way is that we may need to activate a kernel thread
-+               * to do all the crash dump goop.
-+               */
-+              isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+#else
-+              isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+              isp_reinit(isp);
-+              isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+#endif
-+              rval = -1;
-+              break;
-+
-+      case ASYNC_RQS_XFER_ERR:
-+              isp_prt(isp, ISP_LOGERR, "Request Queue Transfer Error");
-+              break;
-+
-+      case ASYNC_RSP_XFER_ERR:
-+              isp_prt(isp, ISP_LOGERR, "Response Queue Transfer Error");
-+              break;
-+
-+      case ASYNC_QWAKEUP:
-+              /*
-+               * We've just been notified that the Queue has woken up.
-+               * We don't need to be chatty about this- just unlatch things
-+               * and move on.
-+               */
-+              mbox = READ_REQUEST_QUEUE_OUT_POINTER(isp);
-+              break;
-+
-+      case ASYNC_TIMEOUT_RESET:
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "timeout initiated SCSI bus reset of bus %d", bus);
-+              isp->isp_sendmarker |= (1 << bus);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              break;
-+
-+      case ASYNC_DEVICE_RESET:
-+              isp_prt(isp, ISP_LOGINFO, "device reset on bus %d", bus);
-+              isp->isp_sendmarker |= (1 << bus);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              break;
-+
-+      case ASYNC_EXTMSG_UNDERRUN:
-+              isp_prt(isp, ISP_LOGWARN, "extended message underrun");
-+              break;
-+
-+      case ASYNC_SCAM_INT:
-+              isp_prt(isp, ISP_LOGINFO, "SCAM interrupt");
-+              break;
-+
-+      case ASYNC_HUNG_SCSI:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "stalled SCSI Bus after DATA Overrun");
-+              /* XXX: Need to issue SCSI reset at this point */
-+              break;
-+
-+      case ASYNC_KILLED_BUS:
-+              isp_prt(isp, ISP_LOGERR, "SCSI Bus reset after DATA Overrun");
-+              break;
-+
-+      case ASYNC_BUS_TRANSIT:
-+              mbox = ISP_READ(isp, OUTMAILBOX2);
-+              switch (mbox & 0x1c00) {
-+              case SXP_PINS_LVD_MODE:
-+                      isp_prt(isp, ISP_LOGINFO, "Transition to LVD mode");
-+                      SDPARAM(isp)->isp_diffmode = 0;
-+                      SDPARAM(isp)->isp_ultramode = 0;
-+                      SDPARAM(isp)->isp_lvdmode = 1;
-+                      break;
-+              case SXP_PINS_HVD_MODE:
-+                      isp_prt(isp, ISP_LOGINFO,
-+                          "Transition to Differential mode");
-+                      SDPARAM(isp)->isp_diffmode = 1;
-+                      SDPARAM(isp)->isp_ultramode = 0;
-+                      SDPARAM(isp)->isp_lvdmode = 0;
-+                      break;
-+              case SXP_PINS_SE_MODE:
-+                      isp_prt(isp, ISP_LOGINFO,
-+                          "Transition to Single Ended mode");
-+                      SDPARAM(isp)->isp_diffmode = 0;
-+                      SDPARAM(isp)->isp_ultramode = 1;
-+                      SDPARAM(isp)->isp_lvdmode = 0;
-+                      break;
-+              default:
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "Transition to Unknown Mode 0x%x", mbox);
-+                      break;
-+              }
-+              /*
-+               * XXX: Set up to renegotiate again!
-+               */
-+              /* Can only be for a 1080... */
-+              isp->isp_sendmarker |= (1 << bus);
-+              break;
-+
-+      /*
-+       * We can use bus, which will always be zero for FC cards,
-+       * as a mailbox pattern accumulator to be checked below.
-+       */
-+      case ASYNC_RIO5:
-+              bus = 0x1ce;    /* outgoing mailbox regs 1-3, 6-7 */
-+              break;
-+
-+      case ASYNC_RIO4:
-+              bus = 0x14e;    /* outgoing mailbox regs 1-3, 6 */
-+              break;
-+
-+      case ASYNC_RIO3:
-+              bus = 0x10e;    /* outgoing mailbox regs 1-3 */
-+              break;
-+
-+      case ASYNC_RIO2:
-+              bus = 0x106;    /* outgoing mailbox regs 1-2 */
-+              break;
-+
-+      case ASYNC_RIO1:
-+      case ASYNC_CMD_CMPLT:
-+              bus = 0x102;    /* outgoing mailbox regs 1 */
-+              break;
-+
-+      case ASYNC_RIO_RESP:
-+              return (rval);
-+
-+      case ASYNC_CTIO_DONE:
-+      {
-+#ifdef        ISP_TARGET_MODE
-+              int handle =
-+                  (ISP_READ(isp, OUTMAILBOX2) << 16) | 
-+                  (ISP_READ(isp, OUTMAILBOX1));
-+              if (isp_target_async(isp, handle, mbox))
-+                      rval = -1;
-+#else
-+              isp_prt(isp, ISP_LOGINFO, "Fast Posting CTIO done");
-+#endif
-+              isp->isp_fphccmplt++;   /* count it as a fast posting intr */
-+              break;
-+      }
-+      case ASYNC_LIP_F8:
-+      case ASYNC_LIP_OCCURRED:
-+              FCPARAM(isp)->isp_lipseq =
-+                  ISP_READ(isp, OUTMAILBOX1);
-+              FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+              FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+              isp->isp_sendmarker = 1;
-+              isp_mark_getpdb_all(isp);
-+              isp_async(isp, ISPASYNC_LIP, NULL);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              /*
-+               * We've had problems with data corruption occuring on
-+               * commands that complete (with no apparent error) after
-+               * we receive a LIP. This has been observed mostly on
-+               * Local Loop topologies. To be safe, let's just mark
-+               * all active commands as dead.
-+               */
-+              if (FCPARAM(isp)->isp_topo == TOPO_NL_PORT ||
-+                  FCPARAM(isp)->isp_topo == TOPO_FL_PORT) {
-+                      int i, j;
-+                      for (i = j = 0; i < isp->isp_maxcmds; i++) {
-+                              XS_T *xs;
-+                              xs = isp->isp_xflist[i];
-+                              if (xs != NULL) {
-+                                      j++;
-+                                      XS_SETERR(xs, HBA_BUSRESET);
-+                              }
-+                      }
-+                      if (j) {
-+                              isp_prt(isp, ISP_LOGERR,
-+                                  "LIP destroyed %d active commands", j);
-+                      }
-+              }
-+              break;
-+
-+      case ASYNC_LOOP_UP:
-+              isp->isp_sendmarker = 1;
-+              FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+              FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+              isp_mark_getpdb_all(isp);
-+              isp_async(isp, ISPASYNC_LOOP_UP, NULL);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              break;
-+
-+      case ASYNC_LOOP_DOWN:
-+              isp->isp_sendmarker = 1;
-+              FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+              FCPARAM(isp)->isp_loopstate = LOOP_NIL;
-+              isp_mark_getpdb_all(isp);
-+              isp_async(isp, ISPASYNC_LOOP_DOWN, NULL);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              break;
-+
-+      case ASYNC_LOOP_RESET:
-+              isp->isp_sendmarker = 1;
-+              FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+              FCPARAM(isp)->isp_loopstate = LOOP_NIL;
-+              isp_mark_getpdb_all(isp);
-+              isp_async(isp, ISPASYNC_LOOP_RESET, NULL);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              break;
-+
-+      case ASYNC_PDB_CHANGED:
-+              isp->isp_sendmarker = 1;
-+              FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+              isp_mark_getpdb_all(isp);
-+              isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_PDB);
-+              break;
-+
-+      case ASYNC_CHANGE_NOTIFY:
-+              /*
-+               * Not correct, but it will force us to rescan the loop.
-+               */
-+              FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+              isp_mark_getpdb_all(isp);
-+              isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_SNS);
-+              break;
-+
-+      case ASYNC_PTPMODE:
-+              if (FCPARAM(isp)->isp_onfabric)
-+                      FCPARAM(isp)->isp_topo = TOPO_F_PORT;
-+              else
-+                      FCPARAM(isp)->isp_topo = TOPO_N_PORT;
-+              isp_mark_getpdb_all(isp);
-+              isp->isp_sendmarker = 1;
-+              FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+              FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+              isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_OTHER);
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_async(isp, bus, mbox))
-+                      rval = -1;
-+#endif
-+              isp_prt(isp, ISP_LOGINFO, "Point-to-Point mode");
-+              break;
-+
-+      case ASYNC_CONNMODE:
-+              mbox = ISP_READ(isp, OUTMAILBOX1);
-+              isp_mark_getpdb_all(isp);
-+              switch (mbox) {
-+              case ISP_CONN_LOOP:
-+                      isp_prt(isp, ISP_LOGINFO,
-+                          "Point-to-Point -> Loop mode");
-+                      break;
-+              case ISP_CONN_PTP:
-+                      isp_prt(isp, ISP_LOGINFO,
-+                          "Loop -> Point-to-Point mode");
-+                      break;
-+              case ISP_CONN_BADLIP:
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "Point-to-Point -> Loop mode (BAD LIP)");
-+                      break;
-+              case ISP_CONN_FATAL:
-+                      isp_prt(isp, ISP_LOGERR, "FATAL CONNECTION ERROR");
-+#ifdef        ISP_FW_CRASH_DUMP
-+                      isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+#else
-+                      isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+                      isp_reinit(isp);
-+                      isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+#endif
-+                      return (-1);
-+              case ISP_CONN_LOOPBACK:
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "Looped Back in Point-to-Point mode");
-+                      break;
-+              default:
-+                      isp_prt(isp, ISP_LOGWARN,
-+                          "Unknown connection mode (0x%x)", mbox);
-+                      break;
-+              }
-+              isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_OTHER);
-+              isp->isp_sendmarker = 1;
-+              FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+              FCPARAM(isp)->isp_loopstate = LOOP_LIP_RCVD;
-+              break;
-+
-+      default:
-+              isp_prt(isp, ISP_LOGWARN, "Unknown Async Code 0x%x", mbox);
-+              break;
-+      }
-+
-+      if (bus & 0x100) {
-+              int i, nh;
-+              u_int16_t handles[5];
-+
-+              for (nh = 0, i = 1; i < MAX_MAILBOX; i++) {
-+                      if ((bus & (1 << i)) == 0) {
-+                              continue;
-+                      }
-+                      handles[nh++] = ISP_READ(isp, MBOX_OFF(i));
-+              }
-+              for (i = 0; i < nh; i++) {
-+                      isp_fastpost_complete(isp, handles[i]);
-+                      isp_prt(isp,  ISP_LOGDEBUG3,
-+                          "fast post completion of %u", handles[i]);
-+              }
-+              if (isp->isp_fpcchiwater < nh)
-+                      isp->isp_fpcchiwater = nh;
-+      } else {
-+              isp->isp_intoasync++;
-+      }
-+      return (rval);
-+}
-+
-+/*
-+ * Handle other response entries. A pointer to the request queue output
-+ * index is here in case we want to eat several entries at once, although
-+ * this is not used currently.
-+ */
-+
-+static int
-+isp_handle_other_response(struct ispsoftc *isp, int type,
-+    isphdr_t *hp, u_int16_t *optrp)
-+{
-+      switch (type) {
-+      case RQSTYPE_STATUS_CONT:
-+              isp_prt(isp, ISP_LOGINFO, "Ignored Continuation Response");
-+              return (1);
-+      case RQSTYPE_ATIO:
-+      case RQSTYPE_CTIO:
-+      case RQSTYPE_ENABLE_LUN:
-+      case RQSTYPE_MODIFY_LUN:
-+      case RQSTYPE_NOTIFY:
-+      case RQSTYPE_NOTIFY_ACK:
-+      case RQSTYPE_CTIO1:
-+      case RQSTYPE_ATIO2:
-+      case RQSTYPE_CTIO2:
-+      case RQSTYPE_CTIO3:
-+              isp->isp_rsltccmplt++;  /* count as a response completion */
-+#ifdef        ISP_TARGET_MODE
-+              if (isp_target_notify(isp, (ispstatusreq_t *) hp, optrp)) {
-+                      return (1);
-+              }
-+#endif
-+              /* FALLTHROUGH */
-+      case RQSTYPE_REQUEST:
-+      default:
-+              if (isp_async(isp, ISPASYNC_UNHANDLED_RESPONSE, hp)) {
-+                      return (1);
-+              }
-+              isp_prt(isp, ISP_LOGWARN, "Unhandled Response Type 0x%x",
-+                  isp_get_response_type(isp, hp));
-+              return (0);
-+      }
-+}
-+
-+static void
-+isp_parse_status(struct ispsoftc *isp, ispstatusreq_t *sp, XS_T *xs)
-+{
-+      switch (sp->req_completion_status & 0xff) {
-+      case RQCS_COMPLETE:
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_NOERROR);
-+              }
-+              return;
-+
-+      case RQCS_INCOMPLETE:
-+              if ((sp->req_state_flags & RQSF_GOT_TARGET) == 0) {
-+                      isp_prt(isp, ISP_LOGDEBUG1,
-+                          "Selection Timeout for %d.%d.%d",
-+                          XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+                      if (XS_NOERR(xs)) {
-+                              XS_SETERR(xs, HBA_SELTIMEOUT);
-+                      }
-+                      return;
-+              }
-+              isp_prt(isp, ISP_LOGERR,
-+                  "command incomplete for %d.%d.%d, state 0x%x",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs),
-+                  sp->req_state_flags);
-+              break;
-+
-+      case RQCS_DMA_ERROR:
-+              isp_prt(isp, ISP_LOGERR, "DMA error for command on %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_TRANSPORT_ERROR:
-+      {
-+              char buf[172];
-+              SNPRINTF(buf, sizeof (buf), "states=>");
-+              if (sp->req_state_flags & RQSF_GOT_BUS) {
-+                      SNPRINTF(buf, sizeof (buf), "%s GOT_BUS", buf);
-+              }
-+              if (sp->req_state_flags & RQSF_GOT_TARGET) {
-+                      SNPRINTF(buf, sizeof (buf), "%s GOT_TGT", buf);
-+              }
-+              if (sp->req_state_flags & RQSF_SENT_CDB) {
-+                      SNPRINTF(buf, sizeof (buf), "%s SENT_CDB", buf);
-+              }
-+              if (sp->req_state_flags & RQSF_XFRD_DATA) {
-+                      SNPRINTF(buf, sizeof (buf), "%s XFRD_DATA", buf);
-+              }
-+              if (sp->req_state_flags & RQSF_GOT_STATUS) {
-+                      SNPRINTF(buf, sizeof (buf), "%s GOT_STS", buf);
-+              }
-+              if (sp->req_state_flags & RQSF_GOT_SENSE) {
-+                      SNPRINTF(buf, sizeof (buf), "%s GOT_SNS", buf);
-+              }
-+              if (sp->req_state_flags & RQSF_XFER_COMPLETE) {
-+                      SNPRINTF(buf, sizeof (buf), "%s XFR_CMPLT", buf);
-+              }
-+              SNPRINTF(buf, sizeof (buf), "%s\nstatus=>", buf);
-+              if (sp->req_status_flags & RQSTF_DISCONNECT) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Disconnect", buf);
-+              }
-+              if (sp->req_status_flags & RQSTF_SYNCHRONOUS) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Sync_xfr", buf);
-+              }
-+              if (sp->req_status_flags & RQSTF_PARITY_ERROR) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Parity", buf);
-+              }
-+              if (sp->req_status_flags & RQSTF_BUS_RESET) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Bus_Reset", buf);
-+              }
-+              if (sp->req_status_flags & RQSTF_DEVICE_RESET) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Device_Reset", buf);
-+              }
-+              if (sp->req_status_flags & RQSTF_ABORTED) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Aborted", buf);
-+              }
-+              if (sp->req_status_flags & RQSTF_TIMEOUT) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Timeout", buf);
-+              }
-+              if (sp->req_status_flags & RQSTF_NEGOTIATION) {
-+                      SNPRINTF(buf, sizeof (buf), "%s Negotiation", buf);
-+              }
-+              isp_prt(isp, ISP_LOGERR, "%s", buf);
-+              isp_prt(isp, ISP_LOGERR, "transport error for %d.%d.%d:\n%s",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), buf);
-+              break;
-+      }
-+      case RQCS_RESET_OCCURRED:
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "bus reset destroyed command for %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              isp->isp_sendmarker |= (1 << XS_CHANNEL(xs));
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_BUSRESET);
-+              }
-+              return;
-+
-+      case RQCS_ABORTED:
-+              isp_prt(isp, ISP_LOGERR, "command aborted for %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              isp->isp_sendmarker |= (1 << XS_CHANNEL(xs));
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_ABORTED);
-+              }
-+              return;
-+
-+      case RQCS_TIMEOUT:
-+              isp_prt(isp, ISP_LOGWARN, "command timed out for %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              /*
-+               * Check to see if we logged out the device.
-+               */
-+              if (IS_FC(isp)) {
-+                      if ((sp->req_completion_status & RQSTF_LOGOUT) &&
-+                          FCPARAM(isp)->portdb[XS_TGT(xs)].valid &&
-+                          FCPARAM(isp)->portdb[XS_TGT(xs)].fabric_dev) {
-+                              FCPARAM(isp)->portdb[XS_TGT(xs)].relogin = 1;
-+                      }
-+              }
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_CMDTIMEOUT);
-+              }
-+              return;
-+
-+      case RQCS_DATA_OVERRUN:
-+              XS_RESID(xs) = sp->req_resid;
-+              isp_prt(isp, ISP_LOGERR, "data overrun for command on %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_DATAOVR);
-+              }
-+              return;
-+
-+      case RQCS_COMMAND_OVERRUN:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "command overrun for command on %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_STATUS_OVERRUN:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "status overrun for command on %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_BAD_MESSAGE:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "msg not COMMAND COMPLETE after status %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_NO_MESSAGE_OUT:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "No MESSAGE OUT phase after selection on %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_EXT_ID_FAILED:
-+              isp_prt(isp, ISP_LOGERR, "EXTENDED IDENTIFY failed %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_IDE_MSG_FAILED:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "INITIATOR DETECTED ERROR rejected by %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_ABORT_MSG_FAILED:
-+              isp_prt(isp, ISP_LOGERR, "ABORT OPERATION rejected by %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_REJECT_MSG_FAILED:
-+              isp_prt(isp, ISP_LOGERR, "MESSAGE REJECT rejected by %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_NOP_MSG_FAILED:
-+              isp_prt(isp, ISP_LOGERR, "NOP rejected by %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_PARITY_ERROR_MSG_FAILED:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "MESSAGE PARITY ERROR rejected by %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_DEVICE_RESET_MSG_FAILED:
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "BUS DEVICE RESET rejected by %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_ID_MSG_FAILED:
-+              isp_prt(isp, ISP_LOGERR, "IDENTIFY rejected by %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_UNEXP_BUS_FREE:
-+              isp_prt(isp, ISP_LOGERR, "%d.%d.%d had an unexpected bus free",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_DATA_UNDERRUN:
-+      {
-+              if (IS_FC(isp)) {
-+                      int ru_marked = (sp->req_scsi_status & RQCS_RU) != 0;
-+                      if (!ru_marked || sp->req_resid > XS_XFRLEN(xs)) {
-+                              isp_prt(isp, ISP_LOGWARN, bun, XS_TGT(xs),
-+                                  XS_LUN(xs), XS_XFRLEN(xs), sp->req_resid,
-+                                  (ru_marked)? "marked" : "not marked");
-+                              if (XS_NOERR(xs)) {
-+                                      XS_SETERR(xs, HBA_BOTCH);
-+                              }
-+                              return;
-+                      }
-+              }
-+              XS_RESID(xs) = sp->req_resid;
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_NOERROR);
-+              }
-+              return;
-+      }
-+
-+      case RQCS_XACT_ERR1:
-+              isp_prt(isp, ISP_LOGERR, xact1, XS_CHANNEL(xs),
-+                  XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_XACT_ERR2:
-+              isp_prt(isp, ISP_LOGERR, xact2,
-+                  XS_LUN(xs), XS_TGT(xs), XS_CHANNEL(xs));
-+              break;
-+
-+      case RQCS_XACT_ERR3:
-+              isp_prt(isp, ISP_LOGERR, xact3,
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_BAD_ENTRY:
-+              isp_prt(isp, ISP_LOGERR, "Invalid IOCB entry type detected");
-+              break;
-+
-+      case RQCS_QUEUE_FULL:
-+              isp_prt(isp, ISP_LOGDEBUG0,
-+                  "internal queues full for %d.%d.%d status 0x%x",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), *XS_STSP(xs));
-+
-+              /*
-+               * If QFULL or some other status byte is set, then this
-+               * isn't an error, per se.
-+               *
-+               * Unfortunately, some QLogic f/w writers have, in
-+               * some cases, ommitted to *set* status to QFULL.
-+               *
-+
-+              if (*XS_STSP(xs) != SCSI_GOOD && XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_NOERROR);
-+                      return;
-+              }
-+
-+               *
-+               *
-+               */
-+
-+              *XS_STSP(xs) = SCSI_QFULL;
-+              XS_SETERR(xs, HBA_NOERROR);
-+              return;
-+
-+      case RQCS_PHASE_SKIPPED:
-+              isp_prt(isp, ISP_LOGERR, pskip, XS_CHANNEL(xs),
-+                  XS_TGT(xs), XS_LUN(xs));
-+              break;
-+
-+      case RQCS_ARQS_FAILED:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Auto Request Sense failed for %d.%d.%d",
-+                  XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_ARQFAIL);
-+              }
-+              return;
-+
-+      case RQCS_WIDE_FAILED:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Wide Negotiation failed for %d.%d.%d",
-+                  XS_TGT(xs), XS_LUN(xs), XS_CHANNEL(xs));
-+              if (IS_SCSI(isp)) {
-+                      sdparam *sdp = isp->isp_param;
-+                      sdp += XS_CHANNEL(xs);
-+                      sdp->isp_devparam[XS_TGT(xs)].goal_flags &= ~DPARM_WIDE;
-+                      sdp->isp_devparam[XS_TGT(xs)].dev_update = 1;
-+                      isp->isp_update |= (1 << XS_CHANNEL(xs));
-+              }
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_NOERROR);
-+              }
-+              return;
-+
-+      case RQCS_SYNCXFER_FAILED:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "SDTR Message failed for target %d.%d.%d",
-+                  XS_TGT(xs), XS_LUN(xs), XS_CHANNEL(xs));
-+              if (IS_SCSI(isp)) {
-+                      sdparam *sdp = isp->isp_param;
-+                      sdp += XS_CHANNEL(xs);
-+                      sdp->isp_devparam[XS_TGT(xs)].goal_flags &= ~DPARM_SYNC;
-+                      sdp->isp_devparam[XS_TGT(xs)].dev_update = 1;
-+                      isp->isp_update |= (1 << XS_CHANNEL(xs));
-+              }
-+              break;
-+
-+      case RQCS_LVD_BUSERR:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Bad LVD condition while talking to %d.%d.%d",
-+                  XS_TGT(xs), XS_LUN(xs), XS_CHANNEL(xs));
-+              break;
-+
-+      case RQCS_PORT_UNAVAILABLE:
-+              /*
-+               * No such port on the loop. Moral equivalent of SELTIMEO
-+               */
-+      case RQCS_PORT_LOGGED_OUT:
-+              /*
-+               * It was there (maybe)- treat as a selection timeout.
-+               */
-+              if ((sp->req_completion_status & 0xff) == RQCS_PORT_UNAVAILABLE)
-+                      isp_prt(isp, ISP_LOGINFO,
-+                          "port unavailable for target %d", XS_TGT(xs));
-+              else
-+                      isp_prt(isp, ISP_LOGINFO,
-+                          "port logout for target %d", XS_TGT(xs));
-+              /*
-+               * If we're on a local loop, force a LIP (which is overkill)
-+               * to force a re-login of this unit. If we're on fabric,
-+               * then we'll have to relogin as a matter of course.
-+               */
-+              if (FCPARAM(isp)->isp_topo == TOPO_NL_PORT ||
-+                  FCPARAM(isp)->isp_topo == TOPO_FL_PORT) {
-+                      mbreg_t mbs;
-+                      mbs.param[0] = MBOX_INIT_LIP;
-+                      isp_mboxcmd_qnw(isp, &mbs, 1);
-+              }
-+
-+              /*
-+               * Probably overkill.
-+               */
-+              isp->isp_sendmarker = 1;
-+              FCPARAM(isp)->isp_loopstate = LOOP_PDB_RCVD;
-+              isp_mark_getpdb_all(isp);
-+              isp_async(isp, ISPASYNC_CHANGE_NOTIFY, ISPASYNC_CHANGE_OTHER);
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_SELTIMEOUT);
-+              }
-+              return;
-+
-+      case RQCS_PORT_CHANGED:
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "port changed for target %d", XS_TGT(xs));
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_SELTIMEOUT);
-+              }
-+              return;
-+
-+      case RQCS_PORT_BUSY:
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "port busy for target %d", XS_TGT(xs));
-+              if (XS_NOERR(xs)) {
-+                      XS_SETERR(xs, HBA_TGTBSY);
-+              }
-+              return;
-+
-+      default:
-+              isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x",
-+                  sp->req_completion_status);
-+              break;
-+      }
-+      if (XS_NOERR(xs)) {
-+              XS_SETERR(xs, HBA_BOTCH);
-+      }
-+}
-+
-+static void
-+isp_fastpost_complete(struct ispsoftc *isp, u_int16_t fph)
-+{
-+      XS_T *xs;
-+
-+      if (fph == 0) {
-+              return;
-+      }
-+      xs = isp_find_xs(isp, fph);
-+      if (xs == NULL) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "Command for fast post handle 0x%x not found", fph);
-+              return;
-+      }
-+      isp_destroy_handle(isp, fph);
-+
-+      /*
-+       * Since we don't have a result queue entry item,
-+       * we must believe that SCSI status is zero and
-+       * that all data transferred.
-+       */
-+      XS_SET_STATE_STAT(isp, xs, NULL);
-+      XS_RESID(xs) = 0;
-+      *XS_STSP(xs) = SCSI_GOOD;
-+      if (XS_XFRLEN(xs)) {
-+              ISP_DMAFREE(isp, xs, fph);
-+      }
-+      if (isp->isp_nactive)
-+              isp->isp_nactive--;
-+      isp->isp_fphccmplt++;
-+      isp_done(xs);
-+}
-+
-+static int
-+isp_mbox_continue(struct ispsoftc *isp)
-+{
-+      mbreg_t mbs;
-+      u_int16_t *ptr;
-+
-+      switch (isp->isp_lastmbxcmd) {
-+      case MBOX_WRITE_RAM_WORD:
-+      case MBOX_READ_RAM_WORD:
-+      case MBOX_READ_RAM_WORD_EXTENDED:
-+              break;
-+      default:
-+              return (1);
-+      }
-+      if (isp->isp_mboxtmp[0] != MBOX_COMMAND_COMPLETE) {
-+              isp->isp_mbxwrk0 = 0;
-+              return (-1);
-+      }
-+
-+
-+      /*
-+       * Clear the previous interrupt.
-+       */
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+      ISP_WRITE(isp, BIU_SEMA, 0);
-+
-+      /*
-+       * Continue with next word.
-+       */
-+      ptr = isp->isp_mbxworkp;
-+      switch (isp->isp_lastmbxcmd) {
-+      case MBOX_WRITE_RAM_WORD:
-+              mbs.param[2] = *ptr++;
-+              mbs.param[1] = isp->isp_mbxwrk1++;
-+              break;
-+      case MBOX_READ_RAM_WORD:
-+      case MBOX_READ_RAM_WORD_EXTENDED:
-+              *ptr++ = isp->isp_mboxtmp[2];
-+              mbs.param[1] = isp->isp_mbxwrk1++;
-+              break;
-+      }
-+      isp->isp_mbxworkp = ptr;
-+      mbs.param[0] = isp->isp_lastmbxcmd;
-+      isp->isp_mbxwrk0 -= 1;
-+      isp_mboxcmd_qnw(isp, &mbs, 0);
-+      return (0);
-+}
-+
-+
-+#define       HIBYT(x)                        ((x) >> 0x8)
-+#define       LOBYT(x)                        ((x)  & 0xff)
-+#define       ISPOPMAP(a, b)                  (((a) << 8) | (b))
-+static const u_int16_t mbpscsi[] = {
-+      ISPOPMAP(0x01, 0x01),   /* 0x00: MBOX_NO_OP */
-+      ISPOPMAP(0x1f, 0x01),   /* 0x01: MBOX_LOAD_RAM */
-+      ISPOPMAP(0x03, 0x01),   /* 0x02: MBOX_EXEC_FIRMWARE */
-+      ISPOPMAP(0x1f, 0x01),   /* 0x03: MBOX_DUMP_RAM */
-+      ISPOPMAP(0x07, 0x07),   /* 0x04: MBOX_WRITE_RAM_WORD */
-+      ISPOPMAP(0x03, 0x07),   /* 0x05: MBOX_READ_RAM_WORD */
-+      ISPOPMAP(0x3f, 0x3f),   /* 0x06: MBOX_MAILBOX_REG_TEST */
-+      ISPOPMAP(0x03, 0x07),   /* 0x07: MBOX_VERIFY_CHECKSUM   */
-+      ISPOPMAP(0x01, 0x0f),   /* 0x08: MBOX_ABOUT_FIRMWARE */
-+      ISPOPMAP(0x00, 0x00),   /* 0x09: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0a: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0b: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0d: */
-+      ISPOPMAP(0x01, 0x05),   /* 0x0e: MBOX_CHECK_FIRMWARE */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0f: */
-+      ISPOPMAP(0x1f, 0x1f),   /* 0x10: MBOX_INIT_REQ_QUEUE */
-+      ISPOPMAP(0x3f, 0x3f),   /* 0x11: MBOX_INIT_RES_QUEUE */
-+      ISPOPMAP(0x0f, 0x0f),   /* 0x12: MBOX_EXECUTE_IOCB */
-+      ISPOPMAP(0x03, 0x03),   /* 0x13: MBOX_WAKE_UP   */
-+      ISPOPMAP(0x01, 0x3f),   /* 0x14: MBOX_STOP_FIRMWARE */
-+      ISPOPMAP(0x0f, 0x0f),   /* 0x15: MBOX_ABORT */
-+      ISPOPMAP(0x03, 0x03),   /* 0x16: MBOX_ABORT_DEVICE */
-+      ISPOPMAP(0x07, 0x07),   /* 0x17: MBOX_ABORT_TARGET */
-+      ISPOPMAP(0x07, 0x07),   /* 0x18: MBOX_BUS_RESET */
-+      ISPOPMAP(0x03, 0x07),   /* 0x19: MBOX_STOP_QUEUE */
-+      ISPOPMAP(0x03, 0x07),   /* 0x1a: MBOX_START_QUEUE */
-+      ISPOPMAP(0x03, 0x07),   /* 0x1b: MBOX_SINGLE_STEP_QUEUE */
-+      ISPOPMAP(0x03, 0x07),   /* 0x1c: MBOX_ABORT_QUEUE */
-+      ISPOPMAP(0x03, 0x4f),   /* 0x1d: MBOX_GET_DEV_QUEUE_STATUS */
-+      ISPOPMAP(0x00, 0x00),   /* 0x1e: */
-+      ISPOPMAP(0x01, 0x07),   /* 0x1f: MBOX_GET_FIRMWARE_STATUS */
-+      ISPOPMAP(0x01, 0x07),   /* 0x20: MBOX_GET_INIT_SCSI_ID */
-+      ISPOPMAP(0x01, 0x07),   /* 0x21: MBOX_GET_SELECT_TIMEOUT */
-+      ISPOPMAP(0x01, 0xc7),   /* 0x22: MBOX_GET_RETRY_COUNT   */
-+      ISPOPMAP(0x01, 0x07),   /* 0x23: MBOX_GET_TAG_AGE_LIMIT */
-+      ISPOPMAP(0x01, 0x03),   /* 0x24: MBOX_GET_CLOCK_RATE */
-+      ISPOPMAP(0x01, 0x07),   /* 0x25: MBOX_GET_ACT_NEG_STATE */
-+      ISPOPMAP(0x01, 0x07),   /* 0x26: MBOX_GET_ASYNC_DATA_SETUP_TIME */
-+      ISPOPMAP(0x01, 0x07),   /* 0x27: MBOX_GET_PCI_PARAMS */
-+      ISPOPMAP(0x03, 0x4f),   /* 0x28: MBOX_GET_TARGET_PARAMS */
-+      ISPOPMAP(0x03, 0x0f),   /* 0x29: MBOX_GET_DEV_QUEUE_PARAMS */
-+      ISPOPMAP(0x01, 0x07),   /* 0x2a: MBOX_GET_RESET_DELAY_PARAMS */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2b: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2d: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2e: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2f: */
-+      ISPOPMAP(0x03, 0x03),   /* 0x30: MBOX_SET_INIT_SCSI_ID */
-+      ISPOPMAP(0x07, 0x07),   /* 0x31: MBOX_SET_SELECT_TIMEOUT */
-+      ISPOPMAP(0xc7, 0xc7),   /* 0x32: MBOX_SET_RETRY_COUNT   */
-+      ISPOPMAP(0x07, 0x07),   /* 0x33: MBOX_SET_TAG_AGE_LIMIT */
-+      ISPOPMAP(0x03, 0x03),   /* 0x34: MBOX_SET_CLOCK_RATE */
-+      ISPOPMAP(0x07, 0x07),   /* 0x35: MBOX_SET_ACT_NEG_STATE */
-+      ISPOPMAP(0x07, 0x07),   /* 0x36: MBOX_SET_ASYNC_DATA_SETUP_TIME */
-+      ISPOPMAP(0x07, 0x07),   /* 0x37: MBOX_SET_PCI_CONTROL_PARAMS */
-+      ISPOPMAP(0x4f, 0x4f),   /* 0x38: MBOX_SET_TARGET_PARAMS */
-+      ISPOPMAP(0x0f, 0x0f),   /* 0x39: MBOX_SET_DEV_QUEUE_PARAMS */
-+      ISPOPMAP(0x07, 0x07),   /* 0x3a: MBOX_SET_RESET_DELAY_PARAMS */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3b: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3d: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3e: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3f: */
-+      ISPOPMAP(0x01, 0x03),   /* 0x40: MBOX_RETURN_BIOS_BLOCK_ADDR */
-+      ISPOPMAP(0x3f, 0x01),   /* 0x41: MBOX_WRITE_FOUR_RAM_WORDS */
-+      ISPOPMAP(0x03, 0x07),   /* 0x42: MBOX_EXEC_BIOS_IOCB */
-+      ISPOPMAP(0x00, 0x00),   /* 0x43: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x44: */
-+      ISPOPMAP(0x03, 0x03),   /* 0x45: SET SYSTEM PARAMETER */
-+      ISPOPMAP(0x01, 0x03),   /* 0x46: GET SYSTEM PARAMETER */
-+      ISPOPMAP(0x00, 0x00),   /* 0x47: */
-+      ISPOPMAP(0x01, 0xcf),   /* 0x48: GET SCAM CONFIGURATION */
-+      ISPOPMAP(0xcf, 0xcf),   /* 0x49: SET SCAM CONFIGURATION */
-+      ISPOPMAP(0x03, 0x03),   /* 0x4a: MBOX_SET_FIRMWARE_FEATURES */
-+      ISPOPMAP(0x01, 0x03),   /* 0x4b: MBOX_GET_FIRMWARE_FEATURES */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4d: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4e: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4f: */
-+      ISPOPMAP(0xdf, 0xdf),   /* 0x50: LOAD RAM A64 */
-+      ISPOPMAP(0xdf, 0xdf),   /* 0x51: DUMP RAM A64 */
-+      ISPOPMAP(0xdf, 0xff),   /* 0x52: INITIALIZE REQUEST QUEUE A64 */
-+      ISPOPMAP(0xef, 0xff),   /* 0x53: INITIALIZE RESPONSE QUEUE A64 */
-+      ISPOPMAP(0xcf, 0x01),   /* 0x54: EXECUTE IOCB A64 */
-+      ISPOPMAP(0x07, 0x01),   /* 0x55: ENABLE TARGET MODE */
-+      ISPOPMAP(0x03, 0x0f),   /* 0x56: GET TARGET STATUS */
-+      ISPOPMAP(0x00, 0x00),   /* 0x57: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x58: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x59: */
-+      ISPOPMAP(0x03, 0x03),   /* 0x5a: SET DATA OVERRUN RECOVERY MODE */
-+      ISPOPMAP(0x01, 0x03),   /* 0x5b: GET DATA OVERRUN RECOVERY MODE */
-+      ISPOPMAP(0x0f, 0x0f),   /* 0x5c: SET HOST DATA */
-+      ISPOPMAP(0x01, 0x01)    /* 0x5d: GET NOST DATA */
-+};
-+
-+#ifndef       ISP_STRIPPED
-+static char *scsi_mbcmd_names[] = {
-+      "NO-OP",
-+      "LOAD RAM",
-+      "EXEC FIRMWARE",
-+      "DUMP RAM",
-+      "WRITE RAM WORD",
-+      "READ RAM WORD",
-+      "MAILBOX REG TEST",
-+      "VERIFY CHECKSUM",
-+      "ABOUT FIRMWARE",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "CHECK FIRMWARE",
-+      NULL,
-+      "INIT REQUEST QUEUE",
-+      "INIT RESULT QUEUE",
-+      "EXECUTE IOCB",
-+      "WAKE UP",
-+      "STOP FIRMWARE",
-+      "ABORT",
-+      "ABORT DEVICE",
-+      "ABORT TARGET",
-+      "BUS RESET",
-+      "STOP QUEUE",
-+      "START QUEUE",
-+      "SINGLE STEP QUEUE",
-+      "ABORT QUEUE",
-+      "GET DEV QUEUE STATUS",
-+      NULL,
-+      "GET FIRMWARE STATUS",
-+      "GET INIT SCSI ID",
-+      "GET SELECT TIMEOUT",
-+      "GET RETRY COUNT",
-+      "GET TAG AGE LIMIT",
-+      "GET CLOCK RATE",
-+      "GET ACT NEG STATE",
-+      "GET ASYNC DATA SETUP TIME",
-+      "GET PCI PARAMS",
-+      "GET TARGET PARAMS",
-+      "GET DEV QUEUE PARAMS",
-+      "GET RESET DELAY PARAMS",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "SET INIT SCSI ID",
-+      "SET SELECT TIMEOUT",
-+      "SET RETRY COUNT",
-+      "SET TAG AGE LIMIT",
-+      "SET CLOCK RATE",
-+      "SET ACT NEG STATE",
-+      "SET ASYNC DATA SETUP TIME",
-+      "SET PCI CONTROL PARAMS",
-+      "SET TARGET PARAMS",
-+      "SET DEV QUEUE PARAMS",
-+      "SET RESET DELAY PARAMS",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "RETURN BIOS BLOCK ADDR",
-+      "WRITE FOUR RAM WORDS",
-+      "EXEC BIOS IOCB",
-+      NULL,
-+      NULL,
-+      "SET SYSTEM PARAMETER",
-+      "GET SYSTEM PARAMETER",
-+      NULL,
-+      "GET SCAM CONFIGURATION",
-+      "SET SCAM CONFIGURATION",
-+      "SET FIRMWARE FEATURES",
-+      "GET FIRMWARE FEATURES",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "LOAD RAM A64",
-+      "DUMP RAM A64",
-+      "INITIALIZE REQUEST QUEUE A64",
-+      "INITIALIZE RESPONSE QUEUE A64",
-+      "EXECUTE IOCB A64",
-+      "ENABLE TARGET MODE",
-+      "GET TARGET MODE STATE",
-+      NULL,
-+      NULL,
-+      NULL,
-+      "SET DATA OVERRUN RECOVERY MODE",
-+      "GET DATA OVERRUN RECOVERY MODE",
-+      "SET HOST DATA",
-+      "GET NOST DATA",
-+};
-+#endif
-+
-+static const u_int16_t mbpfc[] = {
-+      ISPOPMAP(0x01, 0x01),   /* 0x00: MBOX_NO_OP */
-+      ISPOPMAP(0x1f, 0x01),   /* 0x01: MBOX_LOAD_RAM */
-+      ISPOPMAP(0x03, 0x01),   /* 0x02: MBOX_EXEC_FIRMWARE */
-+      ISPOPMAP(0xdf, 0x01),   /* 0x03: MBOX_DUMP_RAM */
-+      ISPOPMAP(0x07, 0x07),   /* 0x04: MBOX_WRITE_RAM_WORD */
-+      ISPOPMAP(0x03, 0x07),   /* 0x05: MBOX_READ_RAM_WORD */
-+      ISPOPMAP(0xff, 0xff),   /* 0x06: MBOX_MAILBOX_REG_TEST */
-+      ISPOPMAP(0x03, 0x05),   /* 0x07: MBOX_VERIFY_CHECKSUM   */
-+      ISPOPMAP(0x01, 0x4f),   /* 0x08: MBOX_ABOUT_FIRMWARE */
-+      ISPOPMAP(0xdf, 0x01),   /* 0x09: LOAD RAM */
-+      ISPOPMAP(0xdf, 0x01),   /* 0x0a: DUMP RAM */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0b: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x0d: */
-+      ISPOPMAP(0x01, 0x05),   /* 0x0e: MBOX_CHECK_FIRMWARE */
-+      ISPOPMAP(0x03, 0x07),   /* 0x0f: MBOX_READ_RAM_WORD_EXTENDED(1) */
-+      ISPOPMAP(0x1f, 0x11),   /* 0x10: MBOX_INIT_REQ_QUEUE */
-+      ISPOPMAP(0x2f, 0x21),   /* 0x11: MBOX_INIT_RES_QUEUE */
-+      ISPOPMAP(0x0f, 0x01),   /* 0x12: MBOX_EXECUTE_IOCB */
-+      ISPOPMAP(0x03, 0x03),   /* 0x13: MBOX_WAKE_UP   */
-+      ISPOPMAP(0x01, 0xff),   /* 0x14: MBOX_STOP_FIRMWARE */
-+      ISPOPMAP(0x4f, 0x01),   /* 0x15: MBOX_ABORT */
-+      ISPOPMAP(0x07, 0x01),   /* 0x16: MBOX_ABORT_DEVICE */
-+      ISPOPMAP(0x07, 0x01),   /* 0x17: MBOX_ABORT_TARGET */
-+      ISPOPMAP(0x03, 0x03),   /* 0x18: MBOX_BUS_RESET */
-+      ISPOPMAP(0x07, 0x05),   /* 0x19: MBOX_STOP_QUEUE */
-+      ISPOPMAP(0x07, 0x05),   /* 0x1a: MBOX_START_QUEUE */
-+      ISPOPMAP(0x07, 0x05),   /* 0x1b: MBOX_SINGLE_STEP_QUEUE */
-+      ISPOPMAP(0x07, 0x05),   /* 0x1c: MBOX_ABORT_QUEUE */
-+      ISPOPMAP(0x07, 0x03),   /* 0x1d: MBOX_GET_DEV_QUEUE_STATUS */
-+      ISPOPMAP(0x00, 0x00),   /* 0x1e: */
-+      ISPOPMAP(0x01, 0x07),   /* 0x1f: MBOX_GET_FIRMWARE_STATUS */
-+      ISPOPMAP(0x01, 0x4f),   /* 0x20: MBOX_GET_LOOP_ID */
-+      ISPOPMAP(0x00, 0x00),   /* 0x21: */
-+      ISPOPMAP(0x01, 0x07),   /* 0x22: MBOX_GET_RETRY_COUNT   */
-+      ISPOPMAP(0x00, 0x00),   /* 0x23: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x24: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x25: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x26: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x27: */
-+      ISPOPMAP(0x01, 0x03),   /* 0x28: MBOX_GET_FIRMWARE_OPTIONS */
-+      ISPOPMAP(0x03, 0x07),   /* 0x29: MBOX_GET_PORT_QUEUE_PARAMS */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2a: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2b: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2d: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2e: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x2f: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x30: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x31: */
-+      ISPOPMAP(0x07, 0x07),   /* 0x32: MBOX_SET_RETRY_COUNT   */
-+      ISPOPMAP(0x00, 0x00),   /* 0x33: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x34: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x35: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x36: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x37: */
-+      ISPOPMAP(0x0f, 0x01),   /* 0x38: MBOX_SET_FIRMWARE_OPTIONS */
-+      ISPOPMAP(0x0f, 0x07),   /* 0x39: MBOX_SET_PORT_QUEUE_PARAMS */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3a: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3b: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3d: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3e: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x3f: */
-+      ISPOPMAP(0x03, 0x01),   /* 0x40: MBOX_LOOP_PORT_BYPASS */
-+      ISPOPMAP(0x03, 0x01),   /* 0x41: MBOX_LOOP_PORT_ENABLE */
-+      ISPOPMAP(0x03, 0x07),   /* 0x42: MBOX_GET_RESOURCE_COUNTS */
-+      ISPOPMAP(0x01, 0x01),   /* 0x43: MBOX_REQUEST_NON_PARTICIPATING_MODE */
-+      ISPOPMAP(0x00, 0x00),   /* 0x44: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x45: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x46: */
-+      ISPOPMAP(0xcf, 0x03),   /* 0x47: GET PORT_DATABASE ENHANCED */
-+      ISPOPMAP(0x00, 0x00),   /* 0x48: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x49: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4a: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4b: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4c: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4d: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4e: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x4f: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x50: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x51: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x52: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x53: */
-+      ISPOPMAP(0xcf, 0x01),   /* 0x54: EXECUTE IOCB A64 */
-+      ISPOPMAP(0x00, 0x00),   /* 0x55: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x56: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x57: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x58: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x59: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x5a: */
-+      ISPOPMAP(0x03, 0x01),   /* 0x5b: MBOX_DRIVER_HEARTBEAT */
-+      ISPOPMAP(0xcf, 0x01),   /* 0x5c: MBOX_FW_HEARTBEAT */
-+      ISPOPMAP(0x07, 0x03),   /* 0x5d: MBOX_GET_SET_DATA_RATE */
-+      ISPOPMAP(0x00, 0x00),   /* 0x5e: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x5f: */
-+      ISPOPMAP(0xfd, 0x31),   /* 0x60: MBOX_INIT_FIRMWARE */
-+      ISPOPMAP(0x00, 0x00),   /* 0x61: */
-+      ISPOPMAP(0x01, 0x01),   /* 0x62: MBOX_INIT_LIP */
-+      ISPOPMAP(0xcd, 0x03),   /* 0x63: MBOX_GET_FC_AL_POSITION_MAP */
-+      ISPOPMAP(0xcf, 0x01),   /* 0x64: MBOX_GET_PORT_DB */
-+      ISPOPMAP(0x07, 0x01),   /* 0x65: MBOX_CLEAR_ACA */
-+      ISPOPMAP(0x07, 0x01),   /* 0x66: MBOX_TARGET_RESET */
-+      ISPOPMAP(0x07, 0x01),   /* 0x67: MBOX_CLEAR_TASK_SET */
-+      ISPOPMAP(0x07, 0x01),   /* 0x68: MBOX_ABORT_TASK_SET */
-+      ISPOPMAP(0x01, 0x07),   /* 0x69: MBOX_GET_FW_STATE */
-+      ISPOPMAP(0x03, 0xcf),   /* 0x6a: MBOX_GET_PORT_NAME */
-+      ISPOPMAP(0xcf, 0x01),   /* 0x6b: MBOX_GET_LINK_STATUS */
-+      ISPOPMAP(0x0f, 0x01),   /* 0x6c: MBOX_INIT_LIP_RESET */
-+      ISPOPMAP(0x00, 0x00),   /* 0x6d: */
-+      ISPOPMAP(0xcf, 0x03),   /* 0x6e: MBOX_SEND_SNS */
-+      ISPOPMAP(0x0f, 0x07),   /* 0x6f: MBOX_FABRIC_LOGIN */
-+      ISPOPMAP(0x03, 0x01),   /* 0x70: MBOX_SEND_CHANGE_REQUEST */
-+      ISPOPMAP(0x03, 0x03),   /* 0x71: MBOX_FABRIC_LOGOUT */
-+      ISPOPMAP(0x0f, 0x0f),   /* 0x72: MBOX_INIT_LIP_LOGIN */
-+      ISPOPMAP(0x00, 0x00),   /* 0x73: */
-+      ISPOPMAP(0x07, 0x01),   /* 0x74: LOGIN LOOP PORT */
-+      ISPOPMAP(0xcf, 0x03),   /* 0x75: GET PORT/NODE NAME LIST */
-+      ISPOPMAP(0x4f, 0x01),   /* 0x76: SET VENDOR ID */
-+      ISPOPMAP(0xcd, 0x01),   /* 0x77: INITIALIZE IP MAILBOX */
-+      ISPOPMAP(0x00, 0x00),   /* 0x78: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x79: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x7a: */
-+      ISPOPMAP(0x00, 0x00),   /* 0x7b: */
-+      ISPOPMAP(0x4f, 0x03),   /* 0x7c: Get ID List */
-+      ISPOPMAP(0xcf, 0x01),   /* 0x7d: SEND LFA */
-+      ISPOPMAP(0x07, 0x01)    /* 0x7e: Lun RESET */
-+};
-+/*
-+ * Footnotes
-+ *
-+ * (1): this sets bits 21..16 in mailbox register #8, which we nominally 
-+ *    do not access at this time in the core driver. The caller is
-+ *    responsible for setting this register first (Gross!).
-+ */
-+
-+#ifndef       ISP_STRIPPED
-+static char *fc_mbcmd_names[] = {
-+      "NO-OP",
-+      "LOAD RAM",
-+      "EXEC FIRMWARE",
-+      "DUMP RAM",
-+      "WRITE RAM WORD",
-+      "READ RAM WORD",
-+      "MAILBOX REG TEST",
-+      "VERIFY CHECKSUM",
-+      "ABOUT FIRMWARE",
-+      "LOAD RAM",
-+      "DUMP RAM",
-+      NULL,
-+      NULL,
-+      "READ RAM WORD EXTENDED",
-+      "CHECK FIRMWARE",
-+      NULL,
-+      "INIT REQUEST QUEUE",
-+      "INIT RESULT QUEUE",
-+      "EXECUTE IOCB",
-+      "WAKE UP",
-+      "STOP FIRMWARE",
-+      "ABORT",
-+      "ABORT DEVICE",
-+      "ABORT TARGET",
-+      "BUS RESET",
-+      "STOP QUEUE",
-+      "START QUEUE",
-+      "SINGLE STEP QUEUE",
-+      "ABORT QUEUE",
-+      "GET DEV QUEUE STATUS",
-+      NULL,
-+      "GET FIRMWARE STATUS",
-+      "GET LOOP ID",
-+      NULL,
-+      "GET RETRY COUNT",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "GET FIRMWARE OPTIONS",
-+      "GET PORT QUEUE PARAMS",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "SET RETRY COUNT",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "SET FIRMWARE OPTIONS",
-+      "SET PORT QUEUE PARAMS",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "LOOP PORT BYPASS",
-+      "LOOP PORT ENABLE",
-+      "GET RESOURCE COUNTS",
-+      "REQUEST NON PARTICIPATING MODE",
-+      NULL,
-+      NULL,
-+      NULL,
-+      "GET PORT DATABASE,, ENHANCED",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "EXECUTE IOCB A64",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "DRIVER HEARTBEAT",
-+      NULL,
-+      "GET/SET DATA RATE",
-+      NULL,
-+      NULL,
-+      "INIT FIRMWARE",
-+      NULL,
-+      "INIT LIP",
-+      "GET FC-AL POSITION MAP",
-+      "GET PORT DATABASE",
-+      "CLEAR ACA",
-+      "TARGET RESET",
-+      "CLEAR TASK SET",
-+      "ABORT TASK SET",
-+      "GET FW STATE",
-+      "GET PORT NAME",
-+      "GET LINK STATUS",
-+      "INIT LIP RESET",
-+      NULL,
-+      "SEND SNS",
-+      "FABRIC LOGIN",
-+      "SEND CHANGE REQUEST",
-+      "FABRIC LOGOUT",
-+      "INIT LIP LOGIN",
-+      NULL,
-+      "LOGIN LOOP PORT",
-+      "GET PORT/NODE NAME LIST",
-+      "SET VENDOR ID",
-+      "INITIALIZE IP MAILBOX",
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      "Get ID List",
-+      "SEND LFA",
-+      "Lun RESET"
-+};
-+#endif
-+
-+static void
-+isp_mboxcmd_qnw(struct ispsoftc *isp, mbreg_t *mbp, int nodelay)
-+{
-+      unsigned int ibits, obits, box, opcode;
-+      const u_int16_t *mcp;
-+
-+      if (IS_FC(isp)) {
-+              mcp = mbpfc;
-+      } else {
-+              mcp = mbpscsi;
-+      }
-+      opcode = mbp->param[0];
-+      ibits = HIBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+      obits = LOBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+      for (box = 0; box < MAX_MAILBOX; box++) {
-+              if (ibits & (1 << box)) {
-+                      ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]);
-+              }
-+              if (nodelay == 0) {
-+                      isp->isp_mboxtmp[box] = mbp->param[box] = 0;
-+              }
-+      }
-+      if (nodelay == 0) {
-+              isp->isp_lastmbxcmd = opcode;
-+              isp->isp_obits = obits;
-+              isp->isp_mboxbsy = 1;
-+      }
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_SET_HOST_INT);
-+      /*
-+       * Oddly enough, if we're not delaying for an answer,
-+       * delay a bit to give the f/w a chance to pick up the
-+       * command.
-+       */
-+      if (nodelay) {
-+              USEC_DELAY(1000);
-+      }
-+}
-+
-+static void
-+isp_mboxcmd(struct ispsoftc *isp, mbreg_t *mbp, int logmask)
-+{
-+      char *cname, *xname, tname[16], mname[16];
-+      unsigned int lim, ibits, obits, box, opcode;
-+      const u_int16_t *mcp;
-+
-+      if (IS_FC(isp)) {
-+              mcp = mbpfc;
-+              lim = (sizeof (mbpfc) / sizeof (mbpfc[0]));
-+      } else {
-+              mcp = mbpscsi;
-+              lim = (sizeof (mbpscsi) / sizeof (mbpscsi[0]));
-+      }
-+
-+      if ((opcode = mbp->param[0]) >= lim) {
-+              mbp->param[0] = MBOX_INVALID_COMMAND;
-+              isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode);
-+              return;
-+      }
-+
-+      ibits = HIBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+      obits = LOBYT(mcp[opcode]) & NMBOX_BMASK(isp);
-+
-+      if (ibits == 0 && obits == 0) {
-+              mbp->param[0] = MBOX_COMMAND_PARAM_ERROR;
-+              isp_prt(isp, ISP_LOGERR, "no parameters for 0x%x", opcode);
-+              return;
-+      }
-+
-+      /*
-+       * Get exclusive usage of mailbox registers.
-+       */
-+      MBOX_ACQUIRE(isp);
-+
-+      for (box = 0; box < MAX_MAILBOX; box++) {
-+              if (ibits & (1 << box)) {
-+                      ISP_WRITE(isp, MBOX_OFF(box), mbp->param[box]);
-+              }
-+              isp->isp_mboxtmp[box] = mbp->param[box] = 0;
-+      }
-+
-+      isp->isp_lastmbxcmd = opcode;
-+
-+      /*
-+       * We assume that we can't overwrite a previous command.
-+       */
-+      isp->isp_obits = obits;
-+      isp->isp_mboxbsy = 1;
-+
-+      /*
-+       * Set Host Interrupt condition so that RISC will pick up mailbox regs.
-+       */
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_SET_HOST_INT);
-+
-+      /*
-+       * While we haven't finished the command, spin our wheels here.
-+       */
-+      MBOX_WAIT_COMPLETE(isp);
-+
-+      if (isp->isp_mboxbsy) {
-+              /*
-+               * Command timed out.
-+               */
-+              isp->isp_mboxbsy = 0;
-+              MBOX_RELEASE(isp);
-+              return;
-+      }
-+
-+      /*
-+       * Copy back output registers.
-+       */
-+      for (box = 0; box < MAX_MAILBOX; box++) {
-+              if (obits & (1 << box)) {
-+                      mbp->param[box] = isp->isp_mboxtmp[box];
-+              }
-+      }
-+
-+      MBOX_RELEASE(isp);
-+
-+      if (logmask == 0 || opcode == MBOX_EXEC_FIRMWARE) {
-+              return;
-+      }
-+#ifdef        ISP_STRIPPED
-+      cname = NULL;
-+#else
-+      cname = (IS_FC(isp))? fc_mbcmd_names[opcode] : scsi_mbcmd_names[opcode];
-+#endif
-+      if (cname == NULL) {
-+              cname = tname;
-+              SNPRINTF(tname, sizeof tname, "opcode %x", opcode);
-+      }
-+
-+      /*
-+       * Just to be chatty here...
-+       */
-+      xname = NULL;
-+      switch (mbp->param[0]) {
-+      case MBOX_COMMAND_COMPLETE:
-+              break;
-+      case MBOX_INVALID_COMMAND:
-+              if (logmask & MBLOGMASK(MBOX_COMMAND_COMPLETE))
-+                      xname = "INVALID COMMAND";
-+              break;
-+      case MBOX_HOST_INTERFACE_ERROR:
-+              if (logmask & MBLOGMASK(MBOX_HOST_INTERFACE_ERROR))
-+                      xname = "HOST INTERFACE ERROR";
-+              break;
-+      case MBOX_TEST_FAILED:
-+              if (logmask & MBLOGMASK(MBOX_TEST_FAILED))
-+                      xname = "TEST FAILED";
-+              break;
-+      case MBOX_COMMAND_ERROR:
-+              if (logmask & MBLOGMASK(MBOX_COMMAND_ERROR))
-+                      xname = "COMMAND ERROR";
-+              break;
-+      case MBOX_COMMAND_PARAM_ERROR:
-+              if (logmask & MBLOGMASK(MBOX_COMMAND_PARAM_ERROR))
-+                      xname = "COMMAND PARAMETER ERROR";
-+              break;
-+      case MBOX_LOOP_ID_USED:
-+              if (logmask & MBLOGMASK(MBOX_LOOP_ID_USED))
-+                      xname = "LOOP ID ALREADY IN USE";
-+              break;
-+      case MBOX_PORT_ID_USED:
-+              if (logmask & MBLOGMASK(MBOX_PORT_ID_USED))
-+                      xname = "PORT ID ALREADY IN USE";
-+              break;
-+      case MBOX_ALL_IDS_USED:
-+              if (logmask & MBLOGMASK(MBOX_ALL_IDS_USED))
-+                      xname = "ALL LOOP IDS IN USE";
-+              break;
-+      case 0:         /* special case */
-+              xname = "TIMEOUT";
-+              break;
-+      default:
-+              SNPRINTF(mname, sizeof mname, "error 0x%x", mbp->param[0]);
-+              xname = mname;
-+              break;
-+      }
-+      if (xname)
-+              isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s)",
-+                  cname, xname);
-+}
-+
-+static void
-+isp_fw_state(struct ispsoftc *isp)
-+{
-+      if (IS_FC(isp)) {
-+              mbreg_t mbs;
-+              fcparam *fcp = isp->isp_param;
-+
-+              mbs.param[0] = MBOX_GET_FW_STATE;
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {
-+                      fcp->isp_fwstate = mbs.param[1];
-+              }
-+      }
-+}
-+
-+static void
-+isp_update(struct ispsoftc *isp)
-+{
-+      int bus, upmask;
-+
-+      for (bus = 0, upmask = isp->isp_update; upmask != 0; bus++) {
-+              if (upmask & (1 << bus)) {
-+                      isp_update_bus(isp, bus);
-+              }
-+              upmask &= ~(1 << bus);
-+      }
-+}
-+
-+static void
-+isp_update_bus(struct ispsoftc *isp, int bus)
-+{
-+      int tgt;
-+      mbreg_t mbs;
-+      sdparam *sdp;
-+
-+      isp->isp_update &= ~(1 << bus);
-+      if (IS_FC(isp)) {
-+              /*
-+               * There are no 'per-bus' settings for Fibre Channel.
-+               */
-+              return;
-+      }
-+      sdp = isp->isp_param;
-+      sdp += bus;
-+
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              u_int16_t flags, period, offset;
-+              int get;
-+
-+              if (sdp->isp_devparam[tgt].dev_enable == 0) {
-+                      sdp->isp_devparam[tgt].dev_update = 0;
-+                      sdp->isp_devparam[tgt].dev_refresh = 0;
-+                      isp_prt(isp, ISP_LOGDEBUG0,
-+                          "skipping target %d bus %d update", tgt, bus);
-+                      continue;
-+              }
-+              /*
-+               * If the goal is to update the status of the device,
-+               * take what's in goal_flags and try and set the device
-+               * toward that. Otherwise, if we're just refreshing the
-+               * current device state, get the current parameters.
-+               */
-+
-+              /*
-+               * Refresh overrides set
-+               */
-+              if (sdp->isp_devparam[tgt].dev_refresh) {
-+                      mbs.param[0] = MBOX_GET_TARGET_PARAMS;
-+                      sdp->isp_devparam[tgt].dev_refresh = 0;
-+                      get = 1;
-+              } else if (sdp->isp_devparam[tgt].dev_update) {
-+                      mbs.param[0] = MBOX_SET_TARGET_PARAMS;
-+                      /*
-+                       * Make sure goal_flags has "Renegotiate on Error"
-+                       * on and "Freeze Queue on Error" off.
-+                       */
-+                      sdp->isp_devparam[tgt].goal_flags |= DPARM_RENEG;
-+                      sdp->isp_devparam[tgt].goal_flags &= ~DPARM_QFRZ;
-+
-+                      mbs.param[2] = sdp->isp_devparam[tgt].goal_flags;
-+
-+                      /*
-+                       * Insist that PARITY must be enabled
-+                       * if SYNC or WIDE is enabled.
-+                       */
-+                      if ((mbs.param[2] & (DPARM_SYNC|DPARM_WIDE)) != 0) {
-+                              mbs.param[2] |= DPARM_PARITY;
-+                      }
-+
-+                      if ((mbs.param[2] & DPARM_SYNC) == 0) {
-+                              mbs.param[3] = 0;
-+                      } else {
-+                              mbs.param[3] =
-+                                  (sdp->isp_devparam[tgt].goal_offset << 8) |
-+                                  (sdp->isp_devparam[tgt].goal_period);
-+                      }
-+                      /*
-+                       * A command completion later that has
-+                       * RQSTF_NEGOTIATION set can cause
-+                       * the dev_refresh/announce cycle also.
-+                       *
-+                       * Note: It is really important to update our current
-+                       * flags with at least the state of TAG capabilities-
-+                       * otherwise we might try and send a tagged command
-+                       * when we have it all turned off. So change it here
-+                       * to say that current already matches goal.
-+                       */
-+                      sdp->isp_devparam[tgt].actv_flags &= ~DPARM_TQING;
-+                      sdp->isp_devparam[tgt].actv_flags |=
-+                          (sdp->isp_devparam[tgt].goal_flags & DPARM_TQING);
-+                      isp_prt(isp, ISP_LOGDEBUG0,
-+                          "bus %d set tgt %d flags 0x%x off 0x%x period 0x%x",
-+                          bus, tgt, mbs.param[2], mbs.param[3] >> 8,
-+                          mbs.param[3] & 0xff);
-+                      sdp->isp_devparam[tgt].dev_update = 0;
-+                      sdp->isp_devparam[tgt].dev_refresh = 1;
-+                      get = 0;
-+              } else {
-+                      continue;
-+              }
-+              mbs.param[1] = (bus << 15) | (tgt << 8);
-+              isp_mboxcmd(isp, &mbs, MBLOGALL);
-+              if (get == 0) {
-+                      isp->isp_sendmarker |= (1 << bus);
-+                      continue;
-+              }
-+              flags = mbs.param[2];
-+              period = mbs.param[3] & 0xff;
-+              offset = mbs.param[3] >> 8;
-+              sdp->isp_devparam[tgt].actv_flags = flags;
-+              sdp->isp_devparam[tgt].actv_period = period;
-+              sdp->isp_devparam[tgt].actv_offset = offset;
-+              get = (bus << 16) | tgt;
-+              (void) isp_async(isp, ISPASYNC_NEW_TGT_PARAMS, &get);
-+      }
-+
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              if (sdp->isp_devparam[tgt].dev_update ||
-+                  sdp->isp_devparam[tgt].dev_refresh) {
-+                      isp->isp_update |= (1 << bus);
-+                      break;
-+              }
-+      }
-+}
-+
-+#ifndef       DEFAULT_FRAMESIZE
-+#define       DEFAULT_FRAMESIZE(isp)          ICB_DFLT_FRMLEN
-+#endif
-+#ifndef       DEFAULT_EXEC_THROTTLE
-+#define       DEFAULT_EXEC_THROTTLE(isp)      ISP_EXEC_THROTTLE
-+#endif
-+
-+static void
-+isp_setdfltparm(struct ispsoftc *isp, int channel)
-+{
-+      int tgt;
-+      mbreg_t mbs;
-+      sdparam *sdp;
-+
-+      if (IS_FC(isp)) {
-+              fcparam *fcp = (fcparam *) isp->isp_param;
-+              int nvfail;
-+
-+              fcp += channel;
-+              if (fcp->isp_gotdparms) {
-+                      return;
-+              }
-+              fcp->isp_gotdparms = 1;
-+              fcp->isp_maxfrmlen = DEFAULT_FRAMESIZE(isp);
-+              fcp->isp_maxalloc = ICB_DFLT_ALLOC;
-+              fcp->isp_execthrottle = DEFAULT_EXEC_THROTTLE(isp);
-+              fcp->isp_retry_delay = ICB_DFLT_RDELAY;
-+              fcp->isp_retry_count = ICB_DFLT_RCOUNT;
-+              /* Platform specific.... */
-+              fcp->isp_loopid = DEFAULT_LOOPID(isp);
-+              fcp->isp_nodewwn = DEFAULT_NODEWWN(isp);
-+              fcp->isp_portwwn = DEFAULT_PORTWWN(isp);
-+              fcp->isp_fwoptions = 0;
-+              fcp->isp_fwoptions |= ICBOPT_FAIRNESS;
-+              fcp->isp_fwoptions |= ICBOPT_PDBCHANGE_AE;
-+              fcp->isp_fwoptions |= ICBOPT_HARD_ADDRESS;
-+#ifndef       ISP_NO_FASTPOST_FC
-+              fcp->isp_fwoptions |= ICBOPT_FAST_POST;
-+#endif
-+              if (isp->isp_confopts & ISP_CFG_FULL_DUPLEX)
-+                      fcp->isp_fwoptions |= ICBOPT_FULL_DUPLEX;
-+
-+              /*
-+               * Make sure this is turned off now until we get
-+               * extended options from NVRAM
-+               */
-+              fcp->isp_fwoptions &= ~ICBOPT_EXTENDED;
-+
-+              /*
-+               * Now try and read NVRAM unless told to not do so.
-+               * This will set fcparam's isp_nodewwn && isp_portwwn.
-+               */
-+              if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
-+                      nvfail = isp_read_nvram(isp);
-+                      if (nvfail)
-+                              isp->isp_confopts |= ISP_CFG_NONVRAM;
-+              } else {
-+                      nvfail = 1;
-+              }
-+              /*
-+               * Set node && port to override platform set defaults
-+               * unless the nvram read failed (or none was done),
-+               * or the platform code wants to use what had been
-+               * set in the defaults.
-+               */
-+              if (nvfail) {
-+                      isp->isp_confopts |= ISP_CFG_OWNWWPN|ISP_CFG_OWNWWNN;
-+              }
-+              if (isp->isp_confopts & ISP_CFG_OWNWWNN) {
-+                      isp_prt(isp, ISP_LOGCONFIG, "Using Node WWN 0x%08x%08x",
-+                          (u_int32_t) (DEFAULT_NODEWWN(isp) >> 32),
-+                          (u_int32_t) (DEFAULT_NODEWWN(isp) & 0xffffffff));
-+                      ISP_NODEWWN(isp) = DEFAULT_NODEWWN(isp);
-+              } else {
-+                      /*
-+                       * We always start out with values derived
-+                       * from NVRAM or our platform default.
-+                       */
-+                      ISP_NODEWWN(isp) = fcp->isp_nodewwn;
-+              }
-+              if (isp->isp_confopts & ISP_CFG_OWNWWPN) {
-+                      isp_prt(isp, ISP_LOGCONFIG, "Using Port WWN 0x%08x%08x",
-+                          (u_int32_t) (DEFAULT_PORTWWN(isp) >> 32),
-+                          (u_int32_t) (DEFAULT_PORTWWN(isp) & 0xffffffff));
-+                      ISP_PORTWWN(isp) = DEFAULT_PORTWWN(isp);
-+              } else {
-+                      /*
-+                       * We always start out with values derived
-+                       * from NVRAM or our platform default.
-+                       */
-+                      ISP_PORTWWN(isp) = fcp->isp_portwwn;
-+              }
-+              return;
-+      }
-+
-+      sdp = (sdparam *) isp->isp_param;
-+      sdp += channel;
-+
-+      /*
-+       * Been there, done that, got the T-shirt...
-+       */
-+      if (sdp->isp_gotdparms) {
-+              return;
-+      }
-+      sdp->isp_gotdparms = 1;
-+
-+      /*
-+       * Establish some default parameters.
-+       */
-+      sdp->isp_cmd_dma_burst_enable = 0;
-+      sdp->isp_data_dma_burst_enabl = 1;
-+      sdp->isp_fifo_threshold = 0;
-+      sdp->isp_initiator_id = DEFAULT_IID(isp);
-+      if (isp->isp_type >= ISP_HA_SCSI_1040) {
-+              sdp->isp_async_data_setup = 9;
-+      } else {
-+              sdp->isp_async_data_setup = 6;
-+      }
-+      sdp->isp_selection_timeout = 250;
-+      sdp->isp_max_queue_depth = MAXISPREQUEST(isp);
-+      sdp->isp_tag_aging = 8;
-+      sdp->isp_bus_reset_delay = 5;
-+      /*
-+       * Don't retry selection, busy or queue full automatically- reflect
-+       * these back to us.
-+       */
-+      sdp->isp_retry_count = 0;
-+      sdp->isp_retry_delay = 0;
-+
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              sdp->isp_devparam[tgt].exc_throttle = ISP_EXEC_THROTTLE;
-+              sdp->isp_devparam[tgt].dev_enable = 1;
-+      }
-+
-+      /*
-+       * If we've not been told to avoid reading NVRAM, try and read it.
-+       * If we're successful reading it, we can then return because NVRAM
-+       * will tell us what the desired settings are. Otherwise, we establish
-+       * some reasonable 'fake' nvram and goal defaults.
-+       */
-+
-+      if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
-+              if (isp_read_nvram(isp) == 0) {
-+                      return;
-+              }
-+      }
-+
-+      /*
-+       * Now try and see whether we have specific values for them.
-+       */
-+      if ((isp->isp_confopts & ISP_CFG_NONVRAM) == 0) {
-+              mbs.param[0] = MBOX_GET_ACT_NEG_STATE;
-+              isp_mboxcmd(isp, &mbs, MBLOGNONE);
-+              if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+                      sdp->isp_req_ack_active_neg = 1;
-+                      sdp->isp_data_line_active_neg = 1;
-+              } else {
-+                      sdp->isp_req_ack_active_neg =
-+                          (mbs.param[1+channel] >> 4) & 0x1;
-+                      sdp->isp_data_line_active_neg =
-+                          (mbs.param[1+channel] >> 5) & 0x1;
-+              }
-+      }
-+
-+      isp_prt(isp, ISP_LOGDEBUG0, sc0, sc3,
-+          0, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+          sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+          sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+      isp_prt(isp, ISP_LOGDEBUG0, sc1, sc3,
-+          sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+          sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+          sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+      /*
-+       * The trick here is to establish a default for the default (honk!)
-+       * state (goal_flags). Then try and get the current status from
-+       * the card to fill in the current state. We don't, in fact, set
-+       * the default to the SAFE default state- that's not the goal state.
-+       */
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              u_int8_t off, per;
-+              sdp->isp_devparam[tgt].actv_offset = 0;
-+              sdp->isp_devparam[tgt].actv_period = 0;
-+              sdp->isp_devparam[tgt].actv_flags = 0;
-+
-+              sdp->isp_devparam[tgt].goal_flags =
-+                  sdp->isp_devparam[tgt].nvrm_flags = DPARM_DEFAULT;
-+
-+              /*
-+               * We default to Wide/Fast for versions less than a 1040
-+               * (unless it's SBus).
-+               */
-+              if (IS_ULTRA3(isp)) {
-+                      off = ISP_80M_SYNCPARMS >> 8;
-+                      per = ISP_80M_SYNCPARMS & 0xff;
-+              } else if (IS_ULTRA2(isp)) {
-+                      off = ISP_40M_SYNCPARMS >> 8;
-+                      per = ISP_40M_SYNCPARMS & 0xff;
-+              } else if (IS_1240(isp)) {
-+                      off = ISP_20M_SYNCPARMS >> 8;
-+                      per = ISP_20M_SYNCPARMS & 0xff;
-+              } else if ((isp->isp_bustype == ISP_BT_SBUS &&
-+                  isp->isp_type < ISP_HA_SCSI_1020A) ||
-+                  (isp->isp_bustype == ISP_BT_PCI &&
-+                  isp->isp_type < ISP_HA_SCSI_1040) ||
-+                  (isp->isp_clock && isp->isp_clock < 60) ||
-+                  (sdp->isp_ultramode == 0)) {
-+                      off = ISP_10M_SYNCPARMS >> 8;
-+                      per = ISP_10M_SYNCPARMS & 0xff;
-+              } else {
-+                      off = ISP_20M_SYNCPARMS_1040 >> 8;
-+                      per = ISP_20M_SYNCPARMS_1040 & 0xff;
-+              }
-+              sdp->isp_devparam[tgt].goal_offset =
-+                  sdp->isp_devparam[tgt].nvrm_offset = off;
-+              sdp->isp_devparam[tgt].goal_period =
-+                  sdp->isp_devparam[tgt].nvrm_period = per;
-+
-+              isp_prt(isp, ISP_LOGDEBUG0, sc2, sc3,
-+                  channel, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+                  sdp->isp_devparam[tgt].nvrm_offset,
-+                  sdp->isp_devparam[tgt].nvrm_period);
-+      }
-+}
-+
-+/*
-+ * Re-initialize the ISP and complete all orphaned commands
-+ * with a 'botched' notice. The reset/init routines should
-+ * not disturb an already active list of commands.
-+ *
-+ * Locks held prior to coming here.
-+ */
-+
-+void
-+isp_reinit(struct ispsoftc *isp)
-+{
-+      XS_T *xs;
-+      u_int16_t handle;
-+
-+      if (IS_FC(isp)) {
-+              isp_mark_getpdb_all(isp);
-+      }
-+      isp_reset(isp);
-+      if (isp->isp_state != ISP_RESETSTATE) {
-+              isp_prt(isp, ISP_LOGERR, "isp_reinit cannot reset card");
-+      } else if (isp->isp_role != ISP_ROLE_NONE) {
-+              isp_init(isp);
-+              if (isp->isp_state == ISP_INITSTATE) {
-+                      isp->isp_state = ISP_RUNSTATE;
-+              }
-+              if (isp->isp_state != ISP_RUNSTATE) {
-+                      isp_prt(isp, ISP_LOGERR,
-+                          "isp_reinit cannot restart card");
-+              }
-+      }
-+      isp->isp_nactive = 0;
-+
-+      for (handle = 1; (int) handle <= isp->isp_maxcmds; handle++) {
-+              xs = isp_find_xs(isp, handle);
-+              if (xs == NULL) {
-+                      continue;
-+              }
-+              isp_destroy_handle(isp, handle);
-+              if (XS_XFRLEN(xs)) {
-+                      ISP_DMAFREE(isp, xs, handle);
-+                      XS_RESID(xs) = XS_XFRLEN(xs);
-+              } else {
-+                      XS_RESID(xs) = 0;
-+              }
-+              XS_SETERR(xs, HBA_BUSRESET);
-+              isp_done(xs);
-+      }
-+}
-+
-+/*
-+ * NVRAM Routines
-+ */
-+static int
-+isp_read_nvram(struct ispsoftc *isp)
-+{
-+      int i, amt;
-+      u_int8_t csum, minversion;
-+      union {
-+              u_int8_t _x[ISP2100_NVRAM_SIZE];
-+              u_int16_t _s[ISP2100_NVRAM_SIZE>>1];
-+      } _n;
-+#define       nvram_data      _n._x
-+#define       nvram_words     _n._s
-+
-+      if (IS_FC(isp)) {
-+              amt = ISP2100_NVRAM_SIZE;
-+              minversion = 1;
-+      } else if (IS_ULTRA2(isp)) {
-+              amt = ISP1080_NVRAM_SIZE;
-+              minversion = 0;
-+      } else {
-+              amt = ISP_NVRAM_SIZE;
-+              minversion = 2;
-+      }
-+
-+      /*
-+       * Just read the first two words first to see if we have a valid
-+       * NVRAM to continue reading the rest with.
-+       */
-+      for (i = 0; i < 2; i++) {
-+              isp_rdnvram_word(isp, i, &nvram_words[i]);
-+      }
-+      if (nvram_data[0] != 'I' || nvram_data[1] != 'S' ||
-+          nvram_data[2] != 'P') {
-+              if (isp->isp_bustype != ISP_BT_SBUS) {
-+                      isp_prt(isp, ISP_LOGWARN, "invalid NVRAM header");
-+                      isp_prt(isp, ISP_LOGDEBUG0, "%x %x %x",
-+                          nvram_data[0], nvram_data[1], nvram_data[2]);
-+              }
-+              return (-1);
-+      }
-+      for (i = 2; i < amt>>1; i++) {
-+              isp_rdnvram_word(isp, i, &nvram_words[i]);
-+      }
-+      for (csum = 0, i = 0; i < amt; i++) {
-+              csum += nvram_data[i];
-+      }
-+      if (csum != 0) {
-+              isp_prt(isp, ISP_LOGWARN, "invalid NVRAM checksum");
-+              return (-1);
-+      }
-+      if (ISP_NVRAM_VERSION(nvram_data) < minversion) {
-+              isp_prt(isp, ISP_LOGWARN, "version %d NVRAM not understood",
-+                  ISP_NVRAM_VERSION(nvram_data));
-+              return (-1);
-+      }
-+
-+      if (IS_ULTRA3(isp)) {
-+              isp_parse_nvram_12160(isp, 0, nvram_data);
-+              if (IS_12160(isp))
-+                      isp_parse_nvram_12160(isp, 1, nvram_data);
-+      } else if (IS_1080(isp)) {
-+              isp_parse_nvram_1080(isp, 0, nvram_data);
-+      } else if (IS_1280(isp) || IS_1240(isp)) {
-+              isp_parse_nvram_1080(isp, 0, nvram_data);
-+              isp_parse_nvram_1080(isp, 1, nvram_data);
-+      } else if (IS_SCSI(isp)) {
-+              isp_parse_nvram_1020(isp, nvram_data);
-+      } else {
-+              isp_parse_nvram_2100(isp, nvram_data);
-+      }
-+      return (0);
-+#undef        nvram_data
-+#undef        nvram_words
-+}
-+
-+static void
-+isp_rdnvram_word(struct ispsoftc *isp, int wo, u_int16_t *rp)
-+{
-+      int i, cbits;
-+      u_int16_t bit, rqst;
-+
-+      ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT);
-+      USEC_DELAY(2);
-+      ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK);
-+      USEC_DELAY(2);
-+
-+      if (IS_FC(isp)) {
-+              wo &= ((ISP2100_NVRAM_SIZE >> 1) - 1);
-+              if (IS_2312(isp) && isp->isp_port) {
-+                      wo += 128;
-+              }
-+              rqst = (ISP_NVRAM_READ << 8) | wo;
-+              cbits = 10;
-+      } else if (IS_ULTRA2(isp)) {
-+              wo &= ((ISP1080_NVRAM_SIZE >> 1) - 1);
-+              rqst = (ISP_NVRAM_READ << 8) | wo;
-+              cbits = 10;
-+      } else {
-+              wo &= ((ISP_NVRAM_SIZE >> 1) - 1);
-+              rqst = (ISP_NVRAM_READ << 6) | wo;
-+              cbits = 8;
-+      }
-+
-+      /*
-+       * Clock the word select request out...
-+       */
-+      for (i = cbits; i >= 0; i--) {
-+              if ((rqst >> i) & 1) {
-+                      bit = BIU_NVRAM_SELECT | BIU_NVRAM_DATAOUT;
-+              } else {
-+                      bit = BIU_NVRAM_SELECT;
-+              }
-+              ISP_WRITE(isp, BIU_NVRAM, bit);
-+              USEC_DELAY(2);
-+              ISP_WRITE(isp, BIU_NVRAM, bit | BIU_NVRAM_CLOCK);
-+              USEC_DELAY(2);
-+              ISP_WRITE(isp, BIU_NVRAM, bit);
-+              USEC_DELAY(2);
-+      }
-+      /*
-+       * Now read the result back in (bits come back in MSB format).
-+       */
-+      *rp = 0;
-+      for (i = 0; i < 16; i++) {
-+              u_int16_t rv;
-+              *rp <<= 1;
-+              ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT|BIU_NVRAM_CLOCK);
-+              USEC_DELAY(2);
-+              rv = ISP_READ(isp, BIU_NVRAM);
-+              if (rv & BIU_NVRAM_DATAIN) {
-+                      *rp |= 1;
-+              }
-+              USEC_DELAY(2);
-+              ISP_WRITE(isp, BIU_NVRAM, BIU_NVRAM_SELECT);
-+              USEC_DELAY(2);
-+      }
-+      ISP_WRITE(isp, BIU_NVRAM, 0);
-+      USEC_DELAY(2);
-+      ISP_SWIZZLE_NVRAM_WORD(isp, rp);
-+}
-+
-+static void
-+isp_parse_nvram_1020(struct ispsoftc *isp, u_int8_t *nvram_data)
-+{
-+      sdparam *sdp = (sdparam *) isp->isp_param;
-+      int tgt;
-+
-+      sdp->isp_fifo_threshold =
-+              ISP_NVRAM_FIFO_THRESHOLD(nvram_data) |
-+              (ISP_NVRAM_FIFO_THRESHOLD_128(nvram_data) << 2);
-+
-+      if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+              sdp->isp_initiator_id =
-+                      ISP_NVRAM_INITIATOR_ID(nvram_data);
-+
-+      sdp->isp_bus_reset_delay =
-+              ISP_NVRAM_BUS_RESET_DELAY(nvram_data);
-+
-+      sdp->isp_retry_count =
-+              ISP_NVRAM_BUS_RETRY_COUNT(nvram_data);
-+
-+      sdp->isp_retry_delay =
-+              ISP_NVRAM_BUS_RETRY_DELAY(nvram_data);
-+
-+      sdp->isp_async_data_setup =
-+              ISP_NVRAM_ASYNC_DATA_SETUP_TIME(nvram_data);
-+
-+      if (isp->isp_type >= ISP_HA_SCSI_1040) {
-+              if (sdp->isp_async_data_setup < 9) {
-+                      sdp->isp_async_data_setup = 9;
-+              }
-+      } else {
-+              if (sdp->isp_async_data_setup != 6) {
-+                      sdp->isp_async_data_setup = 6;
-+              }
-+      }
-+
-+      sdp->isp_req_ack_active_neg =
-+              ISP_NVRAM_REQ_ACK_ACTIVE_NEGATION(nvram_data);
-+
-+      sdp->isp_data_line_active_neg =
-+              ISP_NVRAM_DATA_LINE_ACTIVE_NEGATION(nvram_data);
-+
-+      sdp->isp_data_dma_burst_enabl =
-+              ISP_NVRAM_DATA_DMA_BURST_ENABLE(nvram_data);
-+
-+      sdp->isp_cmd_dma_burst_enable =
-+              ISP_NVRAM_CMD_DMA_BURST_ENABLE(nvram_data);
-+
-+      sdp->isp_tag_aging =
-+              ISP_NVRAM_TAG_AGE_LIMIT(nvram_data);
-+
-+      sdp->isp_selection_timeout =
-+              ISP_NVRAM_SELECTION_TIMEOUT(nvram_data);
-+
-+      sdp->isp_max_queue_depth =
-+              ISP_NVRAM_MAX_QUEUE_DEPTH(nvram_data);
-+
-+      sdp->isp_fast_mttr = ISP_NVRAM_FAST_MTTR_ENABLE(nvram_data);
-+
-+      isp_prt(isp, ISP_LOGDEBUG0, sc0, sc4,
-+          0, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+          sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+          sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+      isp_prt(isp, ISP_LOGDEBUG0, sc1, sc4,
-+          sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+          sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+          sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              sdp->isp_devparam[tgt].dev_enable =
-+                      ISP_NVRAM_TGT_DEVICE_ENABLE(nvram_data, tgt);
-+              sdp->isp_devparam[tgt].exc_throttle =
-+                      ISP_NVRAM_TGT_EXEC_THROTTLE(nvram_data, tgt);
-+              sdp->isp_devparam[tgt].nvrm_offset =
-+                      ISP_NVRAM_TGT_SYNC_OFFSET(nvram_data, tgt);
-+              sdp->isp_devparam[tgt].nvrm_period =
-+                      ISP_NVRAM_TGT_SYNC_PERIOD(nvram_data, tgt);
-+              /*
-+               * We probably shouldn't lie about this, but it
-+               * it makes it much safer if we limit NVRAM values
-+               * to sanity.
-+               */
-+              if (isp->isp_type < ISP_HA_SCSI_1040) {
-+                      /*
-+                       * If we're not ultra, we can't possibly
-+                       * be a shorter period than this.
-+                       */
-+                      if (sdp->isp_devparam[tgt].nvrm_period < 0x19) {
-+                              sdp->isp_devparam[tgt].nvrm_period = 0x19;
-+                      }
-+                      if (sdp->isp_devparam[tgt].nvrm_offset > 0xc) {
-+                              sdp->isp_devparam[tgt].nvrm_offset = 0x0c;
-+                      }
-+              } else {
-+                      if (sdp->isp_devparam[tgt].nvrm_offset > 0x8) {
-+                              sdp->isp_devparam[tgt].nvrm_offset = 0x8;
-+                      }
-+              }
-+              sdp->isp_devparam[tgt].nvrm_flags = 0;
-+              if (ISP_NVRAM_TGT_RENEG(nvram_data, tgt))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_RENEG;
-+              sdp->isp_devparam[tgt].nvrm_flags |= DPARM_ARQ;
-+              if (ISP_NVRAM_TGT_TQING(nvram_data, tgt))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_TQING;
-+              if (ISP_NVRAM_TGT_SYNC(nvram_data, tgt))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_SYNC;
-+              if (ISP_NVRAM_TGT_WIDE(nvram_data, tgt))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_WIDE;
-+              if (ISP_NVRAM_TGT_PARITY(nvram_data, tgt))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_PARITY;
-+              if (ISP_NVRAM_TGT_DISC(nvram_data, tgt))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_DISC;
-+              sdp->isp_devparam[tgt].actv_flags = 0; /* we don't know */
-+              isp_prt(isp, ISP_LOGDEBUG0, sc2, sc4,
-+                  0, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+                  sdp->isp_devparam[tgt].nvrm_offset,
-+                  sdp->isp_devparam[tgt].nvrm_period);
-+              sdp->isp_devparam[tgt].goal_offset =
-+                  sdp->isp_devparam[tgt].nvrm_offset;
-+              sdp->isp_devparam[tgt].goal_period =
-+                  sdp->isp_devparam[tgt].nvrm_period;
-+              sdp->isp_devparam[tgt].goal_flags =
-+                  sdp->isp_devparam[tgt].nvrm_flags;
-+      }
-+}
-+
-+static void
-+isp_parse_nvram_1080(struct ispsoftc *isp, int bus, u_int8_t *nvram_data)
-+{
-+      sdparam *sdp = (sdparam *) isp->isp_param;
-+      int tgt;
-+
-+      sdp += bus;
-+
-+      sdp->isp_fifo_threshold =
-+          ISP1080_NVRAM_FIFO_THRESHOLD(nvram_data);
-+
-+      if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+              sdp->isp_initiator_id =
-+                  ISP1080_NVRAM_INITIATOR_ID(nvram_data, bus);
-+
-+      sdp->isp_bus_reset_delay =
-+          ISP1080_NVRAM_BUS_RESET_DELAY(nvram_data, bus);
-+
-+      sdp->isp_retry_count =
-+          ISP1080_NVRAM_BUS_RETRY_COUNT(nvram_data, bus);
-+
-+      sdp->isp_retry_delay =
-+          ISP1080_NVRAM_BUS_RETRY_DELAY(nvram_data, bus);
-+
-+      sdp->isp_async_data_setup =
-+          ISP1080_NVRAM_ASYNC_DATA_SETUP_TIME(nvram_data, bus);
-+
-+      sdp->isp_req_ack_active_neg =
-+          ISP1080_NVRAM_REQ_ACK_ACTIVE_NEGATION(nvram_data, bus);
-+
-+      sdp->isp_data_line_active_neg =
-+          ISP1080_NVRAM_DATA_LINE_ACTIVE_NEGATION(nvram_data, bus);
-+
-+      sdp->isp_data_dma_burst_enabl =
-+          ISP1080_NVRAM_BURST_ENABLE(nvram_data);
-+
-+      sdp->isp_cmd_dma_burst_enable =
-+          ISP1080_NVRAM_BURST_ENABLE(nvram_data);
-+
-+      sdp->isp_selection_timeout =
-+          ISP1080_NVRAM_SELECTION_TIMEOUT(nvram_data, bus);
-+
-+      sdp->isp_max_queue_depth =
-+           ISP1080_NVRAM_MAX_QUEUE_DEPTH(nvram_data, bus);
-+
-+      isp_prt(isp, ISP_LOGDEBUG0, sc0, sc4,
-+          bus, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+          sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+          sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+      isp_prt(isp, ISP_LOGDEBUG0, sc1, sc4,
-+          sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+          sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+          sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              sdp->isp_devparam[tgt].dev_enable =
-+                  ISP1080_NVRAM_TGT_DEVICE_ENABLE(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].exc_throttle =
-+                      ISP1080_NVRAM_TGT_EXEC_THROTTLE(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].nvrm_offset =
-+                      ISP1080_NVRAM_TGT_SYNC_OFFSET(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].nvrm_period =
-+                      ISP1080_NVRAM_TGT_SYNC_PERIOD(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].nvrm_flags = 0;
-+              if (ISP1080_NVRAM_TGT_RENEG(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_RENEG;
-+              sdp->isp_devparam[tgt].nvrm_flags |= DPARM_ARQ;
-+              if (ISP1080_NVRAM_TGT_TQING(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_TQING;
-+              if (ISP1080_NVRAM_TGT_SYNC(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_SYNC;
-+              if (ISP1080_NVRAM_TGT_WIDE(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_WIDE;
-+              if (ISP1080_NVRAM_TGT_PARITY(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_PARITY;
-+              if (ISP1080_NVRAM_TGT_DISC(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_DISC;
-+              sdp->isp_devparam[tgt].actv_flags = 0;
-+              isp_prt(isp, ISP_LOGDEBUG0, sc2, sc4,
-+                  bus, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+                  sdp->isp_devparam[tgt].nvrm_offset,
-+                  sdp->isp_devparam[tgt].nvrm_period);
-+              sdp->isp_devparam[tgt].goal_offset =
-+                  sdp->isp_devparam[tgt].nvrm_offset;
-+              sdp->isp_devparam[tgt].goal_period =
-+                  sdp->isp_devparam[tgt].nvrm_period;
-+              sdp->isp_devparam[tgt].goal_flags =
-+                  sdp->isp_devparam[tgt].nvrm_flags;
-+      }
-+}
-+
-+static void
-+isp_parse_nvram_12160(struct ispsoftc *isp, int bus, u_int8_t *nvram_data)
-+{
-+      sdparam *sdp = (sdparam *) isp->isp_param;
-+      int tgt;
-+
-+      sdp += bus;
-+
-+      sdp->isp_fifo_threshold =
-+          ISP12160_NVRAM_FIFO_THRESHOLD(nvram_data);
-+
-+      if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+              sdp->isp_initiator_id =
-+                  ISP12160_NVRAM_INITIATOR_ID(nvram_data, bus);
-+
-+      sdp->isp_bus_reset_delay =
-+          ISP12160_NVRAM_BUS_RESET_DELAY(nvram_data, bus);
-+
-+      sdp->isp_retry_count =
-+          ISP12160_NVRAM_BUS_RETRY_COUNT(nvram_data, bus);
-+
-+      sdp->isp_retry_delay =
-+          ISP12160_NVRAM_BUS_RETRY_DELAY(nvram_data, bus);
-+
-+      sdp->isp_async_data_setup =
-+          ISP12160_NVRAM_ASYNC_DATA_SETUP_TIME(nvram_data, bus);
-+
-+      sdp->isp_req_ack_active_neg =
-+          ISP12160_NVRAM_REQ_ACK_ACTIVE_NEGATION(nvram_data, bus);
-+
-+      sdp->isp_data_line_active_neg =
-+          ISP12160_NVRAM_DATA_LINE_ACTIVE_NEGATION(nvram_data, bus);
-+
-+      sdp->isp_data_dma_burst_enabl =
-+          ISP12160_NVRAM_BURST_ENABLE(nvram_data);
-+
-+      sdp->isp_cmd_dma_burst_enable =
-+          ISP12160_NVRAM_BURST_ENABLE(nvram_data);
-+
-+      sdp->isp_selection_timeout =
-+          ISP12160_NVRAM_SELECTION_TIMEOUT(nvram_data, bus);
-+
-+      sdp->isp_max_queue_depth =
-+           ISP12160_NVRAM_MAX_QUEUE_DEPTH(nvram_data, bus);
-+
-+      isp_prt(isp, ISP_LOGDEBUG0, sc0, sc4,
-+          bus, sdp->isp_fifo_threshold, sdp->isp_initiator_id,
-+          sdp->isp_bus_reset_delay, sdp->isp_retry_count,
-+          sdp->isp_retry_delay, sdp->isp_async_data_setup);
-+      isp_prt(isp, ISP_LOGDEBUG0, sc1, sc4,
-+          sdp->isp_req_ack_active_neg, sdp->isp_data_line_active_neg,
-+          sdp->isp_data_dma_burst_enabl, sdp->isp_cmd_dma_burst_enable,
-+          sdp->isp_selection_timeout, sdp->isp_max_queue_depth);
-+
-+      for (tgt = 0; tgt < MAX_TARGETS; tgt++) {
-+              sdp->isp_devparam[tgt].dev_enable =
-+                  ISP12160_NVRAM_TGT_DEVICE_ENABLE(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].exc_throttle =
-+                      ISP12160_NVRAM_TGT_EXEC_THROTTLE(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].nvrm_offset =
-+                      ISP12160_NVRAM_TGT_SYNC_OFFSET(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].nvrm_period =
-+                      ISP12160_NVRAM_TGT_SYNC_PERIOD(nvram_data, tgt, bus);
-+              sdp->isp_devparam[tgt].nvrm_flags = 0;
-+              if (ISP12160_NVRAM_TGT_RENEG(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_RENEG;
-+              sdp->isp_devparam[tgt].nvrm_flags |= DPARM_ARQ;
-+              if (ISP12160_NVRAM_TGT_TQING(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_TQING;
-+              if (ISP12160_NVRAM_TGT_SYNC(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_SYNC;
-+              if (ISP12160_NVRAM_TGT_WIDE(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_WIDE;
-+              if (ISP12160_NVRAM_TGT_PARITY(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_PARITY;
-+              if (ISP12160_NVRAM_TGT_DISC(nvram_data, tgt, bus))
-+                      sdp->isp_devparam[tgt].nvrm_flags |= DPARM_DISC;
-+              sdp->isp_devparam[tgt].actv_flags = 0;
-+              isp_prt(isp, ISP_LOGDEBUG0, sc2, sc4,
-+                  bus, tgt, sdp->isp_devparam[tgt].nvrm_flags,
-+                  sdp->isp_devparam[tgt].nvrm_offset,
-+                  sdp->isp_devparam[tgt].nvrm_period);
-+              sdp->isp_devparam[tgt].goal_offset =
-+                  sdp->isp_devparam[tgt].nvrm_offset;
-+              sdp->isp_devparam[tgt].goal_period =
-+                  sdp->isp_devparam[tgt].nvrm_period;
-+              sdp->isp_devparam[tgt].goal_flags =
-+                  sdp->isp_devparam[tgt].nvrm_flags;
-+      }
-+}
-+
-+static void
-+isp_parse_nvram_2100(struct ispsoftc *isp, u_int8_t *nvram_data)
-+{
-+      fcparam *fcp = (fcparam *) isp->isp_param;
-+      u_int64_t wwn;
-+
-+      /*
-+       * There is NVRAM storage for both Port and Node entities-
-+       * but the Node entity appears to be unused on all the cards
-+       * I can find. However, we should account for this being set
-+       * at some point in the future.
-+       *
-+       * Qlogic WWNs have an NAA of 2, but usually nothing shows up in
-+       * bits 48..60. In the case of the 2202, it appears that they do
-+       * use bit 48 to distinguish between the two instances on the card.
-+       * The 2204, which I've never seen, *probably* extends this method.
-+       */
-+      wwn = ISP2100_NVRAM_PORT_NAME(nvram_data);
-+      if (wwn) {
-+              isp_prt(isp, ISP_LOGCONFIG, "NVRAM Port WWN 0x%08x%08x",
-+                  (u_int32_t) (wwn >> 32), (u_int32_t) (wwn & 0xffffffff));
-+              if ((wwn >> 60) == 0) {
-+                      wwn |= (((u_int64_t) 2)<< 60);
-+              }
-+      }
-+      fcp->isp_portwwn = wwn;
-+      if (IS_2200(isp) || IS_23XX(isp)) {
-+              wwn = ISP2200_NVRAM_NODE_NAME(nvram_data);
-+              if (wwn) {
-+                      isp_prt(isp, ISP_LOGCONFIG, "NVRAM Node WWN 0x%08x%08x",
-+                          (u_int32_t) (wwn >> 32),
-+                          (u_int32_t) (wwn & 0xffffffff));
-+                      if ((wwn >> 60) == 0) {
-+                              wwn |= (((u_int64_t) 2)<< 60);
-+                      }
-+              }
-+      } else {
-+              wwn &= ~((u_int64_t) 0xfff << 48);
-+      }
-+      fcp->isp_nodewwn = wwn;
-+
-+      /*
-+       * Make sure we have both Node and Port as non-zero values.
-+       */
-+      if (fcp->isp_nodewwn != 0 && fcp->isp_portwwn == 0) {
-+              fcp->isp_portwwn = fcp->isp_nodewwn;
-+      } else if (fcp->isp_nodewwn == 0 && fcp->isp_portwwn != 0) {
-+              fcp->isp_nodewwn = fcp->isp_portwwn;
-+      }
-+
-+      /*
-+       * Make the Node and Port values sane if they're NAA == 2.
-+       * This means to clear bits 48..56 for the Node WWN and
-+       * make sure that there's some non-zero value in 48..56
-+       * for the Port WWN.
-+       */
-+      if (fcp->isp_nodewwn && fcp->isp_portwwn) {
-+              if ((fcp->isp_nodewwn & (((u_int64_t) 0xfff) << 48)) != 0 &&
-+                  (fcp->isp_nodewwn >> 60) == 2) {
-+                      fcp->isp_nodewwn &= ~((u_int64_t) 0xfff << 48);
-+              }
-+              if ((fcp->isp_portwwn & (((u_int64_t) 0xfff) << 48)) == 0 &&
-+                  (fcp->isp_portwwn >> 60) == 2) {
-+                      fcp->isp_portwwn |= ((u_int64_t) 1 << 56);
-+              }
-+      }
-+
-+      isp_prt(isp, ISP_LOGDEBUG0,
-+          "NVRAM: maxfrmlen %d execthrottle %d fwoptions 0x%x loopid %x",
-+          ISP2100_NVRAM_MAXFRAMELENGTH(nvram_data),
-+          ISP2100_NVRAM_EXECUTION_THROTTLE(nvram_data),
-+          ISP2100_NVRAM_OPTIONS(nvram_data),
-+          ISP2100_NVRAM_HARDLOOPID(nvram_data));
-+
-+      fcp->isp_maxalloc =
-+              ISP2100_NVRAM_MAXIOCBALLOCATION(nvram_data);
-+      if ((isp->isp_confopts & ISP_CFG_OWNFSZ) == 0)
-+              fcp->isp_maxfrmlen =
-+                      ISP2100_NVRAM_MAXFRAMELENGTH(nvram_data);
-+      fcp->isp_retry_delay =
-+              ISP2100_NVRAM_RETRY_DELAY(nvram_data);
-+      fcp->isp_retry_count =
-+              ISP2100_NVRAM_RETRY_COUNT(nvram_data);
-+      if ((isp->isp_confopts & ISP_CFG_OWNLOOPID) == 0)
-+              fcp->isp_loopid =
-+                      ISP2100_NVRAM_HARDLOOPID(nvram_data);
-+      if ((isp->isp_confopts & ISP_CFG_OWNEXCTHROTTLE) == 0)
-+              fcp->isp_execthrottle =
-+                      ISP2100_NVRAM_EXECUTION_THROTTLE(nvram_data);
-+      fcp->isp_fwoptions = ISP2100_NVRAM_OPTIONS(nvram_data);
-+}
-+
-+#ifdef        ISP_FW_CRASH_DUMP
-+static void isp2200_fw_dump(struct ispsoftc *);
-+static void isp2300_fw_dump(struct ispsoftc *);
-+
-+static void
-+isp2200_fw_dump(struct ispsoftc *isp)
-+{
-+      int i, j;
-+      mbreg_t mbs;
-+      u_int16_t *ptr;
-+
-+      ptr = FCPARAM(isp)->isp_dump_data;
-+      if (ptr == NULL) {
-+              isp_prt(isp, ISP_LOGERR,
-+                 "No place to dump RISC registers and SRAM");
-+              return;
-+      }
-+      if (*ptr++) {
-+              isp_prt(isp, ISP_LOGERR,
-+                 "dump area for RISC registers and SRAM already used");
-+              return;
-+      }
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+      for (i = 0; i < 100; i++) {
-+              USEC_DELAY(100);
-+              if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+                      break;
-+              }
-+      }
-+      if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+              /*
-+               * PBIU Registers
-+               */
-+              for (i = 0; i < 8; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + (i << 1));
-+              }
-+
-+              /*
-+               * Mailbox Registers
-+               */
-+              for (i = 0; i < 8; i++) {
-+                      *ptr++ = ISP_READ(isp, MBOX_BLOCK + (i << 1));
-+              }
-+
-+              /*
-+               * DMA Registers
-+               */
-+              for (i = 0; i < 48; i++) {
-+                      *ptr++ = ISP_READ(isp, DMA_BLOCK + 0x20 + (i << 1));
-+              }
-+
-+              /*
-+               * RISC H/W Registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0);
-+              for (i = 0; i < 16; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0xA0 + (i << 1));
-+              }
-+
-+              /*
-+               * RISC GP Registers
-+               */
-+              for (j = 0; j < 8; j++) {
-+                      ISP_WRITE(isp, BIU_BLOCK + 0xA4, 0x2000 + (j << 8));
-+                      for (i = 0; i < 16; i++) {
-+                              *ptr++ =
-+                                  ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+                      }
-+              }
-+
-+              /*
-+               * Frame Buffer Hardware Registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x10);
-+              for (i = 0; i < 16; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+
-+              /*
-+               * Fibre Protocol Module 0 Hardware Registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x20);
-+              for (i = 0; i < 64; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+
-+              /*
-+               * Fibre Protocol Module 1 Hardware Registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x30);
-+              for (i = 0; i < 64; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+      } else {
-+              isp_prt(isp, ISP_LOGERR, "RISC Would Not Pause");
-+              return;
-+      }
-+      isp_prt(isp, ISP_LOGALL,
-+         "isp_fw_dump: RISC registers dumped successfully");
-+      ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET);
-+      for (i = 0; i < 100; i++) {
-+              USEC_DELAY(100);
-+              if (ISP_READ(isp, OUTMAILBOX0) == 0) {
-+                      break;
-+              }
-+      }
-+      if (ISP_READ(isp, OUTMAILBOX0) != 0) {
-+              isp_prt(isp, ISP_LOGERR, "Board Would Not Reset");
-+              return;
-+      }
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+      for (i = 0; i < 100; i++) {
-+              USEC_DELAY(100);
-+              if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+                      break;
-+              }
-+      }
-+      if ((ISP_READ(isp, HCCR) & HCCR_PAUSE) == 0) {
-+              isp_prt(isp, ISP_LOGERR, "RISC Would Not Pause After Reset");
-+              return;
-+      }
-+      ISP_WRITE(isp, RISC_EMB, 0xf2);
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
-+      for (i = 0; i < 100; i++) {
-+              USEC_DELAY(100);
-+              if ((ISP_READ(isp, HCCR) & HCCR_PAUSE) == 0) {
-+                      break;
-+              }
-+      }
-+      ENABLE_INTS(isp);
-+      mbs.param[0] = MBOX_READ_RAM_WORD;
-+      mbs.param[1] = 0x1000;
-+      isp->isp_mbxworkp = (void *) ptr;
-+      isp->isp_mbxwrk0 = 0xefff;      /* continuation count */
-+      isp->isp_mbxwrk1 = 0x1001;      /* next SRAM address */
-+      isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "RAM DUMP FAILED @ WORD %x", isp->isp_mbxwrk1);
-+              return;
-+      }
-+      ptr = isp->isp_mbxworkp;        /* finish fetch of final word */
-+      *ptr++ = isp->isp_mboxtmp[2];
-+      isp_prt(isp, ISP_LOGALL, "isp_fw_dump: SRAM dumped successfully");
-+      FCPARAM(isp)->isp_dump_data[0] = isp->isp_type; /* now used */
-+      (void) isp_async(isp, ISPASYNC_FW_DUMPED, 0);
-+}
-+
-+static void
-+isp2300_fw_dump(struct ispsoftc *isp)
-+{
-+      int i, j;
-+      mbreg_t mbs;
-+      u_int16_t *ptr;
-+
-+      ptr = FCPARAM(isp)->isp_dump_data;
-+      if (ptr == NULL) {
-+              isp_prt(isp, ISP_LOGERR,
-+                 "No place to dump RISC registers and SRAM");
-+              return;
-+      }
-+      if (*ptr++) {
-+              isp_prt(isp, ISP_LOGERR,
-+                 "dump area for RISC registers and SRAM already used");
-+              return;
-+      }
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+      for (i = 0; i < 100; i++) {
-+              USEC_DELAY(100);
-+              if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+                      break;
-+              }
-+      }
-+      if (ISP_READ(isp, HCCR) & HCCR_PAUSE) {
-+              /*
-+               * PBIU registers
-+               */
-+              for (i = 0; i < 8; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + (i << 1));
-+              }
-+
-+              /*
-+               * ReqQ-RspQ-Risc2Host Status registers
-+               */
-+              for (i = 0; i < 8; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x10 + (i << 1));
-+              }
-+
-+              /*
-+               * Mailbox Registers
-+               */
-+              for (i = 0; i < 32; i++) {
-+                      *ptr++ =
-+                          ISP_READ(isp, PCI_MBOX_REGS2300_OFF + (i << 1));
-+              }
-+
-+              /*
-+               * Auto Request Response DMA registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x40);
-+              for (i = 0; i < 32; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+
-+              /*
-+               * DMA registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x50);
-+              for (i = 0; i < 48; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+
-+              /*
-+               * RISC hardware registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0);
-+              for (i = 0; i < 16; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0xA0 + (i << 1));
-+              }
-+
-+              /*
-+               * RISC GP? registers
-+               */
-+              for (j = 0; j < 8; j++) {
-+                      ISP_WRITE(isp, BIU_BLOCK + 0xA4, 0x2000 + (j << 9));
-+                      for (i = 0; i < 16; i++) {
-+                              *ptr++ =
-+                                  ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+                      }
-+              }
-+
-+              /*
-+               * frame buffer hardware registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x10);
-+              for (i = 0; i < 64; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+
-+              /*
-+               * FPM B0 hardware registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x20);
-+              for (i = 0; i < 64; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+
-+              /*
-+               * FPM B1 hardware registers
-+               */
-+              ISP_WRITE(isp, BIU2100_CSR, 0x30);
-+              for (i = 0; i < 64; i++) {
-+                      *ptr++ = ISP_READ(isp, BIU_BLOCK + 0x80 + (i << 1));
-+              }
-+      } else {
-+              isp_prt(isp, ISP_LOGERR, "RISC Would Not Pause");
-+              return;
-+      }
-+      isp_prt(isp, ISP_LOGALL,
-+         "isp_fw_dump: RISC registers dumped successfully");
-+      ISP_WRITE(isp, BIU2100_CSR, BIU2100_SOFT_RESET);
-+      for (i = 0; i < 100; i++) {
-+              USEC_DELAY(100);
-+              if (ISP_READ(isp, OUTMAILBOX0) == 0) {
-+                      break;
-+              }
-+      }
-+      if (ISP_READ(isp, OUTMAILBOX0) != 0) {
-+              isp_prt(isp, ISP_LOGERR, "Board Would Not Reset");
-+              return;
-+      }
-+      ENABLE_INTS(isp);
-+      mbs.param[0] = MBOX_READ_RAM_WORD;
-+      mbs.param[1] = 0x800;
-+      isp->isp_mbxworkp = (void *) ptr;
-+      isp->isp_mbxwrk0 = 0xf7ff;      /* continuation count */
-+      isp->isp_mbxwrk1 = 0x801;       /* next SRAM address */
-+      isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "RAM DUMP FAILED @ WORD %x", isp->isp_mbxwrk1);
-+              return;
-+      }
-+      ptr = isp->isp_mbxworkp;        /* finish fetch of final word */
-+      *ptr++ = isp->isp_mboxtmp[2];
-+
-+      /*
-+       * We don't have access to mailbox registers 8.. onward
-+       * in our 'common' device model- so we have to set it
-+       * here and hope it stays the same!
-+       */
-+      ISP_WRITE(isp, PCI_MBOX_REGS2300_OFF + (8 << 1), 0x1);
-+
-+      mbs.param[0] = MBOX_READ_RAM_WORD_EXTENDED;
-+      mbs.param[1] = 0;
-+      isp->isp_mbxworkp = (void *) ptr;
-+      isp->isp_mbxwrk0 = 0xffff;      /* continuation count */
-+      isp->isp_mbxwrk1 = 0x1;         /* next SRAM address */
-+      isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
-+      if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "RAM DUMP FAILED @ WORD %x", 0x10000 + isp->isp_mbxwrk1);
-+              return;
-+      }
-+      ptr = isp->isp_mbxworkp;        /* finish final word */
-+      *ptr++ = mbs.param[2];
-+      isp_prt(isp, ISP_LOGALL, "isp_fw_dump: SRAM dumped successfully");
-+      FCPARAM(isp)->isp_dump_data[0] = isp->isp_type; /* now used */
-+      (void) isp_async(isp, ISPASYNC_FW_DUMPED, 0);
-+}
-+
-+void
-+isp_fw_dump(struct ispsoftc *isp)
-+{
-+      if (IS_2200(isp))
-+              isp2200_fw_dump(isp);
-+      else if (IS_23XX(isp))
-+              isp2300_fw_dump(isp);
-+}
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_cb_ops.c   2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,646 @@
-+/* %W% */
-+/*
-+ * Qlogic ISP Host Adapter procfs and open/close entry points
-+ *---------------------------------------
-+ *
-+ * Copyright (c) 2003 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions, and the following disclaimer,
-+ *    without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ * 
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ *
-+ *----
-+ * proc safe pretty print code courtesy of Gerard Roudier (groudier@free.fr)
-+ *
-+ */
-+
-+#include "isp_linux.h"
-+#include "isp_ioctl.h"
-+#include <asm/uaccess.h>
-+#ifdef        CONFIG_PROC_FS
-+
-+/*
-+ * 'safe' proc pretty print code 
-+ */
-+struct info_str {
-+    char *buffer;
-+    int length;
-+    off_t offset;
-+    int pos;
-+};
-+
-+static void
-+copy_mem_info(struct info_str *info, char *data, int len)
-+{
-+      if (info->pos + len > info->offset + info->length)
-+              len = info->offset + info->length - info->pos;
-+
-+      if (info->pos + len < info->offset) {
-+              info->pos += len;
-+              return;
-+      }
-+
-+      if (info->pos < info->offset) {
-+              off_t partial;
-+
-+              partial = info->offset - info->pos;
-+              data += partial;
-+              info->pos += partial;
-+              len  -= partial;
-+      }
-+
-+      if (len > 0) {
-+              memcpy(info->buffer, data, len);
-+              info->pos += len;
-+              info->buffer += len;
-+      }
-+}
-+
-+static int
-+copy_info(struct info_str *info, char *fmt, ...)
-+{
-+      va_list args;
-+      char buf[256];
-+      int len;
-+
-+      va_start(args, fmt);
-+      len = vsprintf(buf, fmt, args);
-+      va_end(args);
-+
-+      copy_mem_info(info, buf, len);
-+      return (len);
-+}
-+
-+
-+int
-+isplinux_proc_info(char *buf, char **st, off_t off, int len, int host, int io)
-+{
-+    int i;
-+    struct info_str info;
-+    struct ispsoftc *isp;
-+
-+    isp = isplist;
-+    while (isp) {
-+      if (isp->isp_host->host_no == host) {
-+          break;
-+      }
-+      isp = isp->isp_next;
-+    }
-+    if (isp == NULL) {
-+      return (-ENODEV);
-+    }
-+
-+    if (io) {
-+      buf[len] = 0;
-+      io = -ENOSYS;
-+      if (strncmp(buf, "debug=", 6) == 0) {
-+          unsigned long debug;
-+          char *p = &buf[6], *q;
-+          debug = simple_strtoul(p, &q, 16);
-+          if (q == &buf[6]) {
-+              isp_prt(isp, ISP_LOGERR, "Garbled Debug Line '%s'", buf);
-+              return (-EINVAL);
-+          }
-+          isp_prt(isp, ISP_LOGINFO, "setting debug level to 0x%lx", debug);
-+          ISP_LOCKU_SOFTC(isp);
-+          isp->isp_dblev = debug;
-+          ISP_UNLKU_SOFTC(isp);
-+          io = len;
-+      } else if (strncmp(buf, "rescan", 6) == 0) {
-+          if (IS_FC(isp)) {
-+              SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 1);
-+              io = len;
-+          }
-+      } else if (strncmp(buf, "lip", 3) == 0) {
-+          if (IS_FC(isp)) {
-+              ISP_LOCKU_SOFTC(isp);
-+              (void) isp_control(isp, ISPCTL_SEND_LIP, 0);
-+              ISP_UNLKU_SOFTC(isp);
-+              io = len;
-+          }
-+      } else if (strncmp(buf, "busreset=", 9) == 0) {
-+          char *p = &buf[6], *q;
-+          int bus = (int) simple_strtoul(p, &q, 16);
-+          if (q == &buf[6]) {
-+              isp_prt(isp, ISP_LOGERR, "Garbled Bus Reset Line '%s'", buf);
-+              return (-EINVAL);
-+          }
-+          ISP_LOCKU_SOFTC(isp);
-+          (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
-+          ISP_UNLKU_SOFTC(isp);
-+          io = len;
-+      } else if (strncmp(buf, "devreset=", 9) == 0) {
-+          char *p = &buf[6], *q;
-+          int dev = (int) simple_strtoul(p, &q, 16);
-+          if (q == &buf[6]) {
-+              isp_prt(isp, ISP_LOGERR, "Garbled Dev Reset Line '%s'", buf);
-+              return (-EINVAL);
-+          }
-+          /* always bus 0 */
-+          ISP_LOCKU_SOFTC(isp);
-+          (void) isp_control(isp, ISPCTL_RESET_DEV, &dev);
-+          ISP_UNLKU_SOFTC(isp);
-+          io = len;
-+      } else if (strncmp(buf, "reset", 5) == 0) {
-+          ISP_LOCKU_SOFTC(isp);
-+          io = isp_drain_reset(isp, "proc_reset");
-+          ISP_UNLKU_SOFTC(isp);
-+          if (io == 0)
-+              io = len;
-+          else
-+              io = -EIO;
-+      } else if (strncmp(buf, "drain", 5) == 0) {
-+          ISP_LOCKU_SOFTC(isp);
-+          io = isp_drain(isp, "proc_reset");
-+          ISP_UNLKU_SOFTC(isp);
-+          if (io == 0)
-+              io = len;
-+          else
-+              io = -EIO;
-+      }
-+#ifdef        ISP_FW_CRASH_DUMP
-+      else if (strncmp(buf, "fwcrash", 7) == 0) {
-+          if (IS_FC(isp)) {
-+              ISP_LOCKU_SOFTC(isp);
-+              SEND_THREAD_EVENT(isp, ISP_THREAD_FW_CRASH_DUMP, 0);
-+              ISP_UNLKU_SOFTC(isp);
-+              io = len;
-+          }
-+      }
-+#endif
-+      return (io);
-+    }
-+
-+    ISP_LOCKU_SOFTC(isp);
-+    if (st)
-+      *st = buf;
-+    info.buffer       = buf;
-+    info.length       = len;
-+    info.offset       = off;
-+    info.pos  = 0;
-+    
-+    copy_info(&info, (char *)isplinux_info(isp->isp_host));
-+#ifdef        HBA_VERSION
-+    copy_info(&info, "\n HBA Version %s, built %s, %s",
-+      HBA_VERSION, __DATE__, __TIME__);
-+#endif
-+    copy_info(&info, "\n DEVID %x role %d\n",
-+      isp->isp_osinfo.device_id, isp->isp_role);
-+    copy_info(&info,
-+        " Interrupt Stats:\n"
-+      "  total=0x%08x%08x bogus=0x%08x%08x\n"
-+      "  MboxC=0x%08x%08x async=0x%08x%08x\n"
-+      "  CRslt=0x%08x%08x CPost=0x%08x%08x\n"
-+      "  RspnsCHiWater=0x%04x FastPostC_Hiwater=0x%04x\n",
-+      (u_int32_t) (isp->isp_intcnt >> 32),
-+      (u_int32_t) (isp->isp_intcnt & 0xffffffff),
-+      (u_int32_t) (isp->isp_intbogus >> 32),
-+      (u_int32_t) (isp->isp_intbogus & 0xffffffff),
-+      (u_int32_t) (isp->isp_intmboxc >> 32),
-+      (u_int32_t) (isp->isp_intmboxc & 0xffffffff),
-+      (u_int32_t) (isp->isp_intoasync >> 32),
-+      (u_int32_t) (isp->isp_intoasync & 0xffffffff),
-+      (u_int32_t) (isp->isp_rsltccmplt >> 32),
-+      (u_int32_t) (isp->isp_rsltccmplt & 0xffffffff),
-+      (u_int32_t) (isp->isp_fphccmplt >> 32),
-+      (u_int32_t) (isp->isp_fphccmplt & 0xffffffff),
-+      isp->isp_rscchiwater, isp->isp_fpcchiwater);
-+    copy_info(&info,
-+      " Request In %d Request Out %d Result %d Nactv %d"
-+      " HiWater %u QAVAIL %d WtQHi %d\n",
-+      isp->isp_reqidx, isp->isp_reqodx, isp->isp_residx, isp->isp_nactive,
-+      isp->isp_osinfo.hiwater, ISP_QAVAIL(isp),
-+      isp->isp_osinfo.wqhiwater);
-+    for (i = 0; i < isp->isp_maxcmds; i++) {
-+      if (isp->isp_xflist[i]) {
-+          copy_info(&info, " %d:%p", i, isp->isp_xflist[i]);
-+      }
-+    }
-+    copy_info(&info, "\n");
-+    if (isp->isp_osinfo.wqnext) {
-+      Scsi_Cmnd *f = isp->isp_osinfo.wqnext;
-+      copy_info(&info, "WaitQ(%d)", isp->isp_osinfo.wqcnt);
-+      while (f) {
-+          copy_info(&info, "->%p", f);
-+          f = (Scsi_Cmnd *) f->host_scribble;
-+      }
-+      copy_info(&info, "\n");
-+    }
-+    if (isp->isp_osinfo.dqnext) {
-+      Scsi_Cmnd *f = isp->isp_osinfo.dqnext;
-+      copy_info(&info, "DoneQ");
-+      while (f) {
-+          copy_info(&info, "->%p", f);
-+          f = (Scsi_Cmnd *) f->host_scribble;
-+      }
-+        copy_info(&info, "\n");
-+    }
-+    if (IS_FC(isp)) {
-+      fcparam *fcp = isp->isp_param;
-+      copy_info(&info,
-+          "Loop ID: %d AL_PA 0x%x Port ID 0x%x FW State %x Loop State %x\n",
-+          fcp->isp_loopid, fcp->isp_alpa, fcp->isp_portid, fcp->isp_fwstate,
-+          fcp->isp_loopstate);
-+      copy_info(&info, "Port WWN 0x%08x%08x Node WWN 0x%08x%08x\n",
-+          (unsigned int) (ISP_PORTWWN(isp) >> 32),
-+          (unsigned int) (ISP_PORTWWN(isp) & 0xffffffff),
-+          (unsigned int) (ISP_NODEWWN(isp) >> 32),
-+          (unsigned int) (ISP_NODEWWN(isp) & 0xffffffff));
-+      for (i = 0; i < MAX_FC_TARG; i++) {
-+          if (fcp->portdb[i].valid == 0 && i < FL_PORT_ID)
-+              continue;
-+          if (fcp->portdb[i].port_wwn == 0)
-+              continue;
-+          copy_info(&info, "TGT % 3d Loop ID % 3d Port id 0x%04x, role %s"
-+              "\n Port WWN 0x%08x%08x Node WWN 0x%08x%08x\n\n", i,
-+              fcp->portdb[i].loopid,
-+              fcp->portdb[i].portid, class3_roles[fcp->portdb[i].roles],
-+              (unsigned int) (fcp->portdb[i].port_wwn >> 32),
-+              (unsigned int) (fcp->portdb[i].port_wwn & 0xffffffff),
-+              (unsigned int) (fcp->portdb[i].node_wwn >> 32),
-+              (unsigned int) (fcp->portdb[i].node_wwn & 0xffffffff));
-+      }
-+    } else {
-+      sdparam *sdp = (sdparam *)isp->isp_param;
-+
-+      copy_info(&info, "Initiator ID: %d\n", sdp->isp_initiator_id);
-+      copy_info(&info, "Target Flag  Period Offset\n");
-+      for (i = 0; i < MAX_TARGETS; i++) {
-+          copy_info(&info, "%6d: 0x%04x 0x%04x 0x%x\n",
-+              i, sdp->isp_devparam[i].actv_flags,
-+              sdp->isp_devparam[i].actv_offset,
-+              sdp->isp_devparam[i].actv_period);
-+      }
-+      if (IS_DUALBUS(isp)) {
-+          sdp++;
-+          copy_info(&info, "\nInitiator ID: %d, Channel B\n",
-+              sdp->isp_initiator_id);
-+          copy_info(&info,
-+              "Target     CurFlag    DevFlag  Period Offset B-Channel\n");
-+          for (i = 0; i < MAX_TARGETS; i++) {
-+                  copy_info(&info, "%6d: 0x%04x 0x%04x 0x%x\n",
-+                      i, sdp->isp_devparam[i].actv_flags,
-+                      sdp->isp_devparam[i].actv_offset,
-+                      sdp->isp_devparam[i].actv_period);
-+          }
-+      }
-+    }
-+    ISP_UNLKU_SOFTC(isp);
-+    return (info.pos > info.offset ? info.pos - info.offset : 0);
-+}
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+static int isp_open(struct inode *, struct file *);
-+static int isp_close(struct inode *, struct file *);
-+static int
-+isp_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
-+
-+struct file_operations isp_procfs_operations = {
-+ owner:               THIS_MODULE,
-+ open:                isp_open,
-+ release:     isp_close,
-+ ioctl:               isp_ioctl,
-+};
-+
-+static struct proc_dir_entry *isp_root = 0;
-+
-+void
-+isplinux_init_proc(struct ispsoftc *isp)
-+{
-+    struct proc_dir_entry *isp_entry;
-+    char tbuf[64];
-+
-+    SNPRINTF(tbuf, sizeof(tbuf), "isp%d@0x%x", isp->isp_unit,
-+      isp->isp_osinfo.device_id);
-+    if (isp_root == NULL) {
-+      isp_root = proc_mkdir("isp", 0);
-+    }
-+    if (isp_root) {
-+      isp_entry = create_proc_entry(tbuf, S_IFREG|S_IRUGO|S_IWUSR, isp_root);
-+      if (isp_entry == NULL) {
-+          return;
-+      }
-+      isp_entry->proc_fops = &isp_procfs_operations;
-+    }
-+}
-+
-+void
-+isplinux_undo_proc(struct ispsoftc *isp)
-+{
-+    char tbuf[64];
-+    SNPRINTF(tbuf, sizeof(tbuf), "isp/isp%d@0x%x", isp->isp_unit,
-+      isp->isp_osinfo.device_id);
-+    remove_proc_entry(tbuf, 0);
-+    remove_proc_entry("isp", 0);
-+}
-+
-+static struct ispsoftc *
-+get_isp_from_procname(const unsigned char *name)
-+{
-+    struct ispsoftc *isp;
-+
-+    for (isp = isplist; isp; isp = isp->isp_next) {
-+      char tbuf[32];
-+      SNPRINTF(tbuf, sizeof(tbuf), "isp%d@0x%x", isp->isp_unit,
-+         isp->isp_osinfo.device_id);
-+      if (strcmp(name, tbuf) == 0) {
-+          return (isp);
-+      }
-+    }
-+    return (0);
-+}
-+
-+static int
-+isp_open(struct inode *ip, struct file *fp)
-+{
-+    struct ispsoftc *isp = get_isp_from_procname(fp->f_dentry->d_name.name);
-+    if (isp == NULL) {
-+      return (-ENXIO);
-+    }
-+    if (isp->isp_isopen) {
-+      return (-EBUSY);
-+    }
-+    isp->isp_isopen = 1;
-+    fp->private_data = isp;
-+    return (0);
-+}
-+
-+static int
-+isp_close(struct inode *ip, struct file *fp)
-+{
-+    struct ispsoftc *isp = fp->private_data;
-+    isp->isp_isopen = 0;
-+    return (0);
-+}
-+
-+static int
-+isp_ioctl(struct inode *ip, struct file *fp, unsigned int c, unsigned long arg)
-+{
-+    struct ispsoftc *isp = fp->private_data;
-+    int rv, inarg, outarg;
-+    fcparam *fcp;
-+
-+    if (isp == (struct ispsoftc *)NULL) {
-+      return -ENXIO;
-+    }
-+
-+    if (IS_SCSI(isp)) {
-+      switch (c) {
-+      case ISP_SDBLEV:
-+      case ISP_RESCAN:
-+      case ISP_GETROLE:
-+      case ISP_SETROLE:
-+      case ISP_RESETHBA:
-+              break;
-+      default:
-+              return (-EINVAL);
-+      }
-+      fcp = NULL;
-+    } else {
-+      fcp = isp->isp_param;
-+    }
-+
-+    rv = 0;
-+    isp_prt(isp, ISP_LOGDEBUG0, "isp_ioctl: cmd=%x", c);
-+
-+    switch (c) {
-+    case ISP_GET_STATS:
-+    {
-+      isp_stats_t stats;
-+
-+      MEMZERO(&stats, sizeof stats);
-+      stats.isp_stat_version = ISP_STATS_VERSION;
-+      stats.isp_type = isp->isp_type;
-+      stats.isp_revision = isp->isp_revision;
-+      ISP_LOCK_SOFTC(isp);
-+      stats.isp_stats[ISP_INTCNT] = isp->isp_intcnt;
-+      stats.isp_stats[ISP_INTBOGUS] = isp->isp_intbogus;
-+      stats.isp_stats[ISP_INTMBOXC] = isp->isp_intmboxc;
-+      stats.isp_stats[ISP_INGOASYNC] = isp->isp_intoasync;
-+      stats.isp_stats[ISP_RSLTCCMPLT] = isp->isp_rsltccmplt;
-+      stats.isp_stats[ISP_FPHCCMCPLT] = isp->isp_fphccmplt;
-+      stats.isp_stats[ISP_RSCCHIWAT] = isp->isp_rscchiwater;
-+      stats.isp_stats[ISP_FPCCHIWAT] = isp->isp_fpcchiwater;
-+      ISP_UNLK_SOFTC(isp);
-+      if (COPYOUT(&stats, (void *)arg, sizeof (stats), 0)) {
-+              rv = EFAULT;
-+      }
-+      break;
-+    }
-+    case ISP_CLR_STATS:
-+      ISP_LOCK_SOFTC(isp);
-+      isp->isp_intcnt = 0;
-+      isp->isp_intbogus = 0;
-+      isp->isp_intmboxc = 0;
-+      isp->isp_intoasync = 0;
-+      isp->isp_rsltccmplt = 0;
-+      isp->isp_fphccmplt = 0;
-+      isp->isp_rscchiwater = 0;
-+      isp->isp_fpcchiwater = 0;
-+      ISP_UNLK_SOFTC(isp);
-+      break;
-+#ifdef        ISP_FW_CRASH_DUMP
-+    case ISP_GET_FW_CRASH_DUMP:
-+    {
-+      u_int16_t *ptr = fcp->isp_dump_data;
-+      size_t sz;
-+      if (IS_2200(isp))
-+              sz = QLA2200_RISC_IMAGE_DUMP_SIZE;
-+      else
-+              sz = QLA2300_RISC_IMAGE_DUMP_SIZE;
-+      ISP_LOCK_SOFTC(isp);
-+      if (ptr && *ptr) {
-+              if (COPYOUT(ptr, (void *)arg, sz, mode)) {
-+                      rv = EFAULT;
-+              } else {
-+                      *ptr = 0;
-+              }
-+      } else {
-+              rv = ENXIO;
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      break;
-+    }
-+
-+    case ISP_FORCE_CRASH_DUMP:
-+      ISP_LOCK_SOFTC(isp);
-+      isp_async(isp, ISPASYNC_FW_CRASH, NULL);
-+      ISP_UNLK_SOFTC(isp);
-+      break;
-+#endif
-+    case ISP_SDBLEV:
-+      if (COPYIN((void *)arg, &inarg, sizeof (inarg), 0)) {
-+              rv = EFAULT;
-+              break;
-+      }
-+      outarg = isp->isp_dblev;
-+      isp->isp_dblev = inarg;
-+      if (COPYOUT(&outarg, (void *)arg, sizeof (outarg), 0)) {
-+              rv = EFAULT;
-+              break;
-+      }
-+      break;
-+
-+    case ISP_RESCAN:
-+      if (IS_FC(isp)) {
-+          ISP_LOCKU_SOFTC(isp);
-+          SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0)
-+          ISP_UNLKU_SOFTC(isp);
-+      }
-+      break;
-+
-+    case ISP_GETROLE:
-+      outarg = isp->isp_role;
-+      if (COPYOUT(&outarg, (void *)arg, sizeof (outarg), 0)) {
-+              rv = EFAULT;
-+              break;
-+      }
-+      break;
-+
-+    case ISP_SETROLE:
-+      if (COPYIN((void *)arg, &inarg, sizeof (inarg), 0)) {
-+              rv = EFAULT;
-+              break;
-+      }
-+      if (inarg & ~(ISP_ROLE_INITIATOR|ISP_ROLE_TARGET)) {
-+              rv = EINVAL;
-+              break;
-+      }
-+      /*
-+       * Check to see if we're already in that role.
-+       */
-+      if (isp->isp_role == inarg) {
-+              outarg = isp->isp_role;
-+              if (COPYOUT(&outarg, (void *)arg, sizeof (outarg), mode)) {
-+                      rv = EFAULT;
-+              }
-+              break;
-+      }
-+      /*FALLTHROUGH*/
-+    case ISP_RESETHBA:
-+    {
-+      ISP_LOCK_SOFTC(isp);
-+      if (c == ISP_SETROLE) {
-+              outarg = isp->isp_role;
-+              isp->isp_role = inarg;
-+      }
-+      if (isp_drain_reset(isp, "isp_ioctl")) {
-+              ISP_UNLK_SOFTC(isp);
-+              rv = EIO;
-+              break;
-+      }
-+      isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+      ISP_UNLK_SOFTC(isp);
-+      if (c == ISP_SETROLE &&
-+          COPYOUT(&outarg, (void *)arg, sizeof (outarg), mode)) {
-+              rv = EFAULT;
-+              break;
-+      }
-+      break;
-+    }
-+    case ISP_FC_LIP:
-+      ISP_LOCK_SOFTC(isp);
-+      if (isp_control(isp, ISPCTL_SEND_LIP, NULL)) {
-+              rv = EIO;
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      break;
-+    case ISP_FC_GETDINFO:
-+    {
-+      struct isp_fc_device local, *ifc = &local;
-+      struct lportdb *lp;
-+
-+      if (COPYIN((void *)arg, ifc, sizeof (*ifc), mode)) {
-+              rv = EFAULT;
-+              break;
-+      }
-+      if (ifc->loopid < 0 || ifc->loopid >= MAX_FC_TARG) {
-+              rv = EINVAL;
-+              break;
-+      }
-+      ISP_LOCK_SOFTC(isp);
-+      lp = &FCPARAM(isp)->portdb[ifc->loopid];
-+      if (lp->valid) {
-+              ifc->loopid = lp->loopid;
-+              ifc->portid = lp->portid;
-+              ifc->node_wwn = lp->node_wwn;
-+              ifc->port_wwn = lp->port_wwn;
-+              rv = 0;
-+      } else {
-+              rv = ENODEV;
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      if (rv == 0) {
-+              if (COPYOUT((void *)ifc, (void *)arg,
-+                  sizeof (*ifc), mode)) {
-+                      rv = EFAULT;
-+              }
-+      }
-+      break;
-+    }
-+    case ISP_FC_GETHINFO:
-+    {
-+      struct isp_hba_device local, *hba = &local;
-+      MEMZERO(hba, sizeof (*hba));
-+      ISP_LOCK_SOFTC(isp);
-+      hba->fc_speed = FCPARAM(isp)->isp_gbspeed;
-+      hba->fc_scsi_supported = 1;
-+      hba->fc_topology = FCPARAM(isp)->isp_topo + 1;
-+      hba->fc_loopid = FCPARAM(isp)->isp_loopid;
-+      hba->active_node_wwn = FCPARAM(isp)->isp_nodewwn;
-+      hba->active_port_wwn = FCPARAM(isp)->isp_portwwn;
-+      ISP_UNLK_SOFTC(isp);
-+      if (COPYOUT(hba, (void *)arg, sizeof (*hba), mode)) {
-+          rv = EFAULT;
-+          break;
-+      }
-+      break;
-+    }
-+    default:
-+      rv = EINVAL;
-+      break;
-+    }
-+    return(rv? -rv : 0);
-+}
-+#endif        /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) */
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_inline.h   2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1495 @@
-+/* @(#)isp_inline.h 1.20 */
-+/*
-+ * Qlogic Host Adapter Inline Functions
-+ *
-+ * Copyright (c) 1999, 2000, 2001 by Matthew Jacob
-+ * Feral Software
-+ * All rights reserved.
-+ * mjacob@feral.com
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice immediately at the beginning of the file, without modification,
-+ *    this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+#ifndef       _ISP_INLINE_H
-+#define       _ISP_INLINE_H
-+
-+/*
-+ * Handle Functions.
-+ * For each outstanding command there will be a non-zero handle.
-+ * There will be at most isp_maxcmds handles, and isp_lasthdls
-+ * will be a seed for the last handled allocated.
-+ */
-+
-+static INLINE int isp_save_xs(struct ispsoftc *, XS_T *, u_int16_t *);
-+static INLINE XS_T *isp_find_xs(struct ispsoftc *, u_int16_t);
-+static INLINE u_int16_t isp_find_handle(struct ispsoftc *, XS_T *);
-+static INLINE int isp_handle_index(u_int16_t);
-+static INLINE void isp_destroy_handle(struct ispsoftc *, u_int16_t);
-+static INLINE void isp_remove_handle(struct ispsoftc *, XS_T *);
-+
-+static INLINE int
-+isp_save_xs(struct ispsoftc *isp, XS_T *xs, u_int16_t *handlep)
-+{
-+      int i, j;
-+
-+      for (j = isp->isp_lasthdls, i = 0; i < (int) isp->isp_maxcmds; i++) {
-+              if (isp->isp_xflist[j] == NULL) {
-+                      break;
-+              }
-+              if (++j == isp->isp_maxcmds) {
-+                      j = 0;
-+              }
-+      }
-+      if (i == isp->isp_maxcmds) {
-+              return (-1);
-+      }
-+      isp->isp_xflist[j] = xs;
-+      *handlep = j+1;
-+      if (++j == isp->isp_maxcmds)
-+              j = 0;
-+      isp->isp_lasthdls = (u_int16_t)j;
-+      return (0);
-+}
-+
-+static INLINE XS_T *
-+isp_find_xs(struct ispsoftc *isp, u_int16_t handle)
-+{
-+      if (handle < 1 || handle > (u_int16_t) isp->isp_maxcmds) {
-+              return (NULL);
-+      } else {
-+              return (isp->isp_xflist[handle - 1]);
-+      }
-+}
-+
-+static INLINE u_int16_t
-+isp_find_handle(struct ispsoftc *isp, XS_T *xs)
-+{
-+      int i;
-+      if (xs != NULL) {
-+              for (i = 0; i < isp->isp_maxcmds; i++) {
-+                      if (isp->isp_xflist[i] == xs) {
-+                              return ((u_int16_t) i+1);
-+                      }
-+              }
-+      }
-+      return (0);
-+}
-+
-+static INLINE int
-+isp_handle_index(u_int16_t handle)
-+{
-+      return (handle-1);
-+}
-+
-+static INLINE void
-+isp_destroy_handle(struct ispsoftc *isp, u_int16_t handle)
-+{
-+      if (handle > 0 && handle <= (u_int16_t) isp->isp_maxcmds) {
-+              isp->isp_xflist[isp_handle_index(handle)] = NULL;
-+      }
-+}
-+
-+static INLINE void
-+isp_remove_handle(struct ispsoftc *isp, XS_T *xs)
-+{
-+      isp_destroy_handle(isp, isp_find_handle(isp, xs));
-+}
-+
-+static INLINE int
-+isp_getrqentry(struct ispsoftc *, u_int16_t *, u_int16_t *, void **);
-+
-+static INLINE int
-+isp_getrqentry(struct ispsoftc *isp, u_int16_t *iptrp,
-+    u_int16_t *optrp, void **resultp)
-+{
-+      volatile u_int16_t iptr, optr;
-+
-+      optr = isp->isp_reqodx = READ_REQUEST_QUEUE_OUT_POINTER(isp);
-+      iptr = isp->isp_reqidx;
-+      *resultp = ISP_QUEUE_ENTRY(isp->isp_rquest, iptr);
-+      iptr = ISP_NXT_QENTRY(iptr, RQUEST_QUEUE_LEN(isp));
-+      if (iptr == optr) {
-+              return (1);
-+      }
-+      if (optrp)
-+              *optrp = optr;
-+      if (iptrp)
-+              *iptrp = iptr;
-+      return (0);
-+}
-+
-+static INLINE void isp_print_qentry (struct ispsoftc *, char *, int, void *);
-+
-+
-+#define       TBA     (4 * (((QENTRY_LEN >> 2) * 3) + 1) + 1)
-+static INLINE void
-+isp_print_qentry(struct ispsoftc *isp, char *msg, int idx, void *arg)
-+{
-+      char buf[TBA];
-+      int amt, i, j;
-+      u_int8_t *ptr = arg;
-+
-+      isp_prt(isp, ISP_LOGALL, "%s index %d=>", msg, idx);
-+      for (buf[0] = 0, amt = i = 0; i < 4; i++) {
-+              buf[0] = 0;
-+              SNPRINTF(buf, TBA, "  ");
-+              for (j = 0; j < (QENTRY_LEN >> 2); j++) {
-+                      SNPRINTF(buf, TBA, "%s %02x", buf, ptr[amt++] & 0xff);
-+              }
-+              isp_prt(isp, ISP_LOGALL, buf);
-+      }
-+}
-+
-+static INLINE void isp_print_bytes(struct ispsoftc *, char *, int, void *);
-+
-+static INLINE void
-+isp_print_bytes(struct ispsoftc *isp, char *msg, int amt, void *arg)
-+{
-+      char buf[128];
-+      u_int8_t *ptr = arg;
-+      int off;
-+
-+      if (msg)
-+              isp_prt(isp, ISP_LOGALL, "%s:", msg);
-+      off = 0;
-+      buf[0] = 0;
-+      while (off < amt) {
-+              int j, to;
-+              to = off;
-+              for (j = 0; j < 16; j++) {
-+                      SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff);
-+                      if (off == amt)
-+                              break;
-+              }
-+              isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf);
-+              buf[0] = 0;
-+      }
-+}
-+
-+/*
-+ * Do the common path to try and ensure that link is up, we've scanned
-+ * the fabric (if we're on a fabric), and that we've synchronized this
-+ * all with our own database and done the appropriate logins.
-+ *
-+ * We repeatedly check for firmware state and loop state after each
-+ * action because things may have changed while we were doing this.
-+ * Any failure or change of state causes us to return a nonzero value.
-+ *
-+ * We honor HBA roles in that if we're not in Initiator mode, we don't
-+ * attempt to sync up the database (that's for somebody else to do,
-+ * if ever).
-+ *
-+ * We assume we enter here with any locks held.
-+ */
-+
-+static INLINE int isp_fc_runstate(struct ispsoftc *, int);
-+
-+static INLINE int
-+isp_fc_runstate(struct ispsoftc *isp, int tval)
-+{
-+      fcparam *fcp;
-+      int *tptr;
-+
-+      if (IS_SCSI(isp))
-+              return (0);
-+
-+      tptr = tval? &tval : NULL;
-+      if (isp_control(isp, ISPCTL_FCLINK_TEST, tptr) != 0) {
-+              return (-1);
-+      }
-+      fcp = FCPARAM(isp);
-+      if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD)
-+              return (-1);
-+      if (isp_control(isp, ISPCTL_SCAN_FABRIC, NULL) != 0) {
-+              return (-1);
-+      }
-+      if (isp_control(isp, ISPCTL_SCAN_LOOP, NULL) != 0) {
-+              return (-1);
-+      }
-+      if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
-+              return (0);
-+      }
-+      if (isp_control(isp, ISPCTL_PDB_SYNC, NULL) != 0) {
-+              return (-1);
-+      }
-+      if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
-+              return (-1);
-+      }
-+      return (0);
-+}
-+
-+/*
-+ * Functions to move stuff to a form that the QLogic RISC engine understands
-+ * and functions to move stuff back to a form the processor understands.
-+ *
-+ * Each platform is required to provide the 8, 16 and 32 bit
-+ * swizzle and unswizzle macros (ISP_IOX{PUT|GET}_{8,16,32})
-+ *
-+ * The assumption is that swizzling and unswizzling is mostly done 'in place'
-+ * (with a few exceptions for efficiency).
-+ */
-+
-+static INLINE void isp_copy_out_hdr(struct ispsoftc *, isphdr_t *, isphdr_t *);
-+static INLINE void isp_copy_in_hdr(struct ispsoftc *, isphdr_t *, isphdr_t *);
-+static INLINE int isp_get_response_type(struct ispsoftc *, isphdr_t *);
-+
-+static INLINE void
-+isp_put_request(struct ispsoftc *, ispreq_t *, ispreq_t *);
-+static INLINE void
-+isp_put_request_t2(struct ispsoftc *, ispreqt2_t *, ispreqt2_t *);
-+static INLINE void
-+isp_put_request_t3(struct ispsoftc *, ispreqt3_t *, ispreqt3_t *);
-+static INLINE void
-+isp_put_extended_request(struct ispsoftc *, ispextreq_t *, ispextreq_t *);
-+static INLINE void
-+isp_put_cont_req(struct ispsoftc *, ispcontreq_t *, ispcontreq_t *);
-+static INLINE void
-+isp_put_cont64_req(struct ispsoftc *, ispcontreq64_t *, ispcontreq64_t *);
-+static INLINE void
-+isp_get_response(struct ispsoftc *, ispstatusreq_t *, ispstatusreq_t *);
-+static INLINE void
-+isp_get_response_x(struct ispsoftc *, ispstatus_cont_t *, ispstatus_cont_t *);
-+static INLINE void
-+isp_get_rio2(struct ispsoftc *, isp_rio2_t *, isp_rio2_t *);
-+static INLINE void
-+isp_put_icb(struct ispsoftc *, isp_icb_t *, isp_icb_t *);
-+static INLINE void
-+isp_get_pdb(struct ispsoftc *, isp_pdb_t *, isp_pdb_t *);
-+static INLINE void
-+isp_get_ct_hdr(struct ispsoftc *isp, ct_hdr_t *, ct_hdr_t *);
-+static INLINE void
-+isp_put_sns_request(struct ispsoftc *, sns_screq_t *, sns_screq_t *);
-+static INLINE void
-+isp_put_gid_ft_request(struct ispsoftc *, sns_gid_ft_req_t *,
-+    sns_gid_ft_req_t *);
-+static INLINE void
-+isp_put_gxn_id_request(struct ispsoftc *, sns_gxn_id_req_t *,
-+    sns_gxn_id_req_t *);
-+static INLINE void
-+isp_get_sns_response(struct ispsoftc *, sns_scrsp_t *, sns_scrsp_t *, int);
-+static INLINE void
-+isp_get_gid_ft_response(struct ispsoftc *, sns_gid_ft_rsp_t *,
-+    sns_gid_ft_rsp_t *, int);
-+static INLINE void
-+isp_get_gxn_id_response(struct ispsoftc *, sns_gxn_id_rsp_t *,
-+    sns_gxn_id_rsp_t *);
-+static INLINE void
-+isp_get_gff_id_response(struct ispsoftc *, sns_gff_id_rsp_t *,
-+    sns_gff_id_rsp_t *);
-+static INLINE void
-+isp_get_ga_nxt_response(struct ispsoftc *, sns_ga_nxt_rsp_t *,
-+    sns_ga_nxt_rsp_t *);
-+#ifdef        ISP_TARGET_MODE
-+#ifndef       _ISP_TARGET_H
-+#include "isp_target.h"
-+#endif
-+static INLINE void
-+isp_put_atio(struct ispsoftc *, at_entry_t *, at_entry_t *);
-+static INLINE void
-+isp_get_atio(struct ispsoftc *, at_entry_t *, at_entry_t *);
-+static INLINE void
-+isp_put_atio2(struct ispsoftc *, at2_entry_t *, at2_entry_t *);
-+static INLINE void
-+isp_get_atio2(struct ispsoftc *, at2_entry_t *, at2_entry_t *);
-+static INLINE void
-+isp_put_ctio(struct ispsoftc *, ct_entry_t *, ct_entry_t *);
-+static INLINE void
-+isp_get_ctio(struct ispsoftc *, ct_entry_t *, ct_entry_t *);
-+static INLINE void
-+isp_put_ctio2(struct ispsoftc *, ct2_entry_t *, ct2_entry_t *);
-+static INLINE void
-+isp_get_ctio2(struct ispsoftc *, ct2_entry_t *, ct2_entry_t *);
-+static INLINE void
-+isp_put_enable_lun(struct ispsoftc *, lun_entry_t *, lun_entry_t *);
-+static INLINE void
-+isp_get_enable_lun(struct ispsoftc *, lun_entry_t *, lun_entry_t *);
-+static INLINE void
-+isp_put_notify(struct ispsoftc *, in_entry_t *, in_entry_t *);
-+static INLINE void
-+isp_get_notify(struct ispsoftc *, in_entry_t *, in_entry_t *);
-+static INLINE void
-+isp_put_notify_fc(struct ispsoftc *, in_fcentry_t *, in_fcentry_t *);
-+static INLINE void
-+isp_get_notify_fc(struct ispsoftc *, in_fcentry_t *, in_fcentry_t *);
-+static INLINE void
-+isp_put_notify_ack(struct ispsoftc *, na_entry_t *, na_entry_t *);
-+static INLINE void
-+isp_get_notify_ack(struct ispsoftc *, na_entry_t *, na_entry_t *);
-+static INLINE void
-+isp_put_notify_ack_fc(struct ispsoftc *, na_fcentry_t *, na_fcentry_t *);
-+static INLINE void
-+isp_get_notify_ack_fc(struct ispsoftc *, na_fcentry_t *, na_fcentry_t *);
-+#endif
-+
-+#define       ISP_IS_SBUS(isp)        \
-+      (ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS)
-+
-+/*
-+ * Swizzle/Copy Functions
-+ */
-+static INLINE void
-+isp_copy_out_hdr(struct ispsoftc *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
-+{
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
-+                  &hpdst->rqs_entry_count);
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
-+                  &hpdst->rqs_entry_type);
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
-+                  &hpdst->rqs_flags);
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
-+                  &hpdst->rqs_seqno);
-+      } else {
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type,
-+                  &hpdst->rqs_entry_type);
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count,
-+                  &hpdst->rqs_entry_count);
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_seqno,
-+                  &hpdst->rqs_seqno);
-+              ISP_IOXPUT_8(isp, hpsrc->rqs_flags,
-+                  &hpdst->rqs_flags);
-+      }
-+}
-+
-+static INLINE void
-+isp_copy_in_hdr(struct ispsoftc *isp, isphdr_t *hpsrc, isphdr_t *hpdst)
-+{
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
-+                  hpdst->rqs_entry_count);
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
-+                  hpdst->rqs_entry_type);
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
-+                  hpdst->rqs_flags);
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
-+                  hpdst->rqs_seqno);
-+      } else {
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type,
-+                  hpdst->rqs_entry_type);
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count,
-+                  hpdst->rqs_entry_count);
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_seqno,
-+                  hpdst->rqs_seqno);
-+              ISP_IOXGET_8(isp, &hpsrc->rqs_flags,
-+                  hpdst->rqs_flags);
-+      }
-+}
-+
-+static INLINE int
-+isp_get_response_type(struct ispsoftc *isp, isphdr_t *hp)
-+{
-+      u_int8_t type;
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXGET_8(isp, &hp->rqs_entry_count, type);
-+      } else {
-+              ISP_IOXGET_8(isp, &hp->rqs_entry_type, type);
-+      }
-+      return ((int)type);
-+}
-+
-+static INLINE void
-+isp_put_request(struct ispsoftc *isp, ispreq_t *rqsrc, ispreq_t *rqdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &rqsrc->req_header, &rqdst->req_header);
-+      ISP_IOXPUT_32(isp, rqsrc->req_handle, &rqdst->req_handle);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_target);
-+              ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_lun_trn);
-+      } else {
-+              ISP_IOXPUT_8(isp, rqsrc->req_lun_trn, &rqdst->req_lun_trn);
-+              ISP_IOXPUT_8(isp, rqsrc->req_target, &rqdst->req_target);
-+      }
-+      ISP_IOXPUT_16(isp, rqsrc->req_cdblen, &rqdst->req_cdblen);
-+      ISP_IOXPUT_16(isp, rqsrc->req_flags, &rqdst->req_flags);
-+      ISP_IOXPUT_16(isp, rqsrc->req_time, &rqdst->req_time);
-+      ISP_IOXPUT_16(isp, rqsrc->req_seg_count, &rqdst->req_seg_count);
-+      for (i = 0; i < 12; i++) {
-+              ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]);
-+      }
-+      for (i = 0; i < ISP_RQDSEG; i++) {
-+              ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base,
-+                  &rqdst->req_dataseg[i].ds_base);
-+              ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count,
-+                  &rqdst->req_dataseg[i].ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_request_t2(struct ispsoftc *isp, ispreqt2_t *tqsrc, ispreqt2_t *tqdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
-+      ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
-+      ISP_IOXPUT_8(isp, tqsrc->req_lun_trn, &tqdst->req_lun_trn);
-+      ISP_IOXPUT_8(isp, tqsrc->req_target, &tqdst->req_target);
-+      ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
-+      ISP_IOXPUT_16(isp, tqsrc->req_flags,  &tqdst->req_flags);
-+      ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
-+      ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
-+      ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
-+      for (i = 0; i < 16; i++) {
-+              ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
-+      }
-+      ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
-+      for (i = 0; i < ISP_RQDSEG_T2; i++) {
-+              ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
-+                  &tqdst->req_dataseg[i].ds_base);
-+              ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
-+                  &tqdst->req_dataseg[i].ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_request_t3(struct ispsoftc *isp, ispreqt3_t *tqsrc, ispreqt3_t *tqdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &tqsrc->req_header, &tqdst->req_header);
-+      ISP_IOXPUT_32(isp, tqsrc->req_handle, &tqdst->req_handle);
-+      ISP_IOXPUT_8(isp, tqsrc->req_lun_trn, &tqdst->req_lun_trn);
-+      ISP_IOXPUT_8(isp, tqsrc->req_target, &tqdst->req_target);
-+      ISP_IOXPUT_16(isp, tqsrc->req_scclun, &tqdst->req_scclun);
-+      ISP_IOXPUT_16(isp, tqsrc->req_flags,  &tqdst->req_flags);
-+      ISP_IOXPUT_16(isp, tqsrc->_res2, &tqdst->_res2);
-+      ISP_IOXPUT_16(isp, tqsrc->req_time, &tqdst->req_time);
-+      ISP_IOXPUT_16(isp, tqsrc->req_seg_count, &tqdst->req_seg_count);
-+      for (i = 0; i < 16; i++) {
-+              ISP_IOXPUT_8(isp, tqsrc->req_cdb[i], &tqdst->req_cdb[i]);
-+      }
-+      ISP_IOXPUT_32(isp, tqsrc->req_totalcnt, &tqdst->req_totalcnt);
-+      for (i = 0; i < ISP_RQDSEG_T3; i++) {
-+              ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_base,
-+                  &tqdst->req_dataseg[i].ds_base);
-+              ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_basehi,
-+                  &tqdst->req_dataseg[i].ds_basehi);
-+              ISP_IOXPUT_32(isp, tqsrc->req_dataseg[i].ds_count,
-+                  &tqdst->req_dataseg[i].ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_extended_request(struct ispsoftc *isp, ispextreq_t *xqsrc,
-+    ispextreq_t *xqdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &xqsrc->req_header, &xqdst->req_header);
-+      ISP_IOXPUT_32(isp, xqsrc->req_handle, &xqdst->req_handle);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, xqsrc->req_lun_trn, &xqdst->req_target);
-+              ISP_IOXPUT_8(isp, xqsrc->req_target, &xqdst->req_lun_trn);
-+      } else {
-+              ISP_IOXPUT_8(isp, xqsrc->req_lun_trn, &xqdst->req_lun_trn);
-+              ISP_IOXPUT_8(isp, xqsrc->req_target, &xqdst->req_target);
-+      }
-+      ISP_IOXPUT_16(isp, xqsrc->req_cdblen, &xqdst->req_cdblen);
-+      ISP_IOXPUT_16(isp, xqsrc->req_flags, &xqdst->req_flags);
-+      ISP_IOXPUT_16(isp, xqsrc->req_time, &xqdst->req_time);
-+      ISP_IOXPUT_16(isp, xqsrc->req_seg_count, &xqdst->req_seg_count);
-+      for (i = 0; i < 44; i++) {
-+              ISP_IOXPUT_8(isp, xqsrc->req_cdb[i], &xqdst->req_cdb[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_cont_req(struct ispsoftc *isp, ispcontreq_t *cqsrc, ispcontreq_t *cqdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &cqsrc->req_header, &cqdst->req_header);
-+      for (i = 0; i < ISP_CDSEG; i++) {
-+              ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_base,
-+                  &cqdst->req_dataseg[i].ds_base);
-+              ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_count,
-+                  &cqdst->req_dataseg[i].ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_cont64_req(struct ispsoftc *isp, ispcontreq64_t *cqsrc,
-+    ispcontreq64_t *cqdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &cqsrc->req_header, &cqdst->req_header);
-+      for (i = 0; i < ISP_CDSEG64; i++) {
-+              ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_base,
-+                  &cqdst->req_dataseg[i].ds_base);
-+              ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_basehi,
-+                  &cqdst->req_dataseg[i].ds_basehi);
-+              ISP_IOXPUT_32(isp, cqsrc->req_dataseg[i].ds_count,
-+                  &cqdst->req_dataseg[i].ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_response(struct ispsoftc *isp, ispstatusreq_t *spsrc,
-+    ispstatusreq_t *spdst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &spsrc->req_header, &spdst->req_header);
-+      ISP_IOXGET_32(isp, &spsrc->req_handle, spdst->req_handle);
-+      ISP_IOXGET_16(isp, &spsrc->req_scsi_status, spdst->req_scsi_status);
-+      ISP_IOXGET_16(isp, &spsrc->req_completion_status,
-+          spdst->req_completion_status);
-+      ISP_IOXGET_16(isp, &spsrc->req_state_flags, spdst->req_state_flags);
-+      ISP_IOXGET_16(isp, &spsrc->req_status_flags, spdst->req_status_flags);
-+      ISP_IOXGET_16(isp, &spsrc->req_time, spdst->req_time);
-+      ISP_IOXGET_16(isp, &spsrc->req_sense_len, spdst->req_sense_len);
-+      ISP_IOXGET_32(isp, &spsrc->req_resid, spdst->req_resid);
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &spsrc->req_response[i],
-+                  spdst->req_response[i]);
-+      }
-+      for (i = 0; i < 32; i++) {
-+              ISP_IOXGET_8(isp, &spsrc->req_sense_data[i],
-+                  spdst->req_sense_data[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_response_x(struct ispsoftc *isp, ispstatus_cont_t *cpsrc,
-+    ispstatus_cont_t *cpdst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &cpsrc->req_header, &cpdst->req_header);
-+      for (i = 0; i < 60; i++) {
-+              ISP_IOXGET_8(isp, &cpsrc->req_sense_data[i],
-+                  cpdst->req_sense_data[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_rio2(struct ispsoftc *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &r2src->req_header, &r2dst->req_header);
-+      if (r2dst->req_header.rqs_seqno > 30)
-+              r2dst->req_header.rqs_seqno = 30;
-+      for (i = 0; i < r2dst->req_header.rqs_seqno; i++) {
-+              ISP_IOXGET_16(isp, &r2src->req_handles[i],
-+                  r2dst->req_handles[i]);
-+      }
-+      while (i < 30) {
-+              r2dst->req_handles[i++] = 0;
-+      }
-+}
-+
-+static INLINE void
-+isp_put_icb(struct ispsoftc *isp, isp_icb_t *Is, isp_icb_t *Id)
-+{
-+      int i;
-+      ISP_SWAP8(Is->icb_version, Is->_reserved0);
-+      ISP_IOXPUT_8(isp, Is->icb_version, &Id->icb_version);
-+      ISP_IOXPUT_8(isp, Is->_reserved0, &Id->_reserved0);
-+      ISP_IOXPUT_16(isp, Is->icb_fwoptions, &Id->icb_fwoptions);
-+      ISP_IOXPUT_16(isp, Is->icb_maxfrmlen, &Id->icb_maxfrmlen);
-+      ISP_IOXPUT_16(isp, Is->icb_maxalloc, &Id->icb_maxalloc);
-+      ISP_IOXPUT_16(isp, Is->icb_execthrottle, &Id->icb_execthrottle);
-+      ISP_SWAP8(Is->icb_retry_count, Is->icb_retry_delay);
-+      ISP_IOXPUT_8(isp, Is->icb_retry_count, &Id->icb_retry_count);
-+      ISP_IOXPUT_8(isp, Is->icb_retry_delay, &Id->icb_retry_delay);
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXPUT_8(isp, Is->icb_portname[i], &Id->icb_portname[i]);
-+      }
-+      ISP_IOXPUT_16(isp, Is->icb_hardaddr, &Id->icb_hardaddr);
-+      ISP_SWAP8(Is->icb_iqdevtype, Is->icb_logintime);
-+      ISP_IOXPUT_8(isp, Is->icb_iqdevtype, &Id->icb_iqdevtype);
-+      ISP_IOXPUT_8(isp, Is->icb_logintime, &Id->icb_logintime);
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXPUT_8(isp, Is->icb_nodename[i], &Id->icb_nodename[i]);
-+      }
-+      ISP_IOXPUT_16(isp, Is->icb_rqstout, &Id->icb_rqstout);
-+      ISP_IOXPUT_16(isp, Is->icb_rspnsin, &Id->icb_rspnsin);
-+      ISP_IOXPUT_16(isp, Is->icb_rqstqlen, &Id->icb_rqstqlen);
-+      ISP_IOXPUT_16(isp, Is->icb_rsltqlen, &Id->icb_rsltqlen);
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXPUT_16(isp, Is->icb_rqstaddr[i], &Id->icb_rqstaddr[i]);
-+      }
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXPUT_16(isp, Is->icb_respaddr[i], &Id->icb_respaddr[i]);
-+      }
-+      ISP_IOXPUT_16(isp, Is->icb_lunenables, &Id->icb_lunenables);
-+      ISP_SWAP8(Is->icb_ccnt, Is->icb_icnt);
-+      ISP_IOXPUT_8(isp, Is->icb_ccnt, &Id->icb_ccnt);
-+      ISP_IOXPUT_8(isp, Is->icb_icnt, &Id->icb_icnt);
-+      ISP_IOXPUT_16(isp, Is->icb_lunetimeout, &Id->icb_lunetimeout);
-+      ISP_IOXPUT_16(isp, Is->icb_xfwoptions, &Id->icb_xfwoptions);
-+      ISP_SWAP8(Is->icb_racctimer, Is->icb_idelaytimer);
-+      ISP_IOXPUT_8(isp, Is->icb_racctimer, &Id->icb_racctimer);
-+      ISP_IOXPUT_8(isp, Is->icb_idelaytimer, &Id->icb_idelaytimer);
-+      ISP_IOXPUT_16(isp, Is->icb_zfwoptions, &Id->icb_zfwoptions);
-+}
-+
-+static INLINE void
-+isp_get_pdb(struct ispsoftc *isp, isp_pdb_t *src, isp_pdb_t *dst)
-+{
-+      int i;
-+      ISP_IOXGET_16(isp, &src->pdb_options, dst->pdb_options);
-+        ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate);
-+        ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate);
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i],
-+                  dst->pdb_hardaddr_bits[i]);
-+      }
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXGET_8(isp, &src->pdb_portid_bits[i],
-+                  dst->pdb_portid_bits[i]);
-+      }
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]);
-+      }
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]);
-+      }
-+      ISP_IOXGET_16(isp, &src->pdb_execthrottle, dst->pdb_execthrottle);
-+      ISP_IOXGET_16(isp, &src->pdb_exec_count, dst->pdb_exec_count);
-+      ISP_IOXGET_8(isp, &src->pdb_retry_count, dst->pdb_retry_count);
-+      ISP_IOXGET_8(isp, &src->pdb_retry_delay, dst->pdb_retry_delay);
-+      ISP_IOXGET_16(isp, &src->pdb_resalloc, dst->pdb_resalloc);
-+      ISP_IOXGET_16(isp, &src->pdb_curalloc, dst->pdb_curalloc);
-+      ISP_IOXGET_16(isp, &src->pdb_qhead, dst->pdb_qhead);
-+      ISP_IOXGET_16(isp, &src->pdb_qtail, dst->pdb_qtail);
-+      ISP_IOXGET_16(isp, &src->pdb_tl_next, dst->pdb_tl_next);
-+      ISP_IOXGET_16(isp, &src->pdb_tl_last, dst->pdb_tl_last);
-+      ISP_IOXGET_16(isp, &src->pdb_features, dst->pdb_features);
-+      ISP_IOXGET_16(isp, &src->pdb_pconcurrnt, dst->pdb_pconcurrnt);
-+      ISP_IOXGET_16(isp, &src->pdb_roi, dst->pdb_roi);
-+      ISP_IOXGET_8(isp, &src->pdb_target, dst->pdb_target);
-+      ISP_IOXGET_8(isp, &src->pdb_initiator, dst->pdb_initiator);
-+      ISP_IOXGET_16(isp, &src->pdb_rdsiz, dst->pdb_rdsiz);
-+      ISP_IOXGET_16(isp, &src->pdb_ncseq, dst->pdb_ncseq);
-+      ISP_IOXGET_16(isp, &src->pdb_noseq, dst->pdb_noseq);
-+      ISP_IOXGET_16(isp, &src->pdb_labrtflg, dst->pdb_labrtflg);
-+      ISP_IOXGET_16(isp, &src->pdb_lstopflg, dst->pdb_lstopflg);
-+      ISP_IOXGET_16(isp, &src->pdb_sqhead, dst->pdb_sqhead);
-+      ISP_IOXGET_16(isp, &src->pdb_sqtail, dst->pdb_sqtail);
-+      ISP_IOXGET_16(isp, &src->pdb_ptimer, dst->pdb_ptimer);
-+      ISP_IOXGET_16(isp, &src->pdb_nxt_seqid, dst->pdb_nxt_seqid);
-+      ISP_IOXGET_16(isp, &src->pdb_fcount, dst->pdb_fcount);
-+      ISP_IOXGET_16(isp, &src->pdb_prli_len, dst->pdb_prli_len);
-+      ISP_IOXGET_16(isp, &src->pdb_prli_svc0, dst->pdb_prli_svc0);
-+      ISP_IOXGET_16(isp, &src->pdb_prli_svc3, dst->pdb_prli_svc3);
-+      ISP_IOXGET_16(isp, &src->pdb_loopid, dst->pdb_loopid);
-+      ISP_IOXGET_16(isp, &src->pdb_il_ptr, dst->pdb_il_ptr);
-+      ISP_IOXGET_16(isp, &src->pdb_sl_ptr, dst->pdb_sl_ptr);
-+}
-+
-+
-+/*
-+ * CT_HDR canonicalization- only needed for SNS responses
-+ */
-+static INLINE void
-+isp_get_ct_hdr(struct ispsoftc *isp, ct_hdr_t *src, ct_hdr_t *dst)
-+{
-+      ISP_IOXGET_8(isp, &src->ct_revision, dst->ct_revision);
-+      ISP_IOXGET_8(isp, &src->ct_portid[0], dst->ct_portid[0]);
-+      ISP_IOXGET_8(isp, &src->ct_portid[1], dst->ct_portid[1]);
-+      ISP_IOXGET_8(isp, &src->ct_portid[2], dst->ct_portid[2]);
-+      ISP_IOXGET_8(isp, &src->ct_fcs_type, dst->ct_fcs_type);
-+      ISP_IOXGET_8(isp, &src->ct_fcs_subtype, dst->ct_fcs_subtype);
-+      ISP_IOXGET_8(isp, &src->ct_options, dst->ct_options);
-+      ISP_IOXGET_8(isp, &src->ct_res0, dst->ct_res0);
-+      ISP_IOXGET_16(isp, &src->ct_response, dst->ct_response);
-+      dst->ct_response = (dst->ct_response << 8) | (dst->ct_response >> 8);
-+      ISP_IOXGET_16(isp, &src->ct_resid, dst->ct_resid);
-+      dst->ct_resid = (dst->ct_resid << 8) | (dst->ct_resid >> 8);
-+      ISP_IOXGET_8(isp, &src->ct_res1, dst->ct_res1);
-+      ISP_IOXGET_8(isp, &src->ct_reason, dst->ct_reason);
-+      ISP_IOXGET_8(isp, &src->ct_explanation, dst->ct_explanation);
-+      ISP_IOXGET_8(isp, &src->ct_vunique, dst->ct_vunique);
-+}
-+
-+/*
-+ * Generic SNS request - not particularly useful since the per-command data
-+ * isn't always 16 bit words.
-+ */
-+static INLINE void
-+isp_put_sns_request(struct ispsoftc *isp, sns_screq_t *src, sns_screq_t *dst)
-+{
-+      int i, nw = (int) src->snscb_sblen;
-+      ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXPUT_16(isp, src->snscb_addr[i], &dst->snscb_addr[i]);
-+      }
-+      ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
-+      for (i = 0; i < nw; i++) {
-+              ISP_IOXPUT_16(isp, src->snscb_data[i], &dst->snscb_data[i]);
-+      }
-+      
-+}
-+
-+static INLINE void
-+isp_put_gid_ft_request(struct ispsoftc *isp, sns_gid_ft_req_t *src,
-+    sns_gid_ft_req_t *dst)
-+{
-+      ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
-+      ISP_IOXPUT_16(isp, src->snscb_res0, &dst->snscb_res0);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
-+      ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
-+      ISP_IOXPUT_16(isp, src->snscb_res1, &dst->snscb_res1);
-+      ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
-+      ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2);
-+      ISP_IOXPUT_32(isp, src->snscb_res3, &dst->snscb_res3);
-+      ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type);
-+}
-+
-+static INLINE void
-+isp_put_gxn_id_request(struct ispsoftc *isp, sns_gxn_id_req_t *src,
-+    sns_gxn_id_req_t *dst)
-+{
-+      ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen);
-+      ISP_IOXPUT_16(isp, src->snscb_res0, &dst->snscb_res0);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]);
-+      ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]);
-+      ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen);
-+      ISP_IOXPUT_16(isp, src->snscb_res1, &dst->snscb_res1);
-+      ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd);
-+      ISP_IOXPUT_16(isp, src->snscb_res2, &dst->snscb_res2);
-+      ISP_IOXPUT_32(isp, src->snscb_res3, &dst->snscb_res3);
-+      ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid);
-+}
-+
-+/*
-+ * Generic SNS response - not particularly useful since the per-command data
-+ * isn't always 16 bit words.
-+ */
-+static INLINE void
-+isp_get_sns_response(struct ispsoftc *isp, sns_scrsp_t *src,
-+    sns_scrsp_t *dst, int nwords)
-+{
-+      int i;
-+      isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+      ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
-+      for (i = 0; i < 3; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_port_id[i],
-+                  dst->snscb_port_id[i]);
-+      }
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_portname[i],
-+                  dst->snscb_portname[i]);
-+      }
-+      for (i = 0; i < nwords; i++) {
-+              ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_gid_ft_response(struct ispsoftc *isp, sns_gid_ft_rsp_t *src,
-+    sns_gid_ft_rsp_t *dst, int nwords)
-+{
-+      int i;
-+      isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+      for (i = 0; i < nwords; i++) {
-+              int j;
-+              ISP_IOXGET_8(isp,
-+                  &src->snscb_ports[i].control,
-+                  dst->snscb_ports[i].control);
-+              for (j = 0; j < 3; j++) {
-+                      ISP_IOXGET_8(isp,
-+                          &src->snscb_ports[i].portid[j],
-+                          dst->snscb_ports[i].portid[j]);
-+              }
-+              if (dst->snscb_ports[i].control & 0x80) {
-+                      break;
-+              }
-+      }
-+}
-+
-+static INLINE void
-+isp_get_gxn_id_response(struct ispsoftc *isp, sns_gxn_id_rsp_t *src,
-+    sns_gxn_id_rsp_t *dst)
-+{
-+      int i;
-+      isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+      for (i = 0; i < 8; i++)
-+              ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]);
-+}
-+
-+static INLINE void
-+isp_get_gff_id_response(struct ispsoftc *isp, sns_gff_id_rsp_t *src,
-+    sns_gff_id_rsp_t *dst)
-+{
-+      int i;
-+      isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+      for (i = 0; i < 32; i++) {
-+              ISP_IOXGET_32(isp, &src->snscb_fc4_features[i],
-+                  dst->snscb_fc4_features[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_ga_nxt_response(struct ispsoftc *isp, sns_ga_nxt_rsp_t *src,
-+    sns_ga_nxt_rsp_t *dst)
-+{
-+      int i;
-+      isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr);
-+      ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type);
-+      for (i = 0; i < 3; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_port_id[i],
-+                  dst->snscb_port_id[i]);
-+      }
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_portname[i],
-+                  dst->snscb_portname[i]);
-+      }
-+      ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen);
-+      for (i = 0; i < 255; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]);
-+      }
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_nodename[i],
-+                  dst->snscb_nodename[i]);
-+      }
-+      ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen);
-+      for (i = 0; i < 255; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]);
-+      }
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_ipassoc[i],
-+                  dst->snscb_ipassoc[i]);
-+      }
-+      for (i = 0; i < 16; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]);
-+      }
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_svc_class[i],
-+                  dst->snscb_svc_class[i]);
-+      }
-+      for (i = 0; i < 32; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_fc4_types[i],
-+                  dst->snscb_fc4_types[i]);
-+      }
-+      for (i = 0; i < 8; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]);
-+      }
-+      ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved);
-+      for (i = 0; i < 3; i++) {
-+              ISP_IOXGET_8(isp, &src->snscb_hardaddr[i],
-+                  dst->snscb_hardaddr[i]);
-+      }
-+}
-+
-+#ifdef        ISP_TARGET_MODE
-+static INLINE void
-+isp_put_atio(struct ispsoftc *isp, at_entry_t *atsrc, at_entry_t *atdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+      ISP_IOXPUT_16(isp, atsrc->at_reserved, &atdst->at_reserved);
-+      ISP_IOXPUT_16(isp, atsrc->at_handle, &atdst->at_handle);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_iid);
-+              ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_lun);
-+              ISP_IOXPUT_8(isp, atsrc->at_cdblen, &atdst->at_tgt);
-+              ISP_IOXPUT_8(isp, atsrc->at_tgt, &atdst->at_cdblen);
-+              ISP_IOXPUT_8(isp, atsrc->at_status, &atdst->at_scsi_status);
-+              ISP_IOXPUT_8(isp, atsrc->at_scsi_status, &atdst->at_status);
-+              ISP_IOXPUT_8(isp, atsrc->at_tag_val, &atdst->at_tag_type);
-+              ISP_IOXPUT_8(isp, atsrc->at_tag_type, &atdst->at_tag_val);
-+      } else {
-+              ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_lun);
-+              ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_iid);
-+              ISP_IOXPUT_8(isp, atsrc->at_cdblen, &atdst->at_cdblen);
-+              ISP_IOXPUT_8(isp, atsrc->at_tgt, &atdst->at_tgt);
-+              ISP_IOXPUT_8(isp, atsrc->at_status, &atdst->at_status);
-+              ISP_IOXPUT_8(isp, atsrc->at_scsi_status,
-+                  &atdst->at_scsi_status);
-+              ISP_IOXPUT_8(isp, atsrc->at_tag_val, &atdst->at_tag_val);
-+              ISP_IOXPUT_8(isp, atsrc->at_tag_type, &atdst->at_tag_type);
-+      }
-+      ISP_IOXPUT_32(isp, atsrc->at_flags, &atdst->at_flags);
-+      for (i = 0; i < ATIO_CDBLEN; i++) {
-+              ISP_IOXPUT_8(isp, atsrc->at_cdb[i], &atdst->at_cdb[i]);
-+      }
-+      for (i = 0; i < QLTM_SENSELEN; i++) {
-+              ISP_IOXPUT_8(isp, atsrc->at_sense[i], &atdst->at_sense[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_atio(struct ispsoftc *isp, at_entry_t *atsrc, at_entry_t *atdst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+      ISP_IOXGET_16(isp, &atsrc->at_reserved, atdst->at_reserved);
-+      ISP_IOXGET_16(isp, &atsrc->at_handle, atdst->at_handle);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_iid);
-+              ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_lun);
-+              ISP_IOXGET_8(isp, &atsrc->at_cdblen, atdst->at_tgt);
-+              ISP_IOXGET_8(isp, &atsrc->at_tgt, atdst->at_cdblen);
-+              ISP_IOXGET_8(isp, &atsrc->at_status, atdst->at_scsi_status);
-+              ISP_IOXGET_8(isp, &atsrc->at_scsi_status, atdst->at_status);
-+              ISP_IOXGET_8(isp, &atsrc->at_tag_val, atdst->at_tag_type);
-+              ISP_IOXGET_8(isp, &atsrc->at_tag_type, atdst->at_tag_val);
-+      } else {
-+              ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_lun);
-+              ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_iid);
-+              ISP_IOXGET_8(isp, &atsrc->at_cdblen, atdst->at_cdblen);
-+              ISP_IOXGET_8(isp, &atsrc->at_tgt, atdst->at_tgt);
-+              ISP_IOXGET_8(isp, &atsrc->at_status, atdst->at_status);
-+              ISP_IOXGET_8(isp, &atsrc->at_scsi_status,
-+                  atdst->at_scsi_status);
-+              ISP_IOXGET_8(isp, &atsrc->at_tag_val, atdst->at_tag_val);
-+              ISP_IOXGET_8(isp, &atsrc->at_tag_type, atdst->at_tag_type);
-+      }
-+      ISP_IOXGET_32(isp, &atsrc->at_flags, atdst->at_flags);
-+      for (i = 0; i < ATIO_CDBLEN; i++) {
-+              ISP_IOXGET_8(isp, &atsrc->at_cdb[i], atdst->at_cdb[i]);
-+      }
-+      for (i = 0; i < QLTM_SENSELEN; i++) {
-+              ISP_IOXGET_8(isp, &atsrc->at_sense[i], atdst->at_sense[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_atio2(struct ispsoftc *isp, at2_entry_t *atsrc, at2_entry_t *atdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+      ISP_IOXPUT_32(isp, atsrc->at_reserved, &atdst->at_reserved);
-+      ISP_IOXPUT_8(isp, atsrc->at_lun, &atdst->at_lun);
-+      ISP_IOXPUT_8(isp, atsrc->at_iid, &atdst->at_iid);
-+      ISP_IOXPUT_16(isp, atsrc->at_rxid, &atdst->at_rxid);
-+      ISP_IOXPUT_16(isp, atsrc->at_flags, &atdst->at_flags);
-+      ISP_IOXPUT_16(isp, atsrc->at_status, &atdst->at_status);
-+      ISP_IOXPUT_8(isp, atsrc->at_crn, &atdst->at_crn);
-+      ISP_IOXPUT_8(isp, atsrc->at_taskcodes, &atdst->at_taskcodes);
-+      ISP_IOXPUT_8(isp, atsrc->at_taskflags, &atdst->at_taskflags);
-+      ISP_IOXPUT_8(isp, atsrc->at_execodes, &atdst->at_execodes);
-+      for (i = 0; i < ATIO2_CDBLEN; i++) {
-+              ISP_IOXPUT_8(isp, atsrc->at_cdb[i], &atdst->at_cdb[i]);
-+      }
-+      ISP_IOXPUT_32(isp, atsrc->at_datalen, &atdst->at_datalen);
-+      ISP_IOXPUT_16(isp, atsrc->at_scclun, &atdst->at_scclun);
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXPUT_16(isp, atsrc->at_wwpn[i], &atdst->at_wwpn[i]);
-+      }
-+      for (i = 0; i < 6; i++) {
-+              ISP_IOXPUT_16(isp, atsrc->at_reserved2[i],
-+                  &atdst->at_reserved2[i]);
-+      }
-+      ISP_IOXPUT_16(isp, atsrc->at_oxid, &atdst->at_oxid);
-+}
-+
-+static INLINE void
-+isp_get_atio2(struct ispsoftc *isp, at2_entry_t *atsrc, at2_entry_t *atdst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &atsrc->at_header, &atdst->at_header);
-+      ISP_IOXGET_32(isp, &atsrc->at_reserved, atdst->at_reserved);
-+      ISP_IOXGET_8(isp, &atsrc->at_lun, atdst->at_lun);
-+      ISP_IOXGET_8(isp, &atsrc->at_iid, atdst->at_iid);
-+      ISP_IOXGET_16(isp, &atsrc->at_rxid, atdst->at_rxid);
-+      ISP_IOXGET_16(isp, &atsrc->at_flags, atdst->at_flags);
-+      ISP_IOXGET_16(isp, &atsrc->at_status, atdst->at_status);
-+      ISP_IOXGET_8(isp, &atsrc->at_crn, atdst->at_crn);
-+      ISP_IOXGET_8(isp, &atsrc->at_taskcodes, atdst->at_taskcodes);
-+      ISP_IOXGET_8(isp, &atsrc->at_taskflags, atdst->at_taskflags);
-+      ISP_IOXGET_8(isp, &atsrc->at_execodes, atdst->at_execodes);
-+      for (i = 0; i < ATIO2_CDBLEN; i++) {
-+              ISP_IOXGET_8(isp, &atsrc->at_cdb[i], atdst->at_cdb[i]);
-+      }
-+      ISP_IOXGET_32(isp, &atsrc->at_datalen, atdst->at_datalen);
-+      ISP_IOXGET_16(isp, &atsrc->at_scclun, atdst->at_scclun);
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXGET_16(isp, &atsrc->at_wwpn[i], atdst->at_wwpn[i]);
-+      }
-+      for (i = 0; i < 6; i++) {
-+              ISP_IOXGET_16(isp, &atsrc->at_reserved2[i],
-+                  atdst->at_reserved2[i]);
-+      }
-+      ISP_IOXGET_16(isp, &atsrc->at_oxid, atdst->at_oxid);
-+}
-+
-+static INLINE void
-+isp_put_ctio(struct ispsoftc *isp, ct_entry_t *ctsrc, ct_entry_t *ctdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_reserved, &ctdst->ct_reserved);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_fwhandle, &ctdst->ct_fwhandle);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_lun);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_iid);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_tgt, &ctdst->ct_reserved2);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_reserved2, &ctdst->ct_tgt);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_status, &ctdst->ct_scsi_status);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_scsi_status, &ctdst->ct_status);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_tag_type, &ctdst->ct_tag_val);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_tag_val, &ctdst->ct_tag_type);
-+      } else {
-+              ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_iid);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_lun);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_tgt, &ctdst->ct_tgt);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_reserved2, &ctdst->ct_reserved2);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_scsi_status,
-+                  &ctdst->ct_scsi_status);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_status, &ctdst->ct_status);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_tag_type, &ctdst->ct_tag_type);
-+              ISP_IOXPUT_8(isp, ctsrc->ct_tag_val, &ctdst->ct_tag_val);
-+      }
-+      ISP_IOXPUT_32(isp, ctsrc->ct_flags, &ctdst->ct_flags);
-+      ISP_IOXPUT_32(isp, ctsrc->ct_xfrlen, &ctdst->ct_xfrlen);
-+      ISP_IOXPUT_32(isp, ctsrc->ct_resid, &ctdst->ct_resid);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_timeout, &ctdst->ct_timeout);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_seg_count, &ctdst->ct_seg_count);
-+      for (i = 0; i < ISP_RQDSEG; i++) {
-+              ISP_IOXPUT_32(isp, ctsrc->ct_dataseg[i].ds_base,
-+                  &ctdst->ct_dataseg[i].ds_base);
-+              ISP_IOXPUT_32(isp, ctsrc->ct_dataseg[i].ds_count,
-+                  &ctdst->ct_dataseg[i].ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_ctio(struct ispsoftc *isp, ct_entry_t *ctsrc, ct_entry_t *ctdst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_iid);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_lun);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_reserved2, ctdst->ct_tgt);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_tgt, ctdst->ct_reserved2);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_status, ctdst->ct_scsi_status);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_scsi_status, ctdst->ct_status);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_tag_val, ctdst->ct_tag_type);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_tag_type, ctdst->ct_tag_val);
-+      } else {
-+              ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_lun);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_iid);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_reserved2, ctdst->ct_reserved2);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_tgt, ctdst->ct_tgt);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_status, ctdst->ct_status);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_scsi_status,
-+                  ctdst->ct_scsi_status);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_tag_val, ctdst->ct_tag_val);
-+              ISP_IOXGET_8(isp, &ctsrc->ct_tag_type, ctdst->ct_tag_type);
-+      }
-+      ISP_IOXGET_32(isp, &ctsrc->ct_flags, ctdst->ct_flags);
-+      ISP_IOXGET_32(isp, &ctsrc->ct_xfrlen, ctdst->ct_xfrlen);
-+      ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_timeout, ctdst->ct_timeout);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
-+      for (i = 0; i < ISP_RQDSEG; i++) {
-+              ISP_IOXGET_32(isp,
-+                  &ctsrc->ct_dataseg[i].ds_base,
-+                  ctdst->ct_dataseg[i].ds_base);
-+              ISP_IOXGET_32(isp,
-+                  &ctsrc->ct_dataseg[i].ds_count,
-+                  ctdst->ct_dataseg[i].ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_ctio2(struct ispsoftc *isp, ct2_entry_t *ctsrc, ct2_entry_t *ctdst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_reserved, &ctdst->ct_reserved);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_fwhandle, &ctdst->ct_fwhandle);
-+      ISP_IOXPUT_8(isp, ctsrc->ct_lun, &ctdst->ct_lun);
-+      ISP_IOXPUT_8(isp, ctsrc->ct_iid, &ctdst->ct_iid);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_rxid, &ctdst->ct_rxid);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_flags, &ctdst->ct_flags);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_timeout, &ctdst->ct_timeout);
-+      ISP_IOXPUT_16(isp, ctsrc->ct_seg_count, &ctdst->ct_seg_count);
-+      ISP_IOXPUT_32(isp, ctsrc->ct_resid, &ctdst->ct_resid);
-+      ISP_IOXPUT_32(isp, ctsrc->ct_reloff, &ctdst->ct_reloff);
-+      if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) {
-+              ISP_IOXPUT_32(isp, ctsrc->rsp.m0._reserved,
-+                  &ctdst->rsp.m0._reserved);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m0._reserved2,
-+                  &ctdst->rsp.m0._reserved2);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_scsi_status,
-+                  &ctdst->rsp.m0.ct_scsi_status);
-+              ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_xfrlen,
-+                  &ctdst->rsp.m0.ct_xfrlen);
-+              if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
-+                      for (i = 0; i < ISP_RQDSEG_T2; i++) {
-+                              ISP_IOXPUT_32(isp,
-+                                  ctsrc->rsp.m0.ct_dataseg[i].ds_base,
-+                                  &ctdst->rsp.m0.ct_dataseg[i].ds_base);
-+                              ISP_IOXPUT_32(isp,
-+                                  ctsrc->rsp.m0.ct_dataseg[i].ds_count,
-+                                  &ctdst->rsp.m0.ct_dataseg[i].ds_count);
-+                      }
-+              } else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO3) {
-+                      for (i = 0; i < ISP_RQDSEG_T3; i++) {
-+                              ISP_IOXPUT_32(isp,
-+                                  ctsrc->rsp.m0.ct_dataseg64[i].ds_base,
-+                                  &ctdst->rsp.m0.ct_dataseg64[i].ds_base);
-+                              ISP_IOXPUT_32(isp,
-+                                  ctsrc->rsp.m0.ct_dataseg64[i].ds_basehi,
-+                                  &ctdst->rsp.m0.ct_dataseg64[i].ds_basehi);
-+                              ISP_IOXPUT_32(isp,
-+                                  ctsrc->rsp.m0.ct_dataseg64[i].ds_count,
-+                                  &ctdst->rsp.m0.ct_dataseg64[i].ds_count);
-+                      }
-+              } else if (ctsrc->ct_header.rqs_entry_type == RQSTYPE_CTIO4) {
-+                      ISP_IOXPUT_16(isp, ctsrc->rsp.m0.ct_dslist.ds_type,
-+                          &ctdst->rsp.m0.ct_dslist.ds_type);
-+                      ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_segment,
-+                          &ctdst->rsp.m0.ct_dslist.ds_segment);
-+                      ISP_IOXPUT_32(isp, ctsrc->rsp.m0.ct_dslist.ds_base,
-+                          &ctdst->rsp.m0.ct_dslist.ds_base);
-+              }
-+      } else if ((ctsrc->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) {
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved,
-+                  &ctdst->rsp.m1._reserved);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m1._reserved2,
-+                  &ctdst->rsp.m1._reserved2);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_senselen,
-+                  &ctdst->rsp.m1.ct_senselen);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_scsi_status,
-+                  &ctdst->rsp.m1.ct_scsi_status);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m1.ct_resplen,
-+                  &ctdst->rsp.m1.ct_resplen);
-+              for (i = 0; i < MAXRESPLEN; i++) {
-+                      ISP_IOXPUT_8(isp, ctsrc->rsp.m1.ct_resp[i],
-+                          &ctdst->rsp.m1.ct_resp[i]);
-+              }
-+      } else {
-+              ISP_IOXPUT_32(isp, ctsrc->rsp.m2._reserved,
-+                  &ctdst->rsp.m2._reserved);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved2,
-+                  &ctdst->rsp.m2._reserved2);
-+              ISP_IOXPUT_16(isp, ctsrc->rsp.m2._reserved3,
-+                  &ctdst->rsp.m2._reserved3);
-+              ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_datalen,
-+                  &ctdst->rsp.m2.ct_datalen);
-+              ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_base,
-+                  &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
-+              ISP_IOXPUT_32(isp, ctsrc->rsp.m2.ct_fcp_rsp_iudata.ds_count,
-+                  &ctdst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_ctio2(struct ispsoftc *isp, ct2_entry_t *ctsrc, ct2_entry_t *ctdst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &ctsrc->ct_header, &ctdst->ct_header);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_reserved, ctdst->ct_reserved);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_fwhandle, ctdst->ct_fwhandle);
-+      ISP_IOXGET_8(isp, &ctsrc->ct_lun, ctdst->ct_lun);
-+      ISP_IOXGET_8(isp, &ctsrc->ct_iid, ctdst->ct_iid);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_rxid, ctdst->ct_rxid);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_flags, ctdst->ct_flags);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_status, ctdst->ct_status);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_timeout, ctdst->ct_timeout);
-+      ISP_IOXGET_16(isp, &ctsrc->ct_seg_count, ctdst->ct_seg_count);
-+      ISP_IOXGET_32(isp, &ctsrc->ct_reloff, ctdst->ct_reloff);
-+      ISP_IOXGET_32(isp, &ctsrc->ct_resid, ctdst->ct_resid);
-+      for (i = 0; i < 4; i++) {
-+              ISP_IOXGET_32(isp, &ctsrc->rsp.fw._reserved[i],
-+                  ctdst->rsp.fw._reserved[i]);
-+      }
-+      ISP_IOXGET_16(isp, &ctsrc->rsp.fw.ct_scsi_status,
-+          ctdst->rsp.fw.ct_scsi_status);
-+      for (i = 0; i < QLTM_SENSELEN; i++) {
-+              ISP_IOXGET_8(isp, &ctsrc->rsp.fw.ct_sense[i],
-+                  ctdst->rsp.fw.ct_sense[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_enable_lun(struct ispsoftc *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &lesrc->le_header, &ledst->le_header);
-+      ISP_IOXPUT_32(isp, lesrc->le_reserved, &ledst->le_reserved);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_rsvd);
-+              ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_lun);
-+              ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_tgt);
-+              ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_ops);
-+              ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_reserved2);
-+              ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_status);
-+              ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_in_count);
-+              ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_cmd_count);
-+              ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb7len);
-+              ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb6len);
-+      } else {
-+              ISP_IOXPUT_8(isp, lesrc->le_lun, &ledst->le_lun);
-+              ISP_IOXPUT_8(isp, lesrc->le_rsvd, &ledst->le_rsvd);
-+              ISP_IOXPUT_8(isp, lesrc->le_ops, &ledst->le_ops);
-+              ISP_IOXPUT_8(isp, lesrc->le_tgt, &ledst->le_tgt);
-+              ISP_IOXPUT_8(isp, lesrc->le_status, &ledst->le_status);
-+              ISP_IOXPUT_8(isp, lesrc->le_reserved2, &ledst->le_reserved2);
-+              ISP_IOXPUT_8(isp, lesrc->le_cmd_count, &ledst->le_cmd_count);
-+              ISP_IOXPUT_8(isp, lesrc->le_in_count, &ledst->le_in_count);
-+              ISP_IOXPUT_8(isp, lesrc->le_cdb6len, &ledst->le_cdb6len);
-+              ISP_IOXPUT_8(isp, lesrc->le_cdb7len, &ledst->le_cdb7len);
-+      }
-+      ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags);
-+      ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout);
-+      for (i = 0; i < 20; i++) {
-+              ISP_IOXPUT_8(isp, lesrc->le_reserved3[i],
-+                  &ledst->le_reserved3[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_enable_lun(struct ispsoftc *isp, lun_entry_t *lesrc, lun_entry_t *ledst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &lesrc->le_header, &ledst->le_header);
-+      ISP_IOXGET_32(isp, &lesrc->le_reserved, ledst->le_reserved);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_rsvd);
-+              ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_lun);
-+              ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_tgt);
-+              ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_ops);
-+              ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_reserved2);
-+              ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_status);
-+              ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_in_count);
-+              ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_cmd_count);
-+              ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb7len);
-+              ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb6len);
-+      } else {
-+              ISP_IOXGET_8(isp, &lesrc->le_lun, ledst->le_lun);
-+              ISP_IOXGET_8(isp, &lesrc->le_rsvd, ledst->le_rsvd);
-+              ISP_IOXGET_8(isp, &lesrc->le_ops, ledst->le_ops);
-+              ISP_IOXGET_8(isp, &lesrc->le_tgt, ledst->le_tgt);
-+              ISP_IOXGET_8(isp, &lesrc->le_status, ledst->le_status);
-+              ISP_IOXGET_8(isp, &lesrc->le_reserved2, ledst->le_reserved2);
-+              ISP_IOXGET_8(isp, &lesrc->le_cmd_count, ledst->le_cmd_count);
-+              ISP_IOXGET_8(isp, &lesrc->le_in_count, ledst->le_in_count);
-+              ISP_IOXGET_8(isp, &lesrc->le_cdb6len, ledst->le_cdb6len);
-+              ISP_IOXGET_8(isp, &lesrc->le_cdb7len, ledst->le_cdb7len);
-+      }
-+      ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags);
-+      ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout);
-+      for (i = 0; i < 20; i++) {
-+              ISP_IOXGET_8(isp, &lesrc->le_reserved3[i],
-+                  ledst->le_reserved3[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_notify(struct ispsoftc *isp, in_entry_t *insrc, in_entry_t *indst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &insrc->in_header, &indst->in_header);
-+      ISP_IOXPUT_32(isp, insrc->in_reserved, &indst->in_reserved);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_iid);
-+              ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_lun);
-+              ISP_IOXPUT_8(isp, insrc->in_reserved2, &indst->in_tgt);
-+              ISP_IOXPUT_8(isp, insrc->in_tgt, &indst->in_reserved2);
-+              ISP_IOXPUT_8(isp, insrc->in_status, &indst->in_rsvd2);
-+              ISP_IOXPUT_8(isp, insrc->in_rsvd2, &indst->in_status);
-+              ISP_IOXPUT_8(isp, insrc->in_tag_val, &indst->in_tag_type);
-+              ISP_IOXPUT_8(isp, insrc->in_tag_type, &indst->in_tag_val);
-+      } else {
-+              ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_lun);
-+              ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_iid);
-+              ISP_IOXPUT_8(isp, insrc->in_reserved2, &indst->in_reserved2);
-+              ISP_IOXPUT_8(isp, insrc->in_tgt, &indst->in_tgt);
-+              ISP_IOXPUT_8(isp, insrc->in_status, &indst->in_status);
-+              ISP_IOXPUT_8(isp, insrc->in_rsvd2, &indst->in_rsvd2);
-+              ISP_IOXPUT_8(isp, insrc->in_tag_val, &indst->in_tag_val);
-+              ISP_IOXPUT_8(isp, insrc->in_tag_type, &indst->in_tag_type);
-+      }
-+      ISP_IOXPUT_32(isp, insrc->in_flags, &indst->in_flags);
-+      ISP_IOXPUT_16(isp, insrc->in_seqid, &indst->in_seqid);
-+      for (i = 0; i < IN_MSGLEN; i++) {
-+              ISP_IOXPUT_8(isp, insrc->in_msg[i], &indst->in_msg[i]);
-+      }
-+      for (i = 0; i < IN_RSVDLEN; i++) {
-+              ISP_IOXPUT_8(isp, insrc->in_reserved3[i],
-+                  &indst->in_reserved3[i]);
-+      }
-+      for (i = 0; i < QLTM_SENSELEN; i++) {
-+              ISP_IOXPUT_8(isp, insrc->in_sense[i],
-+                  &indst->in_sense[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_notify(struct ispsoftc *isp, in_entry_t *insrc, in_entry_t *indst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &insrc->in_header, &indst->in_header);
-+      ISP_IOXGET_32(isp, &insrc->in_reserved, indst->in_reserved);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_iid);
-+              ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_lun);
-+              ISP_IOXGET_8(isp, &insrc->in_reserved2, indst->in_tgt);
-+              ISP_IOXGET_8(isp, &insrc->in_tgt, indst->in_reserved2);
-+              ISP_IOXGET_8(isp, &insrc->in_status, indst->in_rsvd2);
-+              ISP_IOXGET_8(isp, &insrc->in_rsvd2, indst->in_status);
-+              ISP_IOXGET_8(isp, &insrc->in_tag_val, indst->in_tag_type);
-+              ISP_IOXGET_8(isp, &insrc->in_tag_type, indst->in_tag_val);
-+      } else {
-+              ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_lun);
-+              ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_iid);
-+              ISP_IOXGET_8(isp, &insrc->in_reserved2, indst->in_reserved2);
-+              ISP_IOXGET_8(isp, &insrc->in_tgt, indst->in_tgt);
-+              ISP_IOXGET_8(isp, &insrc->in_status, indst->in_status);
-+              ISP_IOXGET_8(isp, &insrc->in_rsvd2, indst->in_rsvd2);
-+              ISP_IOXGET_8(isp, &insrc->in_tag_val, indst->in_tag_val);
-+              ISP_IOXGET_8(isp, &insrc->in_tag_type, indst->in_tag_type);
-+      }
-+      ISP_IOXGET_32(isp, &insrc->in_flags, indst->in_flags);
-+      ISP_IOXGET_16(isp, &insrc->in_seqid, indst->in_seqid);
-+      for (i = 0; i < IN_MSGLEN; i++) {
-+              ISP_IOXGET_8(isp, &insrc->in_msg[i], indst->in_msg[i]);
-+      }
-+      for (i = 0; i < IN_RSVDLEN; i++) {
-+              ISP_IOXGET_8(isp, &insrc->in_reserved3[i],
-+                  indst->in_reserved3[i]);
-+      }
-+      for (i = 0; i < QLTM_SENSELEN; i++) {
-+              ISP_IOXGET_8(isp, &insrc->in_sense[i],
-+                  indst->in_sense[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_notify_fc(struct ispsoftc *isp, in_fcentry_t *insrc,
-+    in_fcentry_t *indst)
-+{
-+      isp_copy_out_hdr(isp, &insrc->in_header, &indst->in_header);
-+      ISP_IOXPUT_32(isp, insrc->in_reserved, &indst->in_reserved);
-+      ISP_IOXPUT_8(isp, insrc->in_lun, &indst->in_lun);
-+      ISP_IOXPUT_8(isp, insrc->in_iid, &indst->in_iid);
-+      ISP_IOXPUT_16(isp, insrc->in_scclun, &indst->in_scclun);
-+      ISP_IOXPUT_32(isp, insrc->in_reserved2, &indst->in_reserved2);
-+      ISP_IOXPUT_16(isp, insrc->in_status, &indst->in_status);
-+      ISP_IOXPUT_16(isp, insrc->in_task_flags, &indst->in_task_flags);
-+      ISP_IOXPUT_16(isp, insrc->in_seqid, &indst->in_seqid);
-+}
-+
-+static INLINE void
-+isp_get_notify_fc(struct ispsoftc *isp, in_fcentry_t *insrc,
-+    in_fcentry_t *indst)
-+{
-+      isp_copy_in_hdr(isp, &insrc->in_header, &indst->in_header);
-+      ISP_IOXGET_32(isp, &insrc->in_reserved, indst->in_reserved);
-+      ISP_IOXGET_8(isp, &insrc->in_lun, indst->in_lun);
-+      ISP_IOXGET_8(isp, &insrc->in_iid, indst->in_iid);
-+      ISP_IOXGET_16(isp, &insrc->in_scclun, indst->in_scclun);
-+      ISP_IOXGET_32(isp, &insrc->in_reserved2, indst->in_reserved2);
-+      ISP_IOXGET_16(isp, &insrc->in_status, indst->in_status);
-+      ISP_IOXGET_16(isp, &insrc->in_task_flags, indst->in_task_flags);
-+      ISP_IOXGET_16(isp, &insrc->in_seqid, indst->in_seqid);
-+}
-+
-+static INLINE void
-+isp_put_notify_ack(struct ispsoftc *isp, na_entry_t *nasrc,  na_entry_t *nadst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+      ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_iid);
-+              ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_lun);
-+              ISP_IOXPUT_8(isp, nasrc->na_status, &nadst->na_event);
-+              ISP_IOXPUT_8(isp, nasrc->na_event, &nadst->na_status);
-+      } else {
-+              ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_lun);
-+              ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_iid);
-+              ISP_IOXPUT_8(isp, nasrc->na_status, &nadst->na_status);
-+              ISP_IOXPUT_8(isp, nasrc->na_event, &nadst->na_event);
-+      }
-+      ISP_IOXPUT_32(isp, nasrc->na_flags, &nadst->na_flags);
-+      for (i = 0; i < NA_RSVDLEN; i++) {
-+              ISP_IOXPUT_16(isp, nasrc->na_reserved3[i],
-+                  &nadst->na_reserved3[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_notify_ack(struct ispsoftc *isp, na_entry_t *nasrc, na_entry_t *nadst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+      ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
-+      if (ISP_IS_SBUS(isp)) {
-+              ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_iid);
-+              ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_lun);
-+              ISP_IOXGET_8(isp, &nasrc->na_status, nadst->na_event);
-+              ISP_IOXGET_8(isp, &nasrc->na_event, nadst->na_status);
-+      } else {
-+              ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_lun);
-+              ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_iid);
-+              ISP_IOXGET_8(isp, &nasrc->na_status, nadst->na_status);
-+              ISP_IOXGET_8(isp, &nasrc->na_event, nadst->na_event);
-+      }
-+      ISP_IOXGET_32(isp, &nasrc->na_flags, nadst->na_flags);
-+      for (i = 0; i < NA_RSVDLEN; i++) {
-+              ISP_IOXGET_16(isp, &nasrc->na_reserved3[i],
-+                  nadst->na_reserved3[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_put_notify_ack_fc(struct ispsoftc *isp, na_fcentry_t *nasrc,
-+    na_fcentry_t *nadst)
-+{
-+      int i;
-+      isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+      ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
-+      ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_lun);
-+      ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_iid);
-+      ISP_IOXPUT_16(isp, nasrc->na_scclun, &nadst->na_scclun);
-+      ISP_IOXPUT_16(isp, nasrc->na_flags, &nadst->na_flags);
-+      ISP_IOXPUT_16(isp, nasrc->na_reserved2, &nadst->na_reserved2);
-+      ISP_IOXPUT_16(isp, nasrc->na_status, &nadst->na_status);
-+      ISP_IOXPUT_16(isp, nasrc->na_task_flags, &nadst->na_task_flags);
-+      ISP_IOXPUT_16(isp, nasrc->na_seqid, &nadst->na_seqid);
-+      for (i = 0; i < NA2_RSVDLEN; i++) {
-+              ISP_IOXPUT_16(isp, nasrc->na_reserved3[i],
-+                  &nadst->na_reserved3[i]);
-+      }
-+}
-+
-+static INLINE void
-+isp_get_notify_ack_fc(struct ispsoftc *isp, na_fcentry_t *nasrc,
-+    na_fcentry_t *nadst)
-+{
-+      int i;
-+      isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
-+      ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
-+      ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_lun);
-+      ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_iid);
-+      ISP_IOXGET_16(isp, &nasrc->na_scclun, nadst->na_scclun);
-+      ISP_IOXGET_16(isp, &nasrc->na_flags, nadst->na_flags);
-+      ISP_IOXGET_16(isp, &nasrc->na_reserved2, nadst->na_reserved2);
-+      ISP_IOXGET_16(isp, &nasrc->na_status, nadst->na_status);
-+      ISP_IOXGET_16(isp, &nasrc->na_task_flags, nadst->na_task_flags);
-+      ISP_IOXGET_16(isp, &nasrc->na_seqid, nadst->na_seqid);
-+      for (i = 0; i < NA2_RSVDLEN; i++) {
-+              ISP_IOXGET_16(isp, &nasrc->na_reserved3[i],
-+                  nadst->na_reserved3[i]);
-+      }
-+}
-+#endif
-+#endif        /* _ISP_INLINE_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_ioctl.h    2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,128 @@
-+/* %W% */
-+/*
-+ * ioctl definitions for Qlogic FC/SCSI HBA driver
-+ */
-+#define       ISP_IOC         (0x4D4A5100)    /* 'MJQ' << 8 */
-+
-+/*
-+ * This ioctl sets/retrieves the debugging level for this hba instance.
-+ * Note that this is not a simple integer level- see ispvar.h for definitions.
-+ *
-+ * The arguments is a pointer to an integer with the new debugging level.
-+ * The old value is written into this argument.
-+ */
-+
-+#define       ISP_SDBLEV      (ISP_IOC | 1)
-+
-+/*
-+ * This ioctl resets the HBA. Use with caution.
-+ */
-+#define       ISP_RESETHBA    (ISP_IOC | 2)
-+
-+/*
-+ * This ioctl performs a fibre chanel rescan.
-+ */
-+#define       ISP_RESCAN      (ISP_IOC | 3)
-+
-+/*
-+ * This ioctl performs a reset and then will set the adapter to the
-+ * role that was passed in (the old role will be returned). It almost
-+ * goes w/o saying: use with caution.
-+ */
-+#define ISP_SETROLE     (ISP_IOC | 4)
-+
-+#define ISP_ROLE_NONE           0x0
-+#define ISP_ROLE_INITIATOR      0x1
-+#define ISP_ROLE_TARGET         0x2
-+#define ISP_ROLE_BOTH           (ISP_ROLE_TARGET|ISP_ROLE_INITIATOR)
-+#ifndef ISP_DEFAULT_ROLES
-+#define ISP_DEFAULT_ROLES       ISP_ROLE_BOTH
-+#endif
-+
-+/*
-+ * Get the current adapter role
-+ */
-+#define ISP_GETROLE     (ISP_IOC | 5)
-+
-+/*
-+ * Get/Clear Stats
-+ */
-+#define       ISP_STATS_VERSION       0
-+typedef struct {
-+      u_int8_t        isp_stat_version;
-+      u_int8_t        isp_type;               /* (ro) reflects chip type */
-+      u_int8_t        isp_revision;           /* (ro) reflects chip version */
-+      u_int8_t        unused1;
-+      u_int32_t       unused2;
-+      /*
-+       * Statistics Counters
-+       */
-+#define       ISP_NSTATS      16
-+#define       ISP_INTCNT      0
-+#define       ISP_INTBOGUS    1
-+#define       ISP_INTMBOXC    2
-+#define       ISP_INGOASYNC   3
-+#define       ISP_RSLTCCMPLT  4
-+#define       ISP_FPHCCMCPLT  5
-+#define       ISP_RSCCHIWAT   6
-+#define       ISP_FPCCHIWAT   7
-+      u_int64_t       isp_stats[ISP_NSTATS];
-+} isp_stats_t;
-+
-+#define       ISP_GET_STATS   (ISP_IOC | 6)
-+#define       ISP_CLR_STATS   (ISP_IOC | 7)
-+
-+/*
-+ * Initiate a LIP
-+ */
-+#define       ISP_FC_LIP      (ISP_IOC | 8)
-+
-+/*
-+ * Return the Port Database structure for the named device, or ENODEV if none.
-+ * Caller fills in virtual loopid (0..255), aka 'target'. The driver returns
-+ * ENODEV (if nothing valid there) or the actual loopid (for local loop devices
-+ * only), 24 bit Port ID and Node and Port WWNs.
-+ */
-+struct isp_fc_device {
-+      u_int32_t       loopid; /* 0..255 */
-+      u_int32_t       portid; /* 24 bit Port ID */
-+      u_int64_t       node_wwn;
-+      u_int64_t       port_wwn;
-+};
-+#define       ISP_FC_GETDINFO (ISP_IOC | 9)
-+
-+/*
-+ * Get F/W crash dump
-+ */
-+#define       ISP_GET_FW_CRASH_DUMP   (ISP_IOC | 10)
-+#define       ISP_FORCE_CRASH_DUMP    (ISP_IOC | 11)
-+
-+/*
-+ * Get information about this Host Adapter, including current connection
-+ * topology and capabilities.
-+ */
-+struct isp_hba_device {
-+      u_int32_t
-+                                      : 8,
-+                                      : 4,
-+              fc_speed                : 4,    /* Gbps */
-+                                      : 2,
-+              fc_class2               : 1,
-+              fc_ip_supported         : 1,
-+              fc_scsi_supported       : 1,
-+              fc_topology             : 3,
-+              fc_loopid               : 8;
-+      u_int64_t       nvram_node_wwn;
-+      u_int64_t       nvram_port_wwn;
-+      u_int64_t       active_node_wwn;
-+      u_int64_t       active_port_wwn;
-+};
-+
-+#define       ISP_TOPO_UNKNOWN        0       /* connection topology unknown */
-+#define       ISP_TOPO_FCAL           1       /* private or PL_DA */
-+#define       ISP_TOPO_LPORT          2       /* public loop */
-+#define       ISP_TOPO_NPORT          3       /* N-port */
-+#define       ISP_TOPO_FPORT          4       /* F-port */
-+
-+#define       ISP_FC_GETHINFO         (ISP_IOC|12)
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_linux.c    2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,3015 @@
-+/* @(#)isp_linux.c 1.66 */
-+/*
-+ * Qlogic ISP Host Adapter Common Bus Linux routies
-+ *---------------------------------------
-+ *
-+ * Copyright (c) 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions, and the following disclaimer,
-+ *    without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ * 
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ *
-+ *--------
-+ * Bug fixes from Janice McLaughlin (janus@somemore.com)
-+ * gratefully acknowledged.
-+ *
-+ */
-+
-+#define       ISP_MODULE      1
-+#include "isp_linux.h"
-+#include "linux/smp_lock.h"
-+
-+
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define       scsi_add_timer          _scsi_add_timer
-+#define       scsi_delete_timer       _scsi_delete_timer
-+static INLINE void _scsi_add_timer(Scsi_Cmnd *, int, void ((*)(Scsi_Cmnd *)));
-+static INLINE int _scsi_delete_timer(Scsi_Cmnd *);
-+
-+static INLINE void
-+scsi_add_timer(Scsi_Cmnd *SCset, int timeout, void (*complete)(Scsi_Cmnd *))
-+{
-+    if (SCset->eh_timeout.function != NULL) {
-+      del_timer(&SCset->eh_timeout);
-+    }
-+    SCset->eh_timeout.data = (unsigned long) SCset;
-+    SCset->eh_timeout.expires = jiffies + timeout;
-+    SCset->eh_timeout.function = (void (*)(unsigned long))complete;
-+    add_timer(&SCset->eh_timeout);
-+}
-+static INLINE int
-+scsi_delete_timer(Scsi_Cmnd *SCset)
-+{
-+    if (SCset->eh_timeout.function != NULL) {
-+      del_timer(&SCset->eh_timeout);
-+    }
-+    SCset->eh_timeout.data = 0UL;
-+    SCset->eh_timeout.function = NULL;
-+    return 0;
-+}
-+#else
-+extern void scsi_add_timer(Scsi_Cmnd *, int, void ((*)(Scsi_Cmnd *)));
-+extern int scsi_delete_timer(Scsi_Cmnd *);
-+#endif
-+static int isp_task_thread(void *);
-+
-+struct ispsoftc *isplist = NULL;
-+const char *class3_roles[4] = {
-+    "None", "Target", "Initiator", "Target/Initiator"
-+};
-+int isp_debug = 0;
-+int isp_throttle = 0;
-+int isp_cmd_per_lun = 0;
-+int isp_unit_seed = 0;
-+int isp_disable = 0;
-+int isp_nofwreload = 0;
-+int isp_nonvram = 0;
-+int isp_maxluns = 8;
-+int isp_fcduplex = 0;
-+int isp_nport_only = 0;
-+int isp_loop_only = 0;
-+int isp_deadloop_time = 30;   /* how long to wait before assume loop dead */
-+int isp_xtime = 0;
-+int isp_default_frame_size;
-+int isp_default_exec_throttle;
-+
-+static char *isp_roles;
-+static char *isp_wwpns;
-+static char *isp_wwnns;
-+
-+
-+#ifdef        LINUX_ISP_TARGET_MODE
-+#ifndef       ISP_PARENT_TARGET
-+#define       ISP_PARENT_TARGET       scsi_target_handler
-+#endif
-+extern void ISP_PARENT_TARGET (qact_e, void *);
-+static void isp_taction(qact_e, void *);
-+static INLINE int nolunsenabled(struct ispsoftc *, int);
-+static void isp_target_start_ctio(struct ispsoftc *, tmd_cmd_t *);
-+static int isp_handle_platform_atio(struct ispsoftc *, at_entry_t *);
-+static int isp_handle_platform_atio2(struct ispsoftc *, at2_entry_t *);
-+static int isp_handle_platform_ctio(struct ispsoftc *, void *);
-+static int isp_handle_platform_ctio_fastpost(struct ispsoftc *, u_int32_t);
-+static void isp_target_putback_atio(struct ispsoftc *, tmd_cmd_t *);
-+static void isp_complete_ctio(struct ispsoftc *, tmd_cmd_t *);
-+#endif
-+
-+extern int isplinux_pci_detect(Scsi_Host_Template *);
-+extern void isplinux_pci_release(struct Scsi_Host *);
-+
-+int
-+isplinux_detect(Scsi_Host_Template *tmpt)
-+{
-+    int rval;
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+    extern struct proc_dir_entry proc_scsi_qlc;
-+    tmpt->proc_dir = &proc_scsi_qlc;
-+#else
-+    tmpt->proc_name = "isp";
-+#endif
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+    spin_unlock_irq(&io_request_lock);
-+    rval = isplinux_pci_detect(tmpt);
-+    spin_lock_irq(&io_request_lock);
-+#else
-+    rval = isplinux_pci_detect(tmpt);
-+#endif
-+    return (rval);
-+}
-+
-+/* io_request_lock *not* held here */
-+int
-+isplinux_release(struct Scsi_Host *host)
-+{
-+    struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+#ifdef        ISP_TARGET_MODE
-+    isp_detach_target(isp);
-+#endif
-+    if (isp->isp_osinfo.task_thread) {
-+        SEND_THREAD_EVENT(isp, ISP_THREAD_EXIT, 1);
-+    }
-+    ISP_LOCKU_SOFTC(isp);
-+    isp->isp_role = ISP_ROLE_NONE;
-+    ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+    if (IS_FC(isp)) {
-+      ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
-+      ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
-+      ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
-+      ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
-+      ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
-+    }
-+    isp->dogactive = 0;
-+    del_timer(&isp->isp_osinfo.timer);
-+    DISABLE_INTS(isp);
-+    if (isp->isp_bustype == ISP_BT_PCI) {
-+      isplinux_pci_release(host);
-+    }
-+    ISP_UNLKU_SOFTC(isp);
-+#ifdef        ISP_FW_CRASH_DUMP
-+    if (FCPARAM(isp)->isp_dump_data) {
-+      size_t amt;
-+      if (IS_2200(isp))
-+          amt = QLA2200_RISC_IMAGE_DUMP_SIZE;
-+      else
-+          amt = QLA2200_RISC_IMAGE_DUMP_SIZE;
-+      isp_prt(isp, ISP_LOGCONFIG, "freeing crash dump area");
-+      isp_kfree(FCPARAM(isp)->isp_dump_data, amt);
-+      FCPARAM(isp)->isp_dump_data = 0;
-+    }
-+#if defined(CONFIG_PROC_FS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    /*
-+     * Undo any PROCFS stuff
-+     */
-+    isplinux_undo_proc(isp);
-+#endif
-+    return (1);
-+#endif
-+}
-+
-+const char *
-+isplinux_info(struct Scsi_Host *host)
-+{
-+    struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+    if (IS_FC(isp)) {
-+      static char *foo = "Driver for a Qlogic ISP 2X00 Host Adapter";
-+      foo[26] = '0';
-+      foo[27] = '0';
-+      if (isp->isp_type == ISP_HA_FC_2100)
-+          foo[25] = '1';
-+      else if (isp->isp_type == ISP_HA_FC_2200)
-+          foo[25] = '2';
-+      else if (isp->isp_type == ISP_HA_FC_2300)
-+          foo[25] = '3';
-+      else if (isp->isp_type == ISP_HA_FC_2312) {
-+          foo[25] = '3';
-+          foo[26] = '1';
-+          foo[27] = '2';
-+      }
-+      return (foo);
-+    } else if (IS_1240(isp)) {
-+      return ("Driver for a Qlogic ISP 1240 Host Adapter");
-+    } else if (IS_1080(isp)) {
-+      return ("Driver for a Qlogic ISP 1080 Host Adapter");
-+    } else if (IS_1280(isp)) {
-+      return ("Driver for a Qlogic ISP 1280 Host Adapter");
-+    } else if (IS_10160(isp)) {
-+      return ("Driver for a Qlogic ISP 10160 Host Adapter");
-+    } else if (IS_12160(isp)) {
-+      return ("Driver for a Qlogic ISP 12160 Host Adapter");
-+    } else {
-+      return ("Driver for a Qlogic ISP 1020/1040 Host Adapter");
-+    }
-+}
-+
-+static INLINE void
-+isplinux_append_to_waitq(struct ispsoftc *isp, Scsi_Cmnd *Cmnd)
-+{
-+    /*
-+     * If we're a fibre channel card and we consider the loop to be
-+     * down, we just finish the command here and now.
-+     */
-+    if (IS_FC(isp) && isp->isp_deadloop) {
-+      XS_INITERR(Cmnd);
-+      XS_SETERR(Cmnd, DID_NO_CONNECT);
-+
-+      /*
-+       * Add back a timer else scsi_done drops this on the floor.
-+       */
-+      scsi_add_timer(Cmnd, Cmnd->timeout_per_command, Cmnd->done);
-+      isp_prt(isp, ISP_LOGDEBUG0, "giving up on target %d", XS_TGT(Cmnd));
-+      ISP_UNLK_SOFTC(isp);
-+      ISP_LOCK_SCSI_DONE(isp);
-+      (*Cmnd->scsi_done)(Cmnd);
-+      ISP_UNLK_SCSI_DONE(isp);
-+      ISP_LOCK_SOFTC(isp);
-+      return;
-+    }
-+
-+    isp->isp_osinfo.wqcnt++;
-+    if (isp->isp_osinfo.wqhiwater < isp->isp_osinfo.wqcnt)
-+      isp->isp_osinfo.wqhiwater = isp->isp_osinfo.wqcnt;
-+    if (isp->isp_osinfo.wqnext == NULL) {
-+      isp->isp_osinfo.wqtail = isp->isp_osinfo.wqnext = Cmnd;
-+    } else {
-+      isp->isp_osinfo.wqtail->host_scribble = (unsigned char *) Cmnd;
-+      isp->isp_osinfo.wqtail = Cmnd;
-+    }
-+    Cmnd->host_scribble = NULL;
-+
-+
-+    /*
-+     * Stop the clock for this command.
-+     */
-+    (void) scsi_delete_timer(Cmnd);
-+}
-+
-+static INLINE void
-+isplinux_insert_head_waitq(struct ispsoftc *isp, Scsi_Cmnd *Cmnd)
-+{
-+    isp->isp_osinfo.wqcnt++;
-+    if (isp->isp_osinfo.wqnext == NULL) {
-+      isp->isp_osinfo.wqtail = isp->isp_osinfo.wqnext = Cmnd;
-+      Cmnd->host_scribble = NULL;
-+    } else {
-+      Cmnd->host_scribble = (unsigned char *) isp->isp_osinfo.wqnext;
-+      isp->isp_osinfo.wqnext = Cmnd;
-+    }
-+}
-+
-+static INLINE Scsi_Cmnd *
-+isp_remove_from_waitq(Scsi_Cmnd *Cmnd)
-+{
-+    struct ispsoftc *isp;
-+    Scsi_Cmnd *f;
-+    if (Cmnd == NULL)
-+      return (Cmnd);
-+    isp = XS_ISP(Cmnd);
-+    if ((f = isp->isp_osinfo.wqnext) == Cmnd) {
-+      isp->isp_osinfo.wqnext = (Scsi_Cmnd *) Cmnd->host_scribble;
-+    } else {
-+      Scsi_Cmnd *b = f;
-+      while (f) {
-+          f = (Scsi_Cmnd *) b->host_scribble;
-+          if (f == Cmnd) {
-+              b->host_scribble = f->host_scribble;
-+              if (isp->isp_osinfo.wqtail == Cmnd)
-+                   isp->isp_osinfo.wqtail = b;
-+              break;
-+          }
-+          b = f;
-+      }
-+    }
-+    if (f) {
-+      f->host_scribble = NULL;
-+      isp->isp_osinfo.wqcnt -= 1;
-+    }
-+    return (f);
-+}
-+
-+static INLINE void
-+isplinux_runwaitq(struct ispsoftc *isp)
-+{
-+    Scsi_Cmnd *f;
-+    if (isp->isp_blocked || isp->isp_draining)
-+      return;
-+    while ((f = isp_remove_from_waitq(isp->isp_osinfo.wqnext)) != NULL) {
-+      int result = isp_start(f);
-+      /*
-+       * Restart the timer for this command if it is queued or completing.
-+       */
-+      if (result == CMD_QUEUED || result == CMD_COMPLETE) {
-+          int ntime = f->timeout_per_command * (isp_xtime? isp_xtime : 1);
-+          scsi_add_timer(f, ntime, f->done);
-+      }
-+      if (result == CMD_QUEUED) {
-+          if (isp->isp_osinfo.hiwater < isp->isp_nactive)
-+              isp->isp_osinfo.hiwater = isp->isp_nactive;
-+          continue;
-+      }
-+
-+      /*
-+       * If we cannot start a command on a fibre channel card, it means
-+       * that loop state isn't ready for us to do so. Activate the FC
-+       * thread to rediscover loop and fabric residency- but not if
-+       * we consider the loop to be dead. If the loop is considered dead,
-+       * we wait until a PDB Changed after a Loop UP activates the FC
-+       * thread.
-+       */
-+      if (result == CMD_RQLATER && IS_FC(isp) && isp->isp_deadloop == 0) {
-+          SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+      }
-+
-+      /*
-+       * Put the command back on the wait queue. Don't change any
-+       * timer parameters for it because they were established
-+       * when we originally put the command on the waitq in the first
-+       * place.
-+       */
-+      if (result == CMD_EAGAIN || result == CMD_RQLATER) {
-+          isplinux_insert_head_waitq(isp, f);
-+          break;
-+      }
-+      if (result == CMD_COMPLETE) {
-+          isp_done(f);
-+      } else {
-+          panic("isplinux_runwaitq: result %d", result);
-+      }
-+    }
-+}
-+
-+static INLINE void
-+isplinux_flushwaitq(struct ispsoftc *isp)
-+{
-+    Scsi_Cmnd *Cmnd, *Ncmnd;
-+   
-+    if ((Cmnd = isp->isp_osinfo.wqnext) == NULL) {
-+      return;
-+    }
-+    isp->isp_osinfo.wqnext = isp->isp_osinfo.wqtail = NULL;
-+    isp->isp_osinfo.wqcnt = 0;
-+    ISP_UNLK_SOFTC(isp);
-+    do {
-+        Ncmnd = (Scsi_Cmnd *) Cmnd->host_scribble;
-+        Cmnd->host_scribble = NULL;
-+      XS_INITERR(Cmnd);
-+      XS_SETERR(Cmnd, DID_NO_CONNECT);
-+      /*
-+       * Add back a timer else scsi_done drops this on the floor.
-+       */
-+      scsi_add_timer(Cmnd, Cmnd->timeout_per_command, Cmnd->done);
-+      ISP_LOCK_SCSI_DONE(isp);
-+      (*Cmnd->scsi_done)(Cmnd);
-+      ISP_UNLK_SCSI_DONE(isp);
-+    } while ((Cmnd = Ncmnd) != NULL);
-+    ISP_LOCK_SOFTC(isp);
-+}
-+
-+static INLINE Scsi_Cmnd *
-+isplinux_remove_from_doneq(Scsi_Cmnd *Cmnd)
-+{
-+    Scsi_Cmnd *f;
-+    struct ispsoftc *isp;
-+
-+    if (Cmnd == NULL)
-+      return (NULL);
-+    isp = XS_ISP(Cmnd);
-+    if (isp->isp_osinfo.dqnext == NULL)
-+      return (NULL);
-+    if ((f = isp->isp_osinfo.dqnext) == Cmnd) {
-+      isp->isp_osinfo.dqnext = (Scsi_Cmnd *) Cmnd->host_scribble;
-+    } else {
-+      Scsi_Cmnd *b = f;
-+      while (f) {
-+          f = (Scsi_Cmnd *) b->host_scribble;
-+          if (f == Cmnd) {
-+              b->host_scribble = f->host_scribble;
-+              if (isp->isp_osinfo.dqtail == Cmnd)
-+                   isp->isp_osinfo.dqtail = b;
-+              break;
-+          }
-+          b = f;
-+      }
-+    }
-+    if (f) {
-+      f->host_scribble = NULL;
-+    }
-+    return (f);
-+}
-+
-+int
-+isplinux_queuecommand(Scsi_Cmnd *Cmnd, void (*donecmd)(Scsi_Cmnd *))
-+{
-+    struct Scsi_Host *host = XS_HOST(Cmnd);
-+    struct ispsoftc *isp = (struct ispsoftc *) (host->hostdata);
-+    int result;
-+
-+
-+    Cmnd->scsi_done = donecmd;
-+    Cmnd->sense_buffer[0] = 0;
-+    if (isp_xtime) {
-+      Cmnd->timeout *= isp_xtime;
-+    }
-+
-+    ISP_DRIVER_ENTRY_LOCK(isp);
-+    ISP_LOCK_SOFTC(isp);
-+
-+    /*
-+     * First off, see whether we need to (re)init the HBA.
-+     * If we need to and fail to, pretend that this was a selection timeout.
-+     */
-+    if (isp->isp_state != ISP_RUNSTATE) {
-+      if (isp->isp_role != ISP_ROLE_NONE) {
-+          isplinux_reinit(isp);
-+      }
-+      if (isp->isp_state != ISP_RUNSTATE) {
-+          ISP_UNLK_SOFTC(isp);
-+          ISP_DRIVER_EXIT_LOCK(isp);
-+          XS_INITERR(Cmnd);
-+          XS_SETERR(Cmnd, DID_NO_CONNECT);
-+          (*Cmnd->scsi_done)(Cmnd);
-+          return (0);
-+      }
-+    }
-+
-+
-+   /*
-+    * See if we're currently blocked. If we are, just queue up the command
-+    * to be run later.
-+    */
-+   if (isp->isp_blocked || isp->isp_draining) {
-+      isplinux_append_to_waitq(isp, Cmnd);
-+      ISP_UNLK_SOFTC(isp);
-+      ISP_DRIVER_EXIT_LOCK(isp);
-+      return (0);
-+   }
-+
-+   /*
-+    * Next see if we have any stored up commands to run. If so, run them.
-+    * If we get back from this with commands still ready to run, put the
-+    * current command at the tail of waiting commands to be run later.
-+    */
-+
-+    isplinux_runwaitq(isp);
-+    if (isp->isp_osinfo.wqnext) {
-+      isplinux_append_to_waitq(isp, Cmnd);
-+      ISP_UNLK_SOFTC(isp);
-+      ISP_DRIVER_EXIT_LOCK(isp);
-+      return (0);
-+    }
-+
-+   /*
-+    * Finally, try and run this command.
-+    */
-+
-+    result = isp_start(Cmnd);
-+    if (result == CMD_QUEUED) {
-+      if (isp->isp_osinfo.hiwater < isp->isp_nactive)
-+          isp->isp_osinfo.hiwater = isp->isp_nactive;
-+      result = 0;
-+      if (isp_xtime) {
-+              int ntime = isp_xtime * Cmnd->timeout_per_command;
-+              scsi_delete_timer(Cmnd);
-+              scsi_add_timer(Cmnd, ntime, Cmnd->done);
-+      }
-+    } else if (result == CMD_EAGAIN) {
-+      /*
-+       * We ran out of request queue space (or could not
-+       * get DMA resources). Tell the upper layer to try
-+       * later.
-+       */
-+      result = 1;
-+    } else if (result == CMD_RQLATER) {
-+      /*
-+       * Temporarily hold off on this one.
-+       * Typically this means for fibre channel
-+       * that the loop is down or we're processing
-+       * some other change (e.g., fabric membership
-+       * change)
-+       */
-+      isplinux_append_to_waitq(isp, Cmnd);
-+      if (IS_FC(isp) && isp->isp_deadloop == 0) {
-+          SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+      }
-+      result = 0;
-+    } else if (result == CMD_COMPLETE) {
-+      result = -1;
-+    } else {
-+      panic("unknown return code %d from isp_start", result);
-+    }
-+    ISP_UNLK_SOFTC(isp);
-+    ISP_DRIVER_EXIT_LOCK(isp);
-+    if (result == -1) {
-+      Cmnd->result &= ~0xff;
-+      Cmnd->result |= Cmnd->SCp.Status;
-+        Cmnd->host_scribble = NULL;
-+      (*Cmnd->scsi_done)(Cmnd);
-+      result = 0;
-+    }
-+    return (result);
-+}
-+
-+static INLINE void isplinux_scsi_probe_done(Scsi_Cmnd *);
-+
-+static INLINE void
-+isplinux_scsi_probe_done(Scsi_Cmnd *Cmnd)
-+{
-+    struct ispsoftc *isp = XS_ISP(Cmnd);
-+
-+    /*
-+     * If we haven't seen this target yet, check the command result. If
-+     * it was an inquiry and it succeeded okay, then we can update our
-+     * notions about this target's capabilities.
-+     *
-+     * If the command did *not* succeed, we also update our notions about
-+     * this target's capabilities (pessimistically) - it's probably not there.
-+     * All of this so we can know when we're done so we stop wasting cycles
-+     * seeing whether we can enable sync mode or not.
-+     */
-+
-+    if (isp->isp_psco[XS_CHANNEL(Cmnd)][XS_TGT(Cmnd)] == 0) {
-+      int i, b;
-+      caddr_t iqd;
-+      sdparam *sdp = (sdparam *) isp->isp_param;
-+
-+      sdp += XS_CHANNEL(Cmnd);
-+      if (Cmnd->cmnd[0] == 0x12 && host_byte(Cmnd->result) == DID_OK) {
-+          if (Cmnd->use_sg == 0) {
-+              iqd = (caddr_t) Cmnd->buffer;
-+          } else {
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+              iqd = ((struct scatterlist *) Cmnd->request_buffer)->address;
-+#else
-+              struct scatterlist *sg;
-+              sg = (struct scatterlist *) Cmnd->request_buffer;
-+              iqd = page_address(sg->page) + sg->offset;
-+#endif
-+          }
-+          sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags &=
-+              ~(DPARM_TQING|DPARM_SYNC|DPARM_WIDE);
-+          if (iqd[7] & 0x2) {
-+              sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags |= DPARM_TQING;
-+          }
-+          if (iqd[7] & 0x10) {
-+              sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags |= DPARM_SYNC;
-+          }
-+          if (iqd[7] & 0x20) {
-+              sdp->isp_devparam[XS_TGT(Cmnd)].goal_flags |= DPARM_WIDE;
-+          }
-+          sdp->isp_devparam[XS_TGT(Cmnd)].dev_update = 1;
-+          isp->isp_psco[XS_CHANNEL(Cmnd)][XS_TGT(Cmnd)] = 1;
-+      } else if (host_byte(Cmnd->result) != DID_OK) {
-+          isp->isp_psco[XS_CHANNEL(Cmnd)][XS_TGT(Cmnd)] = 1;
-+      }
-+
-+      isp->isp_dutydone = 1;
-+      for (b = 0; b < (IS_DUALBUS(isp)?2 : 1) && isp->isp_dutydone; b++) {
-+          for (i = 0; i < MAX_TARGETS; i++) {
-+              if (i != sdp->isp_initiator_id) {
-+                  if (isp->isp_psco[b][i] == 0) {
-+                      isp->isp_dutydone = 0;
-+                      break;
-+                  }
-+              }
-+          }
-+      }
-+
-+      /*
-+       * Have we scanned all busses and all targets? You only get
-+       * one chance (per reset) to see what devices on this bus have
-+       * to offer.
-+       */
-+      if (isp->isp_dutydone) {
-+          for (b = 0; b < (IS_DUALBUS(isp)?2 : 1) && isp->isp_dutydone; b++) {
-+              for (i = 0; i < MAX_TARGETS; i++) {
-+                  isp->isp_psco[b][i] = 0;
-+              }
-+              isp->isp_update |= (1 << b);
-+          }
-+      }           
-+    }
-+}
-+
-+void
-+isp_done(Scsi_Cmnd *Cmnd)
-+{
-+    struct ispsoftc *isp = XS_ISP(Cmnd);
-+
-+    if (IS_SCSI(isp) && isp->isp_dutydone == 0)  {
-+      isplinux_scsi_probe_done(Cmnd);
-+    }
-+
-+    Cmnd->result &= ~0xff;
-+    Cmnd->result |= Cmnd->SCp.Status;
-+
-+    if (Cmnd->SCp.Status != GOOD) {
-+      isp_prt(isp, ISP_LOGDEBUG0, "%d.%d.%d: cmd finishes with status 0x%x",
-+          XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd), Cmnd->SCp.Status);
-+    }
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,99)
-+    Cmnd->resid = XS_RESID(Cmnd);
-+#endif
-+    /*
-+     * Queue command on completion queue.
-+     */
-+    if (isp->isp_osinfo.dqnext == NULL) {
-+      isp->isp_osinfo.dqnext = Cmnd;
-+    } else {
-+      isp->isp_osinfo.dqtail->host_scribble = (unsigned char *) Cmnd;
-+    }
-+    isp->isp_osinfo.dqtail = Cmnd;
-+    Cmnd->host_scribble = NULL;
-+}
-+
-+/*
-+ * Error handling routines
-+ */
-+
-+int
-+isplinux_abort(Scsi_Cmnd *Cmnd)
-+{
-+    struct ispsoftc *isp;
-+    u_int16_t handle;
-+
-+    if (Cmnd == NULL || XS_HOST(Cmnd) == NULL) {
-+      return (FAILED);
-+    }
-+
-+    isp = XS_ISP(Cmnd);
-+    if (Cmnd->serial_number != Cmnd->serial_number_at_timeout) {
-+      isp_prt(isp, ISP_LOGWARN, "isplinux_abort: serial number mismatch");
-+      return (FAILED);
-+    }
-+    ISP_DRIVER_ENTRY_LOCK(isp);
-+    ISP_LOCKU_SOFTC(isp);
-+    handle = isp_find_handle(isp, Cmnd);
-+    if (handle == 0) {
-+      int wqfnd = 0;
-+      Scsi_Cmnd *NewCmnd = isp_remove_from_waitq(Cmnd);
-+      if (NewCmnd == NULL) {
-+              NewCmnd = isplinux_remove_from_doneq(Cmnd);
-+              wqfnd++;
-+      }
-+      ISP_UNLKU_SOFTC(isp);
-+      isp_prt(isp, ISP_LOGINFO,
-+          "isplinux_abort: found %d:%p for non-running cmd for %d.%d.%d",
-+          wqfnd, NewCmnd, XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd));
-+      if (NewCmnd == NULL) {
-+          ISP_DRIVER_EXIT_LOCK(isp);
-+          return (FAILED);
-+      }
-+    } else {
-+      if (isp_control(isp, ISPCTL_ABORT_CMD, Cmnd)) {
-+          ISP_UNLKU_SOFTC(isp);
-+          ISP_DRIVER_EXIT_LOCK(isp);
-+          return (FAILED);
-+      }
-+      if (isp->isp_nactive > 0)
-+          isp->isp_nactive--;
-+      isp_destroy_handle(isp, handle);
-+      ISP_UNLKU_SOFTC(isp);
-+      ISP_DRIVER_EXIT_LOCK(isp);
-+      isp_prt(isp, ISP_LOGINFO,
-+          "isplinux_abort: aborted running cmd (handle 0x%x) for %d.%d.%d",
-+          handle, XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd));
-+    }
-+    Cmnd->result = DID_ABORT << 16;
-+    (*Cmnd->scsi_done)(Cmnd);
-+    return (SUCCESS);
-+}
-+
-+/*
-+ * XXX: What does the midlayer expect for commands in process?
-+ * XXX: Are we supposed to clean up dead commands ourselves?
-+ */
-+int
-+isplinux_bdr(Scsi_Cmnd *Cmnd)
-+{
-+    struct ispsoftc *isp;
-+    int arg;
-+
-+    if (Cmnd == NULL || XS_HOST(Cmnd) == NULL) {
-+      return (FAILED);
-+    }
-+
-+    isp = XS_ISP(Cmnd);
-+    arg = XS_CHANNEL(Cmnd) << 16 | XS_TGT(Cmnd);
-+    ISP_DRIVER_ENTRY_LOCK(isp);
-+    ISP_LOCKU_SOFTC(isp);
-+    arg = isp_control(isp, ISPCTL_RESET_DEV, &arg);
-+    ISP_UNLKU_SOFTC(isp);
-+    ISP_DRIVER_EXIT_LOCK(isp);
-+    isp_prt(isp, ISP_LOGINFO, "Bus Device Reset %succesfully sent to %d.%d.%d",
-+      arg == 0? "s" : "uns", XS_CHANNEL(Cmnd), XS_TGT(Cmnd), XS_LUN(Cmnd));
-+    return ((arg == 0)? SUCCESS : FAILED);
-+}
-+
-+/*
-+ * XXX: What does the midlayer expect for commands in process?
-+ */
-+int
-+isplinux_sreset(Scsi_Cmnd *Cmnd)
-+{
-+    struct ispsoftc *isp;
-+    int arg;
-+
-+    if (Cmnd == NULL || XS_HOST(Cmnd) == NULL)
-+      return (FAILED);
-+
-+    isp = XS_ISP(Cmnd);
-+    arg = XS_CHANNEL(Cmnd);
-+    ISP_DRIVER_ENTRY_LOCK(isp);
-+    ISP_LOCKU_SOFTC(isp);
-+    arg = isp_control(isp, ISPCTL_RESET_BUS, &arg);
-+    ISP_UNLKU_SOFTC(isp);
-+    ISP_DRIVER_EXIT_LOCK(isp);
-+    isp_prt(isp, ISP_LOGINFO, "SCSI Bus Reset on Channel %d %succesful",
-+      XS_CHANNEL(Cmnd), arg == 0? "s" : "uns");
-+    return ((arg == 0)? SUCCESS : FAILED);
-+}
-+
-+/*
-+ * We call completion on any commands owned here-
-+ * except the one we were called with.
-+ */
-+int
-+isplinux_hreset(Scsi_Cmnd *Cmnd)
-+{
-+    Scsi_Cmnd *tmp, *dq, *wq, *xqf, *xql;
-+    struct ispsoftc *isp;
-+    u_int16_t handle;
-+
-+    if (Cmnd == NULL || XS_HOST(Cmnd) == NULL)
-+      return (FAILED);
-+
-+    isp = XS_ISP(Cmnd);
-+
-+    isp_prt(isp, ISP_LOGINFO, "Resetting Host Adapter");
-+
-+    ISP_DRIVER_ENTRY_LOCK(isp);
-+    ISP_LOCKU_SOFTC(isp);
-+
-+    /*
-+     * Save pending, running, and completed commands.
-+     */
-+    xql = xqf = NULL;
-+    for (handle = 1; handle <= isp->isp_maxcmds; handle++) {
-+      tmp = isp_find_xs(isp, handle);
-+      if (tmp == NULL) {
-+          continue;
-+        }
-+      isp_destroy_handle(isp, handle);
-+      tmp->host_scribble = NULL;
-+      if (xqf) {
-+          xql->host_scribble = (unsigned char *) tmp;
-+      } else {
-+          xqf = xql = tmp;
-+      }
-+        xql = tmp;
-+    }
-+    dq = isp->isp_osinfo.dqnext;
-+    isp->isp_osinfo.dqnext = NULL;
-+    wq = isp->isp_osinfo.wqnext;
-+    isp->isp_osinfo.wqnext = NULL;
-+    isp->isp_nactive = 0;
-+
-+    isplinux_reinit(isp);
-+
-+    ISP_UNLKU_SOFTC(isp);
-+    ISP_DRIVER_EXIT_LOCK(isp);
-+
-+    /*
-+     * Call completion on the detritus, skipping the one we were called with.
-+     */
-+    while ((tmp = xqf) != NULL) {
-+      xqf = (Scsi_Cmnd *) tmp->host_scribble;
-+      tmp->host_scribble = NULL;
-+      if (tmp == Cmnd)
-+          continue;
-+      tmp->result = DID_RESET << 16;
-+      /*
-+       * Get around silliness in midlayer.
-+       */
-+      tmp->flags |= IS_RESETTING;
-+      if (tmp->scsi_done)
-+          (*tmp->scsi_done)(tmp);
-+    }
-+    while ((tmp = wq) != NULL) {
-+      wq = (Scsi_Cmnd *) tmp->host_scribble;
-+      tmp->host_scribble = NULL;
-+      if (tmp == Cmnd)
-+          continue;
-+      tmp->result = DID_RESET << 16;
-+      /*
-+       * Get around silliness in midlayer.
-+       */
-+      tmp->flags |= IS_RESETTING;
-+      if (tmp->scsi_done)
-+          (*tmp->scsi_done)(tmp);
-+    }
-+    while ((tmp = dq) != NULL) {
-+      dq = (Scsi_Cmnd *) tmp->host_scribble;
-+      tmp->host_scribble = NULL;
-+      if (tmp == Cmnd)
-+          continue;
-+      tmp->result = DID_RESET << 16;
-+      /*
-+       * Get around silliness in midlayer.
-+       */
-+      tmp->flags |= IS_RESETTING;
-+      if (tmp->scsi_done)
-+          (*tmp->scsi_done)(tmp);
-+    }
-+    Cmnd->result = DID_RESET << 16;
-+    return (SUCCESS);
-+}
-+
-+
-+#ifdef        LINUX_ISP_TARGET_MODE
-+void
-+isp_attach_target(struct ispsoftc *isp)
-+{
-+    int i;
-+    hba_register_t hba;
-+
-+    isp->isp_osinfo.pool = isp_kzalloc(NTGT_CMDS * TMD_SIZE, GFP_KERNEL);
-+    if (isp->isp_osinfo.pool == NULL) {
-+      isp_prt(isp, ISP_LOGERR, "cannot allocate TMD structures");
-+      return;
-+    }
-+    for (i = 0; i < NTGT_CMDS-1; i++) {
-+      isp->isp_osinfo.pool[i].cd_private = &isp->isp_osinfo.pool[i+1];
-+    }
-+    isp->isp_osinfo.pending_t = NULL;
-+    isp->isp_osinfo.tfreelist = isp->isp_osinfo.pool;
-+
-+    hba.r_identity = isp;
-+    sprintf(hba.r_name, "isp");
-+    hba.r_inst = isp->isp_unit;
-+    hba.r_version = QR_VERSION;
-+    hba.r_action = (void (*)(tact_e, void *))isp_taction;
-+    if (IS_FC(isp)) {
-+      hba.r_type = R_FC;
-+    } else{
-+      hba.r_type = R_SCSI;
-+    }
-+    ISP_UNLKU_SOFTC(isp);
-+    ISP_PARENT_TARGET(QOUT_HBA_REG, &hba);
-+    ISP_LOCKU_SOFTC(isp);
-+}
-+
-+void
-+isp_detach_target(struct ispsoftc *isp)
-+{
-+    hba_register_t hba;
-+
-+    hba.r_identity = isp;
-+    sprintf(hba.r_name, "isp");
-+    hba.r_inst = isp->isp_unit;
-+    hba.r_version = QR_VERSION;
-+    hba.r_action = (void (*)(tact_e, void *))isp_taction;
-+    if (IS_FC(isp)) {
-+      hba.r_type = R_FC;
-+    } else{
-+      hba.r_type = R_SCSI;
-+    }
-+    ISP_PARENT_TARGET(QOUT_HBA_UNREG, &hba);
-+    if (isp->isp_osinfo.pool) {
-+      isp_kfree(isp->isp_osinfo.pool, NTGT_CMDS * TMD_SIZE);
-+      isp->isp_osinfo.pool = 0;
-+    }
-+}
-+
-+static void
-+isp_taction(qact_e action, void *arg)
-+{
-+    tmd_cmd_t *tmd;
-+    struct ispsoftc *isp;
-+
-+    switch (action) {
-+    case QIN_HBA_REG:
-+    {
-+      hba_register_t *hp = (hba_register_t *) arg;
-+      isp = hp->r_identity;
-+      isp_prt(isp, ISP_LOGINFO, "completed target registration");
-+      ISP_LOCK_SOFTC(isp);
-+      isp->isp_osinfo.hcb = 1;
-+      ISP_UNLK_SOFTC(isp);
-+      ISP_PARENT_TARGET(QOUT_HBA_REG, hp);
-+      break;
-+    }
-+    case QIN_ENABLE:
-+    case QIN_DISABLE:
-+    {
-+      enadis_t *ep = arg;
-+      int bus, lun, tgt, chan;
-+
-+      isp = ep->cd_hba;
-+      bus = (int) ep->cd_chan;
-+      lun = (int) ep->cd_lun;
-+      tgt = (int) ep->cd_tgt;
-+      chan = (int) ep->cd_chan;
-+      ep->cd_error = isp_en_dis_lun(isp, (action == QIN_ENABLE)? 1 : chan,
-+          bus, tgt, lun);
-+      ISP_PARENT_TARGET(action, ep);
-+      break;
-+    }
-+    case QIN_TMD_CONT:
-+      tmd = (tmd_cmd_t *) arg;
-+      isp = tmd->cd_hba;
-+      isp_target_start_ctio(isp, tmd);
-+      break;
-+
-+    case QIN_TMD_FIN:
-+      tmd = (tmd_cmd_t *) arg;
-+      isp = tmd->cd_hba;
-+      MEMZERO(tmd, TMD_SIZE);
-+      ISP_LOCK_SOFTC(isp);
-+      tmd->cd_private = isp->isp_osinfo.tfreelist;
-+      isp->isp_osinfo.tfreelist = tmd;
-+      ISP_UNLK_SOFTC(isp);
-+      break;
-+
-+    case QIN_IOCTL:
-+    {
-+      ioctl_cmd_t *ip = arg;
-+      ip->i_errno = ENOTTY;
-+      ISP_PARENT_TARGET(QOUT_IOCTL, ip);
-+      break;
-+    }
-+    case QIN_HBA_UNREG:
-+    {
-+      hba_register_t *hp = (hba_register_t *) arg;
-+      isp = hp->r_identity;
-+      isp->isp_osinfo.hcb = 0;
-+      ISP_PARENT_TARGET(QOUT_HBA_REG, hp);
-+      break;
-+    }
-+    default:
-+      break;
-+   }
-+}
-+
-+static INLINE int
-+nolunsenabled(struct ispsoftc *isp, int port)
-+{
-+    int i, wbase, wend;
-+
-+    if (IS_FC(isp)) {
-+      wbase = 0;
-+      wend = TM_MAX_LUN_FC >> 5;
-+    } else {
-+      if (port) {
-+              wend = TM_MAX_LUN_FC >> 5;
-+              wbase = wend >> 1;
-+      } else {
-+              wend = (TM_MAX_LUN_FC >> 5) >> 1;
-+              wbase = 0;
-+      }
-+    }
-+    for (i = wbase; i < wend; i++) {
-+      if (isp->isp_osinfo.lunbmap[i]) {
-+          return (0);
-+      }
-+    }
-+    return (1);
-+}
-+
-+
-+
-+static void
-+isp_target_start_ctio(struct ispsoftc *isp, tmd_cmd_t *tmd)
-+{
-+    void *qe;
-+    u_int16_t *hp, save_handle;
-+    u_int32_t *rp;
-+    u_int16_t nxti, optr;
-+    u_int8_t local[QENTRY_LEN];
-+
-+    /*
-+     * If the transfer length is zero, we have to be sending status.
-+     * If we're sending data, we have to have one and only one data
-+     * direction set.
-+     */
-+    if (tmd->cd_xfrlen == 0) {
-+      if ((tmd->cd_hflags & CDFH_STSVALID) == 0) {
-+          isp_prt(isp, ISP_LOGERR, "CTIO, no data, and no status is wrong");
-+          tmd->cd_error = -EINVAL;
-+          tmd->cd_lflags |= CDFL_ERROR;
-+          return;
-+      }
-+    } else {
-+      if ((tmd->cd_hflags & CDFH_DATA_MASK) == 0) {
-+          isp_prt(isp, ISP_LOGERR, "data CTIO with no direction is wrong");
-+          tmd->cd_error = -EINVAL;
-+          tmd->cd_lflags |= CDFL_ERROR;
-+          return;
-+      }
-+      if ((tmd->cd_hflags & CDFH_DATA_MASK) == CDFH_DATA_MASK) {
-+          isp_prt(isp, ISP_LOGERR, "data CTIO with both directions is wrong");
-+          tmd->cd_error = -EINVAL;
-+          tmd->cd_lflags |= CDFL_ERROR;
-+          return;
-+      }
-+    }
-+    tmd->cd_lflags &= ~CDFL_ERROR;
-+    MEMZERO(local, QENTRY_LEN);
-+
-+    ISP_LOCK_SOFTC(isp);
-+    if (isp_getrqentry(isp, &nxti, &optr, &qe)) {
-+      isp_prt(isp, ISP_LOGWARN,
-+          "isp_target_start_ctio: request queue overflow");
-+      tmd->cd_error = -ENOMEM;
-+      tmd->cd_lflags |= CDFL_ERROR;
-+      ISP_UNLK_SOFTC(isp);
-+      return;
-+    }
-+
-+    /*
-+     * We're either moving data or completing a command here (or both).
-+     */
-+
-+    if (IS_FC(isp)) {
-+      ct2_entry_t *cto = (ct2_entry_t *) local;
-+      u_int16_t *ssptr = NULL;
-+
-+      cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2;
-+      cto->ct_header.rqs_entry_count = 1;
-+      cto->ct_iid = tmd->cd_iid;
-+      if ((FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) == 0)
-+              cto->ct_lun = tmd->cd_lun;
-+      else
-+              cto->ct_lun = 0;
-+      cto->ct_rxid = tmd->cd_tagval;
-+      if (cto->ct_rxid == 0) {
-+          isp_prt(isp, ISP_LOGERR, "a tagval of zero is not acceptable");
-+          tmd->cd_error = -EINVAL;
-+          tmd->cd_lflags |= CDFL_ERROR;
-+          ISP_UNLK_SOFTC(isp);
-+          return;
-+      }
-+      cto->ct_flags = CT2_FASTPOST;
-+
-+      if (tmd->cd_xfrlen == 0) {
-+          cto->ct_flags |= CT2_FLAG_MODE1 | CT2_NO_DATA | CT2_SENDSTATUS;
-+          ssptr = &cto->rsp.m1.ct_scsi_status;
-+          *ssptr = tmd->cd_scsi_status;
-+          if ((tmd->cd_hflags & CDFH_SNSVALID) != 0) {
-+              MEMCPY(cto->rsp.m1.ct_resp, tmd->cd_sense, QLTM_SENSELEN);
-+              cto->rsp.m1.ct_senselen = QLTM_SENSELEN;
-+              cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
-+          }
-+      } else {
-+          cto->ct_flags |= CT2_FLAG_MODE0;
-+          if (tmd->cd_hflags & CDFH_DATA_IN) {
-+              cto->ct_flags |= CT2_DATA_IN;
-+          } else {
-+              cto->ct_flags |= CT2_DATA_OUT;
-+          }
-+          if (tmd->cd_hflags & CDFH_STSVALID) {
-+              ssptr = &cto->rsp.m0.ct_scsi_status;
-+              cto->ct_flags |= CT2_SENDSTATUS;
-+              cto->rsp.m0.ct_scsi_status = tmd->cd_scsi_status;
-+              /*
-+               * It will be up to the low level mapping routine
-+               * to check for sense data.
-+               */
-+          }
-+          /*
-+           * We assume we'll transfer what we say we'll transfer.
-+           * It should get added back in if we fail.
-+           */
-+          tmd->cd_resid -= tmd->cd_xfrlen;
-+      }
-+
-+      if (ssptr && tmd->cd_resid) {
-+          cto->ct_resid = tmd->cd_resid;
-+          *ssptr |= CT2_DATA_UNDER;
-+      } else {
-+          cto->ct_resid = 0;
-+      }
-+      isp_prt(isp, ISP_LOGTDEBUG0,
-+          "CTIO2[%x] ssts %x flags %x resid %d",
-+          cto->ct_rxid, tmd->cd_scsi_status, cto->ct_flags, cto->ct_resid);
-+      hp = &cto->ct_syshandle;
-+      rp = &cto->ct_resid;
-+      if (cto->ct_flags & CT2_SENDSTATUS) {
-+          cto->ct_flags |= CT2_CCINCR;
-+      }
-+    } else {
-+      ct_entry_t *cto = (ct_entry_t *) local;
-+
-+      cto->ct_header.rqs_entry_type = RQSTYPE_CTIO;
-+      cto->ct_header.rqs_entry_count = 1;
-+      cto->ct_iid = tmd->cd_iid;
-+      cto->ct_tgt = tmd->cd_tgt;
-+      cto->ct_lun = tmd->cd_lun;
-+      cto->ct_flags = 0;
-+      cto->ct_fwhandle = AT_GET_HANDLE(tmd->cd_tagval);
-+      if (AT_HAS_TAG(tmd->cd_tagval)) {
-+          cto->ct_tag_val = AT_GET_TAG(tmd->cd_tagval);
-+          cto->ct_flags |= CT_TQAE;
-+      }
-+      if (tmd->cd_lflags & CDFL_NODISC) {
-+          cto->ct_flags |= CT_NODISC;
-+      }
-+      if (tmd->cd_xfrlen == 0) {
-+          cto->ct_flags |= CT_NO_DATA | CT_SENDSTATUS;
-+          cto->ct_scsi_status = tmd->cd_scsi_status;
-+          cto->ct_resid = 0;
-+      } else {
-+          if (tmd->cd_hflags & CDFH_STSVALID) {
-+              cto->ct_flags |= CT_SENDSTATUS;
-+          }
-+          if (tmd->cd_hflags & CDFH_DATA_IN) {
-+              cto->ct_flags |= CT_DATA_IN;
-+          } else {
-+              cto->ct_flags |= CT_DATA_OUT;
-+          }
-+          /*
-+           * We assume we'll transfer what we say we'll transfer.
-+           * Otherwise, the command is dead.
-+           */
-+          tmd->cd_resid -= tmd->cd_xfrlen;
-+          if (tmd->cd_hflags & CDFH_STSVALID) {
-+              cto->ct_resid = tmd->cd_resid;
-+          }
-+      }
-+      isp_prt(isp, ISP_LOGTDEBUG0, "CTIO[%x] ssts %x resid %d cd_hflags %x",
-+          AT_GET_HANDLE(tmd->cd_tagval), tmd->cd_scsi_status, tmd->cd_resid,
-+          tmd->cd_hflags);
-+      hp = &cto->ct_syshandle;
-+      rp = &cto->ct_resid;
-+      if (cto->ct_flags & CT_SENDSTATUS) {
-+          cto->ct_flags |= CT_CCINCR;
-+      }
-+    }
-+
-+    if (isp_save_xs(isp, (XS_T *)tmd, hp)) {
-+      isp_prt(isp, ISP_LOGERR, "isp_target_start_ctio: No XFLIST pointers");
-+      tmd->cd_error = -ENOMEM;
-+      tmd->cd_lflags |= CDFL_ERROR;
-+      ISP_UNLK_SOFTC(isp);
-+      ISP_PARENT_TARGET(QOUT_TMD_DONE, tmd);
-+      return;
-+    }
-+
-+    /*
-+     * Call the dma setup routines for this entry (and any subsequent
-+     * CTIOs) if there's data to move, and then tell the f/w it's got
-+     * new things to play with. As with isp_start's usage of DMA setup,
-+     * any swizzling is done in the machine dependent layer. Because
-+     * of this, we put the request onto the queue area first in native
-+     * format.
-+     */
-+
-+    save_handle = *hp;
-+    switch (ISP_DMASETUP(isp, (XS_T *)tmd, (ispreq_t *) local, &nxti, optr)) {
-+    case CMD_QUEUED:
-+      ISP_ADD_REQUEST(isp, nxti);
-+      ISP_UNLK_SOFTC(isp);
-+      return;
-+
-+    case CMD_EAGAIN:
-+      tmd->cd_error = -ENOMEM;
-+      tmd->cd_lflags |= CDFL_ERROR;
-+      isp_destroy_handle(isp, save_handle);
-+      break;
-+
-+    case CMD_COMPLETE:
-+      tmd->cd_error = *rp;    /* propagated back */
-+      tmd->cd_lflags |= CDFL_ERROR;
-+      isp_destroy_handle(isp, save_handle);
-+      break;
-+
-+    default:
-+      tmd->cd_error = -EFAULT;        /* probably dma mapping failure */
-+      tmd->cd_lflags |= CDFL_ERROR;
-+      isp_destroy_handle(isp, save_handle);
-+      break;
-+    }
-+    ISP_UNLK_SOFTC(isp);
-+    ISP_PARENT_TARGET(QOUT_TMD_DONE, tmd);
-+}
-+
-+/*
-+ * Handle ATIO stuff that the generic code can't.
-+ * This means handling CDBs.
-+ */
-+
-+static int
-+isp_handle_platform_atio(struct ispsoftc *isp, at_entry_t *aep)
-+{
-+    tmd_cmd_t *tmd;
-+    int status;
-+
-+    /*
-+     * The firmware status (except for the QLTM_SVALID bit)
-+     * indicates why this ATIO was sent to us.
-+     *
-+     * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+     *
-+     * If the DISCONNECTS DISABLED bit is set in the flags field,
-+     * we're still connected on the SCSI bus.
-+     */
-+    status = aep->at_status;
-+
-+    if ((status & ~QLTM_SVALID) == AT_PHASE_ERROR) {
-+      /*
-+       * Bus Phase Sequence error. We should have sense data
-+       * suggested by the f/w. I'm not sure quite yet what
-+       * to do about this.
-+       */
-+      isp_prt(isp, ISP_LOGERR, "PHASE ERROR in atio");
-+      isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+      return (0);
-+    }
-+
-+    if ((status & ~QLTM_SVALID) != AT_CDB) {
-+      isp_prt(isp, ISP_LOGERR, "bad atio (0x%x) leaked to platform", status);
-+      isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+      return (0);
-+    }
-+
-+    if ((tmd = isp->isp_osinfo.tfreelist) == NULL) {
-+      /*
-+       * We're out of resources.
-+       *
-+       * Because we can't autofeed sense data back with a command for
-+       * parallel SCSI, we can't give back a CHECK CONDITION. We'll give
-+       * back a QUEUE FULL or BUSY status instead.
-+       */
-+      isp_prt(isp, ISP_LOGERR,
-+          "no ATIOS for lun %d from initiator %d on channel %d",
-+          aep->at_lun, GET_IID_VAL(aep->at_iid), GET_BUS_VAL(aep->at_iid));
-+      if (aep->at_flags & AT_TQAE)
-+          isp_endcmd(isp, aep, SCSI_QFULL, 0);
-+      else
-+          isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+      return (0);
-+    }
-+    isp->isp_osinfo.tfreelist = tmd->cd_private;
-+    tmd->cd_lflags = CDFL_BUSY;
-+    tmd->cd_chan = GET_BUS_VAL(aep->at_iid);
-+    tmd->cd_iid = GET_IID_VAL(aep->at_iid);
-+    tmd->cd_tgt = aep->at_tgt;
-+    tmd->cd_lun = aep->at_lun;
-+    if (aep->at_flags & AT_NODISC) {
-+      tmd->cd_lflags |= CDFL_NODISC;
-+    }
-+    if (status & QLTM_SVALID) {
-+      MEMCPY(tmd->cd_sense, aep->at_sense, QLTM_SENSELEN);
-+      tmd->cd_lflags |= CDFL_SNSVALID;
-+    }
-+    MEMCPY(tmd->cd_cdb, aep->at_cdb, min(TMD_CDBLEN, ATIO_CDBLEN));
-+    AT_MAKE_TAGID(tmd->cd_tagval, aep);
-+    tmd->cd_tagtype = aep->at_tag_type;
-+    tmd->cd_hba = isp;
-+    tmd->cd_data = NULL;
-+    tmd->cd_hflags = 0;
-+    tmd->cd_totlen = tmd->cd_resid = tmd->cd_xfrlen = tmd->cd_error = 0;
-+    tmd->cd_scsi_status = 0;
-+    isp_prt(isp, ISP_LOGTDEBUG1,
-+        "ATIO[%x] CDB=0x%x bus %d iid%d->lun%d tag 0x%x ttype 0x%x %s",
-+      aep->at_handle, aep->at_cdb[0] & 0xff, GET_BUS_VAL(aep->at_iid),
-+      GET_IID_VAL(aep->at_iid), aep->at_lun, aep->at_tag_val & 0xff,
-+      aep->at_tag_type, (aep->at_flags & AT_NODISC)?
-+      "nondisc" : "disconnecting");
-+    if (isp->isp_osinfo.hcb == 0) {
-+      isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+    } else {
-+      isp->isp_osinfo.tfreelist = tmd->cd_private;
-+      tmd->cd_lreserved[0].bytes[0] = QOUT_TMD_START;
-+      tmd->cd_lreserved[1].ptrs[0] = isp->isp_osinfo.pending_t;
-+      isp->isp_osinfo.pending_t = tmd;
-+    }
-+    return (0);
-+}
-+
-+static int
-+isp_handle_platform_atio2(struct ispsoftc *isp, at2_entry_t *aep)
-+{
-+    tmd_cmd_t *tmd;
-+    int lun;
-+
-+    /*
-+     * The firmware status (except for the QLTM_SVALID bit)
-+     * indicates why this ATIO was sent to us.
-+     *
-+     * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+     */
-+    if ((aep->at_status & ~QLTM_SVALID) != AT_CDB) {
-+      isp_prt(isp, ISP_LOGERR, "bad atio (0x%x) leaked to platform",
-+          aep->at_status);
-+      isp_endcmd(isp, aep, SCSI_BUSY, 0);
-+      return (0);
-+    }
-+    if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN)
-+      lun = aep->at_scclun;
-+    else
-+      lun = aep->at_lun;
-+
-+    /*
-+     * If we're out of resources, just send a QFULL status back.
-+     */
-+    if ((tmd = isp->isp_osinfo.tfreelist) == NULL) {
-+      isp_endcmd(isp, aep, SCSI_QFULL, 0);
-+      return (0);
-+    }
-+    tmd->cd_lflags = CDFL_BUSY;
-+    tmd->cd_iid = aep->at_iid;
-+    tmd->cd_tgt = ((fcparam *)isp->isp_param)->isp_loopid;
-+    tmd->cd_lun = lun;
-+    tmd->cd_chan = 0;
-+    MEMCPY(tmd->cd_cdb, aep->at_cdb, min(TMD_CDBLEN, ATIO2_CDBLEN));
-+    switch (aep->at_taskflags & ATIO2_TC_ATTR_MASK) {
-+    case ATIO2_TC_ATTR_SIMPLEQ:
-+      tmd->cd_tagtype = MSG_SIMPLE_Q_TAG;
-+      break;
-+    case ATIO2_TC_ATTR_HEADOFQ:
-+      tmd->cd_tagtype = MSG_HEAD_OF_Q_TAG;
-+      break;
-+    case ATIO2_TC_ATTR_ORDERED:
-+      tmd->cd_tagtype = MSG_ORDERED_Q_TAG;
-+      break;
-+    case ATIO2_TC_ATTR_ACAQ:          /* ?? */
-+    case ATIO2_TC_ATTR_UNTAGGED:
-+    default:
-+      tmd->cd_tagtype = 0;
-+      break;
-+    }
-+    switch (aep->at_execodes & (ATIO2_EX_WRITE|ATIO2_EX_READ)) {
-+    case ATIO2_EX_WRITE:
-+      tmd->cd_lflags |= CDFL_DATA_OUT;
-+      break;
-+    case ATIO2_EX_READ:
-+      tmd->cd_lflags |= CDFL_DATA_IN;
-+      break;
-+    case ATIO2_EX_WRITE|ATIO2_EX_READ:
-+      tmd->cd_lflags |= CDFL_BIDIR;
-+      isp_prt(isp, ISP_LOGWARN, "ATIO2 with both read/write set");
-+      break;
-+    default:
-+      break;
-+    }
-+    tmd->cd_tagval = aep->at_rxid;
-+    tmd->cd_hba = isp;
-+    tmd->cd_data = NULL;
-+    tmd->cd_hflags = 0;
-+    tmd->cd_totlen = aep->at_datalen;
-+    tmd->cd_resid = tmd->cd_xfrlen = tmd->cd_error = 0;
-+    tmd->cd_scsi_status = 0;
-+    if ((isp->isp_dblev & ISP_LOGTDEBUG0) || isp->isp_osinfo.hcb == 0) {
-+      const char *sstr;
-+      switch (tmd->cd_lflags & CDFL_BIDIR) {
-+      default:
-+          sstr = "nodatadir";
-+          break;
-+      case CDFL_DATA_OUT:
-+          sstr = "DATA OUT";
-+          break;
-+      case CDFL_DATA_IN:
-+          sstr = "DATA IN";
-+          break;
-+      case CDFL_DATA_OUT|CDFL_DATA_IN:
-+          sstr = "BIDIR";
-+          break;
-+      }
-+      isp_prt(isp, ISP_LOGALL,
-+          "ATIO2[%x] CDB=0x%x iid %d for lun %d tcode 0x%x dlen %d %s",
-+          aep->at_rxid, aep->at_cdb[0] & 0xff, aep->at_iid,
-+          lun, aep->at_taskcodes, aep->at_datalen, sstr);
-+    }
-+    if (isp->isp_osinfo.hcb == 0) {
-+      if (aep->at_cdb[0] == INQUIRY && lun == 0) {
-+          if (aep->at_cdb[1] == 0 && aep->at_cdb[2] == 0) {
-+              static u_int8_t inqdata[] = {
-+                  DEFAULT_DEVICE_TYPE, 0x0, 0x2, 0x2, 32, 0, 0, 0x40,
-+                  'L', 'I', 'N', 'U', 'X', ' ', ' ', ' ',
-+                  'T', 'A', 'R', 'G', 'E', 'T', ' ', 'D',
-+                  'D', 'E', 'V', 'I', 'C', 'E', ' ', ' ',
-+                  '0', '0', '0', '1'
-+              };
-+              struct scatterlist single, *dp = &single;
-+              MEMZERO(dp, sizeof (*dp));
-+              dp->address = inqdata;
-+              dp->length = sizeof (inqdata);
-+              tmd->cd_data = dp;
-+              tmd->cd_resid = tmd->cd_xfrlen = sizeof (inqdata);
-+              tmd->cd_hflags |= CDFH_DATA_IN|CDFH_STSVALID;
-+              ISP_DROP_LK_SOFTC(isp);
-+              isp_target_start_ctio(isp, tmd);
-+              ISP_IGET_LK_SOFTC(isp);
-+          } else {
-+              /*
-+               * Illegal field in CDB
-+               *  0x24 << 24 | 0x5 << 12 | ECMD_SVALID | SCSI_CHECK
-+               */
-+              isp_endcmd(isp, aep, 0x24005102, 0);
-+          }
-+      } else if (lun == 0) {
-+              /*
-+               * Not Ready, Cause Not Reportable
-+               *
-+               *  0x4 << 24 | 0x2 << 12 | ECMD_SVALID | SCSI_CHECK
-+               */
-+              isp_endcmd(isp, aep, 0x04002102, 0);
-+      } else {
-+          /*
-+           * Logical Unit Not Supported:
-+           *  0x25 << 24 | 0x5 << 12 | ECMD_SVALID | SCSI_CHECK
-+           */
-+          isp_endcmd(isp, aep, 0x25005102, 0);
-+      }
-+      MEMZERO(tmd, TMD_SIZE);
-+      return (0);
-+    }
-+    isp->isp_osinfo.tfreelist = tmd->cd_private;
-+    tmd->cd_lreserved[0].bytes[0] = QOUT_TMD_START;
-+    tmd->cd_lreserved[1].ptrs[0] = isp->isp_osinfo.pending_t;
-+    isp->isp_osinfo.pending_t = tmd;
-+    return (0);
-+}
-+
-+static int
-+isp_handle_platform_ctio(struct ispsoftc *isp, void *arg)
-+{
-+    tmd_cmd_t *tmd;
-+    int sentstatus, ok, resid = 0, sts;
-+
-+    /*
-+     * CTIO and CTIO2 are close enough....
-+     */
-+    tmd = (tmd_cmd_t *) isp_find_xs(isp, ((ct_entry_t *)arg)->ct_syshandle);
-+    if (tmd == NULL) {
-+      isp_prt(isp, ISP_LOGERR, "isp_handle_platform_ctio: null tmd");
-+      return (0);
-+    }
-+    isp_destroy_handle(isp, ((ct_entry_t *)arg)->ct_syshandle);
-+
-+    if (IS_FC(isp)) {
-+      ct2_entry_t *ct = arg;
-+      sentstatus = ct->ct_flags & CT2_SENDSTATUS;
-+      if (sentstatus) {
-+          tmd->cd_lflags |= CDFL_SENTSTATUS;
-+      }
-+      sts = ct->ct_status & ~QLTM_SVALID;
-+      ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
-+      if (ok && sentstatus && (tmd->cd_hflags & CDFH_SNSVALID)) {
-+          tmd->cd_lflags |= CDFL_SENTSENSE;
-+      }
-+      isp_prt(isp, ISP_LOGTDEBUG1,
-+          "CTIO2[%x] sts 0x%x flg 0x%x sns %d %s",
-+          ct->ct_rxid, ct->ct_status, ct->ct_flags,
-+          (tmd->cd_lflags & CDFL_SENTSENSE) != 0,
-+          sentstatus? "FIN" : "MID");
-+      if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) {
-+          resid = ct->ct_resid;
-+      }
-+    } else {
-+      ct_entry_t *ct = arg;
-+      sts = ct->ct_status & ~QLTM_SVALID;
-+      sentstatus = ct->ct_flags & CT_SENDSTATUS;
-+      if (sentstatus) {
-+          tmd->cd_lflags |= CDFL_SENTSTATUS;
-+      }
-+      ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
-+      if (ok && sentstatus && (tmd->cd_hflags & CDFH_SNSVALID)) {
-+          tmd->cd_lflags |= CDFL_SENTSENSE;
-+      }
-+      isp_prt(isp, ISP_LOGTDEBUG1,
-+          "CTIO[%x] tag %x iid %x tgt %d lun %d sts 0x%x flg %x %s",
-+          ct->ct_fwhandle, ct->ct_tag_val, ct->ct_iid, ct->ct_tgt,
-+          ct->ct_lun, ct->ct_status, ct->ct_flags,
-+          sentstatus? "FIN" : "MID");
-+      if (ct->ct_status & QLTM_SVALID) {
-+          char *sp = (char *)ct;
-+          sp += CTIO_SENSE_OFFSET;
-+          MEMCPY(tmd->cd_sense, sp, QLTM_SENSELEN);
-+          tmd->cd_lflags |= CDFL_SNSVALID;
-+      }
-+      if ((ct->ct_flags & CT_DATAMASK) != CT_NO_DATA) {
-+          resid = ct->ct_resid;
-+      }
-+    }
-+    tmd->cd_resid += resid;
-+
-+    /*
-+     * We're here either because intermediate data transfers are done
-+     * and/or the final status CTIO (which may have joined with a
-+     * Data Transfer) is done.
-+     *
-+     * In any case, for this platform, the upper layers figure out
-+     * what to do next, so all we do here is collect status and
-+     * pass information along.
-+     */
-+    isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO done (resid %d)",
-+      (sentstatus)? "  FINAL " : "MIDTERM ", tmd->cd_resid);
-+
-+    if (!ok) {
-+      isp_prt(isp, ISP_LOGERR, "CTIO ended with badstate (0x%x)", sts);
-+      tmd->cd_lflags |= CDFL_ERROR;
-+      tmd->cd_error = -EIO;
-+      isp_target_putback_atio(isp, tmd);
-+    } else {
-+      isp_complete_ctio(isp, tmd);
-+    }
-+    return (0);
-+}
-+
-+static int
-+isp_handle_platform_ctio_fastpost(struct ispsoftc *isp, u_int32_t token)
-+{
-+    tmd_cmd_t *tmd;
-+    u_int16_t handle;
-+
-+    handle = token & 0xffff;
-+    tmd = (tmd_cmd_t *) isp_find_xs(isp, handle);
-+    if (tmd == NULL) {
-+      isp_prt(isp, ISP_LOGERR,
-+          "isp_handle_platform_ctio_fastpost: null tmd");
-+      return (0);
-+    }
-+    isp_destroy_handle(isp, handle);
-+    isp_prt(isp, ISP_LOGTDEBUG1, "CTIOx[%x] fastpost complete", tmd->cd_tagval);
-+    /*
-+     * In this implementation we only set fast posting for the last ctio2
-+     * of a command where we haven't sent sense data as well.
-+     */
-+    tmd->cd_lflags |= CDFL_SENTSTATUS;
-+    isp_complete_ctio(isp, tmd);
-+    return (0);
-+}
-+
-+static void
-+isp_target_putback_atio(struct ispsoftc *isp, tmd_cmd_t *tmd)
-+{
-+    u_int16_t nxti;
-+    u_int8_t local[QENTRY_LEN];
-+    void *qe;
-+
-+    if (isp_getrqentry(isp, &nxti, NULL, &qe)) {
-+      isp_prt(isp, ISP_LOGWARN,
-+          "isp_target_putback_atio: Request Queue Overflow");
-+      /* XXXX */
-+      isp_complete_ctio(isp, tmd);
-+      return;
-+    }
-+    MEMZERO(local, sizeof (local));
-+    if (IS_FC(isp)) {
-+      at2_entry_t *at = (at2_entry_t *) local;
-+      at->at_header.rqs_entry_type = RQSTYPE_ATIO2;
-+      at->at_header.rqs_entry_count = 1;
-+      if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN)
-+          at->at_scclun = (uint16_t) tmd->cd_lun;
-+      else
-+          at->at_lun = (uint8_t) tmd->cd_lun;
-+      at->at_status = CT_OK;
-+      at->at_rxid = tmd->cd_tagval;
-+      isp_put_atio2(isp, at, qe);
-+    } else {
-+      at_entry_t *at = (at_entry_t *)local;
-+      at->at_header.rqs_entry_type = RQSTYPE_ATIO;
-+      at->at_header.rqs_entry_count = 1;
-+      at->at_iid = tmd->cd_iid;
-+      at->at_iid |= tmd->cd_chan << 7;
-+      at->at_tgt = tmd->cd_tgt;
-+      at->at_lun = tmd->cd_lun;
-+      at->at_status = CT_OK;
-+      at->at_tag_val = AT_GET_TAG(tmd->cd_tagval);
-+      at->at_handle = AT_GET_HANDLE(tmd->cd_tagval);
-+      isp_put_atio(isp, at, qe);
-+    }
-+    ISP_TDQE(isp, "isp_target_putback_atio", isp->isp_reqidx, qe);
-+    ISP_ADD_REQUEST(isp, nxti);
-+    isp_complete_ctio(isp, tmd);
-+}
-+
-+static void
-+isp_complete_ctio(struct ispsoftc *isp, tmd_cmd_t *tmd)
-+{
-+    if (isp->isp_osinfo.hcb == 0) {
-+      isp_prt(isp, ISP_LOGWARN, "nobody to tell about completing command");
-+      MEMZERO(tmd, TMD_SIZE);
-+      tmd->cd_private = isp->isp_osinfo.tfreelist;
-+      isp->isp_osinfo.tfreelist = tmd;
-+    } else {
-+      tmd->cd_lreserved[0].bytes[0] = QOUT_TMD_DONE;
-+      tmd->cd_lreserved[1].ptrs[0] = isp->isp_osinfo.pending_t;
-+      isp->isp_osinfo.pending_t = tmd;
-+    }
-+}
-+
-+int
-+isp_en_dis_lun(struct ispsoftc *isp, int enable, int bus, int tgt, int lun)
-+{
-+    DECLARE_MUTEX_LOCKED(rsem);
-+    u_int16_t rstat;
-+    int rv, enabled, cmd;
-+
-+    /*
-+     * First, we can't do anything unless we have an upper
-+     * level target driver to route commands to.
-+     */
-+    if (isp->isp_osinfo.hcb == 0) {
-+      return (-EINVAL);
-+    }
-+
-+    /*
-+     * Second, check for sanity of enable argument.
-+     */
-+    enabled = ((isp->isp_osinfo.tmflags & (1 << bus)) != 0);
-+    if (enable == 0 && enabled == 0) {
-+      return (-EINVAL);
-+    }
-+
-+    /*
-+     * Third, check to see if we're enabling on fibre channel
-+     * and don't yet have a notion of who the heck we are (no
-+     * loop yet).
-+     */
-+    if (IS_FC(isp) && !enabled) {
-+      ISP_LOCK_SOFTC(isp);
-+      if ((isp->isp_role & ISP_ROLE_TARGET) == 0) {
-+          isp->isp_role |= ISP_ROLE_TARGET;
-+          if (isp_drain_reset(isp, "lun enables")) {
-+              return (-EIO);
-+          }
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 1);
-+    }
-+
-+    /*
-+     * If this is a wildcard target, select our initiator
-+     * id/loop id for use as what we enable as.
-+     */
-+
-+    if (tgt == -1) {
-+      if (IS_FC(isp)) {
-+          tgt = ((fcparam *)isp->isp_param)->isp_loopid;
-+      } else {
-+          tgt = ((sdparam *)isp->isp_param)->isp_initiator_id;
-+      }
-+    }
-+
-+    /*
-+     * Do some sanity checking on lun arguments.
-+     */
-+
-+    if (lun < 0 || lun >= (IS_FC(isp)? TM_MAX_LUN_FC : TM_MAX_LUN_SCSI)) {
-+      return (-EINVAL);
-+    }
-+
-+    /*
-+     * Snag the semaphore on the return state value on enables/disables.
-+     */
-+    if (down_interruptible(&isp->isp_osinfo.tgt_inisem)) {
-+      return (-EINTR);
-+    }
-+
-+    if (enable && LUN_BTST(isp, bus, lun)) {
-+      up(&isp->isp_osinfo.tgt_inisem);
-+      return (-EEXIST);
-+    }
-+    if (!enable && !LUN_BTST(isp, bus, lun)) {
-+      up(&isp->isp_osinfo.tgt_inisem);
-+      return (-NODEV);
-+    }
-+
-+    if (enable && nolunsenabled(isp, bus)) {
-+      int av = (bus << 31) | ENABLE_TARGET_FLAG;
-+      ISP_LOCK_SOFTC(isp);
-+      rv = isp_control(isp, ISPCTL_TOGGLE_TMODE, &av);
-+      ISP_UNLK_SOFTC(isp);
-+      if (rv) {
-+          up(&isp->isp_osinfo.tgt_inisem);
-+          return (-EIO);
-+      }
-+    }
-+
-+    ISP_LOCK_SOFTC(isp);
-+    isp->isp_osinfo.rsemap = &rsem;
-+    if (enable) {
-+      u_int32_t seq = isp->isp_osinfo.rollinfo++;
-+      int n, ulun = lun;
-+
-+      cmd = RQSTYPE_ENABLE_LUN;
-+      n = DFLT_INOT_CNT;
-+      if (IS_FC(isp) && lun != 0) {
-+          cmd = RQSTYPE_MODIFY_LUN;
-+          n = 0;
-+          /*
-+           * For SCC firmware, we only deal with setting
-+           * (enabling or modifying) lun 0.
-+           */
-+          ulun = 0;
-+      }
-+      rstat = LUN_ERR;
-+      if (isp_lun_cmd(isp, cmd, bus, tgt, ulun, DFLT_CMND_CNT, n, seq)) {
-+          isp_prt(isp, ISP_LOGERR, "isp_lun_cmd failed");
-+          goto out;
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      down(isp->isp_osinfo.rsemap);
-+      ISP_LOCK_SOFTC(isp);
-+      isp->isp_osinfo.rsemap = NULL;
-+      rstat = isp->isp_osinfo.rstatus;
-+      if (rstat != LUN_OK) {
-+          isp_prt(isp, ISP_LOGERR, "MODIFY/ENABLE LUN returned 0x%x", rstat);
-+          goto out;
-+      }
-+    } else {
-+      int n, ulun = lun;
-+      u_int32_t seq;
-+
-+      rstat = LUN_ERR;
-+      seq = isp->isp_osinfo.rollinfo++;
-+      cmd = -RQSTYPE_MODIFY_LUN;
-+
-+      n = DFLT_INOT_CNT;
-+      if (IS_FC(isp) && lun != 0) {
-+          n = 0;
-+          /*
-+           * For SCC firmware, we only deal with setting
-+           * (enabling or modifying) lun 0.
-+           */
-+          ulun = 0;
-+      }
-+      if (isp_lun_cmd(isp, cmd, bus, tgt, ulun, DFLT_CMND_CNT, n, seq)) {
-+          isp_prt(isp, ISP_LOGERR, "isp_lun_cmd failed");
-+          goto out;
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      down(isp->isp_osinfo.rsemap);
-+      ISP_LOCK_SOFTC(isp);
-+      isp->isp_osinfo.rsemap = NULL;
-+      rstat = isp->isp_osinfo.rstatus;
-+      if (rstat != LUN_OK) {
-+          isp_prt(isp, ISP_LOGERR, "MODIFY LUN returned 0x%x", rstat);
-+          goto out;
-+      }
-+      if (IS_FC(isp) && lun) {
-+          goto out;
-+      }
-+      seq = isp->isp_osinfo.rollinfo++;
-+      isp->isp_osinfo.rsemap = &rsem;
-+
-+      rstat = LUN_ERR;
-+      cmd = -RQSTYPE_ENABLE_LUN;
-+      if (isp_lun_cmd(isp, cmd, bus, tgt, lun, 0, 0, seq)) {
-+          isp_prt(isp, ISP_LOGERR, "isp_lun_cmd failed");
-+          goto out;
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      down(isp->isp_osinfo.rsemap);
-+      ISP_LOCK_SOFTC(isp);
-+      isp->isp_osinfo.rsemap = NULL;
-+      rstat = isp->isp_osinfo.rstatus;
-+      if (rstat != LUN_OK) {
-+          isp_prt(isp, ISP_LOGERR, "DISABLE LUN returned 0x%x", rstat);
-+          goto out;
-+      }
-+    }
-+out:
-+
-+    if (rstat != LUN_OK) {
-+      isp_prt(isp, ISP_LOGERR, "lun %d %sable failed", lun,
-+          (enable) ? "en" : "dis");
-+      ISP_UNLK_SOFTC(isp);
-+      up(&isp->isp_osinfo.tgt_inisem);
-+      return (-EIO);
-+    } else {
-+      isp_prt(isp, ISP_LOGINFO,
-+          "lun %d now %sabled for target mode on channel %d", lun,
-+          (enable)? "en" : "dis", bus);
-+      if (enable == 0) {
-+          LUN_BCLR(isp, bus, lun);
-+          if (nolunsenabled(isp, bus)) {
-+              int av = bus << 31;
-+              rv = isp_control(isp, ISPCTL_TOGGLE_TMODE, &av);
-+              if (rv) {
-+                  isp_prt(isp, ISP_LOGERR,
-+                      "failed to disable target mode on channel %d", bus);
-+                  /* but proceed */
-+                  ISP_UNLK_SOFTC(isp);
-+                  return (-EIO);
-+              }
-+              isp->isp_osinfo.tmflags &= ~(1 << bus);
-+              isp->isp_role &= ~ISP_ROLE_TARGET;
-+              if (IS_FC(isp)) {
-+                  if (isp_drain_reset(isp, "lun disables")) {
-+                      return (-EIO);
-+                  }
-+                  if ((isp->isp_role & ISP_ROLE_INITIATOR) != 0) {
-+                      ISP_UNLK_SOFTC(isp);
-+                      SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 1);
-+                      ISP_LOCK_SOFTC(isp);
-+                  }
-+              }
-+          }
-+      } else {
-+          isp->isp_osinfo.tmflags |= (1 << bus);
-+          LUN_BSET(isp, bus, lun);
-+      }
-+      ISP_UNLK_SOFTC(isp);
-+      up(&isp->isp_osinfo.tgt_inisem);
-+      return (0);
-+    }
-+}
-+#endif
-+
-+#ifdef        ISP_PRIVATE_ASYNC
-+#define       ISP_ASYNC       isp_async_level1
-+#else
-+#define       ISP_ASYNC       isp_async
-+#endif
-+
-+int
-+ISP_ASYNC(struct ispsoftc *isp, ispasync_t cmd, void *arg)
-+{
-+    switch (cmd) {
-+    case ISPASYNC_NEW_TGT_PARAMS:
-+      if (IS_SCSI(isp)) {
-+          sdparam *sdp = isp->isp_param;
-+          char *wt;
-+          int mhz, flags, bus, tgt, period;
-+
-+          tgt = *((int *) arg);
-+          bus = (tgt >> 16) & 0xffff;
-+          tgt &= 0xffff;
-+
-+          sdp += bus;
-+          flags = sdp->isp_devparam[tgt].actv_flags;
-+          period = sdp->isp_devparam[tgt].actv_period;
-+          if ((flags & DPARM_SYNC) && period &&
-+              (sdp->isp_devparam[tgt].actv_offset) != 0) {
-+              if (sdp->isp_lvdmode || period < 0xc) {
-+                  switch (period) {
-+                  case 0x9:
-+                      mhz = 80;
-+                      break;
-+                  case 0xa:
-+                      mhz = 40;
-+                      break;
-+                  case 0xb:
-+                      mhz = 33;
-+                      break;
-+                  case 0xc:
-+                      mhz = 25;
-+                      break;
-+                  default:
-+                      mhz = 1000 / (period * 4);
-+                      break;
-+                  }
-+              } else {
-+                  mhz = 1000 / (period * 4);
-+              }
-+          } else {
-+              mhz = 0;
-+          }
-+          switch (flags & (DPARM_WIDE|DPARM_TQING)) {
-+          case DPARM_WIDE:
-+              wt = ", 16 bit wide";
-+              break;
-+          case DPARM_TQING:
-+              wt = ", Tagged Queueing Enabled";
-+              break;
-+          case DPARM_WIDE|DPARM_TQING:
-+              wt = ", 16 bit wide, Tagged Queueing Enabled";
-+              break;
-+          default:
-+              wt = " ";
-+              break;
-+          }
-+          if (mhz) {
-+              isp_prt(isp, ISP_LOGINFO,
-+                  "Channel %d Target %d at %dMHz Max Offset %d%s",
-+                  bus, tgt, mhz, sdp->isp_devparam[tgt].actv_offset, wt);
-+          } else {
-+              isp_prt(isp, ISP_LOGINFO, "Channel %d Target %d Async Mode%s",
-+                  bus, tgt, wt);
-+          }
-+      }
-+      break;
-+    case ISPASYNC_LIP:
-+      isp_prt(isp, ISP_LOGINFO, "LIP Received");
-+      break;
-+    case ISPASYNC_LOOP_RESET:
-+      isp_prt(isp, ISP_LOGINFO, "Loop Reset Received");
-+      break;
-+    case ISPASYNC_BUS_RESET:
-+      isp_prt(isp, ISP_LOGINFO, "SCSI bus %d reset detected", *((int *) arg));
-+      break;
-+    case ISPASYNC_LOOP_DOWN:
-+      isp_prt(isp, ISP_LOGINFO, "Loop DOWN");
-+      break;
-+    case ISPASYNC_LOOP_UP:
-+      isp_prt(isp, ISP_LOGINFO, "Loop UP");
-+      break;
-+    case ISPASYNC_PROMENADE:
-+    {
-+      fcparam *fcp = isp->isp_param;
-+      struct lportdb *lp;
-+      int tgt;
-+
-+      tgt = *((int *) arg);
-+      lp = &fcp->portdb[tgt];
-+
-+      if (lp->valid) {
-+          isp_prt(isp, ISP_LOGINFO,
-+              "ID %d (Loop 0x%x) Port WWN 0x%08x%08x @ 0x%x arrived, role %s",
-+              tgt, lp->loopid, (unsigned int) (lp->port_wwn >> 32),
-+              (unsigned int) (lp->port_wwn & 0xffffffff), lp->portid,
-+              class3_roles[fcp->portdb[tgt].roles]);
-+      } else {
-+          isp_prt(isp, ISP_LOGINFO,
-+              "ID %d (Loop 0x%x) Port WWN 0x%08x%08x @ 0x%x departed", tgt,
-+              lp->loopid, (unsigned int) (lp->port_wwn >> 32),
-+              (unsigned int) (lp->port_wwn & 0xffffffff), lp->portid);
-+#ifdef        DEVICE_POLICY_IS_FLUID
-+              MEMZERO((void *) lp, sizeof (*lp));
-+#endif
-+      }
-+      break;
-+    }
-+    case ISPASYNC_CHANGE_NOTIFY:
-+      if (arg == ISPASYNC_CHANGE_PDB) {
-+              isp_prt(isp, ISP_LOGINFO,
-+                  "Port Database Changed");
-+      } else if (arg == ISPASYNC_CHANGE_SNS) {
-+              isp_prt(isp, ISP_LOGINFO,
-+                  "Name Server Database Changed");
-+      }
-+      SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+      break;
-+    case ISPASYNC_FABRIC_DEV:
-+    {
-+      int target, base, lim;
-+      fcparam *fcp = isp->isp_param;
-+      struct lportdb *lp = NULL;
-+      struct lportdb *clp = (struct lportdb *) arg;
-+      char *pt;
-+
-+      switch (clp->port_type) {
-+      case 1:
-+              pt = "   N_Port";
-+              break;
-+      case 2:
-+              pt = "  NL_Port";
-+              break;
-+      case 3:
-+              pt = "F/NL_Port";
-+              break;
-+      case 0x7f:
-+              pt = "  Nx_Port";
-+              break;
-+      case 0x81:
-+              pt = "  F_port";
-+              break;
-+      case 0x82:
-+              pt = "  FL_Port";
-+              break;
-+      case 0x84:
-+              pt = "   E_port";
-+              break;
-+      default:
-+              pt = " ";
-+              break;
-+      }
-+
-+      isp_prt(isp, ISP_LOGINFO,
-+          "%s Fabric Device @ PortID 0x%x", pt, clp->portid);
-+
-+      /*
-+       * If we don't have an initiator role we bail.
-+       *
-+       * We just use ISPASYNC_FABRIC_DEV for announcement purposes.
-+       */
-+
-+      if ((isp->isp_role & ISP_ROLE_INITIATOR) == 0) {
-+              break;
-+      }
-+
-+      /*
-+       * Is this entry for us? If so, we bail.
-+       */
-+
-+      if (fcp->isp_portid == clp->portid) {
-+              break;
-+      }
-+
-+      /*
-+       * Else, the default policy is to find room for it in
-+       * our local port database. Later, when we execute
-+       * the call to isp_pdb_sync either this newly arrived
-+       * or already logged in device will be (re)announced.
-+       */
-+
-+      if (fcp->isp_topo == TOPO_FL_PORT)
-+              base = FC_SNS_ID+1;
-+      else
-+              base = 0;
-+
-+      if (fcp->isp_topo == TOPO_N_PORT)
-+              lim = 1;
-+      else
-+              lim = MAX_FC_TARG;
-+
-+      /*
-+       * Is it already in our list?
-+       */
-+      for (target = base; target < lim; target++) {
-+              if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+                      continue;
-+              }
-+              lp = &fcp->portdb[target];
-+              if (lp->port_wwn == clp->port_wwn &&
-+                  lp->node_wwn == clp->node_wwn) {
-+                      lp->fabric_dev = 1;
-+                      /*
-+                       * Propagate possibly new port id.
-+                       */
-+                      lp->portid = clp->portid;
-+                      break;
-+              }
-+      }
-+      if (target < lim) {
-+              break;
-+      }
-+      for (target = base; target < lim; target++) {
-+              if (target >= FL_PORT_ID && target <= FC_SNS_ID) {
-+                      continue;
-+              }
-+              lp = &fcp->portdb[target];
-+              if (lp->port_wwn == 0) {
-+                      break;
-+              }
-+      }
-+      if (target == lim) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "out of space for fabric devices");
-+              break;
-+      }
-+      lp->port_type = clp->port_type;
-+      lp->fc4_type = clp->fc4_type;
-+      lp->node_wwn = clp->node_wwn;
-+      lp->port_wwn = clp->port_wwn;
-+      lp->portid = clp->portid;
-+      lp->fabric_dev = 1;
-+      break;
-+    }
-+#ifdef        LINUX_ISP_TARGET_MODE
-+    case ISPASYNC_TARGET_MESSAGE:
-+    {
-+      tmd_msg_t *mp = arg;
-+      isp_prt(isp, ISP_LOGTDEBUG2,
-+          "bus %d iid %d tgt %d lun %d ttype %x tval %x msg[0]=%x",
-+          mp->nt_bus, (int) mp->nt_iid, (int) mp->nt_tgt, (int) mp->nt_lun,
-+          mp->nt_tagtype, mp->nt_tagval, mp->nt_msg[0]);
-+      break;
-+    }
-+    case ISPASYNC_TARGET_EVENT:
-+    {
-+      tmd_event_t *ep = arg;
-+      switch (ep->ev_event) {
-+      case  ASYNC_CTIO_DONE:
-+          /*
-+           * ACK the interrupt first
-+           */
-+          ISP_WRITE(isp, BIU_SEMA, 0);
-+          ISP_WRITE(isp, HCCR, HCCR_CMD_CLEAR_RISC_INT);
-+          isp_handle_platform_ctio_fastpost(isp, ep->ev_bus);
-+          break;
-+      default:
-+          isp_prt(isp, ISP_LOGTDEBUG2,
-+              "bus %d event code 0x%x", ep->ev_bus, ep->ev_event);
-+      }
-+      break;
-+    }
-+    case ISPASYNC_TARGET_ACTION:
-+      switch (((isphdr_t *)arg)->rqs_entry_type) {
-+      default:
-+          isp_prt(isp, ISP_LOGWARN, "event 0x%x for unhandled target action",
-+              ((isphdr_t *)arg)->rqs_entry_type);
-+          break;
-+      case RQSTYPE_ATIO:
-+          (void) isp_handle_platform_atio(isp, (at_entry_t *) arg);
-+          break;
-+      case RQSTYPE_ATIO2:
-+          (void) isp_handle_platform_atio2(isp, (at2_entry_t *)arg);
-+          break;
-+      case RQSTYPE_CTIO2:
-+      case RQSTYPE_CTIO:
-+          (void) isp_handle_platform_ctio(isp, arg);
-+          break;
-+      case RQSTYPE_ENABLE_LUN:
-+      case RQSTYPE_MODIFY_LUN:
-+          isp->isp_osinfo.rstatus = ((lun_entry_t *)arg)->le_status;
-+          if (isp->isp_osinfo.rsemap) {
-+              up(isp->isp_osinfo.rsemap);
-+          }
-+          break;
-+      }
-+      break;
-+#endif
-+    case ISPASYNC_UNHANDLED_RESPONSE:
-+      break;
-+    case ISPASYNC_FW_CRASH:
-+    {
-+      u_int16_t mbox1, mbox6;
-+      mbox1 = ISP_READ(isp, OUTMAILBOX1);
-+      if (IS_DUALBUS(isp)) {
-+          mbox6 = ISP_READ(isp, OUTMAILBOX6);
-+      } else {
-+          mbox6 = 0;
-+      }
-+      isp_prt(isp, ISP_LOGERR,
-+          "Internal F/W Error on bus %d @ RISC Address 0x%x", mbox6, mbox1);
-+#ifdef        ISP_FW_CRASH_DUMP
-+      if (IS_FC(isp)) {
-+          isp->isp_blocked = 1;
-+          SEND_THREAD_EVENT(isp, ISP_THREAD_FW_CRASH_DUMP, 0);
-+      } else {
-+          isp_reinit(isp);
-+          isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+      }
-+#endif
-+      break;
-+    }
-+    case ISPASYNC_FW_RESTARTED:
-+    {
-+      if (IS_FC(isp)) {
-+          SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+      }
-+      break;
-+    }
-+    default:
-+      return (-1);
-+    }
-+    return (0);
-+}
-+
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#include "sd.h"
-+int
-+isplinux_biosparam(Disk *disk, kdev_t n, int ip[])
-+{
-+    int size = disk->capacity;
-+    ip[0] = 64;
-+    ip[1] = 32;
-+    ip[2] = size >> 11;
-+    if (ip[2] > 1024) {
-+      ip[0] = 255;
-+      ip[1] = 63;
-+      ip[2] = size / (ip[0] * ip[1]);
-+    }
-+    return (0);
-+}
-+
-+/*
-+ * Set the queue depth for this device.
-+ */
-+
-+void
-+isplinux_sqd(struct Scsi_Host *host, Scsi_Device *devs)
-+{
-+    while (devs) {
-+      if (devs->host == host && devs->tagged_supported == 0) {
-+          /*
-+           * If this device doesn't support tagged operations, don't waste
-+           * queue space for it, even if it has multiple luns.
-+           */
-+          devs->queue_depth = 2;
-+      } else if (devs->host == host) {
-+          int depth = 2;
-+          struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+
-+          if (IS_SCSI(isp)) {
-+              sdparam *sdp = isp->isp_param;
-+              sdp += devs->channel;
-+              depth = sdp->isp_devparam[devs->id].exc_throttle;
-+          } else {
-+              depth = FCPARAM(isp)->isp_execthrottle;
-+          }
-+          if (isp_throttle) {
-+              /*
-+               * This limit is due to the size of devs->queue_depth
-+               */
-+              depth = (unsigned char) min(isp_throttle, 255);;
-+          }
-+          if (depth < 4) {
-+              depth = 4;
-+          }
-+          devs->queue_depth = depth;
-+      }
-+      devs = devs->next;
-+    }
-+}
-+
-+#else
-+int
-+isplinux_biosparam(struct scsi_device *sdev, struct block_device *n,
-+                 sector_t capacity, int ip[])
-+{
-+    int size = capacity;
-+    ip[0] = 64;
-+    ip[1] = 32;
-+    ip[2] = size >> 11;
-+    if (ip[2] > 1024) {
-+      ip[0] = 255;
-+      ip[1] = 63;
-+      ip[2] = size / (ip[0] * ip[1]);
-+    }
-+    return (0);
-+}
-+
-+static int
-+isplinux_slave_configure(Scsi_Device * device)
-+{
-+    if (device->tagged_supported) {
-+      /*
-+       *  FIX LATER
-+       */
-+      scsi_adjust_queue_depth(device, MSG_ORDERED_TAG, 63);
-+    }
-+    return 0;
-+}
-+#endif
-+
-+/*
-+ * Periodic watchdog timer.. the main purpose here is to restart
-+ * commands that were pegged on resources, etc...
-+ */
-+void
-+isplinux_timer(unsigned long arg)
-+{
-+    Scsi_Cmnd *Cmnd;
-+    struct ispsoftc *isp = (struct ispsoftc *) arg;
-+
-+    ISP_ILOCK_SOFTC(isp);
-+    if (IS_FC(isp)) {
-+      int rql;
-+      if (isp->isp_role & ISP_ROLE_INITIATOR)
-+          rql = LOOP_READY;
-+      else
-+          rql = LOOP_LSCAN_DONE;
-+      if (isp->isp_fcrswdog || FCPARAM(isp)->isp_fwstate != FW_READY ||
-+          FCPARAM(isp)->isp_loopstate < rql) {
-+          isp->isp_fcrswdog = 0;
-+          if (isp->isp_deadloop == 0 && isp->isp_role != ISP_ROLE_NONE) {
-+              SEND_THREAD_EVENT(isp, ISP_THREAD_FC_RESCAN, 0);
-+          }
-+      }
-+    }
-+    isplinux_runwaitq(isp);
-+    if ((Cmnd = isp->isp_osinfo.dqnext) != NULL) {
-+      isp->isp_osinfo.dqnext = isp->isp_osinfo.dqtail = NULL;
-+    }
-+    if (isp->dogactive) {
-+      isp->isp_osinfo.timer.expires = jiffies + ISP_WATCH_TIME;
-+      add_timer(&isp->isp_osinfo.timer);
-+    }
-+    ISP_IUNLK_SOFTC(isp);
-+    if (Cmnd) {
-+      ISP_LOCK_SCSI_DONE(isp);
-+        while (Cmnd) {
-+          Scsi_Cmnd *f = (Scsi_Cmnd *) Cmnd->host_scribble;
-+          Cmnd->host_scribble = NULL;
-+          /*
-+           * Get around silliness in midlayer.
-+           */
-+          if (host_byte(Cmnd->result) == DID_RESET) {
-+              Cmnd->flags |= IS_RESETTING;
-+          }
-+          (*Cmnd->scsi_done)(Cmnd);
-+          Cmnd = f;
-+      }
-+      ISP_UNLK_SCSI_DONE(isp);
-+    }
-+}
-+
-+void
-+isplinux_mbtimer(unsigned long arg)
-+{
-+    struct ispsoftc *isp = (struct ispsoftc *) arg;
-+    ISP_ILOCK_SOFTC(isp);
-+    if (isp->mbox_waiting) {
-+      isp->mbox_waiting = 0;
-+      up(&isp->mbox_c_sem);
-+    }
-+    ISP_IUNLK_SOFTC(isp);
-+}
-+
-+irqreturn_t
-+isplinux_intr(int irq, void *arg, struct pt_regs *pt)
-+{
-+    struct ispsoftc *isp = arg;
-+    u_int16_t isr, sema, mbox;
-+    Scsi_Cmnd *Cmnd;
-+
-+    ISP_ILOCK_SOFTC(isp);
-+    isp->isp_intcnt++;
-+    if (ISP_READ_ISR(isp, &isr, &sema, &mbox) == 0) {
-+      isp->isp_intbogus++;
-+      ISP_IUNLK_SOFTC(isp);
-+      return IRQ_NONE;
-+    }
-+    isp_intr(isp, isr, sema, mbox);
-+    isplinux_runwaitq(isp);
-+    if ((Cmnd = isp->isp_osinfo.dqnext) != NULL) {
-+      isp->isp_osinfo.dqnext = isp->isp_osinfo.dqtail = NULL;
-+    }
-+#ifdef        LINUX_ISP_TARGET_MODE
-+    if (isp->isp_osinfo.pending_t) {
-+      struct tmd_cmd *tmd = isp->isp_osinfo.pending_t;
-+      isp->isp_osinfo.pending_t = NULL;
-+      ISP_IUNLK_SOFTC(isp);
-+      do {
-+          struct tmd_cmd *next = tmd->cd_lreserved[1].ptrs[0];
-+          tmd->cd_lreserved[1].ptrs[0] = NULL;
-+          ISP_PARENT_TARGET(tmd->cd_lreserved[0].bytes[0], tmd);
-+          tmd = next;
-+      } while (tmd != NULL);
-+    } else {
-+      ISP_IUNLK_SOFTC(isp);
-+    }
-+#else
-+    ISP_IUNLK_SOFTC(isp);
-+#endif
-+    if (Cmnd) {
-+      ISP_LOCK_SCSI_DONE(isp);
-+        while (Cmnd) {
-+          Scsi_Cmnd *f = (Scsi_Cmnd *) Cmnd->host_scribble;
-+          Cmnd->host_scribble = NULL;
-+          /*
-+           * Get around silliness in midlayer.
-+           */
-+          if (host_byte(Cmnd->result) == DID_RESET) {
-+              Cmnd->flags |= IS_RESETTING;
-+          }
-+          (*Cmnd->scsi_done)(Cmnd);
-+          Cmnd = f;
-+      }
-+      ISP_UNLK_SCSI_DONE(isp);
-+    }
-+    return IRQ_HANDLED;
-+}
-+
-+static INLINE int
-+isp_parse_rolearg(struct ispsoftc *isp, char *roles)
-+{
-+    char *role = roles;
-+
-+    while (role && *role) {
-+      unsigned int id;
-+      char *eqtok, *commatok, *p, *q;
-+      
-+      eqtok = role;
-+      eqtok = strchr(role, '=');
-+      if (eqtok == NULL)
-+         break;
-+      *eqtok = 0;
-+      commatok = strchr(eqtok+1, ',');
-+      if (commatok)
-+          *commatok = 0;
-+      if (strncmp(role, "0x", 2) == 0)
-+          q = role + 2;
-+      else
-+          q = role;
-+      if (*q == '*')
-+          id = isp->isp_osinfo.device_id;
-+      else
-+          id = simple_strtoul(q, &p, 16);
-+      *eqtok = '=';
-+      if (p != q && id == isp->isp_osinfo.device_id) {
-+          p = eqtok + 1;
-+          if (strcmp(p, "none") == 0) {
-+              if (commatok) {
-+                  *commatok = ',';
-+              }
-+              return (ISP_ROLE_NONE);
-+          }
-+          if (strcmp(p, "target") == 0) {
-+              if (commatok) {
-+                  *commatok = ',';
-+              }
-+              return (ISP_ROLE_TARGET);
-+          }
-+          if (strcmp(p, "initiator") == 0) {
-+              if (commatok) {
-+                  *commatok = ',';
-+              }
-+              return (ISP_ROLE_INITIATOR);
-+          }
-+          if (strcmp(p, "both") == 0) {
-+              if (commatok) {
-+                  *commatok = ',';
-+              }
-+              return (ISP_ROLE_BOTH);
-+          }
-+          break;
-+      }
-+        if (commatok) {
-+          role = commatok+1;
-+          *commatok = ',';
-+      } else {
-+          break;
-+      }
-+    }
-+    return (ISP_DEFAULT_ROLES);
-+}
-+
-+static INLINE u_int64_t
-+isp_parse_wwnarg(struct ispsoftc *isp, char *wwns)
-+{
-+    char *wwnt = wwns;
-+    u_int64_t wwn = 0;
-+
-+    while (wwn == 0 && wwnt && *wwnt) {
-+      unsigned int id;
-+      char *eqtok, *commatok, *p, *q;
-+      
-+      eqtok = wwnt;
-+      eqtok = strchr(wwnt, '=');
-+      if (eqtok == NULL)
-+         break;
-+      *eqtok = 0;
-+      commatok = strchr(eqtok+1, ',');
-+      if (commatok)
-+          *commatok = 0;
-+      if (strncmp(wwnt, "0x", 2) == 0)
-+          q = wwnt + 2;
-+      else
-+          q = wwnt;
-+      id = simple_strtoul(q, &p, 16);
-+      if (p != q && id == isp->isp_osinfo.device_id) {
-+          unsigned long t, t2;
-+          p = eqtok + 1;
-+          while (*p) {
-+              p++;
-+          }
-+          p -= 8;
-+          if (p > eqtok + 1) {
-+              char *q;
-+              char c;
-+              q = p;
-+              t = simple_strtoul(p, &q, 16);
-+              c = *p;
-+              *p = 0;
-+              t2 = simple_strtoul(eqtok+1, NULL, 16);
-+              *p = c;
-+          } else {
-+              t = simple_strtoul(eqtok+1, NULL, 16);
-+              t2 = 0;
-+          }
-+          wwn = (((u_int64_t) t2) << 32) | (u_int64_t) t;
-+      }
-+      *eqtok = '=';
-+        if (commatok) {
-+          wwnt = commatok+1;
-+          *commatok = ',';
-+      } else {
-+          break;
-+      }
-+    }
-+    return (wwn);
-+}
-+
-+void
-+isplinux_common_init(struct ispsoftc *isp)
-+{
-+    /*
-+     * Set up config options, etc...
-+     */
-+    if (isp_debug) {
-+      isp->isp_dblev = isp_debug;
-+    } else {
-+      isp->isp_dblev = ISP_LOGCONFIG|ISP_LOGWARN|ISP_LOGERR;
-+    }
-+
-+    if (isp_nofwreload & (1 << isp->isp_unit)) {
-+      isp->isp_confopts |= ISP_CFG_NORELOAD;
-+    }
-+    if (isp_nonvram & (1 << isp->isp_unit)) {
-+      isp->isp_confopts |= ISP_CFG_NONVRAM;
-+    }
-+    if (IS_FC(isp)) {
-+      if (isp_fcduplex & (1 << isp->isp_unit)) {
-+          isp->isp_confopts |= ISP_CFG_FULL_DUPLEX;
-+      }
-+        isp->isp_defwwpn = isp_parse_wwnarg(isp, isp_wwpns);
-+      if (isp->isp_defwwpn == 0) {
-+          isp->isp_defwwpn = (u_int64_t) 0x400000007F7F7F01;
-+      } else {
-+          isp->isp_confopts |= ISP_CFG_OWNWWPN;
-+      }
-+        isp->isp_defwwnn = isp_parse_wwnarg(isp, isp_wwnns);
-+      if (isp->isp_defwwnn == 0) {
-+          isp->isp_defwwnn = (u_int64_t) 0x400000007F7F7F02;
-+      } else {
-+          isp->isp_confopts |= ISP_CFG_OWNWWNN;
-+      }
-+      isp->isp_osinfo.host->max_id = MAX_FC_TARG; 
-+      if (IS_2200(isp) || IS_2300(isp)) {
-+          if (isp_nport_only & (1 << isp->isp_unit)) {
-+              isp->isp_confopts |= ISP_CFG_NPORT_ONLY;
-+          } else if (isp_loop_only & (1 << isp->isp_unit)) {
-+              isp->isp_confopts |= ISP_CFG_LPORT_ONLY;
-+          } else {
-+              isp->isp_confopts |= ISP_CFG_NPORT;
-+          }
-+      }
-+      isp->isp_osinfo.host->this_id = MAX_FC_TARG+1;
-+#ifdef        ISP_FW_CRASH_DUMP
-+      if (IS_2200(isp))
-+          FCPARAM(isp)->isp_dump_data =
-+              isp_kalloc(QLA2200_RISC_IMAGE_DUMP_SIZE, GFP_KERNEL);
-+      else if (IS_23XX(isp))
-+          FCPARAM(isp)->isp_dump_data =
-+              isp_kalloc(QLA2300_RISC_IMAGE_DUMP_SIZE, GFP_KERNEL);
-+      if (FCPARAM(isp)->isp_dump_data) {
-+          isp_prt(isp, ISP_LOGCONFIG, "f/w crash dump area allocated");
-+          FCPARAM(isp)->isp_dump_data[0] = 0;
-+      }
-+#endif
-+      if (isp_default_frame_size) {
-+          if (isp_default_frame_size != 512 &&
-+              isp_default_frame_size != 1024 &&
-+              isp_default_frame_size != 2048) {
-+                  isp_prt(isp, ISP_LOGERR,
-+                      "bad frame size (%d), defaulting to (%d)",
-+                      isp_default_frame_size, ICB_DFLT_FRMLEN);
-+              isp_default_frame_size = 0;
-+          }
-+      }
-+      if (isp_default_frame_size) {
-+          isp->isp_confopts |= ISP_CFG_OWNFSZ;
-+          isp->isp_osinfo.storep->fibre_scsi.default_frame_size =
-+              isp_default_frame_size;
-+      } else {
-+          isp->isp_osinfo.storep->fibre_scsi.default_frame_size =
-+              isp_default_frame_size = ICB_DFLT_FRMLEN;
-+      }
-+      if (isp_default_exec_throttle) {
-+          if (isp_default_exec_throttle < 16 ||
-+              isp_default_exec_throttle > 255) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "bad execution throttle size (%d), defaulting to (%d)",
-+                  isp_default_exec_throttle, ICB_DFLT_THROTTLE);
-+              isp_default_exec_throttle = 0;
-+          }
-+      }
-+      if (isp_default_exec_throttle) {
-+          isp->isp_confopts |= ISP_CFG_OWNEXCTHROTTLE;
-+          isp->isp_osinfo.storep->fibre_scsi.default_exec_throttle =
-+              isp_default_exec_throttle;
-+      } else {
-+          isp->isp_osinfo.storep->fibre_scsi.default_exec_throttle =
-+              ICB_DFLT_THROTTLE;
-+      }
-+    } else {
-+      isp->isp_osinfo.host->max_id = MAX_TARGETS;
-+      isp->isp_osinfo.host->this_id = 7;      /* temp default */
-+    }
-+    isp->isp_role = isp_parse_rolearg(isp, isp_roles);
-+
-+
-+    /*
-+     * Initialize locks
-+     */
-+    ISP_LOCK_INIT(isp);
-+    ISP_TLOCK_INIT(isp);
-+    sema_init(&isp->mbox_sem, 1);
-+    sema_init(&isp->mbox_c_sem, 0);
-+    sema_init(&isp->fcs_sem, 1);
-+
-+#if defined(CONFIG_PROC_FS) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    /*
-+     * Initialize any PROCFS stuff
-+     */
-+    isplinux_init_proc(isp);
-+#endif
-+
-+    /*
-+     * Start watchdog timer
-+     */
-+    ISP_LOCK_SOFTC(isp);
-+    init_timer(&isp->isp_osinfo.timer);
-+    isp->isp_osinfo.timer.data = (unsigned long) isp;
-+    isp->isp_osinfo.timer.function = isplinux_timer;
-+    isp->isp_osinfo.timer.expires = jiffies + ISP_WATCH_TIME;
-+    add_timer(&isp->isp_osinfo.timer);
-+    isp->dogactive = 1;
-+    if (IS_FC(isp)) {
-+      DECLARE_MUTEX_LOCKED(sem);
-+      ISP_UNLK_SOFTC(isp);
-+      isp->isp_osinfo.task_ctl_sem = &sem;
-+      kernel_thread(isp_task_thread, isp, 0);
-+      down(&sem);
-+      isp->isp_osinfo.task_ctl_sem = NULL;
-+      ISP_LOCK_SOFTC(isp);
-+    }
-+    isplinux_reinit(isp);
-+#ifdef        LINUX_ISP_TARGET_MODE
-+    sema_init(&isp->isp_osinfo.tgt_inisem, 1);
-+#endif
-+#ifdef        ISP_TARGET_MODE
-+    isp_attach_target(isp);
-+#endif
-+    ISP_UNLK_SOFTC(isp);
-+}
-+
-+void
-+isplinux_reinit(struct ispsoftc *isp)
-+{
-+    int maxluns = isp_maxluns;
-+    isp_reset(isp);
-+    if (isp->isp_state != ISP_RESETSTATE) {
-+      isp_prt(isp, ISP_LOGERR, "failed to enter RESET state");
-+      return;
-+    } 
-+    /*
-+     * Until the midlayer starts using REPORT LUNS to dertermine how many
-+     * luns there are for SCSI-3 devices and sets a reasonable limit for
-+     * SCSI-2 devices, we'll follow this ruleset:
-+     * 
-+     *        If our isp_maxluns parameter is unchanged from its default, we
-+     *        limit ourselves to 8 luns for parallel SCSI, 256 for FC-SCSI.
-+     *
-+     *        If somebody has set isp_maxluns away from the fefault, we follow that.
-+     *
-+     *        We filter any value through the HBA maximum
-+     */
-+    if (isp_maxluns == 8) {
-+      if (IS_FC(isp)) {
-+              maxluns = 256;
-+      }
-+    }
-+    isp->isp_osinfo.host->max_lun = min(maxluns, ISP_MAX_LUNS(isp));
-+    isp_init(isp);
-+    if (isp->isp_role == ISP_ROLE_NONE) {
-+      return;
-+    }
-+    if (isp->isp_state != ISP_INITSTATE) {
-+      isp_prt(isp, ISP_LOGERR, "failed to enter INIT state");
-+      return;
-+    }
-+    isp->isp_state = ISP_RUNSTATE;
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    isp->isp_osinfo.host->can_queue = isp->isp_maxcmds;
-+#else
-+    isp->isp_osinfo.host->can_queue = min(255, isp->isp_maxcmds);
-+#endif
-+    if (isp->isp_osinfo.host->can_queue == 0)
-+      isp->isp_osinfo.host->can_queue = 1;
-+
-+    if (IS_FC(isp)) {
-+      isp->isp_osinfo.host->this_id = MAX_FC_TARG;
-+      /*
-+       * This is *not* the same as execution throttle- that is set
-+       * in isplinux_sqd and is per-device.
-+       *
-+       * What we try and do here is take how much we can queue at
-+       * a given time and spread it, reasonably, over all the luns
-+       * we expect to run at a time.
-+       */
-+      if (isp_cmd_per_lun) {
-+          isp->isp_osinfo.host->cmd_per_lun = isp_cmd_per_lun;
-+      } else {
-+          /*
-+           * JAWAG.
-+           */
-+          isp->isp_osinfo.host->cmd_per_lun = isp->isp_maxcmds >> 3;
-+      }
-+
-+      /*
-+       * We seem to need a bit of settle time.
-+       */
-+      USEC_DELAY(1 * 1000000);
-+    } else {
-+      int bus;
-+
-+      if (isp_cmd_per_lun) {
-+          isp->isp_osinfo.host->cmd_per_lun = isp_cmd_per_lun;
-+      } else {
-+          /*
-+           * Maximum total commands spread over either 8 targets,
-+           * or 4 targets, 2 luns, etc.
-+           */
-+          isp->isp_osinfo.host->cmd_per_lun = isp->isp_maxcmds >> 3;
-+      }
-+
-+      /*
-+       * No way to give different ID's for the second bus.
-+       */
-+      isp->isp_osinfo.host->this_id = SDPARAM(isp)->isp_initiator_id;
-+      bus = 0;
-+      (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
-+      if (IS_DUALBUS(isp)) {
-+          bus = 1;
-+          (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
-+      }
-+      /*
-+       * Bus Reset delay handled by firmware.
-+       */
-+    }
-+}
-+
-+int
-+isp_drain_reset(struct ispsoftc *isp, char *msg)
-+{
-+    isp->isp_blocked = 1;
-+    /*
-+     * Drain active commands.
-+     */
-+    if (isp_drain(isp, msg)) {
-+      isp->isp_failed = 1;
-+      isp->isp_blocked = 0;
-+      return (-1);
-+    }
-+    isp_reinit(isp);
-+    if ((isp->isp_role == ISP_ROLE_NONE && isp->isp_state < ISP_RESETSTATE) ||
-+        (isp->isp_role != ISP_ROLE_NONE && isp->isp_state < ISP_RUNSTATE)) {
-+      isp->isp_blocked = 0;
-+      return (-1);
-+    }
-+    isp->isp_failed = 0;
-+    isp->isp_blocked = 0;
-+    return (0);
-+}
-+
-+int
-+isp_drain(struct ispsoftc *isp, char *whom)
-+{
-+    int nslept;
-+
-+    if (isp->isp_nactive == 0)
-+      return (0);
-+
-+    isp->isp_draining = 1;
-+    nslept = 0;
-+    isp_prt(isp, ISP_LOGDEBUG0, "draining %d commands", isp->isp_nactive);
-+    while (isp->isp_nactive) {
-+        USEC_SLEEP(isp, 100000);      /* drops lock */
-+      if (++nslept >= (60 * 10)) {    /* 60 seconds */
-+              isp_prt(isp, ISP_LOGERR, "%s: command drain timed out", whom);
-+              isp->isp_draining = 0;
-+              return (-1);
-+      }
-+    }
-+    isp_prt(isp, ISP_LOGDEBUG0, "done draining commands");
-+    isp->isp_draining = 0;
-+    isplinux_runwaitq(isp);
-+    return (0);
-+}
-+
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define       ISP_THREAD_CAN_EXIT     isp->isp_host->loaded_as_module
-+#else
-+#define       ISP_THREAD_CAN_EXIT     0
-+#endif
-+
-+static int
-+isp_task_thread(void *arg)
-+{
-+    DECLARE_MUTEX_LOCKED(thread_sleep_semaphore);
-+    struct ispsoftc *isp = arg;
-+    unsigned long flags;
-+    int action, nactions, exit_thread = 0;
-+    isp_thread_action_t curactions[MAX_THREAD_ACTION];
-+
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+    /* XXX: Not really sure why the 2.5.X changes do this */
-+    if (ISP_THREAD_CAN_EXIT) {
-+      siginitsetinv(&current->blocked, sigmask(SIGHUP));
-+    } else {
-+      siginitsetinv(&current->blocked, 0);
-+    }
-+    lock_kernel();
-+    daemonize();
-+    sprintf(current->comm, "isp_thrd%d", isp->isp_unit);
-+#else
-+    lock_kernel();
-+    daemonize("isp_thrd%d", isp->isp_unit);
-+#endif
-+    isp->isp_osinfo.task_thread = current;
-+    isp->isp_osinfo.task_request = &thread_sleep_semaphore;
-+    unlock_kernel();
-+
-+    if (isp->isp_osinfo.task_ctl_sem) {
-+      up(isp->isp_osinfo.task_ctl_sem);
-+    }
-+    isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread starting");
-+
-+    while (exit_thread == 0) {
-+      isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread sleeping");
-+      down_interruptible(&thread_sleep_semaphore);
-+      if (ISP_THREAD_CAN_EXIT) {
-+          if (signal_pending(current))
-+              break;
-+      }
-+      isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread running");
-+
-+      spin_lock_irqsave(&isp->isp_osinfo.tlock, flags);
-+      nactions = isp->isp_osinfo.nt_actions;
-+      isp->isp_osinfo.nt_actions = 0;
-+      for (action = 0; action < nactions; action++) {
-+              curactions[action] = isp->isp_osinfo.t_actions[action];
-+              isp->isp_osinfo.t_actions[action].thread_action = 0;
-+              isp->isp_osinfo.t_actions[action].thread_waiter = 0;
-+      }
-+      spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags);
-+
-+      for (action = 0; action < nactions; action++) {
-+          isp_thread_action_t *tap = &curactions[action];
-+          isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread[%d]: action %d (%p)",
-+              action, tap->thread_action, tap->thread_waiter);
-+          switch (tap->thread_action) {
-+          case ISP_THREAD_NIL:
-+              break;
-+#ifdef        ISP_FW_CRASH_DUMP
-+          case ISP_THREAD_FW_CRASH_DUMP:
-+              ISP_LOCKU_SOFTC(isp);
-+              FCPARAM(isp)->isp_fwstate = FW_CONFIG_WAIT;
-+              FCPARAM(isp)->isp_loopstate = LOOP_NIL;
-+              isp_fw_dump(isp);
-+              SEND_THREAD_EVENT(isp, ISP_THREAD_REINIT, 0);
-+              ISP_UNLKU_SOFTC(isp);
-+              break;
-+#endif
-+          case ISP_THREAD_REINIT:
-+          {
-+              int level;
-+              ISP_LOCKU_SOFTC(isp);
-+              level = (isp->isp_role == ISP_ROLE_NONE)?
-+                  ISP_RESETSTATE : ISP_INITSTATE;
-+              isp_reinit(isp);
-+              if (isp->isp_state >= level) {
-+                  isp_async(isp, ISPASYNC_FW_RESTARTED, NULL);
-+              } else {
-+                  SEND_THREAD_EVENT(isp, ISP_THREAD_REINIT, 0);
-+              }
-+              ISP_UNLKU_SOFTC(isp);
-+              break;
-+          }
-+          case ISP_THREAD_FC_RESCAN:
-+              ISP_LOCKU_SOFTC(isp);
-+              if (isp_fc_runstate(isp, 250000) == 0) {
-+                  isp->isp_deadloop = 0;
-+                  isp->isp_downcnt = 0;
-+                  isp->isp_fcrspend = 0;
-+                  isp->isp_blocked = 0;
-+                  isplinux_runwaitq(isp);
-+              } else {
-+                  /*
-+                   * Try again in a little while.
-+                   */
-+                  isp->isp_fcrspend = 0;
-+                  if (++isp->isp_downcnt == isp_deadloop_time) {
-+                      isp_prt(isp, ISP_LOGWARN, "assuming loop is dead");
-+                      FCPARAM(isp)->loop_seen_once = 0;
-+                      isp->isp_deadloop = 1;
-+                      isp->isp_downcnt = 0;
-+                      isp->isp_blocked = 0;   /* unblock anyway */
-+                      isplinux_flushwaitq(isp);
-+                  } else {
-+                      isp->isp_fcrswdog = 1;
-+                  }
-+              }
-+              ISP_UNLKU_SOFTC(isp);
-+              break;
-+          case ISP_THREAD_EXIT:
-+              if (ISP_THREAD_CAN_EXIT) {
-+                  exit_thread = 1;
-+              }
-+              break;
-+         default:
-+              break;
-+         }
-+         if (tap->thread_waiter) {
-+              isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread signalling %p",
-+                  tap->thread_waiter);
-+              up(tap->thread_waiter);
-+         }
-+      }
-+    }
-+    isp_prt(isp, ISP_LOGDEBUG1, "isp_task_thread exiting");
-+    isp->isp_osinfo.task_request = NULL;
-+    return (0);
-+}
-+
-+void
-+isp_prt(struct ispsoftc *isp, int level, const char *fmt, ...)
-+{
-+    char buf[256];
-+    char *prefl;
-+    va_list ap;
-+
-+    if (level != ISP_LOGALL && (level & isp->isp_dblev) == 0) {
-+      return;
-+    }
-+    if (level & ISP_LOGERR) {
-+      prefl = KERN_ERR "%s: ";
-+    } else if (level & ISP_LOGWARN) {
-+      prefl = KERN_WARNING "%s: ";
-+    } else if (level & ISP_LOGINFO) {
-+      prefl = KERN_NOTICE "%s: ";
-+    } else if (level & ISP_LOGCONFIG) {
-+      prefl = KERN_INFO "%s: ";
-+    } else {
-+      prefl = "%s: ";
-+    }
-+    printk(prefl, isp->isp_name);
-+    va_start(ap, fmt);
-+    vsprintf(buf, fmt, ap);
-+    va_end(ap);
-+    printk("%s\n", buf);
-+}
-+
-+char *
-+isp_snprintf(char *buf, size_t amt, const char *fmt, ...)
-+{
-+    va_list ap;
-+    ARGSUSED(amt);
-+    va_start(ap, fmt);
-+    (void) vsprintf(buf, fmt, ap);
-+    va_end(ap);
-+    return (buf);
-+}
-+
-+#ifdef MODULE
-+#ifndef       ISP_LICENSE
-+#define       ISP_LICENSE     "Dual BSD/GPL"
-+#endif
-+#ifdef        MODULE_LICENSE
-+MODULE_LICENSE( ISP_LICENSE );
-+#endif
-+MODULE_PARM(isp_debug, "i");
-+MODULE_PARM(isp_disable, "i");
-+MODULE_PARM(isp_nonvram, "i");
-+MODULE_PARM(isp_nofwreload, "i");
-+MODULE_PARM(isp_maxluns, "i");
-+MODULE_PARM(isp_throttle, "i");
-+MODULE_PARM(isp_cmd_per_lun, "i");
-+MODULE_PARM(isp_roles, "s");
-+MODULE_PARM(isp_fcduplex, "i");
-+MODULE_PARM(isp_wwpns, "s");
-+MODULE_PARM(isp_wwnns, "s");
-+MODULE_PARM(isp_nport_only, "i");
-+MODULE_PARM(isp_loop_only, "i");
-+MODULE_PARM(isp_deadloop_time, "i");
-+MODULE_PARM(isp_xtime, "i");
-+MODULE_PARM(isp_default_frame_size, "i");
-+MODULE_PARM(isp_default_exec_throttle, "i");
-+#endif
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,3,27)
-+struct proc_dir_entry proc_scsi_qlc = {
-+    PROC_SCSI_QLOGICISP, 3, "isp", S_IFDIR | S_IRUGO | S_IXUGO, 2
-+};
-+#endif
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) || defined(MODULE)
-+Scsi_Host_Template driver_template = QLOGICISP;
-+#include "scsi_module.c"
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_linux.h    2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1035 @@
-+/* @(#)isp_linux.h 1.51 */
-+/*
-+ * Qlogic ISP SCSI Host Adapter Linux Wrapper Definitions
-+ *---------------------------------------
-+ * Copyright (c) 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions, and the following disclaimer,
-+ *    without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ * 
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ */
-+
-+#ifndef _ISP_LINUX_H
-+#define _ISP_LINUX_H
-+
-+#include <linux/vmalloc.h>
-+
-+#ifndef       ISP_MODULE
-+#define       __NO_VERSION__
-+#endif
-+#ifdef        LINUX_ISP_TARGET_MODE
-+#define       EXPORT_SYMTAB
-+#endif
-+
-+#include <linux/version.h>
-+#ifndef       KERNEL_VERSION
-+#define KERNEL_VERSION(v,p,s)         (((v)<<16)+(p<<8)+s)
-+#endif
-+#define       _KVC    KERNEL_VERSION
-+
-+#if LINUX_VERSION_CODE <= _KVC(2,2,0)
-+#error        "Linux 2.0 and 2.1 kernels are not supported anymore"
-+#endif
-+#if LINUX_VERSION_CODE >= _KVC(2,3,0) && LINUX_VERSION_CODE < _KVC(2,4,0)
-+#error        "Linux 2.3 kernels are not supported"
-+#endif
-+
-+#ifndef       UNUSED_PARAMETER
-+#define       UNUSED_PARAMETER(x)     (void) x
-+#endif
-+
-+#include <linux/autoconf.h>
-+#ifdef        CONFIG_SMP
-+#define       __SMP__ 1
-+#endif
-+
-+#define COPYIN(u, k, n, m) \
-+      copy_from_user((void*)(k), (const void*)(u), (n))
-+#define COPYOUT(k, u, n, m) \
-+      copy_to_user((void*)(u), (const void*)(k), (n))
-+
-+/*
-+ * Be nice and get ourselves out of the way of other drivers.
-+ * Note that if all the other drivers are there, then the only
-+ * thing we'd attach to that they wouldn't would be the obsolete
-+ *  and unavailable 1240 or the 23XX.
-+ */
-+#ifdef        CONFIG_SCSI_QLOGIC_ISP
-+#define       ISP_DISABLE_1020_SUPPORT 1
-+#endif
-+#ifdef        CONFIG_SCSI_QLOGIC_FC
-+#define       ISP_DISABLE_2100_SUPPORT 1
-+#define       ISP_DISABLE_2200_SUPPORT 1
-+#endif
-+#ifdef        CONFIG_SCSI_QLOGIC_1280
-+#define       ISP_DISABLE_1080_SUPPORT 1
-+#define       ISP_DISABLE_12160_SUPPORT 1
-+#endif
-+
-+#include <linux/module.h>
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/types.h>
-+#include <linux/blk.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/ioport.h>
-+#include <linux/mm.h>
-+#include <linux/sched.h>
-+#include <linux/stat.h>
-+#include <linux/pci.h>
-+#include <asm/dma.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#include <linux/smp.h>
-+#include <linux/spinlock.h>
-+#else
-+#include <asm/spinlock.h>
-+#endif
-+#include <asm/system.h>
-+#include <asm/byteorder.h>
-+#include <linux/interrupt.h>
-+#include "scsi.h"
-+#include "hosts.h"
-+
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,14)
-+#define       DECLARE_MUTEX_LOCKED(sem) struct semaphore sem = MUTEX_LOCKED
-+#define       __set_current_state(state_value)                        \
-+      do { current->state = (state_value); } while (0)
-+static __inline void daemonize(void);
-+static __inline void daemonize(void)
-+{
-+      struct fs_struct *fs;
-+
-+      exit_mm(current);
-+      current->session = 1;
-+      current->pgrp = 1;
-+      current->tty = NULL;
-+      exit_fs(current);       /* current->fs->count--; */
-+      fs = init_task.fs;
-+      current->fs = fs;
-+      atomic_inc(&fs->count);
-+}
-+#endif
-+/*
-+ * These bits and pieces of keeping track of Linux versions
-+ * and some of the various foo items for locking/unlocking
-+ * gratefully borrowed from (amongst others) Doug Ledford
-+ * and Gerard Roudier.
-+ */
-+
-+#define       PWRB(p, o, r)   pci_write_config_byte(p->pci_dev, o, r)
-+#define       PWRW(p, o, r)   pci_write_config_word(p->pci_dev, o, r)
-+#define       PWRL(p, o, r)   pci_write_config_dword(p->pci_dev, o, r)
-+#define       PRDW(p, o, r)   pci_read_config_word(p->pci_dev, o, r)
-+#define       PRDD(p, o, r)   pci_read_config_dword(p->pci_dev, o, r)
-+#define       PRDB(p, o, r)   pci_read_config_byte(p->pci_dev, o, r)
-+
-+#ifndef       bus_dvma_to_mem
-+#if defined (__alpha__)
-+#define bus_dvma_to_mem(p)              ((p) & 0xfffffffful)
-+#else
-+#define bus_dvma_to_mem(p)              (p)
-+#endif
-+#endif
-+
-+#if defined (__powerpc__)
-+#undef        __pa
-+#define       __pa(x) x
-+#endif
-+#if defined (__i386__) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#undef        __pa
-+#define       __pa(x) x
-+#endif
-+#if defined (__sparc__) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#undef        __pa
-+#define       __pa(x) x
-+#endif
-+#if defined (__alpha__) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#undef        __pa
-+#define       __pa(x) x
-+#endif
-+
-+/*
-+ * Efficiency- get rid of SBus code && tests unless we need them.
-+ */
-+#if   defined(__sparcv9__ ) || defined(__sparc__)
-+#define       ISP_SBUS_SUPPORTED      1
-+#else
-+#define       ISP_SBUS_SUPPORTED      0
-+#endif
-+
-+#define       ISP_PLATFORM_VERSION_MAJOR      2
-+#define       ISP_PLATFORM_VERSION_MINOR      1
-+
-+#ifndef       BIG_ENDIAN
-+#define       BIG_ENDIAN      4321
-+#endif
-+#ifndef       LITTLE_ENDIAN
-+#define       LITTLE_ENDIAN   1234
-+#endif
-+
-+#ifdef        __BIG_ENDIAN
-+#define       BYTE_ORDER      BIG_ENDIAN
-+#endif
-+#ifdef        __LITTLE_ENDIAN
-+#define       BYTE_ORDER      LITTLE_ENDIAN
-+#endif
-+
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define       DMA_ADDR_T              unsigned long
-+#define       QLA_SG_C(sg)            sg->length
-+#define       QLA_SG_A(sg)            virt_to_bus(sg->address)
-+#else
-+#define       DMA_ADDR_T              dma_addr_t
-+#define       QLA_SG_C(sg)            sg_dma_len(sg)
-+#define       QLA_SG_A(sg)            sg_dma_address(sg)
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,4,16)
-+#define       DMA_HTYPE_T             char *
-+#define       QLA_HANDLE(cmd)         (cmd)->SCp.ptr
-+#else
-+#define       DMA_HTYPE_T             dma_addr_t
-+#define       QLA_HANDLE(cmd)         (cmd)->SCp.dma_handle
-+#endif
-+#endif
-+
-+#define       HANDLE_LOOPSTATE_IN_OUTER_LAYERS        1
-+#ifdef        min
-+#undef        min
-+#endif
-+#ifdef        max
-+#undef        max
-+#endif
-+
-+
-+/*
-+ * Normally this should be taken care of by typedefs,
-+ * but linux includes are a complete dog's breakfast.
-+ */
-+
-+#define       u_int8_t        unsigned char
-+#define       u_int16_t       unsigned short
-+#define       u_int32_t       unsigned int
-+#if BITS_PER_LONG == 64
-+#define       u_int64_t       unsigned long
-+#else
-+#define       u_int64_t       unsigned long long
-+#endif
-+#define       int8_t          char
-+#define       int16_t         short
-+#define       int32_t         int
-+#define       u_long          unsigned long
-+#define       u_int           unsigned int
-+#define       u_char          unsigned char
-+typedef u_long vm_offset_t;
-+
-+#ifdef        LINUX_ISP_TARGET_MODE
-+#define       DEFAULT_DEVICE_TYPE     3
-+#define       NTGT_CMDS               256
-+
-+#define       _WIX(isp, b, ix)        (((b << 6)) | (ix >> 5))
-+#define       _BIX(isp, ix)           (1 << (ix & 0x1f))
-+
-+#define       LUN_BTST(isp, b, ix)    \
-+      (((isp)->isp_osinfo.lunbmap[_WIX(isp, b, ix)] & _BIX(isp, ix)) != 0)
-+
-+#define       LUN_BSET(isp, b, ix)    \
-+      isp->isp_osinfo.lunbmap[_WIX(isp, b, ix)] |= _BIX(isp, ix)
-+
-+#define       LUN_BCLR(isp, b, ix)    \
-+      isp->isp_osinfo.lunbmap[_WIX(isp, b, ix)] &= ~_BIX(isp, ix)
-+
-+#endif
-+
-+typedef struct {
-+      enum {
-+          ISP_THREAD_NIL=1,
-+          ISP_THREAD_FC_RESCAN,
-+          ISP_THREAD_REINIT,
-+          ISP_THREAD_FW_CRASH_DUMP,
-+          ISP_THREAD_EXIT
-+      }                       thread_action;
-+      struct semaphore *      thread_waiter;
-+} isp_thread_action_t;
-+#define       MAX_THREAD_ACTION       10
-+
-+union pstore;
-+struct isposinfo {
-+    struct ispsoftc *         isp_next;
-+    struct Scsi_Host *                host;
-+    Scsi_Cmnd                 *wqnext, *wqtail;
-+    Scsi_Cmnd                 *dqnext, *dqtail;
-+    union pstore              *storep;
-+    char                      hbaname[16];
-+    unsigned short            instance;
-+    unsigned short            wqcnt;
-+    unsigned short            wqhiwater;
-+    unsigned short            hiwater;
-+    struct timer_list         timer;
-+    struct timer_list         _mbtimer;
-+    struct semaphore          _mbox_sem;
-+    struct semaphore          _mbox_c_sem;
-+    struct semaphore          _fcs_sem;
-+    spinlock_t                        slock;
-+    unsigned volatile int
-+              _downcnt        : 8,
-+                              : 15,
-+              _isopen         : 1,
-+              _deadloop       : 1,
-+              _draining       : 1,
-+              _blocked        : 1,
-+              _fcrswdog       : 1,
-+              _fcrspend       : 1,
-+              _dogactive      : 1,
-+              _mbox_waiting   : 1,
-+              _mbintsok       : 1;
-+    void *                    misc[8]; /* private platform variant usage */
-+    unsigned long             _iflags;
-+    struct task_struct *      task_thread;
-+    struct semaphore *                task_request;
-+    struct semaphore *                task_ctl_sem;
-+    spinlock_t                        tlock;
-+    unsigned int              nt_actions;
-+    unsigned int              device_id;
-+    isp_thread_action_t               t_actions[MAX_THREAD_ACTION];
-+#ifdef        LINUX_ISP_TARGET_MODE
-+#define       TM_WANTED               0x08
-+#define       TM_BUSY                 0x04
-+#define       TM_TMODE_ENABLED        0x03
-+    u_int32_t         rollinfo        : 16,
-+                      rstatus         : 8,
-+                                      : 3,
-+                      hcb             : 1,
-+                      tmflags         : 4;
-+    struct semaphore          tgt_inisem;
-+    struct semaphore *                rsemap;
-+   /*
-+    * This is very inefficient, but is in fact big enough
-+    * to cover a complete bitmap for Fibre Channel, as well
-+    * as the dual bus SCSI cards. This works out without
-+    * overflow easily because the most you can enable
-+    * for the SCSI cards is 64 luns (x 2 busses).
-+    *
-+    * For Fibre Channel, we can run the max luns up to 16384
-+    * but we'll default to the minimum we can support here.
-+    */
-+#define       TM_MAX_LUN_FC           128
-+#define       TM_MAX_LUN_SCSI         64
-+    u_int32_t                 lunbmap[TM_MAX_LUN_FC >> 5];
-+    struct tmd_cmd *          pending_t;
-+    struct tmd_cmd *          tfreelist;
-+    struct tmd_cmd *          pool;
-+#endif
-+};
-+#define       mbtimer         isp_osinfo._mbtimer
-+#define       dogactive       isp_osinfo._dogactive
-+#define       mbox_sem        isp_osinfo._mbox_sem
-+#define       mbox_c_sem      isp_osinfo._mbox_c_sem
-+#define       fcs_sem         isp_osinfo._fcs_sem
-+#define       mbintsok        isp_osinfo._mbintsok
-+#define       mbox_waiting    isp_osinfo._mbox_waiting
-+#define       isp_pbuf        isp_osinfo._pbuf
-+#define       isp_fcrspend    isp_osinfo._fcrspend
-+#define       isp_fcrswdog    isp_osinfo._fcrswdog
-+#define       isp_blocked     isp_osinfo._blocked
-+#define       isp_draining    isp_osinfo._draining
-+#define       isp_downcnt     isp_osinfo._downcnt
-+#define       isp_isopen      isp_osinfo._isopen
-+#define       isp_deadloop    isp_osinfo._deadloop
-+
-+#define       iflags          isp_osinfo._iflags
-+
-+#define       SEND_THREAD_EVENT(isp, action, dowait)                          \
-+if (isp->isp_osinfo.task_request) {                                   \
-+    unsigned long flags;                                              \
-+    spin_lock_irqsave(&isp->isp_osinfo.tlock, flags);                 \
-+    if (isp->isp_osinfo.nt_actions >= MAX_THREAD_ACTION) {            \
-+      spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags);          \
-+      isp_prt(isp, ISP_LOGERR, "thread event overflow");              \
-+    } else if (action == ISP_THREAD_FC_RESCAN && isp->isp_fcrspend) { \
-+      spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags);          \
-+    } else {                                                          \
-+      DECLARE_MUTEX_LOCKED(sem);                                      \
-+      isp_thread_action_t *tap;                                       \
-+      tap = &isp->isp_osinfo.t_actions[isp->isp_osinfo.nt_actions++]; \
-+      tap->thread_action = action;                                    \
-+      if (dowait)                                                     \
-+          tap->thread_waiter = &sem;                                  \
-+      else                                                            \
-+          tap->thread_waiter = 0;                                     \
-+      if (action == ISP_THREAD_FC_RESCAN)                             \
-+          isp->isp_fcrspend = 1;                                      \
-+      up(isp->isp_osinfo.task_request);                               \
-+      spin_unlock_irqrestore(&isp->isp_osinfo.tlock, flags);          \
-+      if (dowait) {                                                   \
-+          down(&sem);                                                 \
-+          isp_prt(isp, ISP_LOGDEBUG1,                                 \
-+              "action %d done from %p", action, &sem);                \
-+      } else {                                                        \
-+          isp_prt(isp, ISP_LOGDEBUG1,                                 \
-+              "action %d sent", action);                              \
-+      }                                                               \
-+    }                                                                 \
-+}
-+
-+/*
-+ * Locking macros...
-+ */
-+#define       ISP_LOCK_INIT(isp)              spin_lock_init(&isp->isp_osinfo.slock)
-+#define       ISP_LOCK_SOFTC(isp)             {                               \
-+              unsigned long _flags;                                   \
-+              spin_lock_irqsave(&isp->isp_osinfo.slock, _flags);      \
-+              isp->iflags = _flags;                                   \
-+      }
-+#define       ISP_UNLK_SOFTC(isp)             {                               \
-+              unsigned long _flags = isp->iflags;                     \
-+              spin_unlock_irqrestore(&isp->isp_osinfo.slock, _flags); \
-+      }
-+
-+#define       ISP_ILOCK_SOFTC                 ISP_LOCK_SOFTC
-+#define       ISP_IUNLK_SOFTC                 ISP_UNLK_SOFTC
-+#define       ISP_IGET_LK_SOFTC               ISP_LOCK_SOFTC
-+#define       ISP_DROP_LK_SOFTC               ISP_UNLK_SOFTC
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define       ISP_LOCK_SCSI_DONE(isp)         {                               \
-+              unsigned long _flags;                                   \
-+              spin_lock_irqsave(&io_request_lock, _flags);            \
-+              isp->iflags = _flags;                                   \
-+      }
-+#define       ISP_UNLK_SCSI_DONE(isp)         {                               \
-+              unsigned long _flags = isp->iflags;                     \
-+              spin_unlock_irqrestore(&io_request_lock, _flags);       \
-+      }
-+#else
-+#define       ISP_LOCK_SCSI_DONE(isp)         do { } while(0)
-+#define       ISP_UNLK_SCSI_DONE(isp)         do { } while(0)
-+#endif
-+#define       ISP_LOCKU_SOFTC                 ISP_ILOCK_SOFTC
-+#define       ISP_UNLKU_SOFTC                 ISP_IUNLK_SOFTC
-+#define       ISP_TLOCK_INIT(isp)             spin_lock_init(&isp->isp_osinfo.tlock)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define       ISP_DRIVER_ENTRY_LOCK(isp)      spin_unlock_irq(&io_request_lock)
-+#define       ISP_DRIVER_EXIT_LOCK(isp)       spin_lock_irq(&io_request_lock)
-+#else
-+#define       ISP_DRIVER_ENTRY_LOCK(isp)      \
-+      spin_unlock_irq(isp->isp_osinfo.host->host_lock)
-+#define       ISP_DRIVER_EXIT_LOCK(isp)       \
-+      spin_lock_irq(isp->isp_osinfo.host->host_lock)
-+#endif
-+
-+#define       ISP_MUST_POLL(isp)      (in_interrupt() || isp->mbintsok == 0)
-+/*
-+ * Misc SCSI defines
-+ */
-+#define       MSG_SIMPLE_Q_TAG        0x21
-+#define       MSG_HEAD_OF_Q_TAG       0x22
-+#define       MSG_ORDERED_Q_TAG       0x23
-+
-+/*
-+ * Required Macros/Defines
-+ */
-+
-+#define       INLINE                  __inline
-+
-+#if   LINUX_VERSION_CODE > KERNEL_VERSION(2,4,18) && \
-+    defined(CONFIG_HIGHMEM64G) && !defined(LINUX_ISP_TARGET_MODE)
-+#define       ISP_DAC_SUPPORTED       1
-+#else
-+#define       ISP_DAC_SUPPORTED       0
-+#endif
-+
-+#define       ISP2100_SCRLEN          0x800
-+
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define       MEMZERO                 _isp_memzero
-+#define       MEMCPY                  _isp_memcpy
-+#else
-+#define       MEMZERO(b, a)           memset(b, 0, a)
-+#define       MEMCPY                  memcpy
-+#endif
-+#define       SNPRINTF                isp_snprintf
-+#define       USEC_DELAY              _isp_usec_delay
-+#define       USEC_SLEEP(isp, x)                                              \
-+              ISP_DROP_LK_SOFTC(isp);                                 \
-+              __set_current_state(TASK_UNINTERRUPTIBLE);              \
-+              (void) schedule_timeout(_usec_to_jiffies(x));           \
-+              ISP_IGET_LK_SOFTC(isp)
-+
-+#define       NANOTIME_T              struct timeval
-+/* for prior to 2.2.19, use do_gettimeofday, and, well, it'll be inaccurate */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
-+#define       GET_NANOTIME(ptr)       \
-+      (ptr)->tv_sec = 0, (ptr)->tv_usec = 0, get_fast_time(ptr)
-+#else
-+#define       GET_NANOTIME(ptr)       \
-+      (ptr)->tv_sec = 0, (ptr)->tv_usec = 0, do_gettimeofday(ptr)
-+#endif
-+#define       GET_NANOSEC(x)          \
-+  ((u_int64_t) ((((u_int64_t)(x)->tv_sec) * 1000000 + (x)->tv_usec)))
-+#define       NANOTIME_SUB            _isp_microtime_sub
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+#define       MAXISPREQUEST(isp)      256
-+#else
-+#define       MAXISPREQUEST(isp)      ((IS_FC(isp) || IS_ULTRA2(isp))? 1024 : 256)
-+#endif
-+
-+#if   defined(__i386__)
-+#define       MEMORYBARRIER(isp, type, offset, size)  barrier()
-+#elif defined(__alpha__)
-+#define       MEMORYBARRIER(isp, type, offset, size)  mb()
-+#elif defined(__sparc__)
-+#define       MEMORYBARRIER(isp, type, offset, size)  mb()
-+#elif defined(__powerpc__)
-+#define       MEMORYBARRIER(isp, type, offset, size)  \
-+      __asm__ __volatile__("eieio" ::: "memory")
-+#else
-+#  ifdef mb
-+#    define   MEMORYBARRIER(isp, type, offset, size)  mb()
-+#  else
-+#    define   MEMORYBARRIER(isp, type, offset, size)  barrier()
-+#  endif
-+#endif
-+
-+#define       MBOX_ACQUIRE(isp)                                               \
-+      /*                                                              \
-+       * Try and acquire semaphore the easy way first-                \
-+       * with our lock already held.                                  \
-+       */                                                             \
-+      if (down_trylock(&isp->mbox_sem)) {                             \
-+          if (in_interrupt()) {                                       \
-+              mbp->param[0] = MBOX_HOST_INTERFACE_ERROR;              \
-+              isp_prt(isp, ISP_LOGERR, "cannot acquire MBOX sema");   \
-+              return;                                                 \
-+          }                                                           \
-+          ISP_DROP_LK_SOFTC(isp);                                     \
-+          down(&isp->mbox_sem);                                       \
-+          ISP_IGET_LK_SOFTC(isp);                                     \
-+      }
-+
-+#define       MBOX_WAIT_COMPLETE(isp)                                         \
-+      if (ISP_MUST_POLL(isp)) {                                       \
-+              int j, lim = 5000000;                                   \
-+              if (isp->isp_mbxwrk0) {                                 \
-+                      lim *= 12;                                      \
-+              }                                                       \
-+              for (j = 0; j < 5000000; j += 100) {                    \
-+                      u_int16_t isr, sema, mbox;                      \
-+                      if (isp->isp_mboxbsy == 0) {                    \
-+                              break;                                  \
-+                      }                                               \
-+                      if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) {    \
-+                              isp_intr(isp, isr, sema, mbox);         \
-+                              if (isp->isp_mboxbsy == 0) {            \
-+                                      break;                          \
-+                              }                                       \
-+                      }                                               \
-+                      ISP_DROP_LK_SOFTC(isp);                         \
-+                      udelay(100);                                    \
-+                      ISP_IGET_LK_SOFTC(isp);                         \
-+              }                                                       \
-+              if (isp->isp_mboxbsy != 0) {                            \
-+                      isp_prt(isp, ISP_LOGWARN,                       \
-+                          "Polled Mailbox Command (0x%x) Timeout",    \
-+                          isp->isp_lastmbxcmd);                       \
-+                      isp->isp_mboxbsy = 0;                           \
-+              }                                                       \
-+      } else {                                                        \
-+              int lim = (isp->isp_mbxwrk0)? 60 : 5;                   \
-+              init_timer(&isp->mbtimer);                              \
-+              isp->mbtimer.data = (unsigned long) isp;                \
-+              isp->mbtimer.function = isplinux_mbtimer;               \
-+              isp->mbtimer.expires = jiffies + (lim * HZ);            \
-+              add_timer(&isp->mbtimer);                               \
-+              isp->mbox_waiting = 1;                                  \
-+              ISP_DROP_LK_SOFTC(isp);                                 \
-+              down(&isp->mbox_c_sem);                                 \
-+              ISP_IGET_LK_SOFTC(isp);                                 \
-+              isp->mbox_waiting = 0;                                  \
-+              del_timer(&isp->mbtimer);                               \
-+              if (isp->isp_mboxbsy != 0) {                            \
-+                      isp_prt(isp, ISP_LOGWARN,                       \
-+                          "Interrupting Mailbox Command (0x%x) Timeout",\
-+                          isp->isp_lastmbxcmd);                       \
-+                      isp->isp_mboxbsy = 0;                           \
-+              }                                                       \
-+      }
-+
-+#define       MBOX_NOTIFY_COMPLETE(isp)                                       \
-+      if (isp->mbox_waiting) {                                        \
-+              isp->mbox_waiting = 0;                                  \
-+              up(&isp->mbox_c_sem);                                   \
-+      }                                                               \
-+      isp->isp_mboxbsy = 0
-+
-+#define       MBOX_RELEASE(isp)       up(&isp->mbox_sem)
-+
-+#define       FC_SCRATCH_ACQUIRE(isp)                                         \
-+      /*                                                              \
-+       * Try and acquire semaphore the easy way first-                \
-+       * with our lock already held.                                  \
-+       */                                                             \
-+      if (in_interrupt()) {                                           \
-+              while (down_trylock(&isp->fcs_sem)) {                   \
-+                      ISP_DROP_LK_SOFTC(isp);                         \
-+                      USEC_DELAY(5000);                               \
-+                      ISP_IGET_LK_SOFTC(isp);                         \
-+              }                                                       \
-+      } else {                                                        \
-+          ISP_DROP_LK_SOFTC(isp);                                     \
-+          down(&isp->fcs_sem);                                        \
-+          ISP_IGET_LK_SOFTC(isp);                                     \
-+      }
-+
-+#define       FC_SCRATCH_RELEASE(isp) up(&isp->fcs_sem)
-+
-+
-+#ifndef       SCSI_GOOD
-+#define       SCSI_GOOD       0x0
-+#endif
-+#ifndef       SCSI_CHECK
-+#define       SCSI_CHECK      0x2
-+#endif
-+#ifndef       SCSI_BUSY
-+#define       SCSI_BUSY       0x8
-+#endif
-+#ifndef       SCSI_QFULL
-+#define       SCSI_QFULL      0x28
-+#endif
-+
-+#define       XS_T                    Scsi_Cmnd
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define       XS_HOST(Cmnd)           Cmnd->device->host
-+#define       XS_ISP(Cmnd)            ((struct ispsoftc *) (Cmnd)->host->hostdata)
-+#define       XS_CHANNEL(Cmnd)        (Cmnd)->channel
-+#define       XS_TGT(Cmnd)            (Cmnd)->target
-+#define       XS_LUN(Cmnd)            (Cmnd)->lun
-+#else
-+#define       XS_HOST(Cmnd)           Cmnd->device->host
-+#define       XS_ISP(Cmnd)            \
-+      ((struct ispsoftc *) (Cmnd)->device->host->hostdata)
-+#define       XS_CHANNEL(Cmnd)        (Cmnd)->device->channel
-+#define       XS_TGT(Cmnd)            (Cmnd)->device->id
-+#define       XS_LUN(Cmnd)            (Cmnd)->device->lun
-+#endif
-+#define       XS_CDBP(Cmnd)           (Cmnd)->cmnd
-+#define       XS_CDBLEN(Cmnd)         (Cmnd)->cmd_len
-+#define       XS_XFRLEN(Cmnd)         (Cmnd)->request_bufflen
-+#define       XS_TIME(Cmnd)           (Cmnd)->timeout
-+#define       XS_RESID(Cmnd)          (Cmnd)->SCp.this_residual
-+#define       XS_STSP(Cmnd)           (&(Cmnd)->SCp.Status)
-+#define       XS_SNSP(Cmnd)           (Cmnd)->sense_buffer
-+#define       XS_SNSLEN(Cmnd)         (sizeof (Cmnd)->sense_buffer)
-+#define       XS_SNSKEY(Cmnd)         ((Cmnd)->sense_buffer[2] & 0xf)
-+#define       XS_TAG_P(Cmnd)          (Cmnd->device->tagged_supported != 0)
-+#define       XS_TAG_TYPE(xs)         REQFLAG_STAG
-+
-+#define       XS_SETERR(xs, v)        \
-+      if ((v) == HBA_TGTBSY) { \
-+              (xs)->SCp.Status = SCSI_BUSY; \
-+      } else { \
-+              (xs)->result &= ~0xff0000; \
-+              (xs)->result |= ((v) << 16); \
-+      }
-+
-+#     define  HBA_NOERROR             DID_OK
-+#     define  HBA_BOTCH               DID_ERROR
-+#     define  HBA_CMDTIMEOUT          DID_TIME_OUT
-+#     define  HBA_SELTIMEOUT          DID_NO_CONNECT
-+#     define  HBA_TGTBSY              123456 /* special handling */
-+#     define  HBA_BUSRESET            DID_RESET
-+#     define  HBA_ABORTED             DID_ABORT
-+#     define  HBA_DATAOVR             DID_ERROR
-+#     define  HBA_ARQFAIL             DID_ERROR
-+
-+#define       XS_ERR(xs)              host_byte((xs)->result)
-+
-+#define       XS_NOERR(xs)            host_byte((xs)->result) == DID_OK
-+
-+#define       XS_INITERR(xs)          (xs)->result = 0, (xs)->SCp.Status = 0
-+
-+#define       XS_SAVE_SENSE(Cmnd, sp)                         \
-+      MEMCPY(&Cmnd->sense_buffer, sp->req_sense_data, \
-+          min(sizeof Cmnd->sense_buffer, sp->req_sense_len))
-+
-+#define       XS_SET_STATE_STAT(a, b, c)
-+
-+#define       DEFAULT_IID(x)          7
-+#define       DEFAULT_LOOPID(x)       111
-+#define       DEFAULT_NODEWWN(isp)    (isp)->isp_defwwnn
-+#define       DEFAULT_PORTWWN(isp)    (isp)->isp_defwwpn
-+#define       DEFAULT_FRAME_SIZE(isp) \
-+    (IS_SCSI(isp)? 0 : isp->isp_osinfo.storep->fibre_scsi.default_frame_size)
-+#define       DEFAULT_EXEC_ALLOC(isp) \
-+    (IS_SCSI(isp)? 0 : isp->isp_osinfo.storep->fibre_scsi.default_exec_alloc)
-+#define       ISP_NODEWWN(isp)        (isp)->isp_nvramwwnn
-+#define       ISP_PORTWWN(isp)        (isp)->isp_nvramwwpn
-+
-+#define       ISP_IOXPUT_8(isp, s, d)         *(d) = s
-+#define       ISP_IOXPUT_16(isp, s, d)        *(d) = cpu_to_le16(s)
-+#define       ISP_IOXPUT_32(isp, s, d)        *(d) = cpu_to_le32(s)
-+
-+#define       ISP_IOXGET_8(isp, s, d)         d = *(s)
-+#define       ISP_IOXGET_16(isp, s, d)        d = le16_to_cpu(*((u_int16_t *)s))
-+#define       ISP_IOXGET_32(isp, s, d)        d = le32_to_cpu(*((u_int32_t *)s))
-+
-+#define       ISP_SWIZZLE_NVRAM_WORD(isp, rp) *rp = le16_to_cpu(*rp)
-+
-+
-+/*
-+ * Includes of common header files
-+ */
-+#include "ispreg.h"
-+#include "ispvar.h"
-+#include "ispmbox.h"
-+
-+/*
-+ * isp_osinfo definitions, extensions and shorthand.
-+ */
-+
-+/*
-+ * Parameter storage. The order of tags is important- sdparam && fcp
-+ * must come first because isp->isp_params is set to point there...
-+ */
-+union pstore {
-+    struct {
-+      sdparam _sdp[2];        /* they need to be sequential */
-+      u_char psc_opts[2][MAX_TARGETS];
-+      u_char dutydone;
-+    } parallel_scsi;
-+    struct {
-+      fcparam fcp;
-+      u_int64_t wwnn;
-+      u_int64_t wwpn;
-+      u_int64_t nvram_wwnn;
-+      u_int64_t nvram_wwpn;
-+      u_int16_t default_frame_size;
-+      u_int16_t default_exec_throttle;
-+    } fibre_scsi;
-+};
-+#define       isp_next        isp_osinfo.isp_next
-+#define       isp_name        isp_osinfo.hbaname
-+#define       isp_host        isp_osinfo.host
-+#define       isp_unit        isp_osinfo.instance
-+#define       isp_psco        isp_osinfo.storep->parallel_scsi.psc_opts
-+#define       isp_dutydone    isp_osinfo.storep->parallel_scsi.dutydone
-+#define       isp_defwwnn     isp_osinfo.storep->fibre_scsi.wwnn
-+#define       isp_defwwpn     isp_osinfo.storep->fibre_scsi.wwpn
-+#define       isp_nvramwwnn   isp_osinfo.storep->fibre_scsi.nvram_wwnn
-+#define       isp_nvramwwpn   isp_osinfo.storep->fibre_scsi.nvram_wwpn
-+
-+/*
-+ * Driver prototypes..
-+ */
-+void isplinux_timer(unsigned long);
-+void isplinux_mbtimer(unsigned long);
-+irqreturn_t isplinux_intr(int, void *, struct pt_regs *);
-+void isplinux_common_init(struct ispsoftc *);
-+#ifdef        CONFIG_PROC_FS
-+void isplinux_init_proc(struct ispsoftc *);
-+void isplinux_undo_proc(struct ispsoftc *);
-+#endif
-+void isplinux_reinit(struct ispsoftc *);
-+void isplinux_sqd(struct Scsi_Host *, Scsi_Device *);
-+
-+int isp_drain_reset(struct ispsoftc *, char *);
-+int isp_drain(struct ispsoftc *, char *);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+static INLINE void _isp_memcpy(void *, void *, size_t);
-+static INLINE void _isp_memzero(void *,  size_t);
-+#endif
-+static INLINE u_int64_t _isp_microtime_sub(struct timeval *, struct timeval *);
-+static INLINE void _isp_usec_delay(unsigned int);
-+static INLINE unsigned long _usec_to_jiffies(unsigned int);
-+
-+int isplinux_proc_info(char *, char **, off_t, int, int, int);
-+int isplinux_detect(Scsi_Host_Template *);
-+int isplinux_release(struct Scsi_Host *);
-+#define       ISPLINUX_RELEASE        isplinux_release
-+const char *isplinux_info(struct Scsi_Host *);
-+int isplinux_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+int isplinux_biosparam(Disk *, kdev_t, int[]);
-+#else
-+int isplinux_biosparam(struct scsi_device *, struct block_device *,
-+    sector_t, int[]); 
-+#endif
-+
-+
-+/*
-+ * Driver wide data...
-+ */
-+extern int isp_debug;
-+extern int isp_unit_seed;
-+extern int isp_disable;
-+extern int isp_nofwreload;
-+extern int isp_nonvram;
-+extern int isp_fcduplex;
-+extern struct ispsoftc *isplist;
-+extern const char *class3_roles[4];
-+
-+/*
-+ * Platform private flags
-+ */
-+#ifndef NULL
-+#define NULL ((void *) 0)
-+#endif
-+
-+#define       ISP_WATCH_TIME          HZ
-+
-+#ifndef       min
-+#define min(a,b) (((a)<(b))?(a):(b))
-+#endif
-+#ifndef       max
-+#define       max(a, b)               (((a) > (b)) ? (a) : (b))
-+#endif
-+#ifndef       roundup
-+#define       roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
-+#endif
-+#ifndef       ARGSUSED
-+#define       ARGSUSED(x)     x = x
-+#endif
-+
-+
-+
-+
-+/*
-+ * Platform specific 'inline' or support functions
-+ */
-+
-+#ifdef        __sparc__
-+#define       _SBSWAP(isp, b, c)                                              \
-+      if (isp->isp_bustype == ISP_BT_SBUS) {                          \
-+              u_int8_t tmp = b;                                       \
-+              b = c;                                                  \
-+              c = tmp;                                                \
-+      }
-+#else
-+#define       _SBSWAP(a, b, c)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-+static INLINE void
-+_isp_memcpy(void *to, void *from, size_t amt)
-+{
-+      unsigned char *x = to; unsigned char *y = from;
-+      while (amt-- != 0) *x++ = *y++;
-+}
-+
-+static INLINE void
-+_isp_memzero(void *to, size_t amt)
-+{
-+      unsigned char *x = to;
-+      while (amt-- != 0) *x++ = 0;
-+}
-+
-+static INLINE unsigned long IspOrder(int);
-+static INLINE unsigned long
-+IspOrder(int nelem)
-+{
-+    unsigned long order, rsize;
-+
-+    order = 0;
-+    rsize = PAGE_SIZE;
-+    while (rsize < (unsigned long) ISP_QUEUE_SIZE(nelem)) {
-+      order++;
-+      rsize <<= 1;
-+    }
-+    return (order);
-+}
-+#endif
-+
-+static INLINE u_int64_t
-+_isp_microtime_sub(struct timeval *b, struct timeval *a)
-+{
-+      u_int64_t elapsed;
-+      struct timeval x = *b;
-+      x.tv_sec -= a->tv_sec;
-+      x.tv_usec -= a->tv_usec;
-+        if (x.tv_usec < 0) {
-+                x.tv_sec--;
-+                x.tv_usec += 1000000;
-+        }
-+        if (x.tv_usec >= 1000000) {
-+                x.tv_sec++;
-+                x.tv_usec -= 1000000;
-+        }
-+      elapsed = GET_NANOSEC(&x);
-+      if (elapsed == 0)
-+              elapsed++;
-+      if ((int64_t) elapsed < 0)      /* !!!! */
-+              return (1000);
-+      return (elapsed * 1000);
-+}
-+
-+static INLINE void
-+_isp_usec_delay(unsigned int usecs)
-+{
-+    while (usecs > 1000) {
-+      mdelay(1);
-+      usecs -= 1000;
-+    }
-+    if (usecs)
-+      udelay(usecs);
-+}
-+
-+static INLINE unsigned long
-+_usec_to_jiffies(unsigned int usecs)
-+{
-+      struct timespec lt;
-+      if (usecs == 0)
-+              usecs++;
-+      lt.tv_sec = 0;
-+      lt.tv_nsec = usecs * 1000;
-+      return (timespec_to_jiffies(&lt));
-+}
-+
-+#define       GetPages(a)     __get_dma_pages(GFP_ATOMIC|GFP_DMA, a)
-+#define       RlsPages(a, b)  free_pages((unsigned long) a, b)
-+
-+char *isp_snprintf(char *, size_t, const char *, ...);
-+
-+static INLINE void *isp_kalloc(size_t, int);
-+static INLINE void *isp_kzalloc(size_t, int);
-+static INLINE void isp_kfree(void *, size_t);
-+
-+static INLINE void *
-+isp_kalloc(size_t size, int flags)
-+{
-+    void *ptr;
-+    if (size > PAGE_SIZE) {
-+        ptr = vmalloc(size);
-+    } else {
-+        ptr = kmalloc(size, flags);
-+    }
-+    return (ptr);
-+}
-+
-+static INLINE void *
-+isp_kzalloc(size_t size, int flags)
-+{
-+    void *ptr = isp_kalloc(size, flags);
-+    if (ptr != NULL){
-+        memset(ptr, 0, size);
-+    }
-+    return (ptr);
-+}
-+
-+static INLINE void
-+isp_kfree(void *ptr, size_t size)
-+{
-+    if (size > PAGE_SIZE) {
-+        vfree(ptr);
-+    } else {
-+        kfree(ptr);
-+    }
-+}
-+
-+/*
-+ * Common inline functions
-+ */
-+
-+#include "isp_inline.h"
-+
-+#ifdef        ISP_TARGET_MODE
-+void isp_attach_target(ispsoftc_t *);
-+void isp_detach_target(ispsoftc_t *);
-+int isp_target_async(struct ispsoftc *, int, int);
-+int isp_target_notify(struct ispsoftc *, void *, u_int16_t *);
-+#endif
-+#ifdef        LINUX_ISP_TARGET_MODE
-+int isp_en_dis_lun(struct ispsoftc *, int, int, int, int);
-+#endif
-+/*
-+ * Config data
-+ */
-+
-+int isplinux_abort(Scsi_Cmnd *);
-+int isplinux_bdr(Scsi_Cmnd *);
-+int isplinux_sreset(Scsi_Cmnd *);
-+int isplinux_hreset(Scsi_Cmnd *);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#define QLOGICISP {                                                   \
-+      next:                           NULL,                           \
-+      module:                         NULL,                           \
-+      proc_info:                      isplinux_proc_info,             \
-+      name:                           "Qlogic ISP 10X0/2X00",         \
-+      detect:                         isplinux_detect,                \
-+      release:                        ISPLINUX_RELEASE,               \
-+      info:                           isplinux_info,                  \
-+      queuecommand:                   isplinux_queuecommand,          \
-+      use_new_eh_code:                1,                              \
-+      eh_abort_handler:               isplinux_abort,                 \
-+      eh_device_reset_handler:        isplinux_bdr,                   \
-+      eh_bus_reset_handler:           isplinux_sreset,                \
-+      eh_host_reset_handler:          isplinux_hreset,                \
-+      bios_param:                     isplinux_biosparam,             \
-+      can_queue:                      1,                              \
-+      sg_tablesize:                   SG_ALL,                         \
-+      use_clustering:                 ENABLE_CLUSTERING,              \
-+      cmd_per_lun:                    1                               \
-+}
-+#else
-+#define QLOGICISP {                                                   \
-+      module:                         NULL,                           \
-+      proc_info:                      isplinux_proc_info,             \
-+      name:                           "Qlogic ISP 10X0/2X00",         \
-+      detect:                         isplinux_detect,                \
-+      release:                        ISPLINUX_RELEASE,               \
-+      info:                           isplinux_info,                  \
-+      queuecommand:                   isplinux_queuecommand,          \
-+      eh_abort_handler:               isplinux_abort,                 \
-+      eh_device_reset_handler:        isplinux_bdr,                   \
-+      eh_bus_reset_handler:           isplinux_sreset,                \
-+      eh_host_reset_handler:          isplinux_hreset,                \
-+      bios_param:                     isplinux_biosparam,             \
-+      can_queue:                      1,                              \
-+      sg_tablesize:                   SG_ALL,                         \
-+      use_clustering:                 ENABLE_CLUSTERING,              \
-+      cmd_per_lun:                    1,                              \
-+      slave_configure:                isplinux_slave_configure,       \
-+}
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
-+#endif /* _ISP_LINUX_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/ispmbox.h      2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,938 @@
-+/* @(#)ispmbox.h 1.24 */
-+/*
-+ * Mailbox and Queue Entry Definitions for for Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice immediately at the beginning of the file, without modification,
-+ *    this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+#ifndef       _ISPMBOX_H
-+#define       _ISPMBOX_H
-+
-+/*
-+ * Mailbox Command Opcodes
-+ */
-+#define MBOX_NO_OP                    0x0000
-+#define MBOX_LOAD_RAM                 0x0001
-+#define MBOX_EXEC_FIRMWARE            0x0002
-+#define MBOX_DUMP_RAM                 0x0003
-+#define MBOX_WRITE_RAM_WORD           0x0004
-+#define MBOX_READ_RAM_WORD            0x0005
-+#define MBOX_MAILBOX_REG_TEST         0x0006
-+#define MBOX_VERIFY_CHECKSUM          0x0007
-+#define MBOX_ABOUT_FIRMWARE           0x0008
-+                                      /*   9 */
-+                                      /*   a */
-+                                      /*   b */
-+                                      /*   c */
-+                                      /*   d */
-+#define MBOX_CHECK_FIRMWARE           0x000e
-+#define       MBOX_READ_RAM_WORD_EXTENDED     0x000f
-+#define MBOX_INIT_REQ_QUEUE           0x0010
-+#define MBOX_INIT_RES_QUEUE           0x0011
-+#define MBOX_EXECUTE_IOCB             0x0012
-+#define MBOX_WAKE_UP                  0x0013
-+#define MBOX_STOP_FIRMWARE            0x0014
-+#define MBOX_ABORT                    0x0015
-+#define MBOX_ABORT_DEVICE             0x0016
-+#define MBOX_ABORT_TARGET             0x0017
-+#define MBOX_BUS_RESET                        0x0018
-+#define MBOX_STOP_QUEUE                       0x0019
-+#define MBOX_START_QUEUE              0x001a
-+#define MBOX_SINGLE_STEP_QUEUE                0x001b
-+#define MBOX_ABORT_QUEUE              0x001c
-+#define MBOX_GET_DEV_QUEUE_STATUS     0x001d
-+                                      /*  1e */
-+#define MBOX_GET_FIRMWARE_STATUS      0x001f
-+#define MBOX_GET_INIT_SCSI_ID         0x0020
-+#define MBOX_GET_SELECT_TIMEOUT               0x0021
-+#define MBOX_GET_RETRY_COUNT          0x0022
-+#define MBOX_GET_TAG_AGE_LIMIT                0x0023
-+#define MBOX_GET_CLOCK_RATE           0x0024
-+#define MBOX_GET_ACT_NEG_STATE                0x0025
-+#define MBOX_GET_ASYNC_DATA_SETUP_TIME        0x0026
-+#define MBOX_GET_SBUS_PARAMS          0x0027
-+#define               MBOX_GET_PCI_PARAMS     MBOX_GET_SBUS_PARAMS
-+#define MBOX_GET_TARGET_PARAMS                0x0028
-+#define MBOX_GET_DEV_QUEUE_PARAMS     0x0029
-+#define       MBOX_GET_RESET_DELAY_PARAMS     0x002a
-+                                      /*  2b */
-+                                      /*  2c */
-+                                      /*  2d */
-+                                      /*  2e */
-+                                      /*  2f */
-+#define MBOX_SET_INIT_SCSI_ID         0x0030
-+#define MBOX_SET_SELECT_TIMEOUT               0x0031
-+#define MBOX_SET_RETRY_COUNT          0x0032
-+#define MBOX_SET_TAG_AGE_LIMIT                0x0033
-+#define MBOX_SET_CLOCK_RATE           0x0034
-+#define MBOX_SET_ACT_NEG_STATE                0x0035
-+#define MBOX_SET_ASYNC_DATA_SETUP_TIME        0x0036
-+#define MBOX_SET_SBUS_CONTROL_PARAMS  0x0037
-+#define               MBOX_SET_PCI_PARAMETERS 0x0037
-+#define MBOX_SET_TARGET_PARAMS                0x0038
-+#define MBOX_SET_DEV_QUEUE_PARAMS     0x0039
-+#define       MBOX_SET_RESET_DELAY_PARAMS     0x003a
-+                                      /*  3b */
-+                                      /*  3c */
-+                                      /*  3d */
-+                                      /*  3e */
-+                                      /*  3f */
-+#define       MBOX_RETURN_BIOS_BLOCK_ADDR     0x0040
-+#define       MBOX_WRITE_FOUR_RAM_WORDS       0x0041
-+#define       MBOX_EXEC_BIOS_IOCB             0x0042
-+#define       MBOX_SET_FW_FEATURES            0x004a
-+#define       MBOX_GET_FW_FEATURES            0x004b
-+#define               FW_FEATURE_FAST_POST    0x1
-+#define               FW_FEATURE_LVD_NOTIFY   0x2
-+#define               FW_FEATURE_RIO_32BIT    0x4
-+#define               FW_FEATURE_RIO_16BIT    0x8
-+
-+#define       MBOX_INIT_REQ_QUEUE_A64         0x0052
-+#define       MBOX_INIT_RES_QUEUE_A64         0x0053
-+
-+#define       MBOX_ENABLE_TARGET_MODE         0x0055
-+#define               ENABLE_TARGET_FLAG      0x8000
-+#define               ENABLE_TQING_FLAG       0x0004
-+#define               ENABLE_MANDATORY_DISC   0x0002
-+#define       MBOX_GET_TARGET_STATUS          0x0056
-+
-+/* These are for the ISP2X00 FC cards */
-+#define       MBOX_GET_LOOP_ID                0x0020
-+#define       MBOX_GET_FIRMWARE_OPTIONS       0x0028
-+#define       MBOX_SET_FIRMWARE_OPTIONS       0x0038
-+#define       MBOX_GET_RESOURCE_COUNT         0x0042
-+#define       MBOX_ENHANCED_GET_PDB           0x0047
-+#define       MBOX_EXEC_COMMAND_IOCB_A64      0x0054
-+#define       MBOX_INIT_FIRMWARE              0x0060
-+#define       MBOX_GET_INIT_CONTROL_BLOCK     0x0061
-+#define       MBOX_INIT_LIP                   0x0062
-+#define       MBOX_GET_FC_AL_POSITION_MAP     0x0063
-+#define       MBOX_GET_PORT_DB                0x0064
-+#define       MBOX_CLEAR_ACA                  0x0065
-+#define       MBOX_TARGET_RESET               0x0066
-+#define       MBOX_CLEAR_TASK_SET             0x0067
-+#define       MBOX_ABORT_TASK_SET             0x0068
-+#define       MBOX_GET_FW_STATE               0x0069
-+#define       MBOX_GET_PORT_NAME              0x006A
-+#define       MBOX_GET_LINK_STATUS            0x006B
-+#define       MBOX_INIT_LIP_RESET             0x006C
-+#define       MBOX_SEND_SNS                   0x006E
-+#define       MBOX_FABRIC_LOGIN               0x006F
-+#define       MBOX_SEND_CHANGE_REQUEST        0x0070
-+#define       MBOX_FABRIC_LOGOUT              0x0071
-+#define       MBOX_INIT_LIP_LOGIN             0x0072
-+
-+#define       MBOX_DRIVER_HEARTBEAT           0x005B
-+#define       MBOX_FW_HEARTBEAT               0x005C
-+
-+#define       MBOX_GET_SET_DATA_RATE          0x005D  /* 23XX only */
-+#define               MBGSD_GET_RATE  0
-+#define               MBGSD_SET_RATE  1
-+#define               MBGSD_ONEGB     0
-+#define               MBGSD_TWOGB     1
-+#define               MBGSD_AUTO      2
-+
-+
-+#define       ISP2100_SET_PCI_PARAM           0x00ff
-+
-+#define       MBOX_BUSY                       0x04
-+
-+typedef struct {
-+      u_int16_t param[8];
-+} mbreg_t;
-+
-+/*
-+ * Mailbox Command Complete Status Codes
-+ */
-+#define       MBOX_COMMAND_COMPLETE           0x4000
-+#define       MBOX_INVALID_COMMAND            0x4001
-+#define       MBOX_HOST_INTERFACE_ERROR       0x4002
-+#define       MBOX_TEST_FAILED                0x4003
-+#define       MBOX_COMMAND_ERROR              0x4005
-+#define       MBOX_COMMAND_PARAM_ERROR        0x4006
-+#define       MBOX_PORT_ID_USED               0x4007
-+#define       MBOX_LOOP_ID_USED               0x4008
-+#define       MBOX_ALL_IDS_USED               0x4009
-+#define       MBOX_NOT_LOGGED_IN              0x400A
-+#define       MBLOGALL                        0x000f
-+#define       MBLOGNONE                       0x0000
-+#define       MBLOGMASK(x)                    ((x) & 0xf)
-+
-+/*
-+ * Asynchronous event status codes
-+ */
-+#define       ASYNC_BUS_RESET                 0x8001
-+#define       ASYNC_SYSTEM_ERROR              0x8002
-+#define       ASYNC_RQS_XFER_ERR              0x8003
-+#define       ASYNC_RSP_XFER_ERR              0x8004
-+#define       ASYNC_QWAKEUP                   0x8005
-+#define       ASYNC_TIMEOUT_RESET             0x8006
-+#define       ASYNC_DEVICE_RESET              0x8007
-+#define       ASYNC_EXTMSG_UNDERRUN           0x800A
-+#define       ASYNC_SCAM_INT                  0x800B
-+#define       ASYNC_HUNG_SCSI                 0x800C
-+#define       ASYNC_KILLED_BUS                0x800D
-+#define       ASYNC_BUS_TRANSIT               0x800E  /* LVD -> HVD, eg. */
-+#define       ASYNC_LIP_OCCURRED              0x8010
-+#define       ASYNC_LOOP_UP                   0x8011
-+#define       ASYNC_LOOP_DOWN                 0x8012
-+#define       ASYNC_LOOP_RESET                0x8013
-+#define       ASYNC_PDB_CHANGED               0x8014
-+#define       ASYNC_CHANGE_NOTIFY             0x8015
-+#define       ASYNC_LIP_F8                    0x8016
-+#define       ASYNC_CMD_CMPLT                 0x8020
-+#define       ASYNC_CTIO_DONE                 0x8021
-+#define       ASYNC_IP_XMIT_DONE              0x8022
-+#define       ASYNC_IP_RECV_DONE              0x8023
-+#define       ASYNC_IP_BROADCAST              0x8024
-+#define       ASYNC_IP_RCVQ_LOW               0x8025
-+#define       ASYNC_IP_RCVQ_EMPTY             0x8026
-+#define       ASYNC_IP_RECV_DONE_ALIGNED      0x8027
-+#define       ASYNC_PTPMODE                   0x8030
-+#define       ASYNC_RIO1                      0x8031
-+#define       ASYNC_RIO2                      0x8032
-+#define       ASYNC_RIO3                      0x8033
-+#define       ASYNC_RIO4                      0x8034
-+#define       ASYNC_RIO5                      0x8035
-+#define       ASYNC_CONNMODE                  0x8036
-+#define               ISP_CONN_LOOP           1
-+#define               ISP_CONN_PTP            2
-+#define               ISP_CONN_BADLIP         3
-+#define               ISP_CONN_FATAL          4
-+#define               ISP_CONN_LOOPBACK       5
-+#define       ASYNC_RIO_RESP                  0x8040
-+#define       ASYNC_RIO_COMP                  0x8042
-+/*
-+ * 2.01.31 2200 Only. Need Bit 13 in Mailbox 1 for Set Firmware Options
-+ * mailbox command to enable this.
-+ */
-+#define       ASYNC_QFULL_SENT                0x8049
-+
-+/*
-+ * Mailbox Usages
-+ */
-+
-+#define       WRITE_REQUEST_QUEUE_IN_POINTER(isp, value)      \
-+      ISP_WRITE(isp, isp->isp_rqstinrp, value)
-+
-+#define       READ_REQUEST_QUEUE_OUT_POINTER(isp)             \
-+      ISP_READ(isp, isp->isp_rqstoutrp)
-+
-+#define       READ_RESPONSE_QUEUE_IN_POINTER(isp)             \
-+      ISP_READ(isp, isp->isp_respinrp)
-+
-+#define       WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, value)    \
-+      ISP_WRITE(isp, isp->isp_respoutrp, value)
-+
-+/*
-+ * Command Structure Definitions
-+ */
-+
-+typedef struct {
-+      u_int32_t       ds_base;
-+      u_int32_t       ds_count;
-+} ispds_t;
-+
-+typedef struct {
-+      u_int32_t       ds_base;
-+      u_int32_t       ds_basehi;
-+      u_int32_t       ds_count;
-+} ispds64_t;
-+
-+#define       DSTYPE_32BIT    0
-+#define       DSTYPE_64BIT    1
-+typedef struct {
-+      u_int16_t       ds_type;        /* 0-> ispds_t, 1-> ispds64_t */
-+      u_int32_t       ds_segment;     /* unused */
-+      u_int32_t       ds_base;        /* 32 bit address of DSD list */
-+} ispdslist_t;
-+
-+
-+/*
-+ * These elements get swizzled around for SBus instances.
-+ */
-+#define       ISP_SWAP8(a, b) {               \
-+      u_int8_t tmp;                   \
-+      tmp = a;                        \
-+      a = b;                          \
-+      b = tmp;                        \
-+}
-+typedef struct {
-+      u_int8_t        rqs_entry_type;
-+      u_int8_t        rqs_entry_count;
-+      u_int8_t        rqs_seqno;
-+      u_int8_t        rqs_flags;
-+} isphdr_t;
-+
-+/* RQS Flag definitions */
-+#define       RQSFLAG_CONTINUATION    0x01
-+#define       RQSFLAG_FULL            0x02
-+#define       RQSFLAG_BADHEADER       0x04
-+#define       RQSFLAG_BADPACKET       0x08
-+
-+/* RQS entry_type definitions */
-+#define       RQSTYPE_REQUEST         0x01
-+#define       RQSTYPE_DATASEG         0x02
-+#define       RQSTYPE_RESPONSE        0x03
-+#define       RQSTYPE_MARKER          0x04
-+#define       RQSTYPE_CMDONLY         0x05
-+#define       RQSTYPE_ATIO            0x06    /* Target Mode */
-+#define       RQSTYPE_CTIO            0x07    /* Target Mode */
-+#define       RQSTYPE_SCAM            0x08
-+#define       RQSTYPE_A64             0x09
-+#define       RQSTYPE_A64_CONT        0x0a
-+#define       RQSTYPE_ENABLE_LUN      0x0b    /* Target Mode */
-+#define       RQSTYPE_MODIFY_LUN      0x0c    /* Target Mode */
-+#define       RQSTYPE_NOTIFY          0x0d    /* Target Mode */
-+#define       RQSTYPE_NOTIFY_ACK      0x0e    /* Target Mode */
-+#define       RQSTYPE_CTIO1           0x0f    /* Target Mode */
-+#define       RQSTYPE_STATUS_CONT     0x10
-+#define       RQSTYPE_T2RQS           0x11
-+#define       RQSTYPE_IP_XMIT         0x13
-+#define       RQSTYPE_T4RQS           0x15
-+#define       RQSTYPE_ATIO2           0x16    /* Target Mode */
-+#define       RQSTYPE_CTIO2           0x17    /* Target Mode */
-+#define       RQSTYPE_CSET0           0x18
-+#define       RQSTYPE_T3RQS           0x19
-+#define       RQSTYPE_IP_XMIT_64      0x1b
-+#define       RQSTYPE_CTIO4           0x1e    /* Target Mode */
-+#define       RQSTYPE_CTIO3           0x1f    /* Target Mode */
-+#define       RQSTYPE_RIO1            0x21
-+#define       RQSTYPE_RIO2            0x22
-+#define       RQSTYPE_IP_RECV         0x23
-+#define       RQSTYPE_IP_RECV_CONT    0x24
-+
-+
-+#define       ISP_RQDSEG      4
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int32_t       req_handle;
-+      u_int8_t        req_lun_trn;
-+      u_int8_t        req_target;
-+      u_int16_t       req_cdblen;
-+#define       req_modifier    req_cdblen      /* marker packet */
-+      u_int16_t       req_flags;
-+      u_int16_t       req_reserved;
-+      u_int16_t       req_time;
-+      u_int16_t       req_seg_count;
-+      u_int8_t        req_cdb[12];
-+      ispds_t         req_dataseg[ISP_RQDSEG];
-+} ispreq_t;
-+
-+#define       ispreq64_t      ispreqt3_t      /* same as.... */
-+#define       ISP_RQDSEG_A64  2
-+
-+/*
-+ * A request packet can also be a marker packet.
-+ */
-+#define SYNC_DEVICE   0
-+#define SYNC_TARGET   1
-+#define SYNC_ALL      2
-+
-+#define       ISP_RQDSEG_T2           3
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int32_t       req_handle;
-+      u_int8_t        req_lun_trn;
-+      u_int8_t        req_target;
-+      u_int16_t       req_scclun;
-+      u_int16_t       req_flags;
-+      u_int16_t       _res2;
-+      u_int16_t       req_time;
-+      u_int16_t       req_seg_count;
-+      u_int8_t        req_cdb[16];
-+      u_int32_t       req_totalcnt;
-+      ispds_t         req_dataseg[ISP_RQDSEG_T2];
-+} ispreqt2_t;
-+
-+#define       ISP_RQDSEG_T3           2
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int32_t       req_handle;
-+      u_int8_t        req_lun_trn;
-+      u_int8_t        req_target;
-+      u_int16_t       req_scclun;
-+      u_int16_t       req_flags;
-+      u_int16_t       _res2;
-+      u_int16_t       req_time;
-+      u_int16_t       req_seg_count;
-+      u_int8_t        req_cdb[16];
-+      u_int32_t       req_totalcnt;
-+      ispds64_t       req_dataseg[ISP_RQDSEG_T3];
-+} ispreqt3_t;
-+
-+/* req_flag values */
-+#define       REQFLAG_NODISCON        0x0001
-+#define       REQFLAG_HTAG            0x0002
-+#define       REQFLAG_OTAG            0x0004
-+#define       REQFLAG_STAG            0x0008
-+#define       REQFLAG_TARGET_RTN      0x0010
-+
-+#define       REQFLAG_NODATA          0x0000
-+#define       REQFLAG_DATA_IN         0x0020
-+#define       REQFLAG_DATA_OUT        0x0040
-+#define       REQFLAG_DATA_UNKNOWN    0x0060
-+
-+#define       REQFLAG_DISARQ          0x0100
-+#define       REQFLAG_FRC_ASYNC       0x0200
-+#define       REQFLAG_FRC_SYNC        0x0400
-+#define       REQFLAG_FRC_WIDE        0x0800
-+#define       REQFLAG_NOPARITY        0x1000
-+#define       REQFLAG_STOPQ           0x2000
-+#define       REQFLAG_XTRASNS         0x4000
-+#define       REQFLAG_PRIORITY        0x8000
-+
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int32_t       req_handle;
-+      u_int8_t        req_lun_trn;
-+      u_int8_t        req_target;
-+      u_int16_t       req_cdblen;
-+      u_int16_t       req_flags;
-+      u_int16_t       _res1;
-+      u_int16_t       req_time;
-+      u_int16_t       req_seg_count;
-+      u_int8_t        req_cdb[44];
-+} ispextreq_t;
-+
-+#define       ISP_CDSEG       7
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int32_t       _res1;
-+      ispds_t         req_dataseg[ISP_CDSEG];
-+} ispcontreq_t;
-+
-+#define       ISP_CDSEG64     5
-+typedef struct {
-+      isphdr_t        req_header;
-+      ispds64_t       req_dataseg[ISP_CDSEG64];
-+} ispcontreq64_t;
-+
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int32_t       req_handle;
-+      u_int16_t       req_scsi_status;
-+      u_int16_t       req_completion_status;
-+      u_int16_t       req_state_flags;
-+      u_int16_t       req_status_flags;
-+      u_int16_t       req_time;
-+#define       req_response_len        req_time        /* FC only */
-+      u_int16_t       req_sense_len;
-+      u_int32_t       req_resid;
-+      u_int8_t        req_response[8];        /* FC only */
-+      u_int8_t        req_sense_data[32];
-+} ispstatusreq_t;
-+
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int8_t        req_sense_data[60];
-+} ispstatus_cont_t;
-+
-+/* 
-+ * For Qlogic 2X00, the high order byte of SCSI status has
-+ * additional meaning.
-+ */
-+#define       RQCS_RU 0x800   /* Residual Under */
-+#define       RQCS_RO 0x400   /* Residual Over */
-+#define       RQCS_RESID      (RQCS_RU|RQCS_RO)
-+#define       RQCS_SV 0x200   /* Sense Length Valid */
-+#define       RQCS_RV 0x100   /* FCP Response Length Valid */
-+
-+/* 
-+ * Completion Status Codes.
-+ */
-+#define RQCS_COMPLETE                 0x0000
-+#define RQCS_DMA_ERROR                        0x0002
-+#define RQCS_RESET_OCCURRED           0x0004
-+#define RQCS_ABORTED                  0x0005
-+#define RQCS_TIMEOUT                  0x0006
-+#define RQCS_DATA_OVERRUN             0x0007
-+#define RQCS_DATA_UNDERRUN            0x0015
-+#define       RQCS_QUEUE_FULL                 0x001C
-+
-+/* 1X00 Only Completion Codes */
-+#define RQCS_INCOMPLETE                       0x0001
-+#define RQCS_TRANSPORT_ERROR          0x0003
-+#define RQCS_COMMAND_OVERRUN          0x0008
-+#define RQCS_STATUS_OVERRUN           0x0009
-+#define RQCS_BAD_MESSAGE              0x000a
-+#define RQCS_NO_MESSAGE_OUT           0x000b
-+#define RQCS_EXT_ID_FAILED            0x000c
-+#define RQCS_IDE_MSG_FAILED           0x000d
-+#define RQCS_ABORT_MSG_FAILED         0x000e
-+#define RQCS_REJECT_MSG_FAILED                0x000f
-+#define RQCS_NOP_MSG_FAILED           0x0010
-+#define RQCS_PARITY_ERROR_MSG_FAILED  0x0011
-+#define RQCS_DEVICE_RESET_MSG_FAILED  0x0012
-+#define RQCS_ID_MSG_FAILED            0x0013
-+#define RQCS_UNEXP_BUS_FREE           0x0014
-+#define       RQCS_XACT_ERR1                  0x0018
-+#define       RQCS_XACT_ERR2                  0x0019
-+#define       RQCS_XACT_ERR3                  0x001A
-+#define       RQCS_BAD_ENTRY                  0x001B
-+#define       RQCS_PHASE_SKIPPED              0x001D
-+#define       RQCS_ARQS_FAILED                0x001E
-+#define       RQCS_WIDE_FAILED                0x001F
-+#define       RQCS_SYNCXFER_FAILED            0x0020
-+#define       RQCS_LVD_BUSERR                 0x0021
-+
-+/* 2X00 Only Completion Codes */
-+#define       RQCS_PORT_UNAVAILABLE           0x0028
-+#define       RQCS_PORT_LOGGED_OUT            0x0029
-+#define       RQCS_PORT_CHANGED               0x002A
-+#define       RQCS_PORT_BUSY                  0x002B
-+
-+/*
-+ * 1X00 specific State Flags 
-+ */
-+#define RQSF_GOT_BUS                  0x0100
-+#define RQSF_GOT_TARGET                       0x0200
-+#define RQSF_SENT_CDB                 0x0400
-+#define RQSF_XFRD_DATA                        0x0800
-+#define RQSF_GOT_STATUS                       0x1000
-+#define RQSF_GOT_SENSE                        0x2000
-+#define       RQSF_XFER_COMPLETE              0x4000
-+
-+/*
-+ * 2X00 specific State Flags
-+ * (same as 1X00 except RQSF_GOT_BUS/RQSF_GOT_TARGET are not available)
-+ */
-+#define       RQSF_DATA_IN                    0x0020
-+#define       RQSF_DATA_OUT                   0x0040
-+#define       RQSF_STAG                       0x0008
-+#define       RQSF_OTAG                       0x0004
-+#define       RQSF_HTAG                       0x0002
-+/*
-+ * 1X00 Status Flags
-+ */
-+#define RQSTF_DISCONNECT              0x0001
-+#define RQSTF_SYNCHRONOUS             0x0002
-+#define RQSTF_PARITY_ERROR            0x0004
-+#define RQSTF_BUS_RESET                       0x0008
-+#define RQSTF_DEVICE_RESET            0x0010
-+#define RQSTF_ABORTED                 0x0020
-+#define RQSTF_TIMEOUT                 0x0040
-+#define RQSTF_NEGOTIATION             0x0080
-+
-+/*
-+ * 2X00 specific state flags
-+ */
-+/* RQSF_SENT_CDB      */
-+/* RQSF_XFRD_DATA     */
-+/* RQSF_GOT_STATUS    */
-+/* RQSF_XFER_COMPLETE */
-+
-+/*
-+ * 2X00 specific status flags
-+ */
-+/* RQSTF_ABORTED */
-+/* RQSTF_TIMEOUT */
-+#define       RQSTF_DMA_ERROR                 0x0080
-+#define       RQSTF_LOGOUT                    0x2000
-+
-+/*
-+ * Miscellaneous
-+ */
-+#ifndef       ISP_EXEC_THROTTLE
-+#define       ISP_EXEC_THROTTLE       16
-+#endif
-+
-+/*
-+ * About Firmware returns an 'attribute' word in mailbox 6.
-+ */
-+#define       ISP_FW_ATTR_TMODE       0x01
-+#define       ISP_FW_ATTR_SCCLUN      0x02
-+#define       ISP_FW_ATTR_FABRIC      0x04
-+#define       ISP_FW_ATTR_CLASS2      0x08
-+#define       ISP_FW_ATTR_FCTAPE      0x10
-+#define       ISP_FW_ATTR_IP          0x20
-+
-+/*
-+ * Reduced Interrupt Operation Response Queue Entreis
-+ */
-+
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int32_t       req_handles[15];
-+} isp_rio1_t;
-+
-+typedef struct {
-+      isphdr_t        req_header;
-+      u_int16_t       req_handles[30];
-+} isp_rio2_t;
-+
-+/*
-+ * FC (ISP2100) specific data structures
-+ */
-+
-+/*
-+ * Initialization Control Block
-+ *
-+ * Version One (prime) format.
-+ */
-+typedef struct isp_icb {
-+      u_int8_t        icb_version;
-+      u_int8_t        _reserved0;
-+      u_int16_t       icb_fwoptions;
-+      u_int16_t       icb_maxfrmlen;
-+      u_int16_t       icb_maxalloc;
-+      u_int16_t       icb_execthrottle;
-+      u_int8_t        icb_retry_count;
-+      u_int8_t        icb_retry_delay;
-+      u_int8_t        icb_portname[8];
-+      u_int16_t       icb_hardaddr;
-+      u_int8_t        icb_iqdevtype;
-+      u_int8_t        icb_logintime;
-+      u_int8_t        icb_nodename[8];
-+      u_int16_t       icb_rqstout;
-+      u_int16_t       icb_rspnsin;
-+      u_int16_t       icb_rqstqlen;
-+      u_int16_t       icb_rsltqlen;
-+      u_int16_t       icb_rqstaddr[4];
-+      u_int16_t       icb_respaddr[4];
-+      u_int16_t       icb_lunenables;
-+      u_int8_t        icb_ccnt;
-+      u_int8_t        icb_icnt;
-+      u_int16_t       icb_lunetimeout;
-+      u_int16_t       _reserved1;
-+      u_int16_t       icb_xfwoptions;
-+      u_int8_t        icb_racctimer;
-+      u_int8_t        icb_idelaytimer;
-+      u_int16_t       icb_zfwoptions;
-+      u_int16_t       _reserved2[13];
-+} isp_icb_t;
-+#define       ICB_VERSION1    1
-+
-+#define       ICBOPT_HARD_ADDRESS     0x0001
-+#define       ICBOPT_FAIRNESS         0x0002
-+#define       ICBOPT_FULL_DUPLEX      0x0004
-+#define       ICBOPT_FAST_POST        0x0008
-+#define       ICBOPT_TGT_ENABLE       0x0010
-+#define       ICBOPT_INI_DISABLE      0x0020
-+#define       ICBOPT_INI_ADISC        0x0040
-+#define       ICBOPT_INI_TGTTYPE      0x0080
-+#define       ICBOPT_PDBCHANGE_AE     0x0100
-+#define       ICBOPT_NOLIP            0x0200
-+#define       ICBOPT_SRCHDOWN         0x0400
-+#define       ICBOPT_PREVLOOP         0x0800
-+#define       ICBOPT_STOP_ON_QFULL    0x1000
-+#define       ICBOPT_FULL_LOGIN       0x2000
-+#define       ICBOPT_BOTH_WWNS        0x4000
-+#define       ICBOPT_EXTENDED         0x8000
-+
-+#define       ICBXOPT_CLASS2_ACK0     0x0200
-+#define       ICBXOPT_CLASS2          0x0100
-+#define       ICBXOPT_LOOP_ONLY       (0 << 4)
-+#define       ICBXOPT_PTP_ONLY        (1 << 4)
-+#define       ICBXOPT_LOOP_2_PTP      (2 << 4)
-+#define       ICBXOPT_PTP_2_LOOP      (3 << 4)
-+
-+/*
-+ * The lower 4 bits of the xfwoptions field are the OPERATION MODE bits.
-+ * RIO is not defined for the 23XX cards
-+ */
-+#define       ICBXOPT_RIO_OFF         0
-+#define       ICBXOPT_RIO_16BIT       1
-+#define       ICBXOPT_RIO_32BIT       2
-+#define       ICBXOPT_RIO_16BIT_IOCB  3
-+#define       ICBXOPT_RIO_32BIT_IOCB  4
-+#define       ICBXOPT_ZIO             5       
-+
-+#define       ICBZOPT_ENA_RDXFR_RDY   0x01
-+#define       ICBZOPT_ENA_OOF         (1 << 6) /* out of order frame handling */
-+/* These 3 only apply to the 2300 */
-+#define       ICBZOPT_RATE_ONEGB      (MBGSD_ONEGB << 14)
-+#define       ICBZOPT_RATE_TWOGB      (MBGSD_TWOGB << 14)
-+#define       ICBZOPT_RATE_AUTO       (MBGSD_AUTO << 14)
-+
-+
-+#define       ICB_MIN_FRMLEN          256
-+#define       ICB_MAX_FRMLEN          2112
-+#define       ICB_DFLT_FRMLEN         1024
-+#define       ICB_DFLT_ALLOC          256
-+#define       ICB_DFLT_THROTTLE       16
-+#define       ICB_DFLT_RDELAY         5
-+#define       ICB_DFLT_RCOUNT         3
-+
-+
-+#define       RQRSP_ADDR0015  0
-+#define       RQRSP_ADDR1631  1
-+#define       RQRSP_ADDR3247  2
-+#define       RQRSP_ADDR4863  3
-+
-+
-+#define       ICB_NNM0        7
-+#define       ICB_NNM1        6
-+#define       ICB_NNM2        5
-+#define       ICB_NNM3        4
-+#define       ICB_NNM4        3
-+#define       ICB_NNM5        2
-+#define       ICB_NNM6        1
-+#define       ICB_NNM7        0
-+
-+#define       MAKE_NODE_NAME_FROM_WWN(array, wwn)     \
-+      array[ICB_NNM0] = (u_int8_t) ((wwn >>  0) & 0xff), \
-+      array[ICB_NNM1] = (u_int8_t) ((wwn >>  8) & 0xff), \
-+      array[ICB_NNM2] = (u_int8_t) ((wwn >> 16) & 0xff), \
-+      array[ICB_NNM3] = (u_int8_t) ((wwn >> 24) & 0xff), \
-+      array[ICB_NNM4] = (u_int8_t) ((wwn >> 32) & 0xff), \
-+      array[ICB_NNM5] = (u_int8_t) ((wwn >> 40) & 0xff), \
-+      array[ICB_NNM6] = (u_int8_t) ((wwn >> 48) & 0xff), \
-+      array[ICB_NNM7] = (u_int8_t) ((wwn >> 56) & 0xff)
-+
-+/*
-+ * FC-AL Position Map
-+ *
-+ * This is an at most 128 byte map that returns either
-+ * the LILP or Firmware generated list of ports.
-+ *
-+ * We deviate a bit from the returned qlogic format to
-+ * use an extra bit to say whether this was a LILP or
-+ * f/w generated map.
-+ */
-+typedef struct {
-+      u_int8_t        fwmap   : 1,
-+                      count   : 7;
-+      u_int8_t        map[127];
-+} fcpos_map_t;
-+
-+/*
-+ * Port Data Base Element
-+ */
-+
-+typedef struct {
-+      u_int16_t       pdb_options;
-+      u_int8_t        pdb_mstate;
-+      u_int8_t        pdb_sstate;
-+#define       BITS2WORD(x)    ((x)[0] << 16 | (x)[3] << 8 | (x)[2])
-+      u_int8_t        pdb_hardaddr_bits[4];
-+      u_int8_t        pdb_portid_bits[4];
-+      u_int8_t        pdb_nodename[8];
-+      u_int8_t        pdb_portname[8];
-+      u_int16_t       pdb_execthrottle;
-+      u_int16_t       pdb_exec_count;
-+      u_int8_t        pdb_retry_count;
-+      u_int8_t        pdb_retry_delay;
-+      u_int16_t       pdb_resalloc;
-+      u_int16_t       pdb_curalloc;
-+      u_int16_t       pdb_qhead;
-+      u_int16_t       pdb_qtail;
-+      u_int16_t       pdb_tl_next;
-+      u_int16_t       pdb_tl_last;
-+      u_int16_t       pdb_features;   /* PLOGI, Common Service */
-+      u_int16_t       pdb_pconcurrnt; /* PLOGI, Common Service */
-+      u_int16_t       pdb_roi;        /* PLOGI, Common Service */
-+      u_int8_t        pdb_target;
-+      u_int8_t        pdb_initiator;  /* PLOGI, Class 3 Control Flags */
-+      u_int16_t       pdb_rdsiz;      /* PLOGI, Class 3 */
-+      u_int16_t       pdb_ncseq;      /* PLOGI, Class 3 */
-+      u_int16_t       pdb_noseq;      /* PLOGI, Class 3 */
-+      u_int16_t       pdb_labrtflg;
-+      u_int16_t       pdb_lstopflg;
-+      u_int16_t       pdb_sqhead;
-+      u_int16_t       pdb_sqtail;
-+      u_int16_t       pdb_ptimer;
-+      u_int16_t       pdb_nxt_seqid;
-+      u_int16_t       pdb_fcount;
-+      u_int16_t       pdb_prli_len;
-+      u_int16_t       pdb_prli_svc0;
-+      u_int16_t       pdb_prli_svc3;
-+      u_int16_t       pdb_loopid;
-+      u_int16_t       pdb_il_ptr;
-+      u_int16_t       pdb_sl_ptr;
-+} isp_pdb_t;
-+
-+#define       PDB_OPTIONS_XMITTING    (1<<11)
-+#define       PDB_OPTIONS_LNKXMIT     (1<<10)
-+#define       PDB_OPTIONS_ABORTED     (1<<9)
-+#define       PDB_OPTIONS_ADISC       (1<<1)
-+
-+#define       PDB_STATE_DISCOVERY     0
-+#define       PDB_STATE_WDISC_ACK     1
-+#define       PDB_STATE_PLOGI         2
-+#define       PDB_STATE_PLOGI_ACK     3
-+#define       PDB_STATE_PRLI          4
-+#define       PDB_STATE_PRLI_ACK      5
-+#define       PDB_STATE_LOGGED_IN     6
-+#define       PDB_STATE_PORT_UNAVAIL  7
-+#define       PDB_STATE_PRLO          8
-+#define       PDB_STATE_PRLO_ACK      9
-+#define       PDB_STATE_PLOGO         10
-+#define       PDB_STATE_PLOG_ACK      11
-+
-+#define               SVC3_TGT_ROLE           0x10
-+#define       SVC3_INI_ROLE           0x20
-+#define                       SVC3_ROLE_MASK  0x30
-+#define                       SVC3_ROLE_SHIFT 4
-+
-+/*
-+ * CT definition
-+ *
-+ * This is as the QLogic f/w documentations defines it- which is just opposite,
-+ * bit wise, from what the specification defines it as. Additionally, the
-+ * ct_response and ct_resid (really from FC-GS-2) need to be byte swapped.
-+ */
-+
-+typedef struct {
-+      u_int8_t        ct_revision;
-+      u_int8_t        ct_portid[3];
-+      u_int8_t        ct_fcs_type;
-+      u_int8_t        ct_fcs_subtype;
-+      u_int8_t        ct_options;
-+      u_int8_t        ct_res0;
-+      u_int16_t       ct_response;
-+      u_int16_t       ct_resid;
-+      u_int8_t        ct_res1;
-+      u_int8_t        ct_reason;
-+      u_int8_t        ct_explanation;
-+      u_int8_t        ct_vunique;
-+} ct_hdr_t;
-+#define       FS_ACC  0x8002
-+#define       FS_RJT  0x8001
-+
-+#define       FC4_IP          5 /* ISO/EEC 8802-2 LLC/SNAP "Out of Order Delivery" */
-+#define       FC4_SCSI        8 /* SCSI-3 via Fivre Channel Protocol (FCP) */
-+#define       FC4_FC_SVC      0x20    /* Fibre Channel Services */
-+
-+#define       SNS_GA_NXT      0x100
-+#define       SNS_GPN_ID      0x112
-+#define       SNS_GNN_ID      0x113
-+#define       SNS_GFF_ID      0x11F
-+#define       SNS_GID_FT      0x171
-+#define       SNS_RFT_ID      0x217
-+typedef struct {
-+      u_int16_t       snscb_rblen;    /* response buffer length (words) */
-+      u_int16_t       snscb_res0;
-+      u_int16_t       snscb_addr[4];  /* response buffer address */
-+      u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
-+      u_int16_t       snscb_res1;
-+      u_int16_t       snscb_data[1];  /* variable data */
-+} sns_screq_t;        /* Subcommand Request Structure */
-+
-+typedef struct {
-+      u_int16_t       snscb_rblen;    /* response buffer length (words) */
-+      u_int16_t       snscb_res0;
-+      u_int16_t       snscb_addr[4];  /* response buffer address */
-+      u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
-+      u_int16_t       snscb_res1;
-+      u_int16_t       snscb_cmd;
-+      u_int16_t       snscb_res2;
-+      u_int32_t       snscb_res3;
-+      u_int32_t       snscb_port;
-+} sns_ga_nxt_req_t;
-+#define       SNS_GA_NXT_REQ_SIZE     (sizeof (sns_ga_nxt_req_t))
-+
-+typedef struct {
-+      u_int16_t       snscb_rblen;    /* response buffer length (words) */
-+      u_int16_t       snscb_res0;
-+      u_int16_t       snscb_addr[4];  /* response buffer address */
-+      u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
-+      u_int16_t       snscb_res1;
-+      u_int16_t       snscb_cmd;
-+      u_int16_t       snscb_res2;
-+      u_int32_t       snscb_res3;
-+      u_int32_t       snscb_portid;
-+} sns_gxn_id_req_t;
-+#define       SNS_GXN_ID_REQ_SIZE     (sizeof (sns_gxn_id_req_t))
-+
-+typedef struct {
-+      u_int16_t       snscb_rblen;    /* response buffer length (words) */
-+      u_int16_t       snscb_res0;
-+      u_int16_t       snscb_addr[4];  /* response buffer address */
-+      u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
-+      u_int16_t       snscb_res1;
-+      u_int16_t       snscb_cmd;
-+      u_int16_t       snscb_mword_div_2;
-+      u_int32_t       snscb_res3;
-+      u_int32_t       snscb_fc4_type;
-+} sns_gid_ft_req_t;
-+#define       SNS_GID_FT_REQ_SIZE     (sizeof (sns_gid_ft_req_t))
-+
-+typedef struct {
-+      u_int16_t       snscb_rblen;    /* response buffer length (words) */
-+      u_int16_t       snscb_res0;
-+      u_int16_t       snscb_addr[4];  /* response buffer address */
-+      u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
-+      u_int16_t       snscb_res1;
-+      u_int16_t       snscb_cmd;
-+      u_int16_t       snscb_res2;
-+      u_int32_t       snscb_res3;
-+      u_int32_t       snscb_port;
-+      u_int32_t       snscb_fc4_types[8];
-+} sns_rft_id_req_t;
-+#define       SNS_RFT_ID_REQ_SIZE     (sizeof (sns_rft_id_req_t))
-+
-+typedef struct {
-+      ct_hdr_t        snscb_cthdr;
-+      u_int8_t        snscb_port_type;
-+      u_int8_t        snscb_port_id[3];
-+      u_int8_t        snscb_portname[8];
-+      u_int16_t       snscb_data[1];  /* variable data */
-+} sns_scrsp_t;        /* Subcommand Response Structure */
-+
-+typedef struct {
-+      ct_hdr_t        snscb_cthdr;
-+      u_int8_t        snscb_port_type;
-+      u_int8_t        snscb_port_id[3];
-+      u_int8_t        snscb_portname[8];
-+      u_int8_t        snscb_pnlen;            /* symbolic port name length */
-+      u_int8_t        snscb_pname[255];       /* symbolic port name */
-+      u_int8_t        snscb_nodename[8];
-+      u_int8_t        snscb_nnlen;            /* symbolic node name length */
-+      u_int8_t        snscb_nname[255];       /* symbolic node name */
-+      u_int8_t        snscb_ipassoc[8];
-+      u_int8_t        snscb_ipaddr[16];
-+      u_int8_t        snscb_svc_class[4];
-+      u_int8_t        snscb_fc4_types[32];
-+      u_int8_t        snscb_fpname[8];
-+      u_int8_t        snscb_reserved;
-+      u_int8_t        snscb_hardaddr[3];
-+} sns_ga_nxt_rsp_t;   /* Subcommand Response Structure */
-+#define       SNS_GA_NXT_RESP_SIZE    (sizeof (sns_ga_nxt_rsp_t))
-+
-+typedef struct {
-+      ct_hdr_t        snscb_cthdr;
-+      u_int8_t        snscb_wwn[8];
-+} sns_gxn_id_rsp_t;
-+#define       SNS_GXN_ID_RESP_SIZE    (sizeof (sns_gxn_id_rsp_t))
-+
-+typedef struct {
-+      ct_hdr_t        snscb_cthdr;
-+      u_int32_t       snscb_fc4_features[32];
-+} sns_gff_id_rsp_t;
-+#define       SNS_GFF_ID_RESP_SIZE    (sizeof (sns_gff_id_rsp_t))
-+
-+typedef struct {
-+      ct_hdr_t        snscb_cthdr;
-+      struct {
-+              u_int8_t        control;
-+              u_int8_t        portid[3];
-+      } snscb_ports[1];
-+} sns_gid_ft_rsp_t;
-+#define       SNS_GID_FT_RESP_SIZE(x) ((sizeof (sns_gid_ft_rsp_t)) + ((x - 1) << 2))
-+
-+#define       SNS_RFT_ID_RESP_SIZE    (sizeof (ct_hdr_t))
-+
-+#endif        /* _ISPMBOX_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_pci.c      2003-07-19 17:06:34.000000000 -0700
-@@ -0,0 +1,2363 @@
-+/* @(#)isp_pci.c 1.39 */
-+/*
-+ * Qlogic ISP Host Adapter PCI specific probe and attach routines
-+ *---------------------------------------
-+ * Copyright (c) 1998, 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions, and the following disclaimer,
-+ *    without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * the GNU Public License ("GPL").
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ * 
-+ * Matthew Jacob
-+ * Feral Software
-+ * PMB #825
-+ * 5214-F Diamond Hts Blvd
-+ * San Francisco, CA, 94131
-+ * mjacob@feral.com
-+ */
-+
-+#include "isp_linux.h"
-+#if   defined(__powerpc__) || defined(__sparc__)
-+static int isp_pci_mapmem = 0xffffffff;
-+#else
-+static int isp_pci_mapmem = 0;
-+#endif
-+#if   defined(__sparc__)
-+#undef        ioremap_nocache
-+#define       ioremap_nocache ioremap
-+#endif
-+static int isplinux_pci_init(struct Scsi_Host *);
-+static u_int16_t isp_pci_rd_reg(struct ispsoftc *, int);
-+static void isp_pci_wr_reg(struct ispsoftc *, int, u_int16_t);
-+#if !(defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT))
-+static u_int16_t isp_pci_rd_reg_1080(struct ispsoftc *, int);
-+static void isp_pci_wr_reg_1080(struct ispsoftc *, int, u_int16_t);
-+#endif
-+static int
-+isp_pci_rd_isr(struct ispsoftc *, u_int16_t *, u_int16_t *, u_int16_t *);
-+#ifndef       ISP_DISABLE_2300_SUPPORT
-+static int
-+isp_pci_rd_isr_2300(struct ispsoftc *, u_int16_t *, u_int16_t *, u_int16_t *);
-+#endif
-+static int isp_pci_mbxdma(struct ispsoftc *);
-+static int
-+isp_pci_dmasetup(struct ispsoftc *, XS_T *, ispreq_t *, u_int16_t *, u_int16_t);
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+static void isp_pci_dmateardown(struct ispsoftc *, XS_T *, u_int16_t);
-+#define       IS_HIGH_ISP_ADDR(addr)  (addr >= (u_int64_t) 0x100000000)
-+#else
-+#define       isp_pci_dmateardown     NULL
-+#define       IS_HIGH_ISP_ADDR(addr)  0
-+#define       sg_dma_address(sg)      virt_to_bus(sg->address)
-+#define       sg_dma_len(sg)          sg->length
-+#endif
-+
-+#if   ISP_DAC_SUPPORTED == 1
-+#define       ISP_A64                 1
-+#define       HIWD(x)                 ((x) >> 32)
-+#else
-+#define       ISP_A64                 0
-+#define       HIWD(x)                 0
-+#endif
-+#define       LOWD(x)                 x
-+
-+static void isp_pci_reset1(struct ispsoftc *);
-+static void isp_pci_dumpregs(struct ispsoftc *, const char *);
-+
-+#ifndef       ISP_CODE_ORG
-+#define       ISP_CODE_ORG            0x1000
-+#endif
-+
-+#ifndef       ISP_DISABLE_1020_SUPPORT
-+#include "asm_1040.h"
-+#define       ISP_1040_RISC_CODE      (u_int16_t *) isp_1040_risc_code
-+#else
-+#define       ISP_1040_RISC_CODE      NULL
-+#endif
-+
-+#ifndef       ISP_DISABLE_1080_SUPPORT
-+#include "asm_1080.h"
-+#define       ISP_1080_RISC_CODE      (u_int16_t *) isp_1080_risc_code
-+#else
-+#define       ISP_1080_RISC_CODE      NULL
-+#endif
-+
-+#ifndef       ISP_DISABLE_12160_SUPPORT
-+#include "asm_12160.h"
-+#define       ISP_12160_RISC_CODE     (u_int16_t *) isp_12160_risc_code
-+#else
-+#define       ISP_12160_RISC_CODE     NULL
-+#endif
-+
-+#ifndef       ISP_DISABLE_2100_SUPPORT
-+#include "asm_2100.h"
-+#define       ISP_2100_RISC_CODE      (u_int16_t *) isp_2100_risc_code
-+#else
-+#define       ISP_2100_RISC_CODE      NULL
-+#endif
-+
-+#ifndef       ISP_DISABLE_2200_SUPPORT
-+#include "asm_2200.h"
-+#define       ISP_2200_RISC_CODE      (u_int16_t *) isp_2200_risc_code
-+#else
-+#define       ISP_2200_RISC_CODE      NULL
-+#endif
-+
-+#ifndef       ISP_DISABLE_2300_SUPPORT
-+#include "asm_2300.h"
-+#define       ISP_2300_RISC_CODE      (u_int16_t *) isp_2300_risc_code
-+#else
-+#define       ISP_2300_RISC_CODE      NULL
-+#endif
-+
-+#ifndef       ISP_DISABLE_1020_SUPPORT
-+static struct ispmdvec mdvec = {
-+    isp_pci_rd_isr,
-+    isp_pci_rd_reg,
-+    isp_pci_wr_reg,
-+    isp_pci_mbxdma,
-+    isp_pci_dmasetup,
-+    isp_pci_dmateardown,
-+    NULL,
-+    isp_pci_reset1,
-+    isp_pci_dumpregs,
-+    ISP_1040_RISC_CODE,
-+    BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_64
-+};
-+#endif
-+
-+#ifndef       ISP_DISABLE_1080_SUPPORT
-+static struct ispmdvec mdvec_1080 = {
-+    isp_pci_rd_isr,
-+    isp_pci_rd_reg_1080,
-+    isp_pci_wr_reg_1080,
-+    isp_pci_mbxdma,
-+    isp_pci_dmasetup,
-+    isp_pci_dmateardown,
-+    NULL,
-+    isp_pci_reset1,
-+    isp_pci_dumpregs,
-+    ISP_1080_RISC_CODE,
-+    BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_128
-+};
-+#endif
-+
-+#ifndef       ISP_DISABLE_12160_SUPPORT
-+static struct ispmdvec mdvec_12160 = {
-+    isp_pci_rd_isr,
-+    isp_pci_rd_reg_1080,
-+    isp_pci_wr_reg_1080,
-+    isp_pci_mbxdma,
-+    isp_pci_dmasetup,
-+    isp_pci_dmateardown,
-+    NULL,
-+    isp_pci_reset1,
-+    isp_pci_dumpregs,
-+    ISP_12160_RISC_CODE,
-+    BIU_BURST_ENABLE|BIU_PCI_CONF1_FIFO_128
-+};
-+#endif
-+
-+#ifndef       ISP_DISABLE_2100_SUPPORT
-+static struct ispmdvec mdvec_2100 = {
-+    isp_pci_rd_isr,
-+    isp_pci_rd_reg,
-+    isp_pci_wr_reg,
-+    isp_pci_mbxdma,
-+    isp_pci_dmasetup,
-+    isp_pci_dmateardown,
-+    NULL,
-+    isp_pci_reset1,
-+    isp_pci_dumpregs,
-+    ISP_2100_RISC_CODE
-+};
-+#endif
-+
-+#ifndef       ISP_DISABLE_2200_SUPPORT
-+static struct ispmdvec mdvec_2200 = {
-+    isp_pci_rd_isr,
-+    isp_pci_rd_reg,
-+    isp_pci_wr_reg,
-+    isp_pci_mbxdma,
-+    isp_pci_dmasetup,
-+    isp_pci_dmateardown,
-+    NULL,
-+    isp_pci_reset1,
-+    isp_pci_dumpregs,
-+    ISP_2200_RISC_CODE
-+};
-+#endif
-+
-+#ifndef       ISP_DISABLE_2300_SUPPORT
-+static struct ispmdvec mdvec_2300 = {
-+    isp_pci_rd_isr_2300,
-+    isp_pci_rd_reg,
-+    isp_pci_wr_reg,
-+    isp_pci_mbxdma,
-+    isp_pci_dmasetup,
-+    isp_pci_dmateardown,
-+    NULL,
-+    isp_pci_reset1,
-+    isp_pci_dumpregs,
-+    ISP_2300_RISC_CODE
-+};
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP1020
-+#define       PCI_DEVICE_ID_QLOGIC_ISP1020    0x1020
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP1020
-+#define       PCI_DEVICE_ID_QLOGIC_ISP1020    0x1020
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP1080
-+#define       PCI_DEVICE_ID_QLOGIC_ISP1080    0x1080
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP10160
-+#define       PCI_DEVICE_ID_QLOGIC_ISP10160   0x1016
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP12160
-+#define       PCI_DEVICE_ID_QLOGIC_ISP12160   0x1216
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP1240
-+#define       PCI_DEVICE_ID_QLOGIC_ISP1240    0x1240
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP1280
-+#define       PCI_DEVICE_ID_QLOGIC_ISP1280    0x1280
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP2100
-+#define       PCI_DEVICE_ID_QLOGIC_ISP2100    0x2100
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP2200
-+#define       PCI_DEVICE_ID_QLOGIC_ISP2200    0x2200
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP2300
-+#define       PCI_DEVICE_ID_QLOGIC_ISP2300    0x2300
-+#endif
-+
-+#ifndef       PCI_DEVICE_ID_QLOGIC_ISP2312
-+#define       PCI_DEVICE_ID_QLOGIC_ISP2312    0x2312
-+#endif
-+
-+#define       PCI_DFLT_LTNCY  0x40
-+#define       PCI_DFLT_LNSZ   0x10
-+#define       PCI_CMD_ISP     \
-+ (PCI_COMMAND_MASTER|PCI_COMMAND_INVALIDATE|PCI_COMMAND_PARITY|PCI_COMMAND_SERR)
-+
-+/*
-+ * Encapsulating softc... Order of elements is important. The tag
-+ * pci_isp must come first because of multiple structure punning
-+ * (Scsi_Host * == struct isp_pcisoftc * == struct ispsofct *).
-+ */
-+struct isp_pcisoftc {
-+    struct ispsoftc   pci_isp;
-+    struct pci_dev *  pci_dev;
-+    vm_offset_t               port;   /* I/O port address */
-+    vm_offset_t               paddr;  /* Physical Memory Address */
-+    vm_offset_t               vaddr;  /* Mapped Memory Address */
-+    vm_offset_t               poff[_NREG_BLKS];
-+    union pstore      params;
-+};
-+
-+/*
-+ * Gratefully borrowed from Gerard Roudier's sym53c8xx driver
-+ */
-+static INLINE vm_offset_t
-+map_pci_mem(u_long base, u_long size)
-+{
-+    u_long page_base  = ((u_long) base) & PAGE_MASK;
-+    u_long page_offs  = ((u_long) base) - page_base;
-+    u_long map_size =  roundup(page_offs+size, PAGE_SIZE);
-+    u_long page_remapped = (u_long) ioremap_nocache(page_base, map_size);
-+    (void) map_size;
-+    return (vm_offset_t) (page_remapped ? (page_remapped + page_offs) : 0);
-+}
-+
-+static INLINE
-+void unmap_pci_mem(vm_offset_t vaddr, u_long size)
-+{
-+    if (vaddr)
-+      iounmap((void *) (vaddr & PAGE_MASK));
-+}
-+
-+static INLINE int 
-+map_isp_mem(struct isp_pcisoftc *isp_pci, u_short cmd, vm_offset_t mem_base)
-+{
-+    if (cmd & PCI_COMMAND_MEMORY) {
-+      isp_pci->paddr = __pa(mem_base);
-+      isp_pci->paddr &= PCI_BASE_ADDRESS_MEM_MASK;
-+      isp_pci->vaddr = map_pci_mem(isp_pci->paddr, 0xff);
-+      return (isp_pci->vaddr != (vm_offset_t) 0);
-+    }
-+    return (0);
-+}
-+
-+static INLINE int 
-+map_isp_io(struct isp_pcisoftc *isp_pci, u_short cmd, vm_offset_t io_base)
-+{
-+    if ((cmd & PCI_COMMAND_IO) && (io_base & 3) == 1) {
-+      isp_pci->port = io_base & PCI_BASE_ADDRESS_IO_MASK;
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,0)
-+      if (check_region(isp_pci->port, 0xff)) {
-+          return (0);
-+      }
-+#endif
-+      request_region(isp_pci->port, 0xff, "isp");
-+      return (1);
-+    }
-+    return (0);
-+}
-+
-+#define       ISP_PCI_BUS     pcidev->bus->number
-+#define       ISP_PCI_DEVICE  pcidev->devfn
-+#define       ISEARCH_RESET   pcidev = NULL
-+#define       ISEARCH(x)      \
-+  (pcidev = pci_find_device(PCI_VENDOR_ID_QLOGIC, x, pcidev)) != NULL
-+#define       ISEARCH_NEXT
-+#define       ISTORE_ARGS             struct pci_dev *pcidev
-+#define       ISTORE_FNDARGS          ISTORE_ARGS
-+#define       ISTORE_FNCARGS          pcidev
-+#define       ISTORE_ISP_INFO(x)      (x)->pci_dev = pcidev
-+
-+static INLINE struct isp_pcisoftc *
-+isplinux_pci_addhost(Scsi_Host_Template *tmpt, ISTORE_FNDARGS)
-+{
-+    struct Scsi_Host *host;
-+    struct ispsoftc *isp;
-+    struct isp_pcisoftc *pci_isp;
-+
-+    host = scsi_register(tmpt, sizeof(struct isp_pcisoftc));
-+    if (host == NULL) {
-+      printk("isplinux_pci_addhost: scsi_register failed\n");
-+      return (NULL);
-+    }
-+    pci_isp = (struct isp_pcisoftc *) host->hostdata;
-+    if (pci_isp == NULL) {
-+      printk("isplinux_pci_addhost: cannot get softc out of scsi_register\n");
-+      return (NULL);
-+    }
-+    ISTORE_ISP_INFO(pci_isp);
-+    isp = (struct ispsoftc *) pci_isp;
-+    isp->isp_host = host;
-+    isp->isp_osinfo.storep = &pci_isp->params;
-+    if (isplinux_pci_init(host)) {
-+      scsi_unregister(host);
-+      return (NULL);
-+    }
-+    isp->isp_next = isplist;
-+    isplist = isp;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,4)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,61)
-+    scsi_set_device(host, &pci_isp->pci_dev->dev);
-+#else
-+    scsi_set_pci_device(host, pci_isp->pci_dev);
-+#endif
-+#endif
-+    return (pci_isp);
-+}
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,18) && \
-+      LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+#include <linux/reboot.h>
-+static int
-+isp_notify_reboot(struct notifier_block *ispnb, unsigned long Event, void *b)
-+{
-+    struct ispsoftc *isp;
-+    switch (Event) {
-+    case SYS_RESTART:
-+    case SYS_HALT:
-+    case SYS_POWER_OFF:
-+      break;
-+    default:
-+      return (NOTIFY_DONE);
-+    }
-+    for (isp = isplist; isp != NULL; isp = isp->isp_next) {
-+      ISP_LOCKU_SOFTC(isp);
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+      if (IS_FC(isp)) {
-+          ISP_WRITE(isp, BIU2100_CSR, BIU2100_FPM0_REGS);
-+          ISP_WRITE(isp, FPM_DIAG_CONFIG, FPM_SOFT_RESET);
-+          ISP_WRITE(isp, BIU2100_CSR, BIU2100_FB_REGS);
-+          ISP_WRITE(isp, FBM_CMD, FBMCMD_FIFO_RESET_ALL);
-+          ISP_WRITE(isp, BIU2100_CSR, BIU2100_RISC_REGS);
-+      }
-+      ISP_UNLKU_SOFTC(isp);
-+    }
-+    return (NOTIFY_OK);
-+}
-+static struct notifier_block isp_notifier = {
-+      notifier_call:  isp_notify_reboot,
-+      next:           NULL,
-+      priority:       0
-+};
-+#endif
-+
-+static int isp_nfound = 0;
-+int
-+isplinux_pci_detect(Scsi_Host_Template *tmpt)
-+{
-+    static const char *fmt =
-+      "ISP SCSI and Fibre Channel Host Adapter Driver\n"
-+      "      Linux Platform Version %d.%d\n"
-+      "      Common Core Code Version %d.%d\n"
-+      "      Built on %s, %s\n";
-+    struct isp_pcisoftc *pci_isp;
-+    ISTORE_ARGS;
-+
-+    printk(fmt, ISP_PLATFORM_VERSION_MAJOR, ISP_PLATFORM_VERSION_MINOR,
-+      ISP_CORE_VERSION_MAJOR, ISP_CORE_VERSION_MINOR, __DATE__ , __TIME__ );
-+
-+#ifndef       ISP_DISABLE_1020_SUPPORT
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1020); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+#endif
-+
-+#ifndef       ISP_DISABLE_1080_SUPPORT
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1240); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1080); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP1280); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+#endif
-+
-+#ifndef       ISP_DISABLE_12160_SUPPORT
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP10160); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP12160); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+#endif
-+
-+#ifndef       ISP_DISABLE_2100_SUPPORT
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2100); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+#endif
-+
-+#ifndef       ISP_DISABLE_2200_SUPPORT
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2200); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+#endif
-+
-+#ifndef       ISP_DISABLE_2300_SUPPORT
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2300); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+    for (ISEARCH_RESET; ISEARCH(PCI_DEVICE_ID_QLOGIC_ISP2312); ISEARCH_NEXT) {
-+      pci_isp = isplinux_pci_addhost(tmpt, ISTORE_FNCARGS);
-+        if (pci_isp) {
-+              isp_nfound++;
-+      }
-+    }
-+#endif
-+    /*
-+     * Don't do reboot notifier stuff for 2.5.X yet
-+     */
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,18) && \
-+      LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+    if (isp_nfound) {
-+      register_reboot_notifier(&isp_notifier);
-+    }
-+#endif
-+    return (isp_nfound);
-+}
-+
-+void
-+isplinux_pci_release(struct Scsi_Host *host)
-+{
-+    struct ispsoftc *isp = (struct ispsoftc *) host->hostdata;
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) host->hostdata;
-+    free_irq(host->irq, pcs);
-+    if (pcs->vaddr != 0) {
-+      unmap_pci_mem(pcs->vaddr, 0xff);
-+      pcs->vaddr = 0;
-+    } else {
-+      release_region(pcs->port, 0xff);
-+      pcs->port = 0;
-+    }
-+    kfree(isp->isp_xflist);
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    pci_free_consistent(pcs->pci_dev, RQUEST_QUEUE_LEN(isp) * QENTRY_LEN,
-+      isp->isp_rquest, isp->isp_rquest_dma);
-+    pci_free_consistent(pcs->pci_dev, RESULT_QUEUE_LEN(isp) * QENTRY_LEN,
-+      isp->isp_result, isp->isp_result_dma);
-+    if (IS_FC(isp)) {
-+      pci_free_consistent(pcs->pci_dev, ISP2100_SCRLEN,
-+          FCPARAM(isp)->isp_scratch, FCPARAM(isp)->isp_scdma);
-+    }
-+#else
-+    RlsPages(isp->isp_rquest, IspOrder(RQUEST_QUEUE_LEN(isp)));
-+    RlsPages(isp->isp_result, IspOrder(RESULT_QUEUE_LEN(isp)));
-+    if (IS_FC(isp) && FCPARAM(isp)->isp_scratch) {
-+      RlsPages(FCPARAM(isp)->isp_scratch, 1);
-+    }
-+#endif
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,18) && \
-+      LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+    if (--isp_nfound <= 0) {
-+        unregister_reboot_notifier(&isp_notifier);
-+    }
-+#endif
-+}
-+
-+static int
-+isplinux_pci_init(struct Scsi_Host *host)
-+{
-+    static char *nomap = "cannot map either memory or I/O space";
-+    unsigned long io_base, mem_base;
-+    unsigned int irq, pci_cmd_isp = PCI_CMD_ISP;
-+    struct isp_pcisoftc *isp_pci;
-+    u_char rev, lnsz, timer;
-+    u_short vid, did, cmd;
-+    char loc[32];
-+    struct ispsoftc *isp;
-+
-+    isp_pci = (struct isp_pcisoftc *) host->hostdata;
-+    isp = (struct ispsoftc *) isp_pci;
-+    sprintf(loc, "isp@<PCI%d,Slot%d,Func%d>", isp_pci->pci_dev->bus->number,
-+      PCI_SLOT(isp_pci->pci_dev->devfn), PCI_FUNC(isp_pci->pci_dev->devfn));
-+    if (PRDW(isp_pci, PCI_COMMAND, &cmd) ||
-+      PRDB(isp_pci, PCI_CACHE_LINE_SIZE, &lnsz) ||
-+      PRDB(isp_pci, PCI_LATENCY_TIMER, &timer) ||
-+      PRDB(isp_pci, PCI_CLASS_REVISION, &rev)) {
-+      printk("%s: error reading PCI configuration", loc);
-+      return (1);
-+    }
-+    vid = isp_pci->pci_dev->vendor;
-+    did = isp_pci->pci_dev->device;
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    io_base = pci_resource_start(isp_pci->pci_dev, 0);
-+    if (pci_resource_flags(isp_pci->pci_dev, 0) & PCI_BASE_ADDRESS_MEM_TYPE_64)
-+      irq = 2;
-+    else
-+      irq = 1;
-+    mem_base = pci_resource_start(isp_pci->pci_dev, irq);
-+    if (pci_resource_flags(isp_pci->pci_dev, irq) &
-+      PCI_BASE_ADDRESS_MEM_TYPE_64) {
-+#if   BITS_PER_LONG == 64
-+      mem_base |= pci_resource_start(isp_pci->pci_dev, irq+1) << 32;
-+#else
-+      isp_pci_mapmem &= ~(1 << isp->isp_unit);
-+#endif
-+    }
-+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) */
-+    io_base = isp_pci->pci_dev->base_address[0];
-+    mem_base = isp_pci->pci_dev->base_address[1];
-+    if (mem_base & PCI_BASE_ADDRESS_MEM_TYPE_64) {
-+#if   BITS_PER_LONG == 64
-+      mem_base |= isp_pci->pci_dev->base_address[2] << 32;
-+#else
-+      isp_pci_mapmem &= ~(1 << isp->isp_unit);
-+#endif
-+    }
-+#endif        /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) */
-+    irq = isp_pci->pci_dev->irq;
-+
-+    if (vid != PCI_VENDOR_ID_QLOGIC) {
-+      printk("%s: 0x%04x is not QLogic's PCI Vendor ID\n", loc, vid);
-+      return (1);
-+    }
-+
-+    isp_pci->poff[BIU_BLOCK >> _BLK_REG_SHFT] = BIU_REGS_OFF;
-+    isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS_OFF;
-+    isp_pci->poff[SXP_BLOCK >> _BLK_REG_SHFT] = PCI_SXP_REGS_OFF;
-+    isp_pci->poff[RISC_BLOCK >> _BLK_REG_SHFT] = PCI_RISC_REGS_OFF;
-+    isp_pci->poff[DMA_BLOCK >> _BLK_REG_SHFT] = DMA_REGS_OFF;
-+    switch (did) {
-+    case PCI_DEVICE_ID_QLOGIC_ISP1020:
-+      break;
-+    case PCI_DEVICE_ID_QLOGIC_ISP1080:
-+    case PCI_DEVICE_ID_QLOGIC_ISP1240:
-+    case PCI_DEVICE_ID_QLOGIC_ISP1280:
-+    case PCI_DEVICE_ID_QLOGIC_ISP10160:
-+    case PCI_DEVICE_ID_QLOGIC_ISP12160:
-+      isp_pci->poff[DMA_BLOCK >> _BLK_REG_SHFT] = ISP1080_DMA_REGS_OFF;
-+      break;
-+    case PCI_DEVICE_ID_QLOGIC_ISP2200:
-+    case PCI_DEVICE_ID_QLOGIC_ISP2100:
-+      isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS2100_OFF;
-+      break;
-+    case PCI_DEVICE_ID_QLOGIC_ISP2300:
-+      pci_cmd_isp &= ~PCI_COMMAND_INVALIDATE; /* per errata */
-+      isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS2300_OFF;
-+      break;
-+    case PCI_DEVICE_ID_QLOGIC_ISP2312:
-+      isp->isp_port = PCI_FUNC(isp_pci->pci_dev->devfn);
-+      isp_pci->poff[MBOX_BLOCK >> _BLK_REG_SHFT] = PCI_MBOX_REGS2300_OFF;
-+      break;
-+    default:
-+      printk("%s: Device ID 0x%04x is not a known Qlogic Device", loc, did);
-+      return (1);
-+    }
-+
-+    /*
-+     * Bump unit seed- we're here, whether we complete the attachment or not.
-+     */
-+    isp->isp_unit = isp_unit_seed++;
-+    sprintf(isp->isp_name, "isp%d", isp->isp_unit);
-+
-+    isp->isp_osinfo.device_id =
-+      ((isp_pci->pci_dev->bus->number) << 16)         |
-+        (PCI_SLOT(isp_pci->pci_dev->devfn) << 8)      |
-+      (PCI_FUNC(isp_pci->pci_dev->devfn));
-+
-+    if (isp_disable & (1 << isp->isp_unit)) {
-+      isp_prt(isp, ISP_LOGALL, "disabled at user request");
-+      return (1);
-+    }
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    if (pci_enable_device(isp_pci->pci_dev)) {
-+      printk("%s: fails to be PCI_ENABLEd\n", loc);
-+      return (1);
-+    }
-+    (void) PRDW(isp_pci, PCI_COMMAND, &cmd);
-+#endif
-+
-+    if ((cmd & PCI_CMD_ISP) != pci_cmd_isp) {
-+      if (isp_debug & ISP_LOGINFO)
-+          printk("%s: rewriting command register from 0x%x to 0x%x\n",
-+              loc, cmd, (cmd & ~PCI_CMD_ISP) | pci_cmd_isp);
-+      cmd &= ~PCI_CMD_ISP;
-+      cmd |= pci_cmd_isp;
-+      PWRW(isp_pci, PCI_COMMAND, cmd);
-+    }
-+
-+    if (lnsz != PCI_DFLT_LNSZ) {
-+      if (isp_debug & ISP_LOGINFO)
-+          printk("%s: rewriting cache line size from 0x%x to 0x%x\n",
-+              loc, lnsz, PCI_DFLT_LNSZ);
-+      lnsz = PCI_DFLT_LNSZ;
-+      PWRB(isp_pci, PCI_CACHE_LINE_SIZE, lnsz);
-+    }
-+
-+#ifdef        __sparc__
-+    if (PRDB(isp_pci, PCI_MIN_GNT, &rev)) {
-+      printk("%s: unable to read min grant\n", loc);
-+      return (1);
-+    }
-+    if (rev) {
-+      rev = (rev << 3) & 0xff;
-+    }
-+    if (rev == 0) {
-+      rev = 64;
-+    }
-+    if (isp_debug & ISP_LOGINFO) {
-+      printk("%s: rewriting latency timer from 0x%x to 0x%x\n",
-+          loc, timer, rev);
-+    }
-+    PWRB(isp_pci, PCI_LATENCY_TIMER, rev);
-+#else
-+    if (timer < PCI_DFLT_LTNCY) {
-+      if (isp_debug & ISP_LOGINFO)
-+          printk("%s: rewriting latency timer from 0x%x to 0x%x\n",
-+              loc, timer, PCI_DFLT_LTNCY);
-+      timer = PCI_DFLT_LTNCY;
-+      PWRB(isp_pci, PCI_LATENCY_TIMER, timer);
-+    }
-+#endif
-+
-+    if ((cmd & (PCI_COMMAND_MEMORY|PCI_COMMAND_IO)) == 0) {
-+#ifdef        __powerpc__
-+      if (io_base == 0 && mem_base == 0) {
-+          printk("%s: you lose- no register access defined.\n", loc);
-+          return (1);
-+      }
-+      if (io_base)
-+              cmd |= PCI_COMMAND_IO;
-+      if (mem_base)
-+              cmd |= PCI_COMMAND_MEMORY;
-+      PWRW(isp_pci, PCI_COMMAND, cmd);
-+#else
-+      printk("%s: you lose- no register access defined.\n", loc);
-+      return (1);
-+#endif
-+    }
-+
-+    /*
-+     * Disable the ROM.
-+     */
-+    PWRL(isp_pci, PCI_ROM_ADDRESS, 0);
-+
-+    /*
-+     * Set up stuff...
-+     */
-+    isp_pci->port = isp_pci->vaddr = 0;
-+
-+    /*
-+     * If we prefer to map memory space over I/O, try that first.
-+     */
-+    if (isp_pci_mapmem & (1 << isp->isp_unit)) {
-+      if (map_isp_mem(isp_pci, cmd, mem_base) == 0) {
-+          if (map_isp_io(isp_pci, cmd, io_base) == 0) {
-+              isp_prt(isp, ISP_LOGERR, nomap);
-+              return (1);
-+          }
-+      }
-+    } else {
-+      if (map_isp_io(isp_pci, cmd, io_base) == 0) {
-+          if (map_isp_mem(isp_pci, cmd, mem_base) == 0) {
-+              isp_prt(isp, ISP_LOGERR, nomap);
-+              return (1);
-+          }
-+      }
-+    }
-+    if (isp_pci->vaddr) {
-+      isp_prt(isp, ISP_LOGCONFIG,
-+          "mapped memory 0x%lx at 0x%lx\n", isp_pci->paddr, isp_pci->vaddr);
-+      host->io_port = isp_pci->paddr;
-+    } else {
-+        isp_prt(isp, ISP_LOGCONFIG,
-+          "mapped I/O space at 0x%lx\n", isp_pci->port);
-+      host->io_port = isp_pci->port;
-+    }
-+    host->irq = 0;
-+    isp_pci->pci_isp.isp_revision = rev;
-+#ifndef       ISP_DISABLE_1020_SUPPORT
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP1020) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec;
-+      isp_pci->pci_isp.isp_type = ISP_HA_SCSI_UNKNOWN;
-+    } 
-+#endif
-+#ifndef       ISP_DISABLE_1080_SUPPORT
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP1080) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_1080;
-+      isp_pci->pci_isp.isp_type = ISP_HA_SCSI_1080;
-+    }
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP1240) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_1080;
-+      isp_pci->pci_isp.isp_type = ISP_HA_SCSI_1240;
-+      host->max_channel = 1;
-+    }
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP1280) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_1080;
-+      isp_pci->pci_isp.isp_type = ISP_HA_SCSI_1280;
-+      host->max_channel = 1;
-+    }
-+#endif
-+#ifndef       ISP_DISABLE_12160_SUPPORT
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP10160) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_12160;
-+      isp_pci->pci_isp.isp_type = ISP_HA_SCSI_12160;
-+    }
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP12160) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_12160;
-+      isp_pci->pci_isp.isp_type = ISP_HA_SCSI_12160;
-+      host->max_channel = 1;
-+    }
-+#endif
-+#ifndef       ISP_DISABLE_2100_SUPPORT
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP2100) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_2100;
-+      isp_pci->pci_isp.isp_type = ISP_HA_FC_2100;
-+    }
-+#endif
-+#ifndef       ISP_DISABLE_2200_SUPPORT
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP2200) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_2200;
-+      isp_pci->pci_isp.isp_type = ISP_HA_FC_2200;
-+    }
-+#endif
-+#ifndef       ISP_DISABLE_2300_SUPPORT
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP2300) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_2300;
-+      isp_pci->pci_isp.isp_type = ISP_HA_FC_2300;
-+    }
-+    if (did == PCI_DEVICE_ID_QLOGIC_ISP2312) {
-+      isp_pci->pci_isp.isp_mdvec = &mdvec_2300;
-+      isp_pci->pci_isp.isp_type = ISP_HA_FC_2312;
-+    }
-+
-+    if (IS_23XX(isp)) {
-+      /*
-+       * Can't tell if the ROM will hang on 'ABOUT FIRMWARE' command
-+       */
-+      isp->isp_touched = 1;
-+    }
-+#endif
-+
-+    if (request_irq(irq, isplinux_intr, SA_SHIRQ, isp->isp_name, isp_pci)) {
-+      isp_prt(isp, ISP_LOGERR, "could not snag irq %u (0x%x)", irq, irq);
-+      goto bad;
-+    }
-+    host->irq = irq;
-+#if   LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+    host->select_queue_depths = isplinux_sqd;
-+#endif
-+    isp->isp_param = &isp_pci->params;
-+#if   LINUX_VERSION_CODE > KERNEL_VERSION(2,4,19)
-+    host->highmem_io = 0;
-+    if (IS_FC(isp) || IS_ULTRA2(isp) || IS_1240(isp)) {
-+      if (!ISP_A64 || pci_set_dma_mask(isp_pci->pci_dev, (u64) 0xffffffffffffffffULL)) {
-+          if (pci_set_dma_mask(isp_pci->pci_dev, (u64)0xffffffff)) {
-+              isp_prt(isp, ISP_LOGERR, "cannot set 32 bit dma mask");
-+              goto bad;
-+          } else {
-+              isp_prt(isp, ISP_LOGCONFIG, "enabling 32 bit DMA");
-+              host->highmem_io = 1;
-+          }
-+      } else {
-+          isp_prt(isp, ISP_LOGCONFIG, "enabling 64 bit DMA");
-+      }
-+        host->highmem_io = 1;
-+    }
-+#endif
-+
-+    /*
-+     * At this point, we're committed to keeping this adapter around.
-+     */
-+    isplinux_common_init(isp);
-+    return (0);
-+bad:
-+    if (host->irq) {
-+      DISABLE_INTS(isp);
-+      free_irq(host->irq, isp_pci);
-+      host->irq = 0;
-+    }
-+    if (isp_pci->vaddr != 0) {
-+      unmap_pci_mem(isp_pci->vaddr, 0xff);
-+      isp_pci->vaddr = 0;
-+    } else {
-+      release_region(isp_pci->port, 0xff);
-+      isp_pci->port = 0;
-+    }
-+    return (1);
-+}
-+
-+static INLINE u_int16_t
-+ispregrd(struct isp_pcisoftc *pcs, vm_offset_t offset)
-+{
-+    u_int16_t rv;
-+    if (pcs->vaddr) {
-+      offset += pcs->vaddr;
-+      rv = readw(offset);
-+    } else {
-+      offset += pcs->port;
-+      rv = inw(offset);
-+    }
-+    return (rv);
-+}
-+
-+static INLINE void
-+ispregwr(struct isp_pcisoftc *pcs, vm_offset_t offset, u_int16_t val)
-+{
-+    if (pcs->vaddr) {
-+      offset += pcs->vaddr;
-+      writew(val, offset);
-+    } else {
-+      offset += pcs->port;
-+      outw(val, offset);
-+    }
-+    MEMORYBARRIER(isp, SYNC_REG, offset, 2);
-+}
-+
-+static INLINE int
-+isp_pci_rd_debounced(struct isp_pcisoftc *pcs, vm_offset_t off, u_int16_t *rp)
-+{
-+    u_int16_t val0, val1;
-+    int i = 0;
-+    do {
-+      val0 = ispregrd(pcs, off);
-+      val1 = ispregrd(pcs, off);
-+    } while (val0 != val1 && ++i < 1000);
-+    if (val0 != val1) {
-+      return (1);
-+    }
-+    *rp = val0;
-+    return (0);
-+}
-+
-+#define       IspVirt2Off(a, x)       \
-+      ((a)->poff[((x) & _BLK_REG_MASK) >> _BLK_REG_SHFT] + ((x) & 0xff))
-+
-+static int
-+isp_pci_rd_isr(struct ispsoftc *isp, u_int16_t *isrp,
-+    u_int16_t *semap, u_int16_t *mbp)
-+{
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+    u_int16_t isr, sema;
-+
-+    if (IS_2100(isp)) {
-+      if (isp_pci_rd_debounced(pcs, IspVirt2Off(pcs, BIU_ISR), &isr)) {
-+          return (0);
-+        }
-+      if (isp_pci_rd_debounced(pcs, IspVirt2Off(pcs, BIU_SEMA), &sema)) {
-+          return (0);
-+        }
-+    } else {
-+      isr = ispregrd(pcs, IspVirt2Off(pcs, BIU_ISR));
-+      sema = ispregrd(pcs, IspVirt2Off(pcs, BIU_SEMA));
-+    }
-+    isp_prt(isp, ISP_LOGDEBUG3, "ISR 0x%x SEMA 0x%x", isr, sema);
-+    isr &= INT_PENDING_MASK(isp);
-+    sema &= BIU_SEMA_LOCK;
-+    if (isr == 0 && sema == 0) {
-+      return (0);
-+    }
-+    *isrp = isr;
-+    if ((*semap = sema) != 0) {
-+      if (IS_2100(isp)) {
-+          if (isp_pci_rd_debounced(pcs, IspVirt2Off(pcs, OUTMAILBOX0), mbp)) {
-+              return (0);
-+          }
-+      } else {
-+          *mbp = ispregrd(pcs, IspVirt2Off(pcs, OUTMAILBOX0));
-+      }
-+    }
-+    return (1);
-+}
-+
-+#ifndef       ISP_DISABLE_2300_SUPPORT
-+static INLINE u_int32_t
-+ispregrd32(struct isp_pcisoftc *pcs, vm_offset_t offset)
-+{
-+    u_int32_t rv;
-+    if (pcs->vaddr) {
-+      offset += pcs->vaddr;
-+      rv = readl(offset);
-+    } else {
-+      offset += pcs->port;
-+      rv = inl(offset);
-+    }
-+    return (rv);
-+}
-+
-+static int
-+isp_pci_rd_isr_2300(struct ispsoftc *isp, u_int16_t *isrp,
-+    u_int16_t *semap, u_int16_t *mbox0p)
-+{
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+    u_int32_t r2hisr;
-+
-+   /*
-+    * Avoid parity errors on the 2312.
-+    */
-+    if (!(ispregrd(pcs, IspVirt2Off(pcs, BIU_ISR)) & BIU2100_ISR_RISC_INT)) {
-+      *isrp = 0;
-+      return (0);
-+    }
-+
-+    r2hisr = ispregrd32(pcs, IspVirt2Off(pcs, BIU_R2HSTSLO));
-+    isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
-+    if ((r2hisr & BIU_R2HST_INTR) == 0) {
-+      *isrp = 0;
-+      return (0);
-+    }
-+    switch (r2hisr & BIU_R2HST_ISTAT_MASK) {
-+    case ISPR2HST_ROM_MBX_OK:
-+    case ISPR2HST_ROM_MBX_FAIL:
-+    case ISPR2HST_MBX_OK:
-+    case ISPR2HST_MBX_FAIL:
-+    case ISPR2HST_ASYNC_EVENT:
-+      *isrp = r2hisr & 0xffff;
-+      *mbox0p = (r2hisr >> 16);
-+      *semap = 1;
-+      return (1);
-+    case ISPR2HST_RIO_16:
-+      *isrp = r2hisr & 0xffff;
-+      *mbox0p = ASYNC_RIO1;
-+      *semap = 1;
-+      return (1);
-+    case ISPR2HST_FPOST:
-+      *isrp = r2hisr & 0xffff;
-+      *mbox0p = ASYNC_CMD_CMPLT;
-+      *semap = 1;
-+      return (1);
-+    case ISPR2HST_FPOST_CTIO:
-+      *isrp = r2hisr & 0xffff;
-+      *mbox0p = ASYNC_CTIO_DONE;
-+      *semap = 1;
-+      return (1);
-+    case ISPR2HST_RSPQ_UPDATE:
-+      *isrp = r2hisr & 0xffff;
-+      *mbox0p = 0;
-+      *semap = 0;
-+      return (1);
-+   default:
-+      return (0);
-+   }
-+}
-+#endif
-+
-+static u_int16_t
-+isp_pci_rd_reg(struct ispsoftc *isp, int regoff)
-+{
-+    u_int16_t rv, oldconf = 0;
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+
-+    if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+      /*
-+       * We will assume that someone has paused the RISC processor.
-+       */
-+      oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf | BIU_PCI_CONF1_SXP);
-+    }
-+    rv = ispregrd(pcs, IspVirt2Off(pcs, regoff));
-+    if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+    }
-+    return (rv);
-+}
-+
-+static void
-+isp_pci_wr_reg(struct ispsoftc *isp, int regoff, u_int16_t val)
-+{
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+    u_int16_t oldconf = 0;
-+    if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+      /*
-+       * We will assume that someone has paused the RISC processor.
-+       */
-+      oldconf = ispregrd(pcs, IspVirt2Off(pcs, BIU_CONF1));
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf | BIU_PCI_CONF1_SXP);
-+    }
-+    ispregwr(pcs, IspVirt2Off(pcs, regoff), val);
-+    if ((regoff & _BLK_REG_MASK) == SXP_BLOCK) {
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+    }
-+}
-+
-+#if !(defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT))
-+static u_int16_t
-+isp_pci_rd_reg_1080(struct ispsoftc *isp, int regoff)
-+{
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+    u_int16_t rv, oldconf = 0;
-+
-+    if ((regoff & _BLK_REG_MASK) == SXP_BLOCK ||
-+      (regoff & _BLK_REG_MASK) == (SXP_BLOCK|SXP_BANK1_SELECT)) {
-+      u_int16_t tmpconf;
-+      /*
-+       * We will assume that someone has paused the RISC processor.
-+       */
-+      oldconf = ispregrd(pcs,  IspVirt2Off(pcs, BIU_CONF1));
-+      tmpconf = oldconf & ~BIU_PCI1080_CONF1_DMA;
-+      if (IS_1280(isp)) {
-+          if (regoff & SXP_BANK1_SELECT) {
-+              tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+          } else {
-+              tmpconf |= BIU_PCI1080_CONF1_SXP1;
-+          }
-+      } else {
-+          tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+      }
-+      ispregwr(pcs,  IspVirt2Off(pcs, BIU_CONF1), tmpconf);
-+    } else if ((regoff & _BLK_REG_MASK) == DMA_BLOCK) {
-+      oldconf = ispregrd(pcs,  IspVirt2Off(pcs, BIU_CONF1));
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1),
-+          oldconf | BIU_PCI1080_CONF1_DMA);
-+    }
-+    rv = ispregrd(pcs, IspVirt2Off(pcs, regoff));
-+    if (oldconf) {
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+    }
-+    return (rv);
-+}
-+
-+static void
-+isp_pci_wr_reg_1080(struct ispsoftc *isp, int regoff, u_int16_t val)
-+{
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+    u_int16_t oldconf = 0;
-+
-+    if ((regoff & _BLK_REG_MASK) == SXP_BLOCK ||
-+      (regoff & _BLK_REG_MASK) == (SXP_BLOCK|SXP_BANK1_SELECT)) {
-+      u_int16_t tmpconf;
-+      /*
-+       * We will assume that someone has paused the RISC processor.
-+       */
-+      oldconf = ispregrd(pcs,  IspVirt2Off(pcs, BIU_CONF1));
-+      tmpconf = oldconf & ~BIU_PCI1080_CONF1_DMA;
-+      if (IS_1280(isp)) {
-+          if (regoff & SXP_BANK1_SELECT) {
-+              tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+          } else {
-+              tmpconf |= BIU_PCI1080_CONF1_SXP1;
-+          }
-+      } else {
-+          tmpconf |= BIU_PCI1080_CONF1_SXP0;
-+      }
-+      ispregwr(pcs,  IspVirt2Off(pcs, BIU_CONF1), tmpconf);
-+    } else if ((regoff & _BLK_REG_MASK) == DMA_BLOCK) {
-+      oldconf = ispregrd(pcs,  IspVirt2Off(pcs, BIU_CONF1));
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1),
-+          oldconf | BIU_PCI1080_CONF1_DMA);
-+    }
-+    ispregwr(pcs, IspVirt2Off(pcs, regoff), val);
-+    if (oldconf) {
-+      ispregwr(pcs, IspVirt2Off(pcs, BIU_CONF1), oldconf);
-+    }
-+}
-+#endif
-+
-+static int
-+isp_pci_mbxdma(struct ispsoftc *isp)
-+{
-+    if (isp->isp_xflist == NULL) {
-+      size_t amt = isp->isp_maxcmds * sizeof (XS_T **);
-+      isp->isp_xflist = kmalloc(amt, GFP_KERNEL);
-+      if (isp->isp_xflist == NULL) {
-+          isp_prt(isp, ISP_LOGERR, "unable to allocate xflist array");
-+          return (1);
-+      }
-+      MEMZERO(isp->isp_xflist, amt);
-+    }
-+    if (isp->isp_rquest == NULL) {
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+      dma_addr_t busaddr;
-+      isp->isp_rquest =
-+          pci_alloc_consistent(pcs->pci_dev,
-+              RQUEST_QUEUE_LEN(isp) * QENTRY_LEN, &busaddr);
-+      if (isp->isp_rquest == NULL) {
-+          isp_prt(isp, ISP_LOGERR, "unable to allocate request queue");
-+          return (1);
-+      }
-+      isp->isp_rquest_dma = busaddr;
-+#else
-+      isp->isp_rquest = (caddr_t) GetPages(IspOrder(RQUEST_QUEUE_LEN(isp)));
-+      if (isp->isp_rquest == NULL) {
-+          isp_prt(isp, ISP_LOGERR, "unable to allocate request queue");
-+          return (1);
-+      }
-+      /*
-+       * Map the Request queue.
-+       */
-+      isp->isp_rquest_dma = virt_to_bus(isp->isp_rquest);
-+#endif
-+      if (isp->isp_rquest_dma & 0x3f) {
-+          isp_prt(isp, ISP_LOGERR, "Request Queue not on 64 byte boundary");
-+          return (1);
-+        }
-+      MEMZERO(isp->isp_rquest, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)));
-+    }
-+
-+    if (isp->isp_result == NULL) {
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+      dma_addr_t busaddr;
-+      isp->isp_result =
-+          pci_alloc_consistent(pcs->pci_dev,
-+              RESULT_QUEUE_LEN(isp) * QENTRY_LEN, &busaddr);
-+      if (isp->isp_result == NULL) {
-+          isp_prt(isp, ISP_LOGERR, "unable to allocate result queue");
-+          return (1);
-+      }
-+      isp->isp_result_dma = busaddr;
-+#else
-+      isp->isp_result = (caddr_t) GetPages(IspOrder(RESULT_QUEUE_LEN(isp)));
-+      if (isp->isp_result == NULL) {
-+          isp_prt(isp, ISP_LOGERR, "unable to allocate result queue");
-+          free_pages((unsigned long)isp->isp_rquest,
-+              IspOrder(RQUEST_QUEUE_LEN(isp)));
-+          return (1);
-+      }
-+      /*
-+       * Map the result queue.
-+       */
-+      isp->isp_result_dma = virt_to_bus(isp->isp_result);
-+#endif
-+      if (isp->isp_rquest_dma & 0x3f) {
-+          isp_prt(isp, ISP_LOGERR, "Result Queue not on 64 byte boundary");
-+          return (1);
-+        }
-+      MEMZERO(isp->isp_result, ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)));
-+    }
-+
-+    if (IS_FC(isp)) {
-+      fcparam *fcp = isp->isp_param;
-+      if (fcp->isp_scratch == NULL) {
-+#if   LINUX_VERSION_CODE > KERNEL_VERSION(2,3,92)
-+          struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+          dma_addr_t busaddr;
-+          fcp->isp_scratch =
-+              pci_alloc_consistent(pcs->pci_dev, ISP2100_SCRLEN, &busaddr);
-+          if (fcp->isp_scratch == NULL) {
-+              isp_prt(isp, ISP_LOGERR, "unable to allocate scratch space");
-+              return (1);
-+          }
-+          fcp->isp_scdma = busaddr;
-+#else
-+         /*
-+          * Just get a page....
-+          */
-+          fcp->isp_scratch = (void *) GetPages(1);
-+          if (fcp->isp_scratch == NULL) {
-+              isp_prt(isp, ISP_LOGERR, "unable to allocate scratch space");
-+              return (1);
-+          }
-+          fcp->isp_scdma = virt_to_bus((void *)fcp->isp_scratch);
-+#endif
-+          MEMZERO(fcp->isp_scratch, ISP2100_SCRLEN);
-+          if (fcp->isp_scdma & 0x7) {
-+              isp_prt(isp, ISP_LOGERR, "scratch space not 8 byte aligned");
-+              return (1);
-+          }
-+      }
-+    }
-+    return (0);
-+}
-+
-+#ifdef        LINUX_ISP_TARGET_MODE
-+/*
-+ * We need to handle DMA for target mode differently from initiator mode.
-+ * 
-+ * DMA mapping and construction and submission of CTIO Request Entries
-+ * and rendevous for completion are very tightly coupled because we start
-+ * out by knowing (per platform) how much data we have to move, but we
-+ * don't know, up front, how many DMA mapping segments will have to be used
-+ * cover that data, so we don't know how many CTIO Request Entries we
-+ * will end up using. Further, for performance reasons we may want to
-+ * (on the last CTIO for Fibre Channel), send status too (if all went well).
-+ *
-+ * The standard vector still goes through isp_pci_dmasetup, but the callback
-+ * for the DMA mapping routines comes here instead with the whole transfer
-+ * mapped and a pointer to a partially filled in already allocated request
-+ * queue entry. We finish the job.
-+ */
-+
-+static int tdma_mk(struct ispsoftc *, tmd_cmd_t *, ct_entry_t *,
-+    u_int16_t *, u_int16_t);
-+#define       STATUS_WITH_DATA        1
-+    
-+static int
-+tdma_mk(struct ispsoftc *isp, tmd_cmd_t *tcmd, ct_entry_t *cto,
-+    u_int16_t *nxtip, u_int16_t optr)
-+{
-+    static const char ctx[] =
-+      "CTIO[%x] lun %d for iid%d flgs 0x%x sts 0x%x ssts 0x%x res %u %s";
-+    struct scatterlist *sg;
-+    ct_entry_t *qe;
-+    u_int8_t scsi_status;
-+    u_int16_t curi, nxti, handle;
-+    u_int32_t sflags;
-+    int32_t resid;
-+    int nth_ctio, nctios, send_status, nseg;
-+
-+
-+    curi = isp->isp_reqidx;
-+    qe = (ct_entry_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+
-+    cto->ct_xfrlen = 0;
-+    cto->ct_seg_count = 0;
-+    cto->ct_header.rqs_entry_count = 1;
-+    MEMZERO(cto->ct_dataseg, sizeof (cto->ct_dataseg));
-+
-+    if (tcmd->cd_xfrlen == 0) {
-+      ISP_TDQE(isp, "tdma_mk[no data]", curi, cto);
-+      isp_prt(isp, ISP_LOGTDEBUG1, ctx, cto->ct_fwhandle, (int) tcmd->cd_lun,
-+          (int) cto->ct_iid, cto->ct_flags, cto->ct_status,
-+          cto->ct_scsi_status, cto->ct_resid, "<END>");
-+      isp_put_ctio(isp, cto, qe);
-+      return (CMD_QUEUED);
-+    }
-+
-+    sg = tcmd->cd_data;
-+    nseg = 0;
-+    resid = (int32_t) tcmd->cd_xfrlen;
-+    while (resid > 0) {
-+      nseg++;
-+      resid -= sg_dma_len(sg);
-+      sg++;
-+    }
-+    sg = tcmd->cd_data;
-+#if    LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    {
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+      int new_seg_cnt;
-+      new_seg_cnt = pci_map_sg(pcs->pci_dev, sg, nseg,
-+        (cto->ct_flags & CT_DATA_IN)? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
-+      if (new_seg_cnt == 0) {
-+          isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+          cto->ct_resid = -ENOMEM;
-+          return (CMD_COMPLETE);
-+      }
-+      if (new_seg_cnt != nseg) {
-+          isp_prt(isp, ISP_LOGERR, "new seg cnt != old");
-+          cto->ct_resid = -EINVAL;
-+          return (CMD_COMPLETE);
-+      }
-+    }
-+#endif
-+    nctios = nseg / ISP_RQDSEG;
-+    if (nseg % ISP_RQDSEG) {
-+      nctios++;
-+    }
-+
-+    /*
-+     * Save handle, and potentially any SCSI status, which
-+     * we'll reinsert on the last CTIO we're going to send.
-+     */
-+    handle = cto->ct_syshandle;
-+    cto->ct_syshandle = 0;
-+    cto->ct_header.rqs_seqno = 0;
-+    send_status = (cto->ct_flags & CT_SENDSTATUS) != 0;
-+
-+    if (send_status) {
-+      sflags = cto->ct_flags & (CT_SENDSTATUS | CT_CCINCR);
-+      cto->ct_flags &= ~(CT_SENDSTATUS|CT_CCINCR);
-+      /*
-+       * Preserve residual.
-+       */
-+      resid = cto->ct_resid;
-+
-+      /*
-+       * Save actual SCSI status.
-+       */
-+      scsi_status = cto->ct_scsi_status;
-+
-+#ifndef       STATUS_WITH_DATA
-+      sflags |= CT_NO_DATA;
-+      /*
-+       * We can't do a status at the same time as a data CTIO, so
-+       * we need to synthesize an extra CTIO at this level.
-+       */
-+      nctios++;
-+#endif
-+    } else {
-+      sflags = scsi_status = resid = 0;
-+    }
-+
-+    cto->ct_resid = 0;
-+    cto->ct_scsi_status = 0;
-+
-+    nxti = *nxtip;
-+
-+    for (nth_ctio = 0; nth_ctio < nctios; nth_ctio++) {
-+      int seglim;
-+
-+      seglim = nseg;
-+      if (seglim) {
-+          int seg;
-+
-+          if (seglim > ISP_RQDSEG)
-+              seglim = ISP_RQDSEG;
-+
-+          for (seg = 0; seg < seglim; seg++, nseg--) {
-+              /*
-+               * Unlike normal initiator commands, we don't do
-+               * any swizzling here.
-+               */
-+              cto->ct_dataseg[seg].ds_base = (u_int32_t) sg_dma_address(sg);
-+              cto->ct_dataseg[seg].ds_count = (u_int32_t) sg_dma_len(sg);
-+              cto->ct_xfrlen += sg_dma_len(sg);
-+              sg++;
-+          }
-+          cto->ct_seg_count = seg;
-+      } else {
-+          /*
-+           * This case should only happen when we're
-+           * sending an extra CTIO with final status.
-+           */
-+          if (send_status == 0) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "tdma_mk ran out of segments, no status to send");
-+              return (CMD_EAGAIN);
-+          }
-+      }
-+
-+      /*
-+       * At this point, the fields ct_lun, ct_iid, ct_tagval, ct_tagtype, and
-+       * ct_timeout have been carried over unchanged from what our caller had
-+       * set.
-+       *
-+       * The dataseg fields and the seg_count fields we just got through
-+       * setting. The data direction we've preserved all along and only
-+       * clear it if we're now sending status.
-+       */
-+
-+      if (nth_ctio == nctios - 1) {
-+          /*
-+           * We're the last in a sequence of CTIOs, so mark this
-+           * CTIO and save the handle to the command such that when
-+           * this CTIO completes we can free dma resources and
-+           * do whatever else we need to do to finish the rest
-+           * of the command.
-+           */
-+          cto->ct_syshandle = handle;
-+          cto->ct_header.rqs_seqno = 1;
-+
-+          if (send_status) {
-+              cto->ct_scsi_status = scsi_status;
-+              cto->ct_flags |= sflags;
-+              cto->ct_resid = resid;
-+          }
-+          if (send_status) {
-+              isp_prt(isp, ISP_LOGTDEBUG1, ctx, 
-+                  cto->ct_fwhandle, (int) tcmd->cd_lun, (int) cto->ct_iid,
-+                  cto->ct_flags, cto->ct_status, cto->ct_scsi_status,
-+                  cto->ct_resid, "<END>");
-+          } else {
-+              isp_prt(isp, ISP_LOGTDEBUG1, ctx, 
-+                  cto->ct_fwhandle, (int) tcmd->cd_lun, (int) cto->ct_iid,
-+                  cto->ct_flags, cto->ct_status, cto->ct_scsi_status,
-+                  cto->ct_resid, "<MID>");
-+          }
-+          isp_put_ctio(isp, cto, qe);
-+          ISP_TDQE(isp, "last tdma_mk", curi, cto);
-+          if (nctios > 1) {
-+              MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+          }
-+      } else {
-+          ct_entry_t *oqe = qe;
-+
-+          /*
-+           * Make sure handle fields are clean
-+           */
-+          cto->ct_syshandle = 0;
-+          cto->ct_header.rqs_seqno = 0;
-+
-+          isp_prt(isp, ISP_LOGTDEBUG1,
-+              "CTIO[%x] lun%d for ID%d ct_flags 0x%x",
-+              cto->ct_fwhandle, (int) tcmd->cd_lun,
-+              (int) cto->ct_iid, cto->ct_flags);
-+
-+          /*
-+           * Get a new CTIO
-+           */
-+          qe = (ct_entry_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, nxti);
-+          nxti = ISP_NXT_QENTRY(nxti, RQUEST_QUEUE_LEN(isp));
-+          if (nxti == optr) {
-+              isp_prt(isp, ISP_LOGERR, "queue overflow in tdma_mk");
-+              return (CMD_EAGAIN);
-+          }
-+
-+         /*
-+          * Now that we're done with the old CTIO,
-+          * flush it out to the request queue.
-+          */
-+          ISP_TDQE(isp, "tdma_mk", curi, cto);
-+          isp_put_ctio(isp, cto, oqe);
-+          if (nth_ctio != 0) {
-+              MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+          }
-+          curi = ISP_NXT_QENTRY(curi, RQUEST_QUEUE_LEN(isp));
-+
-+          /*
-+           * Reset some fields in the CTIO so we can reuse
-+           * for the next one we'll flush to the request
-+           * queue.
-+           */
-+          cto->ct_header.rqs_entry_type = RQSTYPE_CTIO;
-+          cto->ct_header.rqs_entry_count = 1;
-+          cto->ct_header.rqs_flags = 0;
-+          cto->ct_status = 0;
-+          cto->ct_scsi_status = 0;
-+          cto->ct_xfrlen = 0;
-+          cto->ct_resid = 0;
-+          cto->ct_seg_count = 0;
-+          MEMZERO(cto->ct_dataseg, sizeof (cto->ct_dataseg));
-+      }
-+    }
-+    *nxtip = nxti;
-+    return (CMD_QUEUED);
-+}
-+
-+static int tdma_mkfc(struct ispsoftc *, tmd_cmd_t *, ct2_entry_t *,
-+    u_int16_t *, u_int16_t);
-+
-+
-+/*
-+ * We're passed a pointer to a prototype ct2_entry_t.
-+ *
-+ * If it doesn't contain any data movement, it has to be for sending status,
-+ * possibly with Sense Data as well, so we send a single CTIO2. This should
-+ * be a Mode 1 CTIO2, and it's up to the caller to set up the Sense Data
-+ * and flags appropriately.
-+ *
-+ * If it does contain data movement, it may *also* be for sending status
-+ * (possibly with Sense Data also). It's possible to describe to the firmware
-+ * what we want in one CTIO2. However, under some conditions it is not,
-+ * so we must also send a *second* CTIO2 after the first one.
-+ *
-+ * If the data to be sent is in segments that exceeds that which we can
-+ * fit into a CTIO2 (likely, as there's only room for 3 segments), we
-+ * utilize normal continuation entries, which get pushed after the
-+ * first CTIO2, and possibly are followed by a final CTIO2.
-+ *
-+ * In any case, it's up to the caller to send us a Mode 0 CTIO2 describing
-+ * the data to be moved (if any) and the appropriate flags indicating
-+ * status. We'll clear and set as appropriate. We'll also check to see
-+ * whether Sense Data is attempting to be sent and retrieve it as appropriate.
-+ *
-+ * In all cases the caller should not assume that the prototype CTIO2
-+ * has been left unchanged.
-+ */
-+
-+static int
-+tdma_mkfc(struct ispsoftc *isp, tmd_cmd_t *tmd, ct2_entry_t *cto,
-+    u_int16_t *nxtip, u_int16_t optr)
-+{
-+    static const char ctx[] = 
-+      "CTIO2[%x] lun %d for iid %d flgs 0x%x sts 0x%x ssts 0x%x res %d %s";
-+    struct scatterlist *sg;
-+    void *qe;
-+    ct2_entry_t ct2, *cto2;
-+    u_int16_t swd, curi, nxti;
-+    u_int32_t bc;
-+    long xfcnt;       /* must be signed */
-+    int nseg, seg;
-+
-+    nxti = *nxtip;
-+    curi = isp->isp_reqidx;
-+    qe = ISP_QUEUE_ENTRY(isp->isp_rquest, curi);
-+    if (cto->ct_flags & CT2_FASTPOST) {
-+      if ((tmd->cd_hflags & (CDFH_STSVALID|CDFH_SNSVALID)) != CDFH_STSVALID) {
-+          cto->ct_flags &= ~CT2_FASTPOST;
-+      }
-+    }
-+
-+    /*
-+     * Handle commands that transfer no data right away.
-+     */
-+    if (tmd->cd_xfrlen == 0) {
-+      if ((cto->ct_flags & CT2_FLAG_MMASK) != CT2_FLAG_MODE1) {
-+          isp_prt(isp, ISP_LOGERR,
-+              "tdma_mkfc, a status CTIO2 without MODE1 set (0x%x)",
-+              cto->ct_flags);
-+          cto->ct_resid = -EINVAL;
-+          return (CMD_COMPLETE);
-+      }
-+      cto->ct_header.rqs_entry_count = 1;
-+      cto->ct_header.rqs_seqno = 1;
-+
-+      /* ct_syshandle contains the synchronization handle set by caller */
-+      /*
-+       * We preserve ct_lun, ct_iid, ct_rxid. We set the data movement
-+       * flags to NO DATA and clear relative offset flags. We preserve
-+       * ct_resid and the response area. We assume that if there is
-+       * associated sense data that it has been appropriately set by
-+       * the caller.
-+       */
-+      cto->ct_flags |= CT2_NO_DATA;
-+      if (cto->ct_resid > 0)
-+          cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER;
-+      else if (cto->ct_resid < 0)
-+          cto->rsp.m1.ct_scsi_status |= CT2_DATA_OVER;
-+      cto->ct_seg_count = 0;
-+      cto->ct_reloff = 0;
-+      isp_prt(isp, ISP_LOGTDEBUG1, ctx, cto->ct_rxid, (int) tmd->cd_lun,
-+          cto->ct_iid, cto->ct_flags, cto->ct_status,
-+          cto->rsp.m1.ct_scsi_status, cto->ct_resid, "<END>");
-+      isp_put_ctio2(isp, cto, qe);
-+      ISP_TDQE(isp, "tdma_mkfc[no data]", curi, qe);
-+      return (CMD_QUEUED);
-+    }
-+
-+    if ((cto->ct_flags & CT2_FLAG_MMASK) != CT2_FLAG_MODE0) {
-+      isp_prt(isp, ISP_LOGERR,
-+          "tdma_mkfc, a data CTIO2 without MODE0 set (0x%x)", cto->ct_flags);
-+      cto->ct_resid = -EINVAL;
-+      return (CMD_COMPLETE);
-+    }
-+
-+   /*
-+    * First, count and map all S/G segments
-+    *
-+    * The byte counter has to be signed because
-+    * we can have descriptors that are, in fact,
-+    * longer than our data transfer count.
-+    */
-+    sg = tmd->cd_data;
-+    nseg = 0;
-+    xfcnt = tmd->cd_xfrlen;
-+    while (xfcnt > 0) {
-+        nseg++;
-+        xfcnt -= sg_dma_len(sg);
-+        sg++;
-+    }
-+    sg = tmd->cd_data;
-+#if    LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+    {
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+      int new_seg_cnt;
-+      new_seg_cnt = pci_map_sg(pcs->pci_dev, sg, nseg,
-+        (cto->ct_flags & CT2_DATA_IN)? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
-+      if (new_seg_cnt == 0) {
-+          isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+          cto->ct_resid = -ENOMEM;
-+          return (CMD_COMPLETE);
-+      }
-+      if (new_seg_cnt != nseg) {
-+          isp_prt(isp, ISP_LOGERR, "new seg cnt != old");
-+          cto->ct_resid = -EINVAL;
-+          return (CMD_COMPLETE);
-+      }
-+    }
-+#endif
-+
-+   /*
-+    * Second, figure out whether we need to send a final separate CTIO2
-+    *
-+    * The 2100/2200 firmware documentation indicates that if we have
-+    * good SCSI status (0), but still have a residual, we can still
-+    * describe this as part of a Mode 0 CTIO2. The 2300 firmware docs
-+    * seem to indicate that if we wish to convey a non-zero residual,
-+    * we can't do it as part of a Mode 0 CTIO2. To be safe, as well
-+    * as follow the most likely occurrences, we'll push a second
-+    * Mode 1 CTIO2 in any case that we have nonzero SCSI status
-+    * or a residual.
-+    */
-+    swd = cto->rsp.m0.ct_scsi_status;
-+
-+    if ((cto->ct_flags & CT2_SENDSTATUS) && ((swd & 0xf) || cto->ct_resid)) {
-+      cto2 = &ct2;
-+      /*
-+       * Copy over CTIO2
-+       */
-+      MEMCPY(cto2, cto, sizeof (ct2_entry_t));
-+
-+      /*
-+       * Clear fields from first CTIO2 that now need to be cleared
-+       */
-+      cto->ct_flags &= ~(CT2_SENDSTATUS|CT2_CCINCR|CT2_FASTPOST);
-+      cto->ct_resid = 0;
-+      cto->ct_syshandle = 0;
-+      cto->rsp.m0.ct_scsi_status = 0;
-+
-+      /*
-+       * Reset fields in the second CTIO2 as appropriate.
-+       */
-+      cto2->ct_flags &= ~(CT2_FLAG_MMASK|CT2_DATAMASK);
-+      cto2->ct_flags |= CT2_NO_DATA|CT2_NO_DATA|CT2_FLAG_MODE1;
-+      cto2->ct_seg_count = 0;
-+      cto2->ct_reloff = 0;
-+      MEMZERO(&cto2->rsp, sizeof (cto2->rsp));
-+      cto2->rsp.m1.ct_scsi_status = swd;
-+      if ((swd & 0xf) == SCSI_CHECK && (swd & CT2_SNSLEN_VALID)) {
-+              MEMCPY(cto2->rsp.m1.ct_resp, tmd->cd_sense, QLTM_SENSELEN);
-+                cto2->rsp.m1.ct_senselen = QLTM_SENSELEN;
-+                cto2->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
-+      }
-+    } else {
-+      cto2 = NULL;
-+    }
-+
-+    /*
-+     * Third, Fill in the data segments in the first CTIO2 itself.
-+     */
-+    xfcnt = tmd->cd_xfrlen;
-+    cto->ct_seg_count = nseg;
-+
-+    for (seg = 0; seg < min(nseg, ISP_RQDSEG_T2); seg++) {
-+      cto->rsp.m0.ct_dataseg[seg].ds_base = sg_dma_address(sg);
-+      bc = min(sg_dma_len(sg), xfcnt);
-+      cto->rsp.m0.ct_dataseg[seg].ds_count = bc;
-+      cto->rsp.m0.ct_xfrlen += bc;
-+      xfcnt -= bc;
-+      isp_prt(isp, ISP_LOGTDEBUG1, "  ent0[%d]%lx:%lu", seg,
-+          (unsigned long)sg_dma_address(sg), (unsigned long)sg_dma_len(sg));
-+      sg++;
-+    }
-+
-+    /*
-+     * Now do any continuation segments that are required.
-+     */
-+    while (seg < nseg) {
-+      int curseg;
-+      ispcontreq_t local, *crq = &local;
-+
-+      qe = (ispcontreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, nxti);
-+      curi = nxti;
-+      nxti = ISP_NXT_QENTRY(curi, RQUEST_QUEUE_LEN(isp));
-+      if (nxti == optr) {
-+          isp_prt(isp, ISP_LOGTDEBUG0, 
-+              "tdma_mkfc: request queue overflow");
-+          cto->ct_resid = -EAGAIN;
-+          return (CMD_COMPLETE);
-+        }
-+      cto->ct_header.rqs_entry_count++;
-+      MEMZERO((void *)crq, sizeof (*crq));
-+      crq->req_header.rqs_entry_count = 1;
-+      crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
-+      for (curseg = 0; seg < nseg && curseg < ISP_CDSEG; curseg++, seg++) {
-+          crq->req_dataseg[curseg].ds_base = sg_dma_address(sg);
-+          bc = min(sg_dma_len(sg), xfcnt);
-+          crq->req_dataseg[curseg].ds_count = bc;
-+          cto->rsp.m0.ct_xfrlen += bc;
-+          xfcnt -= bc;
-+          isp_prt(isp, ISP_LOGTDEBUG1, "  ent%d[%d]%lx:%lu",
-+              cto->ct_header.rqs_entry_count - 1, curseg,
-+              (unsigned long)sg_dma_address(sg), (unsigned long)bc);
-+          sg++;
-+      }
-+      isp_put_cont_req(isp, crq, (ispcontreq_t *)qe);
-+      MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+      ISP_TDQE(isp, "tdma_mkfc:cont", curi, cto);
-+    }
-+
-+    /*
-+     * If we have a final CTIO2, allocate and push *that*
-+     * onto the request queue.
-+     */
-+    if (cto2) {
-+      qe = (ct2_entry_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, nxti);
-+      curi = nxti;
-+      nxti = ISP_NXT_QENTRY(curi, RQUEST_QUEUE_LEN(isp));
-+      if (nxti == optr) {
-+          isp_prt(isp, ISP_LOGTDEBUG0, 
-+              "tdma_mkfc: request queue overflow");
-+          cto->ct_resid = -EAGAIN;
-+          return (CMD_COMPLETE);
-+        }
-+      MEMORYBARRIER(isp, SYNC_REQUEST, curi, QENTRY_LEN);
-+      isp_put_ctio2(isp, cto2, (ct2_entry_t *)qe);
-+      ISP_TDQE(isp, "tdma_mkfc:final", curi, cto2);
-+    }
-+    qe = ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+    isp_put_ctio2(isp, cto, qe);
-+    ISP_TDQE(isp, "tdma_mkfc", isp->isp_reqidx, cto);
-+    *nxtip = nxti;
-+    return (CMD_QUEUED);
-+}
-+#endif
-+
-+#if   LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-+#define       FOURG_SEG(x)    (((u64) (x)) & 0xffffffff00000000ULL)
-+
-+static int
-+isp_pci_dmasetup(struct ispsoftc *isp, Scsi_Cmnd *Cmnd, ispreq_t *rq,
-+    u_int16_t *nxi, u_int16_t optr)
-+{
-+    struct scatterlist *sg, *savesg;
-+    DMA_ADDR_T one_shot_addr, last_synthetic_addr;
-+    unsigned int one_shot_length, last_synthetic_count;
-+    int segcnt, seg, ovseg, seglim;
-+    void *h;
-+    u_int16_t nxti;
-+
-+
-+#ifdef        LINUX_ISP_TARGET_MODE
-+    if (rq->req_header.rqs_entry_type == RQSTYPE_CTIO ||
-+        rq->req_header.rqs_entry_type == RQSTYPE_CTIO2) {
-+      int s;
-+      if (IS_SCSI(isp))
-+          s = tdma_mk(isp, (tmd_cmd_t *)Cmnd, (ct_entry_t *)rq, nxi, optr);
-+      else
-+          s = tdma_mkfc(isp, (tmd_cmd_t *)Cmnd, (ct2_entry_t *)rq, nxi, optr);
-+      return (s);
-+   }
-+#endif
-+
-+    nxti = *nxi;
-+    h = (void *) ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+
-+    if (Cmnd->sc_data_direction == SCSI_DATA_NONE ||
-+        Cmnd->request_bufflen == 0) {
-+      rq->req_seg_count = 1;
-+      goto mbxsync;
-+    }
-+
-+    if (IS_FC(isp)) {
-+      seglim = ISP_RQDSEG_T2;
-+      ((ispreqt2_t *)rq)->req_totalcnt = Cmnd->request_bufflen;
-+      if (Cmnd->sc_data_direction == SCSI_DATA_WRITE) {
-+          ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_OUT;
-+      } else if (Cmnd->sc_data_direction == SCSI_DATA_READ) {
-+          ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_IN;
-+      } else {
-+          isp_prt(isp, ISP_LOGERR,
-+              "unkown data direction (%x) for %d byte request (opcode 0x%x)",
-+              Cmnd->sc_data_direction, Cmnd->request_bufflen, Cmnd->cmnd[0]);
-+          XS_SETERR(Cmnd, HBA_BOTCH);
-+          return (CMD_COMPLETE);
-+      }
-+    } else {
-+      if (Cmnd->cmd_len > 12)
-+          seglim = 0;
-+      else
-+          seglim = ISP_RQDSEG;
-+      if (Cmnd->sc_data_direction == SCSI_DATA_WRITE) {
-+          rq->req_flags |= REQFLAG_DATA_OUT;
-+      } else if (Cmnd->sc_data_direction == SCSI_DATA_READ) {
-+          rq->req_flags |= REQFLAG_DATA_IN;
-+      } else {
-+          isp_prt(isp, ISP_LOGERR,
-+              "unkown data direction (%x) for %d byte request (opcode 0x%x)",
-+              Cmnd->sc_data_direction, Cmnd->request_bufflen, Cmnd->cmnd[0]);
-+          XS_SETERR(Cmnd, HBA_BOTCH);
-+          return (CMD_COMPLETE);
-+      }
-+    }
-+
-+    one_shot_addr = (DMA_ADDR_T) 0;
-+    one_shot_length = 0;
-+    if ((segcnt = Cmnd->use_sg) == 0) {
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+      segcnt = 1;
-+      sg = NULL;
-+      one_shot_length = Cmnd->request_bufflen;
-+      one_shot_addr = pci_map_single(pcs->pci_dev,
-+          Cmnd->request_buffer, Cmnd->request_bufflen,
-+          scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+      QLA_HANDLE(Cmnd) = (DMA_HTYPE_T) one_shot_addr;
-+    } else {
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;
-+      sg = (struct scatterlist *) Cmnd->request_buffer;
-+      segcnt = pci_map_sg(pcs->pci_dev, sg, Cmnd->use_sg,
-+          scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+    }
-+    if (segcnt == 0) {
-+      isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+      XS_SETERR(Cmnd, HBA_BOTCH);
-+      return (CMD_EAGAIN);
-+    }
-+    savesg = sg;
-+
-+again:
-+    last_synthetic_count = 0;
-+    last_synthetic_addr = 0;
-+    for (seg = 0, rq->req_seg_count = 0;
-+       seg < segcnt && rq->req_seg_count < seglim;
-+       seg++, rq->req_seg_count++) {
-+      DMA_ADDR_T addr;
-+      unsigned int length;
-+
-+      if (sg) {
-+              length = QLA_SG_C(sg);
-+              addr = QLA_SG_A(sg);
-+              sg++;
-+      } else {
-+              length = one_shot_length;
-+              addr = one_shot_addr;
-+      }
-+
-+      if (ISP_A64 && IS_HIGH_ISP_ADDR(addr)) {
-+         if (IS_FC(isp)) {
-+              if (rq->req_header.rqs_entry_type != RQSTYPE_T3RQS) {
-+                      rq->req_header.rqs_entry_type = RQSTYPE_T3RQS;
-+                      seglim = ISP_RQDSEG_T3;
-+                      sg = savesg;
-+                      goto again;
-+              }
-+         } else {
-+              if (rq->req_header.rqs_entry_type != RQSTYPE_A64) {
-+                      rq->req_header.rqs_entry_type = RQSTYPE_A64;
-+                      seglim = ISP_RQDSEG_A64;
-+                      sg = savesg;
-+                      goto again;
-+              }
-+         }
-+      }
-+      if (ISP_A64 && rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+          ispreqt3_t *rq3 = (ispreqt3_t *)rq;
-+          rq3->req_dataseg[rq3->req_seg_count].ds_count = length;
-+          rq3->req_dataseg[rq3->req_seg_count].ds_base = LOWD(addr);
-+          rq3->req_dataseg[rq3->req_seg_count].ds_basehi = HIWD(addr);
-+          /*
-+           * Make sure we don't cross a 4GB boundary.
-+           */
-+          if (FOURG_SEG(addr) != FOURG_SEG(addr + length)) {
-+              isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u (TRUNC'd)",
-+                  rq->req_seg_count, (long long)addr, length);
-+              rq3->req_dataseg[rq3->req_seg_count].ds_count =
-+                  (unsigned int) (FOURG_SEG(addr + length) - addr);
-+              addr += rq3->req_dataseg[rq3->req_seg_count].ds_count;
-+              length -= rq3->req_dataseg[rq3->req_seg_count].ds_count;
-+              /*
-+               * Do we have space to split it here?
-+               */
-+              if (rq3->req_seg_count == seglim - 1) {
-+                  last_synthetic_count = length;
-+                  last_synthetic_addr = addr;
-+              } else {
-+                  rq3->req_seg_count++;
-+                  rq3->req_dataseg[rq3->req_seg_count].ds_count = length;
-+                  rq3->req_dataseg[rq3->req_seg_count].ds_base = LOWD(addr);
-+                  rq3->req_dataseg[rq3->req_seg_count].ds_basehi = HIWD(addr);
-+              }
-+          }
-+      } else if (ISP_A64 && rq->req_header.rqs_entry_type == RQSTYPE_A64) {
-+          ispreq64_t *rq6 = (ispreq64_t *)rq;
-+          rq6->req_dataseg[rq6->req_seg_count].ds_count = length;
-+          rq6->req_dataseg[rq6->req_seg_count].ds_base = LOWD(addr);
-+          rq6->req_dataseg[rq6->req_seg_count].ds_basehi = HIWD(addr);
-+          /*
-+           * Make sure we don't cross a 4GB boundary.
-+           */
-+          if (FOURG_SEG(addr) != FOURG_SEG(addr + length)) {
-+              isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u (TRUNC'd)",
-+                  rq->req_seg_count, (long long)addr, length);
-+              rq6->req_dataseg[rq6->req_seg_count].ds_count =
-+                  (unsigned int) (FOURG_SEG(addr + length) - addr);
-+              addr += rq6->req_dataseg[rq6->req_seg_count].ds_count;
-+              length -= rq6->req_dataseg[rq6->req_seg_count].ds_count;
-+              /*
-+               * Do we have space to split it here?
-+               */
-+              if (rq6->req_seg_count == seglim - 1) {
-+                  last_synthetic_count = length;
-+                  last_synthetic_addr = LOWD(addr);
-+              } else {
-+                  rq6->req_seg_count++;
-+                  rq6->req_dataseg[rq6->req_seg_count].ds_count = length;
-+                  rq6->req_dataseg[rq6->req_seg_count].ds_base = LOWD(addr);
-+                  rq6->req_dataseg[rq6->req_seg_count].ds_basehi = HIWD(addr);
-+              }
-+          }
-+      } else if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+          ispreqt2_t *rq2 = (ispreqt2_t *)rq;
-+          rq2->req_dataseg[rq2->req_seg_count].ds_count = length;
-+          rq2->req_dataseg[rq2->req_seg_count].ds_base = addr;
-+      } else {
-+          rq->req_dataseg[rq->req_seg_count].ds_count = length;
-+          rq->req_dataseg[rq->req_seg_count].ds_base = addr;
-+      }
-+      isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u",
-+          rq->req_seg_count, (long long)addr, length);
-+    }
-+
-+    if (seg == segcnt && last_synthetic_count == 0) {
-+      goto mbxsync;
-+    }
-+
-+    do {
-+      int lim;
-+      u_int16_t curip;
-+      ispcontreq_t local, *crq = &local, *qep;
-+
-+      curip = nxti;
-+      qep = (ispcontreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, curip);
-+      nxti = ISP_NXT_QENTRY((curip), RQUEST_QUEUE_LEN(isp));
-+      if (nxti == optr) {
-+          isp_pci_dmateardown(isp, Cmnd, 0);
-+          isp_prt(isp, ISP_LOGDEBUG0, "out of space for continuations");
-+          XS_SETERR(Cmnd, HBA_BOTCH);
-+          return (CMD_EAGAIN);
-+      }
-+      rq->req_header.rqs_entry_count++;
-+      MEMZERO((void *)crq, sizeof (*crq));
-+      crq->req_header.rqs_entry_count = 1;
-+      if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS ||
-+          rq->req_header.rqs_entry_type == RQSTYPE_A64) {
-+          crq->req_header.rqs_entry_type = RQSTYPE_A64_CONT;
-+          lim = ISP_CDSEG64;
-+      } else {
-+          crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
-+          lim = ISP_CDSEG;
-+      }
-+
-+      for (ovseg = 0; (seg < segcnt || last_synthetic_count) && ovseg < lim;
-+          rq->req_seg_count++, seg++, ovseg++, sg++) {
-+          DMA_ADDR_T addr;
-+          unsigned int length;
-+
-+          if (last_synthetic_count) {
-+              addr = last_synthetic_addr;
-+              length = last_synthetic_count;
-+              last_synthetic_count = 0;
-+              sg--;
-+              seg--;
-+          } else {
-+              addr = QLA_SG_A(sg);
-+              length = QLA_SG_C(sg);
-+          }
-+
-+          if (length == 0) {
-+              panic("zero length s-g element at line %d", __LINE__);
-+          }
-+          isp_prt(isp, ISP_LOGDEBUG1, "seg%d[%d]%llx:%u",
-+              rq->req_header.rqs_entry_count-1, ovseg,
-+              (unsigned long long) addr, length);
-+
-+          if (crq->req_header.rqs_entry_type == RQSTYPE_A64_CONT) {
-+              ispcontreq64_t *xrq = (ispcontreq64_t *) crq;
-+              xrq->req_dataseg[ovseg].ds_count = length;
-+              xrq->req_dataseg[ovseg].ds_base = LOWD(addr);
-+              xrq->req_dataseg[ovseg].ds_basehi = HIWD(addr);
-+              /*
-+               * Make sure we don't cross a 4GB boundary.
-+               */
-+              if (FOURG_SEG(addr) != FOURG_SEG(addr + length)) {
-+                  isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u (TRUNC'd)",
-+                      rq->req_seg_count, (long long)addr, length);
-+                  xrq->req_dataseg[ovseg].ds_count =
-+                      (unsigned int) (FOURG_SEG(addr + length) - addr);
-+                  addr += xrq->req_dataseg[ovseg].ds_count;
-+                  length -= xrq->req_dataseg[ovseg].ds_count;
-+                  /*
-+                   * Do we have space to split it here?
-+                   */
-+                  if (ovseg == lim - 1) {
-+                      last_synthetic_count = length;
-+                      last_synthetic_addr = addr;
-+                  } else {
-+                      ovseg++;
-+                      xrq->req_dataseg[ovseg].ds_count = length;
-+                      xrq->req_dataseg[ovseg].ds_base = LOWD(addr);
-+                      xrq->req_dataseg[ovseg].ds_basehi = HIWD(addr);
-+                  }
-+              }
-+              continue;
-+          }
-+          /*
-+           * We get here if we're a 32 bit continuation entry.
-+           * We also check for being over 32 bits with our PCI
-+           * address. If we are, we set ourselves up to do 64
-+           * bit addressing and start the whole mapping process
-+           * all over again- we apparently can't really mix types
-+           */
-+          if (ISP_A64 && IS_HIGH_ISP_ADDR(addr)) {
-+              if (IS_FC(isp)) {
-+                  rq->req_header.rqs_entry_type = RQSTYPE_T3RQS;
-+                  seglim = ISP_RQDSEG_T3;
-+              } else {
-+                  rq->req_header.rqs_entry_type = RQSTYPE_A64;
-+                  seglim = ISP_RQDSEG_A64;
-+              }
-+              sg = savesg;
-+              nxti = *nxi;
-+              rq->req_header.rqs_entry_count = 1;
-+              goto again;
-+          }
-+          crq->req_dataseg[ovseg].ds_count = length;
-+          crq->req_dataseg[ovseg].ds_base = addr;
-+      }
-+      MEMORYBARRIER(isp, SYNC_REQUEST, curip, QENTRY_LEN);
-+      if (crq->req_header.rqs_entry_type == RQSTYPE_A64_CONT) {
-+          isp_put_cont64_req(isp,
-+              (ispcontreq64_t *)crq, (ispcontreq64_t *)qep);
-+      } else {
-+          isp_put_cont_req(isp, crq, qep);
-+      }
-+    } while (seg < segcnt || last_synthetic_count);
-+mbxsync:
-+    if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+      isp_put_request_t3(isp, (ispreqt3_t *) rq, (ispreqt3_t *) h);
-+    } else if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+      isp_put_request_t2(isp, (ispreqt2_t *) rq, (ispreqt2_t *) h);
-+    } else {
-+      isp_put_request(isp, (ispreq_t *) rq, (ispreq_t *) h);
-+    }
-+    *nxi = nxti;
-+    return (CMD_QUEUED);
-+}
-+
-+static void
-+isp_pci_dmateardown(struct ispsoftc *isp, Scsi_Cmnd *Cmnd, u_int16_t handle)
-+{
-+#ifdef        LINUX_ISP_TARGET_MODE
-+    if (Cmnd->sc_magic != SCSI_CMND_MAGIC) {
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
-+      tmd_cmd_t *tmd = (tmd_cmd_t *) Cmnd;
-+      struct scatterlist *sg = tmd->cd_data;
-+      int nseg = 0;
-+
-+      while (sg->address) {
-+              nseg++;
-+              sg++;
-+      }
-+        pci_unmap_sg(pcs->pci_dev, tmd->cd_data, nseg,
-+          (tmd->cd_hflags & CDFH_DATA_IN)? PCI_DMA_TODEVICE :
-+          PCI_DMA_FROMDEVICE);
-+    } else
-+#endif
-+    if (Cmnd->sc_data_direction != SCSI_DATA_NONE) {
-+      struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
-+      if (Cmnd->use_sg) {
-+          pci_unmap_sg(pcs->pci_dev, (struct scatterlist *)Cmnd->buffer,
-+              Cmnd->use_sg, scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+      } else if (Cmnd->request_bufflen) {
-+          DMA_ADDR_T handle = (DMA_ADDR_T) QLA_HANDLE(Cmnd);
-+          pci_unmap_single(pcs->pci_dev, handle, Cmnd->request_bufflen,
-+              scsi_to_pci_dma_dir(Cmnd->sc_data_direction));
-+      }
-+    }
-+}
-+
-+#else
-+
-+static int
-+isp_pci_dmasetup(struct ispsoftc *isp, Scsi_Cmnd *Cmnd, ispreq_t *rq,
-+    u_int16_t *nxi, u_int16_t optr)
-+{
-+    struct scatterlist *sg;
-+    DMA_ADDR_T one_shot_addr;
-+    unsigned int one_shot_length;
-+    int segcnt, seg, ovseg, seglim;
-+    void *h;
-+    u_int16_t nxti;
-+
-+#ifdef        LINUX_ISP_TARGET_MODE
-+    if (rq->req_header.rqs_entry_type == RQSTYPE_CTIO ||
-+        rq->req_header.rqs_entry_type == RQSTYPE_CTIO2) {
-+      int s;
-+      if (IS_SCSI(isp))
-+          s = tdma_mk(isp, (tmd_cmd_t *)Cmnd, (ct_entry_t *)rq, nxi, optr);
-+      else
-+          s = tdma_mkfc(isp, (tmd_cmd_t *)Cmnd, (ct2_entry_t *)rq, nxi, optr);
-+      return (s);
-+   }
-+#endif
-+
-+    nxti = *nxi;
-+    h = (void *) ISP_QUEUE_ENTRY(isp->isp_rquest, isp->isp_reqidx);
-+
-+    if (Cmnd->request_bufflen == 0) {
-+      rq->req_seg_count = 1;
-+      goto mbxsync;
-+    }
-+
-+    if (IS_FC(isp)) {
-+      if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS)
-+          seglim = ISP_RQDSEG_T3;
-+      else
-+          seglim = ISP_RQDSEG_T2;
-+      ((ispreqt2_t *)rq)->req_totalcnt = Cmnd->request_bufflen;
-+      /*
-+       * Linux doesn't make it easy to tell which direction
-+       * the data is expected to go, and you really need to
-+       * know this for FC. We'll have to assume that some
-+       * of these commands that might be used for writes
-+       * our outbounds and all else are inbound.
-+       */
-+      switch (Cmnd->cmnd[0]) {
-+      case FORMAT_UNIT:
-+      case WRITE_6:
-+      case MODE_SELECT:
-+      case SEND_DIAGNOSTIC:
-+      case WRITE_10:
-+      case WRITE_BUFFER:
-+      case WRITE_LONG:
-+      case WRITE_SAME:
-+      case MODE_SELECT_10:
-+      case WRITE_12:
-+      case WRITE_VERIFY_12:
-+      case SEND_VOLUME_TAG:
-+          ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_OUT;
-+          break;
-+      default:
-+          ((ispreqt2_t *)rq)->req_flags |= REQFLAG_DATA_IN;
-+      }
-+    } else {
-+      if (Cmnd->cmd_len > 12)
-+          seglim = 0;
-+      else
-+          seglim = ISP_RQDSEG;
-+      rq->req_flags |=  REQFLAG_DATA_OUT | REQFLAG_DATA_IN;
-+    }
-+
-+    one_shot_addr = (DMA_ADDR_T) 0;
-+    one_shot_length = 0;
-+    if ((segcnt = Cmnd->use_sg) == 0) {
-+      segcnt = 1;
-+      sg = NULL;
-+      one_shot_length = Cmnd->request_bufflen;
-+      one_shot_addr = virt_to_bus(Cmnd->request_buffer);
-+    } else {
-+      sg = (struct scatterlist *) Cmnd->request_buffer;
-+    }
-+    if (segcnt == 0) {
-+      isp_prt(isp, ISP_LOGWARN, "unable to dma map request");
-+      XS_SETERR(Cmnd, HBA_BOTCH);
-+      return (CMD_EAGAIN);
-+    }
-+
-+    for (seg = 0, rq->req_seg_count = 0;
-+       seg < segcnt && rq->req_seg_count < seglim;
-+       seg++, rq->req_seg_count++) {
-+      DMA_ADDR_T addr;
-+      unsigned int length;
-+
-+      if (sg) {
-+              length = QLA_SG_C(sg);
-+              addr = QLA_SG_A(sg);
-+              sg++;
-+      } else {
-+              length = one_shot_length;
-+              addr = one_shot_addr;
-+      }
-+
-+      if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+          ispreqt2_t *rq2 = (ispreqt2_t *)rq;
-+          rq2->req_dataseg[rq2->req_seg_count].ds_count = length;
-+          rq2->req_dataseg[rq2->req_seg_count].ds_base = addr;
-+      } else {
-+          rq->req_dataseg[rq->req_seg_count].ds_count = length;
-+          rq->req_dataseg[rq->req_seg_count].ds_base = addr;
-+      }
-+      isp_prt(isp, ISP_LOGDEBUG1, "seg0[%d]%llx:%u from %p", seg,
-+          (long long)addr, length, sg? sg->address : Cmnd->request_buffer);
-+    }
-+
-+    if (seg == segcnt) {
-+      goto mbxsync;
-+    }
-+
-+    do {
-+      int lim;
-+      u_int16_t curip;
-+      ispcontreq_t local, *crq = &local, *qep;
-+
-+      curip = nxti;
-+      qep = (ispcontreq_t *) ISP_QUEUE_ENTRY(isp->isp_rquest, curip);
-+      nxti = ISP_NXT_QENTRY((curip), RQUEST_QUEUE_LEN(isp));
-+      if (nxti == optr) {
-+          isp_prt(isp, ISP_LOGDEBUG0, "out of space for continuations");
-+          XS_SETERR(Cmnd, HBA_BOTCH);
-+          return (CMD_EAGAIN);
-+      }
-+      rq->req_header.rqs_entry_count++;
-+      MEMZERO((void *)crq, sizeof (*crq));
-+      crq->req_header.rqs_entry_count = 1;
-+      if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+          lim = ISP_CDSEG64;
-+          crq->req_header.rqs_entry_type = RQSTYPE_A64_CONT;
-+      } else {
-+          lim = ISP_CDSEG;
-+          crq->req_header.rqs_entry_type = RQSTYPE_DATASEG;
-+      }
-+
-+      for (ovseg = 0; seg < segcnt && ovseg < lim;
-+           rq->req_seg_count++, seg++, ovseg++, sg++) {
-+          if (sg_dma_len(sg) == 0) {
-+              panic("zero length s-g element at line %d", __LINE__);
-+          }
-+          crq->req_dataseg[ovseg].ds_count = QLA_SG_C(sg);
-+          crq->req_dataseg[ovseg].ds_base = QLA_SG_A(sg);
-+          isp_prt(isp, ISP_LOGDEBUG1, "seg%d[%d]%llx:%u from %p",
-+              rq->req_header.rqs_entry_count-1, ovseg,
-+              (unsigned long long) QLA_SG_A(sg), QLA_SG_C(sg), sg->address);
-+      }
-+      MEMORYBARRIER(isp, SYNC_REQUEST, curip, QENTRY_LEN);
-+      isp_put_cont_req(isp, crq, qep);
-+    } while (seg < segcnt);
-+mbxsync:
-+    if (rq->req_header.rqs_entry_type == RQSTYPE_T3RQS) {
-+      isp_put_request_t3(isp, (ispreqt3_t *) rq, (ispreqt3_t *) h);
-+    } else if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) {
-+      isp_put_request_t2(isp, (ispreqt2_t *) rq, (ispreqt2_t *) h);
-+    } else {
-+      isp_put_request(isp, (ispreq_t *) rq, (ispreq_t *) h);
-+    }
-+    *nxi = nxti;
-+    return (CMD_QUEUED);
-+}
-+#endif
-+
-+static void
-+isp_pci_reset1(struct ispsoftc *isp)
-+{
-+    isp_pci_wr_reg(isp, HCCR, PCI_HCCR_CMD_BIOS);
-+    ENABLE_INTS(isp);
-+    isp->mbintsok = 1;
-+}
-+
-+static void
-+isp_pci_dumpregs(struct ispsoftc *isp, const char *msg)
-+{
-+    struct isp_pcisoftc *pcs = (struct isp_pcisoftc *) isp;    
-+    u_int16_t csr;
-+
-+    pci_read_config_word(pcs->pci_dev, PCI_COMMAND, &csr);
-+    printk("%s: ", isp->isp_name);
-+    if (msg)
-+      printk("%s\n", msg);
-+    if (IS_SCSI(isp))
-+      printk("    biu_conf1=%x", ISP_READ(isp, BIU_CONF1));
-+    else
-+      printk("    biu_csr=%x", ISP_READ(isp, BIU2100_CSR));
-+    printk(" biu_icr=%x biu_isr=%x biu_sema=%x ", ISP_READ(isp, BIU_ICR),
-+         ISP_READ(isp, BIU_ISR), ISP_READ(isp, BIU_SEMA));
-+    printk("risc_hccr=%x\n", ISP_READ(isp, HCCR));
-+    if (IS_SCSI(isp)) {
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_PAUSE);
-+      printk("    cdma_conf=%x cdma_sts=%x cdma_fifostat=%x\n",
-+             ISP_READ(isp, CDMA_CONF), ISP_READ(isp, CDMA_STATUS),
-+             ISP_READ(isp, CDMA_FIFO_STS));
-+      printk("    ddma_conf=%x ddma_sts=%x ddma_fifostat=%x\n",
-+             ISP_READ(isp, DDMA_CONF), ISP_READ(isp, DDMA_STATUS),
-+             ISP_READ(isp, DDMA_FIFO_STS));
-+      printk("    sxp_int=%x sxp_gross=%x sxp(scsi_ctrl)=%x\n",
-+             ISP_READ(isp, SXP_INTERRUPT),
-+             ISP_READ(isp, SXP_GROSS_ERR),
-+             ISP_READ(isp, SXP_PINS_CTRL));
-+      ISP_WRITE(isp, HCCR, HCCR_CMD_RELEASE);
-+    }
-+    printk("    mbox regs: %x %x %x %x %x\n",
-+         ISP_READ(isp, OUTMAILBOX0), ISP_READ(isp, OUTMAILBOX1),
-+         ISP_READ(isp, OUTMAILBOX2), ISP_READ(isp, OUTMAILBOX3),
-+         ISP_READ(isp, OUTMAILBOX4));
-+    printk("    PCI Status Command/Status=%x\n", csr);
-+}
-+
-+#ifdef        MODULE
-+MODULE_PARM(isp_pci_mapmem, "i");
-+#endif
-+/*
-+ * mode: c
-+ * Local variables:
-+ * c-indent-level: 4
-+ * c-brace-imaginary-offset: 0
-+ * c-brace-offset: -4
-+ * c-argdecl-indent: 4
-+ * c-label-offset: -4
-+ * c-continued-statement-offset: 4
-+ * c-continued-brace-offset: 0
-+ * End:
-+ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/ispreg.h       2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1011 @@
-+/* @(#)ispreg.h 1.6 */
-+/*
-+ * Machine Independent (well, as best as possible) register
-+ * definitions for Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice immediately at the beginning of the file, without modification,
-+ *    this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+#ifndef       _ISPREG_H
-+#define       _ISPREG_H
-+
-+/*
-+ * Hardware definitions for the Qlogic ISP  registers.
-+ */
-+
-+/*
-+ * This defines types of access to various registers.
-+ *
-+ *    R:              Read Only
-+ *    W:              Write Only
-+ *    RW:             Read/Write
-+ *
-+ *    R*, W*, RW*:    Read Only, Write Only, Read/Write, but only
-+ *                    if RISC processor in ISP is paused.
-+ */
-+
-+/*
-+ * Offsets for various register blocks.
-+ *
-+ * Sad but true, different architectures have different offsets.
-+ *
-+ * Don't be alarmed if none of this makes sense. The original register
-+ * layout set some defines in a certain pattern. Everything else has been
-+ * grafted on since. For example, the ISP1080 manual will state that DMA
-+ * registers start at 0x80 from the base of the register address space.
-+ * That's true, but for our purposes, we define DMA_REGS_OFF for the 1080
-+ * to start at offset 0x60 because the DMA registers are all defined to
-+ * be DMA_BLOCK+0x20 and so on. Clear?
-+ */
-+
-+#define       BIU_REGS_OFF                    0x00
-+
-+#define       PCI_MBOX_REGS_OFF               0x70
-+#define       PCI_MBOX_REGS2100_OFF           0x10
-+#define       PCI_MBOX_REGS2300_OFF           0x40
-+#define       SBUS_MBOX_REGS_OFF              0x80
-+
-+#define       PCI_SXP_REGS_OFF                0x80
-+#define       SBUS_SXP_REGS_OFF               0x200
-+
-+#define       PCI_RISC_REGS_OFF               0x80
-+#define       SBUS_RISC_REGS_OFF              0x400
-+
-+/* Bless me! Chip designers have putzed it again! */
-+#define       ISP1080_DMA_REGS_OFF            0x60
-+#define       DMA_REGS_OFF                    0x00    /* same as BIU block */
-+
-+#define       SBUS_REGSIZE                    0x450
-+#define       PCI_REGSIZE                     0x100
-+
-+/*
-+ * NB:        The *_BLOCK definitions have no specific hardware meaning.
-+ *    They serve simply to note to the MD layer which block of
-+ *    registers offsets are being accessed.
-+ */
-+#define       _NREG_BLKS      5
-+#define       _BLK_REG_SHFT   13
-+#define       _BLK_REG_MASK   (7 << _BLK_REG_SHFT)
-+#define       BIU_BLOCK       (0 << _BLK_REG_SHFT)
-+#define       MBOX_BLOCK      (1 << _BLK_REG_SHFT)
-+#define       SXP_BLOCK       (2 << _BLK_REG_SHFT)
-+#define       RISC_BLOCK      (3 << _BLK_REG_SHFT)
-+#define       DMA_BLOCK       (4 << _BLK_REG_SHFT)
-+
-+/*
-+ * Bus Interface Block Register Offsets
-+ */
-+
-+#define       BIU_ID_LO       (BIU_BLOCK+0x0)         /* R  : Bus ID, Low */
-+#define               BIU2100_FLASH_ADDR      (BIU_BLOCK+0x0)
-+#define       BIU_ID_HI       (BIU_BLOCK+0x2)         /* R  : Bus ID, High */
-+#define               BIU2100_FLASH_DATA      (BIU_BLOCK+0x2)
-+#define       BIU_CONF0       (BIU_BLOCK+0x4)         /* R  : Bus Configuration #0 */
-+#define       BIU_CONF1       (BIU_BLOCK+0x6)         /* R  : Bus Configuration #1 */
-+#define               BIU2100_CSR             (BIU_BLOCK+0x6)
-+#define       BIU_ICR         (BIU_BLOCK+0x8)         /* RW : Bus Interface Ctrl */
-+#define       BIU_ISR         (BIU_BLOCK+0xA)         /* R  : Bus Interface Status */
-+#define       BIU_SEMA        (BIU_BLOCK+0xC)         /* RW : Bus Semaphore */
-+#define       BIU_NVRAM       (BIU_BLOCK+0xE)         /* RW : Bus NVRAM */
-+/*
-+ * These are specific to the 2300.
-+ *
-+ * They *claim* you can read BIU_R2HSTSLO with a full 32 bit access
-+ * and get both registers, but I'm a bit dubious about that. But the
-+ * point here is that the top 16 bits are firmware defined bits that
-+ * the RISC processor uses to inform the host about something- usually
-+ * something which was nominally in a mailbox register.
-+ */
-+#define       BIU_REQINP      (BIU_BLOCK+0x10)        /* Request Queue In */
-+#define       BIU_REQOUTP     (BIU_BLOCK+0x12)        /* Request Queue Out */
-+#define       BIU_RSPINP      (BIU_BLOCK+0x14)        /* Response Queue In */
-+#define       BIU_RSPOUTP     (BIU_BLOCK+0x16)        /* Response Queue Out */
-+
-+#define       BIU_R2HSTSLO    (BIU_BLOCK+0x18)
-+#define       BIU_R2HSTSHI    (BIU_BLOCK+0x1A)
-+
-+#define       BIU_R2HST_INTR          (1 << 15)       /* RISC to Host Interrupt */
-+#define       BIU_R2HST_PAUSED        (1 <<  8)       /* RISC paused */
-+#define       BIU_R2HST_ISTAT_MASK    0x3f            /* intr information && status */
-+#define               ISPR2HST_ROM_MBX_OK     0x1     /* ROM mailbox cmd done ok */
-+#define               ISPR2HST_ROM_MBX_FAIL   0x2     /* ROM mailbox cmd done fail */
-+#define               ISPR2HST_MBX_OK         0x10    /* mailbox cmd done ok */
-+#define               ISPR2HST_MBX_FAIL       0x11    /* mailbox cmd done fail */
-+#define               ISPR2HST_ASYNC_EVENT    0x12    /* Async Event */
-+#define               ISPR2HST_RSPQ_UPDATE    0x13    /* Response Queue Update */
-+#define               ISPR2HST_RQST_UPDATE    0x14    /* Resquest Queue Update */
-+#define               ISPR2HST_RIO_16         0x15    /* RIO 1-16 */
-+#define               ISPR2HST_FPOST          0x16    /* Low 16 bits fast post */
-+#define               ISPR2HST_FPOST_CTIO     0x17    /* Low 16 bits fast post ctio */
-+
-+#define       DFIFO_COMMAND   (BIU_BLOCK+0x60)        /* RW : Command FIFO Port */
-+#define               RDMA2100_CONTROL        DFIFO_COMMAND
-+#define       DFIFO_DATA      (BIU_BLOCK+0x62)        /* RW : Data FIFO Port */
-+
-+/*
-+ * Putzed DMA register layouts.
-+ */
-+#define       CDMA_CONF       (DMA_BLOCK+0x20)        /* RW*: DMA Configuration */
-+#define               CDMA2100_CONTROL        CDMA_CONF
-+#define       CDMA_CONTROL    (DMA_BLOCK+0x22)        /* RW*: DMA Control */
-+#define       CDMA_STATUS     (DMA_BLOCK+0x24)        /* R  : DMA Status */
-+#define       CDMA_FIFO_STS   (DMA_BLOCK+0x26)        /* R  : DMA FIFO Status */
-+#define       CDMA_COUNT      (DMA_BLOCK+0x28)        /* RW*: DMA Transfer Count */
-+#define       CDMA_ADDR0      (DMA_BLOCK+0x2C)        /* RW*: DMA Address, Word 0 */
-+#define       CDMA_ADDR1      (DMA_BLOCK+0x2E)        /* RW*: DMA Address, Word 1 */
-+#define       CDMA_ADDR2      (DMA_BLOCK+0x30)        /* RW*: DMA Address, Word 2 */
-+#define       CDMA_ADDR3      (DMA_BLOCK+0x32)        /* RW*: DMA Address, Word 3 */
-+
-+#define       DDMA_CONF       (DMA_BLOCK+0x40)        /* RW*: DMA Configuration */
-+#define               TDMA2100_CONTROL        DDMA_CONF
-+#define       DDMA_CONTROL    (DMA_BLOCK+0x42)        /* RW*: DMA Control */
-+#define       DDMA_STATUS     (DMA_BLOCK+0x44)        /* R  : DMA Status */
-+#define       DDMA_FIFO_STS   (DMA_BLOCK+0x46)        /* R  : DMA FIFO Status */
-+#define       DDMA_COUNT_LO   (DMA_BLOCK+0x48)        /* RW*: DMA Xfer Count, Low */
-+#define       DDMA_COUNT_HI   (DMA_BLOCK+0x4A)        /* RW*: DMA Xfer Count, High */
-+#define       DDMA_ADDR0      (DMA_BLOCK+0x4C)        /* RW*: DMA Address, Word 0 */
-+#define       DDMA_ADDR1      (DMA_BLOCK+0x4E)        /* RW*: DMA Address, Word 1 */
-+/* these are for the 1040A cards */
-+#define       DDMA_ADDR2      (DMA_BLOCK+0x50)        /* RW*: DMA Address, Word 2 */
-+#define       DDMA_ADDR3      (DMA_BLOCK+0x52)        /* RW*: DMA Address, Word 3 */
-+
-+
-+/*
-+ * Bus Interface Block Register Definitions
-+ */
-+/* BUS CONFIGURATION REGISTER #0 */
-+#define       BIU_CONF0_HW_MASK               0x000F  /* Hardware revision mask */
-+/* BUS CONFIGURATION REGISTER #1 */
-+
-+#define       BIU_SBUS_CONF1_PARITY           0x0100  /* Enable parity checking */
-+#define       BIU_SBUS_CONF1_FCODE_MASK       0x00F0  /* Fcode cycle mask */
-+
-+#define       BIU_PCI_CONF1_FIFO_128          0x0040  /* 128 bytes FIFO threshold */
-+#define       BIU_PCI_CONF1_FIFO_64           0x0030  /* 64 bytes FIFO threshold */
-+#define       BIU_PCI_CONF1_FIFO_32           0x0020  /* 32 bytes FIFO threshold */
-+#define       BIU_PCI_CONF1_FIFO_16           0x0010  /* 16 bytes FIFO threshold */
-+#define       BIU_BURST_ENABLE                0x0004  /* Global enable Bus bursts */
-+#define       BIU_SBUS_CONF1_FIFO_64          0x0003  /* 64 bytes FIFO threshold */
-+#define       BIU_SBUS_CONF1_FIFO_32          0x0002  /* 32 bytes FIFO threshold */
-+#define       BIU_SBUS_CONF1_FIFO_16          0x0001  /* 16 bytes FIFO threshold */
-+#define       BIU_SBUS_CONF1_FIFO_8           0x0000  /* 8 bytes FIFO threshold */
-+#define       BIU_SBUS_CONF1_BURST8           0x0008  /* Enable 8-byte  bursts */
-+#define       BIU_PCI_CONF1_SXP               0x0008  /* SXP register select */
-+
-+#define       BIU_PCI1080_CONF1_SXP0          0x0100  /* SXP bank #1 select */
-+#define       BIU_PCI1080_CONF1_SXP1          0x0200  /* SXP bank #2 select */
-+#define       BIU_PCI1080_CONF1_DMA           0x0300  /* DMA bank select */
-+
-+/* ISP2100 Bus Control/Status Register */
-+
-+#define       BIU2100_ICSR_REGBSEL            0x30    /* RW: register bank select */
-+#define               BIU2100_RISC_REGS       (0 << 4)        /* RISC Regs */
-+#define               BIU2100_FB_REGS         (1 << 4)        /* FrameBuffer Regs */
-+#define               BIU2100_FPM0_REGS       (2 << 4)        /* FPM 0 Regs */
-+#define               BIU2100_FPM1_REGS       (3 << 4)        /* FPM 1 Regs */
-+#define       BIU2100_PCI64                   0x04    /*  R: 64 Bit PCI slot */
-+#define       BIU2100_FLASH_ENABLE            0x02    /* RW: Enable Flash RAM */
-+#define       BIU2100_SOFT_RESET              0x01
-+/* SOFT RESET FOR ISP2100 is same bit, but in this register, not ICR */
-+
-+
-+/* BUS CONTROL REGISTER */
-+#define       BIU_ICR_ENABLE_DMA_INT          0x0020  /* Enable DMA interrupts */
-+#define       BIU_ICR_ENABLE_CDMA_INT         0x0010  /* Enable CDMA interrupts */
-+#define       BIU_ICR_ENABLE_SXP_INT          0x0008  /* Enable SXP interrupts */
-+#define       BIU_ICR_ENABLE_RISC_INT         0x0004  /* Enable Risc interrupts */
-+#define       BIU_ICR_ENABLE_ALL_INTS         0x0002  /* Global enable all inter */
-+#define       BIU_ICR_SOFT_RESET              0x0001  /* Soft Reset of ISP */
-+
-+#define       BIU2100_ICR_ENABLE_ALL_INTS     0x8000
-+#define       BIU2100_ICR_ENA_FPM_INT         0x0020
-+#define       BIU2100_ICR_ENA_FB_INT          0x0010
-+#define       BIU2100_ICR_ENA_RISC_INT        0x0008
-+#define       BIU2100_ICR_ENA_CDMA_INT        0x0004
-+#define       BIU2100_ICR_ENABLE_RXDMA_INT    0x0002
-+#define       BIU2100_ICR_ENABLE_TXDMA_INT    0x0001
-+#define       BIU2100_ICR_DISABLE_ALL_INTS    0x0000
-+
-+#define       ENABLE_INTS(isp)        (IS_SCSI(isp))?  \
-+ ISP_WRITE(isp, BIU_ICR, BIU_ICR_ENABLE_RISC_INT | BIU_ICR_ENABLE_ALL_INTS) : \
-+ ISP_WRITE(isp, BIU_ICR, BIU2100_ICR_ENA_RISC_INT | BIU2100_ICR_ENABLE_ALL_INTS)
-+
-+#define       INTS_ENABLED(isp)       ((IS_SCSI(isp))?  \
-+ (ISP_READ(isp, BIU_ICR) & (BIU_ICR_ENABLE_RISC_INT|BIU_ICR_ENABLE_ALL_INTS)) :\
-+ (ISP_READ(isp, BIU_ICR) & \
-+      (BIU2100_ICR_ENA_RISC_INT|BIU2100_ICR_ENABLE_ALL_INTS)))
-+
-+#define       DISABLE_INTS(isp)       ISP_WRITE(isp, BIU_ICR, 0)
-+
-+/* BUS STATUS REGISTER */
-+#define       BIU_ISR_DMA_INT                 0x0020  /* DMA interrupt pending */
-+#define       BIU_ISR_CDMA_INT                0x0010  /* CDMA interrupt pending */
-+#define       BIU_ISR_SXP_INT                 0x0008  /* SXP interrupt pending */
-+#define       BIU_ISR_RISC_INT                0x0004  /* Risc interrupt pending */
-+#define       BIU_ISR_IPEND                   0x0002  /* Global interrupt pending */
-+
-+#define       BIU2100_ISR_INT_PENDING         0x8000  /* Global interrupt pending */
-+#define       BIU2100_ISR_FPM_INT             0x0020  /* FPM interrupt pending */
-+#define       BIU2100_ISR_FB_INT              0x0010  /* FB interrupt pending */
-+#define       BIU2100_ISR_RISC_INT            0x0008  /* Risc interrupt pending */
-+#define       BIU2100_ISR_CDMA_INT            0x0004  /* CDMA interrupt pending */
-+#define       BIU2100_ISR_RXDMA_INT_PENDING   0x0002  /* Global interrupt pending */
-+#define       BIU2100_ISR_TXDMA_INT_PENDING   0x0001  /* Global interrupt pending */
-+
-+#define       INT_PENDING(isp, isr)   (IS_FC(isp)? \
-+      ((isr & BIU2100_ISR_RISC_INT) != 0) : ((isr & BIU_ISR_RISC_INT) != 0))
-+
-+#define       INT_PENDING_MASK(isp)   \
-+      (IS_FC(isp)? BIU2100_ISR_RISC_INT: BIU_ISR_RISC_INT)
-+
-+/* BUS SEMAPHORE REGISTER */
-+#define       BIU_SEMA_STATUS         0x0002  /* Semaphore Status Bit */
-+#define       BIU_SEMA_LOCK           0x0001  /* Semaphore Lock Bit */
-+
-+/* NVRAM SEMAPHORE REGISTER */
-+#define       BIU_NVRAM_CLOCK         0x0001
-+#define       BIU_NVRAM_SELECT        0x0002
-+#define       BIU_NVRAM_DATAOUT       0x0004
-+#define       BIU_NVRAM_DATAIN        0x0008
-+#define               ISP_NVRAM_READ          6
-+
-+/* COMNMAND && DATA DMA CONFIGURATION REGISTER */
-+#define       DMA_ENABLE_SXP_DMA              0x0008  /* Enable SXP to DMA Data */
-+#define       DMA_ENABLE_INTS                 0x0004  /* Enable interrupts to RISC */
-+#define       DMA_ENABLE_BURST                0x0002  /* Enable Bus burst trans */
-+#define       DMA_DMA_DIRECTION               0x0001  /*
-+                                               * Set DMA direction:
-+                                               *      0 - DMA FIFO to host
-+                                               *      1 - Host to DMA FIFO
-+                                               */
-+
-+/* COMMAND && DATA DMA CONTROL REGISTER */
-+#define       DMA_CNTRL_SUSPEND_CHAN          0x0010  /* Suspend DMA transfer */
-+#define       DMA_CNTRL_CLEAR_CHAN            0x0008  /*
-+                                               * Clear FIFO and DMA Channel,
-+                                               * reset DMA registers
-+                                               */
-+#define       DMA_CNTRL_CLEAR_FIFO            0x0004  /* Clear DMA FIFO */
-+#define       DMA_CNTRL_RESET_INT             0x0002  /* Clear DMA interrupt */
-+#define       DMA_CNTRL_STROBE                0x0001  /* Start DMA transfer */
-+
-+/*
-+ * Variants of same for 2100
-+ */
-+#define       DMA_CNTRL2100_CLEAR_CHAN        0x0004
-+#define       DMA_CNTRL2100_RESET_INT         0x0002
-+
-+
-+
-+/* DMA STATUS REGISTER */
-+#define       DMA_SBUS_STATUS_PIPE_MASK       0x00C0  /* DMA Pipeline status mask */
-+#define       DMA_SBUS_STATUS_CHAN_MASK       0x0030  /* Channel status mask */
-+#define       DMA_SBUS_STATUS_BUS_PARITY      0x0008  /* Parity Error on bus */
-+#define       DMA_SBUS_STATUS_BUS_ERR         0x0004  /* Error Detected on bus */
-+#define       DMA_SBUS_STATUS_TERM_COUNT      0x0002  /* DMA Transfer Completed */
-+#define       DMA_SBUS_STATUS_INTERRUPT       0x0001  /* Enable DMA channel inter */
-+
-+#define       DMA_PCI_STATUS_INTERRUPT        0x8000  /* Enable DMA channel inter */
-+#define       DMA_PCI_STATUS_RETRY_STAT       0x4000  /* Retry status */
-+#define       DMA_PCI_STATUS_CHAN_MASK        0x3000  /* Channel status mask */
-+#define       DMA_PCI_STATUS_FIFO_OVR         0x0100  /* DMA FIFO overrun cond */
-+#define       DMA_PCI_STATUS_FIFO_UDR         0x0080  /* DMA FIFO underrun cond */
-+#define       DMA_PCI_STATUS_BUS_ERR          0x0040  /* Error Detected on bus */
-+#define       DMA_PCI_STATUS_BUS_PARITY       0x0020  /* Parity Error on bus */
-+#define       DMA_PCI_STATUS_CLR_PEND         0x0010  /* DMA clear pending */
-+#define       DMA_PCI_STATUS_TERM_COUNT       0x0008  /* DMA Transfer Completed */
-+#define       DMA_PCI_STATUS_DMA_SUSP         0x0004  /* DMA suspended */
-+#define       DMA_PCI_STATUS_PIPE_MASK        0x0003  /* DMA Pipeline status mask */
-+
-+/* DMA Status Register, pipeline status bits */
-+#define       DMA_SBUS_PIPE_FULL              0x00C0  /* Both pipeline stages full */
-+#define       DMA_SBUS_PIPE_OVERRUN           0x0080  /* Pipeline overrun */
-+#define       DMA_SBUS_PIPE_STAGE1            0x0040  /*
-+                                               * Pipeline stage 1 Loaded,
-+                                               * stage 2 empty
-+                                               */
-+#define       DMA_PCI_PIPE_FULL               0x0003  /* Both pipeline stages full */
-+#define       DMA_PCI_PIPE_OVERRUN            0x0002  /* Pipeline overrun */
-+#define       DMA_PCI_PIPE_STAGE1             0x0001  /*
-+                                               * Pipeline stage 1 Loaded,
-+                                               * stage 2 empty
-+                                               */
-+#define       DMA_PIPE_EMPTY                  0x0000  /* All pipeline stages empty */
-+
-+/* DMA Status Register, channel status bits */
-+#define       DMA_SBUS_CHAN_SUSPEND   0x0030  /* Channel error or suspended */
-+#define       DMA_SBUS_CHAN_TRANSFER  0x0020  /* Chan transfer in progress */
-+#define       DMA_SBUS_CHAN_ACTIVE    0x0010  /* Chan trans to host active */
-+#define       DMA_PCI_CHAN_TRANSFER   0x3000  /* Chan transfer in progress */
-+#define       DMA_PCI_CHAN_SUSPEND    0x2000  /* Channel error or suspended */
-+#define       DMA_PCI_CHAN_ACTIVE     0x1000  /* Chan trans to host active */
-+#define       ISP_DMA_CHAN_IDLE       0x0000  /* Chan idle (normal comp) */
-+
-+
-+/* DMA FIFO STATUS REGISTER */
-+#define       DMA_FIFO_STATUS_OVERRUN         0x0200  /* FIFO Overrun Condition */
-+#define       DMA_FIFO_STATUS_UNDERRUN        0x0100  /* FIFO Underrun Condition */
-+#define       DMA_FIFO_SBUS_COUNT_MASK        0x007F  /* FIFO Byte count mask */
-+#define       DMA_FIFO_PCI_COUNT_MASK         0x00FF  /* FIFO Byte count mask */
-+
-+/*
-+ * Mailbox Block Register Offsets
-+ */
-+
-+#define       INMAILBOX0      (MBOX_BLOCK+0x0)
-+#define       INMAILBOX1      (MBOX_BLOCK+0x2)
-+#define       INMAILBOX2      (MBOX_BLOCK+0x4)
-+#define       INMAILBOX3      (MBOX_BLOCK+0x6)
-+#define       INMAILBOX4      (MBOX_BLOCK+0x8)
-+#define       INMAILBOX5      (MBOX_BLOCK+0xA)
-+#define       INMAILBOX6      (MBOX_BLOCK+0xC)
-+#define       INMAILBOX7      (MBOX_BLOCK+0xE)
-+
-+#define       OUTMAILBOX0     (MBOX_BLOCK+0x0)
-+#define       OUTMAILBOX1     (MBOX_BLOCK+0x2)
-+#define       OUTMAILBOX2     (MBOX_BLOCK+0x4)
-+#define       OUTMAILBOX3     (MBOX_BLOCK+0x6)
-+#define       OUTMAILBOX4     (MBOX_BLOCK+0x8)
-+#define       OUTMAILBOX5     (MBOX_BLOCK+0xA)
-+#define       OUTMAILBOX6     (MBOX_BLOCK+0xC)
-+#define       OUTMAILBOX7     (MBOX_BLOCK+0xE)
-+
-+#define       MBOX_OFF(n)     (MBOX_BLOCK + ((n) << 1))
-+#define       NMBOX(isp)      \
-+      (((((isp)->isp_type & ISP_HA_SCSI) >= ISP_HA_SCSI_1040A) || \
-+       ((isp)->isp_type & ISP_HA_FC))? 8 : 6)
-+#define       NMBOX_BMASK(isp)        \
-+      (((((isp)->isp_type & ISP_HA_SCSI) >= ISP_HA_SCSI_1040A) || \
-+       ((isp)->isp_type & ISP_HA_FC))? 0xff : 0x3f)
-+
-+#define       MAX_MAILBOX     8
-+
-+/*
-+ * Fibre Protocol Module and Frame Buffer Register Offsets/Definitions (2X00).
-+ * NB: The RISC processor must be paused and the appropriate register
-+ * bank selected via BIU2100_CSR bits.
-+ */
-+
-+#define       FPM_DIAG_CONFIG (BIU_BLOCK + 0x96)
-+#define               FPM_SOFT_RESET          0x0100
-+
-+#define       FBM_CMD         (BIU_BLOCK + 0xB8)
-+#define               FBMCMD_FIFO_RESET_ALL   0xA000
-+
-+
-+/*
-+ * SXP Block Register Offsets
-+ */
-+#define       SXP_PART_ID     (SXP_BLOCK+0x0)         /* R  : Part ID Code */
-+#define       SXP_CONFIG1     (SXP_BLOCK+0x2)         /* RW*: Configuration Reg #1 */
-+#define       SXP_CONFIG2     (SXP_BLOCK+0x4)         /* RW*: Configuration Reg #2 */
-+#define       SXP_CONFIG3     (SXP_BLOCK+0x6)         /* RW*: Configuration Reg #2 */
-+#define       SXP_INSTRUCTION (SXP_BLOCK+0xC)         /* RW*: Instruction Pointer */
-+#define       SXP_RETURN_ADDR (SXP_BLOCK+0x10)        /* RW*: Return Address */
-+#define       SXP_COMMAND     (SXP_BLOCK+0x14)        /* RW*: Command */
-+#define       SXP_INTERRUPT   (SXP_BLOCK+0x18)        /* R  : Interrupt */
-+#define       SXP_SEQUENCE    (SXP_BLOCK+0x1C)        /* RW*: Sequence */
-+#define       SXP_GROSS_ERR   (SXP_BLOCK+0x1E)        /* R  : Gross Error */
-+#define       SXP_EXCEPTION   (SXP_BLOCK+0x20)        /* RW*: Exception Enable */
-+#define       SXP_OVERRIDE    (SXP_BLOCK+0x24)        /* RW*: Override */
-+#define       SXP_LIT_BASE    (SXP_BLOCK+0x28)        /* RW*: Literal Base */
-+#define       SXP_USER_FLAGS  (SXP_BLOCK+0x2C)        /* RW*: User Flags */
-+#define       SXP_USER_EXCEPT (SXP_BLOCK+0x30)        /* RW*: User Exception */
-+#define       SXP_BREAKPOINT  (SXP_BLOCK+0x34)        /* RW*: Breakpoint */
-+#define       SXP_SCSI_ID     (SXP_BLOCK+0x40)        /* RW*: SCSI ID */
-+#define       SXP_DEV_CONFIG1 (SXP_BLOCK+0x42)        /* RW*: Device Config Reg #1 */
-+#define       SXP_DEV_CONFIG2 (SXP_BLOCK+0x44)        /* RW*: Device Config Reg #2 */
-+#define       SXP_PHASE_PTR   (SXP_BLOCK+0x48)        /* RW*: SCSI Phase Pointer */
-+#define       SXP_BUF_PTR     (SXP_BLOCK+0x4C)        /* RW*: SCSI Buffer Pointer */
-+#define       SXP_BUF_CTR     (SXP_BLOCK+0x50)        /* RW*: SCSI Buffer Counter */
-+#define       SXP_BUFFER      (SXP_BLOCK+0x52)        /* RW*: SCSI Buffer */
-+#define       SXP_BUF_BYTE    (SXP_BLOCK+0x54)        /* RW*: SCSI Buffer Byte */
-+#define       SXP_BUF_WD      (SXP_BLOCK+0x56)        /* RW*: SCSI Buffer Word */
-+#define       SXP_BUF_WD_TRAN (SXP_BLOCK+0x58)        /* RW*: SCSI Buffer Wd xlate */
-+#define       SXP_FIFO        (SXP_BLOCK+0x5A)        /* RW*: SCSI FIFO */
-+#define       SXP_FIFO_STATUS (SXP_BLOCK+0x5C)        /* RW*: SCSI FIFO Status */
-+#define       SXP_FIFO_TOP    (SXP_BLOCK+0x5E)        /* RW*: SCSI FIFO Top Resid */
-+#define       SXP_FIFO_BOTTOM (SXP_BLOCK+0x60)        /* RW*: SCSI FIFO Bot Resid */
-+#define       SXP_TRAN_REG    (SXP_BLOCK+0x64)        /* RW*: SCSI Transferr Reg */
-+#define       SXP_TRAN_CNT_LO (SXP_BLOCK+0x68)        /* RW*: SCSI Trans Count */
-+#define       SXP_TRAN_CNT_HI (SXP_BLOCK+0x6A)        /* RW*: SCSI Trans Count */
-+#define       SXP_TRAN_CTR_LO (SXP_BLOCK+0x6C)        /* RW*: SCSI Trans Counter */
-+#define       SXP_TRAN_CTR_HI (SXP_BLOCK+0x6E)        /* RW*: SCSI Trans Counter */
-+#define       SXP_ARB_DATA    (SXP_BLOCK+0x70)        /* R  : SCSI Arb Data */
-+#define       SXP_PINS_CTRL   (SXP_BLOCK+0x72)        /* RW*: SCSI Control Pins */
-+#define       SXP_PINS_DATA   (SXP_BLOCK+0x74)        /* RW*: SCSI Data Pins */
-+#define       SXP_PINS_DIFF   (SXP_BLOCK+0x76)        /* RW*: SCSI Diff Pins */
-+
-+/* for 1080/1280/1240 only */
-+#define       SXP_BANK1_SELECT        0x100
-+
-+
-+/* SXP CONF1 REGISTER */
-+#define       SXP_CONF1_ASYNCH_SETUP          0xF000  /* Asynchronous setup time */
-+#define       SXP_CONF1_SELECTION_UNIT        0x0000  /* Selection time unit */
-+#define       SXP_CONF1_SELECTION_TIMEOUT     0x0600  /* Selection timeout */
-+#define       SXP_CONF1_CLOCK_FACTOR          0x00E0  /* Clock factor */
-+#define       SXP_CONF1_SCSI_ID               0x000F  /* SCSI id */
-+
-+/* SXP CONF2 REGISTER */
-+#define       SXP_CONF2_DISABLE_FILTER        0x0040  /* Disable SCSI rec filters */
-+#define       SXP_CONF2_REQ_ACK_PULLUPS       0x0020  /* Enable req/ack pullups */
-+#define       SXP_CONF2_DATA_PULLUPS          0x0010  /* Enable data pullups */
-+#define       SXP_CONF2_CONFIG_AUTOLOAD       0x0008  /* Enable dev conf auto-load */
-+#define       SXP_CONF2_RESELECT              0x0002  /* Enable reselection */
-+#define       SXP_CONF2_SELECT                0x0001  /* Enable selection */
-+
-+/* SXP INTERRUPT REGISTER */
-+#define       SXP_INT_PARITY_ERR              0x8000  /* Parity error detected */
-+#define       SXP_INT_GROSS_ERR               0x4000  /* Gross error detected */
-+#define       SXP_INT_FUNCTION_ABORT          0x2000  /* Last cmd aborted */
-+#define       SXP_INT_CONDITION_FAILED        0x1000  /* Last cond failed test */
-+#define       SXP_INT_FIFO_EMPTY              0x0800  /* SCSI FIFO is empty */
-+#define       SXP_INT_BUF_COUNTER_ZERO        0x0400  /* SCSI buf count == zero */
-+#define       SXP_INT_XFER_ZERO               0x0200  /* SCSI trans count == zero */
-+#define       SXP_INT_INT_PENDING             0x0080  /* SXP interrupt pending */
-+#define       SXP_INT_CMD_RUNNING             0x0040  /* SXP is running a command */
-+#define       SXP_INT_INT_RETURN_CODE         0x000F  /* Interrupt return code */
-+
-+
-+/* SXP GROSS ERROR REGISTER */
-+#define       SXP_GROSS_OFFSET_RESID          0x0040  /* Req/Ack offset not zero */
-+#define       SXP_GROSS_OFFSET_UNDERFLOW      0x0020  /* Req/Ack offset underflow */
-+#define       SXP_GROSS_OFFSET_OVERFLOW       0x0010  /* Req/Ack offset overflow */
-+#define       SXP_GROSS_FIFO_UNDERFLOW        0x0008  /* SCSI FIFO underflow */
-+#define       SXP_GROSS_FIFO_OVERFLOW         0x0004  /* SCSI FIFO overflow */
-+#define       SXP_GROSS_WRITE_ERR             0x0002  /* SXP and RISC wrote to reg */
-+#define       SXP_GROSS_ILLEGAL_INST          0x0001  /* Bad inst loaded into SXP */
-+
-+/* SXP EXCEPTION REGISTER */
-+#define       SXP_EXCEPT_USER_0               0x8000  /* Enable user exception #0 */
-+#define       SXP_EXCEPT_USER_1               0x4000  /* Enable user exception #1 */
-+#define       PCI_SXP_EXCEPT_SCAM             0x0400  /* SCAM Selection enable */
-+#define       SXP_EXCEPT_BUS_FREE             0x0200  /* Enable Bus Free det */
-+#define       SXP_EXCEPT_TARGET_ATN           0x0100  /* Enable TGT mode atten det */
-+#define       SXP_EXCEPT_RESELECTED           0x0080  /* Enable ReSEL exc handling */
-+#define       SXP_EXCEPT_SELECTED             0x0040  /* Enable SEL exc handling */
-+#define       SXP_EXCEPT_ARBITRATION          0x0020  /* Enable ARB exc handling */
-+#define       SXP_EXCEPT_GROSS_ERR            0x0010  /* Enable gross error except */
-+#define       SXP_EXCEPT_BUS_RESET            0x0008  /* Enable Bus Reset except */
-+
-+      /* SXP OVERRIDE REGISTER */
-+#define       SXP_ORIDE_EXT_TRIGGER           0x8000  /* Enable external trigger */
-+#define       SXP_ORIDE_STEP                  0x4000  /* Enable single step mode */
-+#define       SXP_ORIDE_BREAKPOINT            0x2000  /* Enable breakpoint reg */
-+#define       SXP_ORIDE_PIN_WRITE             0x1000  /* Enable write to SCSI pins */
-+#define       SXP_ORIDE_FORCE_OUTPUTS         0x0800  /* Force SCSI outputs on */
-+#define       SXP_ORIDE_LOOPBACK              0x0400  /* Enable SCSI loopback mode */
-+#define       SXP_ORIDE_PARITY_TEST           0x0200  /* Enable parity test mode */
-+#define       SXP_ORIDE_TRISTATE_ENA_PINS     0x0100  /* Tristate SCSI enable pins */
-+#define       SXP_ORIDE_TRISTATE_PINS         0x0080  /* Tristate SCSI pins */
-+#define       SXP_ORIDE_FIFO_RESET            0x0008  /* Reset SCSI FIFO */
-+#define       SXP_ORIDE_CMD_TERMINATE         0x0004  /* Terminate cur SXP com */
-+#define       SXP_ORIDE_RESET_REG             0x0002  /* Reset SXP registers */
-+#define       SXP_ORIDE_RESET_MODULE          0x0001  /* Reset SXP module */
-+
-+/* SXP COMMANDS */
-+#define       SXP_RESET_BUS_CMD               0x300b
-+
-+/* SXP SCSI ID REGISTER */
-+#define       SXP_SELECTING_ID                0x0F00  /* (Re)Selecting id */
-+#define       SXP_SELECT_ID                   0x000F  /* Select id */
-+
-+/* SXP DEV CONFIG1 REGISTER */
-+#define       SXP_DCONF1_SYNC_HOLD            0x7000  /* Synchronous data hold */
-+#define       SXP_DCONF1_SYNC_SETUP           0x0F00  /* Synchronous data setup */
-+#define       SXP_DCONF1_SYNC_OFFSET          0x000F  /* Synchronous data offset */
-+
-+
-+/* SXP DEV CONFIG2 REGISTER */
-+#define       SXP_DCONF2_FLAGS_MASK           0xF000  /* Device flags */
-+#define       SXP_DCONF2_WIDE                 0x0400  /* Enable wide SCSI */
-+#define       SXP_DCONF2_PARITY               0x0200  /* Enable parity checking */
-+#define       SXP_DCONF2_BLOCK_MODE           0x0100  /* Enable blk mode xfr count */
-+#define       SXP_DCONF2_ASSERTION_MASK       0x0007  /* Assersion period mask */
-+
-+
-+/* SXP PHASE POINTER REGISTER */
-+#define       SXP_PHASE_STATUS_PTR            0x1000  /* Status buffer offset */
-+#define       SXP_PHASE_MSG_IN_PTR            0x0700  /* Msg in buffer offset */
-+#define       SXP_PHASE_COM_PTR               0x00F0  /* Command buffer offset */
-+#define       SXP_PHASE_MSG_OUT_PTR           0x0007  /* Msg out buffer offset */
-+
-+
-+/* SXP FIFO STATUS REGISTER */
-+#define       SXP_FIFO_TOP_RESID              0x8000  /* Top residue reg full */
-+#define       SXP_FIFO_ACK_RESID              0x4000  /* Wide transfers odd resid */
-+#define       SXP_FIFO_COUNT_MASK             0x001C  /* Words in SXP FIFO */
-+#define       SXP_FIFO_BOTTOM_RESID           0x0001  /* Bottom residue reg full */
-+
-+
-+/* SXP CONTROL PINS REGISTER */
-+#define       SXP_PINS_CON_PHASE              0x8000  /* Scsi phase valid */
-+#define       SXP_PINS_CON_PARITY_HI          0x0400  /* Parity pin */
-+#define       SXP_PINS_CON_PARITY_LO          0x0200  /* Parity pin */
-+#define       SXP_PINS_CON_REQ                0x0100  /* SCSI bus REQUEST */
-+#define       SXP_PINS_CON_ACK                0x0080  /* SCSI bus ACKNOWLEDGE */
-+#define       SXP_PINS_CON_RST                0x0040  /* SCSI bus RESET */
-+#define       SXP_PINS_CON_BSY                0x0020  /* SCSI bus BUSY */
-+#define       SXP_PINS_CON_SEL                0x0010  /* SCSI bus SELECT */
-+#define       SXP_PINS_CON_ATN                0x0008  /* SCSI bus ATTENTION */
-+#define       SXP_PINS_CON_MSG                0x0004  /* SCSI bus MESSAGE */
-+#define       SXP_PINS_CON_CD                 0x0002  /* SCSI bus COMMAND */
-+#define       SXP_PINS_CON_IO                 0x0001  /* SCSI bus INPUT */
-+
-+/*
-+ * Set the hold time for the SCSI Bus Reset to be 250 ms
-+ */
-+#define       SXP_SCSI_BUS_RESET_HOLD_TIME    250
-+
-+/* SXP DIFF PINS REGISTER */
-+#define       SXP_PINS_DIFF_SENSE             0x0200  /* DIFFSENS sig on SCSI bus */
-+#define       SXP_PINS_DIFF_MODE              0x0100  /* DIFFM signal */
-+#define       SXP_PINS_DIFF_ENABLE_OUTPUT     0x0080  /* Enable SXP SCSI data drv */
-+#define       SXP_PINS_DIFF_PINS_MASK         0x007C  /* Differential control pins */
-+#define       SXP_PINS_DIFF_TARGET            0x0002  /* Enable SXP target mode */
-+#define       SXP_PINS_DIFF_INITIATOR         0x0001  /* Enable SXP initiator mode */
-+
-+/* Ultra2 only */
-+#define       SXP_PINS_LVD_MODE               0x1000
-+#define       SXP_PINS_HVD_MODE               0x0800
-+#define       SXP_PINS_SE_MODE                0x0400
-+
-+/* The above have to be put together with the DIFFM pin to make sense */
-+#define       ISP1080_LVD_MODE                (SXP_PINS_LVD_MODE)
-+#define       ISP1080_HVD_MODE                (SXP_PINS_HVD_MODE|SXP_PINS_DIFF_MODE)
-+#define       ISP1080_SE_MODE                 (SXP_PINS_SE_MODE)
-+#define       ISP1080_MODE_MASK       \
-+    (SXP_PINS_LVD_MODE|SXP_PINS_HVD_MODE|SXP_PINS_SE_MODE|SXP_PINS_DIFF_MODE)
-+
-+/*
-+ * RISC and Host Command and Control Block Register Offsets
-+ */
-+
-+#define       RISC_ACC        RISC_BLOCK+0x0  /* RW*: Accumulator */
-+#define       RISC_R1         RISC_BLOCK+0x2  /* RW*: GP Reg R1  */
-+#define       RISC_R2         RISC_BLOCK+0x4  /* RW*: GP Reg R2  */
-+#define       RISC_R3         RISC_BLOCK+0x6  /* RW*: GP Reg R3  */
-+#define       RISC_R4         RISC_BLOCK+0x8  /* RW*: GP Reg R4  */
-+#define       RISC_R5         RISC_BLOCK+0xA  /* RW*: GP Reg R5  */
-+#define       RISC_R6         RISC_BLOCK+0xC  /* RW*: GP Reg R6  */
-+#define       RISC_R7         RISC_BLOCK+0xE  /* RW*: GP Reg R7  */
-+#define       RISC_R8         RISC_BLOCK+0x10 /* RW*: GP Reg R8  */
-+#define       RISC_R9         RISC_BLOCK+0x12 /* RW*: GP Reg R9  */
-+#define       RISC_R10        RISC_BLOCK+0x14 /* RW*: GP Reg R10 */
-+#define       RISC_R11        RISC_BLOCK+0x16 /* RW*: GP Reg R11 */
-+#define       RISC_R12        RISC_BLOCK+0x18 /* RW*: GP Reg R12 */
-+#define       RISC_R13        RISC_BLOCK+0x1a /* RW*: GP Reg R13 */
-+#define       RISC_R14        RISC_BLOCK+0x1c /* RW*: GP Reg R14 */
-+#define       RISC_R15        RISC_BLOCK+0x1e /* RW*: GP Reg R15 */
-+#define       RISC_PSR        RISC_BLOCK+0x20 /* RW*: Processor Status */
-+#define       RISC_IVR        RISC_BLOCK+0x22 /* RW*: Interrupt Vector */
-+#define       RISC_PCR        RISC_BLOCK+0x24 /* RW*: Processor Ctrl */
-+#define       RISC_RAR0       RISC_BLOCK+0x26 /* RW*: Ram Address #0 */
-+#define       RISC_RAR1       RISC_BLOCK+0x28 /* RW*: Ram Address #1 */
-+#define       RISC_LCR        RISC_BLOCK+0x2a /* RW*: Loop Counter */
-+#define       RISC_PC         RISC_BLOCK+0x2c /* R  : Program Counter */
-+#define       RISC_MTR        RISC_BLOCK+0x2e /* RW*: Memory Timing */
-+#define               RISC_MTR2100    RISC_BLOCK+0x30
-+
-+#define       RISC_EMB        RISC_BLOCK+0x30 /* RW*: Ext Mem Boundary */
-+#define               DUAL_BANK       8
-+#define       RISC_SP         RISC_BLOCK+0x32 /* RW*: Stack Pointer */
-+#define       RISC_HRL        RISC_BLOCK+0x3e /* R *: Hardware Rev Level */
-+#define       HCCR            RISC_BLOCK+0x40 /* RW : Host Command & Ctrl */
-+#define       BP0             RISC_BLOCK+0x42 /* RW : Processor Brkpt #0 */
-+#define       BP1             RISC_BLOCK+0x44 /* RW : Processor Brkpt #1 */
-+#define       TCR             RISC_BLOCK+0x46 /*  W : Test Control */
-+#define       TMR             RISC_BLOCK+0x48 /*  W : Test Mode */
-+
-+
-+/* PROCESSOR STATUS REGISTER */
-+#define       RISC_PSR_FORCE_TRUE             0x8000
-+#define       RISC_PSR_LOOP_COUNT_DONE        0x4000
-+#define       RISC_PSR_RISC_INT               0x2000
-+#define       RISC_PSR_TIMER_ROLLOVER         0x1000
-+#define       RISC_PSR_ALU_OVERFLOW           0x0800
-+#define       RISC_PSR_ALU_MSB                0x0400
-+#define       RISC_PSR_ALU_CARRY              0x0200
-+#define       RISC_PSR_ALU_ZERO               0x0100
-+
-+#define       RISC_PSR_PCI_ULTRA              0x0080
-+#define       RISC_PSR_SBUS_ULTRA             0x0020
-+
-+#define       RISC_PSR_DMA_INT                0x0010
-+#define       RISC_PSR_SXP_INT                0x0008
-+#define       RISC_PSR_HOST_INT               0x0004
-+#define       RISC_PSR_INT_PENDING            0x0002
-+#define       RISC_PSR_FORCE_FALSE            0x0001
-+
-+
-+/* Host Command and Control */
-+#define       HCCR_CMD_NOP                    0x0000  /* NOP */
-+#define       HCCR_CMD_RESET                  0x1000  /* Reset RISC */
-+#define       HCCR_CMD_PAUSE                  0x2000  /* Pause RISC */
-+#define       HCCR_CMD_RELEASE                0x3000  /* Release Paused RISC */
-+#define       HCCR_CMD_STEP                   0x4000  /* Single Step RISC */
-+#define       HCCR_2X00_DISABLE_PARITY_PAUSE  0x4001  /*
-+                                               * Disable RISC pause on FPM
-+                                               * parity error.
-+                                               */
-+#define       HCCR_CMD_SET_HOST_INT           0x5000  /* Set Host Interrupt */
-+#define       HCCR_CMD_CLEAR_HOST_INT         0x6000  /* Clear Host Interrupt */
-+#define       HCCR_CMD_CLEAR_RISC_INT         0x7000  /* Clear RISC interrupt */
-+#define       HCCR_CMD_BREAKPOINT             0x8000  /* Change breakpoint enables */
-+#define       PCI_HCCR_CMD_BIOS               0x9000  /* Write BIOS (disable) */
-+#define       PCI_HCCR_CMD_PARITY             0xA000  /* Write parity enable */
-+#define       PCI_HCCR_CMD_PARITY_ERR         0xE000  /* Generate parity error */
-+#define       HCCR_CMD_TEST_MODE              0xF000  /* Set Test Mode */
-+
-+#define       ISP2100_HCCR_PARITY_ENABLE_2    0x0400
-+#define       ISP2100_HCCR_PARITY_ENABLE_1    0x0200
-+#define       ISP2100_HCCR_PARITY_ENABLE_0    0x0100
-+#define       ISP2100_HCCR_PARITY             0x0001
-+
-+#define       PCI_HCCR_PARITY                 0x0400  /* Parity error flag */
-+#define       PCI_HCCR_PARITY_ENABLE_1        0x0200  /* Parity enable bank 1 */
-+#define       PCI_HCCR_PARITY_ENABLE_0        0x0100  /* Parity enable bank 0 */
-+
-+#define       HCCR_HOST_INT                   0x0080  /* R  : Host interrupt set */
-+#define       HCCR_RESET                      0x0040  /* R  : reset in progress */
-+#define       HCCR_PAUSE                      0x0020  /* R  : RISC paused */
-+
-+#define       PCI_HCCR_BIOS                   0x0001  /*  W : BIOS enable */
-+
-+/*
-+ * NVRAM Definitions (PCI cards only)
-+ */
-+
-+#define       ISPBSMX(c, byte, shift, mask)   \
-+      (((c)[(byte)] >> (shift)) & (mask))
-+/*
-+ * Qlogic 1020/1040 NVRAM is an array of 128 bytes.
-+ *
-+ * Some portion of the front of this is for general host adapter properties
-+ * This is followed by an array of per-target parameters, and is tailed off
-+ * with a checksum xor byte at offset 127. For non-byte entities data is
-+ * stored in Little Endian order.
-+ */
-+
-+#define       ISP_NVRAM_SIZE  128
-+
-+#define       ISP_NVRAM_VERSION(c)                    (c)[4]
-+#define       ISP_NVRAM_FIFO_THRESHOLD(c)             ISPBSMX(c, 5, 0, 0x03)
-+#define       ISP_NVRAM_BIOS_DISABLE(c)               ISPBSMX(c, 5, 2, 0x01)
-+#define       ISP_NVRAM_HBA_ENABLE(c)                 ISPBSMX(c, 5, 3, 0x01)
-+#define       ISP_NVRAM_INITIATOR_ID(c)               ISPBSMX(c, 5, 4, 0x0f)
-+#define       ISP_NVRAM_BUS_RESET_DELAY(c)            (c)[6]
-+#define       ISP_NVRAM_BUS_RETRY_COUNT(c)            (c)[7]
-+#define       ISP_NVRAM_BUS_RETRY_DELAY(c)            (c)[8]
-+#define       ISP_NVRAM_ASYNC_DATA_SETUP_TIME(c)      ISPBSMX(c, 9, 0, 0x0f)
-+#define       ISP_NVRAM_REQ_ACK_ACTIVE_NEGATION(c)    ISPBSMX(c, 9, 4, 0x01)
-+#define       ISP_NVRAM_DATA_LINE_ACTIVE_NEGATION(c)  ISPBSMX(c, 9, 5, 0x01)
-+#define       ISP_NVRAM_DATA_DMA_BURST_ENABLE(c)      ISPBSMX(c, 9, 6, 0x01)
-+#define       ISP_NVRAM_CMD_DMA_BURST_ENABLE(c)       ISPBSMX(c, 9, 7, 0x01)
-+#define       ISP_NVRAM_TAG_AGE_LIMIT(c)              (c)[10]
-+#define       ISP_NVRAM_LOWTRM_ENABLE(c)              ISPBSMX(c, 11, 0, 0x01)
-+#define       ISP_NVRAM_HITRM_ENABLE(c)               ISPBSMX(c, 11, 1, 0x01)
-+#define       ISP_NVRAM_PCMC_BURST_ENABLE(c)          ISPBSMX(c, 11, 2, 0x01)
-+#define       ISP_NVRAM_ENABLE_60_MHZ(c)              ISPBSMX(c, 11, 3, 0x01)
-+#define       ISP_NVRAM_SCSI_RESET_DISABLE(c)         ISPBSMX(c, 11, 4, 0x01)
-+#define       ISP_NVRAM_ENABLE_AUTO_TERM(c)           ISPBSMX(c, 11, 5, 0x01)
-+#define       ISP_NVRAM_FIFO_THRESHOLD_128(c)         ISPBSMX(c, 11, 6, 0x01)
-+#define       ISP_NVRAM_AUTO_TERM_SUPPORT(c)          ISPBSMX(c, 11, 7, 0x01)
-+#define       ISP_NVRAM_SELECTION_TIMEOUT(c)          (((c)[12]) | ((c)[13] << 8))
-+#define       ISP_NVRAM_MAX_QUEUE_DEPTH(c)            (((c)[14]) | ((c)[15] << 8))
-+#define       ISP_NVRAM_SCSI_BUS_SIZE(c)              ISPBSMX(c, 16, 0, 0x01)
-+#define       ISP_NVRAM_SCSI_BUS_TYPE(c)              ISPBSMX(c, 16, 1, 0x01)
-+#define       ISP_NVRAM_ADAPTER_CLK_SPEED(c)          ISPBSMX(c, 16, 2, 0x01)
-+#define       ISP_NVRAM_SOFT_TERM_SUPPORT(c)          ISPBSMX(c, 16, 3, 0x01)
-+#define       ISP_NVRAM_FLASH_ONBOARD(c)              ISPBSMX(c, 16, 4, 0x01)
-+#define       ISP_NVRAM_FAST_MTTR_ENABLE(c)           ISPBSMX(c, 22, 0, 0x01)
-+
-+#define       ISP_NVRAM_TARGOFF                       28
-+#define       ISP_NVARM_TARGSIZE                      6
-+#define       _IxT(tgt, tidx)                 \
-+      (ISP_NVRAM_TARGOFF + (ISP_NVARM_TARGSIZE * (tgt)) + (tidx))
-+#define       ISP_NVRAM_TGT_RENEG(c, t)               ISPBSMX(c, _IxT(t, 0), 0, 0x01)
-+#define       ISP_NVRAM_TGT_QFRZ(c, t)                ISPBSMX(c, _IxT(t, 0), 1, 0x01)
-+#define       ISP_NVRAM_TGT_ARQ(c, t)                 ISPBSMX(c, _IxT(t, 0), 2, 0x01)
-+#define       ISP_NVRAM_TGT_TQING(c, t)               ISPBSMX(c, _IxT(t, 0), 3, 0x01)
-+#define       ISP_NVRAM_TGT_SYNC(c, t)                ISPBSMX(c, _IxT(t, 0), 4, 0x01)
-+#define       ISP_NVRAM_TGT_WIDE(c, t)                ISPBSMX(c, _IxT(t, 0), 5, 0x01)
-+#define       ISP_NVRAM_TGT_PARITY(c, t)              ISPBSMX(c, _IxT(t, 0), 6, 0x01)
-+#define       ISP_NVRAM_TGT_DISC(c, t)                ISPBSMX(c, _IxT(t, 0), 7, 0x01)
-+#define       ISP_NVRAM_TGT_EXEC_THROTTLE(c, t)       ISPBSMX(c, _IxT(t, 1), 0, 0xff)
-+#define       ISP_NVRAM_TGT_SYNC_PERIOD(c, t)         ISPBSMX(c, _IxT(t, 2), 0, 0xff)
-+#define       ISP_NVRAM_TGT_SYNC_OFFSET(c, t)         ISPBSMX(c, _IxT(t, 3), 0, 0x0f)
-+#define       ISP_NVRAM_TGT_DEVICE_ENABLE(c, t)       ISPBSMX(c, _IxT(t, 3), 4, 0x01)
-+#define       ISP_NVRAM_TGT_LUN_DISABLE(c, t)         ISPBSMX(c, _IxT(t, 3), 5, 0x01)
-+
-+/*
-+ * Qlogic 1080/1240 NVRAM is an array of 256 bytes.
-+ *
-+ * Some portion of the front of this is for general host adapter properties
-+ * This is followed by an array of per-target parameters, and is tailed off
-+ * with a checksum xor byte at offset 256. For non-byte entities data is
-+ * stored in Little Endian order.
-+ */
-+
-+#define       ISP1080_NVRAM_SIZE      256
-+
-+#define       ISP1080_NVRAM_VERSION(c)                ISP_NVRAM_VERSION(c)
-+
-+/* Offset 5 */
-+/*
-+      u_int8_t bios_configuration_mode     :2;
-+      u_int8_t bios_disable                :1;
-+      u_int8_t selectable_scsi_boot_enable :1;
-+      u_int8_t cd_rom_boot_enable          :1;
-+      u_int8_t disable_loading_risc_code   :1;
-+      u_int8_t enable_64bit_addressing     :1;
-+      u_int8_t unused_7                    :1;
-+ */
-+
-+/* Offsets 6, 7 */
-+/*
-+        u_int8_t boot_lun_number    :5;
-+        u_int8_t scsi_bus_number    :1;
-+        u_int8_t unused_6           :1;
-+        u_int8_t unused_7           :1;
-+        u_int8_t boot_target_number :4;
-+        u_int8_t unused_12          :1;
-+        u_int8_t unused_13          :1;
-+        u_int8_t unused_14          :1;
-+        u_int8_t unused_15          :1;
-+ */
-+
-+#define       ISP1080_NVRAM_HBA_ENABLE(c)                     ISPBSMX(c, 16, 3, 0x01)
-+
-+#define       ISP1080_NVRAM_BURST_ENABLE(c)                   ISPBSMX(c, 16, 1, 0x01)
-+#define       ISP1080_NVRAM_FIFO_THRESHOLD(c)                 ISPBSMX(c, 16, 4, 0x0f)
-+
-+#define       ISP1080_NVRAM_AUTO_TERM_SUPPORT(c)              ISPBSMX(c, 17, 7, 0x01)
-+#define       ISP1080_NVRAM_BUS0_TERM_MODE(c)                 ISPBSMX(c, 17, 0, 0x03)
-+#define       ISP1080_NVRAM_BUS1_TERM_MODE(c)                 ISPBSMX(c, 17, 2, 0x03)
-+
-+#define       ISP1080_ISP_PARAMETER(c)                        \
-+      (((c)[18]) | ((c)[19] << 8))
-+
-+#define       ISP1080_FAST_POST(c)                            ISPBSMX(c, 20, 0, 0x01)
-+#define       ISP1080_REPORT_LVD_TRANSITION(c)                ISPBSMX(c, 20, 1, 0x01)
-+
-+#define       ISP1080_BUS1_OFF                                112
-+
-+#define       ISP1080_NVRAM_INITIATOR_ID(c, b)                \
-+      ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 24, 0, 0x0f)
-+#define       ISP1080_NVRAM_BUS_RESET_DELAY(c, b)             \
-+      (c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 25]
-+#define       ISP1080_NVRAM_BUS_RETRY_COUNT(c, b)             \
-+      (c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 26]
-+#define       ISP1080_NVRAM_BUS_RETRY_DELAY(c, b)             \
-+      (c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 27]
-+
-+#define       ISP1080_NVRAM_ASYNC_DATA_SETUP_TIME(c, b)       \
-+      ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 28, 0, 0x0f)
-+#define       ISP1080_NVRAM_REQ_ACK_ACTIVE_NEGATION(c, b)     \
-+      ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 28, 4, 0x01)
-+#define       ISP1080_NVRAM_DATA_LINE_ACTIVE_NEGATION(c, b)   \
-+      ISPBSMX(c, ((b == 0)? 0 : ISP1080_BUS1_OFF) + 28, 5, 0x01)
-+#define       ISP1080_NVRAM_SELECTION_TIMEOUT(c, b)           \
-+      (((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 30]) | \
-+      ((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 31] << 8))
-+#define       ISP1080_NVRAM_MAX_QUEUE_DEPTH(c, b)             \
-+      (((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 32]) | \
-+      ((c)[((b == 0)? 0 : ISP1080_BUS1_OFF) + 33] << 8))
-+
-+#define       ISP1080_NVRAM_TARGOFF(b)                \
-+      ((b == 0)? 40: (40 + ISP1080_BUS1_OFF))
-+#define       ISP1080_NVRAM_TARGSIZE                  6
-+#define       _IxT8(tgt, tidx, b)                     \
-+      (ISP1080_NVRAM_TARGOFF((b)) + (ISP1080_NVRAM_TARGSIZE * (tgt)) + (tidx))
-+
-+#define       ISP1080_NVRAM_TGT_RENEG(c, t, b)                \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 0, 0x01)
-+#define       ISP1080_NVRAM_TGT_QFRZ(c, t, b)                 \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 1, 0x01)
-+#define       ISP1080_NVRAM_TGT_ARQ(c, t, b)                  \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 2, 0x01)
-+#define       ISP1080_NVRAM_TGT_TQING(c, t, b)                \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 3, 0x01)
-+#define       ISP1080_NVRAM_TGT_SYNC(c, t, b)                 \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 4, 0x01)
-+#define       ISP1080_NVRAM_TGT_WIDE(c, t, b)                 \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 5, 0x01)
-+#define       ISP1080_NVRAM_TGT_PARITY(c, t, b)               \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 6, 0x01)
-+#define       ISP1080_NVRAM_TGT_DISC(c, t, b)                 \
-+      ISPBSMX(c, _IxT8(t, 0, (b)), 7, 0x01)
-+#define       ISP1080_NVRAM_TGT_EXEC_THROTTLE(c, t, b)        \
-+      ISPBSMX(c, _IxT8(t, 1, (b)), 0, 0xff)
-+#define       ISP1080_NVRAM_TGT_SYNC_PERIOD(c, t, b)          \
-+      ISPBSMX(c, _IxT8(t, 2, (b)), 0, 0xff)
-+#define       ISP1080_NVRAM_TGT_SYNC_OFFSET(c, t, b)          \
-+      ISPBSMX(c, _IxT8(t, 3, (b)), 0, 0x0f)
-+#define       ISP1080_NVRAM_TGT_DEVICE_ENABLE(c, t, b)        \
-+      ISPBSMX(c, _IxT8(t, 3, (b)), 4, 0x01)
-+#define       ISP1080_NVRAM_TGT_LUN_DISABLE(c, t, b)          \
-+      ISPBSMX(c, _IxT8(t, 3, (b)), 5, 0x01)
-+
-+#define       ISP12160_NVRAM_HBA_ENABLE       ISP1080_NVRAM_HBA_ENABLE
-+#define       ISP12160_NVRAM_BURST_ENABLE     ISP1080_NVRAM_BURST_ENABLE
-+#define       ISP12160_NVRAM_FIFO_THRESHOLD   ISP1080_NVRAM_FIFO_THRESHOLD
-+#define       ISP12160_NVRAM_AUTO_TERM_SUPPORT        ISP1080_NVRAM_AUTO_TERM_SUPPORT
-+#define       ISP12160_NVRAM_BUS0_TERM_MODE   ISP1080_NVRAM_BUS0_TERM_MODE
-+#define       ISP12160_NVRAM_BUS1_TERM_MODE   ISP1080_NVRAM_BUS1_TERM_MODE
-+#define       ISP12160_ISP_PARAMETER          ISP12160_ISP_PARAMETER
-+#define       ISP12160_FAST_POST              ISP1080_FAST_POST
-+#define       ISP12160_REPORT_LVD_TRANSITION  ISP1080_REPORT_LVD_TRANSTION
-+
-+#define       ISP12160_NVRAM_INITIATOR_ID                     \
-+      ISP1080_NVRAM_INITIATOR_ID
-+#define       ISP12160_NVRAM_BUS_RESET_DELAY                  \
-+      ISP1080_NVRAM_BUS_RESET_DELAY
-+#define       ISP12160_NVRAM_BUS_RETRY_COUNT                  \
-+      ISP1080_NVRAM_BUS_RETRY_COUNT
-+#define       ISP12160_NVRAM_BUS_RETRY_DELAY                  \
-+      ISP1080_NVRAM_BUS_RETRY_DELAY
-+#define       ISP12160_NVRAM_ASYNC_DATA_SETUP_TIME            \
-+      ISP1080_NVRAM_ASYNC_DATA_SETUP_TIME
-+#define       ISP12160_NVRAM_REQ_ACK_ACTIVE_NEGATION          \
-+      ISP1080_NVRAM_REQ_ACK_ACTIVE_NEGATION
-+#define       ISP12160_NVRAM_DATA_LINE_ACTIVE_NEGATION        \
-+      ISP1080_NVRAM_DATA_LINE_ACTIVE_NEGATION
-+#define       ISP12160_NVRAM_SELECTION_TIMEOUT                \
-+      ISP1080_NVRAM_SELECTION_TIMEOUT
-+#define       ISP12160_NVRAM_MAX_QUEUE_DEPTH                  \
-+      ISP1080_NVRAM_MAX_QUEUE_DEPTH
-+
-+
-+#define       ISP12160_BUS0_OFF       24
-+#define       ISP12160_BUS1_OFF       136
-+
-+#define       ISP12160_NVRAM_TARGOFF(b)               \
-+      (((b == 0)? ISP12160_BUS0_OFF : ISP12160_BUS1_OFF) + 16)
-+
-+#define       ISP12160_NVRAM_TARGSIZE                 6
-+#define       _IxT16(tgt, tidx, b)                    \
-+      (ISP12160_NVRAM_TARGOFF((b))+(ISP12160_NVRAM_TARGSIZE * (tgt))+(tidx))
-+
-+#define       ISP12160_NVRAM_TGT_RENEG(c, t, b)               \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 0, 0x01)
-+#define       ISP12160_NVRAM_TGT_QFRZ(c, t, b)                \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 1, 0x01)
-+#define       ISP12160_NVRAM_TGT_ARQ(c, t, b)                 \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 2, 0x01)
-+#define       ISP12160_NVRAM_TGT_TQING(c, t, b)               \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 3, 0x01)
-+#define       ISP12160_NVRAM_TGT_SYNC(c, t, b)                \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 4, 0x01)
-+#define       ISP12160_NVRAM_TGT_WIDE(c, t, b)                \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 5, 0x01)
-+#define       ISP12160_NVRAM_TGT_PARITY(c, t, b)              \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 6, 0x01)
-+#define       ISP12160_NVRAM_TGT_DISC(c, t, b)                \
-+      ISPBSMX(c, _IxT16(t, 0, (b)), 7, 0x01)
-+
-+#define       ISP12160_NVRAM_TGT_EXEC_THROTTLE(c, t, b)       \
-+      ISPBSMX(c, _IxT16(t, 1, (b)), 0, 0xff)
-+#define       ISP12160_NVRAM_TGT_SYNC_PERIOD(c, t, b)         \
-+      ISPBSMX(c, _IxT16(t, 2, (b)), 0, 0xff)
-+
-+#define       ISP12160_NVRAM_TGT_SYNC_OFFSET(c, t, b)         \
-+      ISPBSMX(c, _IxT16(t, 3, (b)), 0, 0x1f)
-+#define       ISP12160_NVRAM_TGT_DEVICE_ENABLE(c, t, b)       \
-+      ISPBSMX(c, _IxT16(t, 3, (b)), 5, 0x01)
-+
-+#define       ISP12160_NVRAM_PPR_OPTIONS(c, t, b)             \
-+      ISPBSMX(c, _IxT16(t, 4, (b)), 0, 0x0f)
-+#define       ISP12160_NVRAM_PPR_WIDTH(c, t, b)               \
-+      ISPBSMX(c, _IxT16(t, 4, (b)), 4, 0x03)
-+#define       ISP12160_NVRAM_PPR_ENABLE(c, t, b)              \
-+      ISPBSMX(c, _IxT16(t, 4, (b)), 7, 0x01)
-+
-+/*
-+ * Qlogic 2XXX NVRAM is an array of 256 bytes.
-+ *
-+ * Some portion of the front of this is for general RISC engine parameters,
-+ * mostly reflecting the state of the last INITIALIZE FIRMWARE mailbox command.
-+ *
-+ * This is followed by some general host adapter parameters, and ends with
-+ * a checksum xor byte at offset 255. For non-byte entities data is stored
-+ * in Little Endian order.
-+ */
-+#define       ISP2100_NVRAM_SIZE      256
-+/* ISP_NVRAM_VERSION is in same overall place */
-+#define       ISP2100_NVRAM_RISCVER(c)                (c)[6]
-+#define       ISP2100_NVRAM_OPTIONS(c)                (c)[8]
-+#define       ISP2100_NVRAM_MAXFRAMELENGTH(c)         (((c)[10]) | ((c)[11] << 8))
-+#define       ISP2100_NVRAM_MAXIOCBALLOCATION(c)      (((c)[12]) | ((c)[13] << 8))
-+#define       ISP2100_NVRAM_EXECUTION_THROTTLE(c)     (((c)[14]) | ((c)[15] << 8))
-+#define       ISP2100_NVRAM_RETRY_COUNT(c)            (c)[16]
-+#define       ISP2100_NVRAM_RETRY_DELAY(c)            (c)[17]
-+
-+#define       ISP2100_NVRAM_PORT_NAME(c)      (\
-+              (((u_int64_t)(c)[18]) << 56) | \
-+              (((u_int64_t)(c)[19]) << 48) | \
-+              (((u_int64_t)(c)[20]) << 40) | \
-+              (((u_int64_t)(c)[21]) << 32) | \
-+              (((u_int64_t)(c)[22]) << 24) | \
-+              (((u_int64_t)(c)[23]) << 16) | \
-+              (((u_int64_t)(c)[24]) <<  8) | \
-+              (((u_int64_t)(c)[25]) <<  0))
-+
-+#define       ISP2100_NVRAM_HARDLOOPID(c)             (c)[26]
-+
-+#define       ISP2200_NVRAM_NODE_NAME(c)      (\
-+              (((u_int64_t)(c)[30]) << 56) | \
-+              (((u_int64_t)(c)[31]) << 48) | \
-+              (((u_int64_t)(c)[32]) << 40) | \
-+              (((u_int64_t)(c)[33]) << 32) | \
-+              (((u_int64_t)(c)[34]) << 24) | \
-+              (((u_int64_t)(c)[35]) << 16) | \
-+              (((u_int64_t)(c)[36]) <<  8) | \
-+              (((u_int64_t)(c)[37]) <<  0))
-+
-+#define       ISP2100_NVRAM_HBA_OPTIONS(c)            (c)[70]
-+#define       ISP2100_NVRAM_HBA_DISABLE(c)            ISPBSMX(c, 70, 0, 0x01)
-+#define       ISP2100_NVRAM_BIOS_DISABLE(c)           ISPBSMX(c, 70, 1, 0x01)
-+#define       ISP2100_NVRAM_LUN_DISABLE(c)            ISPBSMX(c, 70, 2, 0x01)
-+#define       ISP2100_NVRAM_ENABLE_SELECT_BOOT(c)     ISPBSMX(c, 70, 3, 0x01)
-+#define       ISP2100_NVRAM_DISABLE_CODELOAD(c)       ISPBSMX(c, 70, 4, 0x01)
-+#define       ISP2100_NVRAM_SET_CACHELINESZ(c)        ISPBSMX(c, 70, 5, 0x01)
-+
-+#define       ISP2100_NVRAM_BOOT_NODE_NAME(c) (\
-+              (((u_int64_t)(c)[72]) << 56) | \
-+              (((u_int64_t)(c)[73]) << 48) | \
-+              (((u_int64_t)(c)[74]) << 40) | \
-+              (((u_int64_t)(c)[75]) << 32) | \
-+              (((u_int64_t)(c)[76]) << 24) | \
-+              (((u_int64_t)(c)[77]) << 16) | \
-+              (((u_int64_t)(c)[78]) <<  8) | \
-+              (((u_int64_t)(c)[79]) <<  0))
-+
-+#define       ISP2100_NVRAM_BOOT_LUN(c)               (c)[80]
-+
-+#define       ISP2200_HBA_FEATURES(c)                 (c)[232] | ((c)[233] << 8)
-+
-+/*
-+ * Firmware Crash Dump
-+ *
-+ * QLogic needs specific information format when they look at firmware crashes.
-+ *
-+ * This is incredibly kernel memory consumptive (to say the least), so this
-+ * code is only compiled in when needed.
-+ */
-+
-+#define       QLA2200_RISC_IMAGE_DUMP_SIZE                                    \
-+      (1 * sizeof (u_int16_t)) +      /* 'used' flag (also HBA type) */ \
-+      (352 * sizeof (u_int16_t)) +    /* RISC registers */            \
-+      (61440 * sizeof (u_int16_t))    /* RISC SRAM (offset 0x1000..0xffff) */
-+#define       QLA2300_RISC_IMAGE_DUMP_SIZE                                    \
-+      (1 * sizeof (u_int16_t)) +      /* 'used' flag (also HBA type) */ \
-+      (464 * sizeof (u_int16_t)) +    /* RISC registers */            \
-+      (63488 * sizeof (u_int16_t)) +  /* RISC SRAM (0x0800..0xffff) */ \
-+      (4096 * sizeof (u_int16_t)) +   /* RISC SRAM (0x10000..0x10FFF) */ \
-+      (61440 * sizeof (u_int16_t))    /* RISC SRAM (0x11000..0x1FFFF) */
-+/* the larger of the two */
-+#define       ISP_CRASH_IMAGE_SIZE    QLA2300_RISC_IMAGE_DUMP_SIZE
-+#endif        /* _ISPREG_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_target.c   2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,1195 @@
-+/* @(#)isp_target.c 1.21 */
-+/*
-+ * Machine and OS Independent Target Mode Code for the Qlogic SCSI/FC adapters.
-+ *
-+ * Copyright (c) 1999, 2000, 2001 by Matthew Jacob
-+ * All rights reserved.
-+ * mjacob@feral.com
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice immediately at the beginning of the file, without modification,
-+ *    this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+/*
-+ * Bug fixes gratefully acknowledged from:
-+ *    Oded Kedem <oded@kashya.com>
-+ */
-+/*
-+ * Include header file appropriate for platform we're building on.
-+ */
-+
-+#ifdef        __NetBSD__
-+#include <dev/ic/isp_netbsd.h>
-+#endif
-+#ifdef        __FreeBSD__
-+#include <dev/isp/isp_freebsd.h>
-+#endif
-+#ifdef        __OpenBSD__
-+#include <dev/ic/isp_openbsd.h>
-+#endif
-+#ifdef        __linux__
-+#include "isp_linux.h"
-+#endif
-+
-+#ifdef        ISP_TARGET_MODE
-+static const char atiocope[] =
-+    "ATIO returned for lun %d because it was in the middle of Bus Device Reset "
-+    "on bus %d";
-+static const char atior[] =
-+    "ATIO returned on for lun %d on from IID %d because a Bus Reset occurred "
-+    "on bus %d";
-+
-+static void isp_got_msg(struct ispsoftc *, int, in_entry_t *);
-+static void isp_got_msg_fc(struct ispsoftc *, int, in_fcentry_t *);
-+static void isp_notify_ack(struct ispsoftc *, void *);
-+static void isp_handle_atio(struct ispsoftc *, at_entry_t *);
-+static void isp_handle_atio2(struct ispsoftc *, at2_entry_t *);
-+static void isp_handle_ctio(struct ispsoftc *, ct_entry_t *);
-+static void isp_handle_ctio2(struct ispsoftc *, ct2_entry_t *);
-+
-+/*
-+ * The Qlogic driver gets an interrupt to look at response queue entries.
-+ * Some of these are status completions for initiatior mode commands, but
-+ * if target mode is enabled, we get a whole wad of response queue entries
-+ * to be handled here.
-+ *
-+ * Basically the split into 3 main groups: Lun Enable/Modification responses,
-+ * SCSI Command processing, and Immediate Notification events.
-+ *
-+ * You start by writing a request queue entry to enable target mode (and
-+ * establish some resource limitations which you can modify later).
-+ * The f/w responds with a LUN ENABLE or LUN MODIFY response with
-+ * the status of this action. If the enable was successful, you can expect...
-+ *
-+ * Response queue entries with SCSI commands encapsulate show up in an ATIO
-+ * (Accept Target IO) type- sometimes with enough info to stop the command at
-+ * this level. Ultimately the driver has to feed back to the f/w's request
-+ * queue a sequence of CTIOs (continue target I/O) that describe data to
-+ * be moved and/or status to be sent) and finally finishing with sending
-+ * to the f/w's response queue an ATIO which then completes the handshake
-+ * with the f/w for that command. There's a lot of variations on this theme,
-+ * including flags you can set in the CTIO for the Qlogic 2X00 fibre channel
-+ * cards that 'auto-replenish' the f/w's ATIO count, but this is the basic
-+ * gist of it.
-+ *
-+ * The third group that can show up in the response queue are Immediate
-+ * Notification events. These include things like notifications of SCSI bus
-+ * resets, or Bus Device Reset messages or other messages received. This
-+ * a classic oddbins area. It can get  a little weird because you then turn
-+ * around and acknowledge the Immediate Notify by writing an entry onto the
-+ * request queue and then the f/w turns around and gives you an acknowledgement
-+ * to *your* acknowledgement on the response queue (the idea being to let
-+ * the f/w tell you when the event is *really* over I guess).
-+ *
-+ */
-+
-+
-+/*
-+ * A new response queue entry has arrived. The interrupt service code
-+ * has already swizzled it into the platform dependent from canonical form.
-+ *
-+ * Because of the way this driver is designed, unfortunately most of the
-+ * actual synchronization work has to be done in the platform specific
-+ * code- we have no synchroniation primitives in the common code.
-+ */
-+
-+int
-+isp_target_notify(struct ispsoftc *isp, void *vptr, u_int16_t *optrp)
-+{
-+      u_int16_t status, seqid;
-+      union {
-+              at_entry_t      *atiop;
-+              at2_entry_t     *at2iop;
-+              ct_entry_t      *ctiop;
-+              ct2_entry_t     *ct2iop;
-+              lun_entry_t     *lunenp;
-+              in_entry_t      *inotp;
-+              in_fcentry_t    *inot_fcp;
-+              na_entry_t      *nackp;
-+              na_fcentry_t    *nack_fcp;
-+              isphdr_t        *hp;
-+              void *          *vp;
-+#define       atiop           unp.atiop
-+#define       at2iop          unp.at2iop
-+#define       ctiop           unp.ctiop
-+#define       ct2iop          unp.ct2iop
-+#define       lunenp          unp.lunenp
-+#define       inotp           unp.inotp
-+#define       inot_fcp        unp.inot_fcp
-+#define       nackp           unp.nackp
-+#define       nack_fcp        unp.nack_fcp
-+#define       hdrp            unp.hp
-+      } unp;
-+      u_int8_t local[QENTRY_LEN];
-+      int bus, type, rval = 1;
-+
-+      type = isp_get_response_type(isp, (isphdr_t *)vptr);
-+      unp.vp = vptr;
-+
-+      ISP_TDQE(isp, "isp_target_notify", (int) *optrp, vptr);
-+
-+      switch(type) {
-+      case RQSTYPE_ATIO:
-+              isp_get_atio(isp, atiop, (at_entry_t *) local);
-+              isp_handle_atio(isp, (at_entry_t *) local);
-+              break;
-+      case RQSTYPE_CTIO:
-+              isp_get_ctio(isp, ctiop, (ct_entry_t *) local);
-+              isp_handle_ctio(isp, (ct_entry_t *) local);
-+              break;
-+      case RQSTYPE_ATIO2:
-+              isp_get_atio2(isp, at2iop, (at2_entry_t *) local);
-+              isp_handle_atio2(isp, (at2_entry_t *) local);
-+              break;
-+      case RQSTYPE_CTIO2:
-+              isp_get_ctio2(isp, ct2iop, (ct2_entry_t *) local);
-+              isp_handle_ctio2(isp, (ct2_entry_t *) local);
-+              break;
-+      case RQSTYPE_ENABLE_LUN:
-+      case RQSTYPE_MODIFY_LUN:
-+              isp_get_enable_lun(isp, lunenp, (lun_entry_t *) local);
-+              (void) isp_async(isp, ISPASYNC_TARGET_ACTION, local);
-+              break;
-+
-+      case RQSTYPE_NOTIFY:
-+              /*
-+               * Either the ISP received a SCSI message it can't
-+               * handle, or it's returning an Immed. Notify entry
-+               * we sent. We can send Immed. Notify entries to
-+               * increment the firmware's resource count for them
-+               * (we set this initially in the Enable Lun entry).
-+               */
-+              bus = 0;
-+              if (IS_FC(isp)) {
-+                      isp_get_notify_fc(isp, inot_fcp, (in_fcentry_t *)local);
-+                      inot_fcp = (in_fcentry_t *) local;
-+                      status = inot_fcp->in_status;
-+                      seqid = inot_fcp->in_seqid;
-+              } else {
-+                      isp_get_notify(isp, inotp, (in_entry_t *)local);
-+                      inotp = (in_entry_t *) local;
-+                      status = inotp->in_status & 0xff;
-+                      seqid = inotp->in_seqid;
-+                      if (IS_DUALBUS(isp)) {
-+                              bus = GET_BUS_VAL(inotp->in_iid);
-+                              SET_BUS_VAL(inotp->in_iid, 0);
-+                      }
-+              }
-+              isp_prt(isp, ISP_LOGTDEBUG0,
-+                  "Immediate Notify On Bus %d, status=0x%x seqid=0x%x",
-+                  bus, status, seqid);
-+
-+              /*
-+               * ACK it right away.
-+               */
-+              isp_notify_ack(isp, (status == IN_RESET)? NULL : local);
-+              switch (status) {
-+              case IN_RESET:
-+                      (void) isp_async(isp, ISPASYNC_BUS_RESET, &bus);
-+                      break;
-+              case IN_MSG_RECEIVED:
-+              case IN_IDE_RECEIVED:
-+                      if (IS_FC(isp)) {
-+                              isp_got_msg_fc(isp, bus, (in_fcentry_t *)local);
-+                      } else {
-+                              isp_got_msg(isp, bus, (in_entry_t *)local);
-+                      }
-+                      break;
-+              case IN_RSRC_UNAVAIL:
-+                      isp_prt(isp, ISP_LOGWARN, "Firmware out of ATIOs");
-+                      break;
-+              case IN_PORT_LOGOUT:
-+              case IN_ABORT_TASK:
-+              case IN_PORT_CHANGED:
-+              case IN_GLOBAL_LOGO:
-+                      (void) isp_async(isp, ISPASYNC_TARGET_ACTION, &local);
-+                      break;
-+              default:
-+                      isp_prt(isp, ISP_LOGERR,
-+                          "bad status (0x%x) in isp_target_notify", status);
-+                      break;
-+              }
-+              break;
-+
-+      case RQSTYPE_NOTIFY_ACK:
-+              /*
-+               * The ISP is acknowledging our acknowledgement of an
-+               * Immediate Notify entry for some asynchronous event.
-+               */
-+              if (IS_FC(isp)) {
-+                      isp_get_notify_ack_fc(isp, nack_fcp,
-+                          (na_fcentry_t *)local);
-+                      nack_fcp = (na_fcentry_t *)local;
-+                      isp_prt(isp, ISP_LOGTDEBUG1,
-+                          "Notify Ack status=0x%x seqid 0x%x",
-+                          nack_fcp->na_status, nack_fcp->na_seqid);
-+              } else {
-+                      isp_get_notify_ack(isp, nackp, (na_entry_t *)local);
-+                      nackp = (na_entry_t *)local;
-+                      isp_prt(isp, ISP_LOGTDEBUG1,
-+                          "Notify Ack event 0x%x status=0x%x seqid 0x%x",
-+                          nackp->na_event, nackp->na_status, nackp->na_seqid);
-+              }
-+              break;
-+      default:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Unknown entry type 0x%x in isp_target_notify", type);
-+              rval = 0;
-+              break;
-+      }
-+#undef        atiop
-+#undef        at2iop
-+#undef        ctiop
-+#undef        ct2iop
-+#undef        lunenp
-+#undef        inotp
-+#undef        inot_fcp
-+#undef        nackp
-+#undef        nack_fcp
-+#undef        hdrp
-+      return (rval);
-+}
-+
-+ 
-+/*
-+ * Toggle (on/off) target mode for bus/target/lun
-+ *
-+ * The caller has checked for overlap and legality.
-+ *
-+ * Note that not all of bus, target or lun can be paid attention to.
-+ * Note also that this action will not be complete until the f/w writes
-+ * response entry. The caller is responsible for synchronizing this.
-+ */
-+int
-+isp_lun_cmd(struct ispsoftc *isp, int cmd, int bus, int tgt, int lun,
-+    int cmd_cnt, int inot_cnt, u_int32_t opaque)
-+{
-+      lun_entry_t el;
-+      u_int16_t nxti, optr;
-+      void *outp;
-+
-+
-+      MEMZERO(&el, sizeof (el));
-+      if (IS_DUALBUS(isp)) {
-+              el.le_rsvd = (bus & 0x1) << 7;
-+      }
-+      el.le_cmd_count = cmd_cnt;
-+      el.le_in_count = inot_cnt;
-+      if (cmd == RQSTYPE_ENABLE_LUN) {
-+              if (IS_SCSI(isp)) {
-+                      el.le_flags = LUN_TQAE|LUN_DISAD;
-+                      el.le_cdb6len = 12;
-+                      el.le_cdb7len = 12;
-+              }
-+      } else if (cmd == -RQSTYPE_ENABLE_LUN) {
-+              cmd = RQSTYPE_ENABLE_LUN;
-+              el.le_cmd_count = 0;
-+              el.le_in_count = 0;
-+      } else if (cmd == -RQSTYPE_MODIFY_LUN) {
-+              cmd = RQSTYPE_MODIFY_LUN;
-+              el.le_ops = LUN_CCDECR | LUN_INDECR;
-+      } else {
-+              el.le_ops = LUN_CCINCR | LUN_ININCR;
-+      }
-+      el.le_header.rqs_entry_type = cmd;
-+      el.le_header.rqs_entry_count = 1;
-+      el.le_reserved = opaque;
-+      if (IS_SCSI(isp)) {
-+              el.le_tgt = tgt;
-+              el.le_lun = lun;
-+      } else if ((FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) == 0) {
-+              el.le_lun = lun;
-+      }
-+      el.le_timeout = 2;
-+
-+      if (isp_getrqentry(isp, &nxti, &optr, &outp)) {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Request Queue Overflow in isp_lun_cmd");
-+              return (-1);
-+      }
-+      ISP_TDQE(isp, "isp_lun_cmd", (int) optr, &el);
-+      isp_put_enable_lun(isp, &el, outp);
-+      ISP_ADD_REQUEST(isp, nxti);
-+      return (0);
-+}
-+
-+
-+int
-+isp_target_put_entry(struct ispsoftc *isp, void *ap)
-+{
-+      void *outp;
-+      u_int16_t nxti, optr;
-+      u_int8_t etype = ((isphdr_t *) ap)->rqs_entry_type;
-+
-+      if (isp_getrqentry(isp, &nxti, &optr, &outp)) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "Request Queue Overflow in isp_target_put_entry");
-+              return (-1);
-+      }
-+      switch (etype) {
-+      case RQSTYPE_ATIO:
-+              isp_put_atio(isp, (at_entry_t *) ap, (at_entry_t *) outp);
-+              break;
-+      case RQSTYPE_ATIO2:
-+              isp_put_atio2(isp, (at2_entry_t *) ap, (at2_entry_t *) outp);
-+              break;
-+      case RQSTYPE_CTIO:
-+              isp_put_ctio(isp, (ct_entry_t *) ap, (ct_entry_t *) outp);
-+              break;
-+      case RQSTYPE_CTIO2:
-+              isp_put_ctio2(isp, (ct2_entry_t *) ap, (ct2_entry_t *) outp);
-+              break;
-+      default:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Unknown type 0x%x in isp_put_entry", etype);
-+              return (-1);
-+      }
-+
-+      ISP_TDQE(isp, "isp_target_put_entry", (int) optr, ap);
-+      ISP_ADD_REQUEST(isp, nxti);
-+      return (0);
-+}
-+
-+int
-+isp_target_put_atio(struct ispsoftc *isp, void *arg)
-+{
-+      union {
-+              at_entry_t _atio;
-+              at2_entry_t _atio2;
-+      } atun;
-+
-+      MEMZERO(&atun, sizeof atun);
-+      if (IS_FC(isp)) {
-+              at2_entry_t *aep = arg;
-+              atun._atio2.at_header.rqs_entry_type = RQSTYPE_ATIO2;
-+              atun._atio2.at_header.rqs_entry_count = 1;
-+              if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+                      atun._atio2.at_scclun = (u_int16_t) aep->at_scclun;
-+              } else {
-+                      atun._atio2.at_lun = (u_int8_t) aep->at_lun;
-+              }
-+              atun._atio2.at_iid = aep->at_iid;
-+              atun._atio2.at_rxid = aep->at_rxid;
-+              atun._atio2.at_status = CT_OK;
-+      } else {
-+              at_entry_t *aep = arg;
-+              atun._atio.at_header.rqs_entry_type = RQSTYPE_ATIO;
-+              atun._atio.at_header.rqs_entry_count = 1;
-+              atun._atio.at_handle = aep->at_handle;
-+              atun._atio.at_iid = aep->at_iid;
-+              atun._atio.at_tgt = aep->at_tgt;
-+              atun._atio.at_lun = aep->at_lun;
-+              atun._atio.at_tag_type = aep->at_tag_type;
-+              atun._atio.at_tag_val = aep->at_tag_val;
-+              atun._atio.at_status = (aep->at_flags & AT_TQAE);
-+              atun._atio.at_status |= CT_OK;
-+      }
-+      return (isp_target_put_entry(isp, &atun));
-+}
-+
-+/*
-+ * Command completion- both for handling cases of no resources or
-+ * no blackhole driver, or other cases where we have to, inline,
-+ * finish the command sanely, or for normal command completion.
-+ *
-+ * The 'completion' code value has the scsi status byte in the low 8 bits.
-+ * If status is a CHECK CONDITION and bit 8 is nonzero, then bits 12..15 have
-+ * the sense key and  bits 16..23 have the ASCQ and bits 24..31 have the ASC
-+ * values.
-+ *
-+ * NB: the key, asc, ascq, cannot be used for parallel SCSI as it doesn't
-+ * NB: inline SCSI sense reporting. As such, we lose this information. XXX.
-+ *
-+ * For both parallel && fibre channel, we use the feature that does
-+ * an automatic resource autoreplenish so we don't have then later do
-+ * put of an atio to replenish the f/w's resource count.
-+ */
-+
-+int
-+isp_endcmd(struct ispsoftc *isp, void *arg, u_int32_t code, u_int16_t hdl)
-+{
-+      int sts;
-+      union {
-+              ct_entry_t _ctio;
-+              ct2_entry_t _ctio2;
-+      } un;
-+
-+      MEMZERO(&un, sizeof un);
-+      sts = code & 0xff;
-+
-+      if (IS_FC(isp)) {
-+              at2_entry_t *aep = arg;
-+              ct2_entry_t *cto = &un._ctio2;
-+
-+              cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2;
-+              cto->ct_header.rqs_entry_count = 1;
-+              cto->ct_iid = aep->at_iid;
-+              if ((FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) == 0) {
-+                      cto->ct_lun = aep->at_lun;
-+              }
-+              cto->ct_rxid = aep->at_rxid;
-+              cto->rsp.m1.ct_scsi_status = sts & 0xff;
-+              cto->ct_flags = CT2_SENDSTATUS | CT2_NO_DATA | CT2_FLAG_MODE1;
-+              if (hdl == 0) {
-+                      cto->ct_flags |= CT2_CCINCR;
-+              }
-+              if (aep->at_datalen) {
-+                      cto->ct_resid = aep->at_datalen;
-+                      cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER;
-+              }
-+              if ((sts & 0xff) == SCSI_CHECK && (sts & ECMD_SVALID)) {
-+                      cto->rsp.m1.ct_resp[0] = 0xf0;
-+                      cto->rsp.m1.ct_resp[2] = (code >> 12) & 0xf;
-+                      cto->rsp.m1.ct_resp[7] = 8;
-+                      cto->rsp.m1.ct_resp[12] = (code >> 24) & 0xff;
-+                      cto->rsp.m1.ct_resp[13] = (code >> 16) & 0xff;
-+                      cto->rsp.m1.ct_senselen = 16;
-+                      cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
-+              }
-+              cto->ct_syshandle = hdl;
-+      } else {
-+              at_entry_t *aep = arg;
-+              ct_entry_t *cto = &un._ctio;
-+
-+              cto->ct_header.rqs_entry_type = RQSTYPE_CTIO;
-+              cto->ct_header.rqs_entry_count = 1;
-+              cto->ct_fwhandle = aep->at_handle;
-+              cto->ct_iid = aep->at_iid;
-+              cto->ct_tgt = aep->at_tgt;
-+              cto->ct_lun = aep->at_lun;
-+              cto->ct_tag_type = aep->at_tag_type;
-+              cto->ct_tag_val = aep->at_tag_val;
-+              if (aep->at_flags & AT_TQAE) {
-+                      cto->ct_flags |= CT_TQAE;
-+              }
-+              cto->ct_flags = CT_SENDSTATUS | CT_NO_DATA;
-+              if (hdl == 0) {
-+                      cto->ct_flags |= CT_CCINCR;
-+              }
-+              cto->ct_scsi_status = sts;
-+              cto->ct_syshandle = hdl;
-+      }
-+      return (isp_target_put_entry(isp, &un));
-+}
-+
-+int
-+isp_target_async(struct ispsoftc *isp, int bus, int event)
-+{
-+      tmd_event_t evt;
-+      tmd_msg_t msg;
-+
-+      switch (event) {
-+      /*
-+       * These three we handle here to propagate an effective bus reset
-+       * upstream, but these do not require any immediate notify actions
-+       * so we return when done.
-+       */
-+      case ASYNC_LIP_F8:
-+      case ASYNC_LIP_OCCURRED:
-+      case ASYNC_LOOP_UP:
-+      case ASYNC_LOOP_DOWN:
-+      case ASYNC_LOOP_RESET:
-+      case ASYNC_PTPMODE:
-+              /*
-+               * These don't require any immediate notify actions. We used
-+               * treat them like SCSI Bus Resets, but that was just plain
-+               * wrong. Let the normal CTIO completion report what occurred.
-+               */
-+                return (0);
-+
-+      case ASYNC_BUS_RESET:
-+      case ASYNC_TIMEOUT_RESET:
-+              if (IS_FC(isp)) {
-+                      return (0); /* we'll be getting an inotify instead */
-+              }
-+              evt.ev_bus = bus;
-+              evt.ev_event = event;
-+              (void) isp_async(isp, ISPASYNC_TARGET_EVENT, &evt);
-+              break;
-+      case ASYNC_DEVICE_RESET:
-+              /*
-+               * Bus Device Reset resets a specific target, so
-+               * we pass this as a synthesized message.
-+               */
-+              MEMZERO(&msg, sizeof msg);
-+              if (IS_FC(isp)) {
-+                      msg.nt_iid = FCPARAM(isp)->isp_loopid;
-+              } else {
-+                      msg.nt_iid = SDPARAM(isp)->isp_initiator_id;
-+              }
-+              msg.nt_bus = bus;
-+              msg.nt_msg[0] = MSG_BUS_DEV_RESET;
-+              (void) isp_async(isp, ISPASYNC_TARGET_MESSAGE, &msg);
-+              break;
-+      case ASYNC_CTIO_DONE:
-+              evt.ev_bus = bus;
-+              evt.ev_event = event;
-+              (void) isp_async(isp, ISPASYNC_TARGET_EVENT, &evt);
-+              return (0);
-+      default:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "isp_target_async: unknown event 0x%x", event);
-+              break;
-+      }
-+      if (isp->isp_state == ISP_RUNSTATE)
-+              isp_notify_ack(isp, NULL);
-+      return(0);
-+}
-+
-+
-+/*
-+ * Process a received message.
-+ * The ISP firmware can handle most messages, there are only
-+ * a few that we need to deal with:
-+ * - abort: clean up the current command
-+ * - abort tag and clear queue
-+ */
-+
-+static void
-+isp_got_msg(struct ispsoftc *isp, int bus, in_entry_t *inp)
-+{
-+      u_int8_t status = inp->in_status & ~QLTM_SVALID;
-+
-+      if (status == IN_IDE_RECEIVED || status == IN_MSG_RECEIVED) {
-+              tmd_msg_t msg;
-+
-+              MEMZERO(&msg, sizeof (msg));
-+              msg.nt_bus = bus;
-+              msg.nt_iid = inp->in_iid;
-+              msg.nt_tgt = inp->in_tgt;
-+              msg.nt_lun = inp->in_lun;
-+              msg.nt_tagtype = inp->in_tag_type;
-+              msg.nt_tagval = inp->in_tag_val;
-+              MEMCPY(msg.nt_msg, inp->in_msg, IN_MSGLEN);
-+              (void) isp_async(isp, ISPASYNC_TARGET_MESSAGE, &msg);
-+      } else {
-+              isp_prt(isp, ISP_LOGERR,
-+                  "unknown immediate notify status 0x%x", inp->in_status);
-+      }
-+}
-+
-+/*
-+ * Synthesize a message from the task management flags in a FCP_CMND_IU.
-+ */
-+static void
-+isp_got_msg_fc(struct ispsoftc *isp, int bus, in_fcentry_t *inp)
-+{
-+      int lun;
-+      static const char f1[] = "%s from iid %d lun %d seq 0x%x";
-+      static const char f2[] = 
-+          "unknown %s 0x%x lun %d iid %d task flags 0x%x seq 0x%x\n";
-+
-+      if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+              lun = inp->in_scclun;
-+      } else {
-+              lun = inp->in_lun;
-+      }
-+
-+      if (inp->in_status != IN_MSG_RECEIVED) {
-+              isp_prt(isp, ISP_LOGINFO, f2, "immediate notify status",
-+                  inp->in_status, lun, inp->in_iid,
-+                  inp->in_task_flags,  inp->in_seqid);
-+      } else {
-+              tmd_msg_t msg;
-+
-+              MEMZERO(&msg, sizeof (msg));
-+              msg.nt_bus = bus;
-+              msg.nt_iid = inp->in_iid;
-+              msg.nt_tagval = inp->in_seqid;
-+              msg.nt_lun = lun;
-+
-+              if (inp->in_task_flags & TASK_FLAGS_ABORT_TASK) {
-+                      isp_prt(isp, ISP_LOGINFO, f1, "ABORT TASK",
-+                          inp->in_iid, lun, inp->in_seqid);
-+                      msg.nt_msg[0] = MSG_ABORT_TAG;
-+              } else if (inp->in_task_flags & TASK_FLAGS_CLEAR_TASK_SET) {
-+                      isp_prt(isp, ISP_LOGINFO, f1, "CLEAR TASK SET",
-+                          inp->in_iid, lun, inp->in_seqid);
-+                      msg.nt_msg[0] = MSG_CLEAR_QUEUE;
-+              } else if (inp->in_task_flags & TASK_FLAGS_TARGET_RESET) {
-+                      isp_prt(isp, ISP_LOGINFO, f1, "TARGET RESET",
-+                          inp->in_iid, lun, inp->in_seqid);
-+                      msg.nt_msg[0] = MSG_BUS_DEV_RESET;
-+              } else if (inp->in_task_flags & TASK_FLAGS_CLEAR_ACA) {
-+                      isp_prt(isp, ISP_LOGINFO, f1, "CLEAR ACA",
-+                          inp->in_iid, lun, inp->in_seqid);
-+                      /* ???? */
-+                      msg.nt_msg[0] = MSG_REL_RECOVERY;
-+              } else if (inp->in_task_flags & TASK_FLAGS_TERMINATE_TASK) {
-+                      isp_prt(isp, ISP_LOGINFO, f1, "TERMINATE TASK",
-+                          inp->in_iid, lun, inp->in_seqid);
-+                      msg.nt_msg[0] = MSG_TERM_IO_PROC;
-+              } else {
-+                      isp_prt(isp, ISP_LOGWARN, f2, "task flag",
-+                          inp->in_status, lun, inp->in_iid,
-+                          inp->in_task_flags,  inp->in_seqid);
-+              }
-+              if (msg.nt_msg[0]) {
-+                      (void) isp_async(isp, ISPASYNC_TARGET_MESSAGE, &msg);
-+              }
-+      }
-+}
-+
-+static void
-+isp_notify_ack(struct ispsoftc *isp, void *arg)
-+{
-+      char storage[QENTRY_LEN];
-+      u_int16_t nxti, optr;
-+      void *outp;
-+
-+      if (isp_getrqentry(isp, &nxti, &optr, &outp)) {
-+              isp_prt(isp, ISP_LOGWARN,
-+                  "Request Queue Overflow For isp_notify_ack");
-+              return;
-+      }
-+
-+      MEMZERO(storage, QENTRY_LEN);
-+
-+      if (IS_FC(isp)) {
-+              na_fcentry_t *na = (na_fcentry_t *) storage;
-+              if (arg) {
-+                      in_fcentry_t *inp = arg;
-+                      MEMCPY(storage, arg, sizeof (isphdr_t));
-+                      na->na_iid = inp->in_iid;
-+                      if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+                              na->na_lun = inp->in_scclun;
-+                      } else {
-+                              na->na_lun = inp->in_lun;
-+                      }
-+                      na->na_task_flags = inp->in_task_flags;
-+                      na->na_seqid = inp->in_seqid;
-+                      na->na_flags = NAFC_RCOUNT;
-+                      na->na_status = inp->in_status;
-+                      if (inp->in_status == IN_RESET) {
-+                              na->na_flags |= NAFC_RST_CLRD;
-+                      }
-+              } else {
-+                      na->na_flags = NAFC_RST_CLRD;
-+              }
-+              na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
-+              na->na_header.rqs_entry_count = 1;
-+              isp_put_notify_ack_fc(isp, na, (na_fcentry_t *)outp);
-+      } else {
-+              na_entry_t *na = (na_entry_t *) storage;
-+              if (arg) {
-+                      in_entry_t *inp = arg;
-+                      MEMCPY(storage, arg, sizeof (isphdr_t));
-+                      na->na_iid = inp->in_iid;
-+                      na->na_lun = inp->in_lun;
-+                      na->na_tgt = inp->in_tgt;
-+                      na->na_seqid = inp->in_seqid;
-+                      if (inp->in_status == IN_RESET) {
-+                              na->na_event = NA_RST_CLRD;
-+                      }
-+              } else {
-+                      na->na_event = NA_RST_CLRD;
-+              }
-+              na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
-+              na->na_header.rqs_entry_count = 1;
-+              isp_put_notify_ack(isp, na, (na_entry_t *)outp);
-+      }
-+      ISP_TDQE(isp, "isp_notify_ack", (int) optr, storage);
-+      ISP_ADD_REQUEST(isp, nxti);
-+}
-+
-+static void
-+isp_handle_atio(struct ispsoftc *isp, at_entry_t *aep)
-+{
-+      int lun;
-+      lun = aep->at_lun;
-+      /*
-+       * The firmware status (except for the QLTM_SVALID bit) indicates
-+       * why this ATIO was sent to us.
-+       *
-+       * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+       *
-+       * If the DISCONNECTS DISABLED bit is set in the flags field,
-+       * we're still connected on the SCSI bus - i.e. the initiator
-+       * did not set DiscPriv in the identify message. We don't care
-+       * about this so it's ignored.
-+       */
-+
-+      switch(aep->at_status & ~QLTM_SVALID) {
-+      case AT_PATH_INVALID:
-+              /*
-+               * ATIO rejected by the firmware due to disabled lun.
-+               */
-+              isp_prt(isp, ISP_LOGERR,
-+                  "rejected ATIO for disabled lun %d", lun);
-+              break;
-+      case AT_NOCAP:
-+              /*
-+               * Requested Capability not available
-+               * We sent an ATIO that overflowed the firmware's
-+               * command resource count.
-+               */
-+              isp_prt(isp, ISP_LOGERR,
-+                  "rejected ATIO for lun %d because of command count"
-+                  " overflow", lun);
-+              break;
-+
-+      case AT_BDR_MSG:
-+              /*
-+               * If we send an ATIO to the firmware to increment
-+               * its command resource count, and the firmware is
-+               * recovering from a Bus Device Reset, it returns
-+               * the ATIO with this status. We set the command
-+               * resource count in the Enable Lun entry and do
-+               * not increment it. Therefore we should never get
-+               * this status here.
-+               */
-+              isp_prt(isp, ISP_LOGERR, atiocope, lun,
-+                  GET_BUS_VAL(aep->at_iid));
-+              break;
-+
-+      case AT_CDB:            /* Got a CDB */
-+      case AT_PHASE_ERROR:    /* Bus Phase Sequence Error */
-+              /*
-+               * Punt to platform specific layer.
-+               */
-+              (void) isp_async(isp, ISPASYNC_TARGET_ACTION, aep);
-+              break;
-+
-+      case AT_RESET:
-+              /*
-+               * A bus reset came along and blew away this command. Why
-+               * they do this in addition the async event code stuff,
-+               * I dunno.
-+               *
-+               * Ignore it because the async event will clear things
-+               * up for us.
-+               */
-+              isp_prt(isp, ISP_LOGWARN, atior, lun,
-+                  GET_IID_VAL(aep->at_iid), GET_BUS_VAL(aep->at_iid));
-+              break;
-+
-+
-+      default:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Unknown ATIO status 0x%x from initiator %d for lun %d",
-+                  aep->at_status, aep->at_iid, lun);
-+              (void) isp_target_put_atio(isp, aep);
-+              break;
-+      }
-+}
-+
-+static void
-+isp_handle_atio2(struct ispsoftc *isp, at2_entry_t *aep)
-+{
-+      int lun;
-+
-+      if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
-+              lun = aep->at_scclun;
-+      } else {
-+              lun = aep->at_lun;
-+      }
-+
-+      /*
-+       * The firmware status (except for the QLTM_SVALID bit) indicates
-+       * why this ATIO was sent to us.
-+       *
-+       * If QLTM_SVALID is set, the firware has recommended Sense Data.
-+       *
-+       * If the DISCONNECTS DISABLED bit is set in the flags field,
-+       * we're still connected on the SCSI bus - i.e. the initiator
-+       * did not set DiscPriv in the identify message. We don't care
-+       * about this so it's ignored.
-+       */
-+
-+      switch(aep->at_status & ~QLTM_SVALID) {
-+      case AT_PATH_INVALID:
-+              /*
-+               * ATIO rejected by the firmware due to disabled lun.
-+               */
-+              isp_prt(isp, ISP_LOGERR,
-+                  "rejected ATIO2 for disabled lun %d", lun);
-+              break;
-+      case AT_NOCAP:
-+              /*
-+               * Requested Capability not available
-+               * We sent an ATIO that overflowed the firmware's
-+               * command resource count.
-+               */
-+              isp_prt(isp, ISP_LOGERR,
-+                  "rejected ATIO2 for lun %d- command count overflow", lun);
-+              break;
-+
-+      case AT_BDR_MSG:
-+              /*
-+               * If we send an ATIO to the firmware to increment
-+               * its command resource count, and the firmware is
-+               * recovering from a Bus Device Reset, it returns
-+               * the ATIO with this status. We set the command
-+               * resource count in the Enable Lun entry and no
-+               * not increment it. Therefore we should never get
-+               * this status here.
-+               */
-+              isp_prt(isp, ISP_LOGERR, atiocope, lun, 0);
-+              break;
-+
-+      case AT_CDB:            /* Got a CDB */
-+              /*
-+               * Punt to platform specific layer.
-+               */
-+              (void) isp_async(isp, ISPASYNC_TARGET_ACTION, aep);
-+              break;
-+
-+      case AT_RESET:
-+              /*
-+               * A bus reset came along an blew away this command. Why
-+               * they do this in addition the async event code stuff,
-+               * I dunno.
-+               *
-+               * Ignore it because the async event will clear things
-+               * up for us.
-+               */
-+              isp_prt(isp, ISP_LOGERR, atior, lun, aep->at_iid, 0);
-+              break;
-+
-+
-+      default:
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Unknown ATIO2 status 0x%x from initiator %d for lun %d",
-+                  aep->at_status, aep->at_iid, lun);
-+              (void) isp_target_put_atio(isp, aep);
-+              break;
-+      }
-+}
-+
-+static void
-+isp_handle_ctio(struct ispsoftc *isp, ct_entry_t *ct)
-+{
-+      void *xs;
-+      int pl = ISP_LOGTDEBUG2;
-+      char *fmsg = NULL;
-+
-+      if (ct->ct_syshandle) {
-+              xs = isp_find_xs(isp, ct->ct_syshandle);
-+              if (xs == NULL)
-+                      pl = ISP_LOGALL;
-+      } else {
-+              xs = NULL;
-+      }
-+
-+      switch(ct->ct_status & ~QLTM_SVALID) {
-+      case CT_OK:
-+              /*
-+               * There are generally 3 possibilities as to why we'd get
-+               * this condition:
-+               *      We disconnected after receiving a CDB.
-+               *      We sent or received data.
-+               *      We sent status & command complete.
-+               */
-+
-+              if (ct->ct_flags & CT_SENDSTATUS) {
-+                      break;
-+              } else if ((ct->ct_flags & CT_DATAMASK) == CT_NO_DATA) {
-+                      /*
-+                       * Nothing to do in this case.
-+                       */
-+                      isp_prt(isp, pl, "CTIO- iid %d disconnected OK",
-+                          ct->ct_iid);
-+                      return;
-+              }
-+              break;
-+
-+      case CT_BDR_MSG:
-+              /*
-+               * Bus Device Reset message received or the SCSI Bus has
-+               * been Reset; the firmware has gone to Bus Free.
-+               *
-+               * The firmware generates an async mailbox interupt to
-+               * notify us of this and returns outstanding CTIOs with this
-+               * status. These CTIOs are handled in that same way as
-+               * CT_ABORTED ones, so just fall through here.
-+               */
-+              fmsg = "Bus Device Reset";
-+              /*FALLTHROUGH*/
-+      case CT_RESET:
-+              if (fmsg == NULL)
-+                      fmsg = "Bus Reset";
-+              /*FALLTHROUGH*/
-+      case CT_ABORTED:
-+              /*
-+               * When an Abort message is received the firmware goes to
-+               * Bus Free and returns all outstanding CTIOs with the status
-+               * set, then sends us an Immediate Notify entry.
-+               */
-+              if (fmsg == NULL)
-+                      fmsg = "ABORT TAG message sent by Initiator";
-+
-+              isp_prt(isp, ISP_LOGWARN, "CTIO destroyed by %s", fmsg);
-+              break;
-+
-+      case CT_INVAL:
-+              /*
-+               * CTIO rejected by the firmware due to disabled lun.
-+               * "Cannot Happen".
-+               */
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Firmware rejected CTIO for disabled lun %d",
-+                  ct->ct_lun);
-+              break;
-+
-+      case CT_NOPATH:
-+              /*
-+               * CTIO rejected by the firmware due "no path for the
-+               * nondisconnecting nexus specified". This means that
-+               * we tried to access the bus while a non-disconnecting
-+               * command is in process.
-+               */
-+              isp_prt(isp, ISP_LOGERR,
-+                  "Firmware rejected CTIO for bad nexus %d/%d/%d",
-+                  ct->ct_iid, ct->ct_tgt, ct->ct_lun);
-+              break;
-+
-+      case CT_RSELTMO:
-+              fmsg = "Reselection";
-+              /*FALLTHROUGH*/
-+      case CT_TIMEOUT:
-+              if (fmsg == NULL)
-+                      fmsg = "Command";
-+              isp_prt(isp, ISP_LOGERR, "Firmware timed out on %s", fmsg);
-+              break;
-+
-+      case    CT_PANIC:
-+              if (fmsg == NULL)
-+                      fmsg = "Unrecoverable Error";
-+              /*FALLTHROUGH*/
-+      case CT_ERR:
-+              if (fmsg == NULL)
-+                      fmsg = "Completed with Error";
-+              /*FALLTHROUGH*/
-+      case CT_PHASE_ERROR:
-+              if (fmsg == NULL)
-+                      fmsg = "Phase Sequence Error";
-+              /*FALLTHROUGH*/
-+      case CT_TERMINATED:
-+              if (fmsg == NULL)
-+                      fmsg = "terminated by TERMINATE TRANSFER";
-+              /*FALLTHROUGH*/
-+      case CT_NOACK:
-+              if (fmsg == NULL)
-+                      fmsg = "unacknowledged Immediate Notify pending";
-+              isp_prt(isp, ISP_LOGERR, "CTIO returned by f/w- %s", fmsg);
-+              break;
-+      default:
-+              isp_prt(isp, ISP_LOGERR, "Unknown CTIO status 0x%x",
-+                  ct->ct_status & ~QLTM_SVALID);
-+              break;
-+      }
-+
-+      if (xs == NULL) {
-+              /*
-+               * There may be more than one CTIO for a data transfer,
-+               * or this may be a status CTIO we're not monitoring.
-+               *
-+               * The assumption is that they'll all be returned in the
-+               * order we got them.
-+               */
-+              if (ct->ct_syshandle == 0) {
-+                      if ((ct->ct_flags & CT_SENDSTATUS) == 0) {
-+                              isp_prt(isp, pl,
-+                                  "intermediate CTIO completed ok");
-+                      } else {
-+                              isp_prt(isp, pl,
-+                                  "unmonitored CTIO completed ok");
-+                      }
-+              } else {
-+                      isp_prt(isp, pl,
-+                          "NO xs for CTIO (handle 0x%x) status 0x%x",
-+                          ct->ct_syshandle, ct->ct_status & ~QLTM_SVALID);
-+              }
-+      } else {
-+              /*
-+               * Final CTIO completed. Release DMA resources and
-+               * notify platform dependent layers.
-+               */
-+              if ((ct->ct_flags & CT_DATAMASK) != CT_NO_DATA) {
-+                      ISP_DMAFREE(isp, xs, ct->ct_syshandle);
-+              }
-+              isp_prt(isp, pl, "final CTIO complete");
-+              /*
-+               * The platform layer will destroy the handle if appropriate.
-+               */
-+              (void) isp_async(isp, ISPASYNC_TARGET_ACTION, ct);
-+      }
-+}
-+
-+static void
-+isp_handle_ctio2(struct ispsoftc *isp, ct2_entry_t *ct)
-+{
-+      XS_T *xs;
-+      int pl = ISP_LOGTDEBUG2;
-+      char *fmsg = NULL;
-+
-+      if (ct->ct_syshandle) {
-+              xs = isp_find_xs(isp, ct->ct_syshandle);
-+              if (xs == NULL)
-+                      pl = ISP_LOGALL;
-+      } else {
-+              xs = NULL;
-+      }
-+
-+      switch(ct->ct_status & ~QLTM_SVALID) {
-+      case CT_BUS_ERROR:
-+              isp_prt(isp, ISP_LOGERR, "PCI DMA Bus Error");
-+              /* FALL Through */
-+      case CT_DATA_OVER:
-+      case CT_DATA_UNDER:
-+      case CT_OK:
-+              /*
-+               * There are generally 2 possibilities as to why we'd get
-+               * this condition:
-+               *      We sent or received data.
-+               *      We sent status & command complete.
-+               */
-+
-+              break;
-+
-+      case CT_BDR_MSG:
-+              /*
-+               * Target Reset function received.
-+               *
-+               * The firmware generates an async mailbox interupt to
-+               * notify us of this and returns outstanding CTIOs with this
-+               * status. These CTIOs are handled in that same way as
-+               * CT_ABORTED ones, so just fall through here.
-+               */
-+              fmsg = "TARGET RESET Task Management Function Received";
-+              /*FALLTHROUGH*/
-+      case CT_RESET:
-+              if (fmsg == NULL)
-+                      fmsg = "LIP Reset";
-+              /*FALLTHROUGH*/
-+      case CT_ABORTED:
-+              /*
-+               * When an Abort message is received the firmware goes to
-+               * Bus Free and returns all outstanding CTIOs with the status
-+               * set, then sends us an Immediate Notify entry.
-+               */
-+              if (fmsg == NULL)
-+                      fmsg = "ABORT Task Management Function Received";
-+
-+              isp_prt(isp, ISP_LOGERR, "CTIO2 destroyed by %s", fmsg);
-+              break;
-+
-+      case CT_INVAL:
-+              /*
-+               * CTIO rejected by the firmware - invalid data direction.
-+               */
-+              isp_prt(isp, ISP_LOGERR, "CTIO2 had wrong data directiond");
-+              break;
-+
-+      case CT_RSELTMO:
-+              fmsg = "failure to reconnect to initiator";
-+              /*FALLTHROUGH*/
-+      case CT_TIMEOUT:
-+              if (fmsg == NULL)
-+                      fmsg = "command";
-+              isp_prt(isp, ISP_LOGERR, "Firmware timed out on %s", fmsg);
-+              break;
-+
-+      case CT_ERR:
-+              fmsg = "Completed with Error";
-+              /*FALLTHROUGH*/
-+      case CT_LOGOUT:
-+              if (fmsg == NULL)
-+                      fmsg = "Port Logout";
-+              /*FALLTHROUGH*/
-+      case CT_PORTNOTAVAIL:
-+              if (fmsg == NULL)
-+                      fmsg = "Port not available";
-+              /*FALLTHROUGH*/
-+      case CT_PORTCHANGED:
-+              if (fmsg == NULL)
-+                      fmsg = "Port Changed";
-+              /*FALLTHROUGH*/
-+      case CT_NOACK:
-+              if (fmsg == NULL)
-+                      fmsg = "unacknowledged Immediate Notify pending";
-+              isp_prt(isp, ISP_LOGERR, "CTIO returned by f/w- %s", fmsg);
-+              break;
-+
-+      case CT_INVRXID:
-+              /*
-+               * CTIO rejected by the firmware because an invalid RX_ID.
-+               * Just print a message.
-+               */
-+              isp_prt(isp, ISP_LOGERR,
-+                  "CTIO2 completed with Invalid RX_ID 0x%x", ct->ct_rxid);
-+              break;
-+
-+      default:
-+              isp_prt(isp, ISP_LOGERR, "Unknown CTIO2 status 0x%x",
-+                  ct->ct_status & ~QLTM_SVALID);
-+              break;
-+      }
-+
-+      if (xs == NULL) {
-+              /*
-+               * There may be more than one CTIO for a data transfer,
-+               * or this may be a status CTIO we're not monitoring.
-+               *
-+               * The assumption is that they'll all be returned in the
-+               * order we got them.
-+               */
-+              if (ct->ct_syshandle == 0) {
-+                      if ((ct->ct_flags & CT_SENDSTATUS) == 0) {
-+                              isp_prt(isp, pl,
-+                                  "intermediate CTIO completed ok");
-+                      } else {
-+                              isp_prt(isp, pl,
-+                                  "unmonitored CTIO completed ok");
-+                      }
-+              } else {
-+                      isp_prt(isp, pl,
-+                          "NO xs for CTIO (handle 0x%x) status 0x%x",
-+                          ct->ct_syshandle, ct->ct_status & ~QLTM_SVALID);
-+              }
-+      } else {
-+              if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) {
-+                      ISP_DMAFREE(isp, xs, ct->ct_syshandle);
-+              }
-+              if (ct->ct_flags & CT_SENDSTATUS) {
-+                      /*
-+                       * Sent status and command complete.
-+                       *
-+                       * We're now really done with this command, so we
-+                       * punt to the platform dependent layers because
-+                       * only there can we do the appropriate command
-+                       * complete thread synchronization.
-+                       */
-+                      isp_prt(isp, pl, "status CTIO complete");
-+              } else {
-+                      /*
-+                       * Final CTIO completed. Release DMA resources and
-+                       * notify platform dependent layers.
-+                       */
-+                      isp_prt(isp, pl, "data CTIO complete");
-+              }
-+              (void) isp_async(isp, ISPASYNC_TARGET_ACTION, ct);
-+              /*
-+               * The platform layer will destroy the handle if appropriate.
-+               */
-+      }
-+}
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_target.h   2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,562 @@
-+/* @(#)isp_target.h 1.18 */
-+/*
-+ * Qlogic Target Mode Structure and Flag Definitions
-+ *
-+ * Copyright (c) 1997, 1998
-+ * Patrick Stirling
-+ * pms@psconsult.com
-+ * All rights reserved.
-+ *
-+ * Additional Copyright (c) 1999, 2000, 2001
-+ * Matthew Jacob
-+ * mjacob@feral.com
-+ * All rights reserved.
-+ *
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice immediately at the beginning of the file, without modification,
-+ *    this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+#ifndef       _ISP_TARGET_H
-+#define       _ISP_TARGET_H
-+
-+/*
-+ * Defines for all entry types
-+ */
-+#define QLTM_SVALID   0x80
-+#define       QLTM_SENSELEN   18
-+
-+/*
-+ * Structure for Enable Lun and Modify Lun queue entries
-+ */
-+typedef struct {
-+      isphdr_t        le_header;
-+      u_int32_t       le_reserved;
-+      u_int8_t        le_lun;
-+      u_int8_t        le_rsvd;
-+      u_int8_t        le_ops;         /* Modify LUN only */
-+      u_int8_t        le_tgt;         /* Not for FC */
-+      u_int32_t       le_flags;       /* Not for FC */
-+      u_int8_t        le_status;
-+      u_int8_t        le_reserved2;
-+      u_int8_t        le_cmd_count;
-+      u_int8_t        le_in_count;
-+      u_int8_t        le_cdb6len;     /* Not for FC */
-+      u_int8_t        le_cdb7len;     /* Not for FC */
-+      u_int16_t       le_timeout;
-+      u_int16_t       le_reserved3[20];
-+} lun_entry_t;
-+
-+/*
-+ * le_flags values
-+ */
-+#define LUN_TQAE      0x00000002      /* bit1  Tagged Queue Action Enable */
-+#define LUN_DSSM      0x01000000      /* bit24 Disable Sending SDP Message */
-+#define       LUN_DISAD       0x02000000      /* bit25 Disable autodisconnect */
-+#define LUN_DM                0x40000000      /* bit30 Disconnects Mandatory */
-+
-+/*
-+ * le_ops values
-+ */
-+#define LUN_CCINCR    0x01    /* increment command count */
-+#define LUN_CCDECR    0x02    /* decrement command count */
-+#define LUN_ININCR    0x40    /* increment immed. notify count */
-+#define LUN_INDECR    0x80    /* decrement immed. notify count */
-+
-+/*
-+ * le_status values
-+ */
-+#define       LUN_OK          0x01    /* we be rockin' */
-+#define LUN_ERR               0x04    /* request completed with error */
-+#define LUN_INVAL     0x06    /* invalid request */
-+#define LUN_NOCAP     0x16    /* can't provide requested capability */
-+#define LUN_ENABLED   0x3E    /* LUN already enabled */
-+
-+/*
-+ * Immediate Notify Entry structure
-+ */
-+#define IN_MSGLEN     8       /* 8 bytes */
-+#define IN_RSVDLEN    8       /* 8 words */
-+typedef struct {
-+      isphdr_t        in_header;
-+      u_int32_t       in_reserved;
-+      u_int8_t        in_lun;         /* lun */
-+      u_int8_t        in_iid;         /* initiator */
-+      u_int8_t        in_reserved2;
-+      u_int8_t        in_tgt;         /* target */
-+      u_int32_t       in_flags;
-+      u_int8_t        in_status;
-+      u_int8_t        in_rsvd2;
-+      u_int8_t        in_tag_val;     /* tag value */
-+      u_int8_t        in_tag_type;    /* tag type */
-+      u_int16_t       in_seqid;       /* sequence id */
-+      u_int8_t        in_msg[IN_MSGLEN];      /* SCSI message bytes */
-+      u_int16_t       in_reserved3[IN_RSVDLEN];
-+      u_int8_t        in_sense[QLTM_SENSELEN];/* suggested sense data */
-+} in_entry_t;
-+
-+typedef struct {
-+      isphdr_t        in_header;
-+      u_int32_t       in_reserved;
-+      u_int8_t        in_lun;         /* lun */
-+      u_int8_t        in_iid;         /* initiator */
-+      u_int16_t       in_scclun;
-+      u_int32_t       in_reserved2;
-+      u_int16_t       in_status;
-+      u_int16_t       in_task_flags;
-+      u_int16_t       in_seqid;       /* sequence id */
-+} in_fcentry_t;
-+
-+/*
-+ * Values for the in_status field
-+ */
-+#define       IN_REJECT       0x0D    /* Message Reject message received */
-+#define IN_RESET      0x0E    /* Bus Reset occurred */
-+#define IN_NO_RCAP    0x16    /* requested capability not available */
-+#define IN_IDE_RECEIVED       0x33    /* Initiator Detected Error msg received */
-+#define IN_RSRC_UNAVAIL       0x34    /* resource unavailable */
-+#define IN_MSG_RECEIVED       0x36    /* SCSI message received */
-+#define       IN_ABORT_TASK   0x20    /* task named in RX_ID is being aborted (FC) */
-+#define       IN_PORT_LOGOUT  0x29    /* port has logged out (FC) */
-+#define       IN_PORT_CHANGED 0x2A    /* port changed */
-+#define       IN_GLOBAL_LOGO  0x2E    /* all ports logged out */
-+#define       IN_NO_NEXUS     0x3B    /* Nexus not established */
-+
-+/*
-+ * Values for the in_task_flags field- should only get one at a time!
-+ */
-+#define       TASK_FLAGS_ABORT_TASK           (1<<9)
-+#define       TASK_FLAGS_CLEAR_TASK_SET       (1<<10)
-+#define       TASK_FLAGS_TARGET_RESET         (1<<13)
-+#define       TASK_FLAGS_CLEAR_ACA            (1<<14)
-+#define       TASK_FLAGS_TERMINATE_TASK       (1<<15)
-+
-+#ifndef       MSG_ABORT_TAG
-+#define       MSG_ABORT_TAG           0x06
-+#endif
-+#ifndef       MSG_CLEAR_QUEUE
-+#define       MSG_CLEAR_QUEUE         0x0e
-+#endif
-+#ifndef       MSG_BUS_DEV_RESET
-+#define       MSG_BUS_DEV_RESET       0x0b
-+#endif
-+#ifndef       MSG_REL_RECOVERY
-+#define       MSG_REL_RECOVERY        0x10
-+#endif
-+#ifndef       MSG_TERM_IO_PROC
-+#define       MSG_TERM_IO_PROC        0x11
-+#endif
-+
-+
-+/*
-+ * Notify Acknowledge Entry structure
-+ */
-+#define NA_RSVDLEN    22
-+typedef struct {
-+      isphdr_t        na_header;
-+      u_int32_t       na_reserved;
-+      u_int8_t        na_lun;         /* lun */
-+      u_int8_t        na_iid;         /* initiator */
-+      u_int8_t        na_reserved2;
-+      u_int8_t        na_tgt;         /* target */
-+      u_int32_t       na_flags;
-+      u_int8_t        na_status;
-+      u_int8_t        na_event;
-+      u_int16_t       na_seqid;       /* sequence id */
-+      u_int16_t       na_reserved3[NA_RSVDLEN];
-+} na_entry_t;
-+
-+/*
-+ * Value for the na_event field
-+ */
-+#define NA_RST_CLRD   0x80    /* Clear an async event notification */
-+#define       NA_OK           0x01    /* Notify Acknowledge Succeeded */
-+#define       NA_INVALID      0x06    /* Invalid Notify Acknowledge */
-+
-+#define       NA2_RSVDLEN     21
-+typedef struct {
-+      isphdr_t        na_header;
-+      u_int32_t       na_reserved;
-+      u_int8_t        na_lun;         /* lun */
-+      u_int8_t        na_iid;         /* initiator */
-+      u_int16_t       na_scclun;
-+      u_int16_t       na_flags;
-+      u_int16_t       na_reserved2;
-+      u_int16_t       na_status;
-+      u_int16_t       na_task_flags;
-+      u_int16_t       na_seqid;       /* sequence id */
-+      u_int16_t       na_reserved3[NA2_RSVDLEN];
-+} na_fcentry_t;
-+#define       NAFC_RCOUNT     0x80    /* increment resource count */
-+#define NAFC_RST_CLRD 0x20    /* Clear LIP Reset */
-+/*
-+ * Accept Target I/O Entry structure
-+ */
-+#define ATIO_CDBLEN   26
-+
-+typedef struct {
-+      isphdr_t        at_header;
-+      u_int16_t       at_reserved;
-+      u_int16_t       at_handle;
-+      u_int8_t        at_lun;         /* lun */
-+      u_int8_t        at_iid;         /* initiator */
-+      u_int8_t        at_cdblen;      /* cdb length */
-+      u_int8_t        at_tgt;         /* target */
-+      u_int32_t       at_flags;
-+      u_int8_t        at_status;      /* firmware status */
-+      u_int8_t        at_scsi_status; /* scsi status */
-+      u_int8_t        at_tag_val;     /* tag value */
-+      u_int8_t        at_tag_type;    /* tag type */
-+      u_int8_t        at_cdb[ATIO_CDBLEN];    /* received CDB */
-+      u_int8_t        at_sense[QLTM_SENSELEN];/* suggested sense data */
-+} at_entry_t;
-+
-+/*
-+ * at_flags values
-+ */
-+#define AT_NODISC     0x00008000      /* disconnect disabled */
-+#define AT_TQAE               0x00000002      /* Tagged Queue Action enabled */
-+
-+/*
-+ * at_status values
-+ */
-+#define AT_PATH_INVALID       0x07    /* ATIO sent to firmware for disabled lun */
-+#define       AT_RESET        0x0E    /* SCSI Bus Reset Occurred */
-+#define AT_PHASE_ERROR        0x14    /* Bus phase sequence error */
-+#define AT_NOCAP      0x16    /* Requested capability not available */
-+#define AT_BDR_MSG    0x17    /* Bus Device Reset msg received */
-+#define AT_CDB                0x3D    /* CDB received */
-+
-+/*
-+ * Macros to create and fetch and test concatenated handle and tag value macros
-+ */
-+
-+#define       AT_MAKE_TAGID(tid, aep)                                         \
-+      tid = ((aep)->at_handle << 16);                                 \
-+      if ((aep)->at_flags & AT_TQAE)                                  \
-+              (tid) |= ((aep)->at_tag_val + 1)
-+
-+#define       CT_MAKE_TAGID(tid, ct)                                          \
-+      tid = ((ct)->ct_fwhandle << 16);                                \
-+      if ((ct)->ct_flags & CT_TQAE)                                   \
-+              (tid) |= ((ct)->ct_tag_val + 1)
-+
-+#define       AT_HAS_TAG(val)         ((val) & 0xffff)
-+#define       AT_GET_TAG(val)         AT_HAS_TAG(val) - 1
-+#define       AT_GET_HANDLE(val)      ((val) >> 16)
-+
-+/*
-+ * Accept Target I/O Entry structure, Type 2
-+ */
-+#define ATIO2_CDBLEN  16
-+
-+typedef struct {
-+      isphdr_t        at_header;
-+      u_int32_t       at_reserved;
-+      u_int8_t        at_lun;         /* lun or reserved */
-+      u_int8_t        at_iid;         /* initiator */
-+      u_int16_t       at_rxid;        /* response ID */
-+      u_int16_t       at_flags;
-+      u_int16_t       at_status;      /* firmware status */
-+      u_int8_t        at_crn;         /* command reference number */
-+      u_int8_t        at_taskcodes;
-+      u_int8_t        at_taskflags;
-+      u_int8_t        at_execodes;
-+      u_int8_t        at_cdb[ATIO2_CDBLEN];   /* received CDB */
-+      u_int32_t       at_datalen;             /* allocated data len */
-+      u_int16_t       at_scclun;              /* SCC Lun or reserved */
-+      u_int16_t       at_wwpn[4];             /* WWPN of initiator */
-+      u_int16_t       at_reserved2[6];
-+      u_int16_t       at_oxid;
-+} at2_entry_t;
-+
-+#define       ATIO2_WWPN_OFFSET       0x2A
-+#define       ATIO2_OXID_OFFSET       0x3E
-+
-+#define       ATIO2_TC_ATTR_MASK      0x7
-+#define       ATIO2_TC_ATTR_SIMPLEQ   0
-+#define       ATIO2_TC_ATTR_HEADOFQ   1
-+#define       ATIO2_TC_ATTR_ORDERED   2
-+#define       ATIO2_TC_ATTR_ACAQ      4
-+#define       ATIO2_TC_ATTR_UNTAGGED  5
-+
-+#define       ATIO2_EX_WRITE          0x1
-+#define       ATIO2_EX_READ           0x2
-+
-+/*
-+ * Continue Target I/O Entry structure
-+ * Request from driver. The response from the
-+ * ISP firmware is the same except that the last 18
-+ * bytes are overwritten by suggested sense data if
-+ * the 'autosense valid' bit is set in the status byte.
-+ */
-+typedef struct {
-+      isphdr_t        ct_header;
-+      u_int16_t       ct_reserved;
-+#define       ct_syshandle    ct_reserved     /* we use this */
-+      u_int16_t       ct_fwhandle;    /* required by f/w */
-+      u_int8_t        ct_lun; /* lun */
-+      u_int8_t        ct_iid; /* initiator id */
-+      u_int8_t        ct_reserved2;
-+      u_int8_t        ct_tgt; /* our target id */
-+      u_int32_t       ct_flags;
-+      u_int8_t        ct_status;      /* isp status */
-+      u_int8_t        ct_scsi_status; /* scsi status */
-+      u_int8_t        ct_tag_val;     /* tag value */
-+      u_int8_t        ct_tag_type;    /* tag type */
-+      u_int32_t       ct_xfrlen;      /* transfer length */
-+      u_int32_t       ct_resid;       /* residual length */
-+      u_int16_t       ct_timeout;
-+      u_int16_t       ct_seg_count;
-+      /*
-+       * This is so we can share tag name space with
-+       * CTIO{2,3,4} with the minimum of pain.
-+       */
-+      union {
-+              ispds_t         ct_a[ISP_RQDSEG];
-+      } _u;
-+#define       ct_dataseg      _u.ct_a
-+} ct_entry_t;
-+
-+/*
-+ * For some of the dual port SCSI adapters, port (bus #) is reported
-+ * in the MSbit of ct_iid. Bit fields are a bit too awkward here.
-+ *
-+ * Note that this does not apply to FC adapters at all which can and
-+ * do report IIDs between 129 && 255 (these represent devices that have
-+ * logged in across a SCSI fabric).
-+ */
-+#define       GET_IID_VAL(x)          (x & 0x3f)
-+#define       GET_BUS_VAL(x)          ((x >> 7) & 0x1)
-+#define       SET_IID_VAL(y, x)       y = ((y & ~0x3f) | (x & 0x3f))
-+#define       SET_BUS_VAL(y, x)       y = ((y & 0x3f) | ((x & 0x1) << 7))
-+
-+/*
-+ * ct_flags values
-+ */
-+#define CT_TQAE               0x00000002      /* bit  1, Tagged Queue Action enable */
-+#define CT_DATA_IN    0x00000040      /* bits 6&7, Data direction */
-+#define CT_DATA_OUT   0x00000080      /* bits 6&7, Data direction */
-+#define CT_NO_DATA    0x000000C0      /* bits 6&7, Data direction */
-+#define       CT_CCINCR       0x00000100      /* bit 8, autoincrement atio count */
-+#define CT_DATAMASK   0x000000C0      /* bits 6&7, Data direction */
-+#define       CT_INISYNCWIDE  0x00004000      /* bit 14, Do Sync/Wide Negotiation */
-+#define CT_NODISC     0x00008000      /* bit 15, Disconnects disabled */
-+#define CT_DSDP               0x01000000      /* bit 24, Disable Save Data Pointers */
-+#define CT_SENDRDP    0x04000000      /* bit 26, Send Restore Pointers msg */
-+#define CT_SENDSTATUS 0x80000000      /* bit 31, Send SCSI status byte */
-+
-+/*
-+ * ct_status values
-+ * - set by the firmware when it returns the CTIO
-+ */
-+#define CT_OK         0x01    /* completed without error */
-+#define CT_ABORTED    0x02    /* aborted by host */
-+#define CT_ERR                0x04    /* see sense data for error */
-+#define CT_INVAL      0x06    /* request for disabled lun */
-+#define CT_NOPATH     0x07    /* invalid ITL nexus */
-+#define       CT_INVRXID      0x08    /* (FC only) Invalid RX_ID */
-+#define       CT_DATA_OVER    0x09    /* (FC only) Data Overrun */
-+#define CT_RSELTMO    0x0A    /* reselection timeout after 2 tries */
-+#define CT_TIMEOUT    0x0B    /* timed out */
-+#define CT_RESET      0x0E    /* SCSI Bus Reset occurred */
-+#define       CT_PARITY       0x0F    /* Uncorrectable Parity Error */
-+#define       CT_BUS_ERROR    0x10    /* (FC Only) DMA PCI Error */
-+#define       CT_PANIC        0x13    /* Unrecoverable Error */
-+#define CT_PHASE_ERROR        0x14    /* Bus phase sequence error */
-+#define CT_BDR_MSG    0x17    /* Bus Device Reset msg received */
-+#define       CT_DATA_UNDER   0x15    /* (FC only) Data Underrun */
-+#define CT_TERMINATED 0x19    /* due to Terminate Transfer mbox cmd */
-+#define       CT_PORTNOTAVAIL 0x28    /* port not available */
-+#define       CT_LOGOUT       0x29    /* port logout */
-+#define       CT_PORTCHANGED  0x2A    /* port changed */
-+#define       CT_IDE          0x33    /* Initiator Detected Error */
-+#define CT_NOACK      0x35    /* Outstanding Immed. Notify. entry */
-+
-+/*
-+ * When the firmware returns a CTIO entry, it may overwrite the last
-+ * part of the structure with sense data. This starts at offset 0x2E
-+ * into the entry, which is in the middle of ct_dataseg[1]. Rather
-+ * than define a new struct for this, I'm just using the sense data
-+ * offset.
-+ */
-+#define CTIO_SENSE_OFFSET     0x2E
-+
-+/*
-+ * Entry length in u_longs. All entries are the same size so
-+ * any one will do as the numerator.
-+ */
-+#define UINT32_ENTRY_SIZE     (sizeof(at_entry_t)/sizeof(u_int32_t))
-+
-+/*
-+ * QLA2100 CTIO (type 2) entry
-+ */
-+#define       MAXRESPLEN      26
-+typedef struct {
-+      isphdr_t        ct_header;
-+      u_int16_t       ct_reserved;
-+      u_int16_t       ct_fwhandle;    /* just to match CTIO */
-+      u_int8_t        ct_lun;         /* lun */
-+      u_int8_t        ct_iid;         /* initiator id */
-+      u_int16_t       ct_rxid;        /* response ID */
-+      u_int16_t       ct_flags;
-+      u_int16_t       ct_status;      /* isp status */
-+      u_int16_t       ct_timeout;
-+      u_int16_t       ct_seg_count;
-+      u_int32_t       ct_reloff;      /* relative offset */
-+      int32_t         ct_resid;       /* residual length */
-+      union {
-+              /*
-+               * The three different modes that the target driver
-+               * can set the CTIO{2,3,4} up as.
-+               *
-+               * The first is for sending FCP_DATA_IUs as well as
-+               * (optionally) sending a terminal SCSI status FCP_RSP_IU.
-+               *
-+               * The second is for sending SCSI sense data in an FCP_RSP_IU.
-+               * Note that no FCP_DATA_IUs will be sent.
-+               *
-+               * The third is for sending FCP_RSP_IUs as built specifically
-+               * in system memory as located by the isp_dataseg.
-+               */
-+              struct {
-+                      u_int32_t _reserved;
-+                      u_int16_t _reserved2;
-+                      u_int16_t ct_scsi_status;
-+                      u_int32_t ct_xfrlen;
-+                      union {
-+                              ispds_t ct_a[ISP_RQDSEG_T2];    /* CTIO2 */
-+                              ispds64_t ct_b[ISP_RQDSEG_T3];  /* CTIO3 */
-+                              ispdslist_t ct_c;               /* CTIO4 */
-+                      } _u;
-+#define       ct_dataseg      _u.ct_a
-+#define       ct_dataseg64    _u.ct_b
-+#define       ct_dslist       _u.ct_c
-+              } m0;
-+              struct {
-+                      u_int16_t _reserved;
-+                      u_int16_t _reserved2;
-+                      u_int16_t ct_senselen;
-+                      u_int16_t ct_scsi_status;
-+                      u_int16_t ct_resplen;
-+                      u_int8_t  ct_resp[MAXRESPLEN];
-+              } m1;
-+              struct {
-+                      u_int32_t _reserved;
-+                      u_int16_t _reserved2;
-+                      u_int16_t _reserved3;
-+                      u_int32_t ct_datalen;
-+                      ispds_t ct_fcp_rsp_iudata;
-+              } m2;
-+              /*
-+               * CTIO2 returned from F/W...
-+               */
-+              struct {
-+                      u_int32_t _reserved[4];
-+                      u_int16_t ct_scsi_status;
-+                      u_int8_t  ct_sense[QLTM_SENSELEN];
-+              } fw;
-+      } rsp;
-+} ct2_entry_t;
-+
-+/*
-+ * ct_flags values for CTIO2
-+ */
-+#define       CT2_FLAG_MMASK  0x0003
-+#define       CT2_FLAG_MODE0  0x0000
-+#define       CT2_FLAG_MODE1  0x0001
-+#define       CT2_FLAG_MODE2  0x0002
-+#define CT2_DATA_IN   CT_DATA_IN
-+#define CT2_DATA_OUT  CT_DATA_OUT
-+#define CT2_NO_DATA   CT_NO_DATA
-+#define CT2_DATAMASK  CT_DATAMASK
-+#define       CT2_CCINCR      0x0100
-+#define       CT2_FASTPOST    0x0200
-+#define       CT2_TERMINATE   0x4000
-+#define CT2_SENDSTATUS        0x8000
-+
-+/*
-+ * ct_status values are (mostly) the same as that for ct_entry.
-+ */
-+
-+/*
-+ * ct_scsi_status values- the low 8 bits are the normal SCSI status
-+ * we know and love. The upper 8 bits are validity markers for FCP_RSP_IU
-+ * fields.
-+ */
-+#define       CT2_RSPLEN_VALID        0x0100
-+#define       CT2_SNSLEN_VALID        0x0200
-+#define       CT2_DATA_OVER           0x0400
-+#define       CT2_DATA_UNDER          0x0800
-+
-+/*
-+ * Debug macros
-+ */
-+
-+#define       ISP_TDQE(isp, msg, idx, arg)    \
-+    if (isp->isp_dblev & ISP_LOGTDEBUG2) isp_print_qentry(isp, msg, idx, arg)
-+
-+#ifdef        ISP_TARGET_FUNCTIONS
-+/*
-+ * The functions below are for the publicly available
-+ * target mode functions that are internal to the Qlogic driver.
-+ */
-+
-+/*
-+ * This function handles new response queue entry appropriate for target mode.
-+ */
-+int isp_target_notify(struct ispsoftc *, void *, u_int16_t *);
-+
-+/*
-+ * Enable/Disable/Modify a logical unit.
-+ * (softc, cmd, bus, tgt, lun, cmd_cnt, inotify_cnt, opaque)
-+ */
-+#define       DFLT_CMND_CNT   0xfe    /* unmonitored */
-+#define       DFLT_INOT_CNT   16
-+int isp_lun_cmd(struct ispsoftc *, int, int, int, int, int, int, u_int32_t);
-+
-+/*
-+ * General request queue 'put' routine for target mode entries.
-+ */
-+int isp_target_put_entry(struct ispsoftc *isp, void *);
-+
-+/*
-+ * General routine to put back an ATIO entry-
-+ * used for replenishing f/w resource counts.
-+ * The argument is a pointer to a source ATIO
-+ * or ATIO2.
-+ */
-+int isp_target_put_atio(struct ispsoftc *, void *);
-+
-+/*
-+ * General routine to send a final CTIO for a command- used mostly for
-+ * local responses.
-+ */
-+int isp_endcmd(struct ispsoftc *, void *, u_int32_t, u_int16_t);
-+#define       ECMD_SVALID     0x100
-+
-+/*
-+ * Handle an asynchronous event
-+ *
-+ * Return nonzero if the interrupt that generated this event has been dismissed.
-+ */
-+
-+int isp_target_async(struct ispsoftc *, int, int);
-+#endif
-+#endif        /* _ISP_TARGET_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/isp_tpublic.h  2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,396 @@
-+/* @(#)isp_tpublic.h 1.11 */
-+/*
-+ * Qlogic ISP Host Adapter Public Target Interface Structures && Routines
-+ *---------------------------------------
-+ * Copyright (c) 2000, 2001, 2002, 2003 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions, and the following disclaimer,
-+ *    without modification, immediately at the beginning of the file.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ * 
-+ * Matthew Jacob
-+ * Feral Software
-+ * mjacob@feral.com
-+ */
-+
-+/*
-+ * Required software target mode message and event handling structures.
-+ *
-+ * The message and event structures are used by the MI layer
-+ * to propagate messages and events upstream.
-+ */
-+
-+#ifndef       IN_MSGLEN
-+#define       IN_MSGLEN       8
-+#endif
-+typedef struct {
-+      void *          nt_hba;                 /* HBA tag */
-+      u_int64_t       nt_iid;                 /* inititator id */
-+      u_int64_t       nt_tgt;                 /* target id */
-+      u_int64_t       nt_lun;                 /* logical unit */
-+      u_int32_t       nt_tagval;              /* tag value */
-+      u_int8_t        nt_bus;                 /* bus */
-+      u_int8_t        nt_tagtype;             /* tag type */
-+      u_int8_t        nt_msg[IN_MSGLEN];      /* message content */
-+} tmd_msg_t;
-+
-+typedef struct {
-+      void *          ev_hba;                 /* HBA tag */
-+      u_int32_t       ev_bus;                 /* bus */
-+      u_int32_t       ev_event;               /* type of async event */
-+} tmd_event_t;
-+
-+/*
-+ * Suggested Software Target Mode Command Handling structure.
-+ *
-+ * A note about terminology:
-+ *
-+ *   MD stands for "Machine Dependent".
-+ *
-+ *    This driver is structured in three layers: Outer MD, core, and inner MD.
-+ *    The latter also is bus dependent (i.e., is cognizant of PCI bus issues
-+ *    as well as platform issues).
-+ *
-+ *
-+ *   "Outer Layer" means "Other Module"
-+ *
-+ *    Some additional module that actually implements SCSI target command
-+ *    policy is the recipient of incoming commands and the source of the
-+ *    disposition for them.
-+ *
-+ * The command structure below is one suggested possible MD command structure,
-+ * but since the handling of thbis is entirely in the MD layer, there is
-+ * no explicit or implicit requirement that it be used.
-+ *
-+ * The cd_private tag should be used by the MD layer to keep a free list
-+ * of these structures. Code outside of this driver can then use this
-+ * to identify it's own unit structures. That is, when not on the MD
-+ * layer's freelist, the MD layer should shove into it the identifier
-+ * that the outer layer has for it- passed in on an initial QIN_HBA_REG
-+ * call (see below).
-+ *
-+ * The cd_hba tag is a tag that uniquely identifies the HBA this target
-+ * mode command is coming from. The outer layer has to pass this back
-+ * unchanged to avoid chaos.
-+ *
-+ * The cd_iid, cd_tgt, cd_lun and cd_bus tags are used to identify the
-+ * id of the initiator who sent us a command, the target claim to be, the
-+ * lun on the target we claim to be, and the bus instance (for multiple
-+ * bus host adapters) that this applies to (consider it an extra Port
-+ * parameter). The iid, tgt and lun values are deliberately chosen to be
-+ * fat so that, for example, World Wide Names can be used instead of
-+ * the units that the Qlogic firmware uses (in the case where the MD
-+ * layer maintains a port database, for example).
-+ *
-+ * The cd_tagtype field specifies what kind of command tag has been
-+ * sent with the command. The cd_tagval is the tag's value (low 16
-+ * bits). It also contains (in the upper 16 bits) any command handle.
-+ *
-+ *
-+ * N.B.: when the MD layer sends this command to outside software
-+ * the outside software likely *MUST* return the same cd_tagval that
-+ * was in place because this value is likely what the Qlogic f/w uses
-+ * to identify a command.
-+ *
-+ * The cd_cdb contains storage for the passed in command descriptor block.
-+ * This is the maximum size we can get out of the Qlogic f/w. There's no
-+ * passed in length because whoever decodes the command to act upon it
-+ * will know what the appropriate length is.
-+ *
-+ * The tag cd_lflags are the flags set by the MD driver when it gets
-+ * command incoming or when it needs to inform any outside entities
-+ * that the last requested action failed.
-+ *
-+ * The tag cd_hflags should be set by any outside software to indicate
-+ * the validity of sense and status fields (defined below) and to indicate
-+ * the direction data is expected to move. It is an error to have both
-+ * CDFH_DATA_IN and CDFH_DATA_OUT set.
-+ *
-+ * If the CDFH_STSVALID flag is set, the command should be completed (after
-+ * sending any data and/or status). If CDFH_SNSVALID is set and the MD layer
-+ * can also handle sending the associated sense data (either back with an
-+ * FCP RESPONSE IU for Fibre Channel or otherwise automatically handling a
-+ * REQUEST SENSE from the initator for this target/lun), the MD layer will
-+ * set the CDFL_SENTSENSE flag on successful transmission of the sense data.
-+ * It is an error for the CDFH_SNSVALID bit to be set and CDFH_STSVALID not
-+ * to be set. It is an error for the CDFH_SNSVALID be set and the associated
-+ * SCSI status (cd_scsi_status) not be set to CHECK CONDITON.
-+ * 
-+ * The tag cd_data points to a data segment to either be filled or
-+ * read from depending on the direction of data movement. The tag
-+ * is undefined if no data direction is set. The MD layer and outer
-+ * layers must agree on the meaning of cd_data.
-+ *
-+ * The tag cd_totlen is the total data amount expected to be moved
-+ * over the life of the command. It *may* be set by the MD layer, possibly
-+ * from the datalen field of an FCP CMND IU unit. If it shows up in the outer
-+ * layers set to zero and the CDB indicates data should be moved, the outer
-+ * layer should set it to the amount expected to be moved.
-+ *
-+ * The tag cd_resid should be the total residual of data not transferred.
-+ * The outer layers need to set this at the begining of command processing
-+ * to equal cd_totlen. As data is successfully moved, this value is decreased.
-+ * At the end of a command, any nonzero residual indicates the number of bytes
-+ * requested but not moved. XXXXXXXXXXXXXXXXXXXXXXX TOO VAGUE!!! 
-+ *
-+ * The tag cd_xfrlen is the length of the currently active data transfer.
-+ * This allows several interations between any outside software and the
-+ * MD layer to move data.
-+ *
-+ * The reason that total length and total residual have to be tracked
-+ * is that fibre channel FCP DATA IU units have to have a relative
-+ * offset field.
-+ *
-+ * N.B.: there is no necessary 1-to-1 correspondence between any one
-+ * data transfer segment and the number of CTIOs that will be generated
-+ * satisfy the current data transfer segment. It's not also possible to
-+ * predict how big a transfer can be before it will be 'too big'. Be
-+ * reasonable- a 64KB transfer is 'reasonable'. A 1MB transfer may not
-+ * be. A 32MB transfer is unreasonable. The problem here has to do with
-+ * how CTIOs can be used to map passed data pointers. In systems which
-+ * have page based scatter-gather requirements, each PAGESIZEd chunk will
-+ * consume one data segment descriptor- you get 3 or 4 of them per CTIO.
-+ * The size of the REQUEST QUEUE you drop a CTIO onto is finite (typically
-+ * it's 256, but on some systems it's even smaller, and note you have to
-+ * sure this queue with the initiator side of this driver).
-+ *
-+ * The tags cd_sense and cd_scsi_status are pretty obvious.
-+ *
-+ * The tag cd_error is to communicate between the MD layer and outer software
-+ * the current error conditions.
-+ *
-+ * The tag cd_lreserved, cd_hreserved are scratch areas for use for the MD
-+ * and outer layers respectively.
-+ * 
-+ */
-+
-+#ifndef       TMD_CDBLEN
-+#define       TMD_CDBLEN      18      /* 16 bytes, plus pad for alignment */
-+#endif
-+#ifndef       QLTM_SENSELEN
-+#define       QLTM_SENSELEN   18
-+#endif
-+#ifndef       QCDS
-+#define       QCDS    8
-+#endif
-+
-+typedef struct tmd_cmd {
-+      void *                  cd_private;     /* private data pointer */
-+      void *                  cd_hba;         /* HBA tag */
-+      void *                  cd_data;        /* 'pointer' to data */
-+      u_int64_t               cd_iid;         /* initiator ID */
-+      u_int64_t               cd_tgt;         /* target id */
-+      u_int64_t               cd_lun;         /* logical unit */
-+      u_int32_t               cd_tagval;      /* tag value */
-+      u_int32_t               cd_lflags;      /* flags lower level sets */
-+      u_int32_t               cd_hflags;      /* flags higher level sets */
-+      u_int32_t               cd_totlen;      /* total data requirement */
-+      u_int32_t               cd_resid;       /* total data residual */
-+      u_int32_t               cd_xfrlen;      /* current data requirement */
-+      int32_t                 cd_error;       /* current error */
-+      u_int16_t               cd_scsi_status; /* closing SCSI status */
-+      u_int8_t                cd_chan;        /* channel on card */
-+      u_int8_t                cd_tagtype;     /* tag type */
-+      u_int8_t                cd_sense[QLTM_SENSELEN];
-+      u_int8_t                cd_cdb[TMD_CDBLEN];     /* Command */
-+      union {
-+              void *          ptrs[QCDS / sizeof (void *)];
-+              u_int64_t       llongs[QCDS / sizeof (u_int64_t)];
-+              u_int32_t       longs[QCDS / sizeof (u_int32_t)];
-+              u_int16_t       shorts[QCDS / sizeof (u_int16_t)];
-+              u_int8_t        bytes[QCDS];
-+      } cd_lreserved[2], cd_hreserved[2];
-+} tmd_cmd_t;
-+
-+#ifndef       TMD_SIZE
-+#define       TMD_SIZE        (sizeof (tmd_cmd_t))
-+#endif
-+
-+/*
-+ * Note that NODISC (obviously) doesn't apply to non-SPI transport.
-+ *
-+ * Note that knowing the data direction and lengh at the time of receipt of
-+ * a command from the initiator is a feature only of Fibre Channel.
-+ *
-+ * The CDFL_BIDIR is in anticipation of the adoption of some newer
-+ * features required by OSD.
-+ *
-+ * The principle selector for MD layer to know whether data is to
-+ * be transferred in any QOUT_TMD_CONT call is cd_xfrlen- the
-+ * flags CDFH_DATA_IN and CDFH_DATA_OUT define which direction.
-+ */
-+#define       CDFL_SNSVALID   0x01            /* sense data (from f/w) good */
-+#define       CDFL_SENTSTATUS 0x02            /* last action sent status */
-+#define       CDFL_DATA_IN    0x04            /* target (us) -> initiator (them) */
-+#define       CDFL_DATA_OUT   0x08            /* initiator (them) -> target (us) */
-+#define       CDFL_BIDIR      0x0C            /* bidirectional data */
-+#define       CDFL_ERROR      0x10            /* last action ended in error */
-+#define       CDFL_NODISC     0x20            /* disconnects disabled */
-+#define       CDFL_SENTSENSE  0x40            /* last action sent sense data */
-+#define       CDFL_BUSY       0x80            /* this command is not on a free list */
-+#define       CDFL_PRIVATE    0xFF000000      /* private layer flags */
-+
-+#define       CDFH_SNSVALID   0x01            /* sense data (from outer layer) good */
-+#define       CDFH_STSVALID   0x02            /* status valid */
-+#define       CDFH_DATA_IN    0x04            /* target (us) -> initiator (them) */
-+#define       CDFH_DATA_OUT   0x08            /* initiator (them) -> target (us) */
-+#define       CDFH_DATA_MASK  0x0C            /* mask to cover data direction */
-+#define       CDFH_PRIVATE    0xFF000000      /* private layer flags */
-+
-+
-+/*
-+ * Action codes set by the Qlogic MD target driver for
-+ * the external layer to figure out what to do with.
-+ */
-+typedef enum {
-+      QOUT_HBA_REG=0, /* the argument is a pointer to a hba_register_t */
-+      QOUT_ENABLE,    /* the argument is a pointer to a enadis_t */
-+      QOUT_DISABLE,   /* the argument is a pointer to a enadis_t */
-+      QOUT_TMD_START, /* the argument is a pointer to a tmd_cmd_t */
-+      QOUT_TMD_DONE,  /* the argument is a pointer to a tmd_cmd_t */
-+      QOUT_TEVENT,    /* the argument is a pointer to a tmd_event_t */
-+      QOUT_TMSG,      /* the argument is a pointer to a tmd_msg_t */
-+      QOUT_IOCTL,     /* the argument is a pointer to a ioctl_cmd_t */
-+      QOUT_HBA_UNREG  /* the argument is a pointer to a hba_register_t */
-+} tact_e;
-+
-+/*
-+ * Action codes set by the external layer for the
-+ * MD Qlogic driver to figure out what to do with.
-+ */
-+typedef enum {
-+      QIN_HBA_REG=99, /* the argument is a pointer to a hba_register_t */
-+      QIN_ENABLE,     /* the argument is a pointer to a enadis_t */
-+      QIN_DISABLE,    /* the argument is a pointer to a enadis_t */
-+      QIN_TMD_CONT,   /* the argument is a pointer to a tmd_cmd_t */
-+      QIN_TMD_FIN,    /* the argument is a pointer to a tmd_cmd_t */
-+      QIN_IOCTL,      /* the argument is a pointer to a ioctl_cmd_t */
-+      QIN_HBA_UNREG,  /* the argument is a pointer to a hba_register_t */
-+} qact_e;
-+
-+
-+/*
-+ * A word about the START/CONT/DONE/FIN dance:
-+ *
-+ *    When the HBA is enabled for receiving commands, one may show up
-+ *    without notice. When that happens, the Qlogic target mode driver
-+ *    gets a tmd_cmd_t, fills it with the info that just arrived, and
-+ *    calls the outer layer with a QOUT_TMD_START code and pointer to
-+ *    the tmd_cmd_t.
-+ *
-+ *    The outer layer decodes the command, fetches data, prepares stuff,
-+ *    whatever, and starts by passing back the pointer with a QIN_TMD_CONT
-+ *    code which causes the Qlogic target mode driver to generate CTIOs to
-+ *    satisfy whatever action needs to be taken. When those CTIOs complete,
-+ *    the Qlogic target driver sends the pointer to the cmd_tmd_t back with
-+ *    a QOUT_TMD_DONE code. This repeats for as long as necessary.
-+ *
-+ *    The outer layer signals it wants to end the command by settings within
-+ *    the tmd_cmd_t itself. When the final QIN_TMD_CONT is reported completed,
-+ *    the outer layer frees the tmd_cmd_t by sending the pointer to it
-+ *    back with a QIN_TMD_FIN code.
-+ *
-+ *    The graph looks like:
-+ *
-+ *    QOUT_TMD_START -> [ QIN_TMD_CONT -> QOUT_TMD_DONE ] * -> QIN_TMD_FIN.
-+ *
-+ */
-+
-+/*
-+ * A word about ENABLE/DISABLE: the argument is a pointer to a enadis_t
-+ * with cd_hba, cd_iid, cd_chan, cd_tgt and cd_lun filled out.
-+ *
-+ * If an error occurs in either enabling or disabling the described lun
-+ * cd_error is set with an appropriate non-zero value.
-+ *
-+ * Logical unit zero must be the first enabled and the last disabled.
-+ */
-+typedef struct {
-+      void *                  cd_private;     /* for outer layer usage */
-+      void *                  cd_hba;         /* HBA tag */
-+      u_int64_t               cd_iid;         /* initiator ID */
-+      u_int64_t               cd_tgt;         /* target id */
-+      u_int64_t               cd_lun;         /* logical unit */
-+      u_int8_t                cd_chan;        /* channel on card */
-+      int32_t                 cd_error;
-+} enadis_t;
-+
-+/*
-+ * This structure is used to register to other software modules the
-+ * binding of an HBA identifier, driver name and instance and the
-+ * lun width capapbilities of this target driver. It's up to each
-+ * platform to figure out how it wants to do this, but a typical
-+ * sequence would be for the MD layer to find some external module's
-+ * entry point and start by sending a QOUT_HBA_REG with info filled
-+ * in, and the external module to call back with a QIN_HBA_REG that
-+ * passes back the corresponding information.
-+ */
-+#define       QR_VERSION      1
-+typedef struct {
-+      void *  r_identity;
-+      void   (*r_action)(qact_e, void *);
-+      char    r_name[8];
-+      int     r_inst;
-+      int     r_version;
-+      enum { R_FC, R_SCSI } r_type;
-+} hba_register_t;
-+
-+/*
-+ * This structure is used to pass an encapsulated ioctl through to the
-+ * MD layer. In many implementations it's often convenient to open just
-+ * one device, but actions you want to take need to be taken on the
-+ * underlying HBA. Rather than invent a separate protocol for each action,
-+ * an ioctl passthrough seems simpler.
-+ *
-+ * In order to avoid cross domain copy problems, though, the caller will
-+ * be responsible for allocating and providing a staging area for all ioctl
-+ * related data. This, unavoidably, requires some ioctl decode capability
-+ * in the outer layer code.`
-+ *
-+ * And also, albeit being cheesy, we'll define a few internal ioctls here.
-+ */
-+typedef struct {
-+      void *  i_identity;     /* HBA tag */
-+      void *  i_syncptr;      /* synchronization pointer */
-+      int     i_cmd;          /* ioctl command */
-+      void *  i_arg;          /* ioctl argument area */
-+      int     i_errno;        /* ioctl error return */
-+} ioctl_cmd_t;
-+
-+#define       QI_IOC  ('Q' << 8)
-+#define       QI_SCSI_TINI    QI_IOC|0
-+#define       QI_SCSI_CMD     QI_IOC|1
-+#define       QI_WWPN_XLT     QI_IOC|2
-+
-+/*
-+ * Target handler functions.
-+ *
-+ * The MD target handler function (the outer layer calls this)
-+ * should be be prototyped like:
-+ *
-+ *    void target_action(qact_e, void *arg)
-+ *
-+ * The outer layer target handler function (the MD layer calls this)
-+ * should be be prototyped like:
-+ *
-+ *    void system_target_handler(tact_e, void *arg)
-+ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/ispvar.h       2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,902 @@
-+/* @(#)ispvar.h 1.44 */
-+/*
-+ * Soft Definitions for for Qlogic ISP SCSI adapters.
-+ *
-+ * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice immediately at the beginning of the file, without modification,
-+ *    this list of conditions, and the following disclaimer.
-+ * 2. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ *
-+ */
-+
-+#ifndef       _ISPVAR_H
-+#define       _ISPVAR_H
-+
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
-+#include <dev/ic/ispmbox.h>
-+#ifdef        ISP_TARGET_MODE
-+#include <dev/ic/isp_target.h>
-+#include <dev/ic/isp_tpublic.h>
-+#endif
-+#endif
-+#ifdef        __FreeBSD__
-+#include <dev/isp/ispmbox.h>
-+#ifdef        ISP_TARGET_MODE
-+#include <dev/isp/isp_target.h>
-+#include <dev/isp/isp_tpublic.h>
-+#endif
-+#endif
-+#ifdef        __linux__
-+#include "ispmbox.h"
-+#ifdef        ISP_TARGET_MODE
-+#include "isp_target.h"
-+#include "isp_tpublic.h"
-+#endif
-+#endif
-+
-+#define       ISP_CORE_VERSION_MAJOR  2
-+#define       ISP_CORE_VERSION_MINOR  7
-+
-+/*
-+ * Vector for bus specific code to provide specific services.
-+ */
-+struct ispsoftc;
-+struct ispmdvec {
-+      int             (*dv_rd_isr)
-+          (struct ispsoftc *, u_int16_t *, u_int16_t *, u_int16_t *);
-+      u_int16_t       (*dv_rd_reg) (struct ispsoftc *, int);
-+      void            (*dv_wr_reg) (struct ispsoftc *, int, u_int16_t);
-+      int             (*dv_mbxdma) (struct ispsoftc *);
-+      int             (*dv_dmaset) (struct ispsoftc *,
-+          XS_T *, ispreq_t *, u_int16_t *, u_int16_t);
-+      void            (*dv_dmaclr)
-+          (struct ispsoftc *, XS_T *, u_int16_t);
-+      void            (*dv_reset0) (struct ispsoftc *);
-+      void            (*dv_reset1) (struct ispsoftc *);
-+      void            (*dv_dregs) (struct ispsoftc *, const char *);
-+      u_int16_t       *dv_ispfw;      /* ptr to f/w */
-+      u_int16_t       dv_conf1;
-+      u_int16_t       dv_clock;       /* clock frequency */
-+};
-+
-+/*
-+ * Overall parameters
-+ */
-+#define       MAX_TARGETS             16
-+#define       MAX_FC_TARG             256
-+#define       ISP_MAX_TARGETS(isp)    (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS)
-+#define       ISP_MAX_LUNS(isp)       (isp)->isp_maxluns
-+
-+/*
-+ * 'Types'
-+ */
-+#ifdef        ISP_DAC_SUPPORTED
-+typedef       u_int64_t       isp_dma_addr_t;
-+#else
-+typedef       u_int32_t       isp_dma_addr_t;
-+#endif
-+
-+/*
-+ * Macros to access ISP registers through bus specific layers-
-+ * mostly wrappers to vector through the mdvec structure.
-+ */
-+#define       ISP_READ_ISR(isp, isrp, semap, mbox0p)  \
-+      (*(isp)->isp_mdvec->dv_rd_isr)(isp, isrp, semap, mbox0p)
-+
-+#define       ISP_READ(isp, reg)      \
-+      (*(isp)->isp_mdvec->dv_rd_reg)((isp), (reg))
-+
-+#define       ISP_WRITE(isp, reg, val)        \
-+      (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), (val))
-+
-+#define       ISP_MBOXDMASETUP(isp)   \
-+      (*(isp)->isp_mdvec->dv_mbxdma)((isp))
-+
-+#define       ISP_DMASETUP(isp, xs, req, iptrp, optr) \
-+      (*(isp)->isp_mdvec->dv_dmaset)((isp), (xs), (req), (iptrp), (optr))
-+
-+#define       ISP_DMAFREE(isp, xs, hndl)      \
-+      if ((isp)->isp_mdvec->dv_dmaclr) \
-+          (*(isp)->isp_mdvec->dv_dmaclr)((isp), (xs), (hndl))
-+
-+#define       ISP_RESET0(isp) \
-+      if ((isp)->isp_mdvec->dv_reset0) (*(isp)->isp_mdvec->dv_reset0)((isp))
-+#define       ISP_RESET1(isp) \
-+      if ((isp)->isp_mdvec->dv_reset1) (*(isp)->isp_mdvec->dv_reset1)((isp))
-+#define       ISP_DUMPREGS(isp, m)    \
-+      if ((isp)->isp_mdvec->dv_dregs) (*(isp)->isp_mdvec->dv_dregs)((isp),(m))
-+
-+#define       ISP_SETBITS(isp, reg, val)      \
-+ (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) | (val))
-+
-+#define       ISP_CLRBITS(isp, reg, val)      \
-+ (*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) & ~(val))
-+
-+/*
-+ * The MEMORYBARRIER macro is defined per platform (to provide synchronization
-+ * on Request and Response Queues, Scratch DMA areas, and Registers)
-+ *
-+ * Defined Memory Barrier Synchronization Types
-+ */
-+#define       SYNC_REQUEST    0       /* request queue synchronization */
-+#define       SYNC_RESULT     1       /* result queue synchronization */
-+#define       SYNC_SFORDEV    2       /* scratch, sync for ISP */
-+#define       SYNC_SFORCPU    3       /* scratch, sync for CPU */
-+#define       SYNC_REG        4       /* for registers */
-+
-+/*
-+ * Request/Response Queue defines and macros.
-+ * The maximum is defined per platform (and can be based on board type).
-+ */
-+/* This is the size of a queue entry (request and response) */
-+#define       QENTRY_LEN                      64
-+/* Both request and result queue length must be a power of two */
-+#define       RQUEST_QUEUE_LEN(x)             MAXISPREQUEST(x)
-+#ifdef        ISP_TARGET_MODE
-+#define       RESULT_QUEUE_LEN(x)             MAXISPREQUEST(x)
-+#else
-+#define       RESULT_QUEUE_LEN(x)             \
-+      (((MAXISPREQUEST(x) >> 2) < 64)? 64 : MAXISPREQUEST(x) >> 2)
-+#endif
-+#define       ISP_QUEUE_ENTRY(q, idx)         ((q) + ((idx) * QENTRY_LEN))
-+#define       ISP_QUEUE_SIZE(n)               ((n) * QENTRY_LEN)
-+#define       ISP_NXT_QENTRY(idx, qlen)       (((idx) + 1) & ((qlen)-1))
-+#define       ISP_QFREE(in, out, qlen)        \
-+      ((in == out)? (qlen - 1) : ((in > out)? \
-+      ((qlen - 1) - (in - out)) : (out - in - 1)))
-+#define       ISP_QAVAIL(isp) \
-+      ISP_QFREE(isp->isp_reqidx, isp->isp_reqodx, RQUEST_QUEUE_LEN(isp))
-+
-+#define       ISP_ADD_REQUEST(isp, nxti)                                      \
-+      MEMORYBARRIER(isp, SYNC_REQUEST, isp->isp_reqidx, QENTRY_LEN);  \
-+      WRITE_REQUEST_QUEUE_IN_POINTER(isp, nxti);                      \
-+      isp->isp_reqidx = nxti
-+
-+/*
-+ * SCSI Specific Host Adapter Parameters- per bus, per target
-+ */
-+
-+typedef struct {
-+      u_int           isp_gotdparms           : 1,
-+                      isp_req_ack_active_neg  : 1,
-+                      isp_data_line_active_neg: 1,
-+                      isp_cmd_dma_burst_enable: 1,
-+                      isp_data_dma_burst_enabl: 1,
-+                      isp_fifo_threshold      : 3,
-+                      isp_ultramode           : 1,
-+                      isp_diffmode            : 1,
-+                      isp_lvdmode             : 1,
-+                      isp_fast_mttr           : 1,    /* fast sram */
-+                      isp_initiator_id        : 4,
-+                      isp_async_data_setup    : 4;
-+      u_int16_t       isp_selection_timeout;
-+      u_int16_t       isp_max_queue_depth;
-+      u_int8_t        isp_tag_aging;
-+      u_int8_t        isp_bus_reset_delay;
-+      u_int8_t        isp_retry_count;
-+      u_int8_t        isp_retry_delay;
-+      struct {
-+              u_int32_t       
-+                      exc_throttle    :       8,
-+                                      :       1,
-+                      dev_enable      :       1,      /* ignored */
-+                      dev_update      :       1,
-+                      dev_refresh     :       1,
-+                      actv_offset     :       4,
-+                      goal_offset     :       4,
-+                      nvrm_offset     :       4;
-+              u_int8_t        actv_period;    /* current sync period */
-+              u_int8_t        goal_period;    /* goal sync period */
-+              u_int8_t        nvrm_period;    /* nvram sync period */
-+              u_int16_t       actv_flags;     /* current device flags */
-+              u_int16_t       goal_flags;     /* goal device flags */
-+              u_int16_t       nvrm_flags;     /* nvram device flags */
-+      } isp_devparam[MAX_TARGETS];
-+} sdparam;
-+
-+/*
-+ * Device Flags
-+ */
-+#define       DPARM_DISC      0x8000
-+#define       DPARM_PARITY    0x4000
-+#define       DPARM_WIDE      0x2000
-+#define       DPARM_SYNC      0x1000
-+#define       DPARM_TQING     0x0800
-+#define       DPARM_ARQ       0x0400
-+#define       DPARM_QFRZ      0x0200
-+#define       DPARM_RENEG     0x0100
-+#define       DPARM_NARROW    0x0080
-+#define       DPARM_ASYNC     0x0040
-+#define       DPARM_PPR       0x0020
-+#define       DPARM_DEFAULT   (0xFF00 & ~DPARM_QFRZ)
-+#define       DPARM_SAFE_DFLT (DPARM_DEFAULT & ~(DPARM_WIDE|DPARM_SYNC|DPARM_TQING))
-+
-+
-+/* technically, not really correct, as they need to be rated based upon clock */
-+#define       ISP_80M_SYNCPARMS       0x0c09
-+#define       ISP_40M_SYNCPARMS       0x0c0a
-+#define       ISP_20M_SYNCPARMS       0x0c0c
-+#define       ISP_20M_SYNCPARMS_1040  0x080c
-+#define       ISP_10M_SYNCPARMS       0x0c19
-+#define       ISP_08M_SYNCPARMS       0x0c25
-+#define       ISP_05M_SYNCPARMS       0x0c32
-+#define       ISP_04M_SYNCPARMS       0x0c41
-+
-+/*
-+ * Fibre Channel Specifics
-+ */
-+#define       FL_PORT_ID              0x7e    /* FL_Port Special ID */
-+#define       FC_PORT_ID              0x7f    /* Fabric Controller Special ID */
-+#define       FC_SNS_ID               0x80    /* SNS Server Special ID */
-+
-+/* #define    ISP_USE_GA_NXT  1 */    /* Use GA_NXT with switches */
-+#ifndef       GA_NXT_MAX
-+#define       GA_NXT_MAX      256
-+#endif
-+
-+typedef struct {
-+      u_int32_t               isp_fwoptions   : 16,
-+                              isp_gbspeed     : 2,
-+                              isp_iid_set     : 1,
-+                              loop_seen_once  : 1,
-+                              isp_loopstate   : 4,    /* Current Loop State */
-+                              isp_fwstate     : 3,    /* ISP F/W state */
-+                              isp_gotdparms   : 1,
-+                              isp_topo        : 3,
-+                              isp_onfabric    : 1;
-+      u_int8_t                isp_iid;        /* 'initiator' id */
-+      u_int8_t                isp_loopid;     /* hard loop id */
-+      u_int8_t                isp_alpa;       /* ALPA */
-+      u_int32_t               isp_portid;
-+      volatile u_int16_t      isp_lipseq;     /* LIP sequence # */
-+      u_int16_t               isp_fwattr;     /* firmware attributes */
-+      u_int8_t                isp_execthrottle;
-+      u_int8_t                isp_retry_delay;
-+      u_int8_t                isp_retry_count;
-+      u_int8_t                isp_reserved;
-+      u_int16_t               isp_maxalloc;
-+      u_int16_t               isp_maxfrmlen;
-+      u_int64_t               isp_nodewwn;
-+      u_int64_t               isp_portwwn;
-+      /*
-+       * Port Data Base. This is indexed by 'target', which is invariate.
-+       * However, elements within can move around due to loop changes,
-+       * so the actual loop ID passed to the F/W is in this structure.
-+       * The first time the loop is seen up, loopid will match the index
-+       * (except for fabric nodes which are above mapped above FC_SNS_ID
-+       * and are completely virtual), but subsequent LIPs can cause things
-+       * to move around.
-+       */
-+      struct lportdb {
-+              u_int32_t
-+                                      port_type       : 8,
-+                                      loopid          : 8,
-+                                      fc4_type        : 4,
-+                                      last_fabric_dev : 1,
-+                                                      : 2,
-+                                      relogin         : 1,
-+                                      force_logout    : 1,
-+                                      was_fabric_dev  : 1,
-+                                      fabric_dev      : 1,
-+                                      loggedin        : 1,
-+                                      roles           : 2,
-+                                      valid           : 1;
-+              u_int32_t               portid;
-+              u_int64_t               node_wwn;
-+              u_int64_t               port_wwn;
-+      } portdb[MAX_FC_TARG], tport[FC_PORT_ID];
-+
-+      /*
-+       * Scratch DMA mapped in area to fetch Port Database stuff, etc.
-+       */
-+      caddr_t                 isp_scratch;
-+      isp_dma_addr_t          isp_scdma;
-+#ifdef        ISP_FW_CRASH_DUMP
-+      u_int16_t               *isp_dump_data;
-+#endif
-+} fcparam;
-+
-+#define       FW_CONFIG_WAIT          0
-+#define       FW_WAIT_AL_PA           1
-+#define       FW_WAIT_LOGIN           2
-+#define       FW_READY                3
-+#define       FW_LOSS_OF_SYNC         4
-+#define       FW_ERROR                5
-+#define       FW_REINIT               6
-+#define       FW_NON_PART             7
-+
-+#define       LOOP_NIL                0
-+#define       LOOP_LIP_RCVD           1
-+#define       LOOP_PDB_RCVD           2
-+#define       LOOP_SCANNING_FABRIC    3
-+#define       LOOP_FSCAN_DONE         4
-+#define       LOOP_SCANNING_LOOP      5
-+#define       LOOP_LSCAN_DONE         6
-+#define       LOOP_SYNCING_PDB        7
-+#define       LOOP_READY              8
-+
-+#define       TOPO_NL_PORT            0
-+#define       TOPO_FL_PORT            1
-+#define       TOPO_N_PORT             2
-+#define       TOPO_F_PORT             3
-+#define       TOPO_PTP_STUB           4
-+
-+/*
-+ * Soft Structure per host adapter
-+ */
-+typedef struct ispsoftc {
-+      /*
-+       * Platform (OS) specific data
-+       */
-+      struct isposinfo        isp_osinfo;
-+
-+      /*
-+       * Pointer to bus specific functions and data
-+       */
-+      struct ispmdvec *       isp_mdvec;
-+
-+      /*
-+       * (Mostly) nonvolatile state. Board specific parameters
-+       * may contain some volatile state (e.g., current loop state).
-+       */
-+
-+      void *                  isp_param;      /* type specific */
-+      u_int16_t               isp_fwrev[3];   /* Loaded F/W revision */
-+      u_int16_t               isp_romfw_rev[3]; /* PROM F/W revision */
-+      u_int16_t               isp_maxcmds;    /* max possible I/O cmds */
-+      u_int8_t                isp_type;       /* HBA Chip Type */
-+      u_int8_t                isp_revision;   /* HBA Chip H/W Revision */
-+      u_int32_t               isp_maxluns;    /* maximum luns supported */
-+
-+      u_int32_t               isp_clock       : 8,    /* input clock */
-+                                              : 4,
-+                              isp_port        : 1,    /* 23XX only */
-+                              isp_failed      : 1,    /* board failed */
-+                              isp_open        : 1,    /* opened (ioctl) */
-+                              isp_touched     : 1,    /* board ever seen? */
-+                              isp_bustype     : 1,    /* SBus or PCI */
-+                              isp_loaded_fw   : 1,    /* loaded firmware */
-+                              isp_role        : 2,    /* roles supported */
-+                              isp_dblev       : 12;   /* debug log mask */
-+
-+      u_int32_t               isp_confopts;           /* config options */
-+
-+      u_int16_t               isp_rqstinrp;   /* register for REQINP */
-+      u_int16_t               isp_rqstoutrp;  /* register for REQOUTP */
-+      u_int16_t               isp_respinrp;   /* register for RESINP */
-+      u_int16_t               isp_respoutrp;  /* register for RESOUTP */
-+
-+      /*
-+       * Instrumentation
-+       */
-+      u_int64_t               isp_intcnt;             /* total int count */
-+      u_int64_t               isp_intbogus;           /* spurious int count */
-+      u_int64_t               isp_intmboxc;           /* mbox completions */
-+      u_int64_t               isp_intoasync;          /* other async */
-+      u_int64_t               isp_rsltccmplt;         /* CMDs on result q */
-+      u_int64_t               isp_fphccmplt;          /* CMDs via fastpost */
-+      u_int16_t               isp_rscchiwater;
-+      u_int16_t               isp_fpcchiwater;
-+
-+      /*
-+       * Volatile state
-+       */
-+
-+      volatile u_int32_t
-+              isp_obits       :       8,      /* mailbox command output */
-+              isp_mboxbsy     :       1,      /* mailbox command active */
-+              isp_state       :       3,
-+              isp_sendmarker  :       2,      /* send a marker entry */
-+              isp_update      :       2,      /* update parameters */
-+              isp_nactive     :       16;     /* how many commands active */
-+      volatile u_int16_t      isp_reqodx;     /* index of last ISP pickup */
-+      volatile u_int16_t      isp_reqidx;     /* index of next request */
-+      volatile u_int16_t      isp_residx;     /* index of next result */
-+      volatile u_int16_t      isp_resodx;     /* index of next result */
-+      volatile u_int16_t      isp_rspbsy;
-+      volatile u_int16_t      isp_lasthdls;   /* last handle seed */
-+      volatile u_int16_t      isp_mboxtmp[MAX_MAILBOX];
-+      volatile u_int16_t      isp_lastmbxcmd; /* last mbox command sent */
-+      volatile u_int16_t      isp_mbxwrk0;
-+      volatile u_int16_t      isp_mbxwrk1;
-+      volatile u_int16_t      isp_mbxwrk2;
-+      void *                  isp_mbxworkp;
-+
-+      /*
-+       * Active commands are stored here, indexed by handle functions.
-+       */
-+      XS_T **isp_xflist;
-+
-+      /*
-+       * request/result queue pointers and dma handles for them.
-+       */
-+      caddr_t                 isp_rquest;
-+      caddr_t                 isp_result;
-+      isp_dma_addr_t          isp_rquest_dma;
-+      isp_dma_addr_t          isp_result_dma;
-+} ispsoftc_t;
-+
-+#define       SDPARAM(isp)    ((sdparam *) (isp)->isp_param)
-+#define       FCPARAM(isp)    ((fcparam *) (isp)->isp_param)
-+
-+/*
-+ * ISP Driver Run States
-+ */
-+#define       ISP_NILSTATE    0
-+#define       ISP_RESETSTATE  1
-+#define       ISP_INITSTATE   2
-+#define       ISP_RUNSTATE    3
-+
-+/*
-+ * ISP Configuration Options
-+ */
-+#define       ISP_CFG_NORELOAD        0x80    /* don't download f/w */
-+#define       ISP_CFG_NONVRAM         0x40    /* ignore NVRAM */
-+#define       ISP_CFG_TWOGB           0x20    /* force 2GB connection (23XX only) */
-+#define       ISP_CFG_ONEGB           0x10    /* force 1GB connection (23XX only) */
-+#define       ISP_CFG_FULL_DUPLEX     0x01    /* Full Duplex (Fibre Channel only) */
-+#define       ISP_CFG_PORT_PREF       0x0C    /* Mask for Port Prefs (2200 only) */
-+#define       ISP_CFG_LPORT           0x00    /* prefer {N/F}L-Port connection */
-+#define       ISP_CFG_NPORT           0x04    /* prefer {N/F}-Port connection */
-+#define       ISP_CFG_NPORT_ONLY      0x08    /* insist on {N/F}-Port connection */
-+#define       ISP_CFG_LPORT_ONLY      0x0C    /* insist on {N/F}L-Port connection */
-+#define       ISP_CFG_OWNWWPN         0x100   /* override NVRAM wwpn */
-+#define       ISP_CFG_OWNWWNN         0x200   /* override NVRAM wwnn */
-+#define       ISP_CFG_OWNFSZ          0x400   /* override NVRAM frame size */
-+#define       ISP_CFG_OWNLOOPID       0x800   /* override NVRAM loopid */
-+#define       ISP_CFG_OWNEXCTHROTTLE  0x1000  /* override NVRAM execution throttle */
-+
-+/*
-+ * Prior to calling isp_reset for the first time, the outer layer
-+ * should set isp_role to one of NONE, INITIATOR, TARGET, BOTH.
-+ *
-+ * If you set ISP_ROLE_NONE, the cards will be reset, new firmware loaded,
-+ * NVRAM read, and defaults set, but any further initialization (e.g.
-+ * INITIALIZE CONTROL BLOCK commands for 2X00 cards) won't be done.
-+ *
-+ * If INITIATOR MODE isn't set, attempts to run commands will be stopped
-+ * at isp_start and completed with the moral equivalent of SELECTION TIMEOUT.
-+ *
-+ * If TARGET MODE is set, it doesn't mean that the rest of target mode support
-+ * needs to be enabled, or will even work. What happens with the 2X00 cards
-+ * here is that if you have enabled it with TARGET MODE as part of the ICB
-+ * options, but you haven't given the f/w any ram resources for ATIOs or
-+ * Immediate Notifies, the f/w just handles what it can and you never see
-+ * anything. Basically, it sends a single byte of data (the first byte,
-+ * which you can set as part of the INITIALIZE CONTROL BLOCK command) for
-+ * INQUIRY, and sends back QUEUE FULL status for any other command.
-+ *
-+ */
-+#define       ISP_ROLE_NONE           0x0
-+#define       ISP_ROLE_INITIATOR      0x1
-+#define       ISP_ROLE_TARGET         0x2
-+#define       ISP_ROLE_BOTH           (ISP_ROLE_TARGET|ISP_ROLE_INITIATOR)
-+#define       ISP_ROLE_EITHER         ISP_ROLE_BOTH
-+#ifndef       ISP_DEFAULT_ROLES
-+#define       ISP_DEFAULT_ROLES       ISP_ROLE_INITIATOR
-+#endif
-+
-+
-+/*
-+ * Firmware related defines
-+ */
-+#define       ISP_CODE_ORG                    0x1000  /* default f/w code start */
-+#define       ISP_CODE_ORG_2300               0x0800  /* ..except for 2300s */
-+#define       ISP_FW_REV(maj, min, mic)       ((maj << 24) | (min << 16) | mic)
-+#define       ISP_FW_MAJOR(code)              ((code >> 24) & 0xff)
-+#define       ISP_FW_MINOR(code)              ((code >> 16) & 0xff)
-+#define       ISP_FW_MICRO(code)              ((code >>  8) & 0xff)
-+#define       ISP_FW_REVX(xp)                 ((xp[0]<<24) | (xp[1] << 16) | xp[2])
-+#define       ISP_FW_MAJORX(xp)               (xp[0])
-+#define       ISP_FW_MINORX(xp)               (xp[1])
-+#define       ISP_FW_MICROX(xp)               (xp[2])
-+#define       ISP_FW_NEWER_THAN(i, major, minor, micro)               \
-+ (ISP_FW_REVX((i)->isp_fwrev) > ISP_FW_REV(major, minor, micro))
-+
-+/*
-+ * Bus (implementation) types
-+ */
-+#define       ISP_BT_PCI              0       /* PCI Implementations */
-+#define       ISP_BT_SBUS             1       /* SBus Implementations */
-+
-+/*
-+ * If we have not otherwise defined SBus support away make sure
-+ * it is defined here such that the code is included as default
-+ */
-+#ifndef       ISP_SBUS_SUPPORTED
-+#define       ISP_SBUS_SUPPORTED      1
-+#endif
-+
-+/*
-+ * Chip Types
-+ */
-+#define       ISP_HA_SCSI             0xf
-+#define       ISP_HA_SCSI_UNKNOWN     0x1
-+#define       ISP_HA_SCSI_1020        0x2
-+#define       ISP_HA_SCSI_1020A       0x3
-+#define       ISP_HA_SCSI_1040        0x4
-+#define       ISP_HA_SCSI_1040A       0x5
-+#define       ISP_HA_SCSI_1040B       0x6
-+#define       ISP_HA_SCSI_1040C       0x7
-+#define       ISP_HA_SCSI_1240        0x8
-+#define       ISP_HA_SCSI_1080        0x9
-+#define       ISP_HA_SCSI_1280        0xa
-+#define       ISP_HA_SCSI_10160       0xb
-+#define       ISP_HA_SCSI_12160       0xc
-+#define       ISP_HA_FC               0xf0
-+#define       ISP_HA_FC_2100          0x10
-+#define       ISP_HA_FC_2200          0x20
-+#define       ISP_HA_FC_2300          0x30
-+#define       ISP_HA_FC_2312          0x40
-+
-+#define       IS_SCSI(isp)    (isp->isp_type & ISP_HA_SCSI)
-+#define       IS_1240(isp)    (isp->isp_type == ISP_HA_SCSI_1240)
-+#define       IS_1080(isp)    (isp->isp_type == ISP_HA_SCSI_1080)
-+#define       IS_1280(isp)    (isp->isp_type == ISP_HA_SCSI_1280)
-+#define       IS_10160(isp)   (isp->isp_type == ISP_HA_SCSI_10160)
-+#define       IS_12160(isp)   (isp->isp_type == ISP_HA_SCSI_12160)
-+
-+#define       IS_12X0(isp)    (IS_1240(isp) || IS_1280(isp))
-+#define       IS_1X160(isp)   (IS_10160(isp) || IS_12160(isp))
-+#define       IS_DUALBUS(isp) (IS_12X0(isp) || IS_12160(isp))
-+#define       IS_ULTRA2(isp)  (IS_1080(isp) || IS_1280(isp) || IS_1X160(isp))
-+#define       IS_ULTRA3(isp)  (IS_1X160(isp))
-+
-+#define       IS_FC(isp)      ((isp)->isp_type & ISP_HA_FC)
-+#define       IS_2100(isp)    ((isp)->isp_type == ISP_HA_FC_2100)
-+#define       IS_2200(isp)    ((isp)->isp_type == ISP_HA_FC_2200)
-+#define       IS_23XX(isp)    ((isp)->isp_type >= ISP_HA_FC_2300)
-+#define       IS_2300(isp)    ((isp)->isp_type == ISP_HA_FC_2300)
-+#define       IS_2312(isp)    ((isp)->isp_type == ISP_HA_FC_2312)
-+
-+/*
-+ * DMA cookie macros
-+ */
-+#ifdef        ISP_DAC_SUPPORTRED
-+#define       DMA_WD3(x)      (((x) >> 48) & 0xffff)
-+#define       DMA_WD2(x)      (((x) >> 32) & 0xffff)
-+#else
-+#define       DMA_WD3(x)      0
-+#define       DMA_WD2(x)      0
-+#endif
-+#define       DMA_WD1(x)      (((x) >> 16) & 0xffff)
-+#define       DMA_WD0(x)      (((x) & 0xffff))
-+
-+/*
-+ * Core System Function Prototypes
-+ */
-+
-+/*
-+ * Reset Hardware. Totally. Assumes that you'll follow this with
-+ * a call to isp_init.
-+ */
-+void isp_reset(struct ispsoftc *);
-+
-+/*
-+ * Initialize Hardware to known state
-+ */
-+void isp_init(struct ispsoftc *);
-+
-+/*
-+ * Reset the ISP and call completion for any orphaned commands.
-+ */
-+void isp_reinit(struct ispsoftc *);
-+
-+#ifdef        ISP_FW_CRASH_DUMP
-+/*
-+ * Dump firmware entry point.
-+ */
-+void isp_fw_dump(struct ispsoftc *isp);
-+#endif
-+
-+/*
-+ * Internal Interrupt Service Routine
-+ *
-+ * The outer layers do the spade work to get the appropriate status register,
-+ * semaphore register and first mailbox register (if appropriate). This also
-+ * means that most spurious/bogus interrupts not for us can be filtered first.
-+ */
-+void isp_intr(struct ispsoftc *, u_int16_t, u_int16_t, u_int16_t);
-+
-+
-+/*
-+ * Command Entry Point- Platform Dependent layers call into this
-+ */
-+int isp_start(XS_T *);
-+/* these values are what isp_start returns */
-+#define       CMD_COMPLETE    101     /* command completed */
-+#define       CMD_EAGAIN      102     /* busy- maybe retry later */
-+#define       CMD_QUEUED      103     /* command has been queued for execution */
-+#define       CMD_RQLATER     104     /* requeue this command later */
-+
-+/*
-+ * Command Completion Point- Core layers call out from this with completed cmds
-+ */
-+void isp_done(XS_T *);
-+
-+/*
-+ * Platform Dependent to External to Internal Control Function
-+ *
-+ * Assumes locks are held on entry. You should note that with many of
-+ * these commands and locks may be released while this is occurring.
-+ *
-+ * A few notes about some of these functions:
-+ *
-+ * ISPCTL_FCLINK_TEST tests to make sure we have good fibre channel link.
-+ * The argument is a pointer to an integer which is the time, in microseconds,
-+ * we should wait to see whether we have good link. This test, if successful,
-+ * lets us know our connection topology and our Loop ID/AL_PA and so on.
-+ * You can't get anywhere without this.
-+ *
-+ * ISPCTL_SCAN_FABRIC queries the name server (if we're on a fabric) for
-+ * all entities using the FC Generic Services subcommand GET ALL NEXT.
-+ * For each found entity, an ISPASYNC_FABRICDEV event is generated (see
-+ * below).
-+ *
-+ * ISPCTL_SCAN_LOOP does a local loop scan. This is only done if the connection
-+ * topology is NL or FL port (private or public loop). Since the Qlogic f/w
-+ * 'automatically' manages local loop connections, this function essentially
-+ * notes the arrival, departure, and possible shuffling around of local loop
-+ * entities. Thus for each arrival and departure this generates an isp_async
-+ * event of ISPASYNC_PROMENADE (see below).
-+ *
-+ * ISPCTL_PDB_SYNC is somewhat misnamed. It actually is the final step, in
-+ * order, of ISPCTL_FCLINK_TEST, ISPCTL_SCAN_FABRIC, and ISPCTL_SCAN_LOOP.
-+ * The main purpose of ISPCTL_PDB_SYNC is to complete management of logging
-+ * and logging out of fabric devices (if one is on a fabric) and then marking
-+ * the 'loop state' as being ready to now be used for sending commands to
-+ * devices. Originally fabric name server and local loop scanning were
-+ * part of this function. It's now been separated to allow for finer control.
-+ */
-+typedef enum {
-+      ISPCTL_RESET_BUS,               /* Reset Bus */
-+      ISPCTL_RESET_DEV,               /* Reset Device */
-+      ISPCTL_ABORT_CMD,               /* Abort Command */
-+      ISPCTL_UPDATE_PARAMS,           /* Update Operating Parameters (SCSI) */
-+      ISPCTL_FCLINK_TEST,             /* Test FC Link Status */
-+      ISPCTL_SCAN_FABRIC,             /* (Re)scan Fabric Name Server */
-+      ISPCTL_SCAN_LOOP,               /* (Re)scan Local Loop */
-+      ISPCTL_PDB_SYNC,                /* Synchronize Port Database */
-+      ISPCTL_SEND_LIP,                /* Send a LIP */
-+      ISPCTL_GET_POSMAP,              /* Get FC-AL position map */
-+      ISPCTL_RUN_MBOXCMD,             /* run a mailbox command */
-+      ISPCTL_TOGGLE_TMODE             /* toggle target mode */
-+} ispctl_t;
-+int isp_control(struct ispsoftc *, ispctl_t, void *);
-+
-+
-+/*
-+ * Platform Dependent to Internal to External Control Function
-+ * (each platform must provide such a function)
-+ *
-+ * Assumes locks are held.
-+ *
-+ * A few notes about some of these functions:
-+ *
-+ * ISPASYNC_CHANGE_NOTIFY notifies the outer layer that a change has
-+ * occurred that invalidates the list of fabric devices known and/or
-+ * the list of known loop devices. The argument passed is a pointer
-+ * whose values are defined below  (local loop change, name server
-+ * change, other). 'Other' may simply be a LIP, or a change in
-+ * connection topology.
-+ *
-+ * ISPASYNC_FABRIC_DEV announces the next element in a list of
-+ * fabric device names we're getting out of the name server. The
-+ * argument points to a GET ALL NEXT response structure. The list
-+ * is known to terminate with an entry that refers to ourselves.
-+ * One of the main purposes of this function is to allow outer
-+ * layers, which are OS dependent, to set policy as to which fabric
-+ * devices might actually be logged into (and made visible) later
-+ * at ISPCTL_PDB_SYNC time. Since there's a finite number of fabric
-+ * devices that we can log into (256 less 3 'reserved' for F-port
-+ * topologies), and fabrics can grow up to 8 million or so entries
-+ * (24 bits of Port Address, less a wad of reserved spaces), clearly
-+ * we had better let the OS determine login policy.
-+ *
-+ * ISPASYNC_PROMENADE has an argument that is a pointer to an integer which
-+ * is an index into the portdb in the softc ('target'). Whether that entry's
-+ * valid tag is set or not says whether something has arrived or departed.
-+ * The name refers to a favorite pastime of many city dwellers- watching
-+ * people come and go, talking of Michaelangelo, and so on..
-+ *
-+ * ISPASYNC_UNHANDLED_RESPONSE gives outer layers a chance to parse a
-+ * response queue entry not otherwise handled. The outer layer should
-+ * return non-zero if it handled it. The 'arg' points to an unmassaged
-+ * response queue entry.
-+ */
-+
-+typedef enum {
-+      ISPASYNC_NEW_TGT_PARAMS,        /* New Target Parameters Negotiated */
-+      ISPASYNC_BUS_RESET,             /* Bus Was Reset */
-+      ISPASYNC_LOOP_DOWN,             /* FC Loop Down */
-+      ISPASYNC_LOOP_UP,               /* FC Loop Up */
-+      ISPASYNC_LIP,                   /* LIP Received */
-+      ISPASYNC_LOOP_RESET,            /* Loop Reset Received */
-+      ISPASYNC_CHANGE_NOTIFY,         /* FC Change Notification */
-+      ISPASYNC_FABRIC_DEV,            /* FC Fabric Device Arrival */
-+      ISPASYNC_PROMENADE,             /* FC Objects coming && going */
-+      ISPASYNC_TARGET_MESSAGE,        /* target message */
-+      ISPASYNC_TARGET_EVENT,          /* target asynchronous event */
-+      ISPASYNC_TARGET_ACTION,         /* other target command action */
-+      ISPASYNC_CONF_CHANGE,           /* Platform Configuration Change */
-+      ISPASYNC_UNHANDLED_RESPONSE,    /* Unhandled Response Entry */
-+      ISPASYNC_FW_CRASH,              /* Firmware has crashed */
-+      ISPASYNC_FW_DUMPED,             /* Firmware crashdump taken */
-+      ISPASYNC_FW_RESTARTED           /* Firmware has been restarted */
-+} ispasync_t;
-+int isp_async(struct ispsoftc *, ispasync_t, void *);
-+
-+#define       ISPASYNC_CHANGE_PDB     ((void *) 0)
-+#define       ISPASYNC_CHANGE_SNS     ((void *) 1)
-+#define       ISPASYNC_CHANGE_OTHER   ((void *) 2)
-+
-+/*
-+ * Platform Dependent Error and Debug Printout
-+ */
-+#ifdef        __GNUC__
-+void isp_prt(struct ispsoftc *, int level, const char *, ...)
-+      __attribute__((__format__(__printf__,3,4)));
-+#else
-+void isp_prt(struct ispsoftc *, int level, const char *, ...);
-+#endif
-+
-+#define       ISP_LOGALL      0x0     /* log always */
-+#define       ISP_LOGCONFIG   0x1     /* log configuration messages */
-+#define       ISP_LOGINFO     0x2     /* log informational messages */
-+#define       ISP_LOGWARN     0x4     /* log warning messages */
-+#define       ISP_LOGERR      0x8     /* log error messages */
-+#define       ISP_LOGDEBUG0   0x10    /* log simple debug messages */
-+#define       ISP_LOGDEBUG1   0x20    /* log intermediate debug messages */
-+#define       ISP_LOGDEBUG2   0x40    /* log most debug messages */
-+#define       ISP_LOGDEBUG3   0x80    /* log high frequency debug messages */
-+#define       ISP_LOGDEBUG4   0x100   /* log high frequency debug messages */
-+#define       ISP_LOGTDEBUG0  0x200   /* log simple debug messages (target mode) */
-+#define       ISP_LOGTDEBUG1  0x400   /* log intermediate debug messages (target) */
-+#define       ISP_LOGTDEBUG2  0x800   /* log all debug messages (target) */
-+
-+/*
-+ * Each Platform provides it's own isposinfo substructure of the ispsoftc
-+ * defined above.
-+ *
-+ * Each platform must also provide the following macros/defines:
-+ *
-+ *
-+ *    INLINE          -       platform specific define for 'inline' functions
-+ *
-+ *    ISP_DAC_SUPPORTED -     Is DAC (Dual Address Cycle) is supported?
-+ *                            Basically means whether or not DMA for PCI
-+ *                            PCI cards (Ultra2 or better or FC) works
-+ *                            above 4GB.
-+ *
-+ *    ISP2100_SCRLEN  -       length for the Fibre Channel scratch DMA area
-+ *
-+ *    MEMZERO(dst, src)                       platform zeroing function
-+ *    MEMCPY(dst, src, count)                 platform copying function
-+ *    SNPRINTF(buf, bufsize, fmt, ...)        snprintf
-+ *    USEC_DELAY(usecs)                       microsecond spindelay function
-+ *    USEC_SLEEP(isp, usecs)                  microsecond sleep function
-+ *
-+ *    NANOTIME_T                              nanosecond time type
-+ *
-+ *    GET_NANOTIME(NANOTIME_T *)              get current nanotime.
-+ *
-+ *    GET_NANOSEC(NANOTIME_T *)               get u_int64_t from NANOTIME_T
-+ *
-+ *    NANOTIME_SUB(NANOTIME_T *, NANOTIME_T *)
-+ *                                            subtract two NANOTIME_T values
-+ *
-+ *
-+ *    MAXISPREQUEST(struct ispsoftc *)        maximum request queue size
-+ *                                            for this particular board type
-+ *
-+ *    MEMORYBARRIER(struct ispsoftc *, barrier_type, offset, size)
-+ *
-+ *            Function/Macro the provides memory synchronization on
-+ *            various objects so that the ISP's and the system's view
-+ *            of the same object is consistent.
-+ *
-+ *    MBOX_ACQUIRE(struct ispsoftc *)         acquire lock on mailbox regs
-+ *    MBOX_WAIT_COMPLETE(struct ispsoftc *)   wait for mailbox cmd to be done
-+ *    MBOX_NOTIFY_COMPLETE(struct ispsoftc *) notification of mbox cmd donee
-+ *    MBOX_RELEASE(struct ispsoftc *)         release lock on mailbox regs
-+ *
-+ *    FC_SCRATCH_ACQUIRE(struct ispsoftc *)   acquire lock on FC scratch area
-+ *    FC_SCRATCH_RELEASE(struct ispsoftc *)   acquire lock on FC scratch area
-+ *
-+ *    SCSI_GOOD       SCSI 'Good' Status
-+ *    SCSI_CHECK      SCSI 'Check Condition' Status
-+ *    SCSI_BUSY       SCSI 'Busy' Status
-+ *    SCSI_QFULL      SCSI 'Queue Full' Status
-+ *
-+ *    XS_T            Platform SCSI transaction type (i.e., command for HBA)
-+ *    XS_ISP(xs)      gets an instance out of an XS_T
-+ *    XS_CHANNEL(xs)  gets the channel (bus # for DUALBUS cards) ""
-+ *    XS_TGT(xs)      gets the target ""
-+ *    XS_LUN(xs)      gets the lun ""
-+ *    XS_CDBP(xs)     gets a pointer to the scsi CDB ""
-+ *    XS_CDBLEN(xs)   gets the CDB's length ""
-+ *    XS_XFRLEN(xs)   gets the associated data transfer length ""
-+ *    XS_TIME(xs)     gets the time (in milliseconds) for this command
-+ *    XS_RESID(xs)    gets the current residual count
-+ *    XS_STSP(xs)     gets a pointer to the SCSI status byte ""
-+ *    XS_SNSP(xs)     gets a pointer to the associate sense data
-+ *    XS_SNSLEN(xs)   gets the length of sense data storage
-+ *    XS_SNSKEY(xs)   dereferences XS_SNSP to get the current stored Sense Key
-+ *    XS_TAG_P(xs)    predicate of whether this command should be tagged
-+ *    XS_TAG_TYPE(xs) which type of tag to use
-+ *    XS_SETERR(xs)   set error state
-+ *
-+ *            HBA_NOERROR     command has no erros
-+ *            HBA_BOTCH       hba botched something
-+ *            HBA_CMDTIMEOUT  command timed out
-+ *            HBA_SELTIMEOUT  selection timed out (also port logouts for FC)
-+ *            HBA_TGTBSY      target returned a BUSY status
-+ *            HBA_BUSRESET    bus reset destroyed command
-+ *            HBA_ABORTED     command was aborted (by request)
-+ *            HBA_DATAOVR     a data overrun was detected
-+ *            HBA_ARQFAIL     Automatic Request Sense failed
-+ *
-+ *    XS_ERR(xs)      return current error state
-+ *    XS_NOERR(xs)    there is no error currently set
-+ *    XS_INITERR(xs)  initialize error state
-+ *
-+ *    XS_SAVE_SENSE(xs, sp)           save sense data
-+ *
-+ *    XS_SET_STATE_STAT(isp, sp, xs)  platform dependent interpreter of
-+ *                                    response queue entry status bits
-+ *
-+ *
-+ *    DEFAULT_IID(struct ispsoftc *)          Default SCSI initiator ID
-+ *    DEFAULT_LOOPID(struct ispsoftc *)       Default FC Loop ID
-+ *    DEFAULT_NODEWWN(struct ispsoftc *)      Default Node WWN
-+ *    DEFAULT_PORTWWN(struct ispsoftc *)      Default Port WWN
-+ *    DEFAULT_FRAMESIZE(struct ispsoftc *)    Default Frame Size
-+ *    DEFAULT_EXEC_THROTTLE(struct ispsoftc *) Default Execution Throttle
-+ *            These establish reasonable defaults for each platform.
-+ *            These must be available independent of card NVRAM and are
-+ *            to be used should NVRAM not be readable.
-+ *
-+ *    ISP_NODEWWN(struct ispsoftc *)  FC Node WWN to use
-+ *    ISP_PORTWWN(struct ispsoftc *)  FC Port WWN to use
-+ *
-+ *            These are to be used after NVRAM is read. The tags
-+ *            in fcparam.isp_{node,port}wwn reflect the values
-+ *            read from NVRAM (possibly corrected for card botches).
-+ *            Each platform can take that information and override
-+ *            it or ignore and return the Node and Port WWNs to be
-+ *            used when sending the Qlogic f/w the Initialization Control
-+ *            Block.
-+ *
-+ *    (XXX these do endian specific transformations- in transition XXX)
-+ *
-+ *    ISP_IOXPUT_8(struct ispsoftc *, u_int8_t srcval, u_int8_t *dstptr)
-+ *    ISP_IOXPUT_16(struct ispsoftc *, u_int16_t srcval, u_int16_t *dstptr)
-+ *    ISP_IOXPUT_32(struct ispsoftc *, u_int32_t srcval, u_int32_t *dstptr)
-+ *
-+ *    ISP_IOXGET_8(struct ispsoftc *, u_int8_t *srcptr, u_int8_t dstrval)
-+ *    ISP_IOXGET_16(struct ispsoftc *, u_int16_t *srcptr, u_int16_t dstrval)
-+ *    ISP_IOXGET_32(struct ispsoftc *, u_int32_t *srcptr, u_int32_t dstrval)
-+ *
-+ *    ISP_SWIZZLE_NVRAM_WORD(struct ispsoftc *, u_int16_t *)
-+ */
-+
-+#endif        /* _ISPVAR_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/scsi/isp/Makefile       2003-07-19 17:06:33.000000000 -0700
-@@ -0,0 +1,7 @@
-+obj-$(CONFIG_SCSI_FERAL_ISP)  += isp_mod.o
-+
-+EXTRA_CFLAGS                  += -Idrivers/scsi -g
-+EXTRA_LDFLAGS                 += -g
-+
-+isp_mod-y                     += isp_pci.o isp_linux.o isp.o \
-+                              isp_cb_ops.o isp_target.o
---- linux-2.6.0-test1/drivers/scsi/jazz_esp.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/jazz_esp.c 2003-07-19 17:03:50.000000000 -0700
-@@ -11,7 +11,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
---- linux-2.6.0-test1/drivers/scsi/Kconfig     2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/Kconfig    2003-07-19 17:06:33.000000000 -0700
-@@ -1834,6 +1834,15 @@ config WD33C93_PIO
- #      bool 'Cyberstorm Mk III SCSI support (EXPERIMENTAL)' CONFIG_CYBERSTORMIII_SCSI
- #      bool 'GVP Turbo 040/060 SCSI support (EXPERIMENTAL)' CONFIG_GVP_TURBO_SCSI
-+
-+config SCSI_FERAL_ISP
-+      tristate "Feral ISP driver for 10x0/12x0/2x00"
-+      depends on SCSI
-+      help
-+        Feral Driver for the following qlogic ISP chips
-+        1020/1040/1080/1280/12160/2100/2200/2300
-+        If this doesn't work, there are other drivers for these chips
-+        below.
- endmenu
- source "drivers/scsi/pcmcia/Kconfig"
---- linux-2.6.0-test1/drivers/scsi/lasi700.c   2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/lasi700.c  2003-07-19 17:03:50.000000000 -0700
-@@ -128,7 +128,8 @@ lasi700_driver_callback(struct parisc_de
-       }
-       dev_set_drvdata(&dev->dev, host);
--      scsi_add_host(host, &dev->dev);
-+      scsi_add_host(host, &dev->dev); /* XXX handle failure */
-+      scsi_scan_host(host);
-       return 0;
-@@ -165,7 +166,6 @@ static void __exit
- lasi700_exit(void)
- {
-       unregister_parisc_driver(&lasi700_driver);
--      scsi_sysfs_release_attributes(&lasi700_template);
- }
- module_init(lasi700_init);
---- linux-2.6.0-test1/drivers/scsi/mac53c94.c  2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/mac53c94.c 2003-07-19 17:03:50.000000000 -0700
-@@ -12,7 +12,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/spinlock.h>
---- linux-2.6.0-test1/drivers/scsi/mac_esp.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/mac_esp.c  2003-07-19 17:03:50.000000000 -0700
-@@ -19,7 +19,7 @@
- #include <linux/ctype.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/mac_scsi.c  2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/mac_scsi.c 2003-07-19 17:03:50.000000000 -0700
-@@ -39,7 +39,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/Makefile    2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/Makefile   2003-07-19 17:06:33.000000000 -0700
-@@ -70,6 +70,7 @@ obj-$(CONFIG_SCSI_NCR53C406A)        += NCR53c4
- obj-$(CONFIG_SCSI_NCR_D700)   += NCR_D700.o 53c700.o
- obj-$(CONFIG_SCSI_NCR_Q720)   += NCR_Q720_mod.o
- obj-$(CONFIG_SCSI_SYM53C416)  += sym53c416.o
-+obj-$(CONFIG_SCSI_FERAL_ISP)  += isp/
- obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas.o
- obj-$(CONFIG_SCSI_QLOGIC_ISP) += qlogicisp.o 
- obj-$(CONFIG_SCSI_QLOGIC_FC)  += qlogicfc.o 
---- linux-2.6.0-test1/drivers/scsi/mca_53c9x.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/scsi/mca_53c9x.c        2003-07-19 17:03:50.000000000 -0700
-@@ -37,7 +37,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/mca-legacy.h>
---- linux-2.6.0-test1/drivers/scsi/megaraid.c  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/megaraid.c 2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,7 @@
- #include <linux/mm.h>
- #include <linux/fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/uaccess.h>
- #include <asm/io.h>
- #include <linux/delay.h>
---- linux-2.6.0-test1/drivers/scsi/mesh.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/mesh.c     2003-07-19 17:03:50.000000000 -0700
-@@ -21,7 +21,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/mvme147.c   2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/scsi/mvme147.c  2003-07-19 17:03:50.000000000 -0700
-@@ -1,6 +1,6 @@
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/mvme16x.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/mvme16x.c  2003-07-19 17:03:50.000000000 -0700
-@@ -5,7 +5,7 @@
-  */
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
---- linux-2.6.0-test1/drivers/scsi/NCR53c406a.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/NCR53c406a.c       2003-07-19 17:05:05.000000000 -0700
-@@ -51,7 +51,7 @@
- #include <asm/bitops.h>
- #include <asm/irq.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- #include "scsi.h"
- #include "hosts.h"
-@@ -450,6 +450,7 @@ static __inline__ int NCR53c406a_pio_wri
- static int __init NCR53c406a_detect(Scsi_Host_Template * tpnt)
- {
-+      int present = 0;
-       struct Scsi_Host *shpnt = NULL;
- #ifndef PORT_BASE
-       int i;
-@@ -522,7 +523,7 @@ static int __init NCR53c406a_detect(Scsi
-       DEB(printk("NCR53c406a: using port_base 0x%x\n", port_base));
--      tpnt->present = 1;
-+      present = 1;
-       tpnt->proc_name = "NCR53c406a";
-       shpnt = scsi_register(tpnt, 0);
-@@ -576,7 +577,7 @@ static int __init NCR53c406a_detect(Scsi
-       sprintf(info_msg, "NCR53c406a at 0x%x, IRQ %d, %s PIO mode.", port_base, irq_level, fast_pio ? "fast" : "slow");
- #endif
--      return (tpnt->present);
-+      return (present);
- #if USE_DMA
-       err_free_irq:
---- linux-2.6.0-test1/drivers/scsi/ncr53c8xx.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/ncr53c8xx.c        2003-07-19 17:03:50.000000000 -0700
-@@ -140,7 +140,7 @@
- #include <linux/timer.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,35)
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/NCR53C9x.c  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/NCR53C9x.c 2003-07-19 17:03:50.000000000 -0700
-@@ -29,7 +29,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
---- linux-2.6.0-test1/drivers/scsi/NCR_D700.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/NCR_D700.c 2003-07-19 17:03:50.000000000 -0700
-@@ -218,7 +218,8 @@ NCR_D700_probe_one(struct NCR_D700_priva
-               goto irq_failed;
-       }
--      scsi_add_host(host, p->dev);
-+      scsi_add_host(host, p->dev); /* XXX handle failure */
-+      scsi_scan_host(host);
-       p->hosts[siop] = host;
-       hostdata->dev = p->dev;
-@@ -387,7 +388,6 @@ static int __init NCR_D700_init(void)
- static void __exit NCR_D700_exit(void)
- {
-       mca_unregister_driver(&NCR_D700_driver);
--      scsi_sysfs_release_attributes(&NCR_D700_driver_template);
- }
- module_init(NCR_D700_init);
---- linux-2.6.0-test1/drivers/scsi/NCR_Q720.c  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/NCR_Q720.c 2003-07-19 17:03:50.000000000 -0700
-@@ -85,6 +85,7 @@ NCR_Q720_probe_one(struct NCR_Q720_priva
-       __u8 scsr1 = readb(vaddr + NCR_Q720_SCSR_OFFSET + 1);
-       __u8 differential = readb(vaddr + NCR_Q720_SCSR_OFFSET) & 0x20;
-       __u8 version;
-+      int error;
-       scsi_id = scsr1 >> 4;
-       /* enable burst length 16 (FIXME: should allow this) */
-@@ -120,9 +121,12 @@ NCR_Q720_probe_one(struct NCR_Q720_priva
-       scsr1 &= ~0x01;
-       writeb(scsr1, vaddr + NCR_Q720_SCSR_OFFSET + 1);
--      scsi_add_host(p->hosts[siop], p->dev);
--
--      return 0;
-+      error = scsi_add_host(p->hosts[siop], p->dev);
-+      if (error)
-+              ncr53c8xx_release(p->hosts[siop]);
-+      else
-+              scsi_scan_host(p->hosts[siop]);
-+      return error;
-  fail:
-       return -ENODEV;
-@@ -347,7 +351,6 @@ static void __exit
- NCR_Q720_exit(void)
- {
-       mca_unregister_driver(&NCR_Q720_driver);
--      //scsi_sysfs_release_attributes(&NCR_Q720_driver_template);
- }
- module_init(NCR_Q720_init);
---- linux-2.6.0-test1/drivers/scsi/nsp32.c     2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/nsp32.c    2003-07-19 17:03:50.000000000 -0700
-@@ -25,7 +25,7 @@
- #include <linux/timer.h>
- #include <linux/ioport.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/pci.h>
- #include <linux/delay.h>
-@@ -1820,7 +1820,8 @@ static int nsp32_detect(struct pci_dev *
-               goto free_irq;
-         }
--      scsi_add_host(host, &pdev->dev);
-+      scsi_add_host(host, &pdev->dev); /* XXX handle failure */
-+      scsi_scan_host(host);
-       pci_set_drvdata(pdev, host);
-       return 0;
---- linux-2.6.0-test1/drivers/scsi/oktagon_esp.c       2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/scsi/oktagon_esp.c      2003-07-19 17:03:50.000000000 -0700
-@@ -20,7 +20,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/reboot.h>
---- linux-2.6.0-test1/drivers/scsi/osst.c      2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/osst.c     2003-07-19 17:03:50.000000000 -0700
-@@ -46,7 +46,7 @@ const char * osst_version = "0.99.0";
- #include <linux/spinlock.h>
- #include <linux/vmalloc.h>
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/devfs_fs_kernel.h>
- #include <asm/uaccess.h>
- #include <asm/dma.h>
---- linux-2.6.0-test1/drivers/scsi/pas16.c     2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pas16.c    2003-07-19 17:03:50.000000000 -0700
-@@ -117,7 +117,8 @@
- #include <linux/proc_fs.h>
- #include <linux/sched.h>
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <asm/dma.h>
-+#include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
---- linux-2.6.0-test1/drivers/scsi/pc980155.c  2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/pc980155.c 2003-07-19 17:03:50.000000000 -0700
-@@ -11,7 +11,7 @@
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/ioport.h>
- #include <linux/interrupt.h>
- #include <linux/types.h>
---- linux-2.6.0-test1/drivers/scsi/pci2000.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pci2000.c  2003-07-19 17:03:50.000000000 -0700
-@@ -35,7 +35,7 @@
-  ****************************************************************************/
- #define PCI2000_VERSION               "1.20"
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/drivers/scsi/pci2220i.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pci2220i.c 2003-07-19 17:03:50.000000000 -0700
-@@ -50,7 +50,7 @@
- #include <linux/sched.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/timer.h>
- #include <linux/spinlock.h>
---- linux-2.6.0-test1/drivers/scsi/pcmcia/aha152x_stub.c       2003-06-14 12:18:33.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/aha152x_stub.c      2003-07-19 17:03:50.000000000 -0700
-@@ -44,7 +44,7 @@
- #include <linux/ioport.h>
- #include <scsi/scsi.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <scsi/scsi_ioctl.h>
- #include "scsi.h"
-@@ -278,7 +278,8 @@ static void aha152x_config_cs(dev_link_t
-       goto cs_failed;
-     }
--    scsi_add_host(host, NULL);
-+    scsi_add_host(host, NULL); /* XXX handle failure */
-+    scsi_scan_host(host);
-     sprintf(info->node.dev_name, "scsi%d", host->host_no);
-     link->dev = &info->node;
---- linux-2.6.0-test1/drivers/scsi/pcmcia/fdomain_stub.c       2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/fdomain_stub.c      2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #include <linux/ioport.h>
- #include <scsi/scsi.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <scsi/scsi_ioctl.h>
- #include "scsi.h"
-@@ -254,7 +254,8 @@ static void fdomain_config(dev_link_t *l
-       goto cs_failed;
-     }
-  
--    scsi_add_host(host, NULL);
-+    scsi_add_host(host, NULL); /* XXX handle failure */
-+    scsi_scan_host(host);
-     sprintf(info->node.dev_name, "scsi%d", host->host_no);
-     link->dev = &info->node;
---- linux-2.6.0-test1/drivers/scsi/pcmcia/nsp_cs.c     2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/nsp_cs.c    2003-07-19 17:03:50.000000000 -0700
-@@ -44,7 +44,7 @@
- #include <linux/interrupt.h>
- #include <linux/module.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
- #include <asm/io.h>
-@@ -1773,7 +1773,8 @@ static void nsp_cs_config(dev_link_t *li
-                      req.Base+req.Size-1);
-       printk("\n");
--      scsi_add_host(host, NULL);
-+      scsi_add_host(host, NULL); /* XXX handle failure */
-+      scsi_scan_host(host);
-       link->state &= ~DEV_CONFIG_PENDING;
-       return;
---- linux-2.6.0-test1/drivers/scsi/pcmcia/qlogic_stub.c        2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/scsi/pcmcia/qlogic_stub.c       2003-07-19 17:03:50.000000000 -0700
-@@ -42,7 +42,7 @@
- #include <asm/io.h>
- #include <scsi/scsi.h>
- #include <linux/major.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <scsi/scsi_ioctl.h>
- #include "scsi.h"
-@@ -270,7 +270,8 @@ static void qlogic_config(dev_link_t * l
-       link->dev = &info->node;
-       info->host = host;
--      scsi_add_host(host, NULL);
-+      scsi_add_host(host, NULL); /* XXX handle failure */
-+      scsi_scan_host(host);
- out:
-       link->state &= ~DEV_CONFIG_PENDING;
---- linux-2.6.0-test1/drivers/scsi/pluto.c     2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/scsi/pluto.c    2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/ppa.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ppa.c      2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
- /* The following #define is to avoid a clash with hosts.c */
- #define PPA_CODE 1
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include <linux/parport.h>
- #include <linux/workqueue.h>
---- linux-2.6.0-test1/drivers/scsi/ppa.h       2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/scsi/ppa.h      2003-07-19 17:03:50.000000000 -0700
-@@ -82,7 +82,7 @@
- #include  <linux/delay.h>
- #include  <linux/proc_fs.h>
- #include  <linux/stat.h>
--#include  <linux/blk.h>
-+#include  <linux/blkdev.h>
- #include  <linux/sched.h>
- #include  <linux/interrupt.h>
---- linux-2.6.0-test1/drivers/scsi/psi240i.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/psi240i.c  2003-07-19 17:03:50.000000000 -0700
-@@ -26,7 +26,7 @@
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/types.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/qla1280.c   2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/scsi/qla1280.c  2003-07-19 17:03:50.000000000 -0700
-@@ -252,7 +252,7 @@
- #include <linux/timer.h>
- #include <linux/pci.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/workqueue.h>
- #include <linux/stat.h>
- #include <linux/slab.h>
-@@ -327,7 +327,7 @@
- /* 3.16 */
- #ifdef QLA_64BIT_PTR
- #define pci_dma_lo32(a)               (a & 0xffffffff)
--#define pci_dma_hi32(a)               (a >> 32)
-+#define pci_dma_hi32(a)               ((a >> 16)>>16)
- #else
- #define pci_dma_lo32(a)               (a & 0xffffffff)
- #define pci_dma_hi32(a)               0
---- linux-2.6.0-test1/drivers/scsi/qlogicfas.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/qlogicfas.c        2003-07-19 17:03:50.000000000 -0700
-@@ -127,7 +127,7 @@
- #endif
- #include <linux/module.h>
--#include <linux/blk.h>                /* to get disk capacity */
-+#include <linux/blkdev.h>             /* to get disk capacity */
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/init.h>
-@@ -140,6 +140,7 @@
- #include <asm/io.h>
- #include <asm/irq.h>
-+#include <asm/dma.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/scsi/qlogicfc.c  2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/scsi/qlogicfc.c 2003-07-19 17:03:50.000000000 -0700
-@@ -50,7 +50,7 @@
-  *
-  */
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/ioport.h>
---- linux-2.6.0-test1/drivers/scsi/qlogicisp.c 2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/scsi/qlogicisp.c        2003-07-19 17:03:50.000000000 -0700
-@@ -20,7 +20,7 @@
-  * General Public License for more details.
-  */
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/qlogicpti.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/qlogicpti.c        2003-07-19 17:03:50.000000000 -0700
-@@ -17,7 +17,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/scsicam.c   2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/scsi/scsicam.c  2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
- #include <linux/fs.h>
- #include <linux/genhd.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/buffer_head.h>
- #include <asm/unaligned.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/scsi_debug.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_debug.c       2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #include <linux/vmalloc.h>
- #include <linux/moduleparam.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsicam.h>
-@@ -687,7 +687,7 @@ static int resp_mode_sense(unsigned char
-       pcontrol = (cmd[2] & 0xc0) >> 6;
-       pcode = cmd[2] & 0x3f;
-       msense_6 = (MODE_SENSE == cmd[0]);
--      alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[6]);
-+      alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[8]);
-       /* printk(KERN_INFO "msense: dbd=%d pcontrol=%d pcode=%d "
-               "msense_6=%d alloc_len=%d\n", dbd, pcontrol, pcode, "
-               "msense_6, alloc_len); */
-@@ -1701,7 +1701,8 @@ static int sdebug_driver_probe(struct de
-                 printk(KERN_ERR "%s: scsi_add_host failed\n", __FUNCTION__);
-                 error = -ENODEV;
-               scsi_host_put(hpnt);
--        }
-+        } else
-+              scsi_scan_host(hpnt);
-         return error;
---- linux-2.6.0-test1/drivers/scsi/scsi.h      2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi.h     2003-07-19 17:03:50.000000000 -0700
-@@ -174,11 +174,6 @@ extern const char *scsi_extd_sense_forma
- #define SCSI_MLQUEUE_DEVICE_BUSY 0x1056
- #define SCSI_MLQUEUE_EH_RETRY    0x1057
--extern int scsi_sysfs_modify_sdev_attribute(struct device_attribute ***dev_attrs,
--                                          struct device_attribute *attr);
--extern int scsi_sysfs_modify_shost_attribute(struct class_device_attribute ***class_attrs,
--                                           struct class_device_attribute *attr);
--
- /*
-  * Legacy dma direction interfaces.
-  *
---- linux-2.6.0-test1/drivers/scsi/scsi_ioctl.c        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_ioctl.c       2003-07-19 17:03:50.000000000 -0700
-@@ -18,7 +18,7 @@
- #include <linux/mm.h>
- #include <linux/string.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsi_ioctl.h>
---- linux-2.6.0-test1/drivers/scsi/scsi_lib.c  2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_lib.c 2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
-  */
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/completion.h>
- #include <linux/kernel.h>
- #include <linux/mempool.h>
-@@ -444,22 +444,8 @@ static void scsi_run_queue(struct reques
-  */
- static void scsi_requeue_command(struct request_queue *q, struct scsi_cmnd *cmd)
- {
--      unsigned long flags;
--
--      spin_lock_irqsave(q->queue_lock, flags);
--      cmd->request->special = cmd;
--      if (blk_rq_tagged(cmd->request))
--              blk_queue_end_tag(q, cmd->request);
--
--      /*
--       * set REQ_SPECIAL - we have a command
--       * clear REQ_DONTPREP - we assume the sg table has been 
--       *      nuked so we need to set it up again.
--       */
--      cmd->request->flags |= REQ_SPECIAL;
-       cmd->request->flags &= ~REQ_DONTPREP;
--      __elv_add_request(q, cmd->request, 0, 0);
--      spin_unlock_irqrestore(q->queue_lock, flags);
-+      blk_insert_request(q, cmd->request, 1, cmd);
-       scsi_run_queue(q);
- }
-@@ -1213,9 +1199,7 @@ static void scsi_request_fn(struct reque
-        * later time.
-        */
-       spin_lock_irq(q->queue_lock);
--      if (blk_rq_tagged(req))
--              blk_queue_end_tag(q, req);
--      __elv_add_request(q, req, 0, 0);
-+      blk_requeue_request(q, req);
-       sdev->device_busy--;
-       if(sdev->device_busy == 0)
-               blk_plug_device(q);
-@@ -1426,17 +1410,17 @@ __scsi_mode_sense(struct scsi_request *s
-       if(scsi_status_is_good(sreq->sr_result)) {
-               data->header_length = header_length;
-               if(use_10_for_ms) {
--                      data->length = buffer[0]*256 + buffer[1];
-+                      data->length = buffer[0]*256 + buffer[1] + 2;
-                       data->medium_type = buffer[2];
-                       data->device_specific = buffer[3];
-                       data->longlba = buffer[4] & 0x01;
-                       data->block_descriptor_length = buffer[6]*256
-                               + buffer[7];
-               } else {
--                      data->length = buffer[0];
-+                      data->length = buffer[0] + 1;
-                       data->medium_type = buffer[1];
--                      data->device_specific = buffer[3];
--                      data->block_descriptor_length = buffer[4];
-+                      data->device_specific = buffer[2];
-+                      data->block_descriptor_length = buffer[3];
-               }
-       }
---- linux-2.6.0-test1/drivers/scsi/scsi_module.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_module.c      2003-07-19 17:05:05.000000000 -0700
-@@ -33,13 +33,14 @@ static int __init init_this_scsi_driver(
-       INIT_LIST_HEAD(&sht->legacy_hosts);
-       sht->detect(sht);
--      if (!sht->present)
-+      if (list_empty(&sht->legacy_hosts))
-               return -ENODEV;
-       list_for_each_entry(shost, &sht->legacy_hosts, sht_legacy_list) {
-               error = scsi_add_host(shost, NULL);
-               if (error)
-                       goto fail;
-+              scsi_scan_host(shost);
-       }
-       return 0;
-  fail:
---- linux-2.6.0-test1/drivers/scsi/scsi_pc98.c 2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/scsi/scsi_pc98.c        2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,7 @@
- #include <linux/fs.h>
- #include <linux/kernel.h>
- #include <linux/genhd.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/pc9800.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/scsi_priv.h 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_priv.h        2003-07-19 17:05:05.000000000 -0700
-@@ -90,11 +90,15 @@ extern void scsi_exit_queue(void);
- /* scsi_proc.c */
- #ifdef CONFIG_PROC_FS
-+extern void scsi_proc_hostdir_add(struct scsi_host_template *);
-+extern void scsi_proc_hostdir_rm(struct scsi_host_template *);
- extern void scsi_proc_host_add(struct Scsi_Host *);
- extern void scsi_proc_host_rm(struct Scsi_Host *);
- extern int scsi_init_procfs(void);
- extern void scsi_exit_procfs(void);
- #else
-+# define scsi_proc_hostdir_add(sht)   do { } while (0)
-+# define scsi_proc_hostdir_rm(sht)    do { } while (0)
- # define scsi_proc_host_add(shost)    do { } while (0)
- # define scsi_proc_host_rm(shost)     do { } while (0)
- # define scsi_init_procfs()           (0)
-@@ -102,7 +106,6 @@ extern void scsi_exit_procfs(void);
- #endif /* CONFIG_PROC_FS */
- /* scsi_scan.c */
--extern void scsi_scan_host(struct Scsi_Host *);
- extern void scsi_forget_host(struct Scsi_Host *);
- extern void scsi_free_sdev(struct scsi_device *);
- extern void scsi_free_shost(struct Scsi_Host *);
-@@ -117,11 +120,6 @@ extern void scsi_sysfs_remove_host(struc
- extern int scsi_sysfs_register(void);
- extern void scsi_sysfs_unregister(void);
--/* definitions for the linker default sections covering the host
-- * class and device attributes */
--extern struct class_device_attribute *scsi_sysfs_shost_attrs[];
--extern struct device_attribute *scsi_sysfs_sdev_attrs[];
--
- extern struct class shost_class;
- extern struct bus_type scsi_bus_type;
---- linux-2.6.0-test1/drivers/scsi/scsi_proc.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/scsi_proc.c        2003-07-19 17:05:05.000000000 -0700
-@@ -23,7 +23,7 @@
- #include <linux/slab.h>
- #include <linux/proc_fs.h>
- #include <linux/errno.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/seq_file.h>
- #include <asm/uaccess.h>
-@@ -41,6 +41,8 @@
- struct proc_dir_entry *proc_scsi;
- EXPORT_SYMBOL(proc_scsi);
-+/* Protect sht->present and sht->proc_dir */
-+static DECLARE_MUTEX(global_host_template_sem);
- static int proc_scsi_read(char *buffer, char **start, off_t offset,
-                         int length, int *eof, void *data)
-@@ -77,16 +79,10 @@ out:
-       return ret;
- }
--void scsi_proc_host_add(struct Scsi_Host *shost)
-+void scsi_proc_hostdir_add(struct scsi_host_template *sht)
- {
--      struct scsi_host_template *sht = shost->hostt;
--      struct proc_dir_entry *p;
--      char name[10];
--
--      if (!sht->proc_info)
--              return;
--
--      if (!sht->proc_dir) {
-+      down(&global_host_template_sem);
-+      if (!sht->present++) {
-               sht->proc_dir = proc_mkdir(sht->proc_name, proc_scsi);
-               if (!sht->proc_dir) {
-                       printk(KERN_ERR "%s: proc_mkdir failed for %s\n",
-@@ -95,6 +91,27 @@ void scsi_proc_host_add(struct Scsi_Host
-               }
-               sht->proc_dir->owner = sht->module;
-       }
-+      up(&global_host_template_sem);
-+}
-+
-+void scsi_proc_hostdir_rm(struct scsi_host_template *sht)
-+{
-+      down(&global_host_template_sem);
-+      if (!--sht->present && sht->proc_dir) {
-+              remove_proc_entry(sht->proc_name, proc_scsi);
-+              sht->proc_dir = NULL;
-+      }
-+      up(&global_host_template_sem);
-+}
-+
-+void scsi_proc_host_add(struct Scsi_Host *shost)
-+{
-+      struct scsi_host_template *sht = shost->hostt;
-+      struct proc_dir_entry *p;
-+      char name[10];
-+
-+      if (!sht->proc_dir)
-+              return;
-       sprintf(name,"%d", shost->host_no);
-       p = create_proc_read_entry(name, S_IFREG | S_IRUGO | S_IWUSR,
-@@ -107,20 +124,18 @@ void scsi_proc_host_add(struct Scsi_Host
-       } 
-       p->write_proc = proc_scsi_write_proc;
--      p->owner = shost->hostt->module;
-+      p->owner = sht->module;
- }
- void scsi_proc_host_rm(struct Scsi_Host *shost)
- {
--      struct scsi_host_template *sht = shost->hostt;
-       char name[10];
--      if (sht->proc_info) {
--              sprintf(name,"%d", shost->host_no);
--              remove_proc_entry(name, sht->proc_dir);
--              if (!sht->present)
--                      remove_proc_entry(sht->proc_name, proc_scsi);
--      }
-+      if (!shost->hostt->proc_dir)
-+              return;
-+
-+      sprintf(name,"%d", shost->host_no);
-+      remove_proc_entry(name, shost->hostt->proc_dir);
- }
- static int proc_print_scsidevice(struct device *dev, void *data)
---- linux-2.6.0-test1/drivers/scsi/scsi_scan.c 2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/scsi/scsi_scan.c        2003-07-19 17:03:50.000000000 -0700
-@@ -29,7 +29,7 @@
- #include <linux/module.h>
- #include <linux/moduleparam.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
-@@ -464,8 +464,7 @@ static void scsi_set_name(struct scsi_de
-       while (i >= 0 && type[i] == ' ')
-               type[i--] = '\0';
--      snprintf(sdev->sdev_driverfs_dev.name, DEVICE_NAME_SIZE, "SCSI %s",
--               type);
-+      snprintf(sdev->sdev_gendev.name, DEVICE_NAME_SIZE, "SCSI %s", type);
- }
- /**
---- linux-2.6.0-test1/drivers/scsi/scsi_syms.c 2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_syms.c        2003-07-19 17:03:50.000000000 -0700
-@@ -11,7 +11,7 @@
- #include <linux/slab.h>
- #include <linux/ioport.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/fs.h>
- #include <asm/system.h>
-@@ -34,6 +34,7 @@ EXPORT_SYMBOL(scsi_register_driver);
- EXPORT_SYMBOL(scsi_register_interface);
- EXPORT_SYMBOL(scsi_host_alloc);
- EXPORT_SYMBOL(scsi_add_host);
-+EXPORT_SYMBOL(scsi_scan_host);
- EXPORT_SYMBOL(scsi_remove_host);
- EXPORT_SYMBOL(scsi_host_get);
- EXPORT_SYMBOL(scsi_host_put);
---- linux-2.6.0-test1/drivers/scsi/scsi_sysfs.c        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/scsi_sysfs.c       2003-07-19 17:03:50.000000000 -0700
-@@ -45,7 +45,7 @@ shost_rd_attr(cmd_per_lun, "%hd\n");
- shost_rd_attr(sg_tablesize, "%hu\n");
- shost_rd_attr(unchecked_isa_dma, "%d\n");
--struct class_device_attribute *scsi_sysfs_shost_attrs[] = {
-+static struct class_device_attribute *scsi_sysfs_shost_attrs[] = {
-       &class_device_attr_unique_id,
-       &class_device_attr_host_busy,
-       &class_device_attr_cmd_per_lun,
-@@ -204,7 +204,7 @@ store_rescan_field (struct device *dev, 
- static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field)
- /* Default template for device attributes.  May NOT be modified */
--struct device_attribute *scsi_sysfs_sdev_attrs[] = {
-+static struct device_attribute *scsi_sysfs_sdev_attrs[] = {
-       &dev_attr_device_blocked,
-       &dev_attr_queue_depth,
-       &dev_attr_type,
-@@ -228,6 +228,42 @@ static void scsi_device_release(struct d
-       scsi_free_sdev(sdev);
- }
-+static struct device_attribute *attr_overridden(
-+              struct device_attribute **attrs,
-+              struct device_attribute *attr)
-+{
-+      int i;
-+
-+      if (!attrs)
-+              return NULL;
-+      for (i = 0; attrs[i]; i++)
-+              if (!strcmp(attrs[i]->attr.name, attr->attr.name))
-+                      return attrs[i];
-+      return NULL;
-+}
-+
-+static int attr_add(struct device *dev, struct device_attribute *attr)
-+{
-+      struct device_attribute *base_attr;
-+
-+      /*
-+       * Spare the caller from having to copy things it's not interested in.
-+       */
-+      base_attr = attr_overridden(scsi_sysfs_sdev_attrs, attr);
-+      if (base_attr) {
-+              /* extend permissions */
-+              attr->attr.mode |= base_attr->attr.mode;
-+
-+              /* override null show/store with default */
-+              if (!attr->show)
-+                      attr->show = base_attr->show;
-+              if (!attr->store)
-+                      attr->store = base_attr->store;
-+      }
-+
-+      return device_create_file(dev, attr);
-+}
-+
- /**
-  * scsi_device_register - register a scsi device with the scsi bus
-  * @sdev:     scsi_device to register
-@@ -239,20 +275,20 @@ int scsi_device_register(struct scsi_dev
- {
-       int error = 0, i;
--      device_initialize(&sdev->sdev_driverfs_dev);
--      sprintf(sdev->sdev_driverfs_dev.bus_id,"%d:%d:%d:%d",
-+      device_initialize(&sdev->sdev_gendev);
-+      sprintf(sdev->sdev_gendev.bus_id,"%d:%d:%d:%d",
-               sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
--      sdev->sdev_driverfs_dev.parent = &sdev->host->host_gendev;
--      sdev->sdev_driverfs_dev.bus = &scsi_bus_type;
--      sdev->sdev_driverfs_dev.release = scsi_device_release;
-+      sdev->sdev_gendev.parent = &sdev->host->shost_gendev;
-+      sdev->sdev_gendev.bus = &scsi_bus_type;
-+      sdev->sdev_gendev.release = scsi_device_release;
-       class_device_initialize(&sdev->sdev_classdev);
--      sdev->sdev_classdev.dev = &sdev->sdev_driverfs_dev;
-+      sdev->sdev_classdev.dev = &sdev->sdev_gendev;
-       sdev->sdev_classdev.class = &sdev_class;
-       snprintf(sdev->sdev_classdev.class_id, BUS_ID_SIZE, "%d:%d:%d:%d",
-               sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
--      error = device_add(&sdev->sdev_driverfs_dev);
-+      error = device_add(&sdev->sdev_gendev);
-       if (error) {
-               printk(KERN_INFO "error 1\n");
-               return error;
-@@ -260,16 +296,28 @@ int scsi_device_register(struct scsi_dev
-       error = class_device_add(&sdev->sdev_classdev);
-       if (error) {
-               printk(KERN_INFO "error 2\n");
--              device_unregister(&sdev->sdev_driverfs_dev);
-+              device_unregister(&sdev->sdev_gendev);
-               return error;
-       }
--      for (i = 0; !error && sdev->host->hostt->sdev_attrs[i] != NULL; i++)
--              error = device_create_file(&sdev->sdev_driverfs_dev,
--                                         sdev->host->hostt->sdev_attrs[i]);
--
--      if (error)
--              scsi_device_unregister(sdev);
-+      if (sdev->host->hostt->sdev_attrs) {
-+              for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
-+                      error = attr_add(&sdev->sdev_gendev,
-+                                      sdev->host->hostt->sdev_attrs[i]);
-+                      if (error)
-+                              scsi_device_unregister(sdev);
-+              }
-+      }
-+      
-+      for (i = 0; scsi_sysfs_sdev_attrs[i]; i++) {
-+              if (!attr_overridden(sdev->host->hostt->sdev_attrs,
-+                                      scsi_sysfs_sdev_attrs[i])) {
-+                      error = device_create_file(&sdev->sdev_gendev,
-+                                      scsi_sysfs_sdev_attrs[i]);
-+                      if (error)
-+                              scsi_device_unregister(sdev);
-+              }
-+      }
-       return error;
- }
-@@ -280,12 +328,8 @@ int scsi_device_register(struct scsi_dev
-  **/
- void scsi_device_unregister(struct scsi_device *sdev)
- {
--      int i;
--
--      for (i = 0; sdev->host->hostt->sdev_attrs[i] != NULL; i++)
--              device_remove_file(&sdev->sdev_driverfs_dev, sdev->host->hostt->sdev_attrs[i]);
-       class_device_unregister(&sdev->sdev_classdev);
--      device_unregister(&sdev->sdev_driverfs_dev);
-+      device_unregister(&sdev->sdev_gendev);
- }
- int scsi_register_driver(struct device_driver *drv)
-@@ -315,20 +359,57 @@ static void scsi_host_release(struct dev
- void scsi_sysfs_init_host(struct Scsi_Host *shost)
- {
--      device_initialize(&shost->host_gendev);
--      snprintf(shost->host_gendev.bus_id, BUS_ID_SIZE, "host%d",
-+      device_initialize(&shost->shost_gendev);
-+      snprintf(shost->shost_gendev.bus_id, BUS_ID_SIZE, "host%d",
-               shost->host_no);
--      snprintf(shost->host_gendev.name, DEVICE_NAME_SIZE, "%s",
-+      snprintf(shost->shost_gendev.name, DEVICE_NAME_SIZE, "%s",
-               shost->hostt->proc_name);
--      shost->host_gendev.release = scsi_host_release;
-+      shost->shost_gendev.release = scsi_host_release;
--      class_device_initialize(&shost->class_dev);
--      shost->class_dev.dev = &shost->host_gendev;
--      shost->class_dev.class = &shost_class;
--      snprintf(shost->class_dev.class_id, BUS_ID_SIZE, "host%d",
-+      class_device_initialize(&shost->shost_classdev);
-+      shost->shost_classdev.dev = &shost->shost_gendev;
-+      shost->shost_classdev.class = &shost_class;
-+      snprintf(shost->shost_classdev.class_id, BUS_ID_SIZE, "host%d",
-                 shost->host_no);
- }
-+static struct class_device_attribute *class_attr_overridden(
-+              struct class_device_attribute **attrs,
-+              struct class_device_attribute *attr)
-+{
-+      int i;
-+
-+      if (!attrs)
-+              return NULL;
-+      for (i = 0; attrs[i]; i++)
-+              if (!strcmp(attrs[i]->attr.name, attr->attr.name))
-+                      return attrs[i];
-+      return NULL;
-+}
-+
-+static int class_attr_add(struct class_device *classdev,
-+              struct class_device_attribute *attr)
-+{
-+      struct class_device_attribute *base_attr;
-+
-+      /*
-+       * Spare the caller from having to copy things it's not interested in.
-+       */
-+      base_attr = class_attr_overridden(scsi_sysfs_shost_attrs, attr);
-+      if (base_attr) {
-+              /* extend permissions */
-+              attr->attr.mode |= base_attr->attr.mode;
-+
-+              /* override null show/store with default */
-+              if (!attr->show)
-+                      attr->show = base_attr->show;
-+              if (!attr->store)
-+                      attr->store = base_attr->store;
-+      }
-+
-+      return class_device_create_file(classdev, attr);
-+}
-+
- /**
-  * scsi_sysfs_add_host - add scsi host to subsystem
-  * @shost:     scsi host struct to add to subsystem
-@@ -336,31 +417,44 @@ void scsi_sysfs_init_host(struct Scsi_Ho
-  **/
- int scsi_sysfs_add_host(struct Scsi_Host *shost, struct device *dev)
- {
--      int i, error;
-+      int error, i;
--      if (!shost->host_gendev.parent)
--              shost->host_gendev.parent = dev ? dev : &legacy_bus;
-+      if (!shost->shost_gendev.parent)
-+              shost->shost_gendev.parent = dev ? dev : &legacy_bus;
--      error = device_add(&shost->host_gendev);
-+      error = device_add(&shost->shost_gendev);
-       if (error)
-               return error;
--      error = class_device_add(&shost->class_dev);
-+      error = class_device_add(&shost->shost_classdev);
-       if (error)
-               goto clean_device;
--      for (i = 0; !error && shost->hostt->shost_attrs[i] != NULL; i++)
--              error = class_device_create_file(&shost->class_dev,
--                                         shost->hostt->shost_attrs[i]);
--      if (error)
--              goto clean_class;
-+      if (shost->hostt->shost_attrs) {
-+              for (i = 0; shost->hostt->shost_attrs[i]; i++) {
-+                      error = class_attr_add(&shost->shost_classdev,
-+                                      shost->hostt->shost_attrs[i]);
-+                      if (error)
-+                              goto clean_class;
-+              }
-+      }
-+
-+      for (i = 0; scsi_sysfs_shost_attrs[i]; i++) {
-+              if (!class_attr_overridden(shost->hostt->shost_attrs,
-+                                      scsi_sysfs_shost_attrs[i])) {
-+                      error = class_device_create_file(&shost->shost_classdev,
-+                                      scsi_sysfs_shost_attrs[i]);
-+                      if (error)
-+                              goto clean_class;
-+              }
-+      }
-       return error;
- clean_class:
--      class_device_del(&shost->class_dev);
-+      class_device_del(&shost->shost_classdev);
- clean_device:
--      device_del(&shost->host_gendev);
-+      device_del(&shost->shost_gendev);
-       return error;
- }
-@@ -371,133 +465,6 @@ clean_device:
-  **/
- void scsi_sysfs_remove_host(struct Scsi_Host *shost)
- {
--      class_device_del(&shost->class_dev);
--      device_del(&shost->host_gendev);
--}
--
--/** scsi_sysfs_modify_shost_attribute - modify or add a host class attribute
-- *
-- * @class_attrs:host class attribute list to be added to or modified
-- * @attr:     individual attribute to change or added
-- *
-- * returns zero if successful or error if not
-- **/
--int scsi_sysfs_modify_shost_attribute(
--                      struct class_device_attribute ***class_attrs,
--                      struct class_device_attribute *attr)
--{
--      int modify = -1;
--      int num_attrs;
--
--      if(*class_attrs == NULL)
--              *class_attrs = scsi_sysfs_shost_attrs;
--
--      for(num_attrs=0; (*class_attrs)[num_attrs] != NULL; num_attrs++)
--              if(strcmp((*class_attrs)[num_attrs]->attr.name,
--                              attr->attr.name) == 0)
--                      modify = num_attrs;
--
--      if(*class_attrs == scsi_sysfs_shost_attrs || modify < 0) {
--              /* note: need space for null at the end as well */
--              struct class_device_attribute **tmp_attrs =
--                              kmalloc(sizeof(*tmp_attrs) *
--                                        (num_attrs + (modify >= 0 ? 1 : 2)),
--                                      GFP_KERNEL);
--              if(tmp_attrs == NULL)
--                      return -ENOMEM;
--              memcpy(tmp_attrs, *class_attrs, sizeof(*tmp_attrs) *
--                              (num_attrs + 1));
--              if(*class_attrs != scsi_sysfs_shost_attrs)
--                      kfree(*class_attrs);
--              *class_attrs = tmp_attrs;
--      }
--      if(modify >= 0) {
--              /* spare the caller from having to copy things it's
--               * not interested in */
--              struct class_device_attribute *old_attr =
--                      (*class_attrs)[modify];
--              /* extend permissions */
--              attr->attr.mode |= old_attr->attr.mode;
--
--              /* override null show/store with default */
--              if(attr->show == NULL)
--                      attr->show = old_attr->show;
--              if(attr->store == NULL)
--                      attr->store = old_attr->store;
--              (*class_attrs)[modify] = attr;
--      } else {
--              (*class_attrs)[num_attrs++] = attr;
--              (*class_attrs)[num_attrs] = NULL;
--      }
--
--      return 0;
--}
--EXPORT_SYMBOL(scsi_sysfs_modify_shost_attribute);
--
--/** scsi_sysfs_modify_sdev_attribute - modify or add a host device attribute
-- *
-- * @dev_attrs:        pointer to the attribute list to be added to or modified
-- * @attr:     individual attribute to change or added
-- *
-- * returns zero if successful or error if not
-- **/
--int scsi_sysfs_modify_sdev_attribute(struct device_attribute ***dev_attrs,
--                                   struct device_attribute *attr)
--{
--      int modify = -1;
--      int num_attrs;
--
--      if(*dev_attrs == NULL)
--              *dev_attrs = scsi_sysfs_sdev_attrs;
--
--      for(num_attrs=0; (*dev_attrs)[num_attrs] != NULL; num_attrs++)
--              if(strcmp((*dev_attrs)[num_attrs]->attr.name,
--                              attr->attr.name) == 0)
--                      modify = num_attrs;
--
--      if(*dev_attrs == scsi_sysfs_sdev_attrs || modify < 0) {
--              /* note: need space for null at the end as well */
--              struct device_attribute **tmp_attrs =
--                              kmalloc(sizeof(*tmp_attrs) *
--                                        (num_attrs + (modify >= 0 ? 1 : 2)),
--                                      GFP_KERNEL);
--              if(tmp_attrs == NULL)
--                      return -ENOMEM;
--              memcpy(tmp_attrs, *dev_attrs, sizeof(*tmp_attrs) *
--                              (num_attrs + 1));
--              if(*dev_attrs != scsi_sysfs_sdev_attrs)
--                      kfree(*dev_attrs);
--              *dev_attrs = tmp_attrs;
--      }
--      if(modify >= 0) {
--              /* spare the caller from having to copy things it's
--               * not interested in */
--              struct device_attribute *old_attr =
--                      (*dev_attrs)[modify];
--              /* extend permissions */
--              attr->attr.mode |= old_attr->attr.mode;
--
--              /* override null show/store with default */
--              if(attr->show == NULL)
--                      attr->show = old_attr->show;
--              if(attr->store == NULL)
--                      attr->store = old_attr->store;
--              (*dev_attrs)[modify] = attr;
--      } else {
--              (*dev_attrs)[num_attrs++] = attr;
--              (*dev_attrs)[num_attrs] = NULL;
--      }
--
--      return 0;
--}
--EXPORT_SYMBOL(scsi_sysfs_modify_sdev_attribute);
--
--void scsi_sysfs_release_attributes(struct scsi_host_template *hostt)
--{
--      if(hostt->sdev_attrs != scsi_sysfs_sdev_attrs)
--              kfree(hostt->sdev_attrs);
--
--      if(hostt->shost_attrs != scsi_sysfs_shost_attrs)
--              kfree(hostt->shost_attrs);
-+      class_device_del(&shost->shost_classdev);
-+      device_del(&shost->shost_gendev);
- }
--EXPORT_SYMBOL(scsi_sysfs_release_attributes);
---- linux-2.6.0-test1/drivers/scsi/sd.c        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sd.c       2003-07-19 17:03:50.000000000 -0700
-@@ -43,7 +43,7 @@
- #include <linux/init.h>
- #include <linux/reboot.h>
- #include <linux/vmalloc.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <asm/uaccess.h>
-@@ -606,35 +606,8 @@ not_present:
- static void sd_rescan(struct device *dev)
- {
--      struct scsi_device *sdp = to_scsi_device(dev);
-       struct scsi_disk *sdkp = dev_get_drvdata(dev);
--      struct gendisk *gd;
--      struct scsi_request *SRpnt;
--      unsigned char *buffer;
--
--      if (!sdkp || sdp->online == FALSE || !sdkp->media_present)
--              return;
--              
--      gd = sdkp->disk;
--      
--      SCSI_LOG_HLQUEUE(3, printk("sd_rescan: disk=%s\n", gd->disk_name));
--      
--      SRpnt = scsi_allocate_request(sdp);
--      if (!SRpnt) {
--              printk(KERN_WARNING "(sd_rescan:) Request allocation "
--                     "failure.\n");
--              return;
--      }
--
--      if (sdkp->device->host->unchecked_isa_dma)
--              buffer = kmalloc(512, GFP_DMA);
--      else
--              buffer = kmalloc(512, GFP_KERNEL);
--
--      sd_read_capacity(sdkp, gd->disk_name, SRpnt, buffer);
--      set_capacity(gd, sdkp->capacity);       
--      scsi_release_request(SRpnt);
--      kfree(buffer);
-+      sd_revalidate_disk(sdkp->disk);
- }
- static struct block_device_operations sd_fops = {
-@@ -1318,7 +1291,7 @@ static int sd_probe(struct device *dev)
-       sd_revalidate_disk(gd);
--      gd->driverfs_dev = &sdp->sdev_driverfs_dev;
-+      gd->driverfs_dev = &sdp->sdev_gendev;
-       gd->flags = GENHD_FL_DRIVERFS;
-       if (sdp->removable)
-               gd->flags |= GENHD_FL_REMOVABLE;
---- linux-2.6.0-test1/drivers/scsi/seagate.c   2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/seagate.c  2003-07-19 17:03:50.000000000 -0700
-@@ -95,7 +95,7 @@
- #include <linux/proc_fs.h>
- #include <linux/init.h>
- #include <linux/delay.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/stat.h>
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/sg.c        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sg.c       2003-07-19 17:06:39.000000000 -0700
-@@ -61,7 +61,7 @@ static int sg_version_num = 30529;   /* 2 
- #include <asm/uaccess.h>
- #include <asm/system.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsi_driver.h>
-@@ -83,7 +83,7 @@ static void sg_proc_cleanup(void);
- #define SG_ALLOW_DIO_DEF 0
- #define SG_ALLOW_DIO_CODE /* compile out by commenting this define */
--#define SG_MAX_DEVS_MASK ((1U << KDEV_MINOR_BITS) - 1)
-+#define SG_MAX_DEVS_MASK 255
- /*
-  * Suppose you want to calculate the formula muldiv(x,m,d)=int(x * m / d)
---- linux-2.6.0-test1/drivers/scsi/sgiwd93.c   2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/scsi/sgiwd93.c  2003-07-19 17:03:50.000000000 -0700
-@@ -15,7 +15,7 @@
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/version.h>
- #include <linux/delay.h>
- #include <linux/spinlock.h>
---- linux-2.6.0-test1/drivers/scsi/sim710.c    2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/sim710.c   2003-07-19 17:03:50.000000000 -0700
-@@ -29,7 +29,7 @@
- #include <linux/config.h>
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/device.h>
- #include <linux/init.h>
- #include <linux/mca.h>
-@@ -138,7 +138,8 @@ sim710_probe_common(struct device *dev, 
-               goto out_unregister;
-       }
--      scsi_add_host(host, dev);
-+      scsi_add_host(host, dev); /* XXX handle failure */
-+      scsi_scan_host(host);
-       hostdata->dev = dev;
-       return 0;
---- linux-2.6.0-test1/drivers/scsi/sr.c        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sr.c       2003-07-19 17:06:39.000000000 -0700
-@@ -43,7 +43,7 @@
- #include <linux/cdrom.h>
- #include <linux/interrupt.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/uaccess.h>
- #include "scsi.h"
-@@ -59,7 +59,7 @@
- MODULE_PARM(xa_test, "i");    /* see sr_ioctl.c */
--#define SR_DISKS      (1 << KDEV_MINOR_BITS)
-+#define SR_DISKS      256
- #define MAX_RETRIES   3
- #define SR_TIMEOUT    (30 * HZ)
-@@ -533,7 +533,7 @@ static int sr_probe(struct device *dev)
-       snprintf(disk->devfs_name, sizeof(disk->devfs_name),
-                       "%s/cd", sdev->devfs_name);
--      disk->driverfs_dev = &sdev->sdev_driverfs_dev;
-+      disk->driverfs_dev = &sdev->sdev_gendev;
-       register_cdrom(&cd->cdi);
-       set_capacity(disk, cd->capacity);
-       disk->private_data = &cd->driver;
---- linux-2.6.0-test1/drivers/scsi/sr_ioctl.c  2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/scsi/sr_ioctl.c 2003-07-19 17:03:50.000000000 -0700
-@@ -4,7 +4,7 @@
- #include <linux/fs.h>
- #include <linux/errno.h>
- #include <linux/string.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/blkpg.h>
- #include <linux/cdrom.h>
- #include <asm/io.h>
---- linux-2.6.0-test1/drivers/scsi/sr_vendor.c 2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/scsi/sr_vendor.c        2003-07-19 17:03:50.000000000 -0700
-@@ -39,7 +39,7 @@
- #include <linux/string.h>
- #include <linux/bcd.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
- #include <scsi/scsi_ioctl.h>
---- linux-2.6.0-test1/drivers/scsi/st.c        2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/st.c       2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,7 @@ static char *verstr = "20030622";
- #include <linux/ioctl.h>
- #include <linux/fcntl.h>
- #include <linux/spinlock.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/moduleparam.h>
- #include <linux/devfs_fs_kernel.h>
- #include <asm/uaccess.h>
---- linux-2.6.0-test1/drivers/scsi/sun3_scsi.c 2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/scsi/sun3_scsi.c        2003-07-19 17:03:50.000000000 -0700
-@@ -61,7 +61,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/scsi/sun3_scsi_vme.c     2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/sun3_scsi_vme.c    2003-07-19 17:03:50.000000000 -0700
-@@ -23,7 +23,7 @@
- #include <linux/sched.h>
- #include <linux/ioport.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/io.h>
- #include <asm/system.h>
---- linux-2.6.0-test1/drivers/scsi/sun3x_esp.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/sun3x_esp.c        2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/types.h>
- #include <linux/string.h>
- #include <linux/slab.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/proc_fs.h>
- #include <linux/stat.h>
- #include <linux/delay.h>
---- linux-2.6.0-test1/drivers/scsi/sym53c416.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/sym53c416.c        2003-07-19 17:03:50.000000000 -0700
-@@ -40,7 +40,7 @@
- #include <asm/dma.h>
- #include <asm/system.h>
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/version.h>
- #include <linux/isapnp.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx_2/sym_glue.c      2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx_2/sym_glue.c     2003-07-19 17:03:50.000000000 -0700
-@@ -1110,6 +1110,7 @@ static int sym_eh_handler(int op, char *
-       int sts = -1;
-       struct sym_eh_wait eh, *ep = &eh;
-       char devname[20];
-+      unsigned long flags;
-       sprintf(devname, "%s:%d:%d", sym_name(np), cmd->device->id, cmd->device->lun);
-@@ -1201,7 +1202,11 @@ finish:
-               ep->timer.data = (u_long)cmd;
-               ep->timed_out = 1;      /* Be pessimistic for once :) */
-               add_timer(&ep->timer);
-+              local_save_flags(flags);
-+              spin_unlock_irq(cmd->device->host->host_lock);
-               down(&ep->sem);
-+              local_irq_restore(flags);
-+              spin_lock(cmd->device->host->host_lock);
-               if (ep->timed_out)
-                       sts = -2;
-       }
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx_2/sym_glue.h      2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx_2/sym_glue.h     2003-07-19 17:03:50.000000000 -0700
-@@ -84,7 +84,7 @@
- #include <linux/stat.h>
- #include <linux/interrupt.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #ifdef __sparc__
- #  include <asm/irq.h>
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx_2/sym_hipd.c      2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx_2/sym_hipd.c     2003-07-19 17:04:52.000000000 -0700
-@@ -800,7 +800,8 @@ static int sym_prepare_setting(hcb_p np,
-        * Btw, 'period' is in tenths of nanoseconds.
-        */
-       period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
--      if      (period <= 250)         np->minsync = 10;
-+      if      (period == 250)         np->minsync = 9;
-+      else if (period <= 250)         np->minsync = 10;
-       else if (period <= 303)         np->minsync = 11;
-       else if (period <= 500)         np->minsync = 12;
-       else                            np->minsync = (period + 40 - 1) / 40;
---- linux-2.6.0-test1/drivers/scsi/sym53c8xx.c 2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/sym53c8xx.c        2003-07-19 17:03:50.000000000 -0700
-@@ -123,7 +123,7 @@
- #include <linux/timer.h>
- #include <linux/stat.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,35)
- #include <linux/init.h>
-@@ -1327,7 +1327,7 @@ MODULE_PARM(sym53c8xx, "s");
- #define SetScsiAbortResult(cmd) SetScsiResult(cmd, DID_ABORT, 0xff)
- #endif
--static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
-+static irqreturn_t sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
- static void sym53c8xx_timeout(unsigned long np);
- #define initverbose (driver_setup.verbose)
-@@ -7374,7 +7374,7 @@ void ncr_complete (ncb_p np, ccb_p cp)
-               }
-               if (cp->xerr_status & XE_BAD_PHASE) {
-                       PRINT_ADDR(cmd);
--                      printk ("illegal scsi phase (4/5).\n");
-+                      printk ("invalid scsi phase (4/5).\n");
-               }
-               if (cp->xerr_status & XE_SODL_UNRUN) {
-                       PRINT_ADDR(cmd);
-@@ -13660,7 +13660,7 @@ printk("sym53c8xx : command successfully
- **   routine for each host that uses this IRQ.
- */
--static void sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs)
-+static irqreturn_t sym53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs)
- {
-      unsigned long flags;
-      ncb_p np = (ncb_p) dev_id;
-@@ -13685,6 +13685,7 @@ static void sym53c8xx_intr(int irq, void
-           ncr_flush_done_cmds(done_list);
-           NCR_UNLOCK_SCSI_DONE(done_list->device->host, flags);
-      }
-+     return IRQ_HANDLED;
- }
- /*
---- linux-2.6.0-test1/drivers/scsi/t128.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/t128.c     2003-07-19 17:03:50.000000000 -0700
-@@ -110,7 +110,7 @@
- #include <linux/signal.h>
- #include <linux/sched.h>
- #include <asm/io.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/init.h>
---- linux-2.6.0-test1/drivers/scsi/tmscsim.c   2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/scsi/tmscsim.c  2003-07-19 17:03:50.000000000 -0700
-@@ -224,7 +224,7 @@
- #include <linux/mm.h>
- #include <linux/config.h>
- #include <linux/version.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/timer.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/u14-34f.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/u14-34f.c  2003-07-19 17:03:50.000000000 -0700
-@@ -414,7 +414,7 @@
- #include <asm/system.h>
- #include <asm/byteorder.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stat.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/drivers/scsi/ultrastor.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/ultrastor.c        2003-07-19 17:03:50.000000000 -0700
-@@ -128,7 +128,7 @@
-  */
- #include <linux/module.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/interrupt.h>
- #include <linux/stddef.h>
- #include <linux/string.h>
---- linux-2.6.0-test1/drivers/scsi/wd33c93.c   2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/scsi/wd33c93.c  2003-07-19 17:03:50.000000000 -0700
-@@ -79,7 +79,7 @@
- #include <linux/delay.h>
- #include <linux/version.h>
- #include <linux/init.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <asm/irq.h>
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/scsi/wd7000.c    2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/scsi/wd7000.c   2003-07-19 17:03:50.000000000 -0700
-@@ -174,7 +174,7 @@
- #include <linux/spinlock.h>
- #include <linux/ioport.h>
- #include <linux/proc_fs.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/init.h>
- #include <linux/stat.h>
---- linux-2.6.0-test1/drivers/scsi/zalon.c     2003-07-02 14:53:15.000000000 -0700
-+++ 25/drivers/scsi/zalon.c    2003-07-19 17:03:50.000000000 -0700
-@@ -7,7 +7,7 @@
- #include <linux/types.h>
- #include <linux/stat.h>
- #include <linux/mm.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/sched.h>
- #include <linux/version.h>
- #include <linux/config.h>
-@@ -85,7 +85,7 @@ zalon_scsi_callback(struct parisc_device
- {
-       struct gsc_irq gsc_irq;
-       u32 zalon_vers;
--      int irq;
-+      int irq, error = -ENODEV;
-       unsigned long zalon = dev->hpa;
-       unsigned long io_port = zalon + GSC_SCSI_ZALON_OFFSET;
-       static int unit = 0;
-@@ -147,11 +147,18 @@ zalon_scsi_callback(struct parisc_device
-       dev_set_drvdata(&dev->dev, host);
--      scsi_add_host(host, &dev->dev);
-+      error = scsi_add_host(host, &dev->dev);
-+      if (error)
-+              goto fail_free_irq;
-+      scsi_scan_host(host);
-       return 0;
-+
-+ fail_free_irq:
-+      free_irq(irq, host);
-  fail:
--      return -ENODEV;
-+      ncr53c8xx_release(host);
-+      return error;
- }
- static struct parisc_device_id zalon_tbl[] = {
---- linux-2.6.0-test1/drivers/serial/8250.c    2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/8250.c   2003-07-19 17:04:02.000000000 -0700
-@@ -823,7 +823,7 @@ receive_chars(struct uart_8250_port *up,
-               if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) {
-                       tty->flip.work.func((void *)tty);
-                       if (tty->flip.count >= TTY_FLIPBUF_SIZE)
--                              return; // if TTY_DONT_FLIP is set
-+                              return; /* if TTY_DONT_FLIP is set */
-               }
-               ch = serial_inp(up, UART_RX);
-               *tty->flip.char_buf_ptr = ch;
-@@ -1183,13 +1183,20 @@ static void serial8250_break_ctl(struct 
-       serial_out(up, UART_LCR, up->lcr);
-       spin_unlock_irqrestore(&up->port.lock, flags);
- }
-+#ifdef CONFIG_KGDB
-+static int kgdb_irq = -1;
-+#endif
- static int serial8250_startup(struct uart_port *port)
- {
-       struct uart_8250_port *up = (struct uart_8250_port *)port;
-       unsigned long flags;
-       int retval;
--
-+#ifdef CONFIG_KGDB
-+      if ( up->port.irq == kgdb_irq){
-+              return -EBUSY;
-+      }
-+#endif
-       if (up->port.type == PORT_16C950) {
-               /* Wake up and initialize UART */
-               up->acr = 0;
-@@ -1853,6 +1860,11 @@ static void __init serial8250_register_p
-       for (i = 0; i < UART_NR; i++) {
-               struct uart_8250_port *up = &serial8250_ports[i];
-+#ifdef CONFIG_KGDB
-+              if(up->port.irq == kgdb_irq){
-+                      up->port.iobase = up->port.mapbase = 0;
-+              }
-+#endif
-               up->port.line = i;
-               up->port.ops = &serial8250_pops;
-               init_timer(&up->timer);
-@@ -2116,7 +2128,31 @@ void serial8250_resume_port(int line, u3
- {
-       uart_resume_port(&serial8250_reg, &serial8250_ports[line].port, level);
- }
--
-+#ifdef CONFIG_KGDB
-+/*
-+ * Find all the ports using the given irq and shut them down.
-+ * Result should be that the irq will be released.
-+ */
-+void shutdown_for_kgdb(struct async_struct * info)
-+{
-+        int irq = info->state->irq;
-+        struct uart_8250_port *up;
-+      int ttyS;
-+
-+      kgdb_irq = irq;                 /* save for later init */
-+      for (ttyS = 0; ttyS < UART_NR; ttyS++){
-+              up =  &serial8250_ports[ttyS];
-+              if( up->port.irq == irq && (irq_lists + irq)->head){
-+#ifdef CONFIG_DEBUG_SPINLOCK   /* ugly business... */
-+                      if(up->port.lock.magic != SPINLOCK_MAGIC){
-+                              spin_lock_init(&up->port.lock);
-+                      }
-+#endif
-+                      serial8250_shutdown(&up->port);
-+              }
-+        }
-+}
-+#endif
- static int __init serial8250_init(void)
- {
-       int ret, i;
---- linux-2.6.0-test1/drivers/serial/core.c    2003-07-10 18:50:31.000000000 -0700
-+++ 25/drivers/serial/core.c   2003-07-19 17:03:50.000000000 -0700
-@@ -1667,23 +1667,25 @@ static int uart_line_info(char *buf, str
-               return ret + 1;
-       }
--      status = port->ops->get_mctrl(port);
--
--      ret += sprintf(buf + ret, " tx:%d rx:%d",
--                      port->icount.tx, port->icount.rx);
--      if (port->icount.frame)
--              ret += sprintf(buf + ret, " fe:%d",
--                      port->icount.frame);
--      if (port->icount.parity)
--              ret += sprintf(buf + ret, " pe:%d",
--                      port->icount.parity);
--      if (port->icount.brk)
--              ret += sprintf(buf + ret, " brk:%d",
--                      port->icount.brk);
--      if (port->icount.overrun)
--              ret += sprintf(buf + ret, " oe:%d",
--                      port->icount.overrun);
--
-+      if(capable(CAP_SYS_ADMIN))
-+      {
-+              status = port->ops->get_mctrl(port);
-+
-+              ret += sprintf(buf + ret, " tx:%d rx:%d",
-+                              port->icount.tx, port->icount.rx);
-+              if (port->icount.frame)
-+                      ret += sprintf(buf + ret, " fe:%d",
-+                              port->icount.frame);
-+              if (port->icount.parity)
-+                      ret += sprintf(buf + ret, " pe:%d",
-+                              port->icount.parity);
-+              if (port->icount.brk)
-+                      ret += sprintf(buf + ret, " brk:%d",
-+                              port->icount.brk);
-+              if (port->icount.overrun)
-+                      ret += sprintf(buf + ret, " oe:%d",
-+                              port->icount.overrun);
-+      
- #define INFOBIT(bit,str) \
-       if (port->mctrl & (bit)) \
-               strncat(stat_buf, (str), sizeof(stat_buf) - \
-@@ -1693,19 +1695,22 @@ static int uart_line_info(char *buf, str
-               strncat(stat_buf, (str), sizeof(stat_buf) - \
-                      strlen(stat_buf) - 2)
--      stat_buf[0] = '\0';
--      stat_buf[1] = '\0';
--      INFOBIT(TIOCM_RTS, "|RTS");
--      STATBIT(TIOCM_CTS, "|CTS");
--      INFOBIT(TIOCM_DTR, "|DTR");
--      STATBIT(TIOCM_DSR, "|DSR");
--      STATBIT(TIOCM_CAR, "|CD");
--      STATBIT(TIOCM_RNG, "|RI");
--      if (stat_buf[0])
--              stat_buf[0] = ' ';
--      strcat(stat_buf, "\n");
--
--      ret += sprintf(buf + ret, stat_buf);
-+              stat_buf[0] = '\0';
-+              stat_buf[1] = '\0';
-+              INFOBIT(TIOCM_RTS, "|RTS");
-+              STATBIT(TIOCM_CTS, "|CTS");
-+              INFOBIT(TIOCM_DTR, "|DTR");
-+              STATBIT(TIOCM_DSR, "|DSR");
-+              STATBIT(TIOCM_CAR, "|CD");
-+              STATBIT(TIOCM_RNG, "|RI");
-+              if (stat_buf[0])
-+                      stat_buf[0] = ' ';
-+              strcat(stat_buf, "\n");
-+      
-+              ret += sprintf(buf + ret, stat_buf);
-+      }
-+#undef STATBIT
-+#undef INFOBIT
-       return ret;
- }
---- linux-2.6.0-test1/drivers/serial/Kconfig   2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/Kconfig  2003-07-19 17:03:50.000000000 -0700
-@@ -404,14 +404,19 @@ config SERIAL_SUNSAB_CONSOLE
-         on your Sparc system as the console, you can do so by answering
-         Y to this option.
--config V850E_NB85E_UART
-+config V850E_UART
-       bool "NEC V850E on-chip UART support"
--      depends on V850E_NB85E || V850E2_ANNA || V850E_AS85EP1
-+      depends on V850E_MA1 || V850E_ME2 || V850E_TEG || V850E2_ANNA || V850E_AS85EP1
-       default y
--config V850E_NB85E_UART_CONSOLE
-+config V850E_UARTB
-+        bool
-+      depends V850E_UART && V850E_ME2
-+      default y
-+
-+config V850E_UART_CONSOLE
-       bool "Use NEC V850E on-chip UART for console"
--      depends on V850E_NB85E_UART
-+      depends on V850E_UART
- config SERIAL98
-       tristate "PC-9800 8251-based primary serial port support"
-@@ -426,12 +431,12 @@ config SERIAL98_CONSOLE
- config SERIAL_CORE
-       tristate
--      default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_NB85E_UART && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m || SERIAL98=m)
--      default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_NB85E_UART || SERIAL98=y
-+      default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_UART && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m || SERIAL98=m)
-+      default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_UART || SERIAL98=y
- config SERIAL_CORE_CONSOLE
-       bool
--      depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNZILOG_CONSOLE || SERIAL_SUNSU_CONSOLE || SERIAL_SUNSAB_CONSOLE || V850E_NB85E_UART_CONSOLE || SERIAL98_CONSOLE
-+      depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNZILOG_CONSOLE || SERIAL_SUNSU_CONSOLE || SERIAL_SUNSAB_CONSOLE || V850E_UART_CONSOLE || SERIAL98_CONSOLE
-       default y
- config SERIAL_68328
---- linux-2.6.0-test1/drivers/serial/Makefile  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/serial/Makefile 2003-07-19 17:03:50.000000000 -0700
-@@ -29,5 +29,5 @@ obj-$(CONFIG_SERIAL_MUX) += mux.o
- obj-$(CONFIG_SERIAL_68328) += 68328serial.o
- obj-$(CONFIG_SERIAL_68360) += 68360serial.o
- obj-$(CONFIG_SERIAL_COLDFIRE) += mcfserial.o
--obj-$(CONFIG_V850E_NB85E_UART) += nb85e_uart.o
-+obj-$(CONFIG_V850E_UART) += v850e_uart.o
- obj-$(CONFIG_SERIAL98) += serial98.o
---- linux-2.6.0-test1/drivers/serial/nb85e_uart.c      2003-06-14 12:18:30.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,610 +0,0 @@
--/*
-- * drivers/serial/nb85e_uart.c -- Serial I/O using V850E/NB85E on-chip UART
-- *
-- *  Copyright (C) 2001,02,03  NEC Corporation
-- *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#include <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/module.h>
--#include <linux/console.h>
--#include <linux/tty.h>
--#include <linux/tty_flip.h>
--#include <linux/serial.h>
--#include <linux/serial_core.h>
--
--#include <asm/nb85e_uart.h>
--#include <asm/nb85e_utils.h>
--
--/* Initial UART state.  This may be overridden by machine-dependent headers. */
--#ifndef NB85E_UART_INIT_BAUD
--#define NB85E_UART_INIT_BAUD  115200
--#endif
--#ifndef NB85E_UART_INIT_CFLAGS
--#define NB85E_UART_INIT_CFLAGS        (B115200 | CS8 | CREAD)
--#endif
--
--/* XXX This should be in a header file.  */
--#define NB85E_UART_BRGC_MIN   8
--
--/* A string used for prefixing printed descriptions; since the same UART
--   macro is actually used on other chips than the V850E/NB85E.  This must
--   be a constant string.  */
--#ifndef NB85E_UART_CHIP_NAME
--#define NB85E_UART_CHIP_NAME "V850E/NB85E"
--#endif
--
--\f
--/* Helper functions for doing baud-rate/frequency calculations.  */
--
--/* Calculate the minimum value for CKSR on this processor.  */
--static inline unsigned cksr_min (void)
--{
--      int min = 0;
--      unsigned freq = NB85E_UART_BASE_FREQ;
--      while (freq > NB85E_UART_CKSR_MAX_FREQ) {
--              freq >>= 1;
--              min++;
--      }
--      return min;
--}
--
--/* Minimum baud rate possible.  */
--#define min_baud() \
--   ((NB85E_UART_BASE_FREQ >> NB85E_UART_CKSR_MAX) / (2 * 255) + 1)
--
--/* Maximum baud rate possible.  The error is quite high at max, though.  */
--#define max_baud() \
--   ((NB85E_UART_BASE_FREQ >> cksr_min()) / (2 * NB85E_UART_BRGC_MIN))
--
--\f
--/* Low-level UART functions.  */
--
--/* These masks define which control bits affect TX/RX modes, respectively.  */
--#define RX_BITS \
--  (NB85E_UART_ASIM_PS_MASK | NB85E_UART_ASIM_CL_8 | NB85E_UART_ASIM_ISRM)
--#define TX_BITS \
--  (NB85E_UART_ASIM_PS_MASK | NB85E_UART_ASIM_CL_8 | NB85E_UART_ASIM_SL_2)
--
--/* The UART require various delays after writing control registers.  */
--static inline void nb85e_uart_delay (unsigned cycles)
--{
--      /* The loop takes 2 insns, so loop CYCLES / 2 times.  */
--      register unsigned count = cycles >> 1;
--      while (--count != 0)
--              /* nothing */;
--}
--
--/* Configure and turn on uart channel CHAN, using the termios `control
--   modes' bits in CFLAGS, and a baud-rate of BAUD.  */
--void nb85e_uart_configure (unsigned chan, unsigned cflags, unsigned baud)
--{
--      int flags;
--      unsigned new_config = 0; /* What we'll write to the control reg. */
--      unsigned new_clk_divlog2; /* New baud-rate generate clock divider. */
--      unsigned new_brgen_count; /* New counter max for baud-rate generator.*/
--      /* These are the current values corresponding to the above.  */
--      unsigned old_config, old_clk_divlog2, old_brgen_count;
--
--      /* Calculate new baud-rate generator config values.  */
--
--      /* Calculate the log2 clock divider and baud-rate counter values
--         (note that the UART divides the resulting clock by 2, so
--         multiply BAUD by 2 here to compensate).  */
--      calc_counter_params (NB85E_UART_BASE_FREQ, baud * 2,
--                           cksr_min(), NB85E_UART_CKSR_MAX, 8/*bits*/,
--                           &new_clk_divlog2, &new_brgen_count);
--
--      /* Figure out new configuration of control register.  */
--      if (cflags & CSTOPB)
--              /* Number of stop bits, 1 or 2.  */
--              new_config |= NB85E_UART_ASIM_SL_2;
--      if ((cflags & CSIZE) == CS8)
--              /* Number of data bits, 7 or 8.  */
--              new_config |= NB85E_UART_ASIM_CL_8;
--      if (! (cflags & PARENB))
--              /* No parity check/generation.  */
--              new_config |= NB85E_UART_ASIM_PS_NONE;
--      else if (cflags & PARODD)
--              /* Odd parity check/generation.  */
--              new_config |= NB85E_UART_ASIM_PS_ODD;
--      else
--              /* Even parity check/generation.  */
--              new_config |= NB85E_UART_ASIM_PS_EVEN;
--      if (cflags & CREAD)
--              /* Reading enabled.  */
--              new_config |= NB85E_UART_ASIM_RXE;
--
--      new_config |= NB85E_UART_ASIM_TXE; /* Writing is always enabled.  */
--      new_config |= NB85E_UART_ASIM_CAE;
--      new_config |= NB85E_UART_ASIM_ISRM; /* Errors generate a read-irq.  */
--
--      /* Disable interrupts while we're twiddling the hardware.  */
--      local_irq_save (flags);
--
--#ifdef NB85E_UART_PRE_CONFIGURE
--      NB85E_UART_PRE_CONFIGURE (chan, cflags, baud);
--#endif
--
--      old_config = NB85E_UART_ASIM (chan);
--      old_clk_divlog2 = NB85E_UART_CKSR (chan);
--      old_brgen_count = NB85E_UART_BRGC (chan);
--
--      if (new_clk_divlog2 != old_clk_divlog2
--          || new_brgen_count != old_brgen_count)
--      {
--              /* The baud rate has changed.  First, disable the UART.  */
--              NB85E_UART_ASIM (chan) = 0;
--              old_config = 0;
--              /* Reprogram the baud-rate generator.  */
--              NB85E_UART_CKSR (chan) = new_clk_divlog2;
--              NB85E_UART_BRGC (chan) = new_brgen_count;
--      }
--
--      if (! (old_config & NB85E_UART_ASIM_CAE)) {
--              /* If we are enabling the uart for the first time, start
--                 by turning on the enable bit, which must be done
--                 before turning on any other bits.  */
--              NB85E_UART_ASIM (chan) = NB85E_UART_ASIM_CAE;
--              /* Enabling the uart also resets it.  */
--              old_config = NB85E_UART_ASIM_CAE;
--      }
--
--      if (new_config != old_config) {
--              /* Which of the TXE/RXE bits we'll temporarily turn off
--                 before changing other control bits.  */
--              unsigned temp_disable = 0;
--              /* Which of the TXE/RXE bits will be enabled.  */
--              unsigned enable = 0;
--              unsigned changed_bits = new_config ^ old_config;
--
--              /* Which of RX/TX will be enabled in the new configuration.  */
--              if (new_config & RX_BITS)
--                      enable |= (new_config & NB85E_UART_ASIM_RXE);
--              if (new_config & TX_BITS)
--                      enable |= (new_config & NB85E_UART_ASIM_TXE);
--
--              /* Figure out which of RX/TX needs to be disabled; note
--                 that this will only happen if they're not already
--                 disabled.  */
--              if (changed_bits & RX_BITS)
--                      temp_disable |= (old_config & NB85E_UART_ASIM_RXE);
--              if (changed_bits & TX_BITS)
--                      temp_disable |= (old_config & NB85E_UART_ASIM_TXE);
--
--              /* We have to turn off RX and/or TX mode before changing
--                 any associated control bits.  */
--              if (temp_disable)
--                      NB85E_UART_ASIM (chan) = old_config & ~temp_disable;
--
--              /* Write the new control bits, while RX/TX are disabled. */ 
--              if (changed_bits & ~enable)
--                      NB85E_UART_ASIM (chan) = new_config & ~enable;
--
--              /* The UART may not be reset properly unless we
--                 wait at least 2 `basic-clocks' until turning
--                 on the TXE/RXE bits again.  A `basic clock'
--                 is the clock used by the baud-rate generator, i.e.,
--                 the cpu clock divided by the 2^new_clk_divlog2.  */
--              nb85e_uart_delay (1 << (new_clk_divlog2 + 1));
--
--              /* Write the final version, with enable bits turned on.  */
--              NB85E_UART_ASIM (chan) = new_config;
--      }
--
--      local_irq_restore (flags);
--}
--
--\f
--/*  Low-level console. */
--
--#ifdef CONFIG_V850E_NB85E_UART_CONSOLE
--
--static void nb85e_uart_cons_write (struct console *co,
--                                 const char *s, unsigned count)
--{
--      if (count > 0) {
--              unsigned chan = co->index;
--              unsigned irq = IRQ_INTST (chan);
--              int irq_was_enabled, irq_was_pending, flags;
--
--              /* We don't want to get `transmission completed' (INTST)
--                 interrupts, since we're busy-waiting, so we disable
--                 them while sending (we don't disable interrupts
--                 entirely because sending over a serial line is really
--                 slow).  We save the status of INTST and restore it
--                 when we're done so that using printk doesn't
--                 interfere with normal serial transmission (other than
--                 interleaving the output, of course!).  This should
--                 work correctly even if this function is interrupted
--                 and the interrupt printks something.  */
--
--              /* Disable interrupts while fiddling with INTST.  */
--              local_irq_save (flags);
--              /* Get current INTST status.  */
--              irq_was_enabled = nb85e_intc_irq_enabled (irq);
--              irq_was_pending = nb85e_intc_irq_pending (irq);
--              /* Disable INTST if necessary.  */
--              if (irq_was_enabled)
--                      nb85e_intc_disable_irq (irq);
--              /* Turn interrupts back on.  */
--              local_irq_restore (flags);
--
--              /* Send characters.  */
--              while (count > 0) {
--                      int ch = *s++;
--
--                      if (ch == '\n') {
--                              /* We don't have the benefit of a tty
--                                 driver, so translate NL into CR LF.  */
--                              nb85e_uart_wait_for_xmit_ok (chan);
--                              nb85e_uart_putc (chan, '\r');
--                      }
--
--                      nb85e_uart_wait_for_xmit_ok (chan);
--                      nb85e_uart_putc (chan, ch);
--
--                      count--;
--              }
--
--              /* Restore saved INTST status.  */
--              if (irq_was_enabled) {
--                      /* Wait for the last character we sent to be
--                         completely transmitted (as we'll get an INTST
--                         interrupt at that point).  */
--                      nb85e_uart_wait_for_xmit_done (chan);
--                      /* Clear pending interrupts received due
--                         to our transmission, unless there was already
--                         one pending, in which case we want the
--                         handler to be called.  */
--                      if (! irq_was_pending)
--                              nb85e_intc_clear_pending_irq (irq);
--                      /* ... and then turn back on handling.  */
--                      nb85e_intc_enable_irq (irq);
--              }
--      }
--}
--
--extern struct uart_driver nb85e_uart_driver;
--static struct console nb85e_uart_cons =
--{
--    .name     = "ttyS",
--    .write    = nb85e_uart_cons_write,
--    .device   = uart_console_device,
--    .flags    = CON_PRINTBUFFER,
--    .cflag    = NB85E_UART_INIT_CFLAGS,
--    .index    = -1,
--    .data     = &nb85e_uart_driver,
--};
--
--void nb85e_uart_cons_init (unsigned chan)
--{
--      nb85e_uart_configure (chan, NB85E_UART_INIT_CFLAGS,
--                            NB85E_UART_INIT_BAUD);
--      nb85e_uart_cons.index = chan;
--      register_console (&nb85e_uart_cons);
--      printk ("Console: %s on-chip UART channel %d\n",
--              NB85E_UART_CHIP_NAME, chan);
--}
--
--#define NB85E_UART_CONSOLE &nb85e_uart_cons
--
--#else /* !CONFIG_V850E_NB85E_UART_CONSOLE */
--#define NB85E_UART_CONSOLE 0
--#endif /* CONFIG_V850E_NB85E_UART_CONSOLE */
--\f
--/* TX/RX interrupt handlers.  */
--
--static void nb85e_uart_stop_tx (struct uart_port *port, unsigned tty_stop);
--
--void nb85e_uart_tx (struct uart_port *port)
--{
--      struct circ_buf *xmit = &port->info->xmit;
--      int stopped = uart_tx_stopped (port);
--
--      if (nb85e_uart_xmit_ok (port->line)) {
--              int tx_ch;
--
--              if (port->x_char) {
--                      tx_ch = port->x_char;
--                      port->x_char = 0;
--              } else if (!uart_circ_empty (xmit) && !stopped) {
--                      tx_ch = xmit->buf[xmit->tail];
--                      xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
--              } else
--                      goto no_xmit;
--
--              nb85e_uart_putc (port->line, tx_ch);
--              port->icount.tx++;
--
--              if (uart_circ_chars_pending (xmit) < WAKEUP_CHARS)
--                      uart_write_wakeup (port);
--      }
--
-- no_xmit:
--      if (uart_circ_empty (xmit) || stopped)
--              nb85e_uart_stop_tx (port, stopped);
--}
--
--static void nb85e_uart_tx_irq (int irq, void *data, struct pt_regs *regs)
--{
--      struct uart_port *port = data;
--      nb85e_uart_tx (port);
--}
--
--static void nb85e_uart_rx_irq (int irq, void *data, struct pt_regs *regs)
--{
--      struct uart_port *port = data;
--      unsigned ch_stat = TTY_NORMAL;
--      unsigned ch = NB85E_UART_RXB (port->line);
--      unsigned err = NB85E_UART_ASIS (port->line);
--
--      if (err) {
--              if (err & NB85E_UART_ASIS_OVE) {
--                      ch_stat = TTY_OVERRUN;
--                      port->icount.overrun++;
--              } else if (err & NB85E_UART_ASIS_FE) {
--                      ch_stat = TTY_FRAME;
--                      port->icount.frame++;
--              } else if (err & NB85E_UART_ASIS_PE) {
--                      ch_stat = TTY_PARITY;
--                      port->icount.parity++;
--              }
--      }
--
--      port->icount.rx++;
--
--      tty_insert_flip_char (port->info->tty, ch, ch_stat);
--      tty_schedule_flip (port->info->tty);
--}
--\f
--/* Control functions for the serial framework.  */
--
--static void nb85e_uart_nop (struct uart_port *port) { }
--static int nb85e_uart_success (struct uart_port *port) { return 0; }
--
--static unsigned nb85e_uart_tx_empty (struct uart_port *port)
--{
--      return TIOCSER_TEMT;    /* Can't detect.  */
--}
--
--static void nb85e_uart_set_mctrl (struct uart_port *port, unsigned mctrl)
--{
--#ifdef NB85E_UART_SET_RTS
--      NB85E_UART_SET_RTS (port->line, (mctrl & TIOCM_RTS));
--#endif
--}
--
--static unsigned nb85e_uart_get_mctrl (struct uart_port *port)
--{
--      /* We don't support DCD or DSR, so consider them permanently active. */
--      int mctrl = TIOCM_CAR | TIOCM_DSR;
--
--      /* We may support CTS.  */
--#ifdef NB85E_UART_CTS
--      mctrl |= NB85E_UART_CTS(port->line) ? TIOCM_CTS : 0;
--#else
--      mctrl |= TIOCM_CTS;
--#endif
--
--      return mctrl;
--}
--
--static void nb85e_uart_start_tx (struct uart_port *port, unsigned tty_start)
--{
--      nb85e_intc_disable_irq (IRQ_INTST (port->line));
--      nb85e_uart_tx (port);
--      nb85e_intc_enable_irq (IRQ_INTST (port->line));
--}
--
--static void nb85e_uart_stop_tx (struct uart_port *port, unsigned tty_stop)
--{
--      nb85e_intc_disable_irq (IRQ_INTST (port->line));
--}
--
--static void nb85e_uart_start_rx (struct uart_port *port)
--{
--      nb85e_intc_enable_irq (IRQ_INTSR (port->line));
--}
--
--static void nb85e_uart_stop_rx (struct uart_port *port)
--{
--      nb85e_intc_disable_irq (IRQ_INTSR (port->line));
--}
--
--static void nb85e_uart_break_ctl (struct uart_port *port, int break_ctl)
--{
--      /* Umm, do this later.  */
--}
--
--static int nb85e_uart_startup (struct uart_port *port)
--{
--      int err;
--
--      /* Alloc RX irq.  */
--      err = request_irq (IRQ_INTSR (port->line), nb85e_uart_rx_irq,
--                         SA_INTERRUPT, "nb85e_uart", port);
--      if (err)
--              return err;
--
--      /* Alloc TX irq.  */
--      err = request_irq (IRQ_INTST (port->line), nb85e_uart_tx_irq,
--                         SA_INTERRUPT, "nb85e_uart", port);
--      if (err) {
--              free_irq (IRQ_INTSR (port->line), port);
--              return err;
--      }
--
--      nb85e_uart_start_rx (port);
--
--      return 0;
--}
--
--static void nb85e_uart_shutdown (struct uart_port *port)
--{
--      /* Disable port interrupts.  */
--      free_irq (IRQ_INTST (port->line), port);
--      free_irq (IRQ_INTSR (port->line), port);
--
--      /* Turn off xmit/recv enable bits.  */
--      NB85E_UART_ASIM (port->line)
--              &= ~(NB85E_UART_ASIM_TXE | NB85E_UART_ASIM_RXE);
--      /* Then reset the channel.  */
--      NB85E_UART_ASIM (port->line) = 0;
--}
--
--static void
--nb85e_uart_set_termios (struct uart_port *port, struct termios *termios,
--                      struct termios *old)
--{
--      unsigned cflags = termios->c_cflag;
--
--      /* Restrict flags to legal values.  */
--      if ((cflags & CSIZE) != CS7 && (cflags & CSIZE) != CS8)
--              /* The new value of CSIZE is invalid, use the old value.  */
--              cflags = (cflags & ~CSIZE)
--                      | (old ? (old->c_cflag & CSIZE) : CS8);
--
--      termios->c_cflag = cflags;
--
--      nb85e_uart_configure (port->line, cflags,
--                            uart_get_baud_rate (port, termios, old,
--                                                min_baud(), max_baud()));
--}
--
--static const char *nb85e_uart_type (struct uart_port *port)
--{
--      return port->type == PORT_NB85E_UART ? "nb85e_uart" : 0;
--}
--
--static void nb85e_uart_config_port (struct uart_port *port, int flags)
--{
--      if (flags & UART_CONFIG_TYPE)
--              port->type = PORT_NB85E_UART;
--}
--
--static int
--nb85e_uart_verify_port (struct uart_port *port, struct serial_struct *ser)
--{
--      if (ser->type != PORT_UNKNOWN && ser->type != PORT_NB85E_UART)
--              return -EINVAL;
--      if (ser->irq != IRQ_INTST (port->line))
--              return -EINVAL;
--      return 0;
--}
--
--static struct uart_ops nb85e_uart_ops = {
--      .tx_empty       = nb85e_uart_tx_empty,
--      .get_mctrl      = nb85e_uart_get_mctrl,
--      .set_mctrl      = nb85e_uart_set_mctrl,
--      .start_tx       = nb85e_uart_start_tx,
--      .stop_tx        = nb85e_uart_stop_tx,
--      .stop_rx        = nb85e_uart_stop_rx,
--      .enable_ms      = nb85e_uart_nop,
--      .break_ctl      = nb85e_uart_break_ctl,
--      .startup        = nb85e_uart_startup,
--      .shutdown       = nb85e_uart_shutdown,
--      .set_termios    = nb85e_uart_set_termios,
--      .type           = nb85e_uart_type,
--      .release_port   = nb85e_uart_nop,
--      .request_port   = nb85e_uart_success,
--      .config_port    = nb85e_uart_config_port,
--      .verify_port    = nb85e_uart_verify_port,
--};
--\f
--/* Initialization and cleanup.  */
--
--static struct uart_driver nb85e_uart_driver = {
--      .owner                  = THIS_MODULE,
--      .driver_name            = "nb85e_uart",
--      .devfs_name             = "tts/",
--      .dev_name               = "ttyS",
--      .major                  = TTY_MAJOR,
--      .minor                  = NB85E_UART_MINOR_BASE,
--      .nr                     = NB85E_UART_NUM_CHANNELS,
--      .cons                   = NB85E_UART_CONSOLE,
--};
--
--
--static struct uart_port nb85e_uart_ports[NB85E_UART_NUM_CHANNELS];
--
--static int __init nb85e_uart_init (void)
--{
--      int rval;
--
--      printk (KERN_INFO "%s on-chip UART\n", NB85E_UART_CHIP_NAME);
--
--      rval = uart_register_driver (&nb85e_uart_driver);
--      if (rval == 0) {
--              unsigned chan;
--
--              for (chan = 0; chan < NB85E_UART_NUM_CHANNELS; chan++) {
--                      struct uart_port *port = &nb85e_uart_ports[chan];
--                      
--                      memset (port, 0, sizeof *port);
--
--                      port->ops = &nb85e_uart_ops;
--                      port->line = chan;
--                      port->iotype = SERIAL_IO_MEM;
--                      port->flags = UPF_BOOT_AUTOCONF;
--
--                      /* We actually use multiple IRQs, but the serial
--                         framework seems to mainly use this for
--                         informational purposes anyway.  Here we use the TX
--                         irq.  */
--                      port->irq = IRQ_INTST (chan);
--
--                      /* The serial framework doesn't really use these
--                         membase/mapbase fields for anything useful, but
--                         it requires that they be something non-zero to
--                         consider the port `valid', and also uses them
--                         for informational purposes.  */
--                      port->membase = (void *)NB85E_UART_BASE_ADDR (chan);
--                      port->mapbase = NB85E_UART_BASE_ADDR (chan);
--
--                      /* The framework insists on knowing the uart's master
--                         clock freq, though it doesn't seem to do anything
--                         useful for us with it.  We must make it at least
--                         higher than (the maximum baud rate * 16), otherwise
--                         the framework will puke during its internal
--                         calculations, and force the baud rate to be 9600.
--                         To be accurate though, just repeat the calculation
--                         we use when actually setting the speed.
--
--                         The `* 8' means `* 16 / 2':  16 to account for for
--                         the serial framework's built-in bias, and 2 because
--                         there's an additional / 2 in the hardware.  */
--                      port->uartclk =
--                              (NB85E_UART_BASE_FREQ >> cksr_min()) * 8;
--
--                      uart_add_one_port (&nb85e_uart_driver, port);
--              }
--      }
--
--      return rval;
--}
--
--static void __exit nb85e_uart_exit (void)
--{
--      unsigned chan;
--
--      for (chan = 0; chan < NB85E_UART_NUM_CHANNELS; chan++)
--              uart_remove_one_port (&nb85e_uart_driver,
--                                    &nb85e_uart_ports[chan]);
--
--      uart_unregister_driver (&nb85e_uart_driver);
--}
--
--module_init (nb85e_uart_init);
--module_exit (nb85e_uart_exit);
--
--MODULE_AUTHOR ("Miles Bader");
--MODULE_DESCRIPTION ("NEC " NB85E_UART_CHIP_NAME " on-chip UART");
--MODULE_LICENSE ("GPL");
---- linux-2.6.0-test1/drivers/serial/sunsu.c   2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/sunsu.c  2003-07-19 17:03:50.000000000 -0700
-@@ -102,6 +102,7 @@ struct uart_sunsu_port {
-       int                     l1_down;
- #ifdef CONFIG_SERIO
-       struct serio            serio;
-+      int                     serio_open;
- #endif
- };
-@@ -1021,12 +1022,13 @@ static int sunsu_serio_write(struct seri
- static int sunsu_serio_open(struct serio *serio)
- {
-+      struct uart_sunsu_port *up = serio->driver;
-       unsigned long flags;
-       int ret;
-       spin_lock_irqsave(&sunsu_serio_lock, flags);
--      if (serio->private == NULL) {
--              serio->private = (void *) -1L;
-+      if (!up->serio_open) {
-+              up->serio_open = 1;
-               ret = 0;
-       } else
-               ret = -EBUSY;
-@@ -1037,10 +1039,11 @@ static int sunsu_serio_open(struct serio
- static void sunsu_serio_close(struct serio *serio)
- {
-+      struct uart_sunsu_port *up = serio->driver;
-       unsigned long flags;
-       spin_lock_irqsave(&sunsu_serio_lock, flags);
--      serio->private = NULL;
-+      up->serio_open = 0;
-       spin_unlock_irqrestore(&sunsu_serio_lock, flags);
- }
---- linux-2.6.0-test1/drivers/serial/sunzilog.c        2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/serial/sunzilog.c       2003-07-19 17:03:50.000000000 -0700
-@@ -112,6 +112,7 @@ struct uart_sunzilog_port {
- #ifdef CONFIG_SERIO
-       struct serio                    serio;
-+      int                             serio_open;
- #endif
- };
-@@ -1311,12 +1312,13 @@ static int sunzilog_serio_write(struct s
- static int sunzilog_serio_open(struct serio *serio)
- {
-+      struct uart_sunzilog_port *up = serio->driver;
-       unsigned long flags;
-       int ret;
-       spin_lock_irqsave(&sunzilog_serio_lock, flags);
--      if (serio->private == NULL) {
--              serio->private = (void *) -1L;
-+      if (!up->serio_open) {
-+              up->serio_open = 1;
-               ret = 0;
-       } else
-               ret = -EBUSY;
-@@ -1327,10 +1329,11 @@ static int sunzilog_serio_open(struct se
- static void sunzilog_serio_close(struct serio *serio)
- {
-+      struct uart_sunzilog_port *up = serio->driver;
-       unsigned long flags;
-       spin_lock_irqsave(&sunzilog_serio_lock, flags);
--      serio->private = NULL;
-+      up->serio_open = 0;
-       spin_unlock_irqrestore(&sunzilog_serio_lock, flags);
- }
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/serial/v850e_uart.c     2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,549 @@
-+/*
-+ * drivers/serial/v850e_uart.c -- Serial I/O using V850E on-chip UART or UARTB
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This driver supports both the original V850E UART interface (called
-+   merely `UART' in the docs) and the newer `UARTB' interface, which is
-+   roughly a superset of the first one.  The selection is made at
-+   configure time -- if CONFIG_V850E_UARTB is defined, then UARTB is
-+   presumed, otherwise the old UART -- as these are on-CPU UARTS, a system
-+   can never have both.
-+
-+   The UARTB interface also has a 16-entry FIFO mode, which is not
-+   yet supported by this driver.  */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/console.h>
-+#include <linux/tty.h>
-+#include <linux/tty_flip.h>
-+#include <linux/serial.h>
-+#include <linux/serial_core.h>
-+
-+#include <asm/v850e_uart.h>
-+
-+/* Initial UART state.  This may be overridden by machine-dependent headers. */
-+#ifndef V850E_UART_INIT_BAUD
-+#define V850E_UART_INIT_BAUD  115200
-+#endif
-+#ifndef V850E_UART_INIT_CFLAGS
-+#define V850E_UART_INIT_CFLAGS        (B115200 | CS8 | CREAD)
-+#endif
-+
-+/* A string used for prefixing printed descriptions; since the same UART
-+   macro is actually used on other chips than the V850E.  This must be a
-+   constant string.  */
-+#ifndef V850E_UART_CHIP_NAME
-+#define V850E_UART_CHIP_NAME  "V850E"
-+#endif
-+
-+#define V850E_UART_MINOR_BASE 64         /* First tty minor number */
-+
-+\f
-+/* Low-level UART functions.  */
-+
-+/* Configure and turn on uart channel CHAN, using the termios `control
-+   modes' bits in CFLAGS, and a baud-rate of BAUD.  */
-+void v850e_uart_configure (unsigned chan, unsigned cflags, unsigned baud)
-+{
-+      int flags;
-+      v850e_uart_speed_t old_speed;
-+      v850e_uart_config_t old_config;
-+      v850e_uart_speed_t new_speed = v850e_uart_calc_speed (baud);
-+      v850e_uart_config_t new_config = v850e_uart_calc_config (cflags);
-+
-+      /* Disable interrupts while we're twiddling the hardware.  */
-+      local_irq_save (flags);
-+
-+#ifdef V850E_UART_PRE_CONFIGURE
-+      V850E_UART_PRE_CONFIGURE (chan, cflags, baud);
-+#endif
-+
-+      old_config = V850E_UART_CONFIG (chan);
-+      old_speed = v850e_uart_speed (chan);
-+
-+      if (! v850e_uart_speed_eq (old_speed, new_speed)) {
-+              /* The baud rate has changed.  First, disable the UART.  */
-+              V850E_UART_CONFIG (chan) = V850E_UART_CONFIG_FINI;
-+              old_config = 0; /* Force the uart to be re-initialized. */
-+
-+              /* Reprogram the baud-rate generator.  */
-+              v850e_uart_set_speed (chan, new_speed);
-+      }
-+
-+      if (! (old_config & V850E_UART_CONFIG_ENABLED)) {
-+              /* If we are using the uart for the first time, start by
-+                 enabling it, which must be done before turning on any
-+                 other bits.  */
-+              V850E_UART_CONFIG (chan) = V850E_UART_CONFIG_INIT;
-+              /* See the initial state.  */
-+              old_config = V850E_UART_CONFIG (chan);
-+      }
-+
-+      if (new_config != old_config) {
-+              /* Which of the TXE/RXE bits we'll temporarily turn off
-+                 before changing other control bits.  */
-+              unsigned temp_disable = 0;
-+              /* Which of the TXE/RXE bits will be enabled.  */
-+              unsigned enable = 0;
-+              unsigned changed_bits = new_config ^ old_config;
-+
-+              /* Which of RX/TX will be enabled in the new configuration.  */
-+              if (new_config & V850E_UART_CONFIG_RX_BITS)
-+                      enable |= (new_config & V850E_UART_CONFIG_RX_ENABLE);
-+              if (new_config & V850E_UART_CONFIG_TX_BITS)
-+                      enable |= (new_config & V850E_UART_CONFIG_TX_ENABLE);
-+
-+              /* Figure out which of RX/TX needs to be disabled; note
-+                 that this will only happen if they're not already
-+                 disabled.  */
-+              if (changed_bits & V850E_UART_CONFIG_RX_BITS)
-+                      temp_disable
-+                              |= (old_config & V850E_UART_CONFIG_RX_ENABLE);
-+              if (changed_bits & V850E_UART_CONFIG_TX_BITS)
-+                      temp_disable
-+                              |= (old_config & V850E_UART_CONFIG_TX_ENABLE);
-+
-+              /* We have to turn off RX and/or TX mode before changing
-+                 any associated control bits.  */
-+              if (temp_disable)
-+                      V850E_UART_CONFIG (chan) = old_config & ~temp_disable;
-+
-+              /* Write the new control bits, while RX/TX are disabled. */ 
-+              if (changed_bits & ~enable)
-+                      V850E_UART_CONFIG (chan) = new_config & ~enable;
-+
-+              v850e_uart_config_delay (new_config, new_speed);
-+
-+              /* Write the final version, with enable bits turned on.  */
-+              V850E_UART_CONFIG (chan) = new_config;
-+      }
-+
-+      local_irq_restore (flags);
-+}
-+
-+\f
-+/*  Low-level console. */
-+
-+#ifdef CONFIG_V850E_UART_CONSOLE
-+
-+static void v850e_uart_cons_write (struct console *co,
-+                                 const char *s, unsigned count)
-+{
-+      if (count > 0) {
-+              unsigned chan = co->index;
-+              unsigned irq = V850E_UART_TX_IRQ (chan);
-+              int irq_was_enabled, irq_was_pending, flags;
-+
-+              /* We don't want to get `transmission completed'
-+                 interrupts, since we're busy-waiting, so we disable them
-+                 while sending (we don't disable interrupts entirely
-+                 because sending over a serial line is really slow).  We
-+                 save the status of the tx interrupt and restore it when
-+                 we're done so that using printk doesn't interfere with
-+                 normal serial transmission (other than interleaving the
-+                 output, of course!).  This should work correctly even if
-+                 this function is interrupted and the interrupt printks
-+                 something.  */
-+
-+              /* Disable interrupts while fiddling with tx interrupt.  */
-+              local_irq_save (flags);
-+              /* Get current tx interrupt status.  */
-+              irq_was_enabled = v850e_intc_irq_enabled (irq);
-+              irq_was_pending = v850e_intc_irq_pending (irq);
-+              /* Disable tx interrupt if necessary.  */
-+              if (irq_was_enabled)
-+                      v850e_intc_disable_irq (irq);
-+              /* Turn interrupts back on.  */
-+              local_irq_restore (flags);
-+
-+              /* Send characters.  */
-+              while (count > 0) {
-+                      int ch = *s++;
-+
-+                      if (ch == '\n') {
-+                              /* We don't have the benefit of a tty
-+                                 driver, so translate NL into CR LF.  */
-+                              v850e_uart_wait_for_xmit_ok (chan);
-+                              v850e_uart_putc (chan, '\r');
-+                      }
-+
-+                      v850e_uart_wait_for_xmit_ok (chan);
-+                      v850e_uart_putc (chan, ch);
-+
-+                      count--;
-+              }
-+
-+              /* Restore saved tx interrupt status.  */
-+              if (irq_was_enabled) {
-+                      /* Wait for the last character we sent to be
-+                         completely transmitted (as we'll get an
-+                         interrupt interrupt at that point).  */
-+                      v850e_uart_wait_for_xmit_done (chan);
-+                      /* Clear pending interrupts received due
-+                         to our transmission, unless there was already
-+                         one pending, in which case we want the
-+                         handler to be called.  */
-+                      if (! irq_was_pending)
-+                              v850e_intc_clear_pending_irq (irq);
-+                      /* ... and then turn back on handling.  */
-+                      v850e_intc_enable_irq (irq);
-+              }
-+      }
-+}
-+
-+extern struct uart_driver v850e_uart_driver;
-+static struct console v850e_uart_cons =
-+{
-+    .name     = "ttyS",
-+    .write    = v850e_uart_cons_write,
-+    .device   = uart_console_device,
-+    .flags    = CON_PRINTBUFFER,
-+    .cflag    = V850E_UART_INIT_CFLAGS,
-+    .index    = -1,
-+    .data     = &v850e_uart_driver,
-+};
-+
-+void v850e_uart_cons_init (unsigned chan)
-+{
-+      v850e_uart_configure (chan, V850E_UART_INIT_CFLAGS,
-+                            V850E_UART_INIT_BAUD);
-+      v850e_uart_cons.index = chan;
-+      register_console (&v850e_uart_cons);
-+      printk ("Console: %s on-chip UART channel %d\n",
-+              V850E_UART_CHIP_NAME, chan);
-+}
-+
-+/* This is what the init code actually calls.  */
-+static int v850e_uart_console_init (void)
-+{
-+      v850e_uart_cons_init (V850E_UART_CONSOLE_CHANNEL);
-+      return 0;
-+}
-+console_initcall(v850e_uart_console_init);
-+
-+#define V850E_UART_CONSOLE &v850e_uart_cons
-+
-+#else /* !CONFIG_V850E_UART_CONSOLE */
-+#define V850E_UART_CONSOLE 0
-+#endif /* CONFIG_V850E_UART_CONSOLE */
-+\f
-+/* TX/RX interrupt handlers.  */
-+
-+static void v850e_uart_stop_tx (struct uart_port *port, unsigned tty_stop);
-+
-+void v850e_uart_tx (struct uart_port *port)
-+{
-+      struct circ_buf *xmit = &port->info->xmit;
-+      int stopped = uart_tx_stopped (port);
-+
-+      if (v850e_uart_xmit_ok (port->line)) {
-+              int tx_ch;
-+
-+              if (port->x_char) {
-+                      tx_ch = port->x_char;
-+                      port->x_char = 0;
-+              } else if (!uart_circ_empty (xmit) && !stopped) {
-+                      tx_ch = xmit->buf[xmit->tail];
-+                      xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
-+              } else
-+                      goto no_xmit;
-+
-+              v850e_uart_putc (port->line, tx_ch);
-+              port->icount.tx++;
-+
-+              if (uart_circ_chars_pending (xmit) < WAKEUP_CHARS)
-+                      uart_write_wakeup (port);
-+      }
-+
-+ no_xmit:
-+      if (uart_circ_empty (xmit) || stopped)
-+              v850e_uart_stop_tx (port, stopped);
-+}
-+
-+static irqreturn_t v850e_uart_tx_irq(int irq, void *data, struct pt_regs *regs)
-+{
-+      struct uart_port *port = data;
-+      v850e_uart_tx (port);
-+      return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t v850e_uart_rx_irq(int irq, void *data, struct pt_regs *regs)
-+{
-+      struct uart_port *port = data;
-+      unsigned ch_stat = TTY_NORMAL;
-+      unsigned ch = v850e_uart_getc (port->line);
-+      unsigned err = v850e_uart_err (port->line);
-+
-+      if (err) {
-+              if (err & V850E_UART_ERR_OVERRUN) {
-+                      ch_stat = TTY_OVERRUN;
-+                      port->icount.overrun++;
-+              } else if (err & V850E_UART_ERR_FRAME) {
-+                      ch_stat = TTY_FRAME;
-+                      port->icount.frame++;
-+              } else if (err & V850E_UART_ERR_PARITY) {
-+                      ch_stat = TTY_PARITY;
-+                      port->icount.parity++;
-+              }
-+      }
-+
-+      port->icount.rx++;
-+
-+      tty_insert_flip_char (port->info->tty, ch, ch_stat);
-+      tty_schedule_flip (port->info->tty);
-+
-+      return IRQ_HANDLED;
-+}
-+
-+\f
-+/* Control functions for the serial framework.  */
-+
-+static void v850e_uart_nop (struct uart_port *port) { }
-+static int v850e_uart_success (struct uart_port *port) { return 0; }
-+
-+static unsigned v850e_uart_tx_empty (struct uart_port *port)
-+{
-+      return TIOCSER_TEMT;    /* Can't detect.  */
-+}
-+
-+static void v850e_uart_set_mctrl (struct uart_port *port, unsigned mctrl)
-+{
-+#ifdef V850E_UART_SET_RTS
-+      V850E_UART_SET_RTS (port->line, (mctrl & TIOCM_RTS));
-+#endif
-+}
-+
-+static unsigned v850e_uart_get_mctrl (struct uart_port *port)
-+{
-+      /* We don't support DCD or DSR, so consider them permanently active. */
-+      int mctrl = TIOCM_CAR | TIOCM_DSR;
-+
-+      /* We may support CTS.  */
-+#ifdef V850E_UART_CTS
-+      mctrl |= V850E_UART_CTS(port->line) ? TIOCM_CTS : 0;
-+#else
-+      mctrl |= TIOCM_CTS;
-+#endif
-+
-+      return mctrl;
-+}
-+
-+static void v850e_uart_start_tx (struct uart_port *port, unsigned tty_start)
-+{
-+      v850e_intc_disable_irq (V850E_UART_TX_IRQ (port->line));
-+      v850e_uart_tx (port);
-+      v850e_intc_enable_irq (V850E_UART_TX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_stop_tx (struct uart_port *port, unsigned tty_stop)
-+{
-+      v850e_intc_disable_irq (V850E_UART_TX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_start_rx (struct uart_port *port)
-+{
-+      v850e_intc_enable_irq (V850E_UART_RX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_stop_rx (struct uart_port *port)
-+{
-+      v850e_intc_disable_irq (V850E_UART_RX_IRQ (port->line));
-+}
-+
-+static void v850e_uart_break_ctl (struct uart_port *port, int break_ctl)
-+{
-+      /* Umm, do this later.  */
-+}
-+
-+static int v850e_uart_startup (struct uart_port *port)
-+{
-+      int err;
-+
-+      /* Alloc RX irq.  */
-+      err = request_irq (V850E_UART_RX_IRQ (port->line), v850e_uart_rx_irq,
-+                         SA_INTERRUPT, "v850e_uart", port);
-+      if (err)
-+              return err;
-+
-+      /* Alloc TX irq.  */
-+      err = request_irq (V850E_UART_TX_IRQ (port->line), v850e_uart_tx_irq,
-+                         SA_INTERRUPT, "v850e_uart", port);
-+      if (err) {
-+              free_irq (V850E_UART_RX_IRQ (port->line), port);
-+              return err;
-+      }
-+
-+      v850e_uart_start_rx (port);
-+
-+      return 0;
-+}
-+
-+static void v850e_uart_shutdown (struct uart_port *port)
-+{
-+      /* Disable port interrupts.  */
-+      free_irq (V850E_UART_TX_IRQ (port->line), port);
-+      free_irq (V850E_UART_RX_IRQ (port->line), port);
-+
-+      /* Turn off xmit/recv enable bits.  */
-+      V850E_UART_CONFIG (port->line)
-+              &= ~(V850E_UART_CONFIG_TX_ENABLE
-+                   | V850E_UART_CONFIG_RX_ENABLE);
-+      /* Then reset the channel.  */
-+      V850E_UART_CONFIG (port->line) = 0;
-+}
-+
-+static void
-+v850e_uart_set_termios (struct uart_port *port, struct termios *termios,
-+                      struct termios *old)
-+{
-+      unsigned cflags = termios->c_cflag;
-+
-+      /* Restrict flags to legal values.  */
-+      if ((cflags & CSIZE) != CS7 && (cflags & CSIZE) != CS8)
-+              /* The new value of CSIZE is invalid, use the old value.  */
-+              cflags = (cflags & ~CSIZE)
-+                      | (old ? (old->c_cflag & CSIZE) : CS8);
-+
-+      termios->c_cflag = cflags;
-+
-+      v850e_uart_configure (port->line, cflags,
-+                            uart_get_baud_rate (port, termios, old,
-+                                                v850e_uart_min_baud(),
-+                                                v850e_uart_max_baud()));
-+}
-+
-+static const char *v850e_uart_type (struct uart_port *port)
-+{
-+      return port->type == PORT_V850E_UART ? "v850e_uart" : 0;
-+}
-+
-+static void v850e_uart_config_port (struct uart_port *port, int flags)
-+{
-+      if (flags & UART_CONFIG_TYPE)
-+              port->type = PORT_V850E_UART;
-+}
-+
-+static int
-+v850e_uart_verify_port (struct uart_port *port, struct serial_struct *ser)
-+{
-+      if (ser->type != PORT_UNKNOWN && ser->type != PORT_V850E_UART)
-+              return -EINVAL;
-+      if (ser->irq != V850E_UART_TX_IRQ (port->line))
-+              return -EINVAL;
-+      return 0;
-+}
-+
-+static struct uart_ops v850e_uart_ops = {
-+      .tx_empty       = v850e_uart_tx_empty,
-+      .get_mctrl      = v850e_uart_get_mctrl,
-+      .set_mctrl      = v850e_uart_set_mctrl,
-+      .start_tx       = v850e_uart_start_tx,
-+      .stop_tx        = v850e_uart_stop_tx,
-+      .stop_rx        = v850e_uart_stop_rx,
-+      .enable_ms      = v850e_uart_nop,
-+      .break_ctl      = v850e_uart_break_ctl,
-+      .startup        = v850e_uart_startup,
-+      .shutdown       = v850e_uart_shutdown,
-+      .set_termios    = v850e_uart_set_termios,
-+      .type           = v850e_uart_type,
-+      .release_port   = v850e_uart_nop,
-+      .request_port   = v850e_uart_success,
-+      .config_port    = v850e_uart_config_port,
-+      .verify_port    = v850e_uart_verify_port,
-+};
-+\f
-+/* Initialization and cleanup.  */
-+
-+static struct uart_driver v850e_uart_driver = {
-+      .owner                  = THIS_MODULE,
-+      .driver_name            = "v850e_uart",
-+      .devfs_name             = "tts/",
-+      .dev_name               = "ttyS",
-+      .major                  = TTY_MAJOR,
-+      .minor                  = V850E_UART_MINOR_BASE,
-+      .nr                     = V850E_UART_NUM_CHANNELS,
-+      .cons                   = V850E_UART_CONSOLE,
-+};
-+
-+
-+static struct uart_port v850e_uart_ports[V850E_UART_NUM_CHANNELS];
-+
-+static int __init v850e_uart_init (void)
-+{
-+      int rval;
-+
-+      printk (KERN_INFO "%s on-chip UART\n", V850E_UART_CHIP_NAME);
-+
-+      rval = uart_register_driver (&v850e_uart_driver);
-+      if (rval == 0) {
-+              unsigned chan;
-+
-+              for (chan = 0; chan < V850E_UART_NUM_CHANNELS; chan++) {
-+                      struct uart_port *port = &v850e_uart_ports[chan];
-+                      
-+                      memset (port, 0, sizeof *port);
-+
-+                      port->ops = &v850e_uart_ops;
-+                      port->line = chan;
-+                      port->iotype = SERIAL_IO_MEM;
-+                      port->flags = UPF_BOOT_AUTOCONF;
-+
-+                      /* We actually use multiple IRQs, but the serial
-+                         framework seems to mainly use this for
-+                         informational purposes anyway.  Here we use the TX
-+                         irq.  */
-+                      port->irq = V850E_UART_TX_IRQ (chan);
-+
-+                      /* The serial framework doesn't really use these
-+                         membase/mapbase fields for anything useful, but
-+                         it requires that they be something non-zero to
-+                         consider the port `valid', and also uses them
-+                         for informational purposes.  */
-+                      port->membase = (void *)V850E_UART_BASE_ADDR (chan);
-+                      port->mapbase = V850E_UART_BASE_ADDR (chan);
-+
-+                      /* The framework insists on knowing the uart's master
-+                         clock freq, though it doesn't seem to do anything
-+                         useful for us with it.  We must make it at least
-+                         higher than (the maximum baud rate * 16), otherwise
-+                         the framework will puke during its internal
-+                         calculations, and force the baud rate to be 9600.
-+                         To be accurate though, just repeat the calculation
-+                         we use when actually setting the speed.  */
-+                      port->uartclk = v850e_uart_max_clock() * 16;
-+
-+                      uart_add_one_port (&v850e_uart_driver, port);
-+              }
-+      }
-+
-+      return rval;
-+}
-+
-+static void __exit v850e_uart_exit (void)
-+{
-+      unsigned chan;
-+
-+      for (chan = 0; chan < V850E_UART_NUM_CHANNELS; chan++)
-+              uart_remove_one_port (&v850e_uart_driver,
-+                                    &v850e_uart_ports[chan]);
-+
-+      uart_unregister_driver (&v850e_uart_driver);
-+}
-+
-+module_init (v850e_uart_init);
-+module_exit (v850e_uart_exit);
-+
-+MODULE_AUTHOR ("Miles Bader");
-+MODULE_DESCRIPTION ("NEC " V850E_UART_CHIP_NAME " on-chip UART");
-+MODULE_LICENSE ("GPL");
---- linux-2.6.0-test1/drivers/telephony/ixj.c  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/telephony/ixj.c 2003-07-19 17:03:50.000000000 -0700
-@@ -23,6 +23,7 @@
-  * Fixes:           David Huggins-Daines, <dhd@cepstral.com>
-  *                  Fabio Ferrari, <fabio.ferrari@digitro.com.br>
-  *                  Artis Kugevics, <artis@mt.lv>
-+ *                  Daniele Bellucci, <bellucda@tiscali.it>
-  *
-  * More information about the hardware related to this driver can be found  
-  * at our website:    http://www.quicknet.net
-@@ -45,6 +46,10 @@ static char ixj_c_revision[] = "$Revisio
- /*
-  * $Log: ixj.c,v $
-+ *
-+ * Revision 4.8  2003/07/09 19:39:00  Daniele Bellucci
-+ * Audit some copy_*_user and minor cleanup.
-+ *
-  * Revision 4.7  2001/08/13 06:19:33  craigs
-  * Added additional changes from Alan Cox and John Anderson for
-  * 2.2 to 2.4 cleanup and bounds checking
-@@ -363,12 +368,9 @@ static IXJ ixj[IXJMAX];
- static IXJ *ixj_alloc(void)
- {
-       int cnt;
--      for(cnt=0; cnt<IXJMAX; cnt++)
--      {
-+      for(cnt=0; cnt<IXJMAX; cnt++) {
-               if(!ixj[cnt].DSPbase)
--              {
-                       return &ixj[cnt];
--              }
-       }
-       return NULL;
- }
-@@ -6260,9 +6262,11 @@ static int ixj_ioctl(struct inode *inode
-               break;
-       case IXJCTL_CIDCW:
-               if(arg) {
--                      copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID));
--              }
--              else {
-+                      if (copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID))) {
-+                              retval = -EFAULT;
-+                              break;
-+                      }
-+              } else {
-                       memset(&j->cid_send, 0, sizeof(PHONE_CID));
-               }
-               ixj_write_cidcw(j);
-@@ -6273,14 +6277,12 @@ static int ixj_ioctl(struct inode *inode
-                 /* Fall through */
-       case PHONE_RING_START:
-               if(arg) {
--                      if(copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID)))
--                      {
-+                      if (copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID))) {
-                               retval = -EFAULT;
-                               break;
-                       }
-                       ixj_write_cid(j);
--              }
--              else {
-+              } else {
-                       memset(&j->cid_send, 0, sizeof(PHONE_CID));
-               }
-               ixj_ring_start(j);
-@@ -6696,7 +6698,8 @@ static int ixj_ioctl(struct inode *inode
-       case IXJCTL_SET_FILTER_RAW:
-               if (copy_from_user(&jfr, (char *) arg, sizeof(jfr))) 
-                       retval = -EFAULT;
--              retval = ixj_init_filter_raw(j, &jfr);
-+              else
-+                      retval = ixj_init_filter_raw(j, &jfr);
-               break;
-       case IXJCTL_GET_FILTER_HIST:
-               if(arg<0||arg>3)
-@@ -6705,8 +6708,10 @@ static int ixj_ioctl(struct inode *inode
-                       retval = j->filter_hist[arg];
-               break;
-       case IXJCTL_INIT_TONE:
--              copy_from_user(&ti, (char *) arg, sizeof(ti));
--              retval = ixj_init_tone(j, &ti);
-+              if (copy_from_user(&ti, (char *) arg, sizeof(ti)))
-+                      retval = -EFAULT;
-+              else
-+                      retval = ixj_init_tone(j, &ti);
-               break;
-       case IXJCTL_TONE_CADENCE:
-               retval = ixj_build_cadence(j, (IXJ_CADENCE *) arg);
-@@ -6715,8 +6720,10 @@ static int ixj_ioctl(struct inode *inode
-               retval = ixj_build_filter_cadence(j, (IXJ_FILTER_CADENCE *) arg);
-               break;
-       case IXJCTL_SIGCTL:
--              if (copy_from_user(&j->sigdef, (char *)arg, sizeof(IXJ_SIGDEF)))
-+              if (copy_from_user(&j->sigdef, (char *)arg, sizeof(IXJ_SIGDEF))) {
-                       retval = -EFAULT;
-+                      break;
-+              }
-               j->ixj_signals[j->sigdef.event] = j->sigdef.signal;
-               if(j->sigdef.event < 33) {
-                       raise = 1;
-@@ -7693,7 +7700,7 @@ MODULE_DESCRIPTION("Quicknet VoIP Teleph
- MODULE_AUTHOR("Ed Okerson <eokerson@quicknet.net>");
- MODULE_LICENSE("GPL");
--void ixj_exit(void)
-+static void __exit ixj_exit(void)
- {
-         cleanup();
- }
-@@ -7852,7 +7859,7 @@ int __init ixj_probe_pci(int *cnt)
-       return probe;
- }
--int __init ixj_init(void)
-+static int __init ixj_init(void)
- {
-       int cnt = 0;
-       int probe = 0;   
---- linux-2.6.0-test1/drivers/telephony/Kconfig        2003-06-14 12:18:00.000000000 -0700
-+++ 25/drivers/telephony/Kconfig       2003-07-19 17:03:50.000000000 -0700
-@@ -39,7 +39,7 @@ config PHONE_IXJ
- config PHONE_IXJ_PCMCIA
-       tristate "QuickNet Internet LineJack/PhoneJack PCMCIA support"
--      depends on PHONE_IXJ
-+      depends on PHONE_IXJ && PCMCIA
-       help
-         Say Y here to configure in PCMCIA service support for the Quicknet
-         cards manufactured by Quicknet Technologies, Inc.  This changes the
---- linux-2.6.0-test1/drivers/usb/class/bluetty.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/class/bluetty.c     2003-07-19 17:03:50.000000000 -0700
-@@ -1320,7 +1320,8 @@ int usb_bluetooth_init(void)
-       bluetooth_tty_driver->owner = THIS_MODULE;
-       bluetooth_tty_driver->driver_name = "usb-bluetooth";
--      bluetooth_tty_driver->name = "usb/ttub/";
-+      bluetooth_tty_driver->name = "ttyUB";
-+      bluetooth_tty_driver->devfs_name = "usb/ttub/";
-       bluetooth_tty_driver->major = BLUETOOTH_TTY_MAJOR;
-       bluetooth_tty_driver->minor_start = 0;
-       bluetooth_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
---- linux-2.6.0-test1/drivers/usb/class/cdc-acm.c      2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/class/cdc-acm.c     2003-07-19 17:03:50.000000000 -0700
-@@ -765,7 +765,8 @@ static int __init acm_init(void)
-               return -ENOMEM;
-       acm_tty_driver->owner = THIS_MODULE,
-       acm_tty_driver->driver_name = "acm",
--      acm_tty_driver->name = "usb/acm/",
-+      acm_tty_driver->name = "ttyACM",
-+      acm_tty_driver->devfs_name = "usb/acm/",
-       acm_tty_driver->major = ACM_TTY_MAJOR,
-       acm_tty_driver->minor_start = 0,
-       acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
---- linux-2.6.0-test1/drivers/usb/class/usblp.c        2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/class/usblp.c       2003-07-19 17:03:50.000000000 -0700
-@@ -359,7 +359,6 @@ static int usblp_open(struct inode *inod
-       file->private_data = usblp;
-       usblp->writeurb->transfer_buffer_length = 0;
--      usblp->writeurb->status = 0;
-       usblp->wcomplete = 1; /* we begin writeable */
-       usblp->rcomplete = 0;
-@@ -833,22 +832,15 @@ static int usblp_probe(struct usb_interf
-       init_waitqueue_head(&usblp->wait);
-       usblp->ifnum = intf->altsetting->desc.bInterfaceNumber;
--      retval = usb_register_dev(intf, &usblp_class);
--      if (retval) {
--              err("Not able to get a minor for this device.");
--              goto abort;
--      }
--      usblp->minor = intf->minor;
--
-       usblp->writeurb = usb_alloc_urb(0, GFP_KERNEL);
-       if (!usblp->writeurb) {
-               err("out of memory");
--              goto abort_minor;
-+              goto abort;
-       }
-       usblp->readurb = usb_alloc_urb(0, GFP_KERNEL);
-       if (!usblp->readurb) {
-               err("out of memory");
--              goto abort_minor;
-+              goto abort;
-       }
-       /* Malloc device ID string buffer to the largest expected length,
-@@ -856,7 +848,7 @@ static int usblp_probe(struct usb_interf
-        * could change in length. */
-       if (!(usblp->device_id_string = kmalloc(USBLP_DEVICE_ID_SIZE, GFP_KERNEL))) {
-               err("out of memory for device_id_string");
--              goto abort_minor;
-+              goto abort;
-       }
-       usblp->writebuf = usblp->readbuf = NULL;
-@@ -868,19 +860,19 @@ static int usblp_probe(struct usb_interf
-       if (!(usblp->writebuf = usb_buffer_alloc(dev, USBLP_BUF_SIZE,
-                               GFP_KERNEL, &usblp->writeurb->transfer_dma))) {
-               err("out of memory for write buf");
--              goto abort_minor;
-+              goto abort;
-       }
-       if (!(usblp->readbuf = usb_buffer_alloc(dev, USBLP_BUF_SIZE,
-                               GFP_KERNEL, &usblp->readurb->transfer_dma))) {
-               err("out of memory for read buf");
--              goto abort_minor;
-+              goto abort;
-       }
-       /* Allocate buffer for printer status */
-       usblp->statusbuf = kmalloc(STATUS_BUF_SIZE, GFP_KERNEL);
-       if (!usblp->statusbuf) {
-               err("out of memory for statusbuf");
--              goto abort_minor;
-+              goto abort;
-       }
-       /* Lookup quirks for this printer. */
-@@ -894,12 +886,12 @@ static int usblp_probe(struct usb_interf
-               dbg("incompatible printer-class device 0x%4.4X/0x%4.4X",
-                       dev->descriptor.idVendor,
-                       dev->descriptor.idProduct);
--              goto abort_minor;
-+              goto abort;
-       }
-       /* Setup the selected alternate setting and endpoints. */
-       if (usblp_set_protocol(usblp, protocol) < 0)
--              goto abort_minor;
-+              goto abort;
-       /* Retrieve and store the device ID string. */
-       usblp_cache_device_id_string(usblp);
-@@ -920,10 +912,17 @@ static int usblp_probe(struct usb_interf
-       usblp->present = 1;
-+      retval = usb_register_dev(intf, &usblp_class);
-+      if (retval) {
-+              err("Not able to get a minor for this device.");
-+              goto abort_intfdata;
-+      }
-+      usblp->minor = intf->minor;
-+
-       return 0;
--abort_minor:
--      usb_deregister_dev(intf, &usblp_class);
-+abort_intfdata:
-+      usb_set_intfdata (intf, NULL);
- abort:
-       if (usblp) {
-               if (usblp->writebuf)
---- linux-2.6.0-test1/drivers/usb/core/file.c  2003-06-14 12:18:51.000000000 -0700
-+++ 25/drivers/usb/core/file.c 2003-07-19 17:06:13.000000000 -0700
-@@ -93,7 +93,7 @@ static ssize_t show_dev(struct class_dev
- {
-       struct usb_interface *intf = class_dev_to_usb_interface(class_dev);
-       dev_t dev = MKDEV(USB_MAJOR, intf->minor);
--      return sprintf(buf, "%04x\n", dev);
-+      return print_dev_t(buf, dev);
- }
- static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL);
---- linux-2.6.0-test1/drivers/usb/core/hcd.c   2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/core/hcd.c  2003-07-19 17:03:50.000000000 -0700
-@@ -1293,7 +1293,8 @@ rescan:
-       }
-       /* then kill any current requests */
--      spin_lock_irqsave (&hcd_data_lock, flags);
-+      local_irq_save (flags);
-+      spin_lock (&hcd_data_lock);
-       list_for_each_entry (urb, &dev->urb_list, urb_list) {
-               int     tmp = urb->pipe;
-@@ -1311,13 +1312,13 @@ rescan:
-               if (urb->status != -EINPROGRESS)
-                       continue;
-               usb_get_urb (urb);
--              spin_unlock_irqrestore (&hcd_data_lock, flags);
-+              spin_unlock (&hcd_data_lock);
--              spin_lock_irqsave (&urb->lock, flags);
-+              spin_lock (&urb->lock);
-               tmp = urb->status;
-               if (tmp == -EINPROGRESS)
-                       urb->status = -ESHUTDOWN;
--              spin_unlock_irqrestore (&urb->lock, flags);
-+              spin_unlock (&urb->lock);
-               /* kick hcd unless it's already returning this */
-               if (tmp == -EINPROGRESS) {
-@@ -1340,7 +1341,8 @@ rescan:
-               /* list contents may have changed */
-               goto rescan;
-       }
--      spin_unlock_irqrestore (&hcd_data_lock, flags);
-+      spin_unlock (&hcd_data_lock);
-+      local_irq_restore (flags);
-       /* synchronize with the hardware, so old configuration state
-        * clears out immediately (and will be freed).
---- linux-2.6.0-test1/drivers/usb/core/hcd-pci.c       2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/core/hcd-pci.c      2003-07-19 17:03:50.000000000 -0700
-@@ -81,7 +81,7 @@ int usb_hcd_pci_probe (struct pci_dev *d
-       
-         if (!dev->irq) {
-               err ("Found HC with no IRQ.  Check BIOS/PCI %s setup!",
--                      dev->slot_name);
-+                      pci_name(dev));
-               return -ENODEV;
-         }
-       
-@@ -99,7 +99,7 @@ int usb_hcd_pci_probe (struct pci_dev *d
-                       retval = -EFAULT;
- clean_1:
-                       release_mem_region (resource, len);
--                      err ("init %s fail, %d", dev->slot_name, retval);
-+                      err ("init %s fail, %d", pci_name(dev), retval);
-                       return retval;
-               }
-@@ -136,7 +136,7 @@ clean_2:
-                       goto clean_1;
-               } else {
-                       release_region (resource, len);
--                      err ("init %s fail, %d", dev->slot_name, retval);
-+                      err ("init %s fail, %d", pci_name(dev), retval);
-                       return retval;
-               }
-       }
-@@ -144,7 +144,7 @@ clean_2:
-       hcd->driver = driver;
-       hcd->description = driver->description;
-       hcd->pdev = dev;
--      hcd->self.bus_name = dev->slot_name;
-+      hcd->self.bus_name = pci_name(dev);
-       hcd->product_desc = dev->dev.name;
-       hcd->self.controller = &dev->dev;
-       hcd->controller = hcd->self.controller;
-@@ -279,6 +279,7 @@ EXPORT_SYMBOL (usb_hcd_pci_remove);
- /**
-  * usb_hcd_pci_suspend - power management suspend of a PCI-based HCD
-  * @dev: USB Host Controller being suspended
-+ * @state: state that the controller is going into
-  *
-  * Store this function in the HCD's struct pci_driver as suspend().
-  */
---- linux-2.6.0-test1/drivers/usb/core/usb.c   2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/core/usb.c  2003-07-19 17:03:50.000000000 -0700
-@@ -80,6 +80,23 @@ static struct device_driver usb_generic_
- static int usb_generic_driver_data;
-+/* deallocate hcd/hardware state ... and nuke all pending urbs */
-+static void nuke_urbs(struct usb_device *dev)
-+{
-+      void (*disable)(struct usb_device *, int);
-+      int i;
-+
-+      if (!dev || !dev->bus || !dev->bus->op || !dev->bus->op->disable)
-+              return;
-+      dbg("nuking urbs assigned to %s", dev->dev.bus_id);
-+
-+      disable = dev->bus->op->disable;
-+      for (i = 0; i < 15; i++) {
-+              disable(dev, i);
-+              disable(dev, USB_DIR_IN | i);
-+      }
-+}
-+
- /* needs to be called with BKL held */
- int usb_device_probe(struct device *dev)
- {
-@@ -116,6 +133,9 @@ int usb_device_remove(struct device *dev
-       down(&driver->serialize);
-+      /* release all urbs for this device */
-+      nuke_urbs(interface_to_usbdev(intf));
-+
-       if (intf->driver && intf->driver->disconnect)
-               intf->driver->disconnect(intf);
-@@ -896,6 +916,9 @@ void usb_disconnect(struct usb_device **
-                       usb_disconnect(child);
-       }
-+      /* deallocate hcd/hardware state ... and nuke all pending urbs */
-+      nuke_urbs(dev);
-+
-       /* disconnect() drivers from interfaces (a key side effect) */
-       dev_dbg (&dev->dev, "unregistering interfaces\n");
-       if (dev->actconfig) {
-@@ -908,16 +931,6 @@ void usb_disconnect(struct usb_device **
-               }
-       }
--      /* deallocate hcd/hardware state */
--      if (ops->disable) {
--              void    (*disable)(struct usb_device *, int) = ops->disable;
--
--              for (i = 0; i < 15; i++) {
--                      disable (dev, i);
--                      disable (dev, USB_DIR_IN | i);
--              }
--      }
--
-       dev_dbg (&dev->dev, "unregistering device\n");
-       /* Free the device number and remove the /proc/bus/usb entry */
-       if (dev->devnum > 0) {
---- linux-2.6.0-test1/drivers/usb/gadget/ether.c       2003-06-14 12:18:35.000000000 -0700
-+++ 25/drivers/usb/gadget/ether.c      2003-07-19 17:03:50.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * ether.c -- CDC 1.1 Ethernet gadget driver
-+ * ether.c -- Ethernet gadget driver, with CDC and non-CDC options
-  *
-  * Copyright (C) 2003 David Brownell
-  *
-@@ -58,21 +58,23 @@
- /*-------------------------------------------------------------------------*/
- /*
-- * "Communications Device Class" (CDC) Ethernet class driver
-+ * Ethernet gadget driver -- with CDC and non-CDC options
-  *
-  * CDC Ethernet is the standard USB solution for sending Ethernet frames
-  * using USB.  Real hardware tends to use the same framing protocol but look
-  * different for control features.  And Microsoft pushes their own approach
-  * (RNDIS) instead of the standard.
-+ *
-+ * There's some hardware that can't talk CDC.  We make that hardware
-+ * implement a "minimalist" vendor-agnostic CDC core:  same framing, but
-+ * link-level setup only requires activating the configuration.
-  */
--#define DRIVER_DESC           "CDC Ethernet Gadget"
--#define DRIVER_VERSION                "29 April 2003"
-+#define DRIVER_DESC           "Ethernet Gadget"
-+#define DRIVER_VERSION                "Bastille Day 2003"
- static const char shortname [] = "ether";
- static const char driver_desc [] = DRIVER_DESC;
--static const char control_name [] = "Communications Control";
--static const char data_name [] = "CDC Ethernet Data";
- #define MIN_PACKET    sizeof(struct ethhdr)
- #define       MAX_PACKET      ETH_DATA_LEN    /* biggest packet we'll rx/tx */
-@@ -92,8 +94,7 @@ struct eth_dev {
-       const struct usb_endpoint_descriptor
-                               *in, *out, *status;
--      struct semaphore        mutex;
--      struct net_device       net;
-+      struct net_device       *net;
-       struct net_device_stats stats;
-       atomic_t                tx_qlen;
-@@ -112,7 +113,7 @@ struct eth_dev {
- static unsigned qmult = 4;
--#define HS_FACTOR     15
-+#define HS_FACTOR     5
- #define qlen(gadget) \
-       (qmult*((gadget->speed == USB_SPEED_HIGH) ? HS_FACTOR : 1))
-@@ -128,7 +129,7 @@ module_param (qmult, uint, S_IRUGO|S_IWU
- /* Thanks to NetChip Technologies for donating this product ID.
-  *
-- * DO NOT REUSE THESE IDs with any other driver!!  Ever!!
-+ * DO NOT REUSE THESE IDs with a protocol-incompatible driver!!  Ever!!
-  * Instead:  allocate your own, using normal USB-IF procedures.
-  */
- #define DRIVER_VENDOR_NUM     0x0525          /* NetChip */
-@@ -158,6 +159,11 @@ module_param (qmult, uint, S_IRUGO|S_IWU
-  * for some reason doesn't handle full speed bulk maxpacket of 64.
-  */
-+#define DEV_CONFIG_VALUE      3       /* some hardware cares */
-+
-+/* #undef on hardware that can't implement CDC */
-+#define       DEV_CONFIG_CDC
-+
- /*
-  * NetChip 2280, PCI based.
-  *
-@@ -172,7 +178,7 @@ module_param (qmult, uint, S_IRUGO|S_IWU
- #define DRIVER_VERSION_NUM    0x0101
- #define EP0_MAXPACKET         64
- static const char EP_OUT_NAME [] = "ep-a";
--#define EP_OUT_NUM    2
-+#define EP_OUT_NUM    1
- static const char EP_IN_NAME [] = "ep-b";
- #define EP_IN_NUM     2
- static const char EP_STATUS_NAME [] = "ep-f";
-@@ -194,22 +200,21 @@ static inline void hw_optimize (struct u
- #endif
- /*
-- * PXA-250 UDC:  widely used in second gen Linux-capable PDAs.
-+ * PXA-2xx UDC:  widely used in second gen Linux-capable ARM PDAs
-+ * and other products.
-  *
-- * no limitations except from set_interface: docs say "no" to a third
-- * interface. and the interrupt-only endpoints don't toggle, so we'll
-- * just use a bulk-capable one instead.
-+ * multiple interfaces (or altsettings) aren't usable.  so this hardware
-+ * can't implement CDC, which needs both capabilities.
-  */
--#ifdef        CONFIG_USB_ETH_PXA250
--#define CHIP                  "pxa250"
-+#ifdef        CONFIG_USB_ETH_PXA2XX
-+#undef        DEV_CONFIG_CDC
-+#define CHIP                  "pxa2xx"
- #define DRIVER_VERSION_NUM    0x0103
- #define EP0_MAXPACKET         16
--static const char EP_OUT_NAME [] = "ep12out-bulk";
--#define EP_OUT_NUM    12
--static const char EP_IN_NAME [] = "ep11in-bulk";
--#define EP_IN_NUM     11
--static const char EP_STATUS_NAME [] = "ep6in-bulk";
--#define EP_STATUS_NUM 6
-+static const char EP_OUT_NAME [] = "ep2out-bulk";
-+#define EP_OUT_NUM    2
-+static const char EP_IN_NAME [] = "ep1in-bulk";
-+#define EP_IN_NUM     1
- /* doesn't support bus-powered operation */
- #define SELFPOWER USB_CONFIG_ATT_SELFPOWER
- /* supports remote wakeup, but this driver doesn't */
-@@ -247,6 +252,29 @@ static const char EP_IN_NAME [] = "ep2in
- #     error Configure some USB peripheral controller driver!
- #endif
-+/* We normally expect hardware that can talk CDC.  That involves
-+ * using multiple interfaces and altsettings, and maybe a status
-+ * interrupt.  Driver binding to be done according to USB-IF class,
-+ * though you can use different VENDOR and PRODUCT numbers if you
-+ * want (and they're officially assigned).
-+ * 
-+ * For hardware that can't talk CDC, we use the same vendor ID that
-+ * ARM Linux has used for ethernet-over-usb, both with sa1100 and
-+ * with pxa250.  We're protocol-compatible, if the host-side drivers
-+ * use the endpoint descriptors.  DRIVER_VERSION_NUM is nonzero, so
-+ * drivers that need to hard-wire endpoint numbers have a hook.
-+ */
-+#ifdef        DEV_CONFIG_CDC
-+#define       DEV_CONFIG_CLASS        USB_CLASS_COMM
-+#else 
-+#define       DEV_CONFIG_CLASS        USB_CLASS_VENDOR_SPEC
-+#undef        EP_STATUS_NUM
-+#undef        DRIVER_VENDOR_NUM
-+#undef        DRIVER_PRODUCT_NUM
-+#define       DRIVER_VENDOR_NUM       0x049f
-+#define       DRIVER_PRODUCT_NUM      0x505a
-+#endif /* CONFIG_CDC_ETHER */
-+
- /* power usage is config specific.
-  * hardware that supports remote wakeup defaults to disabling it.
-  */
-@@ -274,7 +302,8 @@ static const char EP_IN_NAME [] = "ep2in
- /*-------------------------------------------------------------------------*/
- #define xprintk(d,level,fmt,args...) \
--      dev_printk(level , &(d)->gadget->dev , fmt , ## args)
-+      printk(level "%s %s: " fmt , shortname , (d)->gadget->dev.bus_id , \
-+              ## args)
- #ifdef DEBUG
- #undef DEBUG
-@@ -309,7 +338,7 @@ static const char EP_IN_NAME [] = "ep2in
- /*
-  * DESCRIPTORS ... most are static, but strings and (full) configuration
-  * descriptors are built on demand.  Notice how most of the cdc descriptors
-- * add no value to simple (typical) configurations.
-+ * aren't needed in the "minimalist" mode.
-  */
- #define STRING_MANUFACTURER           1
-@@ -323,15 +352,14 @@ static const char EP_IN_NAME [] = "ep2in
- /*
-  * This device advertises one configuration.
-  */
--#define       CONFIG_CDC_ETHER        3
--
- static const struct usb_device_descriptor
- device_desc = {
-       .bLength =              sizeof device_desc,
-       .bDescriptorType =      USB_DT_DEVICE,
-       .bcdUSB =               __constant_cpu_to_le16 (0x0200),
--      .bDeviceClass =         USB_CLASS_COMM,
-+
-+      .bDeviceClass =         DEV_CONFIG_CLASS,
-       .bDeviceSubClass =      0,
-       .bDeviceProtocol =      0,
-       .bMaxPacketSize0 =      EP0_MAXPACKET,
-@@ -350,13 +378,26 @@ eth_config = {
-       .bDescriptorType =      USB_DT_CONFIG,
-       /* compute wTotalLength on the fly */
-+#ifdef        DEV_CONFIG_CDC
-       .bNumInterfaces =       2,
--      .bConfigurationValue =  CONFIG_CDC_ETHER,
-+#else
-+      .bNumInterfaces =       1,
-+#endif
-+      .bConfigurationValue =  DEV_CONFIG_VALUE,
-       .iConfiguration =       STRING_PRODUCT,
-       .bmAttributes =         USB_CONFIG_ATT_ONE | SELFPOWER | WAKEUP,
-       .bMaxPower =            (MAX_USB_POWER + 1) / 2,
- };
-+#ifdef        DEV_CONFIG_CDC
-+
-+/*
-+ * Compared to the "minimalist" non-CDC model, the CDC model adds
-+ * three class descriptors, two interface descrioptors, and a status
-+ * endpoint.  Both have a "data" interface and two bulk endpoints.
-+ * There are also differences in how control requests are handled.
-+ */
-+
- /* master comm interface optionally has a status notification endpoint */
- static const struct usb_interface_descriptor
-@@ -446,7 +487,7 @@ static const struct ether_desc ether_des
-  * some drivers (like current Linux cdc-ether!) "need" it to exist even
-  * if they ignore the connect/disconnect notifications that real aether
-  * can provide.  more advanced cdc configurations might want to support
-- * encapsulated commands.
-+ * encapsulated commands (vendor-specific, using control-OUT).
-  */
-  
- #define LOG2_STATUS_INTERVAL_MSEC     6
-@@ -494,6 +535,29 @@ data_intf = {
-       .bInterfaceProtocol =   0,
-       .iInterface =           STRING_DATA,
- };
-+#else
-+
-+/*
-+ * "Minimalist" non-CDC option is a simple vendor-neutral model that most
-+ * full speed controllers can handle:  one interface, two bulk endpoints.
-+ */
-+
-+static const struct usb_interface_descriptor
-+data_intf = {
-+      .bLength =              sizeof data_intf,
-+      .bDescriptorType =      USB_DT_INTERFACE,
-+
-+      .bInterfaceNumber =     0,
-+      .bAlternateSetting =    0,
-+      .bNumEndpoints =        2,
-+      .bInterfaceClass =      USB_CLASS_VENDOR_SPEC,
-+      .bInterfaceSubClass =   0,
-+      .bInterfaceProtocol =   0,
-+      .iInterface =           STRING_DATA,
-+};
-+
-+#endif        /* DEV_CONFIG_CDC */
-+
- static const struct usb_endpoint_descriptor
- fs_source_desc = {
-@@ -563,12 +627,12 @@ dev_qualifier = {
-       .bDescriptorType =      USB_DT_DEVICE_QUALIFIER,
-       .bcdUSB =               __constant_cpu_to_le16 (0x0200),
--      .bDeviceClass =         USB_CLASS_VENDOR_SPEC,
-+      .bDeviceClass =         DEV_CONFIG_CLASS,
-       /* assumes ep0 uses the same value for both speeds ... */
-       .bMaxPacketSize0 =      EP0_MAXPACKET,
--      .bNumConfigurations =   2,
-+      .bNumConfigurations =   1,
- };
- /* maxpacket and other transfer characteristics vary by speed. */
-@@ -581,16 +645,24 @@ dev_qualifier = {
- #endif        /* !HIGHSPEED */
-+/*-------------------------------------------------------------------------*/
-+
-+/* descriptors that are built on-demand */
-+
-+#ifdef        DEV_CONFIG_CDC
- /* address that the host will use ... usually assigned at random */
- static char                           ethaddr [2 * ETH_ALEN + 1];
-+#endif
- /* static strings, in iso 8859/1 */
- static struct usb_string              strings [] = {
-       { STRING_MANUFACTURER,  UTS_SYSNAME " " UTS_RELEASE "/" CHIP, },
-       { STRING_PRODUCT,       driver_desc, },
-+#ifdef        DEV_CONFIG_CDC
-       { STRING_ETHADDR,       ethaddr, },
--      { STRING_CONTROL,       control_name, },
--      { STRING_DATA,          data_name, },
-+      { STRING_CONTROL,       "CDC Communications Control", },
-+#endif
-+      { STRING_DATA,          "Ethernet Data", },
-       {  }            /* end of list */
- };
-@@ -607,14 +679,18 @@ static int
- config_buf (enum usb_device_speed speed, u8 *buf, u8 type, unsigned index)
- {
-       const unsigned  config_len = USB_DT_CONFIG_SIZE
--                              + 3 * USB_DT_INTERFACE_SIZE
-+#ifdef DEV_CONFIG_CDC
-+                              + 2 * USB_DT_INTERFACE_SIZE
-                               + sizeof header_desc
-                               + sizeof union_desc
-                               + sizeof ether_desc
- #ifdef        EP_STATUS_NUM
-                               + USB_DT_ENDPOINT_SIZE
- #endif
-+#endif /* DEV_CONFIG_CDC */
-+                              + USB_DT_INTERFACE_SIZE
-                               + 2 * USB_DT_ENDPOINT_SIZE;
-+
- #ifdef HIGHSPEED
-       int             hs;
- #endif
-@@ -636,6 +712,7 @@ config_buf (enum usb_device_speed speed,
-               hs = !hs;
- #endif
-+#ifdef DEV_CONFIG_CDC
-       /* control interface, class descriptors, optional status endpoint */
-       memcpy (buf, &control_intf, USB_DT_INTERFACE_SIZE);
-       buf += USB_DT_INTERFACE_SIZE;
-@@ -660,6 +737,7 @@ config_buf (enum usb_device_speed speed,
-       /* default data altsetting has no endpoints */
-       memcpy (buf, &data_nop_intf, USB_DT_INTERFACE_SIZE);
-       buf += USB_DT_INTERFACE_SIZE;
-+#endif /* DEV_CONFIG_CDC */
-       /* the "real" data interface has two endpoints */
-       memcpy (buf, &data_intf, USB_DT_INTERFACE_SIZE);
-@@ -684,6 +762,8 @@ config_buf (enum usb_device_speed speed,
- /*-------------------------------------------------------------------------*/
-+static void eth_start (struct eth_dev *dev, int gfp_flags);
-+
- static int
- set_ether_config (struct eth_dev *dev, int gfp_flags)
- {
-@@ -694,7 +774,8 @@ set_ether_config (struct eth_dev *dev, i
-       gadget_for_each_ep (ep, gadget) {
-               const struct usb_endpoint_descriptor    *d;
--              /* NOTE:  the host isn't allowed to use these two data
-+#ifdef        DEV_CONFIG_CDC
-+              /* With CDC,  the host isn't allowed to use these two data
-                * endpoints in the default altsetting for the interface.
-                * so we don't activate them yet.
-                */
-@@ -714,10 +795,11 @@ set_ether_config (struct eth_dev *dev, i
-                       dev->out_ep = ep;
-                       dev->out = d;
-                       continue;
-+              }
- #ifdef        EP_STATUS_NUM
-               /* optional status/notification endpoint */
--              } else if (strcmp (ep->name, EP_STATUS_NAME) == 0) {
-+              else if (strcmp (ep->name, EP_STATUS_NAME) == 0) {
-                       d = ep_desc (gadget, &hs_status_desc, &fs_status_desc);
-                       result = usb_ep_enable (ep, d);
-                       if (result == 0) {
-@@ -726,16 +808,57 @@ set_ether_config (struct eth_dev *dev, i
-                               dev->status = d;
-                               continue;
-                       }
-+              }
- #endif
-+#else /* !CONFIG_CDC_ETHER */
-+
-+              /* non-CDC is simpler:  if the device is there,
-+               * it's live with rx and tx endpoints.
-+               */
-+              /* one endpoint writes data back IN to the host */
-+              if (strcmp (ep->name, EP_IN_NAME) == 0) {
-+                      d = ep_desc (gadget, &hs_source_desc, &fs_source_desc);
-+                      result = usb_ep_enable (ep, d);
-+                      if (result == 0) {
-+                              ep->driver_data = dev;
-+                              dev->in_ep = ep;
-+                              dev->in = d;
-+                              continue;
-+                      }
-+
-+              /* one endpoint just reads OUT packets */
-+              } else if (strcmp (ep->name, EP_OUT_NAME) == 0) {
-+                      d = ep_desc (gadget, &hs_sink_desc, &fs_sink_desc);
-+                      result = usb_ep_enable (ep, d);
-+                      if (result == 0) {
-+                              ep->driver_data = dev;
-+                              dev->out_ep = ep;
-+                              dev->out = d;
-+                              continue;
-+                      }
-+              }
-+
-+#endif /* !CONFIG_CDC_ETHER */
-+
-               /* ignore any other endpoints */
--              } else
-+              else
-                       continue;
-               /* stop on error */
-               ERROR (dev, "can't enable %s, result %d\n", ep->name, result);
-               break;
-       }
-+      if (!result && (!dev->in_ep || !dev->out_ep))
-+              result = -ENODEV;
-+
-+#ifndef       DEV_CONFIG_CDC
-+      if (result == 0) {
-+              netif_carrier_on (dev->net);
-+              if (netif_running (dev->net))
-+                      eth_start (dev, GFP_ATOMIC);
-+      }
-+#endif /* !CONFIG_CDC_ETHER */
-       if (result == 0)
-               DEBUG (dev, "qlen %d\n", qlen (gadget));
-@@ -751,8 +874,8 @@ static void eth_reset_config (struct eth
-       DEBUG (dev, "%s\n", __FUNCTION__);
--      netif_stop_queue (&dev->net);
--      netif_carrier_off (&dev->net);
-+      netif_stop_queue (dev->net);
-+      netif_carrier_off (dev->net);
-       /* just disable endpoints, forcing completion of pending i/o.
-        * all our completion handlers free their requests in this case.
-@@ -797,7 +920,7 @@ eth_set_config (struct eth_dev *dev, uns
-       hw_optimize (gadget);
-       switch (number) {
--      case CONFIG_CDC_ETHER:
-+      case DEV_CONFIG_VALUE:
-               result = set_ether_config (dev, gfp_flags);
-               break;
-       default:
-@@ -807,8 +930,6 @@ eth_set_config (struct eth_dev *dev, uns
-               return result;
-       }
--      if (!result && (!dev->in_ep || !dev->out_ep))
--              result = -ENODEV;
-       if (result)
-               eth_reset_config (dev);
-       else {
-@@ -896,6 +1017,7 @@ static void issue_start_status (struct e
-        * FIXME ugly idiom, maybe we'd be better with just
-        * a "cancel the whole queue" primitive since any
-        * unlink-one primitive has way too many error modes.
-+       * here, we "know" toggle is already clear...
-        */
-       usb_ep_disable (dev->status_ep);
-       usb_ep_enable (dev->status_ep, dev->status);
-@@ -953,8 +1075,6 @@ static void eth_setup_complete (struct u
-  */
- #define CDC_SET_ETHERNET_PACKET_FILTER        0x43    /* required */
--static void eth_start (struct eth_dev *dev, int gfp_flags);
--
- /*
-  * The setup() callback implements all the ep0 functionality that's not
-  * handled lower down.  CDC has a number of less-common features:
-@@ -1018,6 +1138,17 @@ eth_setup (struct usb_gadget *gadget, co
-               value = eth_set_config (dev, ctrl->wValue, GFP_ATOMIC);
-               spin_unlock (&dev->lock);
-               break;
-+#ifdef        CONFIG_USB_ETH_PXA2XX
-+      /* PXA UDC prevents us from using SET_INTERFACE in normal ways.
-+       * And it hides GET_CONFIGURATION and GET_INTERFACE too.
-+       */
-+      case USB_REQ_SET_INTERFACE:
-+              spin_lock (&dev->lock);
-+              value = eth_set_config (dev, DEV_CONFIG_VALUE, GFP_ATOMIC);
-+              spin_unlock (&dev->lock);
-+              break;
-+
-+#else /* hardware that that stays out of our way */
-       case USB_REQ_GET_CONFIGURATION:
-               if (ctrl->bRequestType != USB_DIR_IN)
-                       break;
-@@ -1056,15 +1187,15 @@ eth_setup (struct usb_gadget *gadget, co
-                       if (ctrl->wValue == 1) {
-                               usb_ep_enable (dev->in_ep, dev->in);
-                               usb_ep_enable (dev->out_ep, dev->out);
--                              netif_carrier_on (&dev->net);
-+                              netif_carrier_on (dev->net);
- #ifdef        EP_STATUS_NUM
-                               issue_start_status (dev);
- #endif
--                              if (netif_running (&dev->net))
-+                              if (netif_running (dev->net))
-                                       eth_start (dev, GFP_ATOMIC);
-                       } else {
--                              netif_stop_queue (&dev->net);
--                              netif_carrier_off (&dev->net);
-+                              netif_stop_queue (dev->net);
-+                              netif_carrier_off (dev->net);
-                       }
-                       value = 0;
-                       break;
-@@ -1079,12 +1210,14 @@ eth_setup (struct usb_gadget *gadget, co
-               /* if carrier is on, data interface is active. */
-               *(u8 *)req->buf =
--                      ((ctrl->wIndex == 1) && netif_carrier_ok (&dev->net))
-+                      ((ctrl->wIndex == 1) && netif_carrier_ok (dev->net))
-                               ? 1
-                               : 0,
-               value = min (ctrl->wLength, (u16) 1);
-               break;
-+#endif
-+#ifdef DEV_CONFIG_CDC
-       case CDC_SET_ETHERNET_PACKET_FILTER:
-               /* see 6.2.30: no data, wIndex = interface,
-                * wValue = packet filter bitmap
-@@ -1099,6 +1232,7 @@ eth_setup (struct usb_gadget *gadget, co
-                */
-               value = 0;
-               break;
-+#endif /* DEV_CONFIG_CDC */
-       default:
-               VDEBUG (dev,
-@@ -1129,8 +1263,8 @@ eth_disconnect (struct usb_gadget *gadge
-       unsigned long           flags;
-       spin_lock_irqsave (&dev->lock, flags);
--      netif_stop_queue (&dev->net);
--      netif_carrier_off (&dev->net);
-+      netif_stop_queue (dev->net);
-+      netif_carrier_off (dev->net);
-       eth_reset_config (dev);
-       spin_unlock_irqrestore (&dev->lock, flags);
-@@ -1175,10 +1309,10 @@ static int eth_ethtool_ioctl (struct net
-               memset (&info, 0, sizeof info);
-               info.cmd = ETHTOOL_GDRVINFO;
--              strncpy (info.driver, shortname, sizeof info.driver);
--              strncpy (info.version, DRIVER_VERSION, sizeof info.version);
--              strncpy (info.fw_version, CHIP, sizeof info.fw_version);
--              strncpy (info.bus_info, dev->gadget->dev.bus_id,
-+              strlcpy (info.driver, shortname, sizeof info.driver);
-+              strlcpy (info.version, DRIVER_VERSION, sizeof info.version);
-+              strlcpy (info.fw_version, CHIP, sizeof info.fw_version);
-+              strlcpy (info.bus_info, dev->gadget->dev.bus_id,
-                       sizeof info.bus_info);
-               if (copy_to_user (useraddr, &info, sizeof (info)))
-                       return -EFAULT;
-@@ -1227,7 +1361,7 @@ rx_submit (struct eth_dev *dev, struct u
-       int                     retval = 0;
-       size_t                  size;
--      size = (sizeof (struct ethhdr) + dev->net.mtu + RX_EXTRA);
-+      size = (sizeof (struct ethhdr) + dev->net->mtu + RX_EXTRA);
-       if ((skb = alloc_skb (size, gfp_flags)) == 0) {
-               DEBUG (dev, "no rx skb\n");
-@@ -1241,16 +1375,9 @@ rx_submit (struct eth_dev *dev, struct u
-       req->complete = rx_complete;
-       req->context = skb;
--      if (netif_running (&dev->net)) {
--              retval = usb_ep_queue (dev->out_ep, req, gfp_flags);
--              if (retval == -ENOMEM)
--                      defer_kevent (dev, WORK_RX_MEMORY);
--              if (retval)
--                      DEBUG (dev, "%s %d\n", __FUNCTION__, retval);
--      } else {
--              DEBUG (dev, "%s stopped\n", __FUNCTION__);
--              retval = -ENOLINK;
--      }
-+      retval = usb_ep_queue (dev->out_ep, req, gfp_flags);
-+      if (retval == -ENOMEM)
-+              defer_kevent (dev, WORK_RX_MEMORY);
-       if (retval) {
-               DEBUG (dev, "rx submit --> %d\n", retval);
-               dev_kfree_skb_any (skb);
-@@ -1278,8 +1405,8 @@ static void rx_complete (struct usb_ep *
-                       break;
-               }
--              skb->dev = &dev->net;
--              skb->protocol = eth_type_trans (skb, &dev->net);
-+              skb->dev = dev->net;
-+              skb->protocol = eth_type_trans (skb, dev->net);
-               dev->stats.rx_packets++;
-               dev->stats.rx_bytes += skb->len;
-@@ -1294,9 +1421,7 @@ static void rx_complete (struct usb_ep *
-       case -ECONNRESET:               // unlink
-       case -ESHUTDOWN:                // disconnect etc
-               VDEBUG (dev, "rx shutdown, code %d\n", status);
--              usb_ep_free_request (dev->out_ep, req);
--              req = 0;
--              break;
-+              goto clean;
-       /* data overrun */
-       case -EOVERFLOW:
-@@ -1311,7 +1436,11 @@ static void rx_complete (struct usb_ep *
-       if (skb)
-               dev_kfree_skb_any (skb);
--
-+      if (!netif_running (dev->net)) {
-+clean:
-+              usb_ep_free_request (dev->out_ep, req);
-+              req = 0;
-+      }
-       if (req)
-               rx_submit (dev, req, GFP_ATOMIC);
- }
-@@ -1323,7 +1452,7 @@ static void eth_work (void *_dev)
-       if (test_bit (WORK_RX_MEMORY, &dev->todo)) {
-               struct usb_request      *req = 0;
--              if (netif_running (&dev->net))
-+              if (netif_running (dev->net))
-                       req = usb_ep_alloc_request (dev->in_ep, GFP_KERNEL);
-               else
-                       clear_bit (WORK_RX_MEMORY, &dev->todo);
-@@ -1342,18 +1471,25 @@ static void tx_complete (struct usb_ep *
-       struct sk_buff  *skb = req->context;
-       struct eth_dev  *dev = ep->driver_data;
--      if (req->status)
-+      switch (req->status) {
-+      default:
-               dev->stats.tx_errors++;
--      else
-+              VDEBUG (dev, "tx err %d\n", req->status);
-+              /* FALLTHROUGH */
-+      case -ECONNRESET:               // unlink
-+      case -ESHUTDOWN:                // disconnect etc
-+              break;
-+      case 0:
-               dev->stats.tx_bytes += skb->len;
-+      }
-       dev->stats.tx_packets++;
-       usb_ep_free_request (ep, req);
-       dev_kfree_skb_any (skb);
-       atomic_inc (&dev->tx_qlen);
--      if (netif_carrier_ok (&dev->net))
--              netif_wake_queue (&dev->net);
-+      if (netif_carrier_ok (dev->net))
-+              netif_wake_queue (dev->net);
- }
- static int eth_start_xmit (struct sk_buff *skb, struct net_device *net)
-@@ -1437,7 +1573,7 @@ static void eth_start (struct eth_dev *d
-       /* and open the tx floodgates */ 
-       atomic_set (&dev->tx_qlen, size);
--      netif_wake_queue (&dev->net);
-+      netif_wake_queue (dev->net);
- }
- static int eth_open (struct net_device *net)
-@@ -1445,10 +1581,8 @@ static int eth_open (struct net_device *
-       struct eth_dev          *dev = (struct eth_dev *) net->priv;
-       DEBUG (dev, "%s\n", __FUNCTION__);
--      down (&dev->mutex);
--      if (netif_carrier_ok (&dev->net))
-+      if (netif_carrier_ok (dev->net))
-               eth_start (dev, GFP_KERNEL);
--      up (&dev->mutex);
-       return 0;
- }
-@@ -1457,7 +1591,6 @@ static int eth_stop (struct net_device *
-       struct eth_dev          *dev = (struct eth_dev *) net->priv;
-       DEBUG (dev, "%s\n", __FUNCTION__);
--      down (&dev->mutex);
-       netif_stop_queue (net);
-       DEBUG (dev, "stop stats: rx/tx %ld/%ld, errs %ld/%ld\n",
-@@ -1469,7 +1602,7 @@ static int eth_stop (struct net_device *
-       if (dev->gadget->speed != USB_SPEED_UNKNOWN) {
-               usb_ep_disable (dev->in_ep);
-               usb_ep_disable (dev->out_ep);
--              if (netif_carrier_ok (&dev->net)) {
-+              if (netif_carrier_ok (dev->net)) {
-                       DEBUG (dev, "host still using in/out endpoints\n");
-                       usb_ep_enable (dev->in_ep, dev->in);
-                       usb_ep_enable (dev->out_ep, dev->out);
-@@ -1480,7 +1613,6 @@ static int eth_stop (struct net_device *
- #endif
-       }
--      up (&dev->mutex);
-       return 0;
- }
-@@ -1492,7 +1624,6 @@ eth_unbind (struct usb_gadget *gadget)
-       struct eth_dev          *dev = get_gadget_data (gadget);
-       DEBUG (dev, "unbind\n");
--      down (&dev->mutex);
-       /* we've already been disconnected ... no i/o is active */
-       if (dev->req) {
-@@ -1500,15 +1631,13 @@ eth_unbind (struct usb_gadget *gadget)
-                               dev->req->buf, dev->req->dma,
-                               USB_BUFSIZ);
-               usb_ep_free_request (gadget->ep0, dev->req);
-+              dev->req = 0;
-       }
--      unregister_netdev (&dev->net);
--      up (&dev->mutex);
-+      unregister_netdev (dev->net);
-       /* assuming we used keventd, it must quiesce too */
-       flush_scheduled_work ();
--
--      kfree (dev);
-       set_gadget_data (gadget, 0);
- }
-@@ -1517,22 +1646,24 @@ eth_bind (struct usb_gadget *gadget)
- {
-       struct eth_dev          *dev;
-       struct net_device       *net;
-+      int                     status = -ENOMEM;
-+#ifdef        DEV_CONFIG_CDC
-       u8                      node_id [ETH_ALEN];
-       /* just one upstream link at a time */
-       if (ethaddr [0] != 0)
-               return -ENODEV;
-+#endif
--      dev = kmalloc (sizeof *dev, SLAB_KERNEL);
--      if (!dev)
--              return -ENOMEM;
--      memset (dev, 0, sizeof *dev);
-+      net = alloc_etherdev (sizeof *dev);
-+      if (!net)
-+              return status;
-+      dev = net->priv;
-       spin_lock_init (&dev->lock);
--      init_MUTEX_LOCKED (&dev->mutex);
-       INIT_WORK (&dev->work, eth_work, dev);
-       /* network device setup */
--      net = &dev->net;
-+      dev->net = net;
-       SET_MODULE_OWNER (net);
-       net->priv = dev;
-       strcpy (net->name, "usb%d");
-@@ -1545,6 +1676,7 @@ eth_bind (struct usb_gadget *gadget)
-       net->dev_addr [0] &= 0xfe;      // clear multicast bit
-       net->dev_addr [0] |= 0x02;      // set local assignment bit (IEEE802)
-+#ifdef        DEV_CONFIG_CDC
-       /* ... another address for the host, on the other end of the
-        * link, gets exported through CDC (see CDC spec table 41)
-        */
-@@ -1554,6 +1686,7 @@ eth_bind (struct usb_gadget *gadget)
-       snprintf (ethaddr, sizeof ethaddr, "%02X%02X%02X%02X%02X%02X",
-               node_id [0], node_id [1], node_id [2],
-               node_id [3], node_id [4], node_id [5]);
-+#endif
-       net->change_mtu = eth_change_mtu;
-       net->get_stats = eth_get_stats;
-@@ -1567,36 +1700,38 @@ eth_bind (struct usb_gadget *gadget)
-       /* preallocate control response and buffer */
-       dev->req = usb_ep_alloc_request (gadget->ep0, GFP_KERNEL);
-       if (!dev->req)
--              goto enomem;
-+              goto fail;
-       dev->req->complete = eth_setup_complete;
-       dev->req->buf = usb_ep_alloc_buffer (gadget->ep0, USB_BUFSIZ,
-                               &dev->req->dma, GFP_KERNEL);
-       if (!dev->req->buf) {
-               usb_ep_free_request (gadget->ep0, dev->req);
--              goto enomem;
-+              goto fail;
-       }
-       /* finish hookup to lower layer ... */
-       dev->gadget = gadget;
-       set_gadget_data (gadget, dev);
-       gadget->ep0->driver_data = dev;
--
-+      INFO (dev, "%s, " CHIP ", version: " DRIVER_VERSION "\n", driver_desc);
-+#ifdef        DEV_CONFIG_CDC
-+      INFO (dev, "CDC host enet %s\n", ethaddr);
-+#endif
-+      
-       /* two kinds of host-initiated state changes:
-        *  - iff DATA transfer is active, carrier is "on"
-        *  - tx queueing enabled if open *and* carrier is "on"
-        */
--      INFO (dev, "%s, host enet %s, version: " DRIVER_VERSION "\n",
--                      driver_desc, ethaddr);
--      register_netdev (&dev->net);
--      netif_stop_queue (&dev->net);
--      netif_carrier_off (&dev->net);
--
--      up (&dev->mutex);
--      return 0;
-+      netif_stop_queue (dev->net);
-+      netif_carrier_off (dev->net);
--enomem:
-+      // SET_NETDEV_DEV (dev->net, &gadget->dev);
-+      status = register_netdev (dev->net);
-+      if (status == 0)
-+              return status;
-+fail:
-       eth_unbind (gadget);
--      return -ENOMEM;
-+      return status;
- }
- /*-------------------------------------------------------------------------*/
---- linux-2.6.0-test1/drivers/usb/gadget/net2280.c     2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/gadget/net2280.c    2003-07-19 17:03:50.000000000 -0700
-@@ -2496,7 +2496,7 @@ static void net2280_remove (struct pci_d
-       device_remove_file (&pdev->dev, &dev_attr_registers);
-       pci_set_drvdata (pdev, 0);
--      INFO (dev, "unbind from pci %s\n", pdev->slot_name);
-+      INFO (dev, "unbind from pci %s\n", pci_name(pdev));
-       kfree (dev);
-       the_controller = 0;
-@@ -2518,7 +2518,7 @@ static int net2280_probe (struct pci_dev
-        * usb_gadget_driver_{register,unregister}() must change.
-        */
-       if (the_controller) {
--              WARN (the_controller, "ignoring %s\n", pdev->slot_name);
-+              WARN (the_controller, "ignoring %s\n", pci_name(pdev));
-               return -EBUSY;
-       }
-@@ -2534,7 +2534,7 @@ static int net2280_probe (struct pci_dev
-       dev->pdev = pdev;
-       dev->gadget.ops = &net2280_ops;
--      strcpy (dev->gadget.dev.bus_id, pdev->slot_name);
-+      strcpy (dev->gadget.dev.bus_id, pci_name(pdev));
-       strcpy (dev->gadget.dev.name, pdev->dev.name);
-       dev->gadget.dev.parent = &pdev->dev;
-       dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
---- linux-2.6.0-test1/drivers/usb/gadget/net2280.h     2003-06-14 12:18:29.000000000 -0700
-+++ 25/drivers/usb/gadget/net2280.h    2003-07-19 17:03:50.000000000 -0700
-@@ -654,7 +654,7 @@ static inline void net2280_led_shutdown 
- #define xprintk(dev,level,fmt,args...) \
-       printk(level "%s %s: " fmt , driver_name , \
--                      dev->pdev->slot_name , ## args)
-+                      pci_name(dev->pdev) , ## args)
- #ifdef DEBUG
- #undef DEBUG
---- linux-2.6.0-test1/drivers/usb/gadget/zero.c        2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/usb/gadget/zero.c       2003-07-19 17:03:50.000000000 -0700
-@@ -92,7 +92,7 @@
- /*-------------------------------------------------------------------------*/
--#define DRIVER_VERSION                "19 Feb 2003"
-+#define DRIVER_VERSION                "Bastille Day 2003"
- static const char shortname [] = "zero";
- static const char longname [] = "Gadget Zero";
-@@ -160,18 +160,18 @@ static inline void hw_optimize (struct u
- #endif
- /*
-- * PXA-250 UDC:  widely used in second gen Linux-capable PDAs.
-+ * PXA-2xx UDC:  widely used in second gen Linux-capable PDAs.
-  *
-  * This has fifteen fixed-function full speed endpoints, and it
-  * can support all USB transfer types.
-  *
-- * It only supports three configurations (numbered 1, 2, or 3)
-- * with two interfaces each ... there's partial hardware support
-- * for set_configuration and set_interface, preventing some more
-- * interesting config/interface/endpoint arrangements.
-+ * These supports three or four configurations, with fixed numbers.
-+ * The hardware interprets SET_INTERFACE, net effect is that you
-+ * can't use altsettings or reset the interfaces independently.
-+ * So stick to a single interface.
-  */
--#ifdef        CONFIG_USB_ZERO_PXA250
--#define CHIP                  "pxa250"
-+#ifdef        CONFIG_USB_ZERO_PXA2XX
-+#define CHIP                  "pxa2xx"
- #define DRIVER_VERSION_NUM    0x0103
- #define EP0_MAXPACKET         16
- static const char EP_OUT_NAME [] = "ep12out-bulk";
-@@ -291,9 +291,12 @@ struct zero_dev {
- static unsigned buflen = 4096;
- static unsigned qlen = 32;
-+static unsigned pattern = 0;
- module_param (buflen, uint, S_IRUGO|S_IWUSR);
- module_param (qlen, uint, S_IRUGO|S_IWUSR);
-+module_param (pattern, uint, S_IRUGO|S_IWUSR);
-+
- /*
-  * Normally the "loopback" configuration is second (index 1) so
-@@ -497,8 +500,8 @@ static struct usb_gadget_strings   stringt
- /*
-  * config descriptors are also handcrafted.  these must agree with code
-- * that sets configurations, and with code managing interface altsettings.
-- * other complexity may come from:
-+ * that sets configurations, and with code managing interfaces and their
-+ * altsettings.  other complexity may come from:
-  *
-  *  - high speed support, including "other speed config" rules
-  *  - multiple configurations
-@@ -506,7 +509,7 @@ static struct usb_gadget_strings   stringt
-  *  - embedded class or vendor-specific descriptors
-  *
-  * this handles high speed, and has a second config that could as easily
-- * have been an alternate interface setting.
-+ * have been an alternate interface setting (on most hardware).
-  *
-  * NOTE:  to demonstrate (and test) more USB capabilities, this driver
-  * should include an altsetting to test interrupt transfers, including
-@@ -608,16 +611,29 @@ check_read_data (
-       struct usb_request      *req
- )
- {
--      int i;
-+      unsigned        i;
-+      u8              *buf = req->buf;
--      for (i = 0; i < req->actual; i++) {
--              if (((u8 *)req->buf) [i] != 0) {
--                      ERROR (dev, "nonzero OUT byte from host, "
--                                      "buf [%d] = %d\n",
--                                      i, ((u8 *)req->buf) [i]);
--                      usb_ep_set_halt (ep);
--                      return -EINVAL;
-+      for (i = 0; i < req->actual; i++, buf++) {
-+              switch (pattern) {
-+              /* all-zeroes has no synchronization issues */
-+              case 0:
-+                      if (*buf == 0)
-+                              continue;
-+                      break;
-+              /* mod63 stays in sync with short-terminated transfers,
-+               * or otherwise when host and gadget agree on how large
-+               * each usb transfer request should be.  resync is done
-+               * with set_interface or set_config.
-+               */
-+              case 1:
-+                      if (*buf == (u8)(i % 63))
-+                              continue;
-+                      break;
-               }
-+              ERROR (dev, "bad OUT byte, buf [%d] = %d\n", i, *buf);
-+              usb_ep_set_halt (ep);
-+              return -EINVAL;
-       }
-       return 0;
- }
-@@ -629,7 +645,18 @@ reinit_write_data (
-       struct usb_request      *req
- )
- {
--      memset (req->buf, 0, req->length);
-+      unsigned        i;
-+      u8              *buf = req->buf;
-+
-+      switch (pattern) {
-+      case 0:
-+              memset (req->buf, 0, req->length);
-+              break;
-+      case 1:
-+              for  (i = 0; i < req->length; i++)
-+                      *buf++ = (u8) (i % 63);
-+              break;
-+      }
- }
- /* if there is only one request in the queue, there'll always be an
-@@ -651,10 +678,13 @@ static void source_sink_complete (struct
-               break;
-       /* this endpoint is normally active while we're configured */
-+      case -ECONNABORTED:             /* hardware forced ep reset */
-       case -ECONNRESET:               /* request dequeued */
-       case -ESHUTDOWN:                /* disconnect from host */
-               VDEBUG (dev, "%s gone (%d), %d/%d\n", ep->name, status,
-                               req->actual, req->length);
-+              if (ep == dev->out_ep)
-+                      check_read_data (dev, ep, req);
-               free_ep_req (ep, req);
-               return;
-@@ -693,6 +723,9 @@ source_sink_start_ep (struct usb_ep *ep,
-       memset (req->buf, 0, req->length);
-       req->complete = source_sink_complete;
-+      if (strcmp (ep->name, EP_IN_NAME) == 0)
-+              reinit_write_data (ep->driver_data, ep, req);
-+
-       status = usb_ep_queue (ep, req, gfp_flags);
-       if (status) {
-               struct zero_dev *dev = ep->driver_data;
-@@ -801,6 +834,8 @@ static void loopback_complete (struct us
-        * rely on the hardware driver to clean up on disconnect or
-        * endpoint disable.
-        */
-+      case -ECONNABORTED:             /* hardware forced ep reset */
-+      case -ECONNRESET:               /* request dequeued */
-       case -ESHUTDOWN:                /* disconnect from host */
-               free_ep_req (ep, req);
-               return;
-@@ -905,7 +940,7 @@ static void zero_reset_config (struct ze
-  *
-  * note that some device controller hardware will constrain what this
-  * code can do, perhaps by disallowing more than one configuration or
-- * by limiting configuration choices (like the pxa250).
-+ * by limiting configuration choices (like the pxa2xx).
-  */
- static int
- zero_set_config (struct zero_dev *dev, unsigned number, int gfp_flags)
-@@ -1046,7 +1081,8 @@ zero_setup (struct usb_gadget *gadget, c
-               break;
-       /* until we add altsetting support, or other interfaces,
--       * only 0/0 are possible.
-+       * only 0/0 are possible.  pxa2xx only supports 0/0 (poorly)
-+       * and already killed pending endpoint I/O.
-        */
-       case USB_REQ_SET_INTERFACE:
-               if (ctrl->bRequestType != USB_RECIP_INTERFACE)
---- linux-2.6.0-test1/drivers/usb/host/ohci-hcd.c      2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/usb/host/ohci-hcd.c     2003-07-19 17:03:50.000000000 -0700
-@@ -319,6 +319,7 @@ ohci_endpoint_disable (struct usb_hcd *h
-       int                     epnum = ep & USB_ENDPOINT_NUMBER_MASK;
-       unsigned long           flags;
-       struct ed               *ed;
-+      unsigned                limit = 1000;
-       /* ASSERT:  any requests/urbs are being unlinked */
-       /* ASSERT:  nobody can be submitting urbs for this any more */
-@@ -337,6 +338,8 @@ rescan:
-               ed->state = ED_IDLE;
-       switch (ed->state) {
-       case ED_UNLINK:         /* wait for hw to finish? */
-+              /* major IRQ delivery trouble loses INTR_SF too... */
-+              WARN_ON (limit-- == 0);
-               spin_unlock_irqrestore (&ohci->lock, flags);
-               set_current_state (TASK_UNINTERRUPTIBLE);
-               schedule_timeout (1);
---- linux-2.6.0-test1/drivers/usb/host/ohci-q.c        2003-06-14 12:18:34.000000000 -0700
-+++ 25/drivers/usb/host/ohci-q.c       2003-07-19 17:03:50.000000000 -0700
-@@ -43,6 +43,16 @@ finish_urb (struct ohci_hcd *ohci, struc
-       spin_lock (&urb->lock);
-       if (likely (urb->status == -EINPROGRESS))
-               urb->status = 0;
-+      /* report short control reads right even though the data TD always
-+       * has TD_R set.  (much simpler, but creates the 1-td limit.)
-+       */
-+      if (unlikely (urb->transfer_flags & URB_SHORT_NOT_OK)
-+                      && unlikely (usb_pipecontrol (urb->pipe))
-+                      && urb->actual_length < urb->transfer_buffer_length
-+                      && usb_pipein (urb->pipe)
-+                      && urb->status == 0) {
-+              urb->status = -EREMOTEIO;
-+      }
-       spin_unlock (&urb->lock);
-       // what lock protects these?
---- linux-2.6.0-test1/drivers/usb/host/uhci-hcd.c      2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/host/uhci-hcd.c     2003-07-19 17:03:50.000000000 -0700
-@@ -2007,19 +2007,17 @@ static int suspend_allowed(struct uhci_h
-       unsigned int io_addr = uhci->io_addr;
-       int i;
--      if (!uhci->hcd.pdev ||
--           uhci->hcd.pdev->vendor != PCI_VENDOR_ID_INTEL ||
--           uhci->hcd.pdev->device != PCI_DEVICE_ID_INTEL_82371AB_2)
-+      if (!uhci->hcd.pdev || uhci->hcd.pdev->vendor != PCI_VENDOR_ID_INTEL)
-               return 1;
--      /* This is a 82371AB/EB/MB USB controller which has a bug that
--       * causes false resume indications if any port has an
--       * over current condition.  To prevent problems, we will not
--       * allow a global suspend if any ports are OC.
-+      /* Some of Intel's USB controllers have a bug that causes false
-+       * resume indications if any port has an over current condition.
-+       * To prevent problems, we will not allow a global suspend if
-+       * any ports are OC.
-        *
--       * Some motherboards using the 82371AB/EB/MB (but not the USB portion)
--       * appear to hardwire the over current inputs active to disable
--       * the USB ports.
-+       * Some motherboards using Intel's chipsets (but not using all
-+       * the USB ports) appear to hardwire the over current inputs active
-+       * to disable the USB ports.
-        */
-       /* check for over current condition on any port */
---- linux-2.6.0-test1/drivers/usb/image/hpusbscsi.c    2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/image/hpusbscsi.c   2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
- #include <linux/smp_lock.h>
- #include <linux/usb.h>
- #include <asm/atomic.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
-@@ -109,7 +109,8 @@ hpusbscsi_usb_probe(struct usb_interface
-               goto out_unlink_controlurb;
-       new->host->hostdata[0] = (unsigned long)new;
--      scsi_add_host(new->host, &intf->dev);
-+      scsi_add_host(new->host, &intf->dev); /* XXX handle failure */
-+      scsi_scan_host(new->host);
-       new->sense_command[0] = REQUEST_SENSE;
-       new->sense_command[4] = HPUSBSCSI_SENSE_LENGTH;
-@@ -306,7 +307,10 @@ DEBUG("Getting status byte %d \n",hpusbs
-       if(unlikely(u->status < 0)) {
-                 if (likely(hpusbscsi->state != HP_STATE_FREE))
-                         handle_usb_error(hpusbscsi);
--              return;
-+              if (u->status == -ECONNRESET || u->status == -ENOENT || u->status == -ESHUTDOWN)
-+                      return;
-+              else
-+                      goto resub;
-       }
-       scsi_state = hpusbscsi->scsi_state_byte;
-@@ -348,6 +352,8 @@ DEBUG("Getting status byte %d \n",hpusbs
-       TRACE_STATE;
-               break;
-       }
-+resub:
-+      usb_submit_urb(u, GFP_ATOMIC);
- }
- static void simple_command_callback(struct urb *u, struct pt_regs *regs)
-@@ -427,7 +433,7 @@ static void simple_done (struct urb *u, 
-                               hpusbscsi->state = HP_STATE_WAIT;
-                       } else {
-                               issue_request_sense(hpusbscsi);
--                      }                       
-+                      }
-               }
-       } else {
-               if (likely(hpusbscsi->scallback != NULL))
---- linux-2.6.0-test1/drivers/usb/image/microtek.c     2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/image/microtek.c    2003-07-19 17:03:50.000000000 -0700
-@@ -134,7 +134,7 @@
- #include <linux/proc_fs.h>
- #include <asm/atomic.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "../../scsi/scsi.h"
- #include "../../scsi/hosts.h"
-@@ -817,7 +817,8 @@ static int mts_usb_probe(struct usb_inte
-               goto out_free_urb;
-       new_desc->host->hostdata[0] = (unsigned long)new_desc;
--      scsi_add_host(new_desc->host, NULL);
-+      scsi_add_host(new_desc->host, NULL); /* XXX handle failure */
-+      scsi_scan_host(new_desc->host);
-       usb_set_intfdata(intf, new_desc);
-       return 0;
---- linux-2.6.0-test1/drivers/usb/image/scanner.c      2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/usb/image/scanner.c     2003-07-19 17:03:50.000000000 -0700
-@@ -364,6 +364,11 @@
-  *      Mustek, Pacific Image Electronics, Plustek, and Visioneer scanners.
-  *      Fixed names of some other scanners.
-  *
-+ * 0.4.14  2003-07-15
-+ *    - Fixed race between open and probe (Oliver Neukum).
-+ *    - Added vendor/product ids for Avision, Canon, HP, Microtek and Relisys scanners.
-+ *    - Clean up irq urb when not enough memory is available.
-+ *
-  * TODO
-  *    - Performance
-  *    - Select/poll methods
-@@ -1068,6 +1073,9 @@ probe_scanner(struct usb_interface *intf
- /* Ok, now initialize all the relevant values */
-       if (!(scn->obuf = (char *)kmalloc(OBUF_SIZE, GFP_KERNEL))) {
-               err("probe_scanner(%d): Not enough memory for the output buffer.", intf->minor);
-+              if (have_intr)
-+                      usb_unlink_urb(scn->scn_irq);
-+              usb_free_urb(scn->scn_irq);
-               kfree(scn);
-               up(&scn_mutex);
-               return -ENOMEM;
-@@ -1076,6 +1084,9 @@ probe_scanner(struct usb_interface *intf
-       if (!(scn->ibuf = (char *)kmalloc(IBUF_SIZE, GFP_KERNEL))) {
-               err("probe_scanner(%d): Not enough memory for the input buffer.", intf->minor);
-+              if (have_intr)
-+                      usb_unlink_urb(scn->scn_irq);
-+              usb_free_urb(scn->scn_irq);
-               kfree(scn->obuf);
-               kfree(scn);
-               up(&scn_mutex);
-@@ -1117,10 +1128,9 @@ probe_scanner(struct usb_interface *intf
-       info ("USB scanner device (0x%04x/0x%04x) now attached to %s",
-             dev->descriptor.idVendor, dev->descriptor.idProduct, name);
--      up(&scn_mutex);
--
-       usb_set_intfdata(intf, scn);
--
-+      up(&scn_mutex);
-+      
-       return 0;
- }
---- linux-2.6.0-test1/drivers/usb/image/scanner.h      2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/usb/image/scanner.h     2003-07-19 17:03:50.000000000 -0700
-@@ -43,7 +43,7 @@
- // #define DEBUG
--#define DRIVER_VERSION "0.4.13"
-+#define DRIVER_VERSION "0.4.14"
- #define DRIVER_DESC "USB Scanner Driver"
- #include <linux/usb.h>
-@@ -103,6 +103,7 @@ static struct usb_device_id scanner_devi
-       /* Avision */
-       { USB_DEVICE(0x0638, 0x0268) }, /* iVina 1200U */
-       { USB_DEVICE(0x0638, 0x0a10) }, /* iVina FB1600 (=Umax Astra 4500) */
-+      { USB_DEVICE(0x0638, 0x0a20) }, /* iVina FB1800 (=Umax Astra 4700) */
-       /* Benq: see Acer */
-       /* Brother */
-       { USB_DEVICE(0x04f9, 0x010f) }, /* MFC 5100C */
-@@ -115,10 +116,12 @@ static struct usb_device_id scanner_devi
-       { USB_DEVICE(0x04a9, 0x2206) }, /* CanoScan N650U/N656U */
-       { USB_DEVICE(0x04a9, 0x2207) }, /* CanoScan N1220U */
-       { USB_DEVICE(0x04a9, 0x2208) }, /* CanoScan D660U */ 
-+      { USB_DEVICE(0x04a9, 0x220a) }, /* CanoScan D2400UF */
-       { USB_DEVICE(0x04a9, 0x220b) }, /* CanoScan D646U */
-       { USB_DEVICE(0x04a9, 0x220c) }, /* CanoScan D1250U2 */
-       { USB_DEVICE(0x04a9, 0x220d) }, /* CanoScan N670U/N676U/LIDE 20 */
-       { USB_DEVICE(0x04a9, 0x220e) }, /* CanoScan N1240U/LIDE 30 */
-+      { USB_DEVICE(0x04a9, 0x220f) }, /* CanoScan 8000F */
-       { USB_DEVICE(0x04a9, 0x2213) }, /* LIDE 50 */
-       { USB_DEVICE(0x04a9, 0x3042) }, /* FS4000US */
-       /* Colorado -- See Primax/Colorado below */
-@@ -158,6 +161,7 @@ static struct usb_device_id scanner_devi
-       { USB_DEVICE(0x03f0, 0x0901) }, /* ScanJet 2300C */
-       { USB_DEVICE(0x03F0, 0x1005) }, /* ScanJet 5400C */
-       { USB_DEVICE(0x03F0, 0x1105) }, /* ScanJet 5470C */
-+      { USB_DEVICE(0x03f0, 0x1205) }, /* ScanJet 5550C */
-       { USB_DEVICE(0x03f0, 0x1305) }, /* Scanjet 4570c */
-       { USB_DEVICE(0x03f0, 0x1411) }, /* PSC 750 */
-       { USB_DEVICE(0x03f0, 0x2005) }, /* ScanJet 3570c */
-@@ -173,6 +177,7 @@ static struct usb_device_id scanner_devi
-       /* Memorex */
-       { USB_DEVICE(0x0461, 0x0346) }, /* 6136u - repackaged Primax ? */
-       /* Microtek */
-+      { USB_DEVICE(0x05da, 0x20c9) }, /* ScanMaker 6700 */
-       { USB_DEVICE(0x05da, 0x30ce) }, /* ScanMaker 3800 */
-       { USB_DEVICE(0x05da, 0x30cf) }, /* ScanMaker 4800 */
-       { USB_DEVICE(0x04a7, 0x0224) }, /* Scanport 3000 (actually Visioneer?)*/
-@@ -250,6 +255,7 @@ static struct usb_device_id scanner_devi
-       { USB_DEVICE(0x06dc, 0x0014) }, /* Winscan Pro 2448U */
-       /* Relisis */
-       // { USB_DEVICE(0x0475, 0x0103) },      /* Episode - undetected endpoint */
-+      { USB_DEVICE(0x0475, 0x0210) }, /* Scorpio Ultra 3 */
-       /* Seiko/Epson Corp. */
-       { USB_DEVICE(0x04b8, 0x0101) }, /* Perfection 636U and 636Photo */
-       { USB_DEVICE(0x04b8, 0x0102) }, /* GT-2200 */
---- linux-2.6.0-test1/drivers/usb/media/dabusb.c       2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/usb/media/dabusb.c      2003-07-19 17:03:50.000000000 -0700
-@@ -721,7 +721,7 @@ static struct usb_class_driver dabusb_cl
- /* --------------------------------------------------------------------- */
--static int dabusb_probe (struct usb_interface *intf, 
-+static int dabusb_probe (struct usb_interface *intf,
-                        const struct usb_device_id *id)
- {
-       struct usb_device *usbdev = interface_to_usbdev(intf);
-@@ -738,9 +738,7 @@ static int dabusb_probe (struct usb_inte
-       if (intf->altsetting->desc.bInterfaceNumber != _DABUSB_IF && usbdev->descriptor.idProduct == 0x9999)
-               return -ENODEV;
--      retval = usb_register_dev(intf, &dabusb_class);
--      if (retval)
--              return -ENOMEM;
-+
-       s = &dabusb[intf->minor];
-@@ -766,8 +764,15 @@ static int dabusb_probe (struct usb_inte
-               }
-       }
-       dbg("bound to interface: %d", ifnum);
--      up (&s->mutex);
-       usb_set_intfdata (intf, s);
-+      up (&s->mutex);
-+
-+      retval = usb_register_dev(intf, &dabusb_class);
-+      if (retval) {
-+              usb_set_intfdata (intf, NULL);
-+              return -ENOMEM;
-+      }
-+
-       return 0;
-       reject:
---- linux-2.6.0-test1/drivers/usb/media/vicam.c        2003-06-26 22:07:25.000000000 -0700
-+++ 25/drivers/usb/media/vicam.c       2003-07-19 17:04:54.000000000 -0700
-@@ -611,15 +611,20 @@ vicam_ioctl(struct inode *inode, struct 
-       case VIDIOCSPICT:
-               {
--                      struct video_picture *vp = (struct video_picture *) arg;
-+                      struct video_picture vp;
--                      DBG("VIDIOCSPICT depth = %d, pal = %d\n", vp->depth,
--                          vp->palette);
-+                      if (copy_from_user(&vp, arg, sizeof (vp))) {
-+                              retval = -EFAULT;
-+                              break;
-+                      }
--                      cam->gain = vp->brightness >> 8;
-+                      DBG("VIDIOCSPICT depth = %d, pal = %d\n", vp.depth,
-+                          vp.palette);
--                      if (vp->depth != 24
--                          || vp->palette != VIDEO_PALETTE_RGB24)
-+                      cam->gain = vp.brightness >> 8;
-+
-+                      if (vp.depth != 24
-+                          || vp.palette != VIDEO_PALETTE_RGB24)
-                               retval = -EINVAL;
-                       break;
-@@ -652,10 +657,15 @@ vicam_ioctl(struct inode *inode, struct 
-       case VIDIOCSWIN:
-               {
--                      struct video_window *vw = (struct video_window *) arg;
--                      DBG("VIDIOCSWIN %d x %d\n", vw->width, vw->height);
-+                      struct video_window vw;
-+
-+                      if (copy_from_user(&vw, arg, sizeof (vw))) {
-+                              retval = -EFAULT;
-+                              break;
-+                      }
-+                      DBG("VIDIOCSWIN %d x %d\n", vw.width, vw.height);
--                      if ( vw->width != 320 || vw->height != 240 )
-+                      if ( vw.width != 320 || vw.height != 240 )
-                               retval = -EFAULT;
-                       
-                       break;
---- linux-2.6.0-test1/drivers/usb/misc/usblcd.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/misc/usblcd.c       2003-07-19 17:03:50.000000000 -0700
-@@ -1,4 +1,4 @@
--/***************************************************************************** 
-+/*****************************************************************************
-  *                          USBLCD Kernel Driver                             *
-  *        See http://www.usblcd.de for Hardware and Documentation.           *
-  *                            Version 1.03                                   *
-@@ -18,7 +18,7 @@
- #include <asm/uaccess.h>
- #include <linux/usb.h>
--#define DRIVER_VERSION "USBLCD Driver Version 1.03"
-+#define DRIVER_VERSION "USBLCD Driver Version 1.04"
- #define USBLCD_MINOR          144
-@@ -257,7 +257,7 @@ static int probe_lcd(struct usb_interfac
-       struct lcd_usb_data *lcd = &lcd_instance;
-       int i;
-       int retval;
--      
-+
-       if (dev->descriptor.idProduct != 0x0001  ) {
-               warn(KERN_INFO "USBLCD model not supported.");
-               return -ENODEV;
-@@ -274,30 +274,32 @@ static int probe_lcd(struct usb_interfac
-               (i & 0xF000)>>12,(i & 0xF00)>>8,(i & 0xF0)>>4,(i & 0xF),
-               dev->devnum);
--      retval = usb_register_dev(intf, &usb_lcd_class);
--      if (retval) {
--              err("Not able to get a minor for this device.");
--              return -ENOMEM;
--      }
-+
-       lcd->present = 1;
-       lcd->lcd_dev = dev;
-       if (!(lcd->obuf = (char *) kmalloc(OBUF_SIZE, GFP_KERNEL))) {
-               err("probe_lcd: Not enough memory for the output buffer");
--              usb_deregister_dev(intf, &usb_lcd_class);
-               return -ENOMEM;
-       }
-       dbg("probe_lcd: obuf address:%p", lcd->obuf);
-       if (!(lcd->ibuf = (char *) kmalloc(IBUF_SIZE, GFP_KERNEL))) {
-               err("probe_lcd: Not enough memory for the input buffer");
--              usb_deregister_dev(intf, &usb_lcd_class);
-               kfree(lcd->obuf);
-               return -ENOMEM;
-       }
-       dbg("probe_lcd: ibuf address:%p", lcd->ibuf);
-+      retval = usb_register_dev(intf, &usb_lcd_class);
-+      if (retval) {
-+              err("Not able to get a minor for this device.");
-+              kfree(lcd->obuf);
-+              kfree(lcd->ibuf);
-+              return -ENOMEM;
-+      }
-+
-       usb_set_intfdata (intf, lcd);
-       return 0;
- }
---- linux-2.6.0-test1/drivers/usb/misc/usbtest.c       2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/misc/usbtest.c      2003-07-19 17:03:50.000000000 -0700
-@@ -47,6 +47,7 @@ struct usbtest_info {
-       const char              *name;
-       u8                      ep_in;          /* bulk/intr source */
-       u8                      ep_out;         /* bulk/intr sink */
-+      unsigned                autoconf : 1;
-       int                     alt;
- };
-@@ -78,6 +79,61 @@ static struct usb_device *testdev_to_usb
- /*-------------------------------------------------------------------------*/
-+static int
-+get_endpoints (struct usbtest_dev *dev, struct usb_interface *intf)
-+{
-+      int                             tmp;
-+      struct usb_host_interface       *alt;
-+      struct usb_host_endpoint        *in, *out;
-+      struct usb_device               *udev;
-+
-+      for (tmp = 0; tmp < intf->max_altsetting; tmp++) {
-+              unsigned        ep;
-+
-+              in = out = 0;
-+              alt = intf->altsetting + tmp;
-+
-+              /* take the first altsetting with in-bulk + out-bulk;
-+               * ignore other endpoints and altsetttings.
-+               */
-+              for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
-+                      struct usb_host_endpoint        *e;
-+
-+                      e = alt->endpoint + ep;
-+                      if (e->desc.bmAttributes != USB_ENDPOINT_XFER_BULK)
-+                              continue;
-+                      if (e->desc.bEndpointAddress & USB_DIR_IN) {
-+                              if (!in)
-+                                      in = e;
-+                      } else {
-+                              if (!out)
-+                                      out = e;
-+                      }
-+                      if (in && out)
-+                              goto found;
-+              }
-+      }
-+      return -EINVAL;
-+
-+found:
-+      udev = testdev_to_usbdev (dev);
-+      if (alt->desc.bAlternateSetting != 0) {
-+              tmp = usb_set_interface (udev,
-+                              alt->desc.bInterfaceNumber,
-+                              alt->desc.bAlternateSetting);
-+              if (tmp < 0)
-+                      return tmp;
-+      }
-+
-+      dev->in_pipe = usb_rcvbulkpipe (udev,
-+                      in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
-+      dev->out_pipe = usb_sndbulkpipe (udev,
-+                      out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
-+      return 0;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
- /* Support for testing basic non-queued I/O streams.
-  *
-  * These just package urbs as requests that can be easily canceled.
-@@ -1275,14 +1331,26 @@ usbtest_probe (struct usb_interface *int
-                       wtest = " intr-out";
-               }
-       } else {
--              if (info->ep_in) {
--                      dev->in_pipe = usb_rcvbulkpipe (udev, info->ep_in);
--                      rtest = " bulk-in";
-+              if (info->autoconf) {
-+                      int status;
-+
-+                      status = get_endpoints (dev, intf);
-+                      if (status < 0) {
-+                              dbg ("couldn't get endpoints, %d\n", status);
-+                              return status;
-+                      }
-+              } else {
-+                      if (info->ep_in)
-+                              dev->in_pipe = usb_rcvbulkpipe (udev,
-+                                                      info->ep_in);
-+                      if (info->ep_out)
-+                              dev->out_pipe = usb_sndbulkpipe (udev,
-+                                                      info->ep_out);
-               }
--              if (info->ep_out) {
--                      dev->out_pipe = usb_sndbulkpipe (udev, info->ep_out);
-+              if (dev->in_pipe)
-+                      rtest = " bulk-in";
-+              if (dev->out_pipe)
-                       wtest = " bulk-out";
--              }
-       }
-       usb_set_intfdata (intf, dev);
-@@ -1336,11 +1404,6 @@ static struct usbtest_info ez2_info = {
- };
- /* ezusb family device with dedicated usb test firmware,
-- * or a peripheral running Linux and 'zero.c' test firmware.
-- *
-- * FIXME usbtest should read the descriptors, since compatible
-- * test firmware might run on hardware (pxa250 for one) that
-- * can't configure an ep2in-bulk.
-  */
- static struct usbtest_info fw_info = {
-       .name           = "usb test device",
-@@ -1349,10 +1412,20 @@ static struct usbtest_info fw_info = {
-       .alt            = 0,
- };
-+/* peripheral running Linux and 'zero.c' test firmware, or
-+ * its user-mode cousin. different versions of this use
-+ * different hardware with the same vendor/product codes.
-+ * host side MUST rely on the endpoint descriptors.
-+ */
-+static struct usbtest_info gz_info = {
-+      .name           = "Linux gadget zero",
-+      .autoconf       = 1,
-+      .alt            = 0,
-+};
-+
- static struct usbtest_info um_info = {
--      .name           = "user mode test driver",
--      .ep_in          = 7,
--      .ep_out         = 3,
-+      .name           = "Linux user mode test driver",
-+      .autoconf       = 1,
-       .alt            = -1,
- };
-@@ -1418,7 +1491,7 @@ static struct usb_device_id id_table [] 
-       /* "Gadget Zero" firmware runs under Linux */
-       { USB_DEVICE (0x0525, 0xa4a0),
--              .driver_info = (unsigned long) &fw_info,
-+              .driver_info = (unsigned long) &gz_info,
-               },
-       /* so does a user-mode variant */
---- linux-2.6.0-test1/drivers/usb/net/ax8817x.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/ax8817x.c       2003-07-19 17:03:50.000000000 -0700
-@@ -1208,6 +1208,7 @@ static int ax8817x_bind(struct usb_inter
-       net->init = ax8817x_net_init;
-       net->priv = ax_info;
-+      SET_NETDEV_DEV(net, &intf->dev);
-       ret = register_netdev(net);
-       if (ret < 0) {
-               err("%s: Failed net init (%d)\n", __FUNCTION__, ret);
---- linux-2.6.0-test1/drivers/usb/net/catc.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/catc.c  2003-07-19 17:03:50.000000000 -0700
-@@ -936,6 +936,7 @@ static int catc_probe(struct usb_interfa
-       printk("%2.2x.\n", netdev->dev_addr[i]);
-       usb_set_intfdata(intf, catc);
-+      SET_NETDEV_DEV(netdev, &intf->dev);
-       if (register_netdev(netdev) != 0) {
-               usb_set_intfdata(intf, NULL);
-               usb_free_urb(catc->ctrl_urb);
---- linux-2.6.0-test1/drivers/usb/net/kaweth.c 2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/net/kaweth.c        2003-07-19 17:03:50.000000000 -0700
-@@ -1123,8 +1123,9 @@ static int kaweth_probe(
-       if (dma_supported (&intf->dev, 0xffffffffffffffffULL))
-               kaweth->net->features |= NETIF_F_HIGHDMA;
-+      SET_NETDEV_DEV(netdev, &intf->dev);
-       if (register_netdev(netdev) != 0) {
--              kaweth_err("Error calling init_etherdev.");
-+              kaweth_err("Error registering netdev.");
-               goto err_intfdata;
-       }
---- linux-2.6.0-test1/drivers/usb/net/pegasus.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/pegasus.c       2003-07-19 17:03:50.000000000 -0700
-@@ -1262,7 +1262,6 @@ static int pegasus_probe(struct usb_inte
-       }
-       set_ethernet_addr(pegasus);
-       fill_skb_pool(pegasus);
--      printk("%s: %s\n", net->name, usb_dev_id[dev_index].name);
-       if (pegasus->features & PEGASUS_II) {
-               info("setup Pegasus II specific registers");
-               setup_pegasus_II(pegasus);
-@@ -1273,9 +1272,11 @@ static int pegasus_probe(struct usb_inte
-               pegasus->phy = 1;
-       }
-       usb_set_intfdata(intf, pegasus);
-+      SET_NETDEV_DEV(net, &intf->dev);
-       res = register_netdev(net);
-       if (res)
-               goto out4;
-+      printk("%s: %s\n", net->name, usb_dev_id[dev_index].name);
-       return 0;
- out4:
---- linux-2.6.0-test1/drivers/usb/net/rtl8150.c        2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/net/rtl8150.c       2003-07-19 17:03:50.000000000 -0700
-@@ -830,6 +830,7 @@ static int rtl8150_probe(struct usb_inte
-       
-       usb_set_intfdata(intf, dev);
-+      SET_NETDEV_DEV(netdev, &intf->dev);
-       if (register_netdev(netdev) != 0) {
-               err("couldn't register the device");
-               goto out2;
---- linux-2.6.0-test1/drivers/usb/net/usbnet.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/net/usbnet.c        2003-07-19 17:03:50.000000000 -0700
-@@ -2602,7 +2602,7 @@ usbnet_probe (struct usb_interface *udev
-       dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
-       
--      SET_NETDEV_DEV(dev->net, &dev->udev->dev);
-+      SET_NETDEV_DEV(dev->net, &udev->dev);
-       status = register_netdev (dev->net);
-       if (status)
-               goto out3;
---- linux-2.6.0-test1/drivers/usb/serial/ftdi_sio.c    2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/serial/ftdi_sio.c   2003-07-19 17:03:50.000000000 -0700
-@@ -257,6 +257,7 @@ static struct usb_device_id id_table_8U2
-       { USB_DEVICE_VER(FTDI_VID, FTDI_XF_634_PID, 0, 0x3ff) },
-       { USB_DEVICE_VER(FTDI_VID, FTDI_XF_632_PID, 0, 0x3ff) },
-       { USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0, 0x3ff) },
-+      { USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0, 0x3ff) },
-       { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID, 0, 0x3ff) },
-       { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_1_PID, 0, 0x3ff) },
-       { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_2_PID, 0, 0x3ff) },
-@@ -321,6 +322,7 @@ static struct usb_device_id id_table_FT2
-       { USB_DEVICE_VER(FTDI_VID, FTDI_XF_634_PID, 0x400, 0xffff) },
-       { USB_DEVICE_VER(FTDI_VID, FTDI_XF_632_PID, 0x400, 0xffff) },
-       { USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0x400, 0xffff) },
-+      { USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0x400, 0xffff) },
-       { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID, 0x400, 0xffff) },
-       { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_1_PID, 0x400, 0xffff) },
-       { USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_2_PID, 0x400, 0xffff) },
-@@ -396,6 +398,7 @@ static __devinitdata struct usb_device_i
-       { USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
-       { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
-       { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
-+      { USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) },
-       { USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) },
-       { USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) },
-       { USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID) },
---- linux-2.6.0-test1/drivers/usb/serial/ftdi_sio.h    2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/serial/ftdi_sio.h   2003-07-19 17:03:50.000000000 -0700
-@@ -105,7 +105,13 @@
- #define SEALEVEL_2803_6_PID   0X2863  /* SeaLINK+8 (2803) Port 6 */
- #define SEALEVEL_2803_7_PID   0X2873  /* SeaLINK+8 (2803) Port 7 */
- #define SEALEVEL_2803_8_PID   0X2883  /* SeaLINK+8 (2803) Port 8 */
-+
-+/*
-+ * DSS-20 Sync Station for Sony Ericsson P800
-+ */
-  
-+#define FTDI_DSS20_PID          0xFC82  
-+
- /*
-  * Home Electronics (www.home-electro.com) USB gadgets
-  */
---- linux-2.6.0-test1/drivers/usb/serial/ipaq.c        2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/usb/serial/ipaq.c       2003-07-19 17:03:50.000000000 -0700
-@@ -125,10 +125,13 @@ static struct usb_device_id ipaq_id_tabl
-       { USB_DEVICE(LINKUP_VENDOR_ID, LINKUP_PRODUCT_ID) },
-       { USB_DEVICE(MICROSOFT_VENDOR_ID, MICROSOFT_00CE_ID) },
-       { USB_DEVICE(PORTATEC_VENDOR_ID, PORTATEC_PRODUCT_ID) },
-+      { USB_DEVICE(ROVER_VENDOR_ID, ROVER_P5_ID) },
-       { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_WIRELESS_ID) },
-       { USB_DEVICE(SOCKET_VENDOR_ID, SOCKET_PRODUCT_ID) },
-       { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_ID) },
-+      { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_E310_ID) },
-       { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_E740_ID) },
-+      { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_E335_ID) },
-       { USB_DEVICE(HTC_VENDOR_ID, HTC_PRODUCT_ID) },
-       { USB_DEVICE(NEC_VENDOR_ID, NEC_PRODUCT_ID) },
-       { USB_DEVICE(ASUS_VENDOR_ID, ASUS_A600_PRODUCT_ID) },
---- linux-2.6.0-test1/drivers/usb/serial/ipaq.h        2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/usb/serial/ipaq.h       2003-07-19 17:03:50.000000000 -0700
-@@ -61,6 +61,9 @@
- #define PORTATEC_VENDOR_ID    0x0961
- #define PORTATEC_PRODUCT_ID   0x0010
-+#define ROVER_VENDOR_ID               0x047b
-+#define ROVER_P5_ID           0x3000
-+
- #define SAGEM_VENDOR_ID               0x5e04
- #define SAGEM_WIRELESS_ID     0xce00
-@@ -69,7 +72,9 @@
- #define TOSHIBA_VENDOR_ID     0x0930
- #define TOSHIBA_PRODUCT_ID    0x0700
-+#define TOSHIBA_E310_ID               0x0705
- #define TOSHIBA_E740_ID               0x0706
-+#define TOSHIBA_E335_ID               0x0707
- #define HTC_VENDOR_ID         0x0bb4
- #define HTC_PRODUCT_ID                0x00ce
---- linux-2.6.0-test1/drivers/usb/serial/usb-serial.c  2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/usb/serial/usb-serial.c 2003-07-19 17:03:50.000000000 -0700
-@@ -530,7 +530,9 @@ static void serial_close(struct tty_stru
-       /* if disconnect beat us to the punch here, there's nothing to do */
-       if (tty && tty->driver_data) {
-               __serial_close(port, filp);
-+              tty->driver_data = NULL;
-       }
-+      port->tty = NULL;
- }
- static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count)
---- linux-2.6.0-test1/drivers/usb/serial/visor.c       2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/serial/visor.c      2003-07-19 17:03:50.000000000 -0700
-@@ -509,18 +509,17 @@ static void visor_write_bulk_callback (s
- {
-       struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-+      /* free up the transfer buffer, as usb_free_urb() does not do this */
-+      kfree (urb->transfer_buffer);
-+
-       if (port_paranoia_check (port, __FUNCTION__))
-               return;
-       
-       dbg("%s - port %d", __FUNCTION__, port->number);
-       
--      if (urb->status) {
--              dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
--              return;
--      }
--
--      /* free up the transfer buffer, as usb_free_urb() does not do this */
--      kfree (urb->transfer_buffer);
-+      if (urb->status)
-+              dbg("%s - nonzero write bulk status received: %d",
-+                  __FUNCTION__, urb->status);
-       schedule_work(&port->work);
- }
---- linux-2.6.0-test1/drivers/usb/storage/debug.h      2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/usb/storage/debug.h     2003-07-19 17:03:50.000000000 -0700
-@@ -46,7 +46,6 @@
- #include <linux/config.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
- #include <linux/cdrom.h>
- #include "usb.h"
---- linux-2.6.0-test1/drivers/usb/storage/isd200.c     2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/isd200.c    2003-07-19 17:03:50.000000000 -0700
-@@ -280,6 +280,7 @@ struct isd200_info {
-       /* maximum number of LUNs supported */
-       unsigned char MaxLUNs;
-+      struct scsi_cmnd srb;
- };
-@@ -404,15 +405,15 @@ static int isd200_action( struct us_data
-                         void* pointer, int value )
- {
-       union ata_cdb ata;
--      struct scsi_cmnd srb;
-       struct scsi_device srb_dev;
-       struct isd200_info *info = (struct isd200_info *)us->extra;
-+      struct scsi_cmnd *srb = &info->srb;
-       int status;
-       memset(&ata, 0, sizeof(ata));
--      memset(&srb, 0, sizeof(srb));
-       memset(&srb_dev, 0, sizeof(srb_dev));
--      srb.device = &srb_dev;
-+      srb->device = &srb_dev;
-+      ++srb->serial_number;
-       ata.generic.SignatureByte0 = info->ConfigData.ATAMajorCommand;
-       ata.generic.SignatureByte1 = info->ConfigData.ATAMinorCommand;
-@@ -425,9 +426,9 @@ static int isd200_action( struct us_data
-               ata.generic.RegisterSelect =
-                 REG_CYLINDER_LOW | REG_CYLINDER_HIGH |
-                 REG_STATUS | REG_ERROR;
--              srb.sc_data_direction = SCSI_DATA_READ;
--              srb.request_buffer = pointer;
--              srb.request_bufflen = value;
-+              srb->sc_data_direction = SCSI_DATA_READ;
-+              srb->request_buffer = pointer;
-+              srb->request_bufflen = value;
-               break;
-       case ACTION_ENUM:
-@@ -437,7 +438,7 @@ static int isd200_action( struct us_data
-                                          ACTION_SELECT_5;
-               ata.generic.RegisterSelect = REG_DEVICE_HEAD;
-               ata.write.DeviceHeadByte = value;
--              srb.sc_data_direction = SCSI_DATA_NONE;
-+              srb->sc_data_direction = SCSI_DATA_NONE;
-               break;
-       case ACTION_RESET:
-@@ -446,7 +447,7 @@ static int isd200_action( struct us_data
-                                          ACTION_SELECT_3|ACTION_SELECT_4;
-               ata.generic.RegisterSelect = REG_DEVICE_CONTROL;
-               ata.write.DeviceControlByte = ATA_DC_RESET_CONTROLLER;
--              srb.sc_data_direction = SCSI_DATA_NONE;
-+              srb->sc_data_direction = SCSI_DATA_NONE;
-               break;
-       case ACTION_REENABLE:
-@@ -455,7 +456,7 @@ static int isd200_action( struct us_data
-                                          ACTION_SELECT_3|ACTION_SELECT_4;
-               ata.generic.RegisterSelect = REG_DEVICE_CONTROL;
-               ata.write.DeviceControlByte = ATA_DC_REENABLE_CONTROLLER;
--              srb.sc_data_direction = SCSI_DATA_NONE;
-+              srb->sc_data_direction = SCSI_DATA_NONE;
-               break;
-       case ACTION_SOFT_RESET:
-@@ -464,16 +465,16 @@ static int isd200_action( struct us_data
-               ata.generic.RegisterSelect = REG_DEVICE_HEAD | REG_COMMAND;
-               ata.write.DeviceHeadByte = info->DeviceHead;
-               ata.write.CommandByte = WIN_SRST;
--              srb.sc_data_direction = SCSI_DATA_NONE;
-+              srb->sc_data_direction = SCSI_DATA_NONE;
-               break;
-       case ACTION_IDENTIFY:
-               US_DEBUGP("   isd200_action(IDENTIFY)\n");
-               ata.generic.RegisterSelect = REG_COMMAND;
-               ata.write.CommandByte = WIN_IDENTIFY;
--              srb.sc_data_direction = SCSI_DATA_READ;
--              srb.request_buffer = (void *)&info->drive;
--              srb.request_bufflen = sizeof(struct hd_driveid);
-+              srb->sc_data_direction = SCSI_DATA_READ;
-+              srb->request_buffer = (void *)&info->drive;
-+              srb->request_bufflen = sizeof(struct hd_driveid);
-               break;
-       default:
-@@ -481,9 +482,9 @@ static int isd200_action( struct us_data
-               break;
-       }
--      memcpy(srb.cmnd, &ata, sizeof(ata.generic));
--      srb.cmd_len = sizeof(ata.generic);
--      status = usb_stor_Bulk_transport(&srb, us);
-+      memcpy(srb->cmnd, &ata, sizeof(ata.generic));
-+      srb->cmd_len = sizeof(ata.generic);
-+      status = usb_stor_Bulk_transport(srb, us);
-       if (status == USB_STOR_TRANSPORT_GOOD)
-               status = ISD200_GOOD;
-       else {
-@@ -834,7 +835,7 @@ static int isd200_try_enum(struct us_dat
-                          int detect )
- {
-       int status = ISD200_GOOD;
--      unsigned char regs[8];
-+      unsigned char *regs = us->iobuf;
-       unsigned long endTime;
-       struct isd200_info *info = (struct isd200_info *)us->extra;
-       int recheckAsMaster = FALSE;
-@@ -856,7 +857,7 @@ static int isd200_try_enum(struct us_dat
-                       break;
-               status = isd200_action( us, ACTION_READ_STATUS, 
--                                      regs, sizeof(regs) );
-+                                      regs, 8 );
-               if ( status != ISD200_GOOD )
-                       break;
---- linux-2.6.0-test1/drivers/usb/storage/jumpshot.c   2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/usb/storage/jumpshot.c  2003-07-19 17:03:50.000000000 -0700
-@@ -86,7 +86,6 @@ static inline int jumpshot_bulk_write(st
- static int jumpshot_get_status(struct us_data  *us)
- {
--      unsigned char reply;
-       int rc;
-       if (!us)
-@@ -94,14 +93,14 @@ static int jumpshot_get_status(struct us
-       // send the setup
-       rc = usb_stor_ctrl_transfer(us, us->recv_ctrl_pipe,
--                                 0, 0xA0, 0, 7, &reply, 1);
-+                                 0, 0xA0, 0, 7, us->iobuf, 1);
-       if (rc != USB_STOR_XFER_GOOD)
-               return USB_STOR_TRANSPORT_ERROR;
--      if (reply != 0x50) {
-+      if (us->iobuf[0] != 0x50) {
-               US_DEBUGP("jumpshot_get_status:  0x%2x\n",
--                        (unsigned short) (reply));
-+                        us->iobuf[0]);
-               return USB_STOR_TRANSPORT_ERROR;
-       }
-@@ -115,7 +114,7 @@ static int jumpshot_read_data(struct us_
-                             unsigned char *dest, 
-                             int use_sg)
- {
--      unsigned char command[] = { 0, 0, 0, 0, 0, 0xe0, 0x20 };
-+      unsigned char *command = us->iobuf;
-       unsigned char *buffer = NULL;
-       unsigned char *ptr;
-       unsigned char  thistime;
-@@ -154,7 +153,8 @@ static int jumpshot_read_data(struct us_
-               command[3] = (sector >>  8) & 0xFF;
-               command[4] = (sector >> 16) & 0xFF;
--              command[5] |= (sector >> 24) & 0x0F;
-+              command[5] = 0xE0 | ((sector >> 24) & 0x0F);
-+              command[6] = 0x20;
-               // send the setup + command
-               result = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
-@@ -199,7 +199,7 @@ static int jumpshot_write_data(struct us
-                              unsigned char *src, 
-                              int use_sg)
- {
--      unsigned char command[7] = { 0, 0, 0, 0, 0, 0xE0, 0x30 };
-+      unsigned char *command = us->iobuf;
-       unsigned char *buffer = NULL;
-       unsigned char *ptr;
-       unsigned char  thistime;
-@@ -240,7 +240,8 @@ static int jumpshot_write_data(struct us
-               command[3] = (sector >>  8) & 0xFF;
-               command[4] = (sector >> 16) & 0xFF;
--              command[5] |= (sector >> 24) & 0x0F;
-+              command[5] = 0xE0 | ((sector >> 24) & 0x0F);
-+              command[6] = 0x30;
-               // send the setup + command
-               result = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
-@@ -291,13 +292,19 @@ static int jumpshot_write_data(struct us
- static int jumpshot_id_device(struct us_data *us,
-                             struct jumpshot_info *info)
- {
--      unsigned char command[2] = { 0xe0, 0xec };
--      unsigned char reply[512];
-+      unsigned char *command = us->iobuf;
-+      unsigned char *reply;
-       int      rc;
-       if (!us || !info)
-               return USB_STOR_TRANSPORT_ERROR;
-+      command[0] = 0xE0;
-+      command[1] = 0xEC;
-+      reply = kmalloc(512, GFP_NOIO);
-+      if (!reply)
-+              return USB_STOR_TRANSPORT_ERROR;
-+
-       // send the setup
-       rc = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
-                                  0, 0x20, 0, 6, command, 2);
-@@ -305,20 +312,27 @@ static int jumpshot_id_device(struct us_
-       if (rc != USB_STOR_XFER_GOOD) {
-               US_DEBUGP("jumpshot_id_device:  Gah! "
-                         "send_control for read_capacity failed\n");
--              return rc;
-+              rc = USB_STOR_TRANSPORT_ERROR;
-+              goto leave;
-       }
-       // read the reply
-       rc = jumpshot_bulk_read(us, reply, sizeof(reply));
--      if (rc != USB_STOR_XFER_GOOD)
--              return USB_STOR_TRANSPORT_ERROR;
-+      if (rc != USB_STOR_XFER_GOOD) {
-+              rc = USB_STOR_TRANSPORT_ERROR;
-+              goto leave;
-+      }
-       info->sectors = ((u32)(reply[117]) << 24) |
-                       ((u32)(reply[116]) << 16) |
-                       ((u32)(reply[115]) <<  8) |
-                       ((u32)(reply[114])      );
--      return USB_STOR_TRANSPORT_GOOD;
-+      rc = USB_STOR_TRANSPORT_GOOD;
-+
-+ leave:
-+      kfree(reply);
-+      return rc;
- }
- static int jumpshot_handle_mode_sense(struct us_data *us,
---- linux-2.6.0-test1/drivers/usb/storage/protocol.c   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/protocol.c  2003-07-19 17:03:50.000000000 -0700
-@@ -130,8 +130,9 @@ static void fix_read_capacity(Scsi_Cmnd 
- void usb_stor_qic157_command(Scsi_Cmnd *srb, struct us_data *us)
- {
-       /* Pad the ATAPI command with zeros 
-+       *
-        * NOTE: This only works because a Scsi_Cmnd struct field contains
--       * a unsigned char cmnd[12], so we know we have storage available
-+       * a unsigned char cmnd[16], so we know we have storage available
-        */
-       for (; srb->cmd_len<12; srb->cmd_len++)
-               srb->cmnd[srb->cmd_len] = 0;
-@@ -149,13 +150,10 @@ void usb_stor_qic157_command(Scsi_Cmnd *
- void usb_stor_ATAPI_command(Scsi_Cmnd *srb, struct us_data *us)
- {
--      int old_cmnd = 0;
--
--      /* Fix some commands -- this is a form of mode translation
--       * ATAPI devices only accept 12 byte long commands 
-+      /* Pad the ATAPI command with zeros 
-        *
-        * NOTE: This only works because a Scsi_Cmnd struct field contains
--       * a unsigned char cmnd[12], so we know we have storage available
-+       * a unsigned char cmnd[16], so we know we have storage available
-        */
-       /* Pad the ATAPI command with zeros */
-@@ -165,60 +163,10 @@ void usb_stor_ATAPI_command(Scsi_Cmnd *s
-       /* set command length to 12 bytes */
-       srb->cmd_len = 12;
--      /* determine the correct (or minimum) data length for these commands */
--      switch (srb->cmnd[0]) {
--
--              /* change MODE_SENSE/MODE_SELECT from 6 to 10 byte commands */
--      case MODE_SENSE:
--      case MODE_SELECT:
--              /* save the command so we can tell what it was */
--              old_cmnd = srb->cmnd[0];
--
--              srb->cmnd[11] = 0;
--              srb->cmnd[10] = 0;
--              srb->cmnd[9] = 0;
--              srb->cmnd[8] = srb->cmnd[4];
--              srb->cmnd[7] = 0;
--              srb->cmnd[6] = 0;
--              srb->cmnd[5] = 0;
--              srb->cmnd[4] = 0;
--              srb->cmnd[3] = 0;
--              srb->cmnd[2] = srb->cmnd[2];
--              srb->cmnd[1] = srb->cmnd[1];
--              srb->cmnd[0] = srb->cmnd[0] | 0x40;
--              break;
--
--              /* change READ_6/WRITE_6 to READ_10/WRITE_10, which 
--               * are ATAPI commands */
--      case WRITE_6:
--      case READ_6:
--              srb->cmnd[11] = 0;
--              srb->cmnd[10] = 0;
--              srb->cmnd[9] = 0;
--              srb->cmnd[8] = srb->cmnd[4];
--              srb->cmnd[7] = 0;
--              srb->cmnd[6] = 0;
--              srb->cmnd[5] = srb->cmnd[3];
--              srb->cmnd[4] = srb->cmnd[2];
--              srb->cmnd[3] = srb->cmnd[1] & 0x1F;
--              srb->cmnd[2] = 0;
--              srb->cmnd[1] = srb->cmnd[1] & 0xE0;
--              srb->cmnd[0] = srb->cmnd[0] | 0x20;
--              break;
--      } /* end switch on cmnd[0] */
--
--      /* convert MODE_SELECT data here */
--      if (old_cmnd == MODE_SELECT)
--              usb_stor_scsiSense6to10(srb);
--
-       /* send the command to the transport layer */
-       usb_stor_invoke_transport(srb, us);
--      if (srb->result == SAM_STAT_GOOD) {
--
--              /* Fix the MODE_SENSE data if we translated the command */
--              if (old_cmnd == MODE_SENSE)
--                      usb_stor_scsiSense10to6(srb);
-+      if (srb->result == SAM_STAT_GOOD) {
-               /* fix the INQUIRY data if necessary */
-               fix_inquiry_data(srb);
-       }
-@@ -227,19 +175,23 @@ void usb_stor_ATAPI_command(Scsi_Cmnd *s
- void usb_stor_ufi_command(Scsi_Cmnd *srb, struct us_data *us)
- {
--      int old_cmnd = 0;
--
-       /* fix some commands -- this is a form of mode translation
-        * UFI devices only accept 12 byte long commands 
-        *
-        * NOTE: This only works because a Scsi_Cmnd struct field contains
--       * a unsigned char cmnd[12], so we know we have storage available
-+       * a unsigned char cmnd[16], so we know we have storage available
-        */
-+      /* Pad the ATAPI command with zeros */
-+      for (; srb->cmd_len<12; srb->cmd_len++)
-+              srb->cmnd[srb->cmd_len] = 0;
-+
-       /* set command length to 12 bytes (this affects the transport layer) */
-       srb->cmd_len = 12;
--      /* determine the correct (or minimum) data length for these commands */
-+      /* XXX We should be constantly re-evaluating the need for these */
-+
-+      /* determine the correct data length for these commands */
-       switch (srb->cmnd[0]) {
-               /* for INQUIRY, UFI devices only ever return 36 bytes */
-@@ -247,33 +199,6 @@ void usb_stor_ufi_command(Scsi_Cmnd *srb
-               srb->cmnd[4] = 36;
-               break;
--              /* change MODE_SENSE/MODE_SELECT from 6 to 10 byte commands */
--      case MODE_SENSE:
--      case MODE_SELECT:
--              /* save the command so we can tell what it was */
--              old_cmnd = srb->cmnd[0];
--
--              srb->cmnd[11] = 0;
--              srb->cmnd[10] = 0;
--              srb->cmnd[9] = 0;
--
--              /* if we're sending data, we send all.  If getting data, 
--               * get the minimum */
--              if (srb->cmnd[0] == MODE_SELECT)
--                      srb->cmnd[8] = srb->cmnd[4];
--              else
--                      srb->cmnd[8] = 8;
--
--              srb->cmnd[7] = 0;
--              srb->cmnd[6] = 0;
--              srb->cmnd[5] = 0;
--              srb->cmnd[4] = 0;
--              srb->cmnd[3] = 0;
--              srb->cmnd[2] = srb->cmnd[2];
--              srb->cmnd[1] = srb->cmnd[1];
--              srb->cmnd[0] = srb->cmnd[0] | 0x40;
--              break;
--
-               /* again, for MODE_SENSE_10, we get the minimum (8) */
-       case MODE_SENSE_10:
-               srb->cmnd[7] = 0;
-@@ -284,38 +209,12 @@ void usb_stor_ufi_command(Scsi_Cmnd *srb
-       case REQUEST_SENSE:
-               srb->cmnd[4] = 18;
-               break;
--
--              /* change READ_6/WRITE_6 to READ_10/WRITE_10, which 
--               * are UFI commands */
--      case WRITE_6:
--      case READ_6:
--              srb->cmnd[11] = 0;
--              srb->cmnd[10] = 0;
--              srb->cmnd[9] = 0;
--              srb->cmnd[8] = srb->cmnd[4];
--              srb->cmnd[7] = 0;
--              srb->cmnd[6] = 0;
--              srb->cmnd[5] = srb->cmnd[3];
--              srb->cmnd[4] = srb->cmnd[2];
--              srb->cmnd[3] = srb->cmnd[1] & 0x1F;
--              srb->cmnd[2] = 0;
--              srb->cmnd[1] = srb->cmnd[1] & 0xE0;
--              srb->cmnd[0] = srb->cmnd[0] | 0x20;
--              break;
-       } /* end switch on cmnd[0] */
--      /* convert MODE_SELECT data here */
--      if (old_cmnd == MODE_SELECT)
--              usb_stor_scsiSense6to10(srb);
--
-       /* send the command to the transport layer */
-       usb_stor_invoke_transport(srb, us);
--      if (srb->result == SAM_STAT_GOOD) {
--
--              /* Fix the MODE_SENSE data if we translated the command */
--              if (old_cmnd == MODE_SENSE)
--                      usb_stor_scsiSense10to6(srb);
-+      if (srb->result == SAM_STAT_GOOD) {
-               /* Fix the data for an INQUIRY, if necessary */
-               fix_inquiry_data(srb);
-       }
-@@ -323,68 +222,10 @@ void usb_stor_ufi_command(Scsi_Cmnd *srb
- void usb_stor_transparent_scsi_command(Scsi_Cmnd *srb, struct us_data *us)
- {
--      int old_cmnd = 0;
--
--      /* This code supports devices which do not support {READ|WRITE}_6
--       * Apparently, neither Windows or MacOS will use these commands,
--       * so some devices do not support them
--       */
--      if (us->flags & US_FL_MODE_XLATE) {
--              US_DEBUGP("Invoking Mode Translation\n");
--              /* save the old command for later */
--              old_cmnd = srb->cmnd[0];
--
--              switch (srb->cmnd[0]) {
--              /* change READ_6/WRITE_6 to READ_10/WRITE_10 */
--              case WRITE_6:
--              case READ_6:
--                      srb->cmd_len = 12;
--                      srb->cmnd[11] = 0;
--                      srb->cmnd[10] = 0;
--                      srb->cmnd[9] = 0;
--                      srb->cmnd[8] = srb->cmnd[4];
--                      srb->cmnd[7] = 0;
--                      srb->cmnd[6] = 0;
--                      srb->cmnd[5] = srb->cmnd[3];
--                      srb->cmnd[4] = srb->cmnd[2];
--                      srb->cmnd[3] = srb->cmnd[1] & 0x1F;
--                      srb->cmnd[2] = 0;
--                      srb->cmnd[1] = srb->cmnd[1] & 0xE0;
--                      srb->cmnd[0] = srb->cmnd[0] | 0x20;
--                      break;
--
--              /* convert MODE_SELECT data here */
--              case MODE_SENSE:
--              case MODE_SELECT:
--                      srb->cmd_len = 12;
--                      srb->cmnd[11] = 0;
--                      srb->cmnd[10] = 0;
--                      srb->cmnd[9] = 0;
--                      srb->cmnd[8] = srb->cmnd[4];
--                      srb->cmnd[7] = 0;
--                      srb->cmnd[6] = 0;
--                      srb->cmnd[5] = 0;
--                      srb->cmnd[4] = 0;
--                      srb->cmnd[3] = 0;
--                      srb->cmnd[2] = srb->cmnd[2];
--                      srb->cmnd[1] = srb->cmnd[1];
--                      srb->cmnd[0] = srb->cmnd[0] | 0x40;
--                      break;
--              } /* switch (srb->cmnd[0]) */
--      } /* if (us->flags & US_FL_MODE_XLATE) */
--
--      /* convert MODE_SELECT data here */
--      if ((us->flags & US_FL_MODE_XLATE) && (old_cmnd == MODE_SELECT))
--              usb_stor_scsiSense6to10(srb);
--
-       /* send the command to the transport layer */
-       usb_stor_invoke_transport(srb, us);
--      if (srb->result == SAM_STAT_GOOD) {
--
--              /* Fix the MODE_SENSE data if we translated the command */
--              if ((us->flags & US_FL_MODE_XLATE) && (old_cmnd == MODE_SENSE))
--                      usb_stor_scsiSense10to6(srb);
-+      if (srb->result == SAM_STAT_GOOD) {
-               /* Fix the INQUIRY data if necessary */
-               fix_inquiry_data(srb);
---- linux-2.6.0-test1/drivers/usb/storage/protocol.h   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/protocol.h  2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #ifndef _PROTOCOL_H_
- #define _PROTOCOL_H_
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "usb.h"
---- linux-2.6.0-test1/drivers/usb/storage/scsiglue.c   2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/storage/scsiglue.c  2003-07-19 17:03:50.000000000 -0700
-@@ -263,7 +263,6 @@ static int proc_info (struct Scsi_Host *
- #define DO_FLAG(a)    if (f & US_FL_##a)  pos += sprintf(pos, " " #a)
-               DO_FLAG(SINGLE_LUN);
--              DO_FLAG(MODE_XLATE);
-               DO_FLAG(SCM_MULT_TARG);
-               DO_FLAG(FIX_INQUIRY);
-               DO_FLAG(FIX_CAPACITY);
-@@ -346,499 +345,3 @@ unsigned char usb_stor_sense_invalidCDB[
-       [12]    = 0x24                      /* Invalid Field in CDB */
- };
--#define USB_STOR_SCSI_SENSE_HDRSZ 4
--#define USB_STOR_SCSI_SENSE_10_HDRSZ 8
--
--struct usb_stor_scsi_sense_hdr
--{
--  __u8* dataLength;
--  __u8* mediumType;
--  __u8* devSpecParms;
--  __u8* blkDescLength;
--};
--
--typedef struct usb_stor_scsi_sense_hdr Usb_Stor_Scsi_Sense_Hdr;
--
--union usb_stor_scsi_sense_hdr_u
--{
--  Usb_Stor_Scsi_Sense_Hdr hdr;
--  __u8* array[USB_STOR_SCSI_SENSE_HDRSZ];
--};
--
--typedef union usb_stor_scsi_sense_hdr_u Usb_Stor_Scsi_Sense_Hdr_u;
--
--struct usb_stor_scsi_sense_hdr_10
--{
--  __u8* dataLengthMSB;
--  __u8* dataLengthLSB;
--  __u8* mediumType;
--  __u8* devSpecParms;
--  __u8* reserved1;
--  __u8* reserved2;
--  __u8* blkDescLengthMSB;
--  __u8* blkDescLengthLSB;
--};
--
--typedef struct usb_stor_scsi_sense_hdr_10 Usb_Stor_Scsi_Sense_Hdr_10;
--
--union usb_stor_scsi_sense_hdr_10_u
--{
--  Usb_Stor_Scsi_Sense_Hdr_10 hdr;
--  __u8* array[USB_STOR_SCSI_SENSE_10_HDRSZ];
--};
--
--typedef union usb_stor_scsi_sense_hdr_10_u Usb_Stor_Scsi_Sense_Hdr_10_u;
--
--void usb_stor_scsiSenseParseBuffer( Scsi_Cmnd* , Usb_Stor_Scsi_Sense_Hdr_u*,
--                                  Usb_Stor_Scsi_Sense_Hdr_10_u*, int* );
--
--int usb_stor_scsiSense10to6( Scsi_Cmnd* the10 )
--{
--  __u8 *buffer=0;
--  int outputBufferSize = 0;
--  int length=0;
--  struct scatterlist *sg = 0;
--  int i=0, j=0, element=0;
--  Usb_Stor_Scsi_Sense_Hdr_u the6Locations;
--  Usb_Stor_Scsi_Sense_Hdr_10_u the10Locations;
--  int sb=0,si=0,db=0,di=0;
--  int sgLength=0;
--
--  US_DEBUGP("-- converting 10 byte sense data to 6 byte\n");
--  the10->cmnd[0] = the10->cmnd[0] & 0xBF;
--
--  /* Determine buffer locations */
--  usb_stor_scsiSenseParseBuffer( the10, &the6Locations, &the10Locations,
--                               &length );
--
--  /* Work out minimum buffer to output */
--  outputBufferSize = *the10Locations.hdr.dataLengthLSB;
--  outputBufferSize += USB_STOR_SCSI_SENSE_HDRSZ;
--
--  /* Check to see if we need to trucate the output */
--  if ( outputBufferSize > length )
--    {
--      printk( KERN_WARNING USB_STORAGE 
--            "Had to truncate MODE_SENSE_10 buffer into MODE_SENSE.\n" );
--      printk( KERN_WARNING USB_STORAGE
--            "outputBufferSize is %d and length is %d.\n",
--            outputBufferSize, length );
--    }
--  outputBufferSize = length;
--
--  /* Data length */
--  if ( *the10Locations.hdr.dataLengthMSB != 0 ) /* MSB must be zero */
--    {
--      printk( KERN_WARNING USB_STORAGE 
--            "Command will be truncated to fit in SENSE6 buffer.\n" );
--      *the6Locations.hdr.dataLength = 0xff;
--    }
--  else
--    {
--      *the6Locations.hdr.dataLength = *the10Locations.hdr.dataLengthLSB;
--    }
--
--  /* Medium type and DevSpecific parms */
--  *the6Locations.hdr.mediumType = *the10Locations.hdr.mediumType;
--  *the6Locations.hdr.devSpecParms = *the10Locations.hdr.devSpecParms;
--
--  /* Block descriptor length */
--  if ( *the10Locations.hdr.blkDescLengthMSB != 0 ) /* MSB must be zero */
--    {
--      printk( KERN_WARNING USB_STORAGE 
--            "Command will be truncated to fit in SENSE6 buffer.\n" );
--      *the6Locations.hdr.blkDescLength = 0xff;
--    }
--  else
--    {
--      *the6Locations.hdr.blkDescLength = *the10Locations.hdr.blkDescLengthLSB;
--    }
--
--  if ( the10->use_sg == 0 )
--    {
--      buffer = the10->request_buffer;
--      /* Copy the rest of the data */
--      memmove( &(buffer[USB_STOR_SCSI_SENSE_HDRSZ]),
--             &(buffer[USB_STOR_SCSI_SENSE_10_HDRSZ]),
--             outputBufferSize - USB_STOR_SCSI_SENSE_HDRSZ );
--      /* initialise last bytes left in buffer due to smaller header */
--      memset( &(buffer[outputBufferSize
--          -(USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ)]),
--            0,
--            USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ );
--    }
--  else
--    {
--      sg = (struct scatterlist *) the10->request_buffer;
--      /* scan through this scatterlist and figure out starting positions */
--      for ( i=0; i < the10->use_sg; i++)
--      {
--        sgLength = sg[i].length;
--        for ( j=0; j<sgLength; j++ )
--          {
--            /* get to end of header */
--            if ( element == USB_STOR_SCSI_SENSE_HDRSZ )
--              {
--                db=i;
--                di=j;
--              }
--            if ( element == USB_STOR_SCSI_SENSE_10_HDRSZ )
--              {
--                sb=i;
--                si=j;
--                /* we've found both sets now, exit loops */
--                j=sgLength;
--                i=the10->use_sg;
--              }
--            element++;
--          }
--      }
--
--      /* Now we know where to start the copy from */
--      element = USB_STOR_SCSI_SENSE_HDRSZ;
--      while ( element < outputBufferSize
--            -(USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ) )
--      {
--        /* check limits */
--        if ( sb >= the10->use_sg ||
--             si >= sg[sb].length ||
--             db >= the10->use_sg ||
--             di >= sg[db].length )
--          {
--            printk( KERN_ERR USB_STORAGE
--                    "Buffer overrun averted, this shouldn't happen!\n" );
--            break;
--          }
--
--        /* copy one byte */
--        {
--              char *src = sg_address(sg[sb]) + si;
--              char *dst = sg_address(sg[db]) + di;
--
--               *dst = *src;
--        }
--
--        /* get next destination */
--        if ( sg[db].length-1 == di )
--          {
--            db++;
--            di=0;
--          }
--        else
--          {
--            di++;
--          }
--
--        /* get next source */
--        if ( sg[sb].length-1 == si )
--          {
--            sb++;
--            si=0;
--          }
--        else
--          {
--            si++;
--          }
--
--        element++;
--      }
--      /* zero the remaining bytes */
--      while ( element < outputBufferSize )
--      {
--        /* check limits */
--        if ( db >= the10->use_sg ||
--             di >= sg[db].length )
--          {
--            printk( KERN_ERR USB_STORAGE
--                    "Buffer overrun averted, this shouldn't happen!\n" );
--            break;
--          }
--
--        *(char*)(sg_address(sg[db])) = 0;
--
--        /* get next destination */
--        if ( sg[db].length-1 == di )
--          {
--            db++;
--            di=0;
--          }
--        else
--          {
--            di++;
--          }
--        element++;
--      }
--    }
--
--  /* All done any everything was fine */
--  return 0;
--}
--
--int usb_stor_scsiSense6to10( Scsi_Cmnd* the6 )
--{
--  /* will be used to store part of buffer */  
--  __u8 tempBuffer[USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ],
--    *buffer=0;
--  int outputBufferSize = 0;
--  int length=0;
--  struct scatterlist *sg = 0;
--  int i=0, j=0, element=0;
--  Usb_Stor_Scsi_Sense_Hdr_u the6Locations;
--  Usb_Stor_Scsi_Sense_Hdr_10_u the10Locations;
--  int sb=0,si=0,db=0,di=0;
--  int lsb=0,lsi=0,ldb=0,ldi=0;
--
--  US_DEBUGP("-- converting 6 byte sense data to 10 byte\n");
--  the6->cmnd[0] = the6->cmnd[0] | 0x40;
--
--  /* Determine buffer locations */
--  usb_stor_scsiSenseParseBuffer( the6, &the6Locations, &the10Locations,
--                               &length );
--
--  /* Work out minimum buffer to output */
--  outputBufferSize = *the6Locations.hdr.dataLength;
--  outputBufferSize += USB_STOR_SCSI_SENSE_10_HDRSZ;
--
--  /* Check to see if we need to trucate the output */
--  if ( outputBufferSize > length )
--    {
--      printk( KERN_WARNING USB_STORAGE 
--            "Had to truncate MODE_SENSE into MODE_SENSE_10 buffer.\n" );
--      printk( KERN_WARNING USB_STORAGE
--            "outputBufferSize is %d and length is %d.\n",
--            outputBufferSize, length );
--    }
--  outputBufferSize = length;
--
--  /* Block descriptor length - save these before overwriting */
--  tempBuffer[2] = *the10Locations.hdr.blkDescLengthMSB;
--  tempBuffer[3] = *the10Locations.hdr.blkDescLengthLSB;
--  *the10Locations.hdr.blkDescLengthLSB = *the6Locations.hdr.blkDescLength;
--  *the10Locations.hdr.blkDescLengthMSB = 0;
--
--  /* reserved - save these before overwriting */
--  tempBuffer[0] = *the10Locations.hdr.reserved1;
--  tempBuffer[1] = *the10Locations.hdr.reserved2;
--  *the10Locations.hdr.reserved1 = *the10Locations.hdr.reserved2 = 0;
--
--  /* Medium type and DevSpecific parms */
--  *the10Locations.hdr.devSpecParms = *the6Locations.hdr.devSpecParms;
--  *the10Locations.hdr.mediumType = *the6Locations.hdr.mediumType;
--
--  /* Data length */
--  *the10Locations.hdr.dataLengthLSB = *the6Locations.hdr.dataLength;
--  *the10Locations.hdr.dataLengthMSB = 0;
--
--  if ( !the6->use_sg )
--    {
--      buffer = the6->request_buffer;
--      /* Copy the rest of the data */
--      memmove( &(buffer[USB_STOR_SCSI_SENSE_10_HDRSZ]),
--            &(buffer[USB_STOR_SCSI_SENSE_HDRSZ]),
--            outputBufferSize-USB_STOR_SCSI_SENSE_10_HDRSZ );
--      /* Put the first four bytes (after header) in place */
--      memcpy( &(buffer[USB_STOR_SCSI_SENSE_10_HDRSZ]),
--            tempBuffer,
--            USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ );
--    }
--  else
--    {
--      sg = (struct scatterlist *) the6->request_buffer;
--      /* scan through this scatterlist and figure out ending positions */
--      for ( i=0; i < the6->use_sg; i++)
--      {
--        for ( j=0; j<sg[i].length; j++ )
--          {
--            /* get to end of header */
--            if ( element == USB_STOR_SCSI_SENSE_HDRSZ )
--              {
--                ldb=i;
--                ldi=j;
--              }
--            if ( element == USB_STOR_SCSI_SENSE_10_HDRSZ )
--              {
--                lsb=i;
--                lsi=j;
--                /* we've found both sets now, exit loops */
--                j=sg[i].length;
--                i=the6->use_sg;
--                break;
--              }
--            element++;
--          }
--      }
--      /* scan through this scatterlist and figure out starting positions */
--      element = length-1;
--      /* destination is the last element */
--      db=the6->use_sg-1;
--      di=sg[db].length-1;
--      for ( i=the6->use_sg-1; i >= 0; i--)
--      {
--        for ( j=sg[i].length-1; j>=0; j-- )
--          {
--            /* get to end of header and find source for copy */
--            if ( element == length - 1
--                 - (USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ) )
--              {
--                sb=i;
--                si=j;
--                /* we've found both sets now, exit loops */
--                j=-1;
--                i=-1;
--              }
--            element--;
--          }
--      }
--      /* Now we know where to start the copy from */
--      element = length-1
--      - (USB_STOR_SCSI_SENSE_10_HDRSZ-USB_STOR_SCSI_SENSE_HDRSZ);
--      while ( element >= USB_STOR_SCSI_SENSE_10_HDRSZ )
--      {
--        /* check limits */
--        if ( ( sb <= lsb && si < lsi ) ||
--             ( db <= ldb && di < ldi ) )
--          {
--            printk( KERN_ERR USB_STORAGE
--                    "Buffer overrun averted, this shouldn't happen!\n" );
--            break;
--          }
--
--        /* copy one byte */
--        {
--              char *src = sg_address(sg[sb]) + si;
--              char *dst = sg_address(sg[db]) + di;
--
--               *dst = *src;
--        }
--
--        /* get next destination */
--        if ( di == 0 )
--          {
--            db--;
--            di=sg[db].length-1;
--          }
--        else
--          {
--            di--;
--          }
--
--        /* get next source */
--        if ( si == 0 )
--          {
--            sb--;
--            si=sg[sb].length-1;
--          }
--        else
--          {
--            si--;
--          }
--
--        element--;
--      }
--      /* copy the remaining four bytes */
--      while ( element >= USB_STOR_SCSI_SENSE_HDRSZ )
--      {
--        /* check limits */
--        if ( db <= ldb && di < ldi )
--          {
--            printk( KERN_ERR USB_STORAGE
--                    "Buffer overrun averted, this shouldn't happen!\n" );
--            break;
--          }
--
--       {
--               char *dst = sg_address(sg[db]) + di;
--
--               *dst = tempBuffer[element-USB_STOR_SCSI_SENSE_HDRSZ];
--       }
--
--
--        /* get next destination */
--        if ( di == 0 )
--          {
--            db--;
--            di=sg[db].length-1;
--          }
--        else
--          {
--            di--;
--          }
--        element--;
--      }
--    }
--
--  /* All done and everything was fine */
--  return 0;
--}
--
--void usb_stor_scsiSenseParseBuffer( Scsi_Cmnd* srb, Usb_Stor_Scsi_Sense_Hdr_u* the6,
--                             Usb_Stor_Scsi_Sense_Hdr_10_u* the10,
--                             int* length_p )
--
--{
--  int i = 0, j=0, element=0;
--  struct scatterlist *sg = 0;
--  int length = 0;
--  __u8* buffer=0;
--
--  /* are we scatter-gathering? */
--  if ( srb->use_sg != 0 )
--    {
--      /* loop over all the scatter gather structures and 
--       * get pointer to the data members in the headers
--       * (also work out the length while we're here)
--       */
--      sg = (struct scatterlist *) srb->request_buffer;
--      for (i = 0; i < srb->use_sg; i++)
--      {
--        length += sg[i].length;
--        /* We only do the inner loop for the headers */
--        if ( element < USB_STOR_SCSI_SENSE_10_HDRSZ )
--          {
--            /* scan through this scatterlist */
--            for ( j=0; j<sg[i].length; j++ )
--              {
--                if ( element < USB_STOR_SCSI_SENSE_HDRSZ )
--                  {
--                    /* fill in the pointers for both header types */
--                    the6->array[element] = sg_address(sg[i]) + j;
--                    the10->array[element] = sg_address(sg[i]) + j;
--
--                  }
--                else if ( element < USB_STOR_SCSI_SENSE_10_HDRSZ )
--                  {
--                    /* only the longer headers still cares now */
--                    the10->array[element] = sg_address(sg[i]) + j;
--                     
--                  }
--                /* increase element counter */
--                element++;
--              }
--          }
--      }
--    }
--  else
--    {
--      length = srb->request_bufflen;
--      buffer = srb->request_buffer;
--      if ( length < USB_STOR_SCSI_SENSE_10_HDRSZ )
--      printk( KERN_ERR USB_STORAGE
--              "Buffer length smaller than header!!" );
--      for( i=0; i<USB_STOR_SCSI_SENSE_10_HDRSZ; i++ )
--      {
--        if ( i < USB_STOR_SCSI_SENSE_HDRSZ )
--          {
--            the6->array[i] = &(buffer[i]);
--            the10->array[i] = &(buffer[i]);
--          }
--        else
--          {
--            the10->array[i] = &(buffer[i]);
--          }
--      }
--    }
--
--  /* Set value of length passed in */
--  *length_p = length;
--}
--
---- linux-2.6.0-test1/drivers/usb/storage/scsiglue.h   2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/scsiglue.h  2003-07-19 17:03:50.000000000 -0700
-@@ -41,7 +41,7 @@
- #ifndef _SCSIGLUE_H_
- #define _SCSIGLUE_H_
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "scsi.h"
- #include "hosts.h"
---- linux-2.6.0-test1/drivers/usb/storage/sddr09.c     2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/usb/storage/sddr09.c    2003-07-19 17:03:50.000000000 -0700
-@@ -261,12 +261,13 @@ sddr09_send_scsi_command(struct us_data 
-  */
- static int
- sddr09_test_unit_ready(struct us_data *us) {
--      unsigned char command[6] = {
--              0, LUNBITS, 0, 0, 0, 0
--      };
-+      unsigned char *command = us->iobuf;
-       int result;
--      result = sddr09_send_scsi_command(us, command, sizeof(command));
-+      memset(command, 0, 6);
-+      command[1] = LUNBITS;
-+
-+      result = sddr09_send_scsi_command(us, command, 6);
-       US_DEBUGP("sddr09_test_unit_ready returns %d\n", result);
-@@ -281,12 +282,15 @@ sddr09_test_unit_ready(struct us_data *u
-  */
- static int
- sddr09_request_sense(struct us_data *us, unsigned char *sensebuf, int buflen) {
--      unsigned char command[12] = {
--              0x03, LUNBITS, 0, 0, buflen, 0, 0, 0, 0, 0, 0, 0
--      };
-+      unsigned char *command = us->iobuf;
-       int result;
--      result = sddr09_send_scsi_command(us, command, sizeof(command));
-+      memset(command, 0, 12);
-+      command[0] = 0x03;
-+      command[1] = LUNBITS;
-+      command[4] = buflen;
-+
-+      result = sddr09_send_scsi_command(us, command, 12);
-       if (result != USB_STOR_TRANSPORT_GOOD) {
-               US_DEBUGP("request sense failed\n");
-               return result;
-@@ -331,20 +335,23 @@ sddr09_readX(struct us_data *us, int x, 
-            int nr_of_pages, int bulklen, unsigned char *buf,
-            int use_sg) {
--      unsigned char command[12] = {
--              0xe8, LUNBITS | x, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
--      };
-+      unsigned char *command = us->iobuf;
-       int result;
-+      command[0] = 0xE8;
-+      command[1] = LUNBITS | x;
-       command[2] = MSB_of(fromaddress>>16);
-       command[3] = LSB_of(fromaddress>>16); 
-       command[4] = MSB_of(fromaddress & 0xFFFF);
-       command[5] = LSB_of(fromaddress & 0xFFFF); 
--
-+      command[6] = 0;
-+      command[7] = 0;
-+      command[8] = 0;
-+      command[9] = 0;
-       command[10] = MSB_of(nr_of_pages);
-       command[11] = LSB_of(nr_of_pages);
--      result = sddr09_send_scsi_command(us, command, sizeof(command));
-+      result = sddr09_send_scsi_command(us, command, 12);
-       if (result != USB_STOR_TRANSPORT_GOOD) {
-               US_DEBUGP("Result for send_control in sddr09_read2%d %d\n",
-@@ -458,17 +465,18 @@ sddr09_read23(struct us_data *us, unsign
-  */
- static int
- sddr09_erase(struct us_data *us, unsigned long Eaddress) {
--      unsigned char command[12] = {
--              0xea, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
--      };
-+      unsigned char *command = us->iobuf;
-       int result;
-+      memset(command, 0, 12);
-+      command[0] = 0xEA;
-+      command[1] = LUNBITS;
-       command[6] = MSB_of(Eaddress>>16);
-       command[7] = LSB_of(Eaddress>>16);
-       command[8] = MSB_of(Eaddress & 0xFFFF);
-       command[9] = LSB_of(Eaddress & 0xFFFF);
--      result = sddr09_send_scsi_command(us, command, sizeof(command));
-+      result = sddr09_send_scsi_command(us, command, 12);
-       if (result != USB_STOR_TRANSPORT_GOOD)
-               US_DEBUGP("Result for send_control in sddr09_erase %d\n",
-@@ -493,11 +501,12 @@ sddr09_writeX(struct us_data *us,
-             unsigned long Waddress, unsigned long Eaddress,
-             int nr_of_pages, int bulklen, unsigned char *buf, int use_sg) {
--      unsigned char command[12] = {
--              0xe9, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
--      };
-+      unsigned char *command = us->iobuf;
-       int result;
-+      command[0] = 0xE9;
-+      command[1] = LUNBITS;
-+
-       command[2] = MSB_of(Waddress>>16);
-       command[3] = LSB_of(Waddress>>16);
-       command[4] = MSB_of(Waddress & 0xFFFF);
-@@ -511,7 +520,7 @@ sddr09_writeX(struct us_data *us,
-       command[10] = MSB_of(nr_of_pages);
-       command[11] = LSB_of(nr_of_pages);
--      result = sddr09_send_scsi_command(us, command, sizeof(command));
-+      result = sddr09_send_scsi_command(us, command, 12);
-       if (result != USB_STOR_TRANSPORT_GOOD) {
-               US_DEBUGP("Result for send_control in sddr09_writeX %d\n",
-@@ -554,15 +563,15 @@ sddr09_write_inplace(struct us_data *us,
-  */
- static int
- sddr09_read_sg_test_only(struct us_data *us) {
--      unsigned char command[15] = {
--              0xe7, LUNBITS, 0
--      };
-+      unsigned char *command = us->iobuf;
-       int result, bulklen, nsg, ct;
-       unsigned char *buf;
-       unsigned long address;
-       nsg = bulklen = 0;
--
-+      command[0] = 0xE7;
-+      command[1] = LUNBITS;
-+      command[2] = 0;
-       address = 040000; ct = 1;
-       nsg++;
-       bulklen += (ct << 9);
-@@ -628,20 +637,22 @@ sddr09_read_sg_test_only(struct us_data 
- static int
- sddr09_read_status(struct us_data *us, unsigned char *status) {
--      unsigned char command[12] = {
--              0xec, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
--      };
--      unsigned char data[64];
-+      unsigned char *command = us->iobuf;
-+      unsigned char *data = us->iobuf;
-       int result;
-       US_DEBUGP("Reading status...\n");
--      result = sddr09_send_scsi_command(us, command, sizeof(command));
-+      memset(command, 0, 12);
-+      command[0] = 0xEC;
-+      command[1] = LUNBITS;
-+
-+      result = sddr09_send_scsi_command(us, command, 12);
-       if (result != USB_STOR_TRANSPORT_GOOD)
-               return result;
-       result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
--                                     data, sizeof(data), NULL);
-+                                     data, 64, NULL);
-       *status = data[0];
-       return (result == USB_STOR_XFER_GOOD ?
-                       USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
-@@ -953,13 +964,15 @@ sddr09_read_control(struct us_data *us,
-  */
- static int
- sddr09_read_deviceID(struct us_data *us, unsigned char *deviceID) {
--      unsigned char command[12] = {
--              0xed, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
--      };
--      unsigned char content[64];
-+      unsigned char *command = us->iobuf;
-+      unsigned char *content = us->iobuf;
-       int result, i;
--      result = sddr09_send_scsi_command(us, command, sizeof(command));
-+      memset(command, 0, 12);
-+      command[0] = 0xED;
-+      command[1] = LUNBITS;
-+
-+      result = sddr09_send_scsi_command(us, command, 12);
-       if (result != USB_STOR_TRANSPORT_GOOD)
-               return result;
-@@ -1006,11 +1019,13 @@ sddr09_get_wp(struct us_data *us, struct
- static int
- sddr09_reset(struct us_data *us) {
--      unsigned char command[12] = {
--              0xeb, LUNBITS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
--      };
-+      unsigned char *command = us->iobuf;
-+
-+      memset(command, 0, 12);
-+      command[0] = 0xEB;
-+      command[1] = LUNBITS;
--      return sddr09_send_scsi_command(us, command, sizeof(command));
-+      return sddr09_send_scsi_command(us, command, 12);
- }
- #endif
-@@ -1313,7 +1328,7 @@ sddr09_init_card_info(struct us_data *us
- int
- sddr09_init(struct us_data *us) {
-       int result;
--      unsigned char data[18];
-+      unsigned char *data = us->iobuf;
-       result = sddr09_send_command(us, 0x01, USB_DIR_IN, data, 2);
-       if (result != USB_STOR_TRANSPORT_GOOD) {
-@@ -1333,10 +1348,10 @@ sddr09_init(struct us_data *us) {
-       US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
-       // get 07 00
--      result = sddr09_request_sense(us, data, sizeof(data));
-+      result = sddr09_request_sense(us, data, 18);
-       if (result == USB_STOR_TRANSPORT_GOOD && data[2] != 0) {
-               int j;
--              for (j=0; j<sizeof(data); j++)
-+              for (j=0; j<18; j++)
-                       printk(" %02X", data[j]);
-               printk("\n");
-               // get 70 00 00 00 00 00 00 * 00 00 00 00 00 00
---- linux-2.6.0-test1/drivers/usb/storage/sddr55.c     2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/usb/storage/sddr55.c    2003-07-19 17:03:50.000000000 -0700
-@@ -91,13 +91,14 @@ sddr55_bulk_transport(struct us_data *us
- static int sddr55_status(struct us_data *us)
- {
-       int result;
--      unsigned char command[8] = {
--              0, 0, 0, 0, 0, 0xb0, 0, 0x80
--      };
--      unsigned char status[8];
-+      unsigned char *command = us->iobuf;
-+      unsigned char *status = us->iobuf;
-       struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
-       /* send command */
-+      memset(command, 0, 8);
-+      command[5] = 0xB0;
-+      command[7] = 0x80;
-       result = sddr55_bulk_transport(us,
-               SCSI_DATA_WRITE, command, 8);
-@@ -158,10 +159,8 @@ static int sddr55_read_data(struct us_da
-               int use_sg) {
-       int result = USB_STOR_TRANSPORT_GOOD;
--      unsigned char command[8] = {
--              0, 0, 0, 0, 0, 0xb0, 0, 0x85
--      };
--      unsigned char status[8];
-+      unsigned char *command = us->iobuf;
-+      unsigned char *status = us->iobuf;
-       struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
-       unsigned int pba;
-@@ -205,11 +204,15 @@ static int sddr55_read_data(struct us_da
-                       address = (pba << info->blockshift) + page;
-+                      command[0] = 0;
-                       command[1] = LSB_of(address>>16);
-                       command[2] = LSB_of(address>>8);
-                       command[3] = LSB_of(address);
-+                      command[4] = 0;
-+                      command[5] = 0xB0;
-                       command[6] = LSB_of(pages << (1 - info->smallpageshift));
-+                      command[7] = 0x85;
-                       /* send command */
-                       result = sddr55_bulk_transport(us,
-@@ -274,10 +277,8 @@ static int sddr55_write_data(struct us_d
-               int use_sg) {
-       int result = USB_STOR_TRANSPORT_GOOD;
--      unsigned char command[8] = {
--              0, 0, 0, 0, 0, 0xb0, 0, 0x86
--      };
--      unsigned char status[8];
-+      unsigned char *command = us->iobuf;
-+      unsigned char *status = us->iobuf;
-       struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
-       unsigned int pba;
-@@ -380,6 +381,8 @@ static int sddr55_write_data(struct us_d
-               command[6] = MSB_of(lba % 1000);
-               command[4] |= LSB_of(pages >> info->smallpageshift);
-+              command[5] = 0xB0;
-+              command[7] = 0x86;
-               /* send command */
-               result = sddr55_bulk_transport(us,
-@@ -473,11 +476,12 @@ static int sddr55_read_deviceID(struct u
-               unsigned char *deviceID) {
-       int result;
--      unsigned char command[8] = {
--              0, 0, 0, 0, 0, 0xb0, 0, 0x84
--      };
--      unsigned char content[64];
-+      unsigned char *command = us->iobuf;
-+      unsigned char *content = us->iobuf;
-+      memset(command, 0, 8);
-+      command[5] = 0xB0;
-+      command[7] = 0x84;
-       result = sddr55_bulk_transport(us, SCSI_DATA_WRITE, command, 8);
-       US_DEBUGP("Result of send_control for device ID is %d\n",
-@@ -598,7 +602,7 @@ static int sddr55_read_map(struct us_dat
-       struct sddr55_card_info *info = (struct sddr55_card_info *)(us->extra);
-       int numblocks;
-       unsigned char *buffer;
--      unsigned char command[8] = { 0, 0, 0, 0, 0, 0xb0, 0, 0x8a};     
-+      unsigned char *command = us->iobuf;
-       int i;
-       unsigned short lba;
-       unsigned short max_lba;
-@@ -614,7 +618,10 @@ static int sddr55_read_map(struct us_dat
-       if (!buffer)
-               return -1;
-+      memset(command, 0, 8);
-+      command[5] = 0xB0;
-       command[6] = numblocks * 2 / 256;
-+      command[7] = 0x8A;
-       result = sddr55_bulk_transport(us, SCSI_DATA_WRITE, command, 8);
---- linux-2.6.0-test1/drivers/usb/storage/transport.h  2003-06-22 12:04:44.000000000 -0700
-+++ 25/drivers/usb/storage/transport.h 2003-07-19 17:03:50.000000000 -0700
-@@ -42,7 +42,7 @@
- #define _TRANSPORT_H_
- #include <linux/config.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include "usb.h"
- #include "scsi.h"
---- linux-2.6.0-test1/drivers/usb/storage/unusual_devs.h       2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/storage/unusual_devs.h      2003-07-19 17:03:50.000000000 -0700
-@@ -119,7 +119,7 @@ UNUSUAL_DEV(  0x04b8, 0x0602, 0x0110, 0x
- UNUSUAL_DEV(  0x04cb, 0x0100, 0x0000, 0x2210,
-               "Fujifilm",
-               "FinePix 1400Zoom",
--              US_SC_8070, US_PR_CBI, NULL, US_FL_FIX_INQUIRY),
-+              US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY),
- /* Reported by Peter Wächtler <pwaechtler@loewe-komp.de>
-  * The device needs the flags only.
-@@ -236,7 +236,7 @@ UNUSUAL_DEV(  0x0525, 0xa140, 0x0100, 0x
- UNUSUAL_DEV(  0x054c, 0x0010, 0x0106, 0x0450, 
-               "Sony",
-               "DSC-S30/S70/S75/505V/F505/F707/F717/P8", 
--              US_SC_SCSI, US_PR_CB, NULL,
-+              US_SC_SCSI, US_PR_DEVICE, NULL,
-               US_FL_SINGLE_LUN | US_FL_MODE_XLATE ),
- /* Reported by wim@geeks.nl */
-@@ -555,7 +555,7 @@ UNUSUAL_DEV( 0x0839, 0x000a, 0x0001, 0x0
- UNUSUAL_DEV(  0x08ca, 0x2011, 0x0000, 0x9999,
-               "AIPTEK",
-               "PocketCAM 3Mega",
--              US_SC_SCSI, US_PR_BULK, NULL,
-+              US_SC_DEVICE, US_PR_DEVICE, NULL,
-               US_FL_MODE_XLATE ),
- /* aeb */
---- linux-2.6.0-test1/drivers/usb/storage/usb.c        2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/storage/usb.c       2003-07-19 17:03:50.000000000 -0700
-@@ -958,6 +958,8 @@ static int storage_probe(struct usb_inte
-               goto BadDevice;
-       }
-+      scsi_scan_host(us->host);
-+
-       printk(KERN_DEBUG 
-              "WARNING: USB Mass Storage data integrity not assured\n");
-       printk(KERN_DEBUG 
---- linux-2.6.0-test1/drivers/usb/storage/usb.h        2003-07-02 14:53:16.000000000 -0700
-+++ 25/drivers/usb/storage/usb.h       2003-07-19 17:03:50.000000000 -0700
-@@ -45,7 +45,7 @@
- #define _USB_H_
- #include <linux/usb.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/smp_lock.h>
- #include <linux/completion.h>
- #include <linux/version.h>
-@@ -69,11 +69,10 @@ struct us_unusual_dev {
- /* Flag definitions: these entries are static */
- #define US_FL_SINGLE_LUN      0x00000001 /* allow access to only LUN 0            */
--#define US_FL_MODE_XLATE      0x00000002 /* translate _6 to _10 commands for
--                                                  Win/MacOS compatibility */
-+#define US_FL_MODE_XLATE      0          /* [no longer used]                */
- #define US_FL_IGNORE_SER      0                /* [no longer used]                */
- #define US_FL_SCM_MULT_TARG   0x00000020 /* supports multiple targets     */
--#define US_FL_FIX_INQUIRY     0x00000040 /* INQUIRY response needs fixing   */
-+#define US_FL_FIX_INQUIRY     0x00000040 /* INQUIRY response needs faking   */
- #define US_FL_FIX_CAPACITY    0x00000080 /* READ CAPACITY response too big  */
- /* Dynamic flag definitions: used in set_bit() etc. */
---- linux-2.6.0-test1/drivers/usb/usb-skeleton.c       2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/usb/usb-skeleton.c      2003-07-19 17:03:50.000000000 -0700
-@@ -507,7 +507,7 @@ static int skel_probe(struct usb_interfa
-       struct usb_endpoint_descriptor *endpoint;
-       size_t buffer_size;
-       int i;
--      int retval;
-+      int retval = -ENOMEM;
-       /* See if the device offered us matches what we can accept */
-       if ((udev->descriptor.idVendor != USB_SKEL_VENDOR_ID) ||
-@@ -515,18 +515,11 @@ static int skel_probe(struct usb_interfa
-               return -ENODEV;
-       }
--      retval = usb_register_dev (interface, &skel_class);
--      if (retval) {
--              /* something prevented us from registering this driver */
--              err ("Not able to get a minor for this device.");
--              goto exit;
--      }
--
-       /* allocate memory for our device state and initialize it */
-       dev = kmalloc (sizeof(struct usb_skel), GFP_KERNEL);
-       if (dev == NULL) {
-               err ("Out of memory");
--              goto exit_minor;
-+              goto error;
-       }
-       memset (dev, 0x00, sizeof (*dev));
-@@ -603,24 +596,24 @@ static int skel_probe(struct usb_interfa
-       /* allow device read, write and ioctl */
-       dev->present = 1;
-+      /* we can register the device now, as it is ready */
-+      usb_set_intfdata (interface, dev);
-+      retval = usb_register_dev (interface, &skel_class);
-+      if (retval) {
-+              /* something prevented us from registering this driver */
-+              err ("Not able to get a minor for this device.");
-+              usb_set_intfdata (interface, NULL);
-+              goto error;
-+      }
-+
-+
-       /* let the user know what node this device is now attached to */
-       info ("USB Skeleton device now attached to USBSkel-%d", dev->minor);
--
--      goto exit;
-+      return 0;
- error:
-       skel_delete (dev);
--      dev = NULL;
--
--exit_minor:
--      usb_deregister_dev (interface, &skel_class);
--
--exit:
--      if (dev) {
--              usb_set_intfdata (interface, dev);
--              return 0;
--      }
--      return -ENODEV;
-+      return retval;
- }
---- linux-2.6.0-test1/drivers/video/cfbimgblt.c        2003-06-26 22:07:25.000000000 -0700
-+++ 25/drivers/video/cfbimgblt.c       2003-07-19 17:04:55.000000000 -0700
-@@ -325,7 +325,7 @@ void cfb_imageblit(struct fb_info *p, co
-               else 
-                       slow_imageblit(image, p, dst1, fgcolor, bgcolor,
-                                       start_index, pitch_index);
--      } else if (image->depth == bpp) 
-+      } else if (image->depth <= bpp) 
-               color_imageblit(image, p, dst1, start_index, pitch_index);
- }
---- linux-2.6.0-test1/drivers/video/chipsfb.c  2003-06-14 12:18:09.000000000 -0700
-+++ 25/drivers/video/chipsfb.c 2003-07-19 17:04:55.000000000 -0700
-@@ -85,7 +85,7 @@ static struct pmu_sleep_notifier chips_s
- /*
-  * Exported functions
-  */
--int chips_init(void);
-+int chipsfb_init(void);
- static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *);
- static int chipsfb_check_var(struct fb_var_screeninfo *var,
-@@ -460,7 +460,7 @@ static struct pci_driver chipsfb_driver 
-       .remove =       __devexit_p(chipsfb_remove),
- };
--int __init chips_init(void)
-+int __init chipsfb_init(void)
- {
-       return pci_module_init(&chipsfb_driver);
- }
---- linux-2.6.0-test1/drivers/video/console/fbcon.c    2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/video/console/fbcon.c   2003-07-19 17:04:55.000000000 -0700
-@@ -195,8 +195,7 @@ static void fb_flashcursor(void *private
- {
-       struct fb_info *info = (struct fb_info *) private;
--      /* Test to see if the cursor is erased but still on */
--      if (!info || (info->cursor.rop == ROP_COPY))
-+      if (!info)
-               return;
-       info->cursor.enable ^= 1;
-       info->fbops->fb_cursor(info, &info->cursor);
-@@ -226,8 +225,7 @@ static void cursor_timer_handler(unsigne
-       struct fb_info *info = (struct fb_info *) dev_addr;
-       
-       schedule_work(&info->queue);    
--      cursor_timer.expires = jiffies + HZ / 5;
--      add_timer(&cursor_timer);
-+      mod_timer(&cursor_timer, jiffies + HZ/5);
- }
- int __init fb_console_setup(char *this_opt)
-@@ -308,97 +306,6 @@ int set_con2fb_map(int unit, int newidx)
- }
- /*
-- * drawing helpers
-- */
--static void putcs_unaligned(struct vc_data *vc, struct fb_info *info,
--                          struct fb_image *image, int count,
--                          const unsigned short *s)
--{
--      unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
--      unsigned int width = (vc->vc_font.width + 7) >> 3;
--      unsigned int cellsize = vc->vc_font.height * width;
--      unsigned int maxcnt = info->pixmap.size/cellsize;
--      unsigned int shift_low = 0, mod = vc->vc_font.width % 8;
--      unsigned int shift_high = 8, size, pitch, cnt, k;
--      unsigned int buf_align = info->pixmap.buf_align - 1;
--      unsigned int scan_align = info->pixmap.scan_align - 1;
--      unsigned int idx = vc->vc_font.width >> 3;
--      u8 mask, *src, *dst, *dst0;
--
--      while (count) {
--              if (count > maxcnt)
--                      cnt = k = maxcnt;
--              else
--                      cnt = k = count;
--
--              image->width = vc->vc_font.width * cnt;
--              pitch = ((image->width + 7) >> 3) + scan_align;
--              pitch &= ~scan_align;
--              size = pitch * vc->vc_font.height + buf_align;
--              size &= ~buf_align;
--              dst0 = info->pixmap.addr + fb_get_buffer_offset(info, size);
--              image->data = dst0;
--              while (k--) {
--                      src = vc->vc_font.data + (scr_readw(s++) & charmask)*
--                      cellsize;
--                      dst = dst0;
--                      mask = (u8) (0xfff << shift_high);
--                      move_buf_unaligned(info, dst, src, pitch, image->height,
--                                      mask, shift_high, shift_low, mod, idx);
--                      shift_low += mod;
--                      dst0 += (shift_low >= 8) ? width : width - 1;
--                      shift_low &= 7;
--                      shift_high = 8 - shift_low;
--              }
--              info->fbops->fb_imageblit(info, image);
--              image->dx += cnt * vc->vc_font.width;
--              count -= cnt;
--              atomic_dec(&info->pixmap.count);
--              smp_mb__after_atomic_dec();
--      }
--}
--
--static void putcs_aligned(struct vc_data *vc, struct fb_info *info,
--                        struct fb_image *image, int count,
--                        const unsigned short *s)
--{
--      unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
--      unsigned int width = vc->vc_font.width >> 3;
--      unsigned int cellsize = vc->vc_font.height * width;
--      unsigned int maxcnt = info->pixmap.size/cellsize;
--      unsigned int scan_align = info->pixmap.scan_align - 1;
--      unsigned int buf_align = info->pixmap.buf_align - 1;
--      unsigned int pitch, cnt, size, k;
--      u8 *src, *dst, *dst0;
--
--      while (count) {
--              if (count > maxcnt)
--                      cnt = k = maxcnt;
--              else
--                      cnt = k = count;
--              
--              pitch = width * cnt + scan_align;
--              pitch &= ~scan_align;
--              size = pitch * vc->vc_font.height + buf_align;
--              size &= ~buf_align;
--              image->width = vc->vc_font.width * cnt;
--              dst0 = info->pixmap.addr + fb_get_buffer_offset(info, size);
--              image->data = dst0;
--              while (k--) {
--                      src = vc->vc_font.data + (scr_readw(s++)&charmask)*cellsize;
--                      dst = dst0;
--                      move_buf_aligned(info, dst, src, pitch, width, image->height);
--                      dst0 += width;
--              }
--              info->fbops->fb_imageblit(info, image);
--              image->dx += cnt * vc->vc_font.width;
--              count -= cnt;
--              atomic_dec(&info->pixmap.count);
--              smp_mb__after_atomic_dec();
--      }
--}
--
--/*
-  * Accelerated handlers.
-  */
- void accel_bmove(struct vc_data *vc, struct fb_info *info, int sy, 
-@@ -432,48 +339,21 @@ void accel_clear(struct vc_data *vc, str
-       info->fbops->fb_fillrect(info, &region);
- }     
--static void accel_putc(struct vc_data *vc, struct fb_info *info,
--                      int c, int ypos, int xpos)
-+void accel_putcs(struct vc_data *vc, struct fb_info *info,
-+                      const unsigned short *s, int count, int yy, int xx)
- {
-       unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
-       unsigned int width = (vc->vc_font.width + 7) >> 3;
-+      unsigned int cellsize = vc->vc_font.height * width;
-+      unsigned int maxcnt = info->pixmap.size/cellsize;
-       unsigned int scan_align = info->pixmap.scan_align - 1;
-       unsigned int buf_align = info->pixmap.buf_align - 1;
-+      unsigned int shift_low = 0, mod = vc->vc_font.width % 8;
-+      unsigned int shift_high = 8, pitch, cnt, size, k;
-       int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
-       int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
--      unsigned int size, pitch;
--      struct fb_image image;
--      u8 *src, *dst;
--
--      image.dx = xpos * vc->vc_font.width;
--      image.dy = ypos * vc->vc_font.height;
--      image.width = vc->vc_font.width;
--      image.height = vc->vc_font.height;
--      image.fg_color = attr_fgcol(fgshift, c);
--      image.bg_color = attr_bgcol(bgshift, c);
--      image.depth = 1;
--
--      pitch = width + scan_align;
--      pitch &= ~scan_align;
--      size = pitch * vc->vc_font.height;
--      size += buf_align;
--      size &= ~buf_align;
--      dst = info->pixmap.addr + fb_get_buffer_offset(info, size);
--      image.data = dst;
--      src = vc->vc_font.data + (c & charmask) * vc->vc_font.height * width;
--
--      move_buf_aligned(info, dst, src, pitch, width, image.height);
--
--      info->fbops->fb_imageblit(info, &image);
--      atomic_dec(&info->pixmap.count);
--      smp_mb__after_atomic_dec();
--}
--
--void accel_putcs(struct vc_data *vc, struct fb_info *info,
--                      const unsigned short *s, int count, int yy, int xx)
--{
--      int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
--      int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
-+      unsigned int idx = vc->vc_font.width >> 3;
-+      u8 *src, *dst, *dst0, mask;
-       struct fb_image image;
-       u16 c = scr_readw(s);
-@@ -484,10 +364,44 @@ void accel_putcs(struct vc_data *vc, str
-       image.height = vc->vc_font.height;
-       image.depth = 1;
--      if (!(vc->vc_font.width & 7))
--               putcs_aligned(vc, info, &image, count, s);
--        else
--               putcs_unaligned(vc, info, &image, count, s);
-+      while (count) {
-+              if (count > maxcnt)
-+                      cnt = k = maxcnt;
-+              else
-+                      cnt = k = count;
-+
-+              image.width = vc->vc_font.width * cnt;
-+              pitch = ((image.width + 7) >> 3) + scan_align;
-+              pitch &= ~scan_align;
-+              size = pitch * vc->vc_font.height + buf_align;
-+              size &= ~buf_align;
-+              dst0 = fb_get_buffer_offset(info, &info->pixmap, size);
-+              image.data = dst0;
-+              while (k--) {
-+                      src = vc->vc_font.data + (scr_readw(s++) & charmask)*cellsize;
-+                      dst = dst0;
-+              
-+                      if (mod) {
-+                              mask = (u8) (0xfff << shift_high);
-+                              move_buf_unaligned(info, &info->pixmap, dst, src, pitch,
-+                                                 image.height, mask, shift_high, 
-+                                                 shift_low, mod, idx);
-+                              shift_low += mod;
-+                              dst0 += (shift_low >= 8) ? width : width - 1;
-+                              shift_low &= 7;
-+                              shift_high = 8 - shift_low;
-+                      } else {
-+                              move_buf_aligned(info, &info->pixmap, dst, src, pitch, idx, 
-+                                               image.height);
-+                              dst0 += width;
-+                      }       
-+              }
-+              info->fbops->fb_imageblit(info, &image);
-+              image.dx += cnt * vc->vc_font.width;
-+              count -= cnt;
-+              atomic_dec(&info->pixmap.count);
-+              smp_mb__after_atomic_dec();
-+      }
- }
- void accel_clear_margins(struct vc_data *vc, struct fb_info *info,
-@@ -676,7 +590,7 @@ static const char *fbcon_startup(void)
-       if (!info->queue.func) {
-               INIT_WORK(&info->queue, fb_flashcursor, info);
-               
--              cursor_timer.expires = jiffies + HZ / 50;
-+              cursor_timer.expires = jiffies + HZ / 5;
-               cursor_timer.data = (unsigned long ) info;
-               add_timer(&cursor_timer);
-       }
-@@ -728,15 +642,13 @@ static __inline__ void updatescrollmode(
- static void fbcon_set_display(struct vc_data *vc, int init, int logo)
- {
-       struct fb_info *info = registered_fb[(int) con2fb_map[vc->vc_num]];
-+      int nr_rows, nr_cols, old_rows, old_cols, i, charcnt = 256;
-       struct display *p = &fb_display[vc->vc_num];
--      int nr_rows, nr_cols;
--      int old_rows, old_cols;
-       unsigned short *save = NULL, *r, *q;
--      int i, charcnt = 256;
-       struct font_desc *font;
-       if (vc->vc_num != fg_console || (info->flags & FBINFO_FLAG_MODULE) ||
--          info->fix.type == FB_TYPE_TEXT)
-+          (info->fix.type == FB_TYPE_TEXT))
-               logo = 0;
-       info->var.xoffset = info->var.yoffset = p->yscroll = 0; /* reset wrap/pan */
-@@ -960,19 +872,51 @@ static void fbcon_clear(struct vc_data *
-               accel_clear(vc, info, real_y(p, sy), sx, height, width);
- }
--
- static void fbcon_putc(struct vc_data *vc, int c, int ypos, int xpos)
- {
-       struct fb_info *info = registered_fb[(int) con2fb_map[vc->vc_num]];
-+      unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
-+      unsigned int scan_align = info->pixmap.scan_align - 1;
-+      unsigned int buf_align = info->pixmap.buf_align - 1;
-+      unsigned int width = (vc->vc_font.width + 7) >> 3;
-+      int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
-+      int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
-       struct display *p = &fb_display[vc->vc_num];
--
-+      unsigned int size, pitch;
-+      struct fb_image image;
-+      u8 *src, *dst;
-+      
-       if (!info->fbops->fb_blank && console_blanked)
-               return;
-       if (vt_cons[vc->vc_num]->vc_mode != KD_TEXT)
-               return;
--      accel_putc(vc, info, c, real_y(p, ypos), xpos);
-+      image.dx = xpos * vc->vc_font.width;
-+      image.dy = real_y(p, ypos) * vc->vc_font.height;
-+      image.width = vc->vc_font.width;
-+      image.height = vc->vc_font.height;
-+      image.fg_color = attr_fgcol(fgshift, c);
-+      image.bg_color = attr_bgcol(bgshift, c);
-+      image.depth = 1;
-+
-+      src = vc->vc_font.data + (c & charmask) * vc->vc_font.height * width;
-+
-+      pitch = width + scan_align;
-+      pitch &= ~scan_align;
-+      size = pitch * vc->vc_font.height;
-+      size += buf_align;
-+      size &= ~buf_align;
-+
-+      dst = fb_get_buffer_offset(info, &info->pixmap, size);
-+      image.data = dst;
-+      
-+      move_buf_aligned(info, &info->pixmap, dst, src, pitch, width,
-+                      image.height);
-+
-+      info->fbops->fb_imageblit(info, &image);
-+      atomic_dec(&info->pixmap.count);
-+      smp_mb__after_atomic_dec();
- }
- static void fbcon_putcs(struct vc_data *vc, const unsigned short *s,
-@@ -994,12 +938,16 @@ static void fbcon_cursor(struct vc_data 
- {
-       struct fb_info *info = registered_fb[(int) con2fb_map[vc->vc_num]];
-       unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
-+      unsigned int scan_align = info->sprite.scan_align - 1;
-+      unsigned int buf_align = info->sprite.buf_align - 1;
-       int bgshift = (vc->vc_hi_font_mask) ? 13 : 12;
-       int fgshift = (vc->vc_hi_font_mask) ? 9 : 8;
-       struct display *p = &fb_display[vc->vc_num];
--      int w = (vc->vc_font.width + 7) >> 3, c;
--      int y = real_y(p, vc->vc_y);
-+      int y = real_y(p, vc->vc_y), d_pitch, dsize;
-+      int s_pitch = (vc->vc_font.width + 7) >> 3;
-+      int size = s_pitch * vc->vc_font.height, c;
-       struct fb_cursor cursor;
-+      u8 *src, *dst;
-       
-       if (mode & CM_SOFTBACK) {
-               mode &= ~CM_SOFTBACK;
-@@ -1012,28 +960,27 @@ static void fbcon_cursor(struct vc_data 
-       } else if (softback_lines)
-               fbcon_set_origin(vc);
--      c = scr_readw((u16 *) vc->vc_pos);
--
--      cursor.image.data = vc->vc_font.data + ((c & charmask) * (w * vc->vc_font.height));
--      cursor.set = FB_CUR_SETCUR;
--      cursor.image.depth = 1;
--      
-       switch (mode) {
-       case CM_ERASE:
--              if (info->cursor.rop == ROP_XOR) {
-+              del_timer(&cursor_timer);
-+              if (info->cursor.enable) {
-                       info->cursor.enable = 0;
--                      info->cursor.rop = ROP_COPY;
--                      info->fbops->fb_cursor(info, &cursor);
--              }       
-+                      info->fbops->fb_cursor(info, &info->cursor);
-+              }
-               break;
-       case CM_MOVE:
-       case CM_DRAW:
-+              memset(&cursor, 0, sizeof(struct fb_cursor));
-               info->cursor.enable = 1;
--              
-+
-+              c = scr_readw((u16 *) vc->vc_pos);
-+
-+              src = vc->vc_font.data + ((c & charmask) * size);
-               if (info->cursor.image.fg_color != attr_fgcol(fgshift, c) ||
-                   info->cursor.image.bg_color != attr_bgcol(bgshift, c)) {
-                       cursor.image.fg_color = attr_fgcol(fgshift, c);
-                       cursor.image.bg_color = attr_bgcol(bgshift, c);
-+                      cursor.image.depth = 1;
-                       cursor.set |= FB_CUR_SETCMAP;
-               }
-               
-@@ -1056,18 +1003,29 @@ static void fbcon_cursor(struct vc_data 
-                       cursor.set |= FB_CUR_SETHOT;
-               }
-+              src = vc->vc_font.data + ((c & charmask) * size);
-+
-+              d_pitch = (s_pitch + scan_align) & ~scan_align;
-+              dsize = d_pitch * vc->vc_font.height + buf_align;
-+              dsize &= ~buf_align;
-+              dst = fb_get_buffer_offset(info, &info->sprite, dsize);
-+              move_buf_aligned(info, &info->sprite, dst, src, d_pitch, s_pitch, vc->vc_font.height);
-+              info->cursor.image.data = dst;
-+              cursor.set |= FB_CUR_SETSHAPE;
-+              
-               if ((cursor.set & FB_CUR_SETSIZE) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
--                      char *mask = kmalloc(w*vc->vc_font.height, GFP_ATOMIC);
--                      int cur_height, size, i = 0;
-+                      char *mask = kmalloc(dsize, GFP_ATOMIC);
-+                      int cur_height, i, j, k;
-                       if (!mask)      return; 
--              
-+      
-+                      memset(mask, 0, dsize);
-+                      
-                       if (info->cursor.mask)
-                               kfree(info->cursor.mask);
-                       info->cursor.mask = mask;
-       
-                       p->cursor_shape = vc->vc_cursor_type & 0x0f;
--                      cursor.set |= FB_CUR_SETSHAPE;
-                       switch (vc->vc_cursor_type & 0x0f) {
-                       case CUR_NONE:
-@@ -1090,15 +1048,18 @@ static void fbcon_cursor(struct vc_data 
-                               cur_height = vc->vc_font.height;
-                               break;
-                       }
--                      size = (vc->vc_font.height - cur_height) * w;
--                      while (size--)
--                              mask[i++] = 0;
--                      size = cur_height * w;
--                      while (size--)
--                              mask[i++] = 0xff;
-+                      i = (vc->vc_font.height - cur_height) * d_pitch;
-+                      for (j = 0; j < cur_height; j++) {
-+                              for (k = 0; k < s_pitch; k++)   
-+                                      mask[i++] = 0xff;
-+                              i += (d_pitch - s_pitch);
-+                      }
-               }
-               info->cursor.rop = ROP_XOR;
-               info->fbops->fb_cursor(info, &cursor);
-+              atomic_dec(&info->sprite.count);
-+              smp_mb__after_atomic_dec();
-+              mod_timer(&cursor_timer, jiffies + HZ/5);
-               vbl_cursor_cnt = CURSOR_DRAW_DELAY;
-               break;
-       }
-@@ -1826,9 +1787,11 @@ static int fbcon_do_set_font(struct vc_d
-       vc->vc_font.height = h;
-       if (vc->vc_hi_font_mask && cnt == 256) {
-               vc->vc_hi_font_mask = 0;
--              if (vc->vc_can_do_color)
-+              if (vc->vc_can_do_color) {
-                       vc->vc_complement_mask >>= 1;
--
-+                      vc->vc_s_complement_mask >>= 1;
-+              }
-+                      
-               /* ++Edmund: reorder the attribute bits */
-               if (vc->vc_can_do_color) {
-                       unsigned short *cp =
-@@ -1847,9 +1810,11 @@ static int fbcon_do_set_font(struct vc_d
-               }
-       } else if (!vc->vc_hi_font_mask && cnt == 512) {
-               vc->vc_hi_font_mask = 0x100;
--              if (vc->vc_can_do_color)
-+              if (vc->vc_can_do_color) {
-                       vc->vc_complement_mask <<= 1;
--
-+                      vc->vc_s_complement_mask <<= 1;
-+              }
-+                      
-               /* ++Edmund: reorder the attribute bits */
-               {
-                       unsigned short *cp =
---- linux-2.6.0-test1/drivers/video/controlfb.c        2003-06-14 12:18:00.000000000 -0700
-+++ 25/drivers/video/controlfb.c       2003-07-19 17:04:55.000000000 -0700
-@@ -136,8 +136,8 @@ static int controlfb_check_var (struct f
- /*
-  * inititialization
-  */
--int control_init(void);
--void control_setup(char *);
-+int controlfb_init(void);
-+void controlfb_setup(char *);
- /******************** Prototypes for internal functions **********************/
-@@ -475,7 +475,7 @@ try_again:
-       /* Apply default var */
-       var.activate = FB_ACTIVATE_NOW;
--      rc = fb_set_var(&var, &p->info);
-+      rc = fb_set_var(&p->info, &var);
-       if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8))
-               goto try_again;
-@@ -553,7 +553,7 @@ static void control_set_hardware(struct 
- /*
-  * Called from fbmem.c for probing & initializing
-  */
--int __init control_init(void)
-+int __init controlfb_init(void)
- {
-       struct device_node *dp;
-@@ -1057,7 +1057,7 @@ static void control_cleanup(void)
- /*
-  * Parse user speficied options (`video=controlfb:')
-  */
--void __init control_setup(char *options)
-+void __init controlfb_setup(char *options)
- {
-       char *this_opt;
---- linux-2.6.0-test1/drivers/video/epson1355fb.c      2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/video/epson1355fb.c     2003-07-19 17:04:55.000000000 -0700
-@@ -1,541 +1,714 @@
- /*
-- * linux/drivers/video/epson1355fb.c
-- *    -- Support for the Epson SED1355 LCD/CRT controller
-+ * linux/drivers/video/epson1355fb.c -- Epson S1D13505 frame buffer for 2.5.
-  *
-- * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
-+ * Epson Research S1D13505 Embedded RAMDAC LCD/CRT Controller
-+ *   (previously known as SED1355)
-  *
-- * based on linux/drivers/video/skeletonfb.c, which was
-+ * Cf. http://www.erd.epson.com/vdc/html/S1D13505.html
-+ *
-+ *
-+ * Copyright (C) Hewlett-Packard Company.  All rights reserved.
-+ *
-+ * Written by Christopher Hoover <ch@hpl.hp.com>
-+ *
-+ * Adapted from:
-+ *
-+ *  linux/drivers/video/skeletonfb.c
-+ *  Modified to new api Jan 2001 by James Simmons (jsimmons@transvirtual.com)
-  *  Created 28 Dec 1997 by Geert Uytterhoeven
-  *
-+ *  linux/drivers/video/epson1355fb.c (2.4 driver)
-+ *  Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
-+ *
-  * This file is subject to the terms and conditions of the GNU General Public
-- * License.  See the file COPYING in the main directory of this archive
-- * for more details.
-- */
--/* TODO (roughly in order of priority):
-- * 16 bpp support
-- * crt support
-- * hw cursor support
-- * SwivelView
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ *
-+ * Noteworthy Issues
-+ * -----------------
-+ *
-+ * This driver is complicated by the fact that this is a 16-bit chip
-+ * and, on at least one platform (ceiva), we can only do 16-bit reads
-+ * and writes to the framebuffer.  We hide this from user space
-+ * except in the case of mmap().
-+ *
-+ *
-+ * To Do
-+ * -----
-+ *
-+ * - Test 8-bit pseudocolor mode
-+ * - Allow setting bpp, virtual resolution 
-+ * - Implement horizontal panning
-+ * - (maybe) Implement hardware cursor
-  */
--#include <asm/io.h>
--#include <linux/config.h>
--#include <linux/delay.h>
--#include <linux/errno.h>
--#include <linux/fb.h>
--#include <linux/init.h>
--#include <linux/kernel.h>
--#include <linux/slab.h>
--#include <linux/mm.h>
- #include <linux/module.h>
--#include <linux/sched.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
- #include <linux/string.h>
-+#include <linux/mm.h>
- #include <linux/tty.h>
--#include <video/fbcon-cfb8.h>
--#include <video/fbcon-mfb.h>
--#include <video/fbcon.h>
--
--/* Register defines.  The docs don't seem to provide nice mnemonic names
-- * so I made them up myself ... */
--
--#define E1355_PANEL   0x02
--#define E1355_DISPLAY 0x0D
--#define E1355_MISC    0x1B
--#define E1355_GPIO    0x20
--#define E1355_LUT_INDEX 0x24
--#define E1355_LUT_DATA        0x26
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/fb.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <asm/types.h>
-+#include <asm/io.h>
-+#include <asm/uaccess.h>
-+
-+#include <video/epson1355.h>
-+
-+static struct fb_info info;
-+
-+static struct epson1355fb_par {
-+      unsigned long reg_addr;
-+} par;
-+
-+static u32 pseudo_palette[16];
-+
-+/* ------------------------------------------------------------------------- */
- #ifdef CONFIG_SUPERH
--#define E1355_REG_BASE        CONFIG_E1355_REG_BASE
--#define E1355_FB_BASE CONFIG_E1355_FB_BASE
--static inline u8 e1355_read_reg(int index)
-+static inline u8 epson1355_read_reg(int index)
- {
--      return ctrl_inb(E1355_REG_BASE + index);
-+      return ctrl_inb(par.reg_addr + index);
- }
--static inline void e1355_write_reg(u8 data, int index)
-+static inline void epson1355_write_reg(u8 data, int index)
- {
--      ctrl_outb(data, E1355_REG_BASE + index);
-+      ctrl_outb(data, par.reg_addr + index);
- }
--static inline u16 e1355_read_reg16(int index)
-+#elif defined(CONFIG_ARM)
-+
-+# ifdef CONFIG_ARCH_CEIVA
-+#  include <asm/arch/hardware.h>
-+#  define EPSON1355FB_BASE_PHYS       (CEIVA_PHYS_SED1355)
-+# endif
-+
-+static inline u8 epson1355_read_reg(int index)
- {
--      return e1355_read_reg(index) + (e1355_read_reg(index+1) << 8);
-+      return __raw_readb(par.reg_addr + index);
- }
--static inline void e1355_write_reg16(u16 data, int index)
-+static inline void epson1355_write_reg(u8 data, int index)
- {
--      e1355_write_reg((data&0xff), index);
--      e1355_write_reg(((data>>8)&0xff), index + 1);
-+      __raw_writeb(data, par.reg_addr + index);
- }
-+
- #else
--#error unknown architecture
-+# error "no architecture-specific epson1355_{read,write}_reg"
- #endif
--struct e1355fb_info {
--      struct fb_info_gen gen;
--};
--
--static int current_par_valid = 0;
--static struct display disp;
-+#ifndef EPSON1355FB_BASE_PHYS
-+# error  "EPSON1355FB_BASE_PHYS is not defined"
-+#endif
--static struct fb_var_screeninfo default_var;
-+#define EPSON1355FB_REGS_OFS  (0)
-+#define EPSON1355FB_REGS_PHYS (EPSON1355FB_BASE_PHYS + EPSON1355FB_REGS_OFS)
-+#define EPSON1355FB_REGS_LEN  (64)
--int e1355fb_init(void);
--int e1355fb_setup(char*);
--static int e1355_encode_var(struct fb_var_screeninfo *var, const void *par,
--                          struct fb_info_gen *info);
--/* ------------------- chipset specific functions -------------------------- */
-+#define EPSON1355FB_FB_OFS    (0x00200000)
-+#define EPSON1355FB_FB_PHYS   (EPSON1355FB_BASE_PHYS + EPSON1355FB_FB_OFS)
-+#define EPSON1355FB_FB_LEN    (2 * 1024 * 1024)
-+/* ------------------------------------------------------------------------- */
--static void disable_hw_cursor(void)
-+static inline u16 epson1355_read_reg16(int index)
- {
--      u8 curs;
-+      u8 lo = epson1355_read_reg(index);
-+      u8 hi = epson1355_read_reg(index + 1);
--      curs = e1355_read_reg(0x27);
--      curs &= ~0xc0;
--      e1355_write_reg(curs, 0x27);
-+      return (hi << 8) | lo;
- }
--static void e1355_detect(void)
-+static inline void epson1355_write_reg16(u16 data, int index)
- {
--      u8 rev;
-+      u8 lo = data & 0xff;
-+      u8 hi = (data >> 8) & 0xff;
--      e1355_write_reg(0x00, E1355_MISC);
-+      epson1355_write_reg(lo, index);
-+      epson1355_write_reg(hi, index + 1);
-+}
--      rev = e1355_read_reg(0x00);
-+static inline u32 epson1355_read_reg20(int index)
-+{
-+      u8 b0 = epson1355_read_reg(index);
-+      u8 b1 = epson1355_read_reg(index + 1);
-+      u8 b2 = epson1355_read_reg(index + 2);
--      if ((rev & 0xfc) != 0x0c) {
--              printk(KERN_WARNING "Epson 1355 not detected\n");
--      }
-+      return (b2 & 0x0f) << 16 | (b1 << 8) | b0;
-+}
--      /* XXX */
--      disable_hw_cursor();
-+static inline void epson1355_write_reg20(u32 data, int index)
-+{
-+      u8 b0 = data & 0xff;
-+      u8 b1 = (data >> 8) & 0xff;
-+      u8 b2 = (data >> 16) & 0x0f;
--      e1355_encode_var(&default_var, NULL, NULL);
-+      epson1355_write_reg(b0, index);
-+      epson1355_write_reg(b1, index + 1);
-+      epson1355_write_reg(b2, index + 2);
- }
--struct e1355_par {
--      u32 xres;
--      u32 yres;
-+/* ------------------------------------------------------------------------- */
--      int bpp;
--      int mem_bpp;
-+static void set_lut(u8 index, u8 r, u8 g, u8 b)
-+{
-+      epson1355_write_reg(index, REG_LUT_ADDR);
-+      epson1355_write_reg(r, REG_LUT_DATA);
-+      epson1355_write_reg(g, REG_LUT_DATA);
-+      epson1355_write_reg(b, REG_LUT_DATA);
-+}
--      u32 panel_xres;
--      u32 panel_yres;
--      
--      int panel_width;
--      int panel_ymul;
--};
--static int e1355_encode_fix(struct fb_fix_screeninfo *fix,
--                          const void *raw_par,
--                          struct fb_info_gen *info)
--{
--      const struct e1355_par *par = raw_par;
--      
--      memset(fix, 0, sizeof *fix);
--      
--      fix->type= FB_TYPE_PACKED_PIXELS;
-+/**
-+ *    epson1355fb_setcolreg - sets a color register.
-+ *      @regno: Which register in the CLUT we are programming 
-+ *      @red: The red value which can be up to 16 bits wide 
-+ *    @green: The green value which can be up to 16 bits wide 
-+ *    @blue:  The blue value which can be up to 16 bits wide.
-+ *    @transp: If supported the alpha value which can be up to 16 bits wide.
-+ *      @info: frame buffer info structure
-+ * 
-+ *    Returns negative errno on error, or zero on success.
-+ */
-+static int epson1355fb_setcolreg(unsigned regno, unsigned r, unsigned g,
-+                               unsigned b, unsigned transp,
-+                               struct fb_info *info)
-+{
-+      if (info->var.grayscale)
-+              r = g = b = (19595 * r + 38470 * g + 7471 * b) >> 16;
-+
-+      switch (info->fix.visual) {
-+      case FB_VISUAL_TRUECOLOR:
-+              if (regno >= 16)
-+                      return -EINVAL;
--      if (!par)
--              BUG();
-+              ((u32 *) info->pseudo_palette)[regno] =
-+                  (r & 0xf800) | (g & 0xfc00) >> 5 | (b & 0xf800) >> 11;
--      if (par->bpp == 1) {
--              fix->visual = FB_VISUAL_MONO10;
--      } else if (par->bpp <= 8) {
--              fix->visual = FB_VISUAL_PSEUDOCOLOR;
--      } else {
--              fix->visual = FB_VISUAL_TRUECOLOR;
--      }
-+              break;
-+      case FB_VISUAL_PSEUDOCOLOR:
-+              if (regno >= 256)
-+                      return -EINVAL;
--      return 0;
--}
-+              set_lut(regno, r >> 8, g >> 8, b >> 8);
--static int e1355_set_bpp(struct e1355_par *par, int bpp)
--{
--      int code;
--      u8 disp;
--      u16 bytes_per_line;
--
--      switch(bpp) {
--      case 1:
--              code = 0; break;
--      case 2:
--              code = 1; break;
--      case 4:
--              code = 2; break;
--      case 8:
--              code = 3; break;
--      case 16:
--              code = 5; break;
-+              break;
-       default:
--              return -EINVAL; break;
-+              return -ENOSYS;
-       }
--
--      disp = e1355_read_reg(E1355_DISPLAY);
--      disp &= ~0x1c;
--      disp |= code << 2;
--      e1355_write_reg(disp, E1355_DISPLAY);
--      
--      bytes_per_line = (par->xres * bpp) >> 3;
--      
--      e1355_write_reg16(bytes_per_line, 0x16);
--
--      par->bpp = bpp;
--
-       return 0;
- }
--              
--static int e1355_decode_var(const struct fb_var_screeninfo *var,
--                          void *raw_par,
--                          struct fb_info_gen *info)
-+
-+/* ------------------------------------------------------------------------- */
-+
-+/**
-+ *      epson1355fb_pan_display - Pans the display.
-+ *      @var: frame buffer variable screen structure
-+ *      @info: frame buffer structure that represents a single frame buffer
-+ *
-+ *    Pan (or wrap, depending on the `vmode' field) the display using the
-+ *    `xoffset' and `yoffset' fields of the `var' structure.
-+ *    If the values don't fit, return -EINVAL.
-+ *
-+ *      Returns negative errno on error, or zero on success.
-+ */
-+static int epson1355fb_pan_display(struct fb_var_screeninfo *var,
-+                                 struct fb_info *info)
- {
--      struct e1355_par *par = raw_par;
--      int ret;
-+      u32 start;
--      if (!par)
--              BUG();
-+      if (var->xoffset != 0)  /* not yet ... */
-+              return -EINVAL;
--      /*
--       * Don't allow setting any of these yet: xres and yres don't
--       * make sense for LCD panels; xres_virtual and yres_virtual
--       * should be supported fine by our hardware though.
--       */
--      if (var->xres != par->xres ||
--          var->yres != par->yres ||
--          var->xres != var->xres_virtual ||
--          var->yres != var->yres_virtual ||
--          var->xoffset != 0 ||
--          var->yoffset != 0)
-+      if (var->yoffset + info->var.yres > info->var.yres_virtual)
-               return -EINVAL;
--      if(var->bits_per_pixel != par->bpp) {
--              ret = e1355_set_bpp(par, var->bits_per_pixel);
-+      start = (info->fix.line_length >> 1) * var->yoffset;
--              if (ret)
--                      goto out_err;
--      }
--              
--      return 0;
-+      epson1355_write_reg20(start, REG_SCRN1_DISP_START_ADDR0);
-- out_err:
--      return ret;
-+      return 0;
- }
--static void dump_panel_data(void)
-+/* ------------------------------------------------------------------------- */
-+
-+static void lcd_enable(int enable)
- {
--      u8 panel = e1355_read_reg(E1355_PANEL);
--      int width[2][4] = { { 4, 8, 16, -1 }, { 9, 12, 16, -1 } };
-+      u8 mode = epson1355_read_reg(REG_DISPLAY_MODE);
--      printk("%s %s %s panel, width %d bits\n",
--             panel & 2 ? "dual" : "single",
--             panel & 4 ? "color" : "mono",
--             panel & 1 ? "TFT" : "passive",
--             width[panel&1][(panel>>4)&3]);
-+      if (enable)
-+              mode |= 1;
-+      else
-+              mode &= ~1;
--      printk("resolution %d x %d\n",
--             (e1355_read_reg(0x04) + 1) * 8,
--             ((e1355_read_reg16(0x08) + 1) * (1 + ((panel & 3) == 2))));
-+      epson1355_write_reg(mode, REG_DISPLAY_MODE);
- }
--static int e1355_bpp_to_var(int bpp, struct fb_var_screeninfo *var)
-+#if defined(CONFIG_ARCH_CEIVA)
-+static void backlight_enable(int enable)
- {
--      switch(bpp) {
--      case 1:
--      case 2:
--      case 4:
--      case 8:
--              var->bits_per_pixel = bpp;
--              var->red.offset = var->green.offset = var->blue.offset = 0;
--              var->red.length = var->green.length = var->blue.length = bpp;
-+      /* ### this should be protected by a spinlock ... */
-+      u8 pddr = clps_readb(PDDR);
-+      if (enable)
-+              pddr |= (1 << 5);
-+      else
-+              pddr &= ~(1 << 5);
-+      clps_writeb(pddr, PDDR);
-+}
-+#else
-+static void backlight_enable(int enable)
-+{
-+}
-+#endif
-+
-+
-+/**
-+ *      epson1355fb_blank - blanks the display.
-+ *      @blank_mode: the blank mode we want. 
-+ *      @info: frame buffer structure that represents a single frame buffer
-+ *
-+ *      Blank the screen if blank_mode != 0, else unblank. Return 0 if
-+ *      blanking succeeded, != 0 if un-/blanking failed due to e.g. a 
-+ *      video mode which doesn't support it. Implements VESA suspend
-+ *      and powerdown modes on hardware that supports disabling hsync/vsync:
-+ *      blank_mode == 2: suspend vsync
-+ *      blank_mode == 3: suspend hsync
-+ *      blank_mode == 4: powerdown
-+ *
-+ *      Returns negative errno on error, or zero on success.
-+ *
-+ */
-+static int epson1355fb_blank(int blank_mode, struct fb_info *info)
-+{
-+      switch (blank_mode) {
-+      case VESA_NO_BLANKING:
-+              lcd_enable(1);
-+              backlight_enable(1);
-               break;
--      case 16:
--              var->bits_per_pixel = 16;
--              var->red.offset = 11;
--              var->red.length = 5;
--              var->green.offset = 5;
--              var->green.length = 6;
--              var->blue.offset = 0;
--              var->blue.length = 5;
-+      case VESA_VSYNC_SUSPEND:
-+      case VESA_HSYNC_SUSPEND:
-+              backlight_enable(0);
-               break;
-+      case VESA_POWERDOWN:
-+              backlight_enable(0);
-+              lcd_enable(0);
-+              break;
-+      default:
-+              return -EINVAL;
-       }
--
-       return 0;
- }
--static int e1355_encode_var(struct fb_var_screeninfo *var, const void *raw_par,
--                          struct fb_info_gen *info)
-+/* ------------------------------------------------------------------------- */
-+
-+/*
-+ * We can't use the cfb generic routines, as we have to limit
-+ * ourselves to 16-bit or 8-bit loads and stores to this 16-bit
-+ * chip.
-+ */
-+
-+static inline void epson1355fb_fb_writel(unsigned long v, unsigned long *a)
- {
--      u8 panel, display;
--      u32 xres, xres_virtual, yres;
--      static int width[2][4] = { { 4, 8, 16, -1 }, { 9, 12, 16, -1 } };
--      static int bpp_tab[8] = { 1, 2, 4, 8, 15, 16 };
--      int bpp, hw_bpp;
--      int is_color, is_dual, is_tft;
--      int lcd_enabled, crt_enabled;
-+      u16 *p = (u16 *) a;
-+      u16 l = v & 0xffff;
-+      u16 h = v >> 16;
--      panel = e1355_read_reg(E1355_PANEL);
--      display = e1355_read_reg(E1355_DISPLAY);
-+      fb_writew(l, p);
-+      fb_writew(h, p + 1);
-+}
--      is_color = (panel & 0x04) != 0;
--      is_dual  = (panel & 0x02) != 0;
--      is_tft   = (panel & 0x01) != 0;
-+static inline unsigned long epson1355fb_fb_readl(const unsigned long *a)
-+{
-+      const u16 *p = (u16 *) a;
-+      u16 l = fb_readw(p);
-+      u16 h = fb_readw(p + 1);
--      bpp = bpp_tab[(display>>2)&7]; 
--      e1355_bpp_to_var(bpp, var);
-+      return (h << 16) | l;
-+}
--      crt_enabled = (display & 0x02) != 0;
--      lcd_enabled = (display & 0x02) != 0;
-+#define FB_READL epson1355fb_fb_readl
-+#define FB_WRITEL epson1355fb_fb_writel
--      hw_bpp = width[is_tft][(panel>>4)&3];
-+/* ------------------------------------------------------------------------- */
--      xres = e1355_read_reg(0x04) + 1;
--      yres = e1355_read_reg16(0x08) + 1;
--      
--      xres *= 8;
--      /* talk about weird hardware .. */
--      yres *= (is_dual && !crt_enabled) ? 2 : 1;
--
--      xres_virtual = e1355_read_reg16(0x16);
--      /* it's in 2-byte words initially */
--      xres_virtual *= 16;
--      xres_virtual /= var->bits_per_pixel;
-+static inline unsigned long copy_from_user16(void *to, const void *from,
-+                                           unsigned long n)
-+{
-+      u16 *dst = (u16 *) to;
-+      u16 *src = (u16 *) from;
--      var->xres = xres;
--      var->yres = yres;
--      var->xres_virtual = xres_virtual;
--      var->yres_virtual = yres;
-+      if (!access_ok(VERIFY_READ, from, n))
-+              return n;
--      var->xoffset = var->yoffset = 0;
-+      while (n > 1) {
-+              u16 v;
-+              if (__get_user(v, src))
-+                      return n;
--      var->grayscale = !is_color;
--      
--      return 0;
--}
-+              fb_writew(v, dst);
--#define is_dual(panel) (((panel)&3)==2)
-+              src++, dst++;
-+              n -= 2;
-+      }
--static void get_panel_data(struct e1355_par *par)
--{
--      u8 panel;
--      int width[2][4] = { { 4, 8, 16, -1 }, { 9, 12, 16, -1 } };
-+      if (n) {
-+              u8 v;
--      panel = e1355_read_reg(E1355_PANEL);
-+              if (__get_user(v, ((u8 *) src)))
-+                      return n;
--      par->panel_width = width[panel&1][(panel>>4)&3];
--      par->panel_xres = (e1355_read_reg(0x04) + 1) * 8;
--      par->panel_ymul = is_dual(panel) ? 2 : 1;
--      par->panel_yres = ((e1355_read_reg16(0x08) + 1)
--                         * par->panel_ymul);
-+              fb_writeb(v, dst);
-+      }
-+      return 0;
- }
--static void e1355_get_par(void *raw_par, struct fb_info_gen *info)
-+static inline unsigned long copy_to_user16(void *to, const void *from,
-+                                         unsigned long n)
- {
--      struct e1355_par *par = raw_par;
-+      u16 *dst = (u16 *) to;
-+      u16 *src = (u16 *) from;
--      get_panel_data(par);
--}
-+      if (!access_ok(VERIFY_WRITE, to, n))
-+              return n;
--static void e1355_set_par(const void *par, struct fb_info_gen *info)
--{
--}
-+      while (n > 1) {
-+              u16 v = fb_readw(src);
--static int e1355_getcolreg(unsigned regno, unsigned *red, unsigned *green,
--                         unsigned *blue, unsigned *transp,
--                         struct fb_info *info)
--{
--      u8 r, g, b;
-+              if (__put_user(v, dst))
-+                      return n;
--      e1355_write_reg(regno, E1355_LUT_INDEX);
--      r = e1355_read_reg(E1355_LUT_DATA);
--      g = e1355_read_reg(E1355_LUT_DATA);
--      b = e1355_read_reg(E1355_LUT_DATA);
-+              src++, dst++;
-+              n -= 2;
-+      }
--      *red = r << 8;
--      *green = g << 8;
--      *blue = b << 8;
-+      if (n) {
-+              u8 v = fb_readb(src);
-+              if (__put_user(v, ((u8 *) dst)))
-+                      return n;
-+      }
-       return 0;
- }
--static int e1355fb_setcolreg(unsigned regno, unsigned red, unsigned green,
--                           unsigned blue, unsigned transp,
--                           struct fb_info *info)
--{
--      u8 r = (red >> 8) & 0xf0;
--      u8 g = (green>>8) & 0xf0;
--      u8 b = (blue>> 8) & 0xf0;
--
--      e1355_write_reg(regno, E1355_LUT_INDEX);
--      e1355_write_reg(r, E1355_LUT_DATA);
--      e1355_write_reg(g, E1355_LUT_DATA);
--      e1355_write_reg(b, E1355_LUT_DATA);
--      
--      return 0;
--}
--static int e1355_pan_display(const struct fb_var_screeninfo *var,
--                           struct fb_info_gen *info)
-+static ssize_t
-+epson1355fb_read(struct file *file, char *buf, size_t count, loff_t * ppos)
- {
--      BUG();
--      
--      return -EINVAL;
-+      unsigned long p = *ppos;
-+
-+      /* from fbmem.c except for our own copy_*_user */
-+      if (p >= info.fix.smem_len)
-+              return 0;
-+      if (count >= info.fix.smem_len)
-+              count = info.fix.smem_len;
-+      if (count + p > info.fix.smem_len)
-+              count = info.fix.smem_len - p;
-+
-+      if (count) {
-+              char *base_addr;
-+
-+              base_addr = info.screen_base;
-+              count -= copy_to_user16(buf, base_addr + p, count);
-+              if (!count)
-+                      return -EFAULT;
-+              *ppos += count;
-+      }
-+      return count;
- }
--/*
-- * The AERO_HACKS parts disable/enable the backlight on the Compaq Aero 8000.
-- * I'm not sure they aren't dangerous to the hardware, so be warned.
-- */
--#undef AERO_HACKS
-+static ssize_t
-+epson1355fb_write(struct file *file, const char *buf,
-+                size_t count, loff_t * ppos)
-+{
-+      unsigned long p = *ppos;
-+      int err;
-+
-+      /* from fbmem.c except for our own copy_*_user */
-+      if (p > info.fix.smem_len)
-+              return -ENOSPC;
-+      if (count >= info.fix.smem_len)
-+              count = info.fix.smem_len;
-+      err = 0;
-+      if (count + p > info.fix.smem_len) {
-+              count = info.fix.smem_len - p;
-+              err = -ENOSPC;
-+      }
--static int e1355_blank(int blank_mode, struct fb_info_gen *info)
--{
--      u8 disp;
-+      if (count) {
-+              char *base_addr;
--      switch (blank_mode) {
--      case VESA_NO_BLANKING:
--              disp = e1355_read_reg(E1355_DISPLAY);
--              disp |= 1;
--              e1355_write_reg(disp, E1355_DISPLAY);
--              
--#ifdef AERO_HACKS
--              e1355_write_reg(0x6, 0x20);
--#endif
--              break;
-+              base_addr = info.screen_base;
-+              count -= copy_from_user16(base_addr + p, buf, count);
-+              *ppos += count;
-+              err = -EFAULT;
-+      }
-+      if (count)
-+              return count;
-+      return err;
-+}
-+
-+/* ------------------------------------------------------------------------- */
-+
-+static struct fb_ops epson1355fb_fbops = {
-+      .owner          = THIS_MODULE,
-+      .fb_setcolreg   = epson1355fb_setcolreg,
-+      .fb_pan_display = epson1355fb_pan_display,
-+      .fb_blank       = epson1355fb_blank,
-+      .fb_fillrect    = cfb_fillrect,
-+      .fb_copyarea    = cfb_copyarea,
-+      .fb_imageblit   = cfb_imageblit,
-+      .fb_read        = epson1355fb_read,
-+      .fb_write       = epson1355fb_write,
-+      .fb_cursor      = soft_cursor,
-+};
--      case VESA_VSYNC_SUSPEND:
--      case VESA_HSYNC_SUSPEND:
--      case VESA_POWERDOWN:
--              disp = e1355_read_reg(E1355_DISPLAY);
--              disp &= ~1;
--              e1355_write_reg(disp, E1355_DISPLAY);
-+/* ------------------------------------------------------------------------- */
--#ifdef AERO_HACKS
--              e1355_write_reg(0x0, 0x20);
--#endif
--              break;
-+static __init unsigned int get_fb_size(struct fb_info *info)
-+{
-+      unsigned int size = 2 * 1024 * 1024;
-+      char *p = info->screen_base;
--      default:
--              return -EINVAL;
--      }
-+      /* the 512k framebuffer is aliased at start + 0x80000 * n */
-+      fb_writeb(1, p);
-+      fb_writeb(0, p + 0x80000);
-+      if (!fb_readb(p))
-+              size = 512 * 1024;
--      return 0;
-+      fb_writeb(0, p);
-+
-+      return size;
- }
--static struct display_switch e1355_dispsw;
-+static int epson1355_width_tab[2][4] __initdata =
-+    { {4, 8, 16, -1}, {9, 12, 16, -1} };
-+static int epson1355_bpp_tab[8] __initdata = { 1, 2, 4, 8, 15, 16 };
--static void e1355_set_disp(const void *unused, struct display *disp,
--                         struct fb_info_gen *info)
-+static void __init fetch_hw_state(struct fb_info *info)
- {
--      struct display_switch *d;
-+      struct fb_var_screeninfo *var = &info->var;
-+      struct fb_fix_screeninfo *fix = &info->fix;
-+      u8 panel, display;
-+      u16 offset;
-+      u32 xres, yres;
-+      u32 xres_virtual, yres_virtual;
-+      int bpp, lcd_bpp;
-+      int is_color, is_dual, is_tft;
-+      int lcd_enabled, crt_enabled;
-+
-+      fix->type = FB_TYPE_PACKED_PIXELS;
-+
-+      display = epson1355_read_reg(REG_DISPLAY_MODE);
-+      bpp = epson1355_bpp_tab[(display >> 2) & 7];
--      disp->dispsw = &e1355_dispsw;
--      
--      switch(disp->var.bits_per_pixel) {
--#ifdef FBCON_HAS_MFB
--      case 1:
--              d = &fbcon_mfb; break;
--#endif               
--#ifdef FBCON_HAS_CFB8
-+      switch (bpp) {
-       case 8:
--              d = &fbcon_cfb8; break;
--#endif
-+              fix->visual = FB_VISUAL_PSEUDOCOLOR;
-+              var->bits_per_pixel = 8;
-+              var->red.offset = var->green.offset = var->blue.offset = 0;
-+              var->red.length = var->green.length = var->blue.length = 8;
-+              break;
-+      case 16:
-+              /* 5-6-5 RGB */
-+              fix->visual = FB_VISUAL_TRUECOLOR;
-+              var->bits_per_pixel = 16;
-+              var->red.offset = 11;
-+              var->red.length = 5;
-+              var->green.offset = 5;
-+              var->green.length = 6;
-+              var->blue.offset = 0;
-+              var->blue.length = 5;
-+              break;
-       default:
--              BUG(); break;
-+              BUG();
-       }
--      memcpy(&e1355_dispsw, d, sizeof *d);
-+      if (fix->visual == FB_VISUAL_TRUECOLOR) {
-+              info->pseudo_palette = &pseudo_palette;
-+              fb_alloc_cmap(&(info->cmap), 16, 0);
-+      } else
-+              fb_alloc_cmap(&(info->cmap), 1 << bpp, 0);
-+
-+      panel = epson1355_read_reg(REG_PANEL_TYPE);
-+      is_color = (panel & 0x04) != 0;
-+      is_dual = (panel & 0x02) != 0;
-+      is_tft = (panel & 0x01) != 0;
-+      crt_enabled = (display & 0x02) != 0;
-+      lcd_enabled = (display & 0x01) != 0;
-+      lcd_bpp = epson1355_width_tab[is_tft][(panel >> 4) & 3];
-+
-+      xres = (epson1355_read_reg(REG_HORZ_DISP_WIDTH) + 1) * 8;
-+      yres = (epson1355_read_reg16(REG_VERT_DISP_HEIGHT0) + 1) *
-+          ((is_dual && !crt_enabled) ? 2 : 1);
-+      offset = epson1355_read_reg16(REG_MEM_ADDR_OFFSET0) & 0x7ff;
-+      xres_virtual = offset * 16 / bpp;
-+      yres_virtual = fix->smem_len / (offset * 2);
-+
-+      var->xres = xres;
-+      var->yres = yres;
-+      var->xres_virtual = xres_virtual;
-+      var->yres_virtual = yres_virtual;
-+      var->xoffset = var->yoffset = 0;
-+
-+      fix->line_length = offset * 2;
-+
-+      fix->xpanstep = 0;      /* no pan yet */
-+      fix->ypanstep = 1;
-+      fix->ywrapstep = 0;
-+      fix->accel = FB_ACCEL_NONE;
-+
-+      var->grayscale = !is_color;
--      /* reading is terribly slow for us */
--#if 0 /* XXX: need to work out why this doesn't work */
--      e1355_dispsw.bmove = fbcon_redraw_bmove;
-+#ifdef DEBUG
-+      printk(KERN_INFO
-+             "epson1355fb: xres=%d, yres=%d, "
-+             "is_color=%d, is_dual=%d, is_tft=%d\n",
-+             xres, yres, is_color, is_dual, is_tft);
-+      printk(KERN_INFO
-+             "epson1355fb: bpp=%d, lcd_bpp=%d, "
-+             "crt_enabled=%d, lcd_enabled=%d\n",
-+             bpp, lcd_bpp, crt_enabled, lcd_enabled);
- #endif
- }
--/* ------------ Interfaces to hardware functions ------------ */
-+static void clearfb16(struct fb_info *info)
-+{
-+      u16 *dst = (u16 *) info->screen_base;
-+      unsigned long n = info->fix.smem_len;
--struct fbgen_hwswitch e1355_switch = {
--      .detect =       e1355_detect,
--      .encode_fix =   e1355_encode_fix,
--      .decode_var =   e1355_decode_var,
--      .encode_var =   e1355_encode_var,
--      .get_par =      e1355_get_par,
--      .set_par =      e1355_set_par,
--      .getcolreg =    e1355_getcolreg,
--      .pan_display =  e1355_pan_display,
--      .blank =        e1355_blank,
--      .set_disp =     e1355_set_disp,
--};
-+      while (n > 1) {
-+              fb_writew(0, dst);
-+              dst++, n -= 2;
-+      }
-+      if (n)
-+              fb_writeb(0, dst);
-+}
--/* ------------ Hardware Independent Functions ------------ */
-+static void epson1355fb_deinit(void);
-+int __init epson1355fb_init(void)
-+{
-+      u8 revision;
-+      int rc = 0;
--static struct fb_ops e1355fb_ops = {
--      .owner =        THIS_MODULE,
--      .fb_get_fix =   fbgen_get_fix,
--      .fb_get_var =   fbgen_get_var,
--      .fb_set_var =   fbgen_set_var,
--      .fb_get_cmap =  fbgen_get_cmap,
--      .fb_set_cmap =  gen_set_cmap,
--      .fb_setcolreg = e1355fb_setcolreg,
--      .fb_pan_display =fbgen_pan_display,
--      .fb_blank =     fbgen_blank,
--};
-+      if (!request_mem_region
-+          (EPSON1355FB_REGS_PHYS, EPSON1355FB_REGS_LEN,
-+           "S1D13505 registers")) {
-+              printk(KERN_ERR "epson1355fb: unable to reserve "
-+                     "registers at 0x%0x\n", EPSON1355FB_REGS_PHYS);
-+              rc = -EBUSY;
-+              goto bail;
-+      }
--static struct e1355fb_info fb_info;
-+      if (!request_mem_region(EPSON1355FB_FB_PHYS, EPSON1355FB_FB_LEN,
-+                              "S1D13505 framebuffer")) {
-+              printk(KERN_ERR "epson1355fb: unable to reserve "
-+                     "framebuffer at 0x%0x\n", EPSON1355FB_FB_PHYS);
-+              rc = -EBUSY;
-+              goto bail;
-+      }
-+
-+      par.reg_addr = (unsigned long)
-+          ioremap(EPSON1355FB_REGS_PHYS, EPSON1355FB_REGS_LEN);
-+      if (!par.reg_addr) {
-+              printk(KERN_ERR "epson1355fb: unable to map registers\n");
-+              rc = -ENOMEM;
-+              goto bail;
-+      }
-+
-+      info.screen_base =
-+          ioremap(EPSON1355FB_FB_PHYS, EPSON1355FB_FB_LEN);
-+      if (!info.screen_base) {
-+              printk(KERN_ERR
-+                     "epson1355fb: unable to map framebuffer\n");
-+              rc = -ENOMEM;
-+              goto bail;
-+      }
-+
-+      revision = epson1355_read_reg(REG_REVISION_CODE);
-+      if ((revision >> 2) != 3) {
-+              printk(KERN_INFO "epson1355fb: epson1355 not found\n");
-+              rc = -ENODEV;
-+              goto bail;
-+      }
-+
-+      info.fix.mmio_start = EPSON1355FB_REGS_PHYS;
-+      info.fix.mmio_len = EPSON1355FB_REGS_LEN;
-+      info.fix.smem_start = EPSON1355FB_FB_PHYS;
-+      info.fix.smem_len = get_fb_size(&info);
-+
-+      printk(KERN_INFO
-+             "epson1355fb: regs mapped at 0x%lx, fb %d KiB mapped at 0x%p\n",
-+             par.reg_addr, info.fix.smem_len / 1024, info.screen_base);
-+
-+      strcpy(info.fix.id, "S1D13505");
-+      info.par = &par;
-+      info.node = NODEV;
-+      info.fbops = &epson1355fb_fbops;
-+      info.flags = FBINFO_FLAG_DEFAULT;
-+
-+      /* we expect the boot loader to have initialized the chip
-+         with appropriate parameters from which we can determinte
-+         the flavor of lcd panel attached */
-+      fetch_hw_state(&info);
-+
-+      /* turn this puppy on ... */
-+      clearfb16(&info);
-+      backlight_enable(1);
-+      lcd_enable(1);
-+
-+      if (register_framebuffer(&info) < 0) {
-+              rc = -EINVAL;
-+              goto bail;
-+      }
-+
-+      printk(KERN_INFO "fb%d: %s frame buffer device\n",
-+             minor(info.node), info.fix.id);
--int __init e1355fb_setup(char *str)
--{
-       return 0;
-+
-+      bail:
-+      epson1355fb_deinit();
-+      return rc;
- }
--int __init e1355fb_init(void)
-+static void epson1355fb_deinit(void)
- {
--      fb_info.gen.fbhw = &e1355_switch;
--      fb_info.gen.fbhw->detect();
--      strcpy(fb_info.gen.info.modename, "SED1355");
--      fb_info.gen.info.changevar = NULL;
--      fb_info.gen.info.fbops = &e1355fb_ops;
--      fb_info.gen.info.screen_base = (void *)E1355_FB_BASE;
--      fb_info.gen.currcon = -1;
--      fb_info.gen.info.disp = &disp;
--      fb_info.gen.parsize = sizeof(struct e1355_par);
--      fb_info.gen.info.switch_con = &fbgen_switch;
--      fb_info.gen.info.updatevar = &fbgen_update_var;
--      fb_info.gen.info.flags = FBINFO_FLAG_DEFAULT;
--      /* This should give a reasonable default video mode */
--      fbgen_get_var(&disp.var, -1, &fb_info.gen.info);
--      fbgen_do_set_var(&disp.var, 1, &fb_info.gen);
--      fbgen_set_disp(-1, &fb_info.gen);
--      if (disp.var.bits_per_pixel > 1) 
--              do_install_cmap(0, &fb_info.gen);
--      if (register_framebuffer(&fb_info.gen.info) < 0)
--              return -EINVAL;
--      printk(KERN_INFO "fb%d: %s frame buffer device\n", fb_info.gen.info.node,
--             fb_info.gen.info.modename);
-+      fb_dealloc_cmap(&info.cmap);
--      return 0;
-+      if (info.screen_base)
-+              iounmap(info.screen_base);
-+      if (par.reg_addr)
-+              iounmap((void *) par.reg_addr);
-+
-+      release_mem_region(EPSON1355FB_FB_PHYS, EPSON1355FB_FB_LEN);
-+      release_mem_region(EPSON1355FB_REGS_PHYS, EPSON1355FB_REGS_LEN);
- }
-+static void __exit epson1355fb_cleanup(void)
-+{
-+      backlight_enable(0);
-+      lcd_enable(0);
--    /*
--     *  Cleanup
--     */
--
--void e1355fb_cleanup(struct fb_info *info)
--{
--      /*
--       *  If your driver supports multiple boards, you should unregister and
--       *  clean up all instances.
--       */
--      
--      unregister_framebuffer(info);
--      /* ... */
-+      unregister_framebuffer(&info);
-+      epson1355fb_deinit();
- }
-+/* ------------------------------------------------------------------------- */
-+
-+#ifdef MODULE
-+module_init(epson1355fb_init);
-+#endif
-+module_exit(epson1355fb_cleanup);
-+
-+MODULE_AUTHOR("Christopher Hoover <ch@hpl.hp.com>");
-+MODULE_DESCRIPTION("Framebuffer driver for Epson S1D13505");
- MODULE_LICENSE("GPL");
---- linux-2.6.0-test1/drivers/video/fbmem.c    2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/video/fbmem.c   2003-07-19 17:04:55.000000000 -0700
-@@ -25,7 +25,6 @@
- #include <linux/mman.h>
- #include <linux/tty.h>
- #include <linux/init.h>
--#include <linux/linux_logo.h>
- #include <linux/proc_fs.h>
- #ifdef CONFIG_KMOD
- #include <linux/kmod.h>
-@@ -102,13 +101,13 @@ extern int hgafb_setup(char*);
- extern int matroxfb_init(void);
- extern int matroxfb_setup(char*);
- extern int hpfb_init(void);
--extern int control_init(void);
--extern int control_setup(char*);
--extern int platinum_init(void);
--extern int platinum_setup(char*);
-+extern int controlfb_init(void);
-+extern int controlfb_setup(char*);
-+extern int platinumfb_init(void);
-+extern int platinumfb_setup(char*);
- extern int valkyriefb_init(void);
- extern int valkyriefb_setup(char*);
--extern int chips_init(void);
-+extern int chipsfb_init(void);
- extern int g364fb_init(void);
- extern int sa1100fb_init(void);
- extern int fm2fb_init(void);
-@@ -135,8 +134,7 @@ extern int tx3912fb_init(void);
- extern int tx3912fb_setup(char*);
- extern int radeonfb_init(void);
- extern int radeonfb_setup(char*);
--extern int e1355fb_init(void);
--extern int e1355fb_setup(char*);
-+extern int epson1355fb_init(void);
- extern int pvr2fb_init(void);
- extern int pvr2fb_setup(char*);
- extern int sstfb_init(void);
-@@ -218,16 +216,16 @@ static struct {
-       { "radeonfb", radeonfb_init, radeonfb_setup },
- #endif
- #ifdef CONFIG_FB_CONTROL
--      { "controlfb", control_init, control_setup },
-+      { "controlfb", controlfb_init, controlfb_setup },
- #endif
- #ifdef CONFIG_FB_PLATINUM
--      { "platinumfb", platinum_init, platinum_setup },
-+      { "platinumfb", platinumfb_init, platinumfb_setup },
- #endif
- #ifdef CONFIG_FB_VALKYRIE
-       { "valkyriefb", valkyriefb_init, valkyriefb_setup },
- #endif
- #ifdef CONFIG_FB_CT65550
--      { "chipsfb", chips_init, NULL },
-+      { "chipsfb", chipsfb_init, NULL },
- #endif
- #ifdef CONFIG_FB_IMSTT
-       { "imsttfb", imsttfb_init, imsttfb_setup },
-@@ -342,8 +340,8 @@ static struct {
- #ifdef CONFIG_FB_TX3912
-       { "tx3912fb", tx3912fb_init, tx3912fb_setup },
- #endif
--#ifdef CONFIG_FB_E1355
--      { "e1355fb", e1355fb_init, e1355fb_setup },
-+#ifdef CONFIG_FB_EPSON1355
-+      { "s1d1355fb", epson1355fb_init, NULL },
- #endif
- #ifdef CONFIG_FB_PVR2
-       { "pvr2fb", pvr2fb_init, pvr2fb_setup },
-@@ -409,20 +407,20 @@ void sys_outbuf(u8 *src, u8 *dst, unsign
-       memcpy(dst, src, size);
- }     
--void move_buf_aligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch, 
--                      u32 s_pitch, u32 height)
-+void move_buf_aligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src,
-+                      u32 d_pitch, u32 s_pitch, u32 height)
- {
-       int i;
-       for (i = height; i--; ) {
--              info->pixmap.outbuf(src, dst, s_pitch);
-+              buf->outbuf(src, dst, s_pitch);
-               src += s_pitch;
-               dst += d_pitch;
-       }
- }
--void move_buf_unaligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch, 
--                      u32 height, u32 mask, u32 shift_high, u32 shift_low,
-+void move_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src, 
-+                      u32 d_pitch, u32 height, u32 mask, u32 shift_high, u32 shift_low,
-                       u32 mod, u32 idx)
- {
-       int i, j;
-@@ -430,21 +428,21 @@ void move_buf_unaligned(struct fb_info *
-       for (i = height; i--; ) {
-               for (j = 0; j < idx; j++) {
--                      tmp = info->pixmap.inbuf(dst+j);
-+                      tmp = buf->inbuf(dst+j);
-                       tmp &= mask;
-                       tmp |= *src >> shift_low;
--                      info->pixmap.outbuf(&tmp, dst+j, 1);
-+                      buf->outbuf(&tmp, dst+j, 1);
-                       tmp = *src << shift_high;
--                      info->pixmap.outbuf(&tmp, dst+j+1, 1);
-+                      buf->outbuf(&tmp, dst+j+1, 1);
-                       src++;
-               }
--              tmp = info->pixmap.inbuf(dst+idx);
-+              tmp = buf->inbuf(dst+idx);
-               tmp &= mask;
-               tmp |= *src >> shift_low;
--              info->pixmap.outbuf(&tmp, dst+idx, 1);
-+              buf->outbuf(&tmp, dst+idx, 1);
-               if (shift_high < mod) {
-                       tmp = *src << shift_high;
--                      info->pixmap.outbuf(&tmp, dst+idx+1, 1);
-+                      buf->outbuf(&tmp, dst+idx+1, 1);
-               }       
-               src++;
-               dst += d_pitch;
-@@ -455,26 +453,29 @@ void move_buf_unaligned(struct fb_info *
-  * we need to lock this section since fb_cursor
-  * may use fb_imageblit()
-  */
--u32 fb_get_buffer_offset(struct fb_info *info, u32 size)
-+char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size)
- {
--      u32 align = info->pixmap.buf_align - 1;
-+      u32 align = buf->buf_align - 1;
-       u32 offset, count = 1000;
-+      char *addr = buf->addr;
--      spin_lock(&info->pixmap.lock);
--      offset = info->pixmap.offset + align;
--      offset &= ~align;
--      if (offset + size > info->pixmap.size) {
--              while (atomic_read(&info->pixmap.count) && count--);
--              if (info->fbops->fb_sync && 
--                  info->pixmap.flags & FB_PIXMAP_SYNC)
--                      info->fbops->fb_sync(info);
--              offset = 0;
-+      spin_lock(&buf->lock);
-+      if (!(buf->flags & FB_PIXMAP_IO)) { 
-+              offset = buf->offset + align;
-+              offset &= ~align;
-+              if (offset + size > buf->size) {
-+                      while (atomic_read(&buf->count) && count--);
-+                      if (info->fbops->fb_sync && (buf->flags & FB_PIXMAP_SYNC))
-+                              info->fbops->fb_sync(info);
-+                      offset = 0;
-+              }
-+              buf->offset = offset + size;
-+              addr += offset; 
-       }
--      info->pixmap.offset = offset + size;
--      atomic_inc(&info->pixmap.count);        
-+      atomic_inc(&buf->count);
-       smp_mb__after_atomic_inc();
--      spin_unlock(&info->pixmap.lock);
--      return offset;
-+      spin_unlock(&buf->lock);
-+      return addr;
- }
- #ifdef CONFIG_LOGO
-@@ -656,7 +657,7 @@ int fb_prepare_logo(struct fb_info *info
-       }
-       /* Return if no suitable logo was found */
--      fb_logo.logo = fb_find_logo(info->var.bits_per_pixel);
-+      fb_logo.logo = find_logo(info->var.bits_per_pixel);
-       
-       if (!fb_logo.logo || fb_logo.logo->height > info->var.yres) {
-               fb_logo.logo = NULL;
-@@ -726,8 +727,6 @@ int fb_show_logo(struct fb_info *info)
-            x <= info->var.xres-fb_logo.logo->width; x += (fb_logo.logo->width + 8)) {
-               image.dx = x;
-               info->fbops->fb_imageblit(info, &image);
--              //atomic_dec(&info->pixmap.count);
--              //smp_mb__after_atomic_dec();
-       }
-       
-       if (palette != NULL)
-@@ -1238,6 +1237,22 @@ register_framebuffer(struct fb_info *fb_
-               fb_info->pixmap.inbuf = sys_inbuf;
-       spin_lock_init(&fb_info->pixmap.lock);
-+      if (fb_info->sprite.addr == NULL) {
-+              fb_info->sprite.addr = kmalloc(FBPIXMAPSIZE, GFP_KERNEL);
-+              if (fb_info->sprite.addr) {
-+                      fb_info->sprite.size = FBPIXMAPSIZE;
-+                      fb_info->sprite.buf_align = 1;
-+                      fb_info->sprite.scan_align = 1;
-+                      fb_info->sprite.flags = FB_PIXMAP_IO;
-+              }
-+      }       
-+      fb_info->sprite.offset = 0;
-+      if (fb_info->sprite.outbuf == NULL)
-+              fb_info->sprite.outbuf = sys_outbuf;
-+      if (fb_info->sprite.inbuf == NULL)
-+              fb_info->sprite.inbuf = sys_inbuf;
-+      spin_lock_init(&fb_info->sprite.lock);
-+
-       registered_fb[i] = fb_info;
-       devfs_mk_cdev(MKDEV(FB_MAJOR, i),
---- linux-2.6.0-test1/drivers/video/g364fb.c   2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/video/g364fb.c  2003-07-19 17:04:55.000000000 -0700
-@@ -127,20 +127,55 @@ static struct fb_ops g364fb_ops = {
- int g364fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
- {
-+
-+      /* Turn the cursor off before we start changing it. */
-+      *(unsigned int *) CTLA_REG |= CURS_TOGGLE;
-+
-+      if (cursor->set & FB_CUR_SETHOT)
-+              info->cursor.hot = cursor->hot;
-       
--      switch (cursor->enable) {
--      case CM_ERASE:
--              *(unsigned int *) CTLA_REG |= CURS_TOGGLE;
--              break;
-+      if (cursor->set & FB_CUR_SETPOS) {
-+              unsigned int tmp;
-+              
-+              info->cursor.image.dx = cursor->image.dx;
-+              info->cursor.image.dy = cursor->image.dy;
-+
-+              tmp = cursor->image.dy - info->var.yoffset;
-+              tmp |= (cursor->image.dx - info->var.xoffset) << 12;    
-+              
-+              *(unsigned int *) CURS_POS_REG = tmp;
-+      }
--      case CM_MOVE:
--      case CM_DRAW:
-+      if (cursor->set & FB_CUR_SETSIZE) {
-+              info->cursor.image.height = cursor->image.height;
-+              info->cursor.image.width = cursor->image.width;
-+      
-+              /* set the whole cursor to transparent */
-+              for (i = 0; i < 512; i++)
-+                      *(unsigned short *) (CURS_PAT_REG + i * 8) = 0;
-+      }       
-+
-+      if (cursor->set & FB_CUR_SETCMAP) {
-+              volatile unsigned int *curs_pal_ptr =
-+                              (volatile unsigned int *) CURS_PAL_REG;
-+
-+              /* setup cursor */
-+              curs_pal_ptr[0] |= 0x00ffffff;
-+              curs_pal_ptr[2] |= 0x00ffffff;
-+              curs_pal_ptr[4] |= 0x00ffffff;
-+      }       
-+      
-+      if (cursor->set & FB_CUR_SETSHAPE) {
-+              /*
-+               * switch the last two lines to cursor palette 3
-+               * we assume here, that FONTSIZE_X is 8
-+               */
-+              *(unsigned short *) (CURS_PAT_REG + 14 * 64) = 0xffff;
-+              *(unsigned short *) (CURS_PAT_REG + 15 * 64) = 0xffff;
-+      }       
-+      
-+      if (info->cursor.enable)
-               *(unsigned int *) CTLA_REG &= ~CURS_TOGGLE;
--              *(unsigned int *) CURS_POS_REG =
--                  ((x * fontwidth(p)) << 12) | ((y * fontheight(p)) -
--                                                info->var.yoffset);
--              break;
--      }
-       return 0;
- }
-@@ -196,10 +231,6 @@ static int g364fb_setcolreg(u_int regno,
-  */
- int __init g364fb_init(void)
- {
--      volatile unsigned int *pal_ptr =
--          (volatile unsigned int *) CLR_PAL_REG;
--      volatile unsigned int *curs_pal_ptr =
--          (volatile unsigned int *) CURS_PAL_REG;
-       int mem, i, j;
-       /* TBD: G364 detection */
-@@ -212,23 +243,6 @@ int __init g364fb_init(void)
-           (*((volatile unsigned int *) VDISPLAY_REG) & 0x00ffffff) / 2;
-       *(volatile unsigned int *) CTLA_REG |= ENABLE_VTG;
--      /* setup cursor */
--      curs_pal_ptr[0] |= 0x00ffffff;
--      curs_pal_ptr[2] |= 0x00ffffff;
--      curs_pal_ptr[4] |= 0x00ffffff;
--
--      /*
--       * first set the whole cursor to transparent
--       */
--      for (i = 0; i < 512; i++)
--              *(unsigned short *) (CURS_PAT_REG + i * 8) = 0;
--
--      /*
--       * switch the last two lines to cursor palette 3
--       * we assume here, that FONTSIZE_X is 8
--       */
--      *(unsigned short *) (CURS_PAT_REG + 14 * 64) = 0xffff;
--      *(unsigned short *) (CURS_PAT_REG + 15 * 64) = 0xffff;
-       fb_var.xres_virtual = fbvar.xres;
-       fb_fix.line_length = (xres / 8) * fb_var.bits_per_pixel;
-       fb_fix.smem_start = 0x40000000; /* physical address */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/video/i2c.c     2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,333 @@
-+/*
-+ *   Generic i2c interface for the framebuffer layer 
-+ *
-+ *   (c) 2003 "Crazy" James Simmons <jsimmons@infradead.org>
-+ *    Based on the ALSA i2c interface 
-+ *            Gerd Knorr <kraxel@cs.tu-berlin.de>
-+ *            Jaroslav Kysela <perex@suse.cz>
-+ *
-+ *   This program is free software; you can redistribute it and/or modify
-+ *   it under the terms of the GNU General Public License as published by
-+ *   the Free Software Foundation; either version 2 of the License, or
-+ *   (at your option) any later version.
-+ *
-+ *   This program is distributed in the hope that it will be useful,
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *   GNU General Public License for more details.
-+ *
-+ *   You should have received a copy of the GNU General Public License
-+ *   along with this program; if not, write to the Free Software
-+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/string.h>
-+#include <linux/errno.h>
-+#include <linux/fb.h>
-+#include "i2c.h"
-+
-+MODULE_AUTHOR("James Simmons <jsimmons@infradead.org>");
-+MODULE_DESCRIPTION("Generic i2c interface for the Framebuffer layer");
-+MODULE_LICENSE("GPL");
-+
-+static int fb_i2c_bit_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+static int fb_i2c_bit_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+static int fb_i2c_bit_probeaddr(fb_i2c_bus_t *bus, unsigned short addr);
-+
-+static fb_i2c_ops_t fb_i2c_bit_ops = {
-+      .sendbytes = fb_i2c_bit_sendbytes,
-+      .readbytes = fb_i2c_bit_readbytes,
-+      .probeaddr = fb_i2c_bit_probeaddr,
-+};
-+
-+static int fb_i2c_bus_free(fb_i2c_bus_t *bus)
-+{
-+      fb_i2c_bus_t *slave;
-+      fb_i2c_device_t *device;
-+
-+      fb_assert(bus != NULL, return -EINVAL);
-+      while (!list_empty(&bus->devices)) {
-+              device = fb_i2c_device(bus->devices.next);
-+              fb_i2c_device_free(device);
-+      }
-+      if (bus->master)
-+              list_del(&bus->buses);
-+      else {
-+              while (!list_empty(&bus->buses)) {
-+                      slave = fb_i2c_slave_bus(bus->buses.next);
-+                      fb_device_free(bus->card, slave);
-+              }
-+      }
-+      if (bus->private_free)
-+              bus->private_free(bus);
-+      fb_magic_kfree(bus);
-+      return 0;
-+}
-+
-+static int fb_i2c_bus_dev_free(fb_device_t *device)
-+{
-+      fb_i2c_bus_t *bus = fb_magic_cast(fb_i2c_bus_t, device->device_data, return -ENXIO);
-+      return fb_i2c_bus_free(bus);
-+}
-+
-+int fb_i2c_bus_create(fb_card_t *card, const char *name, fb_i2c_bus_t *master, fb_i2c_bus_t **ri2c)
-+{
-+      static fb_device_ops_t ops = {
-+              .dev_free =     fb_i2c_bus_dev_free,
-+      };
-+      fb_i2c_bus_t *bus;
-+      int err;
-+      
-+      *ri2c = NULL;
-+      bus = (fb_i2c_bus_t *)fb_magic_kcalloc(fb_i2c_bus_t, 0, GFP_KERNEL);
-+      if (bus == NULL)
-+              return -ENOMEM;
-+      spin_lock_init(&bus->lock);
-+      INIT_LIST_HEAD(&bus->devices);
-+      INIT_LIST_HEAD(&bus->buses);
-+      bus->card = card;
-+      bus->ops = &fb_i2c_bit_ops;
-+      if (master) {
-+              list_add_tail(&bus->buses, &master->buses);
-+              bus->master = master;
-+      }
-+      strlcpy(bus->name, name, sizeof(bus->name));
-+      if ((err = fb_device_new(card, SNDRV_DEV_LOWLEVEL, bus, &ops)) < 0) {
-+              fb_i2c_bus_free(bus);
-+              return err;
-+      }
-+      *ri2c = bus;
-+      return 0;
-+}
-+
-+int fb_i2c_device_create(fb_i2c_bus_t *bus, const char *name, unsigned char addr, fb_i2c_device_t **rdevice)
-+{
-+      fb_i2c_device_t *device;
-+
-+      *rdevice = NULL;
-+      fb_assert(bus != NULL, return -EINVAL);
-+      device = (fb_i2c_device_t *)fb_magic_kcalloc(fb_i2c_device_t, 0, GFP_KERNEL);
-+      if (device == NULL)
-+              return -ENOMEM;
-+      device->addr = addr;
-+      strlcpy(device->name, name, sizeof(device->name));
-+      list_add_tail(&device->list, &bus->devices);
-+      device->bus = bus;
-+      *rdevice = device;
-+      return 0;
-+}
-+
-+int fb_i2c_device_free(fb_i2c_device_t *device)
-+{
-+      if (device->bus)
-+              list_del(&device->list);
-+      if (device->private_free)
-+              device->private_free(device);
-+      fb_magic_kfree(device);
-+      return 0;
-+}
-+
-+int fb_i2c_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+      return device->bus->ops->sendbytes(device, bytes, count);
-+}
-+
-+
-+int fb_i2c_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+      return device->bus->ops->readbytes(device, bytes, count);
-+}
-+
-+int fb_i2c_probeaddr(fb_i2c_bus_t *bus, unsigned short addr)
-+{
-+      return bus->ops->probeaddr(bus, addr);
-+}
-+
-+/*
-+ *  bit-operations
-+ */
-+
-+static inline void fb_i2c_bit_hw_start(fb_i2c_bus_t *bus)
-+{
-+      if (bus->hw_ops.bit->start)
-+              bus->hw_ops.bit->start(bus);
-+}
-+
-+static inline void fb_i2c_bit_hw_stop(fb_i2c_bus_t *bus)
-+{
-+      if (bus->hw_ops.bit->stop)
-+              bus->hw_ops.bit->stop(bus);
-+}
-+
-+static void fb_i2c_bit_direction(fb_i2c_bus_t *bus, int clock, int data)
-+{
-+      if (bus->hw_ops.bit->direction)
-+              bus->hw_ops.bit->direction(bus, clock, data);
-+}
-+
-+static void fb_i2c_bit_set(fb_i2c_bus_t *bus, int clock, int data)
-+{
-+      bus->hw_ops.bit->setlines(bus, clock, data);
-+}
-+
-+#if 0
-+static int fb_i2c_bit_clock(fb_i2c_bus_t *bus)
-+{
-+      if (bus->hw_ops.bit->getclock)
-+              return bus->hw_ops.bit->getclock(bus);
-+      return -ENXIO;
-+}
-+#endif
-+
-+static int fb_i2c_bit_data(fb_i2c_bus_t *bus, int ack)
-+{
-+      return bus->hw_ops.bit->getdata(bus, ack);
-+}
-+
-+static void fb_i2c_bit_start(fb_i2c_bus_t *bus)
-+{
-+      fb_i2c_bit_hw_start(bus);
-+      fb_i2c_bit_direction(bus, 1, 1);        /* SCL - wr, SDA - wr */
-+      fb_i2c_bit_set(bus, 1, 1);
-+      fb_i2c_bit_set(bus, 1, 0);
-+      fb_i2c_bit_set(bus, 0, 0);
-+}
-+
-+static void fb_i2c_bit_stop(fb_i2c_bus_t *bus)
-+{
-+      fb_i2c_bit_set(bus, 0, 0);
-+      fb_i2c_bit_set(bus, 1, 0);
-+      fb_i2c_bit_set(bus, 1, 1);
-+      fb_i2c_bit_hw_stop(bus);
-+}
-+
-+static void fb_i2c_bit_send(fb_i2c_bus_t *bus, int data)
-+{
-+      fb_i2c_bit_set(bus, 0, data);
-+      fb_i2c_bit_set(bus, 1, data);
-+      fb_i2c_bit_set(bus, 0, data);
-+}
-+
-+static int fb_i2c_bit_ack(fb_i2c_bus_t *bus)
-+{
-+      int ack;
-+
-+      fb_i2c_bit_set(bus, 0, 1);
-+      fb_i2c_bit_set(bus, 1, 1);
-+      fb_i2c_bit_direction(bus, 1, 0);        /* SCL - wr, SDA - rd */
-+      ack = fb_i2c_bit_data(bus, 1);
-+      fb_i2c_bit_direction(bus, 1, 1);        /* SCL - wr, SDA - wr */
-+      fb_i2c_bit_set(bus, 0, 1);
-+      return ack ? -EIO : 0;
-+}
-+
-+static int fb_i2c_bit_sendbyte(fb_i2c_bus_t *bus, unsigned char data)
-+{
-+      int i, err;
-+
-+      for (i = 7; i >= 0; i--)
-+              fb_i2c_bit_send(bus, !!(data & (1 << i)));
-+      if ((err = fb_i2c_bit_ack(bus)) < 0)
-+              return err;
-+      return 0;
-+}
-+
-+static int fb_i2c_bit_readbyte(fb_i2c_bus_t *bus, int last)
-+{
-+      int i;
-+      unsigned char data = 0;
-+
-+      fb_i2c_bit_set(bus, 0, 1);
-+      fb_i2c_bit_direction(bus, 1, 0);        /* SCL - wr, SDA - rd */
-+      for (i = 7; i >= 0; i--) {
-+              fb_i2c_bit_set(bus, 1, 1);
-+              if (fb_i2c_bit_data(bus, 0))
-+                      data |= (1 << i);
-+              fb_i2c_bit_set(bus, 0, 1);
-+      }
-+      fb_i2c_bit_direction(bus, 1, 1);        /* SCL - wr, SDA - wr */
-+      fb_i2c_bit_send(bus, !!last);
-+      return data;
-+}
-+
-+static int fb_i2c_bit_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+      fb_i2c_bus_t *bus = device->bus;
-+      int err, res = 0;
-+
-+      if (device->flags & FB_I2C_DEVICE_ADDRTEN)
-+              return -EIO;            /* not yet implemented */
-+      fb_i2c_bit_start(bus);
-+      if ((err = fb_i2c_bit_sendbyte(bus, device->addr << 1)) < 0) {
-+              fb_i2c_bit_hw_stop(bus);
-+              return err;
-+      }
-+      while (count-- > 0) {
-+              if ((err = fb_i2c_bit_sendbyte(bus, *bytes++)) < 0) {
-+                      fb_i2c_bit_hw_stop(bus);
-+                      return err;
-+              }
-+              res++;
-+      }
-+      fb_i2c_bit_stop(bus);
-+      return res;
-+}
-+
-+static int fb_i2c_bit_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count)
-+{
-+      fb_i2c_bus_t *bus = device->bus;
-+      int err, res = 0;
-+
-+      if (device->flags & FB_I2C_DEVICE_ADDRTEN)
-+              return -EIO;            /* not yet implemented */
-+      fb_i2c_bit_start(bus);
-+      if ((err = fb_i2c_bit_sendbyte(bus, (device->addr << 1) | 1)) < 0) {
-+              fb_i2c_bit_hw_stop(bus);
-+              return err;
-+      }
-+      while (count-- > 0) {
-+              if ((err = fb_i2c_bit_readbyte(bus, count == 0)) < 0) {
-+                      fb_i2c_bit_hw_stop(bus);
-+                      return err;
-+              }
-+              *bytes++ = (unsigned char)err;
-+              res++;
-+      }
-+      fb_i2c_bit_stop(bus);
-+      return res;
-+}
-+
-+static int fb_i2c_bit_probeaddr(fb_i2c_bus_t *bus, unsigned short addr)
-+{
-+      int err;
-+
-+      if (addr & 0x8000)      /* 10-bit address */
-+              return -EIO;    /* not yet implemented */
-+      if (addr & 0x7f80)      /* invalid address */
-+              return -EINVAL;
-+      fb_i2c_bit_start(bus);
-+      err = fb_i2c_bit_sendbyte(bus, addr << 1);
-+      fb_i2c_bit_stop(bus);
-+      return err;
-+}
-+
-+EXPORT_SYMBOL(fb_i2c_bus_create);
-+EXPORT_SYMBOL(fb_i2c_device_create);
-+EXPORT_SYMBOL(fb_i2c_device_free);
-+EXPORT_SYMBOL(fb_i2c_sendbytes);
-+EXPORT_SYMBOL(fb_i2c_readbytes);
-+EXPORT_SYMBOL(fb_i2c_probeaddr);
-+
-+static int __init alsa_i2c_init(void)
-+{
-+      return 0;
-+}
-+
-+static void __exit alsa_i2c_exit(void)
-+{
-+}
-+
-+module_init(alsa_i2c_init)
-+module_exit(alsa_i2c_exit)
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/drivers/video/i2c.h     2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,102 @@
-+#ifndef __FB_I2C_H
-+#define __FB_I2C_H
-+
-+/*
-+ *
-+ *
-+ *   This program is free software; you can redistribute it and/or modify
-+ *   it under the terms of the GNU General Public License as published by
-+ *   the Free Software Foundation; either version 2 of the License, or
-+ *   (at your option) any later version.
-+ *
-+ *   This program is distributed in the hope that it will be useful,
-+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *   GNU General Public License for more details.
-+ *
-+ *   You should have received a copy of the GNU General Public License
-+ *   along with this program; if not, write to the Free Software
-+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-+ *
-+ *
-+ */
-+
-+typedef struct _fb_i2c_device fb_i2c_device_t;
-+typedef struct _fb_i2c_bus fb_i2c_bus_t;
-+
-+#define FB_I2C_DEVICE_ADDRTEN (1<<0)  /* 10-bit I2C address */
-+
-+struct _fb_i2c_device {
-+      struct list_head list;
-+      fb_i2c_bus_t *bus;      /* I2C bus */
-+      char name[32];          /* some useful device name */
-+      unsigned short flags;   /* device flags */
-+      unsigned short addr;    /* device address (might be 10-bit) */
-+      unsigned long private_value;
-+      void *private_data;
-+      void (*private_free)(fb_i2c_device_t *device);
-+};
-+
-+#define fb_i2c_device(n) list_entry(n, fb_i2c_device_t, list)
-+
-+typedef struct _fb_i2c_bit_ops {
-+      void (*start)(fb_i2c_bus_t *bus);       /* transfer start */
-+      void (*stop)(fb_i2c_bus_t *bus);        /* transfer stop */
-+      void (*direction)(fb_i2c_bus_t *bus, int clock, int data);  /* set line direction (0 = write, 1 = read) */
-+      void (*setlines)(fb_i2c_bus_t *bus, int clock, int data);
-+      int (*getclock)(fb_i2c_bus_t *bus);
-+      int (*getdata)(fb_i2c_bus_t *bus, int ack);
-+} fb_i2c_bit_ops_t;
-+
-+typedef struct _fb_i2c_ops {
-+      int (*sendbytes)(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+      int (*readbytes)(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+      int (*probeaddr)(fb_i2c_bus_t *bus, unsigned short addr);
-+} fb_i2c_ops_t;
-+
-+struct _fb_i2c_bus {
-+      fb_card_t *card;        /* card which I2C belongs to */
-+      char name[32];          /* some useful label */
-+
-+      spinlock_t lock;
-+
-+      fb_i2c_bus_t *master;   /* master bus when SCK/SCL is shared */
-+      struct list_head buses; /* master: slave buses sharing SCK/SCL, slave: link list */
-+
-+      struct list_head devices; /* attached devices to this bus */
-+
-+      union {
-+              fb_i2c_bit_ops_t *bit;
-+              void *ops;
-+      } hw_ops;               /* lowlevel operations */
-+      fb_i2c_ops_t *ops;      /* midlevel operations */
-+
-+      unsigned long private_value;
-+      void *private_data;
-+      void (*private_free)(fb_i2c_bus_t *bus);
-+};
-+
-+#define fb_i2c_slave_bus(n) list_entry(n, fb_i2c_bus_t, buses)
-+
-+int fb_i2c_bus_create(fb_card_t *card, const char *name, fb_i2c_bus_t *master, fb_i2c_bus_t **ri2c);
-+int fb_i2c_device_create(fb_i2c_bus_t *bus, const char *name, unsigned char addr, fb_i2c_device_t **rdevice);
-+int fb_i2c_device_free(fb_i2c_device_t *device);
-+
-+static inline void fb_i2c_lock(fb_i2c_bus_t *bus) {
-+      if (bus->master)
-+              spin_lock(&bus->master->lock);
-+      else
-+              spin_lock(&bus->lock);
-+}
-+static inline void fb_i2c_unlock(fb_i2c_bus_t *bus) {
-+      if (bus->master)
-+              spin_unlock(&bus->master->lock);
-+      else
-+              spin_unlock(&bus->lock);
-+}
-+
-+int fb_i2c_sendbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+int fb_i2c_readbytes(fb_i2c_device_t *device, unsigned char *bytes, int count);
-+int fb_i2c_probeaddr(fb_i2c_bus_t *bus, unsigned short addr);
-+
-+#endif /* __FB_I2C_H */
---- linux-2.6.0-test1/drivers/video/Kconfig    2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/video/Kconfig   2003-07-19 17:04:55.000000000 -0700
-@@ -423,35 +423,15 @@ config FB_PVR2_DEBUG
-         messages. Most people will want to say N here. If unsure, you will
-         also want to say N.
--config FB_E1355
-+config FB_EPSON1355
-       bool "Epson 1355 framebuffer support"
--      depends on FB && SUPERH
-+      depends on FB && (SUPERH || ARCH_CEIVA)
-       help
-         Build in support for the SED1355 Epson Research Embedded RAMDAC
-         LCD/CRT Controller (since redesignated as the S1D13505) as a
-         framebuffer.  Product specs at
-         <http://www.erd.epson.com/vdc/html/products.htm>.
--config E1355_REG_BASE
--      hex "Register Base Address"
--      depends on FB_E1355
--      default "a8000000"
--      help
--        Epson SED1355/S1D13505 LCD/CRT controller register base address.
--        See the manuals at
--        <http://www.erd.epson.com/vdc/html/contents/S1D13505.htm> for
--        discussion.
--
--config E1355_FB_BASE
--      hex "Framebuffer Base Address"
--      depends on FB_E1355
--      default "a8200000"
--      help
--        Epson SED1355/S1D13505 LCD/CRT controller memory base address.  See
--        the manuals at
--        <http://www.erd.epson.com/vdc/html/contents/S1D13505.htm> for
--        discussion.
--
- config FB_RIVA
-       tristate "nVidia Riva support"
-       depends on FB && PCI
-@@ -725,23 +705,43 @@ config FB_SIS
-       tristate "SIS acceleration"
-       depends on FB && PCI
-       help
--        This is the frame buffer device driver for the SiS 630 and 640 Super
--        Socket 7 UMA cards.  Specs available at <http://www.sis.com.tw/>.
-+        This is the frame buffer device driver for SiS VGA chipsets. It
-+        supports the SiS 300, 540, 630, 730, 315, 550, 650, M650, 651,
-+        740 and possibly (because untested) the Xabre (SiS330).
-+
-+        Specs available at <http://www.sis.com.tw/>.
-+
-+        See <http://www.winischhofer.net/linuxsisvga.shtml> for
-+        documentation and updates.
-+
-+        The driver is also available as a module ( = code which can be
-+        inserted and removed from the running kernel whenever you want). The
-+        module will be called sisfb. If you want to compile it as a
-+        module, say M here and read Documentation/modules.txt.
- config FB_SIS_300
--      bool "SIS 630/540/730 support"
-+      bool "SIS 300/630/540/730 support"
-       depends on FB_SIS
-       help
--        This is the frame buffer device driver for the SiS 630 and related
--        Super Socket 7 UMA cards.  Specs available at
--        <http://www.sis.com.tw/>.
-+        This is the frame buffer device driver for the SiS 300, 540, 630
-+        and 730 VGA controllers.
-+
-+        Specs available at <http://www.sis.com.tw/>.
-+
-+        See <http://www.winischhofer.net/linuxsisvga.shtml> for
-+        documentation and updates.
- config FB_SIS_315
--      bool "SIS 315H/315 support"
-+      bool "SIS 315/550/65x/740/330 support"
-       depends on FB_SIS
-       help
--        This is the frame buffer device driver for the SiS 315 graphics
--        card.  Specs available at <http://www.sis.com.tw/>.
-+        This is the frame buffer device driver for the SiS 315, 550, 65x
-+        (650, 651, M650), 740 and Xabre (330) VGA controllers.
-+
-+        Specs available at <http://www.sis.com.tw/>.
-+
-+        See <http://www.winischhofer.net/linuxsisvga.shtml> for
-+        documentation and updates.
- config FB_NEOMAGIC
-       tristate "NeoMagic display support"
---- linux-2.6.0-test1/drivers/video/logo/logo.c        2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/video/logo/logo.c       2003-07-19 17:04:55.000000000 -0700
-@@ -32,8 +32,7 @@ extern const struct linux_logo logo_supe
- extern const struct linux_logo logo_superh_vga16;
- extern const struct linux_logo logo_superh_clut224;
--
--const struct linux_logo *fb_find_logo(int depth)
-+const struct linux_logo *find_logo(int depth)
- {
-       const struct linux_logo *logo = 0;
-@@ -66,7 +65,7 @@ const struct linux_logo *fb_find_logo(in
- #endif
- #ifdef CONFIG_LOGO_DEC_CLUT224
-               /* DEC Linux logo on MIPS/MIPS64 */
--              if (mips_machgroup == MACH_GROUP_SGI)
-+              if (mips_machgroup == MACH_GROUP_DEC)
-                       logo = &logo_dec_clut224;
- #endif
- #ifdef CONFIG_LOGO_MAC_CLUT224
---- linux-2.6.0-test1/drivers/video/macfb.c    2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/video/macfb.c   2003-07-19 17:04:55.000000000 -0700
-@@ -233,11 +233,11 @@ static int dafb_setpalette (unsigned int
-               
-               /* Loop until we get to the register we want */
-               for (i = 0; i < regno; i++) {
--                      nubus_writeb(info->cmap[i].red >> 8, &dafb_cmap_regs->lut);
-+                      nubus_writeb(info->cmap.red[i] >> 8, &dafb_cmap_regs->lut);
-                       nop();
--                      nubus_writeb(info->cmap[i].green >> 8, &dafb_cmap_regs->lut);
-+                      nubus_writeb(info->cmap.green[i] >> 8, &dafb_cmap_regs->lut);
-                       nop();
--                      nubus_writeb(info->cmap[i].blue >> 8, &dafb_cmap_regs->lut);
-+                      nubus_writeb(info->cmap.blue[i] >> 8, &dafb_cmap_regs->lut);
-                       nop();
-               }
-       }
-@@ -528,10 +528,10 @@ static int macfb_setcolreg(unsigned regn
-        *  != 0 for invalid regno.
-        */
-       
--      if (regno >= info->cmap.len)
-+      if (regno >= fb_info->cmap.len)
-               return 1;
--      switch (info->var.bits_per_pixel) {
-+      switch (fb_info->var.bits_per_pixel) {
-       case 1:
-               /* We shouldn't get here */
-               break;
-@@ -539,21 +539,21 @@ static int macfb_setcolreg(unsigned regn
-       case 4:
-       case 8:
-               if (macfb_setpalette)
--                      macfb_setpalette(regno, red, green, blue, info);
-+                      macfb_setpalette(regno, red, green, blue, fb_info);
-               else
-                       return 1;
-               break;
-       case 16:
--              if (info->var.red.offset == 10) {
-+              if (fb_info->var.red.offset == 10) {
-                       /* 1:5:5:5 */
--                      ((u32*) (info->pseudo_palette))[regno] =
-+                      ((u32*) (fb_info->pseudo_palette))[regno] =
-                                       ((red   & 0xf800) >>  1) |
-                                       ((green & 0xf800) >>  6) |
-                                       ((blue  & 0xf800) >> 11) |
-                                       ((transp != 0) << 15);
-               } else {
-                       /* 0:5:6:5 */
--                      ((u32*) (info->pseudo_palette))[regno] =
-+                      ((u32*) (fb_info->pseudo_palette))[regno] =
-                                       ((red   & 0xf800)      ) |
-                                       ((green & 0xfc00) >>  5) |
-                                       ((blue  & 0xf800) >> 11);
-@@ -565,19 +565,19 @@ static int macfb_setcolreg(unsigned regn
-               red   >>= 8;
-               green >>= 8;
-               blue  >>= 8;
--              ((u32 *)(info->pseudo_palette))[regno] =
--                      (red   << info->var.red.offset)   |
--                      (green << info->var.green.offset) |
--                      (blue  << info->var.blue.offset);
-+              ((u32 *)(fb_info->pseudo_palette))[regno] =
-+                      (red   << fb_info->var.red.offset)   |
-+                      (green << fb_info->var.green.offset) |
-+                      (blue  << fb_info->var.blue.offset);
-               break;
-       case 32:
-               red   >>= 8;
-               green >>= 8;
-               blue  >>= 8;
--              ((u32 *)(info->pseudo_palette))[regno] =
--                      (red   << info->var.red.offset)   |
--                      (green << info->var.green.offset) |
--                      (blue  << info->var.blue.offset);
-+              ((u32 *)(fb_info->pseudo_palette))[regno] =
-+                      (red   << fb_info->var.red.offset)   |
-+                      (green << fb_info->var.green.offset) |
-+                      (blue  << fb_info->var.blue.offset);
-               break;
-     }
-     return 0;
---- linux-2.6.0-test1/drivers/video/Makefile   2003-06-14 12:17:58.000000000 -0700
-+++ 25/drivers/video/Makefile  2003-07-19 17:03:50.000000000 -0700
-@@ -69,7 +69,7 @@ obj-$(CONFIG_FB_SA1100)           += sa1
- obj-$(CONFIG_FB_VIRTUAL)          += vfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o 
- obj-$(CONFIG_FB_HIT)              += hitfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
- obj-$(CONFIG_FB_E1355)            += epson1355fb.o
--obj-$(CONFIG_FB_PVR2)             += pvr2fb.o
-+obj-$(CONFIG_FB_PVR2)             += pvr2fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
- obj-$(CONFIG_FB_VOODOO1)          += sstfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
- obj-$(CONFIG_FB_FFB)               += ffb.o sbuslib.o cfbimgblt.o cfbcopyarea.o
---- linux-2.6.0-test1/drivers/video/neofb.c    2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/video/neofb.c   2003-07-19 17:04:55.000000000 -0700
-@@ -81,9 +81,10 @@ extern int tosh_smm(SMMRegisters *regs);
- #include <asm/mtrr.h>
- #endif
-+#include <video/vga.h>
- #include <video/neomagic.h>
--#define NEOFB_VERSION "0.4.1"
-+#define NEOFB_VERSION "0.4.2"
- /* --------------------------------------------------------------------- */
-@@ -370,37 +371,55 @@ static int vgaHWInit(const struct fb_var
- static void vgaHWLock(void)
- {
-       /* Protect CRTC[0-7] */
--      VGAwCR(0x11, VGArCR(0x11) | 0x80);
-+      vga_wcrt(NULL, 0x11, vga_rcrt(NULL, 0x11) | 0x80);
- }
- static void vgaHWUnlock(void)
- {
-       /* Unprotect CRTC[0-7] */
--      VGAwCR(0x11, VGArCR(0x11) & ~0x80);
-+      vga_wcrt(NULL, 0x11, vga_rcrt(NULL, 0x11) & ~0x80);
- }
- static void neoLock(void)
- {
--      VGAwGR(0x09, 0x00);
-+      vga_wgfx(NULL, 0x09, 0x00);
-       vgaHWLock();
- }
- static void neoUnlock(void)
- {
-       vgaHWUnlock();
--      VGAwGR(0x09, 0x26);
-+      vga_wgfx(NULL, 0x09, 0x26);
- }
- /*
-- * vgaHWSeqReset
-- *      perform a sequencer reset.
-+ * VGA Palette management
-  */
--void vgaHWSeqReset(int start)
-+static int paletteEnabled = 0;
-+
-+inline void VGAenablePalette(void)
-+{
-+      vga_r(NULL, VGA_IS1_RC);
-+      vga_w(NULL, VGA_ATT_W, 0x00);
-+      paletteEnabled = 1;
-+}
-+
-+inline void VGAdisablePalette(void)
- {
--      if (start)
--              VGAwSEQ(0x00, 0x01);    /* Synchronous Reset */
-+      vga_r(NULL, VGA_IS1_RC);
-+      vga_w(NULL, VGA_ATT_W, 0x20);
-+      paletteEnabled = 0;
-+}
-+
-+inline void VGAwATTR(u8 index, u8 value)
-+{
-+      if (paletteEnabled)
-+              index &= ~0x20;
-       else
--              VGAwSEQ(0x00, 0x03);    /* End Reset */
-+              index |= 0x20;
-+
-+      vga_r(NULL, VGA_IS1_RC);
-+      vga_wattr(NULL, index, value);
- }
- void vgaHWProtect(int on)
-@@ -411,21 +430,18 @@ void vgaHWProtect(int on)
-               /*
-                * Turn off screen and disable sequencer.
-                */
--              tmp = VGArSEQ(0x01);
--
--              vgaHWSeqReset(1);       /* start synchronous reset */
--              VGAwSEQ(0x01, tmp | 0x20);      /* disable the display */
-+              tmp = vga_rseq(NULL, 0x01);
-+              vga_wseq(NULL, 0x00, 0x01);             /* Synchronous Reset */
-+              vga_wseq(NULL, 0x01, tmp | 0x20);       /* disable the display */
-               VGAenablePalette();
-       } else {
-               /*
-                * Reenable sequencer, then turn on screen.
-                */
--
--              tmp = VGArSEQ(0x01);
--
--              VGAwSEQ(0x01, tmp & ~0x20);     /* reenable display */
--              vgaHWSeqReset(0);       /* clear synchronousreset */
-+              tmp = vga_rseq(NULL, 0x01);
-+              vga_wseq(NULL, 0x01, tmp & ~0x20);      /* reenable display */
-+              vga_wseq(NULL, 0x00, 0x03);             /* clear synchronousreset */
-               VGAdisablePalette();
-       }
-@@ -436,19 +452,19 @@ static void vgaHWRestore(const struct fb
- {
-       int i;
--      VGAwMISC(par->MiscOutReg);
-+      vga_w(NULL, VGA_MIS_W, par->MiscOutReg);
-       for (i = 1; i < 5; i++)
--              VGAwSEQ(i, par->Sequencer[i]);
-+              vga_wseq(NULL, i, par->Sequencer[i]);
-       /* Ensure CRTC registers 0-7 are unlocked by clearing bit 7 or CRTC[17] */
--      VGAwCR(17, par->CRTC[17] & ~0x80);
-+      vga_wcrt(NULL, 17, par->CRTC[17] & ~0x80);
-       for (i = 0; i < 25; i++)
--              VGAwCR(i, par->CRTC[i]);
-+              vga_wcrt(NULL, i, par->CRTC[i]);
-       for (i = 0; i < 9; i++)
--              VGAwGR(i, par->Graphics[i]);
-+              vga_wgfx(NULL, i, par->Graphics[i]);
-       VGAenablePalette();
-@@ -981,13 +997,13 @@ static int neofb_set_par(struct fb_info 
-       }
-       /* alread unlocked above */
--      /* BOGUS  VGAwGR (0x09, 0x26); */
-+      /* BOGUS  vga_wgfx(NULL, 0x09, 0x26); */
-       /* don't know what this is, but it's 0 from bootup anyway */
--      VGAwGR(0x15, 0x00);
-+      vga_wgfx(NULL, 0x15, 0x00);
-       /* was set to 0x01 by my bios in text and vesa modes */
--      VGAwGR(0x0A, par->GeneralLockReg);
-+      vga_wgfx(NULL, 0x0A, par->GeneralLockReg);
-       /*
-        * The color mode needs to be set before calling vgaHWRestore
-@@ -996,7 +1012,7 @@ static int neofb_set_par(struct fb_info 
-        * NOTE: Make sure we don't change bits make sure we don't change
-        * any reserved bits.
-        */
--      temp = VGArGR(0x90);
-+      temp = vga_rgfx(NULL, 0x90);
-       switch (info->fix.accel) {
-       case FB_ACCEL_NEOMAGIC_NM2070:
-               temp &= 0xF0;   /* Save bits 7:4 */
-@@ -1015,7 +1031,7 @@ static int neofb_set_par(struct fb_info 
-               break;
-       }
--      VGAwGR(0x90, temp);
-+      vga_wgfx(NULL, 0x90, temp);
-       /*
-        * In some rare cases a lockup might occur if we don't delay
-@@ -1027,9 +1043,9 @@ static int neofb_set_par(struct fb_info 
-        * Disable horizontal and vertical graphics and text expansions so
-        * that vgaHWRestore works properly.
-        */
--      temp = VGArGR(0x25);
-+      temp = vga_rgfx(NULL, 0x25);
-       temp &= 0x39;
--      VGAwGR(0x25, temp);
-+      vga_wgfx(NULL, 0x25, temp);
-       /*
-        * Sleep for 200ms to make sure that the two operations above have
-@@ -1041,19 +1057,18 @@ static int neofb_set_par(struct fb_info 
-        * This function handles restoring the generic VGA registers.  */
-       vgaHWRestore(info, par);
--
--      VGAwGR(0x0E, par->ExtCRTDispAddr);
--      VGAwGR(0x0F, par->ExtCRTOffset);
--      temp = VGArGR(0x10);
-+      vga_wgfx(NULL, 0x0E, par->ExtCRTDispAddr);
-+      vga_wgfx(NULL, 0x0F, par->ExtCRTOffset);
-+      temp = vga_rgfx(NULL, 0x10);
-       temp &= 0x0F;           /* Save bits 3:0 */
-       temp |= (par->SysIfaceCntl1 & ~0x0F);   /* VESA Bios sets bit 1! */
--      VGAwGR(0x10, temp);
-+      vga_wgfx(NULL, 0x10, temp);
--      VGAwGR(0x11, par->SysIfaceCntl2);
--      VGAwGR(0x15, 0 /*par->SingleAddrPage */ );
--      VGAwGR(0x16, 0 /*par->DualAddrPage */ );
-+      vga_wgfx(NULL, 0x11, par->SysIfaceCntl2);
-+      vga_wgfx(NULL, 0x15, 0 /*par->SingleAddrPage */ );
-+      vga_wgfx(NULL, 0x16, 0 /*par->DualAddrPage */ );
--      temp = VGArGR(0x20);
-+      temp = vga_rgfx(NULL, 0x20);
-       switch (info->fix.accel) {
-       case FB_ACCEL_NEOMAGIC_NM2070:
-               temp &= 0xFC;   /* Save bits 7:2 */
-@@ -1074,73 +1089,72 @@ static int neofb_set_par(struct fb_info 
-               temp |= (par->PanelDispCntlReg1 & ~0x98);
-               break;
-       }
--      VGAwGR(0x20, temp);
-+      vga_wgfx(NULL, 0x20, temp);
--      temp = VGArGR(0x25);
-+      temp = vga_rgfx(NULL, 0x25);
-       temp &= 0x38;           /* Save bits 5:3 */
-       temp |= (par->PanelDispCntlReg2 & ~0x38);
--      VGAwGR(0x25, temp);
-+      vga_wgfx(NULL, 0x25, temp);
-       if (info->fix.accel != FB_ACCEL_NEOMAGIC_NM2070) {
--              temp = VGArGR(0x30);
-+              temp = vga_rgfx(NULL, 0x30);
-               temp &= 0xEF;   /* Save bits 7:5 and bits 3:0 */
-               temp |= (par->PanelDispCntlReg3 & ~0xEF);
--              VGAwGR(0x30, temp);
-+              vga_wgfx(NULL, 0x30, temp);
-       }
--      VGAwGR(0x28, par->PanelVertCenterReg1);
--      VGAwGR(0x29, par->PanelVertCenterReg2);
--      VGAwGR(0x2a, par->PanelVertCenterReg3);
-+      vga_wgfx(NULL, 0x28, par->PanelVertCenterReg1);
-+      vga_wgfx(NULL, 0x29, par->PanelVertCenterReg2);
-+      vga_wgfx(NULL, 0x2a, par->PanelVertCenterReg3);
-       if (info->fix.accel != FB_ACCEL_NEOMAGIC_NM2070) {
--              VGAwGR(0x32, par->PanelVertCenterReg4);
--              VGAwGR(0x33, par->PanelHorizCenterReg1);
--              VGAwGR(0x34, par->PanelHorizCenterReg2);
--              VGAwGR(0x35, par->PanelHorizCenterReg3);
-+              vga_wgfx(NULL, 0x32, par->PanelVertCenterReg4);
-+              vga_wgfx(NULL, 0x33, par->PanelHorizCenterReg1);
-+              vga_wgfx(NULL, 0x34, par->PanelHorizCenterReg2);
-+              vga_wgfx(NULL, 0x35, par->PanelHorizCenterReg3);
-       }
-       if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2160)
--              VGAwGR(0x36, par->PanelHorizCenterReg4);
-+              vga_wgfx(NULL, 0x36, par->PanelHorizCenterReg4);
-       if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2200 ||
-           info->fix.accel == FB_ACCEL_NEOMAGIC_NM2230 ||
-           info->fix.accel == FB_ACCEL_NEOMAGIC_NM2360 ||
-           info->fix.accel == FB_ACCEL_NEOMAGIC_NM2380) {
--              VGAwGR(0x36, par->PanelHorizCenterReg4);
--              VGAwGR(0x37, par->PanelVertCenterReg5);
--              VGAwGR(0x38, par->PanelHorizCenterReg5);
-+              vga_wgfx(NULL, 0x36, par->PanelHorizCenterReg4);
-+              vga_wgfx(NULL, 0x37, par->PanelVertCenterReg5);
-+              vga_wgfx(NULL, 0x38, par->PanelHorizCenterReg5);
-               clock_hi = 1;
-       }
-       /* Program VCLK3 if needed. */
--      if (par->ProgramVCLK && ((VGArGR(0x9B) != par->VCLK3NumeratorLow)
--                               || (VGArGR(0x9F) != par->VCLK3Denominator)
--                               || (clock_hi && ((VGArGR(0x8F) & ~0x0f)
--                                                != (par->
--                                                    VCLK3NumeratorHigh &
-+      if (par->ProgramVCLK && ((vga_rgfx(NULL, 0x9B) != par->VCLK3NumeratorLow)
-+                               || (vga_rgfx(NULL, 0x9F) != par->VCLK3Denominator)
-+                               || (clock_hi && ((vga_rgfx(NULL, 0x8F) & ~0x0f)
-+                                                != (par->VCLK3NumeratorHigh &
-                                                     ~0x0F))))) {
--              VGAwGR(0x9B, par->VCLK3NumeratorLow);
-+              vga_wgfx(NULL, 0x9B, par->VCLK3NumeratorLow);
-               if (clock_hi) {
--                      temp = VGArGR(0x8F);
-+                      temp = vga_rgfx(NULL, 0x8F);
-                       temp &= 0x0F;   /* Save bits 3:0 */
-                       temp |= (par->VCLK3NumeratorHigh & ~0x0F);
--                      VGAwGR(0x8F, temp);
-+                      vga_wgfx(NULL, 0x8F, temp);
-               }
--              VGAwGR(0x9F, par->VCLK3Denominator);
-+              vga_wgfx(NULL, 0x9F, par->VCLK3Denominator);
-       }
-       if (par->biosMode)
--              VGAwCR(0x23, par->biosMode);
-+              vga_wcrt(NULL, 0x23, par->biosMode);
--      VGAwGR(0x93, 0xc0);     /* Gives 5x faster framebuffer writes !!! */
-+      vga_wgfx(NULL, 0x93, 0xc0);     /* Gives 5x faster framebuffer writes !!! */
-       /* Program vertical extension register */
-       if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2200 ||
-           info->fix.accel == FB_ACCEL_NEOMAGIC_NM2230 ||
-           info->fix.accel == FB_ACCEL_NEOMAGIC_NM2360 ||
-           info->fix.accel == FB_ACCEL_NEOMAGIC_NM2380) {
--              VGAwCR(0x70, par->VerticalExt);
-+              vga_wcrt(NULL, 0x70, par->VerticalExt);
-       }
-       vgaHWProtect(0);        /* Turn on screen */
-@@ -1180,16 +1194,16 @@ static void neofb_update_start(struct fb
-       /*
-        * These are the generic starting address registers.
-        */
--      VGAwCR(0x0C, (Base & 0x00FF00) >> 8);
--      VGAwCR(0x0D, (Base & 0x00FF));
-+      vga_wcrt(NULL, 0x0C, (Base & 0x00FF00) >> 8);
-+      vga_wcrt(NULL, 0x0D, (Base & 0x00FF));
-       /*
-        * Make sure we don't clobber some other bits that might already
-        * have been set. NOTE: NM2200 has a writable bit 3, but it shouldn't
-        * be needed.
-        */
--      oldExtCRTDispAddr = VGArGR(0x0E);
--      VGAwGR(0x0E, (((Base >> 16) & 0x0f) | (oldExtCRTDispAddr & 0xf0)));
-+      oldExtCRTDispAddr = vga_rgfx(NULL, 0x0E);
-+      vga_wgfx(NULL, 0x0E, (((Base >> 16) & 0x0f) | (oldExtCRTDispAddr & 0xf0)));
-       neoLock();
- }
-@@ -1353,7 +1367,7 @@ neo2200_fillrect(struct fb_info *info, c
-       }
-       par->neo2200->dstStart =
--          dst * ((info->var.bits_per_pixel + 7) / 8);
-+          dst * ((info->var.bits_per_pixel + 7) >> 3);
-       par->neo2200->xyExt =
-           (rect->height << 16) | (rect->width & 0xffff);
- }
-@@ -1361,26 +1375,22 @@ neo2200_fillrect(struct fb_info *info, c
- static void
- neo2200_copyarea(struct fb_info *info, const struct fb_copyarea *area)
- {
--      struct neofb_par *par = (struct neofb_par *) info->par;
-       u32 sx = area->sx, sy = area->sy, dx = area->dx, dy = area->dy;
-+      struct neofb_par *par = (struct neofb_par *) info->par;
-       u_long src, dst, bltCntl;
--
-+      
-       bltCntl = NEO_BC3_FIFO_EN | NEO_BC3_SKIP_MAPPING | 0x0C0000;
--      if (sy < dy) {
-+      if ((dy > sy) || ((dy == sy) && (dx > sx))) {   
-+              /* Start with the lower right corner */
-               sy += (area->height - 1);
-               dy += (area->height - 1);
--
--              bltCntl |= NEO_BC0_DST_Y_DEC | NEO_BC0_SRC_Y_DEC;
--      }
--
--      if (area->sx < area->dx) {
-               sx += (area->width - 1);
--              dx += (area->width - 1);
--
--              bltCntl |= NEO_BC0_X_DEC;
--      }
--
-+              dx += (area->width - 1);        
-+              
-+              bltCntl |= NEO_BC0_X_DEC | NEO_BC0_DST_Y_DEC | NEO_BC0_SRC_Y_DEC;
-+      }               
-+                              
-       src = sx * (info->var.bits_per_pixel >> 3) + sy*info->fix.line_length;
-       dst = dx * (info->var.bits_per_pixel >> 3) + dy*info->fix.line_length;
-@@ -1725,16 +1735,16 @@ static int __devinit neo_init_hw(struct 
-       printk(KERN_DEBUG "--- Neo extended register dump ---\n");
-       for (w = 0; w < 0x85; w++)
-               printk(KERN_DEBUG "CR %p: %p\n", (void *) w,
--                     (void *) VGArCR(w));
-+                     (void *) vga_rcrt(NULL, w);
-       for (w = 0; w < 0xC7; w++)
-               printk(KERN_DEBUG "GR %p: %p\n", (void *) w,
--                     (void *) VGArGR(w));
-+                     (void *) vga_rgfx(NULL, w));
- #endif
-       /* Determine the panel type */
--      VGAwGR(0x09, 0x26);
--      type = VGArGR(0x21);
--      display = VGArGR(0x20);
-+      vga_wgfx(NULL, 0x09, 0x26);
-+      type = vga_rgfx(NULL, 0x21);
-+      display = vga_rgfx(NULL, 0x20);
-       if (!par->internal_display && !par->external_display) {
-               par->internal_display = display & 2 || !(display & 3) ? 1 : 0;
-               par->external_display = display & 1;
-@@ -1744,8 +1754,8 @@ static int __devinit neo_init_hw(struct 
-       }
-       /* Determine panel width -- used in NeoValidMode. */
--      w = VGArGR(0x20);
--      VGAwGR(0x09, 0x00);
-+      w = vga_rgfx(NULL, 0x20);
-+      vga_wgfx(NULL, 0x09, 0x00);
-       switch ((w & 0x18) >> 3) {
-       case 0x00:
-               par->NeoPanelWidth = 640;
---- linux-2.6.0-test1/drivers/video/platinumfb.c       2003-06-14 12:18:07.000000000 -0700
-+++ 25/drivers/video/platinumfb.c      2003-07-19 17:04:55.000000000 -0700
-@@ -104,8 +104,8 @@ static int platinum_var_to_par(const str
-  * Interface used by the world
-  */
--int platinum_init(void);
--int platinum_setup(char*);
-+int platinumfb_init(void);
-+int platinumfb_setup(char*);
- static struct fb_ops platinumfb_ops = {
-       .owner =        THIS_MODULE,
-@@ -399,7 +399,7 @@ try_again:
-       /* Apply default var */
-       p->info.var = var;
-       var.activate = FB_ACTIVATE_NOW;
--      rc = fb_set_var(&var, &p->info);
-+      rc = fb_set_var(&p->info, &var);
-       if (rc && (default_vmode != VMODE_640_480_60 || default_cmode != CMODE_8))
-               goto try_again;
-@@ -413,7 +413,7 @@ try_again:
-       return 1;
- }
--int __init platinum_init(void)
-+int __init platinumfb_init(void)
- {
-       struct device_node *dp;
-@@ -597,7 +597,7 @@ static int platinum_par_to_var(struct fb
- /* 
-  * Parse user speficied options (`video=platinumfb:')
-  */
--int __init platinum_setup(char *options)
-+int __init platinumfb_setup(char *options)
- {
-       char *this_opt;
---- linux-2.6.0-test1/drivers/video/pvr2fb.c   2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/video/pvr2fb.c  2003-07-19 17:03:50.000000000 -0700
-@@ -4,7 +4,7 @@
-  * Dreamcast.
-  *
-  * Copyright (c) 2001 M. R. Brown <mrbrown@0xd6.org>
-- * Copyright (c) 2001 Paul Mundt  <lethal@chaoticdreams.org>
-+ * Copyright (c) 2001, 2002, 2003 Paul Mundt <lethal@linux-sh.org>
-  *
-  * This file is part of the LinuxDC project (linuxdc.sourceforge.net).
-  *
-@@ -12,14 +12,15 @@
- /*
-  * This driver is mostly based on the excellent amifb and vfb sources.  It uses
-- * an odd scheme for converting hardware values to/from framebuffer values, here are
-- * some hacked-up formulas:
-+ * an odd scheme for converting hardware values to/from framebuffer values,
-+ * here are some hacked-up formulas:
-  *
-- *  The Dreamcast has screen offsets from each side of its four borders and the start
-- *  offsets of the display window.  I used these values to calculate 'pseudo' values
-- *  (think of them as placeholders) for the fb video mode, so that when it came time
-- *  to convert these values back into their hardware values, I could just add mode-
-- *  specific offsets to get the correct mode settings:
-+ *  The Dreamcast has screen offsets from each side of its four borders and
-+ *  the start offsets of the display window.  I used these values to calculate
-+ *  'pseudo' values (think of them as placeholders) for the fb video mode, so
-+ *  that when it came time to convert these values back into their hardware
-+ *  values, I could just add mode- specific offsets to get the correct mode
-+ *  settings:
-  *
-  *      left_margin = diwstart_h - borderstart_h;
-  *      right_margin = borderstop_h - (diwstart_h + xres);
-@@ -29,9 +30,9 @@
-  *      hsync_len = borderstart_h + (hsync_total - borderstop_h);
-  *      vsync_len = borderstart_v + (vsync_total - borderstop_v);
-  *
-- *  Then, when it's time to convert back to hardware settings, the only constants
-- *  are the borderstart_* offsets, all other values are derived from the fb video
-- *  mode:
-+ *  Then, when it's time to convert back to hardware settings, the only
-+ *  constants are the borderstart_* offsets, all other values are derived from
-+ *  the fb video mode:
-  *  
-  *      // PAL
-  *      borderstart_h = 116;
-@@ -57,7 +58,6 @@
- #include <linux/interrupt.h>
- #include <linux/fb.h>
- #include <linux/init.h>
--#include <linux/console.h>
- #ifdef CONFIG_SH_DREAMCAST
- #include <asm/io.h>
-@@ -66,14 +66,9 @@
- #endif
- #ifdef CONFIG_MTRR
--  #include <asm/mtrr.h>
-+#include <asm/mtrr.h>
- #endif
--#include <video/fbcon.h>
--#include <video/fbcon-cfb16.h>
--#include <video/fbcon-cfb24.h>
--#include <video/fbcon-cfb32.h>
--
- #ifdef CONFIG_FB_PVR2_DEBUG
- #  define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args)
- #else
-@@ -124,16 +119,6 @@ static struct pvr2_params outputs[] __in
-  */
- static struct pvr2fb_par {
--
--      int xres;
--      int yres;
--      int vxres;
--      int vyres;
--      int xoffset;
--      int yoffset;
--      u_short bpp;
--
--      u_long pixclock;
-       u_short hsync_total;    /* Clocks/line */
-       u_short vsync_total;    /* Lines/field */
-       u_short borderstart_h;
-@@ -144,53 +129,49 @@ static struct pvr2fb_par {
-       u_short diwstart_v;     /* Vertical offset of the display field, for
-                                  interlaced modes, this is the long field */
-       u_long disp_start;      /* Address of image within VRAM */
--
--      u_long next_line;       /* Modulo for next line */
--
-       u_char is_interlaced;   /* Is the display interlaced? */
-       u_char is_doublescan;   /* Are scanlines output twice? (doublescan) */
-       u_char is_lowres;       /* Is horizontal pixel-doubling enabled? */
-+} *currentpar;
--      u_long bordercolor;     /* RGB888 format border color */
--
--      u_long vmode;
--      
--} currentpar;
--
--static int currbpp;
--static struct display disp;
--static struct fb_info fb_info;
-+static struct fb_info *fb_info;
- static int pvr2fb_inverse = 0;
--static struct { u_short red, green, blue, alpha; } palette[256];
--static union {
--#ifdef FBCON_HAS_CFB16
--      u16 cfb16[16];
--#endif
--#ifdef FBCON_HAS_CFB24
--      u32 cfb24[16];
--#endif
--#ifdef FBCON_HAS_CFB32
--      u32 cfb32[16];
--#endif
--} fbcon_cmap;
-+static struct fb_fix_screeninfo pvr2_fix __initdata = {
-+      .id =           "NEC PowerVR2",
-+      .type =         FB_TYPE_PACKED_PIXELS,
-+      .visual =       FB_VISUAL_TRUECOLOR,
-+      .ypanstep =     1,
-+      .ywrapstep =    1,
-+      .accel =        FB_ACCEL_NONE,
-+};
--static char pvr2fb_name[16] = "NEC PowerVR2";
-+static struct fb_var_screeninfo pvr2_var __initdata = {
-+      .xres =         640,
-+      .yres =         480,
-+      .xres_virtual = 640,
-+      .yres_virtual = 480,
-+      .bits_per_pixel =16,
-+      .red =          { 11, 5, 0 },
-+      .green =        {  5, 6, 0 },
-+      .blue =         {  0, 5, 0 },
-+      .activate =     FB_ACTIVATE_NOW,
-+      .height =       -1,
-+      .width =        -1,
-+      .vmode =        FB_VMODE_NONINTERLACED,
-+};
- #define VIDEOMEMSIZE (8*1024*1024)
- static u_long videomemory = 0xa5000000, videomemorysize = VIDEOMEMSIZE;
- static int cable_type = -1;
- static int video_output = -1;
--#ifdef CONFIG_MTRR
--static int enable_mtrr = 1;
--static int mtrr_handle;
--#endif
-+static int nopan = 0;
-+static int nowrap = 1;
- /*
-  * We do all updating, blanking, etc. during the vertical retrace period
-  */
--
- static u_short do_vmode_full = 0;     /* Change the video mode */
- static u_short do_vmode_pan = 0;      /* Update the video mode */
- static short do_blank = 0;            /* (Un)Blank the screen */
-@@ -201,50 +182,15 @@ static u_short is_blanked = 0;           /* Is th
- int pvr2fb_setup(char*);
--static int pvr2fb_get_fix(struct fb_fix_screeninfo *fix, int con,
--                            struct fb_info *info);
--static int pvr2fb_get_var(struct fb_var_screeninfo *var, int con,
--                            struct fb_info *info);
--static int pvr2fb_set_var(struct fb_var_screeninfo *var, int con,
--                            struct fb_info *info);
--static int pvr2fb_pan_display(struct fb_var_screeninfo *var, int con,
--                                struct fb_info *info);
--static int pvr2fb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
--                             struct fb_info *info);
--static int pvr2fb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
--                             struct fb_info *info);
- static int pvr2fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
-                             u_int transp, struct fb_info *info);
- static int pvr2fb_blank(int blank, struct fb_info *info);
--
--      /*
--       * Interface to the low level console driver
--       */
--
--static int pvr2fbcon_switch(int con, struct fb_info *info);
--static int pvr2fbcon_updatevar(int con, struct fb_info *info);
--
--      /*
--       * Internal/hardware-specific routines
--       */
--
- static u_long get_line_length(int xres_virtual, int bpp);
- static void set_color_bitfields(struct fb_var_screeninfo *var);
--static int pvr2_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
--                            u_int *transp, struct fb_info *info);
--
--static int pvr2_encode_fix(struct fb_fix_screeninfo *fix,
--                             struct pvr2fb_par *par);
--static int pvr2_decode_var(struct fb_var_screeninfo *var,
--                          struct pvr2fb_par *par);
--static int pvr2_encode_var(struct fb_var_screeninfo *var,
--                          struct pvr2fb_par *par);
--static void pvr2_get_par(struct pvr2fb_par *par);
--static void pvr2_set_var(struct fb_var_screeninfo *var);
--static void pvr2_pan_var(struct fb_var_screeninfo *var);
--static int pvr2_update_par(void);
--static void pvr2_update_display(void);
--static void pvr2_init_display(void);
-+static int pvr2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info);
-+static int pvr2fb_set_par(struct fb_info *info);
-+static void pvr2_update_display(struct fb_info *info);
-+static void pvr2_init_display(struct fb_info *info);
- static void pvr2_do_blank(void);
- static irqreturn_t pvr2fb_interrupt(int irq, void *dev_id, struct pt_regs *fp);
- static int pvr2_init_cable(void);
-@@ -252,19 +198,18 @@ static int pvr2_get_param(const struct p
-                             int val, int size);
- static struct fb_ops pvr2fb_ops = {
--      .owner =        THIS_MODULE,
--      .fb_get_fix =   pvr2fb_get_fix,
--      .fb_get_var =   pvr2fb_get_var,
--      .fb_set_var =   pvr2fb_set_var,
--      .fb_get_cmap =  pvr2fb_get_cmap,
--      .fb_set_cmap =  pvr2fb_set_cmap,
--      .fb_setcolreg = pvr2fb_setcolreg,
--      .fb_pan_display = pvr2fb_pan_display,
--      .fb_blank =     pvr2fb_blank,
-+      .owner          = THIS_MODULE,
-+      .fb_setcolreg   = pvr2fb_setcolreg,
-+      .fb_blank       = pvr2fb_blank,
-+      .fb_check_var   = pvr2fb_check_var,
-+      .fb_set_par     = pvr2fb_set_par,
-+      .fb_fillrect    = cfb_fillrect,
-+      .fb_copyarea    = cfb_copyarea,
-+      .fb_imageblit   = cfb_imageblit,
-+      .fb_cursor      = soft_cursor,
- };
- static struct fb_videomode pvr2_modedb[] __initdata = {
--
-     /*
-      * Broadcast video modes (PAL and NTSC).  I'm unfamiliar with
-      * PAL-M and PAL-N, but from what I've read both modes parallel PAL and
-@@ -275,21 +220,16 @@ static struct fb_videomode pvr2_modedb[]
-       /* 640x480 @ 60Hz interlaced (NTSC) */
-       "ntsc_640x480i", 60, 640, 480, TV_CLK, 38, 33, 0, 18, 146, 26,
-       FB_SYNC_BROADCAST, FB_VMODE_INTERLACED | FB_VMODE_YWRAP
--    },
--
--    {
-+    }, {
-       /* 640x240 @ 60Hz (NTSC) */
-       /* XXX: Broken! Don't use... */
-       "ntsc_640x240", 60, 640, 240, TV_CLK, 38, 33, 0, 0, 146, 22,
-       FB_SYNC_BROADCAST, FB_VMODE_YWRAP
--    },
--
--    {
-+    }, {
-       /* 640x480 @ 60hz (VGA) */
-       "vga_640x480", 60, 640, 480, VGA_CLK, 38, 33, 0, 18, 146, 26,
-       0, FB_VMODE_YWRAP
--    },
--
-+    }, 
- };
- #define NUM_TOTAL_MODES  ARRAY_SIZE(pvr2_modedb)
-@@ -301,222 +241,10 @@ static struct fb_videomode pvr2_modedb[]
- static int defmode = DEFMODE_NTSC;
- static char *mode_option __initdata = NULL;
--/* Get the fixed part of the display */
--
--static int pvr2fb_get_fix(struct fb_fix_screeninfo *fix, int con,
--                            struct fb_info *info)
--{
--      struct pvr2fb_par par;
--
--      if (con == -1)
--              pvr2_get_par(&par);
--      else {
--              int err;
--
--              if ((err = pvr2_decode_var(&fb_display[con].var, &par)))
--                      return err;
--      }
--      return pvr2_encode_fix(fix, &par);
--}
--
--/* Get the user-defined part of the display */
--
--static int pvr2fb_get_var(struct fb_var_screeninfo *var, int con,
--                            struct fb_info *info)
--{
--      int err = 0;
--
--      if (con == -1) {
--              struct pvr2fb_par par;
--
--              pvr2_get_par(&par);
--              err = pvr2_encode_var(var, &par);
--      } else
--              *var = fb_display[con].var;
--      
--      return err;
--}
--
--/* Set the user-defined part of the display */
--
--static int pvr2fb_set_var(struct fb_var_screeninfo *var, int con,
--                            struct fb_info *info)
--{
--      int err, activate = var->activate;
--      int oldxres, oldyres, oldvxres, oldvyres, oldbpp;
--      struct pvr2fb_par par;
--
--      struct display *display;
--      if (con >= 0)
--              display = &fb_display[con];
--      else
--              display = &disp;        /* used during initialization */
--
--      /*
--       * FB_VMODE_CONUPDATE and FB_VMODE_SMOOTH_XPAN are equal!
--       * as FB_VMODE_SMOOTH_XPAN is only used internally
--       */
--
--      if (var->vmode & FB_VMODE_CONUPDATE) {
--              var->vmode |= FB_VMODE_YWRAP;
--              var->xoffset = display->var.xoffset;
--              var->yoffset = display->var.yoffset;
--      }
--      if ((err = pvr2_decode_var(var, &par)))
--              return err;
--      pvr2_encode_var(var, &par);
--
--      /* Do memory check and bitfield set here?? */
--
--      if ((activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {
--              oldxres = display->var.xres;
--              oldyres = display->var.yres;
--              oldvxres = display->var.xres_virtual;
--              oldvyres = display->var.yres_virtual;
--              oldbpp = display->var.bits_per_pixel;
--              display->var = *var;
--              if (oldxres != var->xres || oldyres != var->yres ||
--                  oldvxres != var->xres_virtual || oldvyres != var->yres_virtual ||
--                  oldbpp != var->bits_per_pixel) {
--                      struct fb_fix_screeninfo fix;
--
--                      pvr2_encode_fix(&fix, &par);
--                      display->scrollmode = SCROLL_YREDRAW;
--                      display->visual = fix.visual;
--                      display->type = fix.type;
--                      display->type_aux = fix.type_aux;
--                      display->ypanstep = fix.ypanstep;
--                      display->ywrapstep = fix.ywrapstep;
--                      display->line_length = fix.line_length;
--                      display->can_soft_blank = 1;
--                      display->inverse = pvr2fb_inverse;
--                      switch (var->bits_per_pixel) {
--#ifdef FBCON_HAS_CFB16
--                          case 16:
--                              display->dispsw = &fbcon_cfb16;
--                              display->dispsw_data = fbcon_cmap.cfb16;
--                              break;
--#endif
--#ifdef FBCON_HAS_CFB24
--                          case 24:
--                              display->dispsw = &fbcon_cfb24;
--                              display->dispsw_data = fbcon_cmap.cfb24;
--                              break;
--#endif
--#ifdef FBCON_HAS_CFB32
--                          case 32:
--                              display->dispsw = &fbcon_cfb32;
--                              display->dispsw_data = fbcon_cmap.cfb32;
--                              break;
--#endif
--                          default:
--                              display->dispsw = &fbcon_dummy;
--                              break;
--                      }
--                      if (fb_info.changevar)
--                              (*fb_info.changevar)(con);
--              }
--              if (oldbpp != var->bits_per_pixel) {
--                      if ((err = fb_alloc_cmap(&display->cmap, 0, 0)))
--                              return err;
--                      do_install_cmap(con, info);
--              }
--              if (con == info->currcon)
--                      pvr2_set_var(&display->var);
--      }
--
--      return 0;
--}
--
--/*
-- * Pan or wrap the display.
-- * This call looks only at xoffset, yoffset and the FB_VMODE_YRAP flag
-- */
--
--static int pvr2fb_pan_display(struct fb_var_screeninfo *var, int con,
--                                struct fb_info *info)
--{
--      if (var->vmode & FB_VMODE_YWRAP) {
--              if (var->yoffset<0 || var->yoffset >=
--                  fb_display[con].var.yres_virtual || var->xoffset)
--                      return -EINVAL;
--       } else {
--              if (var->xoffset+fb_display[con].var.xres >
--                  fb_display[con].var.xres_virtual ||
--                  var->yoffset+fb_display[con].var.yres >
--                  fb_display[con].var.yres_virtual)
--                  return -EINVAL;
--      }
--      if (con == info->currcon)
--              pvr2_pan_var(var);
--      fb_display[con].var.xoffset = var->xoffset;
--      fb_display[con].var.yoffset = var->yoffset;
--      if (var->vmode & FB_VMODE_YWRAP)
--              fb_display[con].var.vmode |= FB_VMODE_YWRAP;
--      else
--              fb_display[con].var.vmode &= ~FB_VMODE_YWRAP;
--                      
--      return 0;
--}
--
--/* Get the colormap */
--
--static int pvr2fb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
--                             struct fb_info *info)
--{
--      if (con == info->currcon) /* current console? */
--              return fb_get_cmap(cmap, kspc, pvr2_getcolreg, info);
--      else if (fb_display[con].cmap.len) /* non default colormap? */
--              fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2);
--      else
--              fb_copy_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel),
--                           cmap, kspc ? 0 : 2);
--      return 0;
--}
--
--/* Set the colormap */
--
--static int pvr2fb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
--                           struct fb_info *info)
--{
--      int err;
--
--      if (!fb_display[con].cmap.len) {        /* no colormap allocated? */
--              if ((err = fb_alloc_cmap(&fb_display[con].cmap,
--                                       1<<fb_display[con].var.bits_per_pixel,
--                                       0)))
--                       return err;
--      }
--      if (con == info->currcon)                     /* current console? */
--              return fb_set_cmap(cmap, kspc, info);
--      else
--              fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1);
--
--      return 0;
--}
--
--static int pvr2fbcon_switch(int con, struct fb_info *info)
--{
--      /* Do we have to save the colormap? */
--      if (fb_display[info->currcon].cmap.len)
--              fb_get_cmap(&fb_display[info->currcon].cmap, 1, pvr2_getcolreg, info);
--
--      info->currcon = con;
--      pvr2_set_var(&fb_display[con].var);
--      /* Install new colormap */
--      do_install_cmap(con, info);
--      return 0;
--}
--
--static int pvr2fbcon_updatevar(int con, struct fb_info *info)
--{
--      pvr2_pan_var(&fb_display[con].var);
--      return 0;
--}
--
- static int pvr2fb_blank(int blank, struct fb_info *info)
- {
-       do_blank = blank ? blank : -1;
-+      return 0;
- }
- static inline u_long get_line_length(int xres_virtual, int bpp)
-@@ -548,52 +276,29 @@ static void set_color_bitfields(struct f
-       }
- }
--static int pvr2_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
--                            u_int *transp, struct fb_info *info)
--{
--      if (regno > 255)
--          return 1;
--      
--      *red = palette[regno].red;
--      *green = palette[regno].green;
--      *blue = palette[regno].blue;
--      *transp = 0;
--      return 0;
--}
--      
- static int pvr2fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
-                             u_int transp, struct fb_info *info)
- {
-       if (regno > 255)
-               return 1;
--      palette[regno].red = red;
--      palette[regno].green = green;
--      palette[regno].blue = blue;
--
-       if (regno < 16) {
--              switch (currbpp) {
--#ifdef FBCON_HAS_CFB16
-+              switch (info->var.bits_per_pixel) {
-                   case 16: /* RGB 565 */
--                      fbcon_cmap.cfb16[regno] = (red & 0xf800) |
--                                                ((green & 0xfc00) >> 5) |
-+                      ((u16*)(info->pseudo_palette))[regno] = (red & 0xf800) |
-+                                              ((green & 0xfc00) >> 5) |
-                                                 ((blue & 0xf800) >> 11);
-                       break;
--#endif
--#ifdef FBCON_HAS_CFB24
-                   case 24: /* RGB 888 */
-                       red >>= 8; green >>= 8; blue >>= 8;
--                      fbcon_cmap.cfb24[regno] = (red << 16) | (green << 8) | blue;
-+                      ((u32*)(info->pseudo_palette))[regno] = (red << 16) | (green << 8) | blue;
-                       break;
--#endif
--#ifdef FBCON_HAS_CFB32
-                   case 32: /* ARGB 8888 */
-                       red >>= 8; green >>= 8; blue >>= 8;
--                      fbcon_cmap.cfb32[regno] = (red << 16) | (green << 8) | blue;
-+                      ((u32*)(info->pseudo_palette))[regno] = (transp << 24) |(red << 16) | (green << 8) | blue;
-                       break;
--#endif
-                   default:
--                      DPRINTK("Invalid bit depth %d?!?\n", currbpp);
-+                      DPRINTK("Invalid bit depth %d?!?\n", info->var.bits_per_pixel);
-                       return 1;
-               }
-       }
-@@ -601,85 +306,33 @@ static int pvr2fb_setcolreg(u_int regno,
-       return 0;
- }
--
--static int pvr2_encode_fix(struct fb_fix_screeninfo *fix,
--                             struct pvr2fb_par *par)
--{
--      memset(fix, 0, sizeof(struct fb_fix_screeninfo));
--      strcpy(fix->id, pvr2fb_name);
--      fix->smem_start = videomemory;
--      fix->smem_len = videomemorysize;
--      fix->type = FB_TYPE_PACKED_PIXELS;
--      fix->type_aux = 0;
--      fix->visual = FB_VISUAL_TRUECOLOR;
--
--      if (par->vmode & FB_VMODE_YWRAP) {
--              fix->ywrapstep = 1;
--              fix->xpanstep = fix->ypanstep = 0;
--      } else {
--              fix->ywrapstep = 0;
--              fix->xpanstep = 1;
--              fix->ypanstep = 1;
--      }
--      fix->line_length = par->next_line;
--
--      return 0;
--}
--
--/*
-- * Create a hardware video mode using the framebuffer values.  If a value needs
-- * to be clipped or constrained it's done here.  This routine needs a bit more
-- * work to make sure we're doing the right tests at the right time.
-- */
--static int pvr2_decode_var(struct fb_var_screeninfo *var,
--                             struct pvr2fb_par *par)
-+static int pvr2fb_set_par(struct fb_info *info)
- {
-+      struct pvr2fb_par *par = (struct pvr2fb_par *)info->par;
-+      struct fb_var_screeninfo *var = &info->var;
-       u_long line_length;
-       u_short vtotal;
--      if (var->pixclock != TV_CLK && var->pixclock != VGA_CLK) {
--              DPRINTK("Invalid pixclock value %d\n", var->pixclock);
--              return -EINVAL;
--      }
--      par->pixclock = var->pixclock;
--      
--      if ((par->xres = var->xres) < 320)
--              par->xres = 320;
--      if ((par->yres = var->yres) < 240)
--              par->yres = 240;
--      if ((par->vxres = var->xres_virtual) < par->xres)
--              par->vxres = par->xres;
--      if ((par->vyres = var->yres_virtual) < par->yres)
--              par->vyres = par->yres;
--
--      if ((par->bpp = var->bits_per_pixel) <= 16)
--              par->bpp = 16;
--      else if ((par->bpp = var->bits_per_pixel) <= 24)
--              par->bpp = 24;
--      else if ((par->bpp = var->bits_per_pixel) <= 32)
--              par->bpp = 32;
--
--      currbpp = par->bpp;
--
-       /*
-        * XXX: It's possible that a user could use a VGA box, change the cable
--       * type in hardware (i.e. switch from VGA<->composite), then change modes
--       * (i.e. switching to another VT).  If that happens we should automagically
--       * change the output format to cope, but currently I don't have a VGA box
--       * to make sure this works properly.
-+       * type in hardware (i.e. switch from VGA<->composite), then change
-+       * modes (i.e. switching to another VT).  If that happens we should
-+       * automagically change the output format to cope, but currently I
-+       * don't have a VGA box to make sure this works properly.
-        */
-       cable_type = pvr2_init_cable();
-       if (cable_type == CT_VGA && video_output != VO_VGA)
-               video_output = VO_VGA;
--      par->vmode = var->vmode & FB_VMODE_MASK;
--      if (par->vmode & FB_VMODE_INTERLACED && video_output != VO_VGA)
-+      var->vmode &= FB_VMODE_MASK;
-+      if (var->vmode & FB_VMODE_INTERLACED && video_output != VO_VGA)
-               par->is_interlaced = 1;
-       /* 
-        * XXX: Need to be more creative with this (i.e. allow doublecan for
-        * PAL/NTSC output).
-        */
--      par->is_doublescan = (par->yres < 480 && video_output == VO_VGA);
-+      if (var->vmode & FB_VMODE_DOUBLE && video_output == VO_VGA)
-+              par->is_doublescan = 1;
-       
-       par->hsync_total = var->left_margin + var->xres + var->right_margin +
-                          var->hsync_len;
-@@ -691,22 +344,12 @@ static int pvr2_decode_var(struct fb_var
-               if (par->is_interlaced)
-                       vtotal /= 2;
-               if (vtotal > (PAL_VTOTAL + NTSC_VTOTAL)/2) {
--                      /* PAL video output */
--                      /* XXX: Should be using a range here ... ? */
--                      if (par->hsync_total != PAL_HTOTAL) {
--                              DPRINTK("invalid hsync total for PAL\n");
--                              return -EINVAL;
--                      }
-                       /* XXX: Check for start values here... */
-                       /* XXX: Check hardware for PAL-compatibility */
-                       par->borderstart_h = 116;
-                       par->borderstart_v = 44;
-               } else {
-                       /* NTSC video output */
--                      if (par->hsync_total != NTSC_HTOTAL) {
--                              DPRINTK("invalid hsync total for NTSC\n");
--                              return -EINVAL;
--                      }
-                       par->borderstart_h = 126;
-                       par->borderstart_v = 18;
-               }
-@@ -714,155 +357,123 @@ static int pvr2_decode_var(struct fb_var
-               /* VGA mode */
-               /* XXX: What else needs to be checked? */
-               /* 
--               * XXX: We have a little freedom in VGA modes, what ranges should
--               * be here (i.e. hsync/vsync totals, etc.)?
-+               * XXX: We have a little freedom in VGA modes, what ranges
-+               * should be here (i.e. hsync/vsync totals, etc.)?
-                */
-               par->borderstart_h = 126;
-               par->borderstart_v = 40;
-       }
-       /* Calculate the remainding offsets */
--      par->borderstop_h = par->borderstart_h + par->hsync_total -
--                          var->hsync_len;
--      par->borderstop_v = par->borderstart_v + par->vsync_total -
--                          var->vsync_len;
-       par->diwstart_h = par->borderstart_h + var->left_margin;
-       par->diwstart_v = par->borderstart_v + var->upper_margin;
-+      par->borderstop_h = par->diwstart_h + var->xres + 
-+                          var->right_margin;    
-+      par->borderstop_v = par->diwstart_v + var->yres +
-+                          var->lower_margin;
-+
-       if (!par->is_interlaced)
-               par->borderstop_v /= 2;
--
--      if (par->xres < 640)
-+      if (info->var.xres < 640)
-               par->is_lowres = 1;
--      /* XXX: Needs testing. */
--      if (!((par->vmode ^ var->vmode) & FB_VMODE_YWRAP)) {
--              par->xoffset = var->xoffset;
--              par->yoffset = var->yoffset;
--              if (par->vmode & FB_VMODE_YWRAP) {
--                      if (par->xoffset || par->yoffset < 0 || par->yoffset >=
--                          par->vyres)
--                              par->xoffset = par->yoffset = 0;
--              } else {
--                      if (par->xoffset < 0 || par->xoffset > par->vxres-par->xres ||
--                          par->yoffset < 0 || par->yoffset > par->vyres-par->yres)
--                              par->xoffset = par->yoffset = 0;
--              }
--      } else
--              par->xoffset = par->yoffset = 0;
--
--      /* Check memory sizes */
-       line_length = get_line_length(var->xres_virtual, var->bits_per_pixel);
--      if (line_length * var->yres_virtual > videomemorysize)
--              return -ENOMEM;
--      par->disp_start = videomemory + (get_line_length(par->vxres, par->bpp) *
--                        par->yoffset) * get_line_length(par->xoffset, par->bpp);
--      par->next_line = line_length;
--      
-+      par->disp_start = videomemory + (line_length * var->yoffset) * line_length;
-+      info->fix.line_length = line_length;
-       return 0;
- }
--static int pvr2_encode_var(struct fb_var_screeninfo *var,
--                             struct pvr2fb_par *par)
-+static int pvr2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
- {
--      memset(var, 0, sizeof(struct fb_var_screeninfo));
-+      u_short vtotal, hsync_total;
-+      u_long line_length;
--      var->xres = par->xres;
--      var->yres = par->yres;
--      var->xres_virtual = par->vxres;
--      var->yres_virtual = par->vyres;
--      var->xoffset = par->xoffset;
--      var->yoffset = par->yoffset;
-+      if (var->pixclock != TV_CLK || var->pixclock != VGA_CLK) {
-+              DPRINTK("Invalid pixclock value %d\n", var->pixclock);
-+              return -EINVAL;
-+      }
--      var->bits_per_pixel = par->bpp;
--      set_color_bitfields(var);
-+      if (var->xres < 320)
-+              var->xres = 320;
-+      if (var->yres < 240)
-+              var->yres = 240;
-+      if (var->xres_virtual < var->xres)
-+              var->xres_virtual = var->xres;
-+      if (var->yres_virtual < var->yres)
-+              var->yres_virtual = var->yres;
-+
-+      if (var->bits_per_pixel <= 16)
-+              var->bits_per_pixel = 16;
-+      else if (var->bits_per_pixel <= 24)
-+              var->bits_per_pixel = 24;
-+      else if (var->bits_per_pixel <= 32)
-+              var->bits_per_pixel = 32;
--      var->activate = FB_ACTIVATE_NOW;
--      var->height = -1;
--      var->width = -1;
-+      set_color_bitfields(var);
--      var->pixclock = par->pixclock;
-+      if (var->vmode & FB_VMODE_YWRAP) {
-+              if (var->xoffset || var->yoffset < 0 || 
-+                  var->yoffset >= var->yres_virtual) {
-+                      var->xoffset = var->yoffset = 0;
-+              } else {
-+                      if (var->xoffset > var->xres_virtual - var->xres ||
-+                          var->yoffset > var->yres_virtual - var->yres || 
-+                          var->xoffset < 0 || var->yoffset < 0)
-+                              var->xoffset = var->yoffset = 0;
-+              }
-+      } else {
-+              var->xoffset = var->yoffset = 0;
-+      }
--      if (par->is_doublescan)
-+      /* 
-+       * XXX: Need to be more creative with this (i.e. allow doublecan for
-+       * PAL/NTSC output).
-+       */
-+      if (var->yres < 480 && video_output == VO_VGA)
-               var->vmode = FB_VMODE_DOUBLE;
--      if (par->is_interlaced)
--              var->vmode |= FB_VMODE_INTERLACED;
--      else
--              var->vmode |= FB_VMODE_NONINTERLACED;
--
--      var->right_margin = par->borderstop_h - (par->diwstart_h + par->xres);
--      var->left_margin = par->diwstart_h - par->borderstart_h;
--      var->hsync_len = par->borderstart_h + (par->hsync_total - par->borderstop_h);
--      var->upper_margin = par->diwstart_v - par->borderstart_v;
--      var->lower_margin = par->borderstop_v - (par->diwstart_v + par->yres);
--      var->vsync_len = par->borderstart_v + (par->vsync_total - par->borderstop_v);
-       if (video_output != VO_VGA)
--              var->sync = FB_SYNC_BROADCAST;
--
--      if (par->vmode & FB_VMODE_YWRAP)
--              var->vmode |= FB_VMODE_YWRAP;
--      
--      return 0;
--}
--
--static void pvr2_get_par(struct pvr2fb_par *par)
--{
--      *par = currentpar;
--}
--
--/* Setup the new videomode in hardware */
--
--static void pvr2_set_var(struct fb_var_screeninfo *var)
--{
--      do_vmode_pan = 0;
--      do_vmode_full = 0;
--      pvr2_decode_var(var, &currentpar);
--
--      do_vmode_full = 1;
--}
--
--/* 
-- * Pan or wrap the display
-- * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag in `var'.
-- */
--static void pvr2_pan_var(struct fb_var_screeninfo *var)
--{
--      struct pvr2fb_par *par = &currentpar;
-+              var->sync = FB_SYNC_BROADCAST | FB_VMODE_INTERLACED;
--      par->xoffset = var->xoffset;
--      par->yoffset = var->yoffset;
--      if (var->vmode & FB_VMODE_YWRAP)
--              par->vmode |= FB_VMODE_YWRAP;
--      else
--              par->vmode &= ~FB_VMODE_YWRAP;
--
--      do_vmode_pan = 0;
--      pvr2_update_par();
--      do_vmode_pan = 1;
--}
--
--static int pvr2_update_par(void)
--{
--      struct pvr2fb_par *par = &currentpar;
--      u_long move;
--
--      move = get_line_length(par->xoffset, par->bpp);
--      if (par->yoffset) {
--              par->disp_start += (par->next_line * par->yoffset) + move;
--      } else
--              par->disp_start += move;
-+      hsync_total = var->left_margin + var->xres + var->right_margin +
-+                    var->hsync_len;
-+      vtotal = var->upper_margin + var->yres + var->lower_margin +
-+               var->vsync_len;
-+      if (var->sync & FB_SYNC_BROADCAST) {
-+              if (var->vmode & FB_VMODE_INTERLACED)
-+                      vtotal /= 2;
-+              if (vtotal > (PAL_VTOTAL + NTSC_VTOTAL)/2) {
-+                      /* PAL video output */
-+                      /* XXX: Should be using a range here ... ? */
-+                      if (hsync_total != PAL_HTOTAL) {
-+                              DPRINTK("invalid hsync total for PAL\n");
-+                              return -EINVAL;
-+                      }
-+              } else {
-+                      /* NTSC video output */
-+                      if (hsync_total != NTSC_HTOTAL) {
-+                              DPRINTK("invalid hsync total for NTSC\n");
-+                              return -EINVAL;
-+                      }
-+              }
-+      }
-+      /* Check memory sizes */
-+      line_length = get_line_length(var->xres_virtual, var->bits_per_pixel);
-+      if (line_length * var->yres_virtual > videomemorysize)
-+              return -ENOMEM;
-       return 0;
- }
--static void pvr2_update_display(void)
-+static void pvr2_update_display(struct fb_info *info)
- {
--      struct pvr2fb_par *par = &currentpar;
-+      struct pvr2fb_par *par = (struct pvr2fb_par *) info->par;
-+      struct fb_var_screeninfo *var = &info->var;
-       /* Update the start address of the display image */
-       ctrl_outl(par->disp_start, DISP_DIWADDRL);
-       ctrl_outl(par->disp_start +
--                get_line_length(par->xoffset + par->xres, par->bpp),
-+                get_line_length(var->xoffset+var->xres, var->bits_per_pixel),
-                 DISP_DIWADDRS);
- }
-@@ -872,11 +483,12 @@ static void pvr2_update_display(void)
-  * registers are still undocumented.
-  */
--static void pvr2_init_display(void)
-+static void pvr2_init_display(struct fb_info *info)
- {
--      struct pvr2fb_par *par = &currentpar;
-+      struct pvr2fb_par *par = (struct pvr2fb_par *) info->par;
-+      struct fb_var_screeninfo *var = &info->var;
-       u_short diw_height, diw_width, diw_modulo = 1;
--      u_short bytesperpixel = par->bpp / 8;
-+      u_short bytesperpixel = var->bits_per_pixel >> 3;
-       /* hsync and vsync totals */
-       ctrl_outl((par->vsync_total << 16) | par->hsync_total, DISP_SYNCSIZE);
-@@ -885,16 +497,16 @@ static void pvr2_init_display(void)
-       /* since we're "panning" within vram, we need to offset things based
-        * on the offset from the virtual x start to our real gfx. */
-       if (video_output != VO_VGA && par->is_interlaced)
--              diw_modulo += par->next_line / 4;
--      diw_height = (par->is_interlaced ? par->yres / 2 : par->yres);
--      diw_width = get_line_length(par->xres, par->bpp) / 4;
-+              diw_modulo += info->fix.line_length / 4;
-+      diw_height = (par->is_interlaced ? var->yres / 2 : var->yres);
-+      diw_width = get_line_length(var->xres, var->bits_per_pixel) / 4;
-       ctrl_outl((diw_modulo << 20) | (--diw_height << 10) | --diw_width,
-                 DISP_DIWSIZE);
-       /* display address, long and short fields */
-       ctrl_outl(par->disp_start, DISP_DIWADDRL);
-       ctrl_outl(par->disp_start +
--                get_line_length(par->xoffset + par->xres, par->bpp),
-+                get_line_length(var->xoffset+var->xres, var->bits_per_pixel),
-                 DISP_DIWADDRS);
-       /* border horizontal, border vertical, border color */
-@@ -919,7 +531,6 @@ static void pvr2_init_display(void)
-       /* video enable, color sync, interlace, 
-        * hsync and vsync polarity (currently unused) */
-       ctrl_outl(0x100 | ((par->is_interlaced /*|4*/) << 4), DISP_SYNCCONF);
--
- }
- /* Simulate blanking by making the border cover the entire screen */
-@@ -941,23 +552,20 @@ static void pvr2_do_blank(void)
- static irqreturn_t pvr2fb_interrupt(int irq, void *dev_id, struct pt_regs *fp)
- {
--      if (do_vmode_pan || do_vmode_full)
--              pvr2_update_display();
-+      struct fb_info *info = dev_id;
-+      if (do_vmode_pan || do_vmode_full)
-+              pvr2_update_display(info);
-       if (do_vmode_full)
--              pvr2_init_display();
--
-+              pvr2_init_display(info);
-       if (do_vmode_pan)
-               do_vmode_pan = 0;
--
-+      if (do_vmode_full)
-+              do_vmode_full = 0;
-       if (do_blank) {
-               pvr2_do_blank();
-               do_blank = 0;
-       }
--
--      if (do_vmode_full) {
--              do_vmode_full = 0;
--      }
-       return IRQ_HANDLED;
- }
-@@ -991,94 +599,120 @@ static int pvr2_init_cable(void)
- int __init pvr2fb_init(void)
- {
--      struct fb_var_screeninfo var;
-       u_long modememused;
-+      int err = -EINVAL;
--      if (!MACH_DREAMCAST)
-+      if (!mach_is_dreamcast())
-               return -ENXIO;
-+      fb_info = kmalloc(sizeof(struct fb_info) + sizeof(struct pvr2fb_par) +
-+                        sizeof(u32) * 16, GFP_KERNEL);
-+      
-+      if (!fb_info) {
-+              printk(KERN_ERR "Failed to allocate memory for fb_info\n");
-+              return -ENOMEM;
-+      }
-+
-+      memset(fb_info, 0, sizeof(fb_info) + sizeof(struct pvr2fb_par) + sizeof(u32) * 16);
-+
-+      currentpar = (struct pvr2fb_par *)(fb_info + 1);
-+
-       /* Make a guess at the monitor based on the attached cable */
-       if (pvr2_init_cable() == CT_VGA) {
--              fb_info.monspecs.hfmin = 30000;
--              fb_info.monspecs.hfmax = 70000;
--              fb_info.monspecs.vfmin = 60;
--              fb_info.monspecs.vfmax = 60;
--      }
--      else { /* Not VGA, using a TV (taken from acornfb) */
--              fb_info.monspecs.hfmin = 15469;
--              fb_info.monspecs.hfmax = 15781;
--              fb_info.monspecs.vfmin = 49;
--              fb_info.monspecs.vfmax = 51;
-+              fb_info->monspecs.hfmin = 30000;
-+              fb_info->monspecs.hfmax = 70000;
-+              fb_info->monspecs.vfmin = 60;
-+              fb_info->monspecs.vfmax = 60;
-+      } else {
-+              /* Not VGA, using a TV (taken from acornfb) */
-+              fb_info->monspecs.hfmin = 15469;
-+              fb_info->monspecs.hfmax = 15781;
-+              fb_info->monspecs.vfmin = 49;
-+              fb_info->monspecs.vfmax = 51;
-       }
--      /* XXX: This needs to pull default video output via BIOS or other means */
-+      /*
-+       * XXX: This needs to pull default video output via BIOS or other means
-+       */
-       if (video_output < 0) {
--              if (cable_type == CT_VGA)
-+              if (cable_type == CT_VGA) {
-                       video_output = VO_VGA;
--              else
-+              } else {
-                       video_output = VO_NTSC;
-+              }
-       }
-       
--      strcpy(fb_info.modename, pvr2fb_name);
--      fb_info.changevar = NULL;
--      fb_info.fbops = &pvr2fb_ops;
--      fb_info.screen_base = (char *) videomemory;
--      fb_info.disp = &disp;
--      fb_info.currcon = -1;
--      fb_info.switch_con = &pvr2fbcon_switch;
--      fb_info.updatevar = &pvr2fbcon_updatevar;
--      fb_info.flags = FBINFO_FLAG_DEFAULT;
--      memset(&var, 0, sizeof(var));
-+      pvr2_fix.smem_start = videomemory;
-+      pvr2_fix.smem_len = videomemorysize;
-+
-+      fb_info->screen_base = ioremap_nocache(pvr2_fix.smem_start,
-+                                             pvr2_fix.smem_len);
-+      
-+      if (!fb_info->screen_base) {
-+              printk("Failed to remap MMIO space\n");
-+              err = -ENXIO;
-+              goto out_err;
-+      }
-+
-+      memset_io((unsigned long)fb_info->screen_base, 0, pvr2_fix.smem_len);
-+
-+      pvr2_fix.ypanstep       = nopan  ? 0 : 1;
-+      pvr2_fix.ywrapstep      = nowrap ? 0 : 1;
-+
-+      fb_info->fbops          = &pvr2fb_ops;
-+      fb_info->fix            = pvr2_fix;
-+      fb_info->par            = currentpar;
-+      fb_info->pseudo_palette = (void *)(fb_info->par + 1);
-+      fb_info->flags          = FBINFO_FLAG_DEFAULT;
-       if (video_output == VO_VGA)
-               defmode = DEFMODE_VGA;
--      if (!fb_find_mode(&var, &fb_info, mode_option, pvr2_modedb,
--                        NUM_TOTAL_MODES, &pvr2_modedb[defmode], 16)) {
--              return -EINVAL;
--      }
-+      if (!mode_option)
-+              mode_option = "640x480@60";
--      if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, 0,
--                      "pvr2 VBL handler", &currentpar)) {
--              DPRINTK("couldn't register VBL int\n");
--              return -EBUSY;
--      }
-+      if (!fb_find_mode(&fb_info->var, fb_info, mode_option, pvr2_modedb,
-+                        NUM_TOTAL_MODES, &pvr2_modedb[defmode], 16))
-+              fb_info->var = pvr2_var;
--#ifdef CONFIG_MTRR
--      if (enable_mtrr) {
--              mtrr_handle = mtrr_add(videomemory, videomemorysize, MTRR_TYPE_WRCOMB, 1);
--              printk("pvr2fb: MTRR turned on\n");
-+      if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, 0,
-+                      "pvr2 VBL handler", fb_info)) {
-+              err = -EBUSY;
-+              goto out_err;
-       }
--#endif
--      pvr2fb_set_var(&var, -1, &fb_info);
-+      if (register_framebuffer(fb_info) < 0)
-+              goto reg_failed;
--      if (register_framebuffer(&fb_info) < 0)
--              return -EINVAL;
-+      modememused = get_line_length(fb_info->var.xres_virtual,
-+                                    fb_info->var.bits_per_pixel);
-+      modememused *= fb_info->var.yres_virtual;
--      modememused = get_line_length(var.xres_virtual, var.bits_per_pixel);
--      modememused *= var.yres_virtual;
-       printk("fb%d: %s frame buffer device, using %ldk/%ldk of video memory\n",
--             fb_info.node, fb_info.modename, modememused>>10,
-+             fb_info->node, fb_info->fix.id, modememused>>10,
-              videomemorysize>>10);
-       printk("fb%d: Mode %dx%d-%d pitch = %ld cable: %s video output: %s\n", 
--             fb_info.node, var.xres, var.yres, var.bits_per_pixel, 
--             get_line_length(var.xres, var.bits_per_pixel),
-+             fb_info->node, fb_info->var.xres, fb_info->var.yres,
-+             fb_info->var.bits_per_pixel, 
-+             get_line_length(fb_info->var.xres, fb_info->var.bits_per_pixel),
-              (char *)pvr2_get_param(cables, NULL, cable_type, 3),
-              (char *)pvr2_get_param(outputs, NULL, video_output, 3));
-       return 0;
-+
-+reg_failed:
-+      free_irq(HW_EVENT_VSYNC, 0);
-+out_err:
-+      kfree(fb_info);
-+
-+      return err;
- }
- static void __exit pvr2fb_exit(void)
- {
--#ifdef CONFIG_MTRR
--      if (enable_mtrr) {
--              mtrr_del(mtrr_handle, videomemory, videomemorysize);
--              printk("pvr2fb: MTRR turned off\n");
--      }
--#endif
--      unregister_framebuffer(&fb_info);
-+      unregister_framebuffer(fb_info);
-+      free_irq(HW_EVENT_VSYNC, 0);
-+      kfree(fb_info);
- }
- static int __init pvr2_get_param(const struct pvr2_params *p, const char *s,
-@@ -1102,7 +736,6 @@ static int __init pvr2_get_param(const s
-  * Parse command arguments.  Supported arguments are:
-  *    inverse                             Use inverse color maps
-  *    nomtrr                              Disable MTRR usage
-- *    font:<fontname>                     Specify console font
-  *    cable:composite|rgb|vga             Override the video cable type
-  *    output:NTSC|PAL|VGA                 Override the video output format
-  *
-@@ -1117,8 +750,6 @@ int __init pvr2fb_setup(char *options)
-       char cable_arg[80];
-       char output_arg[80];
--      fb_info.fontname[0] = '\0';
--
-       if (!options || !*options)
-               return 0;
-@@ -1128,23 +759,21 @@ int __init pvr2fb_setup(char *options)
-               if (!strcmp(this_opt, "inverse")) {
-                       pvr2fb_inverse = 1;
-                       fb_invert_cmaps();
--              } else if (!strncmp(this_opt, "font:", 5))
--                      strcpy(fb_info.fontname, this_opt + 5);
--              else if (!strncmp(this_opt, "cable:", 6))
-+              } else if (!strncmp(this_opt, "cable:", 6)) {
-                       strcpy(cable_arg, this_opt + 6);
--              else if (!strncmp(this_opt, "output:", 7))
-+              } else if (!strncmp(this_opt, "output:", 7)) {
-                       strcpy(output_arg, this_opt + 7);
--#ifdef CONFIG_MTRR
--              else if (!strncmp(this_opt, "nomtrr", 6))
--                      enable_mtrr = 0;
--#endif
--              else
-+              } else if (!strncmp(this_opt, "nopan", 5)) {
-+                      nopan = 1;
-+              } else if (!strncmp(this_opt, "nowrap", 6)) {
-+                      nowrap = 1;
-+              } else {
-                       mode_option = this_opt;
-+              }
-       }
-       if (*cable_arg)
-               cable_type = pvr2_get_param(cables, cable_arg, 0, 3);
--
-       if (*output_arg)
-               video_output = pvr2_get_param(outputs, output_arg, 0, 3);
---- linux-2.6.0-test1/drivers/video/sis/300vtbl.h      2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/video/sis/300vtbl.h     2003-07-19 17:04:55.000000000 -0700
-@@ -1,7 +1,30 @@
--
--
--/* Register settings for SiS 300 series */
--
-+/* $XFree86$ */
-+/*
-+ * Register settings for SiS 300 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
- typedef struct _SiS300_StStruct
- {
-@@ -39,470 +62,109 @@ static const SiS300_StStruct  SiS300_SMo
-       {0xff,     0,   0,   0,   0,   0,   0,   0}
- };
--typedef struct _SiS300_StandTableStruct
--{
--      UCHAR CRT_COLS;
--      UCHAR ROWS;
--      UCHAR CHAR_HEIGHT;
--      USHORT CRT_LEN;
--      UCHAR SR[4];
--      UCHAR MISC;
--      UCHAR CRTC[0x19];
--      UCHAR ATTR[0x14];
--      UCHAR GRC[9];
--} SiS300_StandTableStruct;
--
--static const SiS300_StandTableStruct  SiS300_StandTable[] =
--{
-- {0x28,0x18,0x08,0x0800,                      /* 0x00 */
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x28,0x18,0x08,0x0800,                      /* 0x01 */
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x50,0x18,0x08,0x1000,                      /* 0x02 */
--  {0x01,0x03,0x00,0x02},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x50,0x18,0x08,0x1000,                      /* 0x03 */
--  {0x01,0x03,0x00,0x02},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x28,0x18,0x08,0x4000,                      /* 0x04 */
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,
--   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
--   0xff},
--  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x03,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
--   0xff} },
-- {0x28,0x18,0x08,0x4000,                      /* 0x05 */
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,
--   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
--   0xff},
--  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x03,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
--   0xff} },
-- {0x50,0x18,0x08,0x4000,                      /* 0x06 */
--  {0x01,0x01,0x00,0x06},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
--   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
--   0xff},
--  {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
--   0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
--   0x01,0x00,0x01,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
--   0xff} },
-- {0x50,0x18,0x0e,0x1000,                      /* 0x07 */
--  {0x00,0x03,0x00,0x03},
--  0xa6,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
--   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
--   0x0e,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
--   0xff} },
--/* MDA_DAC*/
-- {0x00,0x00,0x00,0x0000,                      /* 0x08 */
--  {0x00,0x00,0x00,0x15},
--  0x15,
--  {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
--   0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
--   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
--   0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
--   0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
--   0x15,0x15,0x15,0x15},
--  {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
--   0x3f} },
--/* CGA_DAC*/
-- {0x00,0x10,0x04,0x0114,                      /* 0x09 */
--  {0x11,0x09,0x15,0x00},
--  0x10,
--  {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
--   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
--   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
--   0x04},
--  {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
--   0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
--   0x3e,0x2b,0x3b,0x2f},
--  {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
--   0x3f} },
--/* EGA_DAC*/
-- {0x00,0x10,0x04,0x0114,                      /* 0x0a */
--  {0x11,0x05,0x15,0x20},
--  0x30,
--  {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
--   0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
--   0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
--   0x06},
--  {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
--   0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
--   0x1e,0x0b,0x1b,0x0f},
--  {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
--   0x3f} },
--/* VGA_DAC*/
-- {0x00,0x10,0x04,0x0114,                      /* 0x0b */
--  {0x11,0x09,0x15,0x2a},
--  0x3a,
--  {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
--   0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
--   0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
--   0x1f},
--  {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
--   0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
--   0x1c,0x0e,0x11,0x15},
--  {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
--   0x04} },
-- {0x08,0x0c,0x10,0x0a08,                      /* 0x0c */
--  {0x0c,0x0e,0x10,0x0b},
--  0x0c,
--  {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
--   0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
--   0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
--   0x06},
--  {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
--   0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
--   0x00,0x00,0x00,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00} },
-- {0x28,0x18,0x08,0x2000,                      /* 0x0d */
--  {0x09,0x0f,0x00,0x06},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,
--   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff} },
-- {0x50,0x18,0x08,0x4000,                      /* 0x0e */
--  {0x01,0x0f,0x00,0x06},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
--   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff} },
-- {0x00,0x00,0x00,0x0000,                      /* 0x0f */      /* TW: Standtable for VGA modes */
--  {0x01,0x0f,0x00,0x0e},
--  0x23,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
--   0x01,0x00,0x00,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
--   0xff} },
-- {0x4a,0x36,0x00,0x00c0,                      /* 0x10 */
--  {0x00,0x00,0x00,0x00},
--  0x00,
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x3a,
--   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00,0x00,0x1a,0x00,0x57,0x39,0x00,0xc0,
--   0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00,0x00,0x00,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00} },
-- {0x50,0x18,0x0e,0x8000,                      /* 0x11 */
--  {0x01,0x0f,0x00,0x06},
--  0xa2,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x0f,0x63,0xba,0xe3,
--   0xff},
--  {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
--   0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
--   0x0b,0x00,0x05,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
--   0xff} },
-- {0x50,0x18,0x0e,0x8000,                      /* 0x12 */
--  {0x01,0x0f,0x00,0x06},
--  0xa3,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x0f,0x63,0xba,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff} },
-- {0x28,0x18,0x0e,0x0800,                      /* 0x13 */
--  {0x09,0x03,0x00,0x02},
--  0xa3,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x28,0x18,0x0e,0x0800,                      /* 0x14 */
--  {0x09,0x03,0x00,0x02},
--  0xa3,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x50,0x18,0x0e,0x1000,                      /* 0x15 */
--  {0x01,0x03,0x00,0x02},
--  0xa3,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x50,0x18,0x0e,0x1000,                      /* 0x16 */
--  {0x01,0x03,0x00,0x02},
--  0xa3,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x28,0x18,0x10,0x0800,                      /* 0x17 */
--  {0x08,0x03,0x00,0x02},
--  0x67,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x0c,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x50,0x18,0x10,0x1000,                      /* 0x18 */
--  {0x00,0x03,0x00,0x02},
--  0x67,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x0c,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff} },
-- {0x50,0x18,0x10,0x1000,                      /* 0x19 */
--  {0x00,0x03,0x00,0x02},
--  0x66,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
--   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
--   0x0e,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
--   0xff} },
-- {0x50,0x1d,0x10,0xa000,                      /* 0x1a */
--  {0x01,0x0f,0x00,0x06},
--  0xe3,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0xea,0x8c,0xdf,0x28,0x00,0xe7,0x04,0xc3,
--   0xff},
--  {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
--   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
--   0xff} },
-- {0x50,0x1d,0x10,0xa000,                      /* 0x1b */
--  {0x01,0x0f,0x00,0x06},
--  0xe3,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0xea,0x8c,0xdf,0x28,0x00,0xe7,0x04,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff} },
-- {0x28,0x18,0x08,0x2000,                      /* 0x1c */
--  {0x01,0x0f,0x00,0x0e},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,
--   0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
--   0x41,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
--   0xff} }
--};
--
- typedef struct _SiS300_ExtStruct
- {
--      UCHAR Ext_ModeID;
-+      UCHAR  Ext_ModeID;
-       USHORT Ext_ModeFlag;
-       USHORT Ext_ModeInfo;
--      USHORT Ext_Point;
-       USHORT Ext_VESAID;
--      UCHAR Ext_VESAMEMSize;
--      UCHAR Ext_RESINFO;
--      UCHAR VB_ExtTVFlickerIndex;
--      UCHAR VB_ExtTVEdgeIndex;
--      UCHAR VB_ExtTVYFilterIndex;
--      UCHAR REFindex;
-+      UCHAR  Ext_RESINFO;
-+      UCHAR  VB_ExtTVFlickerIndex;
-+      UCHAR  VB_ExtTVEdgeIndex;
-+      UCHAR  VB_ExtTVYFilterIndex;
-+      UCHAR  REFindex;
- } SiS300_ExtStruct;
- static const SiS300_ExtStruct  SiS300_EModeIDTable[] =
- {
--      {0x6a,0x2212,0x47,0x3563,0x0102,0x08,0x07,0x00,0x00,0x00,0x00},  /* 800x600x? */
--      {0x2e,0x0a1b,0x36,0x3539,0x0101,0x08,0x06,0x00,0x00,0x00,0x08},
--      {0x2f,0x021b,0x35,0x3532,0x0100,0x08,0x05,0x00,0x00,0x00,0x10},  /* 640x400x8 */
--      {0x30,0x2a1b,0x47,0x3563,0x0103,0x08,0x07,0x00,0x00,0x00,0x00},
--      {0x31,0x0a1b,0xad,0x3630,0x0000,0x08,0x0c,0x00,0x00,0x00,0x11},  /* 720x480x8 */
--      {0x32,0x2a1b,0xae,0x3637,0x0000,0x08,0x0d,0x00,0x00,0x00,0x12},  /* 720x576x8 */
--      {0x33,0x0a1d,0xad,0x3630,0x0000,0x08,0x0c,0x00,0x00,0x00,0x11},  /* 720x480x16 */
--      {0x34,0x2a1d,0xae,0x3637,0x0000,0x08,0x0d,0x00,0x00,0x00,0x12},  /* 720x576x16 */
--      {0x35,0x0a1f,0xad,0x3630,0x0000,0x08,0x0c,0x00,0x00,0x00,0x11},  /* 720x480x32 */
--      {0x36,0x2a1f,0xae,0x3637,0x0000,0x08,0x0d,0x00,0x00,0x00,0x12},  /* 720x576x32 */
--      {0x37,0x0212,0x58,0x358d,0x0104,0x08,0x08,0x00,0x00,0x00,0x13},  /* 1024x768x? */
--      {0x38,0x0a1b,0x58,0x358d,0x0105,0x08,0x08,0x00,0x00,0x00,0x13},  /* 1024x768x8 */
--      {0x3a,0x0e3b,0x69,0x35be,0x0107,0x08,0x09,0x00,0x00,0x00,0x1a},  /* 1280x1024x8 */
--      {0x3c,0x063b,0x7a,0x35d4,0x0130,0x08,0x0a,0x00,0x00,0x00,0x1e},
--      {0x3d,0x067d,0x7a,0x35d4,0x0131,0x08,0x0a,0x00,0x00,0x00,0x1e},
--      {0x40,0x921c,0x00,0x3516,0x010d,0x08,0x00,0x00,0x00,0x00,0x23},
--      {0x41,0x921d,0x00,0x3516,0x010e,0x08,0x00,0x00,0x00,0x00,0x23},
--      {0x43,0x0a1c,0x36,0x3539,0x0110,0x08,0x06,0x00,0x00,0x00,0x08},
--      {0x44,0x0a1d,0x36,0x3539,0x0111,0x08,0x06,0x00,0x00,0x00,0x08},
--      {0x46,0x2a1c,0x47,0x3563,0x0113,0x08,0x07,0x00,0x00,0x00,0x00},  /* 800x600 */
--      {0x47,0x2a1d,0x47,0x3563,0x0114,0x08,0x07,0x00,0x00,0x00,0x00},  /* 800x600 */
--      {0x49,0x0a3c,0x58,0x358d,0x0116,0x08,0x08,0x00,0x00,0x00,0x13},
--      {0x4a,0x0a3d,0x58,0x358d,0x0117,0x08,0x08,0x00,0x00,0x00,0x13},
--      {0x4c,0x0e7c,0x69,0x35be,0x0119,0x08,0x09,0x00,0x00,0x00,0x1a},
--      {0x4d,0x0e7d,0x69,0x35be,0x011a,0x08,0x09,0x00,0x00,0x00,0x1a},
--      {0x50,0x921b,0x01,0x351d,0x0132,0x08,0x01,0x00,0x00,0x00,0x24},
--      {0x51,0xb21b,0x13,0x3524,0x0133,0x08,0x03,0x00,0x00,0x00,0x25},  /* 400x300 */
--      {0x52,0x921b,0x24,0x352b,0x0134,0x08,0x04,0x00,0x00,0x00,0x26},
--      {0x56,0x921d,0x01,0x351d,0x0135,0x08,0x01,0x00,0x00,0x00,0x24},
--      {0x57,0xb21d,0x13,0x3524,0x0136,0x08,0x03,0x00,0x00,0x00,0x25},  /* 400x300 */
--      {0x58,0x921d,0x24,0x352b,0x0137,0x08,0x04,0x00,0x00,0x00,0x26},  
--      {0x59,0x921b,0x00,0x3516,0x0138,0x08,0x00,0x00,0x00,0x00,0x23}, 
--      {0x5c,0x921f,0x24,0x352b,0x0000,0x08,0x04,0x00,0x00,0x00,0x26},  /* TW: inserted 512x384x32 */
--      {0x5d,0x021d,0x35,0x3532,0x0139,0x08,0x05,0x00,0x00,0x00,0x10},  /* 640x400x16 */
--      {0x5e,0x021f,0x35,0x3532,0x0000,0x08,0x05,0x00,0x00,0x00,0x10},  /* TW: inserted 640x400x32 */
--      {0x62,0x0a3f,0x36,0x3539,0x013a,0x08,0x06,0x00,0x00,0x00,0x08},
--      {0x63,0x2a3f,0x47,0x3563,0x013b,0x08,0x07,0x00,0x00,0x00,0x00},  /* 800x600 */
--      {0x64,0x0a7f,0x58,0x358d,0x013c,0x08,0x08,0x00,0x00,0x00,0x13},
--      {0x65,0x0eff,0x69,0x35be,0x013d,0x08,0x09,0x00,0x00,0x00,0x1a},
--      {0x66,0x06ff,0x7a,0x35d4,0x013e,0x08,0x0a,0x00,0x00,0x00,0x1e},
--      {0x68,0x067b,0x8b,0x35ef,0x013f,0x08,0x0b,0x00,0x00,0x00,0x27},
--      {0x69,0x06fd,0x8b,0x35ef,0x0140,0x08,0x0b,0x00,0x00,0x00,0x27},
--      {0x6b,0x07ff,0x8b,0x35ef,0x0000,0x10,0x0b,0x00,0x00,0x00,0x27},
--      {0x6c,0x067b,0x9c,0x35f6,0x0000,0x08,0x11,0x00,0x00,0x00,0x28},  /* TW: 2048x1536x8 - not in BIOS! */
--      {0x6d,0x06fd,0x9c,0x35f6,0x0000,0x10,0x11,0x00,0x00,0x00,0x28},  /* TW: 2048x1536x16 - not in BIOS! */
--      {0x6e,0x0a3b,0x6f,0x35b2,0x0000,0x08,0x0e,0x00,0x00,0x00,0x29},  /* 1280x960x8 */
--      {0x6f,0x0a7d,0x6f,0x35b2,0x0000,0x08,0x0e,0x00,0x00,0x00,0x29},  /* 1280x960x16 */
--      /* TW: 16:9 modes copied from 310/325 series - not in ANY BIOS */
--      {0x70,0x2a1b,0x40,0x3b52,0x0000,0x08,0x12,0x00,0x00,0x07,0x2d},    /* 800x480x8 */
--      {0x71,0x0a1b,0x51,0x3b63,0x0000,0x08,0x13,0x00,0x00,0x00,0x30},    /* 1024x576x8 */
--      {0x74,0x0a1d,0x51,0x3b63,0x0000,0x08,0x13,0x00,0x00,0x00,0x30},    /* 1024x576x16 */
--      {0x75,0x0e3d,0x62,0x3b74,0x0000,0x08,0x14,0x00,0x00,0x00,0x33},    /* 1280x720x16 */
--      {0x76,0x2a1f,0x40,0x3b52,0x0000,0x08,0x12,0x00,0x00,0x07,0x2d},    /* 800x480x32 */
--      {0x77,0x0a3f,0x51,0x3b63,0x0000,0x08,0x13,0x00,0x00,0x00,0x30},    /* 1024x576x32 */
--      {0x78,0x0eff,0x62,0x3b74,0x0000,0x08,0x14,0x00,0x00,0x00,0x33},    /* 1280x720x32 */
--      {0x79,0x0e3b,0x62,0x3b74,0x0000,0x08,0x14,0x00,0x00,0x00,0x33},    /* 1280x720x8 */
--      {0x7a,0x2a1d,0x40,0x3b52,0x0000,0x08,0x12,0x00,0x00,0x07,0x2d},    /* 800x480x16 */
--      /* TW: End of new 16:9 modes */
--      {0x7b,0x0aff,0x6f,0x35b2,0x0000,0x08,0x0e,0x00,0x00,0x00,0x29},    /* 1280x960x32 */
--      {0x20,0x0a1b,0x54,0x0000,0x0000,0x08,0x0f,0x00,0x00,0x00,0x2b},    /* 1024x600 */
--      {0x21,0x0a3d,0x54,0x0000,0x0000,0x08,0x0f,0x00,0x00,0x00,0x2b},
--      {0x22,0x0a7f,0x54,0x0000,0x0000,0x08,0x0f,0x00,0x00,0x00,0x2b},
--      {0x23,0x0a1b,0xc5,0x0000,0x0000,0x08,0x10,0x00,0x00,0x00,0x2c},    /* 1152x768 */
--      {0x24,0x0a3d,0xc5,0x431d,0x0000,0x08,0x10,0x00,0x00,0x00,0x2c},
--      {0x25,0x0a7f,0xc5,0x431d,0x0000,0x08,0x10,0x00,0x00,0x00,0x2c},
--      {0x29,0x0e1b,0xc5,0x0000,0x0000,0x08,0x15,0x00,0x00,0x00,0x36},    /* TW: NEW 1152x864 - not in BIOS */
--      {0x2a,0x0e3d,0xc5,0x0000,0x0000,0x08,0x15,0x00,0x00,0x00,0x36},
--      {0x2b,0x0e7f,0xc5,0x0000,0x0000,0x08,0x15,0x00,0x00,0x00,0x36},
--      {0x39,0x2a1b,0xd6,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x38},    /* TW: NEW 848x480 - not in BIOS */
--      {0x3b,0x2a3d,0xd6,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x38},
--      {0x3e,0x2a7f,0xd6,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x38},
--      {0x3f,0x2a1b,0xd7,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x3a},    /* TW: NEW 856x480 - not in BIOS */
--      {0x42,0x2a3d,0xd7,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x3a},
--      {0x45,0x2a7f,0xd7,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x3a},
--      {0x48,0x223b,0xe8,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x3c},    /* TW: NEW 1360x768 - not in BIOS */
--      {0x4b,0x227d,0xe8,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x3c},
--      {0x4e,0x22ff,0xe8,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x3c},
--      {0xff,0x0000,0x00,0x0000,0xffff,0x00,0x00,0x00,0x00,0x00,0x00}
-+      {0x6a,0x2212,0x0407,0x0102,SIS_RI_800x600,  0x00,0x00,0x00,0x00},  /* 800x600x? */
-+      {0x2e,0x0a1b,0x0306,0x0101,SIS_RI_640x480,  0x00,0x00,0x00,0x08},
-+      {0x2f,0x021b,0x0305,0x0100,SIS_RI_640x400,  0x00,0x00,0x00,0x10},  /* 640x400x8 */
-+      {0x30,0x2a1b,0x0407,0x0103,SIS_RI_800x600,  0x00,0x00,0x00,0x00},
-+      {0x31,0x0a1b,0x0a0d,0x0000,SIS_RI_720x480,  0x00,0x00,0x00,0x11},  /* 720x480x8 */
-+      {0x32,0x2a1b,0x0a0e,0x0000,SIS_RI_720x576,  0x00,0x00,0x00,0x12},  /* 720x576x8 */
-+      {0x33,0x0a1d,0x0a0d,0x0000,SIS_RI_720x480,  0x00,0x00,0x00,0x11},  /* 720x480x16 */
-+      {0x34,0x2a1d,0x0a0e,0x0000,SIS_RI_720x576,  0x00,0x00,0x00,0x12},  /* 720x576x16 */
-+      {0x35,0x0a1f,0x0a0d,0x0000,SIS_RI_720x480,  0x00,0x00,0x00,0x11},  /* 720x480x32 */
-+      {0x36,0x2a1f,0x0a0e,0x0000,SIS_RI_720x576,  0x00,0x00,0x00,0x12},  /* 720x576x32 */
-+      {0x37,0x0212,0x0508,0x0104,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},  /* 1024x768x? */
-+      {0x38,0x0a1b,0x0508,0x0105,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},  /* 1024x768x8 */
-+      {0x3a,0x0e3b,0x0609,0x0107,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},  /* 1280x1024x8 */
-+      {0x3c,0x063b,0x070a,0x0130,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e},
-+      {0x3d,0x067d,0x070a,0x0131,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e},
-+      {0x40,0x921c,0x0000,0x010d,SIS_RI_320x200,  0x00,0x00,0x00,0x23},  /* 320x200x15 */
-+      {0x41,0x921d,0x0000,0x010e,SIS_RI_320x200,  0x00,0x00,0x00,0x23},  /* 320x200x16 */
-+      {0x43,0x0a1c,0x0306,0x0110,SIS_RI_640x480,  0x00,0x00,0x00,0x08},
-+      {0x44,0x0a1d,0x0306,0x0111,SIS_RI_640x480,  0x00,0x00,0x00,0x08},
-+      {0x46,0x2a1c,0x0407,0x0113,SIS_RI_800x600,  0x00,0x00,0x00,0x00},  /* 800x600x15 */
-+      {0x47,0x2a1d,0x0407,0x0114,SIS_RI_800x600,  0x00,0x00,0x00,0x00},  /* 800x600x16 */
-+      {0x49,0x0a3c,0x0508,0x0116,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+      {0x4a,0x0a3d,0x0508,0x0117,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+      {0x4c,0x0e7c,0x0609,0x0119,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+      {0x4d,0x0e7d,0x0609,0x011a,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+      {0x50,0x921b,0x0001,0x0132,SIS_RI_320x240,  0x00,0x00,0x00,0x24},  /* 320x240x8  */
-+      {0x51,0xb21b,0x0103,0x0133,SIS_RI_400x300,  0x00,0x00,0x00,0x25},  /* 400x300x8  */
-+      {0x52,0x921b,0x0204,0x0134,SIS_RI_512x384,  0x00,0x00,0x00,0x26},  /* 512x384x8  */
-+      {0x56,0x921d,0x0001,0x0135,SIS_RI_320x240,  0x00,0x00,0x00,0x24},  /* 320x240x16 */
-+      {0x57,0xb21d,0x0103,0x0136,SIS_RI_400x300,  0x00,0x00,0x00,0x25},  /* 400x300x16 */
-+      {0x58,0x921d,0x0204,0x0137,SIS_RI_512x384,  0x00,0x00,0x00,0x26},  /* 512x384x16 */
-+      {0x59,0x921b,0x0000,0x0138,SIS_RI_320x200,  0x00,0x00,0x00,0x23},  /* 320x200x8  */
-+      {0x5c,0x921f,0x0204,0x0000,SIS_RI_512x384,  0x00,0x00,0x00,0x26},  /* 512x384x32 */
-+      {0x5d,0x021d,0x0305,0x0139,SIS_RI_640x400,  0x00,0x00,0x00,0x10},  /* 640x400x16 */
-+      {0x5e,0x021f,0x0305,0x0000,SIS_RI_640x400,  0x00,0x00,0x00,0x10},  /* 640x400x32 */
-+      {0x62,0x0a3f,0x0306,0x013a,SIS_RI_640x480,  0x00,0x00,0x00,0x08},
-+      {0x63,0x2a3f,0x0407,0x013b,SIS_RI_800x600,  0x00,0x00,0x00,0x00},  /* 800x600x32 */
-+      {0x64,0x0a7f,0x0508,0x013c,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+      {0x65,0x0eff,0x0609,0x013d,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+      {0x66,0x06ff,0x070a,0x013e,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e},
-+      {0x68,0x067b,0x080b,0x013f,SIS_RI_1920x1440,0x00,0x00,0x00,0x27},
-+      {0x69,0x06fd,0x080b,0x0140,SIS_RI_1920x1440,0x00,0x00,0x00,0x27},
-+      {0x6b,0x07ff,0x080b,0x0000,SIS_RI_1920x1440,0x00,0x00,0x00,0x27},
-+      {0x6c,0x067b,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x28},  /* 2048x1536x8 - not in BIOS! */
-+      {0x6d,0x06fd,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x28},  /* 2048x1536x16 - not in BIOS! */
-+      {0x70,0x2a1b,0x0400,0x0000,SIS_RI_800x480,  0x00,0x00,0x07,0x2d},  /* 800x480x8 */
-+      {0x71,0x0a1b,0x0501,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x30},  /* 1024x576x8 */
-+      {0x74,0x0a1d,0x0501,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x30},  /* 1024x576x16 */
-+      {0x75,0x0e3d,0x0602,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x33},  /* 1280x720x16 */
-+      {0x76,0x2a1f,0x0400,0x0000,SIS_RI_800x480,  0x00,0x00,0x07,0x2d},  /* 800x480x32 */
-+      {0x77,0x0a3f,0x0501,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x30},  /* 1024x576x32 */
-+      {0x78,0x0eff,0x0602,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x33},  /* 1280x720x32 */
-+      {0x79,0x0e3b,0x0602,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x33},  /* 1280x720x8 */
-+      {0x7a,0x2a1d,0x0400,0x0000,SIS_RI_800x480,  0x00,0x00,0x07,0x2d},  /* 800x480x16 */
-+      {0x7c,0x0a3b,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x29},  /* 1280x960x8 */
-+      {0x7d,0x0a7d,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x29},  /* 1280x960x16 */
-+      {0x7e,0x0aff,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x29},  /* 1280x960x32 */
-+      {0x20,0x0a1b,0x0504,0x0000,SIS_RI_1024x600, 0x00,0x00,0x00,0x2b},  /* 1024x600 */
-+      {0x21,0x0a3d,0x0504,0x0000,SIS_RI_1024x600, 0x00,0x00,0x00,0x2b},
-+      {0x22,0x0a7f,0x0504,0x0000,SIS_RI_1024x600, 0x00,0x00,0x00,0x2b},
-+      {0x23,0x0a1b,0x0c05,0x0000,SIS_RI_1152x768, 0x00,0x00,0x00,0x2c},  /* 1152x768 */
-+      {0x24,0x0a3d,0x0c05,0x0000,SIS_RI_1152x768, 0x00,0x00,0x00,0x2c},
-+      {0x25,0x0a7f,0x0c05,0x0000,SIS_RI_1152x768, 0x00,0x00,0x00,0x2c},
-+      {0x29,0x0e1b,0x0c05,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x36},  /* 1152x864 */
-+      {0x2a,0x0e3d,0x0c05,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x36},
-+      {0x2b,0x0e7f,0x0c05,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x36},
-+      {0x39,0x2a1b,0x0d06,0x0000,SIS_RI_848x480,  0x00,0x00,0x00,0x38},  /* 848x480 */
-+      {0x3b,0x2a3d,0x0d06,0x0000,SIS_RI_848x480,  0x00,0x00,0x00,0x38},
-+      {0x3e,0x2a7f,0x0d06,0x0000,SIS_RI_848x480,  0x00,0x00,0x00,0x38},
-+      {0x3f,0x2a1b,0x0d07,0x0000,SIS_RI_856x480,  0x00,0x00,0x00,0x3a},  /* 856x480 */
-+      {0x42,0x2a3d,0x0d07,0x0000,SIS_RI_856x480,  0x00,0x00,0x00,0x3a},
-+      {0x45,0x2a7f,0x0d07,0x0000,SIS_RI_856x480,  0x00,0x00,0x00,0x3a},
-+      {0x48,0x223b,0x0e08,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x3c},  /* 1360x768 */
-+      {0x4b,0x227d,0x0e08,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x3c},
-+      {0x4e,0x22ff,0x0e08,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x3c},
-+      {0x4f,0x921f,0x0000,0x0000,SIS_RI_320x200,  0x00,0x00,0x00,0x23},  /* 320x200x32 */
-+      {0x53,0x921f,0x0001,0x0000,SIS_RI_320x240,  0x00,0x00,0x00,0x24},  /* 320x240x32 */
-+      {0x54,0xb21f,0x0103,0x0000,SIS_RI_400x300,  0x00,0x00,0x00,0x25},  /* 400x300x32 */
-+      {0x55,0x2e3b,0x0609,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x3d},  /* 1280x768   */
-+      {0x5a,0x2e7d,0x0609,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x3d},
-+      {0x5b,0x2eff,0x0609,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x3d},
-+      {0x5f,0x2a1b,0x0f0e,0x0000,SIS_RI_768x576,  0x00,0x00,0x00,0x3e},  /* 768x576x8 */
-+      {0x60,0x2a1d,0x0f0e,0x0000,SIS_RI_768x576,  0x00,0x00,0x00,0x3e},  /* 768x576x16 */
-+      {0x61,0x2a1f,0x0f0e,0x0000,SIS_RI_768x576,  0x00,0x00,0x00,0x3e},  /* 768x576x32 */
-+      {0x67,0x2e3b,0x0e08,0x0000,SIS_RI_1360x1024,0x00,0x00,0x00,0x3f},  /* 1360x1024x8 (BARCO) */
-+      {0x6f,0x2e7d,0x0e08,0x0000,SIS_RI_1360x1024,0x00,0x00,0x00,0x3f},  /* 1360x1024x16 (BARCO) */
-+      {0x72,0x2eff,0x0e08,0x0000,SIS_RI_1360x1024,0x00,0x00,0x00,0x3f},  /* 1360x1024x32 (BARCO) */
-+      {0xff,0x0000,0x0000,0xffff,0x00,            0x00,0x00,0x00,0x00}
- };
- typedef struct _SiS300_Ext2Struct
-@@ -514,76 +176,77 @@ typedef struct _SiS300_Ext2Struct
-       UCHAR  ModeID;
-       USHORT XRes;
-       USHORT YRes;
--      USHORT ROM_OFFSET;
- } SiS300_Ext2Struct;
- static const SiS300_Ext2Struct  SiS300_RefIndex[] =
- { /* TW: Don't ever insert anything here, table is indexed */
--      {0x085f,0x0d,0x03,0x05,0x6a, 800, 600,0x3563}, /* 00 */
--      {0x0467,0x0e,0x44,0x05,0x6a, 800, 600,0x3568}, /* 01 */
--      {0x0067,0x0f,0x07,0x48,0x6a, 800, 600,0x356d}, /* 02 - CRT1CRTC was 0x4f */
--      {0x0067,0x10,0x06,0x8b,0x6a, 800, 600,0x3572}, /* 03 */
--      {0x0147,0x11,0x08,0x00,0x6a, 800, 600,0x3577}, /* 04 */
--      {0x0147,0x12,0x0c,0x00,0x6a, 800, 600,0x357c}, /* 05 */
--      {0x0047,0x11,0x4e,0x00,0x6a, 800, 600,0x3581}, /* 06 - CRT1CRTC was 0x51 */
--      {0x0047,0x11,0x13,0x00,0x6a, 800, 600,0x3586}, /* 07 */
--      {0xc85f,0x05,0x00,0x04,0x2e, 640, 480,0x3539}, /* 08 */
--      {0xc067,0x06,0x02,0x04,0x2e, 640, 480,0x353e}, /* 09 */
--      {0xc067,0x07,0x02,0x47,0x2e, 640, 480,0x3543}, /* 0a */
--      {0xc067,0x08,0x03,0x8a,0x2e, 640, 480,0x3548}, /* 0b */
--      {0xc047,0x09,0x05,0x00,0x2e, 640, 480,0x354d}, /* 0c */
--      {0xc047,0x0a,0x08,0x00,0x2e, 640, 480,0x3552}, /* 0d */
--      {0xc047,0x0b,0x0a,0x00,0x2e, 640, 480,0x3557}, /* 0e */
--      {0xc047,0x0c,0x10,0x00,0x2e, 640, 480,0x355c}, /* 0f */
--      {0x487f,0x04,0x00,0x00,0x2f, 640, 400,0x3532}, /* 10 */
--      {0xc00f,0x31,0x01,0x06,0x31, 720, 480,0x3630}, /* 11 */
--      {0x000f,0x32,0x03,0x06,0x32, 720, 576,0x3637}, /* 12 */
--      {0x0187,0x15,0x05,0x00,0x37,1024, 768,0x358d}, /* 13 */
--        {0xc877,0x16,0x09,0x06,0x37,1024, 768,0x3592}, /* 14 */
--      {0xc067,0x17,0x0b,0x49,0x37,1024, 768,0x3597}, /* 15 - CRT1CRTC was 0x97 */
--      {0x0267,0x18,0x0d,0x00,0x37,1024, 768,0x359c}, /* 16 */
--      {0x0047,0x19,0x11,0x8c,0x37,1024, 768,0x35a1}, /* 17 - CRT1CRTC was 0x59 */
--      {0x0047,0x1a,0x52,0x00,0x37,1024, 768,0x35a6}, /* 18 */
--      {0x0007,0x1b,0x16,0x00,0x37,1024, 768,0x35ab}, /* 19 - CRT1CRTC was 0x5b */
--      {0x0387,0x1c,0x4d,0x00,0x3a,1280,1024,0x35be}, /* 1a - CRT1CRTC was 0x5c */
--      {0x0077,0x1d,0x14,0x07,0x3a,1280,1024,0x35c3}, /* 1b */
--      {0x0047,0x1e,0x17,0x00,0x3a,1280,1024,0x35c8}, /* 1c */
--      {0x0007,0x1f,0x98,0x00,0x3a,1280,1024,0x35cd}, /* 1d */
--      {0x0007,0x20,0x59,0x00,0x3c,1600,1200,0x35d4}, /* 1e - CRT1CRTC was 0x60 */
--      {0x0007,0x21,0x5a,0x00,0x3c,1600,1200,0x35d9}, /* 1f */
--      {0x0007,0x22,0x1b,0x00,0x3c,1600,1200,0x35de}, /* 20 */
--      {0x0007,0x23,0x1d,0x00,0x3c,1600,1200,0x35e3}, /* 21 - CRT1CRTC was 0x63 */
--      {0x0007,0x24,0x1e,0x00,0x3c,1600,1200,0x35e8}, /* 22 */
--      {0x407f,0x00,0x00,0x00,0x40, 320, 200,0x3516}, /* 23 */
--      {0xc07f,0x01,0x00,0x04,0x50, 320, 240,0x351d}, /* 24 */
--      {0x0077,0x02,0x04,0x05,0x51, 400, 300,0x3524}, /* 25 */
--      {0xc877,0x03,0x09,0x06,0x52, 512, 384,0x352b}, /* 26 */  /* was c077 */
--      {0x8207,0x25,0x1f,0x00,0x68,1920,1440,0x35ef}, /* 27 */
--      {0x0007,0x26,0x20,0x00,0x6c,2048,1536,0x35f6}, /* 28 */
--      {0x0067,0x27,0x14,0x08,0x6e,1280, 960,0x35b7}, /* 29 - TW: 1280x960-60 */
--      {0x0027,0x45,0x3c,0x08,0x6e,1280, 960,0x35b7}, /* 2a - TW: 1280x960-85 */
--      {0xc077,0x33,0x09,0x06,0x20,1024, 600,0x0000}, /* 2b */
--      {0xc077,0x34,0x0b,0x06,0x23,1152, 768,0x0000}, /* 2c */ /* VCLK 0x09 */
--      {0x0057,0x35,0x27,0x08,0x70, 800, 480,0x3b52}, /* 2d - TW: 16:9 modes */
--      {0x0047,0x36,0x37,0x08,0x70, 800, 480,0x3b57}, /* 2e */
--      {0x0047,0x37,0x08,0x08,0x70, 800, 480,0x3b5c}, /* 2f */
--      {0x0057,0x38,0x09,0x09,0x71,1024, 576,0x3b63}, /* 30 */
--      {0x0047,0x39,0x38,0x09,0x71,1024, 576,0x3b68}, /* 31 */
--      {0x0047,0x3a,0x11,0x09,0x71,1024, 576,0x3b6d}, /* 32 */
--      {0x0057,0x3b,0x39,0x0a,0x75,1280, 720,0x3b74}, /* 33 */
--      {0x0047,0x3c,0x3a,0x0a,0x75,1280, 720,0x3b79}, /* 34 */
--      {0x0007,0x3d,0x3b,0x0a,0x75,1280, 720,0x3b7e}, /* 35 - TW: END of 16:9 modes */
--      {0x0047,0x3e,0x34,0x06,0x29,1152, 864,0x0000}, /* 36 TW: 1152x864-75Hz - Non-BIOS, new */
--      {0x0047,0x44,0x3a,0x06,0x29,1152, 864,0x0000}, /* 37 TW: 1152x864-85Hz - Non-BIOS, new */
--      {0x00c7,0x3f,0x28,0x00,0x39, 848, 480,0x0000}, /* 38 TW: 848x480-38Hzi - Non-BIOS, new */
--      {0xc047,0x40,0x3d,0x00,0x39, 848, 480,0x0000}, /* 39 TW: 848x480-60Hz  - Non-BIOS, new */
--      {0x00c7,0x41,0x28,0x00,0x3f, 856, 480,0x0000}, /* 3a TW: 856x480-38Hzi - Non-BIOS, new */
--      {0xc047,0x42,0x28,0x00,0x3f, 856, 480,0x0000}, /* 3b TW: 856x480-60Hz  - Non-BIOS, new */
--      {0x0047,0x43,0x3e,0x00,0x48,1360, 768,0x0000}, /* 3c TW: 1360x768-60Hz - Non-BIOS, new */
--      {0xffff,0,0,0,0,0,0,0}
-+      {0x085f,0x0d,0x03,0x05,0x6a, 800, 600}, /* 00 */
-+      {0x0467,0x0e,0x44,0x05,0x6a, 800, 600}, /* 01 */
-+      {0x0067,0x0f,0x07,0x48,0x6a, 800, 600}, /* 02 - CRT1CRTC was 0x4f */
-+      {0x0067,0x10,0x06,0x8b,0x6a, 800, 600}, /* 03 */
-+      {0x0147,0x11,0x08,0x00,0x6a, 800, 600}, /* 04 */
-+      {0x0147,0x12,0x0c,0x00,0x6a, 800, 600}, /* 05 */
-+      {0x0047,0x11,0x4e,0x00,0x6a, 800, 600}, /* 06 - CRT1CRTC was 0x51 */
-+      {0x0047,0x11,0x13,0x00,0x6a, 800, 600}, /* 07 */
-+      {0xc85f,0x05,0x00,0x04,0x2e, 640, 480}, /* 08 */
-+      {0xc067,0x06,0x02,0x04,0x2e, 640, 480}, /* 09 */
-+      {0xc067,0x07,0x02,0x47,0x2e, 640, 480}, /* 0a */
-+      {0xc067,0x08,0x03,0x8a,0x2e, 640, 480}, /* 0b */
-+      {0xc047,0x09,0x05,0x00,0x2e, 640, 480}, /* 0c */
-+      {0xc047,0x0a,0x08,0x00,0x2e, 640, 480}, /* 0d */
-+      {0xc047,0x0b,0x0a,0x00,0x2e, 640, 480}, /* 0e */
-+      {0xc047,0x0c,0x10,0x00,0x2e, 640, 480}, /* 0f */
-+      {0x487f,0x04,0x00,0x00,0x2f, 640, 400}, /* 10 */
-+      {0xc00f,0x31,0x01,0x06,0x31, 720, 480}, /* 11 */
-+      {0x000f,0x32,0x03,0x06,0x32, 720, 576}, /* 12 */
-+      {0x0187,0x15,0x05,0x00,0x37,1024, 768}, /* 13 */
-+        {0xc877,0x16,0x09,0x06,0x37,1024, 768}, /* 14 */
-+      {0xc067,0x17,0x0b,0x49,0x37,1024, 768}, /* 15 - CRT1CRTC was 0x97 */
-+      {0x0267,0x18,0x0d,0x00,0x37,1024, 768}, /* 16 */
-+      {0x0047,0x19,0x11,0x8c,0x37,1024, 768}, /* 17 - CRT1CRTC was 0x59 */
-+      {0x0047,0x1a,0x52,0x00,0x37,1024, 768}, /* 18 */
-+      {0x0007,0x1b,0x16,0x00,0x37,1024, 768}, /* 19 - CRT1CRTC was 0x5b */
-+      {0x0387,0x1c,0x4d,0x00,0x3a,1280,1024}, /* 1a - CRT1CRTC was 0x5c */
-+      {0x0077,0x1d,0x14,0x07,0x3a,1280,1024}, /* 1b */
-+      {0x0047,0x1e,0x17,0x00,0x3a,1280,1024}, /* 1c */
-+      {0x0007,0x1f,0x98,0x00,0x3a,1280,1024}, /* 1d */
-+      {0x0007,0x20,0x59,0x00,0x3c,1600,1200}, /* 1e - CRT1CRTC was 0x60 */
-+      {0x0007,0x21,0x5a,0x00,0x3c,1600,1200}, /* 1f */
-+      {0x0007,0x22,0x1b,0x00,0x3c,1600,1200}, /* 20 */
-+      {0x0007,0x23,0x1d,0x00,0x3c,1600,1200}, /* 21 - CRT1CRTC was 0x63 */
-+      {0x0007,0x24,0x1e,0x00,0x3c,1600,1200}, /* 22 */
-+      {0x407f,0x00,0x00,0x00,0x40, 320, 200}, /* 23 */
-+      {0xc07f,0x01,0x00,0x04,0x50, 320, 240}, /* 24 */
-+      {0x0077,0x02,0x04,0x05,0x51, 400, 300}, /* 25 */
-+      {0xc877,0x03,0x09,0x06,0x52, 512, 384}, /* 26 */  /* was c077 */
-+      {0x8207,0x25,0x1f,0x00,0x68,1920,1440}, /* 27 */
-+      {0x0007,0x26,0x20,0x00,0x6c,2048,1536}, /* 28 */
-+      {0x0067,0x27,0x14,0x08,0x6e,1280, 960}, /* 29 - TW: 1280x960-60 */
-+      {0x0027,0x45,0x3c,0x08,0x6e,1280, 960}, /* 2a - TW: 1280x960-85 */
-+      {0xc077,0x33,0x09,0x06,0x20,1024, 600}, /* 2b */
-+      {0xc077,0x34,0x0b,0x06,0x23,1152, 768}, /* 2c */        /* VCLK 0x09 */
-+      {0x0057,0x35,0x27,0x08,0x70, 800, 480}, /* 2d */
-+      {0x0047,0x36,0x37,0x08,0x70, 800, 480}, /* 2e */
-+      {0x0047,0x37,0x08,0x08,0x70, 800, 480}, /* 2f */
-+      {0x0057,0x38,0x09,0x09,0x71,1024, 576}, /* 30 */
-+      {0x0047,0x39,0x38,0x09,0x71,1024, 576}, /* 31 */
-+      {0x0047,0x3a,0x11,0x09,0x71,1024, 576}, /* 32 */
-+      {0x0057,0x3b,0x39,0x0a,0x75,1280, 720}, /* 33 */
-+      {0x0047,0x3c,0x3a,0x0a,0x75,1280, 720}, /* 34 */
-+      {0x0007,0x3d,0x3b,0x0a,0x75,1280, 720}, /* 35 */
-+      {0x0047,0x3e,0x34,0x06,0x29,1152, 864}, /* 36 1152x864-75Hz */
-+      {0x0047,0x44,0x3a,0x06,0x29,1152, 864}, /* 37 1152x864-85Hz */
-+      {0x00c7,0x3f,0x28,0x00,0x39, 848, 480}, /* 38 848x480-38Hzi */
-+      {0xc047,0x40,0x3d,0x00,0x39, 848, 480}, /* 39 848x480-60Hz  */
-+      {0x00c7,0x41,0x28,0x00,0x3f, 856, 480}, /* 3a 856x480-38Hzi */
-+      {0xc047,0x42,0x28,0x00,0x3f, 856, 480}, /* 3b 856x480-60Hz  */
-+      {0x0047,0x43,0x3e,0x00,0x48,1360, 768}, /* 3c 1360x768-60Hz */
-+      {0x0077,0x46,0x3f,0x08,0x55,1280, 768}, /* 3d 1280x768-60Hz */
-+      {0x000f,0x47,0x03,0x06,0x5f, 768, 576}, /* 3e 768x576 */
-+      {0x0027,0x48,0x13,0x08,0x67,1360,1024}, /* 3f 1360x1024-59Hz (BARCO1366 only) */
-+      {0xffff,   0,   0,   0,   0,   0,   0}
- };
--/*add for 300 oem util*/
- typedef struct _SiS_VBModeIDTableStruct
- {
-       UCHAR  ModeID;
-@@ -649,9 +312,8 @@ static const SiS_VBModeIDTableStruct  Si
-       {0x6e,0x00,0x00,0x01,0x00,0x00,0x0b,0x0d},
-       {0x6f,0x00,0x00,0x01,0x00,0x00,0x0b,0x0d},
-       {0x7b,0x00,0x00,0x01,0x00,0x00,0x0b,0x0d},
--      {0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00}  /* TW: added! */
-+      {0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
- };
--/*end*/
- typedef struct _SiS300_CRT1TableStruct
- {
-@@ -660,15 +322,32 @@ typedef struct _SiS300_CRT1TableStruct
- static const SiS300_CRT1TableStruct  SiS300_CRT1Table[] =
- {
-- {{0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,    /* 0x00 */
--  0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x00,
-+#if 1
-+ {{0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,    /* 0x00 - 320x200 */
-+  0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x00,     /* HRE [4],[15] is invalid - but correcting it does not work */
-+  0x00}},
-+#endif
-+#if 0
-+ {{0x2d,0x27,0x27,0x91,0x2c,0x92,0xbf,0x1f,    /* 0x00 - corrected 320x200-72 - does not work */
-+  0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x04,
-   0x00}},
-- {{0x2d,0x27,0x28,0x90,0x2c,0x80,0x0b,0x3e,
--  0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x00,
-+#endif
-+ {{0x2d,0x27,0x28,0x90,0x2c,0x80,0x0b,0x3e,    /* 0x01 */
-+  0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x00,     /* HRE [4],[15] is invalid - but correcting it does not work */
-   0x00}},
-- {{0x3d,0x31,0x31,0x81,0x37,0x1f,0x72,0xf0,
-+#if 0
-+ {{0x2d,0x27,0x27,0x91,0x2c,0x92,0x0b,0x3e,    /* 0x01 - corrected 320x240-60 - does not work */
-+  0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x04,
-+  0x00}},
-+#endif
-+ {{0x3d,0x31,0x31,0x81,0x37,0x1f,0x72,0xf0,    /* 0x02 */
-+  0x58,0x8c,0x57,0x57,0x73,0x20,0x00,0x05,
-+  0x01}},
-+#if 0
-+ {{0x3d,0x31,0x31,0x81,0x37,0x1f,0x72,0xf0,    /* 0x02 - corrected 400x300-60 */
-   0x58,0x8c,0x57,0x57,0x73,0x20,0x00,0x05,
-   0x01}},
-+#endif  
-  {{0x4f,0x3f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-   0x02,0x88,0xff,0xff,0x25,0x10,0x00,0x01,
-   0x01}},
-@@ -683,7 +362,7 @@ static const SiS300_CRT1TableStruct  SiS
-  {{0x5f,0x4f,0x4f,0x83,0x55,0x81,0x0b,0x3e,    /* 0x05 - corrected 640x480-60 */
-   0xe9,0x8b,0xdf,0xe8,0x0c,0x00,0x00,0x05,
-   0x00}},
-- #if 0  
-+#if 0  
-  {{0x63,0x4f,0x50,0x86,0x56,0x9b,0x06,0x3e,    /* 0x06 */
-   0xe8,0x8b,0xdf,0xe7,0xff,0x10,0x00,0x01,
-   0x00}},
-@@ -841,15 +520,10 @@ static const SiS300_CRT1TableStruct  SiS
-  {{0xa3,0x7f,0x7f,0x87,0x86,0x97,0x1e,0xf1,  /* 0x33 - 1024x600 */
-   0xae,0x85,0x57,0x57,0x1f,0x30,0x00,0x02,
-   0x01}},
--#if 0
-- {{0xa3,0x7f,0x7f,0x87,0x86,0x97,0x24,0xf5,  /* 0x34 - 1152x768 */
--  0x02,0x88,0xff,0xff,0x25,0x10,0x00,0x02,
--  0x01}},
--#endif
-- {{0xa3,0x8f,0x8f,0x97,0x96,0x97,0x24,0xf5,  /* 0x34 - 1152x768 - TW: corrected */
-+ {{0xa3,0x8f,0x8f,0x97,0x96,0x97,0x24,0xf5,  /* 0x34 - 1152x768 - corrected */
-   0x02,0x88,0xff,0xff,0x25,0x10,0x00,0x02,
-   0x01}},
-- {{0x7f,0x63,0x63,0x83,0x6c,0x1c,0x72,0xba,  /* 0x35 - NEW 16:9 modes, not in BIOS ------ */
-+ {{0x7f,0x63,0x63,0x83,0x6c,0x1c,0x72,0xba,  /* 0x35 */
-    0x27,0x8b,0xdf,0xdf,0x73,0x00,0x00,0x06,
-    0x01}}, /* 0x35 */
-  {{0x7f,0x63,0x63,0x83,0x69,0x13,0x6f,0xba,
-@@ -864,7 +538,7 @@ static const SiS300_CRT1TableStruct  SiS
-  {{0x9f,0x7f,0x7f,0x83,0x85,0x91,0x1e,0xf1,
-    0xad,0x81,0x3f,0x3f,0x1f,0x30,0x00,0x02,
-    0x01}}, /* 0x39 */
-- {{0xa7,0x7f,0x7f,0x88,0x89,0x95,0x26,0xf1,           /* TW: 95 was 15 - illegal HBE! */
-+ {{0xa7,0x7f,0x7f,0x88,0x89,0x95,0x26,0xf1,  /* 95 was 15 - illegal HBE! */
-    0xb1,0x85,0x3f,0x3f,0x27,0x30,0x00,0x02,
-    0x01}}, /* 0x3a */
-  {{0xce,0x9f,0x9f,0x92,0xa9,0x17,0x28,0xc4,
-@@ -875,36 +549,40 @@ static const SiS300_CRT1TableStruct  SiS
-    0x01}}, /* 0x3c */
-  {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0x2e,0xd4,
-    0x7d,0x81,0xcf,0xcf,0x2f,0x21,0x00,0x07,
--   0x01}}, /* 0x3d */                      /* TW: End of 16:9 modes --------------- */
-- {{0xc3,0x8f,0x8f,0x87,0x9b,0x0b,0x82,0xef,  /* TW: New, 1152x864-75 (not in any BIOS)   */
-+   0x01}}, /* 0x3d */
-+ {{0xc3,0x8f,0x8f,0x87,0x9b,0x0b,0x82,0xef,  /* 1152x864-75 */
-    0x60,0x83,0x5f,0x5f,0x83,0x10,0x00,0x07,
-    0x01}},  /* 0x3e */
-- {{0x86,0x69,0x69,0x8A,0x74,0x06,0x8C,0x15,  /* TW: New, 848x480-38i, not in BIOS */
-+ {{0x86,0x69,0x69,0x8A,0x74,0x06,0x8C,0x15,  /* 848x480-38i */
-    0x4F,0x83,0xEF,0xEF,0x8D,0x30,0x00,0x02,
-    0x00}}, /* 0x3f */
--#if 0
-- {{0x81,0x69,0x69,0x85,0x70,0x00,0x0F,0x3E,  /* TW: New, 848x480-60, not in BIOS - incorrect for Philips panel */
--   0xEB,0x8E,0xDF,0xDF,0x10,0x00,0x00,0x02,
--   0x00}}, /* 0x40 */
--#endif
-- {{0x83,0x69,0x69,0x87,0x6f,0x1d,0x03,0x3E,  /* TW: New, 848x480-60, not in BIOS */
-+ {{0x83,0x69,0x69,0x87,0x6f,0x1d,0x03,0x3E,  /* 848x480-60  */
-    0xE5,0x8d,0xDF,0xe4,0x04,0x00,0x00,0x06,
-    0x00}}, /* 0x40 */
-- {{0x86,0x6A,0x6A,0x8A,0x74,0x06,0x8C,0x15,  /* TW: New, 856x480-38i, not in BIOS */
-+ {{0x86,0x6A,0x6A,0x8A,0x74,0x06,0x8C,0x15,  /* 856x480-38i */
-    0x4F,0x83,0xEF,0xEF,0x8D,0x30,0x00,0x02,
-    0x00}}, /* 0x41 */
-- {{0x81,0x6A,0x6A,0x85,0x70,0x00,0x0F,0x3E,  /* TW: New, 856x480-60, not in BIOS */
-+ {{0x81,0x6A,0x6A,0x85,0x70,0x00,0x0F,0x3E,  /* 856x480-60  */
-    0xEB,0x8E,0xDF,0xDF,0x10,0x00,0x00,0x02,
-    0x00}}, /* 0x42 */
-- {{0xdd,0xa9,0xa9,0x81,0xb4,0x97,0x26,0xfd,  /* TW: New, 1360x768-60, not in BIOS */
-+ {{0xdd,0xa9,0xa9,0x81,0xb4,0x97,0x26,0xfd,  /* 1360x768-60 */
-    0x01,0x8d,0xff,0x00,0x27,0x10,0x00,0x03,
-    0x01}}, /* 0x43 */
-- {{0xd9,0x8f,0x8f,0x9d,0xba,0x0a,0x8a,0xff,  /* TW: New, 1152x864-84 (not in any BIOS)   */
-+ {{0xd9,0x8f,0x8f,0x9d,0xba,0x0a,0x8a,0xff,  /* 1152x864-84 */
-    0x60,0x8b,0x5f,0x5f,0x8b,0x10,0x00,0x03,
--   0x01}}, /* 0x44 */   
-- {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0xf1,0xff,  /* TW: New, 1280x960-85 (not in any BIOS)   */
-+   0x01}}, /* 0x44 */
-+ {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0xf1,0xff,  /* 1280x960-85 */
-    0xc0,0x83,0xbf,0xbf,0xf2,0x10,0x00,0x07,
--   0x01}}  /* 0x45 */
-+   0x01}}, /* 0x45 */
-+ {{0xce,0x9f,0x9f,0x92,0xa9,0x17,0x20,0xf5,  /* 1280x768-60 */
-+   0x03,0x88,0xff,0xff,0x21,0x10,0x00,0x07,
-+   0x01}},  /* 0x46 */
-+ {{0x7b,0x5f,0x63,0x9f,0x6a,0x93,0x6f,0xf0,  /* 768x576 */
-+   0x58,0x8a,0x3f,0x57,0x70,0x20,0x00,0x05,
-+   0x01}},  /* 0x47 */
-+ {{0xce,0xa9,0xa9,0x92,0xb1,0x07,0x28,0x52,  /* 1360x1024 (Barco iQ Pro R300) */
-+   0x02,0x8e,0xff,0x00,0x29,0x0d,0x00,0x03,
-+   0x00}}   /* 0x48 */
- };
- typedef struct _SiS300_MCLKDataStruct
-@@ -913,8 +591,8 @@ typedef struct _SiS300_MCLKDataStruct
-       USHORT CLOCK;
- } SiS300_MCLKDataStruct;
--static const SiS300_MCLKDataStruct  SiS300_MCLKData_630[] =   /* 630 */
--{ /* TW: at 0x54 in BIOS */
-+static const SiS300_MCLKDataStruct  SiS300_MCLKData_630[] =
-+{
-       { 0x5a,0x64,0x80, 66},
-       { 0xb3,0x45,0x80, 83},
-       { 0x37,0x61,0x80,100},
-@@ -925,8 +603,8 @@ static const SiS300_MCLKDataStruct  SiS3
-       { 0x37,0x61,0x80,100}
- };
--static const SiS300_MCLKDataStruct  SiS300_MCLKData_300[] =  /* 300 */
--{ /* TW: at 0x54 in BIOS */
-+static const SiS300_MCLKDataStruct  SiS300_MCLKData_300[] =
-+{
-       { 0x68,0x43,0x80,125},
-       { 0x68,0x43,0x80,125},
-       { 0x68,0x43,0x80,125},
-@@ -937,6 +615,7 @@ static const SiS300_MCLKDataStruct  SiS3
-       { 0x37,0x61,0x80,100}
- };
-+#ifdef LINUXBIOS
- typedef struct _SiS300_ECLKDataStruct
- {
-       UCHAR SR2E,SR2F,SR30;
-@@ -954,6 +633,7 @@ static const SiS300_ECLKDataStruct  SiS3
-       { 0x54,0x43,0x80,100},
-       { 0x54,0x43,0x80,100}
- };
-+#endif
- typedef struct _SiS300_VCLKDataStruct
- {
-@@ -964,71 +644,77 @@ typedef struct _SiS300_VCLKDataStruct
- static const SiS300_VCLKDataStruct  SiS300_VCLKData[] =
- {
-       { 0x1b,0xe1, 25}, /* 0x00 */
--      { 0x4e,0xe4, 28},
-+      { 0x4e,0xe4, 28}, /* 0x01 */
-       { 0x57,0xe4, 32}, /* 0x02 */
--      { 0xc3,0xc8, 36},
-+      { 0xc3,0xc8, 36}, /* 0x03 */
-       { 0x42,0xc3, 40}, /* 0x04 */
--      { 0x5d,0xc4, 45},
-+      { 0x5d,0xc4, 45}, /* 0x05 */
-       { 0x52,0x65, 50}, /* 0x06 */
--      { 0x53,0x65, 50},
-+      { 0x53,0x65, 50}, /* 0x07 */
-       { 0x6d,0x66, 56}, /* 0x08 */
--      { 0x5a,0x64, 65},
-+      { 0x5a,0x64, 65}, /* 0x09 */
-       { 0x46,0x44, 68}, /* 0x0a */
--      { 0x3e,0x43, 75},
--      { 0x6d,0x46, 76}, /* 0x0c: 800x600 | LVDS_2(CH), MITAC(CH);  - 730, A901(301B): 0xb1,0x46, 76 */
--      { 0x41,0x43, 79},
-+      { 0x3e,0x43, 75}, /* 0x0b */
-+      { 0x6d,0x46, 76}, /* 0x0c */  /* 800x600 | LVDS_2(CH), MITAC(CH);  - 730, A901(301B): 0xb1,0x46, 76 */
-+      { 0x41,0x43, 79}, /* 0x0d */
-       { 0x31,0x42, 79}, /* 0x0e */
--      { 0x46,0x25, 85},
-+      { 0x46,0x25, 85}, /* 0x0f */
-       { 0x78,0x29, 87}, /* 0x10 */
--      { 0x62,0x44, 95},
-+      { 0x62,0x44, 95}, /* 0x11 */
-       { 0x2b,0x22,105}, /* 0x12 */
--      { 0x49,0x24,106},
-+      { 0x49,0x24,106}, /* 0x13 */
-       { 0xc3,0x28,108}, /* 0x14 */
--      { 0x3c,0x23,109},
-+      { 0x3c,0x23,109}, /* 0x15 */
-       { 0xf7,0x2c,132}, /* 0x16 */
--      { 0xd4,0x28,136},
-+      { 0xd4,0x28,136}, /* 0x17 */
-       { 0x41,0x05,158}, /* 0x18 */
--      { 0x43,0x05,162},
-+      { 0x43,0x05,162}, /* 0x19 */
-       { 0xe1,0x0f,175}, /* 0x1a */
-       { 0xfc,0x12,189}, /* 0x1b */
-       { 0xde,0x26,194}, /* 0x1c */
--      { 0x54,0x05,203},
-+      { 0x54,0x05,203}, /* 0x1d */
-       { 0x3f,0x03,230}, /* 0x1e */
--      { 0x30,0x02,234},
-+      { 0x30,0x02,234}, /* 0x1f */
-       { 0x24,0x01,266}, /* 0x20 */
--      { 0x52,0x2a, 54}, /* 301 TV */
--      { 0x52,0x6a, 27}, /* 301 TV */
--      { 0x62,0x24, 70}, /* 301 TV */
--      { 0x62,0x64, 70}, /* 301 TV */
--      { 0xa8,0x4c, 30}, /* 301 TV */
--      { 0x20,0x26, 33}, /* 301 TV */
--      { 0x31,0xc2, 39},
--      { 0xbf,0xc8, 35}, /* 0x28 - 856x480 */
--      { 0x60,0x36, 30}, /* 0x29  CH/UNTSC TEXT | LVDS_2(CH) - 730, A901(301B), Mitac(CH): 0xe0, 0xb6, 30 */
--      { 0x40,0x4a, 28},
--      { 0x9f,0x46, 44},
--      { 0x97,0x2c, 26},
--      { 0x44,0xe4, 25},
--      { 0x7e,0x32, 47},
--      { 0x8a,0x24, 31}, /* 0x2f  CH/PAL TEXT | LVDS_2(CH), Mitac(CH) -  730, A901(301B): 0x57, 0xe4, 31 */
--      { 0x97,0x2c, 26},
--      { 0xce,0x3c, 39},
--      { 0x52,0x4a, 36}, /* 0x32  CH/PAL 800x600 5/6 */
--      { 0x34,0x61, 95},
--      { 0x78,0x27,108},
--      { 0xce,0x25,189}, /* 0x35 */
--      { 0x45,0x6b, 21}, /* 0x36 */  /* TW: Added from Mitac */
--      { 0x52,0xe2, 49}, /* 0x37 - added for 16:9 modes (not in any BIOS) */
--      { 0x2b,0x61, 78}, /* 0x38 - added for 16:9 modes (not in any BIOS) */
--      { 0x70,0x44,108}, /* 0x39 - added for 16:9 modes (not in any BIOS) */
--      { 0x54,0x42,135}, /* 0x3a - added for 16:9 modes (not in any BIOS) */
--      { 0x41,0x22,157}, /* 0x3b - added for 16:9 modes (not in any BIOS) */
--      { 0x52,0x07,149}, /* 0x3c - added for 1280x960-85 (not in any BIOS)*/
--      { 0x62,0xc6, 34}, /* 0x3d - added for 848x480-60 (not in any BIOS) */
--      { 0x30,0x23, 88}, /* 0x3e - added for 1360x768-60 (not in any BIOS)*/
--      { 0x3f,0x64, 46}, /* 0x3f - added for 640x480-100 (not in any BIOS)*/
--      { 0x72,0x2a, 76}, /* 0x40 - test for SiS730 */
--      { 0x15,0x21, 79}, /* 0x41 - test for SiS730 */
-+      { 0x52,0x2a, 54}, /* 0x21 */  /* 301 TV */
-+      { 0x52,0x6a, 27}, /* 0x22 */  /* 301 TV */
-+      { 0x62,0x24, 70}, /* 0x23 */  /* 301 TV */
-+      { 0x62,0x64, 70}, /* 0x24 */  /* 301 TV */
-+      { 0xa8,0x4c, 30}, /* 0x25 */  /* 301 TV */
-+      { 0x20,0x26, 33}, /* 0x26 */  /* 301 TV */
-+      { 0x31,0xc2, 39}, /* 0x27 */
-+      { 0xbf,0xc8, 35}, /* 0x28 */  /* 856x480 */
-+      { 0x60,0x36, 30}, /* 0x29 */  /* CH/UNTSC TEXT | LVDS_2(CH) - 730, A901(301B), Mitac(CH): 0xe0, 0xb6, 30 */
-+      { 0x40,0x4a, 28}, /* 0x2a */
-+      { 0x9f,0x46, 44}, /* 0x2b */
-+      { 0x97,0x2c, 26}, /* 0x2c */
-+      { 0x44,0xe4, 25}, /* 0x2d */
-+      { 0x7e,0x32, 47}, /* 0x2e */
-+      { 0x8a,0x24, 31}, /* 0x2f */  /* CH/PAL TEXT | LVDS_2(CH), Mitac(CH) -  730, A901(301B): 0x57, 0xe4, 31 */
-+      { 0x97,0x2c, 26}, /* 0x30 */
-+      { 0xce,0x3c, 39}, /* 0x31 */
-+      { 0x52,0x4a, 36}, /* 0x32 */  /* CH/PAL 800x600 5/6 */
-+      { 0x34,0x61, 95}, /* 0x33 */
-+      { 0x78,0x27,108}, /* 0x34 */  /* Replacement for index 0x14 for 630 (?) */
-+      { 0xce,0x25,189}, /* 0x35 */  /* Replacement for index 0x1b for 730 (and 540?) */
-+      { 0x45,0x6b, 21}, /* 0x36 */
-+      { 0x52,0xe2, 49}, /* 0x37 */  /* 16:9 modes  */
-+      { 0x2b,0x61, 78}, /* 0x38 */  /* 16:9 modes  */
-+      { 0x70,0x44,108}, /* 0x39 */  /* 16:9 modes  */
-+      { 0x54,0x42,135}, /* 0x3a */  /* 16:9 modes  */
-+      { 0x41,0x22,157}, /* 0x3b */  /* 16:9 modes  */
-+      { 0x52,0x07,149}, /* 0x3c */  /* 1280x960-85 */
-+      { 0x62,0xc6, 34}, /* 0x3d */  /* 848x480-60  */
-+      { 0x30,0x23, 88}, /* 0x3e */  /* 1360x768-60 */
-+#if 0
-+      { 0x3f,0x64, 46}, /* 0x3f */  /* 640x480-100 */
-+#endif
-+        { 0x70,0x29, 81}, /* 0x3f */  /* 1280x768-60 */
-+      { 0x72,0x2a, 76}, /* 0x40 */  /* test for SiS730 */
-+      { 0x15,0x21, 79}, /* 0x41 */  /* test for SiS730 */
-+      { 0xa1,0x42,108}, /* 0x42 */  /* 1280x960 LCD */
-+      { 0x37,0x61,100}, /* 0x43 */  /* 1280x960 LCD */
-+      { 0xe3,0x9a,106}, /* 0x44 */  /* 1360x1024 - special for Barco iQ R300 */
-       { 0xff,0x00,  0}   
- };
-@@ -1089,66 +775,10 @@ static const SiS300_VCLKDataStruct  SiS3
- static const UCHAR  SiS300_ScreenOffset[] =
- {
-       0x14,0x19,0x20,0x28,0x32,0x40,0x50,
--        0x64,0x78,0x80,0x2d,0x35,0x48,0x35,  /* 0x35 for 848 and 856 */
--      0x55,0xff                            /* 0x55 for 1360 */        
-+        0x64,0x78,0x80,0x2d,0x35,0x48,0x35,
-+      0x55,0x30,0xff
- };
--typedef struct _SiS300_StResInfoStruct
--{
--      USHORT HTotal;
--      USHORT VTotal;
--} SiS300_StResInfoStruct;
--
--static const SiS300_StResInfoStruct  SiS300_StResInfo[] =
--{
--      { 640,400},
--      { 640,350},
--      { 720,400},
--      { 720,350},
--      { 640,480}
--};
--
--typedef struct _SiS300_ModeResInfoStruct
--{
--      USHORT HTotal;
--      USHORT VTotal;
--      UCHAR  XChar;
--      UCHAR  YChar;
--} SiS300_ModeResInfoStruct;
--
--static const SiS300_ModeResInfoStruct  SiS300_ModeResInfo[] =
--{
--      {  320, 200, 8, 8},  /* 0x00 */
--      {  320, 240, 8, 8},  /* 0x01 */
--      {  320, 400, 8, 8},  /* 0x02 */
--      {  400, 300, 8, 8},  /* 0x03 */
--      {  512, 384, 8, 8},  /* 0x04 */
--      {  640, 400, 8,16},  /* 0x05 */
--      {  640, 480, 8,16},  /* 0x06 */
--      {  800, 600, 8,16},  /* 0x07 */
--      { 1024, 768, 8,16},  /* 0x08 */
--      { 1280,1024, 8,16},  /* 0x09 */
--      { 1600,1200, 8,16},  /* 0x0a */
--      { 1920,1440, 8,16},  /* 0x0b */
--      {  720, 480, 8,16},  /* 0x0c */
--      {  720, 576, 8,16},  /* 0x0d */
--      { 1280, 960, 8,16},  /* 0x0e */
--      { 1024, 600, 8,16},  /* 0x0f */
--      { 1152, 768, 8,16},  /* 0x10 */
--      { 2048,1536, 8,16},  /* 0x11 - TW: Not in BIOS! */
--      {  800, 480, 8,16},  /* 0x12 - TW: New, not in any BIOS */
--      { 1024, 576, 8,16},  /* 0x13 - TW: New, not in any BIOS */
--      { 1280, 720, 8,16},  /* 0x14 - TW: New, not in any BIOS */
--      { 1152, 864, 8,16},  /* 0x15 - TW: New, not in any BIOS */
--      {  848, 480, 8,16},  /* 0x16 - TW: New, not in any BIOS */
--      {  856, 480, 8,16},  /* 0x17 - TW: New, not in any BIOS */
--      { 1360, 768, 8,16}   /* 0x18 - TW: New, not in any BIOS */
--};
--
--static const UCHAR SiS300_OutputSelect = 0x40;
--
--static const UCHAR SiS300_SoftSetting  = 0x30;
--
- #ifndef LINUX_XF86
- static UCHAR SiS300_SR07 = 0x10;
- #endif
-@@ -1183,7 +813,7 @@ static UCHAR SiS300_CRT2Data_4_10 = 0x80
- static const USHORT SiS300_RGBSenseData = 0xd1;
- static const USHORT SiS300_VideoSenseData = 0xb3;
- static const USHORT SiS300_YCSenseData = 0xb9;
--static const USHORT SiS300_RGBSenseData2 = 0x0190;     /*301b*/
-+static const USHORT SiS300_RGBSenseData2 = 0x0190;
- static const USHORT SiS300_VideoSenseData2 = 0x0174;
- static const USHORT SiS300_YCSenseData2 = 0x016b;
-@@ -1192,15 +822,6 @@ static const UCHAR SiS300_CR40[5][4];
- static UCHAR SiS300_CR49[2];
- #endif
--static const UCHAR SiS300_NTSCPhase[]  = {0x21,0xed,0xba,0x08};  /* TW: Was {0x21,0xed,0x8a,0x08}; */
--static const UCHAR SiS300_PALPhase[]   = {0x2a,0x05,0xe3,0x00};  /* TW: Was {0x2a,0x05,0xd3,0x00};  */
--static const UCHAR SiS300_PALMPhase[]  = {0x21,0xE4,0x2E,0x9B};  /* palmn */
--static const UCHAR SiS300_PALNPhase[]  = {0x21,0xF4,0x3E,0xBA};
--static const UCHAR SiS300_NTSCPhase2[] = {0x21,0xF0,0x7B,0xD6};  /* 301b */
--static const UCHAR SiS300_PALPhase2[]  = {0x2a,0x09,0x86,0xe9};  /* 301b */
--static const UCHAR SiS300_PALMPhase2[] = {0x21,0xE6,0xEF,0xA4}; /* TW: palm 301b*/
--static const UCHAR SiS300_PALNPhase2[] = {0x21,0xF6,0x94,0x46}; /* TW: paln 301b*/
--
- typedef struct _SiS300_PanelDelayTblStruct
- {
-       UCHAR timer[2];
-@@ -1208,7 +829,7 @@ typedef struct _SiS300_PanelDelayTblStru
- static const SiS300_PanelDelayTblStruct  SiS300_PanelDelayTbl[] =
- {
--      {{0x05,0xaa}}, /* TW: From 2.04.5a */
-+      {{0x05,0xaa}},
-       {{0x05,0x14}},
-       {{0x05,0x36}},
-       {{0x05,0x14}},
-@@ -1355,309 +976,6 @@ static const SiS300_LCDDataStruct  SiS30
-       {    1,   1,1688,1066,1688,1066}
- };
--static const SiS300_LCDDataStruct  SiS300_LCD1280x960Data[] =
--{
--      {    9,   2, 800, 500,1800,1000},
--      {    9,   2, 800, 500,1800,1000},
--      {    4,   1, 900, 500,1800,1000},
--      {    4,   1, 900, 500,1800,1000},
--      {    9,   2, 800, 500,1800,1000},
--      {   30,  11,1056, 625,1800,1000},
--      {    5,   3,1350, 800,1800,1000},
--      {    1,   1,1576,1050,1576,1050},
--      {    1,   1,1800,1000,1800,1000}
--};
--
--static const SiS300_LCDDataStruct  SiS300_ExtLCD1400x1050Data[] =  /* TW: New */
--{
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0}
--};
--
--static const SiS300_LCDDataStruct  SiS300_ExtLCD1600x1200Data[] =  /* TW: New */
--{
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0}
--};
--
--static const SiS300_LCDDataStruct  SiS300_StLCD1400x1050Data[] =  /* TW: New */
--{
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0}
--};
--
--static const SiS300_LCDDataStruct  SiS300_StLCD1600x1200Data[] =  /* TW: New */
--{
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0}
--};
--
--static const SiS300_LCDDataStruct  SiS300_NoScaleData1400x1050[] =  /* TW: New */
--{
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0}
--};
--
--static const SiS300_LCDDataStruct  SiS300_NoScaleData1600x1200[] =  /* TW: New */
--{
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0},
--      {    0,   0,   0,   0,   0,   0}
--};
--
--
--typedef struct _SiS300_TVDataStruct
--{
--      USHORT RVBHCMAX;
--      USHORT RVBHCFACT;
--      USHORT VGAHT;
--      USHORT VGAVT;
--      USHORT TVHDE;
--      USHORT TVVDE;
--      USHORT RVBHRS;
--      UCHAR FlickerMode;
--      USHORT HALFRVBHRS;
--      UCHAR RY1COE;
--      UCHAR RY2COE;
--      UCHAR RY3COE;
--      UCHAR RY4COE;
--} SiS300_TVDataStruct;
--
--static const SiS300_TVDataStruct  SiS300_StPALData[] =
--{
--      {    1,   1, 864, 525,1270, 400, 100,   0, 760,0xf4,0xff,0x1c,0x22},
--      {    1,   1, 864, 525,1270, 350, 100,   0, 760,0xf4,0xff,0x1c,0x22},
--      {    1,   1, 864, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
--      {    1,   1, 864, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
--      {    1,   1, 864, 525,1270, 480,  50,   0, 760,0xf4,0xff,0x1c,0x22},
--      {    1,   1, 864, 525,1270, 600,  50,   0,   0,0xf4,0xff,0x1c,0x22}
--};
--
--static const SiS300_TVDataStruct  SiS300_ExtPALData[] =
--{
--      {   27,  10, 848, 448,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},
--      {  108,  35, 848, 398,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},
--      {   12,   5, 954, 448,1270, 530,  50,   0,  50,0xf1,0x04,0x1f,0x18},
--      {    9,   4, 960, 463,1644, 438,  50,   0,  50,0xf4,0x0b,0x1c,0x0a},
--      {    9,   4, 848, 528,1270, 530,   0,   0,  50,0xf5,0xfb,0x1b,0x2a},
--      {   36,  25,1060, 648,1316, 530, 438,   0, 438,0xeb,0x05,0x25,0x16},
--      {    3,   2,1080, 619,1270, 540, 438,   0, 438,0xf3,0x00,0x1d,0x20},
--      {    1,   1,1170, 821,1270, 520, 686,   0, 686,0xF3,0x00,0x1D,0x20}
--
--};
--
--static const SiS300_TVDataStruct  SiS300_StNTSCData[] =
--{
--      {    1,   1, 858, 525,1270, 400,  50,   0, 760,0xf1,0x04,0x1f,0x18},
--      {    1,   1, 858, 525,1270, 350,  50,   0, 640,0xf1,0x04,0x1f,0x18},
--      {    1,   1, 858, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
--      {    1,   1, 858, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
--      {    1,   1, 858, 525,1270, 480,   0,   0, 760,0xf1,0x04,0x1f,0x18}
--};
--
--static const SiS300_TVDataStruct  SiS300_ExtNTSCData[] =
--{
--      {  143,  65, 858, 443,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
--      {   88,  35, 858, 393,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
--      {  143,  70, 924, 443,1270, 440,  92,   0,  92,0xf1,0x04,0x1f,0x18},
--      {  143,  70, 924, 393,1270, 440,  92,   0,  92,0xf4,0x0b,0x1c,0x0a},
--      {  143,  76, 836, 523,1270, 440, 224,   0,   0,0xf1,0x05,0x1f,0x16},
--      {  143, 120,1056, 643,1270, 440,   0, 128,   0,0xf4,0x10,0x1c,0x00},
--      {  143,  76, 836, 523,1270, 440,   0, 128,   0,0xee,0x0c,0x22,0x08},
--      {   65,  64,1056, 791,1270, 480, 638,   0,   0,0xf1,0x04,0x1f,0x18}
--};
--
--#if 0
--static const SiS300_TVDataStruct  SiS300_St1HiTVData[]=
--{
--  
--};
--#endif
--
--static const SiS300_TVDataStruct  SiS300_St2HiTVData[]=
--{
-- {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    1,   1, 0x37c,0x233,0x2b2,0x2bc,          0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    1,   1, 0x3e8,0x233,0x311,0x2bc,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    5,   2, 0x348,0x233,0x670,0x3c0,0x08d,128, 0, 0x00,0x00,0x00,0x00},
-- {    8,   5, 0x41a,0x2ab,0x670,0x3c0,0x17c,128, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const SiS300_TVDataStruct  SiS300_ExtHiTVData[]=
--{
-- {    6,   1, 0x348,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x348,0x1e3,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    5,   1, 0x348,0x233,0x670,0x3c0,0x166,128, 0, 0x00,0x00,0x00,0x00},
-- {   16,   5, 0x41a,0x2ab,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- {   25,  12, 0x4ec,0x353,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    5,   4, 0x627,0x464,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00},
-- {    4,   1, 0x41a,0x233,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- {    5,   2, 0x578,0x293,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    8,   5, 0x6d6,0x323,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const UCHAR SiS300_NTSCTiming[] =
--{
--      0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
--      0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
--      0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
--      0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,  /* (in 2.06.50) */
--/*    0x0c,0x50,0x00,0x99,0x00,0xec,0x4a,0x17,     (in 2.04.5a) */
--      0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,  /* (in 2.06.50) */
--/*    0x88,0x00,0x4b,0x00,0x00,0xe2,0x00,0x02,     (in 2.04.5a) */
--      0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
--      0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
--};
--
--static const UCHAR SiS300_PALTiming[] =
--{
--      0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
--      0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
--        0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,  /* (in 2.06.50) */
--/*    0x70,0x50,0x00,0x97,0x00,0xd7,0x5d,0x17,     (in 2.04.5a) */
--      0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,  /* (in 2.06.50) */
--/*    0x88,0x00,0x45,0x00,0x00,0xe8,0x00,0x02,     (in 2.04.5a) */
--      0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
--      0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
--};
--
--static const UCHAR SiS300_HiTVExtTiming[] =    /* TW: New */
--{
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
--      0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
--      0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
--      0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS300_HiTVSt1Timing[] =           /* TW: New */
--{
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
--      0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
--      0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
--      0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
--};
--
--static const UCHAR SiS300_HiTVSt2Timing[] =   /* TW: New */
--{
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
--      0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
--      0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
--      0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS300_HiTVTextTiming[] =          /* TW: New */
--{
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
--      0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
--      0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
--        0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
--      0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
--};
--
--static const UCHAR SiS300_HiTVGroup3Data[] =          /* TW: New */
--{
--        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
--      0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
--      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
--      0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
--      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
--      0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
--      0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
--      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS300_HiTVGroup3Simu[] =          /* TW: New */
--{
--        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
--      0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
--      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
--      0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
--      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
--      0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
--      0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
--      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS300_HiTVGroup3Text[] =          /* TW: New */
--{
--        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
--      0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
--      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
--      0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
--      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
--      0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
--      0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
--      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
- typedef struct _SiS300_LVDSDataStruct
- {
-       USHORT VGAHT;
-@@ -1666,366 +984,14 @@ typedef struct _SiS300_LVDSDataStruct
-       USHORT LCDVT;
- } SiS300_LVDSDataStruct;
--static const SiS300_LVDSDataStruct  SiS300_LVDS320x480Data_1[] =
--{
--      {848, 433,400, 525},
--      {848, 389,400, 525},
--      {848, 433,400, 525},
--      {848, 389,400, 525},
--      {848, 518,400, 525},
--      {1056,628,400, 525},
--      {400, 525,400, 525},
--      {800, 449,1000, 644},
--      {800, 525,1000, 635}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS800x600Data_1[] =
--{
--      {848, 433,1060, 629},
--      {848, 389,1060, 629},
--      {848, 433,1060, 629},
--      {848, 389,1060, 629},
--      {848, 518,1060, 629},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {800, 449,1000, 644},
--      {800, 525,1000, 635}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS800x600Data_2[] =
--{
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {800, 449,1000, 644},
--      {800, 525,1000, 635}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1024x768Data_1[] =
--{
--      {840, 438,1344, 806},
--      {840, 409,1344, 806},
--      {840, 438,1344, 806},
--      {840, 409,1344, 806},
--      {840, 518,1344, 806},
--      {1050, 638,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1024x768Data_2[] =
--{
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1280x1024Data_1[]=  
--{     
--      {1048, 442,1688,1066},
--      {1048, 392,1688,1066},
--      {1048, 442,1688,1066},
--      {1048, 392,1688,1066},
--      {1048, 522,1688,1066},
--      {1208, 642,1688,1066},
--      {1432, 810,1688,1066},
--      {1688,1066,1688,1066}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1280x1024Data_2[]=  
--{     
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1400x1050Data_1[] =   
--{
--        {928, 416, 1688, 1066},
--      {928, 366, 1688, 1066},
--      {928, 416, 1688, 1066},
--      {928, 366, 1688, 1066},
--      {928, 496, 1688, 1066},
--      {1088, 616, 1688, 1066},
--      {1312, 784, 1688, 1066},
--      {1568, 1040, 1688, 1066},
--      {1688, 1066, 1688, 1066}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1400x1050Data_2[] =  
--{
--        {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1600x1200Data_1[]=  
--{
--        {1088, 450, 2048,1250},
--      {1088, 400, 2048,1250},
--      {1088, 450, 2048,1250},
--      {1088, 400, 2048,1250},
--      {1088, 530, 2048,1250},
--      {1248, 650, 2048,1250},
--      {1472, 818, 2048,1250},
--      {1728,1066, 2048,1250},
--      {1848,1066, 2048,1250},
--      {2048,1250, 2048,1250}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1600x1200Data_2[]= 
--{
--        {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1280x768Data_1[]= 
--{     
--      { 768, 438, 1408, 806},
--      { 768, 388, 1408, 806},
--      { 768, 438, 1408, 806},
--      { 768, 388, 1408, 806},
--      { 768, 518, 1408, 806},
--      { 928, 638, 1408, 806},
--      {1152, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1280x768Data_2[]=  
--{     
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1024x600Data_1[] =
--{
--      {840, 604,1344, 800},
--      {840, 560,1344, 800},
--      {840, 604,1344, 800},
--      {840, 560,1344, 800},
--      {840, 689,1344, 800},
--      {1050, 800,1344, 800},
--      {1344, 800,1344, 800},
--      {800, 449,1280, 789},
--      {800, 525,1280, 785}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1024x600Data_2[] =
--{
--      {1344, 800,1344, 800},
--      {1344, 800,1344, 800},
--      {1344, 800,1344, 800},
--      {1344, 800,1344, 800},
--      {1344, 800,1344, 800},
--      {1344, 800,1344, 800},
--      {1344, 800,1344, 800},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1152x768Data_1[] =
--{
--      {840, 438,1344, 806},
--      {840, 409,1344, 806},
--      {840, 438,1344, 806},
--      {840, 409,1344, 806},
--      {840, 518,1344, 806},
--      {1050, 638,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1152x768Data_2[] =
--{
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--/* TW: pass 1:1 data */
--static const SiS300_LVDSDataStruct  SiS300_LVDSXXXxXXXData_1[]=  
--{
--        { 800, 449,  800, 449},
--      { 800, 449,  800, 449},
--      { 900, 449,  900, 449},
--      { 900, 449,  900, 449},
--      { 800, 525,  800, 525},  /*  640x480   */
--      {1056, 628, 1056, 628},  /*  800x600   */
--      {1344, 806, 1344, 806},  /* 1024x768   */
--      {1344,1066, 1344,1066},  /* 1280x1024  */  /* INSERTED ! */
--      {1688, 806, 1688, 806},  /* 1280x768 ! */
--      /* No other panels ! */
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS640x480Data_1[] =
--{
--      {800, 449, 800, 449},
--      {800, 449, 800, 449},
--      {800, 449, 800, 449},
--      {800, 449, 800, 449},
--      {800, 525, 800, 525},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1280x960Data_1[] =   /* TW: New */
--{
--      {840, 438,1344, 806},
--      {840, 409,1344, 806},
--      {840, 438,1344, 806},
--      {840, 409,1344, 806},
--      {840, 518,1344, 806},
--      {1050, 638,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LVDS1280x960Data_2[] =   /* TW: New */
--{
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LCDA1400x1050Data_1[] =   /* TW: New */
--{     /* TW: Might be temporary (invalid) data */
--        {928, 416, 1688, 1066},
--      {928, 366, 1688, 1066},
--      {1008, 416, 1688, 1066},
--      {1008, 366, 1688, 1066},
--      {1200, 530, 1688, 1066},
--      {1088, 616, 1688, 1066},
--      {1312, 784, 1688, 1066},
--      {1568, 1040, 1688, 1066},
--      {1688, 1066, 1688, 1066}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LCDA1400x1050Data_2[] =   /* TW: New */
--{     /* TW: Temporary data. Not valid */
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LCDA1600x1200Data_1[] =   /* TW: New */
--{     /* TW: Temporary data. Not valid */
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {800, 449,1280, 801},
--      {800, 525,1280, 813}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_LCDA1600x1200Data_2[] =   /* TW: New */
--{     /* TW: Temporary data. Not valid */
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0}
--};
--
--
--/* TW: New: */
--static const SiS300_LVDSDataStruct  SiS300_CHTVUNTSCData[] =
--{
--      {840, 600, 840, 600},
--      {840, 600, 840, 600},
--      {840, 600, 840, 600},
--      {840, 600, 840, 600},
--      {784, 600, 784, 600},
--      {1064, 750,1064, 750}
--};
--
--static const SiS300_LVDSDataStruct  SiS300_CHTVONTSCData[] =
--{
--      {840, 525, 840, 525},
--      {840, 525, 840, 525},
--      {840, 525, 840, 525},
--      {840, 525, 840, 525},
--      {784, 525, 784, 525},
--      {1040, 700,1040, 700}
--};
--
- static const SiS300_LVDSDataStruct  SiS300_CHTVUPALData[] =
- {
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
--      {840, 750, 840, 750},
--      {936, 836, 936, 836}
-+      { 840, 750, 840, 750},
-+      { 936, 836, 936, 836}
- };
- static const SiS300_LVDSDataStruct  SiS300_CHTVOPALData[] =
-@@ -2034,8 +1000,8 @@ static const SiS300_LVDSDataStruct  SiS3
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
--      {840, 625, 840, 625},
--      {960, 750, 960, 750}
-+      { 840, 625, 840, 625},
-+      { 960, 750, 960, 750}
- };
- static const SiS300_LVDSDataStruct  SiS300_CHTVSOPALData[] =
-@@ -2044,12 +1010,10 @@ static const SiS300_LVDSDataStruct  SiS3
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
--      {840, 500, 840, 500},
--      {944, 625, 944, 625}
-+      { 840, 500, 840, 500},
-+      { 944, 625, 944, 625}
- };
--/* TW: new end */
--
- typedef struct _SiS300_LVDSDesStruct
- {
-       USHORT LCDHDES;
-@@ -2058,57 +1022,90 @@ typedef struct _SiS300_LVDSDesStruct
- static const SiS300_LVDSDesStruct  SiS300_PanelType00_1[] =
- {
-+      { 1059, 626 },   /* 2.08 */
-+      { 1059, 624 },
-+      { 1059, 626 },
-+      { 1059, 624 },
-+      { 1059, 624 },
-+      {    0, 627 },
-+      {    0, 627 },
-+      {    0,   0 },
-+      {    0,   0 }
-+#if 0
-       {0, 626},
-       {0, 624},
-       {0, 626},
-       {0, 624},
-       {0, 624},
--      { 0, 627},
--      { 0, 627},
--      { 0,   0},
--      { 0,   0}
-+      {0, 627},
-+      {0, 627},
-+      {0,   0},
-+      {0,   0}
-+#endif
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType01_1[] =
- {
-+      {   0,   0 },  /* 2.08 */
-+      {   0,   0 },
-+      {   0,   0 },
-+      {   0,   0 },
-+      {   0,   0 },
-+      {   0,   0 },
-+      {   0,   0 },
-+      {   0,   0 },
-+      {   0,   0 }
-+#if 0
-       {1343, 798},
-       {1343, 794},
-       {1343, 798},
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
-+#endif
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType02_1[] =
- {
-+      { 1059, 626 },  /* 2.08 */
-+      { 1059, 624 },
-+      { 1059, 626 },
-+      { 1059, 624 },
-+      { 1059, 624 },
-+      {    0, 627 },
-+      {    0, 627 },
-+      {    0,   0 },
-+      {    0,   0 }
-+#if 0
-       {0, 626},
-       {0, 624},
-       {0, 626},
-       {0, 624},
-       {0, 624},
--      { 0, 627},
--      { 0, 627},
--      { 0,   0},
--      { 0,   0}
-+      {0, 627},
-+      {0, 627},
-+      {0,   0},
-+      {0,   0}
-+#endif
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType03_1[] =
- {
--      { 8, 436},
--      { 8, 440},
--      { 8, 436},
--      { 8, 440},
--      { 8, 512},
-+      {   8, 436},
-+      {   8, 440},
-+      {   8, 436},
-+      {   8, 440},
-+      {   8, 512},
-       {1343, 798},
-       {1343, 794},
-       {1343, 798},
-       {1343, 794}
- };
--static const SiS300_LVDSDesStruct  SiS300_PanelType04_1[] =
-+static const SiS300_LVDSDesStruct  SiS300_PanelType04_1[] =   /* 1280x1024 */
- {
-       {1343, 798},
-       {1343, 794},
-@@ -2116,9 +1113,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType05_1[] =
-@@ -2129,9 +1126,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType06_1[] =
-@@ -2142,9 +1139,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType07_1[] =
-@@ -2155,9 +1152,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType08_1[] =
-@@ -2167,10 +1164,10 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1059, 626},
-       {1059, 624},
-       {1059, 624},
--      { 0, 627},
--      { 0, 627},
--      { 0,   0},
--      { 0,   0}
-+      {   0, 627},
-+      {   0, 627},
-+      {   0,   0},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType09_1[] =
-@@ -2181,9 +1178,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType0a_1[] =
-@@ -2193,23 +1190,23 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1059, 626},
-       {1059, 624},
-       {1059, 624},
--      { 0, 627},
--      { 0, 627},
--      { 0,   0},
--      { 0,   0}
-+      {   0, 627},
-+      {   0, 627},
-+      {   0,   0},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType0b_1[] =
- {
--      {1343, 0},
--      {1343, 0},
--      {1343, 0},
--      {1343, 0},
--      {1343, 0},   /* 640x480 - BIOS 1343, 0 */
--      {1343, 0},
--      { 0, 799},
--      { 0, 0},
--      { 0, 0}
-+      {1343,   0},
-+      {1343,   0},
-+      {1343,   0},
-+      {1343,   0},
-+      {1343,   0},
-+      {1343,   0},
-+      {   0, 799},
-+      {   0,   0},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType0c_1[] =
-@@ -2220,9 +1217,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType0d_1[] =
-@@ -2233,9 +1230,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType0e_1[] =
-@@ -2244,11 +1241,11 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343, 798},
-       {1343, 794},
--      {1343,   0},  /* 640x480 */
--      {1343,   0},  /* 800x600 */
--      { 0, 805},    /* 1024x768 */
--      { 0, 794},    /* 1280x1024 */
--      { 0,   0}     /* 1280x960 - not applicable */
-+      {1343,   0},    /* 640x480 */
-+      {1343,   0},    /* 800x600 */
-+      {   0, 805},    /* 1024x768 */
-+      {   0, 794},    /* 1280x1024 */
-+      {   0,   0}     /* 1280x960 - not applicable */
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType0f_1[] =
-@@ -2259,9 +1256,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1343, 794},
-       {1343,   0},
-       {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType00_2[] =
-@@ -2271,10 +1268,10 @@ static const SiS300_LVDSDesStruct  SiS30
-       {976, 527},
-       {976, 502},
-       {976, 567},
--      { 0, 627},
--      { 0, 627},
--      { 0,   0},
--      { 0,   0}
-+      {  0, 627},
-+      {  0, 627},
-+      {  0,   0},
-+      {  0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType01_2[] =
-@@ -2285,9 +1282,9 @@ static const SiS300_LVDSDesStruct  SiS30
-       {1152, 597},
-       {1152, 662},
-       {1232, 722},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      {   0, 805},
-+      {   0, 794},
-+      {   0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType02_2[] =
-@@ -2297,10 +1294,10 @@ static const SiS300_LVDSDesStruct  SiS30
-       {976, 527},
-       {976, 502},
-       {976, 567},
--      { 0, 627},
--      { 0, 627},
--      { 0,   0},
--      { 0,   0}
-+      {  0, 627},
-+      {  0, 627},
-+      {  0,   0},
-+      {  0,   0}
- };
- static const SiS300_LVDSDesStruct  SiS300_PanelType03_2[] =
-@@ -2472,156 +1469,57 @@ static const SiS300_LVDSDesStruct  SiS30
-       {   0,   0}
- };
--static const SiS300_LVDSDesStruct  SiS300_PanelTypeNS_1[]= 
-+/* Custom data for Barco iQ R200/300/400 (BIOS 2.00.07) */
-+static const SiS300_LVDSDesStruct  SiS300_PanelType04_1a[] =  /* 1280x1024 (1366x1024) */
- {
--      { 8,   0},
--      { 8,   0},
--      { 8,   0},
--      { 8,   0},
--      { 8,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0, 806},
--      { 0, 0 }
--};
--
--static const SiS300_LVDSDesStruct  SiS300_PanelTypeNS_2[] = 
--{
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1076_1[] =   /* TW: New */
--{
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1076_2[] =   /* TW: New */
--{
--      { 1152, 622 },
--      { 1152, 597 },
--      { 1152, 622 },
--      { 1152, 597 },
--      { 1152, 622 },
--      { 1232, 722 },
--      {    0, 0   },
--      {    0, 794 },
--      {    0, 0   }
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1210_1[] =   /* TW: New */
--{
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1210_2[] =   /* TW: New */
--{
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1296_1[] =   /* TW: New */
--{
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS300_LVDSDesStruct SiS300_PanelType1296_2[] =   /* TW: New */
--{
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--
--/* TW: New */
--static const SiS300_LVDSDesStruct  SiS300_CHTVUNTSCDesData[] =
--{
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0}
--};
--
--static const SiS300_LVDSDesStruct  SiS300_CHTVONTSCDesData[] =
--{
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0}
--};
--
--static const SiS300_LVDSDesStruct  SiS300_CHTVUPALDesData[] =
--{
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      {  0,   0},
--      {  0,   0}
-+      {1330, 798},  /* 320x200 */
-+      {1330, 794},
-+      {1330, 798},
-+      {1330, 794},
-+      {1330,   0},  /* 640x480 / 320x240  */
-+      {1343,   0},  /* 800x600 / 400x300  */
-+      {   0, 805},  /* 1024x768 / 512x384 */
-+      {1688,1066},  /* 1280x1024          */
-+      {   0,   0}   /* 1360x1024          */
- };
--static const SiS300_LVDSDesStruct  SiS300_CHTVOPALDesData[] =
-+static const SiS300_LVDSDesStruct  SiS300_PanelType04_2a[] =
- {
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      {  0,   0},
--      {  0,   0}
-+      {1152, 622},
-+      {1152, 597},
-+      {1152, 622},
-+      {1152, 597},
-+      {1152, 662},
-+      {1232, 722},
-+      {   0, 805},
-+      {1688,1066},
-+      {   0,   0}
-+};
-+
-+/* Custom data for Barco iQ G200/300/400 (BIOS 2.00.07) */
-+static const SiS300_LVDSDesStruct  SiS300_PanelType04_1b[] =  /* 1024x768 */
-+{
-+      {1330, 798},  /* 320x200 */
-+      {1330, 794},
-+      {1330, 798},
-+      {1330, 794},
-+      {1330,   0},  /* 640x480 / 320x240  */
-+      {1343,   0},  /* 800x600 / 400x300  */
-+      {   0, 805}   /* 1024x768 / 512x384 */
-+};
-+
-+static const SiS300_LVDSDesStruct  SiS300_PanelType04_2b[] =
-+{
-+      {1152, 622},
-+      {1152, 597},
-+      {1152, 622},
-+      {1152, 597},
-+      {1152, 662},
-+      {1232, 722},
-+      {   0, 805}
- };
--/* TW: New end */
--/* TW: New for SiS300+301LV */
-+
- typedef struct _SiS300_Part2PortTblStruct
- {
-       UCHAR CR[12];
-@@ -2726,6 +1624,28 @@ static const SiS300_LVDSCRT1DataStruct  
-         0x01 }}
- };
-+static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT1800x600_1_H[] =
-+{
-+      {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
-+        0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
-+        0x00 }},
-+      {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
-+        0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
-+        0x00 }},
-+      {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
-+        0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
-+        0x00 }},
-+      {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
-+        0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
-+        0x00 }},
-+      {{0x30,0x27,0x94,0x2c,0x92,0x04,0x3e,
-+        0xe0,0x85,0xdf,0xfb,0x10,0x00,0x04,
-+        0x00 }},
-+      {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
-+        0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
-+        0x01 }}
-+};
-+
- static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x768_1[] =
- { 
-       {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-@@ -2751,55 +1671,31 @@ static const SiS300_LVDSCRT1DataStruct  
-         0x01}}
- };
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11280x1024_1[] =
--{
--      {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
--        0x00 }},
--      {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
--        0x00 }},
--      {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
--        0x00 }},
--      {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
--        0x00 }},
--      {{0x63,0x4f,0x87,0x54,0x9f,0x04,0x3e,
--        0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
--        0x00 }},
--      {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
--        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
--        0x01 }},
--      {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--        0x01 }}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT1800x600_1_H[] =
-+static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x768_1_H[] =
- {
--      {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
--        0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
--        0x00 }},
--      {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
--        0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
--        0x00 }},
--      {{0x30,0x27,0x94,0x2c,0x92,0xaf,0x1f,
--        0x90,0x85,0x8f,0xab,0x30,0x00,0x04,
--        0x00 }},
--      {{0x30,0x27,0x94,0x2c,0x92,0x83,0x1f,
--        0x5e,0x83,0x5d,0x79,0x10,0x00,0x04,
--        0x00 }},
--      {{0x30,0x27,0x94,0x2c,0x92,0x04,0x3e,
--        0xe0,0x85,0xdf,0xfb,0x10,0x00,0x04,
-+      {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-         0x00 }},
--      {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
--        0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
-+      {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+        0x60,0x87,0x5D,0x83,0x10,0x00,0x44,
-+        0x00}},
-+      {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+        0x00}},
-+      {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+        0x60,0x87,0x5D,0x83,0x10,0x00,0x44,
-+        0x00}},
-+      {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-+        0xE2,0x89,0xdf,0x05,0x00,0x00,0x44,
-+        0x00}},
-+      {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-+        0x5A,0x8F,0x57,0x7D,0x20,0x00,0x55,
-+        0x01}},
-+      {{0x4f,0x3F,0x93,0x45,0x0D,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-         0x01 }}
--};
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x768_1_H[] =
--{
-+#if 0
-       {{0x37,0x27,0x9B,0x2b,0x94,0xc4,0x1f,
-         0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-         0x00 }},
-@@ -2821,6 +1717,32 @@ static const SiS300_LVDSCRT1DataStruct  
-       {{0x4f,0x3F,0x93,0x45,0x0D,0x24,0xf5,
-         0x02,0x88,0xFf,0x25,0x10,0x00,0x01,
-         0x01 }}
-+#endif
-+};
-+
-+static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11280x1024_1[] =
-+{
-+      {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+        0x00 }},
-+      {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+        0x00 }},
-+      {{0x63,0x4f,0x87,0x54,0x9f,0xb4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+        0x00 }},
-+      {{0x63,0x4f,0x87,0x54,0x9f,0x82,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+        0x00 }},
-+      {{0x63,0x4f,0x87,0x54,0x9f,0x04,0x3e,
-+        0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
-+        0x00 }},
-+      {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
-+        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
-+        0x01 }},
-+      {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+        0x01 }}
- };
- static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11280x1024_1_H[] =
-@@ -2870,32 +1792,29 @@ static const SiS300_LVDSCRT1DataStruct  
-         0x01 }}
- };
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x768_2[] =
-+static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT1800x600_2_H[] =
- {
--      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-+        0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
-         0x00 }},
--      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-+        0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
-         0x00 }},
--      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
-+        0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
-         0x00 }},
--      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+      {{0x3d,0x27,0x81,0x3a,0x1a,0x72,0x3e,
-+        0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
-         0x00 }},
--      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0xba,
-+        0x1c,0x80,0xdf,0x73,0x00,0x00,0x05,
-         0x00 }},
--      {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
--        0x01 }},
--      {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+      {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
-+        0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
-         0x01 }}
- };
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11280x1024_2[] =
-+static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x768_2[] =
- {
-       {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-         0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-@@ -2920,28 +1839,6 @@ static const SiS300_LVDSCRT1DataStruct  
-         0x01 }}
- };
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT1800x600_2_H[] =
--{
--      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
--        0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
--        0x00 }},
--      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
--        0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
--        0x00 }},
--      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0x3e,
--        0xf4,0x88,0x8f,0x73,0x20,0x00,0x05,
--        0x00 }},
--      {{0x3d,0x27,0x81,0x3a,0x1a,0x72,0x3e,
--        0xdb,0x8f,0x5d,0x73,0x20,0x00,0x05,
--        0x00 }},
--      {{0x3d,0x27,0x81,0x32,0x1a,0x72,0xba,
--        0x1c,0x80,0xdf,0x73,0x00,0x00,0x05,
--        0x00 }},
--      {{0x3d,0x31,0x81,0x37,0x1f,0x72,0xf0,
--        0x58,0x8c,0x57,0x73,0x20,0x00,0x05,
--        0x01 }}
--};
--
- static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x768_2_H[] =
- {
-       {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-@@ -2967,6 +1864,31 @@ static const SiS300_LVDSCRT1DataStruct  
-         0x01 }}
- };
-+static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11280x1024_2[] =
-+{
-+      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+        0x00 }},
-+      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+        0x00 }},
-+      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+        0x00 }},
-+      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+        0x00 }},
-+      {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+        0x00 }},
-+      {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-+        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-+        0x01 }},
-+      {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+        0x01 }}
-+};
-+
- static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11280x1024_2_H[] =
- {
-       {{0x4f,0x27,0x93,0x39,0x81,0x24,0xbb,
-@@ -2992,207 +1914,6 @@ static const SiS300_LVDSCRT1DataStruct  
-         0x01}}
- };
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x600_1[] =
--{
--        {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
--        0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
--        0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
--        0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
--        0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0xaf,0xba,
--        0x3b,0x82,0xdf,0xb0,0x00,0x00,0x01,
--        0x00}},
--        {{0x7e,0x63,0x82,0x68,0x15,0x1e,0xf1,
--        0xae,0x85,0x57,0x1f,0x30,0x00,0x26,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x1e,0xf1,
--        0xae,0x85,0x57,0x1f,0x30,0x00,0x02,
--        0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x600_1_H[] =
--{
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--          0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
--        0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
--        0x00}},
--        {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
--        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x600_2[] =
--{
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--          0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--        0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11024x600_2_H[] =
--{
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x01,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11152x768_1[] =
--{
--        {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x04,0x3e,
--        0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
--        0x00}},
--        {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
--        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--        0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11152x768_1_H[] =
--{
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
--        0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
--        0x00}},
--        {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
--        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11152x768_2[] =
--{
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--        0x01}}
--};
--
--static const SiS300_LVDSCRT1DataStruct  SiS300_LVDSCRT11152x768_2_H[] =
--{
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x01,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--/* TW: New */
- static const SiS300_LVDSCRT1DataStruct  SiS300_CHTVCRT1UNTSC[] =
- {
-       {{0x64,0x4f,0x88,0x56,0x9f,0x56,0x3e,
-@@ -3302,9 +2023,7 @@ static const SiS300_LVDSCRT1DataStruct  
-         0x90,0x8c,0x57,0xed,0x20,0x00,0x05,
-         0x01 }}
- };
--/* TW: New end */
--/* TW: New */
- typedef struct _SiS300_CHTVRegDataStruct
- {
-       UCHAR Reg[16];
-@@ -3361,9 +2080,7 @@ static const SiS300_CHTVRegDataStruct Si
-       {{0x60,0x30,0x00,0x10,0x00,0,0,0,0,0,0,0,0,0,0,0}}, /* TW: Mode 13: 640x480 PAL 5/4 */
-       {{0x81,0x50,0x00,0x1b,0x00,0,0,0,0,0,0,0,0,0,0,0}}  /* TW: Mode 19: 800x600 PAL 1/1 */
- };
--/* TW: New end */
--/* TW: New */
- static const UCHAR SiS300_CHTVVCLKUNTSC[]  = {0x29,0x29,0x29,0x29,0x2a,0x2e};
- static const UCHAR SiS300_CHTVVCLKONTSC[]  = {0x2c,0x2c,0x2c,0x2c,0x2d,0x2b};
-@@ -3375,6 +2092,5 @@ static const UCHAR SiS300_CHTVVCLKUPAL[]
- static const UCHAR SiS300_CHTVVCLKOPAL[]   = {0x2f,0x2f,0x2f,0x2f,0x30,0x32};
- static const UCHAR SiS300_CHTVVCLKSOPAL[]  = {0x2f,0x2f,0x2f,0x2f,0x36,0x29};
--/* TW: New end */
---- linux-2.6.0-test1/drivers/video/sis/310vtbl.h      2003-06-14 12:18:23.000000000 -0700
-+++ 25/drivers/video/sis/310vtbl.h     2003-07-19 17:04:55.000000000 -0700
-@@ -1,7 +1,30 @@
--
--
--/* Register settings for SiS 310/325/330 series */
--
-+/* $XFree86$ */
-+/*
-+ * Register settings for SiS 315/330 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
- typedef struct _SiS310_StStruct
- {
-@@ -39,466 +62,12 @@ static const SiS310_StStruct SiS310_SMod
-       {0xff,0x0000,0x00,0x00,0x00,0x00,0x00,0x00}
- };
--typedef struct _SiS310_StandTableStruct
--{
--      UCHAR CRT_COLS;
--      UCHAR ROWS;
--      UCHAR CHAR_HEIGHT;
--      USHORT CRT_LEN;
--      UCHAR SR[4];
--      UCHAR MISC;
--      UCHAR CRTC[0x19];
--      UCHAR ATTR[0x14];
--      UCHAR GRC[9];
--} SiS310_StandTableStruct;
--
--static const SiS310_StandTableStruct SiS310_StandTable[]=
--{
--/* 0x00: MD_0_200 */
-- {
--  0x28,0x18,0x08,0x0800,
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x01: MD_1_200 */
-- {
--  0x28,0x18,0x08,0x0800,
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x02: MD_2_200 */
-- {
--  0x50,0x18,0x08,0x1000,
--  {0x01,0x03,0x00,0x02},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x03: MD_3_200 - mode 0x03 - 0 */
-- {
--  0x50,0x18,0x08,0x1000,
--  {0x01,0x03,0x00,0x02},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x04: MD_4 */
-- {
--  0x28,0x18,0x08,0x4000,
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,
--   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
--   0xff},
--  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x03,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
--   0xff}
-- },
--/* 0x05: MD_5 */
-- {
--  0x28,0x18,0x08,0x4000,
--  {0x09,0x03,0x00,0x02},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,
--   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
--   0xff},
--  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x03,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
--   0xff}
-- },
--/* 0x06: MD_6 */
-- {
--  0x50,0x18,0x08,0x4000,
--  {0x01,0x01,0x00,0x06},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
--   0xff},
--  {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
--   0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
--   0x01,0x00,0x01,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
--   0xff}
-- },
--/* 0x07: MD_7 */
-- {
--  0x50,0x18,0x0e,0x1000,
--  {0x00,0x03,0x00,0x03},
--  0xa6,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
--   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
--   0x0e,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
--   0xff}
-- },
--/* 0x08: MDA_DAC */
-- {
--  0x00,0x00,0x00,0x0000,
--  {0x00,0x00,0x00,0x15},
--  0x15,
--  {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
--   0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
--   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
--   0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
--   0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
--   0x15,0x15,0x15,0x15},
--  {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
--   0x3f}
-- },
--/* 0x09: CGA_DAC */
-- {
--  0x00,0x10,0x04,0x0114,
--  {0x11,0x09,0x15,0x00},
--  0x10,
--  {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
--   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
--   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
--   0x04},
--  {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
--   0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
--   0x3e,0x2b,0x3b,0x2f},
--  {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
--   0x3f}
-- },
--/* 0x0a: EGA_DAC */
-- {
--  0x00,0x10,0x04,0x0114,
--  {0x11,0x05,0x15,0x20},
--  0x30,
--  {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
--   0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
--   0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
--   0x06},
--  {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
--   0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
--   0x1e,0x0b,0x1b,0x0f},
--  {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
--   0x3f}
-- },
--/* 0x0b: VGA_DAC */
-- {
--  0x00,0x10,0x04,0x0114,
--  {0x11,0x09,0x15,0x2a},
--  0x3a,
--  {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
--   0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
--   0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
--   0x1f},
--  {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
--   0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
--   0x1c,0x0e,0x11,0x15},
--  {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
--   0x04}
-- },
--/* 0x0c */ 
-- {
--  0x08,0x0c,0x10,0x0a08,
--  {0x0c,0x0e,0x10,0x0b},
--  0x0c,
--  {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
--   0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
--   0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
--   0x06},
--  {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
--   0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
--   0x00,0x00,0x00,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00}
-- },
--/* 0x0d: MD_D */
-- {
--  0x28,0x18,0x08,0x2000,
--  {0x09,0x0f,0x00,0x06},
--  0x63,
--  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,
--   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff}
-- },
--/* 0x0e: MD_E */
-- {
--  0x50,0x18,0x08,0x4000,
--  {0x01,0x0f,0x00,0x06},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff}
-- },
--/* 0x0f: ExtVGATable - modes > 0x13 */
-- {
--  0x00,0x00,0x00,0x0000,
--  {0x01,0x0f,0x00,0x0e},
--  0x23,
--  {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
--   0x01,0x00,0x00,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
--   0xff}
-- },
--/* 0x10: ROM_SAVEPTR */
-- {
--  0x9f,0x3b,0x00,0x00c0,
--  {0x00,0x00,0x00,0x00},
--  0x00,
--  {0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0x3f,
--   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00,0x00,0x1a,0x00,0xac,0x3e,0x00,0xc0,
--   0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00,0x00,0x00,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x00}
-- },
--/* 0x11: MD_F */
-- {
--  0x50,0x18,0x0e,0x8000,
--  {0x01,0x0f,0x00,0x06},
--  0xa2,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,
--   0xff},
--  {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
--   0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
--   0x0b,0x00,0x05,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
--   0xff}
-- },
--/* 0x12: MD_10 */
-- {
--  0x50,0x18,0x0e,0x8000,
--  {0x01,0x0f,0x00,0x06},
--  0xa3,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff}
-- },
--/* 0x13: MD_0_350 */
-- {
--  0x28,0x18,0x0e,0x0800,
--  {0x09,0x03,0x00,0x02},
--  0xa3,
--  {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x14: MD_1_350 */
-- {
--  0x28,0x18,0x0e,0x0800,
--  {0x09,0x03,0x00,0x02},
--  0xa3,
--  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x15: MD_2_350 */
-- {
--  0x50,0x18,0x0e,0x1000,
--  {0x01,0x03,0x00,0x02},
--  0xa3,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x16: MD_3_350 - mode 0x03 - 1 */
-- {
--  0x50,0x18,0x0e,0x1000,
--  {0x01,0x03,0x00,0x02},
--  0xa3,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
--   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x08,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x17: MD_0_1_400 */
-- {
--  0x28,0x18,0x10,0x0800,
--  {0x08,0x03,0x00,0x02},
--  0x67,
--  {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,
--   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x0c,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x18: MD_2_3_400 - mode 0x03 - 2 */
-- {
--  0x50,0x18,0x10,0x1000,
--  {0x00,0x03,0x00,0x02},
--  0x67,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x0c,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
--   0xff}
-- },
--/* 0x19: MD_7_400 */
-- {
--  0x50,0x18,0x10,0x1000,
--  {0x00,0x03,0x00,0x02},
--  0x66,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
--   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
--   0x0e,0x00,0x0f,0x08},
--  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
--   0xff}
-- },
--/* 0x1a: MD_11 */
-- {
--  0x50,0x1d,0x10,0xa000,
--  {0x01,0x0f,0x00,0x06},
--  0xe3,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xc3,
--   0xff},
--  {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
--   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
--   0xff}
-- },
--/* 0x1b: ExtEGATable - Modes <= 0x02 */
-- {
--  0x50,0x1d,0x10,0xa000,
--  {0x01,0x0f,0x00,0x06},
--  0xe3,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,
--   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
--   0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xe3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
--   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
--   0x01,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
--   0xff}
-- },
--/* 0x1c: MD_13 */
-- {
--  0x28,0x18,0x08,0x2000,
--  {0x01,0x0f,0x00,0x0e},
--  0x63,
--  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
--   0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
--   0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
--   0xff},
--  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
--   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
--   0x41,0x00,0x0f,0x00},
--  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
--   0xff}
-- }
--};
--
- typedef struct _SiS310_ExtStruct
- {
-       UCHAR Ext_ModeID;
-       USHORT Ext_ModeFlag;
-       USHORT Ext_ModeInfo;
--      USHORT Ext_Point;    /* TW: Address of table entry in (older) BIOS image */
-       USHORT Ext_VESAID;
--      UCHAR Ext_VESAMEMSize;
-       UCHAR Ext_RESINFO;
-       UCHAR VB_ExtTVFlickerIndex;
-       UCHAR VB_ExtTVEdgeIndex;
-@@ -506,93 +75,93 @@ typedef struct _SiS310_ExtStruct
-       UCHAR REFindex;
- } SiS310_ExtStruct;
--/* TW: Checked with 650/LVDS and 650/301LVx 1.10.6s */
- static const SiS310_ExtStruct  SiS310_EModeIDTable[]=
- {
--      {0x6a,0x2212,0x0407,0x3a81,0x0102,0x08,0x07,0x00,0x00,0x07,0x00},          /* 800x600x? */
--      {0x2e,0x0a1b,0x0306,0x3a57,0x0101,0x08,0x06,0x00,0x00,0x05,0x08},          /* 640x480x8 */
--/*    {0x2e,0x021b,0x0306,0x3a57,0x0101,0x08,0x06,0x00,0x00,0x05,0x08},    */    /* 640x480x8 - 650/LVDS BIOS (no CRt2Mode) */
--      {0x2f,0x0a1b,0x0305,0x3a50,0x0100,0x08,0x05,0x00,0x00,0x05,0x10},          /* 640x400x8 */
--/*    {0x2f,0x021b,0x0305,0x3a50,0x0100,0x08,0x05,0x00,0x00,0x05,0x10},    */    /* 640x400x8 - 650/LVDS BIOS (no CRt2Mode) */
--      {0x30,0x2a1b,0x0407,0x3a81,0x0103,0x08,0x07,0x00,0x00,0x07,0x00},          /* 800x600x8 */
--/*    {0x30,0x221b,0x0407,0x3a81,0x0103,0x08,0x07,0x00,0x00,0x07,0x00},    */    /* 800x600x8 - 650/LVDS BIOS (no CRt2Mode) */
--/*      {0x31,0x0a1b,0x030d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11},    */    /* 720x480x8 */
--        {0x31,0x0a1b,0x0a0d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11},          /* 720x480x8 BIOS (301/LVDS) */
--      {0x32,0x0a1b,0x0a0e,0x3b8c,0x0000,0x08,0x0e,0x00,0x00,0x06,0x12},          /* 720x576x8 */
--      {0x33,0x0a1d,0x0a0d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11},          /* 720x480x16 */
--      {0x34,0x2a1d,0x0a0e,0x3b8c,0x0000,0x08,0x0e,0x00,0x00,0x06,0x12},          /* 720x576x16 */
--      {0x35,0x0a1f,0x0a0d,0x3b85,0x0000,0x08,0x0d,0x00,0x00,0x06,0x11},          /* 720x480x32 */
--      {0x36,0x2a1f,0x0a0e,0x3b8c,0x0000,0x08,0x0e,0x00,0x00,0x06,0x12},          /* 720x576x32 */
--      {0x37,0x0212,0x0508,0x3aab,0x0104,0x08,0x08,0x00,0x00,0x08,0x13},          /* 1024x768x? */
--      {0x38,0x0a1b,0x0508,0x3aab,0x0105,0x08,0x08,0x00,0x00,0x08,0x13},          /* 1024x768x8 */
--      {0x3a,0x0e3b,0x0609,0x3adc,0x0107,0x08,0x09,0x00,0x00,0x00,0x1a},          /* 1280x1024x8 */
--      {0x3c,0x0e3b,0x070a,0x3af2,0x0130,0x08,0x0a,0x00,0x00,0x00,0x1e},          /* 1600x1200x8 */
--      {0x3d,0x0e7d,0x070a,0x3af2,0x0131,0x08,0x0a,0x00,0x00,0x00,0x1e},          /* 1600x1200x16 - 650/301LVx - no CRT2Mode? */
--      {0x40,0x9a1c,0x0000,0x3a34,0x010d,0x08,0x00,0x00,0x00,0x04,0x25},
--      {0x41,0x9a1d,0x0000,0x3a34,0x010e,0x08,0x00,0x00,0x00,0x04,0x25},
--      {0x43,0x0a1c,0x0306,0x3a57,0x0110,0x08,0x06,0x00,0x00,0x05,0x08},
--      {0x44,0x0a1d,0x0306,0x3a57,0x0111,0x08,0x06,0x00,0x00,0x05,0x08},          /* 640x480x16 */
--      {0x46,0x2a1c,0x0407,0x3a81,0x0113,0x08,0x07,0x00,0x00,0x07,0x00},
--      {0x47,0x2a1d,0x0407,0x3a81,0x0114,0x08,0x07,0x00,0x00,0x07,0x00},          /* 800x600x16 */
--      {0x49,0x0a3c,0x0508,0x3aab,0x0116,0x08,0x08,0x00,0x00,0x00,0x13},
--      {0x4a,0x0a3d,0x0508,0x3aab,0x0117,0x08,0x08,0x00,0x00,0x08,0x13},          /* 1024x768x16 */
--      {0x4c,0x0e7c,0x0609,0x3adc,0x0119,0x08,0x09,0x00,0x00,0x00,0x1a},
--      {0x4d,0x0e7d,0x0609,0x3adc,0x011a,0x08,0x09,0x00,0x00,0x00,0x1a},          /* 1280x1024x16 */
--      {0x50,0x9a1b,0x0001,0x3a3b,0x0132,0x08,0x01,0x00,0x00,0x04,0x26},          /* 320x240 */
--      {0x51,0xba1b,0x0103,0x3a42,0x0133,0x08,0x03,0x00,0x00,0x07,0x27},
--      {0x52,0xba1b,0x0204,0x3a49,0x0134,0x08,0x04,0x00,0x00,0x00,0x28},          /* 650/301 BIOS */
--      {0x56,0x9a1d,0x0001,0x3a3b,0x0135,0x08,0x01,0x00,0x00,0x04,0x26},
--      {0x57,0xba1d,0x0103,0x3a42,0x0136,0x08,0x03,0x00,0x00,0x07,0x27},
--      {0x58,0xba1d,0x0204,0x3a49,0x0137,0x08,0x04,0x00,0x00,0x00,0x28},          /* BIOS (301+LVDS) */
--      {0x59,0x9a1b,0x0000,0x3a34,0x0138,0x08,0x00,0x00,0x00,0x04,0x25},          /* 320x200 */
--      {0x5A,0x021b,0x0014,0x3b83,0x0138,0x08,0x01,0x00,0x00,0x04,0x3f},          /* 320x480x8 fstn add new mode*/
--      {0x5B,0x0a1d,0x0014,0x3b83,0x0135,0x08,0x01,0x00,0x00,0x04,0x3f},          /* 320x480x16 fstn add new mode*/
--      {0x5c,0xba1f,0x0204,0x3a49,0x0000,0x08,0x04,0x00,0x00,0x00,0x28},          /* TW: inserted 512x384x32 */
--      {0x5d,0x0a1d,0x0305,0x3a50,0x0139,0x08,0x05,0x00,0x00,0x07,0x10},
--      {0x5e,0x0a1f,0x0305,0x3a50,0x0000,0x08,0x05,0x00,0x00,0x07,0x10},          /* TW: Inserted 640x400x32 */
--      {0x62,0x0a3f,0x0306,0x3a57,0x013a,0x08,0x06,0x00,0x00,0x05,0x08},          /* 640x480x32 */
--      {0x63,0x2a3f,0x0407,0x3a81,0x013b,0x08,0x07,0x00,0x00,0x07,0x00},          /* 800x600x32 */
--      {0x64,0x0a7f,0x0508,0x3aab,0x013c,0x08,0x08,0x00,0x00,0x08,0x13},          /* 1024x768x32 */
--      {0x65,0x0eff,0x0609,0x3adc,0x013d,0x08,0x09,0x00,0x00,0x00,0x1a},          /* 1280x1024x32 */
--      {0x66,0x0eff,0x070a,0x3af2,0x013e,0x08,0x0a,0x00,0x00,0x00,0x1e},          /* 1600x1200x32 */
--      {0x68,0x067b,0x080b,0x3b17,0x013f,0x08,0x0b,0x00,0x00,0x00,0x29},          /* 1920x1440x8 */
--      {0x69,0x06fd,0x080b,0x3b17,0x0140,0x08,0x0b,0x00,0x00,0x00,0x29},          /* 1920x1440x16 */
--      {0x6b,0x07ff,0x080b,0x3b17,0x0141,0x10,0x0b,0x00,0x00,0x00,0x29},          /* 1920x1440x32 */
--      {0x6c,0x067b,0x090c,0x3b37,0x0000,0x08,0x0c,0x00,0x00,0x00,0x2f},          /* 2048x1536x8 */
--      {0x6d,0x06fd,0x090c,0x3b37,0x0000,0x10,0x0c,0x00,0x00,0x00,0x2f},          /* 2048x1536x16 */
--      {0x6e,0x07ff,0x090c,0x3b37,0x0000,0x10,0x0c,0x00,0x00,0x00,0x2f},          /* 2048x1536x32 */
--      {0x70,0x2a1b,0x0410,0x3b52,0x0000,0x08,0x10,0x00,0x00,0x07,0x34},          /* 800x480x8 */
--      {0x71,0x0a1b,0x0511,0x3b63,0x0000,0x08,0x11,0x00,0x00,0x00,0x37},          /* 1024x576x8 */
--      {0x74,0x0a1d,0x0511,0x3b63,0x0000,0x08,0x11,0x00,0x00,0x00,0x37},          /* 1024x576x16 */
--      {0x75,0x0a3d,0x0612,0x3b74,0x0000,0x08,0x12,0x00,0x00,0x00,0x3a},          /* 1280x720x16 */
--      {0x76,0x2a1f,0x0410,0x3b52,0x0000,0x08,0x10,0x00,0x00,0x07,0x34},          /* 800x480x32 */
--      {0x77,0x0a1f,0x0511,0x3b63,0x0000,0x08,0x11,0x00,0x00,0x00,0x37},          /* 1024x576x32 */
--      {0x78,0x0a3f,0x0612,0x3b74,0x0000,0x08,0x12,0x00,0x00,0x00,0x3a},          /* 1280x720x32 */
--      {0x79,0x0a3b,0x0612,0x3b74,0x0000,0x08,0x12,0x00,0x00,0x00,0x3a},          /* 1280x720x8 */
--      {0x7a,0x2a1d,0x0410,0x3b52,0x0000,0x08,0x10,0x00,0x00,0x07,0x34},          /* 800x480x16 */
--      {0x7c,0x0e3b,0x060f,0x3ad0,0x0000,0x08,0x0f,0x00,0x00,0x00,0x3d},          /* 1280x960x8 - TW */
--      {0x7d,0x0e7d,0x060f,0x3ad0,0x0000,0x08,0x0f,0x00,0x00,0x00,0x3d},          /* 1280x960x16 - TW */
--      {0x7e,0x0eff,0x060f,0x3ad0,0x0000,0x08,0x0f,0x00,0x00,0x00,0x3d},          /* 1280x960x32 - TW */
--        /* TW: 650/LVDS BIOS new modes */
--      {0x23,0x0e3b,0x0614,0x36f7,0x0000,0x08,0x14,0x00,0x00,0x00,0x40},          /* 1280x768x8 */
--      {0x24,0x0e7d,0x0614,0x36f7,0x0000,0x08,0x14,0x00,0x00,0x00,0x40},          /* 1280x768x16 */
--      {0x25,0x0eff,0x0614,0x36f7,0x0000,0x08,0x14,0x00,0x00,0x00,0x40},          /* 1280x768x32 */
--      {0x26,0x0e3b,0x0c15,0x36fe,0x0000,0x08,0x15,0x00,0x00,0x00,0x41},          /* 1400x1050x8 */
--      {0x27,0x0e7d,0x0c15,0x36fe,0x0000,0x08,0x15,0x00,0x00,0x00,0x41},          /* 1400x1050x16 */
--      {0x28,0x0eff,0x0c15,0x36fe,0x0000,0x08,0x15,0x00,0x00,0x00,0x41},          /* 1400x1050x32*/
--      {0x29,0x0e1b,0x0d16,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x43},    /* TW: NEW 1152x864 - not in BIOS */
--      {0x2a,0x0e3d,0x0d16,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x43},
--      {0x2b,0x0e7f,0x0d16,0x0000,0x0000,0x08,0x16,0x00,0x00,0x00,0x43},
--      {0x39,0x2a1b,0x0b17,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x45},    /* TW: NEW 848x480 - not in BIOS */
--      {0x3b,0x2a3d,0x0b17,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x45},
--      {0x3e,0x2a7f,0x0b17,0x0000,0x0000,0x08,0x17,0x00,0x00,0x00,0x45},
--      {0x3f,0x2a1b,0x0b13,0x0000,0x0000,0x08,0x13,0x00,0x00,0x00,0x47},    /* TW: NEW 856x480 - not in BIOS */
--      {0x42,0x2a3d,0x0b13,0x0000,0x0000,0x08,0x13,0x00,0x00,0x00,0x47},
--      {0x45,0x2a7f,0x0b13,0x0000,0x0000,0x08,0x13,0x00,0x00,0x00,0x47},
--      {0x48,0x2a1b,0x0e18,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x49},    /* TW: NEW 1360x768 - not in BIOS */
--      {0x4b,0x2a3d,0x0e18,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x49},
--      {0x4e,0x2a7f,0x0e18,0x0000,0x0000,0x08,0x18,0x00,0x00,0x00,0x49},
--      {0xff,0x0000,0x0000,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00}
-+      {0x6a,0x2212,0x0407,0x0102,SIS_RI_800x600,  0x00,0x00,0x07,0x00}, /* 800x600x? */
-+      {0x2e,0x0a1b,0x0306,0x0101,SIS_RI_640x480,  0x00,0x00,0x05,0x08}, /* 640x480x8 */
-+        {0x2f,0x0a1b,0x0305,0x0100,SIS_RI_640x400,  0x00,0x00,0x05,0x10}, /* 640x400x8 */
-+      {0x30,0x2a1b,0x0407,0x0103,SIS_RI_800x600,  0x00,0x00,0x07,0x00}, /* 800x600x8 */
-+        {0x31,0x0a1b,0x0a0d,0x0000,SIS_RI_720x480,  0x00,0x00,0x06,0x11}, /* 720x480x8 */
-+      {0x32,0x0a1b,0x0a0e,0x0000,SIS_RI_720x576,  0x00,0x00,0x06,0x12}, /* 720x576x8 */
-+      {0x33,0x0a1d,0x0a0d,0x0000,SIS_RI_720x480,  0x00,0x00,0x06,0x11}, /* 720x480x16 */
-+      {0x34,0x2a1d,0x0a0e,0x0000,SIS_RI_720x576,  0x00,0x00,0x06,0x12}, /* 720x576x16 */
-+      {0x35,0x0a1f,0x0a0d,0x0000,SIS_RI_720x480,  0x00,0x00,0x06,0x11}, /* 720x480x32 */
-+      {0x36,0x2a1f,0x0a0e,0x0000,SIS_RI_720x576,  0x00,0x00,0x06,0x12}, /* 720x576x32 */
-+      {0x37,0x0212,0x0508,0x0104,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x? */
-+      {0x38,0x0a1b,0x0508,0x0105,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x8 */
-+      {0x3a,0x0e3b,0x0609,0x0107,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a}, /* 1280x1024x8 */
-+      {0x3c,0x0e3b,0x070a,0x0130,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e}, /* 1600x1200x8 */
-+      {0x3d,0x0e7d,0x070a,0x0131,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e}, /* 1600x1200x16 */
-+      {0x40,0x9a1c,0x0000,0x010d,SIS_RI_320x200,  0x00,0x00,0x04,0x25}, /* 320x200x15 */
-+      {0x41,0x9a1d,0x0000,0x010e,SIS_RI_320x200,  0x00,0x00,0x04,0x25}, /* 320x200x16 */
-+      {0x43,0x0a1c,0x0306,0x0110,SIS_RI_640x480,  0x00,0x00,0x05,0x08},
-+      {0x44,0x0a1d,0x0306,0x0111,SIS_RI_640x480,  0x00,0x00,0x05,0x08}, /* 640x480x16 */
-+      {0x46,0x2a1c,0x0407,0x0113,SIS_RI_800x600,  0x00,0x00,0x07,0x00},
-+      {0x47,0x2a1d,0x0407,0x0114,SIS_RI_800x600,  0x00,0x00,0x07,0x00}, /* 800x600x16 */
-+      {0x49,0x0a3c,0x0508,0x0116,SIS_RI_1024x768, 0x00,0x00,0x00,0x13},
-+      {0x4a,0x0a3d,0x0508,0x0117,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x16 */
-+      {0x4c,0x0e7c,0x0609,0x0119,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a},
-+      {0x4d,0x0e7d,0x0609,0x011a,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a}, /* 1280x1024x16 */
-+      {0x50,0x9a1b,0x0001,0x0132,SIS_RI_320x240,  0x00,0x00,0x04,0x26}, /* 320x240x8  */
-+      {0x51,0xba1b,0x0103,0x0133,SIS_RI_400x300,  0x00,0x00,0x07,0x27}, /* 400x300x8  */
-+      {0x52,0xba1b,0x0204,0x0134,SIS_RI_512x384,  0x00,0x00,0x00,0x28}, /* 512x384x8  */
-+      {0x56,0x9a1d,0x0001,0x0135,SIS_RI_320x240,  0x00,0x00,0x04,0x26}, /* 320x240x16 */
-+      {0x57,0xba1d,0x0103,0x0136,SIS_RI_400x300,  0x00,0x00,0x07,0x27}, /* 400x300x16 */
-+      {0x58,0xba1d,0x0204,0x0137,SIS_RI_512x384,  0x00,0x00,0x00,0x28}, /* 512x384x16 */
-+      {0x59,0x9a1b,0x0000,0x0138,SIS_RI_320x200,  0x00,0x00,0x04,0x25}, /* 320x200x8  */
-+      {0x5a,0x021b,0x0014,0x0138,SIS_RI_320x240,  0x00,0x00,0x04,0x3f}, /* 320x240x8  fstn */
-+      {0x5b,0x0a1d,0x0014,0x0135,SIS_RI_320x240,  0x00,0x00,0x04,0x3f}, /* 320x240x16 fstn */
-+      {0x5c,0xba1f,0x0204,0x0000,SIS_RI_512x384,  0x00,0x00,0x00,0x28}, /* 512x384x32 */
-+      {0x5d,0x0a1d,0x0305,0x0139,SIS_RI_640x400,  0x00,0x00,0x07,0x10},
-+      {0x5e,0x0a1f,0x0305,0x0000,SIS_RI_640x400,  0x00,0x00,0x07,0x10}, /* 640x400x32 */
-+      {0x62,0x0a3f,0x0306,0x013a,SIS_RI_640x480,  0x00,0x00,0x05,0x08}, /* 640x480x32 */
-+      {0x63,0x2a3f,0x0407,0x013b,SIS_RI_800x600,  0x00,0x00,0x07,0x00}, /* 800x600x32 */
-+      {0x64,0x0a7f,0x0508,0x013c,SIS_RI_1024x768, 0x00,0x00,0x08,0x13}, /* 1024x768x32 */
-+      {0x65,0x0eff,0x0609,0x013d,SIS_RI_1280x1024,0x00,0x00,0x00,0x1a}, /* 1280x1024x32 */
-+      {0x66,0x0eff,0x070a,0x013e,SIS_RI_1600x1200,0x00,0x00,0x00,0x1e}, /* 1600x1200x32 */
-+      {0x68,0x067b,0x080b,0x013f,SIS_RI_1920x1440,0x00,0x00,0x00,0x29}, /* 1920x1440x8 */
-+      {0x69,0x06fd,0x080b,0x0140,SIS_RI_1920x1440,0x00,0x00,0x00,0x29}, /* 1920x1440x16 */
-+      {0x6b,0x07ff,0x080b,0x0141,SIS_RI_1920x1440,0x00,0x00,0x00,0x29}, /* 1920x1440x32 */
-+      {0x6c,0x067b,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x2f}, /* 2048x1536x8 */
-+      {0x6d,0x06fd,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x2f}, /* 2048x1536x16 */
-+      {0x6e,0x07ff,0x090c,0x0000,SIS_RI_2048x1536,0x00,0x00,0x00,0x2f}, /* 2048x1536x32 */
-+      {0x70,0x2a1b,0x0410,0x0000,SIS_RI_800x480,  0x00,0x00,0x07,0x34}, /* 800x480x8 */
-+      {0x71,0x0a1b,0x0511,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x37}, /* 1024x576x8 */
-+      {0x74,0x0a1d,0x0511,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x37}, /* 1024x576x16 */
-+      {0x75,0x0a3d,0x0612,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x3a}, /* 1280x720x16 */
-+      {0x76,0x2a1f,0x0410,0x0000,SIS_RI_800x480,  0x00,0x00,0x07,0x34}, /* 800x480x32 */
-+      {0x77,0x0a1f,0x0511,0x0000,SIS_RI_1024x576, 0x00,0x00,0x00,0x37}, /* 1024x576x32 */
-+      {0x78,0x0a3f,0x0612,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x3a}, /* 1280x720x32 */
-+      {0x79,0x0a3b,0x0612,0x0000,SIS_RI_1280x720, 0x00,0x00,0x00,0x3a}, /* 1280x720x8 */
-+      {0x7a,0x2a1d,0x0410,0x0000,SIS_RI_800x480,  0x00,0x00,0x07,0x34}, /* 800x480x16 */
-+      {0x7c,0x0e3b,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x3d}, /* 1280x960x8 */
-+      {0x7d,0x0e7d,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x3d}, /* 1280x960x16 */
-+      {0x7e,0x0eff,0x060f,0x0000,SIS_RI_1280x960, 0x00,0x00,0x00,0x3d}, /* 1280x960x32 */
-+      {0x23,0x0e3b,0x0614,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x40}, /* 1280x768x8 */
-+      {0x24,0x0e7d,0x0614,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x40}, /* 1280x768x16 */
-+      {0x25,0x0eff,0x0614,0x0000,SIS_RI_1280x768, 0x00,0x00,0x00,0x40}, /* 1280x768x32 */
-+      {0x26,0x0e3b,0x0c15,0x0000,SIS_RI_1400x1050,0x00,0x00,0x00,0x41}, /* 1400x1050x8 */
-+      {0x27,0x0e7d,0x0c15,0x0000,SIS_RI_1400x1050,0x00,0x00,0x00,0x41}, /* 1400x1050x16 */
-+      {0x28,0x0eff,0x0c15,0x0000,SIS_RI_1400x1050,0x00,0x00,0x00,0x41}, /* 1400x1050x32*/
-+      {0x29,0x0e1b,0x0d16,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x43}, /* 1152x864 */
-+      {0x2a,0x0e3d,0x0d16,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x43},
-+      {0x2b,0x0e7f,0x0d16,0x0000,SIS_RI_1152x864, 0x00,0x00,0x00,0x43},
-+      {0x39,0x2a1b,0x0b17,0x0000,SIS_RI_848x480,  0x00,0x00,0x00,0x45}, /* 848x480 */
-+      {0x3b,0x2a3d,0x0b17,0x0000,SIS_RI_848x480,  0x00,0x00,0x00,0x45},
-+      {0x3e,0x2a7f,0x0b17,0x0000,SIS_RI_848x480,  0x00,0x00,0x00,0x45},
-+      {0x3f,0x2a1b,0x0b13,0x0000,SIS_RI_856x480,  0x00,0x00,0x00,0x47}, /* 856x480 */
-+      {0x42,0x2a3d,0x0b13,0x0000,SIS_RI_856x480,  0x00,0x00,0x00,0x47},
-+      {0x45,0x2a7f,0x0b13,0x0000,SIS_RI_856x480,  0x00,0x00,0x00,0x47},
-+      {0x48,0x2a1b,0x0e18,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x49}, /* 1360x768 */
-+      {0x4b,0x2a3d,0x0e18,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x49},
-+      {0x4e,0x2a7f,0x0e18,0x0000,SIS_RI_1360x768, 0x00,0x00,0x00,0x49},
-+      {0x4f,0x9a1f,0x0000,0x0000,SIS_RI_320x200,  0x00,0x00,0x04,0x25}, /* 320x200x32 */
-+      {0x53,0x9a1f,0x0001,0x0000,SIS_RI_320x240,  0x00,0x00,0x04,0x26}, /* 320x240x32 */
-+      {0x54,0xba1f,0x0103,0x0000,SIS_RI_400x300,  0x00,0x00,0x07,0x27}, /* 400x300x32 */
-+      {0x5f,0x2a1b,0x0f0e,0x0000,SIS_RI_768x576,  0x00,0x00,0x00,0x4a}, /* 768x576x8 */
-+      {0x60,0x2a1d,0x0f0e,0x0000,SIS_RI_768x576,  0x00,0x00,0x00,0x4a}, /* 768x576x16 */
-+      {0x61,0x2a1f,0x0f0e,0x0000,SIS_RI_768x576,  0x00,0x00,0x00,0x4a}, /* 768x576x32 */
-+      {0xff,0x0000,0x0000,0x0000,0x00,            0x00,0x00,0x00,0x00}
- };
- typedef struct _SiS310_Ext2Struct
-@@ -604,89 +173,87 @@ typedef struct _SiS310_Ext2Struct
-       UCHAR  ModeID;
-       USHORT XRes;
-       USHORT YRes;
--      USHORT ROM_OFFSET;
- } SiS310_Ext2Struct;
- static const SiS310_Ext2Struct SiS310_RefIndex[]=
- {
--/*    {0x005f,0x0d,0x03,0x05,0x6a, 800, 600,0x3a81},    0x0 - TW: Patch for Chrontel 7019  */
--      {0x085f,0x0d,0x03,0x05,0x6a, 800, 600,0x3a81}, /* 0x0 */
--      {0x0467,0x0e,0x04,0x05,0x6a, 800, 600,0x3a86}, /* 0x1 */
--      {0x0067,0x0f,0x08,0x48,0x6a, 800, 600,0x3a8b}, /* 0x2 */
--      {0x0067,0x10,0x07,0x8b,0x6a, 800, 600,0x3a90}, /* 0x3 */
--      {0x0147,0x11,0x0a,0x00,0x6a, 800, 600,0x3a95}, /* 0x4 */
--      {0x0147,0x12,0x0d,0x00,0x6a, 800, 600,0x3a9a}, /* 0x5 - 4147 TW: Test sync change */
--      {0x0047,0x13,0x13,0x00,0x6a, 800, 600,0x3a9f}, /* 0x6 - 4047 */
--      {0x0047,0x14,0x1c,0x00,0x6a, 800, 600,0x3aa4}, /* 0x7 - 4047 */
--/*    {0xc05f,0x05,0x00,0x04,0x2e, 640, 480,0x3a57},    0x8 - TW: Patch for Chrontel 7019  */
--      {0xc85f,0x05,0x00,0x04,0x2e, 640, 480,0x3a57}, /* 0x8 */
--      {0xc067,0x06,0x02,0x04,0x2e, 640, 480,0x3a5c}, /* 0x9 */
--      {0xc067,0x07,0x02,0x47,0x2e, 640, 480,0x3a61}, /* 0xa */
--      {0xc067,0x08,0x03,0x8a,0x2e, 640, 480,0x3a66}, /* 0xb */
--      {0xc047,0x09,0x05,0x00,0x2e, 640, 480,0x3a6b}, /* 0xc - 4047 */
--      {0xc047,0x0a,0x09,0x00,0x2e, 640, 480,0x3a70}, /* 0xd - 4047 */
--      {0xc047,0x0b,0x0e,0x00,0x2e, 640, 480,0x3a75}, /* 0xe - 4047 */
--      {0xc047,0x0c,0x15,0x00,0x2e, 640, 480,0x3a7a}, /* 0xf */
--      {0x407f,0x04,0x00,0x00,0x2f, 640, 400,0x3a50}, /* 0x10 */
--      {0xc00f,0x3c,0x01,0x06,0x31, 720, 480,0x3b85}, /* 0x11 */
--      {0x000f,0x3d,0x03,0x06,0x32, 720, 576,0x3b8c}, /* 0x12 */
--      {0x0187,0x15,0x06,0x00,0x37,1024, 768,0x3aab}, /* 0x13 */
--      {0xc877,0x16,0x0b,0x06,0x37,1024, 768,0x3ab0}, /* 0x14 */
--      {0xc067,0x17,0x0f,0x49,0x37,1024, 768,0x3ab5}, /* 0x15 */
--      {0x0267,0x18,0x11,0x00,0x37,1024, 768,0x3aba}, /* 0x16 */
--      {0x0047,0x19,0x16,0x8c,0x37,1024, 768,0x3abf}, /* 0x17 */
--      {0x0047,0x1a,0x1b,0x00,0x37,1024, 768,0x3ac4}, /* 0x18 - 4047 */
--      {0x0007,0x1b,0x1f,0x00,0x37,1024, 768,0x3ac9}, /* 0x19 - 4047 */
--      {0x0387,0x1c,0x11,0x00,0x3a,1280,1024,0x3adc}, /* 0x1a */
--      {0x0077,0x1d,0x19,0x07,0x3a,1280,1024,0x3ae1}, /* 0x1b */
--      {0x0047,0x1e,0x1e,0x00,0x3a,1280,1024,0x3ae6}, /* 0x1c */
--      {0x0007,0x1f,0x20,0x00,0x3a,1280,1024,0x3aeb}, /* 0x1d */
--      {0x0027,0x20,0x21,0x09,0x3c,1600,1200,0x3af2}, /* 0x1e */
--      {0x0007,0x21,0x22,0x00,0x3c,1600,1200,0x3af7}, /* 0x1f */
--      {0x0007,0x22,0x23,0x00,0x3c,1600,1200,0x3afc}, /* 0x20 */
--      {0x0007,0x23,0x25,0x00,0x3c,1600,1200,0x3b01}, /* 0x21 */
--      {0x0007,0x24,0x26,0x00,0x3c,1600,1200,0x3b06}, /* 0x22 */
--      {0x0007,0x25,0x2c,0x00,0x3c,1600,1200,0x3b0b}, /* 0x23 */
--      {0x0007,0x26,0x34,0x00,0x3c,1600,1200,0x3b10}, /* 0x24 */
--      {0x407f,0x00,0x00,0x00,0x40, 320, 200,0x3a34}, /* 0x25 */
--      {0xc07f,0x01,0x00,0x04,0x50, 320, 240,0x3a3b}, /* 0x26 */
--      {0x007f,0x02,0x04,0x05,0x51, 400, 300,0x3a42}, /* 0x27 */
--      {0xc077,0x03,0x0b,0x06,0x52, 512, 384,0x3a49}, /* 0x28 */
--      {0x8007,0x27,0x27,0x00,0x68,1920,1440,0x3b17}, /* 0x29 */
--      {0x4007,0x28,0x29,0x00,0x68,1920,1440,0x3b1c}, /* 0x2a */
--      {0x4007,0x29,0x2e,0x00,0x68,1920,1440,0x3b21}, /* 0x2b */
--      {0x4007,0x2a,0x30,0x00,0x68,1920,1440,0x3b26}, /* 0x2c */
--      {0x4007,0x2b,0x35,0x00,0x68,1920,1440,0x3b2b}, /* 0x2d */
--      {0x4005,0x2c,0x39,0x00,0x68,1920,1440,0x3b30}, /* 0x2e */
--      {0x4007,0x2d,0x2b,0x00,0x6c,2048,1536,0x3b37}, /* 0x2f */
--      {0x4007,0x2e,0x31,0x00,0x6c,2048,1536,0x3b3c}, /* 0x30 */
--      {0x4007,0x2f,0x33,0x00,0x6c,2048,1536,0x3b41}, /* 0x31 */
--      {0x4007,0x30,0x37,0x00,0x6c,2048,1536,0x3b46}, /* 0x32 */
--      {0x4005,0x31,0x38,0x00,0x6c,2048,1536,0x3b4b}, /* 0x33 */
--      {0x0057,0x32,0x40,0x08,0x70, 800, 480,0x3b52}, /* 0x34 */
--      {0x0047,0x33,0x07,0x08,0x70, 800, 480,0x3b57}, /* 0x35 */
--      {0x0047,0x34,0x0a,0x08,0x70, 800, 480,0x3b5c}, /* 0x36 */
--      {0x0057,0x35,0x0b,0x09,0x71,1024, 576,0x3b63}, /* 0x37 */
--      {0x0047,0x36,0x11,0x09,0x71,1024, 576,0x3b68}, /* 0x38 */
--      {0x0047,0x37,0x16,0x09,0x71,1024, 576,0x3b6d}, /* 0x39 */
--      {0x0057,0x38,0x19,0x0a,0x75,1280, 720,0x3b74}, /* 0x3a */
--      {0x0047,0x39,0x1e,0x0a,0x75,1280, 720,0x3b79}, /* 0x3b */
--      {0x0007,0x3a,0x20,0x0a,0x75,1280, 720,0x3b7e}, /* 0x3c */
--      {0x0067,0x3b,0x19,0x08,0x7c,1280, 960,0x3ad0}, /* 0x3d */
--      {0x0027,0x4c,0x59,0x08,0x7c,1280, 960,0x3ad0}, /* 0x3e */
--      {0xc07f,0x01,0x00,0x06,0x5a, 320, 480,0x3b83}, /* 0x3f */    /* FSTN mode */
--        {0x0077,0x42,0x12,0x08,0x23,1280, 768,0x0000}, /* 0x40 */  
--      {0x0067,0x43,0x4d,0x08,0x26,1400,1050,0x0000}, /* 0x41 */  
--      {0x0007,0x4b,0x5a,0x08,0x26,1400,1050,0x0000}, /* 0x42 */    /* TW: new, not in any BIOS */
--      {0x0047,0x44,0x19,0x00,0x29,1152, 864,0x0000}, /* 0x43 TW: Non-BIOS, new */
--      {0x0047,0x4a,0x1e,0x00,0x29,1152, 864,0x0000}, /* 0x44 TW: Non-BIOS, new */
--      {0x00c7,0x45,0x57,0x00,0x39, 848, 480,0x0000}, /* 0x45 TW: 848x480-38Hzi - Non-BIOS, new */
--      {0xc047,0x46,0x55,0x00,0x39, 848, 480,0x0000}, /* 0x46 TW: 848x480-60Hz  - Non-BIOS, new */
--      {0x00c7,0x47,0x57,0x00,0x3f, 856, 480,0x0000}, /* 0x47 TW: 856x480-38Hzi - Non-BIOS, new */
--      {0xc047,0x48,0x57,0x00,0x3f, 856, 480,0x0000}, /* 0x48 TW: 856x480-60Hz  - Non-BIOS, new */
--      {0x0047,0x49,0x58,0x00,0x48,1360, 768,0x0000}, /* 0x49 TW: 1360x768-60Hz - Non-BIOS, new */
--      {0xffff,0x00,0x00,0x00,0x00,   0,   0,0x0000}
--}; 
-+      {0x085f,0x0d,0x03,0x05,0x6a, 800, 600}, /* 0x0 */
-+      {0x0467,0x0e,0x04,0x05,0x6a, 800, 600}, /* 0x1 */
-+      {0x0067,0x0f,0x08,0x48,0x6a, 800, 600}, /* 0x2 */
-+      {0x0067,0x10,0x07,0x8b,0x6a, 800, 600}, /* 0x3 */
-+      {0x0147,0x11,0x0a,0x00,0x6a, 800, 600}, /* 0x4 */
-+      {0x0147,0x12,0x0d,0x00,0x6a, 800, 600}, /* 0x5 - TW: Test sync change */
-+      {0x0047,0x13,0x13,0x00,0x6a, 800, 600}, /* 0x6 */
-+      {0x0047,0x14,0x1c,0x00,0x6a, 800, 600}, /* 0x7 */
-+      {0xc85f,0x05,0x00,0x04,0x2e, 640, 480}, /* 0x8 */
-+      {0xc067,0x06,0x02,0x04,0x2e, 640, 480}, /* 0x9 */
-+      {0xc067,0x07,0x02,0x47,0x2e, 640, 480}, /* 0xa */
-+      {0xc067,0x08,0x03,0x8a,0x2e, 640, 480}, /* 0xb */
-+      {0xc047,0x09,0x05,0x00,0x2e, 640, 480}, /* 0xc */
-+      {0xc047,0x0a,0x09,0x00,0x2e, 640, 480}, /* 0xd */
-+      {0xc047,0x0b,0x0e,0x00,0x2e, 640, 480}, /* 0xe */
-+      {0xc047,0x0c,0x15,0x00,0x2e, 640, 480}, /* 0xf */
-+      {0x407f,0x04,0x00,0x00,0x2f, 640, 400}, /* 0x10 */
-+      {0xc00f,0x3c,0x01,0x06,0x31, 720, 480}, /* 0x11 */
-+      {0x000f,0x3d,0x03,0x06,0x32, 720, 576}, /* 0x12 */
-+      {0x0187,0x15,0x06,0x00,0x37,1024, 768}, /* 0x13 */
-+      {0xc877,0x16,0x0b,0x06,0x37,1024, 768}, /* 0x14 */
-+      {0xc067,0x17,0x0f,0x49,0x37,1024, 768}, /* 0x15 */
-+      {0x0267,0x18,0x11,0x00,0x37,1024, 768}, /* 0x16 */
-+      {0x0047,0x19,0x16,0x8c,0x37,1024, 768}, /* 0x17 */
-+      {0x0047,0x1a,0x1b,0x00,0x37,1024, 768}, /* 0x18 */
-+      {0x0007,0x1b,0x1f,0x00,0x37,1024, 768}, /* 0x19 */
-+      {0x0387,0x1c,0x11,0x00,0x3a,1280,1024}, /* 0x1a */
-+      {0x0077,0x1d,0x19,0x07,0x3a,1280,1024}, /* 0x1b */
-+      {0x0047,0x1e,0x1e,0x00,0x3a,1280,1024}, /* 0x1c */
-+      {0x0007,0x1f,0x20,0x00,0x3a,1280,1024}, /* 0x1d */
-+      {0x0867,0x20,0x21,0x09,0x3c,1600,1200}, /* 0x1e */
-+      {0x0007,0x21,0x22,0x00,0x3c,1600,1200}, /* 0x1f */
-+      {0x0007,0x22,0x23,0x00,0x3c,1600,1200}, /* 0x20 */
-+      {0x0007,0x23,0x25,0x00,0x3c,1600,1200}, /* 0x21 */
-+      {0x0007,0x24,0x26,0x00,0x3c,1600,1200}, /* 0x22 */
-+      {0x0007,0x25,0x2c,0x00,0x3c,1600,1200}, /* 0x23 */
-+      {0x0007,0x26,0x34,0x00,0x3c,1600,1200}, /* 0x24 */
-+      {0x407f,0x00,0x00,0x00,0x40, 320, 200}, /* 0x25 */
-+      {0xc07f,0x01,0x00,0x04,0x50, 320, 240}, /* 0x26 */
-+      {0x007f,0x02,0x04,0x05,0x51, 400, 300}, /* 0x27 */
-+      {0xc077,0x03,0x0b,0x06,0x52, 512, 384}, /* 0x28 */
-+      {0x8007,0x27,0x27,0x00,0x68,1920,1440}, /* 0x29 */
-+      {0x4007,0x28,0x29,0x00,0x68,1920,1440}, /* 0x2a */
-+      {0x4007,0x29,0x2e,0x00,0x68,1920,1440}, /* 0x2b */
-+      {0x4007,0x2a,0x30,0x00,0x68,1920,1440}, /* 0x2c */
-+      {0x4007,0x2b,0x35,0x00,0x68,1920,1440}, /* 0x2d */
-+      {0x4005,0x2c,0x39,0x00,0x68,1920,1440}, /* 0x2e */
-+      {0x4007,0x2d,0x2b,0x00,0x6c,2048,1536}, /* 0x2f */
-+      {0x4007,0x2e,0x31,0x00,0x6c,2048,1536}, /* 0x30 */
-+      {0x4007,0x2f,0x33,0x00,0x6c,2048,1536}, /* 0x31 */
-+      {0x4007,0x30,0x37,0x00,0x6c,2048,1536}, /* 0x32 */
-+      {0x4005,0x31,0x38,0x00,0x6c,2048,1536}, /* 0x33 */
-+      {0x0057,0x32,0x40,0x08,0x70, 800, 480}, /* 0x34 */
-+      {0x0047,0x33,0x07,0x08,0x70, 800, 480}, /* 0x35 */
-+      {0x0047,0x34,0x0a,0x08,0x70, 800, 480}, /* 0x36 */
-+      {0x0057,0x35,0x0b,0x09,0x71,1024, 576}, /* 0x37 */
-+      {0x0047,0x36,0x11,0x09,0x71,1024, 576}, /* 0x38 */
-+      {0x0047,0x37,0x16,0x09,0x71,1024, 576}, /* 0x39 */
-+      {0x0057,0x38,0x19,0x0a,0x75,1280, 720}, /* 0x3a */
-+      {0x0047,0x39,0x1e,0x0a,0x75,1280, 720}, /* 0x3b */
-+      {0x0007,0x3a,0x20,0x0a,0x75,1280, 720}, /* 0x3c */
-+      {0x0067,0x3b,0x19,0x08,0x7c,1280, 960}, /* 0x3d */
-+      {0x0027,0x4c,0x59,0x08,0x7c,1280, 960}, /* 0x3e */
-+      {0xc07f,0x4e,0x00,0x06,0x5a, 320, 240}, /* 0x3f */    /* FSTN 320x240 */
-+        {0x0077,0x42,0x5b,0x08,0x23,1280, 768}, /* 0x40 */    /* TW: 0x5b was 0x12 */
-+      {0x0067,0x43,0x4d,0x08,0x26,1400,1050}, /* 0x41 */
-+      {0x0007,0x4b,0x5a,0x08,0x26,1400,1050}, /* 0x42 TW: not in any BIOS */
-+      {0x0047,0x44,0x19,0x00,0x29,1152, 864}, /* 0x43 TW: Non-BIOS, new */
-+      {0x0047,0x4a,0x1e,0x00,0x29,1152, 864}, /* 0x44 TW: Non-BIOS, new */
-+      {0x00c7,0x45,0x57,0x00,0x39, 848, 480}, /* 0x45 TW: 848x480-38Hzi - Non-BIOS, new */
-+      {0xc047,0x46,0x55,0x00,0x39, 848, 480}, /* 0x46 TW: 848x480-60Hz  - Non-BIOS, new */
-+      {0x00c7,0x47,0x57,0x00,0x3f, 856, 480}, /* 0x47 TW: 856x480-38Hzi - Non-BIOS, new */
-+      {0xc047,0x48,0x57,0x00,0x3f, 856, 480}, /* 0x48 TW: 856x480-60Hz  - Non-BIOS, new */
-+      {0x0047,0x49,0x58,0x00,0x48,1360, 768}, /* 0x49 TW: 1360x768-60Hz - Non-BIOS, new */
-+      {0x000f,0x4d,0x03,0x06,0x5f, 768, 576}, /* 0x4a TW: 768x576 */
-+      {0xffff,0x00,0x00,0x00,0x00,   0,   0}
-+};
- typedef struct _SiS310_CRT1TableStruct
- {
-@@ -710,7 +277,7 @@ static const SiS310_CRT1TableStruct SiS3
-  {{0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-    0x9c,0x8e,0x8f,0x96,0xb9,0x30,0x00,0x05,
-    0x00}}, /* 0x4 */
--#if 0   
-+#if 0
-  {{0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,
-    0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x05,
-    0x00}}, /* 0x5 */
-@@ -940,19 +507,25 @@ static const SiS310_CRT1TableStruct SiS3
-    0x00}},  /* 0x4b */ 
-  {{0xd3,0x9f,0x9f,0x97,0xab,0x1f,0xf1,0xff, /* TW: New, 1280x960-85, not in any BIOS */
-    0xc0,0x83,0xbf,0xbf,0xf2,0x10,0x00,0x07,
--   0x01}}   /* 0x4c */
-+   0x01}},  /* 0x4c */
-+ {{0x7b,0x5f,0x63,0x9f,0x6a,0x93,0x6f,0xf0, /* 768x576 */
-+   0x58,0x8a,0x3f,0x57,0x70,0x20,0x00,0x05,
-+   0x01}},  /* 0x4d */
-+ {{0x2d,0x27,0x28,0x90,0x2c,0x80,0x0b,0x3e, /* FSTN 320x480, TEMP - possibly invalid */
-+   0xe9,0x8b,0xdf,0xe7,0x04,0x00,0x00,0x00,
-+   0x00}}   /* 0x4e */
- };
--
- typedef struct _SiS310_MCLKDataStruct
- {
-       UCHAR SR28,SR29,SR2A;
-       USHORT CLOCK;
- } SiS310_MCLKDataStruct;
-+#ifdef LINUXBIOS
- static const SiS310_MCLKDataStruct SiS310_MCLKData_0_315[] =
- {
--      { 0x3b,0x22,0x01,143},   /* TW: Was { 0x5c,0x23,0x01,166}, */
-+      { 0x3b,0x22,0x01,143},
-       { 0x5c,0x23,0x01,166},
-       { 0x5c,0x23,0x01,166},
-       { 0x5c,0x23,0x01,166},
-@@ -962,7 +535,7 @@ static const SiS310_MCLKDataStruct SiS31
-       { 0x5c,0x23,0x01,166}
- };
--static const SiS310_MCLKDataStruct SiS310_MCLKData_0_650[] =  /* @ 0x54 */
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_0_650[] =
- {
-       { 0x5a,0x64,0x82, 66},
-       { 0xb3,0x45,0x82, 83},
-@@ -973,8 +546,22 @@ static const SiS310_MCLKDataStruct SiS31
-       { 0x37,0x22,0x82,133},
-       { 0x37,0x22,0x82,133}
- };
-+#endif
-+
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_0_330[] =
-+{
-+      { 0x5c,0x23,0x01,166},
-+      { 0x5c,0x23,0x01,166},
-+      { 0x7c,0x08,0x01,200},
-+      { 0x79,0x06,0x01,250},
-+      { 0x7c,0x08,0x01,200},
-+      { 0x7c,0x08,0x01,200},
-+      { 0x7c,0x08,0x01,200},
-+      { 0x79,0x06,0x01,250}
-+};
--static const SiS310_MCLKDataStruct SiS310_MCLKData_0_330[] =   /* @ 0x54 */
-+#ifdef LINUXBIOS
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_0_660[] =  /* TODO */
- {
-       { 0x5c,0x23,0x01,166},
-       { 0x5c,0x23,0x01,166},
-@@ -985,8 +572,9 @@ static const SiS310_MCLKDataStruct SiS31
-       { 0x7c,0x08,0x01,200},
-       { 0x79,0x06,0x01,250}
- };
-+#endif
--static const SiS310_MCLKDataStruct SiS310_MCLKData_1[] =      /* @ 0x155 */
-+static const SiS310_MCLKDataStruct SiS310_MCLKData_1[] =
- {
-         { 0x29,0x21,0x82,150},
-       { 0x5c,0x23,0x82,166},
-@@ -998,6 +586,7 @@ static const SiS310_MCLKDataStruct SiS31
-       { 0x37,0x22,0x82,133}
- };
-+#ifdef LINUXBIOS
- typedef struct _SiS310_ECLKDataStruct
- {
-       UCHAR SR2E,SR2F,SR30;
-@@ -1011,6 +600,7 @@ static const SiS310_ECLKDataStruct SiS31
-       { 0x5c,0x23,0x01,166},
-       { 0x5c,0x23,0x01,166}
- };
-+#endif
- typedef struct _SiS310_VCLKDataStruct
- {
-@@ -1020,22 +610,22 @@ typedef struct _SiS310_VCLKDataStruct
- static const SiS310_VCLKDataStruct SiS310_VCLKData[]=
- {
--      { 0x1b,0xe1, 25}, /* 0x0 */   /* 650/LVDS BIOS: @ 0x5647 */
--      { 0x4e,0xe4, 28}, /* 0x1 */
--      { 0x57,0xe4, 31}, /* 0x2 */
--      { 0xc3,0xc8, 36}, /* 0x3 */
--      { 0x42,0xe2, 40}, /* 0x4 */
--      { 0xfe,0xcd, 43}, /* 0x5 */
--      { 0x5d,0xc4, 44}, /* 0x6 */
--      { 0x52,0xe2, 49}, /* 0x7 */
--      { 0x53,0xe2, 50}, /* 0x8 */
--      { 0x74,0x67, 52}, /* 0x9 */
--      { 0x6d,0x66, 56}, /* 0xa */
--      { 0x5a,0x64, 65}, /* 0xb */   /* TW: was 6c c3 - WRONG */
--      { 0x46,0x44, 67}, /* 0xc */
--      { 0xb1,0x46, 68}, /* 0xd */
--      { 0xd3,0x4a, 72}, /* 0xe */
--      { 0x29,0x61, 75}, /* 0xf */
-+      { 0x1b,0xe1, 25}, /* 0x00 */
-+      { 0x4e,0xe4, 28}, /* 0x01 */
-+      { 0x57,0xe4, 31}, /* 0x02 */
-+      { 0xc3,0xc8, 36}, /* 0x03 */
-+      { 0x42,0xe2, 40}, /* 0x04 */
-+      { 0xfe,0xcd, 43}, /* 0x05 */
-+      { 0x5d,0xc4, 44}, /* 0x06 */
-+      { 0x52,0xe2, 49}, /* 0x07 */
-+      { 0x53,0xe2, 50}, /* 0x08 */
-+      { 0x74,0x67, 52}, /* 0x09 */
-+      { 0x6d,0x66, 56}, /* 0x0a */
-+      { 0x5a,0x64, 65}, /* 0x0b */  /* TW: was 6c c3 - WRONG */
-+      { 0x46,0x44, 67}, /* 0x0c */
-+      { 0xb1,0x46, 68}, /* 0x0d */
-+      { 0xd3,0x4a, 72}, /* 0x0e */
-+      { 0x29,0x61, 75}, /* 0x0f */
-       { 0x6e,0x46, 76}, /* 0x10 */
-       { 0x2b,0x61, 78}, /* 0x11 */
-       { 0x31,0x42, 79}, /* 0x12 */
-@@ -1045,7 +635,7 @@ static const SiS310_VCLKDataStruct SiS31
-       { 0x62,0x44, 94}, /* 0x16 */
-       { 0x2b,0x41,104}, /* 0x17 */
-       { 0x3a,0x23,105}, /* 0x18 */
--      { 0x70,0x44,108}, /* 0x19 */
-+      { 0x70,0x44,108}, /* 0x19 */  /* 1400x1050 LCD */
-       { 0x3c,0x23,109}, /* 0x1a */
-       { 0x5e,0x43,113}, /* 0x1b */
-       { 0xbc,0x44,116}, /* 0x1c */
-@@ -1078,12 +668,12 @@ static const SiS310_VCLKDataStruct SiS31
-       { 0xea,0x08,340}, /* 0x37 */
-       { 0xe8,0x07,376}, /* 0x38 */
-       { 0xde,0x06,389}, /* 0x39 */
--      { 0x52,0x2a, 54}, /* 0x3a */
--      { 0x52,0x6a, 27}, /* 0x3b */
--      { 0x62,0x24, 70}, /* 0x3c */
--      { 0x62,0x64, 70}, /* 0x3d */
--      { 0xa8,0x4c, 30}, /* 0x3e */
--      { 0x20,0x26, 33}, /* 0x3f */
-+      { 0x52,0x2a, 54}, /* 0x3a */  /* 301 TV */
-+      { 0x52,0x6a, 27}, /* 0x3b */  /* 301 TV */
-+      { 0x62,0x24, 70}, /* 0x3c */  /* 301 TV */
-+      { 0x62,0x64, 70}, /* 0x3d */  /* 301 TV */
-+      { 0xa8,0x4c, 30}, /* 0x3e */  /* 301 TV */
-+      { 0x20,0x26, 33}, /* 0x3f */  /* 301 TV */
-       { 0x31,0xc2, 39}, /* 0x40 */
-       { 0x60,0x36, 30}, /* 0x41 */  /* Chrontel */
-       { 0x40,0x4a, 28}, /* 0x42 */  /* Chrontel */
-@@ -1096,7 +686,7 @@ static const SiS310_VCLKDataStruct SiS31
-       { 0xce,0x3c, 39}, /* 0x49 */
-       { 0x52,0x4a, 36}, /* 0x4a */  /* Chrontel */
-       { 0x34,0x61, 95}, /* 0x4b */
--      { 0x78,0x27,108}, /* 0x4c - was 102 */  /* TW: Last entry in 650/301 BIOS */
-+      { 0x78,0x27,108}, /* 0x4c - was 102 */
-       { 0x66,0x43,123}, /* 0x4d */  /* Modes 0x26-0x28 (1400x1050) */
-       { 0x41,0x4e, 21}, /* 0x4e */
-       { 0xa1,0x4a, 29}, /* 0x4f */  /* Chrontel */
-@@ -1110,7 +700,8 @@ static const SiS310_VCLKDataStruct SiS31
-       { 0xbf,0xc8, 35}, /* 0x57 - added for 856x480-38i,60 (not in any BIOS) */
-       { 0x30,0x23, 88}, /* 0x58 - added for 1360x768-62 (is 60Hz!) (not in any BIOS) */
-       { 0x52,0x07,149}, /* 0x59 - added for 1280x960-85 (Not in any BIOS) */
--      { 0x56,0x07,156}  /* 0x5a - added for 1400x1050-75 */
-+      { 0x56,0x07,156}, /* 0x5a - added for 1400x1050-75 */
-+      { 0x70,0x29, 81}  /* 0x5b */  /* 1280x768 LCD */
- };
- typedef struct _SiS310_VBVCLKDataStruct
-@@ -1121,22 +712,22 @@ typedef struct _SiS310_VBVCLKDataStruct
- static const SiS310_VBVCLKDataStruct SiS310_VBVCLKData[]=
- {
--      { 0x1b,0xe1, 25}, /* 0x0 */   /* 650/LVDS BIOS: @ 0x579c */
--      { 0x4e,0xe4, 28}, /* 0x1 */
--      { 0x57,0xe4, 31}, /* 0x2 */
--      { 0xc3,0xc8, 36}, /* 0x3 */
--      { 0x42,0x47, 40}, /* 0x4 */
--      { 0xfe,0xcd, 43}, /* 0x5 */
--      { 0x5d,0xc4, 44}, /* 0x6 */
--      { 0x52,0x47, 49}, /* 0x7 */
--      { 0x53,0x47, 50}, /* 0x8 */
--      { 0x74,0x67, 52}, /* 0x9 */
--      { 0x6d,0x66, 56}, /* 0xa */
--      { 0x35,0x62, 65}, /* 0xb */  /* Was 0x5a,0x64 - 650/LVDS+301 bios: 35,62  */
--      { 0x46,0x44, 67}, /* 0xc */
--      { 0xb1,0x46, 68}, /* 0xd */
--      { 0xd3,0x4a, 72}, /* 0xe */
--      { 0x29,0x61, 75}, /* 0xf */
-+      { 0x1b,0xe1, 25}, /* 0x00 */
-+      { 0x4e,0xe4, 28}, /* 0x01 */
-+      { 0x57,0xe4, 31}, /* 0x02 */
-+      { 0xc3,0xc8, 36}, /* 0x03 */
-+      { 0x42,0x47, 40}, /* 0x04 */
-+      { 0xfe,0xcd, 43}, /* 0x05 */
-+      { 0x5d,0xc4, 44}, /* 0x06 */
-+      { 0x52,0x47, 49}, /* 0x07 */
-+      { 0x53,0x47, 50}, /* 0x08 */
-+      { 0x74,0x67, 52}, /* 0x09 */
-+      { 0x6d,0x66, 56}, /* 0x0a */
-+      { 0x35,0x62, 65}, /* 0x0b */  /* Was 0x5a,0x64 - 650/LVDS+301 bios: 35,62  */
-+      { 0x46,0x44, 67}, /* 0x0c */
-+      { 0xb1,0x46, 68}, /* 0x0d */
-+      { 0xd3,0x4a, 72}, /* 0x0e */
-+      { 0x29,0x61, 75}, /* 0x0f */
-       { 0x6d,0x46, 75}, /* 0x10 */
-       { 0x41,0x43, 78}, /* 0x11 */
-       { 0x31,0x42, 79}, /* 0x12 */
-@@ -1146,7 +737,7 @@ static const SiS310_VBVCLKDataStruct SiS
-       { 0x62,0x44, 94}, /* 0x16 */
-       { 0x2b,0x22,104}, /* 0x17 */
-       { 0x49,0x24,105}, /* 0x18 */
--      { 0xf8,0x2f,108}, /* 0x19 */
-+      { 0xf8,0x2f,108}, /* 0x19 */  /* 1400x1050 LCD */
-       { 0x3c,0x23,109}, /* 0x1a */
-       { 0x5e,0x43,113}, /* 0x1b */
-       { 0xbc,0x44,116}, /* 0x1c */
-@@ -1179,19 +770,19 @@ static const SiS310_VBVCLKDataStruct SiS
-       { 0xea,0x08,340}, /* 0x37 */
-       { 0xe8,0x07,376}, /* 0x38 */
-       { 0xde,0x06,389}, /* 0x39 */
--      { 0x52,0x2a, 54}, /* 0x3a */
--      { 0x52,0x6a, 27}, /* 0x3b */
--      { 0x62,0x24, 70}, /* 0x3c */
--      { 0x62,0x64, 70}, /* 0x3d */
--      { 0xa8,0x4c, 30}, /* 0x3e */
--      { 0x20,0x26, 33}, /* 0x3f */
-+      { 0x52,0x2a, 54}, /* 0x3a */  /* 301 TV */
-+      { 0x52,0x6a, 27}, /* 0x3b */  /* 301 TV */
-+      { 0x62,0x24, 70}, /* 0x3c */  /* 301 TV */
-+      { 0x62,0x64, 70}, /* 0x3d */  /* 301 TV */
-+      { 0xa8,0x4c, 30}, /* 0x3e */  /* 301 TV */
-+      { 0x20,0x26, 33}, /* 0x3f */  /* 301 TV */
-       { 0x31,0xc2, 39}, /* 0x40 */
--      { 0x2e,0x48, 25}, /* 0x41 */
--      { 0x24,0x46, 25}, /* 0x42 */
--      { 0x26,0x64, 28}, /* 0x43 */
--      { 0x37,0x64, 40}, /* 0x44 */
--      { 0xa1,0x42,108}, /* 0x45 */
--      { 0x37,0x61,100}, /* 0x46 */
-+      { 0x2e,0x48, 25}, /* 0x41 */  /* Replacement for LCD on 315 for index 0 */
-+      { 0x24,0x46, 25}, /* 0x42 */  /* Replacement for LCD on 315 for modes 0x01, 0x03, 0x0f, 0x10, 0x12 */
-+      { 0x26,0x64, 28}, /* 0x43 */  /* Replacement for LCD on 315 for index 1 */
-+      { 0x37,0x64, 40}, /* 0x44 */  /* Replacement for LCD on 315 for index 4 */
-+      { 0xa1,0x42,108}, /* 0x45 */  /* 1280x960 LCD */
-+      { 0x37,0x61,100}, /* 0x46 */  /* 1280x960 LCD */
-       { 0x78,0x27,108}, /* 0x47 */
-       { 0x97,0x2c, 26}, /* 0x48 */  /* UNUSED - Entries from here new, not in any BIOS */
-       { 0xce,0x3c, 39}, /* 0x49 */  /* UNUSED */
-@@ -1211,72 +802,17 @@ static const SiS310_VBVCLKDataStruct SiS
-       { 0xbf,0xc8, 35}, /* 0x57 */  /* 856x480-38i,60  */
-       { 0x30,0x23, 88}, /* 0x58 */  /* 1360x768-62 (is 60Hz!) TEMP, UNUSED */
-       { 0x52,0x07,149}, /* 0x59 */  /* 1280x960-85  - UNUSED */
--      { 0x56,0x07,156}  /* 0x5a */  /* 1400x1050-75 - UNUSED */
-+      { 0x56,0x07,156}, /* 0x5a */  /* 1400x1050-75 - UNUSED */
-+      { 0x70,0x29, 81}  /* 0x5b */  /* 1280x768 LCD */
- };
- static const UCHAR SiS310_ScreenOffset[] = 
- {
-         0x14,0x19,0x20,0x28,0x32,0x40,0x50,0x64,
--      0x78,0x80,0x2d,0x35,0x57,0x48,0x55,
-+      0x78,0x80,0x2d,0x35,0x57,0x48,0x55,0x30,
-       0xff
--};      /* TW: Added 1400x1050, 1152x864, 848/856x480, 1360x768 */
--
--typedef struct _SiS310_StResInfoStruct
--{
--      USHORT HTotal;
--      USHORT VTotal;
--} SiS310_StResInfoStruct;
--
--static const SiS310_StResInfoStruct SiS310_StResInfo[]=
--{
--      { 640,400},
--      { 640,350},
--      { 720,400},
--      { 720,350},
--      { 640,480}
--};
--
--typedef struct _SiS310_ModeResInfoStruct
--{
--      USHORT HTotal;
--      USHORT VTotal;
--      UCHAR  XChar;
--      UCHAR  YChar;
--} SiS310_ModeResInfoStruct;
--
--static const SiS310_ModeResInfoStruct SiS310_ModeResInfo[] =
--{
--      {  320, 200, 8, 8},   /* 0x00 */
--      {  320, 240, 8, 8},   /* 0x01 */
--      {  320, 400, 8, 8},   /* 0x02 */
--      {  400, 300, 8, 8},   /* 0x03 */
--      {  512, 384, 8, 8},   /* 0x04 */
--      {  640, 400, 8,16},   /* 0x05 */
--      {  640, 480, 8,16},   /* 0x06 */
--      {  800, 600, 8,16},   /* 0x07 */
--      { 1024, 768, 8,16},   /* 0x08 */
--      { 1280,1024, 8,16},   /* 0x09 */
--      { 1600,1200, 8,16},   /* 0x0a */
--      { 1920,1440, 8,16},   /* 0x0b */
--      { 2048,1536, 8,16},   /* 0x0c */
--      {  720, 480, 8,16},   /* 0x0d */
--      {  720, 576, 8,16},   /* 0x0e */
--      { 1280, 960, 8,16},   /* 0x0f */
--      {  800, 480, 8,16},   /* 0x10 */
--      { 1024, 576, 8,16},   /* 0x11 */
--      { 1280, 720, 8,16},   /* 0x12 */
--      {  856, 480, 8,16},   /* 0x13 - TW: New, not in any BIOS */
--      { 1280, 768, 8,16},   /* 0x14 20; TW: New */
--      { 1400,1050, 8,16},   /* 0x15 21; TW: New */
--      { 1152, 864, 8,16},   /* 0x16 - TW: New, not in any BIOS */
--      {  848, 480, 8,16},   /* 0x17 - TW: New, not in any BIOS */
--      { 1360, 768, 8,16}    /* 0x18 - TW: New, not in any BIOS */
- };
--static const UCHAR SiS310_OutputSelect = 0x40;
--
--static const UCHAR SiS310_SoftSetting  = 0x30;   /* TW: RAM setting */
--
- static const UCHAR SiS310_SR15[8][4]={
-       {0x00,0x04,0x60,0x60},
-       {0x0f,0x0f,0x0f,0x0f},
-@@ -1322,16 +858,6 @@ static const USHORT SiS310_VideoSenseDat
- static const USHORT SiS310_YCSenseData2    = 0x016b;
- #endif
--static const UCHAR SiS310_NTSCPhase[]    = {0x21,0xed,0xba,0x08};  /* TW: Was {0x21,0xed,0x8a,0x08}; */
--static const UCHAR SiS310_PALPhase[]     = {0x2a,0x05,0xe3,0x00};  /* TW: Was {0x2a,0x05,0xd3,0x00}; */
--static const UCHAR SiS310_PALMPhase[]    = {0x21,0xE4,0x2E,0x9B};  /* TW: palm*/
--static const UCHAR SiS310_PALNPhase[]    = {0x21,0xF4,0x3E,0xBA};  /* TW: paln*/
--static const UCHAR SiS310_NTSCPhase2[]   = {0x21,0xF0,0x7B,0xD6};
--static const UCHAR SiS310_PALPhase2[]    = {0x2a,0x09,0x86,0xe9};
--static const UCHAR SiS310_PALMPhase2[]   = {0x21,0xE6,0xEF,0xA4};  /* TW: palm 301b*/
--static const UCHAR SiS310_PALNPhase2[]   = {0x21,0xF6,0x94,0x46};  /* TW: paln 301b*/
--static const UCHAR SiS310_SpecialPhase[] = {0x1e,0x8c,0x5c,0x7a};
--
- typedef struct _SiS310_LCDDataStruct
- {
-       USHORT RVBHCMAX;
-@@ -1353,25 +879,6 @@ static const SiS310_LCDDataStruct  SiS31
-       {    1,   1,1344, 806,1344, 806}
- };
--#if 0   /* Seems out-dated, all BIOSes since 03/27/2002 have the other version */
--static const SiS310_LCDDataStruct  SiS310_ExtLCD1024x768Data[] = 
--{
--      {   12,   5, 896, 512,1344, 806},
--      {   12,   5, 896, 510,1344, 806},
--      {   32,  15,1008, 505,1344, 806},
--      {   32,  15,1008, 514,1344, 806},
--      {   12,   5, 896, 500,1344, 806},
--      {   42,  25,1024, 625,1344, 806},
--      {    1,   1,1344, 806,1344, 806},
--      {   12,   5, 896, 500,1344, 806},
--      {   42,  25,1024, 625,1344, 806},
--      {    1,   1,1344, 806,1344, 806},
--      {   12,   5, 896, 500,1344, 806},
--      {   42,  25,1024, 625,1344, 806},
--      {    1,   1,1344, 806,1344, 806}
--};
--#endif
--
- static const SiS310_LCDDataStruct  SiS310_ExtLCD1024x768Data[] =   
- {
-       {   42,  25,1536, 419,1344, 806},
-@@ -1463,272 +970,14 @@ static const SiS310_LCDDataStruct  SiS31
-       {    1,   1,1688,1066,1688,1066}
- };
--static const SiS310_LCDDataStruct  SiS310_LCD1280x960Data[] =
--{
--      {    9,   2, 800, 500,1800,1000},
--      {    9,   2, 800, 500,1800,1000},
--      {    4,   1, 900, 500,1800,1000},
--      {    4,   1, 900, 500,1800,1000},
--      {    9,   2, 800, 500,1800,1000},
--      {   30,  11,1056, 625,1800,1000},
--      {    5,   3,1350, 800,1800,1000},
--      {    1,   1,1576,1050,1576,1050},
--      {    1,   1,1800,1000,1800,1000}
--};
--
--static const SiS310_LCDDataStruct  SiS310_StLCD1400x1050Data[] = 
--{  /* TW: New from 1.11.6s */
--      { 211,  100, 2100,  408, 1688, 1066 },
--      { 211,   64, 1536,  358, 1688, 1066 },
--      { 211,  100, 2100,  408, 1688, 1066 },
--      { 211,   64, 1536,  358, 1688, 1066 },
--      { 211,   48,  840,  488, 1688, 1066 },
--      { 211,   72, 1008,  609, 1688, 1066 },
--      { 211,  128, 1400,  776, 1688, 1066 },
--      { 211,  205, 1680, 1041, 1688, 1066 },
--      {   1,    1, 1688, 1066, 1688, 1066 }
--};
--
--static const SiS310_LCDDataStruct  SiS310_ExtLCD1400x1050Data[] = 
--{  /* TW: New from 1.11.6s */
--      { 211,  100, 2100,  408, 1688, 1066 },
--      { 211,   64, 1536,  358, 1688, 1066 },
--      { 211,  100, 2100,  408, 1688, 1066 },
--      { 211,   64, 1536,  358, 1688, 1066 },
--      { 211,   48,  840,  488, 1688, 1066 },
--      { 211,   72, 1008,  609, 1688, 1066 },
--      { 211,  128, 1400,  776, 1688, 1066 },
--      { 211,  205, 1680, 1041, 1688, 1066 },
--      {   1,    1, 1688, 1066, 1688, 1066 }
--};
--
--static const SiS310_LCDDataStruct  SiS310_NoScaleData1400x1050[] = 
--{  /* TW: To be checked (BIOS uses 1280x1024 data, one line too short) */
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 },
--      { 1, 1, 1688, 1066, 1688, 1066 }
--};
--
--static const SiS310_LCDDataStruct  SiS310_StLCD1600x1200Data[] = 
--{  /* TODO */
--      {    0,   0,   0,   0,   0,   0}
--};
--
--static const SiS310_LCDDataStruct  SiS310_ExtLCD1600x1200Data[] = 
--{  /* TODO */
--      {    0,   0,   0,   0,   0,   0}
--};
--
--static const SiS310_LCDDataStruct  SiS310_NoScaleData1600x1200[] = 
--{  /* TODO */
--      {    0,   0,   0,   0,   0,   0}
--};
--
--typedef struct _SiS310_TVDataStruct
--{
--      USHORT RVBHCMAX;
--      USHORT RVBHCFACT;
--      USHORT VGAHT;
--      USHORT VGAVT;
--      USHORT TVHDE;
--      USHORT TVVDE;
--      USHORT RVBHRS;
--      UCHAR FlickerMode;
--      USHORT HALFRVBHRS;
--      UCHAR RY1COE;
--      UCHAR RY2COE;
--      UCHAR RY3COE;
--      UCHAR RY4COE;
--} SiS310_TVDataStruct;
--
--static const SiS310_TVDataStruct  SiS310_StPALData[]=
--{
-- {    1,   1, 864, 525,1270, 400, 100,   0, 760,0xf4,0xff,0x1c,0x22},
-- {    1,   1, 864, 525,1270, 350, 100,   0, 760,0xf4,0xff,0x1c,0x22},
-- {    1,   1, 864, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
-- {    1,   1, 864, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
-- {    1,   1, 864, 525,1270, 480,  50,   0, 760,0xf4,0xff,0x1c,0x22},
-- {    1,   1, 864, 525,1270, 600,  50,   0,   0,0xf4,0xff,0x1c,0x22}
--};
--
--static const SiS310_TVDataStruct  SiS310_ExtPALData[] =   
--{
-- {   27,  10, 848, 448,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},
-- {  108,  35, 848, 398,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},
-- {   12,   5, 954, 448,1270, 530,  50,   0,  50,0xf1,0x04,0x1f,0x18},
-- {    9,   4, 960, 463,1644, 438,  50,   0,  50,0xf4,0x0b,0x1c,0x0a},
-- {    9,   4, 848, 528,1270, 530,   0,   0,  50,0xf5,0xfb,0x1b,0x2a},  /* 640x480 */
-- {   36,  25,1060, 648,1316, 530, 438,   0, 438,0xeb,0x05,0x25,0x16},  /* 800x600 */
-- {    3,   2,1080, 619,1270, 540, 438,   0, 438,0xf3,0x00,0x1d,0x20},  /* 720x480/576 */
-- {    1,   1,1170, 821,1270, 520, 686,   0, 686,0xF3,0x00,0x1D,0x20}   /* 1024x768 */
--};
--
--static const SiS310_TVDataStruct  SiS310_StNTSCData[]=
--{
-- {    1,   1, 858, 525,1270, 400,  50,   0, 760,0xf1,0x04,0x1f,0x18},
-- {    1,   1, 858, 525,1270, 350,  50,   0, 640,0xf1,0x04,0x1f,0x18},
-- {    1,   1, 858, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
-- {    1,   1, 858, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
-- {    1,   1, 858, 525,1270, 480,   0,   0, 760,0xf1,0x04,0x1f,0x18}
--};
--
--static const SiS310_TVDataStruct  SiS310_ExtNTSCData[]=
--{
-- {  143,  65, 858, 443,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
-- {   88,  35, 858, 393,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
-- {  143,  70, 924, 443,1270, 440,  92,   0,  92,0xf1,0x04,0x1f,0x18},
-- {  143,  70, 924, 393,1270, 440,  92,   0,  92,0xf4,0x0b,0x1c,0x0a},
-- {  143,  76, 836, 523,1270, 440, 224,   0,   0,0xf1,0x05,0x1f,0x16},  /* 640x480 */
-- {  143, 120,1056, 643,1270, 440,   0, 128,   0,0xf4,0x10,0x1c,0x00},  /* 800x600  */
-- {    2,   1, 858, 503,1270, 480,   0, 128,   0,0xee,0x0c,0x22,0x08},  /* 720x480/576 */
-- {   65,  64,1056, 791,1270, 480, 638,   0,   0,0xEE,0x0C,0x22,0x08}   /* 1024x768 */
--};
--
--#if 0
--static const SiS310_TVDataStruct  SiS310_St1HiTVData[]=
--{
--  
--};
--#endif
--
--static const SiS310_TVDataStruct  SiS310_St2HiTVData[]=
--{
-- {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    1,   1, 0x37c,0x233,0x2b2,0x2bc,          0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    1,   1, 0x3e8,0x233,0x311,0x2bc,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    5,   2, 0x348,0x233,0x670,0x3c0,0x08d,128, 0, 0x00,0x00,0x00,0x00},
-- {    8,   5, 0x41a,0x2ab,0x670,0x3c0,0x17c,128, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const SiS310_TVDataStruct  SiS310_ExtHiTVData[]=
--{
-- {    6,   1, 0x348,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x348,0x1e3,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-- {    5,   1, 0x348,0x233,0x670,0x3c0,0x166,128, 0, 0x00,0x00,0x00,0x00},
-- {   16,   5, 0x41a,0x2ab,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- {   25,  12, 0x4ec,0x353,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    5,   4, 0x627,0x464,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00},
-- {    4,   1, 0x41a,0x233,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},
-- {    5,   2, 0x578,0x293,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-- {    8,   5, 0x6d6,0x323,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00}
--};
--
--static const UCHAR SiS310_NTSCTiming[] = { 
--      0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
--      0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
--      0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
--      0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
--      0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
--      0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
--      0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
--};
--
--static const UCHAR SiS310_PALTiming[] = {  
--      0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
--      0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
--      0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,
--      0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,
--      0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
--      0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
--};
--
--static const UCHAR SiS310_HiTVExtTiming[] = {  
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
--      0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
--      0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
--      0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS310_HiTVSt1Timing[] = {  
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
--      0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
--      0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
--      0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
--};
--
--static const UCHAR SiS310_HiTVSt2Timing[] = {  
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
--      0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
--      0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
--      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
--      0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
--};
--
--static const UCHAR SiS310_HiTVTextTiming[] = {  
--        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
--      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
--      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
--      0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
--      0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
--      0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
--        0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
--      0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
--};
--
--static const UCHAR SiS310_HiTVGroup3Data[] = {  
--        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
--      0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
--      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
--      0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
--      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
--      0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
--      0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
--      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS310_HiTVGroup3Simu[] = {  
--        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
--      0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
--      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
--      0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
--      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
--      0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
--      0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
--      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
--static const UCHAR SiS310_HiTVGroup3Text[] = {  
--        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
--      0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
--      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
--      0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
--      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
--      0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
--      0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
--      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
--};
--
- typedef struct _SiS310_PanelDelayTblStruct
- {
-       UCHAR timer[2];
- } SiS310_PanelDelayTblStruct;
--static const SiS310_PanelDelayTblStruct SiS310_PanelDelayTbl[]=  
-+static const SiS310_PanelDelayTblStruct SiS310_PanelDelayTbl[]=
- {
--        {{0x10,0x40}},                /* TW: from 650/301LVx 1.10.6s BIOS */
-+        {{0x10,0x40}},
-       {{0x10,0x40}},
-       {{0x10,0x40}},
-       {{0x10,0x40}},
-@@ -1744,24 +993,6 @@ static const SiS310_PanelDelayTblStruct 
-       {{0x10,0x40}},
-       {{0x10,0x40}},
-       {{0x10,0x40}}
--#if 0
--      {{0x28,0xc8}},          /* TW: from 650/301LV BIOS */
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}},
--      {{0x28,0xc8}}
--#endif
- };
- static const SiS310_PanelDelayTblStruct SiS310_PanelDelayTblLVDS[]=
-@@ -1792,363 +1023,7 @@ typedef struct _SiS310_LVDSDataStruct
-       USHORT LCDVT;
- } SiS310_LVDSDataStruct;
--static const SiS310_LVDSDataStruct  SiS310_LVDS320x480Data_1[]=
--{
--      { 848, 433, 400, 525},
--      { 848, 389, 400, 525},
--      { 848, 433, 400, 525},
--      { 848, 389, 400, 525},
--      { 848, 518, 400, 525},
--      {1056, 628, 400, 525},
--      { 400, 525, 400, 525},
--      { 800, 449,1000, 644},
--      { 800, 525,1000, 635}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS800x600Data_1[]= 
--{
--      { 848, 433,1060, 629},
--      { 848, 389,1060, 629},
--      { 848, 433,1060, 629},
--      { 848, 389,1060, 629},
--      { 848, 518,1060, 629},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      { 800, 449,1000, 644},
--      { 800, 525,1000, 635}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS800x600Data_2[]=  
--{
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      { 800, 449,1000, 644},
--      { 800, 525,1000, 635}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1024x768Data_1[]=  
--{
--      { 840, 438,1344, 806},
--      { 840, 409,1344, 806},
--      { 840, 438,1344, 806},
--      { 840, 409,1344, 806},
--      { 840, 518,1344, 806},   /* 640x480 */
--      {1050, 638,1344, 806},   /* 800x600 */
--      {1344, 806,1344, 806},   /* 1024x768 */
--      { 800, 449,1280, 801},
--      { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1024x768Data_2[]= 
--{
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      { 800, 449,1280, 801},
--      { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1280x1024Data_1[]=  
--{     
--      {1048, 442,1688,1066},
--      {1048, 392,1688,1066},
--      {1048, 442,1688,1066},
--      {1048, 392,1688,1066},
--      {1048, 522,1688,1066},
--      {1208, 642,1688,1066},
--      {1432, 810,1688,1066},
--      {1688,1066,1688,1066}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1280x1024Data_2[]=  
--{     
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066},
--      {1688,1066,1688,1066}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1400x1050Data_1[]=  
--{
--        { 928, 416, 1688,1066},
--      { 928, 366, 1688,1066},
--      { 928, 416, 1688,1066},
--      { 928, 366, 1688,1066},
--      { 928, 496, 1688,1066},
--      {1088, 616, 1688,1066},
--      {1312, 784, 1688,1066},
--      {1568,1040, 1688,1066},
--      {1688,1066, 1688,1066}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1400x1050Data_2[]= 
--{
--        {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--      {1688,1066, 1688,1066},
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1600x1200Data_1[]=  
--{
--        {1088, 450, 2048,1250},
--      {1088, 400, 2048,1250},
--      {1088, 450, 2048,1250},
--      {1088, 400, 2048,1250},
--      {1088, 530, 2048,1250},
--      {1248, 650, 2048,1250},
--      {1472, 818, 2048,1250},
--      {1728,1066, 2048,1250},
--      {1848,1066, 2048,1250},
--      {2048,1250, 2048,1250}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1600x1200Data_2[]= 
--{
--        {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250},
--      {2048,1250, 2048,1250}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1280x768Data_1[]= 
--{     
--      { 768, 438, 1408, 806},
--      { 768, 388, 1408, 806},
--      { 768, 438, 1408, 806},
--      { 768, 388, 1408, 806},
--      { 768, 518, 1408, 806},
--      { 928, 638, 1408, 806},
--      {1152, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1280x768Data_2[]=  
--{     
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806},
--      {1408, 806, 1408, 806}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1024x600Data_1[]=
--{
--      { 840, 604, 1344, 800},
--      { 840, 560, 1344, 800},
--      { 840, 604, 1344, 800},
--      { 840, 560, 1344, 800},
--      { 840, 689, 1344, 800},
--      {1050, 800, 1344, 800},
--      {1344, 800, 1344, 800},
--      { 800, 449, 1280, 801},
--      { 800, 525, 1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1024x600Data_2[]=
--{
--      {1344, 800, 1344, 800},
--      {1344, 800, 1344, 800},
--      {1344, 800, 1344, 800},
--      {1344, 800, 1344, 800},
--      {1344, 800, 1344, 800},
--      {1344, 800, 1344, 800},
--      {1344, 800, 1344, 800},
--      { 800, 449, 1280, 801},
--      { 800, 525, 1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1152x768Data_1[]=
--{
--      { 840, 438, 1344, 806},
--      { 840, 409, 1344, 806},
--      { 840, 438, 1344, 806},
--      { 840, 409, 1344, 806},
--      { 840, 518, 1344, 806},
--      {1050, 638, 1344, 806},
--      {1344, 806, 1344, 806},
--      { 800, 449, 1280, 801},
--      { 800, 525, 1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1152x768Data_2[]=
--{
--      {1344, 806, 1344, 806},
--      {1344, 806, 1344, 806},
--      {1344, 806, 1344, 806},
--      {1344, 806, 1344, 806},
--      {1344, 806, 1344, 806},
--      {1344, 806, 1344, 806},
--      {1344, 806, 1344, 806},
--      { 800, 449, 1280, 801},
--      { 800, 525, 1280, 813}
--};
--
--/* TW: Pass 1:1 data */
--static const SiS310_LVDSDataStruct  SiS310_LVDSXXXxXXXData_1[]=  
--{
--        { 800, 449,  800, 449},
--      { 800, 449,  800, 449},
--      { 900, 449,  900, 449},
--      { 900, 449,  900, 449},
--      { 800, 525,  800, 525},  /*  640x480   */
--      {1056, 628, 1056, 628},  /*  800x600   */
--      {1344, 806, 1344, 806},  /* 1024x768   */
--      {1344,1066, 1344,1066},  /* 1280x1024  */  /* INSERTED ! */
--      {1688, 806, 1688, 806},  /* 1280x768 ! */
--      /* No other panels ! */
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS640x480Data_1[]=  
--{
--      { 800, 449, 800, 449},
--      { 800, 449, 800, 449},
--      { 800, 449, 800, 449},
--      { 800, 449, 800, 449},
--      { 800, 525, 800, 525},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628},
--      {1056, 628,1056, 628}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1280x960Data_1[]=   
--{
--      { 840, 438,1344, 806},
--      { 840, 409,1344, 806},
--      { 840, 438,1344, 806},
--      { 840, 409,1344, 806},
--      { 840, 518,1344, 806},
--      {1050, 638,1344, 806},
--      {1344, 806,1344, 806},
--      { 800, 449,1280, 801},
--      { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LVDS1280x960Data_2[]=  
--{
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      { 800, 449,1280, 801},
--      { 800, 525,1280, 813}
--};
--
--/* LCDA */
--
--static const SiS310_LVDSDataStruct  SiS310_LCDA1400x1050Data_1[]=   
--{     /* TW: Might be temporary (invalid) data */
--        { 928, 416, 1688,1066},
--      { 928, 366, 1688,1066},
--      {1008, 416, 1688,1066},
--      {1008, 366, 1688,1066},
--      {1200, 530, 1688,1066},
--      {1088, 616, 1688,1066},
--      {1312, 784, 1688,1066},
--      {1568,1040, 1688,1066},
--      {1688,1066, 1688,1066}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LCDA1400x1050Data_2[]=   
--{     /* TW: Temporary data. Not valid */
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      { 800, 449,1280, 801},
--      { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LCDA1600x1200Data_1[]=  
--{     /* TW: Temporary data. Not valid */
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      {1344, 806,1344, 806},
--      { 800, 449,1280, 801},
--      { 800, 525,1280, 813}
--};
--
--static const SiS310_LVDSDataStruct  SiS310_LCDA1600x1200Data_2[]=  
--{     /* TW: Temporary data. Not valid */
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0},
--      {0, 0, 0, 0}
--};
--
--/* Chrontel TV */
--
--static const SiS310_LVDSDataStruct  SiS310_CHTVUNTSCData[]=   
--{
--      { 840, 600, 840, 600},
--      { 840, 600, 840, 600},
--      { 840, 600, 840, 600},
--      { 840, 600, 840, 600},
--      { 784, 600, 784, 600},
--      {1064, 750,1064, 750},
--        {1160, 945,1160, 945}           /* TW: For Ch7019 1024 */
--};
--
--static const SiS310_LVDSDataStruct  SiS310_CHTVONTSCData[]=   
--{
--      { 840, 525, 840, 525},
--      { 840, 525, 840, 525},
--      { 840, 525, 840, 525},
--      { 840, 525, 840, 525},
--      { 784, 525, 784, 525},
--      {1040, 700,1040, 700},
--        {1160, 840,1160, 840}                 /* TW: For Ch7019 1024 */
--};
--
--static const SiS310_LVDSDataStruct  SiS310_CHTVUPALData[]=   
-+static const SiS310_LVDSDataStruct  SiS310_CHTVUPALData[]=
- {
-       {1008, 625,1008, 625},
-       {1008, 625,1008, 625},
-@@ -2156,7 +1031,7 @@ static const SiS310_LVDSDataStruct  SiS3
-       {1008, 625,1008, 625},
-       { 840, 625, 840, 625},
-       { 960, 750, 960, 750},
--      {1400,1000,1400,1000}           /*  TW: For Ch7019 1024 */
-+      {1400,1000,1400,1000}
- };
- static const SiS310_LVDSDataStruct  SiS310_CHTVOPALData[]= 
-@@ -2167,7 +1042,7 @@ static const SiS310_LVDSDataStruct  SiS3
-       {1008, 625,1008, 625},
-       { 840, 625, 840, 625},
-       { 944, 625, 944, 625},
--        {1400, 875,1400, 875}         /*  TW: For Ch7019 1024 */
-+        {1400, 875,1400, 875}
- };
- static const SiS310_LVDSDataStruct  SiS310_CHTVUPALMData[]=  
-@@ -2178,7 +1053,7 @@ static const SiS310_LVDSDataStruct  SiS3
-       { 840, 600, 840, 600},
-       { 784, 600, 784, 600},
-       {1064, 750,1064, 750},
--        {1160, 945,1160, 945}           /* TW: For Ch7019 1024 */
-+        {1160, 945,1160, 945}
- };
- static const SiS310_LVDSDataStruct  SiS310_CHTVOPALMData[]=  
-@@ -2189,7 +1064,7 @@ static const SiS310_LVDSDataStruct  SiS3
-       { 840, 525, 840, 525},
-       { 784, 525, 784, 525},
-       {1040, 700,1040, 700},
--        {1160, 840,1160, 840}                 /* TW: For Ch7019 1024 */
-+        {1160, 840,1160, 840}
- };
- static const SiS310_LVDSDataStruct  SiS310_CHTVUPALNData[]=  
-@@ -2200,7 +1075,7 @@ static const SiS310_LVDSDataStruct  SiS3
-       {1008, 625,1008, 625},
-       { 840, 625, 840, 625},
-       { 960, 750, 960, 750},
--      {1400,1000,1400,1000}           /*  TW: For Ch7019 1024 */
-+      {1400,1000,1400,1000}
- };
- static const SiS310_LVDSDataStruct  SiS310_CHTVOPALNData[]= 
-@@ -2211,7 +1086,7 @@ static const SiS310_LVDSDataStruct  SiS3
-       {1008, 625,1008, 625},
-       { 840, 625, 840, 625},
-       { 944, 625, 944, 625},
--        {1400, 875,1400, 875}         /*  TW: For Ch7019 1024 */
-+        {1400, 875,1400, 875}
- };
- static const SiS310_LVDSDataStruct  SiS310_CHTVSOPALData[]=   /* TW: (super overscan - no effect on 7019) */
-@@ -2231,7 +1106,7 @@ typedef struct _SiS310_LVDSDesStruct
-       USHORT LCDVDES;
- } SiS310_LVDSDesStruct;
--static const SiS310_LVDSDesStruct  SiS310_PanelType00_1[]=  
-+static const SiS310_LVDSDesStruct  SiS310_PanelType00_1[]=  /* 800x600 */
- {
-       { 0, 0},
-       { 0, 0},
-@@ -2244,7 +1119,7 @@ static const SiS310_LVDSDesStruct  SiS31
-       { 0, 0}
- };
--static const SiS310_LVDSDesStruct  SiS310_PanelType01_1[]=   
-+static const SiS310_LVDSDesStruct  SiS310_PanelType01_1[]=  /* 1024x768 */
- {
-       { 0, 0},
-       { 0, 0},
-@@ -2257,7 +1132,7 @@ static const SiS310_LVDSDesStruct  SiS31
-       { 0, 0}
- };
--static const SiS310_LVDSDesStruct  SiS310_PanelType02_1[]=  
-+static const SiS310_LVDSDesStruct  SiS310_PanelType02_1[]=  /* 1280x1024 */
- {
-       { 0, 0},
-       { 0, 0},
-@@ -2382,33 +1257,31 @@ static const SiS310_LVDSDesStruct  SiS31
-       { 0, 0}
- };
--static const SiS310_LVDSDesStruct  SiS310_PanelType0b_1[]= 
--{
--      {1343, 798},
--      {1343, 794},
--      {1343, 798},
--      {1343, 794},
--      {1343,   0},
--      {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
--};
--
--static const SiS310_LVDSDesStruct  SiS310_PanelType0c_1[]=  
-+static const SiS310_LVDSDesStruct  SiS310_PanelType0b_1[]=  /* 640x480_2 */
- {
--      {1343, 798},
--      {1343, 794},
--      {1343, 798},
--      {1343, 794},
--      {1343,   0},
--      {1343,   0},
--      { 0, 805},
--      { 0, 794},
--      { 0,   0}
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 8, 524},
-+      { 0, 524}
-+};
-+
-+static const SiS310_LVDSDesStruct  SiS310_PanelType0c_1[]=  /* 640x480_3 */
-+{
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 0, 524},
-+      { 8, 524},
-+      { 0, 524}
- };
--static const SiS310_LVDSDesStruct  SiS310_PanelType0d_1[]= 
-+static const SiS310_LVDSDesStruct  SiS310_PanelType0d_1[]=
- {
-       {1343, 798},
-       {1343, 794},
-@@ -2604,7 +1477,7 @@ static const SiS310_LVDSDesStruct  SiS31
-       {   0,   0}
- };
--static const SiS310_LVDSDesStruct  SiS310_PanelType0b_2[]=  
-+static const SiS310_LVDSDesStruct  SiS310_PanelType0b_2[]=  /* 640x480_2 */
- {
-       {1152, 622},
-       {1152, 597},
-@@ -2617,7 +1490,7 @@ static const SiS310_LVDSDesStruct  SiS31
-       { 0,   0}
- };
--static const SiS310_LVDSDesStruct  SiS310_PanelType0c_2[]= 
-+static const SiS310_LVDSDesStruct  SiS310_PanelType0c_2[]=  /* 640x480_3 */
- {
-       {1152, 622},
-       {1152, 597},
-@@ -2669,184 +1542,6 @@ static const SiS310_LVDSDesStruct  SiS31
-       { 0,   0}
- };
--static const SiS310_LVDSDesStruct  SiS310_PanelTypeNS_1[]= 
--{
--      { 8,   0},
--      { 8,   0},
--      { 8,   0},
--      { 8,   0},
--      { 8,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0, 806},
--      { 0, 0 }
--};
--
--static const SiS310_LVDSDesStruct  SiS310_PanelTypeNS_2[] = 
--{
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1076_1[]=  
--{  /* 1024x768 - Checked (1.10.6s) */
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1076_2[]=  
--{  /* 1024x768 - Checked (1.10.6s) */
--      { 1184, 622 },
--      { 1184, 597 },
--      { 1184, 622 },
--      { 1184, 597 },
--      { 1152, 622 },
--      { 1232, 722 },
--      {    0, 0   },
--      {    0, 794 },
--      {    0, 0   }
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1210_1[]=  
--{  /* 1280x1024 - Checked (1.10.6s) */
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1210_2[]=  
--{  /* 1280x1024 - Checked (1.10.6s) */
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1296_1[]=  
--{  /* 1400x1050 - Checked (1.10.6s) */
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1296_2[]=  
--{  /* 1400x1050 - Checked (1.10.6s) - looks heavily invalid */
--      { 808 , 740},
--      { 0   , 715},
--      { 632 , 740},
--      { 632 , 715},
--      { 1307, 780},
--      { 1387,1157},
--      { 1499, 924},
--      { 1627,1052},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1600_1[]= 
--{  /* 1600x1200 - Checked (1.10.6s) */
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct SiS310_PanelType1600_2[]= 
--{  /* 1600x1200 - Checked (1.10.6s) - looks heavily invalid, not copied */
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0},
--      { 0 , 0}
--};
--
--static const SiS310_LVDSDesStruct  SiS310_CHTVUNTSCDesData[]=
--{
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0}
--};
--
--static const SiS310_LVDSDesStruct  SiS310_CHTVONTSCDesData[]=
--{
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0}
--};
--
--static const SiS310_LVDSDesStruct  SiS310_CHTVUPALDesData[]=
--{
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0}
--};
--
--static const SiS310_LVDSDesStruct  SiS310_CHTVOPALDesData[]=
--{
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      {256,   0},
--      { 0,   0},
--      { 0,   0},
--      { 0,   0}
--};
--
- typedef struct _SiS310_Part2PortTblStruct
- {
-       UCHAR CR[12];
-@@ -2866,16 +1561,15 @@ static const SiS310_Part2PortTblStruct S
- };
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1280x1024_1[] =
--{     /* TW: Temporary data, invalid */
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-- {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}}
-+{     /* TW: BIOS data invalid, last row taken from _3 */
-+ {{0x25,0x12,0x51,0x6E,0x48,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x2C,0x12,0x38,0x55,0x2F,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x25,0x12,0x51,0x6E,0x48,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x2C,0x12,0x38,0x55,0x2F,0xC1,0x35,0xB1,0x47,0xE9,0x71,0x33}},
-+ {{0x2D,0x12,0x79,0x96,0x70,0x99,0x35,0x89,0x47,0xC1,0x49,0x33}},
-+ {{0x29,0x12,0xB5,0xD2,0xAC,0xE9,0x35,0xD9,0x47,0x11,0x99,0x33}},
-+ {{0x36,0x13,0x02,0x25,0xFF,0x03,0x45,0x09,0x07,0xF9,0x00,0x24}},
-+ {{0x47,0x1C,0x14,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}}
- };
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1400x1050_1[] =
-@@ -2912,7 +1606,8 @@ static const SiS310_Part2PortTblStruct S
-  {{0x2c,0x12,0x38,0x55,0x2f,0xc1,0x35,0xb1,0x47,0xe9,0x71,0x33}},
-  {{0x2d,0x12,0x79,0x96,0x70,0x99,0x35,0x89,0x47,0xc1,0x49,0x33}},
-  {{0x29,0x12,0xb5,0xd2,0xac,0xe9,0x35,0xd9,0x47,0x11,0x99,0x33}},
-- {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-+ {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},  /* old  */
-+/* 0x36,0x13,0x02,0x25,0xff,0x03,0x45,0x09,0x07,0xf9,0x00,0x24        new? */
-  {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
-  {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
- };
-@@ -2959,6 +1654,7 @@ static const SiS310_Part2PortTblStruct S
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1024x768_3[] =
- {     /* TW: Data from 650/301LVx 1.10.6s */
-+#if 0
-  {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-  {{0x2c,0x13,0x9a,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-  {{0x25,0x13,0xc9,0x24,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-@@ -2968,56 +1664,55 @@ static const SiS310_Part2PortTblStruct S
-  {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-  {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
-  {{0x25,0x13,0xc9,0x25,0xff,0xf9,0x45,0x09,0x07,0xf9,0x09,0x24}}
--#if 0 /* TW: Data from 650/301LV */
-- {{0x25,0x12,0xc9,0xdc,0xb6,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x2c,0x12,0x9a,0xae,0x88,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x25,0x12,0xc9,0xdc,0xb6,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
-- {{0x38,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x38,0x18,0x16,0x00,0x00,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x36,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
-- {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
--#endif
-+#endif        /* Data from my 301LV */
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},   /* @@@@@ TEST */
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}},
-+ {{0x36,0x13,0x02,0x25,0xff,0x21,0x45,0x09,0x07,0x88,0x09,0x24}}
- };
- /*   1     2    4    5    6   1c   1d   1f   20   21   23   25   */
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1280x1024_3[] =
--{     /* TW: Temporary data, invalid */
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
-+{
-+ {{0x31,0x1B,0xC4,0xDA,0xB0,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x34,0x1B,0x9F,0xC0,0x80,0xB8,0x23,0x0A,0x07,0x14,0x8A,0x12}},
-+ {{0x3E,0x1B,0xCF,0xF0,0xB0,0xB8,0x23,0x0A,0x07,0x14,0x8A,0x12}},
-+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
-+ {{0x48,0x1C,0x15,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x48,0x1C,0x15,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x48,0x1C,0x15,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}},
-+ {{0x47,0x1C,0x14,0x29,0xFF,0xBD,0x23,0x0A,0x07,0x23,0x8A,0x12}}
- };
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1400x1050_3[] =
- {     
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
- };
- static const SiS310_Part2PortTblStruct SiS310_CRT2Part2_1600x1200_3[] =
- {     /* TW: Temporary data, invalid */
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
--  {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x42}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}},
-+ {{0x43,0x24,0x21,0x29,0x19,0xea,0x23,0x0a,0x07,0x32,0xc6,0x32}}
- };
- typedef struct _SiS310_LCDACRT1DataStruct
-@@ -3054,7 +1749,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11024x768_1[]=
--{  /* TW: Checked (1.10.6s) */
-+{
-  {{0x73,0x4f,0x4f,0x97,0x55,0x86,0xc4,0x1f,
-    0x92,0x89,0x8f,0x8f,0xb5,0x30,0x00,0x05,
-    0x00}},
-@@ -3079,7 +1774,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11280x1024_1[]=
--{  /* Checked (1.10.6s) */
-+{
-  {{0x7e,0x4f,0x4f,0x82,0x58,0x06,0xb8,0x1f,
-    0x90,0x84,0x8f,0x8f,0xb9,0x30,0x00,0x06,
-    0x00}},
-@@ -3107,7 +1802,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11400x1050_1[]=
--{    /* Checked (1.10.6s) */
-+{
-  {{0x6f,0x4f,0x4f,0x93,0x54,0x82,0x9e,0x1f,
-    0x93,0x86,0x8f,0x8f,0x9f,0x30,0x00,0x05,
-    0x00}},
-@@ -3200,7 +1895,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11024x768_1_H[]=
--{  /* TW: Checked (1.10.6s) */
-+{
-  {{0x4b,0x27,0x27,0x8f,0x2b,0x03,0xc4,0x1f,
-    0x92,0x89,0x8f,0x8f,0xb5,0x30,0x00,0x44,
-    0x00}},
-@@ -3225,7 +1920,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11280x1024_1_H[]=
--{   /* Checked (1.10.6s) */
-+{
-  {{0x56,0x27,0x27,0x9a,0x30,0x1e,0xb8,0x1f,
-    0x90,0x84,0x8f,0x8f,0xb9,0x30,0x00,0x05,
-    0x00}},
-@@ -3250,7 +1945,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11400x1050_1_H[]=
--{   /* Checked (1.10.6s) */
-+{
-   {{0x47,0x27,0x27,0x8b,0x2c,0x1a,0x9e,0x1f,
-     0x93,0x86,0x8f,0x8f,0x9f,0x30,0x00,0x05,
-     0x00}},
-@@ -3343,7 +2038,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11024x768_2[]=
--{   /* Checked (1.10.6s) */
-+{
-  {{0xa3,0x4f,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-    0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x06,
-    0x00}},
-@@ -3368,7 +2063,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11280x1024_2[]=
--{   /* Checked (1.10.6s) */
-+{
-  {{0xa3,0x4f,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-    0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x06,
-    0x00}},
-@@ -3393,7 +2088,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11400x1050_2[]=
--{    /* Checked (1.10.6s) */
-+{
-  {{0xce,0x4f,0x4f,0x92,0x8c,0x1a,0x28,0x9a,
-    0xdb,0x8f,0x8f,0x8f,0x29,0x21,0x00,0x03,
-    0x00}},
-@@ -3486,7 +2181,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11024x768_2_H[]=
--{   /* Checked (1.10.6s) */
-+{
-  {{0x4f,0x27,0x27,0x93,0x39,0x01,0x24,0xbb,
-    0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x01,
-    0x00 }},
-@@ -3511,7 +2206,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11280x1024_2_H[]=
--{   /* Checked (1.10.6s) */
-+{
-  {{0x4f,0x27,0x27,0x93,0x39,0x81,0x24,0xbb,
-    0x4a,0x80,0x8f,0x8f,0x25,0x30,0x00,0x01,
-    0x00 }},
-@@ -3536,7 +2231,7 @@ static const SiS310_LCDACRT1DataStruct  
- };
- static const SiS310_LCDACRT1DataStruct  SiS310_LCDACRT11400x1050_2_H[]=
--{  /* Checked (1.10.6s) */
-+{
-  {{0xa6,0x27,0x27,0x8a,0x64,0x92,0x28,0x9a,
-    0xdb,0x8f,0x8f,0x8f,0x29,0x21,0x00,0x06,
-    0x00}},
-@@ -3605,32 +2300,7 @@ typedef struct _SiS310_LVDSCRT1DataStruc
-       UCHAR CR[15];
- } SiS310_LVDSCRT1DataStruct;
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT1320x480_1[] =
--{
-- {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
--   0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
--   0x00 }},
-- {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
--   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
--   0x00 }},
-- {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
--   0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
--   0x00 }},
-- {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
--   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
--   0x00 }},
-- {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
--   0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
--   0x00 }},
-- {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
--   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
--   0x01 }},
-- {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
--   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
--   0x00 }}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT1800x600_1[] =   
-+static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT1800x600_1[] =
- {
-  {{0x6b,0x4f,0x8f,0x55,0x85,0xaa,0x1f,
-    0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-@@ -3924,63 +2594,7 @@ static const SiS310_LVDSCRT1DataStruct  
-    0x01}}
- };
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT1XXXxXXX_1[] =  
--{
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
--   0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
--   0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
--   0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
--   0x00}},
-- {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
--   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x05,
--   0x00}},
-- {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
--   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
--   0x01}},
-- {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--   0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--   0x01}},
-- {{0xce,0x9f,0x92,0xa8,0x14,0x28,0x5a,
--   0x00,0x84,0xff,0x29,0x09,0x00,0x07,
--   0x01}},
-- {{0xce,0x9f,0x92,0xa9,0x17,0x24,0xf5,
--   0x02,0x88,0xff,0x25,0x10,0x00,0x07,
--   0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT1XXXxXXX_1_H[] = 
--{
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
--   0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
--   0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
--   0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
--   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
--   0x00}},
-- {{0x38,0x27,0x9c,0x2c,0x80,0x0b,0x3e,
--   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
--   0x00}},
-- {{0x4d,0x31,0x91,0x3b,0x03,0x72,0xf0,
--   0x58,0x8c,0x57,0x73,0x20,0x00,0x01,
--   0x01}},
-- {{0x63,0x3f,0x87,0x4a,0x92,0x24,0xf5,
--   0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--   0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11400x1050_1[] =  
-+static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11400x1050_1[] =
- {
-   {{0x6f,0x4f,0x93,0x54,0x82,0x9e,0x1f,
-     0x8f,0x81,0x8f,0x9f,0x30,0x00,0x05,
-@@ -4220,332 +2834,8 @@ static const SiS310_LVDSCRT1DataStruct  
- #endif   
- };
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11280x768_1[] =  
--{     
-- {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
--   0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
--   0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
--   0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
--   0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
--   0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
--   0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
--   0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
--   0x00}},
-- {{0x5b,0x4f,0x9f,0x55,0x19,0x04,0x3e,
--   0xec,0x8e,0xdf,0x05,0x20,0x00,0x01,
--   0x00}},
-- {{0x6f,0x63,0x93,0x69,0x8d,0x7c,0xf0,
--   0x64,0x86,0x57,0x7d,0x20,0x00,0x05,
--   0x01}},
-- {{0x8b,0x7f,0x8f,0x85,0x09,0x24,0xf5,
--   0x0c,0x8e,0xff,0x25,0x30,0x00,0x02,
--   0x01}},
-- {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
--   0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
--   0x01}},
-- {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
--   0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
--   0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11280x768_1_H[] = 
--{
-- {{0x47,0x27,0x8b,0x2c,0x1a,0x9e,0x1f,
--   0x93,0x86,0x8f,0x9f,0x30,0x00,0x05,
--   0x00}},
-- {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
--   0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
--   0x00}},
-- {{0x47,0x27,0x8b,0x30,0x1e,0x9e,0x1f,
--   0x92,0x86,0x8f,0x9f,0x30,0x00,0x05,
--   0x00}},
-- {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
--   0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
--   0x00}},
-- {{0x47,0x27,0x8b,0x2c,0x1a,0xee,0x1f,
--   0xe2,0x86,0xdf,0xef,0x10,0x00,0x05,
--   0x00}},
-- {{0x51,0x31,0x95,0x36,0x04,0x66,0xf0,
--   0x5a,0x8e,0x57,0x67,0x20,0x00,0x01,
--   0x01}},
-- {{0x5f,0x3f,0x83,0x44,0x92,0x0e,0xf5,
--   0x02,0x86,0xff,0x0f,0x10,0x00,0x01,
--   0x01}},
-- {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
--   0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
--   0x01}},
-- {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
--   0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
--   0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11280x768_2[] = 
-+static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11600x1200_1[] =
- {
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
--   0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
--   0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
--   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
--   0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
--   0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
--   0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
--   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
--   0x00}},
-- {{0xab,0x60,0x9f,0x80,0x04,0x24,0xb3,
--   0x7c,0x8e,0x03,0x02,0x10,0x00,0x02,
--   0x01}},
-- {{0xab,0x63,0x8f,0x8a,0x8e,0x24,0xf1,
--   0xb6,0x88,0x57,0x25,0x10,0x00,0x02,
--   0x01}},
-- {{0xab,0x7f,0x8f,0x98,0x9c,0x24,0xf5,
--   0x0a,0x8c,0xff,0x25,0x30,0x00,0x02,
--   0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
--   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
--   0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
--   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
--   0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11280x768_2_H[] =
--{
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
--   0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
--   0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
--   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
--   0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
--   0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
--   0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
--   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
--   0x00}},
-- {{0x83,0x38,0x97,0x58,0x9c,0x24,0xb3,
--   0x7c,0x8e,0x03,0x02,0x10,0x00,0x01,
--   0x01}},
-- {{0x79,0x31,0x9d,0x58,0x9c,0x24,0xf1,
--   0xb6,0x88,0x57,0x25,0x10,0x00,0x01,
--   0x01}},
-- {{0x6b,0x3f,0x8f,0x58,0x9c,0x24,0xf5,
--   0x0a,0x8c,0xff,0x25,0x30,0x00,0x01,
--   0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
--   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
--   0x01}},
-- {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
--   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
--   0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11024x600_1[] =
--{
--        {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
--        0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
--        0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
--        0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
--        0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0xaf,0xba,
--        0x3b,0x82,0xdf,0xb0,0x00,0x00,0x01,
--        0x00}},
--        {{0x7e,0x63,0x82,0x68,0x15,0x1e,0xf1,
--        0xae,0x85,0x57,0x1f,0x30,0x00,0x26,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x1e,0xf1,
--        0xae,0x85,0x57,0x1f,0x30,0x00,0x02,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11024x600_1_H[] =
--{
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--          0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
--        0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
--        0x00}},
--        {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
--        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11024x600_2[] =
--{
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--          0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11024x600_2_H[] =
--{
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x01,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11152x768_1[] =
--{
--        {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
--        0x00}},
--        {{0x64,0x4f,0x88,0x54,0x9f,0x04,0x3e,
--        0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
--        0x00}},
--        {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
--        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11152x768_1_H[] =
--{
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
--        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
--        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
--        0x00}},
--        {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
--        0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
--        0x00}},
--        {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
--        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11152x768_2[] =
--{
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
--        0x00}},
--        {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
--        0x01}},
--        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11152x768_2_H[] =
--{
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
--        0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
--        0x00}},
--        {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
--        0xae,0x84,0x57,0x25,0x30,0x00,0x01,
--        0x01}},
--        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
--        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
--        0x01}}
--};
--
--static const SiS310_LVDSCRT1DataStruct  SiS310_LVDSCRT11600x1200_1[] =  
--{    
-  {{0x83,0x4f,0x87,0x51,0x09,0xc0,0x1f,
-    0x90,0x84,0x8f,0xc1,0x30,0x00,0x06,
-    0x00}},
-@@ -4701,7 +2991,7 @@ static const SiS310_LVDSCRT1DataStruct  
-       {{0x80,0x63,0x84,0x6d,0x0f,0xec,0xf0,
-         0x7a,0x8f,0x57,0xed,0x20,0x00,0x06,
-         0x01 }},
--      {{0x8c,0x7f,0x90,0x86,0x09,0xaf,0xf5,  /* TW: 1024x768 */
-+      {{0x8c,0x7f,0x90,0x86,0x09,0xaf,0xf5,
-         0x36,0x88,0xff,0xb0,0x10,0x00,0x02,
-         0x01}}
- };
-@@ -4726,7 +3016,7 @@ static const SiS310_LVDSCRT1DataStruct  
-       {{0x7d,0x63,0x81,0x68,0x0e,0xba,0xf0,
-         0x78,0x8a,0x57,0xbb,0x20,0x00,0x06,
-         0x01 }},
--      {{0x8c,0x7f,0x90,0x82,0x06,0x46,0xf5,   /* TW: 1024x768 */
-+      {{0x8c,0x7f,0x90,0x82,0x06,0x46,0xf5,
-         0x15,0x88,0xff,0x47,0x70,0x00,0x02,
-         0x01 }}
- };
-@@ -4751,7 +3041,7 @@ static const SiS310_LVDSCRT1DataStruct  
-       {{0x73,0x63,0x97,0x69,0x8b,0xec,0xf0,
-         0x90,0x8c,0x57,0xed,0x20,0x00,0x05,
-         0x01 }},
--      {{0xaa,0x7f,0x8e,0x8e,0x96,0xe6,0xf5,   /* TW: 1024x768 */
-+      {{0xaa,0x7f,0x8e,0x8e,0x96,0xe6,0xf5,
-         0x50,0x88,0xff,0xe7,0x10,0x00,0x02,
-         0x01}}
- };
-@@ -4776,7 +3066,7 @@ static const SiS310_LVDSCRT1DataStruct  
-       {{0x71,0x63,0x95,0x69,0x8c,0x6f,0xf0,
-         0x5a,0x8b,0x57,0x70,0x20,0x00,0x05,
-         0x01 }},
--      {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5,   /* TW:  1024x768 */
-+      {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5,
-         0x28,0x88,0xff,0x6a,0x10,0x00,0x02,
-         0x01 }}
- };
-@@ -4801,12 +3091,11 @@ static const SiS310_LVDSCRT1DataStruct  
-       {{0x71,0x63,0x95,0x69,0x8c,0x6f,0xf0,
-         0x5a,0x8b,0x57,0x70,0x20,0x00,0x05,
-         0x01 }},
--      {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5,   /* TW:  1024x768 */
-+      {{0xaa,0x7f,0x8e,0x8f,0x96,0x69,0xf5,
-         0x28,0x88,0xff,0x6a,0x10,0x00,0x02,
-         0x01 }}
- };
--/* TW: Data for Chrontel 7019  */
- typedef struct _SiS310_CHTVRegDataStruct
- {
-       UCHAR Reg[16];
---- linux-2.6.0-test1/drivers/video/sis/init301.c      2003-07-13 21:44:34.000000000 -0700
-+++ 25/drivers/video/sis/init301.c     2003-07-19 17:04:55.000000000 -0700
-@@ -1,27 +1,11 @@
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.c,v 1.3 2002/22/04 01:16:16 dawes Exp $ */
- /*
-- * Mode switching code (CRT2 section) for SiS 300/540/630/730/315/550/650/740/330
-- * (Universal module for Linux kernel framebuffer, XFree86 4.x)
-+ * Mode switching code (CRT2 section) for SiS 300/540/630/730/315/550/650/740/330/660
-+ * (Universal module for Linux kernel framebuffer and XFree86 4.x)
-  *
-  * Assembler-To-C translation
-  * Copyright 2002, 2003 by Thomas Winischhofer <thomas@winischhofer.net>
-- * Minor parts Copyright SiS, Inc.
-- *
-- * Based on BIOS
-- *     1.10.07, 1.10a for 650/CH7019
-- *     1.11.21a for 740/CH7019
-- *     1.11.05 for 650/LVDS (w/o Chrontel)
-- *     1.07.1b, 1.10.6s, 1.11.6w, 1.11.7w, 1.11.8r for 650/301(B/LV), 650/302LV
-- *     2.04.50 (I) and 2.04.5c (II) for 630/301(B)
-- *     2.02.3b, 2.03.02, 2.04.2c, 2.04.5c, 2.07a and 2.08.b3 for 630/LVDS/LVDS+CH7005
-- *     2.04.5c, 2.04.6c for 730+LVDS+CH7005
-- *     1.09b for 315/301(B)
-- *     1.16.51 for 300+301LV (ECS A907)
-- *     1.01.03 for 330 (Xabre 400)
-- *
-- * Known bugs:
-- *   1024x768 panel, expanding (CR37=1): Mode 640x480 does not work on SOME panels
-- *       therefore, we always do the scaling ourselves for now.
-+ * Formerly based on non-functional code-fragements by SiS, Inc.
-  *
-  * Permission to use, copy, modify, distribute, and sell this software and its
-  * documentation for any purpose is hereby granted without fee, provided that
-@@ -73,8 +57,8 @@
- #define SiS_I2CDELAYSHORT  150
- BOOLEAN
--SiS_SetCRT2Group301(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
--                    PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+SiS_SetCRT2Group(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-+                 PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-    USHORT ModeIdIndex;
-    USHORT RefreshRateTableIndex;
-@@ -85,9 +69,9 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
-       SiS_SearchModeID(SiS_Pr,ROMAddr,&ModeNo,&ModeIdIndex);
-    } else {
-       ModeIdIndex = 0;
--   }      
-+   }
--   /* TW: Used for shifting CR33 */
-+   /* Used for shifting CR33 */
-    SiS_Pr->SiS_SelectCRT2Rate = 4;
-    SiS_UnLockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr);
-@@ -110,8 +94,6 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
-       return(TRUE);
-    }
--   if(SiS_Pr->UseCustomMode) return(FALSE);
--   
-    SiS_GetCRT2Data(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-                    HwDeviceExtension);
-@@ -153,9 +135,9 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
-                  SiS_SetGroup5(SiS_Pr,HwDeviceExtension, BaseAddr,ROMAddr,
-                        ModeNo,ModeIdIndex);
--         /* TW: For 301BDH (Panel link initialization): */
-+         /* For 301BDH (Panel link initialization): */
-          if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
--            if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {   
-+            if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-                if(!((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo = 0x10)))) {
-                   if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-                      SiS_ModCRT1CRTC(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-@@ -176,10 +158,10 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
-                             RefreshRateTableIndex,HwDeviceExtension);
-          }
-       }
--        if(SiS_Pr->SiS_IF_DEF_FSTN == 0) {
--         SiS_SetCRT2ECLK(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
--                         RefreshRateTableIndex,HwDeviceExtension);
--      }
-+
-+        SiS_SetCRT2ECLK(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-+                      RefreshRateTableIndex,HwDeviceExtension);
-+
-       if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-          if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-             if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-@@ -199,74 +181,64 @@ SiS_SetCRT2Group301(SiS_Private *SiS_Pr,
-    }
- #ifdef SIS300
--   if ( (HwDeviceExtension->jChipType == SIS_540) ||
--        (HwDeviceExtension->jChipType == SIS_630) ||
--        (HwDeviceExtension->jChipType == SIS_730) ||
--        (HwDeviceExtension->jChipType == SIS_300) )
--    {
--      if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
--         if(SiS_Pr->SiS_UseOEM) {
--            if((SiS_Pr->SiS_UseROM) && ROMAddr && (SiS_Pr->SiS_UseOEM == -1)) {
--               if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
--                  SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo);
--               }
--            } else {
--                       SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo);
--            }
--         }
--      }
--    }
--#endif
--
--#ifdef SIS315H
--   if ( (HwDeviceExtension->jChipType == SIS_315H)  ||
--        (HwDeviceExtension->jChipType == SIS_315)   ||
--      (HwDeviceExtension->jChipType == SIS_315PRO)||
--        (HwDeviceExtension->jChipType == SIS_550)   ||
--        (HwDeviceExtension->jChipType == SIS_740)   ||
--        (HwDeviceExtension->jChipType == SIS_650)   ||
--      (HwDeviceExtension->jChipType == SIS_330) )
--   {
--        if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
--         SiS_FinalizeLCD(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex, HwDeviceExtension);
--#if 0      /* Instead of FinalizeLCD(), older BIOSes (A92x) used OEMLCD() */
--         SiS_OEMLCD(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
--#endif
--           if(SiS_Pr->SiS_UseOEM) {
--              SiS_OEM310Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
--           }
--           SiS_CRT2AutoThreshold(SiS_Pr,BaseAddr);
--        }
--   }
--#endif
--
-    if(HwDeviceExtension->jChipType < SIS_315H) {
-+      if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-+       if(SiS_Pr->SiS_UseOEM) {
-+          if((SiS_Pr->SiS_UseROM) && ROMAddr && (SiS_Pr->SiS_UseOEM == -1)) {
-+             if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+                SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-+                                  RefreshRateTableIndex);
-+             }
-+          } else {
-+                     SiS_OEM300Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-+                               RefreshRateTableIndex);
-+          }
-+       }
-+       if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-+            if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+             (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+             SetOEMLCDData2(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,
-+                            ModeIdIndex,RefreshRateTableIndex);
-+          }
-+            if(HwDeviceExtension->jChipType == SIS_730) {
-+               SiS_DisplayOn(SiS_Pr);
-+          }
-+         }
-+      }
-       if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-           if(HwDeviceExtension->jChipType != SIS_730) {
-              SiS_DisplayOn(SiS_Pr);
-         }
-       }
-    }
-+#endif
--   if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
--      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
--         if(HwDeviceExtension->jChipType == SIS_730) {
--            SiS_DisplayOn(SiS_Pr);
--       }
-+#ifdef SIS315H
-+   if(HwDeviceExtension->jChipType >= SIS_315H) {
-+      if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-+       SiS_FinalizeLCD(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex, HwDeviceExtension);
-+         if(SiS_Pr->SiS_UseOEM) {
-+            SiS_OEM310Setting(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+         }
-+         SiS_CRT2AutoThreshold(SiS_Pr,BaseAddr);
-       }
-+   }
-+#endif
-+
-+   if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-       SiS_EnableBridge(SiS_Pr,HwDeviceExtension,BaseAddr);
-    }
-    SiS_DisplayOn(SiS_Pr);
-    if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
--      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--           /* TW: Disable LCD panel when using TV */
--           SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x11,0x0C);
--      } else {
--           /* TW: Disable TV when using LCD */
--           SiS_SetCH70xxANDOR(SiS_Pr,0x010E,0xF8);
--      }
-+      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+       /* Disable LCD panel when using TV */
-+       SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x11,0x0C);
-+      } else {
-+       /* Disable TV when using LCD */
-+       SiS_SetCH70xxANDOR(SiS_Pr,0x010E,0xF8);
-+      }
-    }
-    if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-@@ -283,7 +255,7 @@ SiS_LowModeStuff(SiS_Private *SiS_Pr, US
-     USHORT temp,temp1,temp2;
-     if((ModeNo != 0x03) && (ModeNo != 0x10) && (ModeNo != 0x12))
--         return(1);
-+       return(1);
-     temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x11);
-     SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x11,0x80);
-     temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x00);
-@@ -304,7 +276,7 @@ SiS_LowModeStuff(SiS_Private *SiS_Pr, US
-     }
- }
--/* TW: Set Part1 registers */
-+/* Set Part1 registers */
- void
- SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-               USHORT ModeIdIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension,
-@@ -313,25 +285,29 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-   USHORT  temp=0, tempax=0, tempbx=0, tempcx=0;
-   USHORT  pushbx=0, CRT1Index=0;
- #ifdef SIS315H
--  USHORT  pushcx=0, tempbl=0;
-+  USHORT  tempbl=0;
- #endif
-   USHORT  modeflag, resinfo=0;
--  if(ModeNo<=0x13) {
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+  if(ModeNo <= 0x13) {
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-   } else {
-+     if(SiS_Pr->UseCustomMode) {
-+      modeflag = SiS_Pr->CModeFlag;
-+     } else {
-       CRT1Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-       resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-       modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+     }
-   }
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
--
--         SiS_SetCRT2Sync(SiS_Pr,BaseAddr,ROMAddr,ModeNo,
--                           RefreshRateTableIndex,HwDeviceExtension);
- #ifdef SIS315H
--         SiS_SetGroup1_LCDA(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
--                            HwDeviceExtension,RefreshRateTableIndex);
-+     SiS_SetCRT2Sync(SiS_Pr,BaseAddr,ROMAddr,ModeNo,
-+                     RefreshRateTableIndex,HwDeviceExtension);
-+
-+     SiS_SetGroup1_LCDA(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-+                        HwDeviceExtension,RefreshRateTableIndex);
- #endif
-   } else {
-@@ -367,13 +343,13 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
- #ifdef SIS300   /* ------------- 300 series --------------*/
-               temp = (SiS_Pr->SiS_VGAHT - 1) & 0x0FF;                         /* BTVGA2HT 0x08,0x09 */
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp);                   /* TW: CRT2 Horizontal Total */
-+              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp);                   /* CRT2 Horizontal Total */
-               temp = (((SiS_Pr->SiS_VGAHT - 1) & 0xFF00) >> 8) << 4;
--              SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0f,temp);          /* TW: CRT2 Horizontal Total Overflow [7:4] */
-+              SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0f,temp);          /* CRT2 Horizontal Total Overflow [7:4] */
-               temp = (SiS_Pr->SiS_VGAHDE + 12) & 0x0FF;                       /* BTVGA2HDEE 0x0A,0x0C */
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp);                   /* TW: CRT2 Horizontal Display Enable End */
-+              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp);                   /* CRT2 Horizontal Display Enable End */
-               pushbx = SiS_Pr->SiS_VGAHDE + 12;                               /* bx  BTVGA@HRS 0x0B,0x0C */
-               tempcx = (SiS_Pr->SiS_VGAHT - SiS_Pr->SiS_VGAHDE) >> 2;
-@@ -382,108 +358,129 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-               tempcx += tempbx;
-               if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--                              if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC){
--                              /* CRT1Index &= 0x3F; - Not any longer */
--                              tempbx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
--                              tempbx |= ((SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14] & 0xC0) << 2);
--                              tempbx = (tempbx - 1) << 3;
--                              tempcx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
--                              tempcx &= 0x1F;
--                              temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
--                              temp = (temp & 0x04) << (6-2);
--                              tempcx = (tempcx | temp);
--                              tempcx--;
--                              tempcx <<= 3;
--                              }
--
--                      if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == 0x08)){
--                              if(!(SiS_Pr->SiS_VBInfo & SetPALTV)){
--                                              tempbx = 1040;
--                                              tempcx = 1042;
--                                      }
--                      }
-+
-+                 if(SiS_Pr->UseCustomMode) {
-+                    tempbx = SiS_Pr->CHSyncStart + 12;
-+                    tempcx = SiS_Pr->CHSyncEnd + 12;
-+                 }
-+
-+                         if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
-+                    unsigned char cr4, cr14, cr5, cr15;
-+                    if(SiS_Pr->UseCustomMode) {
-+                       cr4  = SiS_Pr->CCRT1CRTC[4];
-+                       cr14 = SiS_Pr->CCRT1CRTC[14];
-+                       cr5  = SiS_Pr->CCRT1CRTC[5];
-+                       cr15 = SiS_Pr->CCRT1CRTC[15];
-+                    } else {
-+                       cr4  = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
-+                       cr14 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
-+                       cr5  = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
-+                       cr15 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
-+                    }
-+                    tempbx = ((cr4 | ((cr14 & 0xC0) << 2)) - 1) << 3;
-+                    tempcx = (((cr5 & 0x1F) | ((cr15 & 0x04) << (6-2))) - 1) << 3;
-+                         }
-+
-+                 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == SIS_RI_1024x768)){
-+                    if(!(SiS_Pr->SiS_VBInfo & SetPALTV)){
-+                               tempbx = 1040;
-+                               tempcx = 1042;
-+                            }
-+                 }
-               }
-               temp = tempbx & 0x00FF;
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp);                   /* TW: CRT2 Horizontal Retrace Start */
-+              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp);                   /* CRT2 Horizontal Retrace Start */
- #endif /* SIS300 */
-       } else {
--#ifdef SIS315H  /* ----------------- 310/325/330 series ------------- */
-+#ifdef SIS315H  /* ------------------- 315/330 series --------------- */
-               tempcx = SiS_Pr->SiS_VGAHT;                                    /* BTVGA2HT 0x08,0x09 */
--              pushcx = tempcx;
-               if(modeflag & HalfDCLK) {
--#ifndef NEWCH701x             
--                  if((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->SiS_IF_DEF_CH70xx == 0)) {
--#endif                    
-+                  if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-                         tempax = SiS_Pr->SiS_VGAHDE >> 1;
-                         tempcx = SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE + tempax;
-                         if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-                             tempcx = SiS_Pr->SiS_HT - tempax;
-                         }
--#ifndef NEWCH701x                                       
-                   } else {
-                         tempcx >>= 1;
-                   }
--#endif                    
-               }
-               tempcx--;
-               temp = tempcx & 0xff;
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp);                  /* TW: CRT2 Horizontal Total */
-+              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,temp);                  /* CRT2 Horizontal Total */
-               temp = ((tempcx & 0xff00) >> 8) << 4;
--              SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0F,temp);         /* TW: CRT2 Horizontal Total Overflow [7:4] */
-+              SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0F,temp);         /* CRT2 Horizontal Total Overflow [7:4] */
--              tempcx = pushcx;                                               /* BTVGA2HDEE 0x0A,0x0C */
-+              tempcx = SiS_Pr->SiS_VGAHT;                                    /* BTVGA2HDEE 0x0A,0x0C */
-               tempbx = SiS_Pr->SiS_VGAHDE;
-               tempcx -= tempbx;
-               tempcx >>= 2;
-               if(modeflag & HalfDCLK) {
--                  tempbx >>= 1;
--                  tempcx >>= 1;
-+                 tempbx >>= 1;
-+                 tempcx >>= 1;
-               }
-               tempbx += 16;
-               temp = tempbx & 0xff;
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp);                  /* TW: CRT2 Horizontal Display Enable End */
-+              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp);                  /* CRT2 Horizontal Display Enable End */
-               pushbx = tempbx;
-               tempcx >>= 1;
-               tempbx += tempcx;
-               tempcx += tempbx;
--              if(SiS_Pr->SiS_IF_DEF_LVDS==0) {
-+              if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+
-+                 if(SiS_Pr->UseCustomMode) {
-+                    tempbx = SiS_Pr->CHSyncStart + 16;
-+                    tempcx = SiS_Pr->CHSyncEnd + 16;
-+                    tempax = SiS_Pr->SiS_VGAHT;
-+                    if(modeflag & HalfDCLK) tempax >>= 1;
-+                    tempax--;
-+                    if(tempcx > tempax)  tempcx = tempax;
-+                 }
-+
-                  if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
--                      tempbx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
--                      tempbx |= ((SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14] & 0xC0) << 2);
--                      tempbx = (tempbx - 3) << 3;                     /*(VGAHRS-3)*8 */
--                      tempcx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
--                              tempcx &= 0x1F;
--                      temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
--                      temp = (temp & 0x04) << (5-2);                  /* VGAHRE D[5] */
--                      tempcx = (tempcx | temp);                       /* (VGAHRE-3)*8 */
--                      tempcx -= 3;
--                      tempcx <<= 3;
--                      tempcx &= 0x00FF;
--                      tempcx |= (tempbx & 0xFF00);
--                      tempbx += 16;
--                      tempcx += 16;
--                      tempax = SiS_Pr->SiS_VGAHT;
--                      if(modeflag & HalfDCLK)  tempax >>= 1;
--                      tempax--;
--                      if(tempcx > tempax)  tempcx = tempax;
-+                    unsigned char cr4, cr14, cr5, cr15;
-+                    if(SiS_Pr->UseCustomMode) {
-+                       cr4  = SiS_Pr->CCRT1CRTC[4];
-+                       cr14 = SiS_Pr->CCRT1CRTC[14];
-+                       cr5  = SiS_Pr->CCRT1CRTC[5];
-+                       cr15 = SiS_Pr->CCRT1CRTC[15];
-+                    } else {
-+                       cr4  = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
-+                       cr14 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
-+                       cr5  = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
-+                       cr15 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
-+                    }
-+                      tempbx = ((cr4 | ((cr14 & 0xC0) << 2)) - 3) << 3;               /* (VGAHRS-3)*8 */
-+                      tempcx = (((cr5 & 0x1f) | ((cr15 & 0x04) << (5-2))) - 3) << 3;  /* (VGAHRE-3)*8 */
-+                    tempcx &= 0x00FF;
-+                    tempcx |= (tempbx & 0xFF00);
-+                      tempbx += 16;
-+                      tempcx += 16;
-+                    tempax = SiS_Pr->SiS_VGAHT;
-+                    if(modeflag & HalfDCLK) tempax >>= 1;
-+                    tempax--;
-+                    if(tempcx > tempax)  tempcx = tempax;
-                  }
--                 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == 0x08)){
--                    if(!(SiS_Pr->SiS_VBInfo & SetPALTV)){
--                               tempbx = 1040;
--                               tempcx = 1042;
--                            }
-+                 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+                    if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+                       if(resinfo == SIS_RI_1024x768) {
-+                                  tempbx = 1040;
-+                                  tempcx = 1042;
-+                               }
-+                    }
-                  }
--                 /* TW: Makes no sense, but is in 650/302LV 1.10.6s */
--                 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == 0x08)){
-+#if 0
-+                 /* Makes no sense, but is in 650/30xLV 1.10.6s */
-+                 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (resinfo == SIS_RI_1024x768)){
-                     if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV)) {
-                        if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-                                   tempbx = 1040;
-@@ -491,25 +488,26 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-                                }
-                     }
-                  }
-+#endif
-                 }
-               temp = tempbx & 0xff;
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp);                 /* TW: CRT2 Horizontal Retrace Start */
-+              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp);                 /* CRT2 Horizontal Retrace Start */
- #endif  /* SIS315H */
--      }  /* 310/325/330 series */
-+      }  /* 315/330 series */
--      /* TW: The following is done for all bridge/chip types/series */
-+      /* The following is done for all bridge/chip types/series */
-       tempax = tempbx & 0xFF00;
-       tempbx = pushbx;
-       tempbx = (tempbx & 0x00FF) | ((tempbx & 0xFF00) << 4);
-       tempax |= (tempbx & 0xFF00);
-       temp = (tempax & 0xFF00) >> 8;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0C,temp);                        /* TW: Overflow */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0C,temp);                        /* Overflow */
-       temp = tempcx & 0x00FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0D,temp);                        /* TW: CRT2 Horizontal Retrace End */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0D,temp);                        /* CRT2 Horizontal Retrace End */
-       /* 2. Vertical setup */
-@@ -517,30 +515,30 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-       temp = tempcx & 0x00FF;
-         if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
--           if(HwDeviceExtension->jChipType < SIS_315H) {
--                if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
--                     if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
--                         temp--;
--                     }
--                  }
--           } else {
--                    temp--;
--             }
-+         if(HwDeviceExtension->jChipType < SIS_315H) {
-+            if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-+               if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
-+                  temp--;
-+               }
-+              }
-+         } else {
-+            temp--;
-+           }
-         } else if(HwDeviceExtension->jChipType >= SIS_315H) {
--          /* TW: 650/30xLV 1.10.6s */
--          temp--;
-+         /* 650/30xLV 1.10.6s */
-+         temp--;
-       }
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0E,temp);                        /* TW: CRT2 Vertical Total */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0E,temp);                        /* CRT2 Vertical Total */
-       tempbx = SiS_Pr->SiS_VGAVDE - 1;
-       temp = tempbx & 0x00FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0F,temp);                        /* TW: CRT2 Vertical Display Enable End */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0F,temp);                        /* CRT2 Vertical Display Enable End */
-       temp = ((tempbx & 0xFF00) << 3) >> 8;
-       temp |= ((tempcx & 0xFF00) >> 8);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x12,temp);                        /* TW: Overflow (and HWCursor Test Mode) */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x12,temp);                        /* Overflow (and HWCursor Test Mode) */
--      /* TW: 650/LVDS (1.10.07), 650/30xLV (1.10.6s) */
-+      /* 650/LVDS (1.10.07), 650/30xLV (1.10.6s) */
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
-            tempbx++;
-          tempax = tempbx;
-@@ -553,29 +551,44 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-          tempcx += tempbx;
-          tempcx++;
-       } else {
--         /* TW: 300 series, LVDS/301B: */
-+         /* 300 series, LVDS/301B: */
-          tempbx = (SiS_Pr->SiS_VGAVT + SiS_Pr->SiS_VGAVDE) >> 1;                 /*  BTVGA2VRS     0x10,0x11   */
-          tempcx = ((SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) >> 4) + tempbx + 1;  /*  BTVGA2VRE     0x11        */
-       }
-       if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--         if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC){
--                      tempbx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[8];
--                      temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
--                      if(temp & 0x04) tempbx |= 0x0100;
--                      if(temp & 0x80) tempbx |= 0x0200;
--                      temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
--                      if(temp & 0x08) tempbx |= 0x0400;
--                      temp = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[9];
--                      tempcx = (tempcx & 0xFF00) | (temp & 0x00FF);
-+
-+         if(SiS_Pr->UseCustomMode) {
-+            tempbx = SiS_Pr->CVSyncStart;
-+            tempcx = (tempcx & 0xFF00) | (SiS_Pr->CVSyncEnd & 0x00FF);
-+         }
-+
-+         if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
-+            unsigned char cr8, cr7, cr13, cr9;
-+            if(SiS_Pr->UseCustomMode) {
-+               cr8  = SiS_Pr->CCRT1CRTC[8];
-+               cr7  = SiS_Pr->CCRT1CRTC[7];
-+               cr13 = SiS_Pr->CCRT1CRTC[13];
-+               cr9  = SiS_Pr->CCRT1CRTC[9];
-+            } else {
-+               cr8  = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[8];
-+               cr7  = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
-+               cr13 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
-+               cr9  = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[9];
-+            }
-+                    tempbx = cr8;
-+                    if(cr7 & 0x04)  tempbx |= 0x0100;
-+                    if(cr7 & 0x80)  tempbx |= 0x0200;
-+                    if(cr13 & 0x08) tempbx |= 0x0400;
-+                    tempcx = (tempcx & 0xFF00) | (cr9 & 0x00FF);
-          }
-       }
-       temp = tempbx & 0x00FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp);           /* TW: CRT2 Vertical Retrace Start */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp);           /* CRT2 Vertical Retrace Start */
-       temp = ((tempbx & 0xFF00) >> 8) << 4;
-       temp |= (tempcx & 0x000F);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x11,temp);           /* TW: CRT2 Vert. Retrace End; Overflow; "Enable CRTC Check" */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x11,temp);           /* CRT2 Vert. Retrace End; Overflow; "Enable CRTC Check" */
-       /* 3. Panel compensation delay */
-@@ -590,18 +603,18 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-                  temp = 0x10;
-                  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)  temp = 0x2c;
-                  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x20;
--                 if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)  temp = 0x24;
-               }
-               if(SiS_Pr->SiS_VBType & VB_SIS301) {
-                  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x20;
-               }
-               if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)     temp = 0x24;
-+              if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom)       temp = 0x2c;
-               if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)            temp = 0x08;
-               if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-                          if(SiS_Pr->SiS_VBInfo & SetInSlaveMode)      temp = 0x2c;
-                          else                                         temp = 0x20;
-               }
--              if((ROMAddr) && (SiS_Pr->SiS_UseROM) && (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
-+              if((ROMAddr) && (SiS_Pr->SiS_UseROM)) {
-                   if(ROMAddr[0x220] & 0x80) {
-                       if(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV-SetCRT2ToHiVisionTV))
-                               temp = ROMAddr[0x221];
-@@ -636,19 +649,20 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-               }
-          }
--         SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x03C,temp);         /* TW: Panel Link Delay Compensation; (Software Command Reset; Power Saving) */
-+         SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x03C,temp);         /* Panel Link Delay Compensation; (Software Command Reset; Power Saving) */
- #endif  /* SIS300 */
-       } else {
--#ifdef SIS315H   /* ----------- 310/325/330 series ---------------*/
-+#ifdef SIS315H   /* --------------- 315/330 series ---------------*/
-          if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-                 temp = 0x10;
-                 if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)  temp = 0x2c;
-               if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x20;
-               if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)  temp = 0x24;
-+              if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom)    temp = 0x2c;
-               if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-                  temp = 0x08;
-                  if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-@@ -664,7 +678,7 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-                     }
-                  }
-               }
--              if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
-+              if((SiS_Pr->SiS_VBType & VB_SIS301B302B) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
-                  tempbl = 0x00;
-                  if((ROMAddr) && (SiS_Pr->SiS_UseROM)) {
-                     if(HwDeviceExtension->jChipType < SIS_330) {
-@@ -689,8 +703,16 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-                     if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempbl = 0x0F;
-                  }
-               }
-+              
-+              if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) {
-+                 temp = 0x08;
-+                 tempbl = 0;
-+                 if((ROMAddr) && (SiS_Pr->SiS_UseROM)) {
-+                    if(ROMAddr[0x13c] & 0x80) tempbl = 0xf0;
-+                 }
-+              }
-          }
--         SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,tempbl,temp);         /* TW: Panel Link Delay Compensation */
-+         SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,tempbl,temp);         /* Panel Link Delay Compensation */
-          tempax = 0;
-          if (modeflag & DoubleScanMode) tempax |= 0x80;
-@@ -705,14 +727,13 @@ SiS_SetGroup1(SiS_Private *SiS_Pr,USHORT
-      if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--        /* TW: For 301BDH, we set up the Panel Link */
--        if( (SiS_Pr->SiS_VBType & VB_NoLCD) &&
--          (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ) {
-+        /* For 301BDH with LCD, we set up the Panel Link */
-+        if( (SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ) {
-           SiS_SetGroup1_LVDS(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-                              HwDeviceExtension,RefreshRateTableIndex);
--        } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {                             
-+        } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-           SiS_SetGroup1_301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,
-                             HwDeviceExtension,RefreshRateTableIndex);
-@@ -749,23 +770,27 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-   USHORT  push1,push2;
-   USHORT  tempax,tempbx,tempcx,temp;
-   USHORT  resinfo,modeflag;
-+  unsigned char p1_7, p1_8;
-   if(ModeNo <= 0x13) {
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
--      resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+     resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-   } else {
-+     if(SiS_Pr->UseCustomMode) {
-+        modeflag = SiS_Pr->CModeFlag;
-+      resinfo = 0;
-+     } else {
-       modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-       resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+     }
-   }
--  /* TW: The following is only done if bridge is in slave mode: */
-+  /* The following is only done if bridge is in slave mode: */
-   tempax = 0xFFFF;
-   if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV))  tempax = SiS_GetVGAHT2(SiS_Pr);
--  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--      modeflag |= Charx8Dot;
--  }
-+  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)  modeflag |= Charx8Dot;
-   if(modeflag & Charx8Dot) tempcx = 0x08;
-   else                     tempcx = 0x09;
-@@ -777,8 +802,7 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-   tempax = (tempax / tempcx) - 5;
-   tempbx = tempax & 0x00FF;
--  temp = 0xFF;                                                  /* set MAX HT */
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,temp);
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0xff);                 /* set MAX HT */
-   tempax = SiS_Pr->SiS_VGAHDE;                                        /* 0x04 Horizontal Display End */
-   if(modeflag & HalfDCLK) tempax >>= 1;
-@@ -789,13 +813,13 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-   temp = (tempbx & 0xFF00) >> 8;
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--        if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {        
--          temp += 2;
--        }
--  }   
-+     if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
-+        temp += 2;
-+     }
-+  }
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-      if(SiS_Pr->SiS_HiVision == 3) {
--              if(resinfo == 7) temp -= 2;
-+        if(resinfo == SIS_RI_800x600) temp -= 2;
-      }
-   }
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x05,temp);                 /* 0x05 Horizontal Display Start */
-@@ -804,140 +828,133 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-   if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-      (SiS_Pr->SiS_HiVision == 3)) {
--    temp = (tempbx & 0x00FF) - 1;
--    if(!(modeflag & HalfDCLK)) {
--      temp -= 6;
--      if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
--        temp -= 2;
--        if(ModeNo > 0x13) temp -= 10;
--      }
--    }
-+     temp = (tempbx & 0x00FF) - 1;
-+     if(!(modeflag & HalfDCLK)) {
-+        temp -= 6;
-+        if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+           temp -= 2;
-+           if(ModeNo > 0x13) temp -= 10;
-+        }
-+     }
-   } else {
--    tempcx = tempbx & 0x00FF;
--    tempbx = (tempbx & 0xFF00) >> 8;
--    tempcx = (tempcx + tempbx) >> 1;
--    temp = (tempcx & 0x00FF) + 2;
--    if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV){
--       temp--;
--       if(!(modeflag & HalfDCLK)){
--          if((modeflag & Charx8Dot)){
--             temp += 4;
--             if(SiS_Pr->SiS_VGAHDE >= 800) temp -= 6;
--             if(HwDeviceExtension->jChipType >= SIS_315H) {
--              if(SiS_Pr->SiS_VGAHDE == 800) temp += 2;
--             }
--          }
--       }
--    } else {
--       if(!(modeflag & HalfDCLK)) {
--          temp -= 4;
--          if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
--             if(SiS_Pr->SiS_VGAHDE >= 800) {
--                temp -= 7;
--              if(HwDeviceExtension->jChipType < SIS_315H) {
--                 /* 650/301LV(x) does not do this, 630/301B, 300/301LV do */
--                   if(SiS_Pr->SiS_ModeType == ModeEGA) {
--                      if(SiS_Pr->SiS_VGAVDE == 1024) {
--                         temp += 15;
--                         if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) 
--                          temp += 7;
--                      }
--                   }
--              }
--                if(SiS_Pr->SiS_VGAHDE >= 1280) {
--                   if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
--                      if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) temp += 28;
--                   }
--                }
--             }
--          }
--       }
--    }
-+     tempcx = tempbx & 0x00FF;
-+     tempbx = (tempbx & 0xFF00) >> 8;
-+     tempcx = (tempcx + tempbx) >> 1;
-+     temp = (tempcx & 0x00FF) + 2;
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+        temp--;
-+        if(!(modeflag & HalfDCLK)) {
-+           if((modeflag & Charx8Dot)) {
-+              temp += 4;
-+              if(SiS_Pr->SiS_VGAHDE >= 800) temp -= 6;
-+              if(HwDeviceExtension->jChipType >= SIS_315H) {
-+               if(SiS_Pr->SiS_VGAHDE == 800) temp += 2;
-+              }
-+           }
-+        }
-+     } else {
-+        if(!(modeflag & HalfDCLK)) {
-+           temp -= 4;
-+           if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
-+              if(SiS_Pr->SiS_VGAHDE >= 800) {
-+                 temp -= 7;
-+               if(HwDeviceExtension->jChipType < SIS_315H) {
-+                  /* 650/301LV(x) does not do this, 630/301B, 300/301LV do */
-+                    if(SiS_Pr->SiS_ModeType == ModeEGA) {
-+                       if(SiS_Pr->SiS_VGAVDE == 1024) {
-+                          temp += 15;
-+                          if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024)
-+                           temp += 7;
-+                       }
-+                    }
-+               }
-+                 if(SiS_Pr->SiS_VGAHDE >= 1280) {
-+                    if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) temp += 28;
-+                 }
-+              }
-+           }
-+        }
-+     }
-   }
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,temp);                       /* 0x07 Horizontal Retrace Start */
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x00);                 /* 0x08 Horizontal Retrace End   */
-+  p1_7 = temp;
-+  p1_8 = 0x00;
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-      if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
--            if(ModeNo <= 0x01) {
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x2a);
--              if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x61);
--              } else {
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x41);
--              }
--          } else if(SiS_Pr->SiS_ModeType == ModeText) {
--              if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x54);
--              } else {
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x55);
--              }
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x00);
--          } else if(ModeNo <= 0x13) {
--              if(modeflag & HalfDCLK) {
--                  if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x30);
--                      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
--                  } else {
--                      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x2f);
--                      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x02);
--                  }
--              } else {
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x5b);
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
--              }
--          } else if( ((HwDeviceExtension->jChipType >= SIS_315H) && (ModeNo == 0x50)) ||
--                     ((HwDeviceExtension->jChipType < SIS_315H) && (resinfo == 0 || resinfo == 1)) ) {
--              if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x30);
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
--              } else {
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0x2f);
--                  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,0x03);
--              }
--          }
--
-+        if(ModeNo <= 0x01) {
-+         p1_7 = 0x2a;
-+         if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) p1_8 = 0x61;
-+         else                                 p1_8 = 0x41;
-+      } else if(SiS_Pr->SiS_ModeType == ModeText) {
-+         if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) p1_7 = 0x54;
-+         else                                 p1_7 = 0x55;
-+         p1_8 = 0x00;
-+      } else if(ModeNo <= 0x13) {
-+         if(modeflag & HalfDCLK) {
-+            if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+               p1_7 = 0x30;
-+               p1_8 = 0x03;
-+            } else {
-+               p1_7 = 0x2f;
-+               p1_8 = 0x02;
-+            }
-+         } else {
-+            p1_7 = 0x5b;
-+            p1_8 = 0x03;
-+         }
-+      } else if( ((HwDeviceExtension->jChipType >= SIS_315H) &&
-+                  ((ModeNo == 0x50) || (ModeNo = 0x56) || (ModeNo = 0x53))) ||
-+                 ((HwDeviceExtension->jChipType < SIS_315H) &&
-+                  (resinfo == SIS_RI_320x200 || resinfo == SIS_RI_320x240)) ) {
-+         if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+            p1_7 = 0x30,
-+            p1_8 = 0x03;
-+         } else {
-+            p1_7 = 0x2f;
-+            p1_8 = 0x03;
-+         }
-+        }
-      }
-   }
-+
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-      if(SiS_Pr->SiS_HiVision & 0x03) {
--        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0xb2);
-+      p1_7 = 0xb2;
-       if(SiS_Pr->SiS_HiVision & 0x02) {
--         SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,0xab);
-+         p1_7 = 0xab;
-       }
-      }
-   }
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,p1_7);                       /* 0x07 Horizontal Retrace Start */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x08,p1_8);                       /* 0x08 Horizontal Retrace End   */
-+
-+
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x03);                       /* 0x18 SR08 (FIFO Threshold?)   */
-   SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x19,0xF0);
--  tempbx = SiS_Pr->SiS_VGAVT;
--  push1 = tempbx;
--
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x09,0xFF);                       /* 0x09 Set Max VT    */
-   tempcx = 0x121;
-   tempbx = SiS_Pr->SiS_VGAVDE;                                /* 0x0E Vertical Display End */
--  if(tempbx == 357) tempbx = 350;
--  if(tempbx == 360) tempbx = 350;
--  if(tempbx == 375) tempbx = 350;
--  if(tempbx == 405) tempbx = 400;
--  if(tempbx == 420) tempbx = 400;
--  if(tempbx == 525) tempbx = 480;
-+  if     (tempbx == 357) tempbx = 350;
-+  else if(tempbx == 360) tempbx = 350;
-+  else if(tempbx == 375) tempbx = 350;
-+  else if(tempbx == 405) tempbx = 400;
-+  else if(tempbx == 420) tempbx = 400;
-+  else if(tempbx == 525) tempbx = 480;
-   push2 = tempbx;
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--                      if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
--                      if(tempbx == 350) tempbx += 5;
--                      if(tempbx == 480) tempbx += 5;
--                      }
--      }
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+              if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
-+           if     (tempbx == 350) tempbx += 5;
-+           else if(tempbx == 480) tempbx += 5;
-+              }
-+     }
-   }
--  tempbx--;
--  temp = tempbx & 0x00FF;
--  tempbx--;
-+  tempbx -= 2;
-   temp = tempbx & 0x00FF;
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp);                       /* 0x10 vertical Blank Start */
-@@ -945,126 +962,91 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-   tempbx--;
-   temp = tempbx & 0x00FF;
- #if 0
--  /* TW: Missing code from 630/301B 2.04.5a and 650/302LV 1.10.6s (calles int 2f) */
-+  /* Missing code from 630/301B 2.04.5a and 650/302LV 1.10.6s (calles int 2f) */
-   if(xxx()) {
-       if(temp == 0xdf) temp = 0xda;
-   }
- #endif
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0E,temp);
--  if(tempbx & 0x0100) {
--      tempcx |= 0x0002;
--      if(SiS_Pr->SiS_VBType & VB_SIS301) tempcx |= 0x000a;
--  }
-+  if(tempbx & 0x0100)  tempcx |= 0x0002;
-   tempax = 0x000B;
-   if(modeflag & DoubleScanMode) tempax |= 0x8000;
--  if(tempbx & 0x0200) {
--      tempcx |= 0x0040;
--      if(SiS_Pr->SiS_VBType & VB_SIS301) tempax |= 0x2000;
--  }
--
--  if(SiS_Pr->SiS_VBType & VB_SIS301) {
--        if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--            if(SiS_Pr->SiS_VGAVDE == 480) {
--                   tempax = (tempax & 0x00ff) | 0x2000;
--                   if(modeflag & DoubleScanMode)  tempax |= 0x8000;
--            }
--      }
--  }
-+  if(tempbx & 0x0200)  tempcx |= 0x0040;
-   temp = (tempax & 0xFF00) >> 8;
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0B,temp);
--  if(tempbx & 0x0400) tempcx |= 0x0600;
-+  if(tempbx & 0x0400)  tempcx |= 0x0600;
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x11,0x00);                       /* 0x11 Vertical Blank End */
--  tempax = push1;
--  tempax -= tempbx;
--  tempax >>= 2;
--  push1 = tempax;
-+  tempax = (SiS_Pr->SiS_VGAVT - tempbx) >> 2;
--  if(HwDeviceExtension->jChipType >= SIS_315H) {
--        /* TW: 650/30xLV 1.10.6s */
--        if(ModeNo > 0x13) {
--          if(resinfo != 0x09) {  /* 1280x1024 */
--              tempax <<= 1;
--              tempbx += tempax;
--          }
--      } else {
--          if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1400x1050) {
--              tempax <<= 1;
--              tempbx += tempax;
--          }
--      }
--  } else if((resinfo != 0x09) || (SiS_Pr->SiS_VBType & VB_SIS301)) {
--      tempax <<= 1;
--      tempbx += tempax;
-+  if((ModeNo > 0x13) || (HwDeviceExtension->jChipType < SIS_315H)) {
-+     if(resinfo != SIS_RI_1280x1024) {
-+      tempbx += (tempax << 1);
-+     }
-+  } else if(HwDeviceExtension->jChipType >= SIS_315H) {
-+     if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1400x1050) {
-+      tempbx += (tempax << 1);
-+     }
-   }
--  if( (SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
--      (SiS_Pr->SiS_HiVision == 3) ) {
--      tempbx -= 10;
-+  if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-+     (SiS_Pr->SiS_HiVision == 3)) {
-+     tempbx -= 10;
-   } else {
--      if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
--                 if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--             if(!(SiS_Pr->SiS_HiVision & 0x03)) {
--                    tempbx += 40;
--                  if(HwDeviceExtension->jChipType >= SIS_315H) {
--                     if(SiS_Pr->SiS_VGAHDE == 800) tempbx += 10;
--                  }
--                     }
--         }
--      }
-+     if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+        if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-+         if(!(SiS_Pr->SiS_HiVision & 0x03)) {
-+              tempbx += 40;
-+            if(HwDeviceExtension->jChipType >= SIS_315H) {
-+               if(SiS_Pr->SiS_VGAHDE == 800) tempbx += 10;
-+            }
-+                 }
-+      }
-+     }
-   }
--  tempax = push1;
-   tempax >>= 2;
-   tempax++;
-   tempax += tempbx;
-   push1 = tempax;
-   if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--      if(tempbx <= 513)  {
--                      if(tempax >= 513) tempbx = 513;
--      }
-+     if(tempbx <= 513)  {
-+      if(tempax >= 513) tempbx = 513;
-+     }
-   }
-   temp = tempbx & 0x00FF;
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0C,temp);                       /* 0x0C Vertical Retrace Start */
--  if(!(SiS_Pr->SiS_VBType & VB_SIS301)) {
--      tempbx--;
--      temp = tempbx & 0x00FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp);
--
--      if(tempbx & 0x0100) tempcx |= 0x0008;
-+  tempbx--;
-+  temp = tempbx & 0x00FF;
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x10,temp);
--      if(tempbx & 0x0200) {
--         SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x0B,0x20);
--      }
-+  if(tempbx & 0x0100) tempcx |= 0x0008;
--      tempbx++;
-+  if(tempbx & 0x0200) {
-+     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x0B,0x20);
-   }
-+  tempbx++;
-+
-   if(tempbx & 0x0100) tempcx |= 0x0004;
-   if(tempbx & 0x0200) tempcx |= 0x0080;
-   if(tempbx & 0x0400) {
--        if(SiS_Pr->SiS_VBType & VB_SIS301) tempcx |= 0x0800;
--      else                               tempcx |= 0x0C00;
-+     if(SiS_Pr->SiS_VBType & VB_SIS301) tempcx |= 0x0800;
-+     else                               tempcx |= 0x0C00;
-   }
-   tempbx = push1;
--  temp = tempbx & 0x00FF;
--  temp &= 0x0F;
-+  temp = tempbx & 0x000F;
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0D,temp);                       /* 0x0D vertical Retrace End */
-   if(tempbx & 0x0010) tempcx |= 0x2000;
-   temp = tempcx & 0x00FF;
--  if(SiS_Pr->SiS_VBType & VB_SIS301) {
--      if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--            if(SiS_Pr->SiS_VGAVDE == 480)  temp = 0xa3;
--      }
--  }
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0A,temp);               /* 0x0A CR07 */
-   temp = (tempcx & 0xFF00) >> 8;
-@@ -1074,8 +1056,8 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-   temp = (tempax & 0xFF00) >> 8;
-   temp = (temp >> 1) & 0x09;
-   if(!(SiS_Pr->SiS_VBType & VB_SIS301)) {
--       /* Only use 8 dot clock */
--       temp |= 0x01;
-+     /* Only use 8 dot clock */
-+     temp |= 0x01;
-   }
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x16,temp);               /* 0x16 SR01 */
-@@ -1084,16 +1066,15 @@ SiS_SetGroup1_301(SiS_Private *SiS_Pr, U
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x12,0x00);               /* 0x12 CR17 */
-   if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
--       if(IS_SIS650) {
--           /* TW: 650/30xLV 1.10.6s */
--           if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
--             temp = 0x80;
--         }
--       } else temp = 0x80;
--  } else  temp = 0x00;
-+     if(IS_SIS650) {
-+        /* 650/30xLV 1.10.6s */
-+        if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
-+         temp = 0x80;
-+      }
-+     } else temp = 0x80;
-+  } else temp = 0x00;
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1A,temp);                       /* 0x1A SR0E */
--  return;
- }
- void
-@@ -1108,40 +1089,52 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
- #endif
-   ULONG  tempeax=0, tempebx, tempecx, tempvcfact=0;
-+  /* This is not supported on LVDS */
-+  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+  if(SiS_Pr->UseCustomMode) return;
-+
-   if(ModeNo <= 0x13) {
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
--      resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+     resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-   } else {
--      modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
--      resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+     modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+     resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-   }
--  /* TW: Set up Panel Link */
-+  /* Set up Panel Link */
-   /* 1. Horizontal setup */
-   tempax = SiS_Pr->SiS_LCDHDES;
--  if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) &&
--      (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ) {
--      tempax -= 8;
-+  if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+     if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) &&
-+         (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ) {
-+         tempax -= 8;
-+     }
-   }
-   tempcx = SiS_Pr->SiS_HT;                                      /* Horiz. Total */
-   tempbx = SiS_Pr->SiS_HDE;                               /* Horiz. Display End */
-+  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+     SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+     tempbx >>= 1;
-+  }
-+
-   if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-      if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
--        if((!SiS_Pr->SiS_IF_DEF_DSTN) && (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)) {
--         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)        tempbx =  800;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)  tempbx = 1024;  /* TW */
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)  tempbx = 1024;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768)  tempbx = 1152;  /* TW */
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)  tempbx = 1280;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx = 1280; 
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempbx = 1400; 
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempbx = 1600; 
-+        if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+         tempbx = SiS_Pr->PanelXRes;
-+      } else if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+         tempbx = SiS_Pr->PanelXRes;
-+         if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+            tempbx = 800;
-+            if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel800x600) {
-+               tempbx = 1024;
-+            }
-+         }
-         }
-      }
-   }
-@@ -1154,13 +1147,17 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   if(tempax >= SiS_Pr->SiS_HT) tempax -= SiS_Pr->SiS_HT;
-   push2 = tempax;
--  
--  if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) { 
--     if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--        if((!SiS_Pr->SiS_IF_DEF_DSTN) && (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)) {
--         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)        tempcx = 0x0028;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)  tempcx = 0x0018;
--         else if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
-+
-+  if((!SiS_Pr->SiS_IF_DEF_FSTN) &&
-+     (!SiS_Pr->SiS_IF_DEF_DSTN) &&
-+     (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+     (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-+     if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-+        if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+           if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+            if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)        tempcx = 0x0028;
-+            else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)  tempcx = 0x0018;
-+            else if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
-                   (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) ) {
-                  if(HwDeviceExtension->jChipType < SIS_315H) {
-                     if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-@@ -1174,11 +1171,12 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-                  } else {
-                     tempcx = 0x0018;
-                  }
-+            }
-+            else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)  tempcx = 0x0028;
-+            else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempcx = 0x0030;
-+            else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempcx = 0x0030;
-+            else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempcx = 0x0040;
-          }
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)  tempcx = 0x0028;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempcx = 0x0030;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempcx = 0x0030;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempcx = 0x0040;
-         }
-      }
-   }
-@@ -1188,14 +1186,17 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   tempax = tempcx >> 3;                          /* BPLHRS */
-   temp = tempax & 0x00FF;
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,temp);                /* Part1_14h; TW: Panel Link Horizontal Retrace Start  */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,temp);                /* Part1_14h; Panel Link Horizontal Retrace Start  */
-   if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
-      temp = (tempax & 0x00FF) + 2;
-   } else {
-      temp = (tempax & 0x00FF) + 10;
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--        if(!SiS_Pr->SiS_IF_DEF_DSTN) {
-+        if((!SiS_Pr->SiS_IF_DEF_DSTN) &&
-+         (!SiS_Pr->SiS_IF_DEF_FSTN) &&
-+         (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+         (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-            if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-             temp += 6;
-               if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel800x600) {
-@@ -1219,47 +1220,57 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   temp &= 0x1F;
-   temp |= ((tempcx & 0x0007) << 5);
--  if(SiS_Pr->SiS_IF_DEF_FSTN) temp = 0x20;
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x15,temp);        /* Part1_15h; TW: Panel Link Horizontal Retrace End/Skew */
-+#if 0
-+  if(SiS_Pr->SiS_IF_DEF_FSTN) temp = 0x20;       /* WRONG? BIOS loads cl, not ah */
-+#endif  
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x15,temp);        /* Part1_15h; Panel Link Horizontal Retrace End/Skew */
-   tempbx = push2;
-   tempcx = push1;                                /* lcdhdes  */
-   temp = (tempcx & 0x0007);                      /* BPLHDESKEW  */
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1A,temp);        /* Part1_1Ah; TW: Panel Link Vertical Retrace Start (2:0) */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1A,temp);        /* Part1_1Ah; Panel Link Vertical Retrace Start (2:0) */
-   tempcx >>= 3;                                  /* BPLHDES */
-   temp = (tempcx & 0x00FF);
--  if(ModeNo == 0x5b) temp--;                     
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x16,temp);        /* Part1_16h; TW: Panel Link Horizontal Display Enable Start  */
-+#if 0 /* Not 550 FSTN */
-+  if(HwDeviceExtension->jChipType >= SIS_315H) {
-+     if(ModeNo == 0x5b) temp--; */
-+  }
-+#endif
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x16,temp);        /* Part1_16h; Panel Link Horizontal Display Enable Start  */
--  if(HwDeviceExtension->jChipType < SIS_315H) {  
-+  if((HwDeviceExtension->jChipType < SIS_315H) ||
-+     (SiS_Pr->SiS_IF_DEF_FSTN) ||
-+     (SiS_Pr->SiS_IF_DEF_DSTN)) {
-      if(tempbx & 0x07) tempbx += 8;              
-   }
-   tempbx >>= 3;                                  /* BPLHDEE  */
-   temp = tempbx & 0x00FF;
--  if(ModeNo == 0x5b) temp--;                   
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x17,temp);        /* Part1_17h; TW: Panel Link Horizontal Display Enable End  */
--
-+#if 0 /* Not 550 FSTN */
-+  if(HwDeviceExtension->jChipType >= SIS_315H) {
-+     if(ModeNo == 0x5b) temp--;
-+  }
-+#endif
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x17,temp);        /* Part1_17h; Panel Link Horizontal Display Enable End  */
-+
-   /* 2. Vertical setup */
-   if(HwDeviceExtension->jChipType < SIS_315H) {
-      tempcx = SiS_Pr->SiS_VGAVT;
-      tempbx = SiS_Pr->SiS_VGAVDE;
--     if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
--        if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
--         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)       tempbx =  600;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) tempbx =  600;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx =  768;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) tempbx =  768;
--         else                                                         tempbx = 1024;
--        }
-+     if((SiS_Pr->SiS_CustomT != CUT_BARCO1366) && (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-+        if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-+           if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+            tempbx = SiS_Pr->PanelYRes;
-+           }
-+      }
-      }
-      tempcx -= tempbx;
-   } else {
--     tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE;          /* VGAVT-VGAVDE  */
-+     tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE;           /* VGAVT-VGAVDE  */
-   }
-@@ -1268,18 +1279,20 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   tempax = SiS_Pr->SiS_VGAVDE;
--  if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
--     if( (SiS_Pr->SiS_IF_DEF_TRUMPION == 0)   && 
--         (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
--         (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) ) {
--        if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)        tempax =  600;
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)  tempax =  600;  
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)  tempax =  768;
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768)  tempax =  768;  
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)  tempax =  768;  
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempax = 1024; 
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempax = 1050; 
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempax = 1200; 
-+  if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+     if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+        if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+           tempax = 600;
-+         if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel800x600) {
-+            tempax = 768;
-+         }
-+      }
-+     } else if( (SiS_Pr->SiS_IF_DEF_TRUMPION == 0)   &&
-+                (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
-+                ((SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) ||
-+               (SiS_Pr->SiS_IF_DEF_FSTN) ||
-+               (SiS_Pr->SiS_IF_DEF_DSTN)) ) {
-+      tempax = SiS_Pr->PanelYRes;
-      }
-   }
-@@ -1290,11 +1303,24 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   tempcx >>= 1;
--  if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)) {
--     if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
--        if(!SiS_Pr->SiS_IF_DEF_DSTN) {
--         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)        tempcx = 0x0001;
--         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)  tempcx = 0x0001;
-+  if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
-+     (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) &&
-+     (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+     (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+        SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+      tempcx = 0x0017;
-+     } else if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-+        if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)         tempcx = 0x0003;
-+         else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
-+                 (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)) tempcx = 0x0003;
-+           else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024)  tempcx = 0x0001;
-+           else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)  tempcx = 0x0001;
-+         else                                                           tempcx = 0x0057;
-+        } else  {
-+         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)         tempcx = 0x0001;
-+         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)   tempcx = 0x0001;
-          else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) ||
-                  (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768)) {
-                  if(HwDeviceExtension->jChipType < SIS_315H) {
-@@ -1304,7 +1330,7 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-                           tempcx = 0x0003;
- #endif
-                     } else {
--                          tempcx = 0x0002;   /* TW: A901; sometimes 0x0003; */
-+                          tempcx = 0x0002;   /* A901; sometimes 0x0003; */
-                     }
-                  } else tempcx = 0x0003;
-            }
-@@ -1319,26 +1345,32 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   tempbx += tempcx;                           /* BPLVRS  */
--  if(HwDeviceExtension->jChipType < SIS_315H) {
--      tempbx++;
-+  if((HwDeviceExtension->jChipType < SIS_315H) ||
-+     (SiS_Pr->SiS_IF_DEF_FSTN) ||
-+     (SiS_Pr->SiS_IF_DEF_DSTN)) {
-+     tempbx++;
-   }
-   if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
-   temp = tempbx & 0x00FF;
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,temp);                /* Part1_18h; TW: Panel Link Vertical Retrace Start  */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,temp);                /* Part1_18h; Panel Link Vertical Retrace Start  */
-   tempcx >>= 3;
--  if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
-+  if((!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
-+     (SiS_Pr->SiS_CustomT != CUT_BARCO1366) &&
-+     (SiS_Pr->SiS_CustomT != CUT_BARCO1024)) {
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-         if( (HwDeviceExtension->jChipType < SIS_315H) &&
-             (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) )     tempcx = 0x0001;
-+      else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2)  tempcx = 0x0002;
-+      else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3)  tempcx = 0x0002;
-         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)    tempcx = 0x0003;
-         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)   tempcx = 0x0005;
-         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768)   tempcx = 0x0005;
-       else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)   tempcx = 0x0011;
--        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024)  tempcx = 0x0005;        
-+        else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024)  tempcx = 0x0005;
-         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)  tempcx = 0x0002;
-         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)  tempcx = 0x0011;
-         else if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)  {
-@@ -1360,26 +1392,36 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   tempcx = tempcx + tempbx + 1;                  /* BPLVRE  */
-   temp = tempcx & 0x000F;
--  SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xf0,temp); /* Part1_19h; TW: Panel Link Vertical Retrace End (3:0); Misc.  */
-+  if(SiS_Pr->SiS_IF_DEF_FSTN ||
-+     SiS_Pr->SiS_IF_DEF_DSTN ||
-+     (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+     (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+     temp |= 0x30;
-+  }
-+  SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xf0,temp); /* Part1_19h; Panel Link Vertical Retrace End (3:0); Misc.  */
-   temp = ((tempbx & 0x0700) >> 8) << 3;          /* BPLDESKEW =0 */
--  if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE)  temp |= 0x40;
--  if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA)    temp |= 0x40;
-+  if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+     if(SiS_Pr->SiS_HDE != 640) {
-+        if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE)   temp |= 0x40;
-+     }
-+  } else if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE)  temp |= 0x40;
-+  if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA)           temp |= 0x40;
-   if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
--      if(HwDeviceExtension->jChipType >= SIS_315H) {
--         if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
--            temp |= 0x80;
--         }
--      } else {
--       if( (HwDeviceExtension->jChipType == SIS_630) ||
--           (HwDeviceExtension->jChipType == SIS_730) ) {
--          if(HwDeviceExtension->jChipRevision >= 0x30) {
--             temp |= 0x80;
--          }
--       }
--      }
-+     if(HwDeviceExtension->jChipType >= SIS_315H) {
-+        if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
-+           temp |= 0x80;
-+        }
-+     } else {
-+      if( (HwDeviceExtension->jChipType == SIS_630) ||
-+          (HwDeviceExtension->jChipType == SIS_730) ) {
-+         if(HwDeviceExtension->jChipRevision >= 0x30) {
-+            temp |= 0x80;
-+         }
-+      }
-+     }
-   }
--  SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,0x87,temp);  /* Part1_1Ah; TW: Panel Link Control Signal (7:3); Vertical Retrace Start (2:0) */
-+  SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,0x87,temp);  /* Part1_1Ah; Panel Link Control Signal (7:3); Vertical Retrace Start (2:0) */
-   if (HwDeviceExtension->jChipType < SIS_315H) {
-@@ -1396,19 +1438,19 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-       }
-       temp = (USHORT)(tempebx & 0x00FF);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,temp);      /* Part1_1Eh; TW: Panel Link Vertical Scaling Factor */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,temp);      /* Part1_1Eh; Panel Link Vertical Scaling Factor */
- #endif /* SIS300 */
-   } else {
--#ifdef SIS315H  /* 310/325 series */
-+#ifdef SIS315H  /* 315 series */
--#ifdef NEWCH701x
--        SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x03);
--#else
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,0x23);
--#endif        
-+        if(HwDeviceExtension->jChipType == SIS_740) {
-+           SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x03);
-+        } else {
-+         SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,0x23);
-+      }
-       tempeax = SiS_Pr->SiS_VGAVDE << 18;
-       temp = (USHORT)(tempeax % (ULONG)SiS_Pr->SiS_VDE);
-@@ -1417,12 +1459,13 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-       tempebx = tempeax;                         /* BPLVCFACT  */
-         tempvcfact = tempeax;
-       temp = (USHORT)(tempebx & 0x00FF);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x37,temp);      /* Part1_37h; TW: Panel Link Vertical Scaling Factor */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x37,temp);      /* Part1_37h; Panel Link Vertical Scaling Factor */
-       temp = (USHORT)((tempebx & 0x00FF00) >> 8);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x36,temp);      /* Part1_36h; TW: Panel Link Vertical Scaling Factor */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x36,temp);      /* Part1_36h; Panel Link Vertical Scaling Factor */
-       temp = (USHORT)((tempebx & 0x00030000) >> 16);
-+      temp &= 0x03;
-       if(SiS_Pr->SiS_VDE == SiS_Pr->SiS_VGAVDE) temp |= 0x04;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x35,temp);      /* Part1_35h; TW: Panel Link Vertical Scaling Factor */
-+      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x35,temp);      /* Part1_35h; Panel Link Vertical Scaling Factor */
- #endif /* SIS315H */
-@@ -1434,47 +1477,50 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-   push1 = temp;                                          
-   if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--      if(!SiS_Pr->SiS_IF_DEF_DSTN){
-+      if(!SiS_Pr->SiS_IF_DEF_FSTN && !SiS_Pr->SiS_IF_DEF_DSTN) {
-               if(HwDeviceExtension->jChipType < SIS_315H) {
-                       if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
--                                      if(resinfo == 15) tempcx++;
-+                                      if(resinfo == SIS_RI_1024x600) tempcx++;
-                               if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
--                                      if(resinfo == 7) tempcx++;
-+                                      if(resinfo == SIS_RI_800x600) tempcx++;
-                               }
-                       } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
--                                      if(resinfo == 7) tempcx++;
--                              if(resinfo == 8) tempcx++; /* TW: Doesnt make sense anyway... */
--                      } else  if(resinfo == 8) tempcx++;
-+                                      if(resinfo == SIS_RI_800x600)  tempcx++;
-+                              if(resinfo == SIS_RI_1024x768) tempcx++; /* Doesnt make sense anyway... */
-+                      } else  if(resinfo == SIS_RI_1024x768) tempcx++;
-               } else {
-                       if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
--                                      if(resinfo == 7) tempcx++;
-+                                      if(resinfo == SIS_RI_800x600)  tempcx++;
-                       }
-               }
-       }
-   }
-   if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
--     tempcx = SiS_Pr->SiS_VGAVDE;
--     tempbx = SiS_Pr->SiS_VGAVDE - 1;
-+     if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+        tempcx = SiS_Pr->SiS_VGAVDE;
-+        tempbx = SiS_Pr->SiS_VGAVDE - 1;
-+     }
-   }
-   temp = ((tempbx & 0x0700) >> 8) << 3;
-   temp |= ((tempcx & 0x0700) >> 8);
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1D,temp);       /* Part1_1Dh; TW: Vertical Display Overflow; Control Signal */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1D,temp);       /* Part1_1Dh; Vertical Display Overflow; Control Signal */
-   temp = tempbx & 0x00FF;
--  if(SiS_Pr->SiS_IF_DEF_FSTN) temp++;
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1C,temp);       /* Part1_1Ch; TW: Panel Link Vertical Display Enable End  */
-+  /* if(SiS_Pr->SiS_IF_DEF_FSTN) temp++;  */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1C,temp);       /* Part1_1Ch; Panel Link Vertical Display Enable End  */
-   temp = tempcx & 0x00FF;
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1B,temp);       /* Part1_1Bh; TW: Panel Link Vertical Display Enable Start  */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1B,temp);       /* Part1_1Bh; Panel Link Vertical Display Enable Start  */
-   /* 3. Additional horizontal setup (scaling, etc) */
-   tempecx = SiS_Pr->SiS_VGAHDE;
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
--     if(modeflag & HalfDCLK)
--        tempecx >>= 1;
-+     if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+        if(modeflag & HalfDCLK) tempecx >>= 1;
-+     }
-   }
-   tempebx = SiS_Pr->SiS_HDE;
-   if(tempecx == tempebx) tempeax = 0xFFFF;
-@@ -1484,134 +1530,162 @@ SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr,U
-      temp = (USHORT)(tempeax % tempebx);
-      tempeax = tempeax / tempebx;
-      if(HwDeviceExtension->jChipType >= SIS_315H) {
--         if(temp) tempeax++;
-+        if(temp) tempeax++;
-      }
-   }
-   tempecx = tempeax;
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
--      tempeax = SiS_Pr->SiS_VGAHDE;
--      if(modeflag & HalfDCLK) tempeax >>= 1;
--      tempeax <<= 16;
--      tempeax = (tempeax / tempecx) - 1;
-+     tempeax = SiS_Pr->SiS_VGAHDE;
-+     if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
-+        if(modeflag & HalfDCLK) tempeax >>= 1;
-+     }
-+     tempeax <<= 16;
-+     tempeax = (tempeax / tempecx) - 1;
-   } else {
--      tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;
-+     tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;
-   }
-   tempecx <<= 16;
-   tempecx |= (tempeax & 0xFFFF);
-   temp = (USHORT)(tempecx & 0x00FF);
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1F,temp);        /* Part1_1Fh; TW: Panel Link DDA Operational Number in each horiz. line */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1F,temp);        /* Part1_1Fh; Panel Link DDA Operational Number in each horiz. line */
-   tempbx = SiS_Pr->SiS_VDE;
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
--      tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;
--      tempbx = (USHORT)(tempeax & 0x0FFFF);
-+     tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;
-+     tempbx = (USHORT)(tempeax & 0x0FFFF);
-   } else {
--      tempax = SiS_Pr->SiS_VGAVDE << 6;
--      tempbx = push1;
--      tempbx &= 0x3f;
--      if(tempbx == 0) tempbx = 64;
--      tempax = tempax / tempbx;
--      tempbx = tempax;
-+     tempeax = SiS_Pr->SiS_VGAVDE << 6;
-+     tempbx = push1 & 0x3f;
-+     if(tempbx == 0) tempbx = 64;
-+     tempeax /= tempbx;
-+     tempbx = (USHORT)(tempeax & 0x0FFFF);
-   }
-   if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx--;
--  if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA)                 tempbx = 1;
-+  if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) {
-+     if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) tempbx = 1;
-+     else if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)  tempbx = 1;
-+  }
-   temp = ((tempbx & 0xFF00) >> 8) << 3;
-   temp |= (USHORT)((tempecx & 0x0700) >> 8);
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x20,temp);       /* Part1_20h; TW: Overflow register */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x20,temp);       /* Part1_20h; Overflow register */
-   temp = tempbx & 0x00FF;
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x21,temp);       /* Part1_21h; TW: Panel Link Vertical Accumulator Register */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x21,temp);       /* Part1_21h; Panel Link Vertical Accumulator Register */
-   tempecx >>= 16;                               /* BPLHCFACT  */
--  if(HwDeviceExtension->jChipType < SIS_315H) {
--      if(modeflag & HalfDCLK) tempecx >>= 1;
-+  if((HwDeviceExtension->jChipType < SIS_315H) || (SiS_Pr->SiS_IF_DEF_FSTN) || (SiS_Pr->SiS_IF_DEF_DSTN)) {
-+     if(modeflag & HalfDCLK) tempecx >>= 1;
-   }
-   temp = (USHORT)((tempecx & 0xFF00) >> 8);
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x22,temp);       /* Part1_22h; TW: Panel Link Horizontal Scaling Factor High */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x22,temp);       /* Part1_22h; Panel Link Horizontal Scaling Factor High */
-   temp = (USHORT)(tempecx & 0x00FF);
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x23,temp);         /* Part1_22h; TW: Panel Link Horizontal Scaling Factor Low */
-+  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x23,temp);         /* Part1_22h; Panel Link Horizontal Scaling Factor Low */
-   /* 630/301B and 630/LVDS do something for 640x480 panels here */
- #ifdef SIS315H
--  /* TW: DSTN/FSTN initialisation - hardcoded for 320x480 panel */
--  if(SiS_Pr->SiS_IF_DEF_DSTN) {
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,0x01);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x25,0x00);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x26,0x00);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x27,0x00);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x28,0x87);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x29,0x5A);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2A,0x4B);
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x007,0x03);
--      tempbx = SiS_Pr->SiS_HDE + 64;                          /*Blps = lcdhdee(lcdhdes+HDE) + 64*/
--      temp = tempbx & 0x00FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x38,temp);
--      temp=((tempbx & 0xFF00) >> 8) << 3;
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);
--      tempbx += 32;                                           /*Blpe=lBlps+32*/
--      temp = tempbx & 0x00FF;
--      if(SiS_Pr->SiS_IF_DEF_FSTN)  temp=0;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x39,temp);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3A,0x00);           /*Bflml=0*/
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x007,0x00);
--      tempbx = SiS_Pr->SiS_VDE / 2;
--      temp = tempbx & 0x00FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3B,temp);
--      temp = ((tempbx & 0xFF00) >> 8) << 3;
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);
--      tempeax = SiS_Pr->SiS_HDE << 2;                         /* BDxFIFOSTOP = (HDE*4)/128 */
--      tempebx = 128;
--      temp = (USHORT)(tempeax % tempebx);
--      tempeax = tempeax / tempebx;
--      if(temp != 0)  tempeax++;
--      temp = (USHORT)(tempeax & 0x003F);
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x45,~0x0FF,temp);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3F,0x00);           /* BDxWadrst0 */
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3E,0x00);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3D,0x10);
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x040,0x00);
--      tempax = SiS_Pr->SiS_HDE >> 4;                          /* BDxWadroff = HDE*4/8/8 */
--      pushcx = tempax;
--      temp = tempax & 0x00FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x43,temp);
--      temp = ((tempax & 0xFF00) >> 8) << 3;
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x0F8,temp);
--      tempax = SiS_Pr->SiS_VDE;                             /*BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */
--      tempeax = (tempax * pushcx);
--      tempebx = 0x00100000 + tempeax;
--      temp = (USHORT)tempebx & 0x000000FF;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x42,temp);
--      temp = (USHORT)((tempebx & 0x0000FF00)>>8);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x41,temp);
--      temp = (USHORT)((tempebx & 0x00FF0000)>>16);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x40,temp);
--      temp = (USHORT)(((tempebx & 0x01000000)>>24) << 7);
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x080,temp);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x03);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0x50);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x04,0x00);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x01);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x13,0x00);
--      SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);        /* Unlock */
--      SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1e,0x62);
--      if(SiS_Pr->SiS_IF_DEF_FSTN){
--              SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2b,0x1b);
--              SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2c,0xe3);
--              SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1e,0x62);
--              SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2e,0x04);
--              SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2f,0x42);
--              SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,0x01);
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2b,0x02);
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2c,0x00);
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x00);
--      }
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0f,0x30);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1e,0x7d);
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2e,0xe0);
-+  if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x25,0x00);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x26,0x00);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x27,0x00);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x28,0x87);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x29,0x5A);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2A,0x4B);
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x007,0x03);
-+     tempax = SiS_Pr->SiS_HDE;                                /* Blps = lcdhdee(lcdhdes+HDE) + 64 */
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+        SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+     tempax += 64;
-+     temp = tempax & 0x00FF;
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x38,temp);
-+     temp = ((tempax & 0xFF00) >> 8) << 3;
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);
-+     tempax += 32;                                            /* Blpe=lBlps+32 */
-+     temp = tempax & 0x00FF;
-+     if(SiS_Pr->SiS_IF_DEF_FSTN) temp = 0;
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x39,temp);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3A,0x00);            /* Bflml=0 */
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x007,0x00);
-+
-+     tempax = SiS_Pr->SiS_VDE;
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+        SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+     tempax >>= 1;
-+     temp = tempax & 0x00FF;
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3B,temp);
-+     temp = ((tempax & 0xFF00) >> 8) << 3;
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);
-+
-+     tempeax = SiS_Pr->SiS_HDE;
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+        SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempeax >>= 1;
-+     tempeax <<= 2;                                           /* BDxFIFOSTOP = (HDE*4)/128 */
-+     tempebx = 128;
-+     temp = (USHORT)(tempeax % tempebx);
-+     tempeax = tempeax / tempebx;
-+     if(temp) tempeax++;
-+     temp = (USHORT)(tempeax & 0x003F);
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x45,~0x0FF,temp);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3F,0x00);            /* BDxWadrst0 */
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3E,0x00);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3D,0x10);
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x040,0x00);
-+
-+     tempax = SiS_Pr->SiS_HDE;
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+        SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+     tempax >>= 4;                                            /* BDxWadroff = HDE*4/8/8 */
-+     pushcx = tempax;
-+     temp = tempax & 0x00FF;
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x43,temp);
-+     temp = ((tempax & 0xFF00) >> 8) << 3;
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x0F8,temp);
-+
-+     tempax = SiS_Pr->SiS_VDE;                                /* BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+        SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) tempax >>= 1;
-+     tempeax = (tempax * pushcx);
-+     tempebx = 0x00100000 + tempeax;
-+     temp = (USHORT)tempebx & 0x000000FF;
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x42,temp);
-+     temp = (USHORT)((tempebx & 0x0000FF00) >> 8);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x41,temp);
-+     temp = (USHORT)((tempebx & 0x00FF0000) >> 16);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x40,temp);
-+     temp = (USHORT)(((tempebx & 0x01000000) >> 24) << 7);
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x080,temp);
-+
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x03);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0x50);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x04,0x00);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x01);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x19,0x38);
-+
-+     if(SiS_Pr->SiS_IF_DEF_FSTN) {
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2b,0x02);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2c,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x35,0x0c);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x36,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x37,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x38,0x80);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x39,0xA0);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3a,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3b,0xf0);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3c,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3d,0x10);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3e,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3f,0x00);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x40,0x10);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x41,0x25);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x42,0x80);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x43,0x14);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x44,0x03);
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x45,0x0a);
-+     }
-   }
- #endif  /* SIS315H */
-@@ -1629,7 +1703,7 @@ SiS_CRT2AutoThreshold(SiS_Private *SiS_P
- #ifdef SIS315H
--/* TW: For LVDS / 302B/30xLV - LCDA (this must only be called on 310/325 series!) */
-+/* For LVDS / 302B/30xLV - LCDA (this must only be called on 315 series!) */
- void
- SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, USHORT  BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-                    PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT RefreshRateTableIndex)
-@@ -1638,6 +1712,10 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-   USHORT push1,push2,tempax,tempbx,tempcx,temp;
-   ULONG tempeax=0,tempebx,tempecx,tempvcfact;
-+  /* This is not supported with LCDA */
-+  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+  if(SiS_Pr->UseCustomMode) return;
-+
-   if(IS_SIS330) {
-      SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);                   /* Xabre 1.01.03 */
-   } else if(IS_SIS740) {
-@@ -1645,7 +1723,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-         SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);        /* 740/LVDS */
-       SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x03);
-      } else {
--        SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);                        /* 740/301LV 1.10.1i */
-+        SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);                        /* 740/301LV, 301BDH */
-      }
-   } else {
-      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {                                       /* 650/LVDS */
-@@ -1669,10 +1747,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-   tempcx = SiS_Pr->SiS_HT;
-   if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
--        if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)       tempbx = 1024;
--      else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempbx = 1400;
--      else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempbx = 1600;
--      else                                                          tempbx = 1280;
-+        tempbx = SiS_Pr->PanelXRes;
-   }
-   tempcx -= tempbx;                                           /* HT-HDE  */
-   push1 = tempax;
-@@ -1684,7 +1759,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-   tempcx >>= 2;
--  /* TW: 650/30xLV 1.10.6s, 740/LVDS */
-+  /* 650/30xLV 1.10.6s, 740/LVDS */
-   if( ((SiS_Pr->SiS_IF_DEF_LVDS == 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) ||
-       ((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) ) {
-      if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-@@ -1748,13 +1823,10 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-   tempbx = SiS_Pr->SiS_LCDVDES;                                       /* VGAVDES  */
-   push1 = tempbx;                                                     
-   if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
--    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)        tempax = 768;
--    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)   tempax = 768;
--    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024)  tempax = 1024;
--    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)  tempax = 1050;
--    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)  tempax = 1200;
--    else                                                           tempax = 960;
--  } else tempax = SiS_Pr->SiS_VGAVDE;  /* Trumpion */
-+     tempax = SiS_Pr->PanelYRes;
-+  } else {
-+     tempax = SiS_Pr->SiS_VGAVDE;
-+  }
-   tempbx += tempax;
-   tempax = SiS_Pr->SiS_VT;                                            /* VT  */
-@@ -1764,7 +1836,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-  
-   tempcx >>= 2;       
--  /* TW: 650/30xLV 1.10.6s, 740/LVDS */
-+  /* 650/30xLV 1.10.6s, 740/LVDS */
-   if( ((SiS_Pr->SiS_IF_DEF_LVDS == 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) ||
-       ((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) ) {
-      if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-@@ -1806,7 +1878,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp);
-   } else {
--     /* TW: 650/30xLV 1.10.6s, Xabre */
-+     /* 650/30xLV 1.10.6s, Xabre */
-      temp |= 0xC0;
-      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp);             /* Part1_19h  */
-   }
-@@ -1823,7 +1895,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-      }
-   } else {
-      if(IS_SIS650) {
--        /* TW: 650/30xLV 1.10.6s */
-+        /* 650/30xLV 1.10.6s */
-         if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
-            if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) temp |= 0x80;
-         }
-@@ -1839,7 +1911,7 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-   if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
--      if(resinfo == 7) tempcx++;
-+      if(resinfo == SIS_RI_800x600) tempcx++;
-     }
-   }
-   if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-@@ -1925,15 +1997,15 @@ SiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, 
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x23,temp);
- #if 0
--  /* TW: Missing code (calles int 2f) (650/302LV 1.10.6s; 1.10.7w doesn't do this) */
-+  /* Missing code (calles int 2f) (650/302LV 1.10.6s; 1.10.7w doesn't do this) */
-   if(xxx()) {
-       SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x0e,0xda);
-   }
- #endif
--  /* TW: Only for LVDS and 301LV/302LV */
-+  /* Only for LVDS and 301LV/302LV */
-   if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBInfo & VB_SIS301LV302LV)){
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1e,0x20);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1e,0x20);
-   }
-   return;
-@@ -1951,10 +2023,10 @@ void SiS_SetCRT2Offset(SiS_Private *SiS_
-   offset = SiS_GetOffset(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-                          HwDeviceExtension);
--#if 0
--  if(SiS_Pr->LCDResInfo == 13) offset >>= 1;
--  if(SiS_Pr->LCDResInfo == 12) offset >>= 1;
--#endif                         
-+
-+  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+     SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) offset >>= 1;
-+
-   temp = (UCHAR)(offset & 0xFF);
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x07,temp);
-   temp = (UCHAR)((offset & 0xFF00) >> 8);
-@@ -1976,13 +2048,7 @@ SiS_GetOffset(SiS_Private *SiS_Pr, UCHAR
-   } else {
-      infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
-      modeinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeInfo;
--  
--     if(HwDeviceExtension->jChipType < SIS_315H ) {
--      index = (modeinfo >> 4) & 0xFF;
--     } else {
--      index = (modeinfo >> 8) & 0xFF;
--     }
--
-+     index = (modeinfo >> 8) & 0xFF;
-      temp = SiS_Pr->SiS_ScreenOffset[index];
-   }
-   
-@@ -1992,9 +2058,8 @@ SiS_GetOffset(SiS_Private *SiS_Pr, UCHAR
-   temp *= colordepth;
--  /* TW: For 1400x1050 and 856x480 */
--  if( ( ((ModeNo >= 0x26) && (ModeNo <= 0x28)) || 
--        ModeNo == 0x3f || 
-+  if( ( ((ModeNo >= 0x26) && (ModeNo <= 0x28)) ||
-+        ModeNo == 0x3f ||
-       ModeNo == 0x42 || 
-       ModeNo == 0x45 ) ||
-       (SiS_Pr->UseCustomMode && (SiS_Pr->CHDisplay % 16)) ) {
-@@ -2012,7 +2077,8 @@ SiS_GetColorDepth(SiS_Private *SiS_Pr, U
-   SHORT  index;
-   USHORT modeflag;
--  if(SiS_Pr->UseCustomMode) {
-+  /* Do NOT check UseCustomMode, will skrew up FIFO */
-+  if(ModeNo == 0xfe) {
-      modeflag = SiS_Pr->CModeFlag;
-   } else {
-      if(ModeNo <= 0x13)
-@@ -2035,7 +2101,11 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-   flag = 0;
-   tempbl = 0xC0;
--  infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
-+  if(SiS_Pr->UseCustomMode) {
-+     infoflag = SiS_Pr->CInfoFlag;
-+  } else {
-+     infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
-+  }
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {                                  /* LVDS */
-@@ -2044,12 +2114,19 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-     } else if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_LCDInfo & LCDSync)) {
-        tempah = SiS_Pr->SiS_LCDInfo;
-     } else tempah = infoflag >> 8;
--    
-+
-     tempah &= 0xC0;
--    
-+
-     tempah |= 0x20;
-     if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-+    if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+       if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+          (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+        tempah |= 0xc0;
-+       }
-+    }
-+
-     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-        if(HwDeviceExtension->jChipType >= SIS_315H) {
-           tempah >>= 3;
-@@ -2079,9 +2156,11 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-             tempah |= 0x20;
-             if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-+#if 0
-             if (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
--              /* TW: BIOS does something here @@@ */
-+              /* BIOS does something here @@@ */
-             }
-+#endif
-           tempah &= 0x3f;
-           tempah |= tempbl;
-@@ -2089,16 +2168,11 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-          } else {                                                     /* 630 - 301 */
--            if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--               tempah = SiS_Pr->SiS_LCDInfo;
--             if(SiS_Pr->SiS_LCDInfo & DontExpandLCDShift) { /* ! */
--                flag = 1;
--             }
--            }
--            if(flag != 1) tempah = infoflag >> 8;
-+            tempah = infoflag >> 8;
-             tempah &= 0xC0;
--            tempah |= 0x30;
--            SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x3F,tempah);
-+            tempah |= 0x20;
-+          if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-+            SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
-          }
-@@ -2106,9 +2180,9 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-       } else {
--#ifdef SIS315H  /* ----- 310/325 series ---- */
-+#ifdef SIS315H  /* ------- 315 series ------ */
--         if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {                  /* 310/325 - 30xLV */
-+         if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {                  /* 315 - 30xLV */
-             tempah = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37);
-             tempah &= 0xC0;
-@@ -2116,24 +2190,33 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-             if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-             SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
--         } else {                                                     /* 310/325 - 301, 301B */
-+         } else {                                                     /* 315 - 301, 301B */
-             tempah = infoflag >> 8;
-             tempah &= 0xC0;
--          if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--             if(SiS_Pr->SiS_LCDInfo & LCDSync) {
--                tempah = SiS_Pr->SiS_LCDInfo;
--                tempah &= 0xC0;
-+          if(!SiS_Pr->UseCustomMode) {
-+             if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+                if(SiS_Pr->SiS_LCDInfo & LCDSync) {
-+                   tempah = SiS_Pr->SiS_LCDInfo;
-+                   tempah &= 0xC0;
-+                }
-              }
-           }
-           
-             tempah |= 0x20;
-             if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
-+          
- #if 0
-             if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
--              /* TW: BIOS does something here @@@ */
-+              /* BIOS does something here @@@ */
-             }
--#endif            
-+#endif
-+
-+          if(SiS_Pr->SiS_VBType & VB_NoLCD) {                 /* TEST, imitate BIOS bug */
-+             if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+                tempah |= 0xc0;
-+             }
-+          }
-             SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
-          } 
-@@ -2143,7 +2226,7 @@ SiS_SetCRT2Sync(SiS_Private *SiS_Pr, USH
-    }
- }
--/* TW: Set CRT2 FIFO on 300/630/730 */
-+/* Set CRT2 FIFO on 300/630/730 */
- #ifdef SIS300
- void
- SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,
-@@ -2197,7 +2280,7 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-   if(!SiS_Pr->CRT1UsesCustomMode) {
-   
--     CRT1ModeNo = SiS_Pr->SiS_CRT1Mode;                                 /* get CRT1 ModeNo */
-+     CRT1ModeNo = SiS_Pr->SiS_CRT1Mode;                                       /* get CRT1 ModeNo */
-      SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT1ModeNo,&modeidindex);
-      SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
-      SiS_Pr->SiS_SelectCRT2Rate = 0;
-@@ -2205,20 +2288,32 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-                                               modeidindex,HwDeviceExtension);
-      if(CRT1ModeNo >= 0x13) {
--       index = SiS_Pr->SiS_RefIndex[refreshratetableindex].Ext_CRTVCLK;
--       index &= 0x3F;
--       VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;                      /* Get VCLK */
--       data2 = SiS_Pr->SiS_ModeType - 2;
-+        index = SiS_Pr->SiS_RefIndex[refreshratetableindex].Ext_CRTVCLK;
-+        index &= 0x3F;
-+        VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;                             /* Get VCLK */
-+
-+      colorth = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT1ModeNo,modeidindex);     /* Get colordepth */
-+        colorth >>= 1;
-+        if(!colorth) colorth++;
-      }
--     
-+
-   } else {
-   
-      CRT1ModeNo = 0xfe;
--     VCLK = SiS_Pr->CSRClock;                                         /* Get VCLK */
--     data2 = (SiS_Pr->CModeFlag & ModeInfoFlag) - 2;
--  
--  }                   
--     
-+     VCLK = SiS_Pr->CSRClock_CRT1;                                            /* Get VCLK */
-+     data2 = (SiS_Pr->CModeFlag_CRT1 & ModeInfoFlag) - 2;
-+     switch(data2) {                                                          /* Get color depth */
-+        case 0 : colorth = 1; break;
-+        case 1 : colorth = 1; break;
-+        case 2 : colorth = 2; break;
-+        case 3 : colorth = 2; break;
-+        case 4 : colorth = 3; break;
-+        case 5 : colorth = 4; break;
-+        default: colorth = 2;
-+     }
-+
-+  }
-+
-   if(CRT1ModeNo >= 0x13) {
-     if(HwDeviceExtension->jChipType == SIS_300) {
-        index = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x3A);
-@@ -2227,22 +2322,8 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-     }
-     index &= 0x07;
-     MCLK = SiS_Pr->SiS_MCLKData_0[index].CLOCK;                               /* Get MCLK */
--    
--#ifdef TWDEBUG
--    xf86DrvMsg(0, X_INFO, "FIFO2: CRT1Mode 0x%x VCLK %d MCLK %d modetype-2 = %d\n",
--      CRT1ModeNo, VCLK, MCLK, data2);
--#endif  
--  
--    switch(data2) {                                                   /* Get color depth */
--      case 0 :        colorth = 1; break;
--      case 1 :        colorth = 1; break;
--      case 2 :        colorth = 2; break;
--      case 3 :        colorth = 2; break;
--      case 4 :        colorth = 3; break;
--      case 5 :        colorth = 4; break;
--      default:  colorth = 2; break;
--    }
--    data2 = (colorth * VCLK) / MCLK;  
-+
-+    data2 = (colorth * VCLK) / MCLK;
-     temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14);
-     temp = ((temp & 0x00FF) >> 6) << 1;
-@@ -2252,22 +2333,12 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-     data2 = temp - data2;
-     
--#ifdef TWDEBUG
--    xf86DrvMsg(0, X_INFO, "FIFO2: data2 (step1) = %d\n",
--      data2);
--#endif    
--
-     if((28 * 16) % data2) {
-               data2 = (28 * 16) / data2;
-               data2++;
-     } else {
-               data2 = (28 * 16) / data2;
-     }
--    
--#ifdef TWDEBUG
--    xf86DrvMsg(0, X_INFO, "FIFO2: data2 (step2) = %d\n",
--      data2);
--#endif
-     if(HwDeviceExtension->jChipType == SIS_300) {
-@@ -2313,10 +2384,6 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-        temp &= 0x0F;   
-        tempal |= temp;
--#ifdef TWDEBUG
--       xf86DrvMsg(0, X_INFO, "FIFO2: Latencyfactorindex = 0x%x\n", tempal);
--#endif
--      
-        tempbx = tempal;   /* BIOS BUG (2.04.5d, 2.04.6a use ah here, which is unset!) */
-        tempbx = 0;        /* -- do it like the BIOS anyway... */
-        tempax = tempbx;
-@@ -2341,7 +2408,7 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-        SiS_SetReg4(0xcf8,0x800000A0);
-        eax = SiS_GetReg3(0xcfc);
- #else
--       /* TW: We use pci functions X offers. We use tag 0, because
-+       /* We use pci functions X offers. We use tag 0, because
-         * we want to read/write to the host bridge (which is always
-         * 00:00.0 on 630, 730 and 540), not the VGA device.
-         */
-@@ -2368,43 +2435,41 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-        if(!(temp & 0x80)) data += 5;
-     }
-     
--#ifdef TWDEBUG    
--    xf86DrvMsg(0, X_INFO, "FIFO2: latencyfactor (CRT1) = %d\n", data);
--#endif
--
-     data += data2;                            /* CRT1 Request Period */
-     
--#ifdef TWDEBUG    
--    xf86DrvMsg(0, X_INFO, "FIFO2: CRT1 request period = %d\n", data);
--#endif
--
--    CRT2ModeNo = ModeNo;
-     SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
-     SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
--    SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&modeidindex);    
--    refreshratetableindex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
--                                               modeidindex,HwDeviceExtension);
-+    if(!SiS_Pr->UseCustomMode) {
-+
-+       CRT2ModeNo = ModeNo;
-+       SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&modeidindex);
-+
-+       refreshratetableindex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
-+                                                  modeidindex,HwDeviceExtension);
-+
-+       index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,modeidindex,
-+                               refreshratetableindex,HwDeviceExtension);
-+       VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;                              /* Get VCLK  */
-+
-+       if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+          if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-+           if(ROMAddr[0x220] & 0x01) {
-+                VCLK = ROMAddr[0x229] | (ROMAddr[0x22a] << 8);
-+           }
-+          }
-+       }
-+
-+    } else {
-+
-+       CRT2ModeNo = 0xfe;
-+       VCLK = SiS_Pr->CSRClock;                                                       /* Get VCLK */
--    index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,modeidindex,
--                            refreshratetableindex,HwDeviceExtension);
--    VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;                                 /* Get VCLK  */
--    
--    data2 = SiS_Pr->SiS_ModeType - 2;
--    switch(data2) {                                                   /* Get color depth */
--      case 0 :        colorth = 1; break;
--      case 1 :        colorth = 1; break;
--      case 2 :        colorth = 2; break;
--      case 3 :        colorth = 2; break;
--      case 4 :        colorth = 3; break;
--      case 5 :        colorth = 4; break;
--      default:  colorth = 2; break;
-     }
--    
--#ifdef TWDEBUG    
--    xf86DrvMsg(0, X_INFO, "FIFO2: CRT2Mode 0x%x VCLK %d MCLK %d modetype-2 = %d, colorth %d\n",
--      CRT2ModeNo, VCLK, MCLK, data2, colorth);
--#endif
-+
-+    colorth = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT2ModeNo,modeidindex);       /* Get colordepth */
-+    colorth >>= 1;
-+    if(!colorth) colorth++;
-     data = data * VCLK * colorth;
-     if(data % (MCLK << 4)) {
-@@ -2414,10 +2479,6 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
-               data = data / (MCLK << 4);
-     }
-     
--#ifdef TWDEBUG    
--    xf86DrvMsg(0, X_INFO, "FIFO2: data (unclipped) = 0x%x\n", data);
--#endif    
--    
-     if(data <= 6) data = 6;
-     if(data > 0x14) data = 0x14;
-@@ -2456,13 +2517,13 @@ SiS_SetCRT2FIFO_300(SiS_Private *SiS_Pr,
- }
- #endif
--/* TW: Set FIFO on 310/325/330 series */
-+/* Set FIFO on 315/330 series */
- #ifdef SIS315H
- void
- SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,
-                     PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
--
-+#if 0   /* This code is obsolete */
-   UCHAR CombCode[]  = { 1, 1, 1, 4, 3, 1, 3, 4,
-                         4, 1, 4, 4, 5, 1, 5, 4};
-   UCHAR CRT2ThLow[] = { 39, 63, 55, 79, 78,102, 90,114,
-@@ -2474,11 +2535,13 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-   USHORT ModeIdIndex;
-   USHORT RefreshRateTableIndex;
-   USHORT SelectRate_backup;
--  
-+
-   SelectRate_backup = SiS_Pr->SiS_SelectCRT2Rate;
--  
-+#endif
-+
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x01,0x3B);
-+#if 0
-   if(!SiS_Pr->CRT1UsesCustomMode) {
-   
-      CRT1ModeNo = SiS_Pr->SiS_CRT1Mode;                                 /* get CRT1 ModeNo */
-@@ -2489,28 +2552,27 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-      /* Get REFIndex for crt1 refreshrate */
-      RefreshRateTableIndex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT1ModeNo,
--                                             ModeIdIndex,HwDeviceExtension);
-+                                                ModeIdIndex,HwDeviceExtension);
-+     index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
-+     tempax = SiS_Pr->SiS_VCLKData[index].CLOCK;                      /* Get VCLK */
--     index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT1ModeNo,ModeIdIndex,
--                          RefreshRateTableIndex,HwDeviceExtension);
--     tempax = SiS_Pr->SiS_VCLKData[index].CLOCK;                        /* Get VCLK */
--     
-      tempbx = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT1ModeNo,ModeIdIndex); /* Get colordepth */
-      tempbx >>= 1;
--     if(!tempbx) tempbx++; 
--     
-+     if(!tempbx) tempbx++;
-+
-   } else {
--  
--     tempax = SiS_Pr->CSRClock;                                               /* Get VCLK */
--     tempbx = (SiS_Pr->CModeFlag & ModeInfoFlag) - 2;
-+
-+     CRT1ModeNo = 0xfe;
-+     tempax = SiS_Pr->CSRClock_CRT1;                                  /* Get VCLK */
-+     tempbx = (SiS_Pr->CModeFlag_CRT1 & ModeInfoFlag) - 2;
-      switch(tempbx) {                                                 /* Get color depth */
--       case 0 :       tempbx = 1; break;
--       case 1 :       tempbx = 1; break;
--       case 2 :       tempbx = 2; break;
--       case 3 :       tempbx = 2; break;
--       case 4 :       tempbx = 3; break;
--       case 5 :       tempbx = 4; break;
--       default:       tempbx = 2; break;
-+       case 0 : tempbx = 1; break;
-+       case 1 : tempbx = 1; break;
-+       case 2 : tempbx = 2; break;
-+       case 3 : tempbx = 2; break;
-+       case 4 : tempbx = 3; break;
-+       case 5 : tempbx = 4; break;
-+       default: tempbx = 2;
-      }
-   
-   }
-@@ -2523,13 +2585,6 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-   tempbx = tempax;
--#if 0 /* TW: BIOS code is skrewed */
--  if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14) & 0x02) {
--      tempax = 16;
--  } else {
--      tempax = 8;
--  }
--#endif
-   tempax = 16;
-   tempax -= tempbx;
-@@ -2556,24 +2611,33 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-   tempcx +=  temp3;                                      /* CRT1 Request Period */
--  CRT2ModeNo = ModeNo;                                                 /* get CRT2 ModeNo */
--  SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&ModeIdIndex);           /* Get ModeID Table */
--
-   SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
-   SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
--  RefreshRateTableIndex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
--                                           ModeIdIndex,HwDeviceExtension);
-+  if(!SiS_Pr->UseCustomMode) {
-+
-+     CRT2ModeNo = ModeNo;                                                 /* get CRT2 ModeNo */
-+     SiS_SearchModeID(SiS_Pr,ROMAddr,&CRT2ModeNo,&ModeIdIndex);
-+
-+     RefreshRateTableIndex = SiS_GetRatePtrCRT2(SiS_Pr,ROMAddr,CRT2ModeNo,
-+                                                ModeIdIndex,HwDeviceExtension);
-+
-+     index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex,
-+                             RefreshRateTableIndex,HwDeviceExtension);
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-+        tempax = SiS_Pr->SiS_VCLKData[index].CLOCK;                       /* Get VCLK  */
-+     } else {
-+        tempax = SiS_Pr->SiS_VBVCLKData[index].CLOCK;
-+     }
--  index = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex,
--                          RefreshRateTableIndex,HwDeviceExtension);
--  if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
--     tempax = SiS_Pr->SiS_VCLKData[index].CLOCK;                       /* Get VCLK  */
-   } else {
--     tempax = SiS_Pr->SiS_VBVCLKData[index].CLOCK;                     /* Get VCLK  */
-+
-+     CRT2ModeNo = 0xfe;                                                         /* Get VCLK  */
-+     tempax = SiS_Pr->CSRClock;
-+
-   }
--  tempbx = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex);   /* Get colordepth */
-+  tempbx = SiS_GetColorDepth(SiS_Pr,ROMAddr,CRT2ModeNo,ModeIdIndex);            /* Get colordepth */
-   tempbx >>= 1;
-   if(!tempbx) tempbx++;
-@@ -2590,12 +2654,16 @@ SiS_SetCRT2FIFO_310(SiS_Private *SiS_Pr,
-   if (tempax > 0x37)  tempax = 0x37;
--  /* TW: 650/LVDS (1.10.07, 1.10.00), 650/301LV, 740, 330 overrule calculated value; 315 does not */
-+  /* 650/LVDS, 650/301LV, 740, 330 overrule calculated value; 315 does not */
-   if(HwDeviceExtension->jChipType >= SIS_650) {
-       tempax = 0x04;
-   }
--  
-   SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,~0x3F,tempax);
-+#else
-+
-+  SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,~0x3F,0x04);
-+
-+#endif
- }
- USHORT
-@@ -2611,9 +2679,10 @@ SiS_GetMCLK(SiS_Private *SiS_Pr, UCHAR *
-     return(SiS_Pr->SiS_MCLKData_0[index].CLOCK);
-   }
- }
-+
- #endif
--/* TW: Checked against 650/LVDS 1.10.07 BIOS */
-+/* Checked against 650/LVDS 1.10.07 BIOS */
- void
- SiS_GetLVDSDesData(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-                    USHORT RefreshRateTableIndex,
-@@ -2623,6 +2692,13 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr, 
-   USHORT PanelIndex,ResIndex;
-   const  SiS_LVDSDesStruct *PanelDesPtr = NULL;
-+  if((SiS_Pr->UseCustomMode) ||
-+     (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom)) {
-+     SiS_Pr->SiS_LCDHDES = 0;
-+     SiS_Pr->SiS_LCDVDES = 0;
-+     return;
-+  }
-+
-   if((SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) ) {
- #ifdef SIS315H  
-@@ -2689,11 +2765,11 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr, 
-       case 52: PanelDesPtr = SiS_Pr->SiS_CHTVUPALDesData;    break;
-       case 53: PanelDesPtr = SiS_Pr->SiS_CHTVOPALDesData;    break;
-       default:
--              if(HwDeviceExtension->jChipType < SIS_315H)
--                 PanelDesPtr = SiS_Pr->SiS_PanelType0e_1;
--              else
--                 PanelDesPtr = SiS_Pr->SiS_PanelType01_1;
--              break;
-+               if(HwDeviceExtension->jChipType < SIS_315H)
-+                  PanelDesPtr = SiS_Pr->SiS_PanelType0e_1;
-+               else
-+                  PanelDesPtr = SiS_Pr->SiS_PanelType01_1;
-+               break;
-      }
-   }
-   SiS_Pr->SiS_LCDHDES = (PanelDesPtr+ResIndex)->LCDHDES;
-@@ -2710,7 +2786,7 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr, 
-      } else {
-         if(!(SiS_Pr->SiS_SetFlag & SetDOSMode)) {
-            if( (HwDeviceExtension->jChipType < SIS_315H) || 
--             (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) ) {  
-+             (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) ) {
-               if(SiS_Pr->SiS_LCDResInfo >= SiS_Pr->SiS_Panel1024x768){
-                  if(ModeNo <= 0x13) {
-                   modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-@@ -2737,7 +2813,7 @@ SiS_GetLVDSDesData(SiS_Private *SiS_Pr, 
-         }
-      }
-   }
--  return;
-+
- }
- void
-@@ -2757,11 +2833,11 @@ SiS_GetLVDSDesPtr(SiS_Private *SiS_Pr, U
-   tempbx = 0;
-   if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
--     if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-         tempbx = 50;
-         if((SiS_Pr->SiS_VBInfo & SetPALTV) && (!SiS_Pr->SiS_CHPALM)) tempbx += 2;
-         if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
--        /* TW: Nothing special needed for SOverscan    */
-+        /* Nothing special needed for SOverscan    */
-         /*     PALM uses NTSC data, PALN uses PAL data */
-      }
-   }
-@@ -2773,7 +2849,7 @@ SiS_GetLVDSDesPtr(SiS_Private *SiS_Pr, U
-         if(modeflag & HalfDCLK) tempbx++;
-      }
-   }
--  /* TW: 630/LVDS and 650/LVDS (1.10.07) BIOS */
-+  /* 630/LVDS and 650/LVDS (1.10.07) BIOS */
-   if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
-      if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480)  {
-         tempal = 0x07;
-@@ -2833,14 +2909,13 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-      }
-   }
-   
--  /* TW: BIOS does not do this (neither 301 nor LVDS) */
-+  /* BIOS does not do this (neither 301 nor LVDS) */
-   /*     (But it's harmless; see SetCRT2Offset) */
-   SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0x00);   /* fix write part1 index 0  BTDRAM bit Bug */
--  /* TW: Removed 301B302B301LV302LV check here to match 650/LVDS BIOS */
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
--      /* TW:   1. for LVDS/302B/302LV **LCDA** */
-+      /*   1. for LVDS/302B/302LV **LCDA** */
-       SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xAF,0x40); /* FUNCTION CONTROL */
-       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2E,0xF7);
-@@ -2855,23 +2930,23 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
- #ifdef SIS300    /* ---- 300 series ---- */
--      /* For 301BDH: */
-+      /* For 301BDH: (with LCD via LVDS) */
-       if(SiS_Pr->SiS_VBType & VB_NoLCD) {
--        temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32);
--        temp &= 0xef;
--        temp |= 0x02;
--        if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) || (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
--           temp |= 0x10;
--           temp &= 0xfd;
--        }
--        SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
-+       temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32);
-+       temp &= 0xef;
-+       temp |= 0x02;
-+       if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) || (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
-+          temp |= 0x10;
-+          temp &= 0xfd;
-+       }
-+       SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
-       }
-       if(ModeNo > 0x13) {
--        tempcl -= ModeVGA;
--        if((tempcl > 0) || (tempcl == 0)) {      /* TW: tempcl is USHORT -> always true! */
--           tempah = ((0x10 >> tempcl) | 0x80);
--        }
-+         tempcl -= ModeVGA;
-+         if((tempcl > 0) || (tempcl == 0)) {      /* tempcl is USHORT -> always true! */
-+            tempah = ((0x10 >> tempcl) | 0x80);
-+         }
-       } else tempah = 0x80;
-       if(SiS_Pr->SiS_VBInfo & SetInSlaveMode)  tempah ^= 0xA0;
-@@ -2880,7 +2955,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-     } else {
--#ifdef SIS315H    /* ---- 310/325/330 series ---- */
-+#ifdef SIS315H    /* ------- 315/330 series ------ */
-       if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-          if(SiS_Pr->SiS_VBInfo & CRT2DisplayFlag) {
-@@ -2889,12 +2964,12 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-       }
-       if(ModeNo > 0x13) {
--        tempcl -= ModeVGA;
--        if((tempcl > 0) || (tempcl == 0)) {  /* TW: tempcl is USHORT -> always true! */
--           tempah = (0x08 >> tempcl);
--           if (tempah == 0) tempah = 1;
--           tempah |= 0x40;
--        }
-+         tempcl -= ModeVGA;
-+         if((tempcl > 0) || (tempcl == 0)) {  /* tempcl is USHORT -> always true! */
-+            tempah = (0x08 >> tempcl);
-+            if (tempah == 0) tempah = 1;
-+            tempah |= 0x40;
-+         }
-       } else tempah = 0x40;
-       if(SiS_Pr->SiS_VBInfo & SetInSlaveMode)  tempah ^= 0x50;
-@@ -2921,7 +2996,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-     if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--      /* TW:   2. for 301 (301B, 302B 301LV, 302LV non-LCDA) */
-+      /*   2. for 301 (301B, 302B 301LV, 302LV non-LCDA) */
-       tempah = 0x01;
-       if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-@@ -2938,7 +3013,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-       if(HwDeviceExtension->jChipType < SIS_315H) {
--              /* --- 300 series --- */
-+              /* ---- 300 series ---- */
-                       tempah = (tempah << 5) & 0xFF;
-                       SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x01,tempah);
-@@ -2946,7 +3021,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-       } else {
--              /* --- 310 series --- */
-+              /* ---- 315 series ---- */
-                       SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2E,0xF8,tempah);
-@@ -2956,9 +3031,9 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-                       tempah |= 0x10;
-       }
--      /* TW: 630/301 BIOS */
-       if((HwDeviceExtension->jChipType < SIS_315H) && (SiS_Pr->SiS_VBType & VB_SIS301)) {
--              if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+              if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+                 (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)) {
-                       tempah |= 0x80;
-               }
-       } else {
-@@ -2996,28 +3071,31 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-                     }
-          }
-       }
--      /* TW: For 302LV dual-channel */
-+
-+      /* For 302LV dual-channel */
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
--          if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--              if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04)
--                  tempah |= 0x40;
--          }
-+         if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+            if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04)
-+               tempah |= 0x40;
-+         }
-       }
-       if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
--         (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)) {
--              tempah |= 0x80;
-+         (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960)  ||
-+         ((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) &&
-+          (SiS_Pr->CP_MaxX >= 1280) && (SiS_Pr->CP_MaxY >= 960))) {
-+         tempah |= 0x80;
-       }
-       SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0C,tempah);
-     } else {
--      /* TW: 3. for LVDS */
-+      /* 3. for LVDS */
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
--         /* TW: Inserted this entire section (BIOS 650/LVDS); added ModeType check
-+         /* Inserted this entire section (BIOS 650/LVDS); added ModeType check
-           *     (LVDS can only be slave in 8bpp modes)
-           */
-          tempah = 0x80;
-@@ -3043,7 +3121,7 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-       } else {
--         /* TW: (added ModeType check) */
-+         /* (added ModeType check) */
-          tempah = 0;
-          if( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) && (SiS_Pr->SiS_ModeType > ModeVGA) ) {
-                         tempah |= 0x02;
-@@ -3060,50 +3138,69 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-   }
--  /* TW: Inserted the entire following section */
-+  /* Inserted the entire following section */
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
- #ifdef SIS315H
-+
-+         unsigned char bridgerev = SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x01);;
-+
-+       /* The following is nearly unpreditable and varies from machine
-+        * to machine. Especially the 301DH seems to be a real trouble
-+        * maker. Some BIOSes simply set the registers (like in the
-+        * NoLCD-if-statements here), some set them according to the
-+        * LCDA stuff. It is very likely that some machines are not
-+        * treated correctly in the following, very case-orientated
-+        * code. What do I do then...?
-+        */
-+
-+       /* 740 variants match for 30xB, 301B-DH, 30xLV */
-+
-          if(!(IS_SIS740)) {
-             tempah = 0x04;                                               /* For all bridges */
-             tempbl = 0xfb;
-             if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-                tempah = 0x00;
--             if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr))
-+             if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-                 tempbl = 0xff;
-+             }
-             }
-             SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);   
-        }
--       
--       if(IS_SIS740) {                                                
-+
-+       /* The following two are responsible for eventually wrong colors
-+        * in TV output. The DH (VB_NoLCD) conditions are unknown; the
-+        * b0 was found in some 651 machine (Pim); the b1 version in a
-+        * 650 box (Jake). What is the criteria?
-+        */
-+
-+       if(IS_SIS740) {
-           tempah = 0x30;
-           tempbl = 0xcf;
-           if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
-              tempah = 0x00;
-           }
--          SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);    
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
-+       } else if(SiS_Pr->SiS_VBType & VB_SIS301) {
-+          /* Fixes "TV-blue-bug" on 315+301 */
-+          SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2c,0xCF);          /* For 301   */
-+       } else if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xCF,0x30);   /* For 30xLV */
-+       } else if((SiS_Pr->SiS_VBType & VB_NoLCD) && (bridgerev == 0xb0)) {
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xCF,0x30);   /* For 30xB-DH rev b0 (or "DH on 651"?) */
-        } else {
--          /* TW: This in order to fix "TV-blue-bug" on 315+301 */
--            if(SiS_Pr->SiS_VBType & VB_SIS301) {
--             SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2c,0xCF);             /* For 301   */
--          } else {
--             if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--                SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xCF,0x30);   /* For 30xLV */
--             } else {
--                tempah = 0x30;                                           /* For 301B  */
--                tempbl = 0xcf;
--                if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
--                   tempah = 0x00;
--                   if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
--                      tempbl = 0xff;
--                   }
--                }
--                SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);    
-+          tempah = 0x30;                                           /* For 30xB (and 301BDH rev b1) */
-+          tempbl = 0xcf;
-+          if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-+             tempah = 0x00;
-+             if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-+                tempbl = 0xff;
-              }
-           }
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
-        }
-        if(IS_SIS740) {
-@@ -3111,25 +3208,25 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-           tempbl = 0x3f;
-           if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
-              tempah = 0x00;
--          } 
--          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);     
-+          }
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);
-+       } else if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,0xc0);      /* For 30xLV */
-+       } else if((SiS_Pr->SiS_VBType & VB_NoLCD) && (bridgerev == 0xb0)) {
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,0xc0);      /* For 30xB-DH rev b0 (or "DH on 651"? */
-        } else {
--          if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {                 /* For 30xLV */
--             SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,0xc0);
--          } else {                                                    /* For 301, 301B */ 
--              tempah = 0xc0;
--              tempbl = 0x3f;
--              if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
--                 tempah = 0x00;
--                 if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
--                    tempbl = 0xff;
--                 }
--              }
--              SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);     
-+          tempah = 0xc0;                                              /* For 301, 301B (and 301BDH rev b1) */
-+          tempbl = 0x3f;
-+          if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-+             tempah = 0x00;
-+             if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-+                tempbl = 0xff;
-+             }
-           }
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl,tempah);
-        }
--       if(IS_SIS740) {                                                
-+       if(IS_SIS740) {
-           tempah = 0x80;
-           tempbl = 0x7f;
-           if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
-@@ -3141,8 +3238,9 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-             tempbl = 0x7f;
-             if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-                tempbl = 0xff;
--             if(!(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)))
-+             if(!(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr))) {
-                 tempah |= 0x80;
-+             }
-             }
-             SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,tempbl,tempah);
-        }
-@@ -3174,16 +3272,32 @@ SiS_SetCRT2ModeRegs(SiS_Private *SiS_Pr,
-           tempbl = 0xfb;
-             if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-                tempah = 0x00;
--             if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr))
-+             if(SiS_IsDualEdge(SiS_Pr, HwDeviceExtension, BaseAddr)) {
-                 tempbl = 0xff;
-+             }
-             }
-           SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
--          if(SiS_Pr->SiS_VBInfo & DisableCRT2Display)
-+          if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
-              SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x00);
-+          }
-           SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xcf,0x30);
-+       } else if(HwDeviceExtension->jChipType == SIS_550) {
-+
-+#if 0
-+          tempah = 0x00;
-+          tempbl = 0xfb;
-+          if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
-+             tempah = 0x00;
-+             tempbl = 0xfb;
-+          }
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
-+#endif
-+          SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
-+
-+          SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xcf,0x30);
-        }
-       }
-@@ -3209,10 +3323,9 @@ SiS_GetCRT2Data(SiS_Private *SiS_Pr, UCH
-                             HwDeviceExtension);
-         } else {
--         if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
--             (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
--             
--            /* TW: Need LVDS Data for LCD on 301BDH */
-+         if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-+
-+            /* Need LVDS Data for LCD on 301B-DH */
-             SiS_GetCRT2DataLVDS(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-                                 HwDeviceExtension);
-                                 
-@@ -3282,18 +3395,16 @@ SiS_GetCRT2DataLVDS(SiS_Private *SiS_Pr,
-    } else {
--      /* TW: 301BDH needs LVDS Data */
--      if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
--          (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-+      /* 301BDH needs LVDS Data */
-+      if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-             SiS_Pr->SiS_IF_DEF_LVDS = 1;
-       }
-       SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-                      &CRT2Index,&ResIndex,HwDeviceExtension);
--      /* TW: 301BDH needs LVDS Data */
--      if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
--          (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-+      /* 301BDH needs LVDS Data */
-+      if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD) ) {
-               SiS_Pr->SiS_IF_DEF_LVDS = 0;
-       }
-@@ -3321,11 +3432,16 @@ SiS_GetCRT2DataLVDS(SiS_Private *SiS_Pr,
-       case 20:  LVDSData = SiS_Pr->SiS_LVDS1280x768Data_2;   break;
-       case 21:  LVDSData = SiS_Pr->SiS_LVDS1600x1200Data_1;  break;
-       case 22:  LVDSData = SiS_Pr->SiS_LVDS1600x1200Data_2;  break;
-+      case 30:  LVDSData = SiS_Pr->SiS_LVDS640x480Data_2;    break;
-+      case 80:  LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_1;  break;
-+      case 81:  LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_2;  break;
-+      case 82:  LVDSData = SiS_Pr->SiS_LVDSBARCO1024Data_1;  break;
-+      case 83:  LVDSData = SiS_Pr->SiS_LVDSBARCO1024Data_2;  break;
-       case 90:  LVDSData = SiS_Pr->SiS_CHTVUPALMData;        break;
-               case 91:  LVDSData = SiS_Pr->SiS_CHTVOPALMData;        break;
-               case 92:  LVDSData = SiS_Pr->SiS_CHTVUPALNData;        break;
-               case 93:  LVDSData = SiS_Pr->SiS_CHTVOPALNData;        break;
--      case 99:  LVDSData = SiS_Pr->SiS_CHTVSOPALData;        break;  /* TW: Super Overscan */
-+      case 99:  LVDSData = SiS_Pr->SiS_CHTVSOPALData;        break;  /* Super Overscan */
-       default:  LVDSData = SiS_Pr->SiS_LVDS1024x768Data_1;   break;
-      }
-    }
-@@ -3337,67 +3453,36 @@ SiS_GetCRT2DataLVDS(SiS_Private *SiS_Pr,
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--    if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)){
--         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768){
--           SiS_Pr->SiS_HDE = 1024;
--           SiS_Pr->SiS_VDE =  768;
--         } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024){
--           SiS_Pr->SiS_HDE = 1280;
--           SiS_Pr->SiS_VDE = 1024;
--       } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050){
--           SiS_Pr->SiS_HDE = 1400;
--           SiS_Pr->SiS_VDE = 1050;
--       } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200){
--           SiS_Pr->SiS_HDE = 1600;
--           SiS_Pr->SiS_VDE = 1200;
--         } else {
--         SiS_Pr->SiS_HDE = 1280;
--         SiS_Pr->SiS_VDE =  960;
--       }
--    }
-+     if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-+        SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
-+        SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
-+     }
-   } else {
--    if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
--      if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
--        if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
--          if((!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) || (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
--            if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
--              SiS_Pr->SiS_HDE =  800;
--              SiS_Pr->SiS_VDE =  600;
--          } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
--            SiS_Pr->SiS_HDE = 1024;
--              SiS_Pr->SiS_VDE =  600;  
--            } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--              SiS_Pr->SiS_HDE = 1024;
--              SiS_Pr->SiS_VDE =  768;
--          } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
--            SiS_Pr->SiS_HDE = 1152;
--            SiS_Pr->SiS_VDE =  768;   
--          } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x864) {
--            SiS_Pr->SiS_HDE = 1152;
--            SiS_Pr->SiS_VDE =  864;  
--          } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
--            SiS_Pr->SiS_HDE = 1280;
--            SiS_Pr->SiS_VDE =  768;        
--            } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--              SiS_Pr->SiS_HDE = 1280;
--              SiS_Pr->SiS_VDE = 1024;
--          } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
--            SiS_Pr->SiS_HDE = 1400;
--              SiS_Pr->SiS_VDE = 1050;
--          } else {
--            SiS_Pr->SiS_HDE = 1600;
--            SiS_Pr->SiS_VDE = 1200;
--          }
--            if(SiS_Pr->SiS_IF_DEF_FSTN) {
--              SiS_Pr->SiS_HDE = 320;
--              SiS_Pr->SiS_VDE = 480;
--            }
--          }
-+     if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
-+        if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
-+           if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {
-+              if((!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) || (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
-+               SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
-+                 SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
-+
-+               if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+                  if(ResIndex < 0x08) {
-+                     SiS_Pr->SiS_HDE = 1280;
-+                       SiS_Pr->SiS_VDE = 1024;
-+                  }
-+               }
-+#if 0
-+                 if(SiS_Pr->SiS_IF_DEF_FSTN) {
-+                    SiS_Pr->SiS_HDE = 320;
-+                    SiS_Pr->SiS_VDE = 480;
-+                 }
-+#endif                 
-+              }
-+           }
-         }
--      }
--    }
-+     }
-   }
- }
-@@ -3413,11 +3498,16 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr, 
-   const SiS_TVDataStruct  *TVPtr  = NULL;
-   if(ModeNo <= 0x13) {
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
--      resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+     resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-   } else {
-+     if(SiS_Pr->UseCustomMode) {
-+        modeflag = SiS_Pr->CModeFlag;
-+      resinfo = 0;
-+     } else {
-       modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-       resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+     }
-   }
-   
-   SiS_Pr->SiS_NewFlickerMode = 0;
-@@ -3429,20 +3519,29 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr, 
-   SiS_GetCRT2ResInfo(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
--  /* TW: For VGA2 ("RAMDAC2") */
--
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC){
--     SiS_GetRAMDAC2DATA(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
--                        HwDeviceExtension);
--     return;
--  }
--  /* TW: For TV */
-+     if(SiS_Pr->UseCustomMode) {
--  if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+        SiS_Pr->SiS_RVBHCMAX  = 1;
-+        SiS_Pr->SiS_RVBHCFACT = 1;
-+        SiS_Pr->SiS_VGAHT     = SiS_Pr->CHTotal;
-+        SiS_Pr->SiS_VGAVT     = SiS_Pr->CVTotal;
-+        SiS_Pr->SiS_HT        = SiS_Pr->CHTotal;
-+        SiS_Pr->SiS_VT        = SiS_Pr->CVTotal;
-+      SiS_Pr->SiS_HDE       = SiS_Pr->SiS_VGAHDE;
-+        SiS_Pr->SiS_VDE       = SiS_Pr->SiS_VGAVDE;
--    SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
--                   &CRT2Index,&ResIndex,HwDeviceExtension);
-+     } else {
-+
-+        SiS_GetRAMDAC2DATA(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+                           HwDeviceExtension);
-+     }
-+
-+  } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+
-+    SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+                   &CRT2Index,&ResIndex,HwDeviceExtension);
-     switch (CRT2Index) {
-       case  2:  TVPtr = SiS_Pr->SiS_ExtHiTVData;   break;
-@@ -3452,7 +3551,7 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr, 
-       case  4:  TVPtr = SiS_Pr->SiS_ExtNTSCData;   break;
-       case  8:  TVPtr = SiS_Pr->SiS_StPALData;     break;
-       case  9:  TVPtr = SiS_Pr->SiS_StNTSCData;    break;
--      default:  TVPtr = SiS_Pr->SiS_StPALData;     break;  /* TW: Just to avoid a crash */
-+      default:  TVPtr = SiS_Pr->SiS_StPALData;     break;  /* Just to avoid a crash */
-     }
-     SiS_Pr->SiS_RVBHCMAX  = (TVPtr+ResIndex)->RVBHCMAX;
-@@ -3464,18 +3563,16 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr, 
-     SiS_Pr->SiS_RVBHRS    = (TVPtr+ResIndex)->RVBHRS;
-     SiS_Pr->SiS_NewFlickerMode = (TVPtr+ResIndex)->FlickerMode;
-     if(modeflag & HalfDCLK) {
--      SiS_Pr->SiS_RVBHRS    = (TVPtr+ResIndex)->HALFRVBHRS;
-+      SiS_Pr->SiS_RVBHRS     = (TVPtr+ResIndex)->HALFRVBHRS;
-     }
-     if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {  
-     
-        if(SiS_Pr->SiS_HiVision != 3) {
--       
--                if(resinfo == 0x08) SiS_Pr->SiS_NewFlickerMode = 0x40;
--                if(resinfo == 0x09) SiS_Pr->SiS_NewFlickerMode = 0x40;
--        if(resinfo == 0x12) SiS_Pr->SiS_NewFlickerMode = 0x40;
--        
--       } 
-+                if(resinfo == SIS_RI_1024x768)  SiS_Pr->SiS_NewFlickerMode = 0x40;
-+                if(resinfo == SIS_RI_1280x1024) SiS_Pr->SiS_NewFlickerMode = 0x40;
-+        if(resinfo == SIS_RI_1280x720)  SiS_Pr->SiS_NewFlickerMode = 0x40;
-+       }
-        
-        switch(SiS_Pr->SiS_HiVision) {
-        case 2:
-@@ -3504,119 +3601,127 @@ SiS_GetCRT2Data301(SiS_Private *SiS_Pr, 
-     } else {
--      SiS_Pr->SiS_RY1COE = (TVPtr+ResIndex)->RY1COE;
--      SiS_Pr->SiS_RY2COE = (TVPtr+ResIndex)->RY2COE;
--      SiS_Pr->SiS_RY3COE = (TVPtr+ResIndex)->RY3COE;
--      SiS_Pr->SiS_RY4COE = (TVPtr+ResIndex)->RY4COE;
--
--      if(modeflag & HalfDCLK) {
--         SiS_Pr->SiS_RY1COE = 0x00;
--         SiS_Pr->SiS_RY2COE = 0xf4;
--         SiS_Pr->SiS_RY3COE = 0x10;
--         SiS_Pr->SiS_RY4COE = 0x38;
--      }
--
--      if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--        SiS_Pr->SiS_HT = NTSCHT;
--      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {  
--         if((ModeNo == 0x4a) || (ModeNo == 0x38)) SiS_Pr->SiS_HT = NTSC2HT;
--      }  
--        SiS_Pr->SiS_VT = NTSCVT;
--      } else {
--        SiS_Pr->SiS_HT = PALHT;
--        SiS_Pr->SiS_VT = PALVT;
--      }
-+       SiS_Pr->SiS_RY1COE = (TVPtr+ResIndex)->RY1COE;
-+       SiS_Pr->SiS_RY2COE = (TVPtr+ResIndex)->RY2COE;
-+       SiS_Pr->SiS_RY3COE = (TVPtr+ResIndex)->RY3COE;
-+       SiS_Pr->SiS_RY4COE = (TVPtr+ResIndex)->RY4COE;
-+
-+       if(modeflag & HalfDCLK) {
-+          SiS_Pr->SiS_RY1COE = 0x00;
-+          SiS_Pr->SiS_RY2COE = 0xf4;
-+          SiS_Pr->SiS_RY3COE = 0x10;
-+          SiS_Pr->SiS_RY4COE = 0x38;
-+       }
-+
-+       if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+          SiS_Pr->SiS_HT = NTSCHT;
-+        if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+           if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) SiS_Pr->SiS_HT = NTSC2HT;
-+        }
-+          SiS_Pr->SiS_VT = NTSCVT;
-+       } else {
-+          SiS_Pr->SiS_HT = PALHT;
-+          SiS_Pr->SiS_VT = PALVT;
-+       }
-     }
--    return;
--  }
-+  } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+
-+     if(SiS_Pr->UseCustomMode) {
--  /* TW: For LCD */
-+        SiS_Pr->SiS_RVBHCMAX  = 1;
-+        SiS_Pr->SiS_RVBHCFACT = 1;
-+        SiS_Pr->SiS_VGAHT     = SiS_Pr->CHTotal;
-+        SiS_Pr->SiS_VGAVT     = SiS_Pr->CVTotal;
-+        SiS_Pr->SiS_HT        = SiS_Pr->CHTotal;
-+        SiS_Pr->SiS_VT        = SiS_Pr->CVTotal;
-+      SiS_Pr->SiS_HDE       = SiS_Pr->SiS_VGAHDE;
-+        SiS_Pr->SiS_VDE       = SiS_Pr->SiS_VGAVDE;
--  if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+     } else {
--    SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
--                   &CRT2Index,&ResIndex,HwDeviceExtension);
-+        SiS_GetCRT2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+                      &CRT2Index,&ResIndex,HwDeviceExtension);
-+
-+        switch(CRT2Index) {
-+         case  0: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data;        break; /* VESA Timing */
-+         case  1: LCDPtr = SiS_Pr->SiS_ExtLCD1280x1024Data;       break; /* VESA Timing */
-+         case  5: LCDPtr = SiS_Pr->SiS_StLCD1024x768Data;         break; /* Obviously unused */
-+         case  6: LCDPtr = SiS_Pr->SiS_StLCD1280x1024Data;        break; /* Obviously unused */
-+         case 10: LCDPtr = SiS_Pr->SiS_St2LCD1024x768Data;        break; /* Non-VESA Timing */
-+         case 11: LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data;       break; /* Non-VESA Timing */
-+         case 13: LCDPtr = SiS_Pr->SiS_NoScaleData1024x768;       break; /* Non-expanding */
-+         case 14: LCDPtr = SiS_Pr->SiS_NoScaleData1280x1024;      break; /* Non-expanding */
-+         case 15: LCDPtr = SiS_Pr->SiS_LCD1280x960Data;           break; /* 1280x960 */
-+         case 20: LCDPtr = SiS_Pr->SiS_ExtLCD1400x1050Data;       break; /* VESA Timing */
-+         case 21: LCDPtr = SiS_Pr->SiS_NoScaleData1400x1050;      break; /* Non-expanding (let panel scale) */
-+         case 22: LCDPtr = SiS_Pr->SiS_StLCD1400x1050Data;        break; /* Non-VESA Timing (let panel scale) */
-+         case 23: LCDPtr = SiS_Pr->SiS_ExtLCD1600x1200Data;       break; /* VESA Timing */
-+         case 24: LCDPtr = SiS_Pr->SiS_NoScaleData1600x1200;      break; /* Non-expanding */
-+         case 25: LCDPtr = SiS_Pr->SiS_StLCD1600x1200Data;        break; /* Non-VESA Timing */
-+         case 26: LCDPtr = SiS_Pr->SiS_ExtLCD1280x768Data;        break; /* VESA Timing */
-+         case 27: LCDPtr = SiS_Pr->SiS_NoScaleData1280x768;       break; /* Non-expanding */
-+         case 28: LCDPtr = SiS_Pr->SiS_StLCD1280x768Data;         break; /* Non-VESA Timing */
-+         case 29: LCDPtr = SiS_Pr->SiS_NoScaleData;             break; /* Generic no-scale data */
-+         default: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data;      break; /* Just to avoid a crash */
-+        }
-+
-+        SiS_Pr->SiS_RVBHCMAX  = (LCDPtr+ResIndex)->RVBHCMAX;
-+        SiS_Pr->SiS_RVBHCFACT = (LCDPtr+ResIndex)->RVBHCFACT;
-+        SiS_Pr->SiS_VGAHT     = (LCDPtr+ResIndex)->VGAHT;
-+        SiS_Pr->SiS_VGAVT     = (LCDPtr+ResIndex)->VGAVT;
-+        SiS_Pr->SiS_HT        = (LCDPtr+ResIndex)->LCDHT;
-+        SiS_Pr->SiS_VT        = (LCDPtr+ResIndex)->LCDVT;
--    switch (CRT2Index) {
--      case  0: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data;        break; /* VESA Timing */
--      case  1: LCDPtr = SiS_Pr->SiS_ExtLCD1280x1024Data;       break; /* VESA Timing */
--      case  5: LCDPtr = SiS_Pr->SiS_StLCD1024x768Data;         break; /* Obviously unused */
--      case  6: LCDPtr = SiS_Pr->SiS_StLCD1280x1024Data;        break; /* Obviously unused */
--      case 10: LCDPtr = SiS_Pr->SiS_St2LCD1024x768Data;        break; /* Non-VESA Timing */
--      case 11: LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data;       break; /* Non-VESA Timing */
--      case 13: LCDPtr = SiS_Pr->SiS_NoScaleData1024x768;       break; /* Non-expanding */
--      case 14: LCDPtr = SiS_Pr->SiS_NoScaleData1280x1024;      break; /* Non-expanding */
--      case 15: LCDPtr = SiS_Pr->SiS_LCD1280x960Data;           break; /* 1280x960 */
--      case 20: LCDPtr = SiS_Pr->SiS_ExtLCD1400x1050Data;       break; /* VESA Timing */
--      case 21: LCDPtr = SiS_Pr->SiS_NoScaleData1400x1050;      break; /* Non-expanding (let panel scale) */
--      case 22: LCDPtr = SiS_Pr->SiS_StLCD1400x1050Data;              break; /* Non-VESA Timing (let panel scale) */
--      case 23: LCDPtr = SiS_Pr->SiS_ExtLCD1600x1200Data;       break; /* VESA Timing */
--      case 24: LCDPtr = SiS_Pr->SiS_NoScaleData1600x1200;      break; /* Non-expanding */
--      case 25: LCDPtr = SiS_Pr->SiS_StLCD1600x1200Data;              break; /* Non-VESA Timing */
--      default: LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data;              break; /* Just to avoid a crash */
--    }
--
--    SiS_Pr->SiS_RVBHCMAX  = (LCDPtr+ResIndex)->RVBHCMAX;
--    SiS_Pr->SiS_RVBHCFACT = (LCDPtr+ResIndex)->RVBHCFACT;
--    SiS_Pr->SiS_VGAHT     = (LCDPtr+ResIndex)->VGAHT;
--    SiS_Pr->SiS_VGAVT     = (LCDPtr+ResIndex)->VGAVT;
--    SiS_Pr->SiS_HT        = (LCDPtr+ResIndex)->LCDHT;
--    SiS_Pr->SiS_VT        = (LCDPtr+ResIndex)->LCDVT;
--    
- #ifdef TWDEBUG
--    xf86DrvMsg(0, X_INFO,
--      "GetCRT2Data: Index %d ResIndex %d\n", CRT2Index, ResIndex);
--#endif    
-+        xf86DrvMsg(0, X_INFO,
-+          "GetCRT2Data: Index %d ResIndex %d\n", CRT2Index, ResIndex);
-+#endif
--    tempax = 1024;
--    if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
--      if(HwDeviceExtension->jChipType < SIS_315H) {
--         if     (SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
--         else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
--         else                               tempbx = 768;
--      } else {      
--         tempbx = 768; 
--      }
--    } else {
--      if     (SiS_Pr->SiS_VGAVDE == 357) tempbx = 527;
--      else if(SiS_Pr->SiS_VGAVDE == 420) tempbx = 620;
--      else if(SiS_Pr->SiS_VGAVDE == 525) tempbx = 775;
--      else if(SiS_Pr->SiS_VGAVDE == 600) tempbx = 775;
--      else if(SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
--      else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
--      else                               tempbx = 768;
--    }
--    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--      tempax = 1280;
--      if     (SiS_Pr->SiS_VGAVDE == 360) tempbx = 768;
--      else if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 800;
--      else if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 864;
--      else                               tempbx = 1024;
--    }
--    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
--      tempax = 1280;
--      if     (SiS_Pr->SiS_VGAVDE == 350)  tempbx = 700;
--      else if(SiS_Pr->SiS_VGAVDE == 400)  tempbx = 800;
--      else if(SiS_Pr->SiS_VGAVDE == 1024) tempbx = 960;
--      else                                tempbx = 960;
--    }
--    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
--      tempax = 1400;
--      tempbx = 1050;
--    }
--    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
--      tempax = 1600;
--      tempbx = 1200;
--    }
--    if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
--       tempax = SiS_Pr->SiS_VGAHDE;
--       tempbx = SiS_Pr->SiS_VGAVDE;
--    }
--    SiS_Pr->SiS_HDE = tempax;
--    SiS_Pr->SiS_VDE = tempbx;
--    return;
-+      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+           tempax = 1024;
-+           if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
-+              if(HwDeviceExtension->jChipType < SIS_315H) {
-+                 if     (SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
-+                 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
-+                 else                               tempbx = 768;
-+              } else {
-+                 tempbx = 768;
-+              }
-+           } else {
-+              if     (SiS_Pr->SiS_VGAVDE == 357) tempbx = 527;
-+              else if(SiS_Pr->SiS_VGAVDE == 420) tempbx = 620;
-+              else if(SiS_Pr->SiS_VGAVDE == 525) tempbx = 775;
-+              else if(SiS_Pr->SiS_VGAVDE == 600) tempbx = 775;
-+              else if(SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
-+              else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
-+              else                               tempbx = 768;
-+           }
-+      } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+           tempax = 1280;
-+           if     (SiS_Pr->SiS_VGAVDE == 360) tempbx = 768;
-+           else if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 800;
-+           else if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 864;
-+           else                               tempbx = 1024;
-+        } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-+           tempax = 1280;
-+           if     (SiS_Pr->SiS_VGAVDE == 350)  tempbx = 700;
-+           else if(SiS_Pr->SiS_VGAVDE == 400)  tempbx = 800;
-+           else if(SiS_Pr->SiS_VGAVDE == 1024) tempbx = 960;
-+           else                                tempbx = 960;
-+        } else {
-+         tempax = SiS_Pr->PanelXRes;
-+           tempbx = SiS_Pr->PanelYRes;
-+      }
-+        if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-+           tempax = SiS_Pr->SiS_VGAHDE;
-+           tempbx = SiS_Pr->SiS_VGAVDE;
-+        }
-+        SiS_Pr->SiS_HDE = tempax;
-+        SiS_Pr->SiS_VDE = tempbx;
-+        return;
-+     }
-   }
- }
-@@ -3626,9 +3731,9 @@ SiS_GetResInfo(SiS_Private *SiS_Pr, UCHA
-   USHORT resindex;
-   if(ModeNo <= 0x13)
--      resindex=SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+     resindex=SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-   else
--      resindex=SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+     resindex=SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-   return(resindex);
- }
-@@ -3639,41 +3744,46 @@ SiS_GetCRT2ResInfo(SiS_Private *SiS_Pr, 
- {
-   USHORT xres,yres,modeflag=0,resindex;
-+  if(SiS_Pr->UseCustomMode) {
-+     SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = SiS_Pr->CHDisplay;
-+     SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = SiS_Pr->CVDisplay;
-+     return;
-+  }
-+
-   resindex = SiS_GetResInfo(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex);
-   if(ModeNo <= 0x13) {
--      xres = SiS_Pr->SiS_StResInfo[resindex].HTotal;
--      yres = SiS_Pr->SiS_StResInfo[resindex].VTotal;
-+     xres = SiS_Pr->SiS_StResInfo[resindex].HTotal;
-+     yres = SiS_Pr->SiS_StResInfo[resindex].VTotal;
-   } else {
--      xres = SiS_Pr->SiS_ModeResInfo[resindex].HTotal;
--      yres = SiS_Pr->SiS_ModeResInfo[resindex].VTotal;
--      modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+     xres = SiS_Pr->SiS_ModeResInfo[resindex].HTotal;
-+     yres = SiS_Pr->SiS_ModeResInfo[resindex].VTotal;
-+     modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-   }
--  if((HwDeviceExtension->jChipType >= SIS_315H) && (SiS_Pr->SiS_IF_DEF_LVDS == 1)) {
--      if((ModeNo != 0x03) && (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
--          if(yres == 350) yres = 400;
--      }
--      if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x3a) & 0x01) {
--        if(ModeNo == 0x12) yres = 400;
--      }
--  }
-+  if((!SiS_Pr->SiS_IF_DEF_DSTN) && (!SiS_Pr->SiS_IF_DEF_FSTN)) {
-+
-+     if((HwDeviceExtension->jChipType >= SIS_315H) && (SiS_Pr->SiS_IF_DEF_LVDS == 1)) {
-+        if((ModeNo != 0x03) && (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
-+           if(yres == 350) yres = 400;
-+        }
-+        if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x3a) & 0x01) {
-+         if(ModeNo == 0x12) yres = 400;
-+        }
-+     }
-+
-+     if(ModeNo > 0x13) {
-+      if(modeflag & HalfDCLK)       xres *= 2;
-+      if(modeflag & DoubleScanMode) yres *= 2;
-+     }
--  if(ModeNo > 0x13) {
--      if(SiS_Pr->SiS_IF_DEF_FSTN == 1){
--            xres *= 2;
--            yres *= 2;
--      } else {
--          if(modeflag & HalfDCLK)       xres *= 2;
--          if(modeflag & DoubleScanMode) yres *= 2;
--      }
-   }
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-         if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-            if(xres == 720) xres = 640;
-       } else {
--         if(SiS_Pr->SiS_VBType & VB_NoLCD) {           /* TW: 301BDH */
-+         if(SiS_Pr->SiS_VBType & VB_NoLCD) {           /* 301BDH */
-               if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-                    if(xres == 720) xres = 640;
-               }
-@@ -3694,9 +3804,8 @@ SiS_GetCRT2ResInfo(SiS_Private *SiS_Pr, 
-                if(xres == 720) xres = 640;
-             }
-             if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--               if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+               if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-                   if(ModeNo <= 0x13) {
--                     /* TW: This is wrong for 640x400 *graphics* mode */
-                              if(yres == 400) yres = 405;
-                   }
-                           if(yres == 350) yres = 360;
-@@ -3719,12 +3828,15 @@ SiS_GetCRT2ResInfo(SiS_Private *SiS_Pr, 
-   } else {
-       if(xres == 720) xres = 640;
-       if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
--            yres = 400;
--            if(HwDeviceExtension->jChipType >= SIS_315H) {
--                if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x80) yres = 480;
--            } else {
--                if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80) yres = 480;
--            }
-+         yres = 400;
-+         if(HwDeviceExtension->jChipType >= SIS_315H) {
-+            if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x80) yres = 480;
-+         } else {
-+            if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80) yres = 480;
-+         }
-+         if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) {
-+            yres = 480;
-+         }
-       }
-   }
-   SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
-@@ -3739,6 +3851,13 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-   USHORT tempbx=0,tempal=0;
-   USHORT Flag,resinfo=0;
-+  if(ModeNo <= 0x13) {
-+     tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+  } else {
-+     tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-+     resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+  }
-+
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-       if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {                            /* LCD */
-@@ -3753,15 +3872,32 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-                       tempbx = 23;
-                       if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)         tempbx = 24;
-                       else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx = 25;
-+#if 0
-+              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+                      tempbx = 26;
-+                      if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)         tempbx = 27;
-+                      else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx = 28;
-+#endif
-               } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
--                      tempbx = 13;
--                      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx++;
-+                      if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+                         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)       tempbx = 13;
-+                         else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx = 14;
-+                         else                                                          tempbx = 29;
-+                      } else {
-+                         tempbx = 29;
-+                         if(ModeNo >= 0x13) {
-+                            /* 1280x768 and 1280x960 have same CRT2CRTC,
-+                             * so we change it here if 1280x960 is chosen
-+                             */
-+                            if(resinfo == SIS_RI_1280x960) tempal = 10;
-+                         }
-+                      }
-               } else {
-                          tempbx = SiS_Pr->SiS_LCDResInfo - SiS_Pr->SiS_Panel1024x768;
-                          if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
-                       tempbx += 5;
-                         /* GetRevisionID();  */
--                      /* TW: BIOS only adds 5 once */
-+                      /* BIOS only adds 5 once */
-                       tempbx += 5;
-                          }
-               }
-@@ -3783,34 +3919,18 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-               
-       }
--      if(ModeNo <= 0x13) {
--                      tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
--      } else {
--                      tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
--              resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
--        }
--
--      tempal &= 0x3F;
--
--              if((SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) &&
--           (SiS_Pr->SiS_VBInfo & (SetCRT2ToTV-SetCRT2ToHiVisionTV))) {
--                      if(tempal == 0x06) tempal = 0x07;
--        }
--
--      /* TW: 300/301LV BIOS */
--      if((HwDeviceExtension->jChipType == SIS_300) &&
--         (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
--          if(ModeNo > 0x13) {
--              if((resinfo == 0x0c) || (resinfo == 0x0d))  /* 720 (index diff. on 310/325!) */
--                  tempal = 6;
--          }
--      }
-+        tempal &= 0x3F;
--      if(HwDeviceExtension->jChipType != SIS_300) {
--           if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--              if((ModeNo == 0x31) || (ModeNo == 0x32)) tempal = 6;
-+              if(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) {
-+         if(ModeNo > 0x13) {
-+                    if(tempal == 6) tempal = 7;
-+              if((resinfo == SIS_RI_720x480) ||
-+               (resinfo == SIS_RI_720x576) ||
-+               (resinfo == SIS_RI_768x576)) {
-+               tempal = 6;
-+            }
-          }
--      }
-+        }
-       *CRT2Index = tempbx;
-       *ResIndex = tempal;
-@@ -3820,25 +3940,22 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-       Flag = 1;
-       tempbx = 0;
-       if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
--      
--                      if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
--                      Flag = 0;
--                      tempbx = 10;
--                      if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
--                      if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--                              tempbx += 2;
--                              if(SiS_Pr->SiS_CHSOverScan) tempbx = 99;
--                              if(SiS_Pr->SiS_CHPALM) {
--                                      tempbx = 90;
--                                      if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
--                              } else if(SiS_Pr->SiS_CHPALN) {
--                                      tempbx = 92;
--                                      if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
--                              }
--                              
--                      }
--                      }
--              
-+                 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-+              Flag = 0;
-+              tempbx = 10;
-+            if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-+              if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-+               tempbx += 2;
-+               if(SiS_Pr->SiS_CHSOverScan) tempbx = 99;
-+               if(SiS_Pr->SiS_CHPALM) {
-+                  tempbx = 90;
-+                  if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-+               } else if(SiS_Pr->SiS_CHPALN) {
-+                  tempbx = 92;
-+                  if(SiS_Pr->SiS_VBInfo & SetCHTVOverScan) tempbx += 1;
-+               }
-+              }
-+           }
-       }
-       if(Flag) {
-@@ -3846,11 +3963,19 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-               if(SiS_Pr->SiS_LCDResInfo <= SiS_Pr->SiS_Panel1280x1024) {
-                  tempbx = SiS_Pr->SiS_LCDResInfo - SiS_Pr->SiS_PanelMinLVDS;
-                  if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)  tempbx += 3;
-+                 if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+                    tempbx = 82;
-+                    if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)  tempbx++;
-+                 }
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-                  tempbx = 18;
-                  if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)  tempbx++; 
--              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) { 
-+              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-                  tempbx = 6;
-+              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2) {
-+                 tempbx = 30;
-+              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+                 tempbx = 30;
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
-                  tempbx = 15;
-                  if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)  tempbx += 2;
-@@ -3863,27 +3988,25 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-                  tempbx = 21;
-                  if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)  tempbx++;
-+              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelBarco1366) {
-+                 tempbx = 80;
-+                 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)  tempbx++;
-               }
--              
-+
-               if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
-                  tempbx = 7;
-               }
-               
-       }
--      if(ModeNo <= 0x13)
--                      tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
--      else {
--                      tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
--              resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
--      }
--
-+#if 0
-       if(SiS_Pr->SiS_IF_DEF_FSTN){
-                       if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel320x480){
-                       tempbx = 14;
-                       tempal = 6;
-               }
-       }
-+#endif        
-       if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
-               if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) tempal = 7;
-@@ -3895,13 +4018,10 @@ SiS_GetCRT2Ptr(SiS_Private *SiS_Pr, UCHA
-       if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-           if(ModeNo > 0x13) {
--              if(HwDeviceExtension->jChipType < SIS_315H) {
--                 if((resinfo == 0x0c) || (resinfo == 0x0d))  /* 720 */
--                     tempal = 6;
--              } else {
--                 if((resinfo == 0x0d) || (resinfo == 0x0e))  /* 720 */
--                     tempal = 6;
--              }
-+             if((resinfo == SIS_RI_720x480) ||
-+                (resinfo == SIS_RI_720x576) ||
-+                (resinfo == SIS_RI_768x576))
-+                tempal = 6;
-           }
-       }
-@@ -3969,8 +4089,9 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr, 
-   USHORT RefreshRateTableIndex,i,backup_i;
-   USHORT modeflag,index,temp,backupindex;
--  if(SiS_Pr->UseCustomMode) return 0;
--  
-+  /* Do NOT check for UseCustomMode here, will skrew up FIFO */
-+  if(ModeNo == 0xfe) return 0;
-+
-   if(ModeNo <= 0x13)
-       modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-   else
-@@ -3984,7 +4105,7 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr, 
-   if(ModeNo < 0x14) return(0xFFFF);
-- /* TW: CR33 holds refresh rate index for CRT1 [3:0] and CRT2 [7:4].
-+ /* CR33 holds refresh rate index for CRT1 [3:0] and CRT2 [7:4].
-   *     On LVDS machines, CRT2 index is always 0 and will be
-   *     set to 0 by the following code; this causes the function
-   *     to take the first non-interlaced mode in SiS_Ext2Struct
-@@ -3998,40 +4119,38 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr, 
-   if(index > 0) index--;
-   if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
--      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-+     if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-         if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))  index = 0;
--      } else {
-+     } else {
-         if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--          if(SiS_Pr->SiS_VBType & VB_NoLCD)
--                  index = 0;
--          else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)
--                  index = backupindex = 0;
-+         if(SiS_Pr->SiS_VBType & VB_NoLCD)
-+            index = 0;
-+         else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)
-+            index = backupindex = 0;
-       }
--      }
--  }
-+     }
--  if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
--      if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
--                      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--                      index = 0;
--                      }
--      }
--      if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
--                      if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--                      if(!(SiS_Pr->SiS_VBType & VB_NoLCD)) {
--                         temp = LCDRefreshIndex[SiS_Pr->SiS_LCDResInfo];
--                         if(index > temp) index = temp;
--                      }
--                      } else {
--                      index = 0;
--                      }
--      }
-+     if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-+        if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+           index = 0;
-+        }
-+     }
-+     if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-+        if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+         if(!(SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+              temp = LCDRefreshIndex[SiS_Pr->SiS_LCDResInfo];
-+              if(index > temp) index = temp;
-+         }
-+              } else {
-+           index = 0;
-+              }
-+     }
-   }
-   RefreshRateTableIndex = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
-   ModeNo = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].ModeID;
--  /* TW: 650/LVDS 1.10.07, 650/30xLV 1.10.6s */
-+  /* 650/LVDS 1.10.07, 650/30xLV 1.10.6s */
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
-      if(!(SiS_Pr->SiS_VBInfo & DriverMode)) {
-         if( (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x105) ||
-@@ -4066,7 +4185,7 @@ SiS_GetRatePtrCRT2(SiS_Private *SiS_Pr, 
-       backup_i = i;
-       if (!(SiS_AdjustCRT2Rate(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
-                                    RefreshRateTableIndex,&i,HwDeviceExtension))) {
--              /* TW: This is for avoiding random data to be used; i is
-+              /* This is for avoiding random data to be used; i is
-                *     in an undefined state if no matching CRT2 mode is
-                *     found.
-                */
-@@ -4085,196 +4204,199 @@ SiS_AdjustCRT2Rate(SiS_Private *SiS_Pr, 
-   USHORT tempax,tempbx,resinfo;
-   USHORT modeflag,infoflag;
--  if (ModeNo <= 0x13)
-+  if(ModeNo <= 0x13) {
-       modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
--  else
-+      resinfo = 0;
-+  } else {
-       modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+        resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+  }
--  resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-   tempbx = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex + (*i)].ModeID;
-   tempax = 0;
-+
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+
-       if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
-                       tempax |= SupportRAMDAC2;
-               if(HwDeviceExtension->jChipType >= SIS_315H) {
--                  tempax |= SupportTV;
--                  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--                      if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                          if(resinfo == 0x0a) tempax |= SupportTV1024;
--                      }
--                  }
-+                 tempax |= SupportTV;
-+                 if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+                    if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                       if(resinfo == SIS_RI_1600x1200) tempax |= SupportTV1024;
-+                    }
-+                 }
-               }
--      }
--      if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-+      } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-                       tempax |= SupportLCD;
-               if(HwDeviceExtension->jChipType >= SIS_315H) {
-                    if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1600x1200) {
-                     if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1400x1050) {
--                       if((resinfo == 6) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-+                       if((resinfo == SIS_RI_640x480) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-                           (*i) = 0;
-                             return(1);
-                        } else {
-                                   if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) {
--                            if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
--                              if((resinfo == 6) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
--                                  return(0);
--                              } else {
--                                  if((resinfo >= 9) && (resinfo != 0x14)) {
-+                             if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960) {
-+                                if((resinfo == SIS_RI_640x480) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
-+                                   return(0);
-+                                } else {
-+                                   if((resinfo >= SIS_RI_1280x1024) && (resinfo != SIS_RI_1280x768)) {
-                                               return(0);
--                                  }
--                              }
--                            }
-+                                   }
-+                                }
-+                             }
-                           }
-                        }
-                     }
-                          }
-               } else {
-                 if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
--                   if((resinfo != 0x0f) && ((resinfo == 4) || (resinfo >= 8))) return(0);
-+                   if( (resinfo != SIS_RI_1024x600) &&
-+                       ((resinfo == SIS_RI_512x384) || (resinfo >= SIS_RI_1024x768))) return(0);
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
--                   if((resinfo != 0x10) && (resinfo > 8)) return(0);
-+                   if((resinfo != SIS_RI_1152x768) && (resinfo > SIS_RI_1024x768)) return(0);
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
--                   if((resinfo != 0x0e) && (resinfo > 8)) return(0);
-+                   if((resinfo != SIS_RI_1280x960) && (resinfo > SIS_RI_1024x768)) return(0);
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--                   if(resinfo > 9) return(0);
-+                   if(resinfo > SIS_RI_1280x1024) return(0);
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--                   if(resinfo > 8) return(0);
-+                   if(resinfo > SIS_RI_1024x768) return(0);
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
--                   if((resinfo == 4) || (resinfo > 7)) return(0);
-+                   if((resinfo == SIS_RI_512x384) || (resinfo > SIS_RI_800x600)) return(0);
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
--                   if((resinfo == 4) || (resinfo == 3) || (resinfo > 6)) return(0);
-+                   if((resinfo == SIS_RI_512x384) ||
-+                      (resinfo == SIS_RI_400x300) ||
-+                      (resinfo > SIS_RI_640x480)) return(0);
-                 }
-               }
--      }
--      if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) { 
-+      } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
-               if(SiS_Pr->SiS_HiVision == 3) {
-                       tempax |= SupportHiVisionTV2;
-                               if(SiS_Pr->SiS_VBInfo & SetInSlaveMode){
--                              if(resinfo == 4) return(0);
--                              if(resinfo == 3) return(0);
--                              if(resinfo == 7) {
-+                              if(resinfo == SIS_RI_512x384) return(0);
-+                              if(resinfo == SIS_RI_400x300) return(0);
-+                              if(resinfo == SIS_RI_800x600) {
-                                       if(SiS_Pr->SiS_SetFlag & TVSimuMode) return(0);
-                               }
--                              if(resinfo > 7) return(0);
-+                              if(resinfo > SIS_RI_800x600) return(0);
-                       }
-               } else {  
-                               tempax |= SupportHiVisionTV;
-                               if(SiS_Pr->SiS_VBInfo & SetInSlaveMode){
--                              if(resinfo == 4) return(0);
--                              if((resinfo == 3) || (resinfo == 7)) {
-+                              if(resinfo == SIS_RI_512x384) return(0);
-+                              if((resinfo == SIS_RI_400x300) || (resinfo == SIS_RI_800x600)) {
-                                       if(SiS_Pr->SiS_SetFlag & TVSimuMode) return(0);
-                               }
--                              if(resinfo > 7) return(0);
-+                              if(resinfo > SIS_RI_800x600) return(0);
-                       }
-               }
--      } else {
--                 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToAVIDEO|SetCRT2ToSVIDEO|SetCRT2ToSCART)) {
-+      } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToAVIDEO|SetCRT2ToSVIDEO|SetCRT2ToSCART)) {
-               tempax |= SupportTV;
-               tempax |= SupportTV1024;
-               if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--                  if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
--                      if((SiS_Pr->SiS_VBInfo & SetNotSimuMode) && (SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                           if(resinfo != 8) {
--                               if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
--                                   ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 4)) ) {
--                                   tempax &= ~(SupportTV1024);
--                                   if(HwDeviceExtension->jChipType >= SIS_315H) {
--                                         if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                                           if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
--                                               ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
--                                               if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
--                                           }
--                                       }
--                                   } else {
--                                       if( (resinfo != 3) ||
--                                           (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
--                                           (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
--                                           if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                                               if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                                                   if(resinfo == 3) return(0);
--                                                   if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
--                                               }
--                                           }
--                                         } else return(0);
--                                   }
--                               }
--                           }
--                      } else {
--                          tempax &= ~(SupportTV1024);
--                          if(HwDeviceExtension->jChipType >= SIS_315H) {
--                              if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                                  if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
--                                      ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
-+                 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+                    if((SiS_Pr->SiS_VBInfo & SetNotSimuMode) && (SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+                       if(resinfo != SIS_RI_1024x768) {
-+                          if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+                              ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_512x384)) ) {
-+                             tempax &= ~(SupportTV1024);
-+                             if(HwDeviceExtension->jChipType >= SIS_315H) {
-+                                  if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                                   if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+                                       ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
-                                       if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
--                                  }
--                              }
--                          } else {
--                              if( (resinfo != 3) ||
--                                  (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
--                                  (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
--                                   if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                                       if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                                           if(resinfo == 3) return(0);
--                                           if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
--                                       }
-                                    }
--                                } else return(0);
--                            }
--                      }
--                  } else {  /* slavemode */
--                      if(resinfo != 8) {
--                          if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
--                              ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 4) ) ) {
--                               tempax &= ~(SupportTV1024);
--                               if(HwDeviceExtension->jChipType >= SIS_315H) {
--                                   if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                                       if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
--                                           ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
--                                           if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode))  return(0);
--                                       }
-+                                }
-+                             } else {
-+                                if( (resinfo != SIS_RI_400x300) ||
-+                                    (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+                                    (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+                                   if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+                                      if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                                         if(resinfo == SIS_RI_400x300) return(0);
-+                                         if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+                                      }
-                                    }
--                              } else {
--                                  if( (resinfo != 3) ||
--                                      (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
--                                      (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
--                                       if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                                           if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                                               if(resinfo == 3) return(0);
--                                               if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
--                                           }
--                                       }
--                                    } else return(0);
--                              }
-+                                  } else return(0);
-+                             }
-                           }
--                      }
--                  }
--              } else {   /* 301 */
--                  tempax &= ~(SupportTV1024);
--                  if(HwDeviceExtension->jChipType >= SIS_315H) {
--                      if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                          if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
--                              ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != 7)) ) {
--                              if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
--                          }
--                      }
--                  } else {
--                      if( (resinfo != 3) ||
--                          (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
--                          (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
--                          if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                              if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--                                  if(resinfo == 3) return(0);
--                                  if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
--                              }
-+                       }
-+                    } else {
-+                       tempax &= ~(SupportTV1024);
-+                       if(HwDeviceExtension->jChipType >= SIS_315H) {
-+                          if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                             if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+                                 ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
-+                                if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-+                             }
-                           }
--                        } else return(0);
--                  }
--              }
--           }
--      }
--      
--  } else {    /* TW: for LVDS  */
-+                       } else {
-+                          if( (resinfo != SIS_RI_400x300) ||
-+                              (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+                              (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+                             if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+                                if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                                   if(resinfo == SIS_RI_400x300) return(0);
-+                                   if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+                                }
-+                             }
-+                            } else return(0);
-+                         }
-+                    }
-+                 } else {  /* slavemode */
-+                    if(resinfo != SIS_RI_1024x768) {
-+                       if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+                           ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_512x384) ) ) {
-+                          tempax &= ~(SupportTV1024);
-+                          if(HwDeviceExtension->jChipType >= SIS_315H) {
-+                             if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                                if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+                                    ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
-+                                   if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode))  return(0);
-+                                }
-+                             }
-+                          } else {
-+                             if( (resinfo != SIS_RI_400x300) ||
-+                                 (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+                                 (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+                                if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+                                   if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                                      if(resinfo == SIS_RI_400x300) return(0);
-+                                      if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+                                   }
-+                                }
-+                               } else return(0);
-+                          }
-+                       }
-+                    }
-+                 }
-+              } else {   /* 301 */
-+                 tempax &= ~(SupportTV1024);
-+                 if(HwDeviceExtension->jChipType >= SIS_315H) {
-+                    if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                       if( (!(SiS_Pr->SiS_VBInfo & SetPALTV)) ||
-+                           ((SiS_Pr->SiS_VBInfo & SetPALTV) && (resinfo != SIS_RI_800x600)) ) {
-+                          if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return(0);
-+                       }
-+                    }
-+                 } else {
-+                    if( (resinfo != SIS_RI_400x300) ||
-+                        (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+                        (SiS_Pr->SiS_VBInfo & SetNotSimuMode) ) {
-+                       if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+                          if((modeflag & NoSupportSimuTV) && (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+                             if(resinfo == SIS_RI_400x300) return(0);
-+                             if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) return (0);
-+                          }
-+                       }
-+                      } else return(0);
-+                 }
-+              }
-+        }
-+
-+  } else {    /* for LVDS  */
-       if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-                       if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-@@ -4284,24 +4406,29 @@ SiS_AdjustCRT2Rate(SiS_Private *SiS_Pr, 
-       if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-                       tempax |= SupportLCD;
-               if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
--                   if((resinfo != 0x14) && (resinfo > 0x09)) return(0);
-+                   if((resinfo != SIS_RI_1280x768) && (resinfo >= SIS_RI_1280x1024)) return(0);
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
--                   if((resinfo != 0x0f) && (resinfo > 0x08)) return(0);
-+                   if((resinfo != SIS_RI_1024x600) && (resinfo >= SIS_RI_1024x768))  return(0);
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
--                   if((resinfo != 0x10) && (resinfo > 0x08)) return(0);
-+                   if((resinfo != SIS_RI_1152x768) && (resinfo > SIS_RI_1024x768))   return(0);
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
--                   if((resinfo != 0x15) && (resinfo > 0x09)) return(0);
-+                   if((resinfo != SIS_RI_1400x1050) && (resinfo > SIS_RI_1280x1024)) return(0);
-+              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+                     if(resinfo > SIS_RI_1600x1200) return(0);
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--                     if(resinfo > 0x09) return(0);
-+                     if(resinfo > SIS_RI_1280x1024) return(0);
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--                   if(resinfo > 0x08) return(0);
-+                   if(resinfo > SIS_RI_1024x768)  return(0);
-               } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600){
--                   if(resinfo > 0x07) return(0);
--                   if(resinfo == 0x04) return(0);
-+                   if(resinfo > SIS_RI_800x600)   return(0);
-+                   if(resinfo == SIS_RI_512x384)  return(0);
-+              } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelBarco1366) {
-+                     if((resinfo != SIS_RI_1360x1024) && (resinfo > SIS_RI_1280x1024)) return(0);
-               }
-       }
-   }
--  /* TW: Look backwards in table for matching CRT2 mode */
-+  
-+  /* Look backwards in table for matching CRT2 mode */
-   for(; SiS_Pr->SiS_RefIndex[RefreshRateTableIndex+(*i)].ModeID == tempbx; (*i)--) {
-       infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex + (*i)].Ext_InfoFlag;
-       if(infoflag & tempax) {
-@@ -4309,7 +4436,7 @@ SiS_AdjustCRT2Rate(SiS_Private *SiS_Pr, 
-       }
-       if ((*i) == 0) break;
-   }
--  /* TW: Look through the whole mode-section of the table from the beginning
-+  /* Look through the whole mode-section of the table from the beginning
-    *     for a matching CRT2 mode if no mode was found yet.
-    */
-   for((*i) = 0; ; (*i)++) {
-@@ -4329,7 +4456,7 @@ SiS_SaveCRT2Info(SiS_Private *SiS_Pr, US
- {
-   USHORT temp1,temp2;
--  /* TW: We store CRT1 ModeNo in CR34 */
-+  /* We store CRT1 ModeNo in CR34 */
-   SiS_SetReg1(SiS_Pr->SiS_P3d4,0x34,ModeNo);
-   temp1 = (SiS_Pr->SiS_VBInfo & SetInSlaveMode) >> 8;
-   temp2 = ~(SetInSlaveMode >> 8);
-@@ -4345,16 +4472,16 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-   USHORT modeflag, resinfo=0;
-   UCHAR  OutputSelect = *SiS_Pr->pSiS_OutputSelect;
--  if(SiS_Pr->UseCustomMode) {
--        modeflag = SiS_Pr->CModeFlag;
-+  if(ModeNo <= 0x13) {
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-   } else {
--    if (ModeNo <= 0x13)
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
--    else {
-+     if(SiS_Pr->UseCustomMode) {
-+        modeflag = SiS_Pr->CModeFlag;
-+     } else {
-       modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-       resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
--    }
--  }    
-+     }
-+  }
-   SiS_Pr->SiS_SetFlag = 0;
-@@ -4364,22 +4491,24 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-   if(SiS_BridgeIsOn(SiS_Pr,BaseAddr,HwDeviceExtension) == 0) {  
-       temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x30);
- #if 0 
--      /* SiS_HiVision is only used on 310/325/330+30xLV */
-+      /* SiS_HiVision is only used on 315/330+30xLV */
-       if(SiS_Pr->SiS_VBType & (VB_SIS301LV302LV)) {
--         if(SiS_Pr->SiS_HiVision & 0x03) {    /* TW: New from 650/30xLV 1.10.6s */
-+         if(SiS_Pr->SiS_HiVision & 0x03) {    /* New from 650/30xLV 1.10.6s */
-             temp &= (SetCRT2ToHiVisionTV | SwitchToCRT2 | SetSimuScanMode);   /* 0x83 */
-             temp |= SetCRT2ToHiVisionTV;                                      /* 0x80 */
-          }
--         if(SiS_Pr->SiS_HiVision & 0x04) {    /* TW: New from 650/30xLV 1.10.6s */
-+         if(SiS_Pr->SiS_HiVision & 0x04) {    /* New from 650/30xLV 1.10.6s */
-             temp &= (SetCRT2ToHiVisionTV | SwitchToCRT2 | SetSimuScanMode);   /* 0x83 */
-             temp |= SetCRT2ToSVIDEO;                                          /* 0x08 */
-          }
-       }
--#endif        
-+#endif
-+#if 0
-       if(SiS_Pr->SiS_IF_DEF_FSTN) {   /* fstn must set CR30=0x21 */
-                       temp = (SetCRT2ToLCD | SetSimuScanMode);
-                       SiS_SetReg1(SiS_Pr->SiS_P3d4,0x30,temp);
-       }
-+#endif        
-       tempbx |= temp;
-       tempax = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) << 8;
-         tempax &= (LoadDACFlag | DriverMode | SetDispDevSwitch | SetNotSimuMode | SetPALTV);
-@@ -4519,7 +4648,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-                       tempbx |= SetSimuScanMode;
-       }
--      /* TW: LVDS (LCD/TV) and 301BDH (LCD) can only be slave in 8bpp modes */
-+      /* LVDS (LCD/TV) and 301BDH (LCD) can only be slave in 8bpp modes */
-       if(SiS_Pr->SiS_ModeType <= ModeVGA) {
-          if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
-              ((tempbx & SetCRT2ToLCD) && (SiS_Pr->SiS_VBType & VB_NoLCD)) ) {
-@@ -4527,12 +4656,12 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-          }
-       }
-       
--      if(!(tempbx & SetSimuScanMode)){
-+      if(!(tempbx & SetSimuScanMode)) {
-                   if(tempbx & SwitchToCRT2) {
-               if((!(modeflag & CRT2Mode)) && (checkcrt2mode)) {
-                    if( (HwDeviceExtension->jChipType >= SIS_315H) &&
-                        (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) ) {
--                       if(resinfo != 0x0a)
-+                       if(resinfo != SIS_RI_1600x1200)
-                               tempbx |= SetSimuScanMode;
-                    } else {
-                             tempbx |= SetSimuScanMode;
-@@ -4555,7 +4684,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-                   if((!(modeflag & CRT2Mode)) && (checkcrt2mode)) {
-                       if( (HwDeviceExtension->jChipType >= SIS_315H) &&
-                           (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) ) {
--                           if(resinfo != 0x0a) {  /* TW: 650/301 BIOS */
-+                           if(resinfo != SIS_RI_1600x1200) {  /* 650/301 BIOS */
-                                 tempbx |= SetInSlaveMode;
-                                 if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-                                            if(tempbx & SetCRT2ToTV) {
-@@ -4563,7 +4692,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-                                            SiS_Pr->SiS_SetFlag |= TVSimuMode;
-                                            }
-                                   }
--                           }                      /* TW: 650/301 BIOS */
-+                           }                      /* 650/301 BIOS */
-                       } else {
-                           tempbx |= SetInSlaveMode;
-                           if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-@@ -4621,7 +4750,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
-               if(ROMAddr && SiS_Pr->SiS_UseROM) {
-                   OutputSelect = ROMAddr[0xf3];
--                  if(HwDeviceExtension->jChipType == SIS_330) {
-+                  if(HwDeviceExtension->jChipType >= SIS_330) {
-                       OutputSelect = ROMAddr[0x11b];
-                   }
-                 }
-@@ -4652,7 +4781,7 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
-   SiS_Pr->SiS_VBInfo = tempbx;
-   if(HwDeviceExtension->jChipType == SIS_630) {
--       SiS_WhatIsThis(SiS_Pr, SiS_Pr->SiS_VBInfo);
-+       SiS_SetChrontelGPIO(SiS_Pr, SiS_Pr->SiS_VBInfo);
-   }
- #ifdef TWDEBUG
-@@ -4666,61 +4795,35 @@ SiS_GetVBInfo(SiS_Private *SiS_Pr, USHOR
- #endif
- #endif
--#if 0  /* TW: Incomplete! (But does not seem to be required) */
--  if(HwDeviceExtension->jChipType < SIS_315H) {
--     /* TW: From A901/630+301B BIOS */
--     if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--         if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80)
--     }
--     if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
--         if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x80)
--           if( [si] == 3) ModeIdIndex = 0x3f2b;
--       }
--     }
--     SiS_SetRegAND(SiS_Pr->SiS_P3d4, 0x31, 0xF7);
--     if(ModeNo == 0x13) bp+4 = 0x03;
--  } else {
--     /* From 650/30xLV BIOS: */
--     SiS_SetRegAND(SiS_Pr->SiS_P3d4, 0x31, 0xF7);
--     if(ModeNo == 0x13) bp+4 = 0x03;
--     else bp+4 = ModeNo;
--  }
--#endif
--
--  /* TW: 630/301B and 650/301 (not 301LV!) BIOSes do more here, but this seems for DOS mode */
--
- }
-+/* Setup general purpose IO for Chrontel communication */
- void
--SiS_WhatIsThis(SiS_Private *SiS_Pr, USHORT myvbinfo)
-+SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo)
- {
--   unsigned long eax, temp;
--   unsigned short temp1;
-+   unsigned long  acpibase;
-+   unsigned short temp;
-    if(!(SiS_Pr->SiS_ChSW)) return;
- #ifndef LINUX_XF86
--   SiS_SetReg4(0xcf8,0x80000874);
--   eax = SiS_GetReg3(0xcfc);
-+   SiS_SetReg4(0xcf8,0x80000874);                /* get ACPI base */
-+   acpibase = SiS_GetReg3(0xcfc);
- #else
--   eax = pciReadLong(0x00000800, 0x74);
-+   acpibase = pciReadLong(0x00000800, 0x74);
- #endif
--   eax &= 0xFFFF;
--   temp = eax;
--   eax += 0x3c;
--   temp1 = SiS_GetReg4((USHORT)eax);
--   temp1 &= 0xFEFF;
--   SiS_SetReg5((USHORT)eax, temp1);
--   temp1 = SiS_GetReg4((USHORT)eax);
--   eax = temp;
--   eax += 0x3a;
--   temp1 = SiS_GetReg4((USHORT)eax);
--   temp1 &= 0xFEFF;
-+   acpibase &= 0xFFFF;
-+   temp = SiS_GetReg4((USHORT)(acpibase + 0x3c));  /* ACPI register 0x3c: GP Event 1 I/O mode select */
-+   temp &= 0xFEFF;
-+   SiS_SetReg5((USHORT)(acpibase + 0x3c), temp);
-+   temp = SiS_GetReg4((USHORT)(acpibase + 0x3c));
-+   temp = SiS_GetReg4((USHORT)(acpibase + 0x3a));  /* ACPI register 0x3a: GP Pin Level (low/high) */
-+   temp &= 0xFEFF;
-    if(!(myvbinfo & SetCRT2ToTV)) {
--      temp1 |= 0x0100;
-+      temp |= 0x0100;
-    }
--   SiS_SetReg5((USHORT)eax, temp1);
--   temp1 = SiS_GetReg4((USHORT)eax);
-+   SiS_SetReg5((USHORT)(acpibase + 0x3a), temp);
-+   temp = SiS_GetReg4((USHORT)(acpibase + 0x3a));
- }
- void
-@@ -4731,14 +4834,14 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr, 
-   USHORT temp1=0,modeflag=0,tempcx=0;
-   USHORT StandTableIndex,CRT1Index;
- #ifdef SIS315H   
--  USHORT ResInfo,DisplayType,temp=0;
-+  USHORT ResIndex,DisplayType,temp=0;
-   const  SiS_LVDSCRT1DataStruct *LVDSCRT1Ptr = NULL;
- #endif
-   SiS_Pr->SiS_RVBHCMAX  = 1;
-   SiS_Pr->SiS_RVBHCFACT = 1;
--  if(ModeNo <= 0x13){
-+  if(ModeNo <= 0x13) {
-       modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-       StandTableIndex = SiS_GetModePtr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex);
-@@ -4752,7 +4855,7 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr, 
- #ifdef SIS315H     
-       temp = SiS_GetLVDSCRT1Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
--                      RefreshRateTableIndex,&ResInfo,&DisplayType);
-+                      RefreshRateTableIndex,&ResIndex,&DisplayType);
-       if(temp == 0)  return;
-@@ -4795,16 +4898,16 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr, 
-               case 99: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1OPAL;                break;
-               default: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x768_1;          break;
-       }
--      tempax = (LVDSCRT1Ptr+ResInfo)->CR[0];
--      tempax |= (LVDSCRT1Ptr+ResInfo)->CR[14] << 8;
-+      tempax = (LVDSCRT1Ptr+ResIndex)->CR[0];
-+      tempax |= (LVDSCRT1Ptr+ResIndex)->CR[14] << 8;
-       tempax &= 0x03FF;
--      tempbx = (LVDSCRT1Ptr+ResInfo)->CR[6];
--      tempcx = (LVDSCRT1Ptr+ResInfo)->CR[13] << 8;
-+      tempbx = (LVDSCRT1Ptr+ResIndex)->CR[6];
-+      tempcx = (LVDSCRT1Ptr+ResIndex)->CR[13] << 8;
-       tempcx &= 0x0100;
-       tempcx <<= 2;
-       tempbx |= tempcx;
--      temp1  = (LVDSCRT1Ptr+ResInfo)->CR[7];
--#endif        
-+      temp1  = (LVDSCRT1Ptr+ResIndex)->CR[7];
-+#endif
-     } else {
-@@ -4840,11 +4943,12 @@ SiS_GetRAMDAC2DATA(SiS_Private *SiS_Pr, 
-   if(modeflag & Charx8Dot) tempax *= 8;
-   else                     tempax *= 9;
--  /* TW: From 650/30xLV 1.10.6s */
-+  /* From 650/30xLV 1.10.6s */
-   if(modeflag & HalfDCLK)  tempax <<= 1;
--  SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
-   tempbx++;
-+
-+  SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
-   SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = tempbx;
- }
-@@ -4852,18 +4956,18 @@ void
- SiS_UnLockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
-   if(HwDeviceExtension->jChipType >= SIS_315H)
--      SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2f,0x01);
-+     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2f,0x01);
-   else
--      SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x24,0x01);
-+     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x24,0x01);
- }
- void
- SiS_LockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
-   if(HwDeviceExtension->jChipType >= SIS_315H)
--      SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2F,0xFE);
-+     SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2F,0xFE);
-   else
--      SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x24,0xFE);
-+     SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x24,0xFE);
- }
- void
-@@ -4872,7 +4976,6 @@ SiS_EnableCRT2(SiS_Private *SiS_Pr)
-   SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
- }
--/* Checked against all BIOSes */
- void
- SiS_DisableBridge(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
-@@ -4882,9 +4985,9 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-   USHORT temp=0;
-   UCHAR *ROMAddr = HwDeviceExtension->pjVirtualRomBase;
--  if (SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+  if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {   /* ===== TW: For 30xB/LV ===== */
-+      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {   /* ===== For 30xB/LV ===== */
-         if(HwDeviceExtension->jChipType < SIS_315H) {
-@@ -4940,9 +5043,9 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-         } else {
--#ifdef SIS315H           /* 310/325 series */
-+#ifdef SIS315H           /* 315 series */
--           if(IS_SIS650740) {         /* 650, 740 */
-+           if(IS_SIS550650740660) {           /* 550, 650, 740, 660 */
- #if 0
-             if(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x00) != 1) return;  /* From 1.10.7w */
-@@ -4966,22 +5069,35 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-                SiS_SetReg3(SiS_Pr->SiS_P3c6,0x00);
-                  pushax = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06);
--               
-+
-                if(IS_SIS740) {
-                   SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
-                }
-                SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
--               
--               if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--                  tempah = 0xef;
--                  if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--                     tempah = 0xf7;
--                    }
--                  SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+
-+               if(!(IS_SIS740)) {
-+                  if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+                     tempah = 0xef;
-+                     if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+                        tempah = 0xf7;
-+                       }
-+                     SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+                  }
-                }
--              }
-+              } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+               if(HwDeviceExtension->jChipType == SIS_650) {
-+                  if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+                     SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,0xef);
-+                  }
-+                  if((!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
-+                     (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ) {
-+                     SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFE,0x00);
-+                  }
-+                  SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 3);
-+               }
-+            }
-               if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
-                tempah = 0x3f;
-@@ -5046,8 +5162,8 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-             if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--               SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,~0x10);    /* 1.10.8r */
--               
-+               SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,~0x10);               /* 1.10.8r, 8m */
-+
-                tempah = 0x3f;
-                if(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-                   tempah = 0x7f;
-@@ -5057,9 +5173,9 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-                }
-                SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,tempah);
--               if(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr)) {   /* 1.10.8r */
-+               if(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr)) {   /* 1.10.8r, 8m */
-                   SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
--               }                                                              /* 1.10.8r */
-+               }                                                              /* 1.10.8r, 8m */
-                if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-                   SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xdf);
-@@ -5075,81 +5191,33 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-                SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
--            }
--
--#if 0
--          } else if(IS_SIS740) {      /* 740 */
--        
--           if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {   /* 30xLV */
--           
--              if( (!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
--                  (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ) {
--                    SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFE,0x00);
--              }
--              
--              SiS_SetReg3(SiS_Pr->SiS_P3c6,0x00);
-+            } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+               if(HwDeviceExtension->jChipType == SIS_650) {
-+                  if((SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-+                     (!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)))) {
-+                     if((!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
-+                        (!(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)))) {
-+                        SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 2);
-+                        SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFD,0x00);
-+                        SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 4);
-+                     }
-+                  }
-+               }
-+            } else if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
-+               if(HwDeviceExtension->jChipType == SIS_650) {
-+                  if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+                     tempah = 0xef;
-+                     if(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+                        if(modenum > 0x13) {
-+                           tempah = 0xf7;
-+                        }
-+                       }
-+                     SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+                  }
-+               }
-+            }
--                pushax = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06);
--              
--              SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
--
--              SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
--              
--              if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--                 SiS_DisplayOff(SiS_Pr);
--                 SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
--                 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
--                 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1E,0xDF);
--              } else {
--                 SiS_DisplayOff(SiS_Pr);
--                 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
--                 SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
--                 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
--                 temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00);
--                   SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
--                 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
--                 SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x00,temp);
--              }
--              
--              SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,0x3F);
--              SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,0xEF);  /* (from 650) */
--              
--              SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
--              
--              if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--                 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xdf);
--              }
--              
--              if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--                 if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--                    if(!(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension))) {
--                       if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--                          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFD,0x00);
--                         }
--                      }
--                 }
--              }
--              SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
--           
--           } else {   /* (301,) 301B */
--        
--              if(SiS_Is301B(SiS_Pr,BaseAddr)) {
--                 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,0x3F);
--              }
--           
--              SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF);
--              SiS_DisplayOff(SiS_Pr);
--              SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
--              SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
--
--              temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00);
--                SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
--              SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
--              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x00,temp);
--              
--           }
--#endif          
--        } else {                      /* 315, 330 - all bridge types */
-+        } else {                      /* 315, 330 - all bridge types */
-            if(SiS_Is301B(SiS_Pr,BaseAddr)) {
-               tempah = 0x3f;
-@@ -5193,13 +5261,13 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-       }
--      } else {     /* ============ TW: For 301 ================ */
-+      } else {     /* ============ For 301 ================ */
-         if(HwDeviceExtension->jChipType < SIS_315H) {
--            if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
--                SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF0,0x0B);
--              SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 1);
--          }
-+            if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwDeviceExtension))) {
-+            SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF7,0x08);
-+            SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
-+         }
-       }
-         SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF);           /* disable VB */
-@@ -5218,18 +5286,23 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-           SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x00,temp);
-       } else {
-             SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);            /* disable CRT2 */
-+          if( (!(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension))) ||
-+              (!(SiS_CR36BIOSWord23d(SiS_Pr,HwDeviceExtension))) ) {
-+              SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
-+              SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xFB,0x04);
-+          }
-       }
-       }
--  } else {     /* ============ TW: For LVDS =============*/
-+  } else {     /* ============ For LVDS =============*/
-     if(HwDeviceExtension->jChipType < SIS_315H) {
- #ifdef SIS300 /* 300 series */
-       if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
--          SiS_SetCH700x(SiS_Pr,0x090E);
-+         SiS_SetCH700x(SiS_Pr,0x090E);
-       }
-       if(HwDeviceExtension->jChipType == SIS_730) {
-@@ -5245,17 +5318,17 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-             if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
-   
--                if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwDeviceExtension))) {
-+               if(!(SiS_CR36BIOSWord23b(SiS_Pr,HwDeviceExtension))) {
--                     SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-+                    SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
--                   if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06) & 0x1c)) {
--                       SiS_DisplayOff(SiS_Pr);
--                   }
-+                  if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06) & 0x1c)) {
-+                      SiS_DisplayOff(SiS_Pr);
-+                  }
--                   SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF7,0x08);
--                   SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
--                  }
-+                  SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF7,0x08);
-+                  SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
-+                 }
-               }
-          }
-       }
-@@ -5279,29 +5352,40 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-     } else {
--#ifdef SIS315H        /* 310/325 series */
-+#ifdef SIS315H        /* 315 series */
-       if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
--              temp = SiS_GetCH701x(SiS_Pr,0x61);
--              if(temp < 1) {
--                 SiS_SetCH701x(SiS_Pr,0xac76);
--                 SiS_SetCH701x(SiS_Pr,0x0066);
--              }
--              
--              if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+
-+              if(HwDeviceExtension->jChipType == SIS_740) {
-+                 temp = SiS_GetCH701x(SiS_Pr,0x61);
-+                 if(temp < 1) {
-+                    SiS_SetCH701x(SiS_Pr,0xac76);
-+                    SiS_SetCH701x(SiS_Pr,0x0066);
-+                 }
-+
-+                 if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-                       SiS_SetCH701x(SiS_Pr,0x3e49);
--              } else if(SiS_IsTVOrYPbPrOrScart(SiS_Pr,HwDeviceExtension, BaseAddr))  {
-+                 } else if(SiS_IsTVOrYPbPrOrScart(SiS_Pr,HwDeviceExtension, BaseAddr))  {
-                       SiS_SetCH701x(SiS_Pr,0x3e49);
-+                 }
-               }
--              
-+
-               if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-                       SiS_Chrontel701xBLOff(SiS_Pr);
--                      SiS_Chrontel701xOff(SiS_Pr);
-+                      SiS_Chrontel701xOff(SiS_Pr,HwDeviceExtension);
-               } else if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-                       SiS_Chrontel701xBLOff(SiS_Pr);
--                      SiS_Chrontel701xOff(SiS_Pr);
-+                      SiS_Chrontel701xOff(SiS_Pr,HwDeviceExtension);
-               }
--              
-+
-+              if(HwDeviceExtension->jChipType != SIS_740) {
-+                 if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+                      SiS_SetCH701x(SiS_Pr,0x0149);
-+                 } else if(SiS_IsTVOrYPbPrOrScart(SiS_Pr,HwDeviceExtension, BaseAddr))  {
-+                      SiS_SetCH701x(SiS_Pr,0x0149);
-+                 }
-+              }
-+
-       }
-       if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-@@ -5325,6 +5409,10 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-               SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
-       }
-+      if(HwDeviceExtension->jChipType == SIS_740) {
-+         SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
-+      }
-+
-       SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
-       if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-@@ -5337,15 +5425,27 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-       if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-               if(SiS_CRT2IsLCD(SiS_Pr, BaseAddr,HwDeviceExtension)) {
--                      SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+                 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+                 if(HwDeviceExtension->jChipType == SIS_550) {
-+                    SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xbf);
-+                    SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xef);
-+                 }
-+              }
-+      } else {
-+         if(HwDeviceExtension->jChipType == SIS_740) {
-+              if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+                 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-               }
--      } else if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--              SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+         } else {
-+              if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+                 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
-+              }
-+         }
-       }
-       if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
-               if(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--                      SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xff);
-+                      /* SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xff); */
-               } else {
-                       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
-               }
-@@ -5353,7 +5453,10 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-       SiS_UnLockCRT2(SiS_Pr,HwDeviceExtension, BaseAddr);
--      if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-+      if(HwDeviceExtension->jChipType == SIS_550) {
-+              SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
-+              SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
-+      } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-               SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
-       } else if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-               SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
-@@ -5361,7 +5464,7 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
-               SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
-       }
--#if 0  /* TW: BIOS code makes no sense */
-+#if 0  /* BIOS code makes no sense */
-        if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-            if(!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-               if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-@@ -5387,7 +5490,6 @@ SiS_DisableBridge(SiS_Private *SiS_Pr, P
- }
--/* TW: Checked against all BIOSes */
- void
- SiS_EnableBridge(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
-@@ -5400,7 +5502,7 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {   /* TW: ====== For 301B et al  ====== */
-+    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {   /* ====== For 301B et al  ====== */
-       if(HwDeviceExtension->jChipType < SIS_315H) {
-@@ -5497,9 +5599,9 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-       } else {
--#ifdef SIS315H    /* 310/325 series */
-+#ifdef SIS315H    /* 315 series */
--       if(IS_SIS650740) {             /* 650 */
-+       if(IS_SIS550650740660) {               /* 550, 650, 740, 660 */
- #if 0
-           if(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x00) != 1) return;    /* From 1.10.7w */
-@@ -5541,7 +5643,32 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-                 delaylong = TRUE;
-              }
--          }
-+          } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+             if(HwDeviceExtension->jChipType == SIS_650) {
-+                if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+                   SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,0x10);
-+                }
-+                if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-+                    (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
-+                   SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
-+                   SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 0);
-+                }
-+             }
-+          } else if(SiS_Pr->SiS_VBType & VB_SIS301B302B) {
-+
-+               if(HwDeviceExtension->jChipType == SIS_650) {
-+                  if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+                     tempah = 0x10;
-+                     if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x13) & 0x04) {
-+                        tempah = 0x18;
-+                        if((SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x00) & 0x0f) == 0x0c) {
-+                           tempah = 0x08;
-+                        }
-+                     }
-+                     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,tempah);
-+                  }
-+               }
-+            }
-           if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-                temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
-@@ -5595,11 +5722,24 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);    /* All this from 1.10.7u */
-              SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
-              SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20);
--             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05);  
--             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60);  
--             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x00);  
--             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10); 
--             SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40); 
-+
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x12);
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0xd0);
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x6b);
-+             if((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0x0f) == 0x02) {
-+                SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x0d);
-+                SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x70);
-+                SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x40);
-+                if(((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xf0) != 0x03)) {
-+                   SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05);
-+                   SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60);
-+                   SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x33);  /* 00 */
-+                }
-+             }
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+             if((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0x0f) != 0x03) {
-+                SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40);
-+             }
-              
-              SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
-           
-@@ -5610,127 +5750,44 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-              if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-                 if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-                     ((SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension))) ) {
--                  SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
--                  if(delaylong) {
-+                   SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
-+                   if(delaylong) {
-                       SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
--                  }
--                    SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
--                  SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xfe,0x01);
--               }
--            }
-+                   }
-+                     SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
-+                   SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xfe,0x01);
-+                }
-+             }
--            SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
--            SiS_DisplayOn(SiS_Pr);
--            SiS_SetReg3(SiS_Pr->SiS_P3c6,0xff);
-+             SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
-+             SiS_DisplayOn(SiS_Pr);
-+             SiS_SetReg3(SiS_Pr->SiS_P3c6,0xff);
--            if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+             if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-                 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
--            }
-+             }
- #if 0
--              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
--            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
--            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20);
--            SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05);   /* 1.10.8r: 0x0d */
--            SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60);   /* 1.10.8r: 0x70 */
--            SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x00);   /* 1.10.8r: 0x40 */
--            SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10); 
--            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40); 
-+               SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-+             SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
-+             SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20);
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x31,0x05);   /* 1.10.8r: 0x0d */
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x32,0x60);   /* 1.10.8r: 0x70 */
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x33,0x00);   /* 1.10.8r: 0x40 */
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+             SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40);
- #endif              
-+          } if(SiS_Pr->SiS_VBType & VB_NoLCD) {
-+             if(HwDeviceExtension->jChipType == SIS_650) {
-+                if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+                   if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-+                       (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
-+                      SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 1);
-+                      SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
-+                   }
-+                }
-+             }
-+          }
--        }
--
--#if 0
--         } else if(IS_SIS740) {               /* 740 */
--       
--         if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {  /* 30xLV */
--         
--            SiS_SetReg3(SiS_Pr->SiS_P3c6,0x00);
--            SiS_DisplayOff(SiS_Pr);
--            pushax = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x06);
--            SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
--            
--            if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
--                (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
--                   if(!(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
--                    SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
--                    SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 3);
--                 }
--            }
--            
--            if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--               temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
--               if(SiS_BridgeInSlave(SiS_Pr)) {
--                    tempah = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x30);
--                    if(!(tempah & SetCRT2ToRAMDAC))  temp |= 0x20;
--                 }
--                 SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
--
--               SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);      
--               SiS_SetPanelDelay(SiS_Pr,ROMAddr, HwDeviceExtension, 2);
--            }
--            
--            if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--               SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
--            }
--            
--            SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);
--            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
--            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0x10);  /* (taken from 650 1.10.8r) */
--            SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
--            
--            if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--               if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
--                   (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
--                  SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
--                  if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x40) {
--                     SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
--                  }
--                  SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xfe,0x01);
--                  SiS_SetPanelDelayLoop(SiS_Pr,ROMAddr, HwDeviceExtension, 3, 10);
--                  SiS_WaitVBRetrace(SiS_Pr,HwDeviceExtension);
--               }
--              }
--            
--            SiS_SetReg1(SiS_Pr->SiS_P3c4,0x06,pushax);
--            SiS_DisplayOn(SiS_Pr);
--            SiS_SetReg3(SiS_Pr->SiS_P3c6,0xff);
--            
--            if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--               SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
--            }
--         
--         } else {     /* (301), 301B */
--       
--            if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--               temp = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
--               if(SiS_BridgeInSlave(SiS_Pr)) {
--                    tempah = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x30);
--                    if(!(tempah & SetCRT2ToRAMDAC))  temp |= 0x20;
--                 }
--                 SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,temp);
--
--               SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);                   /* enable CRT2 */
--
--               temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x2E);
--                 if(!(temp & 0x80))
--                    SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
--              }
--
--            SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);
--
--            if(SiS_Is301B(SiS_Pr,BaseAddr)) { 
--               SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
--               SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
--            } else {
--               SiS_VBLongWait(SiS_Pr);
--                 SiS_DisplayOn(SiS_Pr);
--               SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7F);
--                 SiS_VBLongWait(SiS_Pr);
--            }
--            
--         }
--#endif
--        
-        } else {                       /* 315, 330 */
-          if(!(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-@@ -5782,11 +5839,11 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-       }
--    } else {  /* ============  TW: For 301 ================ */
-+    } else {  /* ============  For 301 ================ */
-        if(HwDeviceExtension->jChipType < SIS_315H) {
-             if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
--                SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF0,0x0B);
-+                SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xFB);
-               SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 0);
-           }
-        }
-@@ -5818,13 +5875,13 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-        if(HwDeviceExtension->jChipType < SIS_315H) {
-             if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
-               SiS_SetPanelDelay(SiS_Pr, ROMAddr, HwDeviceExtension, 1);
--                SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,0xF0,0x03);
-+                SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x11,0xF7);
-           }
-        }
-     }
--  } else {   /* =================== TW: For LVDS ================== */
-+  } else {   /* =================== For LVDS ================== */
-     if(HwDeviceExtension->jChipType < SIS_315H) {
-@@ -5875,7 +5932,7 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-     } else {
--#ifdef SIS315H    /* 310/325 series */
-+#ifdef SIS315H    /* 315 series */
- #if 0  /* BIOS code makes no sense */
-        if(SiS_IsVAMode()) {
-@@ -5902,36 +5959,41 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-         SiS_Chrontel701xBLOff(SiS_Pr);
-        }
--       SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
--       
--#ifdef NEWCH701x
--       if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
--           if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension,BaseAddr)) {
-+       if(HwDeviceExtension->jChipType != SIS_550) {
-+          SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
-+       }
-+
-+       if(HwDeviceExtension->jChipType == SIS_740) {
-+          if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-+             if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension,BaseAddr)) {
-               SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
--         }
-+           }
-+        }
-        }
--#endif       
-        temp1 = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x2E);
--       if (!(temp1 & 0x80))
-+       if(!(temp1 & 0x80))
-            SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
-        if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-            if(temp) {
--             SiS_Chrontel701xBLOn(SiS_Pr);
-+             SiS_Chrontel701xBLOn(SiS_Pr, HwDeviceExtension);
-          }
-        }
-        if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-            if(SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) {
-               SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
-+              if(HwDeviceExtension->jChipType == SIS_550) {
-+                 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x40);
-+                 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x10);
-+              }
-+         }
-+       } else if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+           if(HwDeviceExtension->jChipType != SIS_740) {
-+              SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
-          }
--       } 
--#ifndef NEWCH701x       
--         else if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--           SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
-        }
--#endif       
-        if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-            SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
-@@ -5954,10 +6016,10 @@ SiS_EnableBridge(SiS_Private *SiS_Pr, PS
-        if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-                       if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-                       if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--                              SiS_Chrontel701xBLOn(SiS_Pr);
-+                              SiS_Chrontel701xBLOn(SiS_Pr, HwDeviceExtension);
-                               SiS_ChrontelDoSomething4(SiS_Pr,HwDeviceExtension, BaseAddr);
-                       } else if(SiS_IsLCDOrLCDA(SiS_Pr,HwDeviceExtension, BaseAddr))  {
--                                      SiS_Chrontel701xBLOn(SiS_Pr);
-+                                      SiS_Chrontel701xBLOn(SiS_Pr, HwDeviceExtension);
-                                       SiS_ChrontelDoSomething4(SiS_Pr,HwDeviceExtension, BaseAddr);
-                       }
-                       }
-@@ -5983,7 +6045,7 @@ SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS
- {
-   USHORT  BaseAddr = (USHORT)HwDeviceExtension->ulIOAddress;
--  /* TW: Switch on LCD backlight on SiS30xLV */
-+  /* Switch on LCD backlight on SiS30xLV */
-   if( (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ||
-       (SiS_CRT2IsLCD(SiS_Pr,BaseAddr,HwDeviceExtension)) ) {
-     if(!(SiS_GetReg1(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
-@@ -6001,7 +6063,7 @@ SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSI
- {
-   USHORT  BaseAddr = (USHORT)HwDeviceExtension->ulIOAddress;
--  /* TW: Switch off LCD backlight on SiS30xLV */
-+  /* Switch off LCD backlight on SiS30xLV */
-   if( (!(SiS_IsDualEdge(SiS_Pr,HwDeviceExtension, BaseAddr))) ||
-       (SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) ) {
-        SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xFE,0x00);
-@@ -6023,12 +6085,14 @@ SiS_CR36BIOSWord23b(SiS_Private *SiS_Pr,
-   UCHAR *ROMAddr;
-   if((ROMAddr = (UCHAR *)HwDeviceExtension->pjVirtualRomBase) && SiS_Pr->SiS_UseROM) {
--     temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
--     temp >>= 4;
--     temp = 1 << temp;
--     temp1 = (ROMAddr[0x23c] << 8) | ROMAddr[0x23b];
--     if(temp1 & temp) return(1);
--     else return(0);
-+     if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+        temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
-+        temp >>= 4;
-+        temp = 1 << temp;
-+        temp1 = (ROMAddr[0x23c] << 8) | ROMAddr[0x23b];
-+        if(temp1 & temp) return(1);
-+        else return(0);
-+     } else return(0);
-   } else {
-      return(0);
-   }
-@@ -6041,12 +6105,14 @@ SiS_CR36BIOSWord23d(SiS_Private *SiS_Pr,
-   UCHAR *ROMAddr;
-   if((ROMAddr = (UCHAR *)HwDeviceExtension->pjVirtualRomBase) && SiS_Pr->SiS_UseROM) {
--     temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
--     temp >>= 4;
--     temp = 1 << temp;
--     temp1 = (ROMAddr[0x23e] << 8) | ROMAddr[0x23d];
--     if(temp1 & temp) return(1);
--     else return(0);
-+     if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+        temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xff;
-+        temp >>= 4;
-+        temp = 1 << temp;
-+        temp1 = (ROMAddr[0x23e] << 8) | ROMAddr[0x23d];
-+        if(temp1 & temp) return(1);
-+        else return(0);
-+     } else return(0);
-   } else {
-      return(0);
-   }
-@@ -6143,7 +6209,7 @@ SiS_SetPanelDelay(SiS_Private *SiS_Pr, U
- #ifdef SIS315H
--      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {                      /* 310/325 series, LVDS */
-+      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {                      /* 315 series, LVDS */
-           if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
-               PanelID = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
-@@ -6171,7 +6237,7 @@ SiS_SetPanelDelay(SiS_Private *SiS_Pr, U
-             SiS_ShortDelay(SiS_Pr,Delay);
-         }
--      } else {                                                        /* 310/325 series, 301(B) */
-+      } else {                                                        /* 315 series, 301(B) */
-           PanelID = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
-         DelayIndex = PanelID >> 4;
-@@ -6271,14 +6337,7 @@ SiS_IsVAMode(SiS_Private *SiS_Pr, PSIS_H
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
-      flag = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x38);
-      if((flag & EnableDualEdge) && (flag & SetToLCDA))   return(1);
--#if 0 /* Not done in 650/30xLV 1.10.6s, but in 650/301LV */
--     else if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--       if(flag) return(1);
--       else     return(0);                             
--     }
--#endif
--     else
--       return(0);
-+     else return(0);
-   } else
- #endif
-      return(0);
-@@ -6325,7 +6384,9 @@ SiS_IsNotM650or651(SiS_Private *SiS_Pr, 
-   if(HwDeviceExtension->jChipType == SIS_650) {
-      flag = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5f);
-      flag &= 0xF0;
--     if((flag == 0xb0) || (flag == 0x90)) return 0;
-+     /* Check for revision != A0 only */
-+     if((flag == 0xe0) || (flag == 0xc0) ||
-+        (flag == 0xb0) || (flag == 0x90)) return 0;
-      else return 1;
-   } else
- #endif
-@@ -6443,7 +6504,7 @@ SiS_BridgeIsEnable(SiS_Private *SiS_Pr, 
-       if((flag == 0x80) || (flag == 0x20)) return 0;
-       else                               return 1;
-     } else {
--      /* 310/325 series (650/30xLV 1.10.6s) */
-+      /* 315 series (650/30xLV 1.10.6s) */
-       flag &= 0x50;
-       if((flag == 0x40) || (flag == 0x10)) return 0;
-       else                                 return 1;
-@@ -6493,8 +6554,8 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- {
-   USHORT temp,modeflag,resinfo=0;
-   const unsigned char SiS300SeriesLCDRes[] =
--         { 0, 1, 2, 3, 7, 4, 5, 8,
--         0, 0, 0, 0, 0, 0, 0, 0 };
-+         { 0,  1,  2,  3,  7,  4,  5,  8,
-+         0,  0, 10,  0,  0,  0,  0, 15 };
-   SiS_Pr->SiS_LCDResInfo = 0;
-   SiS_Pr->SiS_LCDTypeInfo = 0;
-@@ -6517,11 +6578,13 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
-   temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
-+#if 0
-   /* FSTN: Fake CR36 (TypeInfo 2, ResInfo SiS_Panel320x480) */
-   if(SiS_Pr->SiS_IF_DEF_FSTN) {
-       temp = 0x20 | SiS_Pr->SiS_Panel320x480;
-       SiS_SetReg1(SiS_Pr->SiS_P3d4,0x36,temp);
-   }
-+#endif
-   if(HwDeviceExtension->jChipType < SIS_315H) {
-       SiS_Pr->SiS_LCDTypeInfo = temp >> 4;
-@@ -6530,14 +6593,16 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
-   }
-   temp &= 0x0f;
-   if(HwDeviceExtension->jChipType < SIS_315H) {
--      /* TW: Translate 300 series LCDRes to 310/325 series for unified usage */
-+      /* Translate 300 series LCDRes to 315 series for unified usage */
-       temp = SiS300SeriesLCDRes[temp];
-   }
-   SiS_Pr->SiS_LCDResInfo = temp;
-+#if 0
-   if(SiS_Pr->SiS_IF_DEF_FSTN){
-               SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_Panel320x480;
-   }
-+#endif
-   if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-       if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMin301)
-@@ -6547,75 +6612,109 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
-               SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMinLVDS;
-   }
--  if(SiS_Pr->SiS_LCDResInfo > SiS_Pr->SiS_PanelMax)
-+  if((!SiS_Pr->CP_HaveCustomData) || (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_PanelCustom)) {
-+     if(SiS_Pr->SiS_LCDResInfo > SiS_Pr->SiS_PanelMax)
-       SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_Panel1024x768;
-+  }
-+
-+  if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+     SiS_Pr->SiS_LCDResInfo = Panel_Barco1366;
-+  }
-+
-+  switch(SiS_Pr->SiS_LCDResInfo) {
-+     case Panel_800x600:   SiS_Pr->PanelXRes =  800; SiS_Pr->PanelYRes =  600; break;
-+     case Panel_1024x768:  SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  768; break;
-+     case Panel_1280x1024: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 1024; break;
-+     case Panel_640x480_3:
-+     case Panel_640x480_2:
-+     case Panel_640x480:   SiS_Pr->PanelXRes =  640; SiS_Pr->PanelYRes =  480; break;
-+     case Panel_1024x600:  SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  600; break;
-+     case Panel_1152x864:  SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes =  864; break;
-+     case Panel_1280x960:  SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  960; break;
-+     case Panel_1152x768:  SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes =  768; break;
-+     case Panel_1400x1050: SiS_Pr->PanelXRes = 1400; SiS_Pr->PanelYRes = 1050; break;
-+     case Panel_1280x768:  SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  768; break;
-+     case Panel_1600x1200: SiS_Pr->PanelXRes = 1600; SiS_Pr->PanelYRes = 1200; break;
-+     case Panel_320x480:   SiS_Pr->PanelXRes =  320; SiS_Pr->PanelYRes =  480; break;
-+     case Panel_Custom:    SiS_Pr->PanelXRes = SiS_Pr->CP_MaxX;
-+                         SiS_Pr->PanelYRes = SiS_Pr->CP_MaxY;
-+                         break;
-+     case Panel_Barco1366: SiS_Pr->PanelXRes = 1360; SiS_Pr->PanelYRes = 1024; break;
-+     default:            SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  768; break;
-+  }
-   temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37);
-+#if 0
-   if(SiS_Pr->SiS_IF_DEF_FSTN){
--        /* TW: Fake LVDS bridge for FSTN */
-+        /* Fake LVDS bridge for FSTN */
-               temp = 0x04;
-               SiS_SetReg1(SiS_Pr->SiS_P3d4,0x37,temp);
-   }
-+#endif
-   SiS_Pr->SiS_LCDInfo = temp;
-   
-   if(!(SiS_Pr->UsePanelScaler))        SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
-   else if(SiS_Pr->UsePanelScaler == 1) SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
--  /* TW: Inserted entire 315-block from 650/LVDS/30xLV BIOSes */
-+  if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+        /* For non-standard LCD resolution, we let the panel scale */
-+        if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) {
-+           SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+        } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+         if(ModeNo == 0x7c || ModeNo == 0x7d || ModeNo == 0x7e) {
-+            /* Bridge does not scale to 1280x960 */
-+              SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+         } else if(ModeNo == 0x2f || ModeNo == 0x5d || ModeNo == 0x5e) {
-+            if(!(SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
-+               /* Bridge does not scale to 640x400 */
-+               SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+            }
-+         }
-+        } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+           /* TEMP - no idea about the timing and zoom factors */
-+           SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+        } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-+         if(ModeNo == 0x3a || ModeNo == 0x4d || ModeNo == 0x65) {
-+            /* Bridge does not scale to 1280x1024 */
-+            SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+         }
-+      } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+         /* TEMP - no idea about the timing and zoom factors */
-+         SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
-+      }
-+     }
-+  }
-+
-+
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
- #ifdef SIS315H
--     if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--         if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--           if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
--               if(ModeNo == 0x3a || ModeNo == 0x4d || ModeNo == 0x65) {
--                   /* Bridge does not scale to 1280x1024 */
--                   SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
--               }
--           }
--           if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--               if(ModeNo == 0x7c || ModeNo == 0x7d || ModeNo == 0x7e) {
--                   /* TW: Bridge does not scale to 1280x960 */
--                   SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
--               }
--               if(ModeNo == 0x2f || ModeNo == 0x5d || ModeNo == 0x5e) {
--                   /* TW: Bridge does not scale to 640x400 */
--                   SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
--               }
--           }
--           if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--               if(ModeNo == 0x2f || ModeNo == 0x5d || ModeNo == 0x5e) {
--                   /* TW: Most panels can't scale to 640x400 */
--                   SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
--               }
--           }
--       }
--     }
-      if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x01) {
--         SiS_Pr->SiS_LCDInfo &= 0xFFEF;    
--       SiS_Pr->SiS_LCDInfo |= LCDPass11;
-+        SiS_Pr->SiS_LCDInfo &= 0xFFEF;
-+      SiS_Pr->SiS_LCDInfo |= LCDPass11;
-      }
- #endif
-   } else {
- #ifdef SIS300
-      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-         if((ROMAddr) && SiS_Pr->SiS_UseROM) {
--           if(!(ROMAddr[0x235] & 0x02)) {
--            SiS_Pr->SiS_LCDInfo &= 0xEF;
-+         if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {
-+              if(!(ROMAddr[0x235] & 0x02)) {
-+               SiS_Pr->SiS_LCDInfo &= 0xEF;
-+            }
-          }
-         }
--     } else {
--        if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--         if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {
--               SiS_Pr->SiS_LCDInfo &= 0xEF;
--         }
-+     } else if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+      if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {
-+           SiS_Pr->SiS_LCDInfo &= 0xEF;
-       }
-      }
- #endif
-   }
--  
--  /* TW: With Trumpion, always Expanding */
--  if(SiS_Pr->SiS_IF_DEF_TRUMPION != 0){
--       SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
-+
-+  /* Trumpion: Assume non-expanding */
-+  if(SiS_Pr->SiS_IF_DEF_TRUMPION != 0) {
-+     SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
-   }
-   if(!((HwDeviceExtension->jChipType < SIS_315H) && (SiS_Pr->SiS_SetFlag & SetDOSMode))) {
-@@ -6624,7 +6723,7 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
-         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
-          if(ModeNo > 0x13) {
-             if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
--                 if((resinfo == 7) || (resinfo == 3)) {
-+                 if((resinfo == SIS_RI_800x600) || (resinfo == SIS_RI_400x300)) {
-                     SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
-                }
-               }
-@@ -6644,9 +6743,9 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
-                                             (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480))) {
-                  if(ModeNo > 0x13) {
-                     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--                       if(resinfo == 4) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;     /* 512x384  */
-+                       if(resinfo == SIS_RI_512x384) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
-                     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
--                       if(resinfo == 3) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;     /* 400x300  */
-+                       if(resinfo == SIS_RI_400x300) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
-                     }
-                  }
-             } else SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
-@@ -6665,19 +6764,21 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
-   }
- #ifdef SIS315H
--  /* TW: 650/30xLV 1.10.6s */
-+  /* 650/30xLV 1.10.6s */
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
--    if(SiS_Pr->SiS_VBType & (VB_SIS302B | VB_SIS302LV)) {
--      /* Enable 302B/302LV dual link mode */
--      /* (302B is a theory - not in any BIOS */
--      temp = 0x00;
--      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) temp = 0x04;
--      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) temp = 0x04;
--      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) temp = 0x04;
--      SiS_SetReg1(SiS_Pr->SiS_P3d4,0x39,temp);
--    } else if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--      SiS_SetReg1(SiS_Pr->SiS_P3d4,0x39,0x00);
--    }
-+     if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
-+        SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x39,~0x04);
-+        if(SiS_Pr->SiS_VBType & (VB_SIS302B | VB_SIS302LV)) {
-+           /* Enable 302B/302LV dual link mode.
-+            * (302B is a theory - not in any BIOS)
-+          */
-+           if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-+              (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+              (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
-+            SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x39,0x04);
-+         }
-+      }
-+     }
-   }
- #endif
-@@ -6697,19 +6798,6 @@ SiS_GetLCDResInfo(SiS_Private *SiS_Pr, U
- }
- void
--SiS_PresetScratchregister(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
--{
--  return;
--  /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x30,0x21);  */
--  /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x31,0x41);  */
--  /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x32,0x28);  */
--  /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x33,0x22);  */
--  /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x35,0x43);  */
--  /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x36,0x01);  */
--  /*SiS_SetReg1(SiS_Pr->SiS_P3d4,0x37,0x00);  */
--}
--
--void
- SiS_LongWait(SiS_Private *SiS_Pr)
- {
-   USHORT i;
-@@ -6803,7 +6891,7 @@ SiS_WaitRetrace1(SiS_Private *SiS_Pr, PS
- #endif
-   } else {
- #ifdef SIS300
--#if 0  /* TW: Not done in A901 BIOS */
-+#if 0  /* Not done in A901 BIOS */
-      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-         if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1f) & 0xc0) return;
-      }
-@@ -6898,7 +6986,51 @@ void SiS_SetRegOR(USHORT Port,USHORT Ind
- /* ========================================================= */
--/* TW: Set 301 TV Encoder (and some LCD relevant) registers */
-+static void
-+SiS_SetTVSpecial(SiS_Private *SiS_Pr, USHORT ModeNo)
-+{
-+  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+        if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-+           if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) {
-+              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1c,0xa7);
-+              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1d,0x07);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1e,0xf2);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1f,0x6e);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x20,0x17);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,0x8b);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x22,0x73);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,0x53);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x24,0x13);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x25,0x40);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x26,0x34);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x27,0xf4);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x28,0x63);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x29,0xbb);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2a,0xcc);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2b,0x7a);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2c,0x58);   /* 48 */
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2d,0xe4);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2e,0x73);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,0xda);   /* de */
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0x13);
-+            if((SiS_GetReg1(SiS_Pr->SiS_P3d4,0x38)) & 0x40) {
-+               SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x14);
-+            } else {
-+               SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x15);
-+            }
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x1b);
-+            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,0x72);
-+           }
-+        } else {
-+         SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x21);
-+         SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x5a);
-+      }
-+     }
-+  }
-+}
-+
-+/* Set 301 TV Encoder (and some LCD relevant) registers */
- void
- SiS_SetGroup2(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr, USHORT ModeNo,
-               USHORT ModeIdIndex,USHORT RefreshRateTableIndex,
-@@ -6911,67 +7043,46 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
- #ifdef SIS315H   
-   const       SiS_Part2PortTblStruct *CRT2Part2Ptr = NULL;
-   USHORT      resindex, CRT2Index;
--#endif  
-+#endif
-   USHORT      modeflag, resinfo, crt2crtc;
--  ULONG       longtemp, tempeax, tempebx, temp2, tempecx;
-+  ULONG       longtemp, tempeax;
-+#ifdef SIS300
-   const UCHAR atable[] = {
-                  0xc3,0x9e,0xc3,0x9e,0x02,0x02,0x02,
-                0xab,0x87,0xab,0x9e,0xe7,0x02,0x02
-   };
-+#endif  
- #ifdef SIS315H   
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
--     /* TW: 650/30xLV 1.10.6s: (Is at end of SetGroup2!) */
-+     /* 650/30xLV 1.10.6s: (Is at end of SetGroup2!) */
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-          SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xfc,0x03);
--         temp = 1;
--         if(ModeNo <= 0x13) temp = 3;
-+         temp = 0x01;
-+         if(ModeNo <= 0x13) temp = 0x03;
-          SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0b,temp);
-       }
-      }
--     if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--       if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--         if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--           if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
--               SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1c,0xa7);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1d,0x07);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1e,0xf2);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1f,0x6e);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x20,0x17);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,0x8b);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x22,0x73);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,0x53);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x24,0x13);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x25,0x40);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x26,0x34);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x27,0xf4);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x28,0x63);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x29,0xbb);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2a,0xcc);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2b,0x7a);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2c,0x58);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2d,0xe4);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2e,0x73);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,0xda);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0x13);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,0x72);
--           }
--         }
--       }
--     }
-+     SiS_SetTVSpecial(SiS_Pr, ModeNo);
-      return;
-   }
--#endif  
-+#endif
--  if(ModeNo<=0x13) {
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;      /* si+St_ResInfo */
--      resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
--      crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+  if(ModeNo <= 0x13) {
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+     resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+     crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-   } else {
--      modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;     /* si+Ext_ResInfo */
-+     if(SiS_Pr->UseCustomMode) {
-+        modeflag = SiS_Pr->CModeFlag;
-+      resinfo = 0;
-+      crt2crtc = 0;
-+     } else {
-+        modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-       resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-       crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-+     }
-   }
-   tempcx = SiS_Pr->SiS_VBInfo;
-@@ -6984,9 +7095,9 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   temp |= ((tempbx & 0x00FF) >> 3);
-   temp ^= 0x0C;
--  /* TW: From 1.10.7w (no vb check there; don't care - this only disables SVIDEO and CVBS signal) */
-+  /* From 1.10.7w (no vb check there; don't care - this only disables SVIDEO and CVBS signal) */
-   if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--      temp |= 0x0c;
-+     temp |= 0x0c;
-   }
-   PhasePoint  = SiS_Pr->SiS_PALPhase;
-@@ -6994,44 +7105,44 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {          
-   
--    temp ^= 0x01;
--    if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
--      TimingPoint = SiS_Pr->SiS_HiTVSt2Timing;
--      if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
--        if(modeflag & Charx8Dot) TimingPoint = SiS_Pr->SiS_HiTVSt1Timing;
--        else TimingPoint = SiS_Pr->SiS_HiTVTextTiming;
--      }
--    } else TimingPoint = SiS_Pr->SiS_HiTVExtTiming;
--    
--    if(SiS_Pr->SiS_HiVision & 0x03) temp &= 0xfe;
--    
-+     temp ^= 0x01;
-+     if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+        TimingPoint = SiS_Pr->SiS_HiTVSt2Timing;
-+        if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+           if(modeflag & Charx8Dot) TimingPoint = SiS_Pr->SiS_HiTVSt1Timing;
-+           else TimingPoint = SiS_Pr->SiS_HiTVTextTiming;
-+        }
-+     } else TimingPoint = SiS_Pr->SiS_HiTVExtTiming;
-+
-+     if(SiS_Pr->SiS_HiVision & 0x03) temp &= 0xfe;
-+
-   } else {
--  
--    if(SiS_Pr->SiS_VBInfo & SetPALTV){
--      TimingPoint = SiS_Pr->SiS_PALTiming;
--      PhasePoint  = SiS_Pr->SiS_PALPhase;
-+     if(SiS_Pr->SiS_VBInfo & SetPALTV){
--      if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
--          ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
--          (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
--         PhasePoint = SiS_Pr->SiS_PALPhase2;
--      }
-+        TimingPoint = SiS_Pr->SiS_PALTiming;
-+        PhasePoint  = SiS_Pr->SiS_PALPhase;
--    } else {
-+        if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-+            ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+            (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-+           PhasePoint = SiS_Pr->SiS_PALPhase2;
-+        }
-+
-+     } else {
-         temp |= 0x10;
--      TimingPoint = SiS_Pr->SiS_NTSCTiming;
--      PhasePoint  = SiS_Pr->SiS_NTSCPhase;
-+        TimingPoint = SiS_Pr->SiS_NTSCTiming;
-+        PhasePoint  = SiS_Pr->SiS_NTSCPhase;
-         if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-           ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-             (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
--              PhasePoint = SiS_Pr->SiS_NTSCPhase2;
-+           PhasePoint = SiS_Pr->SiS_NTSCPhase2;
-         }
--    }
--    
-+     }
-+
-   }
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x00,temp);
-@@ -7044,36 +7155,35 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-      temp = 0x38;
-   }
-   if(temp) {
--    if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--      if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
--          temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,temp);
--          if(temp1 & EnablePALM) {    /* 0x40 */
--                      PhasePoint = SiS_Pr->SiS_PALMPhase;
--              if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
--                  ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
--                    (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
--                 PhasePoint = SiS_Pr->SiS_PALMPhase2;
--              }
--        }
--          if(temp1 & EnablePALN) {    /* 0x80 */
--                      PhasePoint = SiS_Pr->SiS_PALNPhase;
--              if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
--                  ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
--                    (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
--                 PhasePoint = SiS_Pr->SiS_PALNPhase2;
--              }
--        }
--      }
--    }
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+        if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-+           temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,temp);
-+           if(temp1 & EnablePALM) {   /* 0x40 */
-+              PhasePoint = SiS_Pr->SiS_PALMPhase;
-+            if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-+                ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+                  (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-+               PhasePoint = SiS_Pr->SiS_PALMPhase2;
-+            }
-+         }
-+           if(temp1 & EnablePALN) {   /* 0x80 */
-+              PhasePoint = SiS_Pr->SiS_PALNPhase;
-+            if( (SiS_Pr->SiS_VBType & VB_SIS301B302B) &&
-+                ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
-+                  (SiS_Pr->SiS_SetFlag & TVSimuMode) ) ) {
-+               PhasePoint = SiS_Pr->SiS_PALNPhase2;
-+            }
-+         }
-+        }
-+     }
-   }
- #ifdef SIS315H
--  /* TW: 650/301LV BIOS */
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
-      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {  
-         if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-            if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--              if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
-+              if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) {
-                PhasePoint = SiS_Pr->SiS_SpecialPhase;
-             }
-            }
-@@ -7094,12 +7204,12 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   }
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--    if(HwDeviceExtension->jChipType >= SIS_315H) {
--      if(!(SiS_Pr->SiS_ModeType & 0x07))
-+     if(HwDeviceExtension->jChipType >= SIS_315H) {
-+        if(!(SiS_Pr->SiS_ModeType & 0x07))
-+           SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
-+     } else {
-         SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
--    } else {
--      SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
--    }
-+     }
-   }
-   SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x0A,SiS_Pr->SiS_NewFlickerMode);
-@@ -7110,11 +7220,11 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x38,SiS_Pr->SiS_RY4COE);
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
--      if(SiS_Pr->SiS_HiVision == 3) tempax = 950;
--      else tempax = 440;
-+     if(SiS_Pr->SiS_HiVision == 3) tempax = 950;
-+     else tempax = 440;
-   } else {
--    if(SiS_Pr->SiS_VBInfo & SetPALTV) tempax = 520;
--    else tempax = 440;
-+     if(SiS_Pr->SiS_VBInfo & SetPALTV) tempax = 520;
-+     else tempax = 440;
-   }
-   if( ( ( (!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) || (SiS_Pr->SiS_HiVision == 3) ) && (SiS_Pr->SiS_VDE <= tempax) ) ||
-@@ -7134,18 +7244,18 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-      SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,temp);
-      if( (SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) &&
--        (SiS_Pr->SiS_HiVision != 3) &&
--        (SiS_Pr->SiS_VGAHDE >= 1024) ) {
-+         (SiS_Pr->SiS_HiVision != 3) &&
-+         (SiS_Pr->SiS_VGAHDE >= 1024) ) {
-         if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x19);
-            SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x52);
-         } else {
-            if(HwDeviceExtension->jChipType >= SIS_315H) {
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x17);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x1d);
-+              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x17);
-+              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x1d);
-          } else {
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x0b);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x11);
-+              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x0b);
-+              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x11);
-          }
-         }
-      }
-@@ -7154,7 +7264,7 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   tempcx = SiS_Pr->SiS_HT;
--  /* TW: 650/30xLV 1.10.6s */
-+  /* 650/30xLV 1.10.6s */
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
-       if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
-                  tempcx >>= 1;
-@@ -7181,7 +7291,7 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   tempcx += 7;
-   if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-      (SiS_Pr->SiS_HiVision == 3)) {
--       tempcx -= 4;
-+     tempcx -= 4;
-   }
-   temp = (tempcx & 0x00FF) << 4;
-   SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x22,0x0F,temp);
-@@ -7201,8 +7311,8 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   tempbx += 8;
-   if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-      (SiS_Pr->SiS_HiVision == 3)) {
--    tempbx -= 4;
--    tempcx = tempbx;
-+     tempbx -= 4;
-+     tempcx = tempbx;
-   }
-   temp = (tempbx & 0x00FF) << 4;
-   SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x29,0x0F,temp);
-@@ -7231,8 +7341,8 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   tempcx -= 11;
-   if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
--    tempax = SiS_GetVGAHT2(SiS_Pr) - 1;
--    tempcx = tempax;
-+     tempax = SiS_GetVGAHT2(SiS_Pr) - 1;
-+     tempcx = tempax;
-   }
-   temp = tempcx & 0x00FF;
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2E,temp);
-@@ -7242,38 +7352,38 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 746;
-   if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 853;
-   if(HwDeviceExtension->jChipType < SIS_315H) {
--      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempbx >>= 1;
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempbx >>= 1;
-   } else {
--      if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
--         tempbx >>= 1;
--         if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
--            if(ModeNo <= 0x13) {
--               if(crt2crtc == 1) {
--                  tempbx++;
--                 }
--            }
--         } else {
--              if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
--               if(crt2crtc == 4)   /* TW: BIOS calls GetRatePtrCRT2 here - does not make sense */
--                    if(SiS_Pr->SiS_ModeType <= 3) tempbx++;
--            }
-+     if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
-+      tempbx >>= 1;
-+      if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+         if(ModeNo <= 0x13) {
-+            if(crt2crtc == 1) {
-+               tempbx++;
-+              }
-          }
--        }
-+      } else {
-+           if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+            if(crt2crtc == 4)   /* BIOS calls GetRatePtrCRT2 here - does not make sense */
-+                 if(SiS_Pr->SiS_ModeType <= 3) tempbx++;
-+         }
-+      }
-+     }
-   }
-   tempbx -= 2;
-   temp = tempbx & 0x00FF;
-   if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-      (SiS_Pr->SiS_HiVision == 3)) {
--    if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
--      if(ModeNo == 0x2f) temp++;
--    }
-+     if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+        if(ModeNo == 0x2f) temp++;
-+     }
-   }
--  /* TW: From 1.10.7w - doesn't make sense */
-+  /* From 1.10.7w - doesn't make sense */
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-      if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-         if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
-          if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {   /* SetFlag?? */
--             if(ModeNo == 0x03) temp++;
-+            if(ModeNo == 0x03) temp++;
-          }
-       }
-      }
-@@ -7285,15 +7395,15 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   tempax |= (tempbx & 0xFF00);
-   if(HwDeviceExtension->jChipType < SIS_315H) {
-      if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV)) {
--        if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART)) {          /* TW: New from 630/301B (II) BIOS */
-+        if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART)) {          /* New from 630/301B (II) BIOS */
-            tempax |= 0x1000;
-            if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSVIDEO))  tempax |= 0x2000;
-         }
-      }
-   } else {
-      /* TODO Check this with other BIOSes */
--     if((!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV)) && 
--        (SiS_Pr->SiS_HiVision == 3)) {
-+     if((!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV))
-+         /* && (SiS_Pr->SiS_HiVision == 3) */ ) {
-       tempax |= 0x1000;
-         if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSVIDEO))  tempax |= 0x2000;
-      }
-@@ -7301,12 +7411,12 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   temp = (tempax & 0xFF00) >> 8;
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,temp);
--  /* TW: 650/30xLV 1.10.6s */
-+  /* 650/30xLV 1.10.6s */
-   if(HwDeviceExtension->jChipType > SIS_315H) {
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-         if( (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-             (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) ) {
--            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x10,0x60);
-+           SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x10,0x60);
-         }
-      }
-   }
-@@ -7322,79 +7432,70 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-      }
-   }
--  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {     
--    tempbx = SiS_Pr->SiS_VDE;
--    if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
--         tempbx >>= 1;
--    }
--    tempbx -= 3;
--    tempbx &= 0x03ff;
--    temp = ((tempbx & 0xFF00) >> 8) << 5;
--    temp |= 0x18;
--    SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x46,temp);
--    temp = tempbx & 0x00FF;
--    SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x47,temp);     /* tv gatingno */
--    if(HwDeviceExtension->jChipType >= SIS_315H) {    /* TW: 650/30xLV 1.10.6s */
--       if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--          tempax = 0;
--          if(SiS_Pr->SiS_HiVision & 0x03) {
--           tempax = 0x3000;
--           if(SiS_Pr->SiS_HiVision & 0x01) tempax = 0x5000;
--        }
--        temp = (tempax & 0xFF00) >> 8;
--          SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4d,temp);
--       }
--    }
-+  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+     tempbx = SiS_Pr->SiS_VDE;
-+     if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
-+        tempbx >>= 1;
-+     }
-+     tempbx -= 3;
-+     tempbx &= 0x03ff;
-+     temp = ((tempbx & 0xFF00) >> 8) << 5;
-+     temp |= 0x18;
-+     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x46,temp);
-+     temp = tempbx & 0x00FF;
-+     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x47,temp);    /* tv gatingno */
-+     if(HwDeviceExtension->jChipType >= SIS_315H) {
-+        if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+           tempax = 0;
-+           if(SiS_Pr->SiS_HiVision & 0x03) {
-+            tempax = 0x3000;
-+            if(SiS_Pr->SiS_HiVision & 0x01) tempax = 0x5000;
-+         }
-+         temp = (tempax & 0xFF00) >> 8;
-+           SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4d,temp);
-+        }
-+     }
-   }
-   tempbx &= 0x00FF;
-   if(!(modeflag & HalfDCLK)) {
--    tempcx = SiS_Pr->SiS_VGAHDE;
--    if(tempcx >= SiS_Pr->SiS_HDE) {
--      tempbx |= 0x2000;
--      tempax &= 0x00FF;
--    }
-+     if(SiS_Pr->SiS_VGAHDE >= SiS_Pr->SiS_HDE) {
-+        tempbx |= 0x2000;
-+        tempax &= 0x00FF;
-+     }
-   }
-   tempcx = 0x0101;
--/*if(SiS_Pr->SiS_VBInfo & (SetPALTV | SetCRT2ToTV)) {  */ /*301b- TW: BIOS BUG? */
-+/*if(SiS_Pr->SiS_VBInfo & (SetPALTV | SetCRT2ToTV)) {  */ /* BIOS BUG? */
-   if(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) {
--    if(!(SiS_Pr->SiS_HiVision & 0x03)) {
--      if(SiS_Pr->SiS_VGAHDE >= 1024) {
--        if((!(modeflag & HalfDCLK)) || (HwDeviceExtension->jChipType < SIS_315H)) {   /* TW: This check not in 630/301B */
--          tempcx = 0x1920;
--          if(SiS_Pr->SiS_VGAHDE >= 1280) {
--            tempcx = 0x1420;
--            tempbx &= 0xDFFF;
--          }
-+     if(!(SiS_Pr->SiS_HiVision & 0x03)) {
-+        if(SiS_Pr->SiS_VGAHDE >= 1024) {
-+           if((!(modeflag & HalfDCLK)) || (HwDeviceExtension->jChipType < SIS_315H)) {
-+              tempcx = 0x1920;
-+              if(SiS_Pr->SiS_VGAHDE >= 1280) {
-+                 tempcx = 0x1420;
-+                 tempbx &= 0xDFFF;
-+              }
-+           }
-         }
--      }
--    }
-+     }
-   }
-   if(!(tempbx & 0x2000)) {
--    if(modeflag & HalfDCLK) {
--         tempcx = (tempcx & 0xFF00) | (((tempcx & 0x00FF) << 1) & 0xff);
--    }
--    push1 = tempbx;
--    tempeax = SiS_Pr->SiS_VGAHDE;
--    tempebx = (tempcx & 0xFF00) >> 8;
--    longtemp = tempeax * tempebx;
--    tempecx = tempcx & 0x00FF;
--    longtemp /= tempecx;
--    longtemp <<= 0x0d;
--    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+     if(modeflag & HalfDCLK) {
-+        tempcx = (tempcx & 0xFF00) | ((tempcx << 1) & 0x00FF);
-+     }
-+     longtemp = (SiS_Pr->SiS_VGAHDE * ((tempcx & 0xFF00) >> 8)) / (tempcx & 0x00FF);
-+     longtemp <<= 13;
-+     if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-       longtemp <<= 3;
--    }
--    tempecx = SiS_Pr->SiS_HDE;
--    temp2 = longtemp % tempecx;
--    tempeax = longtemp / tempecx;
--    if(temp2 != 0) tempeax++;
--    tempax = (USHORT)tempeax;
--    tempbx = push1;
--    tempcx = (tempcx & 0xff00) | (((tempax & 0xFF00) >> 8) >> 5);
--    tempbx |= (tempax & 0x1F00);
--    tempax = ((tempax & 0x00FF) << 8) | (tempax & 0x00FF);
-+     }
-+     tempeax = longtemp / SiS_Pr->SiS_HDE;
-+     if(longtemp % SiS_Pr->SiS_HDE) tempeax++;
-+     tempax = (USHORT)tempeax;
-+     tempcx = (tempcx & 0xFF00) | ((tempax & 0xFF00) >> (8 + 5));
-+     tempbx |= (tempax & 0x1F00);
-+     tempax = ((tempax & 0x00FF) << 8) | (tempax & 0x00FF);
-   }
-   temp = (tempax & 0xFF00) >> 8;
-@@ -7403,33 +7504,32 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x45,0xC0,temp);
-   if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--       temp = tempcx & 0x00FF;
--       if(tempbx & 0x2000) temp = 0;
--       temp |= 0x18;
--       SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x46,0xE0,temp);
--       if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--             tempbx = 0x0382;  
--             tempcx = 0x007e;  
--       } else {
--             tempbx = 0x0369;  
--             tempcx = 0x0061;  
--       }
--       temp = (tempbx & 0x00FF) ;
--       SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4B,temp);
--       temp = (tempcx & 0x00FF) ;
--       SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4C,temp);
--       tempbx &= 0x03FF;
--       temp = (tempcx & 0xFF00) >> 8;
--       temp = (temp & 0x0003) << 2;
--       temp |= (tempbx >> 8);
--       if(HwDeviceExtension->jChipType < SIS_315H) {
--          SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4D,temp);
--       } else {
--          SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4D,0xF0,temp);
--       }
-+     temp = tempcx & 0x00FF;
-+     if(tempbx & 0x2000) temp = 0;
-+     temp |= 0x18;
-+     SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x46,0xE0,temp);
-+
-+     if(SiS_Pr->SiS_VBInfo & SetPALTV) {
-+        tempbx = 0x0382;
-+        tempcx = 0x007e;
-+     } else {
-+        tempbx = 0x0369;
-+        tempcx = 0x0061;
-+     }
-+     temp = (tempbx & 0x00FF) ;
-+     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4B,temp);
-+     temp = (tempcx & 0x00FF) ;
-+     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4C,temp);
-+     temp = (tempcx & 0x0300) >> (8 - 2);
-+     temp |= ((tempbx >> 8) & 0x03);
-+     if(HwDeviceExtension->jChipType < SIS_315H) {
-+        SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x4D,temp);
-+     } else {
-+        SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4D,0xF0,temp);
-+     }
--       temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x43);
--       SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,(USHORT)(temp - 3));
-+     temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x43);
-+     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,(USHORT)(temp - 3));
-   }
-   temp = 0;
-@@ -7440,23 +7540,33 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-      temp = 0x38;
-   }
-   if(temp) {
--      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--          if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
--               if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM) {  /* 0x40 */
--                     SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xEF);
--                     temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x01);
--                     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,temp - 1);
--               }
--          }
--      }
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+        if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-+           if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM) {  /* 0x40 */
-+              SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xEF);
-+              temp = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x01);
-+              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,temp - 1);
-+           }
-+        }
-+     }
-+  }
-+
-+  if(HwDeviceExtension->jChipType >= SIS_315H) {
-+     if((SiS_Pr->SiS_VBType & VB_SIS301B302B) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
-+        if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+           SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,0x00);
-+        }
-+     }
-   }
-+#if 0  /* Old: Why HiVision? */
-   if( (SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) &&
-       (!(SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) ) {
--    if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--      SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,0x00);
--    }
-+     if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
-+        SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,0x00);
-+     }
-   }
-+#endif
-   if(HwDeviceExtension->jChipType < SIS_315H) {
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-@@ -7465,74 +7575,43 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-       return;
-      }
-   } else {
--     /* TW: !!! The following is a duplicate, done for LCDA as well (see above) */
-+     /* !!! The following is a duplicate, done for LCDA as well (see above) */
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--       if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {    
--         if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--           if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--             if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
--               SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1c,0xa7);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1d,0x07);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1e,0xf2);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1f,0x6e);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x20,0x17);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,0x8b);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x22,0x73);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,0x53);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x24,0x13);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x25,0x40);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x26,0x34);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x27,0xf4);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x28,0x63);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x29,0xbb);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2a,0xcc);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2b,0x7a);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2c,0x58);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2d,0xe4);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2e,0x73);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,0xda);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0x13);
--             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x43,0x72);
--           }
--           }
--         }
--       }
--       return;
-+        SiS_SetTVSpecial(SiS_Pr, ModeNo);
-+        return;
-      }
-   }
--  /* TW: From here: Part2 LCD setup */
-+  /* From here: Part2 LCD setup */
-   tempbx = SiS_Pr->SiS_HDE;
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
--      /* TW: 650/30xLV 1.10.6s */
--      if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
-+     /* 650/30xLV 1.10.6s */
-+     if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
-   }
-   tempbx--;                                   /* RHACTE=HDE-1 */
-   temp = tempbx & 0x00FF;
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2C,temp);
--  temp = (tempbx & 0xFF00) >> 8;
--  temp <<= 4;
-+  temp = (tempbx & 0xFF00) >> 4;
-   SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2B,0x0F,temp);
-   temp = 0x01;
-   if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--    if(SiS_Pr->SiS_ModeType == ModeEGA) {
--      if(SiS_Pr->SiS_VGAHDE >= 1024) {
--        temp = 0x02;
--      if(HwDeviceExtension->jChipType >= SIS_315H) {
--           if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
--             temp = 0x01;
-+     if(SiS_Pr->SiS_ModeType == ModeEGA) {
-+        if(SiS_Pr->SiS_VGAHDE >= 1024) {
-+           temp = 0x02;
-+         if(HwDeviceExtension->jChipType >= SIS_315H) {
-+              if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
-+                 temp = 0x01;
-+            }
-          }
--      }
--      }
--    }
-+        }
-+     }
-   }
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x0B,temp);
--  tempbx = SiS_Pr->SiS_VDE;                   /* RTVACTEO=(VDE-1)&0xFF */
--  push1 = tempbx;
--
-+  tempbx = SiS_Pr->SiS_VDE;                   /* RTVACTEO = VDE - 1 */
-+  /* push1 = tempbx; */
-   tempbx--;
-   temp = tempbx & 0x00FF;
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x03,temp);
-@@ -7540,10 +7619,9 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0C,0xF8,temp);
-   tempcx = SiS_Pr->SiS_VT;
--  push2 = tempcx;
--
-+  /* push2 = tempcx; */
-   tempcx--;
--  temp = tempcx & 0x00FF;                      /* RVTVT=VT-1 */
-+  temp = tempcx & 0x00FF;                      /* RVTVT = VT - 1 */
-   SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x19,temp);
-   temp = (tempcx & 0xFF00) >> 8;
-@@ -7551,30 +7629,26 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   
-   /* Enable dithering; newer versions only do this for 32bpp mode */
-   if((HwDeviceExtension->jChipType == SIS_300) && (SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {
--    if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) temp |= 0x10;
-+     if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) temp |= 0x10;
-   } else if(HwDeviceExtension->jChipType < SIS_315H) {
--    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) temp |= 0x10;
--    else {
--      if(SiS_Pr->SiS_LCDInfo & LCDSync)       /* TW: 630/301 BIOS checks this */
--         temp |= 0x10;
--    }
-+     temp |= 0x10;
-   } else {
--      if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--         /* TW: 650/30xLV 1.10.6s */
--         if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
--            if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {  /* 32bpp mode? */
--                     temp |= 0x10;
--          }
--         }
--      } else {
--         temp |= 0x10;
--      }
-+     if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+        /* 650/30xLV 1.10.6s */
-+        if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
-+           if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {  /* 32bpp mode? */
-+              temp |= 0x10;
-+         }
-+        }
-+     } else {
-+        temp |= 0x10;
-+     }
-   }
-   /* 630/301 does not do all this */
-   if((SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
-      if((HwDeviceExtension->jChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
--        /* TW: 650/30xLV 1.10.6s */
-+        /* 650/30xLV 1.10.6s */
-         temp |= (SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37) >> 6);
-       temp |= 0x08;                                           /* From 1.10.7w */
-       if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) temp |= 0x04;  /* From 1.10.7w */
-@@ -7595,17 +7669,15 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-   SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x17,0xFB);
-   SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x18,0xDF);
--  /* 1280x960, 1280x1024 and 1600x1200 data invalid/missing in tables, use old calculation */
--  if((HwDeviceExtension->jChipType >= SIS_315H)             && 
--     (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)                &&  
--     (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024) &&
--     (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1600x1200) &&
--     (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x960)) {
-+  /* much data invalid/missing in tables, use old calculation in such case */
-+  if((HwDeviceExtension->jChipType >= SIS_315H)         &&
-+     (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)            &&
-+     ((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)  ||
-+      (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+      (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)) ) {
-      
--#ifdef SIS315H                                                        /* ------------- 310/325/330 series ------------ */
-+#ifdef SIS315H                                                        /* ------------- 315/330 series ------------ */
--      /* TW: Inserted this entire section from 650/301LV(x) BIOS */
--      
-       /* Using this on the 301B with an auto-expanding 1024 panel (CR37=1) results
-        * in a black bar in modes < 1024; if the panel is non-expanding, the bridge
-        * scales all modes to 1024. All modes in both variants (exp/non-exp) work.
-@@ -7664,7 +7736,6 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-       }
-      }
--     /* TW: 650/30xLV 1.10.6s: */
-      /* !!! This is a duplicate, done for LCDA as well - see above */
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-@@ -7683,15 +7754,12 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-        * the bridge scales all modes to 1024.
-        * !!! Malfunction at 640x480 and 640x400 when panel is auto-expanding - black screen !!!
-        */
--  
-+
-+    /* cx = VT - 1 */
-+
-     tempcx++;
--    
--    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)       tempbx =  768;
--    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) tempbx = 1024;
--    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempbx = 1200;
--    else if(SiS_Pr->SiS_VDE != 1024)                            tempbx =  960;
--    else                                                        tempbx = 1024;
--    
-+
-+    tempbx = SiS_Pr->PanelYRes;
- #if 0  /* old */
-     tempbx = 768;
-     if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1024x768) {
-@@ -7706,36 +7774,40 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-       }
-     }
- #endif
--    
-+
-     if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
--      tempbx = SiS_Pr->SiS_VDE - 1;
--      tempcx--;
-+       tempbx = SiS_Pr->SiS_VDE - 1;
-+       tempcx--;
-     }
--    
-+
-     tempax = 1;
-     if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
--      if(tempbx != SiS_Pr->SiS_VDE) {
--        tempax = tempbx;
--/*    if(SiS_Pr->SiS_VGAVDE == 525) tempax += 60;   in 650/301B BIOS */
--        if(tempax < SiS_Pr->SiS_VDE) {
--          tempax = 0;
--          tempcx = 0;
--        } else {
--          tempax -= SiS_Pr->SiS_VDE;
--        }
--        tempax >>= 1;
--      }
--      tempcx -= tempax; /* lcdvdes */
--      tempbx -= tempax; /* lcdvdee */
--    } else {
--      tempax >>= 1;
--      tempcx -= tempax; /* lcdvdes */
--      tempbx -= tempax; /* lcdvdee */
-+       if(tempbx != SiS_Pr->SiS_VDE) {
-+          tempax = tempbx;
-+          if(tempax < SiS_Pr->SiS_VDE) {
-+             tempax = 0;
-+             tempcx = 0;
-+          } else {
-+             tempax -= SiS_Pr->SiS_VDE;
-+          }
-+          tempax >>= 1;
-+       }
-+       tempcx -= tempax; /* lcdvdes */
-+       tempbx -= tempax; /* lcdvdee */
-     }
--    
-+#if 0  /* meaningless: 1 / 2 = 0... */
-+    else {
-+       tempax >>= 1;
-+       tempcx -= tempax; /* lcdvdes */
-+       tempbx -= tempax; /* lcdvdee */
-+    }
-+#endif
-+
-+    /* Non-expanding: lcdvdees = tempcx = VT-1; lcdvdee = tempbx = VDE-1 */
-+
- #ifdef TWDEBUG
--    xf86DrvMsg(0, X_INFO, "lcdvds 0x%x lcdvde 0x%x\n", tempcx, tempbx);
--#endif    
-+    xf86DrvMsg(0, X_INFO, "lcdvdes 0x%x lcdvdee 0x%x\n", tempcx, tempbx);
-+#endif
-     temp = tempcx & 0x00FF;                                   /* RVEQ1EQ=lcdvdes */
-     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,temp);
-@@ -7746,140 +7818,183 @@ SiS_SetGroup2(SiS_Private *SiS_Pr, USHOR
-     temp |= ((tempcx & 0xFF00) >> 8);
-     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,temp);
--    tempbx = push2;
--    tempax = push1;
--    tempcx = tempbx;
--    tempcx -= tempax;
--    tempcx >>= 4;
-+    tempbx = SiS_Pr->SiS_VT;    /* push2; */
-+    tempax = SiS_Pr->SiS_VDE;   /* push1; */
-+    tempcx = (tempbx - tempax) >> 4;
-     tempbx += tempax;
-     tempbx >>= 1;
-     if(SiS_Pr->SiS_LCDInfo & DontExpandLCD)  tempbx -= 10;
--    
-+
-+    /* non-expanding: lcdvrs = tempbx = ((VT + VDE) / 2) - 10 */
-+
-+    if(SiS_Pr->UseCustomMode) {
-+       tempbx = SiS_Pr->CVSyncStart;
-+    }
-+
- #ifdef TWDEBUG
-     xf86DrvMsg(0, X_INFO, "lcdvrs 0x%x\n", tempbx);
- #endif
--    temp = tempbx & 0x00FF;                                   /* RTVACTEE=lcdvrs */
-+    temp = tempbx & 0x00FF;                                   /* RTVACTEE = lcdvrs */
-     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,temp);
-     temp = ((tempbx & 0xFF00) >> 8) << 4;
-     tempbx += (tempcx + 1);
-     temp |= (tempbx & 0x000F);
-+
-+    if(SiS_Pr->UseCustomMode) {
-+       temp &= 0xf0;
-+       temp |= (SiS_Pr->CVSyncEnd & 0x0f);
-+    }
-+
-+#ifdef TWDEBUG
-+    xf86DrvMsg(0, X_INFO, "lcdvre[3:0] 0x%x\n", (temp & 0x0f));
-+#endif
-+
-     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,temp);
--    /* TW: Code from 630/301B (I+II) BIOS */
-+    /* Code from 630/301B (I+II) BIOS */
--    if( ( ( (HwDeviceExtension->jChipType == SIS_630) ||
--            (HwDeviceExtension->jChipType == SIS_730) ) &&
--          (HwDeviceExtension->jChipRevision > 2) )  &&
--        (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) &&
--        (!(SiS_Pr->SiS_SetFlag & LCDVESATiming))  &&
--        (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
--            if(ModeNo == 0x13) {
--              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,0xB9);
--              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,0xCC);
--              SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xA6);
--            } else {
--              if((crt2crtc & 0x3F) == 4) {
-+    if(!SiS_Pr->UseCustomMode) {
-+       if( ( ( (HwDeviceExtension->jChipType == SIS_630) ||
-+               (HwDeviceExtension->jChipType == SIS_730) ) &&
-+             (HwDeviceExtension->jChipRevision > 2) )  &&
-+           (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) &&
-+           (!(SiS_Pr->SiS_SetFlag & LCDVESATiming))  &&
-+           (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
-+          if(ModeNo == 0x13) {
-+             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,0xB9);
-+             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,0xCC);
-+             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xA6);
-+          } else {
-+             if((crt2crtc & 0x3F) == 4) {
-                 SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x2B);
-                 SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x13);
-                 SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,0xE5);
-                 SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x05,0x08);
-                 SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xE2);
--              }
--            }
-+             }
-+          }
-+       }
-     }
--    /* TW: Inserted missing code from 630/301B BIOS;
-+    /* Inserted missing code from 630/301B BIOS;
-      *     Strangely, this is done in all 650 BIOSes as
-      *     well (although LCDTypeInfo is not used there
-      *     in the same way as on 300 series)
-      */
-+#ifdef SIS300
-+    if(HwDeviceExtension->jChipType < SIS_315H) {
-+       if(!SiS_Pr->UseCustomMode) {
-+          if(SiS_Pr->SiS_LCDTypeInfo == 0x0c) {
-+             crt2crtc &= 0x1f;
-+             tempcx = 0;
-+             if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
-+                if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+                   tempcx += 7;
-+                }
-+             }
-+             tempcx += crt2crtc;
-+             if(crt2crtc >= 4) {
-+                SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xff);
-+             }
--    if(SiS_Pr->SiS_LCDTypeInfo == 0x0c) {
--         crt2crtc &= 0x1f;
--         tempcx = 0;
--         if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
--           if (SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
--              tempcx += 7;
--           }
--         }
--         tempcx += crt2crtc;
--         if (crt2crtc >= 4) {
--           SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x06,0xff);
--         }
--
--         if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
--           if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
--             if(crt2crtc == 4) {
--                SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x28);
-+             if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
-+                if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+                   if(crt2crtc == 4) {
-+                      SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x01,0x28);
-+                   }
-+                }
-              }
--           }
--         }
--         SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x18);
--         SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,atable[tempcx]);
-+             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x02,0x18);
-+             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,atable[tempcx]);
-+          }
-+       }
-     }
-+#endif
--    tempcx = (SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE) >> 2;     /* (HT-HDE)>>2     */
-+    tempcx = (SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE) >> 2;     /* (HT - HDE) >> 2 */
-     tempbx = SiS_Pr->SiS_HDE + 7;                       /* lcdhdee         */
-     if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--         tempbx += 2;
-+       tempbx += 2;
-     }
-     push1 = tempbx;
-+
- #ifdef TWDEBUG
--    xf86DrvMsg(0, X_INFO, "lcdhde 0x%x\n", tempbx);
--#endif    
--    temp = tempbx & 0x00FF;                                     /* RHEQPLE=lcdhdee */
-+    xf86DrvMsg(0, X_INFO, "lcdhdee 0x%x\n", tempbx);
-+#endif
-+
-+    temp = tempbx & 0x00FF;                                     /* RHEQPLE = lcdhdee */
-     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x23,temp);
-     temp = (tempbx & 0xFF00) >> 8;
-     SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0xF0,temp);
-     temp = 7;
-     if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--         temp += 2;
-+       temp += 2;
-     }
--    SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1F,temp);       /* RHBLKE=lcdhdes[7:0] */
-+    SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1F,temp);       /* RHBLKE = lcdhdes[7:0] */
-     SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x20,0x0F);     /* lcdhdes [11:8] */
-     tempbx += tempcx;
-     push2 = tempbx;
-+
-+    if(SiS_Pr->UseCustomMode) {
-+       tempbx = SiS_Pr->CHSyncStart + 7;
-+       if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+          tempbx += 2;
-+       }
-+    }
-+
- #ifdef TWDEBUG
-     xf86DrvMsg(0, X_INFO, "lcdhrs 0x%x\n", tempbx);
- #endif
--    temp = tempbx & 0x00FF;                                     /* RHBURSTS=lcdhrs */
--    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--       if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) { 
--          if(SiS_Pr->SiS_HDE == 1280) temp = 0x47;
-+
-+    temp = tempbx & 0x00FF;                                     /* RHBURSTS = lcdhrs */
-+    if(!SiS_Pr->UseCustomMode) {
-+       if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+          if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
-+             if(SiS_Pr->SiS_HDE == 1280) temp = 0x47;
-+          }
-        }
-     }
-     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x1C,temp);
--    temp = ((tempbx & 0xFF00) >> 8) << 4;
-+    temp = (tempbx & 0x0F00) >> 4;
-     SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0x0F,temp);
-     tempbx = push2;
-     tempcx <<= 1;
-     tempbx += tempcx;
-+
-+    if(SiS_Pr->UseCustomMode) {
-+       tempbx = SiS_Pr->CHSyncEnd + 7;
-+       if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+          tempbx += 2;
-+       }
-+    }
-+
- #ifdef TWDEBUG
-     xf86DrvMsg(0, X_INFO, "lcdhre 0x%x\n", tempbx);
--#endif    
--    temp = tempbx & 0x00FF;                                     /* RHSYEXP2S=lcdhre */
-+#endif
-+
-+    temp = tempbx & 0x00FF;                                     /* RHSYEXP2S = lcdhre */
-     SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x21,temp);
-     if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
--      if(SiS_Pr->SiS_VGAVDE == 525) {
--        if(SiS_Pr->SiS_ModeType <= ModeVGA)
--         temp=0xC6;
--        else
--                 temp=0xC3;
--        SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
--        SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0xB3);
--      } else if(SiS_Pr->SiS_VGAVDE == 420) {
--        if(SiS_Pr->SiS_ModeType <= ModeVGA)
--         temp=0x4F;
--        else
--                 temp=0x4D;   
--        SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
--      }
-+       if(SiS_Pr->SiS_VGAVDE == 525) {
-+          if(SiS_Pr->SiS_ModeType <= ModeVGA)
-+           temp=0xC6;
-+          else
-+                   temp=0xC3;
-+          SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
-+          SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x30,0xB3);
-+       } else if(SiS_Pr->SiS_VGAVDE == 420) {
-+          if(SiS_Pr->SiS_ModeType <= ModeVGA)
-+           temp=0x4F;
-+          else
-+                   temp=0x4D;
-+          SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x2f,temp);
-+       }
-     }
-     SiS_Set300Part2Regs(SiS_Pr, HwDeviceExtension, ModeIdIndex,
-                         RefreshRateTableIndex, BaseAddr, ModeNo);
-@@ -7898,7 +8013,7 @@ SiS_GetVGAHT2(SiS_Private *SiS_Pr)
-   return((USHORT) tempax);
- }
--/* TW: New from 300/301LV BIOS 1.16.51 for ECS A907. Seems highly preliminary. */
-+/* New from 300/301LV BIOS 1.16.51 for ECS A907. Seems highly preliminary. */
- void
- SiS_Set300Part2Regs(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                       USHORT ModeIdIndex, USHORT RefreshRateTableIndex,
-@@ -7910,18 +8025,19 @@ SiS_Set300Part2Regs(SiS_Private *SiS_Pr,
-   if(HwDeviceExtension->jChipType != SIS_300) return;
-   if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) return;
-+  if(SiS_Pr->UseCustomMode) return;
--  if(ModeNo<=0x13) {
--      crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+  if(ModeNo <= 0x13) {
-+     crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-   } else {
--      crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-+     crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-   }
-   resindex = crt2crtc & 0x3F;
-   if(SiS_Pr->SiS_SetFlag & LCDVESATiming) CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
-   else                                    CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_2;
--  /* TW: The BIOS code (1.16.51) is obviously a fragment! */
-+  /* The BIOS code (1.16.51) is obviously a fragment! */
-   if(ModeNo > 0x13) {
-      CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
-      resindex = 4;
-@@ -7942,7 +8058,6 @@ SiS_Set300Part2Regs(SiS_Private *SiS_Pr,
-   SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
- }
--/* TW: Set 301 Macrovision(tm) registers */
- void
- SiS_SetGroup3(SiS_Private *SiS_Pr, USHORT  BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-               USHORT ModeIdIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
-@@ -7954,24 +8069,35 @@ SiS_SetGroup3(SiS_Private *SiS_Pr, USHOR
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
--  if(ModeNo<=0x13)
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
--  else
-+  if(ModeNo<=0x13) {
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+  } else {
-+     if(SiS_Pr->UseCustomMode) {
-+        modeflag = SiS_Pr->CModeFlag;
-+     } else {
-       modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+     }
-+  }
-+#ifndef SIS_CP
-   SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x00,0x00);
-+#endif  
-+
-+#ifdef SIS_CP
-+  SIS_CP_INIT301_CP
-+#endif
-   if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--    SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
--    SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
-+     SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
-+     SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
-   } else {
--    if(HwDeviceExtension->jChipType >= SIS_315H) {
--      SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF5);
--      SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xB7);
--    } else {
--      SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF6);
--      SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xBf);
--    }
-+     if(HwDeviceExtension->jChipType >= SIS_315H) {
-+        SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF5);
-+        SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xB7);
-+     } else {
-+        SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xF6);
-+        SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xBf);
-+     }
-   }
-   temp = 0;
-@@ -7982,38 +8108,41 @@ SiS_SetGroup3(SiS_Private *SiS_Pr, USHOR
-      temp = 0x38;
-   }
-   if(temp) {
--      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--          if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
--              if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM){  /* 0x40 */
--                  SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
--                  SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
--                  SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x3D,0xA8);
--              }
--          }
--      }
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+        if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x31) & 0x01) {
-+           if(SiS_GetReg1(SiS_Pr->SiS_P3d4,temp) & EnablePALM){  /* 0x40 */
-+              SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x13,0xFA);
-+              SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x14,0xC8);
-+              SiS_SetReg1(SiS_Pr->SiS_Part3Port,0x3D,0xA8);
-+           }
-+        }
-+     }
-   }
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
--    tempdi = SiS_Pr->SiS_HiTVGroup3Data;
--    if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
--      tempdi = SiS_Pr->SiS_HiTVGroup3Simu;
--      if(!(modeflag & Charx8Dot)) {
--        tempdi = SiS_Pr->SiS_HiTVGroup3Text;
--      }
--    }
--    if(SiS_Pr->SiS_HiVision & 0x03) {
--       tempdi = SiS_HiTVGroup3_1;
--       if(SiS_Pr->SiS_HiVision & 0x02) tempdi = SiS_HiTVGroup3_2;
--    }
--    for(i=0; i<=0x3E; i++){
--       SiS_SetReg1(SiS_Pr->SiS_Part3Port,i,tempdi[i]);
--    }
-+     tempdi = SiS_Pr->SiS_HiTVGroup3Data;
-+     if(SiS_Pr->SiS_SetFlag & TVSimuMode) {
-+        tempdi = SiS_Pr->SiS_HiTVGroup3Simu;
-+        if(!(modeflag & Charx8Dot)) {
-+           tempdi = SiS_Pr->SiS_HiTVGroup3Text;
-+        }
-+     }
-+     if(SiS_Pr->SiS_HiVision & 0x03) {
-+        tempdi = SiS_HiTVGroup3_1;
-+        if(SiS_Pr->SiS_HiVision & 0x02) tempdi = SiS_HiTVGroup3_2;
-+     }
-+     for(i=0; i<=0x3E; i++){
-+        SiS_SetReg1(SiS_Pr->SiS_Part3Port,i,tempdi[i]);
-+     }
-   }
--  return;
-+#ifdef SIS_CP
-+  SIS_CP_INIT301_CP2
-+#endif
-+
- }
--/* TW: Set 301 VGA2 registers */
-+/* Set 301 VGA2 registers */
- void
- SiS_SetGroup4(SiS_Private *SiS_Pr, USHORT  BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-               USHORT ModeIdIndex,USHORT RefreshRateTableIndex,
-@@ -8022,17 +8151,20 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-   USHORT tempax,tempcx,tempbx,modeflag,temp,temp2,resinfo;
-   ULONG tempebx,tempeax,templong;
--
--  if(ModeNo<=0x13) {
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
--      resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-+  if(ModeNo <= 0x13) {
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+     resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-   } else {
-+     if(SiS_Pr->UseCustomMode) {
-+        modeflag = SiS_Pr->CModeFlag;
-+      resinfo = 0;
-+     } else {
-       modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-       resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-+     }
-   }
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
--      /* TW: From 650/302LV 1.10.6s (not for 300/301LV - no LCDA on this combination) */
-      if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-         if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-            SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x24,0x0e);
-@@ -8049,10 +8181,10 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-         if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--         /* TW: From 650/301LV (any, incl. 1.10.6s, 1.10.7w) */
--         /* TW: This is a duplicate; done at the end, too */
-+         /* From 650/301LV (any, incl. 1.10.6s, 1.10.7w) */
-+         /* This is a duplicate; done at the end, too */
-          if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
--              SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
-+            SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
-          }
-          SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-          SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-@@ -8090,39 +8222,33 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-   tempbx = SiS_Pr->SiS_VGAHDE;
-   if(modeflag & HalfDCLK)  tempbx >>= 1;
--  /* TW: New for 650/301LV and 630/301B */
-   temp = 0xA0;
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVisionTV) {
--       temp = 0;
--       if(tempbx > 800) {
--          temp = 0xA0;
--          if(tempbx != 1024) {
--             temp = 0xC0;
--             if(tempbx != 1280) temp = 0;
--        }
--       }
--  } else
--    if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--      if(tempbx <= 800) {
--         temp = 0x80;
--       if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--            temp = 0;
--            if(tempbx > 800) temp = 0x60;
--         }
--      }
-+     temp = 0;
-+     if(tempbx > 800) {
-+        temp = 0xA0;
-+        if(tempbx != 1024) {
-+           temp = 0xC0;
-+           if(tempbx != 1280) temp = 0;
-+      }
-+     }
-+  } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-+     if(tempbx <= 800) {
-+        temp = 0x80;
-+     }
-   } else {
--      temp = 0x80;
--      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--            temp = 0;
--            if(tempbx > 800) temp = 0x60;
--      }
-+     temp = 0x80;
-+     if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-+        temp = 0;
-+        if(tempbx > 800) temp = 0x60;
-+     }
-   }
-   if(SiS_Pr->SiS_HiVision & 0x03) {
-         temp = 0;
-       if(SiS_Pr->SiS_VGAHDE == 1024) temp = 0x20;
-   }
-   if(HwDeviceExtension->jChipType >= SIS_315H) {
--      if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) temp = 0;
-+     if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) temp = 0;
-   }
-   if(SiS_Pr->SiS_VBType & VB_SIS301) {
-@@ -8144,10 +8270,10 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-   tempeax = SiS_Pr->SiS_VGAVDE;
-   tempcx |= 0x4000;
--  if(tempeax <= tempebx){
--    tempcx ^= 0x4000;
-+  if(tempeax <= tempebx) {
-+     tempcx ^= 0x4000;
-   } else {
--    tempeax -= tempebx;
-+     tempeax -= tempebx;
-   }
-   templong = (tempeax * 256 * 1024) % tempebx;
-@@ -8173,64 +8299,64 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-          tempax = SiS_Pr->SiS_VGAHDE;
-          if(modeflag & HalfDCLK) tempax >>= 1;
-          if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) || (SiS_Pr->SiS_HiVision & 0x03)) {
--           if(HwDeviceExtension->jChipType >= SIS_315H) {
--               if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempax >>= 1;
--               else if(tempax > 800) tempax -= 800;
--           } else {
--                 if(tempax > 800) tempax -= 800;
--             }
-+          if(HwDeviceExtension->jChipType >= SIS_315H) {
-+             if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempax >>= 1;
-+             else if(tempax > 800) tempax -= 800;
-+          } else {
-+               if(tempax > 800) tempax -= 800;
-+            }
-          }
- /*       if((SiS_Pr->SiS_VBInfo & (SetCRT2ToTV | SetPALTV)) && (!(SiS_Pr->SiS_HiVision & 0x03))) {  */
-        if((SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) && (!(SiS_Pr->SiS_HiVision & 0x03))) {
--           if(tempax > 800) {
--            tempbx = 8;
--              if(tempax == 1024)
--              tempax *= 25;
--              else
--              tempax *= 20;
--
--            temp = tempax % 32;
--            tempax /= 32;
--            tempax--;
--            if (temp!=0) tempax++;
--           }
-+            if(tempax > 800) {
-+             tempbx = 8;
-+               if(tempax == 1024)
-+                tempax *= 25;
-+               else
-+                tempax *= 20;
-+
-+             temp = tempax % 32;
-+             tempax /= 32;
-+             tempax--;
-+             if (temp!=0) tempax++;
-+            }
-          }
-        tempax--;
-          temp = (tempax & 0xFF00) >> 8;
-          temp &= 0x03;
--       if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {         /* From 1.10.7w */
--              if(ModeNo > 0x13) {                     /* From 1.10.7w */
--                      if(resinfo == 8) tempax = 0x1f; /* From 1.10.7w */
--              }                                       /* From 1.10.7w */
--       }                                              /* From 1.10.7w */
-+       if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {                 /* From 1.10.7w */
-+          if(ModeNo > 0x13) {                                 /* From 1.10.7w */
-+             if(resinfo == SIS_RI_1024x768) tempax = 0x1f;    /* From 1.10.7w */
-+          }                                                   /* From 1.10.7w */
-+       }                                                      /* From 1.10.7w */
-        SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x1D,tempax & 0x00FF);
-        temp <<= 4;
-        temp |= tempbx;
-        SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x1E,temp);
-        if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--          if(IS_SIS650740) {
--              temp = 0x0026;  /* 1.10.7w; 1.10.8r; needs corresponding code in Dis/EnableBridge! */
-+          if(IS_SIS550650740660) {
-+             temp = 0x0026;  /* 1.10.7w; 1.10.8r; needs corresponding code in Dis/EnableBridge! */
-           } else {
--              temp = 0x0036;
-+             temp = 0x0036;
-           }
-        } else {
--           temp = 0x0036;
-+          temp = 0x0036;
-        }
-          if((SiS_Pr->SiS_VBInfo & (SetCRT2ToTV - SetCRT2ToHiVisionTV)) &&
-                                      (!(SiS_Pr->SiS_HiVision & 0x03))) {
--              temp |= 0x01;
--              if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
--                if(!(SiS_Pr->SiS_SetFlag & TVSimuMode))
--                        temp &= 0xFE;
--              }
-+          temp |= 0x01;
-+          if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-+             if(!(SiS_Pr->SiS_SetFlag & TVSimuMode))
-+                temp &= 0xFE;
-+          }
-          }
-          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0,temp);
-        tempbx = SiS_Pr->SiS_HT;
-        if(HwDeviceExtension->jChipType >= SIS_315H) {
--              if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
-+          if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) tempbx >>= 1;
-        }
-          tempbx >>= 1;
-        tempbx -= 2;
-@@ -8238,7 +8364,7 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-          SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0xC0,temp);
-          temp = tempbx & 0x00FF;
-          SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x22,temp);
--       
-+
-          if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-           if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-                SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x24,0x0e);
-@@ -8246,24 +8372,24 @@ SiS_SetGroup4(SiS_Private *SiS_Pr, USHOR
-        }
-        if(HwDeviceExtension->jChipType >= SIS_315H) {
--           /* TW: 650/LV BIOS does this for all bridge types - assumingly wrong */
--           /* 315, 330, 650+301B BIOS don't do this at all */
--             /* TW: This is a duplicate; done for LCDA as well (see above) */
--           if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--              if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
--                 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
--              }
--              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
--              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
--              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
--           }
-+          /* 650/LV BIOS does this for all bridge types - assumingly wrong */
-+          /* 315, 330, 650+301B BIOS don't do this at all */
-+            /* This is a duplicate; done for LCDA as well (see above) */
-+          if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+             if(SiS_GetReg1(SiS_Pr->SiS_P3d4,0x39) & 0x04) {
-+                SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
-+             }
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+          }
-          } else if(HwDeviceExtension->jChipType == SIS_300) {
--           /* TW: 300/301LV BIOS does this for all bridge types - assumingly wrong */
--           if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
--              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
--              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
--              SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
--           }
-+          /* 300/301LV BIOS does this for all bridge types - assumingly wrong */
-+          if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-+             SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+          }
-        }
-   }  /* 301B */
-@@ -8278,21 +8404,26 @@ SiS_SetCRT2VCLK(SiS_Private *SiS_Pr, USH
-                  USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-   USHORT vclkindex;
--  USHORT tempah;
-+  USHORT temp, reg1, reg2;
--  vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
--                              HwDeviceExtension);
-+  if(SiS_Pr->UseCustomMode) {
-+     reg1 = SiS_Pr->CSR2B;
-+     reg2 = SiS_Pr->CSR2C;
-+  } else {
-+     vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
-+                                 HwDeviceExtension);
-+     reg1 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
-+     reg2 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
-+  }
-   if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--     tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
--     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,tempah);
--     tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
--     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,tempah);
-+     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,reg1);
-+     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,reg2);
-      if(HwDeviceExtension->jChipType >= SIS_315H) {
-       if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-            if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-             if(!(SiS_Pr->SiS_VBInfo & SetPALTV)) {
--                 if((ModeNo == 0x4a) || (ModeNo == 0x38)) {
-+                 if((ModeNo == 0x64) || (ModeNo == 0x4a) || (ModeNo == 0x38)) {
-                   SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0a,0x57);
-                   SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0b,0x46);
-                   SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x1f,0xf6);
-@@ -8303,15 +8434,13 @@ SiS_SetCRT2VCLK(SiS_Private *SiS_Pr, USH
-      }
-   } else {    
-      SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,0x01);
--     tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
--     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,tempah);
--     tempah = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
--     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,tempah);
-+     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0B,reg2);
-+     SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x0A,reg1);
-   }
-   SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x12,0x00);
--  tempah = 0x08;
--  if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) tempah |= 0x20;
--  SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x12,tempah);
-+  temp = 0x08;
-+  if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) temp |= 0x20;
-+  SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x12,temp);
- }
- USHORT
-@@ -8319,23 +8448,24 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
-                 USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-   USHORT tempbx;
--  const USHORT LCDXlat0VCLK[4]    = {VCLK40, VCLK40, VCLK40, VCLK40};
--  const USHORT LVDSXlat1VCLK[4]   = {VCLK40, VCLK40, VCLK40, VCLK40};
-+  const USHORT LCDXlat0VCLK[4]    = {VCLK40,       VCLK40,       VCLK40,       VCLK40};
-+  const USHORT LVDSXlat1VCLK[4]   = {VCLK40,       VCLK40,       VCLK40,       VCLK40};
-+  const USHORT LVDSXlat4VCLK[4]   = {VCLK28,       VCLK28,       VCLK28,       VCLK28};
- #ifdef SIS300
--  const USHORT LCDXlat1VCLK300[4] = {VCLK65,   VCLK65,   VCLK65,   VCLK65};
--  const USHORT LCDXlat2VCLK300[4] = {VCLK108_2,VCLK108_2,VCLK108_2,VCLK108_2};
--  const USHORT LVDSXlat2VCLK300[4]= {VCLK65,   VCLK65,   VCLK65,   VCLK65};
--  const USHORT LVDSXlat3VCLK300[4]= {VCLK65,   VCLK65,   VCLK65,   VCLK65};
-+  const USHORT LCDXlat1VCLK300[4] = {VCLK65_300,   VCLK65_300,   VCLK65_300,   VCLK65_300};
-+  const USHORT LCDXlat2VCLK300[4] = {VCLK108_2_300,VCLK108_2_300,VCLK108_2_300,VCLK108_2_300};
-+  const USHORT LVDSXlat2VCLK300[4]= {VCLK65_300,   VCLK65_300,   VCLK65_300,   VCLK65_300};
-+  const USHORT LVDSXlat3VCLK300[4]= {VCLK65_300,   VCLK65_300,   VCLK65_300,   VCLK65_300};
- #endif
- #ifdef SIS315H
--  const USHORT LCDXlat1VCLK310[4] = {VCLK65+2,   VCLK65+2,   VCLK65+2,   VCLK65+2};
--  const USHORT LCDXlat2VCLK310[4] = {VCLK108_2+5,VCLK108_2+5,VCLK108_2+5,VCLK108_2+5};
--  const USHORT LVDSXlat2VCLK310[4]= {VCLK65+2,   VCLK65+2,   VCLK65+2,   VCLK65+2};
--  const USHORT LVDSXlat3VCLK310[4]= {VCLK108_2+5,VCLK108_2+5,VCLK108_2+5,VCLK108_2+5};
-+  const USHORT LCDXlat1VCLK310[4] = {VCLK65_315,   VCLK65_315,   VCLK65_315,   VCLK65_315};
-+  const USHORT LCDXlat2VCLK310[4] = {VCLK108_2_315,VCLK108_2_315,VCLK108_2_315,VCLK108_2_315};
-+  const USHORT LVDSXlat2VCLK310[4]= {VCLK65_315,   VCLK65_315,   VCLK65_315,   VCLK65_315};
-+  const USHORT LVDSXlat3VCLK310[4]= {VCLK108_2_315,VCLK108_2_315,VCLK108_2_315,VCLK108_2_315};
- #endif
-   USHORT CRT2Index,VCLKIndex=0;
-   USHORT modeflag,resinfo;
--  const UCHAR *CHTVVCLKPtr=NULL;
-+  const UCHAR  *CHTVVCLKPtr = NULL;
-   const USHORT *LCDXlatVCLK1 = NULL;
-   const USHORT *LCDXlatVCLK2 = NULL;
-   const USHORT *LVDSXlatVCLK2 = NULL;
-@@ -8372,33 +8502,40 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
-      if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
-         CRT2Index >>= 6;
--        if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)){      /*  LCD */
-+        if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {      /*  LCD */
-             if(HwDeviceExtension->jChipType < SIS_315H) {
--             if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)
-+             if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {
-                       VCLKIndex = LCDXlat0VCLK[CRT2Index];
--             else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)
-+             } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-                       VCLKIndex = LCDXlatVCLK1[CRT2Index];
--             else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)
-+             } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600) {
-                       VCLKIndex = LCDXlatVCLK1[CRT2Index];
--             else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768)
-+             } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1152x768) {
-                       VCLKIndex = LCDXlatVCLK1[CRT2Index];
--             else
-+             } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+                      VCLKIndex = VCLK81_300; /* guessed */
-+             } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-+                      VCLKIndex = VCLK108_3_300;
-+                      if(resinfo == SIS_RI_1280x1024) VCLKIndex = VCLK100_300;
-+             } else {
-                       VCLKIndex = LCDXlatVCLK2[CRT2Index];
-+             }
-           } else {
--               /* TW: 330, 650/301LV BIOS does not check expanding, 315 does  */
--             if( (HwDeviceExtension->jChipType > SIS_315PRO) ||
-+             if( (SiS_Pr->SiS_VBType & VB_SIS301LV302LV) ||
-                  (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
-                         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--                   VCLKIndex = 0x19;
-+                   VCLKIndex = VCLK108_2_315;
-+                } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768) {
-+                   VCLKIndex = VCLK81_315;    /* guessed */
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
--                   VCLKIndex = 0x19;
-+                   VCLKIndex = VCLK108_2_315;
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
--                   VCLKIndex = 0x21;
-+                   VCLKIndex = VCLK162_315;
-+                } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
-+                   VCLKIndex = VCLK108_3_315;
-+                   if(resinfo == SIS_RI_1280x1024) VCLKIndex = VCLK100_315;
-                 } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-                    VCLKIndex = LCDXlatVCLK1[CRT2Index];
--                  } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x960) {
--                   VCLKIndex = 0x45;  /* TW: in VBVCLK table */
--                   if(resinfo == 0x09) VCLKIndex++;
-                 } else {
-                    VCLKIndex = LCDXlatVCLK2[CRT2Index];
-                         }
-@@ -8408,12 +8545,18 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
-                  if(ModeNo > 0x13) {
-                       VCLKIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
-                  }
--                 if(ModeNo <= 0x13) {  /* TW: 315 BIOS */
--                    if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x42;
-+                 if(ModeNo <= 0x13) {
-+                    if(HwDeviceExtension->jChipType <= SIS_315PRO) {
-+                       if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x42;
-+                    } else {
-+                       if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x00;
-+                    }
-+                 }
-+                 if(HwDeviceExtension->jChipType <= SIS_315PRO) {
-+                    if(VCLKIndex == 0) VCLKIndex = 0x41;
-+                    if(VCLKIndex == 1) VCLKIndex = 0x43;
-+                    if(VCLKIndex == 4) VCLKIndex = 0x44;
-                  }
--                 if(VCLKIndex == 0) VCLKIndex = 0x41;
--                 if(VCLKIndex == 1) VCLKIndex = 0x43;
--                 if(VCLKIndex == 4) VCLKIndex = 0x44;
-              }
-           }
-         } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {                 /*  TV */
-@@ -8429,9 +8572,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
-                               if(SiS_Pr->SiS_SetFlag & RPLLDIV2XO)  VCLKIndex = TVVCLKDIV2;
-                       else                                  VCLKIndex = TVVCLK;
-               }
--              if(HwDeviceExtension->jChipType >= SIS_315H) {
--                              VCLKIndex += 25;
--              }
-+              if(HwDeviceExtension->jChipType < SIS_315H) {
-+                              VCLKIndex += TVCLKBASE_300;
-+              } else {
-+                      VCLKIndex += TVCLKBASE_315;
-+              }
-         } else {                                              /* RAMDAC2 */
-               VCLKIndex = (UCHAR)SiS_GetReg2((USHORT)(SiS_Pr->SiS_P3ca+0x02));
-               VCLKIndex = ((VCLKIndex >> 2) & 0x03);
-@@ -8441,7 +8586,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
-                               VCLKIndex &= 0x3f;
-                               if( (HwDeviceExtension->jChipType == SIS_630) &&
-                                   (HwDeviceExtension->jChipRevision >= 0x30)) {
--                                   if(VCLKIndex == 0x14) VCLKIndex = 0x2e;
-+                                   /* This is certainly wrong: It replaces clock
-+                                    * 108 by 47...
-+                                    */
-+                                   /* if(VCLKIndex == 0x14) VCLKIndex = 0x2e; */
-+                                   if(VCLKIndex == 0x14) VCLKIndex = 0x34;
-                               }
-                       }
-               }
-@@ -8505,6 +8654,10 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
-               if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) ||
-                  (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel320x480))
-                       VCLKIndex = LVDSXlat1VCLK[VCLKIndex];
-+              else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480   ||
-+                      SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2 ||
-+                      SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3)
-+                      VCLKIndex = LVDSXlat4VCLK[VCLKIndex];
-               else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)
-                       VCLKIndex = LVDSXlatVCLK2[VCLKIndex];
-               else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x600)
-@@ -8513,6 +8666,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
-                         VCLKIndex = LVDSXlatVCLK2[VCLKIndex];                 
-               else    VCLKIndex = LVDSXlatVCLK3[VCLKIndex];
-+              if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+                 /* Special Timing: Barco iQ Pro R300/400 */
-+                 VCLKIndex = 0x44;
-+              }
-+
-          } else {
-               VCLKIndex = (UCHAR)SiS_GetReg2((USHORT)(SiS_Pr->SiS_P3ca+0x02));
-@@ -8556,11 +8714,11 @@ SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, UCH
- #ifdef TWDEBUG
-   xf86DrvMsg(0, X_INFO, "VCLKIndex %d (0x%x)\n", VCLKIndex, VCLKIndex);
- #endif
--  return (VCLKIndex);
-+  return(VCLKIndex);
- }
--/* TW: Set 301 Palette address port registers */
--/* TW: Checked against 650/301LV BIOS */
-+/* Set 301 Palette address port registers */
-+/* Checked against 650/301LV BIOS */
- void
- SiS_SetGroup5(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr,
-               UCHAR *ROMAddr, USHORT ModeNo, USHORT ModeIdIndex)
-@@ -8568,7 +8726,7 @@ SiS_SetGroup5(SiS_Private *SiS_Pr, PSIS_
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)  return;
--  if(SiS_Pr->SiS_ModeType == ModeVGA){
-+  if(SiS_Pr->SiS_ModeType == ModeVGA) {
-      if(!(SiS_Pr->SiS_VBInfo & (SetInSlaveMode | LoadDACFlag))){
-         SiS_EnableCRT2(SiS_Pr);
-         SiS_LoadDAC(SiS_Pr,HwDeviceExtension,ROMAddr,ModeNo,ModeIdIndex);
-@@ -8581,17 +8739,21 @@ SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCH
-                 USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-   USHORT temp,tempah,i,modeflag,j;
--  USHORT ResInfo,DisplayType;
-+  USHORT ResIndex,DisplayType;
-   const SiS_LVDSCRT1DataStruct *LVDSCRT1Ptr=NULL;
-   if(ModeNo <= 0x13) {
--      modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-   } else {
--      modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+     modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-   }
-+  if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
-+     (SiS_Pr->SiS_CustomT == CUT_BARCO1024))
-+     return;
-+
-   temp = SiS_GetLVDSCRT1Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
--                            &ResInfo,&DisplayType);
-+                            &ResIndex,&DisplayType);
-   if(temp == 0) return;
-@@ -8639,47 +8801,53 @@ SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCH
-     case 41: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11280x768_1_H;        break;
-     case 42: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11280x768_2;          break;
-     case 43: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11280x768_2_H;        break;
-+    case 50: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1;           break;
-+    case 51: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1_H;         break;
-+    case 52: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_2;           break;
-+    case 53: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_2_H;         break;
-+    case 54: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_3;           break;
-+    case 55: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_3_H;         break;
-     case 99: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1SOPAL;               break;
-     default: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x768_1;          break;
-   }
-   SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x11,0x7f);                        /*unlock cr0-7  */
--  tempah = (LVDSCRT1Ptr+ResInfo)->CR[0];
-+  tempah = (LVDSCRT1Ptr + ResIndex)->CR[0];
-   SiS_SetReg1(SiS_Pr->SiS_P3d4,0x00,tempah);
-   for(i=0x02,j=1;i<=0x05;i++,j++){
--    tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+    tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
-     SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
-   }
-   for(i=0x06,j=5;i<=0x07;i++,j++){
--    tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+    tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
-     SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
-   }
-   for(i=0x10,j=7;i<=0x11;i++,j++){
--    tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+    tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
-     SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
-   }
-   for(i=0x15,j=9;i<=0x16;i++,j++){
--    tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+    tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
-     SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
-   }
-   for(i=0x0A,j=11;i<=0x0C;i++,j++){
--    tempah = (LVDSCRT1Ptr+ResInfo)->CR[j];
-+    tempah = (LVDSCRT1Ptr + ResIndex)->CR[j];
-     SiS_SetReg1(SiS_Pr->SiS_P3c4,i,tempah);
-   }
--  tempah = (LVDSCRT1Ptr+ResInfo)->CR[14];
-+  tempah = (LVDSCRT1Ptr + ResIndex)->CR[14];
-   tempah &= 0xE0;
--  SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x0E,0x1f,tempah);     
-+  SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x0E,0x1f,tempah);
--  tempah = (LVDSCRT1Ptr+ResInfo)->CR[14];
-+  tempah = (LVDSCRT1Ptr + ResIndex)->CR[14];
-   tempah &= 0x01;
-   tempah <<= 5;
-   if(modeflag & DoubleScanMode)  tempah |= 0x080;
-   SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x09,~0x020,tempah);
--  /* TW: 650/LVDS BIOS - doesn't make sense */
-+  /* 650/LVDS BIOS - doesn't make sense */
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
-      if(modeflag & HalfDCLK)
-         SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x11,0x7f);
-@@ -8688,7 +8856,7 @@ SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCH
- BOOLEAN
- SiS_GetLVDSCRT1Ptr(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
--                 USHORT RefreshRateTableIndex,USHORT *ResInfo,
-+                 USHORT RefreshRateTableIndex,USHORT *ResIndex,
-                  USHORT *DisplayType)
-  {
-   USHORT tempbx,modeflag=0;
-@@ -8757,19 +8925,33 @@ SiS_GetLVDSCRT1Ptr(SiS_Private *SiS_Pr, 
-            tempbx = 40;
-          if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 2;
-          if(modeflag & HalfDCLK) tempbx++;
-+        } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_3) {
-+           tempbx = 54;
-+         if(modeflag & HalfDCLK) tempbx++;
-+      } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480_2) {
-+           tempbx = 52;
-+         if(modeflag & HalfDCLK) tempbx++;
-+      } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {
-+           tempbx = 50;
-+         if(modeflag & HalfDCLK) tempbx++;
-         }
-+
-      }
-      if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
-         tempbx = 12;
-       if(modeflag & HalfDCLK) tempbx++;
-      }
-   }
--  if(SiS_Pr->SiS_IF_DEF_FSTN){
-+
-+#if 0
-+  if(SiS_Pr->SiS_IF_DEF_FSTN) {
-      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel320x480){
-         tempbx = 22;
-      }
-   }
--  *ResInfo = CRT2CRTC & 0x3F;
-+#endif
-+
-+  *ResIndex = CRT2CRTC & 0x3F;
-   *DisplayType = tempbx;
-   return 1;
- }
-@@ -8778,54 +8960,54 @@ void
- SiS_SetCRT2ECLK(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT ModeNo,USHORT ModeIdIndex,
-            USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
--  USHORT tempah,tempal,pushax;
--  USHORT vclkindex=0;
--    
-+  USHORT clkbase, vclkindex=0;
-+  UCHAR  sr2b, sr2c;
-+
-   if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) || (SiS_Pr->SiS_IF_DEF_TRUMPION == 1)) {
-       SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
--        tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
--      tempal &= 0x3F;
--      if(tempal == 2) RefreshRateTableIndex--;
-+        if((SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK & 0x3f) == 2) {
-+         RefreshRateTableIndex--;
-+      }
-       vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
--                               RefreshRateTableIndex,HwDeviceExtension);
-+                                    RefreshRateTableIndex,HwDeviceExtension);
-       SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
-   } else {
-         vclkindex = SiS_GetVCLK2Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
--                               RefreshRateTableIndex,HwDeviceExtension);
-+                                    RefreshRateTableIndex,HwDeviceExtension);
-   }
--  
--  tempal = 0x02B;
-+
-+  sr2b = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
-+  sr2c = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
-+
-+  if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
-+     if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-+      if(ROMAddr[0x220] & 0x01) {
-+           sr2b = ROMAddr[0x227];
-+         sr2c = ROMAddr[0x228];
-+      }
-+     }
-+  }
-+
-+  clkbase = 0x02B;
-   if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
-      if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
--      tempal += 3;
-+      clkbase += 3;
-      }
-   }
-+
-   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);
--  pushax = tempal;
-   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x31,0x20);
--  tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
--  SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
--  tempal++;
--  tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
--  SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-+  SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase,sr2b);
-+  SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
-   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x31,0x10);
--  tempal = pushax;
--  tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
--  SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
--  tempal++;
--  tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
--  SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
-+  SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase,sr2b);
-+  SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
-   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x31,0x00);
--  tempal = pushax;
--  tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
--  SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
--  tempal++;
--  tempah = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
--  SiS_SetReg1(SiS_Pr->SiS_P3c4,tempal,tempah);
--  return;
-+  SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase,sr2b);
-+  SiS_SetReg1(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
- }
--#if 0  /* TW: Not used */
-+#if 0  /* Not used */
- void
- SiS_SetDefCRT2ExtRegs(SiS_Private *SiS_Pr, USHORT BaseAddr)
- {
-@@ -8844,7 +9026,7 @@ SiS_SetDefCRT2ExtRegs(SiS_Private *SiS_P
- }
- #endif
--/* TW: Start of Chrontel 70xx functions ---------------------- */
-+/* Start of Chrontel 70xx functions ---------------------- */
- /* Set-up the Chrontel Registers */
- void
-@@ -8890,44 +9072,44 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
-   if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
- #ifdef SIS300
--  
--     /* Chrontel 7005 - I assume that it does not come with a 310/325 series chip */
--     /* TW: We don't support modes >800x600 */
-+     /* Chrontel 7005 - I assume that it does not come with a 315 series chip */
-+
-+     /* We don't support modes >800x600 */
-      if (resindex > 5) return;
-      if(SiS_Pr->SiS_VBInfo & SetPALTV) {
--      SiS_SetCH700x(SiS_Pr,0x4304);   /* TW: 0x40=76uA (PAL); 0x03=15bit non-multi RGB*/
--      SiS_SetCH700x(SiS_Pr,0x6909);   /* TW: Black level for PAL (105)*/
-+      SiS_SetCH700x(SiS_Pr,0x4304);   /* 0x40=76uA (PAL); 0x03=15bit non-multi RGB*/
-+      SiS_SetCH700x(SiS_Pr,0x6909);   /* Black level for PAL (105)*/
-      } else {
--      SiS_SetCH700x(SiS_Pr,0x0304);   /* TW: upper nibble=71uA (NTSC), 0x03=15bit non-multi RGB*/
--      SiS_SetCH700x(SiS_Pr,0x7109);   /* TW: Black level for NTSC (113)*/
-+      SiS_SetCH700x(SiS_Pr,0x0304);   /* upper nibble=71uA (NTSC), 0x03=15bit non-multi RGB*/
-+      SiS_SetCH700x(SiS_Pr,0x7109);   /* Black level for NTSC (113)*/
-      }
-      temp = CHTVRegData[resindex].Reg[0];
--     tempbx=((temp&0x00FF)<<8)|0x00;  /* TW: Mode register */
-+     tempbx=((temp&0x00FF)<<8)|0x00;  /* Mode register */
-      SiS_SetCH700x(SiS_Pr,tempbx);
-      temp = CHTVRegData[resindex].Reg[1];
--     tempbx=((temp&0x00FF)<<8)|0x07;  /* TW: Start active video register */
-+     tempbx=((temp&0x00FF)<<8)|0x07;  /* Start active video register */
-      SiS_SetCH700x(SiS_Pr,tempbx);
-      temp = CHTVRegData[resindex].Reg[2];
--     tempbx=((temp&0x00FF)<<8)|0x08;  /* TW: Position overflow register */
-+     tempbx=((temp&0x00FF)<<8)|0x08;  /* Position overflow register */
-      SiS_SetCH700x(SiS_Pr,tempbx);
-      temp = CHTVRegData[resindex].Reg[3];
--     tempbx=((temp&0x00FF)<<8)|0x0A;  /* TW: Horiz Position register */
-+     tempbx=((temp&0x00FF)<<8)|0x0A;  /* Horiz Position register */
-      SiS_SetCH700x(SiS_Pr,tempbx);
-      temp = CHTVRegData[resindex].Reg[4];
--     tempbx=((temp&0x00FF)<<8)|0x0B;  /* TW: Vertical Position register */
-+     tempbx=((temp&0x00FF)<<8)|0x0B;  /* Vertical Position register */
-      SiS_SetCH700x(SiS_Pr,tempbx);
--     /* TW: Set minimum flicker filter for Luma channel (SR1-0=00),
-+     /* Set minimum flicker filter for Luma channel (SR1-0=00),
-                 minimum text enhancement (S3-2=10),
-               maximum flicker filter for Chroma channel (S5-4=10)
-               =00101000=0x28 (When reading, S1-0->S3-2, and S3-2->S1-0!)
-       */
-      SiS_SetCH700x(SiS_Pr,0x2801);
--     /* TW: Set video bandwidth
-+     /* Set video bandwidth
-             High bandwith Luma composite video filter(S0=1)
-             low bandwith Luma S-video filter (S2-1=00)
-           disable peak filter in S-video channel (S3=0)
-@@ -8936,22 +9118,24 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
-      */
-      SiS_SetCH700x(SiS_Pr,0xb103);       /* old: 3103 */
--     /* TW: Register 0x3D does not exist in non-macrovision register map
-+     /* Register 0x3D does not exist in non-macrovision register map
-             (Maybe this is a macrovision register?)
-       */
--     /* SiS_SetCH70xx(SiS_Pr,0x003D); */
-+#ifndef SIS_CP
-+     SiS_SetCH70xx(SiS_Pr,0x003D);
-+#endif     
--     /* TW: Register 0x10 only contains 1 writable bit (S0) for sensing,
-+     /* Register 0x10 only contains 1 writable bit (S0) for sensing,
-             all other bits a read-only. Macrovision?
-       */
-      SiS_SetCH70xxANDOR(SiS_Pr,0x0010,0x1F);
--     /* TW: Register 0x11 only contains 3 writable bits (S0-S2) for
-+     /* Register 0x11 only contains 3 writable bits (S0-S2) for
-             contrast enhancement (set to 010 -> gain 1 Yout = 17/16*(Yin-30) )
-       */
-      SiS_SetCH70xxANDOR(SiS_Pr,0x0211,0xF8);
--     /* TW: Clear DSEN
-+     /* Clear DSEN
-       */
-      SiS_SetCH70xxANDOR(SiS_Pr,0x001C,0xEF);
-@@ -8994,7 +9178,7 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
-          }
-        }
-      } else {                         /* ---- PAL ---- */
--           /* TW: We don't play around with FSCI in PAL mode */
-+           /* We don't play around with FSCI in PAL mode */
-          if (resindex == 0x04) {
-            SiS_SetCH70xxANDOR(SiS_Pr,0x0020,0xEF);    /* loop filter off */
-            SiS_SetCH70xxANDOR(SiS_Pr,0x0121,0xFE);      /* ACIV on */
-@@ -9012,7 +9196,7 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
- #ifdef SIS315H
--     /* TW: We don't support modes >1024x768 */
-+     /* We don't support modes >1024x768 */
-      if (resindex > 6) return;
-      temp = CHTVRegData[resindex].Reg[0];
-@@ -9082,26 +9266,29 @@ SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHA
- #endif        /* 315 */
-   }
-+
-+#ifdef SIS_CP
-+  SIS_CP_INIT301_CP3
-+#endif
-+
- }
--/* TW: Chrontel 701x functions ================================= */
-+/* Chrontel 701x functions ================================= */
- void
--SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr)
-+SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
--#ifndef NEWCH701x
-   USHORT temp;
--#endif  
--  /* TW: Enable Chrontel 7019 LCD panel backlight */
-+  /* Enable Chrontel 7019 LCD panel backlight */
-   if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
--#ifdef NEWCH701x
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-         SiS_SetCH701x(SiS_Pr,0x6566);
--#else  
-+     } else {
-         temp = SiS_GetCH701x(SiS_Pr,0x66);
-         temp |= 0x20;
-       SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
--#endif        
-+     }
-   }
- }
-@@ -9110,7 +9297,7 @@ SiS_Chrontel701xBLOff(SiS_Private *SiS_P
- {
-   USHORT temp;
--  /* TW: Disable Chrontel 7019 LCD panel backlight */
-+  /* Disable Chrontel 7019 LCD panel backlight */
-   if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-         temp = SiS_GetCH701x(SiS_Pr,0x66);
-         temp &= 0xDF;
-@@ -9118,47 +9305,54 @@ SiS_Chrontel701xBLOff(SiS_Private *SiS_P
-   }
- }
--#ifdef SIS315H  /* -------- 310/325 series only --------- */
-+#ifdef SIS315H  /* ----------- 315 series only ---------- */
- void
- SiS_SetCH701xForLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
- {
--#ifdef NEWCH701x  
--  UCHAR regtable[]  = { 0x1c, 0x5f, 0x64, 0x6f, 0x70, 0x71,
--                        0x72, 0x73, 0x74, 0x76, 0x78, 0x7d, 0x66 };
--  UCHAR table1024[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
--                        0xa3, 0xc8, 0xc7, 0xac, 0xe0, 0x02, 0x44 }; 
--  UCHAR table1280[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
--                      0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 };                     
--  UCHAR table1400[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,         
--                        0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 }; 
--  UCHAR table1600[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
--                      0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a, 0x44 };
--#else
--  UCHAR regtable[]  = { 0x1c, 0x5f, 0x64, 0x6f, 0x70, 0x71,
--                        0x72, 0x73, 0x74, 0x76, 0x78, 0x7d };
--  UCHAR table1024[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
--                        0xa3, 0xc8, 0xc7, 0xac, 0x60, 0x02 }; 
--  UCHAR table1280[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
--                      0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02 };                   
--  UCHAR table1400[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xef,   
--                        0xad, 0xdb, 0xf6, 0xac, 0x60, 0x02 }; 
--  UCHAR table1600[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
--                      0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a };
--#endif                        
-+  UCHAR regtable[]      = { 0x1c, 0x5f, 0x64, 0x6f, 0x70, 0x71,
-+                            0x72, 0x73, 0x74, 0x76, 0x78, 0x7d, 0x66 };
-+  UCHAR table1024_740[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
-+                            0xa3, 0xc8, 0xc7, 0xac, 0xe0, 0x02, 0x44 };
-+  UCHAR table1280_740[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-+                          0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 };
-+  UCHAR table1400_740[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-+                            0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02, 0x44 };
-+  UCHAR table1600_740[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
-+                          0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a, 0x44 };
-+  UCHAR table1024_650[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xed,
-+                            0xa3, 0xc8, 0xc7, 0xac, 0x60, 0x02 };
-+  UCHAR table1280_650[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xe3,
-+                          0xad, 0xdb, 0xf6, 0xac, 0xe0, 0x02 };
-+  UCHAR table1400_650[] = { 0x60, 0x03, 0x11, 0x00, 0x40, 0xef,
-+                            0xad, 0xdb, 0xf6, 0xac, 0x60, 0x02 };
-+  UCHAR table1600_650[] = { 0x60, 0x04, 0x11, 0x00, 0x40, 0xe3,
-+                          0xad, 0xde, 0xf6, 0xac, 0x60, 0x1a };
-   UCHAR *tableptr = NULL;
-   USHORT tempbh;
-   int i;
--  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--     tableptr = table1024;
--  } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
--     tableptr = table1280;
--  } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
--     tableptr = table1400;
--  } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
--     tableptr = table1600;
--  } else return;
-+  if(HwDeviceExtension->jChipType == SIS_740) {
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+        tableptr = table1024_740;
-+     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+        tableptr = table1280_740;
-+     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-+        tableptr = table1400_740;
-+     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+        tableptr = table1600_740;
-+     } else return;
-+  } else {
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+        tableptr = table1024_650;
-+     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {
-+        tableptr = table1280_650;
-+     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-+        tableptr = table1400_650;
-+     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) {
-+        tableptr = table1600_650;
-+     } else return;
-+  }
-   tempbh = SiS_GetCH701x(SiS_Pr,0x74);
-   if((tempbh == 0xf6) || (tempbh == 0xc7)) {
-@@ -9172,54 +9366,64 @@ SiS_SetCH701xForLCD(SiS_Private *SiS_Pr,
-         if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) return;
-      }
-   }
--#ifdef NEWCH701x     /* New from 740/LVDS: */    
--  for(i=0; i<0x0d; i++) {     
--#else
--  for(i=0; i<0x0c; i++) {
--#endif  
-+
-+  if(HwDeviceExtension->jChipType == SIS_740) {
-+     tempbh = 0x0d;
-+  } else {
-+     tempbh = 0x0c;
-+  }
-+  for(i = 0; i < tempbh; i++) {
-      SiS_SetCH701x(SiS_Pr,(tableptr[i] << 8) | regtable[i]);
-   }
--  SiS_ChrontelPowerSequencing(SiS_Pr);
-+  SiS_ChrontelPowerSequencing(SiS_Pr,HwDeviceExtension);
-   tempbh = SiS_GetCH701x(SiS_Pr,0x1e);
-   tempbh |= 0xc0;
-   SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x1e);
--  
--#ifdef NEWCH701x     /* 740/LVDS: */
--  tempbh = SiS_GetCH701x(SiS_Pr,0x1c);
--  tempbh &= 0xfb;
--  SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x1c);
--  SiS_SetReg1(SiS_Pr->SiS_Part1Port, 0x2d, 0x03);
--  tempbh = SiS_GetCH701x(SiS_Pr,0x64);
--  tempbh |= 0x40;
--  SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x64);
--  tempbh = SiS_GetCH701x(SiS_Pr,0x03);
--  tempbh &= 0x3f;
--  SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x03);
--#endif  /* End 740/LVDS */
-+
-+  if(HwDeviceExtension->jChipType == SIS_740) {
-+     tempbh = SiS_GetCH701x(SiS_Pr,0x1c);
-+     tempbh &= 0xfb;
-+     SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x1c);
-+     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x03);
-+     tempbh = SiS_GetCH701x(SiS_Pr,0x64);
-+     tempbh |= 0x40;
-+     SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x64);
-+     tempbh = SiS_GetCH701x(SiS_Pr,0x03);
-+     tempbh &= 0x3f;
-+     SiS_SetCH701x(SiS_Pr,(tempbh << 8) | 0x03);
-+  }
- }
- void
--SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr)
--{
--  UCHAR regtable[]  = { 0x67, 0x68, 0x69, 0x6a, 0x6b };
--#ifdef NEWCH701x  
--  UCHAR table1024[] = { 0x01, 0x02, 0x01, 0x01, 0x01 };
--  UCHAR table1400[] = { 0x01, 0x6e, 0x01, 0x01, 0x01 };
--#else
--  UCHAR table1024[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
--  UCHAR table1400[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
--#endif  
-+SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+{
-+  UCHAR regtable[]      = { 0x67, 0x68, 0x69, 0x6a, 0x6b };
-+  UCHAR table1024_740[] = { 0x01, 0x02, 0x01, 0x01, 0x01 };
-+  UCHAR table1400_740[] = { 0x01, 0x6e, 0x01, 0x01, 0x01 };
-+  UCHAR table1024_650[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
-+  UCHAR table1400_650[] = { 0x01, 0x02, 0x01, 0x01, 0x02 };
-   UCHAR *tableptr = NULL;
-   int i;
-   /* Set up Power up/down timing */
--  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--     tableptr = table1024;
--  } else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
--            (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
--          (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
--     tableptr = table1400;
--  } else return;
-+
-+  if(HwDeviceExtension->jChipType == SIS_740) {
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+        tableptr = table1024_740;
-+     } else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+               (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-+             (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
-+        tableptr = table1400_740;
-+     } else return;
-+  } else {
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-+        tableptr = table1024_650;
-+     } else if((SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) ||
-+               (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) ||
-+             (SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)) {
-+        tableptr = table1400_650;
-+     } else return;
-+  }
-   
-   for(i=0; i<5; i++) {
-      SiS_SetCH701x(SiS_Pr,(tableptr[i] << 8) | regtable[i]);
-@@ -9232,66 +9436,72 @@ SiS_Chrontel701xOn(SiS_Private *SiS_Pr, 
-   USHORT temp;
-   if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
--#ifdef NEWCH701x
--     temp = SiS_GetCH701x(SiS_Pr,0x1c);
--     temp |= 0x04;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
--#endif 
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-+        temp = SiS_GetCH701x(SiS_Pr,0x1c);
-+        temp |= 0x04;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
-+     }
-      if(SiS_IsYPbPr(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-         temp = SiS_GetCH701x(SiS_Pr,0x01);
-       temp &= 0x3f;
--      temp |= 0x80;   /* TW: Enable YPrPb (HDTV) */
-+      temp |= 0x80;   /* Enable YPrPb (HDTV) */
-       SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x01);
-      }
-      if(SiS_IsChScart(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-         temp = SiS_GetCH701x(SiS_Pr,0x01);
-       temp &= 0x3f;
--      temp |= 0xc0;   /* TW: Enable SCART + CVBS */
-+      temp |= 0xc0;   /* Enable SCART + CVBS */
-       SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x01);
-      }
--#ifdef NEWCH701x
--     SiS_ChrontelDoSomething5(SiS_Pr);
--     SiS_SetCH701x(SiS_Pr,0x2049);                    /* TW: Enable TV path */
--#else      
--     SiS_SetCH701x(SiS_Pr,0x2049);                    /* TW: Enable TV path */
--     temp = SiS_GetCH701x(SiS_Pr,0x49);
--     if(SiS_IsYPbPr(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--        temp = SiS_GetCH701x(SiS_Pr,0x73);
--      temp |= 0x60;
--      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x73);
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-+        SiS_ChrontelDoSomething5(SiS_Pr);
-+        SiS_SetCH701x(SiS_Pr,0x2049);                         /* Enable TV path */
-+     } else {
-+        SiS_SetCH701x(SiS_Pr,0x2049);                         /* Enable TV path */
-+        temp = SiS_GetCH701x(SiS_Pr,0x49);
-+        if(SiS_IsYPbPr(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+           temp = SiS_GetCH701x(SiS_Pr,0x73);
-+         temp |= 0x60;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x73);
-+        }
-+        temp = SiS_GetCH701x(SiS_Pr,0x47);
-+        temp &= 0x7f;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
-+        SiS_LongDelay(SiS_Pr,2);
-+        temp = SiS_GetCH701x(SiS_Pr,0x47);
-+        temp |= 0x80;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
-      }
--     temp = SiS_GetCH701x(SiS_Pr,0x47);
--     temp &= 0x7f;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
--     SiS_LongDelay(SiS_Pr,2);
--     temp = SiS_GetCH701x(SiS_Pr,0x47);
--     temp |= 0x80;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
--#endif     
-   }
- }
- void
--SiS_Chrontel701xOff(SiS_Private *SiS_Pr)
-+SiS_Chrontel701xOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-   USHORT temp;
-+  /* Complete power down of LVDS */
-   if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-+        SiS_LongDelay(SiS_Pr,1);
-+      SiS_GenericDelay(SiS_Pr,0x16ff);
-+      SiS_SetCH701x(SiS_Pr,0xac76);
-+      SiS_SetCH701x(SiS_Pr,0x0066);
-+     } else {
-         SiS_LongDelay(SiS_Pr,2);
--      /* TW: Complete power down of LVDS */
-       temp = SiS_GetCH701x(SiS_Pr,0x76);
-       temp &= 0xfc;
-       SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
-       SiS_SetCH701x(SiS_Pr,0x0066);
-+     }
-   }
- }
--#ifdef NEWCH701x
- void
- SiS_ChrontelDoSomething5(SiS_Private *SiS_Pr)
- {
-      unsigned char temp, temp1;
--     
-+
-      temp1 = SiS_GetCH701x(SiS_Pr,0x49);
-      SiS_SetCH701x(SiS_Pr,0x3e49);
-      temp = SiS_GetCH701x(SiS_Pr,0x47);
-@@ -9303,130 +9513,134 @@ SiS_ChrontelDoSomething5(SiS_Private *Si
-      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);
-      SiS_SetCH701x(SiS_Pr,(temp1 << 8) | 0x49);
- }
--#endif
- void
- SiS_ChrontelResetDB(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
--#ifdef NEWCH701x
-      USHORT temp;
--     
--     /* 740/LVDS: */
--     temp = SiS_GetCH701x(SiS_Pr,0x4a);
--     temp &= 0x01;
--     if(!(temp)) {
--     
--        if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--         temp = SiS_GetCH701x(SiS_Pr,0x49);
--         SiS_SetCH701x(SiS_Pr,0x3e49);
--      }
--      /* TW: Reset Chrontel 7019 datapath */
-+
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-+        temp = SiS_GetCH701x(SiS_Pr,0x4a);
-+        temp &= 0x01;
-+        if(!(temp)) {
-+
-+           if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+            temp = SiS_GetCH701x(SiS_Pr,0x49);
-+            SiS_SetCH701x(SiS_Pr,0x3e49);
-+         }
-+         /* Reset Chrontel 7019 datapath */
-+           SiS_SetCH701x(SiS_Pr,0x1048);
-+           SiS_LongDelay(SiS_Pr,1);
-+           SiS_SetCH701x(SiS_Pr,0x1848);
-+
-+         if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+            SiS_ChrontelDoSomething5(SiS_Pr);
-+            SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x49);
-+         }
-+
-+        } else {
-+
-+           temp = SiS_GetCH701x(SiS_Pr,0x5c);
-+         temp &= 0xef;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-+         temp = SiS_GetCH701x(SiS_Pr,0x5c);
-+         temp |= 0x10;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-+         temp = SiS_GetCH701x(SiS_Pr,0x5c);
-+         temp &= 0xef;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
-+         temp = SiS_GetCH701x(SiS_Pr,0x61);
-+         if(!temp) {
-+            SiS_SetCH701xForLCD(SiS_Pr,HwDeviceExtension,BaseAddr);
-+         }
-+        }
-+     } else { /* 650 */
-+        /* Reset Chrontel 7019 datapath */
-         SiS_SetCH701x(SiS_Pr,0x1048);
-         SiS_LongDelay(SiS_Pr,1);
-         SiS_SetCH701x(SiS_Pr,0x1848);
--      
--      if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--         SiS_ChrontelDoSomething5(SiS_Pr);
--         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x49);
--      }    
--     } else {
--     
--        temp = SiS_GetCH701x(SiS_Pr,0x5c);
--      temp &= 0xef;
--      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
--      temp = SiS_GetCH701x(SiS_Pr,0x5c);
--      temp |= 0x10;
--      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
--      temp = SiS_GetCH701x(SiS_Pr,0x5c);
--      temp &= 0xef;
--      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x5c);
--      temp = SiS_GetCH701x(SiS_Pr,0x61);
--      if(!temp) {
--         SiS_SetCH701xForLCD(SiS_Pr,HwDeviceExtension,BaseAddr);
--      }
--     }
--#else /* pre 740/LVDS code */     
--     /* TW: Reset Chrontel 7019 datapath */
--     SiS_SetCH701x(SiS_Pr,0x1048);
--     SiS_LongDelay(SiS_Pr,1);
--     SiS_SetCH701x(SiS_Pr,0x1848);
--#endif     
-+     }
- }
- void
- SiS_ChrontelDoSomething4(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
--#ifdef NEWCH701x
--     if(!(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr))) {
--        SiS_ChrontelDoSomething5(SiS_Pr);
--     }
--#else
-      USHORT temp;
--     SiS_SetCH701x(SiS_Pr,0xaf76);  /* Power up LVDS block */
--     temp = SiS_GetCH701x(SiS_Pr,0x49);
--     temp &= 1;
--     if(temp != 1) {  /* TV block powered? (0 = yes, 1 = no) */
--      temp = SiS_GetCH701x(SiS_Pr,0x47);
--      temp &= 0x70;
--      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);  /* enable VSYNC */
--      SiS_LongDelay(SiS_Pr,3);
--      temp = SiS_GetCH701x(SiS_Pr,0x47);
--      temp |= 0x80;
--      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);  /* disable VSYNC */
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-+
-+        if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+           SiS_ChrontelDoSomething5(SiS_Pr);
-+        }
-+
-+     } else {
-+
-+        SiS_SetCH701x(SiS_Pr,0xaf76);  /* Power up LVDS block */
-+        temp = SiS_GetCH701x(SiS_Pr,0x49);
-+        temp &= 1;
-+        if(temp != 1) {  /* TV block powered? (0 = yes, 1 = no) */
-+         temp = SiS_GetCH701x(SiS_Pr,0x47);
-+         temp &= 0x70;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);  /* enable VSYNC */
-+         SiS_LongDelay(SiS_Pr,3);
-+         temp = SiS_GetCH701x(SiS_Pr,0x47);
-+         temp |= 0x80;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x47);  /* disable VSYNC */
-+        }
-+
-      }
--#endif     
- }
- void
- SiS_ChrontelDoSomething3(SiS_Private *SiS_Pr, USHORT ModeNo, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                          USHORT BaseAddr)
- {
--#ifdef NEWCH701x
--     USHORT temp;
--     
--     temp = SiS_GetCH701x(SiS_Pr,0x61);
--     if(temp < 1) {
--          temp++;
--        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
--     }
--     SiS_SetCH701x(SiS_Pr,0x4566);
--     SiS_SetCH701x(SiS_Pr,0xaf76);
--     SiS_LongDelay(SiS_Pr,1);
--     SiS_GenericDelay(SiS_Pr,0x16ff);
--
--#else
-      USHORT temp,temp1;
--     
--     temp1 = 0;
--     temp = SiS_GetCH701x(SiS_Pr,0x61);
--     if(temp < 2) {
--          temp++;
--        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
--        temp1 = 1;
--     }
--     SiS_SetCH701x(SiS_Pr,0xac76);
--     temp = SiS_GetCH701x(SiS_Pr,0x66);
--     temp |= 0x5f;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
--     if(ModeNo > 0x13) {
--         if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
--          SiS_GenericDelay(SiS_Pr,0x3ff);
--       } else {
--          SiS_GenericDelay(SiS_Pr,0x2ff);
--       }
--     } else {
--         if(!temp1)
--          SiS_GenericDelay(SiS_Pr,0x2ff);
-+
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-+
-+        temp = SiS_GetCH701x(SiS_Pr,0x61);
-+        if(temp < 1) {
-+           temp++;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
-+        }
-+        SiS_SetCH701x(SiS_Pr,0x4566);
-+        SiS_SetCH701x(SiS_Pr,0xaf76);
-+        SiS_LongDelay(SiS_Pr,1);
-+        SiS_GenericDelay(SiS_Pr,0x16ff);
-+
-+     } else {  /* 650 */
-+
-+        temp1 = 0;
-+        temp = SiS_GetCH701x(SiS_Pr,0x61);
-+        if(temp < 2) {
-+           temp++;
-+         SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x61);
-+         temp1 = 1;
-+        }
-+        SiS_SetCH701x(SiS_Pr,0xac76);
-+        temp = SiS_GetCH701x(SiS_Pr,0x66);
-+        temp |= 0x5f;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
-+        if(ModeNo > 0x13) {
-+           if(SiS_WeHaveBacklightCtrl(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-+            SiS_GenericDelay(SiS_Pr,0x3ff);
-+         } else {
-+            SiS_GenericDelay(SiS_Pr,0x2ff);
-+         }
-+        } else {
-+           if(!temp1)
-+            SiS_GenericDelay(SiS_Pr,0x2ff);
-+        }
-+        temp = SiS_GetCH701x(SiS_Pr,0x76);
-+        temp |= 0x03;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
-+        temp = SiS_GetCH701x(SiS_Pr,0x66);
-+        temp &= 0x7f;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
-+        SiS_LongDelay(SiS_Pr,1);
-+
-      }
--     temp = SiS_GetCH701x(SiS_Pr,0x76);
--     temp |= 0x03;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
--     temp = SiS_GetCH701x(SiS_Pr,0x66);
--     temp &= 0x7f;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x66);
--     SiS_LongDelay(SiS_Pr,1);
--#endif     
- }
- void
-@@ -9443,9 +9657,9 @@ SiS_ChrontelDoSomething2(SiS_Private *Si
-        temp &= 0x04;
-        if(temp == 0x04) break;
-        
--#ifdef NEWCH701x
--       SiS_SetCH701x(SiS_Pr,0xac76);    /* 740/LVDS */
--#endif       
-+       if(HwDeviceExtension->jChipType == SIS_740) {
-+          SiS_SetCH701x(SiS_Pr,0xac76);
-+       }
-        SiS_SetCH701xForLCD(SiS_Pr,HwDeviceExtension,BaseAddr);
-@@ -9463,11 +9677,11 @@ SiS_ChrontelDoSomething2(SiS_Private *Si
-        temp = SiS_GetCH701x(SiS_Pr,0x76);
-        temp |= 0x04;
-        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x76);
--#ifdef NEWCH701x
--       SiS_SetCH701x(SiS_Pr,0xe078);
--#else       
--       SiS_SetCH701x(SiS_Pr,0x6078);
--#endif       
-+       if(HwDeviceExtension->jChipType == SIS_740) {
-+          SiS_SetCH701x(SiS_Pr,0xe078);
-+       } else {
-+          SiS_SetCH701x(SiS_Pr,0x6078);
-+       }
-        SiS_LongDelay(SiS_Pr,2);
-     } while(0);
-@@ -9485,51 +9699,52 @@ SiS_ChrontelDoSomething1(SiS_Private *Si
-      temp &= 0xbf;    /* Set datapath 2 to LVDS */
-      SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x03);
-      
--#ifdef NEWCH701x   /* 740/LVDS: */
-+     if(HwDeviceExtension->jChipType == SIS_740) {
-+
-+        temp = SiS_GetCH701x(SiS_Pr,0x1c);
-+        temp &= 0xfb;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
-+
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x03);
-+
-+        temp = SiS_GetCH701x(SiS_Pr,0x64);
-+        temp |= 0x40;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x64);
-+
-+        temp = SiS_GetCH701x(SiS_Pr,0x03);
-+        temp &= 0x3f;
-+        SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x03);
-+
-+        temp = SiS_GetCH701x(SiS_Pr,0x66);
-+        if(temp != 0x45) {
-+           SiS_ChrontelResetDB(SiS_Pr,HwDeviceExtension,BaseAddr);
-+           SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
-+         temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
-+           SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
-+        }
-+
-+     } else { /* 650 */
--     temp = SiS_GetCH701x(SiS_Pr,0x1c);
--     temp &= 0xfb;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x1c);
--     
--     SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x03);
--     
--     temp = SiS_GetCH701x(SiS_Pr,0x64);
--     temp |= 0x40;
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x64);
--     
--     temp = SiS_GetCH701x(SiS_Pr,0x03);
--     temp &= 0x3f;    
--     SiS_SetCH701x(SiS_Pr,(temp << 8) | 0x03);
--     
--     temp = SiS_GetCH701x(SiS_Pr,0x66);
--     if(temp != 0x45) {
-         SiS_ChrontelResetDB(SiS_Pr,HwDeviceExtension,BaseAddr);
--        SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
--      temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
--        SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
--     }     
--#else  /* pre-740/LVDS: */     
-+        SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
--     SiS_ChrontelResetDB(SiS_Pr);
-+        temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
-+        SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
--     SiS_ChrontelDoSomething2(SiS_Pr,HwDeviceExtension,BaseAddr);
-+        SiS_SetCH701x(SiS_Pr,0xaf76);
--     temp = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x34);
--     SiS_ChrontelDoSomething3(SiS_Pr,temp,HwDeviceExtension,BaseAddr);
-+     }
--     SiS_SetCH701x(SiS_Pr,0xaf76);
--     
--#endif  /* End of pre-740/LVDS */
- }
--#endif  /* 310/325 series --------------------------------- */
-+#endif  /* 315 series ------------------------------------ */
--/* TW: End of Chrontel 701x functions ==================================== */
-+/* End of Chrontel 701x functions ==================================== */
--/* TW: Generic Read/write routines for Chrontel ========================== */
-+/* Generic Read/write routines for Chrontel ========================== */
--/* TW: The Chrontel is connected to the 630/730 via
-+/* The Chrontel is connected to the 630/730 via
-  * the 630/730's DDC/I2C port.
-  *
-  * On 630(S)T chipset, the index changed from 0x11 to 0x0a,
-@@ -9539,13 +9754,13 @@ SiS_ChrontelDoSomething1(SiS_Private *Si
- void
- SiS_SetCH70xx(SiS_Private *SiS_Pr, USHORT tempbx)
- {
--   if (SiS_Pr->SiS_IF_DEF_CH70xx == 1)
-+   if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
-       SiS_SetCH700x(SiS_Pr,tempbx);
-    else
-       SiS_SetCH701x(SiS_Pr,tempbx);
- }
--/* TW: Write to Chrontel 700x */
-+/* Write to Chrontel 700x */
- /* Parameter is [Data (S15-S8) | Register no (S7-S0)] */
- void
- SiS_SetCH700x(SiS_Private *SiS_Pr, USHORT tempbx)
-@@ -9553,100 +9768,100 @@ SiS_SetCH700x(SiS_Private *SiS_Pr, USHOR
-   USHORT tempah,temp,i;
-   if(!(SiS_Pr->SiS_ChrontelInit)) {
--     SiS_Pr->SiS_DDC_Index = 0x11;               /* TW: Bit 0 = SC;  Bit 1 = SD */
-+     SiS_Pr->SiS_DDC_Index = 0x11;               /* Bit 0 = SC;  Bit 1 = SD */
-      SiS_Pr->SiS_DDC_Data  = 0x02;                 /* Bitmask in IndexReg for Data */
-      SiS_Pr->SiS_DDC_Clk   = 0x01;                 /* Bitmask in IndexReg for Clk */
-      SiS_Pr->SiS_DDC_DataShift = 0x00;
--     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;          /* TW: DAB (Device Address Byte) */
-+     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;          /* DAB (Device Address Byte) */
-   }
--  for(i=0;i<10;i++) { /* TW: Do only 10 attempts to write */
-+  for(i=0;i<10;i++) { /* Do only 10 attempts to write */
-     /* SiS_SetSwitchDDC2(SiS_Pr); */
--    if(SiS_SetStart(SiS_Pr)) continue;                /* TW: Set start condition */
-+    if(SiS_SetStart(SiS_Pr)) continue;                /* Set start condition */
-     tempah = SiS_Pr->SiS_DDC_DeviceAddr;
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: Write DAB (S0=0=write) */
--    if(temp) continue;                                /* TW:    (ERROR: no ack) */
--    tempah = tempbx & 0x00FF;                 /* TW: Write RAB */
--    tempah |= 0x80;                             /* TW: (set bit 7, see datasheet) */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* Write DAB (S0=0=write) */
-+    if(temp) continue;                                /*    (ERROR: no ack) */
-+    tempah = tempbx & 0x00FF;                 /* Write RAB */
-+    tempah |= 0x80;                             /* (set bit 7, see datasheet) */
-     temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
--    if(temp) continue;                                /* TW:    (ERROR: no ack) */
-+    if(temp) continue;                                /*    (ERROR: no ack) */
-     tempah = (tempbx & 0xFF00) >> 8;
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: Write data */
--    if(temp) continue;                                /* TW:    (ERROR: no ack) */
--    if(SiS_SetStop(SiS_Pr)) continue;         /* TW: Set stop condition */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* Write data */
-+    if(temp) continue;                                /*    (ERROR: no ack) */
-+    if(SiS_SetStop(SiS_Pr)) continue;         /* Set stop condition */
-     SiS_Pr->SiS_ChrontelInit = 1;
-     return;
-   }
--  /* TW: For 630ST */
-+  /* For 630ST */
-   if(!(SiS_Pr->SiS_ChrontelInit)) {
--     SiS_Pr->SiS_DDC_Index = 0x0a;            /* TW: Bit 7 = SC;  Bit 6 = SD */
-+     SiS_Pr->SiS_DDC_Index = 0x0a;            /* Bit 7 = SC;  Bit 6 = SD */
-      SiS_Pr->SiS_DDC_Data  = 0x80;              /* Bitmask in IndexReg for Data */
-      SiS_Pr->SiS_DDC_Clk   = 0x40;              /* Bitmask in IndexReg for Clk */
-      SiS_Pr->SiS_DDC_DataShift = 0x00;
--     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;       /* TW: DAB (Device Address Byte) */
-+     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;       /* DAB (Device Address Byte) */
--     for(i=0;i<10;i++) {      /* TW: Do only 10 attempts to write */
-+     for(i=0;i<10;i++) {      /* Do only 10 attempts to write */
-        /* SiS_SetSwitchDDC2(SiS_Pr); */
--       if (SiS_SetStart(SiS_Pr)) continue;    /* TW: Set start condition */
-+       if (SiS_SetStart(SiS_Pr)) continue;    /* Set start condition */
-        tempah = SiS_Pr->SiS_DDC_DeviceAddr;
--       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);       /* TW: Write DAB (S0=0=write) */
--       if(temp) continue;                     /* TW:    (ERROR: no ack) */
--       tempah = tempbx & 0x00FF;              /* TW: Write RAB */
--       tempah |= 0x80;                          /* TW: (set bit 7, see datasheet) */
-+       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);       /* Write DAB (S0=0=write) */
-+       if(temp) continue;                     /*    (ERROR: no ack) */
-+       tempah = tempbx & 0x00FF;              /* Write RAB */
-+       tempah |= 0x80;                          /* (set bit 7, see datasheet) */
-        temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
--       if(temp) continue;                     /* TW:    (ERROR: no ack) */
-+       if(temp) continue;                     /*    (ERROR: no ack) */
-        tempah = (tempbx & 0xFF00) >> 8;
--       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);       /* TW: Write data */
--       if(temp) continue;                     /* TW:    (ERROR: no ack) */
--       if(SiS_SetStop(SiS_Pr)) continue;      /* TW: Set stop condition */
-+       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);       /* Write data */
-+       if(temp) continue;                     /*    (ERROR: no ack) */
-+       if(SiS_SetStop(SiS_Pr)) continue;      /* Set stop condition */
-        SiS_Pr->SiS_ChrontelInit = 1;
-        return;
-     }
-   }
- }
--/* TW: Write to Chrontel 701x */
-+/* Write to Chrontel 701x */
- /* Parameter is [Data (S15-S8) | Register no (S7-S0)] */
- void
- SiS_SetCH701x(SiS_Private *SiS_Pr, USHORT tempbx)
- {
-   USHORT tempah,temp,i;
--  SiS_Pr->SiS_DDC_Index = 0x11;                       /* TW: Bit 0 = SC;  Bit 1 = SD */
-+  SiS_Pr->SiS_DDC_Index = 0x11;                       /* Bit 0 = SC;  Bit 1 = SD */
-   SiS_Pr->SiS_DDC_Data  = 0x08;                 /* Bitmask in IndexReg for Data */
-   SiS_Pr->SiS_DDC_Clk   = 0x04;                 /* Bitmask in IndexReg for Clk */
-   SiS_Pr->SiS_DDC_DataShift = 0x00;
--  SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;                  /* TW: DAB (Device Address Byte) */
-+  SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;                  /* DAB (Device Address Byte) */
--  for(i=0;i<10;i++) { /* TW: Do only 10 attempts to write */
--    if (SiS_SetStart(SiS_Pr)) continue;               /* TW: Set start condition */
-+  for(i=0;i<10;i++) { /* Do only 10 attempts to write */
-+    if (SiS_SetStart(SiS_Pr)) continue;               /* Set start condition */
-     tempah = SiS_Pr->SiS_DDC_DeviceAddr;
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: Write DAB (S0=0=write) */
--    if(temp) continue;                                /* TW:    (ERROR: no ack) */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* Write DAB (S0=0=write) */
-+    if(temp) continue;                                /*    (ERROR: no ack) */
-     tempah = tempbx & 0x00FF;
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: Write RAB */
--    if(temp) continue;                                /* TW:    (ERROR: no ack) */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* Write RAB */
-+    if(temp) continue;                                /*    (ERROR: no ack) */
-     tempah = (tempbx & 0xFF00) >> 8;
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: Write data */
--    if(temp) continue;                                /* TW:    (ERROR: no ack) */
--    if(SiS_SetStop(SiS_Pr)) continue;         /* TW: Set stop condition */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* Write data */
-+    if(temp) continue;                                /*    (ERROR: no ack) */
-+    if(SiS_SetStop(SiS_Pr)) continue;         /* Set stop condition */
-     return;
-   }
- }
--/* TW: Read from Chrontel 70xx */
-+/* Read from Chrontel 70xx */
- /* Parameter is [Register no (S7-S0)] */
- USHORT
- SiS_GetCH70xx(SiS_Private *SiS_Pr, USHORT tempbx)
- {
--   if (SiS_Pr->SiS_IF_DEF_CH70xx == 1)
-+   if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
-       return(SiS_GetCH700x(SiS_Pr,tempbx));
-    else
-       return(SiS_GetCH701x(SiS_Pr,tempbx));
- }
--/* TW: Read from Chrontel 700x */
-+/* Read from Chrontel 700x */
- /* Parameter is [Register no (S7-S0)] */
- USHORT
- SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempbx)
-@@ -9654,57 +9869,57 @@ SiS_GetCH700x(SiS_Private *SiS_Pr, USHOR
-   USHORT tempah,temp,i;
-   if(!(SiS_Pr->SiS_ChrontelInit)) {
--     SiS_Pr->SiS_DDC_Index = 0x11;            /* TW: Bit 0 = SC;  Bit 1 = SD */
-+     SiS_Pr->SiS_DDC_Index = 0x11;            /* Bit 0 = SC;  Bit 1 = SD */
-      SiS_Pr->SiS_DDC_Data  = 0x02;              /* Bitmask in IndexReg for Data */
-      SiS_Pr->SiS_DDC_Clk   = 0x01;              /* Bitmask in IndexReg for Clk */
-      SiS_Pr->SiS_DDC_DataShift = 0x00;
--     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;               /* TW: DAB */
-+     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;               /* DAB */
-   }
-   SiS_Pr->SiS_DDC_ReadAddr = tempbx;
--  for(i=0;i<20;i++) { /* TW: Do only 20 attempts to read */
-+  for(i=0;i<20;i++) { /* Do only 20 attempts to read */
-     /* SiS_SetSwitchDDC2(SiS_Pr); */
--    if(SiS_SetStart(SiS_Pr)) continue;                /* TW: Set start condition */
-+    if(SiS_SetStart(SiS_Pr)) continue;                /* Set start condition */
-     tempah = SiS_Pr->SiS_DDC_DeviceAddr;
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: Write DAB (S0=0=write) */
--    if(temp) continue;                                /* TW:        (ERROR: no ack) */
--    tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80; /* TW: Write RAB | 0x80 */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* Write DAB (S0=0=write) */
-+    if(temp) continue;                                /*        (ERROR: no ack) */
-+    tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80; /* Write RAB | 0x80 */
-     temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
--    if(temp) continue;                                /* TW:        (ERROR: no ack) */
--    if (SiS_SetStart(SiS_Pr)) continue;               /* TW: Re-start */
-+    if(temp) continue;                                /*        (ERROR: no ack) */
-+    if (SiS_SetStart(SiS_Pr)) continue;               /* Re-start */
-     tempah = SiS_Pr->SiS_DDC_DeviceAddr | 0x01; /* DAB | 0x01 = Read */
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: DAB (S0=1=read) */
--    if(temp) continue;                                /* TW:        (ERROR: no ack) */
--    tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* TW: Read byte */
--    if (SiS_SetStop(SiS_Pr)) continue;                /* TW: Stop condition */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* DAB (S0=1=read) */
-+    if(temp) continue;                                /*        (ERROR: no ack) */
-+    tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* Read byte */
-+    if (SiS_SetStop(SiS_Pr)) continue;                /* Stop condition */
-     SiS_Pr->SiS_ChrontelInit = 1;
-     return(tempah);
-   }
--  /* TW: For 630ST */
-+  /* For 630ST */
-   if(!SiS_Pr->SiS_ChrontelInit) {
--     SiS_Pr->SiS_DDC_Index = 0x0a;            /* TW: Bit 0 = SC;  Bit 1 = SD */
-+     SiS_Pr->SiS_DDC_Index = 0x0a;            /* Bit 0 = SC;  Bit 1 = SD */
-      SiS_Pr->SiS_DDC_Data  = 0x80;              /* Bitmask in IndexReg for Data */
-      SiS_Pr->SiS_DDC_Clk   = 0x40;              /* Bitmask in IndexReg for Clk */
-      SiS_Pr->SiS_DDC_DataShift = 0x00;
--     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;       /* TW: DAB (Device Address Byte) */
-+     SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;       /* DAB (Device Address Byte) */
--     for(i=0;i<20;i++) {      /* TW: Do only 20 attempts to read */
-+     for(i=0;i<20;i++) {      /* Do only 20 attempts to read */
-        /* SiS_SetSwitchDDC2(SiS_Pr); */
--       if(SiS_SetStart(SiS_Pr)) continue;             /* TW: Set start condition */
-+       if(SiS_SetStart(SiS_Pr)) continue;             /* Set start condition */
-        tempah = SiS_Pr->SiS_DDC_DeviceAddr;
--       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);               /* TW: Write DAB (S0=0=write) */
--       if(temp) continue;                             /* TW:        (ERROR: no ack) */
--       tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80;      /* TW: Write RAB | 0x80 */
-+       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);               /* Write DAB (S0=0=write) */
-+       if(temp) continue;                             /*        (ERROR: no ack) */
-+       tempah = SiS_Pr->SiS_DDC_ReadAddr | 0x80;      /* Write RAB | 0x80 */
-        temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
--       if(temp) continue;                             /* TW:        (ERROR: no ack) */
--       if (SiS_SetStart(SiS_Pr)) continue;            /* TW: Re-start */
-+       if(temp) continue;                             /*        (ERROR: no ack) */
-+       if (SiS_SetStart(SiS_Pr)) continue;            /* Re-start */
-        tempah = SiS_Pr->SiS_DDC_DeviceAddr | 0x01;    /* DAB | 0x01 = Read */
--       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);               /* TW: DAB (S0=1=read) */
--       if(temp) continue;                             /* TW:        (ERROR: no ack) */
--       tempah = SiS_ReadDDC2Data(SiS_Pr,tempah);      /* TW: Read byte */
--       if (SiS_SetStop(SiS_Pr)) continue;             /* TW: Stop condition */
-+       temp = SiS_WriteDDC2Data(SiS_Pr,tempah);               /* DAB (S0=1=read) */
-+       if(temp) continue;                             /*        (ERROR: no ack) */
-+       tempah = SiS_ReadDDC2Data(SiS_Pr,tempah);      /* Read byte */
-+       if (SiS_SetStop(SiS_Pr)) continue;             /* Stop condition */
-        SiS_Pr->SiS_ChrontelInit = 1;
-        return(tempah);
-      }
-@@ -9712,52 +9927,51 @@ SiS_GetCH700x(SiS_Private *SiS_Pr, USHOR
-   return(0xFFFF);
- }
--/* TW: Read from Chrontel 701x */
-+/* Read from Chrontel 701x */
- /* Parameter is [Register no (S7-S0)] */
- USHORT
- SiS_GetCH701x(SiS_Private *SiS_Pr, USHORT tempbx)
- {
-   USHORT tempah,temp,i;
--  SiS_Pr->SiS_DDC_Index = 0x11;                       /* TW: Bit 0 = SC;  Bit 1 = SD */
-+  SiS_Pr->SiS_DDC_Index = 0x11;                       /* Bit 0 = SC;  Bit 1 = SD */
-   SiS_Pr->SiS_DDC_Data  = 0x08;                 /* Bitmask in IndexReg for Data */
-   SiS_Pr->SiS_DDC_Clk   = 0x04;                 /* Bitmask in IndexReg for Clk */
-   SiS_Pr->SiS_DDC_DataShift = 0x00;
--  SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;          /* TW: DAB */
-+  SiS_Pr->SiS_DDC_DeviceAddr = 0xEA;          /* DAB */
-   SiS_Pr->SiS_DDC_ReadAddr = tempbx;
--   for(i=0;i<20;i++) {        /* TW: Do only 20 attempts to read */
--    if(SiS_SetStart(SiS_Pr)) continue;                /* TW: Set start condition */
-+   for(i=0;i<20;i++) {        /* Do only 20 attempts to read */
-+    if(SiS_SetStart(SiS_Pr)) continue;                /* Set start condition */
-     tempah = SiS_Pr->SiS_DDC_DeviceAddr;
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: Write DAB (S0=0=write) */
--    if(temp) continue;                                /* TW:        (ERROR: no ack) */
--    tempah = SiS_Pr->SiS_DDC_ReadAddr;                /* TW: Write RAB */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* Write DAB (S0=0=write) */
-+    if(temp) continue;                                /*        (ERROR: no ack) */
-+    tempah = SiS_Pr->SiS_DDC_ReadAddr;                /* Write RAB */
-     temp = SiS_WriteDDC2Data(SiS_Pr,tempah);
--    if(temp) continue;                                /* TW:        (ERROR: no ack) */
--    if (SiS_SetStart(SiS_Pr)) continue;               /* TW: Re-start */
-+    if(temp) continue;                                /*        (ERROR: no ack) */
-+    if (SiS_SetStart(SiS_Pr)) continue;               /* Re-start */
-     tempah = SiS_Pr->SiS_DDC_DeviceAddr | 0x01; /* DAB | 0x01 = Read */
--    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* TW: DAB (S0=1=read) */
--    if(temp) continue;                                /* TW:        (ERROR: no ack) */
--    tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* TW: Read byte */
--    SiS_SetStop(SiS_Pr);                      /* TW: Stop condition */
-+    temp = SiS_WriteDDC2Data(SiS_Pr,tempah);  /* DAB (S0=1=read) */
-+    if(temp) continue;                                /*        (ERROR: no ack) */
-+    tempah = SiS_ReadDDC2Data(SiS_Pr,tempah); /* Read byte */
-+    SiS_SetStop(SiS_Pr);                      /* Stop condition */
-     return(tempah);
-    }
-   return 0xFFFF;
- }
--#ifdef LINUX_XF86
--/* TW: Our own DDC functions */
-+/* Our own DDC functions */
- USHORT
--SiS_InitDDCRegs(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum, USHORT DDCdatatype,
--              BOOLEAN checkcr32)
-+SiS_InitDDCRegs(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+                USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32)
- {
-      unsigned char ddcdtype[] = { 0xa0, 0xa0, 0xa0, 0xa2, 0xa6 };
-      unsigned char flag, cr32;
-      USHORT        temp = 0, myadaptnum = adaptnum;
-      if(adaptnum != 0) {
--        if(!(pSiS->VBFlags & (VB_301|VB_301B|VB_302B))) return 0xFFFF;
--      if((pSiS->VBFlags & VB_30xBDH) && (adaptnum == 1)) return 0xFFFF;
-+        if(!(VBFlags & (VB_301|VB_301B|VB_302B))) return 0xFFFF;
-+      if((VBFlags & VB_30xBDH) && (adaptnum == 1)) return 0xFFFF;
-      }        
-      
-      /* adapternum for SiS bridges: 0 = CRT1, 1 = LCD, 2 = VGA2 */
-@@ -9771,8 +9985,9 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
-      flag = 0xff;
-      cr32 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x32);
--  
--     if(pSiS->VBFlags & VB_SISBRIDGE) {
-+
-+#if 0
-+     if(VBFlags & VB_SISBRIDGE) {
-       if(myadaptnum == 0) {
-          if(!(cr32 & 0x20)) {
-             myadaptnum = 2;
-@@ -9785,18 +10000,19 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
-          }
-         }
-      }
-+#endif
--     if(pSiS->VGAEngine == SIS_300_VGA) {             /* 300 series */
-+     if(VGAEngine == SIS_300_VGA) {           /* 300 series */
-       
-         if(myadaptnum != 0) {
-          flag = 0;
--         if(pSiS->VBFlags & VB_SISBRIDGE) {
-+         if(VBFlags & VB_SISBRIDGE) {
-             SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
-               SiS_Pr->SiS_DDC_Index = 0x0f;
-          }
-         }
--      if(!(pSiS->VBFlags & VB_301)) {
-+      if(!(VBFlags & VB_301)) {
-          if((cr32 & 0x80) && (checkcr32)) {
-               if(myadaptnum >= 1) {
-                if(!(cr32 & 0x08)) {
-@@ -9810,11 +10026,11 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
-       temp = 4 - (myadaptnum * 2);
-       if(flag) temp = 0;
--     } else {                                         /* 310/325/330 series */
-+     } else {                                         /* 315/330 series */
-       /* here we simplify: 0 = CRT1, 1 = CRT2 (VGA, LCD) */
-       
--      if(pSiS->VBFlags & VB_SISBRIDGE) {
-+      if(VBFlags & VB_SISBRIDGE) {
-          if(myadaptnum == 2) {
-             myadaptnum = 1;
-            }
-@@ -9822,7 +10038,7 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
-         if(myadaptnum == 1) {
-          flag = 0;
--         if(pSiS->VBFlags & VB_SISBRIDGE) {
-+         if(VBFlags & VB_SISBRIDGE) {
-             SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
-               SiS_Pr->SiS_DDC_Index = 0x0f;
-          }
-@@ -9840,7 +10056,7 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
-         temp = myadaptnum;
-         if(myadaptnum == 1) {
-            temp = 0;
--         if(pSiS->VBFlags & VB_LVDS) flag = 0xff;
-+         if(VBFlags & VB_LVDS) flag = 0xff;
-         }
-       if(flag) temp = 0;
-@@ -9852,7 +10068,7 @@ SiS_InitDDCRegs(SiS_Private *SiS_Pr, SIS
- #ifdef TWDEBUG
-     xf86DrvMsg(0, X_INFO, "DDC Port %x Index %x Shift %d\n",
-               SiS_Pr->SiS_DDC_Port, SiS_Pr->SiS_DDC_Index, temp);
--#endif         
-+#endif
-     
-     return 0;
- }
-@@ -9862,15 +10078,9 @@ SiS_WriteDABDDC(SiS_Private *SiS_Pr)
- {
-    if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
-    if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr)) {
--#ifdef TWDEBUG
--        xf86DrvMsg(0, X_INFO, "WriteDAB 1 failed\n");
--#endif         
-       return 0xFFFF;
-    }
-    if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_SecAddr)) {
--#ifdef TWDEBUG
--        xf86DrvMsg(0, X_INFO, "WriteDAB 2 failed\n");
--#endif         
-       return 0xFFFF;
-    }
-    return(0);
-@@ -9881,9 +10091,6 @@ SiS_PrepareReadDDC(SiS_Private *SiS_Pr)
- {
-    if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
-    if(SiS_WriteDDC2Data(SiS_Pr, (SiS_Pr->SiS_DDC_DeviceAddr | 0x01))) {
--#ifdef TWDEBUG
--        xf86DrvMsg(0, X_INFO, "PrepareReadDDC 1 failed\n");
--#endif         
-       return 0xFFFF;
-    }
-    return(0);
-@@ -9921,9 +10128,6 @@ SiS_DoProbeDDC(SiS_Private *SiS_Pr)
-     SiS_SetSwitchDDC2(SiS_Pr);
-     if(SiS_PrepareDDC(SiS_Pr)) {
-          SiS_SetStop(SiS_Pr);
--#ifdef TWDEBUG
--       xf86DrvMsg(0, X_INFO, "DoProbeDDC 1 failed at PrepareDDC\n");
--#endif         
-          return(0xFFFF);
-     }
-     mask = 0xf0;
-@@ -9972,7 +10176,7 @@ SiS_ProbeDDC(SiS_Private *SiS_Pr)
- }
- USHORT
--SiS_ReadDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT DDCdatatype, unsigned char *buffer)
-+SiS_ReadDDC(SiS_Private *SiS_Pr, USHORT DDCdatatype, unsigned char *buffer)
- {
-    USHORT flag, length, i;
-    unsigned char chksum,gotcha;
-@@ -10004,28 +10208,7 @@ SiS_ReadDDC(SiS_Private *SiS_Pr, SISPtr 
-    return(flag);
- }
--USHORT
--SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHORT length, unsigned char *buffer)
--{
--   USHORT i=0, flag=0;
--
--   length--;
--   
--   SiS_SetSwitchDDC2(SiS_Pr);
--   if(!(SiS_PrepareDDC(SiS_Pr))) {
--      for(i=0; i<length; i++) {
--         buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr, 0);
--         SiS_SendACK(SiS_Pr, 0);
--      }
--      buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr, 0);
--      SiS_SendACK(SiS_Pr, 1);
--   } else flag = 0xFFFF;
--   
--   SiS_SetStop(SiS_Pr);
--   return(0);
--}
--
--/* TW: Our private DDC function
-+/* Our private DDC functions
-    It complies somewhat with the corresponding VESA function
-    in arguments and return values.
-@@ -10036,7 +10219,7 @@ SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHO
-    Arguments:
-        adaptnum: 0=CRT1, 1=LCD, 2=VGA2
--                 CRT2 DDC is only supported on SiS301, 301B (non-DH version), 302B.
-+                 CRT2 DDC is only supported on SiS301, 301B, 302B.
-        DDCdatatype: 0=Probe, 1=EDID, 2=EDID+VDIF, 3=EDID V2 (P&D), 4=EDID V2 (FPDI-2)
-        buffer: ptr to 256 data bytes which will be filled with read data.
-@@ -10046,43 +10229,48 @@ SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHO
-  */
- USHORT
--SiS_HandleDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum,
--              USHORT DDCdatatype, unsigned char *buffer)
-+SiS_HandleDDC(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+              USHORT adaptnum, USHORT DDCdatatype, unsigned char *buffer)
- {
-    if(adaptnum > 2) return 0xFFFF;
-    if(DDCdatatype > 4) return 0xFFFF;
--   if((!(pSiS->VBFlags & VB_VIDEOBRIDGE)) && (adaptnum > 0)) return 0xFFFF;
--   if(SiS_InitDDCRegs(SiS_Pr, pSiS, adaptnum, DDCdatatype, TRUE) == 0xFFFF) return 0xFFFF;
-+   if((!(VBFlags & VB_VIDEOBRIDGE)) && (adaptnum > 0)) return 0xFFFF;
-+   if(SiS_InitDDCRegs(SiS_Pr, VBFlags, VGAEngine, adaptnum, DDCdatatype, TRUE) == 0xFFFF) return 0xFFFF;
-    if(DDCdatatype == 0) {
-        return(SiS_ProbeDDC(SiS_Pr));
-    } else {
--       return(SiS_ReadDDC(SiS_Pr, pSiS, DDCdatatype, buffer));
-+       return(SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer));
-    }
- }
-+#ifdef LINUX_XF86
- /* Sense the LCD parameters (CR36, CR37) via DDC */
- /* SiS30x(B) only */
- USHORT
- SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS)
- {
--   USHORT DDCdatatype, paneltype, flag, xres, yres;
-+   USHORT DDCdatatype, paneltype, flag, xres=0, yres=0;
-    USHORT index, myindex, lumsize, numcodes;
-    unsigned char cr37=0, seekcode;
-    BOOLEAN checkexpand = FALSE;
-    int retry, i;
-    unsigned char buffer[256];
--   
-+
-+   for(i=0; i<7; i++) SiS_Pr->CP_DataValid[i] = FALSE;
-+   SiS_Pr->CP_HaveCustomData = FALSE;
-+   SiS_Pr->CP_MaxX = SiS_Pr->CP_MaxY = SiS_Pr->CP_MaxClock = 0;
-+
-    if(!(pSiS->VBFlags & (VB_301|VB_301B|VB_302B))) return 0;
-    if(pSiS->VBFlags & VB_30xBDH) return 0;
-   
--   if(SiS_InitDDCRegs(SiS_Pr, pSiS, 1, 0, FALSE) == 0xFFFF) return 0;
-+   if(SiS_InitDDCRegs(SiS_Pr, pSiS->VBFlags, pSiS->VGAEngine, 1, 0, FALSE) == 0xFFFF) return 0;
-    
-    SiS_Pr->SiS_DDC_SecAddr = 0x00;
-    
-    /* Probe supported DA's */
-    flag = SiS_ProbeDDC(SiS_Pr);
- #ifdef TWDEBUG   
--   xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO, 
-+   xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO,
-       "CRT2 DDC capabilities 0x%x\n", flag);
- #endif        
-    if(flag & 0x10) {
-@@ -10099,7 +10287,7 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
-    /* Read the entire EDID */
-    retry = 2;
-    do {
--      if(SiS_ReadDDC(SiS_Pr, pSiS, DDCdatatype, buffer)) {
-+      if(SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer)) {
-          xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO, 
-               "CRT2: DDC read failed (attempt %d), %s\n", 
-               (3-retry), (retry == 1) ? "giving up" : "retrying");
-@@ -10132,7 +10320,7 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
-       }
-       
-       if((buffer[0x18] & 0x18) != 0x08) {
--         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED, 
-+         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-               "CRT2: Attached display is not of RGB but of %s type (0x%02x)\n", 
-               ((buffer[0x18] & 0x18) == 0x00) ? "monochrome/greyscale" :
-                 ( ((buffer[0x18] & 0x18) == 0x10) ? "non-RGB multicolor" : 
-@@ -10140,103 +10328,226 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
-               buffer[0x18]);
-        return 0;
-       }
--      
--      /* Now analyze the first Detailed Timing Block and hope
--       * that the preferred timing mode is stored there.
--       */     
--      xres = buffer[0x38] | ((buffer[0x3a] & 0xf0) << 4);
--      yres = buffer[0x3b] | ((buffer[0x3d] & 0xf0) << 4);
-+
-+      /* Now analyze the first Detailed Timing Block and see
-+       * if the preferred timing mode is stored there. If so,
-+       * check if this is a standard panel for which we already
-+       * know the timing.
-+       */
-+
-+      paneltype = Panel_Custom;
-       checkexpand = FALSE;
--      switch(xres) {
--         case 800:
--           if(yres == 600) {
--              paneltype = Panel310_800x600;
--              checkexpand = TRUE;
--           }
--           break;
--         case 1024:
--           if(yres == 768) {
--              paneltype = Panel310_1024x768;
--              checkexpand = FALSE;    /* expand causes error at 640x480, should otherwise be TRUE; */
--           }
--           break;
--       case 1280:
--           if(yres == 960) {
--              if(pSiS->VGAEngine == SIS_300_VGA) {
--                 paneltype = Panel300_1280x960;
--              } else {
--                 paneltype = Panel310_1280x960; 
--              }
--           } else if(yres == 1024) {
--              paneltype = Panel310_1280x1024;  
--              checkexpand = TRUE;
--           } else if(pSiS->VGAEngine == SIS_315_VGA) {
-+
-+      if(buffer[0x18] & 0x02) {
-+
-+         xres = buffer[0x38] | ((buffer[0x3a] & 0xf0) << 4);
-+         yres = buffer[0x3b] | ((buffer[0x3d] & 0xf0) << 4);
-+
-+       SiS_Pr->CP_PreferredX = xres;
-+       SiS_Pr->CP_PreferredY = yres;
-+
-+         switch(xres) {
-+            case 800:
-+              if(yres == 600) {
-+                 paneltype = Panel_800x600;
-+                 checkexpand = TRUE;
-+              }
-+              break;
-+            case 1024:
-               if(yres == 768) {
--                 paneltype = Panel310_1280x768;       /* Panel size 1280x768 not supported yet */
--                 checkexpand = TRUE;  
--              }       
--           }
--           break;
--       case 1400:
--           if(pSiS->VGAEngine == SIS_315_VGA) {
--              if(yres == 1050) {
--                 paneltype = Panel310_1400x1050;
--                 checkexpand = TRUE; 
--              } 
--           }
--                   break;
--       case 1600:
--           if(pSiS->VGAEngine == SIS_315_VGA) {
--              if(yres == 1200) {
--                 paneltype = Panel310_1600x1200;
-+                 paneltype = Panel_1024x768;
-+                 checkexpand = TRUE;
-+              }
-+              break;
-+          case 1280:
-+              if(yres == 1024) {
-+                 paneltype = Panel_1280x1024;
-                  checkexpand = TRUE;
--              } 
--           }
--                   break;
-+              } else if(yres == 960) {
-+                 if(pSiS->VGAEngine == SIS_300_VGA) {
-+                    paneltype = Panel300_1280x960;
-+                 } else {
-+                    paneltype = Panel310_1280x960;
-+                 }
-+              } else if(yres == 768) {
-+                 paneltype = Panel_1280x768;
-+                 checkexpand = FALSE;
-+                 cr37 |= 0x10;
-+              }
-+              break;
-+          case 1400:
-+              if(pSiS->VGAEngine == SIS_315_VGA) {
-+                 if(yres == 1050) {
-+                    paneltype = Panel310_1400x1050;
-+                    checkexpand = TRUE;
-+                 }
-+              }
-+                      break;
-+#if 0     /* Treat this as custom, as we have no valid timing data yet */
-+          case 1600:
-+              if(pSiS->VGAEngine == SIS_315_VGA) {
-+                 if(yres == 1200) {
-+                    paneltype = Panel310_1600x1200;
-+                    checkexpand = TRUE;
-+                 }
-+              }
-+                      break;
-+#endif
-+         }
-+
-+       if(paneltype != Panel_Custom) {
-+          if((buffer[0x47] & 0x18) == 0x18) {
-+             cr37 |= ((((buffer[0x47] & 0x06) ^ 0x06) << 5) | 0x20);
-+          } else {
-+             /* What now? There is no digital separate output timing... */
-+             xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+                 "CRT2: Unable to retrieve Sync polarity information\n");
-+          }
-+       }
-+
-       }
--      if(buffer[0x18] & 0x02) {
--         /* If the preferred timing mode is stored in the first
--        * detailed timing block, we now can extract the sync
--        * polarisation information as well. This only works
--        * if the Flags indicate a digital separate output.
--        */
--        if((buffer[0x47] & 0x18) == 0x18) {
--           cr37 |= ((((buffer[0x47] & 0x06) ^ 0x06) << 5) | 0x20);
--        } else {
--           /* What now? There is no digital separate output timing... */
--           xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING, 
--              "CRT2: Unable to retrieve Sync polarity information\n");
--        }
--        
--      } else {
--         /* If the preferred timing mode is *not* stored in the first
--        * detailed timing block, we need to guess the resolution
--        * from the supported Established Timings and assume the
--        * default sync polarity
--        */
-+      /* If we still don't know what panel this is, we take it
-+       * as a custom panel and derive the timing data from the
-+       * detailed timing blocks
-+       */
-+      if(paneltype == Panel_Custom) {
-+
-+         BOOLEAN havesync = FALSE;
-+       int i, temp, base = 0x36;
-+       unsigned long estpack;
-+       unsigned short estx[] = {
-+              720, 720, 640, 640, 640, 640, 800, 800,
-+              800, 800, 832,1024,1024,1024,1024,1280,
-+              1152
-+       };
-+       unsigned short esty[] = {
-+              400, 400, 480, 480, 480, 480, 600, 600,
-+              600, 600, 624, 768, 768, 768, 768,1024,
-+              870
-+       };
-+
-        paneltype = 0;
--       if(buffer[0x24] & 0x01) {      
--              paneltype = Panel310_1280x1024;
--              checkexpand = TRUE;
--              cr37 |= 0x20;
--       } else if(buffer[0x24] & 0x0e) {
--              paneltype = Panel310_1024x768;
--              cr37 |= 0xe0;
--              checkexpand = FALSE;            /* Bug at 640x480 */
--       } else if(buffer[0x23] & 0x01) {
--              paneltype = Panel310_800x600;
--              cr37 |= 0xe0;
--              checkexpand = TRUE;
--         }
-+
-+       /* Find the maximum resolution */
-+
-+       /* 1. From Established timings */
-+       estpack = (buffer[0x23] << 9) | (buffer[0x24] << 1) | ((buffer[0x25] >> 7) & 0x01);
-+       for(i=16; i>=0; i--) {
-+           if(estpack & (1 << i)) {
-+              if(estx[16 - i] > SiS_Pr->CP_MaxX) SiS_Pr->CP_MaxX = estx[16 - i];
-+              if(esty[16 - i] > SiS_Pr->CP_MaxY) SiS_Pr->CP_MaxY = esty[16 - i];
-+           }
-+       }
-+
-+       /* 2. From Standard Timings */
-+       for(i=0x26; i < 0x36; i+=2) {
-+          if((buffer[i] != 0x01) && (buffer[i+1] != 0x01)) {
-+             temp = (buffer[i] + 31) * 8;
-+             if(temp > SiS_Pr->CP_MaxX) SiS_Pr->CP_MaxX = temp;
-+             switch((buffer[i+1] & 0xc0) >> 6) {
-+             case 0x03: temp = temp * 9 / 16; break;
-+             case 0x02: temp = temp * 4 / 5;  break;
-+             case 0x01: temp = temp * 3 / 4;  break;
-+             }
-+             if(temp > SiS_Pr->CP_MaxY) SiS_Pr->CP_MaxY = temp;
-+          }
-+       }
-+
-+       /* Now extract the Detailed Timings and convert them into modes */
-+
-+         for(i = 0; i < 4; i++, base += 18) {
-+
-+          /* Is this a detailed timing block or a monitor descriptor? */
-+          if(buffer[base] || buffer[base+1] || buffer[base+2]) {
-+
-+                     xres = buffer[base+2] | ((buffer[base+4] & 0xf0) << 4);
-+               yres = buffer[base+5] | ((buffer[base+7] & 0xf0) << 4);
-+
-+             SiS_Pr->CP_HDisplay[i] = xres;
-+             SiS_Pr->CP_HSyncStart[i] = xres + (buffer[base+8] | ((buffer[base+11] & 0xc0) << 2));
-+               SiS_Pr->CP_HSyncEnd[i]   = SiS_Pr->CP_HSyncStart[i] + (buffer[base+9] | ((buffer[base+11] & 0x30) << 4));
-+             SiS_Pr->CP_HTotal[i] = xres + (buffer[base+3] | ((buffer[base+4] & 0x0f) << 8));
-+             SiS_Pr->CP_HBlankStart[i] = xres + 1;
-+             SiS_Pr->CP_HBlankEnd[i] = SiS_Pr->CP_HTotal[i];
-+
-+             SiS_Pr->CP_VDisplay[i] = yres;
-+               SiS_Pr->CP_VSyncStart[i] = yres + (((buffer[base+10] & 0xf0) >> 4) | ((buffer[base+11] & 0x0c) << 2));
-+               SiS_Pr->CP_VSyncEnd[i] = SiS_Pr->CP_VSyncStart[i] + ((buffer[base+10] & 0x0f) | ((buffer[base+11] & 0x03) << 4));
-+             SiS_Pr->CP_VTotal[i] = yres + (buffer[base+6] | ((buffer[base+7] & 0x0f) << 8));
-+             SiS_Pr->CP_VBlankStart[i] = yres + 1;
-+             SiS_Pr->CP_VBlankEnd[i] = SiS_Pr->CP_VTotal[i];
-+
-+             SiS_Pr->CP_Clock[i] = (buffer[base] | (buffer[base+1] << 8)) * 10;
-+
-+             SiS_Pr->CP_DataValid[i] = TRUE;
-+
-+             /* Sort out invalid timings, interlace and too high clocks */
-+             if((SiS_Pr->CP_HDisplay[i] > SiS_Pr->CP_HSyncStart[i])  ||
-+                (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HSyncEnd[i])   ||
-+                (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HTotal[i])     ||
-+                (SiS_Pr->CP_HSyncStart[i] >= SiS_Pr->CP_HSyncEnd[i]) ||
-+                (SiS_Pr->CP_HSyncStart[i] > SiS_Pr->CP_HTotal[i])    ||
-+                (SiS_Pr->CP_HSyncEnd[i] > SiS_Pr->CP_HTotal[i])      ||
-+                (SiS_Pr->CP_VDisplay[i] > SiS_Pr->CP_VSyncStart[i])  ||
-+                (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VSyncEnd[i])   ||
-+                (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VTotal[i])     ||
-+                (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VSyncEnd[i])  ||
-+                (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VTotal[i])    ||
-+                (SiS_Pr->CP_VSyncEnd[i] > SiS_Pr->CP_VTotal[i])      ||
-+                (SiS_Pr->CP_Clock[i] > 108000)                       ||
-+                (buffer[base+17] & 0x80)) {
-+
-+                SiS_Pr->CP_DataValid[i] = FALSE;
-+
-+             } else {
-+
-+                paneltype = Panel_Custom;
-+
-+                SiS_Pr->CP_HaveCustomData = TRUE;
-+
-+                if(xres > SiS_Pr->CP_MaxX) SiS_Pr->CP_MaxX = xres;
-+                if(yres > SiS_Pr->CP_MaxY) SiS_Pr->CP_MaxY = yres;
-+                if(SiS_Pr->CP_Clock[i] > SiS_Pr->CP_MaxClock) SiS_Pr->CP_MaxClock = SiS_Pr->CP_Clock[i];
-+
-+                SiS_Pr->CP_Vendor = buffer[9] | (buffer[8] << 8);
-+                SiS_Pr->CP_Product = buffer[10] | (buffer[11] << 8);
-+
-+                /* We must assume the panel can scale, since we have
-+                 * no scaling data
-+                 */
-+                checkexpand = FALSE;
-+                cr37 |= 0x10;
-+
-+                /* Extract the sync polarisation information. This only works
-+                 * if the Flags indicate a digital separate output.
-+                 */
-+                if((buffer[base+17] & 0x18) == 0x18) {
-+                   SiS_Pr->CP_HSync_P[i] = (buffer[base+17] & 0x02) ? TRUE : FALSE;
-+                   SiS_Pr->CP_VSync_P[i] = (buffer[base+17] & 0x04) ? TRUE : FALSE;
-+                   SiS_Pr->CP_SyncValid[i] = TRUE;
-+                   if(!havesync) {
-+                      cr37 |= ((((buffer[base+17] & 0x06) ^ 0x06) << 5) | 0x20);
-+                      havesync = TRUE;
-+                   }
-+                } else {
-+                   SiS_Pr->CP_SyncValid[i] = FALSE;
-+                }
-+             }
-+            }
-+       }
-+       if(!havesync) {
-+          xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+                 "CRT2: Unable to retrieve Sync polarity information\n");
-+       }
-       }
--      
--      if(checkexpand) {
--         /* If any of the Established low-res modes is supported, the 
-+
-+      if(paneltype && checkexpand) {
-+         /* If any of the Established low-res modes is supported, the
-         * panel can scale automatically. For 800x600 panels, we only 
-         * check the even lower ones.
-         */
--       if(paneltype == Panel310_800x600) {
-+       if(paneltype == Panel_800x600) {
-           if(buffer[0x23] & 0xfc) cr37 |= 0x10;
-        } else {
-             if(buffer[0x23])      cr37 |= 0x10;
-@@ -10262,20 +10573,31 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
-               buffer[0x41]);
-        return 0;
-       }
--   
--      xres = buffer[0x76] | (buffer[0x77] << 8);
--      yres = buffer[0x78] | (buffer[0x79] << 8);
-+
-+      paneltype = Panel_Custom;
-+      SiS_Pr->CP_MaxX = xres = buffer[0x76] | (buffer[0x77] << 8);
-+      SiS_Pr->CP_MaxY = yres = buffer[0x78] | (buffer[0x79] << 8);
-       switch(xres) {
-          case 800:
-            if(yres == 600) {
--              paneltype = Panel310_800x600;
-+              paneltype = Panel_800x600;
-               checkexpand = TRUE;
-            }
-            break;
-          case 1024:
-            if(yres == 768) {
--              paneltype = Panel310_1024x768;
--              checkexpand = FALSE;                    /* Bug at 640x480; we do the scaling ourselves */
-+              paneltype = Panel_1024x768;
-+              checkexpand = TRUE;
-+           }
-+           break;
-+       case 1152:
-+           if(yres == 768) {
-+              if(pSiS->VGAEngine == SIS_300_VGA) {
-+                 paneltype = Panel300_1152x768;
-+              } else {
-+                 paneltype = Panel310_1152x768;
-+              }
-+              checkexpand = TRUE;
-            }
-            break;
-        case 1280:
-@@ -10286,45 +10608,46 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
-                  paneltype = Panel300_1280x960;
-               }
-            } else if(yres == 1024) {
--              paneltype = Panel310_1280x1024;  
-+              paneltype = Panel_1280x1024;
-               checkexpand = TRUE;
--           } else if(pSiS->VGAEngine == SIS_315_VGA) {
--              if(yres == 768) {
--                 paneltype = Panel310_1280x768;       /* Panel size 1280x768 not supported yet */
--                 checkexpand = TRUE;
--              }
--           } 
-+           } else if(yres == 768) {
-+              paneltype = Panel_1280x768;
-+              checkexpand = FALSE;
-+              cr37 |= 0x10;
-+           }
-            break;
-        case 1400:
-            if(pSiS->VGAEngine == SIS_315_VGA) {
-               if(yres == 1050) {
-                  paneltype = Panel310_1400x1050;
-                  checkexpand = TRUE;
--              } 
-+              }
-            }
-                    break;
-+#if 0    /* Treat this one as custom since we have no timing data yet */
-        case 1600:
-            if(pSiS->VGAEngine == SIS_315_VGA) {
-               if(yres == 1200) {
-                  paneltype = Panel310_1600x1200;
-                  checkexpand = TRUE;
--              } 
-+              }
-            }
-                    break;
-+#endif
-       }
--                 
-+
-       /* Determine if RGB18 or RGB24 */
-       if(index) {
-          if((buffer[index] == 0x20) || (buffer[index] == 0x34)) {
-           cr37 |= 0x01;
-        }
-       }
--      
-+
-       if(checkexpand) {
-          /* TODO - for now, we let the panel scale */
-        cr37 |= 0x10;
-       }
--     
-+
-       /* Now seek 4-Byte Timing codes and extract sync pol info */
-       index = 0x80;
-       if(buffer[0x7e] & 0x20) {                           /* skip Luminance Table (if provided) */
-@@ -10346,28 +10669,117 @@ SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SIS
-        if(buffer[myindex] == seekcode) {
-           cr37 |= ((((buffer[myindex + 1] & 0x0c) ^ 0x0c) << 4) | 0x20);
-        } else {
--          xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING, 
--              "CRT2: Unable to retrieve Sync polarity information\n");    
-+          xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+              "CRT2: Unable to retrieve Sync polarity information\n");
-        }
-       } else {
--         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING, 
--              "CRT2: Unable to retrieve Sync polarity information\n");
-+         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_WARNING,
-+           "CRT2: Unable to retrieve Sync polarity information\n");
-+      }
-+
-+      /* Now seek the detailed timing descriptions for custom panels */
-+      if(paneltype == Panel_Custom) {
-+         index += (numcodes * 4);
-+       numcodes = buffer[0x7f] & 0x07;
-+       for(i=0; i<numcodes; i++) {
-+          xres = buffer[index+2] | ((buffer[index+4] & 0xf0) << 4);
-+            yres = buffer[index+5] | ((buffer[index+7] & 0xf0) << 4);
-+
-+          SiS_Pr->CP_HDisplay[i] = xres;
-+          SiS_Pr->CP_HSyncStart[i] = xres + (buffer[index+8] | ((buffer[index+11] & 0xc0) << 2));
-+            SiS_Pr->CP_HSyncEnd[i] = SiS_Pr->CP_HSyncStart[i] + (buffer[index+9] | ((buffer[index+11] & 0x30) << 4));
-+          SiS_Pr->CP_HTotal[i] = xres + (buffer[index+3] | ((buffer[index+4] & 0x0f) << 8));
-+          SiS_Pr->CP_HBlankStart[i] = xres + 1;
-+          SiS_Pr->CP_HBlankEnd[i] = SiS_Pr->CP_HTotal[i];
-+
-+          SiS_Pr->CP_VDisplay[i] = yres;
-+            SiS_Pr->CP_VSyncStart[i] = yres + (((buffer[index+10] & 0xf0) >> 4) | ((buffer[index+11] & 0x0c) << 2));
-+            SiS_Pr->CP_VSyncEnd[i] = SiS_Pr->CP_VSyncStart[i] + ((buffer[index+10] & 0x0f) | ((buffer[index+11] & 0x03) << 4));
-+          SiS_Pr->CP_VTotal[i] = yres + (buffer[index+6] | ((buffer[index+7] & 0x0f) << 8));
-+          SiS_Pr->CP_VBlankStart[i] = yres + 1;
-+          SiS_Pr->CP_VBlankEnd[i] = SiS_Pr->CP_VTotal[i];
-+
-+          SiS_Pr->CP_Clock[i] = (buffer[index] | (buffer[index+1] << 8)) * 10;
-+
-+          SiS_Pr->CP_DataValid[i] = TRUE;
-+
-+          if((SiS_Pr->CP_HDisplay[i] > SiS_Pr->CP_HSyncStart[i])  ||
-+             (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HSyncEnd[i])   ||
-+             (SiS_Pr->CP_HDisplay[i] >= SiS_Pr->CP_HTotal[i])     ||
-+             (SiS_Pr->CP_HSyncStart[i] >= SiS_Pr->CP_HSyncEnd[i]) ||
-+             (SiS_Pr->CP_HSyncStart[i] > SiS_Pr->CP_HTotal[i])    ||
-+             (SiS_Pr->CP_HSyncEnd[i] > SiS_Pr->CP_HTotal[i])      ||
-+             (SiS_Pr->CP_VDisplay[i] > SiS_Pr->CP_VSyncStart[i])  ||
-+             (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VSyncEnd[i])   ||
-+             (SiS_Pr->CP_VDisplay[i] >= SiS_Pr->CP_VTotal[i])     ||
-+             (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VSyncEnd[i])  ||
-+             (SiS_Pr->CP_VSyncStart[i] > SiS_Pr->CP_VTotal[i])    ||
-+             (SiS_Pr->CP_VSyncEnd[i] > SiS_Pr->CP_VTotal[i])      ||
-+             (SiS_Pr->CP_Clock[i] > 108000)                       ||
-+             (buffer[index + 17] & 0x80)) {
-+
-+             SiS_Pr->CP_DataValid[i] = FALSE;
-+
-+          } else {
-+
-+             SiS_Pr->CP_HaveCustomData = TRUE;
-+
-+             if(SiS_Pr->CP_Clock[i] > SiS_Pr->CP_MaxClock) SiS_Pr->CP_MaxClock = SiS_Pr->CP_Clock[i];
-+
-+             SiS_Pr->CP_HSync_P[i] = (buffer[index + 17] & 0x02) ? TRUE : FALSE;
-+             SiS_Pr->CP_VSync_P[i] = (buffer[index + 17] & 0x04) ? TRUE : FALSE;
-+             SiS_Pr->CP_SyncValid[i] = TRUE;
-+
-+             SiS_Pr->CP_Vendor = buffer[2] | (buffer[1] << 8);
-+             SiS_Pr->CP_Product = buffer[3] | (buffer[4] << 8);
-+
-+             /* We must assume the panel can scale, since we have
-+              * no scaling data
-+              */
-+             cr37 |= 0x10;
-+
-+          }
-+       }
-+
-       }
-       break;
--     
-+
-    }
--   
-+
-    /* 1280x960 panels are always RGB24, unable to scale and use
-     * high active sync polarity
-     */
-    if(pSiS->VGAEngine == SIS_315_VGA) {
--      if(paneltype == Panel310_1280x960) cr37 &= 0x0e; 
-+      if(paneltype == Panel310_1280x960) cr37 &= 0x0e;
-    } else {
--      if(paneltype == Panel300_1280x960) cr37 &= 0x0e; 
-+      if(paneltype == Panel300_1280x960) cr37 &= 0x0e;
-    }
--   
-+
-+   for(i = 0; i < 7; i++) {
-+      if(SiS_Pr->CP_DataValid[i]) {
-+         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+            "Non-standard LCD timing data no. %d:\n", i);
-+         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+          "   HDisplay %d HSync %d HSyncEnd %d HTotal %d\n",
-+          SiS_Pr->CP_HDisplay[i], SiS_Pr->CP_HSyncStart[i],
-+          SiS_Pr->CP_HSyncEnd[i], SiS_Pr->CP_HTotal[i]);
-+         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+            "   VDisplay %d VSync %d VSyncEnd %d VTotal %d\n",
-+            SiS_Pr->CP_VDisplay[i], SiS_Pr->CP_VSyncStart[i],
-+          SiS_Pr->CP_VSyncEnd[i], SiS_Pr->CP_VTotal[i]);
-+         xf86DrvMsg(pSiS->pScrn->scrnIndex, X_PROBED,
-+          "   Pixel clock: %3.3fMhz\n", (float)SiS_Pr->CP_Clock[i] / 1000);
-+       xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO,
-+          "   To use this, add \"%dx%d\" to the list of Modes in the Display section\n",
-+          SiS_Pr->CP_HDisplay[i],
-+          SiS_Pr->CP_VDisplay[i]);
-+      }
-+   }
-+
-    if(paneltype) {
-+       if(!SiS_Pr->CP_PreferredX) SiS_Pr->CP_PreferredX = SiS_Pr->CP_MaxX;
-+       if(!SiS_Pr->CP_PreferredY) SiS_Pr->CP_PreferredY = SiS_Pr->CP_MaxY;
-        cr37 &= 0xf1;
-        cr37 |= 0x02;    /* SiS301 */
-        SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x36,0xf0,paneltype);
-@@ -10392,7 +10804,7 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
-    if(!(pSiS->VBFlags & (VB_301|VB_301B|VB_302B))) return 0;
- /* if(pSiS->VBFlags & VB_30xBDH) return 0;  */
-    
--   if(SiS_InitDDCRegs(SiS_Pr, pSiS, 2, 0, FALSE) == 0xFFFF) return 0;
-+   if(SiS_InitDDCRegs(SiS_Pr, pSiS->VBFlags, pSiS->VGAEngine, 2, 0, FALSE) == 0xFFFF) return 0;
-    
-    SiS_Pr->SiS_DDC_SecAddr = 0x00;
-    
-@@ -10416,7 +10828,7 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
-    /* Read the entire EDID */
-    retry = 2;
-    do {
--      if(SiS_ReadDDC(SiS_Pr, pSiS, DDCdatatype, buffer)) {
-+      if(SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer)) {
-          xf86DrvMsg(pSiS->pScrn->scrnIndex, X_INFO, 
-               "CRT2: DDC read failed (attempt %d), %s\n", 
-               (3-retry), (retry == 1) ? "giving up" : "retrying");
-@@ -10435,6 +10847,8 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
-               "CRT2: Attached display expects digital input\n");
-                 return 0;     
-       }
-+      SiS_Pr->CP_Vendor = buffer[9] | (buffer[8] << 8);
-+      SiS_Pr->CP_Product = buffer[10] | (buffer[11] << 8);
-       foundcrt = TRUE;
-       break;
-    case 3:
-@@ -10448,198 +10862,19 @@ SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SI
-               buffer[0x41]);
-         return 0;
-       }
-+      SiS_Pr->CP_Vendor = buffer[2] | (buffer[1] << 8);
-+      SiS_Pr->CP_Product = buffer[3] | (buffer[4] << 8);
-       foundcrt = TRUE;
--      break;    
-+      break;
-    }
--   
-+
-    if(foundcrt) {
-        SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x32,0x10);
-    }
-    return(0);
- }
--#if 0
--   /* ----- */
--USHORT
--SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS)
--{
--   USHORT DDCdatatype, paneltype, flag;
--   unsigned char cr36=0, cr37=0;
--   unsigned char tempal, tempah, tempbl, tempbh;
--   USHORT tempax, tempbx, tempcx, push1, push2, push3;
--   unsigned char addresstable[] = { 0x00, 0x22, 0x30, 0x40 };
--   int i;
--   unsigned char buffer[256];
--   
--   if(pSiS->VGAEngine != SIS_315_VGA) return 0xFFFF;
--   if(!(pSiS->VBFlags & (VB_301B|VB_302B))) return 0xFFFF;
--   
--   if(SiS_InitDDCRegs(SiS_Pr, pSiS, 1, 0, FALSE) == 0xFFFF) return 0xFFFF;   
--   
--   flag = SiS_ProbeDDC(SiS_Pr);
--   if(flag & 0x02) {
--      SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;      /* EDID V1 */
--      DDCdatatype = 1;
--      SiS_Pr->SiS_DDC_SecAddr = 0x3a;
--   } else if(flag & 0x08) {
--      SiS_Pr->SiS_DDC_DeviceAddr = 0xa2;      /* EDID V2 (P&D-D Monitor) */
--      DDCdatatype = 3;
--      SiS_Pr->SiS_DDC_SecAddr = 0x76;
--   } else if(flag & 0x10) {
--      SiS_Pr->SiS_DDC_DeviceAddr = 0xa6;      /* EDID V2 (FP) */
--      DDCdatatype = 4;
--      SiS_Pr->SiS_DDC_SecAddr = 0x76;
--   } else return 0xFFFF;
--   
--   
--   SiS_ReadLCDDDC(SiS_Pr, 4, buffer);
--   tempbl = buffer[0];  /* 3a - 76 */
--   tempbh = buffer[1];  /* 3b - 77 */
--   
--   if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
--   
--      /* Read and analyze EDID V1 (res) */
--   
--      tempah = 0x02;                          /* 1024x768 by default */
--      tempbl &= 0xf0;
--      if(tempbl != 0x40) {                    
--         tempah = 0x03;                               /* 1280x1024 by default */
--       if(tempbl == 0x50) {
--          if(!tempbh) {
--             tempbh = buffer[3] & 0xf0;
--             if(tempbh == 0x30) {
--                 SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
--                         SiS_Pr->SiS_DDC_SecAddr = 0x23;
--                 SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--                 tempbl = buffer[0];  /* 0x23 */
--                 tempbh = buffer[1];  /* 0x24 */
--                 if(tempbl) cr37 |= 0x10;
--                 tempah = 0x0a;               /* 1280x768 */
--             }
--             if(tempbh == 0x40) {
--                 SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
--                         SiS_Pr->SiS_DDC_SecAddr = 0x23;
--                 SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--                 tempbl = buffer[0];  /* 0x23 */
--                 tempbh = buffer[1];  /* 0x24 */
--                 if(tempbl) cr37 |= 0x10;
--                 tempah = 0x03;               /* 1280x1024 */
--             }
--             tempbh = 0x00;
--          }
--       }
--       if(tempbh == 0x00) goto cr36ready;
--       tempah = 0x07;                         /* 1280x960 */
--       if(tempbh == 0xc0) goto cr36ready;
--      }
--      SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
--      SiS_Pr->SiS_DDC_SecAddr = 0x18;         /* feature support */
--      SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--      tempbl = buffer[0];
--      tempbh = buffer[1];
--      if(tempbl & 0x02) goto cr36ready;
--      SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
--      SiS_Pr->SiS_DDC_SecAddr = 0x23;         /* Established Timings */
--      SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--      tempbl = buffer[0];
--      tempbh = buffer[1];
--      tempah = 0x03;
--      if(!(tempbh & 0x01)) tempah = 0x02;
--      if(!tempbl) cr37 |= 0x10;
--      
--  } else {
--  
--      /* Read and analyze EDID V2 (res) */
--      
--      tempah = 0x02;
--      tempbx = tempbl | (tempbh << 8);
--      if(tempbx != 1024) tempah = 0x03;
--      
--  }     
--
--cr36ready:
--  cr36 = tempah;      
--  
--  if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
--  
--     /* Read and analyze EDID V1 (pol) */
--  
--     SiS_Pr->SiS_DDC_SecAddr = 0x47;
--     SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--     tempah = buffer[0];
--     tempah &= 0x06;
--     tempah ^= 0x06;
--     tempah <<= 5;
--     tempah |= 0x20;
--     cr37 &= 0x1f;
--     cr37 |= tempah;
--     if((cr36 & 0x07) == 0x07) cr37 &= 0x0e;
--     
--  } else {
--  
--     /* Read and analyze EDID V2 (depth, pol) */
--  
--     push1 = tempah;
--     SiS_Pr->SiS_DDC_SecAddr = 0x45;
--     SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--     tempah = 0x01;
--     if((buffer[0] != 0x20) && (buffer[0] != 0x34)) {   /* RGB18 or 24? */
--        tempah = 0x00;
--     }
--     cr37 &= 0xfe;
--     cr37 |= tempah;
--     
--     SiS_Pr->SiS_DDC_SecAddr = 0x7e;
--     SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--     tempax = (USHORT)(buffer[0] | (buffer[1] << 8));
--     push2 = tempax;
--     tempax &= 0x0003;
--     tempax *= 0x1b;
--     push3 = tempax;
--     tempax = (USHORT)buffer[0];
--     tempax &= 0x001c;
--     tempax >>= 2;
--     tempax *= 8;
--     tempbx = push3;
--     tempbx += tempax;
--     if(buffer[0] & 0x20) {           /* Luminance table provided? */
--        SiS_Pr->SiS_DDC_SecAddr = 0x80;
--      SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--      tempax = buffer[0] | (buffer[1] << 8);
--      tempax &= 0x1f;
--      if(buffer[0] & 0x70) tempax <<= 1;
--      tempax++;       
--      tempbx += tempax;               /* yes -> skip it */
--     }
--     tempcx = push2;
--     tempax = push1 << 8;
--     tempbx = (tempbx & 0xff00) | (((tempbx & 0x00ff) + 0x80) & 0x00ff);
--     if(tempcx & 0xf800) {
--        tempal = addresstable[((tempax & 0xff00) >> 8)];
--      tempcx &= 0xf8ff;
--      tempcx >>= 11;
--      for(i=0; i<tempcx; i++) {
--         SiS_Pr->SiS_DDC_SecAddr = (tempbx & 0x00ff);
--         SiS_ReadLCDDDC(SiS_Pr, 2, buffer);
--         tempbx += 0x04;
--         if(buffer[0] == tempal) break;
--      }
--      tempah = buffer[1];
--      tempah &= 0x0c;
--      tempah ^= 0x0c;
--      tempah <<= 4;
--      tempah |= 0x20;
--        cr37 &= 0x1f;
--        cr37 |= tempah;
--      if((cr36 & 0x07) == 0x07) cr37 &= 0x0e;
--     }
--  }
--  xf86DrvMsg(0, X_INFO, "DDC: cr36 = 0x%02x, cr37 = 0x%02x\n", cr36, cr37);
--  return 0;
--}
--#endif
--
--/* TW: Generic I2C functions (compliant to i2c library) */
-+/* Generic I2C functions (compliant to i2c library) */
- #if 0
- USHORT
-@@ -10684,7 +10919,7 @@ SiS_SetCH70xxANDOR(SiS_Private *SiS_Pr, 
-   SiS_SetCH70xx(SiS_Pr,tempbl);
- }
--/* TW: Generic I2C functions for Chrontel --------- */
-+/* Generic I2C functions for Chrontel --------- */
- void
- SiS_SetSwitchDDC2(SiS_Private *SiS_Pr)
-@@ -10698,37 +10933,37 @@ SiS_SetSwitchDDC2(SiS_Private *SiS_Pr)
-   SiS_WaitRetraceDDC(SiS_Pr);
- }
--/* TW: Set I2C start condition */
--/* TW: This is done by a SD high-to-low transition while SC is high */
-+/* Set I2C start condition */
-+/* This is done by a SD high-to-low transition while SC is high */
- USHORT
- SiS_SetStart(SiS_Private *SiS_Pr)
- {
--  if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF;                              /* TW: (SC->low)  */
-+  if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF;                              /* (SC->low)  */
-   SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
--                  ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);             /* TW: SD->high */
--  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* TW: SC->high */
-+                  ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);             /* SD->high */
-+  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* SC->high */
-   SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
--                  ~SiS_Pr->SiS_DDC_Data,0x00);                             /* TW: SD->low = start condition */
--  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* TW: (SC->low) */
-+                  ~SiS_Pr->SiS_DDC_Data,0x00);                             /* SD->low = start condition */
-+  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* (SC->low) */
-   return 0;
- }
--/* TW: Set I2C stop condition */
--/* TW: This is done by a SD low-to-high transition while SC is high */
-+/* Set I2C stop condition */
-+/* This is done by a SD low-to-high transition while SC is high */
- USHORT
- SiS_SetStop(SiS_Private *SiS_Pr)
- {
--  if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF;                              /* TW: (SC->low) */
-+  if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF;                              /* (SC->low) */
-   SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
--                  ~SiS_Pr->SiS_DDC_Data,0x00);                           /* TW: SD->low   */
--  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* TW: SC->high  */
-+                  ~SiS_Pr->SiS_DDC_Data,0x00);                           /* SD->low   */
-+  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* SC->high  */
-   SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
--                  ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);           /* TW: SD->high = stop condition */
--  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* TW: (SC->high) */
-+                  ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);           /* SD->high = stop condition */
-+  if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF;                             /* (SC->high) */
-   return 0;
- }
--/* TW: Write 8 bits of data */
-+/* Write 8 bits of data */
- USHORT
- SiS_WriteDDC2Data(SiS_Private *SiS_Pr, USHORT tempax)
- {
-@@ -10736,18 +10971,18 @@ SiS_WriteDDC2Data(SiS_Private *SiS_Pr, U
-   flag=0x80;
-   for(i=0;i<8;i++) {
--    SiS_SetSCLKLow(SiS_Pr);                                                 /* TW: SC->low */
-+    SiS_SetSCLKLow(SiS_Pr);                                                 /* SC->low */
-     if(tempax & flag) {
-       SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
--                      ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);            /* TW: Write bit (1) to SD */
-+                      ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);            /* Write bit (1) to SD */
-     } else {
-       SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
--                      ~SiS_Pr->SiS_DDC_Data,0x00);                            /* TW: Write bit (0) to SD */
-+                      ~SiS_Pr->SiS_DDC_Data,0x00);                            /* Write bit (0) to SD */
-     }
--    SiS_SetSCLKHigh(SiS_Pr);                                                /* TW: SC->high */
-+    SiS_SetSCLKHigh(SiS_Pr);                                                /* SC->high */
-     flag >>= 1;
-   }
--  temp = SiS_CheckACK(SiS_Pr);                                                      /* TW: Check acknowledge */
-+  temp = SiS_CheckACK(SiS_Pr);                                                      /* Check acknowledge */
-   return(temp);
- }
-@@ -10808,27 +11043,27 @@ SiS_DDC2Delay(SiS_Private *SiS_Pr, USHOR
-   }
- }
--/* TW: Check I2C acknowledge */
-+/* Check I2C acknowledge */
- /* Returns 0 if ack ok, non-0 if ack not ok */
- USHORT
- SiS_CheckACK(SiS_Private *SiS_Pr)
- {
-   USHORT tempah;
--  SiS_SetSCLKLow(SiS_Pr);                                        /* TW: (SC->low) */
-+  SiS_SetSCLKLow(SiS_Pr);                                        /* (SC->low) */
-   SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index,
--                  ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);     /* TW: (SD->high) */
--  SiS_SetSCLKHigh(SiS_Pr);                                       /* TW: SC->high = clock impulse for ack */
--  tempah = SiS_GetReg1(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);/* TW: Read SD */
--  SiS_SetSCLKLow(SiS_Pr);                                        /* TW: SC->low = end of clock impulse */
--  if(tempah & SiS_Pr->SiS_DDC_Data) return(1);                           /* TW: Ack OK if bit = 0 */
-+                  ~SiS_Pr->SiS_DDC_Data,SiS_Pr->SiS_DDC_Data);     /* (SD->high) */
-+  SiS_SetSCLKHigh(SiS_Pr);                                       /* SC->high = clock impulse for ack */
-+  tempah = SiS_GetReg1(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);/* Read SD */
-+  SiS_SetSCLKLow(SiS_Pr);                                        /* SC->low = end of clock impulse */
-+  if(tempah & SiS_Pr->SiS_DDC_Data) return(1);                           /* Ack OK if bit = 0 */
-   else return(0);
- }
--/* TW: End of I2C functions ----------------------- */
-+/* End of I2C functions ----------------------- */
--/* =============== SiS 310/325/330 O.E.M. ================= */
-+/* =============== SiS 315/330 O.E.M. ================= */
- #ifdef SIS315H
-@@ -10838,11 +11073,11 @@ GetRAMDACromptr(SiS_Private *SiS_Pr, PSI
-   USHORT romptr;
-   if(HwDeviceExtension->jChipType < SIS_330) {
--     romptr = ROMAddr[0x128] | (ROMAddr[0x129] << 8);  
-+     romptr = ROMAddr[0x128] | (ROMAddr[0x129] << 8);
-      if(SiS_Pr->SiS_VBType & VB_SIS301B302B)
-         romptr = ROMAddr[0x12a] | (ROMAddr[0x12b] << 8);
-   } else {
--     romptr = ROMAddr[0x1a8] | (ROMAddr[0x1a9] << 8);  
-+     romptr = ROMAddr[0x1a8] | (ROMAddr[0x1a9] << 8);
-      if(SiS_Pr->SiS_VBType & VB_SIS301B302B)
-         romptr = ROMAddr[0x1aa] | (ROMAddr[0x1ab] << 8);
-   }
-@@ -10855,11 +11090,11 @@ GetLCDromptr(SiS_Private *SiS_Pr, PSIS_H
-   USHORT romptr;
-   if(HwDeviceExtension->jChipType < SIS_330) {
--     romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8);  
-+     romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8);
-      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)
-         romptr = ROMAddr[0x122] | (ROMAddr[0x123] << 8);
-   } else {
--     romptr = ROMAddr[0x1a0] | (ROMAddr[0x1a1] << 8);  
-+     romptr = ROMAddr[0x1a0] | (ROMAddr[0x1a1] << 8);
-      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)
-         romptr = ROMAddr[0x1a2] | (ROMAddr[0x1a3] << 8);
-   }
-@@ -10884,10 +11119,22 @@ GetTVromptr(SiS_Private *SiS_Pr, PSIS_HW
- }
- static USHORT
--GetLCDPtrIndexBIOS(SiS_Private *SiS_Pr)
-+GetLCDPtrIndexBIOS(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr)
- {
-   USHORT index;
--  
-+
-+  if((IS_SIS650) && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
-+     if(!(SiS_IsNotM650or651(SiS_Pr,HwDeviceExtension, BaseAddr))) {
-+        if((index = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xf0)) {
-+         index >>= 4;
-+         index *= 3;
-+         if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
-+           else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
-+           return index;
-+      }
-+     }
-+  }
-+
-   index = SiS_Pr->SiS_LCDResInfo & 0x0F;
-   if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)      index -= 5;
-   else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) index -= 6;
-@@ -10895,7 +11142,6 @@ GetLCDPtrIndexBIOS(SiS_Private *SiS_Pr)
-   index *= 3;
-   if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
-   else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
--
-   return index;
- }
-@@ -10946,7 +11192,7 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
-              UCHAR *ROMAddr, USHORT ModeNo)
- {
-   USHORT delay,index,myindex,temp,romptr=0;
--  
-+
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {                  /* VGA */
-      
-      if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-@@ -10971,8 +11217,10 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
-      }
-   
-   } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {              /* LCD */
-+
-+     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-   
--     index = GetLCDPtrIndexBIOS(SiS_Pr);
-+     index = GetLCDPtrIndexBIOS(SiS_Pr, HwDeviceExtension, BaseAddr);
-      myindex = GetLCDPtrIndex(SiS_Pr);
-      
-      if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {       /* 650+30xLV */
-@@ -10980,7 +11228,7 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
-           if((ROMAddr) && SiS_Pr->SiS_UseROM) {
- #if 0      /* Always use the second pointer on 650; some BIOSes */
-              /* still carry old 301 data at the first location    */  
--           romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8); 
-+           romptr = ROMAddr[0x120] | (ROMAddr[0x121] << 8);
-            if(SiS_Pr->SiS_VBType & VB_SIS302LV) 
- #endif                
-               romptr = ROMAddr[0x122] | (ROMAddr[0x123] << 8);
-@@ -10994,13 +11242,13 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
- #endif                
-         }
-        } else {
--          delay = SiS310_LCDDelayCompensation_651301LV[myindex];     
-+          delay = SiS310_LCDDelayCompensation_651301LV[myindex];
-         if(SiS_Pr->SiS_VBType & VB_SIS302LV)
--           delay = SiS310_LCDDelayCompensation_651302LV[myindex];  
-+           delay = SiS310_LCDDelayCompensation_651302LV[myindex];
-        }
-      } else {
-         if((ROMAddr) && SiS_Pr->SiS_UseROM &&                                 /* 315, 330, 740, 650+301B */
--         (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024)) { 
-+         (SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel1280x1024)) {
-            romptr = GetLCDromptr(SiS_Pr, HwDeviceExtension, ROMAddr);
-          if(!romptr) return;
-          delay = ROMAddr[(romptr + index)];
-@@ -11008,7 +11256,7 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
-            delay = SiS310_LCDDelayCompensation_301[myindex];
-            if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
- #if 0               /* This data is (like the one in the BIOS) wrong. */         
--            if(IS_SIS650740) {  /* V */
-+            if(IS_SIS550650740660) {
-                delay = SiS310_LCDDelayCompensation_650301B[myindex];
-             } else {
- #endif              
-@@ -11088,14 +11336,16 @@ SetDelayComp(SiS_Private *SiS_Pr, PSIS_H
-   } else {
-      if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) {
-         temp = (SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0xf0) >> 4;
--        if(temp == 8) {
-+        if(temp == 8) {               /* 1400x1050 BIOS */
-          delay &= 0x0f;
-          delay |= 0xb0;
-         } else if(temp == 6) {
-            delay &= 0x0f;
-          delay |= 0xc0;
-+        } else if(temp > 7) { /* 1280x1024 BIOS */
-+         delay = 0x35;
-         }
--        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2D,delay);  /* index 2D D[3:0] */
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2D,delay);
-      } else {
-         SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
-      }
-@@ -11118,7 +11368,7 @@ SetAntiFlicker(SiS_Private *SiS_Pr, PSIS
-   if(ROMAddr && SiS_Pr->SiS_UseROM) {
-      romptr = ROMAddr[0x112] | (ROMAddr[0x113] << 8);
--     if(HwDeviceExtension->jChipType == SIS_330) {
-+     if(HwDeviceExtension->jChipType >= SIS_330) {
-         romptr = ROMAddr[0x192] | (ROMAddr[0x193] << 8);
-      }
-   }
-@@ -11150,7 +11400,7 @@ SetEdgeEnhance(SiS_Private *SiS_Pr, PSIS
-   if(ROMAddr && SiS_Pr->SiS_UseROM) {
-      romptr = ROMAddr[0x124] | (ROMAddr[0x125] << 8);
--     if(HwDeviceExtension->jChipType == SIS_330) {
-+     if(HwDeviceExtension->jChipType >= SIS_330) {
-         romptr = ROMAddr[0x1a4] | (ROMAddr[0x1a5] << 8);
-      }
-   }
-@@ -11198,7 +11448,7 @@ SetYFilter(SiS_Private *SiS_Pr, PSIS_HW_
-   if(ROMAddr && SiS_Pr->SiS_UseROM) {
-       OutputSelect = ROMAddr[0xf3];
--      if(HwDeviceExtension->jChipType == SIS_330) {
-+      if(HwDeviceExtension->jChipType >= SIS_330) {
-           OutputSelect = ROMAddr[0x11b];
-       }
-   }
-@@ -11262,17 +11512,17 @@ SetPhaseIncr(SiS_Private *SiS_Pr, PSIS_H
-    */
-   if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-      romptr = ROMAddr[0x116] | (ROMAddr[0x117] << 8);
--     if(HwDeviceExtension->jChipType == SIS_330) {
-+     if(HwDeviceExtension->jChipType >= SIS_330) {
-         romptr = ROMAddr[0x196] | (ROMAddr[0x197] << 8);
-      }
-      if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-         romptr = ROMAddr[0x11c] | (ROMAddr[0x11d] << 8);
--      if(HwDeviceExtension->jChipType == SIS_330) {
-+      if(HwDeviceExtension->jChipType >= SIS_330) {
-          romptr = ROMAddr[0x19c] | (ROMAddr[0x19d] << 8);
-       }
-       if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) && (!(SiS_Pr->SiS_SetFlag & TVSimuMode))) {
-          romptr = ROMAddr[0x116] | (ROMAddr[0x117] << 8);
--         if(HwDeviceExtension->jChipType == SIS_330) {
-+         if(HwDeviceExtension->jChipType >= SIS_330) {
-               romptr = ROMAddr[0x196] | (ROMAddr[0x197] << 8);
-            }
-       }
-@@ -11296,19 +11546,19 @@ SetPhaseIncr(SiS_Private *SiS_Pr, PSIS_H
-      }
-   }
--  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {    /* TW: 650/301LV: (VB_SIS301LV | VB_SIS302LV)) */
-+  if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {    /* 650/301LV: (VB_SIS301LV | VB_SIS302LV)) */
-      if((!(SiS_Pr->SiS_VBInfo & SetPALTV)) && (ModeNo > 0x13)) {
--        if(resinfo == 6) {
-+        if(resinfo == SIS_RI_640x480) {
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x31,0x21);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x32,0xf0);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x33,0xf5);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x34,0x7f);
--      } else if (resinfo == 7) {
-+      } else if (resinfo == SIS_RI_800x600) {
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x31,0x21);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x32,0xf0);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x33,0xf5);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x34,0x7f);
--      } else if (resinfo == 8) {
-+      } else if (resinfo == SIS_RI_1024x768) {
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x31,0x1e);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x32,0x8b);
-             SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x33,0xfb);
-@@ -11323,7 +11573,9 @@ SiS_OEM310Setting(SiS_Private *SiS_Pr, P
-                   UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
- {
-    SetDelayComp(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo);
--   /* TW: The TV functions are not for LVDS */
-+
-+   if(SiS_Pr->UseCustomMode) return;
-+
-    if( (SiS_Pr->SiS_IF_DEF_LVDS == 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) ) {
-        SetAntiFlicker(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-        SetPhaseIncr(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-@@ -11335,7 +11587,7 @@ SiS_OEM310Setting(SiS_Private *SiS_Pr, P
- }
- /* FinalizeLCD
-- * This finalizes some Part1 registers for the very panel used.
-+ * This finalizes some CRT2 registers for the very panel used.
-  * If we have a backup if these registers, we use it; otherwise
-  * we set the register according to most BIOSes. However, this
-  * function looks quite different in every BIOS, so you better
-@@ -11350,6 +11602,9 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
-   if(!(SiS_Pr->SiS_VBType & VB_SIS301LV302LV)) return;
-+  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+  if(SiS_Pr->UseCustomMode) return;
-+
-   if(ModeNo <= 0x13) {
-       resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
-       modeflag =  SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-@@ -11358,20 +11613,31 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
-       modeflag =  SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-   }
-+  if((SiS_GetReg1(SiS_Pr->SiS_P3d4, 0x5f) & 0xf0)) {
-+     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
-+  }
-+
-   if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
-      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-         SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x2a,0x00);
-       SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x30,0x00);
-       SiS_SetReg1(SiS_Pr->SiS_Part4Port,0x34,0x10);
-+     } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024) {   /* For all panels? */
-+        SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
-      }
-      tempch = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36);
-      tempch &= 0xf0;
-      tempch >>= 4;
-      if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
-+        if(tempch == 0x03) {
-+         SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x02);
-+         SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1b,0x25);
-+         SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1c,0x00);
-+         SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
-+      }
-       if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) {
-          SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1f,0x76);
--      }
--      if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {       
-+      } else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-          if((SiS_Pr->Backup == TRUE) && (SiS_Pr->Backup_Mode == ModeNo)) {
-             SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,SiS_Pr->Backup_14);
-             SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x15,SiS_Pr->Backup_15);
-@@ -11387,14 +11653,14 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
-              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,0x90);
-              if(ModeNo <= 0x13) {
-                 SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x11);
--                if((resinfo == 0) && (resinfo == 2)) return;
-+                if((resinfo == 0) || (resinfo == 2)) return;
-                 SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x18);
--                if((resinfo == 1) && (resinfo == 3)) return;
-+                if((resinfo == 1) || (resinfo == 3)) return;
-              }
-              SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x02);
--             if((ModeNo > 0x13) && (resinfo == 8)) {
-+             if((ModeNo > 0x13) && (resinfo == SIS_RI_1024x768)) {
-                 SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,0x02);  /* 1.10.7u */
--#if 0        
-+#if 0
-                 tempbx = 806;  /* 0x326 */                     /* other older BIOSes */
-                 tempbx--;
-                 temp = tempbx & 0xff;
-@@ -11449,7 +11715,7 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
-       tempbl = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x04);
-       tempbx = (tempbh << 8) | tempbl;
-       if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
--         if((resinfo == 8) || (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD))) {
-+         if((resinfo == SIS_RI_1024x768) || (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD))) {
-             if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
-               tempbx = 770;
-             } else {
-@@ -11477,67 +11743,56 @@ SiS_FinalizeLCD(SiS_Private *SiS_Pr, USH
-   }
- }
--#if 0
--/* TW: New and checked from 650/301LV BIOS */
--/* This might clash with newer "FinalizeLCD()" function */
-+#endif
-+
-+
-+/*  =================  SiS 300 O.E.M. ================== */
-+
-+#ifdef SIS300
-+
- void
--SiS_OEMLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
--                  UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
-+SetOEMLCDData2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-+              UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex, USHORT RefTabIndex)
- {
--   USHORT tempbx,tempah,tempbl,tempbh,tempcl;
--
--   if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) return;
-+  USHORT crt2crtc=0, modeflag, myindex=0;
-+  UCHAR  temp;
-+  int i;
--   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
--      SiS_UnLockCRT2(SiS_Pr,HwDeviceExtension,BaseAddr);
--      tempbh = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x1a);
--      tempbh &= 0x38;
--      tempbh >>= 3;
--      tempbl = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x18);
--      tempbx = (tempbh << 8) | tempbl;
--      if(SiS_Pr->SiS_LCDTypeInfo == 1)  tempbx -= 0x12;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,tempbx & 0x00ff);
--      tempah = (tempbx & 0xff00) >> 8;
--      tempah &= 0x07;
--      tempah <<= 3;
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1a,0xc7,tempah);
--      tempah = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x19);
--      tempah &= 0x0f;
--      if(SiS_Pr->SiS_LCDTypeInfo == 1)  tempah -= 2;
--      tempah &= 0x0f;
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,tempah);
--      tempah = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x14);
--      if(SiS_Pr->SiS_LCDTypeInfo == 1)  tempah++;
--      tempah -= 8;
--      SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,tempah);
--   } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--      tempcl = tempbh = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x01);
--      tempbh &= 0x70;
--      tempbh >>= 4;
--      tempbl = SiS_GetReg1(SiS_Pr->SiS_Part2Port,0x04);
--      tempbx = (tempbh << 8) | tempbl;
--      if(SiS_Pr->SiS_LCDTypeInfo == 1)  {
--           tempbx -= 0x1e;
--         tempcl &= 0x0f;
--         tempcl -= 4;
--         tempcl &= 0x0f;
--      }
--      tempbl = tempbx & 0x00ff;
--      tempbh = (tempbx >> 8) & 0x00ff;
--      SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x04,tempbl);
--      tempbh <<= 4;
--      tempbh |= tempcl;
--      SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,tempbh);
--   }
--}
--#endif
-+  if(ModeNo <= 0x13) {
-+        modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
-+      crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-+  } else {
-+        modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-+      crt2crtc = SiS_Pr->SiS_RefIndex[RefTabIndex].Ext_CRT2CRTC;
-+  }
--#endif
-+  crt2crtc &= 0x3f;
-+  if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+     SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xdf);
-+  }
--/*  =================  SiS 300 O.E.M. ================== */
-+  if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+     if(modeflag & HalfDCLK) myindex = 1;
--#ifdef SIS300
-+     if(SiS_LowModeStuff(SiS_Pr,ModeNo,HwDeviceExtension)) {
-+        for(i=0; i<7; i++) {
-+           if(barco_p1[myindex][crt2crtc][i][0]) {
-+            SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,
-+                            barco_p1[myindex][crt2crtc][i][0],
-+                            barco_p1[myindex][crt2crtc][i][2],
-+                            barco_p1[myindex][crt2crtc][i][1]);
-+         }
-+        }
-+     }
-+     temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00);
-+     if(temp & 0x80) {
-+        temp = SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x18);
-+        temp++;
-+        SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,temp);
-+     }
-+  }
-+}
- #if 0   /* Not used */
- static USHORT
-@@ -11582,7 +11837,7 @@ GetOEMLCDPtr(SiS_Private *SiS_Pr, PSIS_H
-   if(HwDeviceExtension->jChipType == SIS_300) {
--    tempbx = SiS_Pr->SiS_LCDResInfo - 2;
-+    tempbx = (SiS_GetReg1(SiS_Pr->SiS_P3d4,0x36) & 0x0f) - 2;
-     if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 4;
-     if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) {
-        if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 3;
-@@ -11636,24 +11891,29 @@ SetOEMLCDDelay(SiS_Private *SiS_Pr, PSIS
- {
-   USHORT index,temp,romptr=0;
-+  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_PanelCustom) return;
-+
-   if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-      if(!(ROMAddr[0x237] & 0x01)) return;
-      if(!(ROMAddr[0x237] & 0x02)) return;
-      romptr = ROMAddr[0x24b] | (ROMAddr[0x24c] << 8);
-   }
--  /* TW: The Panel Compensation Delay should be set according to tables
--   *     here. Unfortunately, various BIOS versions don't case about
--   *     a uniform way using eg. ROM byte 0x220, but use different
--   *     hard coded delays (0x04, 0x20, 0x18) in SetGroup1().
--   *     Thus we don't set this if the user select a custom pdc or if
--   *     we otherwise detected a valid pdc.
-+  /* The Panel Compensation Delay should be set according to tables
-+   * here. Unfortunately, various BIOS versions don't case about
-+   * a uniform way using eg. ROM byte 0x220, but use different
-+   * hard coded delays (0x04, 0x20, 0x18) in SetGroup1().
-+   * Thus we don't set this if the user select a custom pdc or if
-+   * we otherwise detected a valid pdc.
-    */
-   if(HwDeviceExtension->pdc) return;
-   temp = GetOEMLCDPtr(SiS_Pr,HwDeviceExtension, ROMAddr, 0);
--  index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_LCDDelayIndex;
-+  if(SiS_Pr->UseCustomMode)
-+     index = 0;
-+  else
-+     index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_LCDDelayIndex;
-   if(HwDeviceExtension->jChipType != SIS_300) {
-       if(romptr) {
-@@ -11700,9 +11960,9 @@ SetOEMLCDDelay(SiS_Private *SiS_Pr, PSIS
- static void
- SetOEMLCDData(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
--               UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
-+              UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex)
- {
--#if 0  /* TW: Unfinished; VData table missing */
-+#if 0  /* Unfinished; Data table missing */
-   USHORT index,temp;
-   if((ROMAddr) && SiS_Pr->SiS_UseROM) {
-@@ -11899,25 +12159,29 @@ SetOEMYFilter(SiS_Private *SiS_Pr, PSIS_
- void
- SiS_OEM300Setting(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
--                USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo)
-+                USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-+                USHORT RefTableIndex)
- {
--  USHORT ModeIdIndex;
-+  USHORT OEMModeIdIndex=0;
--  ModeIdIndex = SiS_SearchVBModeID(SiS_Pr,ROMAddr,&ModeNo);
--  if(!(ModeIdIndex)) return;
-+  if(!SiS_Pr->UseCustomMode) {
-+     OEMModeIdIndex = SiS_SearchVBModeID(SiS_Pr,ROMAddr,&ModeNo);
-+     if(!(OEMModeIdIndex)) return;
-+  }
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
--       SetOEMLCDDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+       SetOEMLCDDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-        if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
--            SetOEMLCDData(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+            SetOEMLCDData(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-        }
-   }
-+  if(SiS_Pr->UseCustomMode) return;
-   if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
--       SetOEMTVDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+       SetOEMTVDelay(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-        if(SiS_Pr->SiS_IF_DEF_LVDS == 0) {
--                      SetOEMAntiFlicker(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
--              SetOEMPhaseIncr(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
--                      SetOEMYFilter(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,ModeIdIndex);
-+                      SetOEMAntiFlicker(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-+              SetOEMPhaseIncr(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-+                      SetOEMYFilter(SiS_Pr,HwDeviceExtension,BaseAddr,ROMAddr,ModeNo,OEMModeIdIndex);
-        }
-   }
- }
---- linux-2.6.0-test1/drivers/video/sis/init301.h      2003-06-14 12:18:21.000000000 -0700
-+++ 25/drivers/video/sis/init301.h     2003-07-19 17:04:55.000000000 -0700
-@@ -1,20 +1,39 @@
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/init301.h,v 1.4 2000/12/02 01:16:17 dawes Exp $ */
-+/* $XFree86$ */
-+/*
-+ * Data and prototypes for init301.c
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ */
-+
- #ifndef  _INIT301_
- #define  _INIT301_
- #include "osdef.h"
-+
- #include "initdef.h"
- #include "vgatypes.h"
- #include "vstruct.h"
--#ifdef TC
--#include <stdio.h>
--#include <string.h>
--#include <conio.h>
--#include <dos.h>
--#include <stdlib.h>
--#endif
--
- #ifdef LINUX_XF86
- #include "xf86.h"
- #include "xf86Pci.h"
-@@ -24,6 +43,9 @@
- #endif
- #ifdef LINUX_KERNEL
-+#ifdef SIS_CP
-+#undef SIS_CP
-+#endif
- #include <linux/config.h>
- #include <linux/version.h>
- #include <asm/io.h>
-@@ -35,24 +57,60 @@
- #endif
- #endif
--#ifdef WIN2000
--#include <stdio.h>
--#include <string.h>
--#include <miniport.h>
--#include "dderror.h"
--#include "devioctl.h"
--#include "miniport.h"
--#include "ntddvdeo.h"
--#include "video.h"
--#include "sisv.h"
--#endif
-+const UCHAR SiS_HiVisionTable[3][64] = {
-+  {
-+    0x17, 0x1d, 0x03, 0x09, 0x05, 0x06, 0x0c, 0x0c,
-+    0x94, 0x49, 0x01, 0x0a, 0x06, 0x0d, 0x04, 0x0a,
-+    0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x1b,
-+    0x0c, 0x50, 0x00, 0x97, 0x00, 0xd4, 0x4a, 0x17,
-+    0x7d, 0x05, 0x4b, 0x00, 0x00, 0xe2, 0x00, 0x02,
-+    0x03, 0x0a, 0x65, 0x9d, 0x08, 0x92, 0x8f, 0x40,
-+    0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x53,
-+    0x00, 0x40, 0x44, 0x00, 0xdb, 0x02, 0x3b, 0x00
-+  },
-+  {
-+    0x1d, 0x1d, 0x06, 0x09, 0x0b, 0x0c, 0x0c, 0x0c,
-+    0x98, 0x0a, 0x01, 0x0d, 0x06, 0x0d, 0x04, 0x0a,
-+    0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
-+    0x0c, 0x50, 0xb2, 0x2e, 0x16, 0xb5, 0xf4, 0x03,
-+    0x7d, 0x11, 0x7d, 0xea, 0x30, 0x36, 0x18, 0x96,
-+    0x21, 0x0a, 0x58, 0xee, 0x42, 0x92, 0x0f, 0x40,
-+    0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x04, 0xf3,
-+    0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
-+  },
-+  {
-+    0x13, 0x1d, 0xe8, 0x09, 0x09, 0xed, 0x0c, 0x0c,
-+    0x98, 0x0a, 0x01, 0x0c, 0x06, 0x0d, 0x04, 0x0a,
-+    0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
-+    0xed, 0x50, 0x70, 0x9f, 0x16, 0x59, 0x2b, 0x13,
-+    0x27, 0x0b, 0x27, 0xfc, 0x30, 0x27, 0x1c, 0xb0,
-+    0x4b, 0x4b, 0x6f, 0x2f, 0x63, 0x92, 0x0f, 0x40,
-+    0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x2a,
-+    0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
-+  }
-+};
--#if 0
--extern   const USHORT   SiS_MDA_DAC[];
--extern   const USHORT   SiS_CGA_DAC[];
--extern   const USHORT   SiS_EGA_DAC[];
--extern   const USHORT   SiS_VGA_DAC[];
--#endif
-+const UCHAR SiS_HiTVGroup3_1[] = {
-+    0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
-+    0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
-+    0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
-+    0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
-+    0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
-+    0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
-+    0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
-+    0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
-+};
-+
-+const UCHAR SiS_HiTVGroup3_2[] = {
-+    0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
-+    0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
-+    0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
-+    0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
-+    0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
-+    0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
-+    0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
-+    0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
-+};
- extern   BOOLEAN  SiS_SearchVBModeID(SiS_Private *SiS_Pr, UCHAR *RomAddr, USHORT *);
-@@ -129,7 +187,6 @@ void     SiS_GetVBInfo(SiS_Private *SiS_
- BOOLEAN  SiS_BridgeIsOn(SiS_Private *SiS_Pr, USHORT BaseAddr,PSIS_HW_DEVICE_INFO);
- BOOLEAN  SiS_BridgeIsEnable(SiS_Private *SiS_Pr, USHORT BaseAddr,PSIS_HW_DEVICE_INFO);
- BOOLEAN  SiS_BridgeInSlave(SiS_Private *SiS_Pr);
--void     SiS_PresetScratchregister(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_SetTVSystem(SiS_Private *SiS_Pr);
- void     SiS_LongWait(SiS_Private *SiS_Pr);
- USHORT   SiS_GetQueueConfig(SiS_Private *SiS_Pr);
-@@ -149,7 +206,7 @@ void     SiS_GetLVDSDesPtrA(SiS_Private 
-                             USHORT RefreshRateTableIndex,USHORT *PanelIndex,USHORT *ResIndex);
- #endif                            
- void     SiS_SetTPData(SiS_Private *SiS_Pr);
--void     SiS_WhatIsThis(SiS_Private *SiS_Pr, USHORT myvbinfo);
-+void     SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo);
- void     SiS_ModCRT1CRTC(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-                          USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_SetCHTVReg(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-@@ -178,20 +235,18 @@ USHORT   SiS_SetSCLKHigh(SiS_Private *Si
- USHORT   SiS_ReadDDC2Data(SiS_Private *SiS_Pr, USHORT tempax);
- USHORT   SiS_WriteDDC2Data(SiS_Private *SiS_Pr, USHORT tempax);
- USHORT   SiS_CheckACK(SiS_Private *SiS_Pr);
--USHORT   SiS_ReadLCDDDC(SiS_Private *SiS_Pr, USHORT length, unsigned char *buffer);
--#ifdef LINUX_XF86
--USHORT   SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS);
--USHORT   SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SISPtr pSiS);
--#endif
-+
- #ifdef SIS315H
- void     SiS_OEM310Setting(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-                            UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
- void     SiS_OEMLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
--                    UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
-+                    UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,USHORT RefreshRateTableIndex);
- #endif
- #ifdef SIS300
- void     SiS_OEM300Setting(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
--                           UCHAR *ROMAddr,USHORT ModeNo);
-+                           UCHAR *ROMAddr,USHORT ModeNo, USHORT ModeIdIndex, USHORT RefTabindex);
-+void     SetOEMLCDData2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr,
-+                      UCHAR *ROMAddr, USHORT ModeNo, USHORT ModeIdIndex,USHORT RefTableIndex);
- #endif
- BOOLEAN  SiS_LowModeStuff(SiS_Private *SiS_Pr, USHORT ModeNo,PSIS_HW_DEVICE_INFO HwDeviceExtension);
-@@ -200,8 +255,8 @@ BOOLEAN  SiS_GetLCDResInfo(SiS_Private *
- /* void    SiS_CHACRT1CRTC(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-                         USHORT RefreshRateTableIndex); */
--BOOLEAN  SiS_SetCRT2Group301(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
--                             PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+BOOLEAN  SiS_SetCRT2Group(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-+                          PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_SetGroup1(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-                        PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT RefreshRateTableIndex);
- void     SiS_SetGroup1_LVDS(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-@@ -237,19 +292,19 @@ void     SiS_VBWait(SiS_Private *SiS_Pr)
- void     SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
--void     SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr);
-+void     SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_Chrontel701xBLOff(SiS_Private *SiS_Pr);
- #ifdef SIS315H
- void     SiS_Chrontel701xOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                             USHORT BaseAddr);
--void     SiS_Chrontel701xOff(SiS_Private *SiS_Pr);
-+void     SiS_Chrontel701xOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_ChrontelResetDB(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void     SiS_ChrontelDoSomething4(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void     SiS_ChrontelDoSomething3(SiS_Private *SiS_Pr, USHORT ModeNo, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void     SiS_ChrontelDoSomething2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- void     SiS_ChrontelDoSomething1(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- BOOLEAN  SiS_WeHaveBacklightCtrl(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
--void     SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr);
-+void     SiS_ChrontelPowerSequencing(SiS_Private *SiS_Pr,  PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_SetCH701xForLCD(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
- #ifdef NEWCH701x
- void     SiS_ChrontelDoSomething5(SiS_Private *SiS_Pr);
-@@ -289,73 +344,21 @@ extern   void     SiS_LoadDAC(SiS_Privat
- extern   UCHAR    SiS_Get310DRAMType(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- #endif
--#ifdef LINUX_XF86
- /* DDC functions */
--USHORT   SiS_InitDDCRegs(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32);
-+USHORT   SiS_InitDDCRegs(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+                         USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32);
- USHORT   SiS_WriteDABDDC(SiS_Private *SiS_Pr);
- USHORT   SiS_PrepareReadDDC(SiS_Private *SiS_Pr);
- USHORT   SiS_PrepareDDC(SiS_Private *SiS_Pr);
- void     SiS_SendACK(SiS_Private *SiS_Pr, USHORT yesno);
- USHORT   SiS_DoProbeDDC(SiS_Private *SiS_Pr);
- USHORT   SiS_ProbeDDC(SiS_Private *SiS_Pr);
--USHORT   SiS_ReadDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT DDCdatatype, unsigned char *buffer);
--USHORT   SiS_HandleDDC(SiS_Private *SiS_Pr, SISPtr pSiS, USHORT adaptnum,
--                       USHORT DDCdatatype, unsigned char *buffer);
-+USHORT   SiS_ReadDDC(SiS_Private *SiS_Pr, USHORT DDCdatatype, unsigned char *buffer);
-+USHORT   SiS_HandleDDC(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+                     USHORT adaptnum, USHORT DDCdatatype, unsigned char *buffer);
-+#ifdef LINUX_XF86
-+USHORT   SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS);
-+USHORT   SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SISPtr pSiS);
- #endif
--const UCHAR SiS_HiVisionTable[3][64] = {
--  { 
--    0x17, 0x1d, 0x03, 0x09, 0x05, 0x06, 0x0c, 0x0c,
--    0x94, 0x49, 0x01, 0x0a, 0x06, 0x0d, 0x04, 0x0a,
--    0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x1b,
--    0x0c, 0x50, 0x00, 0x97, 0x00, 0xd4, 0x4a, 0x17,
--    0x7d, 0x05, 0x4b, 0x00, 0x00, 0xe2, 0x00, 0x02,
--    0x03, 0x0a, 0x65, 0x9d, 0x08, 0x92, 0x8f, 0x40,
--    0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x53,
--    0x00, 0x40, 0x44, 0x00, 0xdb, 0x02, 0x3b, 0x00
--  },
--  { 
--    0x1d, 0x1d, 0x06, 0x09, 0x0b, 0x0c, 0x0c, 0x0c,
--    0x98, 0x0a, 0x01, 0x0d, 0x06, 0x0d, 0x04, 0x0a,
--    0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
--    0x0c, 0x50, 0xb2, 0x2e, 0x16, 0xb5, 0xf4, 0x03,
--    0x7d, 0x11, 0x7d, 0xea, 0x30, 0x36, 0x18, 0x96,
--    0x21, 0x0a, 0x58, 0xee, 0x42, 0x92, 0x0f, 0x40,
--    0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x04, 0xf3,
--    0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
--  },
--  { 
--    0x13, 0x1d, 0xe8, 0x09, 0x09, 0xed, 0x0c, 0x0c, 
--    0x98, 0x0a, 0x01, 0x0c, 0x06, 0x0d, 0x04, 0x0a, 
--    0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f, 
--    0xed, 0x50, 0x70, 0x9f, 0x16, 0x59, 0x2b, 0x13, 
--    0x27, 0x0b, 0x27, 0xfc, 0x30, 0x27, 0x1c, 0xb0, 
--    0x4b, 0x4b, 0x6f, 0x2f, 0x63, 0x92, 0x0f, 0x40, 
--    0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x2a, 
--    0x00, 0x40, 0x11, 0x00, 0xfc, 0xff, 0x32, 0x00 
--  }
--};
--
--const UCHAR SiS_HiTVGroup3_1[] = {
--    0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
--    0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
--    0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
--    0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
--    0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
--    0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
--    0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
--    0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
--};
--
--const UCHAR SiS_HiTVGroup3_2[] = {
--    0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
--    0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
--    0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
--    0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
--    0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
--    0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
--    0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
--    0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
--};
--
- #endif
---- linux-2.6.0-test1/drivers/video/sis/init.c 2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/video/sis/init.c        2003-07-19 17:04:55.000000000 -0700
-@@ -1,24 +1,11 @@
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/init.c,v 1.3 2002/24/04 01:16:16 dawes Exp $ */
- /*
-- * Mode switching code (CRT1 section) for SiS 300/540/630/730/315/550/650/740/330
-+ * Mode switching code (CRT1 section) for SiS 300/540/630/730/315/550/650/740/330/660
-  * (Universal module for Linux kernel framebuffer and XFree86 4.x)
-  *
-  * Assembler-To-C translation
-- * Copyright 2002 by Thomas Winischhofer <thomas@winischhofer.net>
-- * Minor parts Copyright SiS, Inc.
-- *
-- * Based on BIOS
-- *     1.10.07, 1.10a for 650/CH7019
-- *     1.11.21a for 740/CH7019
-- *     1.11.05 for 650/LVDS (w/o Chrontel)
-- *     1.07.1b, 1.11.6s, 1.11.6w, 1.11.7w, 1.11.8r for 650/301(B/LV)
-- *     2.04.50 (I) and 2.04.5c (II) for 630/301(B)
-- *     2.06.50 for 630/301B (dual VGA)
-- *     2.02.3b, 2.03.02, 2.04.5c, 2.07a and 2.08.b3 for 630/LVDS/LVDS+CH7005
-- *     2.04.5c, 2.04.6c for 730+LVDS+CH7005
-- *     1.09b for 315/301(B)
-- *     1.16.51 for 300+301LV (ECS A907)
-- *     1.01.03 for 330 (Xabre 400)
-+ * Copyright 2002, 2003 by Thomas Winischhofer <thomas@winischhofer.net>
-+ * Formerly based on non-functional code-fragements by SiS, Inc.
-  *
-  * Permission to use, copy, modify, distribute, and sell this software and its
-  * documentation for any purpose is hereby granted without fee, provided that
-@@ -61,12 +48,12 @@
- #ifdef LINUX_XF86
- BOOLEAN SiSBIOSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                        ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);
--DisplayModePtr SiSBuildBuiltInModeList(ScrnInfoPtr pScrn);
--#ifdef SISDUALHEAD /* TW: For dual head */
-+DisplayModePtr SiSBuildBuiltInModeList(ScrnInfoPtr pScrn, BOOLEAN includelcdmodes, BOOLEAN isfordvi);
-+#ifdef SISDUALHEAD
- BOOLEAN SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                        ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);
- BOOLEAN SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
--                       ScrnInfoPtr pScrn, DisplayModePtr mode);
-+                       ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);
- #endif /* dual head */
- #endif /* linux_xf86 */
-@@ -90,49 +77,199 @@ BOOLEAN SiSSetMode(SiS_Private *SiS_Pr, 
- static ULONG GetDRAMSize(SiS_Private *SiS_Pr,
-                          PSIS_HW_DEVICE_INFO HwDeviceExtension);
--static void DelaySeconds(int seconds);
--void SiS_DebugCode(SiS_Private *SiS_Pr, UCHAR code);
--
- static void
--DelaySeconds(int seconds)
-+InitCommonPointer(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
--  int i;
--#ifdef WIN2000
--  int j;
--#endif
--
--  for (i=0;i<seconds;i++) {
--#ifdef TC
--    delay(1000);
--#endif
--
--#ifdef WIN2000
--    for (j=0;j<20000;j++)
--      VideoPortStallExecution(50);
--#endif
--
--#ifdef WINCE_HEADER
--#endif
--
--#ifdef LINUX_KERNEL
--#endif
--  }
--}
--
--void
--SiS_DebugCode(SiS_Private *SiS_Pr, UCHAR code)
--{
--  OutPortByte(0x80, code);
--  DelaySeconds(0x3);
-+   SiS_Pr->SiS_StResInfo     = SiS_StResInfo;
-+   SiS_Pr->SiS_ModeResInfo   = SiS_ModeResInfo;
-+   SiS_Pr->SiS_StandTable    = SiS_StandTable;
-+   if(HwDeviceExtension->jChipType < SIS_315H) {
-+      SiS_StandTable[0x04].CRTC[4] = 0x2b;
-+      SiS_StandTable[0x05].CRTC[4] = 0x2b;
-+      SiS_StandTable[0x06].CRTC[4] = 0x54;
-+      SiS_StandTable[0x06].CRTC[5] = 0x80;
-+      SiS_StandTable[0x0d].CRTC[4] = 0x2b;
-+      SiS_StandTable[0x0e].CRTC[4] = 0x54;
-+      SiS_StandTable[0x0e].CRTC[5] = 0x80;
-+      SiS_StandTable[0x11].CRTC[4] = 0x54;
-+      SiS_StandTable[0x11].CRTC[5] = 0x80;
-+      SiS_StandTable[0x11].CRTC[16] = 0x83;
-+      SiS_StandTable[0x11].CRTC[17] = 0x85;
-+      SiS_StandTable[0x12].CRTC[4] = 0x54;
-+      SiS_StandTable[0x12].CRTC[5] = 0x80;
-+      SiS_StandTable[0x12].CRTC[16] = 0x83;
-+      SiS_StandTable[0x12].CRTC[17] = 0x85;
-+      SiS_StandTable[0x13].CRTC[5] = 0xa0;
-+      SiS_StandTable[0x17].CRTC[5] = 0xa0;
-+      SiS_StandTable[0x1a].CRTC[4] = 0x54;
-+      SiS_StandTable[0x1a].CRTC[5] = 0x80;
-+      SiS_StandTable[0x1a].CRTC[16] = 0xea;
-+      SiS_StandTable[0x1a].CRTC[17] = 0x8c;
-+      SiS_StandTable[0x1b].CRTC[4] = 0x54;
-+      SiS_StandTable[0x1b].CRTC[5] = 0x80;
-+      SiS_StandTable[0x1b].CRTC[16] = 0xea;
-+      SiS_StandTable[0x1b].CRTC[17] = 0x8c;
-+      SiS_StandTable[0x1c].CRTC[4] = 0x54;
-+      SiS_StandTable[0x1c].CRTC[5] = 0x80;
-+   } else {
-+      SiS_StandTable[0x04].CRTC[4] = 0x2c;
-+      SiS_StandTable[0x05].CRTC[4] = 0x2c;
-+      SiS_StandTable[0x06].CRTC[4] = 0x55;
-+      SiS_StandTable[0x06].CRTC[5] = 0x81;
-+      SiS_StandTable[0x0d].CRTC[4] = 0x2c;
-+      SiS_StandTable[0x0e].CRTC[4] = 0x55;
-+      SiS_StandTable[0x0e].CRTC[5] = 0x81;
-+      SiS_StandTable[0x11].CRTC[4] = 0x55;
-+      SiS_StandTable[0x11].CRTC[5] = 0x81;
-+      SiS_StandTable[0x11].CRTC[16] = 0x82;
-+      SiS_StandTable[0x11].CRTC[17] = 0x84;
-+      SiS_StandTable[0x12].CRTC[4] = 0x55;
-+      SiS_StandTable[0x12].CRTC[5] = 0x81;
-+      SiS_StandTable[0x12].CRTC[16] = 0x82;
-+      SiS_StandTable[0x12].CRTC[17] = 0x84;
-+      SiS_StandTable[0x13].CRTC[5] = 0xb1;
-+      SiS_StandTable[0x17].CRTC[5] = 0xb1;
-+      SiS_StandTable[0x1a].CRTC[4] = 0x55;
-+      SiS_StandTable[0x1a].CRTC[5] = 0x81;
-+      SiS_StandTable[0x1a].CRTC[16] = 0xe9;
-+      SiS_StandTable[0x1a].CRTC[17] = 0x8b;
-+      SiS_StandTable[0x1b].CRTC[4] = 0x55;
-+      SiS_StandTable[0x1b].CRTC[5] = 0x81;
-+      SiS_StandTable[0x1b].CRTC[16] = 0xe9;
-+      SiS_StandTable[0x1b].CRTC[17] = 0x8b;
-+      SiS_StandTable[0x1c].CRTC[4] = 0x55;
-+      SiS_StandTable[0x1c].CRTC[5] = 0x81;
-+   }
-+
-+   SiS_Pr->SiS_NTSCPhase    = SiS_NTSCPhase;
-+   SiS_Pr->SiS_PALPhase     = SiS_PALPhase;
-+   SiS_Pr->SiS_NTSCPhase2   = SiS_NTSCPhase2;
-+   SiS_Pr->SiS_PALPhase2    = SiS_PALPhase2;
-+   SiS_Pr->SiS_PALMPhase    = SiS_PALMPhase;
-+   SiS_Pr->SiS_PALNPhase    = SiS_PALNPhase;
-+   SiS_Pr->SiS_PALMPhase2   = SiS_PALMPhase2;
-+   SiS_Pr->SiS_PALNPhase2   = SiS_PALNPhase2;
-+   SiS_Pr->SiS_SpecialPhase = SiS_SpecialPhase;
-+
-+   SiS_Pr->SiS_NTSCTiming     = SiS_NTSCTiming;
-+   SiS_Pr->SiS_PALTiming      = SiS_PALTiming;
-+   SiS_Pr->SiS_HiTVSt1Timing  = SiS_HiTVSt1Timing;
-+   SiS_Pr->SiS_HiTVSt2Timing  = SiS_HiTVSt2Timing;
-+   SiS_Pr->SiS_HiTVTextTiming = SiS_HiTVTextTiming;
-+   SiS_Pr->SiS_HiTVExtTiming  = SiS_HiTVExtTiming;
-+   SiS_Pr->SiS_HiTVGroup3Data = SiS_HiTVGroup3Data;
-+   SiS_Pr->SiS_HiTVGroup3Simu = SiS_HiTVGroup3Simu;
-+   SiS_Pr->SiS_HiTVGroup3Text = SiS_HiTVGroup3Text;
-+
-+   SiS_Pr->SiS_StPALData   = SiS_StPALData;
-+   SiS_Pr->SiS_ExtPALData  = SiS_ExtPALData;
-+   SiS_Pr->SiS_StNTSCData  = SiS_StNTSCData;
-+   SiS_Pr->SiS_ExtNTSCData = SiS_ExtNTSCData;
-+/* SiS_Pr->SiS_St1HiTVData = SiS_St1HiTVData;  */
-+   SiS_Pr->SiS_St2HiTVData = SiS_St2HiTVData;
-+   SiS_Pr->SiS_ExtHiTVData = SiS_ExtHiTVData;
-+
-+   SiS_Pr->pSiS_OutputSelect = &SiS_OutputSelect;
-+   SiS_Pr->pSiS_SoftSetting  = &SiS_SoftSetting;
-+
-+   SiS_Pr->SiS_LCD1280x960Data      = SiS_LCD1280x960Data;
-+   SiS_Pr->SiS_ExtLCD1400x1050Data  = SiS_ExtLCD1400x1050Data;
-+   SiS_Pr->SiS_ExtLCD1600x1200Data  = SiS_ExtLCD1600x1200Data;
-+   SiS_Pr->SiS_StLCD1400x1050Data   = SiS_StLCD1400x1050Data;
-+   SiS_Pr->SiS_StLCD1600x1200Data   = SiS_StLCD1600x1200Data;
-+   SiS_Pr->SiS_NoScaleData1400x1050 = SiS_NoScaleData1400x1050;
-+   SiS_Pr->SiS_NoScaleData1600x1200 = SiS_NoScaleData1600x1200;
-+   SiS_Pr->SiS_ExtLCD1280x768Data   = SiS_ExtLCD1280x768Data;
-+   SiS_Pr->SiS_StLCD1280x768Data    = SiS_StLCD1280x768Data;
-+   SiS_Pr->SiS_NoScaleData1280x768  = SiS_NoScaleData1280x768;
-+   SiS_Pr->SiS_NoScaleData          = SiS_NoScaleData;
-+
-+   SiS_Pr->SiS_LVDS320x480Data_1   = SiS_LVDS320x480Data_1;
-+   SiS_Pr->SiS_LVDS800x600Data_1   = SiS_LVDS800x600Data_1;
-+   SiS_Pr->SiS_LVDS800x600Data_2   = SiS_LVDS800x600Data_2;
-+   SiS_Pr->SiS_LVDS1024x768Data_1  = SiS_LVDS1024x768Data_1;
-+   SiS_Pr->SiS_LVDS1024x768Data_2  = SiS_LVDS1024x768Data_2;
-+   SiS_Pr->SiS_LVDS1280x1024Data_1 = SiS_LVDS1280x1024Data_1;
-+   SiS_Pr->SiS_LVDS1280x1024Data_2 = SiS_LVDS1280x1024Data_2;
-+   SiS_Pr->SiS_LVDS1400x1050Data_1 = SiS_LVDS1400x1050Data_1;
-+   SiS_Pr->SiS_LVDS1400x1050Data_2 = SiS_LVDS1400x1050Data_2;
-+   SiS_Pr->SiS_LVDS1600x1200Data_1 = SiS_LVDS1600x1200Data_1;
-+   SiS_Pr->SiS_LVDS1600x1200Data_2 = SiS_LVDS1600x1200Data_2;
-+   SiS_Pr->SiS_LVDS1280x768Data_1  = SiS_LVDS1280x768Data_1;
-+   SiS_Pr->SiS_LVDS1280x768Data_2  = SiS_LVDS1280x768Data_2;
-+   SiS_Pr->SiS_LVDS1024x600Data_1  = SiS_LVDS1024x600Data_1;
-+   SiS_Pr->SiS_LVDS1024x600Data_2  = SiS_LVDS1024x600Data_2;
-+   SiS_Pr->SiS_LVDS1152x768Data_1  = SiS_LVDS1152x768Data_1;
-+   SiS_Pr->SiS_LVDS1152x768Data_2  = SiS_LVDS1152x768Data_2;
-+   SiS_Pr->SiS_LVDSXXXxXXXData_1   = SiS_LVDSXXXxXXXData_1;
-+   SiS_Pr->SiS_LVDS1280x960Data_1  = SiS_LVDS1280x960Data_1;
-+   SiS_Pr->SiS_LVDS1280x960Data_2  = SiS_LVDS1280x960Data_2;
-+   SiS_Pr->SiS_LVDS640x480Data_1   = SiS_LVDS640x480Data_1;
-+   SiS_Pr->SiS_LVDS1280x960Data_1  = SiS_LVDS1280x1024Data_1;
-+   SiS_Pr->SiS_LVDS1280x960Data_2  = SiS_LVDS1280x1024Data_2;
-+   SiS_Pr->SiS_LVDS640x480Data_1   = SiS_LVDS640x480Data_1;
-+   SiS_Pr->SiS_LVDS640x480Data_2   = SiS_LVDS640x480Data_2;
-+
-+   SiS_Pr->SiS_LVDSBARCO1366Data_1 = SiS_LVDSBARCO1366Data_1;
-+   SiS_Pr->SiS_LVDSBARCO1366Data_2 = SiS_LVDSBARCO1366Data_2;
-+   SiS_Pr->SiS_LVDSBARCO1024Data_1 = SiS_LVDSBARCO1024Data_1;
-+   SiS_Pr->SiS_LVDSBARCO1024Data_2 = SiS_LVDSBARCO1024Data_2;
-+
-+   SiS_Pr->SiS_LCDA1400x1050Data_1 = SiS_LCDA1400x1050Data_1;
-+   SiS_Pr->SiS_LCDA1400x1050Data_2 = SiS_LCDA1400x1050Data_2;
-+   SiS_Pr->SiS_LCDA1600x1200Data_1 = SiS_LCDA1600x1200Data_1;
-+   SiS_Pr->SiS_LCDA1600x1200Data_2 = SiS_LCDA1600x1200Data_2;
-+   SiS_Pr->SiS_CHTVUNTSCData = SiS_CHTVUNTSCData;
-+   SiS_Pr->SiS_CHTVONTSCData = SiS_CHTVONTSCData;
-+
-+   SiS_Pr->LVDS1024x768Des_1  = SiS_PanelType1076_1;
-+   SiS_Pr->LVDS1280x1024Des_1 = SiS_PanelType1210_1;
-+   SiS_Pr->LVDS1400x1050Des_1 = SiS_PanelType1296_1;
-+   SiS_Pr->LVDS1600x1200Des_1 = SiS_PanelType1600_1;
-+   SiS_Pr->LVDS1024x768Des_2  = SiS_PanelType1076_2;
-+   SiS_Pr->LVDS1280x1024Des_2 = SiS_PanelType1210_2;
-+   SiS_Pr->LVDS1400x1050Des_2 = SiS_PanelType1296_2;
-+   SiS_Pr->LVDS1600x1200Des_2 = SiS_PanelType1600_2;
-+
-+   SiS_Pr->SiS_PanelTypeNS_1 = SiS_PanelTypeNS_1;
-+   SiS_Pr->SiS_PanelTypeNS_2 = SiS_PanelTypeNS_2;
-+
-+   SiS_Pr->SiS_CHTVUNTSCDesData = SiS_CHTVUNTSCDesData;
-+   SiS_Pr->SiS_CHTVONTSCDesData = SiS_CHTVONTSCDesData;
-+   SiS_Pr->SiS_CHTVUPALDesData  = SiS_CHTVUPALDesData;
-+   SiS_Pr->SiS_CHTVOPALDesData  = SiS_CHTVOPALDesData;
-+
-+   SiS_Pr->SiS_LVDSCRT11280x768_1    = SiS_LVDSCRT11280x768_1;
-+   SiS_Pr->SiS_LVDSCRT11024x600_1    = SiS_LVDSCRT11024x600_1;
-+   SiS_Pr->SiS_LVDSCRT11152x768_1    = SiS_LVDSCRT11152x768_1;
-+   SiS_Pr->SiS_LVDSCRT11280x768_1_H  = SiS_LVDSCRT11280x768_1_H;
-+   SiS_Pr->SiS_LVDSCRT11024x600_1_H  = SiS_LVDSCRT11024x600_1_H;
-+   SiS_Pr->SiS_LVDSCRT11152x768_1_H  = SiS_LVDSCRT11152x768_1_H;
-+   SiS_Pr->SiS_LVDSCRT11280x768_2    = SiS_LVDSCRT11280x768_2;
-+   SiS_Pr->SiS_LVDSCRT11024x600_2    = SiS_LVDSCRT11024x600_2;
-+   SiS_Pr->SiS_LVDSCRT11152x768_2    = SiS_LVDSCRT11152x768_2;
-+   SiS_Pr->SiS_LVDSCRT11280x768_2_H  = SiS_LVDSCRT11280x768_2_H;
-+   SiS_Pr->SiS_LVDSCRT11024x600_2_H  = SiS_LVDSCRT11024x600_2_H;
-+   SiS_Pr->SiS_LVDSCRT11152x768_2_H  = SiS_LVDSCRT11152x768_2_H;
-+   SiS_Pr->SiS_LVDSCRT1320x480_1     = SiS_LVDSCRT1320x480_1;
-+   SiS_Pr->SiS_LVDSCRT1XXXxXXX_1     = SiS_LVDSCRT1XXXxXXX_1;
-+   SiS_Pr->SiS_LVDSCRT1XXXxXXX_1_H   = SiS_LVDSCRT1XXXxXXX_1_H;
-+   SiS_Pr->SiS_LVDSCRT1640x480_1     = SiS_LVDSCRT1640x480_1;
-+   SiS_Pr->SiS_LVDSCRT1640x480_1_H   = SiS_LVDSCRT1640x480_1_H;
-+   SiS_Pr->SiS_LVDSCRT1640x480_2     = SiS_LVDSCRT1640x480_2;
-+   SiS_Pr->SiS_LVDSCRT1640x480_2_H   = SiS_LVDSCRT1640x480_2_H;
-+   SiS_Pr->SiS_LVDSCRT1640x480_3     = SiS_LVDSCRT1640x480_3;
-+   SiS_Pr->SiS_LVDSCRT1640x480_3_H   = SiS_LVDSCRT1640x480_3_H;
- }
- #ifdef SIS300
- static void
- InitTo300Pointer(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-+   InitCommonPointer(SiS_Pr, HwDeviceExtension);
-+
-    SiS_Pr->SiS_SModeIDTable  = (SiS_StStruct *)SiS300_SModeIDTable;
-    SiS_Pr->SiS_VBModeIDTable = (SiS_VBModeStruct *)SiS300_VBModeIDTable;
--   SiS_Pr->SiS_StandTable    = (SiS_StandTableStruct *)SiS300_StandTable;
-    SiS_Pr->SiS_EModeIDTable  = (SiS_ExtStruct *)SiS300_EModeIDTable;
-    SiS_Pr->SiS_RefIndex      = (SiS_Ext2Struct *)SiS300_RefIndex;
-    SiS_Pr->SiS_CRT1Table     = (SiS_CRT1TableStruct *)SiS300_CRT1Table;
-@@ -141,15 +278,12 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
-    } else {
-       SiS_Pr->SiS_MCLKData_0    = (SiS_MCLKDataStruct *)SiS300_MCLKData_630; /* 630, 730 */
-    }
-+#ifdef LINUXBIOS
-    SiS_Pr->SiS_ECLKData      = (SiS_ECLKDataStruct *)SiS300_ECLKData;
-+#endif
-    SiS_Pr->SiS_VCLKData      = (SiS_VCLKDataStruct *)SiS300_VCLKData;
-    SiS_Pr->SiS_VBVCLKData    = (SiS_VBVCLKDataStruct *)SiS300_VCLKData;
-    SiS_Pr->SiS_ScreenOffset  = SiS300_ScreenOffset;
--   SiS_Pr->SiS_StResInfo     = (SiS_StResInfoStruct *)SiS300_StResInfo;
--   SiS_Pr->SiS_ModeResInfo   = (SiS_ModeResInfoStruct *)SiS300_ModeResInfo;
--
--   SiS_Pr->pSiS_OutputSelect = &SiS300_OutputSelect;
--   SiS_Pr->pSiS_SoftSetting  = &SiS300_SoftSetting;
-    SiS_Pr->SiS_SR15  = SiS300_SR15;
-@@ -178,15 +312,6 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->pSiS_YCSenseData2    = &SiS300_YCSenseData2;
- #endif
--   SiS_Pr->SiS_NTSCPhase  = SiS300_NTSCPhase;
--   SiS_Pr->SiS_PALPhase   = SiS300_PALPhase;
--   SiS_Pr->SiS_NTSCPhase2 = SiS300_NTSCPhase2;
--   SiS_Pr->SiS_PALPhase2  = SiS300_PALPhase2;
--   SiS_Pr->SiS_PALMPhase  = SiS300_PALMPhase;
--   SiS_Pr->SiS_PALNPhase  = SiS300_PALNPhase;
--   SiS_Pr->SiS_PALMPhase2 = SiS300_PALMPhase2;
--   SiS_Pr->SiS_PALNPhase2 = SiS300_PALNPhase2;
--
-    SiS_Pr->SiS_StLCD1024x768Data    = (SiS_LCDDataStruct *)SiS300_StLCD1024x768Data;
-    SiS_Pr->SiS_ExtLCD1024x768Data   = (SiS_LCDDataStruct *)SiS300_ExtLCD1024x768Data;
-    SiS_Pr->SiS_St2LCD1024x768Data   = (SiS_LCDDataStruct *)SiS300_St2LCD1024x768Data;
-@@ -195,68 +320,18 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_St2LCD1280x1024Data  = (SiS_LCDDataStruct *)SiS300_St2LCD1280x1024Data;
-    SiS_Pr->SiS_NoScaleData1024x768  = (SiS_LCDDataStruct *)SiS300_NoScaleData1024x768;
-    SiS_Pr->SiS_NoScaleData1280x1024 = (SiS_LCDDataStruct *)SiS300_NoScaleData1280x1024;
--   SiS_Pr->SiS_LCD1280x960Data      = (SiS_LCDDataStruct *)SiS300_LCD1280x960Data;
--   SiS_Pr->SiS_ExtLCD1400x1050Data  = (SiS_LCDDataStruct *)SiS300_ExtLCD1400x1050Data;
--   SiS_Pr->SiS_ExtLCD1600x1200Data  = (SiS_LCDDataStruct *)SiS300_ExtLCD1600x1200Data;
--   SiS_Pr->SiS_StLCD1400x1050Data   = (SiS_LCDDataStruct *)SiS300_StLCD1400x1050Data;
--   SiS_Pr->SiS_StLCD1600x1200Data   = (SiS_LCDDataStruct *)SiS300_StLCD1600x1200Data;
--   SiS_Pr->SiS_NoScaleData1400x1050 = (SiS_LCDDataStruct *)SiS300_NoScaleData1400x1050;
--   SiS_Pr->SiS_NoScaleData1600x1200 = (SiS_LCDDataStruct *)SiS300_NoScaleData1600x1200;
--
--   SiS_Pr->SiS_StPALData   = (SiS_TVDataStruct *)SiS300_StPALData;
--   SiS_Pr->SiS_ExtPALData  = (SiS_TVDataStruct *)SiS300_ExtPALData;
--   SiS_Pr->SiS_StNTSCData  = (SiS_TVDataStruct *)SiS300_StNTSCData;
--   SiS_Pr->SiS_ExtNTSCData = (SiS_TVDataStruct *)SiS300_ExtNTSCData;
--/* SiS_Pr->SiS_St1HiTVData = (SiS_TVDataStruct *)SiS300_St1HiTVData;  */
--   SiS_Pr->SiS_St2HiTVData = (SiS_TVDataStruct *)SiS300_St2HiTVData;
--   SiS_Pr->SiS_ExtHiTVData = (SiS_TVDataStruct *)SiS300_ExtHiTVData;
--
--   SiS_Pr->SiS_NTSCTiming     = SiS300_NTSCTiming;
--   SiS_Pr->SiS_PALTiming      = SiS300_PALTiming;
--   SiS_Pr->SiS_HiTVSt1Timing  = SiS300_HiTVSt1Timing;
--   SiS_Pr->SiS_HiTVSt2Timing  = SiS300_HiTVSt2Timing;
--   SiS_Pr->SiS_HiTVTextTiming = SiS300_HiTVTextTiming;
--   SiS_Pr->SiS_HiTVGroup3Data = SiS300_HiTVGroup3Data;
--   SiS_Pr->SiS_HiTVGroup3Simu = SiS300_HiTVGroup3Simu;
--   SiS_Pr->SiS_HiTVGroup3Text = SiS300_HiTVGroup3Text;
-    SiS_Pr->SiS_PanelDelayTbl     = (SiS_PanelDelayTblStruct *)SiS300_PanelDelayTbl;
-    SiS_Pr->SiS_PanelDelayTblLVDS = (SiS_PanelDelayTblStruct *)SiS300_PanelDelayTblLVDS;
--   SiS_Pr->SiS_LVDS800x600Data_1   = (SiS_LVDSDataStruct *)SiS300_LVDS800x600Data_1;
--   SiS_Pr->SiS_LVDS800x600Data_2   = (SiS_LVDSDataStruct *)SiS300_LVDS800x600Data_2;
--   SiS_Pr->SiS_LVDS1024x768Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x768Data_1;
--   SiS_Pr->SiS_LVDS1024x768Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x768Data_2;
--   SiS_Pr->SiS_LVDS1280x1024Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_1;
--   SiS_Pr->SiS_LVDS1280x1024Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_2;
--   SiS_Pr->SiS_LVDS1280x960Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_1;
--   SiS_Pr->SiS_LVDS1280x960Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_2;
--   SiS_Pr->SiS_LVDS1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1400x1050Data_1;
--   SiS_Pr->SiS_LVDS1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1400x1050Data_2;
--   SiS_Pr->SiS_LVDS1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1600x1200Data_1;
--   SiS_Pr->SiS_LVDS1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1600x1200Data_2;
--   SiS_Pr->SiS_LVDS1280x768Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x768Data_1;
--   SiS_Pr->SiS_LVDS1280x768Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x768Data_2;
--   SiS_Pr->SiS_LVDS1024x600Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x600Data_1;
--   SiS_Pr->SiS_LVDS1024x600Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x600Data_2;
--   SiS_Pr->SiS_LVDS1152x768Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1152x768Data_1;
--   SiS_Pr->SiS_LVDS1152x768Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1152x768Data_2;
--   SiS_Pr->SiS_LVDSXXXxXXXData_1   = (SiS_LVDSDataStruct *)SiS300_LVDSXXXxXXXData_1;
--   SiS_Pr->SiS_LVDS320x480Data_1   = (SiS_LVDSDataStruct *)SiS300_LVDS320x480Data_1;
--   SiS_Pr->SiS_LVDS640x480Data_1   = (SiS_LVDSDataStruct *)SiS300_LVDS640x480Data_1;
--   SiS_Pr->SiS_LCDA1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS300_LCDA1400x1050Data_1;
--   SiS_Pr->SiS_LCDA1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS300_LCDA1400x1050Data_2;
--   SiS_Pr->SiS_LCDA1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS300_LCDA1600x1200Data_1;
--   SiS_Pr->SiS_LCDA1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS300_LCDA1600x1200Data_2;
--   SiS_Pr->SiS_CHTVUNTSCData = (SiS_LVDSDataStruct *)SiS300_CHTVUNTSCData;
--   SiS_Pr->SiS_CHTVONTSCData = (SiS_LVDSDataStruct *)SiS300_CHTVONTSCData;
-    SiS_Pr->SiS_CHTVUPALData  = (SiS_LVDSDataStruct *)SiS300_CHTVUPALData;
-    SiS_Pr->SiS_CHTVOPALData  = (SiS_LVDSDataStruct *)SiS300_CHTVOPALData;
--   SiS_Pr->SiS_CHTVUPALMData = (SiS_LVDSDataStruct *)SiS300_CHTVUNTSCData; /* not supported on 300 series */
--   SiS_Pr->SiS_CHTVOPALMData = (SiS_LVDSDataStruct *)SiS300_CHTVONTSCData; /* not supported on 300 series */
-+   SiS_Pr->SiS_CHTVUPALMData = SiS_CHTVUNTSCData;                        /* not supported on 300 series */
-+   SiS_Pr->SiS_CHTVOPALMData = SiS_CHTVONTSCData;                        /* not supported on 300 series */
-    SiS_Pr->SiS_CHTVUPALNData = (SiS_LVDSDataStruct *)SiS300_CHTVUPALData;  /* not supported on 300 series */
-    SiS_Pr->SiS_CHTVOPALNData = (SiS_LVDSDataStruct *)SiS300_CHTVOPALData;  /* not supported on 300 series */
-    SiS_Pr->SiS_CHTVSOPALData = (SiS_LVDSDataStruct *)SiS300_CHTVSOPALData;
-+
-    SiS_Pr->SiS_PanelType00_1 = (SiS_LVDSDesStruct *)SiS300_PanelType00_1;
-    SiS_Pr->SiS_PanelType01_1 = (SiS_LVDSDesStruct *)SiS300_PanelType01_1;
-    SiS_Pr->SiS_PanelType02_1 = (SiS_LVDSDesStruct *)SiS300_PanelType02_1;
-@@ -289,32 +364,28 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_PanelType0d_2 = (SiS_LVDSDesStruct *)SiS300_PanelType0d_2;
-    SiS_Pr->SiS_PanelType0e_2 = (SiS_LVDSDesStruct *)SiS300_PanelType0e_2;
-    SiS_Pr->SiS_PanelType0f_2 = (SiS_LVDSDesStruct *)SiS300_PanelType0f_2;
--   SiS_Pr->SiS_PanelTypeNS_1 = (SiS_LVDSDesStruct *)SiS300_PanelTypeNS_1;
--   SiS_Pr->SiS_PanelTypeNS_2 = (SiS_LVDSDesStruct *)SiS300_PanelTypeNS_2;
--   SiS_Pr->SiS_CHTVUNTSCDesData = (SiS_LVDSDesStruct *)SiS300_CHTVUNTSCDesData;
--   SiS_Pr->SiS_CHTVONTSCDesData = (SiS_LVDSDesStruct *)SiS300_CHTVONTSCDesData;
--   SiS_Pr->SiS_CHTVUPALDesData  = (SiS_LVDSDesStruct *)SiS300_CHTVUPALDesData;
--   SiS_Pr->SiS_CHTVOPALDesData  = (SiS_LVDSDesStruct *)SiS300_CHTVOPALDesData;
-+
-+   if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
-+      SiS_Pr->SiS_PanelType04_1 = (SiS_LVDSDesStruct *)SiS300_PanelType04_1a;
-+      SiS_Pr->SiS_PanelType04_2 = (SiS_LVDSDesStruct *)SiS300_PanelType04_2a;
-+   }
-+   if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
-+      SiS_Pr->SiS_PanelType04_1 = (SiS_LVDSDesStruct *)SiS300_PanelType04_1b;
-+      SiS_Pr->SiS_PanelType04_2 = (SiS_LVDSDesStruct *)SiS300_PanelType04_2b;
-+   }
-+
-    SiS_Pr->SiS_LVDSCRT1800x600_1     = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_1;
-    SiS_Pr->SiS_LVDSCRT11024x768_1    = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_1;
-    SiS_Pr->SiS_LVDSCRT11280x1024_1   = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_1;
--   SiS_Pr->SiS_LVDSCRT11024x600_1    = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_1;
--   SiS_Pr->SiS_LVDSCRT11152x768_1    = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_1;
-    SiS_Pr->SiS_LVDSCRT1800x600_1_H   = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_1_H;
-    SiS_Pr->SiS_LVDSCRT11024x768_1_H  = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_1_H;
-    SiS_Pr->SiS_LVDSCRT11280x1024_1_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_1_H;
--   SiS_Pr->SiS_LVDSCRT11024x600_1_H  = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_1_H;
--   SiS_Pr->SiS_LVDSCRT11152x768_1_H  = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_1_H;
-    SiS_Pr->SiS_LVDSCRT1800x600_2     = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_2;
-    SiS_Pr->SiS_LVDSCRT11024x768_2    = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_2;
-    SiS_Pr->SiS_LVDSCRT11280x1024_2   = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_2;
--   SiS_Pr->SiS_LVDSCRT11024x600_2    = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_2;
--   SiS_Pr->SiS_LVDSCRT11152x768_2    = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_2;
-    SiS_Pr->SiS_LVDSCRT1800x600_2_H   = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT1800x600_2_H;
-    SiS_Pr->SiS_LVDSCRT11024x768_2_H  = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x768_2_H;
-    SiS_Pr->SiS_LVDSCRT11280x1024_2_H = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11280x1024_2_H;
--   SiS_Pr->SiS_LVDSCRT11024x600_2_H  = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11024x600_2_H;
--   SiS_Pr->SiS_LVDSCRT11152x768_2_H  = (SiS_LVDSCRT1DataStruct *)SiS300_LVDSCRT11152x768_2_H;
-    SiS_Pr->SiS_CHTVCRT1UNTSC = (SiS_LVDSCRT1DataStruct *)SiS300_CHTVCRT1UNTSC;
-    SiS_Pr->SiS_CHTVCRT1ONTSC = (SiS_LVDSCRT1DataStruct *)SiS300_CHTVCRT1ONTSC;
-    SiS_Pr->SiS_CHTVCRT1UPAL  = (SiS_LVDSCRT1DataStruct *)SiS300_CHTVCRT1UPAL;
-@@ -339,7 +410,6 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_CHTVVCLKOPALN = SiS300_CHTVVCLKOPAL;   /* not supported on 300 series */
-    SiS_Pr->SiS_CHTVVCLKSOPAL = SiS300_CHTVVCLKSOPAL;
--   /* TW: New from 300/301LV BIOS */
-    SiS_Pr->SiS_CRT2Part2_1024x768_1  = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1024x768_1;
-    SiS_Pr->SiS_CRT2Part2_1280x1024_1 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1280x1024_1;
-    SiS_Pr->SiS_CRT2Part2_1400x1050_1 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1400x1050_1;
-@@ -353,7 +423,7 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_CRT2Part2_1400x1050_3 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1400x1050_3;
-    SiS_Pr->SiS_CRT2Part2_1600x1200_3 = (SiS_Part2PortTblStruct *)SiS300_CRT2Part2_1600x1200_3;
--   /* TW: LCDResInfo will on 300 series be translated to 310/325 series definitions */
-+   /* TW: LCDResInfo will on 300 series be translated to 315 series definitions */
-    SiS_Pr->SiS_Panel320x480   = Panel_320x480;
-    SiS_Pr->SiS_Panel640x480   = Panel_640x480;
-    SiS_Pr->SiS_Panel800x600   = Panel_800x600;
-@@ -362,13 +432,17 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_Panel1280x960  = Panel_1280x960;
-    SiS_Pr->SiS_Panel1024x600  = Panel_1024x600;
-    SiS_Pr->SiS_Panel1152x768  = Panel_1152x768;
--   SiS_Pr->SiS_Panel1600x1200 = 16;           /* TW: Something illegal */
--   SiS_Pr->SiS_Panel1400x1050 = 16;           /* TW: Something illegal */
--   SiS_Pr->SiS_Panel1152x864  = 16;                   /* TW: Something illegal */
--   SiS_Pr->SiS_Panel1280x768  = 16;                   /* TW: Something illegal */
-+   SiS_Pr->SiS_Panel1280x768  = Panel_1280x768;
-+   SiS_Pr->SiS_Panel1600x1200 = 255;                  /* TW: Something illegal */
-+   SiS_Pr->SiS_Panel1400x1050 = 255;                  /* TW: Something illegal */
-+   SiS_Pr->SiS_Panel640x480_2 = 255;                  /* TW: Something illegal */
-+   SiS_Pr->SiS_Panel640x480_3 = 255;                  /* TW: Something illegal */
-+   SiS_Pr->SiS_Panel1152x864  = 255;                  /* TW: Something illegal */
-    SiS_Pr->SiS_PanelMax       = Panel_320x480;     /* TW: highest value */
-    SiS_Pr->SiS_PanelMinLVDS   = Panel_800x600;     /* TW: Lowest value LVDS */
-    SiS_Pr->SiS_PanelMin301    = Panel_1024x768;    /* TW: lowest value 301 */
-+   SiS_Pr->SiS_PanelCustom    = Panel_Custom;
-+   SiS_Pr->SiS_PanelBarco1366 = Panel_Barco1366;
- }
- #endif
-@@ -376,29 +450,33 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PS
- static void
- InitTo310Pointer(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
- {
-+   InitCommonPointer(SiS_Pr, HwDeviceExtension);
-+
-    SiS_Pr->SiS_SModeIDTable  = (SiS_StStruct *)SiS310_SModeIDTable;
--   SiS_Pr->SiS_StandTable    = (SiS_StandTableStruct *)SiS310_StandTable;
-    SiS_Pr->SiS_EModeIDTable  = (SiS_ExtStruct *)SiS310_EModeIDTable;
-    SiS_Pr->SiS_RefIndex      = (SiS_Ext2Struct *)SiS310_RefIndex;
-    SiS_Pr->SiS_CRT1Table     = (SiS_CRT1TableStruct *)SiS310_CRT1Table;
-    /* TW: MCLK is different */
--   if(HwDeviceExtension->jChipType == SIS_330) {
-+#ifdef LINUXBIOS
-+   if(HwDeviceExtension->jChipType == SIS_660) {
-+      SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_660;  /* 660 */
-+   } else if(HwDeviceExtension->jChipType == SIS_330) {
-+#endif
-       SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_330;  /* 330 */
-+#ifdef LINUXBIOS
-    } else if(HwDeviceExtension->jChipType > SIS_315PRO) {
-       SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_650;  /* 550, 650, 740 */
-    } else {
-       SiS_Pr->SiS_MCLKData_0 = (SiS_MCLKDataStruct *)SiS310_MCLKData_0_315;  /* 315 */
-    }
-+#endif
-    SiS_Pr->SiS_MCLKData_1    = (SiS_MCLKDataStruct *)SiS310_MCLKData_1;
-+#ifdef LINUXBIOS
-    SiS_Pr->SiS_ECLKData      = (SiS_ECLKDataStruct *)SiS310_ECLKData;
-+#endif
-    SiS_Pr->SiS_VCLKData      = (SiS_VCLKDataStruct *)SiS310_VCLKData;
-    SiS_Pr->SiS_VBVCLKData    = (SiS_VBVCLKDataStruct *)SiS310_VBVCLKData;
-    SiS_Pr->SiS_ScreenOffset  = SiS310_ScreenOffset;
--   SiS_Pr->SiS_StResInfo     = (SiS_StResInfoStruct *)SiS310_StResInfo;
--   SiS_Pr->SiS_ModeResInfo   = (SiS_ModeResInfoStruct *)SiS310_ModeResInfo;
--
--   SiS_Pr->pSiS_OutputSelect = &SiS310_OutputSelect;
--   SiS_Pr->pSiS_SoftSetting  = &SiS310_SoftSetting;
-    SiS_Pr->SiS_SR15  = SiS310_SR15;
-@@ -427,16 +505,6 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->pSiS_YCSenseData2    = &SiS310_YCSenseData2;
- #endif
--   SiS_Pr->SiS_NTSCPhase    = SiS310_NTSCPhase;
--   SiS_Pr->SiS_PALPhase     = SiS310_PALPhase;
--   SiS_Pr->SiS_NTSCPhase2   = SiS310_NTSCPhase2;
--   SiS_Pr->SiS_PALPhase2    = SiS310_PALPhase2;
--   SiS_Pr->SiS_PALMPhase    = SiS310_PALMPhase;
--   SiS_Pr->SiS_PALNPhase    = SiS310_PALNPhase;
--   SiS_Pr->SiS_PALMPhase2   = SiS310_PALMPhase2;
--   SiS_Pr->SiS_PALNPhase2   = SiS310_PALNPhase2;
--   SiS_Pr->SiS_SpecialPhase = SiS310_SpecialPhase;
--
-    SiS_Pr->SiS_StLCD1024x768Data    = (SiS_LCDDataStruct *)SiS310_StLCD1024x768Data;
-    SiS_Pr->SiS_ExtLCD1024x768Data   = (SiS_LCDDataStruct *)SiS310_ExtLCD1024x768Data;
-    SiS_Pr->SiS_St2LCD1024x768Data   = (SiS_LCDDataStruct *)SiS310_St2LCD1024x768Data;
-@@ -445,62 +513,10 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_St2LCD1280x1024Data  = (SiS_LCDDataStruct *)SiS310_St2LCD1280x1024Data;
-    SiS_Pr->SiS_NoScaleData1024x768  = (SiS_LCDDataStruct *)SiS310_NoScaleData1024x768;
-    SiS_Pr->SiS_NoScaleData1280x1024 = (SiS_LCDDataStruct *)SiS310_NoScaleData1280x1024;
--   SiS_Pr->SiS_LCD1280x960Data      = (SiS_LCDDataStruct *)SiS310_LCD1280x960Data;
--   SiS_Pr->SiS_ExtLCD1400x1050Data  = (SiS_LCDDataStruct *)SiS310_ExtLCD1400x1050Data;
--   SiS_Pr->SiS_ExtLCD1600x1200Data  = (SiS_LCDDataStruct *)SiS310_ExtLCD1600x1200Data;
--   SiS_Pr->SiS_StLCD1400x1050Data   = (SiS_LCDDataStruct *)SiS310_StLCD1400x1050Data;
--   SiS_Pr->SiS_StLCD1600x1200Data   = (SiS_LCDDataStruct *)SiS310_StLCD1600x1200Data;
--   SiS_Pr->SiS_NoScaleData1400x1050 = (SiS_LCDDataStruct *)SiS310_NoScaleData1400x1050;
--   SiS_Pr->SiS_NoScaleData1600x1200 = (SiS_LCDDataStruct *)SiS310_NoScaleData1600x1200;
--
--   SiS_Pr->SiS_StPALData   = (SiS_TVDataStruct *)SiS310_StPALData;
--   SiS_Pr->SiS_ExtPALData  = (SiS_TVDataStruct *)SiS310_ExtPALData;
--   SiS_Pr->SiS_StNTSCData  = (SiS_TVDataStruct *)SiS310_StNTSCData;
--   SiS_Pr->SiS_ExtNTSCData = (SiS_TVDataStruct *)SiS310_ExtNTSCData;
--/* SiS_Pr->SiS_St1HiTVData = (SiS_TVDataStruct *)SiS310_St1HiTVData;  */
--   SiS_Pr->SiS_St2HiTVData = (SiS_TVDataStruct *)SiS310_St2HiTVData;
--   SiS_Pr->SiS_ExtHiTVData = (SiS_TVDataStruct *)SiS310_ExtHiTVData;
--
--   SiS_Pr->SiS_NTSCTiming     = SiS310_NTSCTiming;
--   SiS_Pr->SiS_PALTiming      = SiS310_PALTiming;
--   SiS_Pr->SiS_HiTVSt1Timing  = SiS310_HiTVSt1Timing;
--   SiS_Pr->SiS_HiTVSt2Timing  = SiS310_HiTVSt2Timing;
--   SiS_Pr->SiS_HiTVTextTiming = SiS310_HiTVTextTiming;
--   SiS_Pr->SiS_HiTVExtTiming  = SiS310_HiTVExtTiming;
--   SiS_Pr->SiS_HiTVGroup3Data = SiS310_HiTVGroup3Data;
--   SiS_Pr->SiS_HiTVGroup3Simu = SiS310_HiTVGroup3Simu;
--   SiS_Pr->SiS_HiTVGroup3Text = SiS310_HiTVGroup3Text;
--   SiS_Pr->SiS_PanelDelayTbl = (SiS_PanelDelayTblStruct *)SiS310_PanelDelayTbl;
-+   SiS_Pr->SiS_PanelDelayTbl     = (SiS_PanelDelayTblStruct *)SiS310_PanelDelayTbl;
-    SiS_Pr->SiS_PanelDelayTblLVDS = (SiS_PanelDelayTblStruct *)SiS310_PanelDelayTblLVDS;
--   SiS_Pr->SiS_LVDS800x600Data_1   = (SiS_LVDSDataStruct *)SiS310_LVDS800x600Data_1;
--   SiS_Pr->SiS_LVDS800x600Data_2   = (SiS_LVDSDataStruct *)SiS310_LVDS800x600Data_2;
--   SiS_Pr->SiS_LVDS1024x768Data_1  = (SiS_LVDSDataStruct *)SiS310_LVDS1024x768Data_1;
--   SiS_Pr->SiS_LVDS1024x768Data_2  = (SiS_LVDSDataStruct *)SiS310_LVDS1024x768Data_2;
--   SiS_Pr->SiS_LVDS1280x1024Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x1024Data_1;
--   SiS_Pr->SiS_LVDS1280x1024Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1280x1024Data_2;
--   SiS_Pr->SiS_LVDS1280x960Data_1  = (SiS_LVDSDataStruct *)SiS310_LVDS1280x960Data_1;
--   SiS_Pr->SiS_LVDS1280x960Data_2  = (SiS_LVDSDataStruct *)SiS310_LVDS1280x960Data_2;
--   SiS_Pr->SiS_LVDS1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1400x1050Data_1;
--   SiS_Pr->SiS_LVDS1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1400x1050Data_2;
--   SiS_Pr->SiS_LVDS1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS310_LVDS1600x1200Data_1;
--   SiS_Pr->SiS_LVDS1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS310_LVDS1600x1200Data_2;
--   SiS_Pr->SiS_LVDS1280x768Data_1  = (SiS_LVDSDataStruct *)SiS310_LVDS1280x768Data_1;
--   SiS_Pr->SiS_LVDS1280x768Data_2  = (SiS_LVDSDataStruct *)SiS310_LVDS1280x768Data_2;
--   SiS_Pr->SiS_LVDS1024x600Data_1  = (SiS_LVDSDataStruct *)SiS310_LVDS1024x600Data_1;
--   SiS_Pr->SiS_LVDS1024x600Data_2  = (SiS_LVDSDataStruct *)SiS310_LVDS1024x600Data_2;
--   SiS_Pr->SiS_LVDS1152x768Data_1  = (SiS_LVDSDataStruct *)SiS310_LVDS1152x768Data_1;
--   SiS_Pr->SiS_LVDS1152x768Data_2  = (SiS_LVDSDataStruct *)SiS310_LVDS1152x768Data_2;
--   SiS_Pr->SiS_LVDSXXXxXXXData_1   = (SiS_LVDSDataStruct *)SiS310_LVDSXXXxXXXData_1;
--   SiS_Pr->SiS_LVDS320x480Data_1   = (SiS_LVDSDataStruct *)SiS310_LVDS320x480Data_1;
--   SiS_Pr->SiS_LVDS640x480Data_1   = (SiS_LVDSDataStruct *)SiS310_LVDS640x480Data_1;
--   SiS_Pr->SiS_LCDA1400x1050Data_1  = (SiS_LVDSDataStruct *)SiS310_LCDA1400x1050Data_1;
--   SiS_Pr->SiS_LCDA1400x1050Data_2  = (SiS_LVDSDataStruct *)SiS310_LCDA1400x1050Data_2;
--   SiS_Pr->SiS_LCDA1600x1200Data_1  = (SiS_LVDSDataStruct *)SiS310_LCDA1600x1200Data_1;
--   SiS_Pr->SiS_LCDA1600x1200Data_2  = (SiS_LVDSDataStruct *)SiS310_LCDA1600x1200Data_2;
--   SiS_Pr->SiS_CHTVUNTSCData = (SiS_LVDSDataStruct *)SiS310_CHTVUNTSCData;
--   SiS_Pr->SiS_CHTVONTSCData = (SiS_LVDSDataStruct *)SiS310_CHTVONTSCData;
-    SiS_Pr->SiS_CHTVUPALData  = (SiS_LVDSDataStruct *)SiS310_CHTVUPALData;
-    SiS_Pr->SiS_CHTVOPALData  = (SiS_LVDSDataStruct *)SiS310_CHTVOPALData;
-    SiS_Pr->SiS_CHTVUPALMData = (SiS_LVDSDataStruct *)SiS310_CHTVUPALMData;
-@@ -508,6 +524,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_CHTVUPALNData = (SiS_LVDSDataStruct *)SiS310_CHTVUPALNData;
-    SiS_Pr->SiS_CHTVOPALNData = (SiS_LVDSDataStruct *)SiS310_CHTVOPALNData;
-    SiS_Pr->SiS_CHTVSOPALData = (SiS_LVDSDataStruct *)SiS310_CHTVSOPALData;
-+
-    SiS_Pr->SiS_PanelType00_1 = (SiS_LVDSDesStruct *)SiS310_PanelType00_1;
-    SiS_Pr->SiS_PanelType01_1 = (SiS_LVDSDesStruct *)SiS310_PanelType01_1;
-    SiS_Pr->SiS_PanelType02_1 = (SiS_LVDSDesStruct *)SiS310_PanelType02_1;
-@@ -540,19 +557,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_PanelType0d_2 = (SiS_LVDSDesStruct *)SiS310_PanelType0d_2;
-    SiS_Pr->SiS_PanelType0e_2 = (SiS_LVDSDesStruct *)SiS310_PanelType0e_2;
-    SiS_Pr->SiS_PanelType0f_2 = (SiS_LVDSDesStruct *)SiS310_PanelType0f_2;
--   SiS_Pr->SiS_PanelTypeNS_1 = (SiS_LVDSDesStruct *)SiS310_PanelTypeNS_1;
--   SiS_Pr->SiS_PanelTypeNS_2 = (SiS_LVDSDesStruct *)SiS310_PanelTypeNS_2;
--
--   SiS_Pr->LVDS1024x768Des_1  = (SiS_LVDSDesStruct *)SiS310_PanelType1076_1;
--   SiS_Pr->LVDS1280x1024Des_1 = (SiS_LVDSDesStruct *)SiS310_PanelType1210_1;
--   SiS_Pr->LVDS1400x1050Des_1 = (SiS_LVDSDesStruct *)SiS310_PanelType1296_1 ;
--   SiS_Pr->LVDS1600x1200Des_1 = (SiS_LVDSDesStruct *)SiS310_PanelType1600_1 ;
--   SiS_Pr->LVDS1024x768Des_2  = (SiS_LVDSDesStruct *)SiS310_PanelType1076_2;
--   SiS_Pr->LVDS1280x1024Des_2 = (SiS_LVDSDesStruct *)SiS310_PanelType1210_2;
--   SiS_Pr->LVDS1400x1050Des_2 = (SiS_LVDSDesStruct *)SiS310_PanelType1296_2;
--   SiS_Pr->LVDS1600x1200Des_2 = (SiS_LVDSDesStruct *)SiS310_PanelType1600_2 ;
--   /* TW: New from 650/301LV BIOS */
-    SiS_Pr->SiS_CRT2Part2_1024x768_1  = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1024x768_1;
-    SiS_Pr->SiS_CRT2Part2_1280x1024_1 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1280x1024_1;
-    SiS_Pr->SiS_CRT2Part2_1400x1050_1 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1400x1050_1;
-@@ -566,51 +571,32 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_CRT2Part2_1400x1050_3 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1400x1050_3;
-    SiS_Pr->SiS_CRT2Part2_1600x1200_3 = (SiS_Part2PortTblStruct *)SiS310_CRT2Part2_1600x1200_3;
--   SiS_Pr->SiS_CHTVUNTSCDesData = (SiS_LVDSDesStruct *)SiS310_CHTVUNTSCDesData;
--   SiS_Pr->SiS_CHTVONTSCDesData = (SiS_LVDSDesStruct *)SiS310_CHTVONTSCDesData;
--   SiS_Pr->SiS_CHTVUPALDesData  = (SiS_LVDSDesStruct *)SiS310_CHTVUPALDesData;
--   SiS_Pr->SiS_CHTVOPALDesData  = (SiS_LVDSDesStruct *)SiS310_CHTVOPALDesData;
--
-    SiS_Pr->SiS_LVDSCRT1800x600_1     = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_1;
-    SiS_Pr->SiS_LVDSCRT11024x768_1    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_1;
-    SiS_Pr->SiS_LVDSCRT11280x1024_1   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_1;
-    SiS_Pr->SiS_LVDSCRT11400x1050_1   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_1;
--   SiS_Pr->SiS_LVDSCRT11280x768_1    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_1;
--   SiS_Pr->SiS_LVDSCRT11024x600_1    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_1;
--   SiS_Pr->SiS_LVDSCRT11152x768_1    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_1;
-    SiS_Pr->SiS_LVDSCRT11600x1200_1   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_1;
-    SiS_Pr->SiS_LVDSCRT1800x600_1_H   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_1_H;
-    SiS_Pr->SiS_LVDSCRT11024x768_1_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_1_H;
-    SiS_Pr->SiS_LVDSCRT11280x1024_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_1_H;
-    SiS_Pr->SiS_LVDSCRT11400x1050_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_1_H;
--   SiS_Pr->SiS_LVDSCRT11280x768_1_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_1_H;
--   SiS_Pr->SiS_LVDSCRT11024x600_1_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_1_H;
--   SiS_Pr->SiS_LVDSCRT11152x768_1_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_1_H;
-    SiS_Pr->SiS_LVDSCRT11600x1200_1_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_1_H;
-    SiS_Pr->SiS_LVDSCRT1800x600_2     = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_2;
-    SiS_Pr->SiS_LVDSCRT11024x768_2    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_2;
-    SiS_Pr->SiS_LVDSCRT11280x1024_2   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_2;
-    SiS_Pr->SiS_LVDSCRT11400x1050_2   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_2;
--   SiS_Pr->SiS_LVDSCRT11280x768_2    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_2;
--   SiS_Pr->SiS_LVDSCRT11024x600_2    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_2;
--   SiS_Pr->SiS_LVDSCRT11152x768_2    = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_2;
-    SiS_Pr->SiS_LVDSCRT11600x1200_2   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_2;
-    SiS_Pr->SiS_LVDSCRT1800x600_2_H   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1800x600_2_H;
-    SiS_Pr->SiS_LVDSCRT11024x768_2_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x768_2_H;
-    SiS_Pr->SiS_LVDSCRT11280x1024_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x1024_2_H;
-    SiS_Pr->SiS_LVDSCRT11400x1050_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11400x1050_2_H;
--   SiS_Pr->SiS_LVDSCRT11280x768_2_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11280x768_2_H;
--   SiS_Pr->SiS_LVDSCRT11024x600_2_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11024x600_2_H;
--   SiS_Pr->SiS_LVDSCRT11152x768_2_H  = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11152x768_2_H;
-    SiS_Pr->SiS_LVDSCRT11600x1200_2_H = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT11600x1200_2_H;
--   SiS_Pr->SiS_LVDSCRT1XXXxXXX_1     = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1XXXxXXX_1;
--   SiS_Pr->SiS_LVDSCRT1XXXxXXX_1_H   = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1XXXxXXX_1_H;
--   SiS_Pr->SiS_LVDSCRT1320x480_1     = (SiS_LVDSCRT1DataStruct *)SiS310_LVDSCRT1320x480_1;
--   SiS_Pr->SiS_CHTVCRT1UNTSC = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UNTSC;
--   SiS_Pr->SiS_CHTVCRT1ONTSC = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1ONTSC;
--   SiS_Pr->SiS_CHTVCRT1UPAL  = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UPAL;
--   SiS_Pr->SiS_CHTVCRT1OPAL  = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1OPAL;
--   SiS_Pr->SiS_CHTVCRT1SOPAL = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1SOPAL;
-+   SiS_Pr->SiS_CHTVCRT1UNTSC         = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UNTSC;
-+   SiS_Pr->SiS_CHTVCRT1ONTSC         = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1ONTSC;
-+   SiS_Pr->SiS_CHTVCRT1UPAL          = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1UPAL;
-+   SiS_Pr->SiS_CHTVCRT1OPAL          = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1OPAL;
-+   SiS_Pr->SiS_CHTVCRT1SOPAL         = (SiS_LVDSCRT1DataStruct *)SiS310_CHTVCRT1SOPAL;
-+
-    SiS_Pr->SiS_CHTVReg_UNTSC = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_UNTSC;
-    SiS_Pr->SiS_CHTVReg_ONTSC = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_ONTSC;
-    SiS_Pr->SiS_CHTVReg_UPAL  = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_UPAL;
-@@ -620,6 +606,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_CHTVReg_UPALN = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_UPALN;
-    SiS_Pr->SiS_CHTVReg_OPALN = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_OPALN;
-    SiS_Pr->SiS_CHTVReg_SOPAL = (SiS_CHTVRegDataStruct *)SiS310_CHTVReg_SOPAL;
-+
-    SiS_Pr->SiS_LCDACRT1800x600_1     = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT1800x600_1;
-    SiS_Pr->SiS_LCDACRT11024x768_1    = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11024x768_1;
-    SiS_Pr->SiS_LCDACRT11280x1024_1   = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11280x1024_1;
-@@ -640,6 +627,7 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_LCDACRT11280x1024_2_H = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11280x1024_2_H;
-    SiS_Pr->SiS_LCDACRT11400x1050_2_H = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11400x1050_2_H;
-    SiS_Pr->SiS_LCDACRT11600x1200_2_H = (SiS_LCDACRT1DataStruct *)SiS310_LCDACRT11600x1200_2_H;
-+
-    SiS_Pr->SiS_CHTVVCLKUNTSC = SiS310_CHTVVCLKUNTSC;
-    SiS_Pr->SiS_CHTVVCLKONTSC = SiS310_CHTVVCLKONTSC;
-    SiS_Pr->SiS_CHTVVCLKUPAL  = SiS310_CHTVVCLKUPAL;
-@@ -662,9 +650,13 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PS
-    SiS_Pr->SiS_Panel1152x864  = Panel_1152x864;
-    SiS_Pr->SiS_Panel1280x768  = Panel_1280x768;
-    SiS_Pr->SiS_Panel1024x600  = Panel_1024x600;
-+   SiS_Pr->SiS_Panel640x480_2 = Panel_640x480_2;
-+   SiS_Pr->SiS_Panel640x480_3 = Panel_640x480_3;
-    SiS_Pr->SiS_PanelMax       = Panel_320x480;    /* TW: highest value */
-    SiS_Pr->SiS_PanelMinLVDS   = Panel_800x600;    /* TW: lowest value LVDS/LCDA */
-    SiS_Pr->SiS_PanelMin301    = Panel_1024x768;   /* TW: lowest value 301 */
-+   SiS_Pr->SiS_PanelCustom    = Panel_Custom;
-+   SiS_Pr->SiS_PanelBarco1366 = 255;
- }
- #endif
-@@ -727,7 +719,8 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
-       (HwDeviceExtension->jChipType == SIS_550) ||
-       (HwDeviceExtension->jChipType == SIS_650) ||
-       (HwDeviceExtension->jChipType == SIS_740) ||
--      (HwDeviceExtension->jChipType == SIS_330))
-+      (HwDeviceExtension->jChipType == SIS_330) ||
-+      (HwDeviceExtension->jChipType == SIS_660))
-      InitTo310Pointer(SiS_Pr, HwDeviceExtension);
- #endif
-@@ -896,7 +889,8 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
-       (HwDeviceExtension->jChipType == SIS_550) ||
-       (HwDeviceExtension->jChipType == SIS_650) ||
-       (HwDeviceExtension->jChipType == SIS_740) ||
--      (HwDeviceExtension->jChipType == SIS_330)) {
-+      (HwDeviceExtension->jChipType == SIS_330) ||
-+      (HwDeviceExtension->jChipType == SIS_660)) {
-       for(i=0x12; i<=0x1B; i++) SiS_SetReg1(SiS_Pr->SiS_P3c4,i,0);
-       for(i=0x79; i<=0x7C; i++) SiS_SetReg1(SiS_Pr->SiS_P3d4,i,0);
-    }
-@@ -953,14 +947,15 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
-    if((HwDeviceExtension->jChipType == SIS_315H)   ||
-       (HwDeviceExtension->jChipType == SIS_315)    ||
-       (HwDeviceExtension->jChipType == SIS_315PRO) ||
--      (HwDeviceExtension->jChipType == SIS_330) ) {
-+      (HwDeviceExtension->jChipType == SIS_330)) {
-               if((*SiS_Pr->pSiS_SoftSetting & SoftDRAMType) == 0) {
-               temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x3A) & 0x03;
-         }
-    }
-    if((HwDeviceExtension->jChipType == SIS_550) ||
-       (HwDeviceExtension->jChipType == SIS_740) ||
--      (HwDeviceExtension->jChipType == SIS_650)) {
-+      (HwDeviceExtension->jChipType == SIS_650) ||
-+      (HwDeviceExtension->jChipType == SIS_660)) {
-         if((*SiS_Pr->pSiS_SoftSetting & SoftDRAMType) == 0) {
-               temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x07;
-         }
-@@ -977,7 +972,7 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
-    if((HwDeviceExtension->jChipType != SIS_540) &&
-       (HwDeviceExtension->jChipType != SIS_630) &&
-       (HwDeviceExtension->jChipType != SIS_730)){
--      for(i=0x15;i<0x1C;i++) {
-+      for(i=0x15; i<0x1C; i++) {
-                   SiS_SetReg1(SiS_Pr->SiS_P3c4,i,SiS_Pr->SiS_SR15[i-0x15][SiS_Pr->SiS_RAMType]);
-       }
-    }
-@@ -1023,7 +1018,8 @@ SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEV
-       (HwDeviceExtension->jChipType == SIS_550) ||
-       (HwDeviceExtension->jChipType == SIS_650) ||
-       (HwDeviceExtension->jChipType == SIS_740) ||
--      (HwDeviceExtension->jChipType == SIS_330))
-+      (HwDeviceExtension->jChipType == SIS_330) ||
-+      (HwDeviceExtension->jChipType == SIS_660))
-       SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2E,0x08);    /* use VB */
- #endif
-@@ -1180,7 +1176,8 @@ SiS_Set_LVDS_TRUMPION(SiS_Private *SiS_P
- #ifdef SIS315H
-   if((HwDeviceExtension->jChipType == SIS_650) ||
-      (HwDeviceExtension->jChipType == SIS_740) ||
--     (HwDeviceExtension->jChipType == SIS_330)) {
-+     (HwDeviceExtension->jChipType == SIS_330) ||
-+     (HwDeviceExtension->jChipType == SIS_660)) {
- #if 0 /* TW: This is not required */
-         /* TW: Read POWER_ON_TRAP and copy to CR37 */
-       temp = (UCHAR)SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1A);
-@@ -1299,7 +1296,7 @@ SiS_ChkBUSWidth_300(SiS_Private *SiS_Pr,
- #endif
- /* ===============  SiS 300 dram sizing end    =============== */
--/* ============  SiS 310/325 dram sizing begin  ============== */
-+/* ============  SiS 315 dram sizing begin  ============== */
- #ifdef SIS315H
- /* TW: Moved Get310DRAMType further down */
-@@ -1893,8 +1890,7 @@ SiS_Get310DRAMType(SiS_Private *SiS_Pr, 
-    if(*SiS_Pr->pSiS_SoftSetting & SoftDRAMType) {
-      data = *SiS_Pr->pSiS_SoftSetting & 0x03;
-    } else {
--     if((HwDeviceExtension->jChipType > SIS_315PRO) &&
--        (HwDeviceExtension->jChipType < SIS_330)) {
-+     if(IS_SIS550650740660) {
-         data = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x13) & 0x07;
-      } else { /* TW: 315, 330 */
-         data = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x3a) & 0x03;
-@@ -1934,13 +1930,17 @@ void SiSRegInit(SiS_Private *SiS_Pr, USH
-    SiS_Pr->SiS_P3c7 = BaseAddr + 0x17;
-    SiS_Pr->SiS_P3c8 = BaseAddr + 0x18;
-    SiS_Pr->SiS_P3c9 = BaseAddr + 0x19;
--   SiS_Pr->SiS_P3da = BaseAddr + 0x2A;
--   SiS_Pr->SiS_Part1Port = BaseAddr + SIS_CRT2_PORT_04;   /* Digital video interface registers (LCD) */
--   SiS_Pr->SiS_Part2Port = BaseAddr + SIS_CRT2_PORT_10;   /* 301 TV Encoder registers */
--   SiS_Pr->SiS_Part3Port = BaseAddr + SIS_CRT2_PORT_12;   /* 301 Macrovision registers */
--   SiS_Pr->SiS_Part4Port = BaseAddr + SIS_CRT2_PORT_14;   /* 301 VGA2 (and LCD) registers */
--   SiS_Pr->SiS_Part5Port = BaseAddr + SIS_CRT2_PORT_14+2; /* 301 palette address port registers */
--   SiS_Pr->SiS_DDC_Port = BaseAddr + 0x14;                /* DDC Port ( = P3C4, SR11/0A) */
-+   SiS_Pr->SiS_P3cb = BaseAddr + 0x1b;
-+   SiS_Pr->SiS_P3cd = BaseAddr + 0x1d;
-+   SiS_Pr->SiS_P3da = BaseAddr + 0x2a;
-+   SiS_Pr->SiS_Part1Port = BaseAddr + SIS_CRT2_PORT_04;     /* Digital video interface registers (LCD) */
-+   SiS_Pr->SiS_Part2Port = BaseAddr + SIS_CRT2_PORT_10;     /* 301 TV Encoder registers */
-+   SiS_Pr->SiS_Part3Port = BaseAddr + SIS_CRT2_PORT_12;     /* 301 Macrovision registers */
-+   SiS_Pr->SiS_Part4Port = BaseAddr + SIS_CRT2_PORT_14;     /* 301 VGA2 (and LCD) registers */
-+   SiS_Pr->SiS_Part5Port = BaseAddr + SIS_CRT2_PORT_14 + 2; /* 301 palette address port registers */
-+   SiS_Pr->SiS_DDC_Port = BaseAddr + 0x14;                  /* DDC Port ( = P3C4, SR11/0A) */
-+   SiS_Pr->SiS_VidCapt = BaseAddr + SIS_VIDEO_CAPTURE;
-+   SiS_Pr->SiS_VidPlay = BaseAddr + SIS_VIDEO_PLAYBACK;
- }
- void
-@@ -1965,7 +1965,8 @@ SiSInitPCIetc(SiS_Private *SiS_Pr, PSIS_
-       (HwDeviceExtension->jChipType == SIS_550) ||
-       (HwDeviceExtension->jChipType == SIS_650) ||
-       (HwDeviceExtension->jChipType == SIS_740) ||
--      (HwDeviceExtension->jChipType == SIS_330)) {
-+      (HwDeviceExtension->jChipType == SIS_330) ||
-+      (HwDeviceExtension->jChipType == SIS_660)) {
-       /* TW: This seems to be done the same way on these chipsets */
-       SiS_SetReg1(SiS_Pr->SiS_P3c4,0x20,0xa1);
-       SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x1E,0xFF,0x5A);
-@@ -1987,10 +1988,14 @@ SiSSetLVDSetc(SiS_Private *SiS_Pr, PSIS_
-    SiS_Pr->SiS_ChrontelInit = 0;
--   if((ModeNo == 0x5a) || (ModeNo == 0x5b)) {
--      SiS_Pr->SiS_IF_DEF_DSTN = 1;   /* for 550 dstn */
--      SiS_Pr->SiS_IF_DEF_FSTN = 1;   /* for fstn */
-+#if 0
-+   if(HwDeviceExtension->jChipType >= SIS_315H) {
-+      if((ModeNo == 0x5a) || (ModeNo == 0x5b)) {
-+       SiS_Pr->SiS_IF_DEF_DSTN = 1;   /* for 550 dstn */
-+       SiS_Pr->SiS_IF_DEF_FSTN = 1;   /* for fstn */
-+      }
-    }
-+#endif
- #ifdef SIS300
-    if((HwDeviceExtension->jChipType == SIS_540) ||
-@@ -2015,11 +2020,14 @@ SiSSetLVDSetc(SiS_Private *SiS_Pr, PSIS_
-    if((HwDeviceExtension->jChipType == SIS_550) ||
-       (HwDeviceExtension->jChipType == SIS_650) ||
-       (HwDeviceExtension->jChipType == SIS_740) ||
--      (HwDeviceExtension->jChipType == SIS_330))
-+      (HwDeviceExtension->jChipType == SIS_330) ||
-+      (HwDeviceExtension->jChipType == SIS_660))
-     {
--        /* TW: CR37 is different on 310/325 series */
-+        /* TW: CR37 is different on 315 series */
-+#if 0
-         if(SiS_Pr->SiS_IF_DEF_FSTN)                       /* fstn: set CR37=0x04 */
-              SiS_SetReg1(SiS_Pr->SiS_P3d4,0x37,0x04);      /* (fake LVDS bridge) */
-+#endif
-       temp=SiS_GetReg1(SiS_Pr->SiS_P3d4,0x37);
-               temp = (temp & 0x0E) >> 1;
-@@ -2044,7 +2052,8 @@ SiSInitPtr(SiS_Private *SiS_Pr, PSIS_HW_
-       (HwDeviceExtension->jChipType == SIS_550) ||
-       (HwDeviceExtension->jChipType == SIS_650) ||
-       (HwDeviceExtension->jChipType == SIS_740) ||
--      (HwDeviceExtension->jChipType == SIS_330))
-+      (HwDeviceExtension->jChipType == SIS_330) ||
-+      (HwDeviceExtension->jChipType == SIS_660))
-      InitTo310Pointer(SiS_Pr, HwDeviceExtension);
- #endif
-@@ -2073,14 +2082,21 @@ SiSDetermineROMUsage(SiS_Private *SiS_Pr
-             SiS_Pr->SiS_UseROM = TRUE;
-        else SiS_Pr->SiS_UseROM = FALSE;
-      } else if(HwDeviceExtension->jChipType < SIS_315H) {
-+#if 0
-         /* TW: Rest of 300 series: We don't use the ROM image if
-        *     the BIOS version < 2.0.0 as such old BIOSes don't
-        *     have the needed data at the expected locations.
-        */
-         if(ROMAddr[0x06] < '2')  SiS_Pr->SiS_UseROM = FALSE;
-       else                     SiS_Pr->SiS_UseROM = TRUE;
-+#else
-+      /* Sony's VAIO BIOS 1.09 follows the standard, so perhaps
-+       * the others do as well
-+       */
-+      SiS_Pr->SiS_UseROM = TRUE;
-+#endif
-      } else {
--        /* TW: 310/325/330 series stick to the standard */
-+        /* TW: 315/330 series stick to the standard */
-       SiS_Pr->SiS_UseROM = TRUE;
-      }
-    } else SiS_Pr->SiS_UseROM = FALSE;
-@@ -2104,24 +2120,27 @@ SiSBIOSSetMode(SiS_Private *SiS_Pr, PSIS
-    SiS_Pr->UseCustomMode = FALSE;
-    if((IsCustom) && (SiS_CheckBuildCustomMode(pScrn, mode, pSiS->VBFlags))) {
--   
--         xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting custom mode %dx%d\n", 
--              SiS_Pr->CHDisplay, SiS_Pr->CVDisplay);
--              
-+
-+         xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting custom mode %dx%d\n",
-+              SiS_Pr->CHDisplay,
-+              (mode->Flags & V_INTERLACE ? SiS_Pr->CVDisplay * 2 :
-+                 (mode->Flags & V_DBLSCAN ? SiS_Pr->CVDisplay / 2 :
-+                    SiS_Pr->CVDisplay)));
-+
-        return(SiSSetMode(SiS_Pr, HwDeviceExtension, pScrn, ModeNo, TRUE));
--   
-+
-    }
--   
--   ModeNo = SiS_CalcModeIndex(pScrn, mode);
-+
-+   ModeNo = SiS_CalcModeIndex(pScrn, mode, pSiS->HaveCustomModes);
-    if(!ModeNo) return FALSE;
--   xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting mode 0x%x\n", ModeNo);
-+   xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3, "Setting standard mode 0x%x\n", ModeNo);
-    return(SiSSetMode(SiS_Pr, HwDeviceExtension, pScrn, ModeNo, TRUE));   
- }
- #ifdef SISDUALHEAD
--/* TW: Set CRT1 mode (used for dual head) */
-+/* TW: Set CRT1 mode (used for dual head and MergedFB) */
- BOOLEAN
- SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, ScrnInfoPtr pScrn,
-                DisplayModePtr mode, BOOLEAN IsCustom)
-@@ -2134,31 +2153,37 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, 
-    SISEntPtr pSiSEnt = pSiS->entityPrivate;
-    unsigned char backupreg=0;
-    BOOLEAN backupcustom;
--
-    UShort  ModeNo=0;
-    
-    SiS_Pr->UseCustomMode = FALSE;
--   
-+
-    if((IsCustom) && (SiS_CheckBuildCustomMode(pScrn, mode, pSiS->VBFlags))) {
--   
-+
-+         USHORT temptemp = SiS_Pr->CVDisplay;
-+
-+         if(SiS_Pr->CModeFlag & DoubleScanMode)     temptemp >>= 1;
-+         else if(SiS_Pr->CInfoFlag & InterlaceMode) temptemp <<= 1;
-+
-          xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
--              "Setting custom mode %dx%d in CRT1\n", 
--              SiS_Pr->CHDisplay, SiS_Pr->CVDisplay);
-+              "Setting custom mode %dx%d on CRT1\n",
-+              SiS_Pr->CHDisplay, temptemp);
-        ModeNo = 0xfe;
--       
-+
-    } else {
--         ModeNo = SiS_CalcModeIndex(pScrn, mode);
-+         ModeNo = SiS_CalcModeIndex(pScrn, mode, pSiS->HaveCustomModes);
-          if(!ModeNo) return FALSE;
-          xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
--              "Setting mode 0x%x on CRT1\n", ModeNo);
-+              "Setting standard mode 0x%x on CRT1\n", ModeNo);
-    }
-    SiSInitPtr(SiS_Pr, HwDeviceExtension);
-    SiSRegInit(SiS_Pr, BaseAddr);
-+   SiS_GetSysFlags(SiS_Pr, HwDeviceExtension);
-+
-    SiS_Pr->SiS_VGAINFO = SiS_GetSetBIOSScratch(pScrn, 0x489, 0xff);
-    SiSInitPCIetc(SiS_Pr, HwDeviceExtension);
-@@ -2167,7 +2192,7 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, 
-    SiSDetermineROMUsage(SiS_Pr, HwDeviceExtension, ROMAddr);
--   /* TW: We don't clear the buffer under X */
-+   /* We don't clear the buffer under X */
-    SiS_Pr->SiS_flag_clearbuffer = 0;
-    /* 1.Openkey */
-@@ -2175,8 +2200,8 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, 
-    SiS_UnLockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr);
-+   /* 2.Get ModeID Table  */
-    if(!SiS_Pr->UseCustomMode) {
--      /* 2.Get ModeID Table  */
-       temp = SiS_SearchModeID(SiS_Pr, ROMAddr,&ModeNo,&ModeIdIndex);
-       if(temp == 0)  return(0);
-    } else {
-@@ -2201,53 +2226,65 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, 
-    SiS_GetLCDResInfo(SiS_Pr, ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
-    if(HwDeviceExtension->jChipType >= SIS_315H) {
--      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
--         if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08)  {
-+      if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08)  {
-+         if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-             if(ModeNo != 0x10)  SiS_Pr->SiS_SetFlag |= SetDOSMode;
-+         } else if((IS_SIS651) && (SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+            SiS_Pr->SiS_SetFlag |= SetDOSMode;
-          }
-       }
--      /* TW: New from 650/LV 1.10.6x */
-       if(IS_SIS650) {
--          if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--            SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
--            SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
--        }
-+         if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+          SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
-+          if(IS_SIS651) SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x51,0x20);
-+          SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
-+       }
-       }
-    }
--   /* TW: Set mode on CRT1 */
-+   /* Set mode on CRT1 */
-    SiS_SetCRT1Group(SiS_Pr, ROMAddr,HwDeviceExtension,ModeNo,ModeIdIndex,BaseAddr);
--   pSiSEnt->CRT1ModeNo = ModeNo;
--   pSiSEnt->CRT1DMode = mode;
--
--   /* TW: SetPitch: Adapt to virtual size & position */
-+   /* SetPitch: Adapt to virtual size & position */
-    SiS_SetPitchCRT1(SiS_Pr, pScrn, BaseAddr);
-+   if(pSiS->DualHeadMode) {
-+      pSiSEnt->CRT1ModeNo = ModeNo;
-+      pSiSEnt->CRT1DMode = mode;
-+   }
-+
-+   if(SiS_Pr->UseCustomMode) {
-+      SiS_Pr->CRT1UsesCustomMode = TRUE;
-+      SiS_Pr->CSRClock_CRT1 = SiS_Pr->CSRClock;
-+      SiS_Pr->CModeFlag_CRT1 = SiS_Pr->CModeFlag;
-+   } else {
-+      SiS_Pr->CRT1UsesCustomMode = FALSE;
-+   }
-+
-    /* We have to reset CRT2 if changing mode on CRT1 */
--   if(pSiSEnt->CRT2ModeNo != -1) {
--        xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
--                              "(Re-)Setting mode 0x%x on CRT2\n",
--                              pSiSEnt->CRT2ModeNo);
--      backupcustom = SiS_Pr->UseCustomMode;
--      if(SiS_Pr->UseCustomMode) {
--         SiS_Pr->CRT1UsesCustomMode = TRUE;
--      } else {
--         SiS_Pr->CRT1UsesCustomMode = FALSE;
--      }
--      SiSBIOSSetModeCRT2(SiS_Pr, HwDeviceExtension, pSiSEnt->pScrn_1,
--                              pSiSEnt->CRT2DMode);
--      SiS_Pr->UseCustomMode = backupcustom;
--      SiS_Pr->CRT1UsesCustomMode = FALSE;
-+   if(pSiS->DualHeadMode) {
-+      if(pSiSEnt->CRT2ModeNo != -1) {
-+         xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+                              "(Re-)Setting mode for CRT2\n");
-+       backupcustom = SiS_Pr->UseCustomMode;
-+       SiSBIOSSetModeCRT2(SiS_Pr, HwDeviceExtension, pSiSEnt->pScrn_1,
-+                          pSiSEnt->CRT2DMode, pSiSEnt->CRT2IsCustom);
-+       SiS_Pr->UseCustomMode = backupcustom;
-+      }
-    }
--   
-+
-+   /* Warning: From here, the custom mode entries in SiS_Pr are
-+    * possibly overwritten
-+    */
-+
-    SiS_HandleCRT1(SiS_Pr);
-+   SiS_StrangeStuff(SiS_Pr, HwDeviceExtension);
-+
-    SiS_DisplayOn(SiS_Pr);
-    SiS_SetReg3(SiS_Pr->SiS_P3c6,0xFF);
--   /* TW: New from 650/LV 1.10.6x and 1.10.7w, 630/301B 2.06.50 */
-    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
-        SiS_SetReg1(SiS_Pr->SiS_P3d4,0x38,backupreg);
-@@ -2266,7 +2303,7 @@ SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, 
- /* TW: Set CRT2 mode (used for dual head) */
- BOOLEAN
- SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, ScrnInfoPtr pScrn,
--               DisplayModePtr mode)
-+               DisplayModePtr mode, BOOLEAN IsCustom)
- {
-    ULONG   temp;
-    USHORT  ModeIdIndex;
-@@ -2276,16 +2313,52 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, 
-    SISPtr  pSiS     = SISPTR(pScrn);
-    SISEntPtr pSiSEnt = pSiS->entityPrivate;
-    unsigned char tempr1, tempr2, backupreg=0;
--   
-+
-    SiS_Pr->UseCustomMode = FALSE;
--   
--   ModeNo = SiS_CalcModeIndex(pScrn, mode);
--   if(!ModeNo) return FALSE;
-+
-+   /* Remember: Custom modes for CRT2 are ONLY supported
-+    *                 -) on 315/330 series,
-+    *           -) on the 301 and 30xB, and
-+    *           -) if CRT2 is LCD or VGA
-+    */
-+
-+   if((IsCustom) && (SiS_CheckBuildCustomMode(pScrn, mode, pSiS->VBFlags))) {
-+
-+       ModeNo = 0xfe;
-+
-+   } else {
-+
-+         BOOLEAN havecustommodes = pSiS->HaveCustomModes;
-+
-+#ifdef SISMERGED
-+       if(pSiS->MergedFB) havecustommodes = pSiS->HaveCustomModes2;
-+#endif
-+
-+         ModeNo = SiS_CalcModeIndex(pScrn, mode, havecustommodes);
-+         if(!ModeNo) return FALSE;
-+
-+   }
-+
-+   /* Save mode info so we can set it from within SetMode for CRT1 */
-+   if(pSiS->DualHeadMode) {
-+      pSiSEnt->CRT2ModeNo = ModeNo;
-+      pSiSEnt->CRT2DMode = mode;
-+      pSiSEnt->CRT2IsCustom = IsCustom;
-+
-+      /* We can't set CRT2 mode before CRT1 mode is set */
-+      if(pSiSEnt->CRT1ModeNo == -1) {
-+       xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+              "Setting CRT2 mode delayed until after setting CRT1 mode\n");
-+       return TRUE;
-+      }
-+   }
-    SiSInitPtr(SiS_Pr, HwDeviceExtension);
-    SiSRegInit(SiS_Pr, BaseAddr);
-+   SiS_GetSysFlags(SiS_Pr, HwDeviceExtension);
-+
-    SiS_Pr->SiS_VGAINFO = SiS_GetSetBIOSScratch(pScrn, 0x489, 0xff);
-    SiSInitPCIetc(SiS_Pr, HwDeviceExtension);
-@@ -2294,22 +2367,26 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, 
-    SiSDetermineROMUsage(SiS_Pr, HwDeviceExtension, ROMAddr);
--   /* TW: We don't clear the buffer under X */
-+   /* We don't clear the buffer under X */
-    SiS_Pr->SiS_flag_clearbuffer=0;
--   /* TW: Save ModeNo so we can set it from within SetMode for CRT1 */
--   pSiSEnt->CRT2ModeNo = ModeNo;
--   pSiSEnt->CRT2DMode = mode;
--
--   /* TW: We can't set CRT2 mode before CRT1 mode is set */
--   if(pSiSEnt->CRT1ModeNo == -1) {
--      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
--              "Setting CRT2 mode delayed until after setting CRT1 mode\n");
--      return TRUE;
--   }
-+   if(SiS_Pr->UseCustomMode) {
-+
-+      USHORT temptemp = SiS_Pr->CVDisplay;
-+
-+      if(SiS_Pr->CModeFlag & DoubleScanMode)     temptemp >>= 1;
-+      else if(SiS_Pr->CInfoFlag & InterlaceMode) temptemp <<= 1;
-+
-+      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+        "Setting custom mode %dx%d on CRT2\n",
-+        SiS_Pr->CHDisplay, temptemp);
-+
-+   } else {
--   xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
--              "Setting mode 0x%x on CRT2\n", ModeNo);
-+      xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 3,
-+        "Setting standard mode 0x%x on CRT2\n", ModeNo);
-+
-+   }
-    /* 1.Openkey */
-    SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);
-@@ -2317,10 +2394,14 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, 
-    SiS_UnLockCRT2(SiS_Pr, HwDeviceExtension, BaseAddr);
-    /* 2.Get ModeID */
--   temp = SiS_SearchModeID(SiS_Pr, ROMAddr,&ModeNo,&ModeIdIndex);
--   if(temp == 0)  return(0);
-+   if(!SiS_Pr->UseCustomMode) {
-+      temp = SiS_SearchModeID(SiS_Pr, ROMAddr,&ModeNo,&ModeIdIndex);
-+      if(temp == 0)  return(0);
-+   } else {
-+      ModeIdIndex = 0;
-+   }
--   /* TW: Determine VBType (301,301B,301LV,302B,302LV) */
-+   /* Determine VBType (301,301B,301LV,302B,302LV) */
-    SiS_GetVBType(SiS_Pr, BaseAddr,HwDeviceExtension);
-    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-@@ -2343,15 +2424,22 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, 
-       }
-    }
--   /* TW: Get VB information (connectors, connected devices) */
--   SiS_GetVBInfo(SiS_Pr, BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+   /* Get VB information (connectors, connected devices) */
-+   if(!SiS_Pr->UseCustomMode) {
-+      SiS_GetVBInfo(SiS_Pr, BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+   } else {
-+      /* If this is a custom mode, we don't check the modeflag for CRT2Mode */
-+      SiS_GetVBInfo(SiS_Pr, BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,0);
-+   }
-    SiS_SetHiVision(SiS_Pr, BaseAddr,HwDeviceExtension);
-    SiS_GetLCDResInfo(SiS_Pr, ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
-    if(HwDeviceExtension->jChipType >= SIS_315H) {
--      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
--         if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08)  {
-+      if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08)  {
-+         if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-             if(ModeNo != 0x10)  SiS_Pr->SiS_SetFlag |= SetDOSMode;
-+         } else if((IS_SIS651) && (SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+            SiS_Pr->SiS_SetFlag |= SetDOSMode;
-          }
-       }
-    }
-@@ -2364,17 +2452,19 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, 
-      case VB_CHIP_302:
-      case VB_CHIP_302B:
-      case VB_CHIP_302LV:
--        SiS_SetCRT2Group301(SiS_Pr, BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+        SiS_SetCRT2Group(SiS_Pr, BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-         break;
-      case VB_CHIP_UNKNOWN:
--        if (SiS_Pr->SiS_IF_DEF_LVDS     == 1 ||
--          SiS_Pr->SiS_IF_DEF_CH70xx   != 0 ||
--          SiS_Pr->SiS_IF_DEF_TRUMPION != 0) {
--              SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+        if(SiS_Pr->SiS_IF_DEF_LVDS     == 1 ||
-+         SiS_Pr->SiS_IF_DEF_CH70xx   != 0 ||
-+         SiS_Pr->SiS_IF_DEF_TRUMPION != 0) {
-+           SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-       }
-         break;
-    }
-+   SiS_StrangeStuff(SiS_Pr, HwDeviceExtension);
-+
-    SiS_DisplayOn(SiS_Pr);
-    SiS_SetReg3(SiS_Pr->SiS_P3c6,0xFF);
-@@ -2386,7 +2476,6 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, 
-       }
-    }
--   /* TW: New from 650/LV 1.10.6x and 1.10.7w, 630 2.06.50 */
-    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
-        if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-@@ -2412,7 +2501,7 @@ SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, 
-       }
-    }
--   /* TW: SetPitch: Adapt to virtual size & position */
-+   /* SetPitch: Adapt to virtual size & position */
-    SiS_SetPitchCRT2(SiS_Pr, pScrn, BaseAddr);
-    return TRUE;
-@@ -2448,6 +2537,8 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-    SiSRegInit(SiS_Pr, BaseAddr);
-+   SiS_GetSysFlags(SiS_Pr, HwDeviceExtension);
-+
- #ifdef LINUX_XF86
-    if(pScrn) SiS_Pr->SiS_VGAINFO = SiS_GetSetBIOSScratch(pScrn, 0x489, 0xff);
-    else
-@@ -2458,7 +2549,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- #ifdef TWDEBUG
-    xf86DrvMsg(0, X_INFO, "VGAInfo 0x%02x\n", SiS_Pr->SiS_VGAINFO);
- #endif
--#endif                 
-+#endif
-    SiSInitPCIetc(SiS_Pr, HwDeviceExtension);
-@@ -2472,7 +2563,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-    }      
- #ifdef LINUX_XF86
--   /* TW: We never clear the buffer in X */
-+   /* We never clear the buffer in X */
-    ModeNo |= 0x8000;
- #endif
-@@ -2501,10 +2592,10 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-       
-    }
-     
--   /* TW: Determine VBType (301,301B,301LV,302B,302LV) */
-+   /* Determine VBType (301,301B,301LV,302B,302LV) */
-    SiS_GetVBType(SiS_Pr,BaseAddr,HwDeviceExtension);
--   /* TW: Init/restore some VB registers */
-+   /* Init/restore some VB registers */
-    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-        if(HwDeviceExtension->jChipType >= SIS_315H) {
-          SiS_UnLockCRT2(SiS_Pr,HwDeviceExtension,BaseAddr);
-@@ -2525,8 +2616,12 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-        }
-    }
-    
--   /* TW: Get VB information (connectors, connected devices) */
--   SiS_GetVBInfo(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+   /* Get VB information (connectors, connected devices) */
-+   if(SiS_Pr->UseCustomMode) {
-+      SiS_GetVBInfo(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,0);
-+   } else {
-+      SiS_GetVBInfo(SiS_Pr,BaseAddr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension,1);
-+   }
-    SiS_SetHiVision(SiS_Pr,BaseAddr,HwDeviceExtension);
-    SiS_GetLCDResInfo(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,HwDeviceExtension);
-@@ -2535,22 +2630,32 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-    if(!temp) return(0);
-    if(HwDeviceExtension->jChipType >= SIS_315H) {
--      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
--         if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08)  {
-+      if(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x17) & 0x08)  {
-+         if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
-             if(ModeNo != 0x10)  SiS_Pr->SiS_SetFlag |= SetDOSMode;
-+         } else if((IS_SIS651) && (SiS_Pr->SiS_VBType & VB_NoLCD)) {
-+            SiS_Pr->SiS_SetFlag |= SetDOSMode;
-          }
-       }
--      /* TW: New from 650/LV 1.10.6x; not in any BIOS for other chipsets */
-       if(IS_SIS650) {
--          if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
--            SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
--            SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
--        }
-+         if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-+          SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x51,0x1f);
-+          if(IS_SIS651) SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x51,0x20);
-+          SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x56,0xe7);
-+       }
-       }
-    }
--   /* TW: Set mode on CRT1 */
-+   if(SiS_Pr->UseCustomMode) {
-+      SiS_Pr->CRT1UsesCustomMode = TRUE;
-+      SiS_Pr->CSRClock_CRT1 = SiS_Pr->CSRClock;
-+      SiS_Pr->CModeFlag_CRT1 = SiS_Pr->CModeFlag;
-+   } else {
-+      SiS_Pr->CRT1UsesCustomMode = FALSE;
-+   }
-+
-+   /* Set mode on CRT1 */
-    if(SiS_Pr->SiS_VBInfo & (SetSimuScanMode | SetCRT2ToLCDA)) {
-       SiS_SetCRT1Group(SiS_Pr,ROMAddr,HwDeviceExtension,ModeNo,ModeIdIndex,BaseAddr);
-    } else {
-@@ -2559,7 +2664,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-      }
-    }
--   /* TW: Set mode on CRT2 */
-+   /* Set mode on CRT2 */
-    if(SiS_Pr->SiS_VBInfo & (SetSimuScanMode | SwitchToCRT2 | SetCRT2ToLCDA)) {
-      switch (HwDeviceExtension->ujVBChipID) {
-      case VB_CHIP_301:
-@@ -2568,18 +2673,20 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-      case VB_CHIP_302:
-      case VB_CHIP_302B:
-      case VB_CHIP_302LV:
--        SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+        SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-         break;
-      case VB_CHIP_UNKNOWN:
-       if(SiS_Pr->SiS_IF_DEF_LVDS     == 1 ||
-          SiS_Pr->SiS_IF_DEF_CH70xx   != 0 ||
-          SiS_Pr->SiS_IF_DEF_TRUMPION != 0)
--              SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-+           SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,ModeNo,HwDeviceExtension);
-         break;
-      }
-    }
-    
-    SiS_HandleCRT1(SiS_Pr);
-+
-+   SiS_StrangeStuff(SiS_Pr, HwDeviceExtension);
-    
-    SiS_DisplayOn(SiS_Pr);
-    SiS_SetReg3(SiS_Pr->SiS_P3c6,0xFF);
-@@ -2592,7 +2699,6 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-       }
-    }
--   /* TW: New from 650/LV 1.10.6x and 1.10.7w */
-    if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {
-       if(HwDeviceExtension->jChipType >= SIS_315H) {
-        if(SiS_IsVAMode(SiS_Pr,HwDeviceExtension, BaseAddr)) {
-@@ -2627,7 +2733,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- #ifdef LINUX_XF86
-    if(pScrn) {
--      /* TW: SetPitch: Adapt to virtual size & position */
-+      /* SetPitch: Adapt to virtual size & position */
-       if((ModeNo > 0x13) && (dosetpitch)) {
-          SiS_SetPitch(SiS_Pr, pScrn, BaseAddr);
-       }
-@@ -2637,7 +2743,7 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
-    }
- #endif
--#ifndef LINUX_XF86  /* TW: We never lock registers in XF86 */
-+#ifndef LINUX_XF86  /* We never lock registers in XF86 */
-    if(KeepLockReg == 0xA1) SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);
-    else SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x00);
- #endif
-@@ -2646,10 +2752,15 @@ SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_
- }
- void
--SiS_SetEnableDstn(SiS_Private *SiS_Pr)        /* TW: Called from sis_main.c */
-+SiS_SetEnableDstn(SiS_Private *SiS_Pr, int enable)
-+{
-+   SiS_Pr->SiS_IF_DEF_DSTN = enable ? 1 : 0;
-+}
-+
-+void
-+SiS_SetEnableFstn(SiS_Private *SiS_Pr, int enable)
- {
--   /* For 550 dstn */
--   SiS_Pr->SiS_IF_DEF_DSTN = 1;
-+   SiS_Pr->SiS_IF_DEF_FSTN = enable ? 1 : 0;
- }
- void
-@@ -2663,13 +2774,73 @@ SiS_HandleCRT1(SiS_Private *SiS_Pr)
-   SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x63,0xbf);
- #if 0
--  if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x15) & 0x01))
--     SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x63,0x40);
-+  if(!(SiS_GetReg1(SiS_Pr->SiS_P3c4,0x15) & 0x01)) {
-+     if((SiS_GetReg1(SiS_Pr->SiS_P3c4,0x15) & 0x0a) ||
-+        (SiS_GetReg1(SiS_Pr->SiS_P3c4,0x16) & 0x01)) {
-+        SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x63,0x40);
-+     }
-   }
- #endif
- }
- void
-+SiS_GetSysFlags(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+{
-+   unsigned char cr5f, temp1, temp2;
-+
-+   /* You should use the macros, not these flags directly */
-+
-+   SiS_Pr->SiS_SysFlags = 0;
-+   if(HwDeviceExtension->jChipType == SIS_650) {
-+      cr5f = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5f) & 0xf0;
-+      SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x5c,0x07);
-+      temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5c) & 0xf8;
-+      SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x5c,0xf8);
-+      temp2 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5c) & 0xf8;
-+      if((!temp1) || (temp2)) {
-+         switch(cr5f) {
-+          case 0x80:
-+          case 0x90:
-+          case 0xc0:
-+             SiS_Pr->SiS_SysFlags |= SF_IsM650;  break;
-+          case 0xa0:
-+          case 0xb0:
-+          case 0xe0:
-+             SiS_Pr->SiS_SysFlags |= SF_Is651;   break;
-+       }
-+      } else {
-+         switch(cr5f) {
-+          case 0x90:
-+             temp1 = SiS_GetReg1(SiS_Pr->SiS_P3d4,0x5c) & 0xf8;
-+             switch(temp1) {
-+                case 0x00: SiS_Pr->SiS_SysFlags |= SF_IsM652; break;
-+                case 0x40: SiS_Pr->SiS_SysFlags |= SF_IsM653; break;
-+                default:   SiS_Pr->SiS_SysFlags |= SF_IsM650; break;
-+             }
-+             break;
-+          case 0xb0:
-+             SiS_Pr->SiS_SysFlags |= SF_Is652;  break;
-+          default:
-+             SiS_Pr->SiS_SysFlags |= SF_IsM650; break;
-+       }
-+      }
-+   }
-+}
-+
-+void
-+SiS_StrangeStuff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension)
-+{
-+   if((IS_SIS651) || (IS_SISM650)) {
-+      SiS_SetReg1(SiS_Pr->SiS_VidCapt, 0x3f, 0x00);   /* Fiddle with capture regs */
-+      SiS_SetReg1(SiS_Pr->SiS_VidCapt, 0x00, 0x00);
-+      SiS_SetReg1(SiS_Pr->SiS_VidPlay, 0x00, 0x86);   /* (BIOS does NOT unlock) */
-+      SiS_SetRegAND(SiS_Pr->SiS_VidPlay, 0x30, 0xfe); /* Fiddle with video regs */
-+      SiS_SetRegAND(SiS_Pr->SiS_VidPlay, 0x3f, 0xef);
-+   }
-+   /* !!! This does not support modes < 0x13 !!! */
-+}
-+
-+void
- SiS_SetCRT1Group(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                  USHORT ModeNo,USHORT ModeIdIndex,USHORT BaseAddr)
- {
-@@ -2683,6 +2854,9 @@ SiS_SetCRT1Group(SiS_Private *SiS_Pr, UC
-     }
-   }
-+  /* 550, 651 */
-+  SiS_WhatTheHellIsThis(SiS_Pr,HwDeviceExtension,BaseAddr);
-+
-   SiS_SetSeqRegs(SiS_Pr,ROMAddr,StandTableIndex);
-   SiS_SetMiscRegs(SiS_Pr,ROMAddr,StandTableIndex);
-   SiS_SetCRTCRegs(SiS_Pr,ROMAddr,HwDeviceExtension,StandTableIndex);
-@@ -2759,15 +2933,20 @@ void
- SiS_SetPitch(SiS_Private *SiS_Pr, ScrnInfoPtr pScrn, UShort BaseAddr)
- {
-    SISPtr pSiS = SISPTR(pScrn);
-+   BOOLEAN isslavemode = FALSE;
-+
-+   if( (pSiS->VBFlags & VB_VIDEOBRIDGE) &&
-+       ( ((pSiS->VGAEngine == SIS_300_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0xa0) == 0x20) ||
-+         ((pSiS->VGAEngine == SIS_315_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x50) == 0x10) ) ) {
-+      isslavemode = TRUE;
-+   }
--   /* TW: We need to set pitch for CRT1 if bridge is in SlaveMode, too */
--   if( (pSiS->VBFlags & DISPTYPE_DISP1) ||
--       ( (pSiS->VBFlags & VB_VIDEOBRIDGE) &&
--         ( ((pSiS->VGAEngine == SIS_300_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0xa0) == 0x20) ||
--           ((pSiS->VGAEngine == SIS_315_VGA) && (SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x50) == 0x10) ) ) ) {
-+   /* We need to set pitch for CRT1 if bridge is in slave mode, too */
-+   if( (pSiS->VBFlags & DISPTYPE_DISP1) || (isslavemode) ) {
-       SiS_SetPitchCRT1(SiS_Pr, pScrn, BaseAddr);
-    }
--   if (pSiS->VBFlags & DISPTYPE_DISP2) {
-+   /* We must not set the pitch for CRT2 if bridge is in slave mode */
-+   if( (pSiS->VBFlags & DISPTYPE_DISP2) && (!isslavemode) ) {
-       SiS_SetPitchCRT2(SiS_Pr, pScrn, BaseAddr);
-    }
- }
-@@ -2790,7 +2969,7 @@ SiS_SetPitchCRT2(SiS_Private *SiS_Pr, Sc
-     SISPtr pSiS = SISPTR(pScrn);
-     ULong  HDisplay,temp;
--    HDisplay = pSiS->scrnPitch / 8;
-+    HDisplay = pSiS->scrnPitch2 / 8;
-     /* Unlock CRT2 */
-     if (pSiS->VGAEngine == SIS_315_VGA)
-@@ -2880,7 +3059,6 @@ SiS_SearchModeID(SiS_Private *SiS_Pr, UC
-    return TRUE;
- }
--/* For SiS 300 oem util: Search VBModeID */
- BOOLEAN
- SiS_SearchVBModeID(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT *ModeNo)
- {
-@@ -2946,6 +3124,81 @@ SiS_GetModePtr(SiS_Private *SiS_Pr, UCHA
-    return index;
- }
-+static void
-+SiS_WhatIsThis1a(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+   USHORT temp, tempbl, tempbh;
-+
-+   tempbl = tempbh = somevalue;
-+   temp = SiS_GetReg2(SiS_Pr->SiS_P3cb);
-+   temp &= 0xf0;
-+   tempbl >>= 4;
-+   temp |= tempbl;
-+   SiS_SetReg3(SiS_Pr->SiS_P3cb, temp);
-+   temp = SiS_GetReg2(SiS_Pr->SiS_P3cd);
-+   temp &= 0xf0;
-+   tempbh &= 0x0f;
-+   temp |= tempbh;
-+   SiS_SetReg3(SiS_Pr->SiS_P3cd, temp);
-+}
-+
-+static void
-+SiS_WhatIsThis1b(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+   USHORT temp, tempbl, tempbh;
-+
-+   tempbl = tempbh = somevalue;
-+   temp = SiS_GetReg2(SiS_Pr->SiS_P3cb);
-+   temp &= 0x0f;
-+   tempbl &= 0xf0;
-+   temp |= tempbl;
-+   SiS_SetReg3(SiS_Pr->SiS_P3cb, temp);
-+   temp = SiS_GetReg2(SiS_Pr->SiS_P3cd);
-+   temp &= 0x0f;
-+   tempbh <<= 4;
-+   temp |= tempbh;
-+   SiS_SetReg3(SiS_Pr->SiS_P3cd, temp);
-+}
-+
-+static void
-+SiS_WhatIsThis2b(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+   SiS_WhatIsThis1a(SiS_Pr, somevalue);
-+   SiS_WhatIsThis1b(SiS_Pr, somevalue);
-+}
-+
-+static void
-+SiS_WhatIsThis1(SiS_Private *SiS_Pr)
-+{
-+   SiS_WhatIsThis2b(SiS_Pr, 0);
-+}
-+
-+static void
-+SiS_WhatIsThis2a(SiS_Private *SiS_Pr, USHORT somevalue)
-+{
-+   USHORT temp = somevalue >> 8;
-+
-+   temp &= 0x07;
-+   temp |= (temp << 4);
-+   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1d,temp);
-+   SiS_WhatIsThis2b(SiS_Pr, somevalue);
-+}
-+
-+static void
-+SiS_WhatIsThis2(SiS_Private *SiS_Pr)
-+{
-+   SiS_WhatIsThis2a(SiS_Pr, 0);
-+}
-+
-+void
-+SiS_WhatTheHellIsThis(SiS_Private *SiS_Pr,PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr)
-+{
-+   if(IS_SIS65x) {
-+      SiS_WhatIsThis1(SiS_Pr);
-+      SiS_WhatIsThis2(SiS_Pr);
-+   }
-+}
-+
- void
- SiS_SetSeqRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT StandTableIndex)
- {
-@@ -3027,7 +3280,7 @@ SiS_SetCRTCRegs(SiS_Private *SiS_Pr, UCH
-       (HwDeviceExtension->jChipRevision >= 0x30) ) {             /* for 630S0 */
-     if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
-       if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToTV)) {
--        SiS_SetReg1(SiS_Pr->SiS_P3d4,0x18,0xFE);
-+         SiS_SetReg1(SiS_Pr->SiS_P3d4,0x18,0xFE);
-       }
-     }
-   }
-@@ -3065,7 +3318,7 @@ SiS_SetATTRegs(SiS_Private *SiS_Pr, UCHA
-       }
-       if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
-          if(HwDeviceExtension->jChipType >= SIS_315H) {
--          if(IS_SIS650740 || IS_SIS550) {  
-+          if(IS_SIS550650740660) {
-              /* 315, 330 don't do this */
-              if(SiS_Pr->SiS_VBType & VB_SIS301B302B) { 
-                 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) ARdata=0;
-@@ -3148,7 +3401,7 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
-   USHORT tempah,i,modeflag,j;
- #ifdef SIS315H
-   USHORT temp;
--  USHORT ResInfo,DisplayType;
-+  USHORT ResIndex,DisplayType;
-   const SiS_LCDACRT1DataStruct *LCDACRT1Ptr = NULL;
- #endif
-@@ -3171,7 +3424,7 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
-      /* LCDA */
-      temp = SiS_GetLCDACRT1Ptr(SiS_Pr,ROMAddr,ModeNo,ModeIdIndex,
--                       RefreshRateTableIndex,&ResInfo,&DisplayType);
-+                       RefreshRateTableIndex,&ResIndex,&DisplayType);
-      switch(DisplayType) {
-       case Panel_800x600       : LCDACRT1Ptr = SiS_Pr->SiS_LCDACRT1800x600_1;      break;
-@@ -3197,30 +3450,30 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
-       default:                   LCDACRT1Ptr = SiS_Pr->SiS_LCDACRT11024x768_1;     break;
-      }
--     tempah = (LCDACRT1Ptr+ResInfo)->CR[0];
-+     tempah = (LCDACRT1Ptr+ResIndex)->CR[0];
-      SiS_SetReg1(SiS_Pr->SiS_P3d4,0x00,tempah);
-      for(i=0x01,j=1;i<=0x07;i++,j++){
--       tempah = (LCDACRT1Ptr+ResInfo)->CR[j];
-+       tempah = (LCDACRT1Ptr+ResIndex)->CR[j];
-        SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
-      }
-      for(i=0x10,j=8;i<=0x12;i++,j++){
--       tempah = (LCDACRT1Ptr+ResInfo)->CR[j];
-+       tempah = (LCDACRT1Ptr+ResIndex)->CR[j];
-        SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
-      }
-      for(i=0x15,j=11;i<=0x16;i++,j++){
--       tempah =(LCDACRT1Ptr+ResInfo)->CR[j];
-+       tempah =(LCDACRT1Ptr+ResIndex)->CR[j];
-        SiS_SetReg1(SiS_Pr->SiS_P3d4,i,tempah);
-      }
-      for(i=0x0A,j=13;i<=0x0C;i++,j++){
--       tempah = (LCDACRT1Ptr+ResInfo)->CR[j];
-+       tempah = (LCDACRT1Ptr+ResIndex)->CR[j];
-        SiS_SetReg1(SiS_Pr->SiS_P3c4,i,tempah);
-      }
--     tempah = (LCDACRT1Ptr+ResInfo)->CR[16];
-+     tempah = (LCDACRT1Ptr+ResIndex)->CR[16];
-      tempah &= 0x0E0;
-      SiS_SetReg1(SiS_Pr->SiS_P3c4,0x0E,tempah);
--     tempah = (LCDACRT1Ptr+ResInfo)->CR[16];
-+     tempah = (LCDACRT1Ptr+ResIndex)->CR[16];
-      tempah &= 0x01;
-      tempah <<= 5;
-      if(modeflag & DoubleScanMode)  tempah |= 0x080;
-@@ -3301,7 +3554,7 @@ SiS_SetCRT1CRTC(SiS_Private *SiS_Pr, UCH
- BOOLEAN
- SiS_GetLCDACRT1Ptr(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
--                 USHORT RefreshRateTableIndex,USHORT *ResInfo,
-+                 USHORT RefreshRateTableIndex,USHORT *ResIndex,
-                  USHORT *DisplayType)
-  {
-   USHORT tempbx=0,modeflag=0;
-@@ -3320,7 +3573,7 @@ SiS_GetLCDACRT1Ptr(SiS_Private *SiS_Pr, 
-   if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 32;
-   if(modeflag & HalfDCLK)                 tempbx += 16;
--  *ResInfo = CRT2CRTC & 0x3F;
-+  *ResIndex = CRT2CRTC & 0x3F;
-   *DisplayType = tempbx;
-   return 1;
-@@ -3490,11 +3743,11 @@ SiS_SetCRT1ModeRegs(SiS_Private *SiS_Pr,
-   data2 = 0;
-   if(ModeNo > 0x13) {
--    if(SiS_Pr->SiS_ModeType > 0x02) {
--       data2 |= 0x02;
--       data3 = (SiS_Pr->SiS_ModeType - ModeVGA) << 2;
--       data2 |= data3;
--    }
-+     if(SiS_Pr->SiS_ModeType > 0x02) {
-+        data2 |= 0x02;
-+        data3 = (SiS_Pr->SiS_ModeType - ModeVGA) << 2;
-+        data2 |= data3;
-+     }
-   }
- #ifdef TWDEBUG
-   xf86DrvMsg(0, X_INFO, "Debug: Mode infoflag = %x, Chiptype %d\n", 
-@@ -3517,7 +3770,8 @@ SiS_SetCRT1ModeRegs(SiS_Private *SiS_Pr,
-   if(HwDeviceExtension->jChipType != SIS_300) {
-      data = 0x0000;
-      if(infoflag & InterlaceMode) {
--        if(xres == 1024) data = 0x0035;
-+        if(xres <= 800)  data = 0x0020;
-+        else if(xres <= 1024) data = 0x0035;
-         else data = 0x0048;
-      }
-      data2 = data & 0x00FF;
-@@ -3549,6 +3803,7 @@ SiS_SetCRT1ModeRegs(SiS_Private *SiS_Pr,
-      } else {
-         SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x0F,0xB7);
-      }
-+     /* 651 BIOS does something for mode 0x12 here */
-   }
-   if(HwDeviceExtension->jChipType != SIS_300) {
-@@ -3679,7 +3934,7 @@ SiS_SetVCLKState(SiS_Private *SiS_Pr, UC
-     if(VCLK >= 150) data2 |= 0x08;            /* VCLK > 150 */
-     SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x32,0xF7,data2);
--  } else {                                            /* 310/325 series */
-+  } else {                                            /* 315 series */
-     data = 0;
-     if(VCLK >= 166) data |= 0x0c;             /* TW: Was 200; is 166 in 650, 315 and 330 BIOSes */
-@@ -3688,12 +3943,6 @@ SiS_SetVCLKState(SiS_Private *SiS_Pr, UC
-     if(VCLK >= 166) {                         /* TW: Was 200, is 166 in 650, 315 and 330 BIOSes */
-        SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1f,0xe7);
-     }
--#if 0 /* Not done in 315 and 650/301LV/LVDS BIOSes: */
--    data = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x1F);                /* DAC pedestal */
--    data &= 0xE7;
--    if(VCLK<200) data |= 0x10;
--    SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1F,data);          /* DAC pedestal */
--#endif
-   }
-   data2 = 0x03;
-@@ -3918,7 +4167,8 @@ GetDRAMSize(SiS_Private *SiS_Pr, PSIS_HW
-   } else if((HwDeviceExtension->jChipType == SIS_550) ||
-             (HwDeviceExtension->jChipType == SIS_740) ||
--            (HwDeviceExtension->jChipType == SIS_650)) {
-+            (HwDeviceExtension->jChipType == SIS_650) ||
-+          (HwDeviceExtension->jChipType == SIS_660)) {
-       counter = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14) & 0x3F;
-               counter++;
-@@ -4728,7 +4978,7 @@ SiS_GetSenseStatus(SiS_Private *SiS_Pr, 
-           SiS_Pr->SiS_SetFlag = 0x00;
-           SiS_Pr->SiS_ModeType = ModeVGA;
-           SiS_Pr->SiS_VBInfo = SetCRT2ToRAMDAC |LoadDACFlag |SetInSlaveMode;
--          SiS_SetCRT2Group301(SiS_Pr, BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
-+          SiS_SetCRT2Group(SiS_Pr, BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
-           for(i=0;i<20;i++) {
-             SiS_LongWait(SiS_Pr);
-           }
-@@ -4766,7 +5016,7 @@ SiS_GetSenseStatus(SiS_Private *SiS_Pr, 
- #ifdef SIS315H
-          if(HwDeviceExtension->jChipType >= SIS_315H) {
-               OutputSelect = ROMAddr[0xf3];
--              if(HwDeviceExtension->jChipType == SIS_330) {
-+              if(HwDeviceExtension->jChipType >= SIS_330) {
-                    OutputSelect = ROMAddr[0x11b];
-               }
-          }
-@@ -4814,7 +5064,7 @@ SiS_GetSenseStatus(SiS_Private *SiS_Pr, 
-       SiS_SetReg1(SiS_Pr->SiS_Part2Port,0x00,P2reg0);
-       if(!(P2reg0 & 0x20)) {
-         SiS_Pr->SiS_VBInfo = DisableCRT2Display;
--        SiS_SetCRT2Group301(SiS_Pr,BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
-+        SiS_SetCRT2Group(SiS_Pr,BaseAddr,ROMAddr,SenseModeNo,HwDeviceExtension);
-       }
-     }
-   }
-@@ -4884,111 +5134,6 @@ SiS_SenseCHTV(SiS_Private *SiS_Pr)
- }
- #endif /* LINUXBIOS */
--/*  ================ for TC only =================  */
--
--#ifdef TC
--
--int
--INT1AReturnCode(union REGS regs)
--{
--  if (regs.x.cflag)
--  {
--    /*printf("Error to find pci device!\n"); */
--    return 1;
--  }
--
--  switch(regs.h.ah)
--  {
--    case 0: return 0;
--            break;
--    case 0x81: printf("Function not support\n");
--               break;
--    case 0x83: printf("bad vendor id\n");
--               break;
--    case 0x86: printf("device not found\n");
--               break;
--    case 0x87: printf("bad register number\n");
--               break;
--    case 0x88: printf("set failed\n");
--               break;
--    case 0x89: printf("buffer too small");
--               break;
--  }
--  return 1;
--}
--
--unsigned
--FindPCIIOBase(unsigned index,unsigned deviceid)
--{
--  union REGS regs;
--
--  regs.h.ah = 0xb1;  /*PCI_FUNCTION_ID */
--  regs.h.al = 0x02;  /*FIND_PCI_DEVICE */
--  regs.x.cx = deviceid;
--  regs.x.dx = 0x1039;
--  regs.x.si = index;  /* find n-th device */
--
--  int86(0x1A, &regs, &regs);
--
--  if (INT1AReturnCode(regs)!=0)
--    return 0;
--
--  /* regs.h.bh *//* bus number */
--  /* regs.h.bl *//* device number */
--  regs.h.ah = 0xb1;  /*PCI_FUNCTION_ID */
--  regs.h.al = 0x09;  /*READ_CONFIG_WORD */
--  regs.x.cx = deviceid;
--  regs.x.dx = 0x1039;
--  regs.x.di = 0x18;  /* register number */
--  int86(0x1A, &regs, &regs);
--
--  if (INT1AReturnCode(regs)!=0)
--    return 0;
--  return regs.x.cx;
--}
--
--
--void
--main(int argc, char *argv[])
--{
--  SIS_HW_DEVICE_INFO  HwDeviceExtension;
--  USHORT temp;
--  USHORT ModeNo;
--
--  /*HwDeviceExtension.pjVirtualRomBase =(PUCHAR) MK_FP(0xC000,0); */
--  /*HwDeviceExtension.pjVideoMemoryAddress = (PUCHAR)MK_FP(0xA000,0);*/
--
--#ifdef SIS300  
--  HwDeviceExtension.ulIOAddress = (FindPCIIOBase(0,0x6300)&0xFF80) + 0x30;
--  HwDeviceExtension.jChipType = SIS_630;
--#endif
--
--#ifdef SIS315H  
--//  HwDeviceExtension.ulIOAddress = (FindPCIIOBase(0,0x5315)&0xFF80) + 0x30;
--//  HwDeviceExtension.jChipType = SIS_550;
--  HwDeviceExtension.ulIOAddress = (FindPCIIOBase(0,0x325)&0xFF80) + 0x30;
--  HwDeviceExtension.jChipType = SIS_315H;
--#endif
--
--  HwDeviceExtension.ujVBChipID = VB_CHIP_301;
--  strcpy(HwDeviceExtension.szVBIOSVer,"0.84");
--  HwDeviceExtension.bSkipDramSizing = FALSE;
--  HwDeviceExtension.ulVideoMemorySize = 0;
--  if(argc==2) {
--    ModeNo=atoi(argv[1]);
--  }
--  else {
--    ModeNo=0x2e;
--    /*ModeNo=0x37; */ /* 1024x768x 4bpp */
--    /*ModeNo=0x38; *//* 1024x768x 8bpp */
--    /*ModeNo=0x4A; *//* 1024x768x 16bpp */
--    /*ModeNo=0x47;*/ /* 800x600x 16bpp */
--  }
-- /* SiSInit(SiS_Pr, &HwDeviceExtension);*/
--  SiSSetMode(SiS_Pr, &HwDeviceExtension, ModeNo);
--}
--#endif /* TC END */
--
- /* ================ XFREE86 ================= */
- /* Helper functions */
-@@ -5000,44 +5145,78 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
-    SISPtr pSiS = SISPTR(pScrn);
-    int    out_n, out_dn, out_div, out_sbit, out_scale;
-    int    depth = pSiS->CurrentLayout.bitsPerPixel;
--   
--#ifdef SISDUALHEAD
--   if( ((!pSiS->DualHeadMode) && (VBFlags & DISPTYPE_DISP2)) ||
--       ((pSiS->DualHeadMode) && (!pSiS->SecondHead)) ) return 0;
--#else      
--   if(VBFlags & DISPTYPE_DISP2) return 0; 
--#endif   
-+   unsigned int vclk[5];
-+
-+#define Midx         0
-+#define Nidx         1
-+#define VLDidx       2
-+#define Pidx         3
-+#define PSNidx       4
-+
-+   pSiS->SiS_Pr->CModeFlag = 0;
-    
-    pSiS->SiS_Pr->CDClock = mode->Clock;
--   
-+
-    pSiS->SiS_Pr->CHDisplay = mode->HDisplay;
-    pSiS->SiS_Pr->CHSyncStart = mode->HSyncStart;
-    pSiS->SiS_Pr->CHSyncEnd = mode->HSyncEnd;
-    pSiS->SiS_Pr->CHTotal = mode->HTotal;
--   pSiS->SiS_Pr->CHBlankStart = pSiS->SiS_Pr->CHDisplay;
--   pSiS->SiS_Pr->CHBlankEnd = pSiS->SiS_Pr->CHTotal;
--   
-+
-    pSiS->SiS_Pr->CVDisplay = mode->VDisplay;
-    pSiS->SiS_Pr->CVSyncStart = mode->VSyncStart;
-    pSiS->SiS_Pr->CVSyncEnd = mode->VSyncEnd;
-    pSiS->SiS_Pr->CVTotal = mode->VTotal;
-+
-+   pSiS->SiS_Pr->CFlags = mode->Flags;
-+
-+   if(pSiS->SiS_Pr->CFlags & V_INTERLACE) {
-+         pSiS->SiS_Pr->CVDisplay >>= 1;
-+       pSiS->SiS_Pr->CVSyncStart >>= 1;
-+       pSiS->SiS_Pr->CVSyncEnd >>= 1;
-+       pSiS->SiS_Pr->CVTotal >>= 1;
-+   }
-+   if(pSiS->SiS_Pr->CFlags & V_DBLSCAN) {
-+         /* pSiS->SiS_Pr->CDClock <<= 1; */
-+       pSiS->SiS_Pr->CVDisplay <<= 1;
-+       pSiS->SiS_Pr->CVSyncStart <<= 1;
-+       pSiS->SiS_Pr->CVSyncEnd <<= 1;
-+       pSiS->SiS_Pr->CVTotal <<= 1;
-+   }
-+
-+   pSiS->SiS_Pr->CHBlankStart = pSiS->SiS_Pr->CHDisplay;
-+   pSiS->SiS_Pr->CHBlankEnd = pSiS->SiS_Pr->CHTotal;
-    pSiS->SiS_Pr->CVBlankStart = pSiS->SiS_Pr->CVSyncStart - 1;
-    pSiS->SiS_Pr->CVBlankEnd = pSiS->SiS_Pr->CVTotal;
--   
--   pSiS->SiS_Pr->CFlags = mode->Flags;
--   SiS_compute_vclk(pSiS->SiS_Pr->CDClock, &out_n, &out_dn, &out_div, &out_sbit, &out_scale);
--   
-+   if(SiS_compute_vclk(pSiS->SiS_Pr->CDClock, &out_n, &out_dn, &out_div, &out_sbit, &out_scale)) {
-+      pSiS->SiS_Pr->CSR2B = (out_div == 2) ? 0x80 : 0x00;
-+      pSiS->SiS_Pr->CSR2B |= ((out_n - 1) & 0x7f);
-+      pSiS->SiS_Pr->CSR2C = (out_dn - 1) & 0x1f;
-+      pSiS->SiS_Pr->CSR2C |= (((out_scale - 1) & 3) << 5);
-+      pSiS->SiS_Pr->CSR2C |= ((out_sbit & 0x01) << 7);
-+#ifdef TWDEBUG
-+      xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock %d: n %d dn %d div %d sb %d sc %d\n",
-+              pSiS->SiS_Pr->CDClock, out_n, out_dn, out_div, out_sbit, out_scale);
-+#endif
-+   } else {
-+      SiSCalcClock(pScrn, pSiS->SiS_Pr->CDClock, 2, vclk);
-+      pSiS->SiS_Pr->CSR2B = (vclk[VLDidx] == 2) ? 0x80 : 0x00;
-+      pSiS->SiS_Pr->CSR2B |= (vclk[Midx] - 1) & 0x7f;
-+      pSiS->SiS_Pr->CSR2C = (vclk[Nidx] - 1) & 0x1f;
-+      if(vclk[Pidx] <= 4) {
-+         /* postscale 1,2,3,4 */
-+         pSiS->SiS_Pr->CSR2C |= ((vclk[Pidx] - 1) & 3) << 5;
-+      } else {
-+         /* postscale 6,8 */
-+         pSiS->SiS_Pr->CSR2C |= (((vclk[Pidx] / 2) - 1) & 3) << 5;
-+       pSiS->SiS_Pr->CSR2C |= 0x80;
-+      }
- #ifdef TWDEBUG
--   xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock %d: n %d dn %d div %d sb %d sc %d\n",
--              pSiS->SiS_Pr->CDClock, out_n, out_dn, out_div, out_sbit, out_scale);
--#endif        
--
--   pSiS->SiS_Pr->CSR2B = (out_div == 2) ? 0x80 : 0x00;
--   pSiS->SiS_Pr->CSR2B |= ((out_n - 1) & 0x7f);
--   pSiS->SiS_Pr->CSR2C = (out_dn - 1) & 0x1f;
--   pSiS->SiS_Pr->CSR2C |= (((out_scale - 1) & 3) << 5);
--   pSiS->SiS_Pr->CSR2C |= ((out_sbit & 0x01) << 7);
-+      xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock %d: n %d dn %d div %d sc %d\n",
-+              pSiS->SiS_Pr->CDClock, vclk[Midx], vclk[Nidx], vclk[VLDidx], vclk[Pidx]);
-+#endif
-+   }
-+
-    pSiS->SiS_Pr->CSRClock = (pSiS->SiS_Pr->CDClock / 1000) + 1;
-    pSiS->SiS_Pr->CCRT1CRTC[0]  =  ((pSiS->SiS_Pr->CHTotal >> 3) - 5) & 0xff;
-@@ -5045,9 +5224,9 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
-    pSiS->SiS_Pr->CCRT1CRTC[2]  =  (pSiS->SiS_Pr->CHBlankStart >> 3) - 1;
-    pSiS->SiS_Pr->CCRT1CRTC[3]  =  (((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1) & 0x1F) | 0x80;
-    pSiS->SiS_Pr->CCRT1CRTC[4]  =  (pSiS->SiS_Pr->CHSyncStart >> 3) + 3;
--   pSiS->SiS_Pr->CCRT1CRTC[5]  =  ((((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1) & 0x20) << 2) | 
-+   pSiS->SiS_Pr->CCRT1CRTC[5]  =  ((((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1) & 0x20) << 2) |
-                                         (((pSiS->SiS_Pr->CHSyncEnd >> 3) + 3) & 0x1F);
--   
-+
-    pSiS->SiS_Pr->CCRT1CRTC[6]  =  (pSiS->SiS_Pr->CVTotal - 2) & 0xFF;
-    pSiS->SiS_Pr->CCRT1CRTC[7]  =  (((pSiS->SiS_Pr->CVTotal - 2) & 0x100) >> 8)
-                               | (((pSiS->SiS_Pr->CVDisplay - 1) & 0x100) >> 7)
-@@ -5057,50 +5236,50 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
-                               | (((pSiS->SiS_Pr->CVTotal - 2) & 0x200)   >> 4)
-                               | (((pSiS->SiS_Pr->CVDisplay - 1) & 0x200) >> 3)
-                               | ((pSiS->SiS_Pr->CVSyncStart & 0x200) >> 2);
--    
-+
-    pSiS->SiS_Pr->CCRT1CRTC[16] = ((((pSiS->SiS_Pr->CVBlankStart - 1) & 0x200) >> 4) >> 5);    /* cr9 */
--    
--#if 0    
-+
-+#if 0
-    if (mode->VScan >= 32)
-       regp->CRTC[9] |= 0x1F;
-    else if (mode->VScan > 1)
-       regp->CRTC[9] |= mode->VScan - 1;
--#endif        
-+#endif
--   pSiS->SiS_Pr->CCRT1CRTC[8] =  (pSiS->SiS_Pr->CVSyncStart - 1) & 0xFF;      /* cr10 */
--   pSiS->SiS_Pr->CCRT1CRTC[9] =  ((pSiS->SiS_Pr->CVSyncEnd - 1) & 0x0F) | 0x80;       /* cr11 */
--   pSiS->SiS_Pr->CCRT1CRTC[10] = (pSiS->SiS_Pr->CVDisplay - 1) & 0xFF;                /* cr12 */
--   pSiS->SiS_Pr->CCRT1CRTC[11] = (pSiS->SiS_Pr->CVBlankStart - 1) & 0xFF;     /* cr15 */
--   pSiS->SiS_Pr->CCRT1CRTC[12] = (pSiS->SiS_Pr->CVBlankEnd - 1) & 0xFF;               /* cr16 */
--   
--   pSiS->SiS_Pr->CCRT1CRTC[13] = 
-+   pSiS->SiS_Pr->CCRT1CRTC[8] =  (pSiS->SiS_Pr->CVSyncStart     ) & 0xFF;             /* cr10 */
-+   pSiS->SiS_Pr->CCRT1CRTC[9] =  ((pSiS->SiS_Pr->CVSyncEnd      ) & 0x0F) | 0x80;     /* cr11 */
-+   pSiS->SiS_Pr->CCRT1CRTC[10] = (pSiS->SiS_Pr->CVDisplay    - 1) & 0xFF;             /* cr12 */
-+   pSiS->SiS_Pr->CCRT1CRTC[11] = (pSiS->SiS_Pr->CVBlankStart - 1) & 0xFF;             /* cr15 */
-+   pSiS->SiS_Pr->CCRT1CRTC[12] = (pSiS->SiS_Pr->CVBlankEnd   - 1) & 0xFF;             /* cr16 */
-+
-+   pSiS->SiS_Pr->CCRT1CRTC[13] =
-                         GETBITSTR((pSiS->SiS_Pr->CVTotal     -2), 10:10, 0:0) |
-                         GETBITSTR((pSiS->SiS_Pr->CVDisplay   -1), 10:10, 1:1) |
-                         GETBITSTR((pSiS->SiS_Pr->CVBlankStart-1), 10:10, 2:2) |
-                         GETBITSTR((pSiS->SiS_Pr->CVSyncStart   ), 10:10, 3:3) |
-                         GETBITSTR((pSiS->SiS_Pr->CVBlankEnd  -1),   8:8, 4:4) |
--                        GETBITSTR((pSiS->SiS_Pr->CVSyncEnd   -1),   4:4, 5:5) ;  
-+                        GETBITSTR((pSiS->SiS_Pr->CVSyncEnd     ),   4:4, 5:5) ;
--   pSiS->SiS_Pr->CCRT1CRTC[14] = 
-+   pSiS->SiS_Pr->CCRT1CRTC[14] =
-                         GETBITSTR((pSiS->SiS_Pr->CHTotal      >> 3) - 5, 9:8, 1:0) |
-                         GETBITSTR((pSiS->SiS_Pr->CHDisplay    >> 3) - 1, 9:8, 3:2) |
-                         GETBITSTR((pSiS->SiS_Pr->CHBlankStart >> 3) - 1, 9:8, 5:4) |
-                         GETBITSTR((pSiS->SiS_Pr->CHSyncStart  >> 3) + 3, 9:8, 7:6) ;
--        
-+
-    pSiS->SiS_Pr->CCRT1CRTC[15] =
-                         GETBITSTR((pSiS->SiS_Pr->CHBlankEnd >> 3) - 1, 7:6, 1:0) |
--                        GETBITSTR((pSiS->SiS_Pr->CHSyncEnd  >> 3) + 3, 5:5, 2:2) ; 
--                      
-+                        GETBITSTR((pSiS->SiS_Pr->CHSyncEnd  >> 3) + 3, 5:5, 2:2) ;
-+
-    switch(depth) {
--   case 8:                    
--              pSiS->SiS_Pr->CModeFlag = 0x223b;
-+   case 8:
-+              pSiS->SiS_Pr->CModeFlag |= 0x223b;
-       break;
--   case 16:                   
--              pSiS->SiS_Pr->CModeFlag = 0x227d;
-+   case 16:
-+              pSiS->SiS_Pr->CModeFlag |= 0x227d;
-       break;
--   case 32:                   
--              pSiS->SiS_Pr->CModeFlag = 0x22ff;
-+   case 32:
-+              pSiS->SiS_Pr->CModeFlag |= 0x22ff;
-       break;          
-    default: 
-       return 0;       
-@@ -5114,9 +5293,9 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
-       pSiS->SiS_Pr->CModeFlag |= LineCompareOff;
-    if(pSiS->SiS_Pr->CFlags & V_CLKDIV2)
-         pSiS->SiS_Pr->CModeFlag |= HalfDCLK;
--   
-+
-    pSiS->SiS_Pr->CInfoFlag = 0x0007;
--   if(pSiS->SiS_Pr->CFlags & V_NHSYNC) 
-+   if(pSiS->SiS_Pr->CFlags & V_NHSYNC)
-       pSiS->SiS_Pr->CInfoFlag |= 0x4000;
-    if(pSiS->SiS_Pr->CFlags & V_NVSYNC) 
-       pSiS->SiS_Pr->CInfoFlag |= 0x8000;
-@@ -5152,13 +5331,13 @@ SiS_CheckBuildCustomMode(ScrnInfoPtr pSc
-       pSiS->SiS_Pr->CSR2B,
-       pSiS->SiS_Pr->CSR2C,
-       pSiS->SiS_Pr->CSRClock);
--#endif        
-+#endif
-    return 1;
- }
- /* TW: Build a list of supported modes */
- DisplayModePtr
--SiSBuildBuiltInModeList(ScrnInfoPtr pScrn)
-+SiSBuildBuiltInModeList(ScrnInfoPtr pScrn, BOOLEAN includelcdmodes, BOOLEAN isfordvi)
- {
-    SISPtr         pSiS = SISPTR(pScrn);
-    unsigned short VRE, VBE, VRS, VBS, VDE, VT;
-@@ -5166,11 +5345,16 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-    unsigned char  sr_data, cr_data, cr_data2, cr_data3;
-    unsigned char  sr2b, sr2c;
-    float          num, denum, postscalar, divider;
--   int            A, B, C, D, E, F, temp, i, j, index, vclkindex;
--   DisplayModePtr new = NULL, current = NULL, first = NULL, backup = NULL;
-+   int            A, B, C, D, E, F, temp, i, j, k, l, index, vclkindex;
-+   DisplayModePtr new = NULL, current = NULL, first = NULL;
-+   BOOLEAN        done = FALSE;
-+#if 0
-+   DisplayModePtr backup = NULL;
-+#endif
-    pSiS->backupmodelist = NULL;
--   
-+   pSiS->AddedPlasmaModes = FALSE;
-+
-    /* Initialize our pointers */
-    if(pSiS->VGAEngine == SIS_300_VGA) {
- #ifdef SIS300
-@@ -5194,15 +5378,20 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-       if(pSiS->VGAEngine == SIS_300_VGA) index &= 0x3F;
- #endif      
--      if(((pSiS->SiS_Pr->SiS_RefIndex[i].XRes < 512) && (!pSiS->DSTN)) ||
--               ((pSiS->DSTN) &&
--        (pSiS->SiS_Pr->SiS_RefIndex[i].XRes < 512) &&
--        (pSiS->SiS_Pr->SiS_RefIndex[i].XRes != 320) &&
--        (pSiS->SiS_Pr->SiS_RefIndex[i].YRes != 480)))  {
-+      /* 0x5a (320x240) is a pure FTSN mode, not DSTN! */
-+      if((!pSiS->FSTN) &&
-+       (pSiS->SiS_Pr->SiS_RefIndex[i].ModeID == 0x5a))  {
-            i++;
-                  continue;
-       }
--      
-+      if((pSiS->FSTN) &&
-+         (pSiS->SiS_Pr->SiS_RefIndex[i].XRes == 320) &&
-+       (pSiS->SiS_Pr->SiS_RefIndex[i].YRes == 240) &&
-+       (pSiS->SiS_Pr->SiS_RefIndex[i].ModeID != 0x5a)) {
-+         i++;
-+         continue;
-+      }
-+
-       if(!(new = xalloc(sizeof(DisplayModeRec)))) return first;
-       memset(new, 0, sizeof(DisplayModeRec));
-       if(!(new->name = xalloc(10))) {
-@@ -5216,13 +5405,13 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-       }
-       current = new;
--      
-+
-       sprintf(current->name, "%dx%d", pSiS->SiS_Pr->SiS_RefIndex[i].XRes,
-                                       pSiS->SiS_Pr->SiS_RefIndex[i].YRes);
-       current->status = MODE_OK;
--      current->type = M_T_DEFAULT; 
-+      current->type = M_T_DEFAULT;
-       vclkindex = pSiS->SiS_Pr->SiS_RefIndex[i].Ext_CRTVCLK;
-       if(pSiS->VGAEngine == SIS_300_VGA) vclkindex &= 0x3F;
-@@ -5235,7 +5424,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-               ( (((sr2c >> 5) & 0x03) == 0x02) ? 6.0 : 8.0) : (((sr2c >> 5) & 0x03) + 1.0);
-       num = (sr2b & 0x7f) + 1.0;
-       denum = (sr2c & 0x1f) + 1.0;
--      
-+
- #ifdef TWDEBUG
-       xf86DrvMsg(0, X_INFO, "------------\n");
-       xf86DrvMsg(0, X_INFO, "sr2b: %x sr2c %x div %f ps %f num %f denum %f\n",
-@@ -5303,10 +5492,29 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-       D = B - F - C;
--      current->HDisplay   = (E * 8);
--      current->HSyncStart = (E * 8) + (F * 8);
--      current->HSyncEnd   = (E * 8) + (F * 8) + (C * 8);
--      current->HTotal     = (E * 8) + (F * 8) + (C * 8) + (D * 8);
-+      if((pSiS->SiS_Pr->SiS_RefIndex[i].XRes == 320) &&
-+       ((pSiS->SiS_Pr->SiS_RefIndex[i].YRes == 200) ||
-+        (pSiS->SiS_Pr->SiS_RefIndex[i].YRes == 240))) {
-+
-+       /* Terrible hack, but correct CRTC data for
-+        * these modes only produces a black screen...
-+        * (HRE is 0, leading into a too large C and
-+        * a negative D. The CRT controller does not
-+        * seem to like correcting HRE to 50
-+        */
-+       current->HDisplay   = 320;
-+         current->HSyncStart = 328;
-+         current->HSyncEnd   = 376;
-+         current->HTotal     = 400;
-+
-+      } else {
-+
-+         current->HDisplay   = (E * 8);
-+         current->HSyncStart = (E * 8) + (F * 8);
-+         current->HSyncEnd   = (E * 8) + (F * 8) + (C * 8);
-+         current->HTotal     = (E * 8) + (F * 8) + (C * 8) + (D * 8);
-+
-+      }
- #ifdef TWDEBUG
-       xf86DrvMsg(0, X_INFO,
-@@ -5430,7 +5638,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-        current->VSyncStart <<= 1;
-        current->VSyncEnd <<= 1;
-        current->VTotal <<= 1;
--       current->VTotal |= 1; 
-+       current->VTotal |= 1;
-       }
-       if(current->Flags & V_DBLSCAN) {
-          current->Clock >>= 1;
-@@ -5440,6 +5648,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-        current->VTotal >>= 1;
-       }
-+#if 0
-       if((backup = xalloc(sizeof(DisplayModeRec)))) {
-          if(!pSiS->backupmodelist) pSiS->backupmodelist = backup;
-        else {
-@@ -5458,6 +5667,7 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-        backup->Flags = current->Flags;
-        backup->Clock = current->Clock;
-       }
-+#endif
- #ifdef TWDEBUG
-       xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-@@ -5470,6 +5680,187 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr
-       i++;
-    }
-+   /* Add non-standard LCD modes for panel's detailed timings */
-+
-+   if(!includelcdmodes) return first;
-+
-+   xf86DrvMsg(0, X_INFO, "Checking database for vendor %x, product %x\n",
-+      pSiS->SiS_Pr->CP_Vendor, pSiS->SiS_Pr->CP_Product);
-+
-+   i = 0;
-+   while((!done) && (SiS_PlasmaTable[i].vendor) && (pSiS->SiS_Pr->CP_Vendor)) {
-+
-+     if(SiS_PlasmaTable[i].vendor == pSiS->SiS_Pr->CP_Vendor) {
-+
-+        for(j=0; j<SiS_PlasmaTable[i].productnum; j++) {
-+
-+          if(SiS_PlasmaTable[i].product[j] == pSiS->SiS_Pr->CP_Product) {
-+
-+             xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-+                "Identified %s panel, adding specific modes\n",
-+                SiS_PlasmaTable[i].plasmaname);
-+
-+             for(k=0; k<SiS_PlasmaTable[i].modenum; k++) {
-+
-+                if(isfordvi) {
-+                   if(!(SiS_PlasmaTable[i].plasmamodes[k] & 0x80)) continue;
-+                } else {
-+                   if(!(SiS_PlasmaTable[i].plasmamodes[k] & 0x40)) continue;
-+                }
-+
-+                if(!(new = xalloc(sizeof(DisplayModeRec)))) return first;
-+
-+                  memset(new, 0, sizeof(DisplayModeRec));
-+                  if(!(new->name = xalloc(10))) {
-+                           xfree(new);
-+                   return first;
-+                  }
-+                  if(!first) first = new;
-+                  if(current) {
-+                     current->next = new;
-+                   new->prev = current;
-+                  }
-+
-+                  current = new;
-+
-+                pSiS->AddedPlasmaModes = TRUE;
-+
-+                l = SiS_PlasmaTable[i].plasmamodes[k] & 0x3f;
-+
-+                sprintf(current->name, "%dx%d", SiS_PlasmaMode[l].HDisplay,
-+                                                  SiS_PlasmaMode[l].VDisplay);
-+
-+                  current->status = MODE_OK;
-+
-+                  current->type = M_T_BUILTIN;
-+
-+                current->Clock = SiS_PlasmaMode[l].clock;
-+                current->SynthClock = current->Clock;
-+
-+                  current->HDisplay   = SiS_PlasmaMode[l].HDisplay;
-+                  current->HSyncStart = current->HDisplay + SiS_PlasmaMode[l].HFrontPorch;
-+                  current->HSyncEnd   = current->HSyncStart + SiS_PlasmaMode[l].HSyncWidth;
-+                  current->HTotal     = SiS_PlasmaMode[l].HTotal;
-+
-+                current->VDisplay   = SiS_PlasmaMode[l].VDisplay;
-+                  current->VSyncStart = current->VDisplay + SiS_PlasmaMode[l].VFrontPorch;
-+                  current->VSyncEnd   = current->VSyncStart + SiS_PlasmaMode[l].VSyncWidth;
-+                  current->VTotal     = SiS_PlasmaMode[l].VTotal;
-+
-+                  current->CrtcHDisplay = current->HDisplay;
-+                  current->CrtcHBlankStart = current->HSyncStart;
-+                  current->CrtcHSyncStart = current->HSyncStart;
-+                  current->CrtcHSyncEnd = current->HSyncEnd;
-+                  current->CrtcHBlankEnd = current->HSyncEnd;
-+                  current->CrtcHTotal = current->HTotal;
-+
-+                  current->CrtcVDisplay = current->VDisplay;
-+                  current->CrtcVBlankStart = current->VSyncStart;
-+                  current->CrtcVSyncStart = current->VSyncStart;
-+                  current->CrtcVSyncEnd = current->VSyncEnd;
-+                  current->CrtcVBlankEnd = current->VSyncEnd;
-+                  current->CrtcVTotal = current->VTotal;
-+
-+                  if(SiS_PlasmaMode[l].SyncFlags & SIS_PL_HSYNCP)
-+                     current->Flags |= V_PHSYNC;
-+                  else
-+                     current->Flags |= V_NHSYNC;
-+
-+                  if(SiS_PlasmaMode[l].SyncFlags & SIS_PL_VSYNCP)
-+                     current->Flags |= V_PVSYNC;
-+                  else
-+                     current->Flags |= V_NVSYNC;
-+
-+                if(current->HDisplay > pSiS->LCDwidth)
-+                   pSiS->LCDwidth = pSiS->SiS_Pr->CP_MaxX = current->HDisplay;
-+                if(current->VDisplay > pSiS->LCDheight)
-+                   pSiS->LCDheight = pSiS->SiS_Pr->CP_MaxY = current->VDisplay;
-+
-+               }
-+             done = TRUE;
-+             break;
-+          }
-+      }
-+     }
-+
-+     i++;
-+
-+   }
-+
-+   if(pSiS->SiS_Pr->CP_HaveCustomData) {
-+
-+      for(i=0; i<7; i++) {
-+
-+         if(pSiS->SiS_Pr->CP_DataValid[i]) {
-+
-+            if(!(new = xalloc(sizeof(DisplayModeRec)))) return first;
-+
-+            memset(new, 0, sizeof(DisplayModeRec));
-+            if(!(new->name = xalloc(10))) {
-+                      xfree(new);
-+              return first;
-+            }
-+            if(!first) first = new;
-+            if(current) {
-+               current->next = new;
-+             new->prev = current;
-+            }
-+
-+            current = new;
-+
-+            sprintf(current->name, "%dx%d", pSiS->SiS_Pr->CP_HDisplay[i],
-+                                            pSiS->SiS_Pr->CP_VDisplay[i]);
-+
-+            current->status = MODE_OK;
-+
-+            current->type = M_T_BUILTIN;
-+
-+            current->Clock = pSiS->SiS_Pr->CP_Clock[i];
-+            current->SynthClock = current->Clock;
-+
-+            current->HDisplay   = pSiS->SiS_Pr->CP_HDisplay[i];
-+            current->HSyncStart = pSiS->SiS_Pr->CP_HSyncStart[i];
-+            current->HSyncEnd   = pSiS->SiS_Pr->CP_HSyncEnd[i];
-+            current->HTotal     = pSiS->SiS_Pr->CP_HTotal[i];
-+
-+            current->VDisplay   = pSiS->SiS_Pr->CP_VDisplay[i];
-+            current->VSyncStart = pSiS->SiS_Pr->CP_VSyncStart[i];
-+            current->VSyncEnd   = pSiS->SiS_Pr->CP_VSyncEnd[i];
-+            current->VTotal     = pSiS->SiS_Pr->CP_VTotal[i];
-+
-+            current->CrtcHDisplay = current->HDisplay;
-+            current->CrtcHBlankStart = pSiS->SiS_Pr->CP_HBlankStart[i];
-+            current->CrtcHSyncStart = current->HSyncStart;
-+            current->CrtcHSyncEnd = current->HSyncEnd;
-+            current->CrtcHBlankEnd = pSiS->SiS_Pr->CP_HBlankEnd[i];
-+            current->CrtcHTotal = current->HTotal;
-+
-+            current->CrtcVDisplay = current->VDisplay;
-+            current->CrtcVBlankStart = pSiS->SiS_Pr->CP_VBlankStart[i];
-+            current->CrtcVSyncStart = current->VSyncStart;
-+            current->CrtcVSyncEnd = current->VSyncEnd;
-+            current->CrtcVBlankEnd = pSiS->SiS_Pr->CP_VBlankEnd[i];
-+            current->CrtcVTotal = current->VTotal;
-+
-+          if(pSiS->SiS_Pr->CP_SyncValid[i]) {
-+               if(pSiS->SiS_Pr->CP_HSync_P[i])
-+                  current->Flags |= V_PHSYNC;
-+               else
-+                  current->Flags |= V_NHSYNC;
-+
-+               if(pSiS->SiS_Pr->CP_VSync_P[i])
-+                  current->Flags |= V_PVSYNC;
-+               else
-+                  current->Flags |= V_NVSYNC;
-+          } else {
-+             /* No sync data? Use positive sync... */
-+             current->Flags |= V_PHSYNC;
-+             current->Flags |= V_PVSYNC;
-+          }
-+         }
-+      }
-+   }
-+
-    return first;
- }
-@@ -5486,25 +5877,25 @@ sisfb_mode_rate_to_dclock(SiS_Private *S
-     UCHAR  *ROMAddr  = HwDeviceExtension->pjVirtualRomBase;
-     ULONG  temp = 0;
-     int    Clock;
--    
-+
-     if(HwDeviceExtension->jChipType < SIS_315H) {
- #ifdef SIS300
-        InitTo300Pointer(SiS_Pr, HwDeviceExtension);
- #else
--       return 65;
-+       return 65 * 1000 * 1000;
- #endif
-     } else {
- #ifdef SIS315H
-        InitTo310Pointer(SiS_Pr, HwDeviceExtension);
- #else
--       return 65;
-+       return 65 * 1000 * 1000;
- #endif
-     }
--    
-+
-     temp = SiS_SearchModeID(SiS_Pr, ROMAddr, &ModeNo, &ModeIdIndex);
-     if(!temp) {
-       printk(KERN_ERR "Could not find mode %x\n", ModeNo);
--      return 65;
-+      return 65 * 1000 * 1000;
-     }
-     
-     RefreshRateTableIndex = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
-@@ -5518,6 +5909,56 @@ sisfb_mode_rate_to_dclock(SiS_Private *S
-     return(Clock);
- }
-+BOOLEAN
-+sisfb_gettotalfrommode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-+                     unsigned char modeno, int *htotal, int *vtotal, unsigned char rateindex)
-+{
-+    USHORT ModeNo = modeno;
-+    USHORT ModeIdIndex = 0, CRT1Index = 0;
-+    USHORT RefreshRateTableIndex = 0;
-+    UCHAR  *ROMAddr  = HwDeviceExtension->pjVirtualRomBase;
-+    ULONG  temp = 0;
-+    unsigned char  sr_data, cr_data, cr_data2;
-+
-+    if(HwDeviceExtension->jChipType < SIS_315H) {
-+#ifdef SIS300
-+       InitTo300Pointer(SiS_Pr, HwDeviceExtension);
-+#else
-+       return FALSE;
-+#endif
-+    } else {
-+#ifdef SIS315H
-+       InitTo310Pointer(SiS_Pr, HwDeviceExtension);
-+#else
-+       return FALSE;
-+#endif
-+    }
-+
-+    temp = SiS_SearchModeID(SiS_Pr, ROMAddr, &ModeNo, &ModeIdIndex);
-+    if(!temp) return FALSE;
-+
-+    RefreshRateTableIndex = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
-+    RefreshRateTableIndex += (rateindex - 1);
-+    CRT1Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-+
-+    sr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
-+    cr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[0];
-+    *htotal = (((cr_data & 0xff) | ((unsigned short) (sr_data & 0x03) << 8)) + 5) * 8;
-+
-+    sr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
-+    cr_data = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[6];
-+    cr_data2 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
-+    *vtotal = ((cr_data & 0xFF) |
-+               ((unsigned short)(cr_data2 & 0x01) <<  8) |
-+             ((unsigned short)(cr_data2 & 0x20) <<  4) |
-+             ((unsigned short)(sr_data  & 0x01) << 10)) + 2;
-+
-+    if(SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag & InterlaceMode)
-+       *vtotal *= 2;
-+
-+    return TRUE;
-+}
-+
- int
- sisfb_mode_rate_to_ddata(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                        unsigned char modeno, unsigned char rateindex,
-@@ -5606,17 +6047,32 @@ sisfb_mode_rate_to_ddata(SiS_Private *Si
-     C = (temp > 0) ? temp : (temp + 64);
-     D = B - F - C;
--    
--    *left_margin = D * 8;
--    *right_margin = F * 8;
--    *hsync_len = C * 8;
-+
-+    if((SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].XRes == 320) &&
-+       ((SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].YRes == 200) ||
-+      (SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].YRes == 240))) {
-+
-+       /* Terrible hack, but the correct CRTC data for
-+        * these modes only produces a black screen...
-+        */
-+       *left_margin = (400 - 376);
-+       *right_margin = (328 - 320);
-+       *hsync_len = (376 - 328);
-+
-+    } else {
-+
-+       *left_margin = D * 8;
-+       *right_margin = F * 8;
-+       *hsync_len = C * 8;
-+
-+    }
-     sr_data = SiS_Pr->SiS_CRT1Table[index].CR[13];
-     cr_data = SiS_Pr->SiS_CRT1Table[index].CR[6];
--    
-+
-     cr_data2 = SiS_Pr->SiS_CRT1Table[index].CR[7];
--    
-+
-     /* Vertical total */
-     VT = (cr_data & 0xFF) |
-          ((unsigned short) (cr_data2 & 0x01) << 8) |
-@@ -5699,19 +6155,19 @@ sisfb_mode_rate_to_ddata(SiS_Private *Si
-         j++;
-       }
-     }       
--       
--#if 0  /* That's bullshit, only the resolution needs to be shifted */    
-+
-     if((*vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-+#if 0  /* Do this? */
-        *upper_margin <<= 1;
-        *lower_margin <<= 1;
-        *vsync_len <<= 1;
-+#endif
-     } else if((*vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-        *upper_margin >>= 1;
-        *lower_margin >>= 1;
-        *vsync_len >>= 1;
--    }  
--#endif
--          
-+    }
-+
-     return 1;       
- }                       
---- linux-2.6.0-test1/drivers/video/sis/initdef.h      2003-06-14 12:18:24.000000000 -0700
-+++ 25/drivers/video/sis/initdef.h     2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,29 @@
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/initdef.h,v 1.4 2000/12/02 01:16:17 dawes Exp $ */
--
-+/*
-+ * Global definitions for init.c and init301.c
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ */
- #ifndef _INITDEF_
- #define _INITDEF_
-@@ -22,12 +46,18 @@
- #define VB_SIS301B302B          (VB_SIS301B|VB_SIS302B)
- #define VB_SIS301LV302LV        (VB_SIS301LV|VB_SIS302LV)
--#define IS_SIS650740            ((HwDeviceExtension->jChipType >= SIS_650) && (HwDeviceExtension->jChipType < SIS_330))
--
- #define IS_SIS650             (HwDeviceExtension->jChipType == SIS_650)
- #define IS_SIS740             (HwDeviceExtension->jChipType == SIS_740)
- #define IS_SIS330             (HwDeviceExtension->jChipType == SIS_330)
- #define IS_SIS550             (HwDeviceExtension->jChipType == SIS_550)
-+#define IS_SIS651             (SiS_Pr->SiS_SysFlags & (SF_Is651 | SF_Is652))
-+#define IS_SISM650            (SiS_Pr->SiS_SysFlags & (SF_IsM650 | SF_IsM652 | SF_IsM653))
-+#define IS_SIS65x               (IS_SIS651 || IS_SISM650)
-+#define IS_SIS660             (HwDeviceExtension->jChipType == SIS_660)
-+#define IS_SIS650660            (IS_SIS650 || IS_SIS660)
-+#define IS_SIS650740            ((HwDeviceExtension->jChipType >= SIS_650) && (HwDeviceExtension->jChipType < SIS_330))
-+#define IS_SIS650740660         (IS_SIS650 || IS_SIS660 || IS_SIS740)
-+#define IS_SIS550650740660      (IS_SIS550 || IS_SIS650 || IS_SIS660 || IS_SIS740)
- #define CRT1Len                 17
- #define LVDSCRT1Len             15
-@@ -63,7 +93,7 @@
- #define SupportTV               0x0008
- #define SupportHiVisionTV       0x0010
- #define SupportLCD              0x0020
--#define SupportRAMDAC2          0x0040  
-+#define SupportRAMDAC2          0x0040
- #define NoSupportTV             0x0070
- #define NoSupportHiVisionTV     0x0060
- #define NoSupportLCD            0x0058
-@@ -105,6 +135,24 @@
- #define HotKeySwitch            0x8000  /* TW: ? */
- #define SetCRT2ToLCDA           0x8000
-+/* SetFlag */
-+#define ProgrammingCRT2         0x01
-+#define TVSimuMode              0x02
-+#define RPLLDIV2XO              0x04
-+#define LCDVESATiming           0x08
-+#define EnableLVDSDDA           0x10
-+#define SetDispDevSwitchFlag    0x20
-+#define CheckWinDos             0x40
-+#define SetDOSMode              0x80
-+
-+/* SysFlags */
-+#define SF_Is651                0x0001
-+#define SF_IsM650               0x0002
-+#define SF_Is652              0x0004
-+#define SF_IsM652             0x0008
-+#define SF_IsM653             0x0010
-+#define SF_Is660              0x8000
-+
- #define PanelRGB18Bit           0x0100
- #define PanelRGB24Bit           0x0000
-@@ -112,7 +160,7 @@
- #define TVOverScanShift         4
- #define ClearBufferFlag         0x20
--/* CR32 (Newer 630, and 310/325 series)
-+/* CR32 (Newer 630, and 315 series)
-    [0]   VB connected with CVBS
-    [1]   VB connected with SVHS
-@@ -134,7 +182,7 @@
-           011   LVDS + Tumpion Zurac
-           100   LVDS + Chrontel 7005
-           110   Chrontel 7005
--        310/325 series
-+        315 series
-           001   SiS30x (never seen)
-           010   LVDS
-           011   LVDS + Chrontel 7019
-@@ -163,14 +211,15 @@
- #define LCDSyncBit            0x00e0
- #define LCDSyncShift               6
--/* CR38 (310/325 series) */
-+/* CR38 (315 series) */
- #define EnableDualEdge                0x01   
- #define SetToLCDA             0x02   /* LCD channel A (302B/LV and 650+LVDS only) */
- #define EnableSiSHiVision       0x04   /* HiVision (HDTV) on SiS bridge */
- #define EnableLVDSScart         0x04   /* Scart on Ch7019 (unofficial definition - TW) */
- #define EnableLVDSHiVision      0x08   /* YPbPr color format (480i HDTV); only on 650/Ch7019 systems */
--#define SiSHiVision1            0x10   /* See SetHiVision() */
--#define SiSHiVision2            0x20
-+#define EnableHiVision750       0x08   /* Enable 750P HiVision mode (30xLV only) */
-+#define EnableHiVision525       0x10   /* Enable 525P HiVision mode (30xLV only) */
-+#define SiSHiVision2            0x20   /* ? - |  --- mask 0x38 combinations have different meaning! */
- #define EnablePALM              0x40   /* 1 = Set PALM */
- #define EnablePALN              0x80   /* 1 = Set PALN */
-@@ -184,7 +233,7 @@
- #define Enable302LV_DualLink    0x04   /* 30xNEW (302LV) only; set by mode switching function */
--/* CR79 (310/325 series only)
-+/* CR79 (315 series only)
-    [3-0] Notify driver
-          0001 Mode Switch event (set by BIOS)
-        0010 Epansion On/Off event
-@@ -202,16 +251,6 @@
-    [7]   TV UnderScan/OverScan (set by BIOS)
- */
--/* SetFlag */
--#define ProgrammingCRT2         0x01
--#define TVSimuMode              0x02
--#define RPLLDIV2XO              0x04
--#define LCDVESATiming           0x08
--#define EnableLVDSDDA           0x10
--#define SetDispDevSwitchFlag    0x20
--#define CheckWinDos             0x40
--#define SetDOSMode              0x80
--
- /* LCDResInfo */
- #define Panel300_800x600        0x01  /* CR36 */
- #define Panel300_1024x768       0x02
-@@ -220,7 +259,10 @@
- #define Panel300_640x480        0x05
- #define Panel300_1024x600       0x06
- #define Panel300_1152x768       0x07
--#define Panel300_320x480        0x08  /* fstn - TW: This is fake, can be any */
-+#define Panel300_1280x768       0x0a
-+#define Panel300_320x480        0x0e  /* fstn - TW: This is fake, can be any */
-+#define Panel300_Custom               0x0f
-+#define Panel300_Barco1366      0x10
- #define Panel310_800x600        0x01
- #define Panel310_1024x768       0x02
-@@ -231,9 +273,12 @@
- #define Panel310_1280x960       0x07
- #define Panel310_1152x768       0x08  /* LVDS only */
- #define Panel310_1400x1050      0x09
--#define Panel310_1280x768       0x0a    /* LVDS only */
-+#define Panel310_1280x768       0x0a
- #define Panel310_1600x1200      0x0b
--#define Panel310_320x480        0x0c    /* fstn - TW: This is fake, can be any */
-+#define Panel310_640x480_2      0x0c
-+#define Panel310_640x480_3      0x0d
-+#define Panel310_320x480        0x0e    /* fstn - TW: This is fake, can be any */
-+#define Panel310_Custom               0x0f
- #define Panel_800x600           0x01  /* Unified values */
- #define Panel_1024x768          0x02
-@@ -246,7 +291,42 @@
- #define Panel_1400x1050         0x09
- #define Panel_1280x768          0x0a    /* LVDS only */
- #define Panel_1600x1200         0x0b
--#define Panel_320x480           0x0c    /* fstn - TW: This is fake, can be any */
-+#define Panel_640x480_2               0x0c
-+#define Panel_640x480_3               0x0d
-+#define Panel_320x480           0x0e    /* fstn - TW: This is fake, can be any */
-+#define Panel_Custom          0x0f
-+#define Panel_Barco1366         0x10
-+
-+/* Index in ModeResInfo table */
-+#define SIS_RI_320x200 0
-+#define SIS_RI_320x240 1
-+#define SIS_RI_320x400 2
-+#define SIS_RI_400x300 3
-+#define SIS_RI_512x384 4
-+#define SIS_RI_640x400 5
-+#define SIS_RI_640x480 6
-+#define SIS_RI_800x600 7
-+#define SIS_RI_1024x768 8
-+#define SIS_RI_1280x1024 9
-+#define SIS_RI_1600x1200 10
-+#define SIS_RI_1920x1440 11
-+#define SIS_RI_2048x1536 12
-+#define SIS_RI_720x480 13
-+#define SIS_RI_720x576 14
-+#define SIS_RI_1280x960 15
-+#define SIS_RI_800x480 16
-+#define SIS_RI_1024x576 17
-+#define SIS_RI_1280x720 18
-+#define SIS_RI_856x480 19
-+#define SIS_RI_1280x768 20
-+#define SIS_RI_1400x1050 21
-+#define SIS_RI_1152x864 22
-+#define SIS_RI_848x480 23
-+#define SIS_RI_1360x768 24
-+#define SIS_RI_1024x600 25
-+#define SIS_RI_1152x768 26
-+#define SIS_RI_768x576 27
-+#define SIS_RI_1360x1024 28
- #define ExtChipType             0x0e
- #define ExtChip301              0x02
-@@ -278,15 +358,32 @@
- #define VCLKStartFreq           25
- #define SoftDramType            0x80
--#define VCLK40                  0x04   /* Index in VCLKData array */
--#define VCLK65                  0x09   /* Index in VCLKData array */
--#define VCLK108_2               0x14   /* Index in VCLKData array */
--#define TVVCLKDIV2              0x21   /* Indices in (VB)VCLKData arrays */
--#define TVVCLK                  0x22
--#define HiTVVCLKDIV2            0x23
--#define HiTVVCLK                0x24
--#define HiTVSimuVCLK            0x25
--#define HiTVTextVCLK            0x26
-+/* Indices in (VB)VCLKData tables */
-+
-+#define VCLK28                  0x00   /* Index in VCLKData table (300 and 315) */
-+#define VCLK40                  0x04   /* Index in VCLKData table (300 and 315) */
-+#define VCLK65_300              0x09   /* Index in VCLKData table (300) */
-+#define VCLK108_2_300           0x14   /* Index in VCLKData table (300) */
-+#define VCLK81_300            0x3f   /* Index in VCLKData table (300) */
-+#define VCLK108_3_300           0x42   /* Index in VCLKData table (300) */
-+#define VCLK100_300             0x43   /* Index in VCLKData table (300) */
-+#define VCLK65_315              0x0b   /* Index in (VB)VCLKData table (315) */
-+#define VCLK108_2_315           0x19   /* Index in (VB)VCLKData table (315) */
-+#define VCLK81_315            0x5b   /* Index in (VB)VCLKData table (315) */
-+#define VCLK162_315             0x21   /* Index in (VB)VCLKData table (315) */
-+#define VCLK108_3_315           0x45   /* Index in VBVCLKData table (315) */
-+#define VCLK100_315             0x46   /* Index in VBVCLKData table (315) */
-+
-+#define TVCLKBASE_300         0x21   /* Indices on TV clocks in VCLKData table (300) */
-+#define TVCLKBASE_315         0x3a   /* Indices on TV clocks in (VB)VCLKData table (315) */
-+#define TVVCLKDIV2              0x00   /* Index relative to TVCLKBASE */
-+#define TVVCLK                  0x01   /* Index relative to TVCLKBASE */
-+#define HiTVVCLKDIV2            0x02   /* Index relative to TVCLKBASE */
-+#define HiTVVCLK                0x03   /* Index relative to TVCLKBASE */
-+#define HiTVSimuVCLK            0x04   /* Index relative to TVCLKBASE */
-+#define HiTVTextVCLK            0x05   /* Index relative to TVCLKBASE */
-+
-+/* ------------------------------ */
- #define LoadDACFlag             0x1000
- #define AfterLockCRT2           0x4000
-@@ -306,6 +403,8 @@
- #define HotPlugFunction         0x08
- #define StStructSize            0x06
-+#define SIS_VIDEO_CAPTURE       0x00 - 0x30
-+#define SIS_VIDEO_PLAYBACK      0x02 - 0x30
- #define SIS_CRT2_PORT_04        0x04 - 0x30
- #define SIS_CRT2_PORT_10        0x10 - 0x30
- #define SIS_CRT2_PORT_12        0x12 - 0x30
-@@ -393,7 +492,7 @@
- /*
-   =============================================================
--                      for 310/325 series
-+                        for 315 series
-   =============================================================
- */
- #define SoftDRAMType        0x80
---- linux-2.6.0-test1/drivers/video/sis/init.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/video/sis/init.h        2003-07-19 17:04:55.000000000 -0700
-@@ -1,19 +1,39 @@
-+/* $XFree86$ */
-+/*
-+ * Data and prototypes for init.c
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ */
-+
- #ifndef _INIT_
- #define _INIT_
- #include "osdef.h"
-+
- #include "initdef.h"
- #include "vgatypes.h"
- #include "vstruct.h"
--#ifdef TC
--#include <stdio.h>
--#include <string.h>
--#include <conio.h>
--#include <dos.h>
--#include <stdlib.h>
--#endif
--
- #ifdef LINUX_XF86
- #include "xf86.h"
- #include "xf86Pci.h"
-@@ -24,6 +44,9 @@
- #endif
- #ifdef LINUX_KERNEL
-+#ifdef SIS_CP
-+#undef SIS_CP
-+#endif
- #include <linux/config.h>
- #include <linux/version.h>
- #include <linux/types.h>
-@@ -36,19 +59,6 @@
- #endif
- #endif
--#ifdef WIN2000
--#include <stdio.h>
--#include <string.h>
--#include <miniport.h>
--#include "dderror.h"
--#include "devioctl.h"
--#include "miniport.h"
--#include "ntddvdeo.h"
--#include "video.h"
--#include "sisv.h"
--#include "tools.h"
--#endif
--
- const USHORT SiS_DRAMType[17][5]={
-       {0x0C,0x0A,0x02,0x40,0x39},
-       {0x0D,0x0A,0x01,0x40,0x48},
-@@ -144,6 +154,2175 @@ const USHORT SiS_VGA_DAC[] =
-       0x0B,0x0C,0x0D,0x0F,0x10
- };
-+static const SiS_StResInfoStruct SiS_StResInfo[]=
-+{
-+      { 640,400},
-+      { 640,350},
-+      { 720,400},
-+      { 720,350},
-+      { 640,480}
-+};
-+
-+static const SiS_ModeResInfoStruct SiS_ModeResInfo[] =
-+{
-+      {  320, 200, 8, 8},   /* 0x00 */
-+      {  320, 240, 8, 8},   /* 0x01 */
-+      {  320, 400, 8, 8},   /* 0x02 */
-+      {  400, 300, 8, 8},   /* 0x03 */
-+      {  512, 384, 8, 8},   /* 0x04 */
-+      {  640, 400, 8,16},   /* 0x05 */
-+      {  640, 480, 8,16},   /* 0x06 */
-+      {  800, 600, 8,16},   /* 0x07 */
-+      { 1024, 768, 8,16},   /* 0x08 */
-+      { 1280,1024, 8,16},   /* 0x09 */
-+      { 1600,1200, 8,16},   /* 0x0a */
-+      { 1920,1440, 8,16},   /* 0x0b */
-+      { 2048,1536, 8,16},   /* 0x0c */
-+      {  720, 480, 8,16},   /* 0x0d */
-+      {  720, 576, 8,16},   /* 0x0e */
-+      { 1280, 960, 8,16},   /* 0x0f */
-+      {  800, 480, 8,16},   /* 0x10 */
-+      { 1024, 576, 8,16},   /* 0x11 */
-+      { 1280, 720, 8,16},   /* 0x12 */
-+      {  856, 480, 8,16},   /* 0x13 */
-+      { 1280, 768, 8,16},   /* 0x14 */
-+      { 1400,1050, 8,16},   /* 0x15 */
-+      { 1152, 864, 8,16},   /* 0x16 */
-+      {  848, 480, 8,16},   /* 0x17 */
-+      { 1360, 768, 8,16},   /* 0x18 */
-+      { 1024, 600, 8,16},   /* 0x19 */
-+      { 1152, 768, 8,16},   /* 0x1a */
-+      {  768, 576, 8,16},   /* 0x1b */
-+      { 1360,1024, 8,16}    /* 0x1c */
-+};
-+
-+static SiS_StandTableStruct SiS_StandTable[]=
-+{
-+/* 0x00: MD_0_200 */
-+ {
-+  0x28,0x18,0x08,0x0800,
-+  {0x09,0x03,0x00,0x02},
-+  0x63,
-+  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x01: MD_1_200 */
-+ {
-+  0x28,0x18,0x08,0x0800,
-+  {0x09,0x03,0x00,0x02},
-+  0x63,
-+  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x02: MD_2_200 */
-+ {
-+  0x50,0x18,0x08,0x1000,
-+  {0x01,0x03,0x00,0x02},
-+  0x63,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x03: MD_3_200 - mode 0x03 - 0 */
-+ {
-+  0x50,0x18,0x08,0x1000,
-+  {0x01,0x03,0x00,0x02},
-+  0x63,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x04: MD_4 */
-+ {
-+  0x28,0x18,0x08,0x4000,
-+  {0x09,0x03,0x00,0x02},
-+  0x63,
-+  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,   /* 0x2c is 2b for 300 */
-+   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-+   0xff},
-+  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x01,0x00,0x03,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-+   0xff}
-+ },
-+/* 0x05: MD_5 */
-+ {
-+  0x28,0x18,0x08,0x4000,
-+  {0x09,0x03,0x00,0x02},
-+  0x63,
-+  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,   /* 0x2c is 2b for 300 */
-+   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
-+   0xff},
-+  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x01,0x00,0x03,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
-+   0xff}
-+ },
-+/* 0x06: MD_6 */
-+ {
-+  0x50,0x18,0x08,0x4000,
-+  {0x01,0x01,0x00,0x06},
-+  0x63,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,   /* 55,81 is 54,80 for 300 */
-+   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
-+   0xff},
-+  {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-+   0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-+   0x01,0x00,0x01,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
-+   0xff}
-+ },
-+/* 0x07: MD_7 */
-+ {
-+  0x50,0x18,0x0e,0x1000,
-+  {0x00,0x03,0x00,0x03},
-+  0xa6,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+   0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
-+   0xff},
-+  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-+   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-+   0x0e,0x00,0x0f,0x08},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-+   0xff}
-+ },
-+/* 0x08: MDA_DAC */
-+ {
-+  0x00,0x00,0x00,0x0000,
-+  {0x00,0x00,0x00,0x15},
-+  0x15,
-+  {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-+   0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
-+   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
-+   0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
-+   0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
-+   0x15,0x15,0x15,0x15},
-+  {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-+   0x3f}
-+ },
-+/* 0x09: CGA_DAC */
-+ {
-+  0x00,0x10,0x04,0x0114,
-+  {0x11,0x09,0x15,0x00},
-+  0x10,
-+  {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
-+   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
-+   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
-+   0x04},
-+  {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
-+   0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
-+   0x3e,0x2b,0x3b,0x2f},
-+  {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-+   0x3f}
-+ },
-+/* 0x0a: EGA_DAC */
-+ {
-+  0x00,0x10,0x04,0x0114,
-+  {0x11,0x05,0x15,0x20},
-+  0x30,
-+  {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
-+   0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
-+   0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
-+   0x06},
-+  {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
-+   0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
-+   0x1e,0x0b,0x1b,0x0f},
-+  {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
-+   0x3f}
-+ },
-+/* 0x0b: VGA_DAC */
-+ {
-+  0x00,0x10,0x04,0x0114,
-+  {0x11,0x09,0x15,0x2a},
-+  0x3a,
-+  {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
-+   0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
-+   0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
-+   0x1f},
-+  {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
-+   0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
-+   0x1c,0x0e,0x11,0x15},
-+  {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
-+   0x04}
-+ },
-+/* 0x0c */
-+ {
-+  0x08,0x0c,0x10,0x0a08,
-+  {0x0c,0x0e,0x10,0x0b},
-+  0x0c,
-+  {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
-+   0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
-+   0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
-+   0x06},
-+  {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
-+   0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
-+   0x00,0x00,0x00,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x00}
-+ },
-+/* 0x0d: MD_D */
-+ {
-+  0x28,0x18,0x08,0x2000,
-+  {0x09,0x0f,0x00,0x06},
-+  0x63,
-+  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,     /* 2c is 2b for 300 */
-+   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x01,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+   0xff}
-+ },
-+/* 0x0e: MD_E */
-+ {
-+  0x50,0x18,0x08,0x4000,
-+  {0x01,0x0f,0x00,0x06},
-+  0x63,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,     /* 55,81 is 54,80 for 300 */
-+   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-+   0x01,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+   0xff}
-+ },
-+/* 0x0f: ExtVGATable - modes > 0x13 */
-+ {
-+  0x00,0x00,0x00,0x0000,
-+  {0x01,0x0f,0x00,0x0e},
-+  0x23,
-+  {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
-+   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-+   0x01,0x00,0x00,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-+   0xff}
-+ },
-+/* 0x10: ROM_SAVEPTR - totally different for 300 */
-+ {
-+  0x9f,0x3b,0x00,0x00c0,
-+  {0x00,0x00,0x00,0x00},
-+  0x00,
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0x3f,
-+   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x00,0x00,0x1a,0x00,0xac,0x3e,0x00,0xc0,
-+   0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x00,0x00,0x00,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x00}
-+ },
-+/* 0x11: MD_F */
-+ {
-+  0x50,0x18,0x0e,0x8000,
-+  {0x01,0x0f,0x00,0x06},
-+  0xa2,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
-+   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,    /* 82,84 is 83,85 on 300 */
-+   0xff},
-+  {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
-+   0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
-+   0x0b,0x00,0x05,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
-+   0xff}
-+ },
-+/* 0x12: MD_10 */
-+ {
-+  0x50,0x18,0x0e,0x8000,
-+  {0x01,0x0f,0x00,0x06},
-+  0xa3,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
-+   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,    /* 82,84 is 83,85 on 300 */
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x01,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+   0xff}
-+ },
-+/* 0x13: MD_0_350 */
-+ {
-+  0x28,0x18,0x0e,0x0800,
-+  {0x09,0x03,0x00,0x02},
-+  0xa3,
-+  {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,    /* b1 is a0 on 300 */
-+   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x14: MD_1_350 */
-+ {
-+  0x28,0x18,0x0e,0x0800,
-+  {0x09,0x03,0x00,0x02},
-+  0xa3,
-+  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x15: MD_2_350 */
-+ {
-+  0x50,0x18,0x0e,0x1000,
-+  {0x01,0x03,0x00,0x02},
-+  0xa3,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x16: MD_3_350 - mode 0x03 - 1 */
-+ {
-+  0x50,0x18,0x0e,0x1000,
-+  {0x01,0x03,0x00,0x02},
-+  0xa3,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
-+   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x08,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x17: MD_0_1_400 */
-+ {
-+  0x28,0x18,0x10,0x0800,
-+  {0x08,0x03,0x00,0x02},
-+  0x67,
-+  {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,    /* b1 is a0 on 300 */
-+   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x0c,0x00,0x0f,0x08},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x18: MD_2_3_400 - mode 0x03 - 2 */
-+ {
-+  0x50,0x18,0x10,0x1000,
-+  {0x00,0x03,0x00,0x02},
-+  0x67,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x0c,0x00,0x0f,0x08},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
-+   0xff}
-+ },
-+/* 0x19: MD_7_400 */
-+ {
-+  0x50,0x18,0x10,0x1000,
-+  {0x00,0x03,0x00,0x02},
-+  0x66,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
-+   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-+   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-+   0x0e,0x00,0x0f,0x08},
-+  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
-+   0xff}
-+ },
-+/* 0x1a: MD_11 */
-+ {
-+  0x50,0x1d,0x10,0xa000,
-+  {0x01,0x0f,0x00,0x06},
-+  0xe3,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,    /* 55,81 is 54,80 on 300 */
-+   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xc3,    /* e9,8b is ea,8c on 300 */
-+   0xff},
-+  {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-+   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
-+   0x01,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
-+   0xff}
-+ },
-+/* 0x1b: ExtEGATable - Modes <= 0x02 */
-+ {
-+  0x50,0x1d,0x10,0xa000,
-+  {0x01,0x0f,0x00,0x06},
-+  0xe3,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,    /* 55,81 is 54,80 on 300 */
-+   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xe3,    /* e9,8b is ea,8c on 300 */
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
-+   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-+   0x01,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
-+   0xff}
-+ },
-+/* 0x1c: MD_13 */
-+ {
-+  0x28,0x18,0x08,0x2000,
-+  {0x01,0x0f,0x00,0x0e},
-+  0x63,
-+  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
-+   0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
-+   0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
-+   0xff},
-+  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-+   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-+   0x41,0x00,0x0f,0x00},
-+  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
-+   0xff}
-+ }
-+};
-+
-+static const UCHAR SiS_NTSCTiming[] = {
-+      0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
-+      0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
-+      0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
-+      0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
-+      0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
-+      0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
-+      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
-+      0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
-+};
-+
-+static const UCHAR SiS_PALTiming[] = {
-+      0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
-+      0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
-+      0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
-+      0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,
-+      0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,
-+      0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
-+      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
-+      0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
-+};
-+
-+static const UCHAR SiS_HiTVExtTiming[] = {
-+        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-+      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+      0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-+      0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-+      0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-+      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-+      0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
-+};
-+
-+static const UCHAR SiS_HiTVSt1Timing[] = {
-+        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-+      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+      0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
-+      0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
-+      0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
-+      0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
-+      0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
-+};
-+
-+static const UCHAR SiS_HiTVSt2Timing[] = {
-+        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
-+      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+      0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
-+      0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
-+      0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
-+      0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
-+      0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
-+};
-+
-+static const UCHAR SiS_HiTVTextTiming[] = {
-+        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
-+      0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
-+      0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
-+      0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
-+      0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
-+      0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
-+        0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
-+      0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
-+};
-+
-+static const UCHAR SiS_HiTVGroup3Data[] = {
-+        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
-+      0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
-+      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-+      0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
-+      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-+      0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
-+      0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
-+      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
-+};
-+
-+static const UCHAR SiS_HiTVGroup3Simu[] = {
-+        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
-+      0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
-+      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-+      0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
-+      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-+      0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
-+      0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-+      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
-+};
-+
-+static const UCHAR SiS_HiTVGroup3Text[] = {
-+        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
-+      0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
-+      0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
-+      0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
-+      0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
-+      0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
-+      0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
-+      0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
-+};
-+
-+static const UCHAR SiS_NTSCPhase[]    = {0x21,0xed,0xba,0x08};  /* Was {0x21,0xed,0x8a,0x08}; */
-+static const UCHAR SiS_PALPhase[]     = {0x2a,0x05,0xe3,0x00};  /* Was {0x2a,0x05,0xd3,0x00};  */
-+static const UCHAR SiS_PALMPhase[]    = {0x21,0xE4,0x2E,0x9B};
-+static const UCHAR SiS_PALNPhase[]    = {0x21,0xF4,0x3E,0xBA};
-+static const UCHAR SiS_NTSCPhase2[]   = {0x21,0xF0,0x7B,0xD6};
-+static const UCHAR SiS_PALPhase2[]    = {0x2a,0x09,0x86,0xe9};
-+static const UCHAR SiS_PALMPhase2[]   = {0x21,0xE6,0xEF,0xA4};
-+static const UCHAR SiS_PALNPhase2[]   = {0x21,0xF6,0x94,0x46};
-+static const UCHAR SiS_SpecialPhase[] = {0x1e,0x8c,0x5c,0x7a};
-+
-+static const SiS_TVDataStruct  SiS_StPALData[]=
-+{
-+ {    1,   1, 864, 525,1270, 400, 100,   0, 760,0xf4,0xff,0x1c,0x22},
-+ {    1,   1, 864, 525,1270, 350, 100,   0, 760,0xf4,0xff,0x1c,0x22},
-+ {    1,   1, 864, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
-+ {    1,   1, 864, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
-+ {    1,   1, 864, 525,1270, 480,  50,   0, 760,0xf4,0xff,0x1c,0x22},
-+ {    1,   1, 864, 525,1270, 600,  50,   0,   0,0xf4,0xff,0x1c,0x22}
-+};
-+
-+static const SiS_TVDataStruct  SiS_ExtPALData[] =
-+{
-+ {   27,  10, 848, 448,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},  /* 640x400, 320x200 */
-+ {  108,  35, 848, 398,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},
-+ {   12,   5, 954, 448,1270, 530,  50,   0,  50,0xf1,0x04,0x1f,0x18},
-+ {    9,   4, 960, 463,1644, 438,  50,   0,  50,0xf4,0x0b,0x1c,0x0a},
-+ {    9,   4, 848, 528,1270, 530,   0,   0,  50,0xf5,0xfb,0x1b,0x2a},  /* 640x480, 320x240 */
-+ {   36,  25,1060, 648,1316, 530, 438,   0, 438,0xeb,0x05,0x25,0x16},  /* 800x600, 400x300 */
-+ {    3,   2,1080, 619,1270, 540, 438,   0, 438,0xf3,0x00,0x1d,0x20},  /* 720x576 */
-+ {    1,   1,1170, 821,1270, 520, 686,   0, 686,0xF3,0x00,0x1D,0x20}   /* 1024x768 */
-+};
-+
-+static const SiS_TVDataStruct  SiS_StNTSCData[]=
-+{
-+ {    1,   1, 858, 525,1270, 400,  50,   0, 760,0xf1,0x04,0x1f,0x18},
-+ {    1,   1, 858, 525,1270, 350,  50,   0, 640,0xf1,0x04,0x1f,0x18},
-+ {    1,   1, 858, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
-+ {    1,   1, 858, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
-+ {    1,   1, 858, 525,1270, 480,   0,   0, 760,0xf1,0x04,0x1f,0x18}
-+};
-+
-+static const SiS_TVDataStruct  SiS_ExtNTSCData[]=
-+{
-+ {  143,  65, 858, 443,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},    /* 640x400, 320x200 */
-+ {   88,  35, 858, 393,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
-+ {  143,  70, 924, 443,1270, 440,  92,   0,  92,0xf1,0x04,0x1f,0x18},
-+ {  143,  70, 924, 393,1270, 440,  92,   0,  92,0xf4,0x0b,0x1c,0x0a},
-+ {  143,  76, 836, 523,1270, 440, 224,   0,   0,0xf1,0x05,0x1f,0x16},    /* 640x480, 320x240 */
-+ {  143, 120,1056, 643,1270, 440,   0, 128,   0,0xf4,0x10,0x1c,0x00},    /* 800x600, 400x300  */
-+ {  143,  76, 836, 523,1270, 440,   0, 128,   0,0xee,0x0c,0x22,0x08},    /* 720x480 - BETTER (from 300 series) */
-+/*{   2,   1, 858, 503,1270, 480,   0, 128,   0,0xee,0x0c,0x22,0x08},*/  /* 720x480  (old, from 650) */
-+ {    1,   1,1100, 811,1412, 440,   0, 128,   0,0xee,0x0c,0x22,0x08}     /* 1024x768 CORRECTED */
-+/*{  65,  64,1056, 791,1270, 480, 638,   0,   0,0xEE,0x0C,0x22,0x08} */  /* 1024x768 */
-+#if 0  /* 300 series was: */
-+ {  143,  65, 858, 443,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
-+ {   88,  35, 858, 393,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
-+ {  143,  70, 924, 443,1270, 440,  92,   0,  92,0xf1,0x04,0x1f,0x18},
-+ {  143,  70, 924, 393,1270, 440,  92,   0,  92,0xf4,0x0b,0x1c,0x0a},
-+ {  143,  76, 836, 523,1270, 440, 224,   0,   0,0xf1,0x05,0x1f,0x16},
-+ {  143, 120,1056, 643,1270, 440,   0, 128,   0,0xf4,0x10,0x1c,0x00},
-+ {  143,  76, 836, 523,1270, 440,   0, 128,   0,0xee,0x0c,0x22,0x08},
-+ {   65,  64,1056, 791,1270, 480, 638,   0,   0,0xf1,0x04,0x1f,0x18}
-+#endif
-+};
-+
-+
-+static const SiS_TVDataStruct  SiS_St2HiTVData[]=
-+{
-+ {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    1,   1, 0x37c,0x233,0x2b2,0x2bc,          0,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    1,   1, 0x3e8,0x233,0x311,0x2bc,    0,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    5,   2, 0x348,0x233,0x670,0x3c0,0x08d,128, 0, 0x00,0x00,0x00,0x00},
-+ {    8,   5, 0x41a,0x2ab,0x670,0x3c0,0x17c,128, 0, 0x00,0x00,0x00,0x00}
-+};
-+
-+static const SiS_TVDataStruct  SiS_ExtHiTVData[]=
-+{
-+ {    6,   1, 0x348,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    3,   1, 0x348,0x1e3,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
-+ {    5,   1, 0x348,0x233,0x670,0x3c0,0x166,128, 0, 0x00,0x00,0x00,0x00},  /* 640x480   */
-+ {   16,   5, 0x41a,0x2ab,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},  /* 800x600   */
-+ {   25,  12, 0x4ec,0x353,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},  /* 1024x768  */
-+ {    5,   4, 0x627,0x464,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00},  /* 1280x1024 */
-+ {    4,   1, 0x41a,0x233,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},  /* 800x480   */
-+ {    5,   2, 0x578,0x293,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},  /* 1024x576  */
-+ {    8,   5, 0x6d6,0x323,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00}   /* 1280x720  */
-+};
-+
-+static const UCHAR SiS_OutputSelect = 0x40;
-+
-+static const UCHAR SiS_SoftSetting  = 0x30;   /* RAM setting */
-+
-+static const SiS_LCDDataStruct  SiS_LCD1280x960Data[] =
-+{
-+      {    9,   2, 800, 500,1800,1000},
-+      {    9,   2, 800, 500,1800,1000},
-+      {    4,   1, 900, 500,1800,1000},
-+      {    4,   1, 900, 500,1800,1000},
-+      {    9,   2, 800, 500,1800,1000},
-+      {   30,  11,1056, 625,1800,1000},
-+      {    5,   3,1350, 800,1800,1000},
-+      {    1,   1,1576,1050,1576,1050},
-+      {    1,   1,1800,1000,1800,1000}
-+};
-+
-+static const SiS_LCDDataStruct  SiS_StLCD1280x768Data[] =
-+{
-+      { 211,  100, 2100,  408, 1688,  802 }, /* These values are *wrong* */
-+      { 211,   64, 1536,  358, 1688,  802 }, /* (which is why they aren't used yet) */
-+      { 211,  100, 2100,  408, 1688,  802 },
-+      { 211,   64, 1536,  358, 1688,  802 },
-+      { 211,   48,  840,  488, 1688,  802 },
-+      { 211,   72, 1008,  609, 1688,  802 },
-+      { 211,  128, 1400,  776, 1688,  802 },
-+      { 211,  205, 1680, 1041, 1688,  802 },
-+      { 1,      1, 1688,  802, 1688,  802 }  /* That's the only one that *might* be correct */
-+};
-+
-+static const SiS_LCDDataStruct  SiS_ExtLCD1280x768Data[] =
-+{
-+      { 211,  100, 2100,  408, 1688,  802 }, /* These values are *wrong* */
-+      { 211,   64, 1536,  358, 1688,  802 }, /* (which is why they aren't used yet) */
-+      { 211,  100, 2100,  408, 1688,  802 },
-+      { 211,   64, 1536,  358, 1688,  802 },
-+      { 211,   48,  840,  488, 1688,  802 },
-+      { 211,   72, 1008,  609, 1688,  802 },
-+      { 211,  128, 1400,  776, 1688,  802 },
-+      { 211,  205, 1680, 1041, 1688,  802 },
-+      { 1,      1, 1688,  802, 1688,  802 }  /* That's the only one that *might* be correct */
-+};
-+
-+static const SiS_LCDDataStruct  SiS_NoScaleData1280x768[] =
-+{  /* All values guessed */
-+        { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802},
-+      { 1, 1, 1688,  802, 1688,  802}
-+};
-+
-+static const SiS_LCDDataStruct  SiS_StLCD1400x1050Data[] =
-+{
-+      { 211,  100, 2100,  408, 1688, 1066 },
-+      { 211,   64, 1536,  358, 1688, 1066 },
-+      { 211,  100, 2100,  408, 1688, 1066 },
-+      { 211,   64, 1536,  358, 1688, 1066 },
-+      { 211,   48,  840,  488, 1688, 1066 },
-+      { 211,   72, 1008,  609, 1688, 1066 },
-+      { 211,  128, 1400,  776, 1688, 1066 },
-+      { 211,  205, 1680, 1041, 1688, 1066 },
-+      {   1,    1, 1688, 1066, 1688, 1066 }
-+};
-+
-+static const SiS_LCDDataStruct  SiS_ExtLCD1400x1050Data[] =
-+{
-+      { 211,  100, 2100,  408, 1688, 1066 },
-+      { 211,   64, 1536,  358, 1688, 1066 },
-+      { 211,  100, 2100,  408, 1688, 1066 },
-+      { 211,   64, 1536,  358, 1688, 1066 },
-+      { 211,   48,  840,  488, 1688, 1066 },
-+      { 211,   72, 1008,  609, 1688, 1066 },
-+      { 211,  128, 1400,  776, 1688, 1066 },
-+      { 211,  205, 1680, 1041, 1688, 1066 },
-+      {   1,    1, 1688, 1066, 1688, 1066 }
-+};
-+
-+static const SiS_LCDDataStruct  SiS_NoScaleData1400x1050[] =
-+{
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 },
-+      { 1, 1, 1688, 1066, 1688, 1066 }
-+};
-+
-+static const SiS_LCDDataStruct  SiS_StLCD1600x1200Data[] =
-+{  /* TODO */
-+      {    0,   0,   0,   0,   0,   0}
-+};
-+
-+static const SiS_LCDDataStruct  SiS_ExtLCD1600x1200Data[] =
-+{  /* TODO */
-+      {    0,   0,   0,   0,   0,   0}
-+};
-+
-+static const SiS_LCDDataStruct  SiS_NoScaleData1600x1200[] =
-+{  /* TODO - values guessed */
-+        {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250},
-+      {1,  1, 2048, 1250, 2048, 1250}
-+};
-+
-+static const SiS_LCDDataStruct  SiS_NoScaleData[] =
-+{
-+      { 1, 1, 800, 449, 800, 449 },
-+      { 1, 1, 800, 449, 800, 449 },
-+      { 1, 1, 900, 449, 900, 449 },
-+      { 1, 1, 900, 449, 900, 449 },
-+      { 1, 1, 800, 525, 800, 525 },
-+      { 1, 1,1056, 628,1056, 628 },
-+      { 1, 1,1344, 806,1344, 806 },
-+      { 1, 1,1688,1066,1688,1066 },
-+        { 1, 1,1688, 802,1688, 802 },  /* 1280x768: 802 was 806 in both cases */
-+        { 1, 1,2048,1250,2048,1250 },  /* 1600x1200 (guessed) */
-+      { 1, 1,1800,1000,1800,1000 }   /* 1280x960 */
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS320x480Data_1[]=
-+{
-+      { 848, 433, 400, 525},
-+      { 848, 389, 400, 525},
-+      { 848, 433, 400, 525},
-+      { 848, 389, 400, 525},
-+      { 848, 518, 400, 525},
-+      {1056, 628, 400, 525},
-+      { 400, 525, 400, 525},
-+      { 800, 449,1000, 644},
-+      { 800, 525,1000, 635}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS800x600Data_1[]=
-+{
-+      { 848, 433,1060, 629},
-+      { 848, 389,1060, 629},
-+      { 848, 433,1060, 629},
-+      { 848, 389,1060, 629},
-+      { 848, 518,1060, 629},
-+      {1056, 628,1056, 628},
-+      {1056, 628,1056, 628},
-+      { 800, 449,1000, 644},
-+      { 800, 525,1000, 635}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS800x600Data_2[]=
-+{
-+      {1056, 628,1056, 628},
-+      {1056, 628,1056, 628},
-+      {1056, 628,1056, 628},
-+      {1056, 628,1056, 628},
-+      {1056, 628,1056, 628},
-+      {1056, 628,1056, 628},
-+      {1056, 628,1056, 628},
-+      { 800, 449,1000, 644},
-+      { 800, 525,1000, 635}
-+};
-+
-+
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1280x1024Data_1[]=
-+{
-+      {1048, 442,1688,1066},
-+      {1048, 392,1688,1066},
-+      {1048, 442,1688,1066},
-+      {1048, 392,1688,1066},
-+      {1048, 522,1688,1066},
-+      {1208, 642,1688,1066},
-+      {1432, 810,1688,1066},
-+      {1688,1066,1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1280x1024Data_2[]=
-+{
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1024x768Data_1[]=
-+{
-+      { 840, 438,1344, 806},
-+      { 840, 409,1344, 806},
-+      { 840, 438,1344, 806},
-+      { 840, 409,1344, 806},
-+      { 840, 518,1344, 806},   /* 640x480 */
-+      {1050, 638,1344, 806},   /* 800x600 */
-+      {1344, 806,1344, 806},   /* 1024x768 */
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1024x768Data_2[]=
-+{
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+/* Custom data for Barco iQ R300 */
-+static const SiS_LVDSDataStruct  SiS_LVDSBARCO1366Data_1[]=
-+{
-+      { 832, 438,1331, 806},
-+      { 832, 388,1331, 806},
-+      { 832, 438,1331, 806},
-+      { 832, 388,1331, 806},
-+      { 832, 518,1331, 806},
-+      {1050, 638,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066}   /* 1360x1024 */
-+};
-+
-+/* Custom data for Barco iQ R300 */
-+static const SiS_LVDSDataStruct  SiS_LVDSBARCO1366Data_2[]=
-+{
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1688,1066,1688,1066},
-+      {1688,1066,1688,1066}   /* 1360x1024 */
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDSBARCO1024Data_1[]=
-+{
-+      { 832, 438,1331, 806},
-+      { 832, 409,1331, 806},
-+      { 832, 438,1331, 806},
-+      { 832, 409,1331, 806},
-+      { 832, 518,1331, 806},   /* 640x480 */
-+      {1050, 638,1344, 806},   /* 800x600 */
-+      {1344, 806,1344, 806},   /* 1024x768 */
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDSBARCO1024Data_2[]=
-+{
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1400x1050Data_1[]=
-+{
-+        { 928, 416, 1688,1066},
-+      { 928, 366, 1688,1066},
-+      { 928, 416, 1688,1066},
-+      { 928, 366, 1688,1066},
-+      { 928, 496, 1688,1066},
-+      {1088, 616, 1688,1066},
-+      {1312, 784, 1688,1066},
-+      {1568,1040, 1688,1066},
-+      {1688,1066, 1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1400x1050Data_2[]=
-+{
-+        {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+      {1688,1066, 1688,1066},
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1600x1200Data_1[]=
-+{
-+        {1088, 450, 2048,1250},
-+      {1088, 400, 2048,1250},
-+      {1088, 450, 2048,1250},
-+      {1088, 400, 2048,1250},
-+      {1088, 530, 2048,1250},
-+      {1248, 650, 2048,1250},
-+      {1472, 818, 2048,1250},
-+      {1728,1066, 2048,1250},
-+      {1848,1066, 2048,1250},
-+      {2048,1250, 2048,1250}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1600x1200Data_2[]=
-+{
-+        {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250},
-+      {2048,1250, 2048,1250}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1280x768Data_1[]=
-+{
-+      { 768, 438, 1408, 806},
-+      { 768, 388, 1408, 806},
-+      { 768, 438, 1408, 806},
-+      { 768, 388, 1408, 806},
-+      { 768, 518, 1408, 806},
-+      { 928, 638, 1408, 806},
-+      {1152, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1280x768Data_2[]=
-+{
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806},
-+      {1408, 806, 1408, 806}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1024x600Data_1[] =
-+{
-+      {840, 604,1344, 800},
-+      {840, 560,1344, 800},
-+      {840, 604,1344, 800},
-+      {840, 560,1344, 800},
-+      {840, 689,1344, 800},
-+      {1050, 800,1344, 800},
-+      {1344, 800,1344, 800},
-+      {800, 449,1280, 789},
-+      {800, 525,1280, 785}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1024x600Data_2[] =
-+{
-+      {1344, 800,1344, 800},
-+      {1344, 800,1344, 800},
-+      {1344, 800,1344, 800},
-+      {1344, 800,1344, 800},
-+      {1344, 800,1344, 800},
-+      {1344, 800,1344, 800},
-+      {1344, 800,1344, 800},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1152x768Data_1[] =
-+{
-+      { 840, 438,1344, 806},
-+      { 840, 409,1344, 806},
-+      { 840, 438,1344, 806},
-+      { 840, 409,1344, 806},
-+      { 840, 518,1344, 806},
-+      {1050, 638,1344, 806},
-+      {1344, 806,1344, 806},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1152x768Data_2[] =
-+{
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+/* TW: Pass 1:1 data */
-+static const SiS_LVDSDataStruct  SiS_LVDSXXXxXXXData_1[]=
-+{
-+        { 800, 449,  800, 449},
-+      { 800, 449,  800, 449},
-+      { 900, 449,  900, 449},
-+      { 900, 449,  900, 449},
-+      { 800, 525,  800, 525},  /*  640x480   */
-+      {1056, 628, 1056, 628},  /*  800x600   */
-+      {1344, 806, 1344, 806},  /* 1024x768   */
-+      {1344,1066, 1344,1066},  /* 1280x1024  */  /* INSERTED ! */
-+      {1688, 806, 1688, 806},  /* 1280x768   */
-+      /* No other panels ! */
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS640x480Data_1[]=
-+{
-+      { 800, 445, 800, 525},   /* 800, 449, 800, 449 */
-+      { 800, 395, 800, 525},
-+      { 800, 445, 800, 525},
-+      { 800, 395, 800, 525},
-+      { 800, 525, 800, 525},
-+      { 800, 525, 800, 525},   /* pseudo */
-+      { 800, 525, 800, 525}    /* pseudo */
-+};
-+
-+/* FSTN 320x240 */
-+static const SiS_LVDSDataStruct  SiS_LVDS640x480Data_2[]=
-+{
-+      { 800, 445, 800, 525},
-+      { 800, 395, 800, 525},
-+      { 800, 445, 800, 525},
-+      { 800, 395, 800, 525},
-+      { 800, 525, 800, 525},
-+        { 800, 525, 800, 525},   /* pseudo */
-+      { 800, 525, 800, 525}    /* pseudo */
-+};
-+
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1280x960Data_1[]=
-+{
-+      { 840, 438,1344, 806},
-+      { 840, 409,1344, 806},
-+      { 840, 438,1344, 806},
-+      { 840, 409,1344, 806},
-+      { 840, 518,1344, 806},
-+      {1050, 638,1344, 806},
-+      {1344, 806,1344, 806},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LVDS1280x960Data_2[]=
-+{
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+/* LCDA */
-+
-+static const SiS_LVDSDataStruct  SiS_LCDA1400x1050Data_1[]=
-+{     /* TW: Might be temporary (invalid) data */
-+        { 928, 416, 1688,1066},
-+      { 928, 366, 1688,1066},
-+      {1008, 416, 1688,1066},
-+      {1008, 366, 1688,1066},
-+      {1200, 530, 1688,1066},
-+      {1088, 616, 1688,1066},
-+      {1312, 784, 1688,1066},
-+      {1568,1040, 1688,1066},
-+      {1688,1066, 1688,1066}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LCDA1400x1050Data_2[]=
-+{     /* TW: Temporary data. Not valid */
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LCDA1600x1200Data_1[]=
-+{     /* TW: Temporary data. Not valid */
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      {1344, 806,1344, 806},
-+      { 800, 449,1280, 801},
-+      { 800, 525,1280, 813}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_LCDA1600x1200Data_2[]=
-+{     /* TW: Temporary data. Not valid */
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0},
-+      {0, 0, 0, 0}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_CHTVUNTSCData[]=
-+{
-+      { 840, 600, 840, 600},
-+      { 840, 600, 840, 600},
-+      { 840, 600, 840, 600},
-+      { 840, 600, 840, 600},
-+      { 784, 600, 784, 600},
-+      {1064, 750,1064, 750},
-+        {1160, 945,1160, 945}
-+};
-+
-+static const SiS_LVDSDataStruct  SiS_CHTVONTSCData[]=
-+{
-+      { 840, 525, 840, 525},
-+      { 840, 525, 840, 525},
-+      { 840, 525, 840, 525},
-+      { 840, 525, 840, 525},
-+      { 784, 525, 784, 525},
-+      {1040, 700,1040, 700},
-+        {1160, 840,1160, 840}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1076_1[]=
-+{  /* 1024x768 */
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1076_2[]=
-+{  /* 1024x768 */
-+      { 1184, 622 },
-+      { 1184, 597 },
-+      { 1184, 622 },
-+      { 1184, 597 },
-+      { 1152, 622 },
-+      { 1232, 722 },
-+      {    0, 0   },
-+      {    0, 794 },
-+      {    0, 0   }
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1210_1[]=
-+{  /* 1280x1024 */
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1210_2[]=
-+{  /* 1280x1024 */
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1296_1[]=
-+{  /* 1400x1050 */
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1296_2[]=
-+{  /* 1400x1050 - looks heavily invalid */
-+      { 808 , 740},
-+      { 0   , 715},
-+      { 632 , 740},
-+      { 632 , 715},
-+      { 1307, 780},
-+      { 1387,1157},
-+      { 1499, 924},
-+      { 1627,1052},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1600_1[]=
-+{  /* 1600x1200 */
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct SiS_PanelType1600_2[]=
-+{  /* 1600x1200 - BIOS looks heavily invalid, not copied */
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct  SiS_PanelTypeNS_1[]=
-+{
-+      { 8,   0},
-+      { 8,   0},
-+      { 8,   0},
-+      { 8,   0},
-+      { 8,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0, 806},
-+      { 0, 0 }
-+};
-+
-+static const SiS_LVDSDesStruct  SiS_PanelTypeNS_2[] =
-+{
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0},
-+      { 0 , 0}
-+};
-+
-+static const SiS_LVDSDesStruct  SiS_CHTVUNTSCDesData[]=
-+{
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0}
-+};
-+
-+static const SiS_LVDSDesStruct  SiS_CHTVONTSCDesData[]=
-+{
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0}
-+};
-+
-+static const SiS_LVDSDesStruct  SiS_CHTVUPALDesData[]=
-+{
-+      {256,   0},
-+      {256,   0},
-+      {256,   0},
-+      {256,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0}
-+};
-+
-+static const SiS_LVDSDesStruct  SiS_CHTVOPALDesData[]=
-+{
-+      {256,   0},
-+      {256,   0},
-+      {256,   0},
-+      {256,   0},
-+      { 0,   0},
-+      { 0,   0},
-+      { 0,   0}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1320x480_1[] =
-+{
-+ {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
-+   0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-+   0x00 }},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+   0x00 }},
-+ {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
-+   0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+   0x00 }},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+   0x00 }},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
-+   0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
-+   0x00 }},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+   0x01 }},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+   0x00 }}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_1[] =
-+{
-+        {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-+        0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-+        0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
-+        0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
-+        0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0xaf,0xba,
-+        0x3b,0x82,0xdf,0xb0,0x00,0x00,0x01,
-+        0x00}},
-+        {{0x7e,0x63,0x82,0x68,0x15,0x1e,0xf1,
-+        0xae,0x85,0x57,0x1f,0x30,0x00,0x26,
-+        0x01}},
-+        {{0xa3,0x7f,0x87,0x86,0x97,0x1e,0xf1,
-+        0xae,0x85,0x57,0x1f,0x30,0x00,0x02,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_1_H[] =
-+{
-+        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+        0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+          0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+        0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+        0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-+        0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-+        0x00}},
-+        {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-+        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-+        0x01}},
-+        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_2[] =
-+{
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+          0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-+        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-+        0x01}},
-+        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_2_H[] =
-+{
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-+        0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-+        0x01}},
-+        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_1[] =
-+{
-+        {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
-+        0x00}},
-+        {{0x64,0x4f,0x88,0x54,0x9f,0x04,0x3e,
-+        0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
-+        0x00}},
-+        {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
-+        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
-+        0x01}},
-+        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_1_H[] =
-+{
-+        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+        0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+        0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
-+        0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
-+        0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
-+        0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
-+        0x00}},
-+        {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
-+        0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
-+        0x00}},
-+        {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
-+        0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
-+        0x01}},
-+        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_2[] =
-+{
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
-+        0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
-+        0x00}},
-+        {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
-+        0xae,0x84,0x57,0x25,0x30,0x00,0x02,
-+        0x01}},
-+        {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_2_H[] =
-+{
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
-+        0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
-+        0x00}},
-+        {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
-+        0xae,0x84,0x57,0x25,0x30,0x00,0x01,
-+        0x01}},
-+        {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
-+        0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+        0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_1[] =
-+{
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
-+   0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
-+   0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
-+   0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
-+   0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
-+   0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
-+   0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
-+   0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
-+   0x00}},
-+ {{0x5b,0x4f,0x9f,0x55,0x19,0x04,0x3e,
-+   0xec,0x8e,0xdf,0x05,0x20,0x00,0x01,
-+   0x00}},
-+ {{0x6f,0x63,0x93,0x69,0x8d,0x7c,0xf0,
-+   0x64,0x86,0x57,0x7d,0x20,0x00,0x05,
-+   0x01}},
-+ {{0x8b,0x7f,0x8f,0x85,0x09,0x24,0xf5,
-+   0x0c,0x8e,0xff,0x25,0x30,0x00,0x02,
-+   0x01}},
-+ {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
-+   0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
-+   0x01}},
-+ {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
-+   0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
-+   0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_1_H[] =
-+{
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0x9e,0x1f,
-+   0x93,0x86,0x8f,0x9f,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
-+   0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x47,0x27,0x8b,0x30,0x1e,0x9e,0x1f,
-+   0x92,0x86,0x8f,0x9f,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
-+   0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x47,0x27,0x8b,0x2c,0x1a,0xee,0x1f,
-+   0xe2,0x86,0xdf,0xef,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x51,0x31,0x95,0x36,0x04,0x66,0xf0,
-+   0x5a,0x8e,0x57,0x67,0x20,0x00,0x01,
-+   0x01}},
-+ {{0x5f,0x3f,0x83,0x44,0x92,0x0e,0xf5,
-+   0x02,0x86,0xff,0x0f,0x10,0x00,0x01,
-+   0x01}},
-+ {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
-+   0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
-+   0x01}},
-+ {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
-+   0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
-+   0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_2[] =
-+{
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+   0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
-+   0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
-+   0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+   0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
-+   0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
-+   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
-+   0x00}},
-+ {{0xab,0x60,0x9f,0x80,0x04,0x24,0xb3,
-+   0x7c,0x8e,0x03,0x02,0x10,0x00,0x02,
-+   0x01}},
-+ {{0xab,0x63,0x8f,0x8a,0x8e,0x24,0xf1,
-+   0xb6,0x88,0x57,0x25,0x10,0x00,0x02,
-+   0x01}},
-+ {{0xab,0x7f,0x8f,0x98,0x9c,0x24,0xf5,
-+   0x0a,0x8c,0xff,0x25,0x30,0x00,0x02,
-+   0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+   0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+   0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_2_H[] =
-+{
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+   0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
-+   0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
-+   0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+   0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
-+   0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
-+   0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
-+   0x00}},
-+ {{0x83,0x38,0x97,0x58,0x9c,0x24,0xb3,
-+   0x7c,0x8e,0x03,0x02,0x10,0x00,0x01,
-+   0x01}},
-+ {{0x79,0x31,0x9d,0x58,0x9c,0x24,0xf1,
-+   0xb6,0x88,0x57,0x25,0x10,0x00,0x01,
-+   0x01}},
-+ {{0x6b,0x3f,0x8f,0x58,0x9c,0x24,0xf5,
-+   0x0a,0x8c,0xff,0x25,0x30,0x00,0x01,
-+   0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+   0x01}},
-+ {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
-+   0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
-+   0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1XXXxXXX_1[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x05,
-+   0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+   0x01}},
-+ {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
-+   0x02,0x88,0xff,0x25,0x10,0x00,0x02,
-+   0x01}},
-+ {{0xce,0x9f,0x92,0xa8,0x14,0x28,0x5a,
-+   0x00,0x84,0xff,0x29,0x09,0x00,0x07,
-+   0x01}},
-+ {{0xce,0x9f,0x92,0xa9,0x17,0x24,0xf5,
-+   0x02,0x88,0xff,0x25,0x10,0x00,0x07,
-+   0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1XXXxXXX_1_H[] =
-+{
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+   0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+   0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+   0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x30,0x00,0x00,
-+   0x00}},
-+ {{0x38,0x27,0x9c,0x2c,0x80,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+   0x00}},
-+ {{0x4d,0x31,0x91,0x3b,0x03,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x01,
-+   0x01}},
-+ {{0x63,0x3f,0x87,0x4a,0x92,0x24,0xf5,
-+   0x02,0x88,0xff,0x25,0x10,0x00,0x01,
-+   0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_1[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+   0x01}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_1_H[] =
-+{
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
-+   0x00}},
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+   0x83,0x85,0x63,0xba,0x00,0x00,0x00,
-+   0x00}},
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+   0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
-+   0x00}},
-+ {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
-+   0x83,0x85,0x63,0xba,0x00,0x00,0x00,
-+   0x00}},
-+ {{0x2d,0x28,0x90,0x2c,0x80,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+   0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_2[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+   0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+   0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_2_H[] =
-+{
-+ {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
-+   0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
-+   0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
-+   0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+   0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+   0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_3[] =
-+{
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+   0x00}},
-+ {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
-+   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
-+   0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+   0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+   0x00}}
-+};
-+
-+static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_3_H[] =
-+{
-+ {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
-+   0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
-+   0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
-+   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
-+   0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
-+   0x00}},
-+ {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
-+   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
-+   0x01}},
-+ {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
-+   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
-+   0x00}}
-+};
-+
-+#define SIS_PL_HSYNCP 0x01
-+#define SIS_PL_HSYNCN 0x02
-+#define SIS_PL_VSYNCP 0x04
-+#define SIS_PL_VSYNCN 0x08
-+#define SIS_PL_DVI    0x80
-+
-+typedef struct _SiS_PlasmaModes
-+{
-+  const char *name;
-+  ULONG  clock;
-+  USHORT HDisplay, HTotal, HFrontPorch, HSyncWidth;
-+  USHORT VDisplay, VTotal, VFrontPorch, VSyncWidth;
-+  UCHAR  SyncFlags;
-+} SiS_PlasmaModes;
-+
-+
-+typedef struct _SiS_PlasmaTables
-+{
-+   USHORT vendor;
-+   UCHAR  productnum;
-+   USHORT product[5];
-+   const char *plasmaname;
-+   UCHAR  modenum;
-+   UCHAR  plasmamodes[20];  /* | 0x80 = DVI-capable, | 0x40 = analog */
-+} SiS_PlasmaTables;
-+
-+static const SiS_PlasmaModes SiS_PlasmaMode[] = {
-+   {  "640x400",              /* 00: IBM 400@70 */
-+      25175,
-+       640,  800, 17,  64,
-+       400,  449, 13,   2,
-+      SIS_PL_HSYNCN | SIS_PL_VSYNCN },
-+   {  "640x480",              /* 01: VESA 480@72 */
-+      31500,
-+       640,  832, 24,  40,
-+       480,  520,  9,   3,
-+      SIS_PL_HSYNCN | SIS_PL_VSYNCN },
-+   {  "800x600",              /* 02: VESA 600@72 */
-+      50000,
-+       800, 1040, 56, 120,
-+       600,  666, 37,   6,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "864x480",              /* 03: Cereb wide 1 */
-+      42526,
-+       864, 1134, 22,  86,
-+       480,  500,  1,   3,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCN },
-+   {  "848x480",              /* 04: VESA wide (NEC1) */
-+      33750,
-+       848, 1088, 16, 112,
-+       480,  517,  6,   8,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1024x576",             /* 05: VESA wide (NEC2) */
-+      47250,
-+      1024, 1320, 16, 144,
-+       576,  596,  2,   4,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1280x720",             /* 06: VESA wide (NEC3) */
-+      76500,
-+      1280, 1696, 48, 176,
-+       720,  750,  4,   8,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1360x765",             /* 07: VESA wide (NEC4) */
-+      85500,
-+      1360, 1792, 64, 176,
-+       765,  795,  4,   8,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1024x600",             /* 08: CEREB wide 2 */
-+      51200,
-+      1024, 1352, 51, 164,
-+       600,  628,  1,   4,
-+      SIS_PL_HSYNCN | SIS_PL_VSYNCP },
-+   {  "1024x768",             /* 09: VESA 768@75 */
-+      78750,
-+      1024, 1312,  16, 96,
-+       768,  800,   1,  3,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1152x864",             /* 10: VESA 1152x864@75 */
-+      108000,
-+      1152, 1600, 64, 128,
-+       864,  900,  1,   3,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1280x1024",            /* 11: VESA 1024@60 */
-+      108000,
-+      1280, 1688, 48, 112,
-+      1024, 1066,  1,   3,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1280x768",             /* 12: W_XGA */
-+      81000,
-+      1280, 1688, 48, 112,
-+       768,  802,  3,   6,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCN },
-+   {  "1280x768",             /* 13: I/O Data W_XGA@56Hz */
-+      76064,
-+      1280, 1688, 48, 112,
-+       768,  802,  2,   3,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1376x768",             /* 14: I/O Wide XGA */
-+      87340,
-+      1376, 1808, 32, 128,
-+       768,  806,  3,   6,
-+      SIS_PL_HSYNCN | SIS_PL_VSYNCP },
-+   {  "1280x960",             /* 15: VESA 960@60 */
-+      108000,
-+      1280, 1800, 96, 112,
-+       960, 1000,  1,   3,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "1400x1050",            /* 16: VESA 1050@60Hz */
-+      108000,
-+      1400, 1688, 48, 112,
-+      1050, 1066,  1,   3,
-+      SIS_PL_HSYNCN | SIS_PL_VSYNCN },
-+   {  "1360x768",             /* 17: VESA wide (NEC4/2) */
-+      85500,
-+      1360, 1792, 64, 112,
-+       765,  795,  3,   6,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP },
-+   {  "800x600",              /* 18: VESA 600@56 */
-+      36000,
-+       800, 1024, 24,   2,
-+       600,  625,  1,   2,
-+      SIS_PL_HSYNCP | SIS_PL_VSYNCP }
-+};
-+
-+static const SiS_PlasmaTables SiS_PlasmaTable[] = {
-+#if 0  /* Product IDs missing */
-+   { 0x38a3, 4,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 42VP4/42VP4D/42VP4G/42VP4DG",
-+     14,   /* All DVI, except 0, 7, 13; 3, 15, 16 unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,12|0xc0,
-+      13|0x40,14|0xc0,15|0xc0,16|0xc0, 0     , 0     , 0     , 0     , 0     , 0 }
-+   },
-+   { 0x38a3, 3,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 42PD1/50PD1/50PD2",
-+     5,   /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0, 0     , 0     , 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x38a3, 1,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 42PD3",
-+     10,   /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 5|0xc0, 6|0xc0, 7|0x40, 8|0xc0, 9|0xc0,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x38a3, 2,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 42VM3/61XM1",
-+     11,  /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 5|0xc0, 6|0xc0, 8|0xc0, 9|0xc0,11|0xc0,
-+      17|0xc0, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x38a3, 2,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 42MP1/42MP2",
-+     6,   /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0,11|0xc0, 0     , 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x38a3, 1,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 50MP1",
-+     10,   /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,13|0x40,14|0xc0,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+#endif
-+   { 0x38a3, 4,
-+     { 0xa482, 0xa483, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 42MP3/42MP4/50MP2/61MP1",
-+     11,   /* All DVI except 0, 7, 13, 17 */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,13|0x40,14|0xc0,
-+      17|0x40, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+#if 0  /* Product IDs missing */
-+   { 0x38a3, 1,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 3300W",
-+     3,
-+     { 0|0x40, 1|0xc0,18|0xc0, 0     , 0     , 0     , 0     , 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x38a3, 1,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 4200W",
-+     4,   /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 0     , 0     , 0     , 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x38a3, 1,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 4210W",
-+     6,   /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0,11|0xc0, 0     , 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x38a3, 1,
-+     { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "NEC PlasmaSync 5000W",
-+     7,   /* DVI entirely unknown */
-+     { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,11|0xc0, 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+#endif
-+   { 0x412f, 1,
-+     { 0x000c, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "Pioneer 503CMX",
-+     6,   /* DVI unknown */
-+     { 1|0xc0, 2|0xc0, 9|0xc0,11|0xc0,12|0xc0,15|0xc0, 0     , 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x34a9, 1,
-+     { 0xa00e, 0x0000, 0x0000, 0x0000, 0x0000 },
-+     "Panasonic TH-42",
-+     5,   /* No DVI output */
-+     { 1|0x40, 2|0x40, 4|0x40, 9|0x40,15|0x40, 0     , 0     , 0     , 0     , 0     ,
-+       0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
-+   },
-+   { 0x0000 }
-+};
-+
- void     SiS_SetReg1(USHORT, USHORT, USHORT);
- void     SiS_SetReg2(SiS_Private *, USHORT, USHORT, USHORT);
- void     SiS_SetReg3(USHORT, USHORT);
-@@ -158,6 +2337,7 @@ void     SiS_SetMemoryClock(SiS_Private 
- void     SiS_SetDRAMModeRegister(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- BOOLEAN  SiS_SearchVBModeID(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT *ModeNo);
- void     SiS_IsLowResolution(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
-+void     SiS_GetSysFlags(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- #ifdef SIS300
- void     SiS_SetDRAMSize_300(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-@@ -192,12 +2372,15 @@ void     SiS_VerifyMclk(SiS_Private *SiS
- void     SiS_HandleCRT1(SiS_Private *SiS_Pr);
- void     SiS_Handle301B_1400x1050(SiS_Private *SiS_Pr, USHORT ModeNo);
--void     SiS_SetEnableDstn(SiS_Private *SiS_Pr);
-+void     SiS_SetEnableDstn(SiS_Private *SiS_Pr, int enable);
-+void     SiS_SetEnableFstn(SiS_Private *SiS_Pr, int enable);
- void     SiS_Delay15us(SiS_Private *SiS_Pr);
- BOOLEAN  SiS_SearchModeID(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT *ModeNo,USHORT *ModeIdIndex);
- BOOLEAN  SiS_CheckMemorySize(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                              USHORT ModeNo,USHORT ModeIdIndex);
- UCHAR    SiS_GetModePtr(SiS_Private *SiS_Pr, UCHAR *ROMAddr, USHORT ModeNo,USHORT ModeIdIndex);
-+void     SiS_WhatTheHellIsThis(SiS_Private *SiS_Pr,PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr);
-+void     SiS_StrangeStuff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- void     SiS_SetSeqRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT StandTableIndex);
- void     SiS_SetMiscRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT StandTableIndex);
- void     SiS_SetCRTCRegs(SiS_Private *SiS_Pr, UCHAR *ROMAddr,PSIS_HW_DEVICE_INFO HwDeviceExtension,
-@@ -267,19 +2450,19 @@ void            SiS_SetPitchCRT1(SiS_Private *S
- void          SiS_SetPitchCRT2(SiS_Private *SiS_Pr, ScrnInfoPtr pScrn, UShort BaseAddr);
- extern int      SiS_compute_vclk(int Clock, int *out_n, int *out_dn, int *out_div,
-                                   int *out_sbit, int *out_scale);
-+extern void   SiSCalcClock(ScrnInfoPtr pScrn, int clock, int max_VLD, unsigned int *vclk);
-+
- extern unsigned char SiS_GetSetBIOSScratch(ScrnInfoPtr pScrn, USHORT offset, unsigned char value);
- extern unsigned char SiS_GetSetModeID(ScrnInfoPtr pScrn, unsigned char id);
--extern USHORT              SiS_CalcModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode);
-+extern USHORT              SiS_CalcModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN hcm);
- #endif
- extern USHORT    SiS_GetOffset(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,
-                        USHORT RefreshRateTableIndex,PSIS_HW_DEVICE_INFO HwDeviceExtension);
- extern USHORT    SiS_GetColorDepth(SiS_Private *SiS_Pr, UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex);
- extern void      SiS_DisableBridge(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT BaseAddr);
--extern BOOLEAN   SiS_SetCRT2Group301(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
--                                     PSIS_HW_DEVICE_INFO HwDeviceExtension);
--extern void      SiS_PresetScratchregister(SiS_Private *SiS_Pr, USHORT SiS_P3d4,
--                                           PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+extern BOOLEAN   SiS_SetCRT2Group(SiS_Private *SiS_Pr, USHORT BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,
-+                                  PSIS_HW_DEVICE_INFO HwDeviceExtension);
- extern void      SiS_UnLockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr);
- extern void      SiS_LockCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT BaseAddr);
- extern BOOLEAN   SiS_BridgeIsOn(SiS_Private *SiS_Pr, USHORT BaseAddr);
-@@ -321,10 +2504,12 @@ int    sisfb_mode_rate_to_dclock(SiS_Pri
-                             unsigned char modeno, unsigned char rateindex);
- int    sisfb_mode_rate_to_ddata(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-                        unsigned char modeno, unsigned char rateindex,
--                       ULONG *left_margin, ULONG *right_margin, 
-+                       ULONG *left_margin, ULONG *right_margin,
-                        ULONG *upper_margin, ULONG *lower_margin,
-                        ULONG *hsync_len, ULONG *vsync_len,
-                        ULONG *sync, ULONG *vmode);
-+BOOLEAN sisfb_gettotalfrommode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-+                     unsigned char modeno, int *htotal, int *vtotal, unsigned char rateindex);
- #endif
- #endif
---- linux-2.6.0-test1/drivers/video/sis/oem300.h       2003-06-14 12:18:05.000000000 -0700
-+++ 25/drivers/video/sis/oem300.h      2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,30 @@
--
--/* OEM Data for 300 series */
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/oem300.h.c,v 1.0 2001/11/30 12:12:01 eich Exp $ */
-+/*
-+ * OEM Data for 300 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
- const UCHAR SiS300_OEMTVDelay301[8][4] =
- {
-@@ -680,325 +705,147 @@ const UCHAR SiS300_Filter2[10][9][7] =
-     }
- };
--const UCHAR SiS300_LCDHData[24][11][5] = {
-+/* Custom data for Barco iQ Pro R300 */
-+const UCHAR barco_p1[2][9][7][3] = {
-     {
--        {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x65,0xef,0x83,0x5c,0x00},
--      {0x65,0xef,0x83,0x5c,0x00},
--      {0x8a,0x14,0x00,0x80,0x00},
--      {0x8a,0x14,0x00,0x80,0x00}
--    },
--    {
--        {0x4e,0x18,0x90,0x38,0x00},
--      {0x4e,0x18,0x90,0x38,0x00},
--      {0x8e,0x18,0x28,0x78,0x00},
--      {0x8e,0x18,0x28,0x78,0x00},
--      {0x8e,0x18,0x28,0x78,0x00},
--      {0x4e,0x18,0x90,0x38,0x00},
--      {0x4e,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9a,0x56,0x00},
--        {0x67,0x11,0x9a,0x56,0x00},
--      {0x8a,0x14,0x00,0x80,0x00},
--      {0x8a,0x14,0x00,0x80,0x00}
--    },
--    {
--        {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x65,0xef,0x83,0x5c,0x00},
--      {0x65,0xef,0x83,0x5c,0x00},
--      {0x8a,0x14,0x00,0x80,0x00},
--      {0x8a,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4e,0x18,0x90,0x38,0x00},
--      {0x4e,0x18,0x90,0x38,0x00},
--      {0x8e,0x18,0x28,0x78,0x00},
--      {0x8e,0x18,0x28,0x78,0x00},
--      {0x8e,0x18,0x28,0x78,0x00},
--      {0x4e,0x18,0x90,0x38,0x00},
--      {0x4e,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9a,0x56,0x00},
--      {0x67,0x11,0x9a,0x56,0x00},
--      {0x8a,0x14,0x00,0x80,0x00},
--      {0x8a,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x67,0x91,0x84,0x5e,0x00},
--      {0x65,0xef,0x83,0x5c,0x00},
--      {0x65,0xef,0x83,0x5c,0x00},
--      {0x8a,0x14,0x00,0x80,0x00},
--      {0x8a,0x14,0x00,0x80,0x00}
--    },
--    {
--        {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x67,0x91,0x84,0x5E,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x65,0xEF,0x83,0x5C,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
--    },
--    {
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x8E,0x18,0x28,0x78,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x4E,0x18,0x90,0x38,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x67,0x11,0x9A,0x56,0x00},
--      {0x8A,0x14,0x00,0x80,0x00},
--      {0x8A,0x14,0x00,0x80,0x00}
-+      {  { 0x16, 0xcf, 0x00 },
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x19, 0x00 }
-+      },
-+      {
-+         { 0x16, 0xcf, 0x00 },
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x1e, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x16, 0x00 }
-+      },
-+      {
-+         { 0x16, 0xcf, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x19, 0x00 },
-+         {    0,    0,    0 }
-+      },
-+      {
-+         {    0,    0,    0 }
-+      },
-+      {
-+         { 0x16, 0xcf, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x1e, 0x00 },
-+         {    0,    0,    0 }
-+      },
-+      {
-+         { 0x16, 0xd1, 0x00 },
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x11, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x26, 0x00 }
-+      },
-+      {
-+         { 0x16, 0xd1, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x30, 0x00 },
-+         {    0,    0,    0 }
-+      },
-+      {
-+         { 0x16, 0x00, 0x00 },
-+         { 0x17, 0xa0, 0x00 },
-+         { 0x1a, 0xa0, 0x00 },
-+         { 0x1b, 0x2a, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         {    0,    0,    0 }
-+      },
-+      {
-+         { 0x16, 0x00, 0x00 },
-+         { 0x17, 0xaa, 0x00 },
-+         { 0x1a, 0xa0, 0x00 },
-+         { 0x1b, 0x2a, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         {    0,    0,    0 }
-+      }
-+    },
-+    {
-+      {
-+         { 0x16, 0xcf, 0x00 },
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x19, 0x00 }
-+      },
-+      {
-+         {    0,    0,    0 }
-+      },
-+      {
-+         { 0x16, 0xcf, 0x00 },
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x19, 0x00 },
-+      },
-+      {
-+         {    0,    0,    0 }
-+      },
-+      {
-+         { 0x16, 0xcf, 0x00 },
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe7, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x1e, 0x00 }
-+      },
-+      {
-+         { 0x16, 0xd1, 0x00 },
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe6, 0x00 },
-+         { 0x1b, 0x11, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x26, 0x00 }
-+      },
-+      {
-+         { 0x18, 0x00, 0x00 },
-+         { 0x1a, 0xe0, 0x00 },
-+         { 0x1b, 0x26, 0x00 },
-+         { 0x1c, 0xff, 0x00 },
-+         { 0x1d, 0x1c, 0x00 },
-+         { 0x1e, 0x30, 0x00 },
-+         {    0,    0,    0 }
-+      },
-+      {
-+         {    0,    0,    0 }
-+      },
-+      {
-+         {    0,    0,    0 }
-+      }
-     }
- };
--#if 0
--const UCHAR SiS300_LCDVData[24][11][6] = {
--    {
--        {
--    },
--};
--#endif
-+
-+
-+
-+
-+
---- linux-2.6.0-test1/drivers/video/sis/oem310.h       2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/video/sis/oem310.h      2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,30 @@
--
--/* OEM Data for 310/325/330 series */
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/oem300.h.c,v 1.0 2001/11/30 12:12:01 eich Exp $ */
-+/*
-+ * OEM Data for 315/330 series
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
- const UCHAR SiS310_LCDDelayCompensation_301[] =               /* 301 */
- {
-@@ -100,7 +125,7 @@ const UCHAR SiS310_LCDDelayCompensation_
- const UCHAR SiS310_LCDDelayCompensation_651301LV[] =    /* M650/651 301LV */
- {
--                 0x33,0x33,0x33,    /*   800x600 (guessed) */
-+                 0x33,0x33,0x33,    /*   800x600 (guessed) - new: PanelType, not PanelRes ! */
-                0x33,0x33,0x33,    /*  1024x768 */
-                0x33,0x33,0x33,    /* 1280x1024 */
-                0x33,0x33,0x33,    /*   640x480 (unknown) */
---- linux-2.6.0-test1/drivers/video/sis/osdef.h        2003-06-14 12:17:56.000000000 -0700
-+++ 25/drivers/video/sis/osdef.h       2003-07-19 17:04:55.000000000 -0700
-@@ -1,79 +1,43 @@
--/* #define WINCE_HEADER */
--/* #define WIN2000 */
--/* #define TC */
-+
-+/* OS depending defines */
-+
-+/* The choices are: */
-+
- #define LINUX_KERNEL     /* Kernel framebuffer */
- /* #define LINUX_XF86 */   /* XFree86 */
- /**********************************************************************/
--#ifdef LINUX_KERNEL
--      #include <linux/config.h>
--      #include <linux/version.h>
--      #ifdef CONFIG_FB_SIS_300
--              #define SIS300
--      #endif
--
--      #ifdef CONFIG_FB_SIS_315
--              #define SIS315H
--      #endif
--      #if 1
--              #define SISFBACCEL      /* Include 2D acceleration */
--      #endif
--      #if 1
--              #define SISFB_PAN       /* Include Y-Panning code */
--      #endif
--#else
--/*    #define SIS300*/
--      #define SIS315H
--#endif
--#ifdef LINUX_XF86
--      #define SIS300
--      /* #define SIS315H */ /* TW: done above */
--#endif
-+#ifdef LINUX_KERNEL  /* -------------------------- */
-+#include <linux/config.h>
-+#include <linux/version.h>
--/**********************************************************************/
--#ifdef TC
--#endif
--#ifdef WIN2000
--#endif
--#ifdef WINCE_HEADER
--#endif
--#ifdef LINUX_XF86
-+#ifdef CONFIG_FB_SIS_300
-+#define SIS300
- #endif
--#ifdef LINUX_KERNEL
--#endif
--/**********************************************************************/
--#ifdef TC
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize);
--#endif
--#ifdef WIN2000
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) MemFill((PVOID) MemoryAddress,(ULONG) MemorySize,(UCHAR) value);
-+
-+#ifdef CONFIG_FB_SIS_315
-+#define SIS315H
- #endif
--#ifdef WINCE_HEADER
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize);
-+
-+#if 1
-+#define SISFBACCEL    /* Include 2D acceleration */
- #endif
--#ifdef LINUX_XF86
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
-+
- #endif
--#ifdef LINUX_KERNEL
--#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
-+
-+#ifdef LINUX_XF86 /* ----------------------------- */
-+#define SIS300
-+#define SIS315H
- #endif
--/**********************************************************************/
- /**********************************************************************/
--
--#ifdef TC
--#define SiS_MemoryCopy(Destination,Soruce,Length) memmove(Destination, Soruce, Length);
--#endif
--#ifdef WIN2000
--#define SiS_MemoryCopy(Destination,Soruce,Length)  /*VideoPortMoveMemory((PUCHAR)Destination , Soruce,length);*/
--#endif
--#ifdef WINCE_HEADER
--#define SiS_MemoryCopy(Destination,Soruce,Length) memmove(Destination, Soruce, Length);
--#endif
- #ifdef LINUX_XF86
-+#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
- #define SiS_MemoryCopy(Destination,Soruce,Length) memcpy(Destination,Soruce,Length)
- #endif
-+
- #ifdef LINUX_KERNEL
-+#define SiS_SetMemory(MemoryAddress,MemorySize,value) memset(MemoryAddress, value, MemorySize)
- #define SiS_MemoryCopy(Destination,Soruce,Length) memcpy(Destination,Soruce,Length)
- #endif
-@@ -104,19 +68,6 @@
- #endif /* InPortLong */
- /**********************************************************************/
--/*  TC                                                                */
--/**********************************************************************/
--
--#ifdef TC
--#define OutPortByte(p,v) outp((unsigned short)(p),(unsigned char)(v))
--#define OutPortWord(p,v) outp((unsigned short)(p),(unsigned short)(v))
--#define OutPortLong(p,v) outp((unsigned short)(p),(unsigned long)(v))
--#define InPortByte(p)    inp((unsigned short)(p))
--#define InPortWord(p)    inp((unsigned short)(p))
--#define InPortLong(p)    ((inp((unsigned short)(p+2))<<16) | inp((unsigned short)(p)))
--#endif
--
--/**********************************************************************/
- /*  LINUX XF86                                                        */
- /**********************************************************************/
-@@ -142,29 +93,4 @@
- #define InPortLong(p)    inl((u16)(p))
- #endif
--/**********************************************************************/
--/*  WIN 2000                                                          */
--/**********************************************************************/
--
--#ifdef WIN2000
--#define OutPortByte(p,v) VideoPortWritePortUchar ((PUCHAR) (p), (UCHAR) (v))
--#define OutPortWord(p,v) VideoPortWritePortUshort((PUSHORT) (p), (USHORT) (v))
--#define OutPortLong(p,v) VideoPortWritePortUlong ((PULONG) (p), (ULONG) (v))
--#define InPortByte(p)    VideoPortReadPortUchar  ((PUCHAR) (p))
--#define InPortWord(p)    VideoPortReadPortUshort ((PUSHORT) (p))
--#define InPortLong(p)    VideoPortReadPortUlong  ((PULONG) (p))
--#endif
--
--/**********************************************************************/
--/*  WIN CE                                                            */
--/**********************************************************************/
--
--#ifdef WINCE_HEADER
--#define OutPortByte(p,v) WRITE_PORT_UCHAR ((PUCHAR) (p), (UCHAR) (v))
--#define OutPortWord(p,v) WRITE_PORT_USHORT((PUSHORT) (p), (USHORT) (v))
--#define OutPortLong(p,v) WRITE_PORT_ULONG ((PULONG) (p), (ULONG) (v))
--#define InPortByte(p)    READ_PORT_UCHAR  ((PUCHAR) (p))
--#define InPortWord(p)    READ_PORT_USHORT ((PUSHORT) (p))
--#define InPortLong(p)    READ_PORT_ULONG  ((PULONG) (p))
--#endif
---- linux-2.6.0-test1/drivers/video/sis/sis_accel.c    2003-06-14 12:18:52.000000000 -0700
-+++ 25/drivers/video/sis/sis_accel.c   2003-07-19 17:04:55.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * SiS 300/630/730/540/315/550/650/740 frame buffer driver
-+ * SiS 300/630/730/540/315/550/650/740/330/660 frame buffer driver
-  * for Linux kernels 2.4.x and 2.5.x
-  *
-  * 2D acceleration part
-@@ -211,7 +211,7 @@ SiS300SubsequentSolidFillRect(int x, int
-       SiS300DoCMD
- }
--/* 310/325 series ------------------------------------------------ */
-+/* 315 series ---------------------------------------------------- */
- static void
- SiS310SetupForScreenToScreenCopy(int xdir, int ydir, int rop,
-@@ -230,7 +230,7 @@ SiS310SetupForScreenToScreenCopy(int xdi
-               /* SiSSetupCMDFlag(BITBLT | SRCVIDEO) */
-       }
-       SiS310SetupCMDFlag(ivideo.SiS310_AccelDepth)
--      /* TW: The 310/325 series is smart enough to know the direction */
-+      /* TW: The 315 series is smart enough to know the direction */
- }
- static void
-@@ -328,11 +328,13 @@ void sisfb_syncaccel(void)
-     }
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,34)  /* --- KERNEL 2.5.34 and later --- */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)  /* --------------- 2.5 --------------- */
- int fbcon_sis_sync(struct fb_info *info)
- {
--   if(!sisfb_accel) return 0;
-+   if(!ivideo.accel)
-+      return 0;
-+   
-    CRITFLAGS
-    if(sisvga_engine == SIS_300_VGA) {
-       SiS300Sync();
-@@ -352,7 +354,7 @@ void fbcon_sis_fillrect(struct fb_info *
-    if(!rect->width || !rect->height)
-       return;
--   if(!sisfb_accel) {
-+   if(!ivideo.accel) {
-       cfb_fillrect(info, rect);
-       return;
-    }
-@@ -388,7 +390,7 @@ void fbcon_sis_copyarea(struct fb_info *
-    CRITFLAGS
-    TWDEBUG("Inside sis_copyarea");
--   if(!sisfb_accel) {
-+   if(!ivideo.accel) {
-       cfb_copyarea(info, area);
-       return;
-    }
-@@ -418,7 +420,7 @@ void fbcon_sis_copyarea(struct fb_info *
- #endif
--#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,33)  /* ------ KERNEL <2.5.34 ------ */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)  /* -------------- 2.4 --------------- */
- void fbcon_sis_bmove(struct display *p, int srcy, int srcx,
-                           int dsty, int dstx, int height, int width)
-@@ -591,38 +593,38 @@ void fbcon_sis_revc(struct display *p, i
- #ifdef FBCON_HAS_CFB8
- struct display_switch fbcon_sis8 = {
--      setup:                  fbcon_cfb8_setup,
--      bmove:                  fbcon_sis_bmove,
--      clear:                  fbcon_sis_clear8,
--      putc:                   fbcon_cfb8_putc,
--      putcs:                  fbcon_cfb8_putcs,
--      revc:                   fbcon_cfb8_revc,
--      clear_margins:          fbcon_cfb8_clear_margins,
--      fontwidthmask:          FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-+      .setup                  = fbcon_cfb8_setup,
-+      .bmove                  = fbcon_sis_bmove,
-+      .clear                  = fbcon_sis_clear8,
-+      .putc                   = fbcon_cfb8_putc,
-+      .putcs                  = fbcon_cfb8_putcs,
-+      .revc                   = fbcon_cfb8_revc,
-+      .clear_margins          = fbcon_cfb8_clear_margins,
-+      .fontwidthmask          = FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
- };
- #endif
- #ifdef FBCON_HAS_CFB16
- struct display_switch fbcon_sis16 = {
--      setup:                  fbcon_cfb16_setup,
--      bmove:                  fbcon_sis_bmove,
--      clear:                  fbcon_sis_clear16,
--      putc:                   fbcon_cfb16_putc,
--      putcs:                  fbcon_cfb16_putcs,
--      revc:                   fbcon_sis_revc,
--      clear_margins:          fbcon_cfb16_clear_margins,
--      fontwidthmask:          FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-+      .setup                  = fbcon_cfb16_setup,
-+      .bmove                  = fbcon_sis_bmove,
-+      .clear                  = fbcon_sis_clear16,
-+      .putc                   = fbcon_cfb16_putc,
-+      .putcs                  = fbcon_cfb16_putcs,
-+      .revc                   = fbcon_sis_revc,
-+      .clear_margins          = fbcon_cfb16_clear_margins,
-+      .fontwidthmask          = FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
- };
- #endif
- #ifdef FBCON_HAS_CFB32
- struct display_switch fbcon_sis32 = {
--      setup:                  fbcon_cfb32_setup,
--      bmove:                  fbcon_sis_bmove,
--      clear:                  fbcon_sis_clear32,
--      putc:                   fbcon_cfb32_putc,
--      putcs:                  fbcon_cfb32_putcs,
--      revc:                   fbcon_sis_revc,
--      clear_margins:          fbcon_cfb32_clear_margins,
--      fontwidthmask:          FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-+      .setup                  = fbcon_cfb32_setup,
-+      .bmove                  = fbcon_sis_bmove,
-+      .clear                  = fbcon_sis_clear32,
-+      .putc                   = fbcon_cfb32_putc,
-+      .putcs                  = fbcon_cfb32_putcs,
-+      .revc                   = fbcon_sis_revc,
-+      .clear_margins          = fbcon_cfb32_clear_margins,
-+      .fontwidthmask          = FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
- };
- #endif
---- linux-2.6.0-test1/drivers/video/sis/sis_accel.h    2003-06-14 12:18:08.000000000 -0700
-+++ 25/drivers/video/sis/sis_accel.h   2003-07-19 17:04:55.000000000 -0700
-@@ -47,7 +47,7 @@
- #define TRAPAZOID_FILL          0x00000005  /* Fill trapezoid */
- #define TRANSPARENT_BITBLT      0x00000006  /* Transparent Blit */
--/* Additional engine commands for 310/325 */
-+/* Additional engine commands for 315 */
- #define ALPHA_BLEND           0x00000007  /* Alpha blend ? */
- #define A3D_FUNCTION          0x00000008  /* 3D command ? */
- #define       CLEAR_Z_BUFFER          0x00000009  /* ? */
-@@ -90,11 +90,11 @@
- #define NO_RESET_COUNTER        0x00400000
- #define NO_LAST_PIXEL           0x00200000
--/* Subfunctions for Color/Enhanced Color Expansion (310/325 only) */
-+/* Subfunctions for Color/Enhanced Color Expansion (315 only) */
- #define COLOR_TO_MONO         0x00100000
- #define AA_TEXT                       0x00200000
--/* Some general registers for 310/325 series */
-+/* Some general registers for 315 series */
- #define SRC_ADDR              0x8200
- #define SRC_PITCH             0x8204
- #define AGP_BASE              0x8206 /* color-depth dependent value */
-@@ -326,7 +326,7 @@ int     CmdQueLen;
--/* ----------- SiS 310/325 series --------------- */
-+/* -------------- SiS 315 series --------------- */
- /* Q_STATUS:
-    bit 31 = 1: All engines idle and all queues empty
-@@ -342,7 +342,7 @@ int     CmdQueLen;
-    bits 7:0:   2D counter 1
-    Where is the command queue length (current amount of commands the queue
--   can accept) on the 310/325 series? (The current implementation is taken
-+   can accept) on the 315 series? (The current implementation is taken
-    from 300 series and certainly wrong...)
- */
---- linux-2.6.0-test1/drivers/video/sis/sis_main.c     2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/video/sis/sis_main.c    2003-07-19 17:04:55.000000000 -0700
-@@ -1,25 +1,18 @@
- /*
-- * SiS 300/630/730/540/315/550/650/740 frame buffer device
-+ * SiS 300/630/730/540/315/550/650/740/330/660 frame buffer device
-  * for Linux kernels 2.4.x and 2.5.x
-  *
-- * Partly based on the VBE 2.0 compliant graphic boards framebuffer driver,
-- * which is (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ * (C) 1999 Silicon Integrated Systems, Inc.
-+ * (C) 2001-2003 Thomas Winischhofer, Vienna, Austria.
-  *
-  * Authors:           SiS (www.sis.com.tw)
-- *            (Various others)
-- *            Thomas Winischhofer <thomas@winischhofer.net>:
-- *                    - SiS Xabre (330) support
-- *                    - many fixes and enhancements for all chipset series,
-- *                    - extended bridge handling, TV output for Chrontel 7005
-- *                      - 650/LVDS support (for LCD panels up to 1600x1200)
-- *                      - 650/740/Chrontel 7019 support
-- *                      - 30xB/30xLV LCD, TV and VGA2 support
-- *                    - memory queue handling enhancements,
-- *                      - 2D acceleration and y-panning,
-- *                      - portation to 2.5 API
-- *                    - etc.
-- *                    (see http://www.winischhofer.net/
-- *                    for more information and updates)
-+ *            Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ * See http://www.winischhofer.net/ for more information and updates
-+ *
-+ * Originally based on the VBE 2.0 compliant graphic boards framebuffer driver,
-+ * which is (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ *
-  */
- #include <linux/config.h>
-@@ -43,6 +36,7 @@
- #include <linux/fs.h>
- #include <linux/agp_backend.h>
- #include <linux/types.h>
-+#include <asm/uaccess.h>
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- #include <linux/spinlock.h>
-@@ -79,6 +73,12 @@
- #endif
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,69)
-+#error "This version of sisfb requires at least 2.5.69"
-+#endif
-+#endif
-+
- /* -------------------- Macro definitions ---------------------------- */
- #undef SISFBDEBUG     /* TW: no debugging */
-@@ -178,9 +178,12 @@ BOOLEAN sisfb_query_north_bridge_space(P
-               case SIS_650:
-                       nbridge_id = PCI_DEVICE_ID_SI_650;
-                       break;
--              case SIS_740:                   
-+              case SIS_740:
-                       nbridge_id = PCI_DEVICE_ID_SI_740;
-                       break;
-+              case SIS_660:
-+                      nbridge_id = PCI_DEVICE_ID_SI_660;
-+                      break;
-               default:
-                       nbridge_id = 0;
-                       break;
-@@ -207,64 +210,288 @@ BOOLEAN sisfb_query_north_bridge_space(P
- /* ------------------ Internal helper routines ----------------- */
--static void sisfb_search_mode(const char *name)
-+static BOOLEAN sisfb_verify_rate(struct sisfb_monitor *monitor, int mode_idx, int rate_idx, int rate)
- {
--      int i = 0, j = 0;
-+      int htotal, vtotal;
-+      unsigned int dclock, hsync;
--      if(name == NULL) {
--         printk(KERN_ERR "sisfb: Internal error, using default mode.\n");
--         sisfb_mode_idx = DEFAULT_MODE;
--         return;
-+      if(!monitor->datavalid) return TRUE;
-+
-+      if(mode_idx < 0) return FALSE;
-+
-+      if(rate < (monitor->vmin - 1)) return FALSE;
-+      if(rate > (monitor->vmax + 1)) return FALSE;
-+
-+      if(sisfb_gettotalfrommode(&SiS_Pr, &sishw_ext, sisbios_mode[mode_idx].mode_no,
-+                                &htotal, &vtotal, rate_idx)) {
-+              dclock = (htotal * vtotal * rate) / 1000;
-+              if(dclock > (monitor->dclockmax + 1000)) return FALSE;
-+              hsync = dclock / htotal;
-+              if(hsync < (monitor->hmin - 1)) return FALSE;
-+              if(hsync > (monitor->hmax + 1)) return FALSE;
-+        } else {
-+              return FALSE;
-       }
--              
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)               
--        if (!strcmp(name, sisbios_mode[MODE_INDEX_NONE].name)) {
--         printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
--         sisfb_mode_idx = DEFAULT_MODE;
--         return;
-+      return TRUE;
-+};
-+
-+static BOOLEAN sisfb_interpret_edid(struct sisfb_monitor *monitor, unsigned char *buffer)
-+{
-+      int i, j, xres, yres, refresh, index;
-+      u32 emodes;
-+
-+      if(buffer[0] != 0x00 || buffer[1] != 0xff ||
-+         buffer[2] != 0xff || buffer[3] != 0xff ||
-+         buffer[4] != 0xff || buffer[5] != 0xff ||
-+         buffer[6] != 0xff || buffer[7] != 0x00) {
-+         printk(KERN_INFO "sisfb: Bad EDID header\n");
-+         return FALSE;
-       }
--#endif                
--      while(sisbios_mode[i].mode_no != 0) {
--              if (!strcmp(name, sisbios_mode[i].name)) {
--                      sisfb_mode_idx = i;
--                      j = 1;
--                      break;
--              }
--              i++;
-+      if(buffer[0x12] != 0x01) {
-+         printk(KERN_INFO "sisfb: EDID version %d not supported\n",
-+              buffer[0x12]);
-+         return FALSE;
-+      }
-+
-+      monitor->feature = buffer[0x18];
-+
-+      if(!buffer[0x14] & 0x80) {
-+         if(!(buffer[0x14] & 0x08)) {
-+            printk(KERN_INFO "sisfb: WARNING: Monitor does not support separate syncs\n");
-+         }
-+      }
-+
-+      if(buffer[0x13] >= 0x01) {
-+         /* EDID V1 rev 1 and 2: Search for monitor descriptor
-+          * to extract ranges
-+          */
-+          j = 0x36;
-+          for(i=0; i<4; i++) {
-+             if(buffer[j]     == 0x00 && buffer[j + 1] == 0x00 &&
-+                buffer[j + 2] == 0x00 && buffer[j + 3] == 0xfd &&
-+                buffer[j + 4] == 0x00) {
-+                monitor->hmin = buffer[j + 7];
-+                monitor->hmax = buffer[j + 8];
-+                monitor->vmin = buffer[j + 5];
-+                monitor->vmax = buffer[j + 6];
-+                monitor->dclockmax = buffer[j + 9] * 10 * 1000;
-+                monitor->datavalid = TRUE;
-+                break;
-+             }
-+             j += 18;
-+          }
-+      }
-+
-+      if(!monitor->datavalid) {
-+         /* Otherwise: Get a range from the list of supported
-+          * Estabished Timings. This is not entirely accurate,
-+          * because fixed frequency monitors are not supported
-+          * that way.
-+          */
-+         monitor->hmin = 65535; monitor->hmax = 0;
-+         monitor->vmin = 65535; monitor->vmax = 0;
-+         monitor->dclockmax = 0;
-+         emodes = buffer[0x23] | (buffer[0x24] << 8) | (buffer[0x25] << 16);
-+         for(i = 0; i < 13; i++) {
-+            if(emodes & sisfb_ddcsmodes[i].mask) {
-+               if(monitor->hmin > sisfb_ddcsmodes[i].h) monitor->hmin = sisfb_ddcsmodes[i].h;
-+               if(monitor->hmax < sisfb_ddcsmodes[i].h) monitor->hmax = sisfb_ddcsmodes[i].h + 1;
-+               if(monitor->vmin > sisfb_ddcsmodes[i].v) monitor->vmin = sisfb_ddcsmodes[i].v;
-+               if(monitor->vmax < sisfb_ddcsmodes[i].v) monitor->vmax = sisfb_ddcsmodes[i].v;
-+               if(monitor->dclockmax < sisfb_ddcsmodes[i].d) monitor->dclockmax = sisfb_ddcsmodes[i].d;
-+            }
-+         }
-+         index = 0x26;
-+         for(i = 0; i < 8; i++) {
-+            xres = (buffer[index] + 31) * 8;
-+            switch(buffer[index + 1] & 0xc0) {
-+               case 0xc0: yres = (xres * 9) / 16; break;
-+               case 0x80: yres = (xres * 4) /  5; break;
-+               case 0x40: yres = (xres * 3) /  4; break;
-+               default:   yres = xres;            break;
-+            }
-+            refresh = (buffer[index + 1] & 0x3f) + 60;
-+            if((xres >= 640) && (yres >= 480)) {
-+                 for(j = 0; j < 8; j++) {
-+                  if((xres == sisfb_ddcfmodes[j].x) &&
-+                     (yres == sisfb_ddcfmodes[j].y) &&
-+                     (refresh == sisfb_ddcfmodes[j].v)) {
-+                    if(monitor->hmin > sisfb_ddcfmodes[j].h) monitor->hmin = sisfb_ddcfmodes[j].h;
-+                    if(monitor->hmax < sisfb_ddcfmodes[j].h) monitor->hmax = sisfb_ddcfmodes[j].h + 1;
-+                    if(monitor->vmin > sisfb_ddcsmodes[j].v) monitor->vmin = sisfb_ddcsmodes[j].v;
-+                    if(monitor->vmax < sisfb_ddcsmodes[j].v) monitor->vmax = sisfb_ddcsmodes[j].v;
-+                    if(monitor->dclockmax < sisfb_ddcsmodes[j].d) monitor->dclockmax = sisfb_ddcsmodes[i].d;
-+                  }
-+               }
-+            }
-+            index += 2;
-+           }
-+         if((monitor->hmin <= monitor->hmax) && (monitor->vmin <= monitor->vmax)) {
-+            monitor->datavalid = TRUE;
-+         }
-+      }
-+
-+      return(monitor->datavalid);
-+}
-+
-+static void sisfb_handle_ddc(struct sisfb_monitor *monitor, int crtno)
-+{
-+      USHORT        temp, i, realcrtno = crtno;
-+      unsigned char buffer[256];
-+
-+      monitor->datavalid = FALSE;
-+
-+      if(crtno) {
-+                 if(ivideo.vbflags & CRT2_LCD)      realcrtno = 1;
-+                 else if(ivideo.vbflags & CRT2_VGA) realcrtno = 2;
-+                 else return;
-+      }
-+
-+      if((sisfb_crt1off) && (!crtno)) return;
-+
-+      temp = SiS_HandleDDC(&SiS_Pr, ivideo.vbflags, sisvga_engine, realcrtno, 0, &buffer[0]);
-+      if((!temp) || (temp == 0xffff)) {
-+                 printk(KERN_INFO "sisfb: CRT%d DDC probing failed\n", crtno + 1);
-+         return;
-+      } else {
-+                 printk(KERN_INFO "sisfb: CRT%d DDC supported\n", crtno + 1);
-+                 printk(KERN_INFO "sisfb: CRT%d DDC level: %s%s%s%s\n",
-+              crtno + 1,
-+              (temp & 0x1a) ? "" : "[none of the supported]",
-+              (temp & 0x02) ? "2 " : "",
-+              (temp & 0x08) ? "D&P" : "",
-+              (temp & 0x10) ? "FPDI-2" : "");
-+                 if(temp & 0x02) {
-+            i = 3;  /* Number of retrys */
-+            do {
-+               temp = SiS_HandleDDC(&SiS_Pr, ivideo.vbflags, sisvga_engine,
-+                                   realcrtno, 1, &buffer[0]);
-+            } while((temp) && i--);
-+              if(!temp) {
-+               if(sisfb_interpret_edid(monitor, &buffer[0])) {
-+                  printk(KERN_INFO "sisfb: Monitor range H %d-%dKHz, V %d-%dHz, Max. dotclock %dMHz\n",
-+                      monitor->hmin, monitor->hmax, monitor->vmin, monitor->vmax,
-+                      monitor->dclockmax / 1000);
-+               } else {
-+                  printk(KERN_INFO "sisfb: CRT%d DDC EDID corrupt\n", crtno + 1);
-+               }
-+            } else {
-+               printk(KERN_INFO "sisfb: CRT%d DDC reading failed\n", crtno + 1);
-+            }
-+         } else {
-+            printk(KERN_INFO "sisfb: VESA D&P and FPDI-2 not supported yet\n");
-+         }
-       }
--      if(!j) printk(KERN_INFO "sisfb: Invalid mode '%s'\n", name);
- }
--static void sisfb_search_vesamode(unsigned int vesamode)
-+static void sisfb_search_vesamode(unsigned int vesamode, BOOLEAN quiet)
- {
-       int i = 0, j = 0;
-       if(vesamode == 0) {
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-               sisfb_mode_idx = MODE_INDEX_NONE;
- #else
--              printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
-+              if(!quiet)
-+                 printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
-               sisfb_mode_idx = DEFAULT_MODE;
--#endif                
-+#endif
-               return;
-       }
-       vesamode &= 0x1dff;  /* Clean VESA mode number from other flags */
-+      while(sisbios_mode[i++].mode_no != 0) {
-+              if( (sisbios_mode[i-1].vesa_mode_no_1 == vesamode) ||
-+                  (sisbios_mode[i-1].vesa_mode_no_2 == vesamode) ) {
-+                  if(sisfb_fstn) {
-+                     if(sisbios_mode[i-1].mode_no == 0x50 ||
-+                        sisbios_mode[i-1].mode_no == 0x56 ||
-+                        sisbios_mode[i-1].mode_no == 0x53) continue;
-+                  } else {
-+                     if(sisbios_mode[i-1].mode_no == 0x5a ||
-+                        sisbios_mode[i-1].mode_no == 0x5b) continue;
-+                  }
-+                  sisfb_mode_idx = i - 1;
-+                  j = 1;
-+                  break;
-+              }
-+      }
-+      if((!j) && !quiet) printk(KERN_ERR "sisfb: Invalid VESA mode 0x%x'\n", vesamode);
-+}
-+
-+static void sisfb_search_mode(char *name, BOOLEAN quiet)
-+{
-+      int i = 0;
-+      unsigned int j = 0, xres = 0, yres = 0, depth = 0, rate = 0;
-+      char strbuf[16], strbuf1[20];
-+      char *nameptr = name;
-+
-+      if(name == NULL) {
-+         if(!quiet)
-+            printk(KERN_ERR "sisfb: Internal error, using default mode.\n");
-+         sisfb_mode_idx = DEFAULT_MODE;
-+         return;
-+      }
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+        if (!strcmp(name, sisbios_mode[MODE_INDEX_NONE].name)) {
-+         if(!quiet)
-+            printk(KERN_ERR "sisfb: Mode 'none' not supported anymore. Using default.\n");
-+         sisfb_mode_idx = DEFAULT_MODE;
-+         return;
-+      }
-+#endif
-+      if(strlen(name) <= 19) {
-+         strcpy(strbuf1, name);
-+         for(i=0; i<strlen(strbuf1); i++) {
-+            if(strbuf1[i] < '0' || strbuf1[i] > '9') strbuf1[i] = ' ';
-+         }
-+
-+         /* This does some fuzzy mode naming detection */
-+         if(sscanf(strbuf1, "%u %u %u %u", &xres, &yres, &depth, &rate) == 4) {
-+            if((rate <= 32) || (depth > 32)) {
-+               j = rate; rate = depth; depth = j;
-+            }
-+            sprintf(strbuf, "%ux%ux%u", xres, yres, depth);
-+            nameptr = strbuf;
-+            ivideo.refresh_rate = sisfb_parm_rate = rate;
-+         } else if(sscanf(strbuf1, "%u %u %u", &xres, &yres, &depth) == 3) {
-+            sprintf(strbuf, "%ux%ux%u", xres, yres, depth);
-+            nameptr = strbuf;
-+         } else {
-+            xres = 0;
-+            if((sscanf(strbuf1, "%u %u", &xres, &yres) == 2) && (xres != 0)) {
-+               sprintf(strbuf, "%ux%ux8", xres, yres);
-+               nameptr = strbuf;
-+            } else {
-+               sisfb_search_vesamode(simple_strtoul(name, NULL, 0), quiet);
-+               return;
-+            }
-+         }
-+      }
-+
-+      i = 0; j = 0;
-       while(sisbios_mode[i].mode_no != 0) {
--              if( (sisbios_mode[i].vesa_mode_no_1 == vesamode) ||
--                  (sisbios_mode[i].vesa_mode_no_2 == vesamode) ) {
--                      sisfb_mode_idx = i;
--                      j = 1;
--                      break;
-+              if(!strcmp(nameptr, sisbios_mode[i++].name)) {
-+                 if(sisfb_fstn) {
-+                    if(sisbios_mode[i-1].mode_no == 0x50 ||
-+                       sisbios_mode[i-1].mode_no == 0x56 ||
-+                       sisbios_mode[i-1].mode_no == 0x53) continue;
-+                 } else {
-+                    if(sisbios_mode[i-1].mode_no == 0x5a ||
-+                       sisbios_mode[i-1].mode_no == 0x5b) continue;
-+                 }
-+                 sisfb_mode_idx = i - 1;
-+                 j = 1;
-+                 break;
-               }
--              i++;
-       }
--      if(!j) printk(KERN_INFO "sisfb: Invalid VESA mode 0x%x'\n", vesamode);
-+      if((!j) && !quiet) printk(KERN_ERR "sisfb: Invalid mode '%s'\n", nameptr);
- }
--static int sisfb_validate_mode(int myindex)
-+static int sisfb_validate_mode(int myindex, unsigned long vbflags)
- {
-    u16 xres, yres;
-@@ -283,8 +510,8 @@ static int sisfb_validate_mode(int myind
-    }
- #endif
--   switch (ivideo.disp_state & DISPTYPE_DISP2) {
--     case DISPTYPE_LCD:
-+   switch (vbflags & VB_DISPTYPE_DISP2) {
-+     case CRT2_LCD:
-       switch (sishw_ext.ulCRT2LCDType) {
-       case LCD_640x480:
-               xres =  640; yres =  480;  break;
-@@ -306,24 +533,49 @@ static int sisfb_validate_mode(int myind
-               xres = 1400; yres = 1050;  break;               
-       case LCD_1600x1200:
-               xres = 1600; yres = 1200;  break;
--      case LCD_320x480:                               /* TW: FSTN */
-+      case LCD_320x480:                               /* FSTN (old) */
-               xres =  320; yres =  480;  break;
-+      case LCD_640x480_2:                             /* FSTN (new) */
-+      case LCD_640x480_3:
-+              xres =  640; yres =  480;  break;
-       default:
-               xres =    0; yres =    0;  break;
-       }
-+      if(SiS_Pr.SiS_CustomT == CUT_BARCO1366) {
-+              xres = 1360; yres = 1024;
-+      }
-       if(sisbios_mode[myindex].xres > xres) {
-               return(-1);
-       }
-         if(sisbios_mode[myindex].yres > yres) {
-               return(-1);
-       }
--      if((sishw_ext.usExternalChip == 0x01) ||   /* LVDS */
--           (sishw_ext.usExternalChip == 0x05) ||   /* LVDS+Chrontel */
--         (sishw_ext.Is301BDH)) {                 /* 301B-DH */
-+      if(vbflags & (VB_LVDS | VB_30xBDH)) {
-          switch (sisbios_mode[myindex].xres) {
-+              case 320:
-+                      if((sisbios_mode[myindex].yres != 200) &&
-+                         (sisbios_mode[myindex].yres != 240))
-+                              return(-1);
-+                      if((sisbios_mode[myindex].yres == 240) ||
-+                         (sisbios_mode[myindex].yres == 480)) {
-+                              if(!sisfb_fstn) {
-+                                 if(sisbios_mode[myindex].mode_no == 0x5a ||
-+                                    sisbios_mode[myindex].mode_no == 0x5b)
-+                                      return(-1);
-+                              } else {
-+                                 if(sisbios_mode[myindex].mode_no == 0x50 ||
-+                                    sisbios_mode[myindex].mode_no == 0x56 ||
-+                                    sisbios_mode[myindex].mode_no == 0x53)
-+                                      return(-1);
-+                              }
-+                      }
-+                      break;
-+              case 400:
-+                      if(sisbios_mode[myindex].yres != 300) return(-1);
-+                      break;
-               case 512:
--                      if(sisbios_mode[myindex].yres != 512) return -1;
--                      if(sishw_ext.ulCRT2LCDType == LCD_1024x600) return -1;
-+                      if(sisbios_mode[myindex].yres != 384) return(-1);
-+                      if(sishw_ext.ulCRT2LCDType == LCD_1024x600) return(-1);
-                       break;
-               case 640:
-                       if((sisbios_mode[myindex].yres != 400) &&
-@@ -331,115 +583,130 @@ static int sisfb_validate_mode(int myind
-                               return -1;
-                       break;
-               case 800:
--                      if(sisbios_mode[myindex].yres != 600) return -1;
-+                      if(sisbios_mode[myindex].yres != 600) return(-1);
-                       break;
-               case 1024:
-                       if((sisbios_mode[myindex].yres != 600) &&
-                          (sisbios_mode[myindex].yres != 768))
--                              return -1;
-+                              return(-1);
-                       if((sisbios_mode[myindex].yres == 600) &&
-                          (sishw_ext.ulCRT2LCDType != LCD_1024x600))
--                              return -1;
-+                              return(-1);
-                       break;
-               case 1152:
--                      if((sisbios_mode[myindex].yres) != 768) return -1;
--                      if(sishw_ext.ulCRT2LCDType != LCD_1152x768) return -1;
-+                      if((sisbios_mode[myindex].yres) != 768) return(-1);
-+                      if(sishw_ext.ulCRT2LCDType != LCD_1152x768) return(-1);
-                       break;
-               case 1280:
-                       if((sisbios_mode[myindex].yres != 768) &&
-                          (sisbios_mode[myindex].yres != 1024))
--                              return -1;
-+                              return(-1);
-                       if((sisbios_mode[myindex].yres == 768) &&
-                          (sishw_ext.ulCRT2LCDType != LCD_1280x768))
--                              return -1;                              
-+                              return(-1);
-+                      break;
-+              case 1360:
-+                      if(SiS_Pr.SiS_CustomT != CUT_BARCO1366) return(-1);
-+                      if(sisbios_mode[myindex].yres != 1024) return(-1);
-                       break;
-               case 1400:
--                      if(sisbios_mode[myindex].yres != 1050) return -1;
-+                      if(sisbios_mode[myindex].yres != 1050) return(-1);
-                       break;
-               case 1600:
--                      if(sisbios_mode[myindex].yres != 1200) return -1;
-+                      if(sisbios_mode[myindex].yres != 1200) return(-1);
-                       break;
-               default:
--                      return -1;              
-+                      return(-1);
-          }
-       } else {
-          switch (sisbios_mode[myindex].xres) {
-+              case 320:
-+                      if((sisbios_mode[myindex].yres != 200) &&
-+                         (sisbios_mode[myindex].yres != 240))
-+                              return -1;
-+                      break;
-+              case 400:
-+                      if(sisbios_mode[myindex].yres != 300) return(-1);
-+                      break;
-               case 512:
--                      if(sisbios_mode[myindex].yres != 512) return -1;
-+                      if(sisbios_mode[myindex].yres != 384) return(-1);
-                       break;
-               case 640:
-                       if((sisbios_mode[myindex].yres != 400) &&
-                          (sisbios_mode[myindex].yres != 480))
--                              return -1;
-+                              return(-1);
-                       break;
-               case 800:
--                      if(sisbios_mode[myindex].yres != 600) return -1;
-+                      if(sisbios_mode[myindex].yres != 600) return(-1);
-                       break;
-               case 1024:
--                      if(sisbios_mode[myindex].yres != 768) return -1;
-+                      if(sisbios_mode[myindex].yres != 768) return(-1);
-                       break;
-               case 1280:
-                       if((sisbios_mode[myindex].yres != 960) &&
-+                         (sisbios_mode[myindex].yres != 768) &&
-                          (sisbios_mode[myindex].yres != 1024))
--                              return -1;
--                      if(sisbios_mode[myindex].yres == 960) {
--                          if(sishw_ext.ulCRT2LCDType == LCD_1400x1050) 
--                              return -1;
-+                              return(-1);
-+                      if((sisbios_mode[myindex].yres == 768) ||
-+                         (sisbios_mode[myindex].yres == 960)) {
-+                              if(sishw_ext.ulCRT2LCDType == LCD_1400x1050)
-+                                      return(-1);
-+                      }
-+                      if(sisbios_mode[myindex].yres == 768) {
-+                              if(sishw_ext.ulCRT2LCDType == LCD_1280x960)
-+                                      return(-1);
-                       }
-                       break;
-               case 1400:
--                      if(sisbios_mode[myindex].yres != 1050) return -1;
-+                      if(sisbios_mode[myindex].yres != 1050) return(-1);
-                       break;
-               case 1600:
--                      if(sisbios_mode[myindex].yres != 1200) return -1;
-+                      if(sisbios_mode[myindex].yres != 1200) return(-1);
-                       break;
-               default:
--                      return -1;              
-+                      return(-1);
-          }
-       }
-       break;
--     case DISPTYPE_TV:
-+     case CRT2_TV:
-       switch (sisbios_mode[myindex].xres) {
-       case 512:
-+              if(vbflags & VB_CHRONTEL) return(-1);
-+              if((vbflags & VB_SISBRIDGE) && (vbflags & TV_NTSC))
-+                      return(-1);
-+              /* fall through */
-       case 640:
-       case 800:
-               break;
-       case 720:
--              if (ivideo.TV_type == TVMODE_NTSC) {
-+              if(vbflags & VB_CHRONTEL) return -1;
-+              if(vbflags & TV_NTSC) {
-                       if (sisbios_mode[myindex].yres != 480) {
-                               return(-1);
-                       }
--              } else if (ivideo.TV_type == TVMODE_PAL) {
-+              } else if(vbflags & TV_PAL) {
-                       if (sisbios_mode[myindex].yres != 576) {
-                               return(-1);
-                       }
-               }
--              /* TW: LVDS/CHRONTEL does not support 720 */
--              if (ivideo.hasVB == HASVB_LVDS_CHRONTEL ||
--                                      ivideo.hasVB == HASVB_CHRONTEL) {
--                              return(-1);
--              }
-               break;
-       case 1024:
--              if (ivideo.TV_type == TVMODE_NTSC) {
--                      if(sisbios_mode[myindex].bpp == 32) {
--                             return(-1);
--                      }
--              }
--              /* TW: LVDS/CHRONTEL only supports < 800 (1024 on 650/Ch7019)*/
--              if (ivideo.hasVB == HASVB_LVDS_CHRONTEL ||
--                                      ivideo.hasVB == HASVB_CHRONTEL) {
--                  if(ivideo.chip < SIS_315H) {
-+              if(vbflags & VB_301) return(-1);
-+              if(vbflags & VB_CHRONTEL) {
-+                      if(ivideo.chip < SIS_315H) {
-                               return(-1);
--                  }
-+                      }
-               }
-               break;
-       default:
-               return(-1);
-       }
-       break;
--     case DISPTYPE_CRT2:      
--        if(sisbios_mode[myindex].xres > 1280) return -1;
-+     case CRT2_VGA:   
-+        if(sisbios_mode[myindex].xres > 1600) return(-1);
-+      if(!(vbflags & (VB_301B|VB_302B))) {
-+         if(sisbios_mode[myindex].xres > 1400) return(-1);
-+      }
-       break;  
-      }
-      return(myindex);
-@@ -456,12 +723,17 @@ static void sisfb_search_crt2type(const 
-               if (!strcmp(name, sis_crt2type[i].name)) {
-                       sisfb_crt2type = sis_crt2type[i].type_no;
-                       sisfb_tvplug = sis_crt2type[i].tvplug_no;
-+                      sisfb_dstn = (sis_crt2type[i].flags & FL_550_DSTN) ? 1 : 0;
-+                      sisfb_fstn = (sis_crt2type[i].flags & FL_550_FSTN) ? 1 : 0;
-                       break;
-               }
-               i++;
-       }
-       if(sisfb_crt2type < 0)
--              printk(KERN_INFO "sisfb: Invalid CRT2 type: %s\n", name);
-+              printk(KERN_ERR "sisfb: Invalid CRT2 type: %s\n", name);
-+        if(ivideo.chip != SIS_550) {
-+         sisfb_dstn = sisfb_fstn = 0;
-+      }
- }
- static void sisfb_search_queuemode(const char *name)
-@@ -479,16 +751,16 @@ static void sisfb_search_queuemode(const
-               i++;
-       }
-       if (sisfb_queuemode < 0)
--              printk(KERN_INFO "sisfb: Invalid queuemode type: %s\n", name);
-+              printk(KERN_ERR "sisfb: Invalid queuemode type: %s\n", name);
- }
--static u8 sisfb_search_refresh_rate(unsigned int rate)
-+static u8 sisfb_search_refresh_rate(unsigned int rate, int mode_idx)
- {
-       u16 xres, yres;
-       int i = 0;
--      xres = sisbios_mode[sisfb_mode_idx].xres;
--      yres = sisbios_mode[sisfb_mode_idx].yres;
-+      xres = sisbios_mode[mode_idx].xres;
-+      yres = sisbios_mode[mode_idx].yres;
-       sisfb_rate_idx = 0;
-       while ((sisfb_vrate[i].idx != 0) && (sisfb_vrate[i].xres <= xres)) {
-@@ -537,7 +809,7 @@ static void sisfb_search_tvstd(const cha
-       while (sis_tvtype[i].type_no != -1) {
-               if (!strcmp(name, sis_tvtype[i].name)) {
--                      sisfb_tvmode = sis_tvtype[i].type_no;
-+                      ivideo.vbflags |= sis_tvtype[i].type_no;
-                       break;
-               }
-               i++;
-@@ -546,13 +818,13 @@ static void sisfb_search_tvstd(const cha
- static BOOLEAN sisfb_bridgeisslave(void)
- {
--   unsigned char usScratchP1_00;
-+   unsigned char P1_00;
--   if(ivideo.hasVB == HASVB_NONE) return FALSE;
-+   if(!(ivideo.vbflags & VB_VIDEOBRIDGE)) return FALSE;
--   inSISIDXREG(SISPART1,0x00,usScratchP1_00);
--   if( ((sisvga_engine == SIS_300_VGA) && (usScratchP1_00 & 0xa0) == 0x20) ||
--       ((sisvga_engine == SIS_315_VGA) && (usScratchP1_00 & 0x50) == 0x10) ) {
-+   inSISIDXREG(SISPART1,0x00,P1_00);
-+   if( ((sisvga_engine == SIS_300_VGA) && (P1_00 & 0xa0) == 0x20) ||
-+       ((sisvga_engine == SIS_315_VGA) && (P1_00 & 0x50) == 0x10) ) {
-          return TRUE;
-    } else {
-            return FALSE;
-@@ -597,7 +869,7 @@ static BOOLEAN sisfbcheckvretracecrt2(vo
- static BOOLEAN sisfb_CheckVBRetrace(void) 
- {
--   if(ivideo.disp_state & DISPTYPE_DISP2) {
-+   if(ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-       if(sisfb_bridgeisslave()) {
-          return(sisfbcheckvretracecrt1());
-       } else {
-@@ -607,60 +879,195 @@ static BOOLEAN sisfb_CheckVBRetrace(void
-    return(sisfbcheckvretracecrt1());
- }
-+static int sisfb_myblank(int blank)
-+{
-+   u8 sr01, sr11, sr1f, cr63=0, p2_0, p1_13;
-+   BOOLEAN backlight = TRUE;
-+
-+   switch(blank) {
-+   case 0:    /* on */
-+      sr01  = 0x00;
-+      sr11  = 0x00;
-+      sr1f  = 0x00;
-+      cr63  = 0x00;
-+      p2_0  = 0x20;
-+      p1_13 = 0x00;
-+      backlight = TRUE;
-+      break;
-+   case 1:    /* blank */
-+      sr01  = 0x20;
-+      sr11  = 0x00;
-+      sr1f  = 0x00;
-+      cr63  = 0x00;
-+      p2_0  = 0x20;
-+      p1_13 = 0x00;
-+      backlight = TRUE;
-+      break;
-+   case 2:    /* no vsync */
-+      sr01  = 0x20;
-+      sr11  = 0x08;
-+      sr1f  = 0x80;
-+      cr63  = 0x40;
-+      p2_0  = 0x40;
-+      p1_13 = 0x80;
-+      backlight = FALSE;
-+      break;
-+   case 3:    /* no hsync */
-+      sr01  = 0x20;
-+      sr11  = 0x08;
-+      sr1f  = 0x40;
-+      cr63  = 0x40;
-+      p2_0  = 0x80;
-+      p1_13 = 0x40;
-+      backlight = FALSE;
-+      break;
-+   case 4:    /* off */
-+      sr01  = 0x20;
-+      sr11  = 0x08;
-+      sr1f  = 0xc0;
-+      cr63  = 0x40;
-+      p2_0  = 0xc0;
-+      p1_13 = 0xc0;
-+      backlight = FALSE;
-+      break;
-+   default:
-+      return 1;
-+   }
-+
-+   if(ivideo.currentvbflags & VB_DISPTYPE_CRT1) {
-+
-+      setSISIDXREG(SISSR, 0x01, ~0x20, sr01);
-+
-+      if( (!sisfb_thismonitor.datavalid) ||
-+          ((sisfb_thismonitor.datavalid) &&
-+           (sisfb_thismonitor.feature & 0xe0))) {
-+
-+       if(sisvga_engine == SIS_315_VGA) {
-+          setSISIDXREG(SISCR, 0x63, 0xbf, cr63);
-+       }
-+
-+       setSISIDXREG(SISSR, 0x1f, 0x3f, sr1f);
-+      }
-+
-+   }
-+
-+   if(ivideo.currentvbflags & CRT2_LCD) {
-+
-+      if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
-+       if(backlight) {
-+          SiS_SiS30xBLOn(&SiS_Pr, &sishw_ext);
-+       } else {
-+          SiS_SiS30xBLOff(&SiS_Pr, &sishw_ext);
-+       }
-+      } else if(sisvga_engine == SIS_315_VGA) {
-+       if(ivideo.vbflags & VB_CHRONTEL) {
-+          if(backlight) {
-+             SiS_Chrontel701xBLOn(&SiS_Pr,&sishw_ext);
-+          } else {
-+             SiS_Chrontel701xBLOff(&SiS_Pr);
-+          }
-+       }
-+      }
-+
-+      if(((sisvga_engine == SIS_300_VGA) &&
-+          (ivideo.vbflags & (VB_301|VB_30xBDH|VB_LVDS))) ||
-+         ((sisvga_engine == SIS_315_VGA) &&
-+          ((ivideo.vbflags & (VB_LVDS | VB_CHRONTEL)) == VB_LVDS))) {
-+          setSISIDXREG(SISSR, 0x11, ~0x0c, sr11);
-+      }
-+
-+      if(sisvga_engine == SIS_300_VGA) {
-+         if((ivideo.vbflags & (VB_301B|VB_302B)) &&
-+            (!(ivideo.vbflags & VB_30xBDH))) {
-+          setSISIDXREG(SISPART1, 0x13, 0x3f, p1_13);
-+       }
-+      } else if(sisvga_engine == SIS_315_VGA) {
-+         if((ivideo.vbflags & (VB_301B|VB_302B)) &&
-+            (!(ivideo.vbflags & VB_30xBDH))) {
-+          setSISIDXREG(SISPART2, 0x00, 0x1f, p2_0);
-+       }
-+      }
-+
-+   } else if(ivideo.currentvbflags & CRT2_VGA) {
-+
-+      if(ivideo.vbflags & (VB_301B|VB_302B)) {
-+         setSISIDXREG(SISPART2, 0x00, 0x1f, p2_0);
-+      }
-+
-+   }
-+
-+   return(0);
-+}
-+
- /* ----------- FBDev related routines for all series ----------- */
-+static void sisfb_set_vparms(void)
-+{
-+   switch(ivideo.video_bpp) {
-+   case 8:
-+              ivideo.DstColor = 0x0000;
-+      ivideo.SiS310_AccelDepth = 0x00000000;
-+      ivideo.video_cmap_len = 256;
-+              break;
-+   case 16:
-+              ivideo.DstColor = 0x8000;
-+              ivideo.SiS310_AccelDepth = 0x00010000;
-+      ivideo.video_cmap_len = 16;
-+              break;
-+   case 32:
-+              ivideo.DstColor = 0xC000;
-+      ivideo.SiS310_AccelDepth = 0x00020000;
-+      ivideo.video_cmap_len = 16;
-+              break;
-+   default:
-+      ivideo.video_cmap_len = 16;
-+      printk(KERN_ERR "sisfb: Unsupported depth %d", ivideo.video_bpp);
-+      ivideo.accel = 0;
-+      break;
-+   }
-+}
-+
- static int sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive,
-                     struct fb_info *info)
- {
--      unsigned int htotal =
--              var->left_margin + var->xres + var->right_margin +
--              var->hsync_len;
--      unsigned int vtotal = 0; 
-+      unsigned int htotal = 0, vtotal = 0; 
-       double drate = 0, hrate = 0;
-       int found_mode = 0;
-       int old_mode;
--      unsigned char reg;
-+      u32 pixclock;
--      TWDEBUG("Inside do_set_var");
--      
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
--      inSISIDXREG(SISCR,0x34,reg);
--      if(reg & 0x80) {
--         printk(KERN_INFO "sisfb: Cannot change display mode, X server is active\n");
--         return -EBUSY;
--      }
--#endif        
-+      htotal = var->left_margin + var->xres + var->right_margin + var->hsync_len;
-+
-+      vtotal = var->upper_margin + var->lower_margin + var->vsync_len;
-+
-+      pixclock = var->pixclock;
-       if((var->vmode & FB_VMODE_MASK) == FB_VMODE_NONINTERLACED) {
--              vtotal = var->upper_margin + var->yres + var->lower_margin +
--                       var->vsync_len;
-+              vtotal += var->yres;
-               vtotal <<= 1;
-       } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
--              vtotal = var->upper_margin + var->yres + var->lower_margin +
--                       var->vsync_len;
-+              vtotal += var->yres;
-               vtotal <<= 2;
-       } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
--              vtotal = var->upper_margin + (var->yres/2) + var->lower_margin +
--                       var->vsync_len; 
--      } else  vtotal = var->upper_margin + var->yres + var->lower_margin +
--                       var->vsync_len;
-+              vtotal += var->yres;
-+              vtotal <<= 1;
-+      } else  vtotal += var->yres;
-       if(!(htotal) || !(vtotal)) {
-               DPRINTK("sisfb: Invalid 'var' information\n");
-               return -EINVAL;
-       }
--      if(var->pixclock && htotal && vtotal) {
--         drate = 1E12 / var->pixclock;
-+      if(pixclock && htotal && vtotal) {
-+         drate = 1E12 / pixclock;
-          hrate = drate / htotal;
-          ivideo.refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
-       } else ivideo.refresh_rate = 60;
--      /* TW: Calculation wrong for 1024x600 - force it to 60Hz */
--      if((var->xres == 1024) && (var->yres == 600)) ivideo.refresh_rate = 60;
--
-+#if 0
-       printk(KERN_DEBUG "sisfb: Change mode to %dx%dx%d-%dHz\n",
-               var->xres,var->yres,var->bits_per_pixel,ivideo.refresh_rate);
-+#endif                
-       old_mode = sisfb_mode_idx;
-       sisfb_mode_idx = 0;
-@@ -678,7 +1085,7 @@ static int sisfb_do_set_var(struct fb_va
-       }
-       if(found_mode)
--              sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx);
-+              sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx, ivideo.currentvbflags);
-       else
-               sisfb_mode_idx = -1;
-@@ -689,12 +1096,21 @@ static int sisfb_do_set_var(struct fb_va
-               return -EINVAL;
-       }
--      if(sisfb_search_refresh_rate(ivideo.refresh_rate) == 0) {
-+      if(sisfb_search_refresh_rate(ivideo.refresh_rate, sisfb_mode_idx) == 0) {
-               sisfb_rate_idx = sisbios_mode[sisfb_mode_idx].rate_idx;
-               ivideo.refresh_rate = 60;
-       }
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      if(sisfb_thismonitor.datavalid) {
-+         if(!sisfb_verify_rate(&sisfb_thismonitor, sisfb_mode_idx,
-+                               sisfb_rate_idx, ivideo.refresh_rate)) {
-+            printk(KERN_INFO "sisfb: WARNING: Refresh rate exceeds monitor specs!\n");
-+         }
-+      }
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       if(((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) && isactive) {
- #else
-       if(isactive) {
-@@ -707,15 +1123,7 @@ static int sisfb_do_set_var(struct fb_va
-               }
-               outSISIDXREG(SISSR, IND_SIS_PASSWORD, SIS_PASSWORD);
--
--              sisfb_post_setmode();
--
--              DPRINTK("sisfb: Set new mode: %dx%dx%d-%d \n",
--                      sisbios_mode[sisfb_mode_idx].xres,
--                      sisbios_mode[sisfb_mode_idx].yres,
--                      sisbios_mode[sisfb_mode_idx].bpp,
--                      ivideo.refresh_rate);
--
-+              
-               ivideo.video_bpp = sisbios_mode[sisfb_mode_idx].bpp;
-               ivideo.video_vwidth = ivideo.video_width = sisbios_mode[sisfb_mode_idx].xres;
-               ivideo.video_vheight = ivideo.video_height = sisbios_mode[sisfb_mode_idx].yres;
-@@ -725,54 +1133,39 @@ static int sisfb_do_set_var(struct fb_va
-               if(sisfb_accel) {
-                  ivideo.accel = (var->accel_flags & FB_ACCELF_TEXT) ? -1 : 0;
-               }
--              switch(ivideo.video_bpp) {
--              case 8:
--                      ivideo.DstColor = 0x0000;
--                      ivideo.SiS310_AccelDepth = 0x00000000;
--                      ivideo.video_cmap_len = 256;
--                      break;
--              case 16:
--                      ivideo.DstColor = 0x8000;
--                      ivideo.SiS310_AccelDepth = 0x00010000;
--                      ivideo.video_cmap_len = 16;
--                      break;
--              case 32:
--                      ivideo.DstColor = 0xC000;
--                      ivideo.SiS310_AccelDepth = 0x00020000;
--                      ivideo.video_cmap_len = 16;
--                      break;
--              default:
--                      ivideo.video_cmap_len = 16;
--                      printk(KERN_ERR "sisfb: Unsupported depth %d", ivideo.video_bpp);
--                      ivideo.accel = 0;
--                      break;
--              }
-+
-+              sisfb_set_vparms();
-+              
-+              ivideo.current_width = ivideo.video_width;
-+              ivideo.current_height = ivideo.video_height;
-+              ivideo.current_bpp = ivideo.video_bpp;
-+              ivideo.current_htotal = htotal;
-+              ivideo.current_vtotal = vtotal;
-+              ivideo.current_pixclock = var->pixclock;
-+              ivideo.current_refresh_rate = ivideo.refresh_rate;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+                sisfb_lastrates[sisfb_mode_no] = ivideo.refresh_rate;
-+#endif
-+              
-+              sisfb_post_setmode();
-       }
--      TWDEBUG("End of do_set_var");
-       return 0;
- }
--#ifdef SISFB_PAN
- static int sisfb_pan_var(struct fb_var_screeninfo *var)
- {
-       unsigned int base;
--      TWDEBUG("Inside pan_var");
--      
-       if (var->xoffset > (var->xres_virtual - var->xres)) {
--              printk(KERN_INFO "Pan: xo: %d xv %d xr %d\n",
--                      var->xoffset, var->xres_virtual, var->xres);
-               return -EINVAL;
-       }
-       if(var->yoffset > (var->yres_virtual - var->yres)) {
--              printk(KERN_INFO "Pan: yo: %d yv %d yr %d\n",
--                      var->yoffset, var->yres_virtual, var->yres);
-               return -EINVAL;
--      }
--
--        base = var->yoffset * var->xres_virtual + var->xoffset;
--
-+      }       
-+              
-+      base = var->yoffset * var->xres_virtual + var->xoffset;
-+              
-         /* calculate base bpp dep. */
-         switch(var->bits_per_pixel) {
-         case 16:
-@@ -794,7 +1187,7 @@ static int sisfb_pan_var(struct fb_var_s
-       if(sisvga_engine == SIS_315_VGA) {
-               setSISIDXREG(SISSR, 0x37, 0xFE, (base >> 24) & 0x01);
-       }
--        if(ivideo.disp_state & DISPTYPE_DISP2) {
-+        if(ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-               orSISIDXREG(SISPART1, sisfb_CRT2_write_enable, 0x01);
-               outSISIDXREG(SISPART1, 0x06, (base & 0xFF));
-               outSISIDXREG(SISPART1, 0x05, ((base >> 8) & 0xFF));
-@@ -803,10 +1196,8 @@ static int sisfb_pan_var(struct fb_var_s
-                       setSISIDXREG(SISPART1, 0x02, 0x7F, ((base >> 24) & 0x01) << 7);
-               }
-         }
--      TWDEBUG("End of pan_var");
-       return 0;
- }
--#endif
- static void sisfb_bpp_to_var(struct fb_var_screeninfo *var)
- {
-@@ -843,22 +1234,24 @@ static void sisfb_bpp_to_var(struct fb_v
- void sis_dispinfo(struct ap_data *rec)
- {
--      rec->minfo.bpp    = ivideo.video_bpp;
--      rec->minfo.xres   = ivideo.video_width;
--      rec->minfo.yres   = ivideo.video_height;
--      rec->minfo.v_xres = ivideo.video_vwidth;
--      rec->minfo.v_yres = ivideo.video_vheight;
--      rec->minfo.org_x  = ivideo.org_x;
--      rec->minfo.org_y  = ivideo.org_y;
--      rec->minfo.vrate  = ivideo.refresh_rate;
--      rec->iobase       = ivideo.vga_base - 0x30;
--      rec->mem_size     = ivideo.video_size;
--      rec->disp_state   = ivideo.disp_state; 
--      rec->version      = (VER_MAJOR << 24) | (VER_MINOR << 16) | VER_LEVEL; 
--      rec->hasVB        = ivideo.hasVB; 
--      rec->TV_type      = ivideo.TV_type; 
--      rec->TV_plug      = ivideo.TV_plug; 
--      rec->chip         = ivideo.chip;
-+      rec->minfo.bpp      = ivideo.video_bpp;
-+      rec->minfo.xres     = ivideo.video_width;
-+      rec->minfo.yres     = ivideo.video_height;
-+      rec->minfo.v_xres   = ivideo.video_vwidth;
-+      rec->minfo.v_yres   = ivideo.video_vheight;
-+      rec->minfo.org_x    = ivideo.org_x;
-+      rec->minfo.org_y    = ivideo.org_y;
-+      rec->minfo.vrate    = ivideo.refresh_rate;
-+      rec->iobase         = ivideo.vga_base - 0x30;
-+      rec->mem_size       = ivideo.video_size;
-+      rec->disp_state     = ivideo.disp_state; 
-+      rec->version        = (VER_MAJOR << 24) | (VER_MINOR << 16) | VER_LEVEL; 
-+      rec->hasVB          = ivideo.hasVB;
-+      rec->TV_type        = ivideo.TV_type; 
-+      rec->TV_plug        = ivideo.TV_plug; 
-+      rec->chip           = ivideo.chip;
-+      rec->vbflags        = ivideo.vbflags;
-+      rec->currentvbflags = ivideo.currentvbflags;
- }
- /* ------------ FBDev related routines for 2.4 series ----------- */
-@@ -873,7 +1266,6 @@ static void sisfb_crtc_to_var(struct fb_
-       int A, B, C, D, E, F, temp;
-       double hrate, drate;
--      TWDEBUG("Inside crtc_to_var");
-       inSISIDXREG(SISSR, IND_SIS_COLOR_MODE, sr_data);
-       if (sr_data & SIS_INTERLACED_MODE)
-@@ -921,6 +1313,8 @@ static void sisfb_crtc_to_var(struct fb_
-       inSISIDXREG(SISCR, 0x09, cr_data3);
-+      if(cr_data3 & 0x80) var->vmode = FB_VMODE_DOUBLE;
-+
-       VBS = (cr_data & 0xff) | ((u16) (cr_data2 & 0x08) << 5) |
-             ((u16) (cr_data3 & 0x20) << 4) | ((u16) (sr_data & 0x04) << 8);
-@@ -939,26 +1333,22 @@ static void sisfb_crtc_to_var(struct fb_
-       D = B - F - C;
-         var->yres = E;
--#ifndef SISFB_PAN
--      var->yres_virtual = E;
--#endif
--      /* TW: We have to report the physical dimension to the console! */
-+      var->upper_margin = D;
-+      var->lower_margin = F;
-+      var->vsync_len = C;
-+
-       if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-               var->yres <<= 1;
--#ifndef SISFB_PAN
--              var->yres_virtual <<= 1;
--#endif
-+              var->upper_margin <<= 1;
-+              var->lower_margin <<= 1;
-+              var->vsync_len <<= 1;
-       } else if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-               var->yres >>= 1;
--#ifndef SISFB_PAN
--              var->yres_virtual >>= 1;
--#endif
-+              var->upper_margin >>= 1;
-+              var->lower_margin >>= 1;
-+              var->vsync_len >>= 1;
-       }
--      var->upper_margin = D;
--      var->lower_margin = F;
--      var->vsync_len = C;
--
-       inSISIDXREG(SISSR, 0x0b, sr_data);
-       inSISIDXREG(SISCR, 0x00, cr_data);
-@@ -999,10 +1389,20 @@ static void sisfb_crtc_to_var(struct fb_
-       D = B - F - C;
-       var->xres = var->xres_virtual = E * 8;
--      var->left_margin = D * 8;
--      var->right_margin = F * 8;
--      var->hsync_len = C * 8;
-+      if((var->xres == 320) &&
-+         (var->yres == 200 || var->yres == 240)) {
-+              /* Terrible hack, but the correct CRTC data for
-+               * these modes only produces a black screen...
-+               */
-+                      var->left_margin = (400 - 376);
-+                      var->right_margin = (328 - 320);
-+                      var->hsync_len = (376 - 328);
-+      } else {
-+              var->left_margin = D * 8;
-+              var->right_margin = F * 8;
-+              var->hsync_len = C * 8;
-+      }
-       var->activate = FB_ACTIVATE_NOW;
-       var->sync = 0;
-@@ -1022,21 +1422,21 @@ static void sisfb_crtc_to_var(struct fb_
-       VT <<= 1;
-       HT = (HT + 5) * 8;
-+      if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
-+              VT <<= 1;
-+      }
-       hrate = (double) ivideo.refresh_rate * (double) VT / 2;
-       drate = hrate * HT;
-       var->pixclock = (u32) (1E12 / drate);
--#ifdef SISFB_PAN
-       if(sisfb_ypan) {
-           var->yres_virtual = ivideo.heapstart / (var->xres * (var->bits_per_pixel >> 3));
-           if(var->yres_virtual <= var->yres) {
-               var->yres_virtual = var->yres;
-           }
-       } else
--#endif
--         var->yres_virtual = var->yres;
-+          var->yres_virtual = var->yres;
--        TWDEBUG("end of crtc_to_var");
- }
- static int sis_getcolreg(unsigned regno, unsigned *red, unsigned *green, unsigned *blue,
-@@ -1069,7 +1469,7 @@ static int sisfb_setcolreg(unsigned regn
-               outSISREG(SISDACD, (red >> 10));
-               outSISREG(SISDACD, (green >> 10));
-               outSISREG(SISDACD, (blue >> 10));
--              if (ivideo.disp_state & DISPTYPE_DISP2) {
-+              if (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-                       outSISREG(SISDAC2A, regno);
-                       outSISREG(SISDAC2D, (red >> 8));
-                       outSISREG(SISDAC2D, (green >> 8));
-@@ -1118,7 +1518,7 @@ static void sisfb_set_disp(int con, stru
-       display->ywrapstep = fix.ywrapstep;
-       display->line_length = fix.line_length;
-       display->next_line = fix.line_length;
--      display->can_soft_blank = 0;
-+      display->can_soft_blank = 1;
-       display->inverse = sisfb_inverse;
-       display->var = *var;
-@@ -1162,17 +1562,12 @@ static void sisfb_set_disp(int con, stru
-       display->dispsw = &sisfb_sw;
-       restore_flags(flags);
--#ifdef SISFB_PAN
--        if((ivideo.accel) && (sisfb_ypan)) {
--          /* display->scrollmode = SCROLL_YPAN; - not defined */
-+        if(sisfb_ypan) {
-+          /* display->scrollmode = 0;  */
-       } else {
-           display->scrollmode = SCROLL_YREDRAW;
-           sisfb_sw.bmove = fbcon_redraw_bmove;
-       }
--#else
--      display->scrollmode = SCROLL_YREDRAW;
--      sisfb_sw.bmove = fbcon_redraw_bmove;
--#endif
- }
- static void sisfb_do_install_cmap(int con, struct fb_info *info)
-@@ -1191,17 +1586,16 @@ static void sisfb_do_install_cmap(int co
- static int sisfb_get_var(struct fb_var_screeninfo *var, int con,
-                        struct fb_info *info)
- {
--      TWDEBUG("inside get_var");
-       if(con == -1)
-               memcpy(var, &default_var, sizeof(struct fb_var_screeninfo));
-       else
-               *var = fb_display[con].var;
--      /* For FSTN, DSTN */
--      if (var->xres == 320 && var->yres == 480)
-+      if(sisfb_fstn) {
-+         if (var->xres == 320 && var->yres == 480)
-               var->yres = 240;
--              
--      TWDEBUG("end of get_var");
-+        }
-+
-       return 0;
- }
-@@ -1211,8 +1605,6 @@ static int sisfb_set_var(struct fb_var_s
-       int err;
-       unsigned int cols, rows;
--      TWDEBUG("inside set_var");
--
-       fb_display[con].var.activate = FB_ACTIVATE_NOW;
-         if(sisfb_do_set_var(var, con == currcon, info)) {
-               sisfb_crtc_to_var(var);
-@@ -1233,16 +1625,17 @@ static int sisfb_set_var(struct fb_var_s
-       cols = sisbios_mode[sisfb_mode_idx].cols;
-       rows = sisbios_mode[sisfb_mode_idx].rows;
--      vc_resize_con(rows, cols, fb_display[con].conp->vc_num);
-+#if 0
-+      /* Why was this called here? */
-+      vc_resize_con(rows, cols, fb_display[con].conp->vc_num); 
-+#endif        
--      TWDEBUG("end of set_var");
-       return 0;
- }
- static int sisfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-                         struct fb_info *info)
- {
--      TWDEBUG("inside get_cmap");
-         if (con == currcon)
-               return fb_get_cmap(cmap, kspc, sis_getcolreg, info);
-@@ -1251,7 +1644,6 @@ static int sisfb_get_cmap(struct fb_cmap
-       else
-               fb_copy_cmap(fb_default_cmap(ivideo.video_cmap_len), cmap, kspc ? 0 : 2);
--      TWDEBUG("end of get_cmap");
-       return 0;
- }
-@@ -1260,7 +1652,6 @@ static int sisfb_set_cmap(struct fb_cmap
- {
-       int err;
--      TWDEBUG("inside set_cmap");
-       if (!fb_display[con].cmap.len) {
-               err = fb_alloc_cmap(&fb_display[con].cmap, ivideo.video_cmap_len, 0);
-               if (err)
-@@ -1272,17 +1663,15 @@ static int sisfb_set_cmap(struct fb_cmap
-       else
-               fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1);
--      TWDEBUG("end of set_cmap");
-+
-       return 0;
- }
--#ifdef SISFB_PAN
- static int sisfb_pan_display(struct fb_var_screeninfo *var, int con,
-                            struct fb_info* info)
- {
-       int err;
--      
--      TWDEBUG("inside pan_display");
-+
-       if (var->vmode & FB_VMODE_YWRAP) {
-               if (var->yoffset < 0 || var->yoffset >= fb_display[con].var.yres_virtual || var->xoffset)
-                       return -EINVAL;
-@@ -1303,10 +1692,8 @@ static int sisfb_pan_display(struct fb_v
-       else
-               fb_display[con].var.vmode &= ~FB_VMODE_YWRAP;
--      TWDEBUG("end of pan_display");
-       return 0;
- }
--#endif
- static int sisfb_mmap(struct fb_info *info, struct file *file,
-                     struct vm_area_struct *vma)
-@@ -1316,7 +1703,6 @@ static int sisfb_mmap(struct fb_info *in
-       unsigned long off;
-       u32 len, mmio_off;
--      TWDEBUG("inside mmap");
-       if(vma->vm_pgoff > (~0UL >> PAGE_SHIFT))  return -EINVAL;
-       off = vma->vm_pgoff << PAGE_SHIFT;
-@@ -1355,7 +1741,6 @@ static int sisfb_mmap(struct fb_info *in
-                               vma->vm_page_prot))
-               return -EAGAIN;
--        TWDEBUG("end of mmap");
-       return 0;
- }
-@@ -1368,7 +1753,6 @@ static void sis_get_glyph(struct fb_info
-       u8 *gbuf = gly->gmask;
-       int size;
--      TWDEBUG("Inside get_glyph");
-       gly->fontheight = fontheight(p);
-       gly->fontwidth = fontwidth(p);
-       widthb = (fontwidth(p) + 7) / 8;
-@@ -1382,16 +1766,11 @@ static void sis_get_glyph(struct fb_info
-       size = fontheight(p) * widthb;
-       memcpy(gbuf, cdat, size);
-       gly->ngmask = size;
--      TWDEBUG("End of get_glyph");
- }
- static int sisfb_update_var(int con, struct fb_info *info)
- {
--#ifdef SISFB_PAN
-         return(sisfb_pan_var(&fb_display[con].var));
--#else
--      return 0;
--#endif        
- }
- static int sisfb_switch(int con, struct fb_info *info)
-@@ -1428,157 +1807,37 @@ static int sisfb_switch(int con, struct 
- static void sisfb_blank(int blank, struct fb_info *info)
- {
--      u8 reg;
-+      sisfb_myblank(blank);
-+}
-+#endif
--      inSISIDXREG(SISCR, 0x17, reg);
-+/* ------------ FBDev related routines for 2.5 series ----------- */
--      if(blank > 0)
--              reg &= 0x7f;
--      else
--              reg |= 0x80;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--        outSISIDXREG(SISCR, 0x17, reg);               
--      outSISIDXREG(SISSR, 0x00, 0x01);    /* Synchronous Reset */
--      outSISIDXREG(SISSR, 0x00, 0x03);    /* End Reset */
--      printk(KERN_DEBUG "sisfb_blank() called (%d)\n", blank);
-+static int sisfb_open(struct fb_info *info, int user)
-+{
-+    return 0;
- }
-+static int sisfb_release(struct fb_info *info, int user)
-+{
-+    return 0;
-+}
--static int sisfb_ioctl(struct inode *inode, struct file *file,
--                     unsigned int cmd, unsigned long arg, int con,
--                     struct fb_info *info)
-+static int sisfb_get_cmap_len(const struct fb_var_screeninfo *var)
- {
--      TWDEBUG("inside ioctl");
--      switch (cmd) {
--         case FBIO_ALLOC:
--              if (!capable(CAP_SYS_RAWIO))
--                      return -EPERM;
--              sis_malloc((struct sis_memreq *) arg);
--              break;
--         case FBIO_FREE:
--              if (!capable(CAP_SYS_RAWIO))
--                      return -EPERM;
--              sis_free(*(unsigned long *) arg);
-+      int rc = 16;            
-+
-+      switch(var->bits_per_pixel) {
-+      case 8:
-+              rc = 256;       
-               break;
--         case FBIOGET_GLYPH:
--                sis_get_glyph(info,(SIS_GLYINFO *) arg);
--              break;  
--         case FBIOGET_HWCINFO:
--              {
--                      unsigned long *hwc_offset = (unsigned long *) arg;
--
--                      if (sisfb_caps & HW_CURSOR_CAP)
--                              *hwc_offset = sisfb_hwcursor_vbase -
--                                  (unsigned long) ivideo.video_vbase;
--                      else
--                              *hwc_offset = 0;
--
--                      break;
--              }
--         case FBIOPUT_MODEINFO:
--              {
--                      struct mode_info *x = (struct mode_info *)arg;
--
--                      ivideo.video_bpp        = x->bpp;
--                      ivideo.video_width      = x->xres;
--                      ivideo.video_height     = x->yres;
--                      ivideo.video_vwidth     = x->v_xres;
--                      ivideo.video_vheight    = x->v_yres;
--                      ivideo.org_x            = x->org_x;
--                      ivideo.org_y            = x->org_y;
--                      ivideo.refresh_rate     = x->vrate;
--                      ivideo.video_linelength = ivideo.video_vwidth * (ivideo.video_bpp >> 3);
--                      switch(ivideo.video_bpp) {
--                      case 8:
--                              ivideo.DstColor = 0x0000;
--                              ivideo.SiS310_AccelDepth = 0x00000000;
--                              ivideo.video_cmap_len = 256;
--                              break;
--                      case 16:
--                              ivideo.DstColor = 0x8000;
--                              ivideo.SiS310_AccelDepth = 0x00010000;
--                              ivideo.video_cmap_len = 16;
--                              break;
--                      case 32:
--                              ivideo.DstColor = 0xC000;
--                              ivideo.SiS310_AccelDepth = 0x00020000;
--                              ivideo.video_cmap_len = 16;
--                              break;
--                      default:
--                              ivideo.video_cmap_len = 16;
--                              printk(KERN_ERR "sisfb: Unsupported depth %d", ivideo.video_bpp);
--                              ivideo.accel = 0;
--                              break;
--                      }
--
--                      break;
--              }
--         case FBIOGET_DISPINFO:
--              sis_dispinfo((struct ap_data *)arg);
--              break;
--         case SISFB_GET_INFO:  /* TW: New for communication with X driver */
--              {
--                      sisfb_info *x = (sisfb_info *)arg;
--
--                      x->sisfb_id = SISFB_ID;
--                      x->sisfb_version = VER_MAJOR;
--                      x->sisfb_revision = VER_MINOR;
--                      x->sisfb_patchlevel = VER_LEVEL;
--                      x->chip_id = ivideo.chip_id;
--                      x->memory = ivideo.video_size / 1024;
--                      x->heapstart = ivideo.heapstart / 1024;
--                      x->fbvidmode = sisfb_mode_no;
--                      x->sisfb_caps = sisfb_caps;
--                      x->sisfb_tqlen = 512; /* yet unused */
--                      x->sisfb_pcibus = ivideo.pcibus;
--                      x->sisfb_pcislot = ivideo.pcislot;
--                      x->sisfb_pcifunc = ivideo.pcifunc;
--                      x->sisfb_lcdpdc = sisfb_detectedpdc;
--                      x->sisfb_lcda = sisfb_detectedlcda;
--                      break;
--              }
--         case SISFB_GET_VBRSTATUS:
--              {
--                      unsigned long *vbrstatus = (unsigned long *) arg;
--                      if(sisfb_CheckVBRetrace()) *vbrstatus = 1;
--                      else                       *vbrstatus = 0;
--              }
--         default:
--              return -EINVAL;
--      }
--      TWDEBUG("end of ioctl");
--      return 0;
--
--}
--#endif
--
--/* ------------ FBDev related routines for 2.5 series ----------- */
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--
--static int sisfb_open(struct fb_info *info, int user)
--{
--    return 0;
--}
--
--static int sisfb_release(struct fb_info *info, int user)
--{
--    return 0;
--}
--
--static int sisfb_get_cmap_len(const struct fb_var_screeninfo *var)
--{
--      int rc = 16;            
--
--      switch(var->bits_per_pixel) {
--      case 8:
--              rc = 256;       
--              break;
--      case 16:
--              rc = 16;        
--              break;          
--      case 32:
--              rc = 16;
-+      case 16:
-+              rc = 16;        
-+              break;          
-+      case 32:
-+              rc = 16;
-               break;  
-       }
-       return rc;
-@@ -1596,7 +1855,7 @@ static int sisfb_setcolreg(unsigned regn
-               outSISREG(SISDACD, (red >> 10));
-               outSISREG(SISDACD, (green >> 10));
-               outSISREG(SISDACD, (blue >> 10));
--              if (ivideo.disp_state & DISPTYPE_DISP2) {
-+              if (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-                       outSISREG(SISDAC2A, regno);
-                       outSISREG(SISDAC2D, (red >> 8));
-                       outSISREG(SISDAC2D, (green >> 8));
-@@ -1622,63 +1881,52 @@ static int sisfb_set_par(struct fb_info 
- {
-       int err;
--      TWDEBUG("inside set_par");
-         if((err = sisfb_do_set_var(&info->var, 1, info)))
-               return err;
-       sisfb_get_fix(&info->fix, info->currcon, info);
--      TWDEBUG("end of set_par");
-       return 0;
- }
- static int sisfb_check_var(struct fb_var_screeninfo *var,
-                            struct fb_info *info)
- {
--      unsigned int htotal =
--              var->left_margin + var->xres + var->right_margin +
--              var->hsync_len;
--      unsigned int vtotal = 0;
-+      unsigned int htotal = 0, vtotal = 0, myrateindex = 0;
-       double drate = 0, hrate = 0;
-       int found_mode = 0;
-       int refresh_rate, search_idx;
-+      BOOLEAN recalc_clock = FALSE;
-+      u32 pixclock;
-+
-+      htotal = var->left_margin + var->xres + var->right_margin + var->hsync_len;
--      TWDEBUG("Inside check_var");
-+      vtotal = var->upper_margin + var->lower_margin + var->vsync_len;
-+
-+      pixclock = var->pixclock;
-       if((var->vmode & FB_VMODE_MASK) == FB_VMODE_NONINTERLACED) {
--              vtotal = var->upper_margin + var->yres + var->lower_margin +
--                       var->vsync_len;   
-+              vtotal += var->yres;
-               vtotal <<= 1;
-       } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
--              vtotal = var->upper_margin + var->yres + var->lower_margin +
--                       var->vsync_len;   
-+              vtotal += var->yres;
-               vtotal <<= 2;
-       } else if((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
--              vtotal = var->upper_margin + (var->yres/2) + var->lower_margin +
--                       var->vsync_len;   
--      } else  vtotal = var->upper_margin + var->yres + var->lower_margin +
--                       var->vsync_len;
-+              vtotal += var->yres;
-+              vtotal <<= 1;
-+      } else  vtotal += var->yres;
-       if(!(htotal) || !(vtotal)) {
-               SISFAIL("sisfb: no valid timing data");
-       }
--      if((var->pixclock) && (htotal)) {
--         drate = 1E12 / var->pixclock;
--         hrate = drate / htotal;
--         refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
--      } else refresh_rate = 60;
--
--      /* TW: Calculation wrong for 1024x600 - force it to 60Hz */
--      if((var->xres == 1024) && (var->yres == 600)) refresh_rate = 60;
--
-       search_idx = 0;
-       while( (sisbios_mode[search_idx].mode_no != 0) &&
-              (sisbios_mode[search_idx].xres <= var->xres) ) {
-               if( (sisbios_mode[search_idx].xres == var->xres) &&
-                   (sisbios_mode[search_idx].yres == var->yres) &&
-                   (sisbios_mode[search_idx].bpp == var->bits_per_pixel)) {
--                      if(sisfb_validate_mode(search_idx) > 0) {
-+                      if(sisfb_validate_mode(search_idx, ivideo.currentvbflags) > 0) {
-                          found_mode = 1;
-                          break;
-                       }
-@@ -1687,38 +1935,95 @@ static int sisfb_check_var(struct fb_var
-       }
-       if(!found_mode) {
--      
--              printk(KERN_ERR "sisfb: %dx%dx%d is no valid mode\n", 
--                      var->xres, var->yres, var->bits_per_pixel);
--                      
-+
-                 search_idx = 0;
-               while(sisbios_mode[search_idx].mode_no != 0) {
--                     
-                  if( (var->xres <= sisbios_mode[search_idx].xres) &&
--                     (var->yres <= sisbios_mode[search_idx].yres) && 
-+                     (var->yres <= sisbios_mode[search_idx].yres) &&
-                      (var->bits_per_pixel == sisbios_mode[search_idx].bpp) ) {
--                        if(sisfb_validate_mode(search_idx) > 0) {
-+                        if(sisfb_validate_mode(search_idx, ivideo.currentvbflags) > 0) {
-                            found_mode = 1;
-                            break;
-                         }
-                  }
-                  search_idx++;
--              }                       
-+              }
-               if(found_mode) {
-+                      printk(KERN_DEBUG "sisfb: Adapted from %dx%dx%d to %dx%dx%d\n",
-+                              var->xres, var->yres, var->bits_per_pixel,
-+                              sisbios_mode[search_idx].xres,
-+                              sisbios_mode[search_idx].yres,
-+                              var->bits_per_pixel);
-                       var->xres = sisbios_mode[search_idx].xres;
-                       var->yres = sisbios_mode[search_idx].yres;
--                      printk(KERN_DEBUG "sisfb: Adapted to mode %dx%dx%d\n",
--                              var->xres, var->yres, var->bits_per_pixel);
--                 
-+
-+
-               } else {
--                      printk(KERN_ERR "sisfb: Failed to find similar mode to %dx%dx%d\n", 
-+                      printk(KERN_ERR "sisfb: Failed to find supported mode near %dx%dx%d\n",
-                               var->xres, var->yres, var->bits_per_pixel);
-                       return -EINVAL;
-               }
-       }
--      /* TW: TODO: Check the refresh rate */          
--      
-+      if( ((ivideo.vbflags & VB_LVDS) ||                      /* Slave modes on LVDS and 301B-DH */
-+           ((ivideo.vbflags & VB_30xBDH) && (ivideo.currentvbflags & CRT2_LCD))) &&
-+          (var->bits_per_pixel == 8) ) {
-+              refresh_rate = 60;
-+              recalc_clock = TRUE;
-+      } else if( (ivideo.current_htotal == htotal) &&         /* x=x & y=y & c=c -> assume depth change */
-+                 (ivideo.current_vtotal == vtotal) &&
-+                 (ivideo.current_pixclock == pixclock) ) {
-+              drate = 1E12 / pixclock;
-+              hrate = drate / htotal;
-+              refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
-+      } else if( ( (ivideo.current_htotal != htotal) ||       /* x!=x | y!=y & c=c -> invalid pixclock */
-+                   (ivideo.current_vtotal != vtotal) ) &&
-+                 (ivideo.current_pixclock == var->pixclock) ) {
-+              if(sisfb_lastrates[sisbios_mode[search_idx].mode_no]) {
-+                      refresh_rate = sisfb_lastrates[sisbios_mode[search_idx].mode_no];
-+              } else if(sisfb_parm_rate != -1) {
-+                      refresh_rate = sisfb_parm_rate;
-+              } else {
-+                      refresh_rate = 60;
-+              }
-+              recalc_clock = TRUE;
-+      } else if((pixclock) && (htotal) && (vtotal)) {
-+              drate = 1E12 / pixclock;
-+              hrate = drate / htotal;
-+              refresh_rate = (unsigned int) (hrate / vtotal * 2 + 0.5);
-+      } else if(ivideo.current_refresh_rate) {
-+              refresh_rate = ivideo.current_refresh_rate;
-+              recalc_clock = TRUE;
-+      } else {
-+              refresh_rate = 60;
-+              recalc_clock = TRUE;
-+      }
-+
-+      myrateindex = sisfb_search_refresh_rate(refresh_rate, search_idx);
-+
-+      /* Eventually recalculate timing and clock */
-+      if(recalc_clock) {
-+         if(!myrateindex) myrateindex = sisbios_mode[search_idx].rate_idx;
-+         var->pixclock = (u32) (1E12 / sisfb_mode_rate_to_dclock(&SiS_Pr, &sishw_ext,
-+                                              sisbios_mode[search_idx].mode_no, myrateindex));
-+         sisfb_mode_rate_to_ddata(&SiS_Pr, &sishw_ext,
-+                                      sisbios_mode[search_idx].mode_no, myrateindex,
-+                                      &var->left_margin, &var->right_margin,
-+                                      &var->upper_margin, &var->lower_margin,
-+                                      &var->hsync_len, &var->vsync_len,
-+                                      &var->sync, &var->vmode);
-+         if((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-+              var->pixclock <<= 1;
-+         }
-+      }
-+
-+      if(sisfb_thismonitor.datavalid) {
-+         if(!sisfb_verify_rate(&sisfb_thismonitor, search_idx,
-+                               myrateindex, refresh_rate)) {
-+            printk(KERN_INFO "sisfb: WARNING: Refresh rate exceeds monitor specs!\n");
-+         }
-+      }
-+
-       /* Adapt RGB settings */
-       sisfb_bpp_to_var(var);  
-       
-@@ -1731,18 +2036,20 @@ static int sisfb_check_var(struct fb_var
-       /* Horiz-panning not supported */
-       if(var->xres != var->xres_virtual)
-               var->xres_virtual = var->xres;
--
--      if(!sisfb_ypan) {
--              if(var->yres != var->yres_virtual)
--                      var->yres_virtual = var->yres;
--      } else {
-+      
-+      if(sisfb_ypan) {
-          /* TW: Now patch yres_virtual if we use panning */
-          /* *** May I do this? *** */
-          var->yres_virtual = ivideo.heapstart / (var->xres * (var->bits_per_pixel >> 3));
--          if(var->yres_virtual <= var->yres) {
-+         if(var->yres_virtual <= var->yres) {
-               /* TW: Paranoia check */
-               var->yres_virtual = var->yres;
--          }
-+         }
-+      } else {
-+         if(var->yres != var->yres_virtual)
-+              var->yres_virtual = var->yres;
-+         var->xoffset = 0;
-+         var->yoffset = 0;
-       }
-       
-       /* Truncate offsets to maximum if too high */
-@@ -1757,28 +2064,25 @@ static int sisfb_check_var(struct fb_var
-           var->green.msb_right =
-           var->blue.msb_right =
-           var->transp.offset = var->transp.length = var->transp.msb_right = 0;                
--              
--      TWDEBUG("end of check_var");
-+
-       return 0;
- }
--#ifdef SISFB_PAN
- static int sisfb_pan_display(struct fb_var_screeninfo *var,
-                            struct fb_info* info)
- {
-       int err;
--      
--      TWDEBUG("inside pan_display");
--      
-+
-       if (var->xoffset > (var->xres_virtual - var->xres))
-               return -EINVAL;
-       if (var->yoffset > (var->yres_virtual - var->yres))
-               return -EINVAL;
-       if (var->vmode & FB_VMODE_YWRAP) {
--              if (var->yoffset < 0
--                  || var->yoffset >= info->var.yres_virtual
--                  || var->xoffset) return -EINVAL;
-+              if (var->yoffset < 0 ||
-+                  var->yoffset >= info->var.yres_virtual ||
-+                  var->xoffset)
-+                      return -EINVAL;
-       } else {
-               if (var->xoffset + info->var.xres > info->var.xres_virtual ||
-                   var->yoffset + info->var.yres > info->var.yres_virtual)
-@@ -1794,10 +2098,8 @@ static int sisfb_pan_display(struct fb_v
-       else
-               info->var.vmode &= ~FB_VMODE_YWRAP;
--      TWDEBUG("end of pan_display");
-       return 0;
- }
--#endif
- static int sisfb_mmap(struct fb_info *info, struct file *file,
-                     struct vm_area_struct *vma)
-@@ -1806,7 +2108,6 @@ static int sisfb_mmap(struct fb_info *in
-       unsigned long off;
-       u32 len, mmio_off;
--      TWDEBUG("inside mmap");
-       if(vma->vm_pgoff > (~0UL >> PAGE_SHIFT))  return -EINVAL;
-       off = vma->vm_pgoff << PAGE_SHIFT;
-@@ -1844,139 +2145,141 @@ static int sisfb_mmap(struct fb_info *in
-                               vma->vm_page_prot))
-               return -EAGAIN;
--        TWDEBUG("end of mmap");
-       return 0;
- }
- static int sisfb_blank(int blank, struct fb_info *info)
- {
--      u8 reg;
-+      return(sisfb_myblank(blank));
-+}
--      inSISIDXREG(SISCR, 0x17, reg);
-+#endif
--      if(blank > 0)
--              reg &= 0x7f;
--      else
--              reg |= 0x80;
-+/* ----------- FBDev related routines for all series ---------- */
--        outSISIDXREG(SISCR, 0x17, reg);               
--      outSISIDXREG(SISSR, 0x00, 0x01);    /* Synchronous Reset */
--      outSISIDXREG(SISSR, 0x00, 0x03);    /* End Reset */
--        return(0);
--}
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- static int sisfb_ioctl(struct inode *inode, struct file *file,
--                     unsigned int cmd, unsigned long arg, 
-+                     unsigned int cmd, unsigned long arg,
-                      struct fb_info *info)
-+#else
-+static int sisfb_ioctl(struct inode *inode, struct file *file,
-+                     unsigned int cmd, unsigned long arg, int con,
-+                     struct fb_info *info)
-+#endif
- {
--      TWDEBUG("inside ioctl");
-+      struct sis_memreq sismemreq;
-+      struct ap_data sisapdata;
-+      unsigned long sismembase = 0;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      SIS_GLYINFO sisglyinfo;
-+#endif
-+
-       switch (cmd) {
-          case FBIO_ALLOC:
--              if (!capable(CAP_SYS_RAWIO))
-+              if(!capable(CAP_SYS_RAWIO))
-                       return -EPERM;
--              sis_malloc((struct sis_memreq *) arg);
-+              if(copy_from_user(&sismemreq, (void *)arg, sizeof(sismemreq)))
-+                      return -EFAULT;
-+              sis_malloc(&sismemreq);
-+              if(copy_to_user((void *)arg, &sismemreq, sizeof(sismemreq))) {
-+                      sis_free(sismemreq.offset);
-+                      return -EFAULT;
-+              }
-               break;
-          case FBIO_FREE:
--              if (!capable(CAP_SYS_RAWIO))
-+              if(!capable(CAP_SYS_RAWIO))
-                       return -EPERM;
--              sis_free(*(unsigned long *) arg);
-+              if(get_user(sismembase, (unsigned long *) arg))
-+                      return -EFAULT;
-+              sis_free(sismembase);
-               break;
--         case FBIOGET_HWCINFO:
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+         case FBIOGET_GLYPH:
-+              if(copy_from_user(&sisglyinfo, (void *)arg, sizeof(sisglyinfo)))
-+                      return -EFAULT;
-+                sis_get_glyph(info, &sisglyinfo);
-+              break;
-+         case FBIOPUT_MODEINFO:
-               {
--                      unsigned long *hwc_offset = (unsigned long *) arg;
-+                      struct mode_info x;
--                      if (sisfb_caps & HW_CURSOR_CAP)
--                              *hwc_offset = sisfb_hwcursor_vbase -
--                                  (unsigned long) ivideo.video_vbase;
--                      else
--                              *hwc_offset = 0;
-+                      if(copy_from_user(&x, (void *)arg, sizeof(x)))
-+                              return -EFAULT;
-+                      ivideo.video_bpp        = x.bpp;
-+                      ivideo.video_width      = x.xres;
-+                      ivideo.video_height     = x.yres;
-+                      ivideo.video_vwidth     = x.v_xres;
-+                      ivideo.video_vheight    = x.v_yres;
-+                      ivideo.org_x            = x.org_x;
-+                      ivideo.org_y            = x.org_y;
-+                      ivideo.refresh_rate     = x.vrate;
-+                      ivideo.video_linelength = ivideo.video_vwidth * (ivideo.video_bpp >> 3);
-+                      sisfb_set_vparms();
-                       break;
-               }
--         case FBIOPUT_MODEINFO:
-+#endif
-+         case FBIOGET_HWCINFO:
-               {
--                      struct mode_info *x = (struct mode_info *)arg;
-+                      unsigned long myhwcoffset = 0;
--                      ivideo.video_bpp        = x->bpp;
--                      ivideo.video_width      = x->xres;
--                      ivideo.video_height     = x->yres;
--                      ivideo.video_vwidth     = x->v_xres;
--                      ivideo.video_vheight    = x->v_yres;
--                      ivideo.org_x            = x->org_x;
--                      ivideo.org_y            = x->org_y;
--                      ivideo.refresh_rate     = x->vrate;
--                      ivideo.video_linelength = ivideo.video_vwidth * (ivideo.video_bpp >> 3);
--                      switch(ivideo.video_bpp) {
--                      case 8:
--                              ivideo.DstColor = 0x0000;
--                              ivideo.SiS310_AccelDepth = 0x00000000;
--                              ivideo.video_cmap_len = 256;
--                              break;
--                      case 16:
--                              ivideo.DstColor = 0x8000;
--                              ivideo.SiS310_AccelDepth = 0x00010000;
--                              ivideo.video_cmap_len = 16;
--                              break;
--                      case 32:
--                              ivideo.DstColor = 0xC000;
--                              ivideo.SiS310_AccelDepth = 0x00020000;
--                              ivideo.video_cmap_len = 16;
--                              break;
--                      default:
--                              ivideo.video_cmap_len = 16;
--                              printk(KERN_ERR "sisfb: Unsupported accel depth %d", ivideo.video_bpp);
--                              ivideo.accel = 0;
--                              break;
--                      }
-+                      if(sisfb_caps & HW_CURSOR_CAP)
-+                              myhwcoffset = sisfb_hwcursor_vbase -
-+                                  (unsigned long) ivideo.video_vbase;
-+
-+                      return put_user(myhwcoffset, (unsigned long *)arg);
-                       break;
-               }
-          case FBIOGET_DISPINFO:
--              sis_dispinfo((struct ap_data *)arg);
-+              sis_dispinfo(&sisapdata);
-+              if(copy_to_user((void *)arg, &sisapdata, sizeof(sisapdata)))
-+                      return -EFAULT;
-               break;
--         case SISFB_GET_INFO:  /* TW: New for communication with X driver */
-+         case SISFB_GET_INFO:  /* New for communication with X driver */
-               {
--                      sisfb_info *x = (sisfb_info *)arg;
-+                      sisfb_info x;
--                      x->sisfb_id = SISFB_ID;
--                      x->sisfb_version = VER_MAJOR;
--                      x->sisfb_revision = VER_MINOR;
--                      x->sisfb_patchlevel = VER_LEVEL;
--                      x->chip_id = ivideo.chip_id;
--                      x->memory = ivideo.video_size / 1024;
--                      x->heapstart = ivideo.heapstart / 1024;
--                      x->fbvidmode = sisfb_mode_no;
--                      x->sisfb_caps = sisfb_caps;
--                      x->sisfb_tqlen = 512; /* yet unused */
--                      x->sisfb_pcibus = ivideo.pcibus;
--                      x->sisfb_pcislot = ivideo.pcislot;
--                      x->sisfb_pcifunc = ivideo.pcifunc;
--                      x->sisfb_lcdpdc = sisfb_detectedpdc;
--                      x->sisfb_lcda = sisfb_detectedlcda;
-+                      x.sisfb_id = SISFB_ID;
-+                      x.sisfb_version = VER_MAJOR;
-+                      x.sisfb_revision = VER_MINOR;
-+                      x.sisfb_patchlevel = VER_LEVEL;
-+                      x.chip_id = ivideo.chip_id;
-+                      x.memory = ivideo.video_size / 1024;
-+                      x.heapstart = ivideo.heapstart / 1024;
-+                      x.fbvidmode = sisfb_mode_no;
-+                      x.sisfb_caps = sisfb_caps;
-+                      x.sisfb_tqlen = 512; /* yet unused */
-+                      x.sisfb_pcibus = ivideo.pcibus;
-+                      x.sisfb_pcislot = ivideo.pcislot;
-+                      x.sisfb_pcifunc = ivideo.pcifunc;
-+                      x.sisfb_lcdpdc = sisfb_detectedpdc;
-+                      x.sisfb_lcda = sisfb_detectedlcda;
-+                      x.sisfb_vbflags = ivideo.vbflags;
-+                      x.sisfb_currentvbflags = ivideo.currentvbflags;
-+                      if(copy_to_user((void *)arg, &x, sizeof(x)))
-+                              return -EFAULT;
-                       break;
-               }
-          case SISFB_GET_VBRSTATUS:
-               {
--                      unsigned long *vbrstatus = (unsigned long *) arg;
--                      if(sisfb_CheckVBRetrace()) *vbrstatus = 1;
--                      else                       *vbrstatus = 0;
-+                      if(sisfb_CheckVBRetrace())
-+                              return put_user(1UL, (unsigned long *) arg);
-+                      else
-+                              return put_user(0UL, (unsigned long *) arg);
-+                      break;
-               }
-          default:
-               return -EINVAL;
-       }
--      TWDEBUG("end of ioctl");
-       return 0;
--
- }
--#endif
--
--/* ----------- FBDev related routines for all series ---------- */
- static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con,
-                        struct fb_info *info)
- {
--      TWDEBUG("inside get_fix");
-       memset(fix, 0, sizeof(struct fb_fix_screeninfo));
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
-@@ -1987,45 +2290,47 @@ static int sisfb_get_fix(struct fb_fix_s
-       fix->smem_start = ivideo.video_base;
--        /* TW */
-         if((!sisfb_mem) || (sisfb_mem > (ivideo.video_size/1024))) {
--          if (ivideo.video_size > 0x1000000) {
--              fix->smem_len = 0xc00000;
--          } else if (ivideo.video_size > 0x800000)
--              fix->smem_len = 0x800000;
--          else
--              fix->smem_len = 0x400000;
-+          if(sisvga_engine == SIS_300_VGA) {
-+             if(ivideo.video_size > 0x1000000) {
-+                      fix->smem_len = 0xc00000;
-+             } else if(ivideo.video_size > 0x800000)
-+                      fix->smem_len = 0x800000;
-+             else
-+                      fix->smem_len = 0x400000;
-+            } else {
-+              fix->smem_len = ivideo.video_size - 0x100000;
-+          }
-         } else
-               fix->smem_len = sisfb_mem * 1024;
--      fix->type        = video_type;
-+      fix->type        = FB_TYPE_PACKED_PIXELS;
-       fix->type_aux    = 0;
-       if(ivideo.video_bpp == 8)
-               fix->visual = FB_VISUAL_PSEUDOCOLOR;
-       else
-               fix->visual = FB_VISUAL_TRUECOLOR;
-       fix->xpanstep    = 0;
--#ifdef SISFB_PAN
-+
-         if(sisfb_ypan)         fix->ypanstep = 1;
--#endif
-+
-       fix->ywrapstep   = 0;
-       fix->line_length = ivideo.video_linelength;
-       fix->mmio_start  = ivideo.mmio_base;
-       fix->mmio_len    = sisfb_mmio_size;
-       if(sisvga_engine == SIS_300_VGA) 
-          fix->accel    = FB_ACCEL_SIS_GLAMOUR;
--      else if(ivideo.chip == SIS_330)
-+      else if((ivideo.chip == SIS_330) || (ivideo.chip == SIS_660))
-          fix->accel    = FB_ACCEL_SIS_XABRE;
--      else 
-+      else
-          fix->accel    = FB_ACCEL_SIS_GLAMOUR_2;
--      
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)                
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       fix->reserved[0] = ivideo.video_size & 0xFFFF;
-       fix->reserved[1] = (ivideo.video_size >> 16) & 0xFFFF;
-       fix->reserved[2] = sisfb_caps;
--#endif        
-+#endif
--      TWDEBUG("end of get_fix");
-       return 0;
- }
-@@ -2033,17 +2338,15 @@ static int sisfb_get_fix(struct fb_fix_s
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- static struct fb_ops sisfb_ops = {
--      owner:          THIS_MODULE,
--      fb_get_fix:     sisfb_get_fix,
--      fb_get_var:     sisfb_get_var,
--      fb_set_var:     sisfb_set_var,
--      fb_get_cmap:    sisfb_get_cmap,
--      fb_set_cmap:    sisfb_set_cmap,
--#ifdef SISFB_PAN
--        fb_pan_display:       sisfb_pan_display,
--#endif
--      fb_ioctl:       sisfb_ioctl,
--      fb_mmap:        sisfb_mmap,
-+      .owner          = THIS_MODULE,
-+      .fb_get_fix     = sisfb_get_fix,
-+      .fb_get_var     = sisfb_get_var,
-+      .fb_set_var     = sisfb_set_var,
-+      .fb_get_cmap    = sisfb_get_cmap,
-+      .fb_set_cmap    = sisfb_set_cmap,
-+        .fb_pan_display = sisfb_pan_display,
-+      .fb_ioctl       = sisfb_ioctl,
-+      .fb_mmap        = sisfb_mmap,
- };
- #endif
-@@ -2056,9 +2359,7 @@ static struct fb_ops sisfb_ops = {
-       .fb_check_var = sisfb_check_var,
-       .fb_set_par   = sisfb_set_par,
-       .fb_setcolreg = sisfb_setcolreg,
--#ifdef SISFB_PAN
-         .fb_pan_display = sisfb_pan_display,
--#endif        
-         .fb_blank     = sisfb_blank,
-       .fb_fillrect  = fbcon_sis_fillrect,
-       .fb_copyarea  = fbcon_sis_copyarea,
-@@ -2106,12 +2407,12 @@ static int sisfb_get_dram_size_300(void)
-       } else {                /* 540, 630, 730 */
-               pdev = pci_find_device(PCI_VENDOR_ID_SI, nbridge_id, pdev);
--              if (pdev) {
-+              if (pdev) { 
-                       pci_read_config_byte(pdev, IND_BRI_DRAM_STATUS, &pci_data);
-                       pci_data = (pci_data & BRI_DRAM_SIZE_MASK) >> 4;
-                       ivideo.video_size = (unsigned int)(1 << (pci_data+21));
-                       pdev_valid = 1;
--
-+      
-                       reg = SIS_DATA_BUS_64 << 6;
-                       switch (pci_data) {
-                          case BRI_DRAM_SIZE_2MB:
-@@ -2134,174 +2435,13 @@ static int sisfb_get_dram_size_300(void)
-                               break;
-                       }
-                       outSISIDXREG(SISSR, IND_SIS_DRAM_SIZE, reg);
--              }
-+              }   
-       
-               if (!pdev_valid)  return -1;
-       }
-       return 0;
- }
--static void sisfb_detect_VB_connect_300()
--{
--      u8 sr16, sr17, cr32, temp;
--
--      ivideo.TV_plug = ivideo.TV_type = 0;
--
--        switch(ivideo.hasVB) {
--        case HASVB_LVDS_CHRONTEL:
--        case HASVB_CHRONTEL:
--           SiS_SenseCh();
--           break;
--        case HASVB_301:
--        case HASVB_302:
--           SiS_Sense30x();
--           break;
--      }
--
--      inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_17, sr17);
--        inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR32, cr32);
--
--      if ((sr17 & 0x0F) && (ivideo.chip != SIS_300)) {
--
--              if ((sr17 & 0x01) && !sisfb_crt1off)
--                      sisfb_crt1off = 0;
--              else {
--                      if (sr17 & 0x0E)
--                              sisfb_crt1off = 1;
--                      else
--                              sisfb_crt1off = 0;
--              }
--
--              if (sisfb_crt2type != -1)
--                      /* TW: override detected CRT2 type */
--                      ivideo.disp_state = sisfb_crt2type;
--                else if (sr17 & 0x04)
--                      ivideo.disp_state = DISPTYPE_TV;                        
--              else if (sr17 & 0x02)
--                      ivideo.disp_state = DISPTYPE_LCD;                       
--              else if (sr17 & 0x08 )
--                      ivideo.disp_state = DISPTYPE_CRT2;
--              else
--                      ivideo.disp_state = 0;
--
--              if(sisfb_tvplug != -1)
--                      /* PR/TW: override detected TV type */
--                      ivideo.TV_plug = sisfb_tvplug;
--              else if (sr17 & 0x20)
--                      ivideo.TV_plug = TVPLUG_SVIDEO;
--              else if (sr17 & 0x10)
--                      ivideo.TV_plug = TVPLUG_COMPOSITE;
--
--              inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_16, sr16);
--              if (sr16 & 0x20)
--                      ivideo.TV_type = TVMODE_PAL;
--              else
--                      ivideo.TV_type = TVMODE_NTSC;
--
--      } else {
--
--              if ((cr32 & SIS_CRT1) && !sisfb_crt1off)
--                      sisfb_crt1off = 0;
--              else {
--                      if (cr32 & 0x5F)
--                              sisfb_crt1off = 1;
--                      else
--                              sisfb_crt1off = 0;
--              }
--
--              if (sisfb_crt2type != -1)
--                      /* TW: override detected CRT2 type */
--                      ivideo.disp_state = sisfb_crt2type;
--              else if (cr32 & SIS_VB_TV)
--                      ivideo.disp_state = DISPTYPE_TV;
--              else if (cr32 & SIS_VB_LCD)
--                      ivideo.disp_state = DISPTYPE_LCD;
--              else if (cr32 & SIS_VB_CRT2)
--                      ivideo.disp_state = DISPTYPE_CRT2;
--              else
--                      ivideo.disp_state = 0;
--
--              /* TW: Detect TV plug & type */
--              if(sisfb_tvplug != -1)
--                      /* PR/TW: override with option */
--                      ivideo.TV_plug = sisfb_tvplug;
--              else if (cr32 & SIS_VB_HIVISION) {
--                      ivideo.TV_type = TVMODE_HIVISION;
--                      ivideo.TV_plug = TVPLUG_SVIDEO;
--              }
--              else if (cr32 & SIS_VB_SVIDEO)
--                      ivideo.TV_plug = TVPLUG_SVIDEO;
--              else if (cr32 & SIS_VB_COMPOSITE)
--                      ivideo.TV_plug = TVPLUG_COMPOSITE;
--              else if (cr32 & SIS_VB_SCART)
--                      ivideo.TV_plug = TVPLUG_SCART;
--
--              if (ivideo.TV_type == 0) {
--                      inSISIDXREG(SISSR, IND_SIS_POWER_ON_TRAP, temp);
--                      if (temp & 0x01)
--                              ivideo.TV_type = TVMODE_PAL;
--                      else
--                              ivideo.TV_type = TVMODE_NTSC;
--              }
--
--      }
--
--      /* TW: Copy forceCRT1 option to CRT1off if option is given */
--      if (sisfb_forcecrt1 != -1) {
--              if(sisfb_forcecrt1) sisfb_crt1off = 0;
--              else                sisfb_crt1off = 1;
--      }
--}
--
--static void sisfb_get_VB_type_300(void)
--{
--      u8 reg;
--
--      if(ivideo.chip != SIS_300) {
--              if(!sisfb_has_VB_300()) {
--                      inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR37, reg);
--                      switch ((reg & SIS_EXTERNAL_CHIP_MASK) >> 1) {
--                         case SIS_EXTERNAL_CHIP_LVDS:
--                              ivideo.hasVB = HASVB_LVDS;
--                              break;
--                         case SIS_EXTERNAL_CHIP_TRUMPION:
--                              ivideo.hasVB = HASVB_TRUMPION;
--                              break;
--                         case SIS_EXTERNAL_CHIP_LVDS_CHRONTEL:
--                              ivideo.hasVB = HASVB_LVDS_CHRONTEL;
--                              break;
--                         case SIS_EXTERNAL_CHIP_CHRONTEL:
--                              ivideo.hasVB = HASVB_CHRONTEL;
--                              break;
--                         default:
--                              break;
--                      }
--              }
--      } else {
--              sisfb_has_VB_300();
--      }
--}
--
--static int sisfb_has_VB_300(void)
--{
--      u8 vb_chipid;
--
--      inSISIDXREG(SISPART4, 0x00, vb_chipid);
--      switch (vb_chipid) {
--         case 0x01:
--              ivideo.hasVB = HASVB_301;
--              break;
--         case 0x02:
--              ivideo.hasVB = HASVB_302;
--              break;
--         default:
--              ivideo.hasVB = HASVB_NONE;
--              return FALSE;
--      }
--      return TRUE;
--
--}
--
- #endif  /* CONFIG_FB_SIS_300 */
-@@ -2314,14 +2454,18 @@ static int sisfb_get_dram_size_315(void)
-       u8  pci_data;
-       u8  reg = 0;
--      if (ivideo.chip == SIS_550 || ivideo.chip == SIS_650 || ivideo.chip == SIS_740) {
-+      if (ivideo.chip == SIS_550 ||
-+          ivideo.chip == SIS_650 ||
-+          ivideo.chip == SIS_740 ||
-+          ivideo.chip == SIS_660) {
- #ifdef LINUXBIOS
-               while ((pdev = pci_find_device(PCI_VENDOR_ID_SI, PCI_ANY_ID, pdev)) != NULL) {
-                       if ((pdev->device == PCI_DEVICE_ID_SI_550) ||
--                           (pdev->device == PCI_DEVICE_ID_SI_650) ||
--                           (pdev->device == PCI_DEVICE_ID_SI_740)) {
-+                          (pdev->device == PCI_DEVICE_ID_SI_650) ||
-+                           (pdev->device == PCI_DEVICE_ID_SI_740) ||
-+                           (pdev->device == PCI_DEVICE_ID_SI_660)) {
-                               pci_read_config_byte(pdev, IND_BRI_DRAM_STATUS,
-                                                    &pci_data);
-                               pci_data = (pci_data & BRI_DRAM_SIZE_MASK) >> 4;
-@@ -2425,7 +2569,7 @@ static int sisfb_get_dram_size_315(void)
- #endif
-               return 0;
--      } else {        /* 315 */
-+      } else {        /* 315, 330 */
-               inSISIDXREG(SISSR, IND_SIS_DRAM_SIZE, reg);
-               switch ((reg & SIS315_DRAM_SIZE_MASK) >> 4) {
-@@ -2470,7 +2614,7 @@ static int sisfb_get_dram_size_315(void)
-                     case SIS315_DUAL_CHANNEL_1_RANK:
-                          ivideo.video_size <<= 1;
-                          break;
--                    case SIS315_ASYM_DDR:             /* TW: DDR asymentric */
-+                    case SIS315_ASYM_DDR:             /* TW: DDR asymetric */
-                          ivideo.video_size += (ivideo.video_size/2);
-                          break;
-                  }
-@@ -2483,128 +2627,242 @@ static int sisfb_get_dram_size_315(void)
-       
- }
--static void sisfb_detect_VB_connect_315(void)
-+#endif   /* CONFIG_FB_SIS_315 */
-+
-+
-+/* -------------- video bridge detection --------------- */
-+
-+static void sisfb_detect_VB_connect()
- {
--      u8 cr32, temp=0;
-+      u8 sr16, sr17, cr32, temp;
--      ivideo.TV_plug = ivideo.TV_type = 0;
-+      if(sisvga_engine == SIS_300_VGA) {
-+      
-+              inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_17, sr17); 
-+            
-+              if ((sr17 & 0x0F) && (ivideo.chip != SIS_300)) {
-+      
-+                      /* Old BIOSes store the detected CRT2 type in SR17
-+                       * instead of CR32. However, since our detection
-+                       * routines store their results to CR32, we now copy
-+                       * the remaining bits (for LCD and VGA) to CR32 for
-+                       * unified usage.
-+                       * SR17[0] CRT1    [1] LCD     [2] TV    [3] VGA2
-+                       *     [4] AVIDEO  [5] SVIDEO
-+                       */
--        switch(ivideo.hasVB) {
--        case HASVB_LVDS_CHRONTEL:
--        case HASVB_CHRONTEL:
--           SiS_SenseCh();
--           break;
--        case HASVB_301:
--        case HASVB_302:
--           SiS_Sense30x();
--           break;
--      }
-+#if 0
-+                      if (sr17 & 0x01) orSISIDXREG(SISCR, 0x32, SIS_CRT1);
-+                      else             andSISIDXREG(SISCR, 0x32, ~SIS_CRT1);
-+
-+                      if (sr17 & 0x02) orSISIDXREG(SISCR, 0x32, SIS_VB_LCD);
-+                      else             andSISIDXREG(SISCR, 0x32, ~SIS_VB_LCD);
-+
-+                      /* no HiVision and no DVI connector here */
-+                      andSISIDXREG(SISCR, 0x32, ~0xc0);
-+#endif
-+              
-+                      /* PAL/NTSC is stored on SR16 on such machines */
-+                      if (!(ivideo.vbflags & (TV_PAL | TV_NTSC))) {
-+                              inSISIDXREG(SISSR, IND_SIS_SCRATCH_REG_16, sr16);
-+                              if (sr16 & 0x20)
-+                                      ivideo.vbflags |= TV_PAL;
-+                              else
-+                                      ivideo.vbflags |= TV_NTSC;
-+                      }
-+              } 
-+              
-+      }
-+      
-       inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR32, cr32);
--      if ((cr32 & SIS_CRT1) && !sisfb_crt1off)
-+      if (cr32 & SIS_CRT1)
-               sisfb_crt1off = 0;
-       else {
--              if (cr32 & 0x5F)   
-+              if (cr32 & 0x5F)
-                       sisfb_crt1off = 1;
-               else
-                       sisfb_crt1off = 0;
-       }
--      if (sisfb_crt2type != -1)
--              /* TW: Override with option */
--              ivideo.disp_state = sisfb_crt2type;
--      else if (cr32 & SIS_VB_TV)
--              ivideo.disp_state = DISPTYPE_TV;                
--      else if (cr32 & SIS_VB_LCD)
--              ivideo.disp_state = DISPTYPE_LCD;               
--      else if (cr32 & SIS_VB_CRT2)
--              ivideo.disp_state = DISPTYPE_CRT2;
--      else
--              ivideo.disp_state = 0;
-+      ivideo.vbflags &= ~(CRT2_TV | CRT2_LCD | CRT2_VGA);
-+      if (cr32 & SIS_VB_TV)
-+              ivideo.vbflags |= CRT2_TV;
-+      if (cr32 & SIS_VB_LCD)
-+              ivideo.vbflags |= CRT2_LCD;
-+      if (cr32 & SIS_VB_CRT2)
-+              ivideo.vbflags |= CRT2_VGA;
-+              
-+      /* TW: Detect/set TV plug & type */
-       if(sisfb_tvplug != -1)
--              /* PR/TW: Override with option */
--              ivideo.TV_plug = sisfb_tvplug;
--      else if (cr32 & SIS_VB_HIVISION) {
--              ivideo.TV_type = TVMODE_HIVISION;
--              ivideo.TV_plug = TVPLUG_SVIDEO;
--      }
-+              ivideo.vbflags |= sisfb_tvplug;
-+      if (cr32 & SIS_VB_HIVISION) 
-+              ivideo.vbflags |= (TV_HIVISION | TV_SVIDEO);
-       else if (cr32 & SIS_VB_SVIDEO)
--              ivideo.TV_plug = TVPLUG_SVIDEO;
-+              ivideo.vbflags |= TV_SVIDEO;
-       else if (cr32 & SIS_VB_COMPOSITE)
--              ivideo.TV_plug = TVPLUG_COMPOSITE;
-+              ivideo.vbflags |= TV_AVIDEO;
-       else if (cr32 & SIS_VB_SCART)
--              ivideo.TV_plug = TVPLUG_SCART;
--
--      if(ivideo.TV_type == 0) {
--          /* TW: PAL/NTSC changed for 650 */
--          if((ivideo.chip <= SIS_315PRO) || (ivideo.chip >= SIS_330)) {
--
--                inSISIDXREG(SISCR, 0x38, temp);
--              if(temp & 0x10)
--                      ivideo.TV_type = TVMODE_PAL;
--              else
--                      ivideo.TV_type = TVMODE_NTSC;
-+              ivideo.vbflags |= TV_SCART;
-+              
-+      if (!(ivideo.vbflags & (TV_PAL | TV_NTSC))) {
-+              if(sisvga_engine == SIS_300_VGA) {
-+                      inSISIDXREG(SISSR, IND_SIS_POWER_ON_TRAP, temp);
-+                      if (temp & 0x01)
-+                              ivideo.vbflags |= TV_PAL;
-+                      else
-+                              ivideo.vbflags |= TV_NTSC;
-+              } else if((ivideo.chip <= SIS_315PRO) || (ivideo.chip == SIS_330)) {
--          } else {
-+                      inSISIDXREG(SISCR, 0x38, temp);
-+                      if(temp & 0x10)
-+                              ivideo.vbflags |= TV_PAL;
-+                      else
-+                              ivideo.vbflags |= TV_NTSC;
-+              
-+              } else {
--              inSISIDXREG(SISCR, 0x79, temp);
--              if(temp & 0x20)
--                      ivideo.TV_type = TVMODE_PAL;
--              else
--                      ivideo.TV_type = TVMODE_NTSC;
--          }
-+                      inSISIDXREG(SISCR, 0x79, temp);
-+                      if(temp & 0x20)
-+                              ivideo.vbflags |= TV_PAL;
-+                      else
-+                              ivideo.vbflags |= TV_NTSC;
-+              }
-       }
-       /* TW: Copy forceCRT1 option to CRT1off if option is given */
-       if (sisfb_forcecrt1 != -1) {
--              if (sisfb_forcecrt1) sisfb_crt1off = 0;
--              else                 sisfb_crt1off = 1;
-+              if(sisfb_forcecrt1) sisfb_crt1off = 0;
-+              else                sisfb_crt1off = 1;
-       }
--}
--
--static void sisfb_get_VB_type_315(void)
--{
--      u8 reg;
--      if (!sisfb_has_VB_315()) {
--              inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR37, reg);
--              switch ((reg & SIS_EXTERNAL_CHIP_MASK) >> 1) {
--                 case SIS310_EXTERNAL_CHIP_LVDS:
--                      ivideo.hasVB = HASVB_LVDS;
--                      break;
--                 case SIS310_EXTERNAL_CHIP_LVDS_CHRONTEL:
--                      ivideo.hasVB = HASVB_LVDS_CHRONTEL;
--                      break;
--                 default:
--                      break;
--              }
--      }
- }
--
--static int sisfb_has_VB_315(void)
-+static void sisfb_get_VB_type(void)
- {
-       u8 vb_chipid;
-+      u8 reg;
-+      char stdstr[]    = "sisfb: Detected";
-+      char bridgestr[] = "video bridge";
-+      char lvdsstr[]   = "LVDS transmitter";
-+      char chrstr[]    = "Chrontel TV encoder";
-+      
-+      ivideo.hasVB = HASVB_NONE;
-+      sishw_ext.ujVBChipID = VB_CHIP_UNKNOWN;
-+      sishw_ext.Is301BDH = FALSE;
-+      sishw_ext.usExternalChip = 0;
-       inSISIDXREG(SISPART4, 0x00, vb_chipid);
-       switch (vb_chipid) {
-          case 0x01:
-               ivideo.hasVB = HASVB_301;
-+              inSISIDXREG(SISPART4, 0x01, reg);
-+              if(reg < 0xb0) { 
-+                      ivideo.vbflags |= VB_301;
-+                      sishw_ext.ujVBChipID = VB_CHIP_301;
-+                      printk(KERN_INFO "%s SiS301 %s\n", stdstr, bridgestr);
-+              } else if(reg < 0xd0) {
-+                      ivideo.vbflags |= VB_301B;
-+                      sishw_ext.ujVBChipID = VB_CHIP_301B;
-+                      printk(KERN_INFO "%s SiS301B %s\n", stdstr, bridgestr);
-+              } else if(reg < 0xe0) {
-+                      ivideo.vbflags |= VB_301LV;
-+                      sishw_ext.ujVBChipID = VB_CHIP_301LV;
-+                      printk(KERN_INFO "%s SiS301LV %s\n", stdstr, bridgestr);
-+              } else if(reg <= 0xe1) {
-+                      ivideo.vbflags |= VB_302LV;
-+                      sishw_ext.ujVBChipID = VB_CHIP_302LV;
-+                      printk(KERN_INFO "%s SiS302LV %s\n", stdstr, bridgestr);
-+              }
-               break;
-          case 0x02:
-               ivideo.hasVB = HASVB_302;
-+              inSISIDXREG(SISPART4, 0x01, reg);
-+              if(reg < 0xd0) {
-+                      ivideo.vbflags |= VB_302B;
-+                      sishw_ext.ujVBChipID = VB_CHIP_302B;
-+                      printk(KERN_INFO "%s SiS302B %s\n", stdstr, bridgestr);
-+              } else if(reg < 0xe0) {
-+                      ivideo.vbflags |= VB_301LV;
-+                      sishw_ext.ujVBChipID = VB_CHIP_301LV;
-+                      printk(KERN_INFO "%s SiS301LV %s\n", stdstr, bridgestr);
-+              } else if(reg <= 0xe1) {
-+                      ivideo.vbflags |= VB_302LV;
-+                      sishw_ext.ujVBChipID = VB_CHIP_302LV;
-+                      printk(KERN_INFO "%s SiS302LV %s\n", stdstr, bridgestr);
-+              }
-               break;
--         default:
--              ivideo.hasVB = HASVB_NONE;
--              return FALSE;
-       }
--      return TRUE;
-+      
-+      if(ivideo.vbflags & (VB_301B | VB_302B)) {
-+              inSISIDXREG(SISPART4,0x23,reg);
-+              if(!(reg & 0x02)) {
-+                      sishw_ext.Is301BDH = TRUE;
-+                      ivideo.vbflags |= VB_30xBDH;
-+                      printk(KERN_INFO "This %s does not support LCD output\n", bridgestr);
-+              }
-+      }
-+      
-+      if((!(ivideo.vbflags & VB_VIDEOBRIDGE)) && (ivideo.chip != SIS_300)) {
-+              inSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR37, reg);
-+              reg &= SIS_EXTERNAL_CHIP_MASK;
-+              reg >>= 1;
-+              if(sisvga_engine == SIS_300_VGA) {
-+                      switch (reg) {
-+                         case SIS_EXTERNAL_CHIP_LVDS:
-+                              ivideo.hasVB = HASVB_LVDS;
-+                              ivideo.vbflags |= VB_LVDS;
-+                              sishw_ext.usExternalChip = 0x01;
-+                              printk(KERN_INFO "%s %s\n", stdstr, lvdsstr);
-+                              break;
-+                         case SIS_EXTERNAL_CHIP_TRUMPION:
-+                              ivideo.hasVB = HASVB_TRUMPION;
-+                              ivideo.vbflags |= VB_TRUMPION;
-+                              sishw_ext.usExternalChip = 0x02;
-+                              printk(KERN_INFO "%s Trumpion LCD scaler\n", stdstr);
-+                              break;     
-+                         case SIS_EXTERNAL_CHIP_CHRONTEL:
-+                              ivideo.hasVB = HASVB_CHRONTEL;
-+                              ivideo.vbflags |= VB_CHRONTEL;
-+                              sishw_ext.usExternalChip = 0x04;
-+                              printk(KERN_INFO "%s %s\n", stdstr, chrstr);
-+                              break;
-+                         case SIS_EXTERNAL_CHIP_LVDS_CHRONTEL:
-+                              ivideo.hasVB = HASVB_LVDS_CHRONTEL;
-+                              ivideo.vbflags |= (VB_LVDS | VB_CHRONTEL);
-+                              sishw_ext.usExternalChip = 0x05;
-+                              printk(KERN_INFO "%s %s and %s\n", stdstr, lvdsstr, chrstr);
-+                              break;
-+                      }
-+              } else {
-+                      switch (reg) {
-+                         case SIS310_EXTERNAL_CHIP_LVDS:
-+                              ivideo.hasVB = HASVB_LVDS;
-+                              ivideo.vbflags |= VB_LVDS;
-+                              sishw_ext.usExternalChip = 0x01;
-+                              printk(KERN_INFO "%s %s\n", stdstr, lvdsstr);
-+                              break;
-+                         case SIS310_EXTERNAL_CHIP_LVDS_CHRONTEL:
-+                              ivideo.hasVB = HASVB_LVDS_CHRONTEL;
-+                              ivideo.vbflags |= (VB_LVDS | VB_CHRONTEL);
-+                              sishw_ext.usExternalChip = 0x05;
-+                              printk(KERN_INFO "%s %s and %s\n", stdstr, lvdsstr, chrstr);
-+                              break;
-+                      }
-+              }
-+      
-+      }
-+      
-+      if(ivideo.vbflags & VB_SISBRIDGE) {
-+              SiS_Sense30x();
-+      } else if(ivideo.vbflags & VB_CHRONTEL) {
-+              SiS_SenseCh();
-+      }
-+      
- }
--#endif   /* CONFIG_FB_SIS_315 */
--
- /* ------------------ Sensing routines ------------------ */
- /* TW: Determine and detect attached devices on SiS30x */
-@@ -2621,34 +2879,39 @@ SISDoSense(int tempbl, int tempbh, int t
-     inSISIDXREG(SISPART4,0x03,temp);
-     temp ^= 0x0e;
-     temp &= tempch;
--    return(temp);
-+    return((temp == tempch));
- }
- void
- SiS_Sense30x(void)
- {
--  u8 backupP4_0d;
-+  u8 backupP4_0d,backupP2_00;
-   u8 testsvhs_tempbl, testsvhs_tempbh;
-   u8 testsvhs_tempcl, testsvhs_tempch;
-   u8 testcvbs_tempbl, testcvbs_tempbh;
-   u8 testcvbs_tempcl, testcvbs_tempch;
-   u8 testvga2_tempbl, testvga2_tempbh;
-   u8 testvga2_tempcl, testvga2_tempch;
--  int myflag, result;
-+  int myflag, result, haveresult, i, j;
-+  char stdstr[] = "sisfb: Detected";
-+  char tvstr[]  = "TV connected to";
-   inSISIDXREG(SISPART4,0x0d,backupP4_0d);
-   outSISIDXREG(SISPART4,0x0d,(backupP4_0d | 0x04));
-+  inSISIDXREG(SISPART2,0x00,backupP2_00);
-+  outSISIDXREG(SISPART2,0x00,(backupP2_00 | 0x1c));
-+
-   if(sisvga_engine == SIS_300_VGA) {
--      testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
--        testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
--      testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
--      if((sishw_ext.ujVBChipID != VB_CHIP_301) &&
--         (sishw_ext.ujVBChipID != VB_CHIP_302) ) {
--         testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
--         testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
--         testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
-+      if(ivideo.vbflags & (VB_301B|VB_302B|VB_301LV|VB_302LV)) {
-+              testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
-+              testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
-+              testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
-+      } else {
-+              testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
-+              testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
-+              testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
-       }
-       inSISIDXREG(SISPART4,0x01,myflag);
-       if(myflag & 0x04) {
-@@ -2657,35 +2920,36 @@ SiS_Sense30x(void)
-          testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xee;
-       }
-       testvga2_tempch = 0x0e; testvga2_tempcl = 0x08;
--      testsvhs_tempch = 0x06; testsvhs_tempcl = 0x04;
-+      testsvhs_tempch = 0x04; testsvhs_tempcl = 0x04;
-       testcvbs_tempch = 0x08; testcvbs_tempcl = 0x04;
-+      if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
-+              testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-+              testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
-+       }
-       if(ivideo.chip == SIS_300) {
-          inSISIDXREG(SISSR,0x3b,myflag);
-          if(!(myflag & 0x01)) {
--            testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
--            testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
-+              testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-+              testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
-          }
-       }
-   } else {
--      testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
--        testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
--      testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
--      if((sishw_ext.ujVBChipID != VB_CHIP_301) &&
--         (sishw_ext.ujVBChipID != VB_CHIP_302)) {
--            testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
--            testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
--            testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
--            if(sishw_ext.ujVBChipID == VB_CHIP_301LV ||
--               sishw_ext.ujVBChipID == VB_CHIP_302LV) {
--               testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
--               testsvhs_tempbh = 0x02; testsvhs_tempbl = 0x00;
--               testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x00;
--            }
-+      if(ivideo.vbflags & (VB_301B|VB_302B)) {
-+              testvga2_tempbh = 0x01; testvga2_tempbl = 0x90;
-+              testsvhs_tempbh = 0x01; testsvhs_tempbl = 0x6b;
-+              testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x74;
-+      } else if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
-+              testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-+              testsvhs_tempbh = 0x02; testsvhs_tempbl = 0x00;
-+              testcvbs_tempbh = 0x01; testcvbs_tempbl = 0x00;
-+      } else {
-+              testvga2_tempbh = 0x00; testvga2_tempbl = 0xd1;
-+              testsvhs_tempbh = 0x00; testsvhs_tempbl = 0xb9;
-+              testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xb3;
-       }
--      if(sishw_ext.ujVBChipID != VB_CHIP_301LV &&
--         sishw_ext.ujVBChipID != VB_CHIP_302LV) {
-+      if(ivideo.vbflags & (VB_301|VB_301B|VB_302B)) {
-          inSISIDXREG(SISPART4,0x01,myflag);
-          if(myflag & 0x04) {
-             testvga2_tempbh = 0x00; testvga2_tempbl = 0xfd;
-@@ -2693,49 +2957,78 @@ SiS_Sense30x(void)
-             testcvbs_tempbh = 0x00; testcvbs_tempbl = 0xee;
-          }
-       }
--      if((sishw_ext.ujVBChipID == VB_CHIP_301LV) ||
--         (sishw_ext.ujVBChipID == VB_CHIP_302LV) ) {
-+      if(ivideo.vbflags & (VB_301LV|VB_302LV)) {
-          testvga2_tempbh = 0x00; testvga2_tempbl = 0x00;
-          testvga2_tempch = 0x00; testvga2_tempcl = 0x00;
-          testsvhs_tempch = 0x04; testsvhs_tempcl = 0x08;
-          testcvbs_tempch = 0x08; testcvbs_tempcl = 0x08;
-       } else {
-          testvga2_tempch = 0x0e; testvga2_tempcl = 0x08;
--         testsvhs_tempch = 0x06; testsvhs_tempcl = 0x04;
-+         testsvhs_tempch = 0x04; testsvhs_tempcl = 0x04;
-          testcvbs_tempch = 0x08; testcvbs_tempcl = 0x04;
-       }
-     } 
-     if(testvga2_tempch || testvga2_tempcl || testvga2_tempbh || testvga2_tempbl) {
--        result = SISDoSense(testvga2_tempbl, testvga2_tempbh,
--                            testvga2_tempcl, testvga2_tempch);
--      if(result) {
--              printk(KERN_INFO "sisfb: Detected secondary VGA connection\n");
--              orSISIDXREG(SISCR, 0x32, 0x10);
--      }
-+       haveresult = 0;
-+       for(j = 0; j < 10; j++) {
-+          result = 0;
-+          for(i = 0; i < 3; i++) {
-+             if(SISDoSense(testvga2_tempbl, testvga2_tempbh,
-+                           testvga2_tempcl, testvga2_tempch))
-+              result++;
-+          }
-+        if((result == 0) || (result >= 2)) break;
-+       }
-+       if(result) {
-+          printk(KERN_INFO "%s secondary VGA connection\n", stdstr);
-+        orSISIDXREG(SISCR, 0x32, 0x10);
-+       } else {
-+        andSISIDXREG(SISCR, 0x32, ~0x10);
-+       }
-+    }
-+
-+    haveresult = 0;
-+    for(j = 0; j < 10; j++) {
-+       result = 0;
-+       for(i = 0; i < 3; i++) {
-+          if(SISDoSense(testsvhs_tempbl, testsvhs_tempbh,
-+                        testsvhs_tempcl, testsvhs_tempch))
-+              result++;
-+       }
-+       if((result == 0) || (result >= 2)) break;
-     }
--    
--    result = SISDoSense(testsvhs_tempbl, testsvhs_tempbh,
--                        testsvhs_tempcl, testsvhs_tempch);
-     if(result) {
--        printk(KERN_INFO "sisfb: Detected TV connected to SVHS output\n");
--        /* TW: So we can be sure that there IS a SVHS output */
--      ivideo.TV_plug = TVPLUG_SVIDEO;
-+        printk(KERN_INFO "%s %s SVIDEO output\n", stdstr, tvstr);
-+      ivideo.vbflags |= TV_SVIDEO;
-       orSISIDXREG(SISCR, 0x32, 0x02);
-+      andSISIDXREG(SISCR, 0x32, ~0x05);
-     }
-     if(!result) {
--        result = SISDoSense(testcvbs_tempbl, testcvbs_tempbh,
--                          testcvbs_tempcl, testcvbs_tempch);
-+
-+      haveresult = 0;
-+              for(j = 0; j < 10; j++) {
-+           result = 0;
-+           for(i = 0; i < 3; i++) {
-+              if(SISDoSense(testcvbs_tempbl, testcvbs_tempbh,
-+                          testcvbs_tempcl, testcvbs_tempch))
-+              result++;
-+           }
-+           if((result == 0) || (result >= 2)) break;
-+        }
-       if(result) {
--          printk(KERN_INFO "sisfb: Detected TV connected to CVBS output\n");
--          /* TW: So we can be sure that there IS a CVBS output */
--          ivideo.TV_plug = TVPLUG_COMPOSITE;
-+          printk(KERN_INFO "%s %s COMPOSITE output\n", stdstr, tvstr);
-+          ivideo.vbflags |= TV_AVIDEO;
-           orSISIDXREG(SISCR, 0x32, 0x01);
-+          andSISIDXREG(SISCR, 0x32, ~0x06);
-+      } else {
-+          andSISIDXREG(SISCR, 0x32, ~0x07);
-       }
-     }
-     SISDoSense(0, 0, 0, 0);
-+    outSISIDXREG(SISPART2,0x00,backupP2_00);
-     outSISIDXREG(SISPART4,0x0d,backupP4_0d);
- }
-@@ -2744,51 +3037,84 @@ void
- SiS_SenseCh(void)
- {
--   u8 temp1;
--#ifdef CONFIG_FB_SIS_315
--   u8 temp2;
-+   u8 temp1, temp2;
-+#ifdef CONFIG_FB_SIS_300
-+   unsigned char test[3];
-+   int i;
- #endif
-+   char stdstr[] = "sisfb: Chrontel: Detected TV connected to";
-    if(ivideo.chip < SIS_315H) {
- #ifdef CONFIG_FB_SIS_300
--       SiS_Pr.SiS_IF_DEF_CH70xx = 1;          /* TW: Chrontel 7005 */
-+       SiS_Pr.SiS_IF_DEF_CH70xx = 1;          /* Chrontel 700x */
-+       SiS_SetChrontelGPIO(&SiS_Pr, 0x9c);    /* Set general purpose IO for Chrontel communication */
-+       SiS_DDC2Delay(&SiS_Pr, 1000);
-        temp1 = SiS_GetCH700x(&SiS_Pr, 0x25);
--       if ((temp1 >= 50) && (temp1 <= 100)) {
--         /* TW: Read power status */
-+       /* TW: See Chrontel TB31 for explanation */
-+       temp2 = SiS_GetCH700x(&SiS_Pr, 0x0e);
-+       if(((temp2 & 0x07) == 0x01) || (temp2 & 0x04)) {
-+        SiS_SetCH700x(&SiS_Pr, 0x0b0e);
-+        SiS_DDC2Delay(&SiS_Pr, 300);
-+       }
-+       temp2 = SiS_GetCH700x(&SiS_Pr, 0x25);
-+       if(temp2 != temp1) temp1 = temp2;
-+
-+       if((temp1 >= 0x22) && (temp1 <= 0x50)) {
-+         /* Read power status */
-          temp1 = SiS_GetCH700x(&SiS_Pr, 0x0e);
-          if((temp1 & 0x03) != 0x03) {
--              /* TW: Power all outputs */
--              SiS_SetCH70xxANDOR(&SiS_Pr, 0x030E,0xF8);
-+              /* Power all outputs */
-+              SiS_SetCH700x(&SiS_Pr, 0x0B0E);
-+              SiS_DDC2Delay(&SiS_Pr, 300);
-          }
--         /* TW: Sense connected TV devices */
--         SiS_SetCH700x(&SiS_Pr, 0x0110);
--         SiS_SetCH700x(&SiS_Pr, 0x0010);
--         temp1 = SiS_GetCH700x(&SiS_Pr, 0x10);
--         if(!(temp1 & 0x08)) {
--              printk(KERN_INFO
--                 "sisfb: Chrontel: Detected TV connected to SVHS output\n");
--              /* TW: So we can be sure that there IS a SVHS output */
--              ivideo.TV_plug = TVPLUG_SVIDEO;
-+         /* Sense connected TV devices */
-+         for(i = 0; i < 3; i++) {
-+             SiS_SetCH700x(&SiS_Pr, 0x0110);
-+             SiS_DDC2Delay(&SiS_Pr, 0x96);
-+             SiS_SetCH700x(&SiS_Pr, 0x0010);
-+             SiS_DDC2Delay(&SiS_Pr, 0x96);
-+             temp1 = SiS_GetCH700x(&SiS_Pr, 0x10);
-+             if(!(temp1 & 0x08))       test[i] = 0x02;
-+             else if(!(temp1 & 0x02))  test[i] = 0x01;
-+             else                      test[i] = 0;
-+             SiS_DDC2Delay(&SiS_Pr, 0x96);
-+         }
-+
-+         if(test[0] == test[1])      temp1 = test[0];
-+         else if(test[0] == test[2]) temp1 = test[0];
-+         else if(test[1] == test[2]) temp1 = test[1];
-+         else {
-+              printk(KERN_INFO
-+                      "sisfb: TV detection unreliable - test results varied\n");
-+              temp1 = test[2];
-+         }
-+         if(temp1 == 0x02) {
-+              printk(KERN_INFO "%s SVIDEO output\n", stdstr);
-+              ivideo.vbflags |= TV_SVIDEO;
-               orSISIDXREG(SISCR, 0x32, 0x02);
--         } else if (!(temp1 & 0x02)) {
--              printk(KERN_INFO
--                 "sisfb: Chrontel: Detected TV connected to CVBS output\n");
--              /* TW: So we can be sure that there IS a CVBS output */
--              ivideo.TV_plug = TVPLUG_COMPOSITE;
-+              andSISIDXREG(SISCR, 0x32, ~0x05);
-+         } else if (temp1 == 0x01) {
-+              printk(KERN_INFO "%s CVBS output\n", stdstr);
-+              ivideo.vbflags |= TV_AVIDEO;
-               orSISIDXREG(SISCR, 0x32, 0x01);
-+              andSISIDXREG(SISCR, 0x32, ~0x06);
-          } else {
-               SiS_SetCH70xxANDOR(&SiS_Pr, 0x010E,0xF8);
-+              andSISIDXREG(SISCR, 0x32, ~0x07);
-          }
-        } else if(temp1 == 0) {
-         SiS_SetCH70xxANDOR(&SiS_Pr, 0x010E,0xF8);
-+        andSISIDXREG(SISCR, 0x32, ~0x07);
-        }
-+       /* Set general purpose IO for Chrontel communication */
-+       SiS_SetChrontelGPIO(&SiS_Pr, 0x00);
- #endif
-    } else {
- #ifdef CONFIG_FB_SIS_315
--      SiS_Pr.SiS_IF_DEF_CH70xx = 2;           /* TW: Chrontel 7019 */
-+      SiS_Pr.SiS_IF_DEF_CH70xx = 2;           /* Chrontel 7019 */
-         temp1 = SiS_GetCH701x(&SiS_Pr, 0x49);
-       SiS_SetCH701x(&SiS_Pr, 0x2049);
-       SiS_DDC2Delay(&SiS_Pr, 0x96);
-@@ -2808,22 +3134,24 @@ SiS_SenseCh(void)
-       if( (temp1 & 0x01) && (temp1 & 0x02) ) temp1 = 0x04;
-       switch(temp1) {
-       case 0x01:
--           printk(KERN_INFO
--              "sisfb: Chrontel: Detected TV connected to CVBS output\n");
--           ivideo.TV_plug = TVPLUG_COMPOSITE;
-+           printk(KERN_INFO "%s CVBS output\n", stdstr);
-+           ivideo.vbflags |= TV_AVIDEO;
-            orSISIDXREG(SISCR, 0x32, 0x01);
-+           andSISIDXREG(SISCR, 0x32, ~0x06);
-              break;
-       case 0x02:
--           printk(KERN_INFO
--              "sisfb: Chrontel: Detected TV connected to SVHS output\n");
--           ivideo.TV_plug = TVPLUG_SVIDEO;
-+           printk(KERN_INFO "%s SVIDEO output\n", stdstr);
-+           ivideo.vbflags |= TV_SVIDEO;
-            orSISIDXREG(SISCR, 0x32, 0x02);
-+           andSISIDXREG(SISCR, 0x32, ~0x05);
-              break;
-       case 0x04:
--           /* TW: This should not happen */
--           printk(KERN_INFO
--              "sisfb: Chrontel: Detected TV connected to SCART output\n");
-+           printk(KERN_INFO "%s SCART output\n", stdstr);
-+           orSISIDXREG(SISCR, 0x32, 0x04);
-+           andSISIDXREG(SISCR, 0x32, ~0x03);          
-              break;
-+      default:
-+           andSISIDXREG(SISCR, 0x32, ~0x07);
-       }
- #endif
-@@ -2860,14 +3188,20 @@ static int sisfb_heap_init(void)
-  *     in XF86Config-4.
-  *     The heap start can also be specified by parameter "mem" when starting the sisfb
-  *     driver. sisfb mem=1024 lets heap starts at 1MB, etc.
-+ *     On the 315 series, the default is a 1MB heap since DRI is not supported
-+ *     there.
-  */
-      if ((!sisfb_mem) || (sisfb_mem > (ivideo.video_size/1024))) {
--        if (ivideo.video_size > 0x1000000) {
-+        if(sisvga_engine == SIS_300_VGA) {
-+           if (ivideo.video_size > 0x1000000) {
-               ivideo.heapstart = 0xc00000;
--      } else if (ivideo.video_size > 0x800000) {
-+         } else if (ivideo.video_size > 0x800000) {
-               ivideo.heapstart = 0x800000;
--      } else {
-+         } else {
-               ivideo.heapstart = 0x400000;
-+         }
-+      } else {
-+         ivideo.heapstart = ivideo.video_size - 0x100000;
-       }
-      } else {
-            ivideo.heapstart = sisfb_mem * 1024;
-@@ -2883,7 +3217,7 @@ static int sisfb_heap_init(void)
- #ifdef CONFIG_FB_SIS_315
-      if (sisvga_engine == SIS_315_VGA) {
-         /* TW: Now initialize the 310 series' command queue mode.
--       * On 310/325, there are three queue modes available which
-+       * On 315, there are three queue modes available which
-        * are chosen by setting bits 7:5 in SR26:
-        * 1. MMIO queue mode (bit 5, 0x20). The hardware will keep
-        *    track of the queue, the FIFO, command parsing and so
-@@ -3333,7 +3667,6 @@ void sis_malloc(struct sis_memreq *req)
-               req->offset = poh->offset;
-               req->size = poh->size;
-       }
--
- }
- void sis_free(unsigned long base)
-@@ -3352,35 +3685,70 @@ void sis_free(unsigned long base)
- static void sisfb_pre_setmode(void)
- {
--      u8 cr30 = 0, cr31 = 0;
-+      u8 cr30 = 0, cr31 = 0, cr33 = 0;
-+      
-+      ivideo.currentvbflags &= (VB_VIDEOBRIDGE | VB_DISPTYPE_DISP2);
-       inSISIDXREG(SISCR, 0x31, cr31);
-       cr31 &= ~0x60;
-+      cr31 |= 0x04;
-+      
-+      cr33 = sisfb_rate_idx & 0x0F;
--      switch (ivideo.disp_state & DISPTYPE_DISP2) {
--         case DISPTYPE_CRT2:
--              cr30 = (SIS_VB_OUTPUT_CRT2 | SIS_SIMULTANEOUS_VIEW_ENABLE);
--              cr31 |= SIS_DRIVER_MODE;
--              break;
--         case DISPTYPE_LCD:
--              cr30  = (SIS_VB_OUTPUT_LCD | SIS_SIMULTANEOUS_VIEW_ENABLE);
--              cr31 |= SIS_DRIVER_MODE;
--              break;
--         case DISPTYPE_TV:
--              if (ivideo.TV_type == TVMODE_HIVISION)
-+      SiS_SetEnableDstn(&SiS_Pr, FALSE);
-+      SiS_SetEnableFstn(&SiS_Pr, FALSE);
-+
-+      switch (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-+         case CRT2_TV:
-+              ivideo.disp_state = DISPTYPE_TV;
-+              if (ivideo.vbflags & TV_HIVISION) {
-                       cr30 = (SIS_VB_OUTPUT_HIVISION | SIS_SIMULTANEOUS_VIEW_ENABLE);
--              else if (ivideo.TV_plug == TVPLUG_SVIDEO)
-+                      ivideo.currentvbflags |= (TV_HIVISION | TV_SVIDEO);
-+                      ivideo.TV_type = TVMODE_HIVISION;
-+                      ivideo.TV_plug = TVPLUG_SVIDEO;
-+              } else if (ivideo.vbflags & TV_SVIDEO) {
-                       cr30 = (SIS_VB_OUTPUT_SVIDEO | SIS_SIMULTANEOUS_VIEW_ENABLE);
--              else if (ivideo.TV_plug == TVPLUG_COMPOSITE)
-+                      ivideo.currentvbflags |= TV_SVIDEO;
-+                      ivideo.TV_plug = TVPLUG_SVIDEO;
-+              } else if (ivideo.vbflags & TV_AVIDEO) {
-                       cr30 = (SIS_VB_OUTPUT_COMPOSITE | SIS_SIMULTANEOUS_VIEW_ENABLE);
--              else if (ivideo.TV_plug == TVPLUG_SCART)
-+                      ivideo.currentvbflags |= TV_AVIDEO;
-+                      ivideo.TV_plug = TVPLUG_COMPOSITE;
-+              } else if (ivideo.vbflags & TV_SCART) {
-                       cr30 = (SIS_VB_OUTPUT_SCART | SIS_SIMULTANEOUS_VIEW_ENABLE);
-+                      ivideo.currentvbflags |= TV_SCART;
-+                      ivideo.TV_plug = TVPLUG_SCART;
-+              }
-               cr31 |= SIS_DRIVER_MODE;
--              if (sisfb_tvmode == 1 || ivideo.TV_type == TVMODE_PAL)
--                      cr31 |= 0x01;
--                else
--                        cr31 &= ~0x01;
-+              if(!(ivideo.vbflags & TV_HIVISION)) {
-+                      if (ivideo.vbflags & TV_PAL) {
-+                              cr31 |= 0x01;
-+                              ivideo.currentvbflags |= TV_PAL;
-+                              ivideo.TV_type = TVMODE_PAL;
-+                      } else {
-+                              cr31 &= ~0x01;
-+                              ivideo.currentvbflags |= TV_NTSC;
-+                              ivideo.TV_type = TVMODE_NTSC;
-+                      }
-+              }
-+              break;
-+         case CRT2_LCD:
-+              ivideo.disp_state = DISPTYPE_LCD;
-+              cr30  = (SIS_VB_OUTPUT_LCD | SIS_SIMULTANEOUS_VIEW_ENABLE);
-+              cr31 |= SIS_DRIVER_MODE;
-+              SiS_SetEnableDstn(&SiS_Pr, sisfb_dstn);
-+              SiS_SetEnableFstn(&SiS_Pr, sisfb_fstn);
-+              break;          
-+         case CRT2_VGA:
-+              ivideo.disp_state = DISPTYPE_CRT2;
-+              cr30 = (SIS_VB_OUTPUT_CRT2 | SIS_SIMULTANEOUS_VIEW_ENABLE);
-+              cr31 |= SIS_DRIVER_MODE;
-+              if(sisfb_nocrt2rate) {
-+                      cr33 |= (sisbios_mode[sisfb_mode_idx].rate_idx << 4);
-+              } else {
-+                      cr33 |= ((sisfb_rate_idx & 0x0F) << 4);
-+              }
-               break;
-          default:     /* disable CRT2 */
-               cr30 = 0x00;
-@@ -3389,8 +3757,7 @@ static void sisfb_pre_setmode(void)
-       outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR30, cr30);
-       outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR31, cr31);
--
--        outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR33, (sisfb_rate_idx & 0x0F));
-+      outSISIDXREG(SISCR, IND_SIS_SCRATCH_REG_CR33, cr33);
-       if(ivideo.accel) sisfb_syncaccel();
-@@ -3400,67 +3767,89 @@ static void sisfb_pre_setmode(void)
- static void sisfb_post_setmode(void)
- {
-       u8 reg;
-+      BOOLEAN crt1isoff = FALSE;
-+#ifdef CONFIG_FB_SIS_315
-+      u8 reg1;
-+#endif
-+#ifdef CONFIG_FB_SIS_300
-       BOOLEAN doit = TRUE;
--#if 0 /* TW: Wrong: Is not in MMIO space, but in RAM */
--      /* Backup mode number to MMIO space */
--      if(ivideo.mmio_vbase) {
--        *(volatile u8 *)(((u8*)ivideo.mmio_vbase) + 0x449) = (unsigned char)sisfb_mode_no;
--      }
--#endif        
--
--      if (ivideo.video_bpp == 8) {
--              /* TW: We can't switch off CRT1 on LVDS/Chrontel in 8bpp Modes */
--              if ((ivideo.hasVB == HASVB_LVDS) || (ivideo.hasVB == HASVB_LVDS_CHRONTEL)) {
--                      doit = FALSE;
--              }
--              /* TW: We can't switch off CRT1 on 301B-DH in 8bpp Modes if using LCD */
--              if ( (sishw_ext.Is301BDH) && (ivideo.disp_state & DISPTYPE_LCD) ) {
--                      doit = FALSE;
--              }
--      }
--
-+#endif
-       /* TW: We can't switch off CRT1 if bridge is in slave mode */
--      if(ivideo.hasVB != HASVB_NONE) {
--              inSISIDXREG(SISPART1, 0x00, reg);
-+      if(ivideo.vbflags & VB_VIDEOBRIDGE) {
-+#ifdef CONFIG_FB_SIS_300
-               if(sisvga_engine == SIS_300_VGA) {
-+                      inSISIDXREG(SISPART1, 0x00, reg);
-                       if((reg & 0xa0) == 0x20) {
-                               doit = FALSE;
-                       }
-               }
--              if(sisvga_engine == SIS_315_VGA) {
--                      if((reg & 0x50) == 0x10) {
--                              doit = FALSE;
--                      }
--              }
-+#endif
-       } else sisfb_crt1off = 0;
--      inSISIDXREG(SISCR, 0x17, reg);
--      if((sisfb_crt1off) && (doit))
--              reg &= ~0x80;
--      else          
--              reg |= 0x80;
--      outSISIDXREG(SISCR, 0x17, reg);
-+      if(sisvga_engine == SIS_300_VGA) {
--        andSISIDXREG(SISSR, IND_SIS_RAMDAC_CONTROL, ~0x04);
-+#ifdef CONFIG_FB_SIS_300
-+         if((sisfb_crt1off) && (doit)) {
-+              crt1isoff = TRUE;
-+              reg = 0x00;
-+         } else {
-+              crt1isoff = FALSE;
-+              reg = 0x80;
-+         }
-+         setSISIDXREG(SISCR, 0x17, 0x7f, reg);
-+#endif
--      if((ivideo.disp_state & DISPTYPE_TV) && (ivideo.hasVB == HASVB_301)) {
-+      } else {
-+
-+#ifdef CONFIG_FB_SIS_315
-+         if(sisfb_crt1off) {
-+              crt1isoff = TRUE;
-+              reg  = 0x40;
-+              reg1 = 0xc0;
-+         } else {
-+              crt1isoff = FALSE;
-+              reg  = 0x00;
-+              reg1 = 0x00;
-+
-+         }
-+         setSISIDXREG(SISCR, 0x63, ~0x40, reg);
-+         setSISIDXREG(SISSR, 0x1f, ~0xc0, reg1);
-+#endif
-+
-+      }
-+
-+      if(crt1isoff) {
-+         ivideo.currentvbflags &= ~VB_DISPTYPE_CRT1;
-+         ivideo.currentvbflags |= VB_SINGLE_MODE;
-+         ivideo.disp_state |= DISPMODE_SINGLE;
-+      } else {
-+         ivideo.currentvbflags |= VB_DISPTYPE_CRT1;
-+         ivideo.disp_state |= DISPTYPE_CRT1;
-+         if(ivideo.currentvbflags & VB_DISPTYPE_CRT2) {
-+              ivideo.currentvbflags |= VB_MIRROR_MODE;
-+              ivideo.disp_state |= DISPMODE_MIRROR;
-+         } else {
-+              ivideo.currentvbflags |= VB_SINGLE_MODE;
-+              ivideo.disp_state |= DISPMODE_SINGLE;
-+         }
-+      }
--         inSISIDXREG(SISPART4, 0x01, reg);
-+        andSISIDXREG(SISSR, IND_SIS_RAMDAC_CONTROL, ~0x04);
--         if(reg < 0xB0) {             /* Set filter for SiS301 */
-+      if((ivideo.currentvbflags & CRT2_TV) && (ivideo.vbflags & VB_301)) {  /* Set filter for SiS301 */
-               switch (ivideo.video_width) {
-                  case 320:
--                      filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 4 : 12;
-+                      filter_tb = (ivideo.vbflags & TV_NTSC) ? 4 : 12;
-                       break;
-                  case 640:
--                      filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 5 : 13;
-+                      filter_tb = (ivideo.vbflags & TV_NTSC) ? 5 : 13;
-                       break;
-                  case 720:
--                      filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 6 : 14;
-+                      filter_tb = (ivideo.vbflags & TV_NTSC) ? 6 : 14;
-                       break;
-                  case 800:
--                      filter_tb = (ivideo.TV_type == TVMODE_NTSC) ? 7 : 15;
-+                      filter_tb = (ivideo.vbflags & TV_NTSC) ? 7 : 15;
-                       break;
-                  default:
-                       filter = -1;
-@@ -3469,15 +3858,15 @@ static void sisfb_post_setmode(void)
-               orSISIDXREG(SISPART1, sisfb_CRT2_write_enable, 0x01);
--              if(ivideo.TV_type == TVMODE_NTSC) {
-+              if(ivideo.vbflags & TV_NTSC) {
-                       andSISIDXREG(SISPART2, 0x3a, 0x1f);
--                      if (ivideo.TV_plug == TVPLUG_SVIDEO) {
-+                      if (ivideo.vbflags & TV_SVIDEO) {
-                               andSISIDXREG(SISPART2, 0x30, 0xdf);
--                      } else if (ivideo.TV_plug == TVPLUG_COMPOSITE) {
-+                      } else if (ivideo.vbflags & TV_AVIDEO) {
-                               orSISIDXREG(SISPART2, 0x30, 0x20);
-@@ -3503,15 +3892,15 @@ static void sisfb_post_setmode(void)
-                               }
-                       }
--              } else if(ivideo.TV_type == TVMODE_PAL) {
-+              } else if(ivideo.vbflags & TV_PAL) {
-                       andSISIDXREG(SISPART2, 0x3A, 0x1F);
--                      if (ivideo.TV_plug == TVPLUG_SVIDEO) {
-+                      if (ivideo.vbflags & TV_SVIDEO) {
-                               andSISIDXREG(SISPART2, 0x30, 0xDF);
--                      } else if (ivideo.TV_plug == TVPLUG_COMPOSITE) {
-+                      } else if (ivideo.vbflags & TV_AVIDEO) {
-                               orSISIDXREG(SISPART2, 0x30, 0x20);
-@@ -3539,7 +3928,7 @@ static void sisfb_post_setmode(void)
-               }
-               if ((filter >= 0) && (filter <=7)) {
--                      DPRINTK("FilterTable[%d]-%d: %02x %02x %02x %02x\n", filter_tb, filter, 
-+                      DPRINTK("FilterTable[%d]-%d: %02x %02x %02x %02x\n", filter_tb, filter,
-                               sis_TV_filter[filter_tb].filter[filter][0],
-                               sis_TV_filter[filter_tb].filter[filter][1],
-                               sis_TV_filter[filter_tb].filter[filter][2],
-@@ -3550,8 +3939,6 @@ static void sisfb_post_setmode(void)
-                       outSISIDXREG(SISPART2, 0x37, (sis_TV_filter[filter_tb].filter[filter][2]));
-                       outSISIDXREG(SISPART2, 0x38, (sis_TV_filter[filter_tb].filter[filter][3]));
-               }
--
--           }
-         
-       }
-@@ -3578,24 +3965,22 @@ int sisfb_setup(char *options)
-               if (!*this_opt) continue;
-               if (!strncmp(this_opt, "mode:", 5)) {
--                      sisfb_search_mode(this_opt + 5);
-+                      sisfb_search_mode(this_opt + 5, FALSE);
-               } else if (!strncmp(this_opt, "vesa:", 5)) {
--                      sisfb_search_vesamode(simple_strtoul(this_opt + 5, NULL, 0));
-+                      sisfb_search_vesamode(simple_strtoul(this_opt + 5, NULL, 0), FALSE);
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)                        
-               } else if (!strcmp(this_opt, "inverse")) {
-                       sisfb_inverse = 1;
-                       /* fb_invert_cmaps(); */
-               } else if (!strncmp(this_opt, "font:", 5)) {
-                       strcpy(sis_fb_info.fontname, this_opt + 5);
--#endif                        
--              } else if (!strncmp(this_opt, "mode:", 5)) {
--                      sisfb_search_mode(this_opt + 5);
--              } else if (!strncmp(this_opt, "vesa:", 5)) {
--                      sisfb_search_vesamode(simple_strtoul(this_opt + 5, NULL, 0));
-+#endif
-               } else if (!strncmp(this_opt, "vrate:", 6)) {
-                       ivideo.refresh_rate = simple_strtoul(this_opt + 6, NULL, 0);
-+                      sisfb_parm_rate = ivideo.refresh_rate;
-               } else if (!strncmp(this_opt, "rate:", 5)) {
-                       ivideo.refresh_rate = simple_strtoul(this_opt + 5, NULL, 0);
-+                      sisfb_parm_rate = ivideo.refresh_rate;
-               } else if (!strncmp(this_opt, "off", 3)) {
-                       sisfb_off = 1;
-               } else if (!strncmp(this_opt, "crt1off", 7)) {
-@@ -3612,10 +3997,6 @@ int sisfb_setup(char *options)
-                       sisfb_search_tvstd(this_opt + 7);
-                 } else if (!strncmp(this_opt, "mem:",4)) {
-                       sisfb_mem = simple_strtoul(this_opt + 4, NULL, 0);
--                } else if (!strncmp(this_opt, "dstn", 4)) {
--                      enable_dstn = 1;
--                      /* TW: DSTN overrules forcecrt2type */
--                      sisfb_crt2type = DISPTYPE_LCD;
-               } else if (!strncmp(this_opt, "queuemode:", 10)) {
-                       sisfb_search_queuemode(this_opt + 10);
-               } else if (!strncmp(this_opt, "pdc:", 4)) {
-@@ -3632,17 +4013,18 @@ int sisfb_setup(char *options)
-                       sisfb_userom = (int)simple_strtoul(this_opt + 7, NULL, 0);
-               } else if (!strncmp(this_opt, "useoem:", 7)) {
-                       sisfb_useoem = (int)simple_strtoul(this_opt + 7, NULL, 0);
-+              } else if (!strncmp(this_opt, "nocrt2rate", 10)) {
-+                      sisfb_nocrt2rate = 1;                   
-+              } else if(this_opt[0] >= '0' && this_opt[0] <= '9') {
-+                      sisfb_search_mode(this_opt, TRUE);
-               } else {
-                       printk(KERN_INFO "sisfb: Invalid option %s\n", this_opt);
-               }
-               /* TW: Acceleration only with MMIO mode */
-               if((sisfb_queuemode != -1) && (sisfb_queuemode != MMIO_CMD)) {
--                      sisfb_ypan = 0;
-                       sisfb_accel = 0;
-               }
--              /* TW: Panning only with acceleration */
--              if(sisfb_accel == 0) sisfb_ypan = 0;
-       }
-       return 0;
-@@ -3661,14 +4043,14 @@ static char *sis_find_rom(void)
-         char *sis_sig_300[4] = {
-           "300", "540", "630", "730"
-         };
--        char *sis_sig_310[7] = {
--          "315", "315", "315", "5315", "6325", "6325", "Xabre"
-+        char *sis_sig_310[8] = {
-+          "315", "315", "315", "5315", "6325", "6325", "Xabre", "6330"
-         };
-       ushort sis_nums_300[4] = {
-         SIS_300, SIS_540, SIS_630, SIS_730
-       };
--      unsigned short sis_nums_310[7] = {
--        SIS_315PRO, SIS_315H, SIS_315, SIS_550, SIS_650, SIS_740, SIS_330
-+      unsigned short sis_nums_310[8] = {
-+        SIS_315PRO, SIS_315H, SIS_315, SIS_550, SIS_650, SIS_740, SIS_330, SIS_660
-       };
-         for(segstart=0x000c0000; segstart<0x000f0000; segstart+=0x00001000) {
-@@ -3705,7 +4087,7 @@ static char *sis_find_rom(void)
-                     }
-                 }
-               if(stage != 4) {
--                   for(i = 0;(i < 7) && (stage != 4); i++) {
-+                   for(i = 0;(i < 8) && (stage != 4); i++) {
-                       if(strncmp(sis_sig_310[i], rom, strlen(sis_sig_310[i])) == 0) {
-                         if(sis_nums_310[i] == ivideo.chip) {
-                              stage = 4;
-@@ -3735,7 +4117,7 @@ int __init sisfb_init(void)
-       int pdev_valid = 0;
-       u32 reg32;
-       u16 reg16;
--      u8  reg, reg1;
-+      u8  reg;
-       /* outb(0x77, 0x80); */  /* What is this? */
-@@ -3751,12 +4133,14 @@ int __init sisfb_init(void)
-       if (sisfb_off)
-               return -ENXIO;
--      if (enable_dstn)
--              SiS_SetEnableDstn(&SiS_Pr);
--              
-       sisfb_registered = 0;
-+      sisfb_thismonitor.datavalid = FALSE;
-       memset(&sis_fb_info, 0, sizeof(sis_fb_info));
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+        memset(&sisfb_lastrates[0], 0, 128);
-+#endif
-       
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
-       memset(&sis_disp, 0, sizeof(sis_disp));
-@@ -3877,6 +4261,12 @@ int __init sisfb_init(void)
-               sisfb_hwcursor_size = HW_CURSOR_AREA_SIZE_315 * 2;
-               sisfb_CRT2_write_enable = IND_SIS_CRT2_WRITE_ENABLE_315;
-               break;
-+         case PCI_DEVICE_ID_SI_660_VGA:
-+              ivideo.chip = SIS_660;
-+              sisvga_engine = SIS_315_VGA;
-+              sisfb_hwcursor_size = HW_CURSOR_AREA_SIZE_315 * 2;
-+              sisfb_CRT2_write_enable = IND_SIS_CRT2_WRITE_ENABLE_315;
-+              break;
- #endif
-            default:
-               return -ENODEV;
-@@ -3902,30 +4292,34 @@ int __init sisfb_init(void)
-       SiS_Pr.SiS_Backup70xx = 0xff;
-         SiS_Pr.SiS_CHOverScan = -1;
-         SiS_Pr.SiS_ChSW = FALSE;
-+      SiS_Pr.SiS_CustomT = CUT_NONE;
-       SiS_Pr.SiS_UseLCDA = FALSE;
-       SiS_Pr.UsePanelScaler = -1;
-       SiSRegInit(&SiS_Pr, (USHORT)sishw_ext.ulIOAddress);
- #ifdef CONFIG_FB_SIS_300
--      /* TW: Find PCI systems for Chrontel/ISA bridge manipulation */
-+      /* TW: Find PCI systems for Chrontel/GPIO communication setup */
-       if(ivideo.chip == SIS_630) {
--        int i=0;
--          do {
--          if(mychswtable[i].subsysVendor == ivideo.subsysvendor &&
--             mychswtable[i].subsysCard   == ivideo.subsysdevice) {
--              SiS_Pr.SiS_ChSW = TRUE;
--            }
--            i++;
--          } while(mychswtable[i].subsysVendor != 0);
-+         int i=0;
-+           do {
-+            if(mychswtable[i].subsysVendor == ivideo.subsysvendor &&
-+               mychswtable[i].subsysCard   == ivideo.subsysdevice) {
-+               SiS_Pr.SiS_ChSW = TRUE;
-+               printk(KERN_DEBUG "sisfb: Identified [%s %s] requiring Chrontel/GPIO setup\n",
-+                      mychswtable[i].vendorName, mychswtable[i].cardName);
-+               break;
-+              }
-+              i++;
-+           } while(mychswtable[i].subsysVendor != 0);
-       }
- #endif
-         outSISIDXREG(SISSR, IND_SIS_PASSWORD, SIS_PASSWORD);
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)                
--#ifdef MODULE 
-+#ifdef MODULE
-       inSISIDXREG(SISCR,0x34,reg);
--      if(reg & 0x80) {
-+      if((reg & 0x80) && (reg != 0xff)) {
-          if((sisbios_mode[sisfb_mode_idx].mode_no) != 0xFF) {
-             printk(KERN_INFO "sisfb: Cannot initialize display mode, X server is active\n");
-             return -EBUSY;
-@@ -3938,7 +4332,7 @@ int __init sisfb_init(void)
- #ifdef CONFIG_FB_SIS_300
-       if (sisvga_engine == SIS_300_VGA) {
--              outSISIDXREG(SISSR, 0x28, 0x37);
-+              outSISIDXREG(SISSR, 0x28, 0x37);        /* Reset memory clock */
-                 outSISIDXREG(SISSR, 0x29, 0x61);
-@@ -3946,7 +4340,8 @@ int __init sisfb_init(void)
-       }
- #endif
- #ifdef CONFIG_FB_SIS_315
--      if (ivideo.chip == SIS_550 || ivideo.chip == SIS_650 || ivideo.chip == SIS_740) {
-+      if (ivideo.chip == SIS_550 || ivideo.chip == SIS_650 ||
-+          ivideo.chip == SIS_740 || ivideo.chip == SIS_660) {
-               outSISIDXREG(SISSR, 0x28, 0x5a);
-                 outSISIDXREG(SISSR, 0x29, 0x64);
-@@ -3967,6 +4362,7 @@ int __init sisfb_init(void)
-                  case SIS_550:
-                  case SIS_650:
-                  case SIS_740:
-+                 case SIS_660:
-                       sishw_ext.bIntegratedMMEnabled = TRUE;
-                       break;
-                  default:
-@@ -4006,13 +4402,45 @@ int __init sisfb_init(void)
-       sishw_ext.pQueryNorthBridgeSpace = &sisfb_query_north_bridge_space;
-       strcpy(sishw_ext.szVBIOSVer, "0.84");
--      /* TW: Mode numbers for 1280x960 are different for 300 and 310/325 series */
-+        /* Find systems for special custom timing */
-+      if(sishw_ext.UseROM) {
-+         int i=0,j;
-+         unsigned char *biosver = sishw_ext.pjVirtualRomBase + 0x06;
-+           unsigned char *biosdate = sishw_ext.pjVirtualRomBase + 0x2c;
-+         BOOLEAN footprint;
-+           do {
-+            if( (mycustomttable[i].chipID == ivideo.chip) &&
-+                (!strncmp(mycustomttable[i].biosversion, biosver, strlen(mycustomttable[i].biosversion))) &&
-+                (!strncmp(mycustomttable[i].biosdate, biosdate, strlen(mycustomttable[i].biosdate))) ) {
-+               footprint = TRUE;
-+               for(j=0; j<5; j++) {
-+                 if(mycustomttable[i].biosFootprintAddr[j]) {
-+                    if(sishw_ext.pjVirtualRomBase[mycustomttable[i].biosFootprintAddr[j]] !=
-+                              mycustomttable[i].biosFootprintData[j])
-+                       footprint = FALSE;
-+                 }
-+               }
-+               if(footprint) {
-+                  SiS_Pr.SiS_CustomT = mycustomttable[i].SpecialID;
-+                  printk(KERN_DEBUG "sisfb: Identified [%s %s] for non-standard timing\n",
-+                      mycustomttable[i].vendorName,
-+                      mycustomttable[i].cardName);
-+                  break;
-+                 }
-+            }
-+              i++;
-+           } while(mycustomttable[i].chipID);
-+      }
-+
-+#ifdef CONFIG_FB_SIS_300
-+      /* TW: Mode numbers for 1280x768 are different for 300 and 315 series */
-       if(sisvga_engine == SIS_300_VGA) {
--              sisbios_mode[MODEINDEX_1280x960].mode_no = 0x6e;
--              sisbios_mode[MODEINDEX_1280x960+1].mode_no = 0x6f;
--              sisbios_mode[MODEINDEX_1280x960+2].mode_no = 0x7b;
--              sisbios_mode[MODEINDEX_1280x960+3].mode_no = 0x7b;
-+              sisbios_mode[MODEINDEX_1280x768].mode_no = 0x55;
-+              sisbios_mode[MODEINDEX_1280x768+1].mode_no = 0x5a;
-+              sisbios_mode[MODEINDEX_1280x768+2].mode_no = 0x5b;
-+              sisbios_mode[MODEINDEX_1280x768+3].mode_no = 0x5b;
-       }
-+#endif
-       sishw_ext.pSR = vmalloc(sizeof(SIS_DSReg) * SR_BUFFER_SIZE);
-       if (sishw_ext.pSR == NULL) {
-@@ -4167,121 +4595,54 @@ int __init sisfb_init(void)
-       }
-       ivideo.mtrr = (unsigned int) 0;
-+      
-+      ivideo.vbflags = 0;
-       if((sisfb_mode_idx < 0) || ((sisbios_mode[sisfb_mode_idx].mode_no) != 0xFF)) { 
--
--#ifdef CONFIG_FB_SIS_300
--              if (sisvga_engine == SIS_300_VGA) {
--                      sisfb_get_VB_type_300();
--              }
--#endif
--
--#ifdef CONFIG_FB_SIS_315
--              if (sisvga_engine == SIS_315_VGA) {
--                      sisfb_get_VB_type_315();
--              }
--#endif
--
-+      
-               sishw_ext.ujVBChipID = VB_CHIP_UNKNOWN;
-               sishw_ext.Is301BDH = FALSE;
-               sishw_ext.usExternalChip = 0;
--
--              switch (ivideo.hasVB) {
--
--              case HASVB_301:
--                      inSISIDXREG(SISPART4, 0x01, reg);
--                      if (reg >= 0xE0) {
--                              sishw_ext.ujVBChipID = VB_CHIP_302LV;
--                              printk(KERN_INFO "sisfb: SiS302LV bridge detected (revision 0x%02x)\n",reg);
--                      } else if (reg >= 0xD0) {
--                              sishw_ext.ujVBChipID = VB_CHIP_301LV;
--                              printk(KERN_INFO "sisfb: SiS301LV bridge detected (revision 0x%02x)\n",reg);
--                      } else if (reg >= 0xB0) {
--                              sishw_ext.ujVBChipID = VB_CHIP_301B;
--                              inSISIDXREG(SISPART4,0x23,reg1);
--                              if(!(reg1 & 0x02)) sishw_ext.Is301BDH = TRUE;
--                              printk(KERN_INFO "sisfb: SiS301B%s bridge detected (revision 0x%02x)\n",
--                                      (sishw_ext.Is301BDH ? "-DH" : ""), reg);
--                      } else {
--                              sishw_ext.ujVBChipID = VB_CHIP_301;
--                              printk(KERN_INFO "sisfb: SiS301 bridge detected\n");
--                      }
--                      break;
--              case HASVB_302:
--                      inSISIDXREG(SISPART4, 0x01, reg);
--                      if (reg >= 0xE0) {
--                              sishw_ext.ujVBChipID = VB_CHIP_302LV;
--                              printk(KERN_INFO "sisfb: SiS302LV bridge detected (revision 0x%02x)\n",reg);
--                      } else if (reg >= 0xD0) {
--                              sishw_ext.ujVBChipID = VB_CHIP_301LV;
--                              printk(KERN_INFO "sisfb: SiS302LV bridge detected (revision 0x%02x)\n",reg);
--                      } else if (reg >= 0xB0) {
--                              inSISIDXREG(SISPART4,0x23,reg1);
--                              if(!(reg1 & 0x02)) sishw_ext.Is301BDH = TRUE;
--                              sishw_ext.ujVBChipID = VB_CHIP_302B;
--                              printk(KERN_INFO "sisfb: SiS302B%s bridge detected (revision 0x%02x)\n",
--                                      (sishw_ext.Is301BDH ? "-DH" : ""), reg);
--                      } else {
--                              sishw_ext.ujVBChipID = VB_CHIP_302;
--                              printk(KERN_INFO "sisfb: SiS302 bridge detected\n");
--                      }
--                      break;
--              case HASVB_LVDS:
--                      sishw_ext.usExternalChip = 0x1;
--                      printk(KERN_INFO "sisfb: LVDS transmitter detected\n");
--                      break;
--              case HASVB_TRUMPION:
--                      sishw_ext.usExternalChip = 0x2;
--                      printk(KERN_INFO "sisfb: Trumpion Zurac LVDS scaler detected\n");
--                      break;
--              case HASVB_CHRONTEL:
--                      sishw_ext.usExternalChip = 0x4;
--                      printk(KERN_INFO "sisfb: Chrontel TV encoder detected\n");
--                      break;
--              case HASVB_LVDS_CHRONTEL:
--                      sishw_ext.usExternalChip = 0x5;
--                      printk(KERN_INFO "sisfb: LVDS transmitter and Chrontel TV encoder detected\n");
--                      break;
--              default:
--                      printk(KERN_INFO "sisfb: No or unknown bridge type detected\n");
--                      break;
--              }
--
--              if (ivideo.hasVB != HASVB_NONE) {
--#ifdef CONFIG_FB_SIS_300
--                    if (sisvga_engine == SIS_300_VGA) {
--                              sisfb_detect_VB_connect_300();
--                      }
--#endif
--#ifdef CONFIG_FB_SIS_315
--                    if (sisvga_engine == SIS_315_VGA) {
--                              sisfb_detect_VB_connect_315();
--                      }
--#endif
-+      
-+              sisfb_get_VB_type();
-+              
-+              if(ivideo.vbflags & VB_VIDEOBRIDGE) {
-+                      sisfb_detect_VB_connect();
-               }
--
--              if (ivideo.disp_state & DISPTYPE_DISP2) {
--                      if (sisfb_crt1off)
--                              ivideo.disp_state |= DISPMODE_SINGLE;
--                      else
--                              ivideo.disp_state |= (DISPMODE_MIRROR | DISPTYPE_CRT1);
--              } else {
--                      ivideo.disp_state = DISPMODE_SINGLE | DISPTYPE_CRT1;
-+              
-+              ivideo.currentvbflags = ivideo.vbflags & VB_VIDEOBRIDGE;
-+              
-+              if(ivideo.vbflags & VB_VIDEOBRIDGE) {
-+                 if(sisfb_crt2type != -1) {
-+                    if((sisfb_crt2type == CRT2_LCD) && (ivideo.vbflags & CRT2_LCD)) {
-+                       ivideo.currentvbflags |= CRT2_LCD;
-+                    } else if(sisfb_crt2type != CRT2_LCD) {
-+                       ivideo.currentvbflags |= sisfb_crt2type;
-+                    }
-+                 } else {
-+                    /* Chrontel 700x TV detection often unreliable, therefore use a
-+                     * different default order on such machines
-+                     */
-+                    if((sisvga_engine == SIS_300_VGA) && (ivideo.vbflags & VB_CHRONTEL)) {
-+                       if(ivideo.vbflags & CRT2_LCD)      ivideo.currentvbflags |= CRT2_LCD;
-+                       else if(ivideo.vbflags & CRT2_TV)  ivideo.currentvbflags |= CRT2_TV;
-+                       else if(ivideo.vbflags & CRT2_VGA) ivideo.currentvbflags |= CRT2_VGA;
-+                    } else {
-+                       if(ivideo.vbflags & CRT2_TV)       ivideo.currentvbflags |= CRT2_TV;
-+                       else if(ivideo.vbflags & CRT2_LCD) ivideo.currentvbflags |= CRT2_LCD;
-+                       else if(ivideo.vbflags & CRT2_VGA) ivideo.currentvbflags |= CRT2_VGA;
-+                    }
-+                 }
-               }
--              if (ivideo.disp_state & DISPTYPE_LCD) {
--                  if (!enable_dstn) {
--                      inSISIDXREG(SISCR, IND_SIS_LCD_PANEL, reg);
--                      reg &= 0x0f;
--                      if (sisvga_engine == SIS_300_VGA) {
--                          sishw_ext.ulCRT2LCDType = sis300paneltype[reg];
--                      } else {
--                          sishw_ext.ulCRT2LCDType = sis310paneltype[reg];
--                      }
--                  } else {
--                      /* TW: FSTN/DSTN */
--                      sishw_ext.ulCRT2LCDType = LCD_320x480;
--                  }
-+              if(ivideo.vbflags & CRT2_LCD) {
-+                 inSISIDXREG(SISCR, IND_SIS_LCD_PANEL, reg);
-+                 reg &= 0x0f;
-+                 if(sisvga_engine == SIS_300_VGA) {
-+                    sishw_ext.ulCRT2LCDType = sis300paneltype[reg];
-+                 } else {
-+                    sishw_ext.ulCRT2LCDType = sis310paneltype[reg];
-+                 }
-               }
-               
-               sisfb_detectedpdc = 0;
-@@ -4289,9 +4650,7 @@ int __init sisfb_init(void)
- #ifdef CONFIG_FB_SIS_300
-                 /* TW: Save the current PanelDelayCompensation if the LCD is currently used */
-               if(sisvga_engine == SIS_300_VGA) {
--                if((sishw_ext.usExternalChip == 0x01) ||   /* LVDS */
--                   (sishw_ext.usExternalChip == 0x05) ||   /* LVDS+Chrontel */
--                   (sishw_ext.Is301BDH)) {                 /* 301B-DH */
-+                if(ivideo.vbflags & (VB_LVDS | VB_30xBDH)) {
-                      int tmp;
-                      inSISIDXREG(SISCR,0x30,tmp);
-                      if(tmp & 0x20) {
-@@ -4320,54 +4679,57 @@ int __init sisfb_init(void)
- #ifdef CONFIG_FB_SIS_315
-                 /* TW: Try to find about LCDA */
-               if(sisvga_engine == SIS_315_VGA) {
--                if((sishw_ext.ujVBChipID == VB_CHIP_302B) ||
--                   (sishw_ext.ujVBChipID == VB_CHIP_301LV) ||
--                   (sishw_ext.ujVBChipID == VB_CHIP_302LV)) {
--                     int tmp;
--                     inSISIDXREG(SISCR,0x34,tmp);
--                     if(tmp <= 0x13) {        
--                        /* Currently on LCDA? (Some BIOSes leave CR38) */
--                        inSISIDXREG(SISCR,0x38,tmp);
--                        if((tmp & 0x03) == 0x03) {
--                           SiS_Pr.SiS_UseLCDA = TRUE;
--                        } else {
--                           /* Currently on LCDA? (Some newer BIOSes set D0 in CR35) */
--                           inSISIDXREG(SISCR,0x35,tmp);
--                           if(tmp & 0x01) {
--                              SiS_Pr.SiS_UseLCDA = TRUE;
--                           } else {
--                              /* Currently on LCD? If so, we can find out 
--                                 by peeking the mode register 
--                               */
--                              inSISIDXREG(SISCR,0x30,tmp);
--                              if(tmp & 0x20) {
--                                 inSISIDXREG(SISPART1,0x13,tmp);
--                                 if(tmp & 0x04) {
--                                    SiS_Pr.SiS_UseLCDA = TRUE;
--                                 }
--                              }
--                           }
--                        }
--                     } 
--                     if(SiS_Pr.SiS_UseLCDA) {
--                        sisfb_detectedlcda = 0x03;
--                        printk(KERN_INFO
--                               "sisfb: Bridge uses LCDA for low resolution and text modes\n");
--                     }
-+                 if(ivideo.vbflags & (VB_302B | VB_301LV | VB_302LV)) {
-+                    int tmp;
-+                    inSISIDXREG(SISCR,0x34,tmp);
-+                    if((tmp <= 0x13) || (tmp == 0xff)) {
-+                       /* Currently on LCDA? (Some BIOSes leave CR38) */
-+                       inSISIDXREG(SISCR,0x38,tmp);
-+                       if((tmp & 0x03) == 0x03)  SiS_Pr.SiS_UseLCDA = TRUE;
-+                       else {
-+                          /* Currently on LCDA? (Some newer BIOSes set D0 in CR35) */
-+                          inSISIDXREG(SISCR,0x35,tmp);
-+                          if(tmp & 0x01) SiS_Pr.SiS_UseLCDA = TRUE;
-+                          else {
-+                             /* Currently on LCD? If so, we can find out
-+                              * by peeking the mode register
-+                              */
-+                             inSISIDXREG(SISCR,0x30,tmp);
-+                             if(tmp & 0x20) {
-+                                inSISIDXREG(SISPART1,0x13,tmp);
-+                                if(tmp & 0x04) SiS_Pr.SiS_UseLCDA = TRUE;
-+                             }
-+                          }
-+                       }
-+                    }
-+                    if(SiS_Pr.SiS_UseLCDA) {
-+                       sisfb_detectedlcda = 0x03;
-+                       printk(KERN_INFO
-+                              "sisfb: Bridge uses LCDA for low resolution and text modes\n");
-+                    }
-                 }
-               }
- #endif
- #endif
-+              if (!sisfb_crt1off) {
-+                      sisfb_handle_ddc(&sisfb_thismonitor, 0);
-+              } else {
-+                      if ((ivideo.vbflags & (VB_301|VB_301B|VB_302B)) &&
-+                          (ivideo.vbflags & (CRT2_VGA | CRT2_LCD))) {
-+                              sisfb_handle_ddc(&sisfb_thismonitor, 1);
-+                      }
-+              }
-+
-               if (sisfb_mode_idx >= 0)
--                      sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx);
-+                      sisfb_mode_idx = sisfb_validate_mode(sisfb_mode_idx, ivideo.currentvbflags);
-               if (sisfb_mode_idx < 0) {
--                      switch (ivideo.disp_state & DISPTYPE_DISP2) {
--                         case DISPTYPE_LCD:
-+                      switch (ivideo.currentvbflags & VB_DISPTYPE_DISP2) {
-+                         case CRT2_LCD:
-                               sisfb_mode_idx = DEFAULT_LCDMODE;
-                               break;
--                         case DISPTYPE_TV:
-+                         case CRT2_TV:
-                               sisfb_mode_idx = DEFAULT_TVMODE;
-                               break;
-                          default:
-@@ -4379,39 +4741,27 @@ int __init sisfb_init(void)
-               sisfb_mode_no = sisbios_mode[sisfb_mode_idx].mode_no;
-               if (ivideo.refresh_rate != 0)
--                      sisfb_search_refresh_rate(ivideo.refresh_rate);
-+                      sisfb_search_refresh_rate(ivideo.refresh_rate, sisfb_mode_idx);
-               if (sisfb_rate_idx == 0) {
-                       sisfb_rate_idx = sisbios_mode[sisfb_mode_idx].rate_idx;
-                       ivideo.refresh_rate = 60;
-               }
-+              if (sisfb_thismonitor.datavalid) {
-+                      if(!sisfb_verify_rate(&sisfb_thismonitor, sisfb_mode_idx,
-+                                            sisfb_rate_idx, ivideo.refresh_rate)) {
-+                              printk(KERN_INFO "sisfb: WARNING: Refresh rate exceeds monitor specs!\n");
-+                      }
-+              }
-+
-               ivideo.video_bpp = sisbios_mode[sisfb_mode_idx].bpp;
-               ivideo.video_vwidth = ivideo.video_width = sisbios_mode[sisfb_mode_idx].xres;
-               ivideo.video_vheight = ivideo.video_height = sisbios_mode[sisfb_mode_idx].yres;
-               ivideo.org_x = ivideo.org_y = 0;
-               ivideo.video_linelength = ivideo.video_width * (ivideo.video_bpp >> 3);
--              switch(ivideo.video_bpp) {
--              case 8:
--                      ivideo.DstColor = 0x0000;
--                      ivideo.SiS310_AccelDepth = 0x00000000;
--                      ivideo.video_cmap_len = 256;
--                      break;
--              case 16:
--                      ivideo.DstColor = 0x8000;
--                      ivideo.SiS310_AccelDepth = 0x00010000;
--                      ivideo.video_cmap_len = 16;
--                      break;
--              case 32:
--                      ivideo.DstColor = 0xC000;
--                      ivideo.SiS310_AccelDepth = 0x00020000;
--                      ivideo.video_cmap_len = 16;
--                      break;
--              default:
--                      ivideo.video_cmap_len = 16;
--                      printk(KERN_INFO "sisfb: Unsupported depth %d", ivideo.video_bpp);
--                      break;
--              }
-+              
-+              sisfb_set_vparms();
-               
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
-@@ -4424,23 +4774,45 @@ int __init sisfb_init(void)
-               sisfb_pre_setmode();
-               if (SiSSetMode(&SiS_Pr, &sishw_ext, sisfb_mode_no) == 0) {
--                      printk(KERN_ERR "sisfb: Setting mode[0x%x] failed, using default mode\n", 
-+                      printk(KERN_ERR "sisfb: Fatal error: Setting mode[0x%x] failed\n",
-                               sisfb_mode_no);
--                      return -1;
-+                      vfree(sishw_ext.pSR);
-+                      vfree(sishw_ext.pCR);
-+                      release_mem_region(ivideo.video_base, ivideo.video_size);
-+                      release_mem_region(ivideo.mmio_base, sisfb_mmio_size);
-+                      return -EINVAL;
-               }
-               outSISIDXREG(SISSR, IND_SIS_PASSWORD, SIS_PASSWORD);
-               sisfb_post_setmode();
-+              
-+              ivideo.accel = 0;
-+              if(sisfb_accel) {
-+                 ivideo.accel = -1;
-+                 default_var.accel_flags |= FB_ACCELF_TEXT;
-+                 sisfb_initaccel();
-+              }
-               sisfb_crtc_to_var(&default_var);
-               
-+              sis_fb_info.node = -1;
-+              sis_fb_info.flags = FBINFO_FLAG_DEFAULT;
-+              sis_fb_info.blank = &sisfb_blank;
-+              sis_fb_info.fbops = &sisfb_ops;
-+              sis_fb_info.switch_con = &sisfb_switch;
-+              sis_fb_info.updatevar = &sisfb_update_var;
-+              sis_fb_info.changevar = NULL;
-+              sis_fb_info.disp = &sis_disp;
-+                      
-+              sisfb_set_disp(-1, &default_var, &sis_fb_info);
-+              
- #else         /* --------- For 2.5: Setup a somewhat sane default var ------------ */
-               printk(KERN_INFO "sisfb: Default mode is %dx%dx%d (%dHz)\n",
-                       ivideo.video_width, ivideo.video_height, ivideo.video_bpp,
-                       ivideo.refresh_rate);
--                      
-+
-               default_var.xres = default_var.xres_virtual = ivideo.video_width;
-               default_var.yres = default_var.yres_virtual = ivideo.video_height;
-               default_var.bits_per_pixel = ivideo.video_bpp;
-@@ -4457,50 +4829,26 @@ int __init sisfb_init(void)
-                        &default_var.upper_margin, &default_var.lower_margin,
-                        &default_var.hsync_len, &default_var.vsync_len,
-                        &default_var.sync, &default_var.vmode)) {
--                       
--                 if((default_var.vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
--                    default_var.yres <<= 1;
--                    default_var.yres_virtual <<= 1;
--                 } else if((default_var.vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
--                    default_var.pixclock >>= 1;
--                    default_var.yres >>= 1;
--                    default_var.yres_virtual >>= 1;
--                 }
--                 
-+                      if((default_var.vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
-+                              default_var.pixclock <<= 1;
-+                      }
-               }
--#ifdef SISFB_PAN
--              if(sisfb_ypan) {
--                      default_var.yres_virtual = 
--                              ivideo.heapstart / (default_var.xres * (default_var.bits_per_pixel >> 3));
--                      if(default_var.yres_virtual <= default_var.yres) {
--                              default_var.yres_virtual = default_var.yres;
--                      }
--              } 
--#endif
-               
--#endif
--
-               ivideo.accel = 0;
-               if(sisfb_accel) {
-                  ivideo.accel = -1;
-                  default_var.accel_flags |= FB_ACCELF_TEXT;
-                  sisfb_initaccel();
-               }
-+              
-+              if(sisfb_ypan) {
-+                      default_var.yres_virtual = 
-+                              ivideo.heapstart / (default_var.xres * (default_var.bits_per_pixel >> 3));
-+                      if(default_var.yres_virtual <= default_var.yres) {
-+                              default_var.yres_virtual = default_var.yres;
-+                      }
-+              } 
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)                /* ---- 2.4 series init ---- */
--              sis_fb_info.node = -1;
--              sis_fb_info.flags = FBINFO_FLAG_DEFAULT;
--              sis_fb_info.blank = &sisfb_blank;
--              sis_fb_info.fbops = &sisfb_ops;
--              sis_fb_info.switch_con = &sisfb_switch;
--              sis_fb_info.updatevar = &sisfb_update_var;
--              sis_fb_info.changevar = NULL;
--              sis_fb_info.disp = &sis_disp;
--                      
--              sisfb_set_disp(-1, &default_var, &sis_fb_info);
--#endif
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)               /* ---- 2.5 series init ---- */
-               sis_fb_info.flags = FBINFO_FLAG_DEFAULT;
-               sis_fb_info.var = default_var;
-               sis_fb_info.fix = sisfb_fix;
-@@ -4513,6 +4861,8 @@ int __init sisfb_init(void)
-               fb_alloc_cmap(&sis_fb_info.cmap, 256 , 0);
- #endif
-+              printk(KERN_INFO "sisfb: Initial vbflags 0x%lx\n", ivideo.vbflags);
-+
- #ifdef CONFIG_MTRR
-               ivideo.mtrr = mtrr_add((unsigned int) ivideo.video_base,
-                               (unsigned int) ivideo.video_size,
-@@ -4526,11 +4876,17 @@ int __init sisfb_init(void)
-               vc_resize_con(1, 1, 0);
- #endif
--              TWDEBUG("Before calling register_framebuffer");
--              
--              if(register_framebuffer(&sis_fb_info) < 0)
-+              if(register_framebuffer(&sis_fb_info) < 0) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+                      vfree(sishw_ext.pSR);
-+                      vfree(sishw_ext.pCR);
-+                      release_mem_region(ivideo.video_base, ivideo.video_size);
-+                      release_mem_region(ivideo.mmio_base, sisfb_mmio_size);
-+#endif
-+                      printk(KERN_ERR "sisfb: Fatal error: Failed to register framebuffer\n");
-                       return -EINVAL;
--                      
-+              }
-+
-               sisfb_registered = 1;                   
-               printk(KERN_INFO "sisfb: Installed SISFB_GET_INFO ioctl (%x)\n", SISFB_GET_INFO);
-@@ -4547,9 +4903,11 @@ int __init sisfb_init(void)
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-               printk(KERN_INFO "fb%d: %s frame buffer device, Version %d.%d.%02d\n",
--                      sis_fb_info.node, myid, VER_MAJOR, VER_MINOR, VER_LEVEL);                            
-+                      sis_fb_info.node, myid, VER_MAJOR, VER_MINOR, VER_LEVEL);
- #endif
-+              printk(KERN_INFO "sisfb: (C) 2001-2003 Thomas Winischhofer. All rights reserved.\n");
-+
-       }       /* TW: if mode = "none" */
-       return 0;
- }
-@@ -4562,7 +4920,6 @@ static int          vesa = -1;
- static unsigned int rate = 0;
- static unsigned int crt1off = 1;
- static unsigned int mem = 0;
--static unsigned int dstn = 0;
- static char         *forcecrt2type = NULL;
- static int          forcecrt1 = -1;
- static char         *queuemode = NULL;
-@@ -4575,25 +4932,31 @@ static int          inverse = 0;
- static int          userom = 1;
- static int          useoem = -1;
- static char         *tvstandard = NULL;
-+static int        nocrt2rate = 0;
--MODULE_DESCRIPTION("SiS 300/540/630/730/315/550/650/740/330 framebuffer driver");
-+MODULE_DESCRIPTION("SiS 300/540/630/730/315/550/650/740/330/660 framebuffer driver");
- MODULE_LICENSE("GPL");
--MODULE_AUTHOR("SiS; Thomas Winischhofer <thomas@winischhofer.net>; Various others");
-+MODULE_AUTHOR("Thomas Winischhofer <thomas@winischhofer.net>; SiS; Various others");
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- MODULE_PARM(mode, "s");
- MODULE_PARM_DESC(mode,
-        "\nSelects the desired display mode in the format [X]x[Y]x[Depth], eg.\n"
--         "800x600x16 (default: none if sisfb is a module; this leaves the\n"
--       "console untouched and the driver will only do the video memory\n"
--       "management for eg. DRM/DRI; 800x600x8 if sisfb is in the kernel)");
-+         "1024x768x16. Other formats supported include XxY-Depth and\n"
-+       "XxY-Depth@Rate. If the parameter is only one (decimal or hexadecimal)\n"
-+       "number, it will be interpreted as a VESA mode number. (default: none if\n"
-+       "sisfb is a module; this leaves the console untouched and the driver will\n"
-+       "only do the video memory management for eg. DRM/DRI; 800x600x8 if sisfb\n"
-+       "is in the kernel)");
- #endif
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)        
- MODULE_PARM(mode, "s");
- MODULE_PARM_DESC(mode,
--       "\nSelects the desired default display mode in the format [X]x[Y]x[Depth],\n"
--         "eg. 1024x768x16 (default: 800x600x8)");
--#endif         
-+       "\nSelects the desired default display mode in the format XxYxDepth,\n"
-+         "eg. 1024x768x16. Other formats supported include XxY-Depth and\n"
-+       "XxY-Depth@Rate. If the parameter is only one (decimal or hexadecimal)\n"
-+       "number, it will be interpreted as a VESA mode number. (default: 800x600x8)");
-+#endif
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- MODULE_PARM(vesa, "i");
-@@ -4603,17 +4966,18 @@ MODULE_PARM_DESC(vesa,
-        "and the driver will only do the video memory management for eg. DRM/DRI;\n"
-        "0x0103 if sisfb is in the kernel)");
- #endif
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)        
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- MODULE_PARM(vesa, "i");
- MODULE_PARM_DESC(vesa,
-        "\nSelects the desired default display mode by VESA defined mode number, eg.\n"
-          "0x117 (default: 0x0103)");
--#endif         
-+#endif
- MODULE_PARM(rate, "i");
- MODULE_PARM_DESC(rate,
-       "\nSelects the desired vertical refresh rate for CRT1 (external VGA) in Hz.\n"
--      "(default: 60)");
-+        "If the mode is specified in the format XxY-Depth@Rate, this parameter\n"
-+        "will be ignored (default: 60)");
- MODULE_PARM(crt1off,   "i");
- MODULE_PARM_DESC(crt1off,
-@@ -4624,14 +4988,9 @@ MODULE_PARM_DESC(filter,
-       "\nSelects TV flicker filter type (only for systems with a SiS301 video bridge).\n"
-         "(Possible values 0-7, default: [no filter])");
--MODULE_PARM(dstn,   "i");
--MODULE_PARM_DESC(dstn,
--      "\nSelects DSTN/FSTN display mode for SiS550. This sets CRT2 type to LCD and\n"
--        "overrides forcecrt2type setting. (1=ON, 0=OFF) (default: 0)");
--
- MODULE_PARM(queuemode,   "s");
- MODULE_PARM_DESC(queuemode,
--      "\nSelects the queue mode on 315/550/650/740/330. Possible choices are AGP, VRAM or\n"
-+      "\nSelects the queue mode on 315/550/650/740/330/660. Possible choices are AGP, VRAM,\n"
-         "MMIO. AGP is only available if the kernel has AGP support. The queue mode is\n"
-         "important to programs using the 2D/3D accelerator of the SiS chip. The modes\n"
-         "require a totally different way of programming the engines. If any mode than\n"
-@@ -4673,56 +5032,61 @@ MODULE_PARM_DESC(pdc,
- MODULE_PARM(noaccel, "i");
- MODULE_PARM_DESC(noaccel,
-         "\nIf set to anything other than 0, 2D acceleration and y-panning will be\n"
--      "disabled. (default: 0)");
-+        "disabled. (default: 0)");
- MODULE_PARM(noypan, "i");
- MODULE_PARM_DESC(noypan,
-         "\nIf set to anything other than 0, y-panning will be disabled and scrolling\n"
--      "will be performed by redrawing the screen. This required 2D acceleration, so\n"
--      "if the option noaccel is set, y-panning will be disabled. (default: 0)");
-+        "will be performed by redrawing the screen. This required 2D acceleration, so\n"
-+        "if the option noaccel is set, y-panning will be disabled. (default: 0)");
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
- MODULE_PARM(inverse, "i");
- MODULE_PARM_DESC(inverse,
-         "\nSetting this to anything but 0 should invert the display colors, but this\n"
--      "does not seem to work. (default: 0)");
-+        "does not seem to work. (default: 0)");
- #endif        
- MODULE_PARM(userom, "i");
- MODULE_PARM_DESC(userom,
-         "\nSetting this to 0 keeps sisfb from using the video BIOS data which is needed\n"
--      "for some LCD and TV setup. (default: 1)");
-+        "for some LCD and TV setup. (default: 1)");
- MODULE_PARM(useoem, "i");
- MODULE_PARM_DESC(useoem,
-         "\nSetting this to 0 keeps sisfb from using its internel OEM data for some LCD\n"
--      "panels and TV connector types. (default: auto)");
-+        "panels and TV connector types. (default: auto)");
- MODULE_PARM(tvstandard, "s");
- MODULE_PARM_DESC(tvstandard,
-       "\nThis allows overriding the BIOS default for the TV standard. Valid choices are\n"
--      "pal and ntsc. (default: auto)");
-+        "pal and ntsc. (default: auto)");
-+MODULE_PARM(nocrt2rate, "i");
-+MODULE_PARM_DESC(nocrt2rate,
-+      "\nSetting this to 1 will force the driver to use the default refresh rate for\n"
-+        "CRT2 if CRT2 type is VGA. (default: 0, use same rate as crt1)");
-+      
- int init_module(void)
- {
-       int err;
--      
-+
-+      ivideo.refresh_rate = sisfb_parm_rate = rate;
-+
-       if(mode)
--              sisfb_search_mode(mode);
-+              sisfb_search_mode(mode, FALSE);
-       else if(vesa != -1)
--              sisfb_search_vesamode(vesa);
--      else  
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
-+              sisfb_search_vesamode(vesa, FALSE);
-+      else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-               /* For 2.4, set mode=none if no mode is given  */
-               sisfb_mode_idx = MODE_INDEX_NONE;
- #endif
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
--              /* For 2.5, we don't need this "mode=none" stuff anymore */     
-+              /* For 2.5, we don't need this "mode=none" stuff anymore */
-               sisfb_mode_idx = DEFAULT_MODE;
- #endif
--      ivideo.refresh_rate = rate;
--
-       if(forcecrt2type)
-               sisfb_search_crt2type(forcecrt2type);
-@@ -4745,9 +5109,6 @@ int init_module(void)
-       if(noypan == 1)       sisfb_ypan = 0;
-       else if(noypan == 0)  sisfb_ypan = 1;
--
--      /* TW: Panning only with acceleration */
--      if(sisfb_accel == 0)  sisfb_ypan = 0;
-       
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       if(inverse)           sisfb_inverse = 1;
-@@ -4759,17 +5120,11 @@ int init_module(void)
-       sisfb_useoem = useoem;
--      enable_dstn = dstn;
--
--      /* TW: DSTN overrules forcecrt2type */
--      if (enable_dstn)      sisfb_crt2type = DISPTYPE_LCD;
--
-       if (queuemode)        sisfb_search_queuemode(queuemode);
-       
-       /* TW: If other queuemode than MMIO, disable 2D accel and ypan */
-       if((sisfb_queuemode != -1) && (sisfb_queuemode != MMIO_CMD)) {
-               sisfb_accel = 0;
--              sisfb_ypan = 0;
-       }
-         if(pdc) {
-@@ -4777,6 +5132,8 @@ int init_module(void)
-               sisfb_pdc = pdc & 0x3c;
-          }
-       }
-+      
-+      sisfb_nocrt2rate = nocrt2rate;
-       if((err = sisfb_init()) < 0) return err;
-@@ -4788,7 +5145,7 @@ void cleanup_module(void)
-       /* TW: Release mem regions */
-       release_mem_region(ivideo.video_base, ivideo.video_size);
-       release_mem_region(ivideo.mmio_base, sisfb_mmio_size);
--      
-+
- #ifdef CONFIG_MTRR
-       /* TW: Release MTRR region */
-       if(ivideo.mtrr) {
-@@ -4802,11 +5159,17 @@ void cleanup_module(void)
-       if(sisfb_registered) {
-               unregister_framebuffer(&sis_fb_info);
-       }
--      
-+
-       if(sishw_ext.pSR) vfree(sishw_ext.pSR);
-       if(sishw_ext.pCR) vfree(sishw_ext.pCR);
-       
--      /* TODO: Restore the initial mode */
-+      /* TODO: Restore the initial mode 
-+       * This sounds easy but is as good as impossible
-+       * on many machines with SiS chip and video bridge
-+       * since text modes are always set up differently
-+       * from machine to machine. Depends on the type
-+       * of integration between chipset and bridge.
-+       */
-       
-       printk(KERN_INFO "sisfb: Module unloaded\n");
- }
---- linux-2.6.0-test1/drivers/video/sis/sis_main.h     2003-06-14 12:18:04.000000000 -0700
-+++ 25/drivers/video/sis/sis_main.h    2003-07-19 17:04:55.000000000 -0700
-@@ -1,8 +1,6 @@
- #ifndef _SISFB_MAIN
- #define _SISFB_MAIN
--/* Comments and changes marked with "TW" by Thomas Winischhofer <thomas@winischhofer.net> */
--
- #include "vstruct.h"
- /* ------------------- Constant Definitions ------------------------- */
-@@ -14,11 +12,11 @@
- #define VER_MAJOR                 1
- #define VER_MINOR                 6
--#define VER_LEVEL                 1
-+#define VER_LEVEL                 11
- #include "sis.h"
--/* TW: To be included in pci_ids.h */
-+/* To be included in pci_ids.h */
- #ifndef PCI_DEVICE_ID_SI_650_VGA
- #define PCI_DEVICE_ID_SI_650_VGA  0x6325
- #endif
-@@ -31,6 +29,12 @@
- #ifndef PCI_DEVICE_ID_SI_330
- #define PCI_DEVICE_ID_SI_330      0x0330
- #endif
-+#ifndef PCI_DEVICE_ID_SI_660
-+#define PCI_DEVICE_ID_SI_660      0x0660
-+#endif
-+#ifndef PCI_DEVICE_ID_SI_660_VGA
-+#define PCI_DEVICE_ID_SI_660_VGA  0x6330
-+#endif
- /* To be included in fb.h */
- #ifndef FB_ACCEL_SIS_GLAMOUR_2
-@@ -59,7 +63,6 @@
- #define COMMAND_QUEUE_THRESHOLD   0x1F
- #endif
--/* TW */
- #define HW_CURSOR_AREA_SIZE_315   0x4000  /* 16K */
- #define HW_CURSOR_AREA_SIZE_300   0x1000  /* 4K */
-@@ -283,45 +286,43 @@
- /* Fbcon variables */
- static struct fb_info sis_fb_info;
--static int    video_type = FB_TYPE_PACKED_PIXELS;
--
- static struct fb_var_screeninfo default_var = {
--      .xres           = 0,
--      .yres           = 0,
--      .xres_virtual   = 0,
--      .yres_virtual   = 0,
--      .xoffset        = 0,
--      .yoffset        = 0,
--      .bits_per_pixel = 0,
--      .grayscale      = 0,
--      .red            = {0, 8, 0},
--      .green          = {0, 8, 0},
--      .blue           = {0, 8, 0},
--      .transp         = {0, 0, 0},
--      .nonstd         = 0,
--      .activate       = FB_ACTIVATE_NOW,
--      .height         = -1,
--      .width          = -1,
--      .accel_flags    = 0,
--      .pixclock       = 0,
--      .left_margin    = 0,
--      .right_margin   = 0,
--      .upper_margin   = 0,
--      .lower_margin   = 0,
--      .hsync_len      = 0,
--      .vsync_len      = 0,
--      .sync           = 0,
--      .vmode          = FB_VMODE_NONINTERLACED,
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)        
--      .reserved       = {0, 0, 0, 0, 0, 0}
--#endif        
-+      .xres            = 0,
-+      .yres            = 0,
-+      .xres_virtual    = 0,
-+      .yres_virtual    = 0,
-+      .xoffset         = 0,
-+      .yoffset         = 0,
-+      .bits_per_pixel  = 0,
-+      .grayscale       = 0,
-+      .red             = {0, 8, 0},
-+      .green           = {0, 8, 0},
-+      .blue            = {0, 8, 0},
-+      .transp          = {0, 0, 0},
-+      .nonstd          = 0,
-+      .activate        = FB_ACTIVATE_NOW,
-+      .height          = -1,
-+      .width           = -1,
-+      .accel_flags     = 0,
-+      .pixclock        = 0,
-+      .left_margin     = 0,
-+      .right_margin    = 0,
-+      .upper_margin    = 0,
-+      .lower_margin    = 0,
-+      .hsync_len       = 0,
-+      .vsync_len       = 0,
-+      .sync            = 0,
-+      .vmode           = FB_VMODE_NONINTERLACED,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+      .reserved        = {0, 0, 0, 0, 0, 0}
-+#endif
- };
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
- static struct fb_fix_screeninfo sisfb_fix = {
-       .id             = "SiS",
-       .type           = FB_TYPE_PACKED_PIXELS,
--      .xpanstep       = 1,
-+      .xpanstep       = 0,
-       .ypanstep       = 1,
- };
- static char myid[20];
-@@ -347,26 +348,24 @@ static union {
- } sis_fbcon_cmap;
- static int sisfb_inverse = 0;
-+static int currcon = 0;
- #endif
--/* display status */
-+/* global flags */
- static int sisfb_off = 0;
- static int sisfb_crt1off = 0;
- static int sisfb_forcecrt1 = -1;
- static int sisvga_enabled = 0;
- static int sisfb_userom = 1;
- static int sisfb_useoem = -1;
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
--static int currcon = 0;
--#endif
--
--/* global flags */
--static int sisfb_registered;
--static int sisfb_tvmode = 0;
-+static int sisfb_parm_rate = -1;
-+static int sisfb_registered = 0;
- static int sisfb_mem = 0;
- static int sisfb_pdc = 0;
--static int enable_dstn = 0;
- static int sisfb_ypan = -1;
-+static int sisfb_nocrt2rate = 0;
-+static int sisfb_dstn = 0;
-+static int sisfb_fstn = 0;
- VGA_ENGINE sisvga_engine = UNKNOWN_VGA;
- int      sisfb_accel = -1;
-@@ -375,22 +374,22 @@ int         sisfb_accel = -1;
- static int sisfb_hwcursor_size = 0;
- static int sisfb_CRT2_write_enable = 0;
--int sisfb_crt2type  = -1;     /* TW: CRT2 type (for overriding autodetection) */
--int sisfb_tvplug    = -1;     /* PR: Tv plug type (for overriding autodetection) */
-+int sisfb_crt2type  = -1;     /* CRT2 type (for overriding autodetection) */
-+int sisfb_tvplug    = -1;     /* Tv plug type (for overriding autodetection) */
--int sisfb_queuemode = -1;     /* TW: Use MMIO queue mode by default (310/325 series only) */
-+int sisfb_queuemode = -1;     /* Use MMIO queue mode by default (315 series only) */
- unsigned char sisfb_detectedpdc = 0;
- unsigned char sisfb_detectedlcda = 0xff;
--/* data for sis components */
-+/* data for sis hardware ("par") */
- struct video_info ivideo;
--/* TW: For ioctl SISFB_GET_INFO */
-+/* For ioctl SISFB_GET_INFO */
- sisfb_info sisfbinfo;
--/* TW: Hardware extension; contains data on hardware */
-+/* Hardware extension; contains data on hardware */
- HW_DEVICE_EXTENSION sishw_ext = {
-       NULL, NULL, FALSE, NULL, NULL,
-       0, 0, 0, 0, 0, 0, 0, 0, 0,
-@@ -399,10 +398,10 @@ HW_DEVICE_EXTENSION sishw_ext = {
-       0
- };
--/* TW: SiS private structure */
-+/* SiS private structure */
- SiS_Private  SiS_Pr;
--/* card parameters */
-+/* Card parameters */
- static unsigned long sisfb_mmio_size = 0;
- static u8            sisfb_caps = 0;
-@@ -412,7 +411,7 @@ typedef enum _SIS_CMDTYPE {
-       VM_CMD_QUEUE,
- } SIS_CMDTYPE;
--/* Supported SiS Chips list */
-+/* List of supported chips */
- static struct board {
-       u16 vendor, device;
-       const char *name;
-@@ -426,14 +425,15 @@ static struct board {
-       {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_550_VGA, "SIS 550 VGA"},
-       {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_650_VGA, "SIS 650/M650/651/740 VGA"},
-       {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_330,     "SIS 330"},
-+      {PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_660_VGA, "SIS 660 VGA"},
-       {0, 0, NULL}
- };
- #define MD_SIS300 1
- #define MD_SIS315 2
--/* mode table */
--/* NOT const - will be patched for 1280x960 mode number chaos reasons */
-+/* Mode table */
-+/* NOT const - will be patched for 1280x768 mode number chaos reasons */
- struct _sisbios_mode {
-       char name[15];
-       u8 mode_no;
-@@ -447,14 +447,33 @@ struct _sisbios_mode {
-       u16 rows;
-       u8  chipset;
- } sisbios_mode[] = {
--#define MODE_INDEX_NONE           0  /* TW: index for mode=none */
--      {"none",         0xFF, 0x0000, 0x0000,    0,    0,  0, 0,   0,  0, MD_SIS300|MD_SIS315},  /* TW: for mode "none" */
--      {"320x240x16",   0x56, 0x0000, 0x0000,  320,  240, 16, 1,  40, 15,           MD_SIS315},
--      {"320x480x8",    0x5A, 0x0000, 0x0000,  320,  480,  8, 1,  40, 30,           MD_SIS315},  /* TW: FSTN */
--      {"320x480x16",   0x5B, 0x0000, 0x0000,  320,  480, 16, 1,  40, 30,           MD_SIS315},  /* TW: FSTN */
--      {"640x480x8",    0x2E, 0x0101, 0x0101,  640,  480,  8, 1,  80, 30, MD_SIS300|MD_SIS315},
-+#define MODE_INDEX_NONE           0  /* index for mode=none */
-+      {"none",         0xff, 0x0000, 0x0000,    0,    0,  0, 0,   0,  0, MD_SIS300|MD_SIS315},
-+      {"320x200x8",    0x59, 0x0138, 0x0000,  320,  200,  8, 1,  40, 12, MD_SIS300|MD_SIS315},
-+      {"320x200x16",   0x41, 0x010e, 0x0000,  320,  200, 16, 1,  40, 12, MD_SIS300|MD_SIS315},
-+      {"320x200x24",   0x4f, 0x0000, 0x0000,  320,  200, 32, 1,  40, 12, MD_SIS300|MD_SIS315},  /* TW: That's for people who mix up color- and fb depth */
-+      {"320x200x32",   0x4f, 0x0000, 0x0000,  320,  200, 32, 1,  40, 12, MD_SIS300|MD_SIS315},
-+      {"320x240x8",    0x50, 0x0132, 0x0000,  320,  240,  8, 1,  40, 15, MD_SIS300|MD_SIS315},
-+      {"320x240x16",   0x56, 0x0135, 0x0000,  320,  240, 16, 1,  40, 15, MD_SIS300|MD_SIS315},
-+      {"320x240x24",   0x53, 0x0000, 0x0000,  320,  240, 32, 1,  40, 15, MD_SIS300|MD_SIS315},
-+      {"320x240x32",   0x53, 0x0000, 0x0000,  320,  240, 32, 1,  40, 15, MD_SIS300|MD_SIS315},
-+      {"320x240x8",    0x5a, 0x0132, 0x0000,  320,  480,  8, 1,  40, 30,           MD_SIS315},  /* TW: FSTN */
-+      {"320x240x16",   0x5b, 0x0135, 0x0000,  320,  480, 16, 1,  40, 30,           MD_SIS315},  /* TW: FSTN */
-+      {"400x300x8",    0x51, 0x0133, 0x0000,  400,  300,  8, 1,  50, 18, MD_SIS300|MD_SIS315},
-+      {"400x300x16",   0x57, 0x0136, 0x0000,  400,  300, 16, 1,  50, 18, MD_SIS300|MD_SIS315},
-+      {"400x300x24",   0x54, 0x0000, 0x0000,  400,  300, 32, 1,  50, 18, MD_SIS300|MD_SIS315},
-+      {"400x300x32",   0x54, 0x0000, 0x0000,  400,  300, 32, 1,  50, 18, MD_SIS300|MD_SIS315},
-+      {"512x384x8",    0x52, 0x0000, 0x0000,  512,  384,  8, 1,  64, 24, MD_SIS300|MD_SIS315},
-+      {"512x384x16",   0x58, 0x0000, 0x0000,  512,  384, 16, 1,  64, 24, MD_SIS300|MD_SIS315},
-+      {"512x384x24",   0x5c, 0x0000, 0x0000,  512,  384, 32, 1,  64, 24, MD_SIS300|MD_SIS315},
-+      {"512x384x32",   0x5c, 0x0000, 0x0000,  512,  384, 32, 1,  64, 24, MD_SIS300|MD_SIS315},
-+      {"640x400x8",    0x2f, 0x0000, 0x0000,  640,  400,  8, 1,  80, 25, MD_SIS300|MD_SIS315},
-+      {"640x400x16",   0x5d, 0x0000, 0x0000,  640,  400, 16, 1,  80, 25, MD_SIS300|MD_SIS315},
-+      {"640x400x24",   0x5e, 0x0000, 0x0000,  640,  400, 32, 1,  80, 25, MD_SIS300|MD_SIS315},
-+      {"640x400x32",   0x5e, 0x0000, 0x0000,  640,  400, 32, 1,  80, 25, MD_SIS300|MD_SIS315},
-+      {"640x480x8",    0x2e, 0x0101, 0x0101,  640,  480,  8, 1,  80, 30, MD_SIS300|MD_SIS315},
-       {"640x480x16",   0x44, 0x0111, 0x0111,  640,  480, 16, 1,  80, 30, MD_SIS300|MD_SIS315},
--      {"640x480x24",   0x62, 0x013a, 0x0112,  640,  480, 32, 1,  80, 30, MD_SIS300|MD_SIS315},  /* TW: That's for people who mix up color- and fb depth */
-+      {"640x480x24",   0x62, 0x013a, 0x0112,  640,  480, 32, 1,  80, 30, MD_SIS300|MD_SIS315},
-       {"640x480x32",   0x62, 0x013a, 0x0112,  640,  480, 32, 1,  80, 30, MD_SIS300|MD_SIS315},
-       {"720x480x8",    0x31, 0x0000, 0x0000,  720,  480,  8, 1,  90, 30, MD_SIS300|MD_SIS315},
-       {"720x480x16",   0x33, 0x0000, 0x0000,  720,  480, 16, 1,  90, 30, MD_SIS300|MD_SIS315},
-@@ -468,59 +487,79 @@ struct _sisbios_mode {
-       {"800x480x16",   0x7a, 0x0000, 0x0000,  800,  480, 16, 1, 100, 30, MD_SIS300|MD_SIS315},
-       {"800x480x24",   0x76, 0x0000, 0x0000,  800,  480, 32, 1, 100, 30, MD_SIS300|MD_SIS315},
-       {"800x480x32",   0x76, 0x0000, 0x0000,  800,  480, 32, 1, 100, 30, MD_SIS300|MD_SIS315},
--#define DEFAULT_MODE              20 /* TW: index for 800x600x8 */
--#define DEFAULT_LCDMODE           20 /* TW: index for 800x600x8 */
--#define DEFAULT_TVMODE            20 /* TW: index for 800x600x8 */
-+#define DEFAULT_MODE              39 /* index for 800x600x8 */
-+#define DEFAULT_LCDMODE           39 /* index for 800x600x8 */
-+#define DEFAULT_TVMODE            39 /* index for 800x600x8 */
-       {"800x600x8",    0x30, 0x0103, 0x0103,  800,  600,  8, 2, 100, 37, MD_SIS300|MD_SIS315},
-       {"800x600x16",   0x47, 0x0114, 0x0114,  800,  600, 16, 2, 100, 37, MD_SIS300|MD_SIS315},
-       {"800x600x24",   0x63, 0x013b, 0x0115,  800,  600, 32, 2, 100, 37, MD_SIS300|MD_SIS315},
-       {"800x600x32",   0x63, 0x013b, 0x0115,  800,  600, 32, 2, 100, 37, MD_SIS300|MD_SIS315},
-+      {"848x480x8",    0x39, 0x0000, 0x0000,  848,  480,  8, 2, 106, 30, MD_SIS300|MD_SIS315},
-+      {"848x480x16",   0x3b, 0x0000, 0x0000,  848,  480, 16, 2, 106, 30, MD_SIS300|MD_SIS315},
-+      {"848x480x24",   0x3e, 0x0000, 0x0000,  848,  480, 32, 2, 106, 30, MD_SIS300|MD_SIS315},
-+      {"848x480x32",   0x3e, 0x0000, 0x0000,  848,  480, 32, 2, 106, 30, MD_SIS300|MD_SIS315},
-+      {"856x480x8",    0x3f, 0x0000, 0x0000,  856,  480,  8, 2, 107, 30, MD_SIS300|MD_SIS315},
-+      {"856x480x16",   0x42, 0x0000, 0x0000,  856,  480, 16, 2, 107, 30, MD_SIS300|MD_SIS315},
-+      {"856x480x24",   0x45, 0x0000, 0x0000,  856,  480, 32, 2, 107, 30, MD_SIS300|MD_SIS315},
-+      {"856x480x32",   0x45, 0x0000, 0x0000,  856,  480, 32, 2, 107, 30, MD_SIS300|MD_SIS315},
-       {"1024x576x8",   0x71, 0x0000, 0x0000, 1024,  576,  8, 1, 128, 36, MD_SIS300|MD_SIS315},
-       {"1024x576x16",  0x74, 0x0000, 0x0000, 1024,  576, 16, 1, 128, 36, MD_SIS300|MD_SIS315},
-       {"1024x576x24",  0x77, 0x0000, 0x0000, 1024,  576, 32, 1, 128, 36, MD_SIS300|MD_SIS315},
-       {"1024x576x32",  0x77, 0x0000, 0x0000, 1024,  576, 32, 1, 128, 36, MD_SIS300|MD_SIS315},
--      {"1024x600x8",   0x20, 0x0000, 0x0000, 1024,  600,  8, 1, 128, 37, MD_SIS300          },  /* TW: 300 series only */
-+      {"1024x600x8",   0x20, 0x0000, 0x0000, 1024,  600,  8, 1, 128, 37, MD_SIS300          },
-       {"1024x600x16",  0x21, 0x0000, 0x0000, 1024,  600, 16, 1, 128, 37, MD_SIS300          },
-       {"1024x600x24",  0x22, 0x0000, 0x0000, 1024,  600, 32, 1, 128, 37, MD_SIS300          },
-       {"1024x600x32",  0x22, 0x0000, 0x0000, 1024,  600, 32, 1, 128, 37, MD_SIS300          },
-       {"1024x768x8",   0x38, 0x0105, 0x0105, 1024,  768,  8, 2, 128, 48, MD_SIS300|MD_SIS315},
--      {"1024x768x16",  0x4A, 0x0117, 0x0117, 1024,  768, 16, 2, 128, 48, MD_SIS300|MD_SIS315},
-+      {"1024x768x16",  0x4a, 0x0117, 0x0117, 1024,  768, 16, 2, 128, 48, MD_SIS300|MD_SIS315},
-       {"1024x768x24",  0x64, 0x013c, 0x0118, 1024,  768, 32, 2, 128, 48, MD_SIS300|MD_SIS315},
-       {"1024x768x32",  0x64, 0x013c, 0x0118, 1024,  768, 32, 2, 128, 48, MD_SIS300|MD_SIS315},
--      {"1152x768x8",   0x23, 0x0000, 0x0000, 1152,  768,  8, 1, 144, 48, MD_SIS300          },  /* TW: 300 series only */
-+      {"1152x768x8",   0x23, 0x0000, 0x0000, 1152,  768,  8, 1, 144, 48, MD_SIS300          },
-       {"1152x768x16",  0x24, 0x0000, 0x0000, 1152,  768, 16, 1, 144, 48, MD_SIS300          },
-       {"1152x768x24",  0x25, 0x0000, 0x0000, 1152,  768, 32, 1, 144, 48, MD_SIS300          },
-       {"1152x768x32",  0x25, 0x0000, 0x0000, 1152,  768, 32, 1, 144, 48, MD_SIS300          },
-+      {"1152x864x8",   0x29, 0x0000, 0x0000, 1152,  864,  8, 1, 144, 54, MD_SIS300|MD_SIS315},
-+      {"1152x864x16",  0x2a, 0x0000, 0x0000, 1152,  864, 16, 1, 144, 54, MD_SIS300|MD_SIS315},
-+      {"1152x864x24",  0x2b, 0x0000, 0x0000, 1152,  864, 32, 1, 144, 54, MD_SIS300|MD_SIS315},
-+      {"1152x864x32",  0x2b, 0x0000, 0x0000, 1152,  864, 32, 1, 144, 54, MD_SIS300|MD_SIS315},
-       {"1280x720x8",   0x79, 0x0000, 0x0000, 1280,  720,  8, 1, 160, 45, MD_SIS300|MD_SIS315},
-       {"1280x720x16",  0x75, 0x0000, 0x0000, 1280,  720, 16, 1, 160, 45, MD_SIS300|MD_SIS315},
-       {"1280x720x24",  0x78, 0x0000, 0x0000, 1280,  720, 32, 1, 160, 45, MD_SIS300|MD_SIS315},
-       {"1280x720x32",  0x78, 0x0000, 0x0000, 1280,  720, 32, 1, 160, 45, MD_SIS300|MD_SIS315},
--      {"1280x768x8",   0x23, 0x0000, 0x0000, 1280,  768,  8, 1, 160, 48,           MD_SIS315},  /* TW: 310/325 series only */
--      {"1280x768x16",  0x24, 0x0000, 0x0000, 1280,  768, 16, 1, 160, 48,           MD_SIS315},
--      {"1280x768x24",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48,           MD_SIS315},
--      {"1280x768x32",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48,           MD_SIS315},
--#define MODEINDEX_1280x960 48
--      {"1280x960x8",   0x7C, 0x0000, 0x0000, 1280,  960,  8, 1, 160, 60, MD_SIS300|MD_SIS315},  /* TW: Modenumbers being patched */
--      {"1280x960x16",  0x7D, 0x0000, 0x0000, 1280,  960, 16, 1, 160, 60, MD_SIS300|MD_SIS315},
--      {"1280x960x24",  0x7E, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
--      {"1280x960x32",  0x7E, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
--      {"1280x1024x8",  0x3A, 0x0107, 0x0107, 1280, 1024,  8, 2, 160, 64, MD_SIS300|MD_SIS315},
--      {"1280x1024x16", 0x4D, 0x011a, 0x011a, 1280, 1024, 16, 2, 160, 64, MD_SIS300|MD_SIS315},
-+#define MODEINDEX_1280x768 75
-+      {"1280x768x8",   0x23, 0x0000, 0x0000, 1280,  768,  8, 1, 160, 48, MD_SIS300|MD_SIS315},
-+      {"1280x768x16",  0x24, 0x0000, 0x0000, 1280,  768, 16, 1, 160, 48, MD_SIS300|MD_SIS315},
-+      {"1280x768x24",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48, MD_SIS300|MD_SIS315},
-+      {"1280x768x32",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48, MD_SIS300|MD_SIS315},
-+      {"1280x960x8",   0x7c, 0x0000, 0x0000, 1280,  960,  8, 1, 160, 60, MD_SIS300|MD_SIS315}, 
-+      {"1280x960x16",  0x7d, 0x0000, 0x0000, 1280,  960, 16, 1, 160, 60, MD_SIS300|MD_SIS315},
-+      {"1280x960x24",  0x7e, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
-+      {"1280x960x32",  0x7e, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60, MD_SIS300|MD_SIS315},
-+      {"1280x1024x8",  0x3a, 0x0107, 0x0107, 1280, 1024,  8, 2, 160, 64, MD_SIS300|MD_SIS315},
-+      {"1280x1024x16", 0x4d, 0x011a, 0x011a, 1280, 1024, 16, 2, 160, 64, MD_SIS300|MD_SIS315},
-       {"1280x1024x24", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 2, 160, 64, MD_SIS300|MD_SIS315},
-       {"1280x1024x32", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 2, 160, 64, MD_SIS300|MD_SIS315},
--      {"1400x1050x8",  0x26, 0x0000, 0x0000, 1400, 1050,  8, 1, 175, 65,           MD_SIS315},  /* TW: 310/325 series only */
-+      {"1360x768x8",   0x48, 0x0000, 0x0000, 1360,  768,  8, 1, 170, 48, MD_SIS300|MD_SIS315},
-+      {"1360x768x16",  0x4b, 0x0000, 0x0000, 1360,  768, 16, 1, 170, 48, MD_SIS300|MD_SIS315},
-+      {"1360x768x24",  0x4e, 0x0000, 0x0000, 1360,  768, 32, 1, 170, 48, MD_SIS300|MD_SIS315},
-+      {"1360x768x32",  0x4e, 0x0000, 0x0000, 1360,  768, 32, 1, 170, 48, MD_SIS300|MD_SIS315},
-+      {"1360x1024x8",  0x67, 0x0000, 0x0000, 1360, 1024,  8, 1, 170, 64, MD_SIS300          },
-+      {"1360x1024x16", 0x6f, 0x0000, 0x0000, 1360, 1024, 16, 1, 170, 64, MD_SIS300          },
-+      {"1360x1024x24", 0x72, 0x0000, 0x0000, 1360, 1024, 32, 1, 170, 64, MD_SIS300          },
-+      {"1360x1024x32", 0x72, 0x0000, 0x0000, 1360, 1024, 32, 1, 170, 64, MD_SIS300          },
-+      {"1400x1050x8",  0x26, 0x0000, 0x0000, 1400, 1050,  8, 1, 175, 65,           MD_SIS315},
-       {"1400x1050x16", 0x27, 0x0000, 0x0000, 1400, 1050, 16, 1, 175, 65,           MD_SIS315},
-       {"1400x1050x24", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65,           MD_SIS315},
-       {"1400x1050x32", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65,           MD_SIS315},
--      {"1600x1200x8",  0x3C, 0x0130, 0x011c, 1600, 1200,  8, 1, 200, 75, MD_SIS300|MD_SIS315},
--      {"1600x1200x16", 0x3D, 0x0131, 0x011e, 1600, 1200, 16, 1, 200, 75, MD_SIS300|MD_SIS315},
-+      {"1600x1200x8",  0x3c, 0x0130, 0x011c, 1600, 1200,  8, 1, 200, 75, MD_SIS300|MD_SIS315},
-+      {"1600x1200x16", 0x3d, 0x0131, 0x011e, 1600, 1200, 16, 1, 200, 75, MD_SIS300|MD_SIS315},
-       {"1600x1200x24", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75, MD_SIS300|MD_SIS315},
-       {"1600x1200x32", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75, MD_SIS300|MD_SIS315},
-       {"1920x1440x8",  0x68, 0x013f, 0x0000, 1920, 1440,  8, 1, 240, 75, MD_SIS300|MD_SIS315},
-       {"1920x1440x16", 0x69, 0x0140, 0x0000, 1920, 1440, 16, 1, 240, 75, MD_SIS300|MD_SIS315},
--      {"1920x1440x24", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
--      {"1920x1440x32", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
--      {"2048x1536x8",  0x6c, 0x0000, 0x0000, 2048, 1536,  8, 1, 256, 96,           MD_SIS315},  /* TW: 310/325 series only */
-+      {"1920x1440x24", 0x6b, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
-+      {"1920x1440x32", 0x6b, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75, MD_SIS300|MD_SIS315},
-+      {"2048x1536x8",  0x6c, 0x0000, 0x0000, 2048, 1536,  8, 1, 256, 96,           MD_SIS315},
-       {"2048x1536x16", 0x6d, 0x0000, 0x0000, 2048, 1536, 16, 1, 256, 96,           MD_SIS315},
-       {"2048x1536x24", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96,           MD_SIS315},
-       {"2048x1536x32", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96,           MD_SIS315},
-@@ -538,37 +577,45 @@ u8  sisfb_rate_idx = 0;
- /* TW: CR36 evaluation */
- const USHORT sis300paneltype[] =
--    { LCD_UNKNOWN,   LCD_800x600,  LCD_1024x768,  LCD_1280x1024,
--      LCD_1280x960,  LCD_640x480,  LCD_1024x600,  LCD_1152x768,
--      LCD_320x480,   LCD_1024x768, LCD_1024x768,  LCD_1024x768,
--      LCD_1024x768,  LCD_1024x768, LCD_1024x768,  LCD_1024x768 };
-+    { LCD_UNKNOWN,   LCD_800x600,   LCD_1024x768,  LCD_1280x1024,
-+      LCD_1280x960,  LCD_640x480,   LCD_1024x600,  LCD_1152x768,
-+      LCD_1024x768,   LCD_1024x768,  LCD_1024x768,  LCD_1024x768,
-+      LCD_1024x768,  LCD_1024x768,  LCD_320x480,   LCD_1024x768 };
- const USHORT sis310paneltype[] =
--    { LCD_UNKNOWN,   LCD_800x600,  LCD_1024x768,  LCD_1280x1024,
--      LCD_640x480,   LCD_1024x600, LCD_1152x864,  LCD_1280x960,
--      LCD_1152x768,  LCD_1400x1050,LCD_1280x768,  LCD_1600x1200,
--      LCD_320x480,   LCD_1024x768, LCD_1024x768,  LCD_1024x768 };
-+    { LCD_UNKNOWN,   LCD_800x600,   LCD_1024x768,  LCD_1280x1024,
-+      LCD_640x480,   LCD_1024x600,  LCD_1152x864,  LCD_1280x960,
-+      LCD_1152x768,  LCD_1400x1050, LCD_1280x768,  LCD_1600x1200,
-+      LCD_640x480_2, LCD_640x480_3, LCD_320x480,   LCD_1024x768 };
-+
-+#define FL_550_DSTN 0x01
-+#define FL_550_FSTN 0x02
- static const struct _sis_crt2type {
-       char name[10];
-       int type_no;
-       int tvplug_no;
-+      unsigned short flags;
- } sis_crt2type[] = {
--      {"NONE",        0,              -1},
--      {"LCD",         DISPTYPE_LCD,   -1},
--      {"TV",          DISPTYPE_TV,    -1},
--      {"VGA",         DISPTYPE_CRT2,  -1},
--      {"SVIDEO",      DISPTYPE_TV,    TVPLUG_SVIDEO},
--      {"COMPOSITE",   DISPTYPE_TV,    TVPLUG_COMPOSITE},
--      {"SCART",       DISPTYPE_TV,    TVPLUG_SCART},
--      {"none",        0,              -1},
--      {"lcd",         DISPTYPE_LCD,   -1},
--      {"tv",          DISPTYPE_TV,    -1},
--      {"vga",         DISPTYPE_CRT2,  -1},
--      {"svideo",      DISPTYPE_TV,    TVPLUG_SVIDEO},
--      {"composite",   DISPTYPE_TV,    TVPLUG_COMPOSITE},
--      {"scart",       DISPTYPE_TV,    TVPLUG_SCART},
--      {"\0",          -1,             -1}
-+      {"NONE",        0,              -1,        0},
-+      {"LCD",         CRT2_LCD,       -1,        0},
-+      {"TV",          CRT2_TV,        -1,        0},
-+      {"VGA",         CRT2_VGA,       -1,        0},
-+      {"SVIDEO",      CRT2_TV,        TV_SVIDEO, 0},
-+      {"COMPOSITE",   CRT2_TV,        TV_AVIDEO, 0},
-+      {"SCART",       CRT2_TV,        TV_SCART,  0},
-+      {"none",        0,              -1,        0},
-+      {"lcd",         CRT2_LCD,       -1,        0},
-+      {"tv",          CRT2_TV,        -1,        0},
-+      {"vga",         CRT2_VGA,       -1,        0},
-+      {"svideo",      CRT2_TV,        TV_SVIDEO, 0},
-+      {"composite",   CRT2_TV,        TV_AVIDEO, 0},
-+      {"scart",       CRT2_TV,        TV_SCART,  0},
-+      {"DSTN",        CRT2_LCD,       -1,        FL_550_DSTN},
-+      {"dstn",        CRT2_LCD,       -1,        FL_550_DSTN},
-+      {"FSTN",        CRT2_LCD,       -1,        FL_550_FSTN},
-+      {"fstn",        CRT2_LCD,       -1,        FL_550_FSTN},
-+      {"\0",          -1,             -1,        0}
- };
- /* Queue mode selection for 310 series */
-@@ -590,10 +637,10 @@ static const struct _sis_tvtype {
-       char name[6];
-       int type_no;
- } sis_tvtype[] = {
--      {"PAL",         1},
--      {"NTSC",        2},
--      {"pal",         1},
--      {"ntsc",        2},
-+      {"PAL",         TV_PAL},
-+      {"NTSC",        TV_NTSC},
-+      {"pal",         TV_PAL},
-+      {"ntsc",        TV_NTSC},
-       {"\0",          -1}
- };
-@@ -602,33 +649,102 @@ static const struct _sis_vrate {
-       u16 xres;
-       u16 yres;
-       u16 refresh;
-+      BOOLEAN SiS730valid32bpp;
- } sisfb_vrate[] = {
--      {1,  640,  480, 60}, {2,  640,  480,  72}, {3, 640,   480,  75}, {4,  640, 480,  85},
--      {5,  640,  480,100}, {6,  640,  480, 120}, {7, 640,   480, 160}, {8,  640, 480, 200},
--      {1,  720,  480, 60},
--      {1,  720,  576, 58},
--      {1,  800,  480, 60}, {2,  800,  480,  75}, {3, 800,   480,  85},
--      {1,  800,  600, 56}, {2,  800,  600,  60}, {3, 800,   600,  72}, {4,  800, 600,  75},
--      {5,  800,  600, 85}, {6,  800,  600, 100}, {7, 800,   600, 120}, {8,  800, 600, 160},
--      {1, 1024,  768, 43}, {2, 1024,  768,  60}, {3, 1024,  768,  70}, {4, 1024, 768,  75},
--      {5, 1024,  768, 85}, {6, 1024,  768, 100}, {7, 1024,  768, 120},
--      {1, 1024,  576, 60}, {2, 1024,  576,  75}, {3, 1024,  576,  85},
--      {1, 1024,  600, 60},
--      {1, 1152,  768, 60},
--      {1, 1280,  720, 60}, {2, 1280,  720,  75}, {3, 1280,  720,  85},
--      {1, 1280,  768, 60},
--      {1, 1280, 1024, 43}, {2, 1280, 1024,  60}, {3, 1280, 1024,  75}, {4, 1280, 1024,  85},
--      {1, 1280,  960, 70},
--      {1, 1400, 1050, 60},
--      {1, 1600, 1200, 60}, {2, 1600, 1200,  65}, {3, 1600, 1200,  70}, {4, 1600, 1200,  75},
--      {5, 1600, 1200, 85}, {6, 1600, 1200, 100}, {7, 1600, 1200, 120},
--      {1, 1920, 1440, 60}, {2, 1920, 1440,  65}, {3, 1920, 1440,  70}, {4, 1920, 1440,  75},
--      {5, 1920, 1440, 85}, {6, 1920, 1440, 100},
--      {1, 2048, 1536, 60}, {2, 2048, 1536,  65}, {3, 2048, 1536,  70}, {4, 2048, 1536,  75},
--      {5, 2048, 1536, 85},
--      {0, 0, 0, 0}
-+      {1,  320,  200,  70,  TRUE},
-+      {1,  320,  240,  60,  TRUE},
-+      {1,  320,  480,  60,  TRUE},
-+      {1,  400,  300,  60,  TRUE},
-+      {1,  512,  384,  60,  TRUE},
-+      {1,  640,  400,  72,  TRUE},
-+      {1,  640,  480,  60,  TRUE}, {2,  640,  480,  72,  TRUE}, {3,  640,  480,  75,  TRUE},
-+      {4,  640,  480,  85,  TRUE}, {5,  640,  480, 100,  TRUE}, {6,  640,  480, 120,  TRUE},
-+      {7,  640,  480, 160,  TRUE}, {8,  640,  480, 200,  TRUE},
-+      {1,  720,  480,  60,  TRUE},
-+      {1,  720,  576,  58,  TRUE},
-+      {1,  800,  480,  60,  TRUE}, {2,  800,  480,  75,  TRUE}, {3,  800,  480,  85,  TRUE},
-+      {1,  800,  600,  56,  TRUE}, {2,  800,  600,  60,  TRUE}, {3,  800,  600,  72,  TRUE},
-+      {4,  800,  600,  75,  TRUE}, {5,  800,  600,  85,  TRUE}, {6,  800,  600, 105,  TRUE},
-+      {7,  800,  600, 120,  TRUE}, {8,  800,  600, 160,  TRUE},
-+      {1,  848,  480,  39,  TRUE}, {2,  848,  480,  60,  TRUE},
-+      {1,  856,  480,  39,  TRUE}, {2,  856,  480,  60,  TRUE},
-+      {1, 1024,  576,  60,  TRUE}, {2, 1024,  576,  75,  TRUE}, {3, 1024,  576,  85,  TRUE},
-+      {1, 1024,  600,  60,  TRUE},
-+      {1, 1024,  768,  43,  TRUE}, {2, 1024,  768,  60,  TRUE}, {3, 1024,  768,  70, FALSE},
-+      {4, 1024,  768,  75, FALSE}, {5, 1024,  768,  85,  TRUE}, {6, 1024,  768, 100,  TRUE},
-+      {7, 1024,  768, 120,  TRUE},
-+      {1, 1152,  768,  60,  TRUE},
-+      {1, 1152,  864,  75,  TRUE}, {2, 1152,  864,  84,  TRUE},
-+      {1, 1280,  720,  60,  TRUE}, {2, 1280,  720,  75,  TRUE}, {3, 1280,  720,  85,  TRUE},
-+      {1, 1280,  768,  60,  TRUE},
-+      {1, 1280,  960,  60,  TRUE}, {2, 1280,  960,  85,  TRUE},
-+      {1, 1280, 1024,  43,  TRUE}, {2, 1280, 1024,  60,  TRUE}, {3, 1280, 1024,  75,  TRUE},
-+      {4, 1280, 1024,  85,  TRUE},
-+      {1, 1360,  768,  60,  TRUE},
-+      {1, 1360, 1024,  59,  TRUE},
-+      {1, 1400, 1050,  60,  TRUE}, {2, 1400, 1050,  75,  TRUE},
-+      {1, 1600, 1200,  60,  TRUE}, {2, 1600, 1200,  65,  TRUE}, {3, 1600, 1200,  70,  TRUE},
-+      {4, 1600, 1200,  75,  TRUE}, {5, 1600, 1200,  85,  TRUE}, {6, 1600, 1200, 100,  TRUE},
-+      {7, 1600, 1200, 120,  TRUE},
-+      {1, 1920, 1440,  60,  TRUE}, {2, 1920, 1440,  65,  TRUE}, {3, 1920, 1440,  70,  TRUE},
-+      {4, 1920, 1440,  75,  TRUE}, {5, 1920, 1440,  85,  TRUE}, {6, 1920, 1440, 100,  TRUE},
-+      {1, 2048, 1536,  60,  TRUE}, {2, 2048, 1536,  65,  TRUE}, {3, 2048, 1536,  70,  TRUE},
-+      {4, 2048, 1536,  75,  TRUE}, {5, 2048, 1536,  85,  TRUE},
-+      {0,    0,    0,   0, FALSE}
-+};
-+
-+static struct sisfb_monitor {
-+      u16 hmin;
-+      u16 hmax;
-+      u16 vmin;
-+      u16 vmax;
-+      u32 dclockmax;
-+      u8  feature;
-+      BOOLEAN datavalid;
-+} sisfb_thismonitor;
-+
-+static const struct _sisfbddcsmodes {
-+      u32 mask;
-+      u16 h;
-+      u16 v;
-+      u32 d;
-+} sisfb_ddcsmodes[] = {
-+      { 0x10000, 67, 75, 108000},
-+      { 0x08000, 48, 72,  50000},
-+      { 0x04000, 46, 75,  49500},
-+      { 0x01000, 35, 43,  44900},
-+      { 0x00800, 48, 60,  65000},
-+      { 0x00400, 56, 70,  75000},
-+      { 0x00200, 60, 75,  78800},
-+      { 0x00100, 80, 75, 135000},
-+      { 0x00020, 31, 60,  25200},
-+      { 0x00008, 38, 72,  31500},
-+      { 0x00004, 37, 75,  31500},
-+      { 0x00002, 35, 56,  36000},
-+      { 0x00001, 38, 60,  40000}
-+};
-+
-+static const struct _sisfbddcfmodes {
-+      u16 x;
-+      u16 y;
-+      u16 v;
-+      u16 h;
-+      u32 d;
-+} sisfb_ddcfmodes[] = {
-+       { 1280, 1024, 85, 92, 157500},
-+       { 1600, 1200, 60, 75, 162000},
-+       { 1600, 1200, 65, 82, 175500},
-+       { 1600, 1200, 70, 88, 189000},
-+       { 1600, 1200, 75, 94, 202500},
-+       { 1600, 1200, 85, 107,229500},
-+       { 1920, 1440, 60, 90, 234000},
-+       { 1920, 1440, 75, 113,297000}
- };
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-+static u8 sisfb_lastrates[128];
-+#endif
-+
- static const struct _chswtable {
-     int subsysVendor;
-     int subsysCard;
-@@ -636,9 +752,38 @@ static const struct _chswtable {
-     char *cardName;
- } mychswtable[] = {
-         { 0x1631, 0x1002, "Mitachi", "0x1002" },
-+      { 0x1071, 0x7521, "Mitac"  , "7521P"  },
-       { 0,      0,      ""       , ""       }
- };
-+static const struct _customttable {
-+    unsigned short chipID;
-+    char *biosversion;
-+    char *biosdate;
-+    unsigned short biosFootprintAddr[5];
-+    unsigned char biosFootprintData[5];
-+    char *vendorName;
-+    char *cardName;
-+    unsigned long SpecialID;
-+    char *optionName;
-+} mycustomttable[] = {
-+        { SIS_630, "2.00.07", "09/27/2002-13:38:25",
-+        { 0x220, 0x227, 0x228, 0x229, 0x22a },
-+        {  0x01,  0xe3,  0x9a,  0x6a,  0x00 },
-+        "Barco", "iQ R200L/300/400", CUT_BARCO1366, "BARCO1366"
-+      },
-+      { SIS_630, "2.00.07", "09/27/2002-13:38:25",
-+        { 0x220, 0x227, 0x228, 0x229, 0x22a },
-+        {  0x00,  0x5a,  0x64,  0x41,  0x00 },
-+        "Barco", "iQ G200L/300/400/500", CUT_BARCO1024, "BARCO1024"
-+      },
-+      { 0, "", "",
-+        { 0, 0, 0, 0 },
-+        { 0, 0, 0, 0 },
-+        "", "", CUT_NONE, ""
-+      }
-+};
-+
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
- /* Offscreen layout */
- typedef struct _SIS_GLYINFO {
-@@ -677,7 +822,6 @@ static unsigned long sisfb_heap_end;
- static unsigned long sisfb_heap_size;
- static SIS_HEAP      sisfb_heap;
--// Eden Chen
- static const struct _sis_TV_filter {
-       u8 filter[9][4];
- } sis_TV_filter[] = {
-@@ -829,9 +973,8 @@ static const struct _sis_TV_filter {
- static int           filter = -1;
- static unsigned char filter_tb;
--//~Eden Chen
--/* ---------------------- Routine prototypes ------------------------- */
-+/* ---------------------- Prototypes ------------------------- */
- /* Interface used by the world */
- #ifndef MODULE
-@@ -894,10 +1037,6 @@ extern void     fbcon_sis_fillrect(struc
-                                    const struct fb_fillrect *rect);
- extern void     fbcon_sis_copyarea(struct fb_info *info, 
-                                    const struct fb_copyarea *area);
--#if 0                            
--extern void     cfb_imageblit(struct fb_info *info, 
--                              const struct fb_image *image);
--#endif                              
- extern int      fbcon_sis_sync(struct fb_info *info);
- static int      sisfb_ioctl(struct inode *inode, 
-                           struct file *file,
-@@ -912,7 +1051,7 @@ extern int      sisfb_mode_rate_to_ddata
-                        unsigned int *left_margin, unsigned int *right_margin, 
-                        unsigned int *upper_margin, unsigned int *lower_margin,
-                        unsigned int *hsync_len, unsigned int *vsync_len,
--                       unsigned int *sync, unsigned int *vmode);                                                                    
-+                       unsigned int *sync, unsigned int *vmode);
- #endif
-                       
- static int      sisfb_get_fix(struct fb_fix_screeninfo *fix, int con,
-@@ -923,9 +1062,9 @@ extern int      sisfb_initaccel(void);
- extern void     sisfb_syncaccel(void);
- /* Internal general routines */
--static void     sisfb_search_mode(const char *name);
--static int      sisfb_validate_mode(int modeindex);
--static u8       sisfb_search_refresh_rate(unsigned int rate);
-+static void     sisfb_search_mode(char *name, BOOLEAN quiet);
-+static int      sisfb_validate_mode(int modeindex, unsigned long vbflags);
-+static u8       sisfb_search_refresh_rate(unsigned int rate, int index);
- static int      sisfb_setcolreg(unsigned regno, unsigned red, unsigned green,
-                       unsigned blue, unsigned transp,
-                       struct fb_info *fb_info);
-@@ -939,6 +1078,12 @@ static BOOLEAN  sisfb_CheckVBRetrace(voi
- static BOOLEAN  sisfbcheckvretracecrt2(void);
- static BOOLEAN  sisfbcheckvretracecrt1(void);
- static BOOLEAN  sisfb_bridgeisslave(void);
-+static void     sisfb_detect_VB_connect(void);
-+static void     sisfb_get_VB_type(void);
-+
-+static void     sisfb_handle_ddc(struct sisfb_monitor *monitor, int crtno);
-+static BOOLEAN  sisfb_interpret_edid(struct sisfb_monitor *monitor, unsigned char *buffer);
-+
- /* SiS-specific Export functions */
- void            sis_dispinfo(struct ap_data *rec);
-@@ -952,15 +1097,9 @@ u32             sisfb_get_reg3(u16 port)
- /* Chipset-dependent internal routines */
- #ifdef CONFIG_FB_SIS_300
- static int      sisfb_get_dram_size_300(void);
--static void     sisfb_detect_VB_connect_300(void);
--static void     sisfb_get_VB_type_300(void);
--static int      sisfb_has_VB_300(void);
- #endif
- #ifdef CONFIG_FB_SIS_315
- static int      sisfb_get_dram_size_315(void);
--static void     sisfb_detect_VB_connect_315(void);
--static void     sisfb_get_VB_type_315(void);
--static int      sisfb_has_VB_315(void);
- #endif
- /* Internal heap routines */
-@@ -978,23 +1117,33 @@ BOOLEAN         sisfb_query_VGA_config_s
- BOOLEAN         sisfb_query_north_bridge_space(PSIS_HW_DEVICE_INFO psishw_ext,
-                       unsigned long offset, unsigned long set, unsigned long *value);
--
- /* Routines from init.c/init301.c */
- extern void   SiSRegInit(SiS_Private *SiS_Pr, USHORT BaseAddr);
- extern BOOLEAN  SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
- extern BOOLEAN  SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT ModeNo);
--extern void     SiS_SetEnableDstn(SiS_Private *SiS_Pr);
-+extern void     SiS_SetEnableDstn(SiS_Private *SiS_Pr, int enable);
-+extern void     SiS_SetEnableFstn(SiS_Private *SiS_Pr, int enable);
- extern void     SiS_LongWait(SiS_Private *SiS_Pr);
--/* TW: Chrontel TV functions */
-+extern BOOLEAN  sisfb_gettotalfrommode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,
-+                     unsigned char modeno, int *htotal, int *vtotal, unsigned char rateindex);
-+
-+/* Chrontel TV functions */
- extern USHORT         SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern void   SiS_SetCH700x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern USHORT         SiS_GetCH701x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern void   SiS_SetCH701x(SiS_Private *SiS_Pr, USHORT tempbx);
- extern void     SiS_SetCH70xxANDOR(SiS_Private *SiS_Pr, USHORT tempax,USHORT tempbh);
- extern void     SiS_DDC2Delay(SiS_Private *SiS_Pr, USHORT delaytime);
--
--/* TW: Sensing routines */
-+extern void     SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo);
-+extern USHORT   SiS_HandleDDC(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine,
-+                            USHORT adaptnum, USHORT DDCdatatype, unsigned char *buffer);
-+extern void SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+extern void SiS_Chrontel701xBLOff(SiS_Private *SiS_Pr);
-+extern void SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+extern void SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);
-+                            
-+/* Sensing routines */
- void            SiS_Sense30x(void);
- int             SISDoSense(int tempbl, int tempbh, int tempcl, int tempch);
- void            SiS_SenseCh(void);                    
---- linux-2.6.0-test1/drivers/video/sis/vgatypes.h     2003-06-14 12:17:55.000000000 -0700
-+++ 25/drivers/video/sis/vgatypes.h    2003-07-19 17:04:55.000000000 -0700
-@@ -1,3 +1,30 @@
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/vgatypes.h,v 1.0 2001/06/15 21:23:00 dawes Exp $ */
-+/*
-+ * General type definitions for universal mode switching modules
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ *
-+ */
- #ifndef _VGATYPES_
- #define _VGATYPES_
-@@ -5,7 +32,7 @@
- #include "xf86Pci.h"
- #endif
--#ifdef LINUX_KERNEL  /* TW: We don't want the X driver to depend on kernel source */
-+#ifdef LINUX_KERNEL  /* We don't want the X driver to depend on kernel source */
- #include <linux/ioctl.h>
- #endif
-@@ -72,18 +99,15 @@ typedef void VOID;
- typedef UCHAR BOOLEAN;
- #endif
--#ifndef WINCE_HEADER
- #ifndef bool
- typedef UCHAR bool;
- #endif
--#endif /*WINCE_HEADER*/
- #ifndef VBIOS_VER_MAX_LENGTH
- #define VBIOS_VER_MAX_LENGTH         4
- #endif
- #ifndef LINUX_KERNEL   /* For kernel, this is defined in sisfb.h */
--#ifndef WIN2000
- #ifndef SIS_CHIP_TYPE
- typedef enum _SIS_CHIP_TYPE {
-     SIS_VGALegacy = 0,
-@@ -101,19 +125,18 @@ typedef enum _SIS_CHIP_TYPE {
-     SIS_550,
-     SIS_650,
-     SIS_740,
--    SIS_330, 
-+    SIS_330,
-+    SIS_660,
-     MAX_SIS_CHIP
- } SIS_CHIP_TYPE;
- #endif
- #endif
--#endif
--#ifndef WIN2000
- #ifndef SIS_VB_CHIP_TYPE
- typedef enum _SIS_VB_CHIP_TYPE {
-     VB_CHIP_Legacy = 0,
-     VB_CHIP_301,
--    VB_CHIP_301B,      
-+    VB_CHIP_301B,
-     VB_CHIP_301LV,
-     VB_CHIP_302,
-     VB_CHIP_302B,
-@@ -122,9 +145,7 @@ typedef enum _SIS_VB_CHIP_TYPE {
-     MAX_VB_CHIP
- } SIS_VB_CHIP_TYPE;
- #endif
--#endif
--#ifndef WIN2000
- #ifndef SIS_LCD_TYPE
- typedef enum _SIS_LCD_TYPE {
-     LCD_INVALID = 0,
-@@ -136,18 +157,19 @@ typedef enum _SIS_LCD_TYPE {
-     LCD_1600x1200,
-     LCD_1920x1440,
-     LCD_2048x1536,
--    LCD_320x480,       /* TW: FSTN */
-+    LCD_320x480,       /* FSTN, DSTN */
-     LCD_1400x1050,
-     LCD_1152x864,
-     LCD_1152x768,
-     LCD_1280x768,
-     LCD_1024x600,
-+    LCD_640x480_2,     /* FSTN, DSTN */
-+    LCD_640x480_3,     /* FSTN, DSTN */
-+    LCD_CUSTOM,
-     LCD_UNKNOWN
- } SIS_LCD_TYPE;
- #endif
--#endif
--#ifndef WIN2000 /* mark by Paul, Move definition to sisv.h*/
- #ifndef PSIS_DSReg
- typedef struct _SIS_DSReg
- {
-@@ -162,7 +184,6 @@ typedef struct _SIS_HW_DEVICE_INFO  SIS_
- typedef BOOLEAN (*PSIS_QUERYSPACE)   (PSIS_HW_DEVICE_INFO, ULONG, ULONG, ULONG *);
--
- struct _SIS_HW_DEVICE_INFO
- {
-     PVOID  pDevice;              /* The pointer to the physical device data structure
-@@ -173,7 +194,7 @@ struct _SIS_HW_DEVICE_INFO
-                                  /* Note:ROM image file is the file of VBIOS ROM */
-     BOOLEAN UseROM;            /* TW: Use the ROM image if provided */
-- 
-+
-     UCHAR  *pjCustomizedROMImage;/* base virtual address of ROM image file. */
-                                  /* wincE:ROM image file is the file for OEM */
-                                  /*       customized table */
-@@ -195,7 +216,7 @@ struct _SIS_HW_DEVICE_INFO
-                                  /* defined in the data structure type */
-                                  /* "SIS_VB_CHIP_TYPE" */
--    USHORT usExternalChip;       /* NO VB or other video bridge(not  */
-+    USHORT usExternalChip;       /* NO VB or other video bridge (other than  */
-                                  /* SiS video bridge) */
-                                  /* if ujVBChipID = VB_CHIP_UNKNOWN, */
-                                  /* then bit0=1 : LVDS,bit1=1 : trumpion, */
-@@ -207,7 +228,7 @@ struct _SIS_HW_DEVICE_INFO
-                                  /*             011:Trumpion LVDS Scaling Chip */
-                                  /*             100:LVDS(LCD-out)+Chrontel 7005 */
-                                  /*             101:Single Chrontel 7005 */
--                               /* TW: This has changed on 310/325 series! */
-+                               /* TW: This has changed on 315 series! */
-     ULONG  ulCRT2LCDType;        /* defined in the data structure type */
-                                  /* "SIS_LCD_TYPE" */
-@@ -244,7 +265,6 @@ struct _SIS_HW_DEVICE_INFO
- #endif
- };
- #endif
--#endif 
- /* TW: Addtional IOCTL for communication sisfb <> X driver        */
-@@ -288,8 +308,6 @@ struct _SISFB_INFO {
- };
- #endif
--#ifndef WIN2000
--#ifndef WINCE_HEADER
- #ifndef BUS_DATA_TYPE
- typedef enum _BUS_DATA_TYPE {
-     ConfigurationSpaceUndefined = -1,
-@@ -307,7 +325,6 @@ typedef enum _BUS_DATA_TYPE {
-     MaximumBusDataType
- } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
- #endif
--#endif /* WINCE_HEADER */
- #ifndef PCI_TYPE0_ADDRESSES
- #define PCI_TYPE0_ADDRESSES             6
-@@ -317,7 +334,6 @@ typedef enum _BUS_DATA_TYPE {
- #define PCI_TYPE1_ADDRESSES             2
- #endif
--#ifndef WINCE_HEADER
- #ifndef PCI_COMMON_CONFIG
- typedef struct _PCI_COMMON_CONFIG {
-     USHORT  VendorID;                   /* (ro)                 */
-@@ -355,7 +371,6 @@ typedef struct _PCI_COMMON_CONFIG {
- } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
- #endif
--#endif /* WINCE_HEADER */
- #ifndef FIELD_OFFSET
- #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
-@@ -364,6 +379,6 @@ typedef struct _PCI_COMMON_CONFIG {
- #ifndef PCI_COMMON_HDR_LENGTH
- #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
- #endif
--#endif
- #endif
-+
---- linux-2.6.0-test1/drivers/video/sis/vstruct.h      2003-06-14 12:18:25.000000000 -0700
-+++ 25/drivers/video/sis/vstruct.h     2003-07-19 17:04:55.000000000 -0700
-@@ -1,3 +1,32 @@
-+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/vstruct.h,v 1.0 2001/06/15 21:23:00 dawes Exp $ */
-+/*
-+ * General structure definitions for universal mode switching modules
-+ *
-+ * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of the copyright holder not be used in
-+ * advertising or publicity pertaining to distribution of the software without
-+ * specific, written prior permission.  The copyright holder makes no representations
-+ * about the suitability of this software for any purpose.  It is provided
-+ * "as is" without express or implied warranty.
-+ *
-+ * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-+ * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-+ * PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Author:    Thomas Winischhofer <thomas@winischhofer.net>
-+ *              ?
-+ *
-+ */
-+ 
- #ifdef _INIT_
- #define EXTERN
- #else
-@@ -58,7 +87,6 @@ typedef struct _SiS_LVDSCRT1DataStruct
-       UCHAR  CR[15];
- } SiS_LVDSCRT1DataStruct;
--/*add for LCDA*/
- typedef struct _SiS_LCDACRT1DataStruct
- {
-       UCHAR  CR[17];
-@@ -111,9 +139,7 @@ typedef struct _SiS_ExtStruct
-       UCHAR  Ext_ModeID;
-       USHORT Ext_ModeFlag;
-       USHORT Ext_ModeInfo;
--      USHORT Ext_Point;
-       USHORT Ext_VESAID;
--      UCHAR  Ext_VESAMEMSize;
-       UCHAR  Ext_RESINFO;
-       UCHAR  VB_ExtTVFlickerIndex;
-       UCHAR  VB_ExtTVEdgeIndex;
-@@ -130,7 +156,6 @@ typedef struct _SiS_Ext2Struct
-       UCHAR  ModeID;
-       USHORT XRes;
-       USHORT YRes;
--      USHORT ROM_OFFSET;
- } SiS_Ext2Struct;
- typedef struct _SiS_Part2PortTblStruct
-@@ -183,6 +208,12 @@ typedef struct _SiS_ModeResInfoStruct
- typedef UCHAR DRAM4Type[4];
-+/* Defines for SiS_Customt */
-+#define CUT_NONE       0
-+#define CUT_FORCENONE  1
-+#define CUT_BARCO1366  2
-+#define CUT_BARCO1024  3
-+
- typedef struct _SiS_Private
- {
- #ifdef LINUX_KERNEL
-@@ -198,25 +229,34 @@ typedef struct _SiS_Private
-       USHORT SiS_P3c7;
-       USHORT SiS_P3c8;
-       USHORT SiS_P3c9;
-+      USHORT SiS_P3cb;
-+      USHORT SiS_P3cd;
-       USHORT SiS_P3da;
-       USHORT SiS_Part1Port;
-       USHORT SiS_Part2Port;
-       USHORT SiS_Part3Port;
-       USHORT SiS_Part4Port;
-       USHORT SiS_Part5Port;
-+      USHORT SiS_VidCapt;
-+      USHORT SiS_VidPlay;
-       USHORT SiS_IF_DEF_LVDS;
-       USHORT SiS_IF_DEF_TRUMPION;
-       USHORT SiS_IF_DEF_DSTN;
-       USHORT SiS_IF_DEF_FSTN;
-       USHORT SiS_IF_DEF_CH70xx;
-       USHORT SiS_IF_DEF_HiVision;
-+      USHORT SiS_SysFlags;
-       UCHAR  SiS_VGAINFO;
-+#ifndef LINUX_KERNEL
-+        USHORT SiS_CP1, SiS_CP2, SiS_CP3, SiS_CP4;
-+#endif
-       BOOLEAN SiS_UseROM;
-       int    SiS_CHOverScan;
-       BOOLEAN SiS_CHSOverScan;
-       BOOLEAN SiS_ChSW;
-       BOOLEAN SiS_UseLCDA;
-       int    SiS_UseOEM;
-+      ULONG  SiS_CustomT;
-       USHORT SiS_Backup70xx;
-       USHORT SiS_CRT1Mode;
-       USHORT SiS_flag_clearbuffer;
-@@ -270,15 +310,18 @@ typedef struct _SiS_Private
-       USHORT SiS_Panel1280x768;
-       USHORT SiS_Panel1024x600;
-       USHORT SiS_Panel640x480;
-+      USHORT SiS_Panel640x480_2;
-+      USHORT SiS_Panel640x480_3;
-       USHORT SiS_Panel1152x864;
-+      USHORT SiS_PanelCustom;
-+      USHORT SiS_PanelBarco1366;
-       USHORT SiS_PanelMax;
-       USHORT SiS_PanelMinLVDS;
-       USHORT SiS_PanelMin301;
-       USHORT SiS_ChrontelInit;
-       
--      /* Pointers: */
-       const SiS_StStruct          *SiS_SModeIDTable;
--      const SiS_StandTableStruct  *SiS_StandTable;
-+      SiS_StandTableStruct        *SiS_StandTable;
-       const SiS_ExtStruct         *SiS_EModeIDTable;
-       const SiS_Ext2Struct        *SiS_RefIndex;
-       const SiS_VBModeStruct      *SiS_VBModeIDTable;
-@@ -316,7 +359,7 @@ typedef struct _SiS_Private
-       const USHORT *pSiS_RGBSenseData;
-       const USHORT *pSiS_VideoSenseData;
-       const USHORT *pSiS_YCSenseData;
--      const USHORT *pSiS_RGBSenseData2; /*301b*/
-+      const USHORT *pSiS_RGBSenseData2;
-       const USHORT *pSiS_VideoSenseData2;
-       const USHORT *pSiS_YCSenseData2;
- #endif
-@@ -340,15 +383,18 @@ typedef struct _SiS_Private
-       const SiS_LCDDataStruct  *SiS_LCD1280x960Data;
-       const SiS_LCDDataStruct  *SiS_NoScaleData1400x1050;
-       const SiS_LCDDataStruct  *SiS_NoScaleData1600x1200;
-+      const SiS_LCDDataStruct  *SiS_NoScaleData1280x768;
-       const SiS_LCDDataStruct  *SiS_StLCD1400x1050Data;
-       const SiS_LCDDataStruct  *SiS_StLCD1600x1200Data;
-+      const SiS_LCDDataStruct  *SiS_StLCD1280x768Data;
-       const SiS_LCDDataStruct  *SiS_ExtLCD1400x1050Data;
-       const SiS_LCDDataStruct  *SiS_ExtLCD1600x1200Data;
-+      const SiS_LCDDataStruct  *SiS_ExtLCD1280x768Data;
-+      const SiS_LCDDataStruct  *SiS_NoScaleData;
-       const SiS_TVDataStruct   *SiS_StPALData;
-       const SiS_TVDataStruct   *SiS_ExtPALData;
-       const SiS_TVDataStruct   *SiS_StNTSCData;
-       const SiS_TVDataStruct   *SiS_ExtNTSCData;
--/*    const SiS_TVDataStruct   *SiS_St1HiTVData;  */
-       const SiS_TVDataStruct   *SiS_St2HiTVData;
-       const SiS_TVDataStruct   *SiS_ExtHiTVData;
-       const UCHAR *SiS_NTSCTiming;
-@@ -381,12 +427,17 @@ typedef struct _SiS_Private
-       const SiS_LVDSDataStruct  *SiS_LVDS1152x768Data_1;
-       const SiS_LVDSDataStruct  *SiS_LVDS1152x768Data_2;
-       const SiS_LVDSDataStruct  *SiS_LVDS640x480Data_1;
-+      const SiS_LVDSDataStruct  *SiS_LVDS640x480Data_2;
-       const SiS_LVDSDataStruct  *SiS_LVDS320x480Data_1;
-       const SiS_LVDSDataStruct  *SiS_LCDA1400x1050Data_1;
-       const SiS_LVDSDataStruct  *SiS_LCDA1400x1050Data_2;
-       const SiS_LVDSDataStruct  *SiS_LCDA1600x1200Data_1;
-       const SiS_LVDSDataStruct  *SiS_LCDA1600x1200Data_2;
-       const SiS_LVDSDataStruct  *SiS_LVDSXXXxXXXData_1;
-+      const SiS_LVDSDataStruct  *SiS_LVDSBARCO1366Data_1;
-+      const SiS_LVDSDataStruct  *SiS_LVDSBARCO1366Data_2;
-+      const SiS_LVDSDataStruct  *SiS_LVDSBARCO1024Data_1;
-+      const SiS_LVDSDataStruct  *SiS_LVDSBARCO1024Data_2;
-       const SiS_LVDSDataStruct  *SiS_CHTVUNTSCData;
-       const SiS_LVDSDataStruct  *SiS_CHTVONTSCData;
-       const SiS_LVDSDataStruct  *SiS_CHTVUPALData;
-@@ -478,6 +529,12 @@ typedef struct _SiS_Private
-       const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT11600x1200_2_H;
-       const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1XXXxXXX_1;
-       const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1XXXxXXX_1_H;
-+      const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1640x480_1;
-+      const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1640x480_1_H;
-+      const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1640x480_2;
-+      const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1640x480_2_H;
-+      const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1640x480_3;
-+      const SiS_LVDSCRT1DataStruct  *SiS_LVDSCRT1640x480_3_H;
-       const SiS_LVDSCRT1DataStruct  *SiS_CHTVCRT1UNTSC;
-       const SiS_LVDSCRT1DataStruct  *SiS_CHTVCRT1ONTSC;
-       const SiS_LVDSCRT1DataStruct  *SiS_CHTVCRT1UPAL;
-@@ -507,7 +564,6 @@ typedef struct _SiS_Private
-       const SiS_LCDACRT1DataStruct  *SiS_LCDACRT11400x1050_2_H;
-       const SiS_LCDACRT1DataStruct  *SiS_LCDACRT11600x1200_2_H;
--      /* TW: New for 650/301LV */
-       const SiS_Part2PortTblStruct *SiS_CRT2Part2_1024x768_1;
-       const SiS_Part2PortTblStruct *SiS_CRT2Part2_1280x1024_1;
-       const SiS_Part2PortTblStruct *SiS_CRT2Part2_1400x1050_1;
-@@ -539,6 +595,9 @@ typedef struct _SiS_Private
-       const UCHAR *SiS_CHTVVCLKUPALN;
-       const UCHAR *SiS_CHTVVCLKOPALN;
-       const UCHAR *SiS_CHTVVCLKSOPAL;
-+
-+      USHORT  PanelXRes;
-+      USHORT  PanelYRes;
-       
-       BOOLEAN UseCustomMode;
-       BOOLEAN CRT1UsesCustomMode;
-@@ -560,8 +619,11 @@ typedef struct _SiS_Private
-       UCHAR   CSR2B;
-       UCHAR   CSR2C;
-       USHORT  CSRClock;
-+      USHORT  CSRClock_CRT1;
-       USHORT  CModeFlag;
-+      USHORT  CModeFlag_CRT1;
-       USHORT  CInfoFlag;
-+
-       BOOLEAN SiS_CHPALM;
-       BOOLEAN SiS_CHPALN;
-       
-@@ -578,7 +640,21 @@ typedef struct _SiS_Private
-       UCHAR Backup_1c;
-       UCHAR Backup_1d;
-       
--      int    UsePanelScaler;
-+      int     UsePanelScaler;
-+
-+      USHORT  CP_Vendor, CP_Product;
-+      BOOLEAN CP_HaveCustomData;
-+      int     CP_PreferredX, CP_PreferredY;
-+      int     CP_MaxX, CP_MaxY, CP_MaxClock;
-+      int     CP_HDisplay[7], CP_VDisplay[7]; /* For Custom LCD panel dimensions */
-+      int     CP_HTotal[7], CP_VTotal[7];
-+      int     CP_HSyncStart[7], CP_VSyncStart[7];
-+      int     CP_HSyncEnd[7], CP_VSyncEnd[7];
-+      int     CP_HBlankStart[7], CP_VBlankStart[7];
-+      int     CP_HBlankEnd[7], CP_VBlankEnd[7];
-+      int     CP_Clock[7];
-+      BOOLEAN CP_DataValid[7];
-+      BOOLEAN CP_HSync_P[7], CP_VSync_P[7], CP_SyncValid[7];
- } SiS_Private;
- #endif
---- linux-2.6.0-test1/drivers/video/skeletonfb.c       2003-06-14 12:17:59.000000000 -0700
-+++ 25/drivers/video/skeletonfb.c      2003-07-19 17:04:55.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * linux/drivers/video/skeletonfb.c -- Skeleton for a frame buffer device
-  *
-- *  Modified to new api Jan 2001 by James Simmons (jsimmons@transvirtual.com)
-+ *  Modified to new api Jan 2001 by James Simmons (jsimmons@infradead.org)
-  *
-  *  Created 28 Dec 1997 by Geert Uytterhoeven
-  *
-@@ -469,15 +469,71 @@ void xxxfb_imageblit(struct fb_info *p, 
- int xxxfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
- {
- /*
-- *      @set:         Which fields we are altering in struct fb_cursor 
-+ *      @set:          Which fields we are altering in struct fb_cursor 
-  *    @enable: Disable or enable the cursor 
-- *      @rop:         The bit operation we want to do. 
-- *      @mask:  This is the cursor mask bitmap. 
-- *      @dest:  A image of the area we are going to display the cursor.
-- *            Used internally by the driver.   
-- *      @hot: The hot spot. 
-- *    @image: The actual data for the cursor image.
-+ *      @rop:          The bit operation we want to do. 
-+ *      @hot:  The hot spot. 
-+ *    @image:  The actual data for the cursor image.
-+ *      @mask:   This is the cursor mask bitmap. 
-  */
-+
-+   /* Disable hardware cursor. We don't want to display the cursor 
-+      while changing it. Note we use the enable and rop fields in
-+      struct fb_cursor that is apart of struct fb_info. Not the 
-+      cursor data passed in from userland. */ 
-+
-+   if (cursor->set & FB_CUR_SETHOT) {
-+      info->cursor.hot = cursor->hot;
-+      /* Set the hardware cursor's hot spot  */                       
-+   }
-+      
-+   if (cursor->set & FB_CUR_SETPOS) {
-+      info->cursor.image.dx = cursor->image.dx;
-+      info->cursor.image.dy = cursor->image.dy;
-+      /* Set the hardware cursor's position */
-+   }
-+
-+   if (cursor->set & FB_CUR_SETSIZE) {
-+      info->cursor.image.height = cursor->image.height;
-+      info->cursor.image.width = cursor->image.width;
-+      /* Set the hardware cursor's size */    
-+   }
-+  
-+   if (cursor->set & FB_CUR_SETCMAP) {
-+      if (cursor->image.depth == 1) {
-+              info->cursor.image.fg_color = cursor->image.fg_color;
-+              info->cursor.image.bg_color = cursor->image.bg_color;
-+      } else {
-+              if (cursor->image.cmap.len)
-+                      fb_copy_cmap(&cursor->image.cmap, &info->cursor.image.cmap, 0);
-+      }
-+      info->curosr.image.depth = cursor->image.depth;
-+
-+      /* Set the hardware cursor's color map */
-+   }
-+
-+   /* 
-+    * Set the cursor shape. The two pieces needed to create
-+    * the final image is mask and image.data. The mask is 
-+    * combined with image.data according to the rop field.
-+    */
-+   if (cursor->set & FB_CUR_SETSHAPE) {
-+      switch (info->cursor.rop) {
-+      case ROP_XOR:
-+              /* ... */
-+              break;
-+      case ROP_COPY:
-+      default:
-+              /* ... */
-+              break;
-+      }
-+      /* ... */
-+   }
-+   
-+   if (info->cursor.enable) {
-+      /* Now we turn the hardware cursor on */
-+   }
-+   return 0;                                          
- }
- /**
---- linux-2.6.0-test1/drivers/video/softcursor.c       2003-06-14 12:18:22.000000000 -0700
-+++ 25/drivers/video/softcursor.c      2003-07-19 17:04:55.000000000 -0700
-@@ -21,9 +21,14 @@ int soft_cursor(struct fb_info *info, st
- {
-       unsigned int scan_align = info->pixmap.scan_align - 1;
-       unsigned int buf_align = info->pixmap.buf_align - 1;
--      unsigned int i, size, dsize, s_pitch, d_pitch;
--      u8 *dst, src[64];
--
-+      u8 *dst = (u8 *) info->cursor.image.data;
-+      unsigned int i, size, pitch;
-+              
-+      pitch = ((info->cursor.image.width + 7) >> 3) + scan_align;
-+      pitch &= ~scan_align;
-+      size = pitch * info->cursor.image.height + buf_align;
-+      size &= ~buf_align;
-+      
-       if (cursor->set & FB_CUR_SETSIZE) {
-               info->cursor.image.height = cursor->image.height;
-               info->cursor.image.width = cursor->image.width;
-@@ -48,34 +53,27 @@ int soft_cursor(struct fb_info *info, st
-               info->cursor.image.depth = cursor->image.depth;
-       }       
--      s_pitch = (info->cursor.image.width + 7) >> 3;
--      dsize = s_pitch * info->cursor.image.height;
--      d_pitch = (s_pitch + scan_align) & ~scan_align;
--      size = d_pitch * info->cursor.image.height + buf_align;
--      size &= ~buf_align;
--      dst = info->pixmap.addr + fb_get_buffer_offset(info, size);
--
--      if (info->cursor.enable) {
-+      if (cursor->set & FB_CUR_SETSHAPE) {
-               switch (info->cursor.rop) {
-               case ROP_XOR:
--                      for (i = 0; i < dsize; i++)
--                              src[i] = cursor->image.data[i] ^ info->cursor.mask[i]; 
-+                      for (i = 0; i < size; i++)
-+                              dst[i] ^= info->cursor.mask[i]; 
-                       break;
-               case ROP_COPY:
-               default:
--                      for (i = 0; i < dsize; i++)
--                              src[i] = cursor->image.data[i] & info->cursor.mask[i];
-+                      for (i = 0; i < size; i++)
-+                              dst[i] &= info->cursor.mask[i];
-                       break;
-               }
--      } else 
--              memcpy(src, cursor->image.data, dsize);
--      
--      move_buf_aligned(info, dst, src, d_pitch, s_pitch, info->cursor.image.height);
--      info->cursor.image.data = dst;
-+      }
-       
--      info->fbops->fb_imageblit(info, &info->cursor.image);
--      atomic_dec(&info->pixmap.count);
--      smp_mb__after_atomic_dec();
-+      if (!info->cursor.enable) {
-+              for (i = 0; i < size; i++)
-+                      dst[i] ^= info->cursor.mask[i]; 
-+      }
-+              
-+      if (info->cursor.image.data)
-+              info->fbops->fb_imageblit(info, &info->cursor.image);
-       return 0;
- }
---- linux-2.6.0-test1/drivers/video/valkyriefb.c       2003-06-14 12:18:30.000000000 -0700
-+++ 25/drivers/video/valkyriefb.c      2003-07-19 17:04:55.000000000 -0700
-@@ -51,7 +51,6 @@
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/fb.h>
--#include <linux/selection.h>
- #include <linux/init.h>
- #include <linux/pci.h>
- #include <linux/nvram.h>
-@@ -66,15 +65,9 @@
- #endif
- #include <asm/pgtable.h>
--#include <video/fbcon.h>
--#include <video/fbcon-cfb8.h>
--#include <video/fbcon-cfb16.h>
--#include <video/macmodes.h>
--
-+#include "macmodes.h"
- #include "valkyriefb.h"
--static int can_soft_blank = 1;
--
- #ifdef CONFIG_MAC
- /* We don't yet have functions to read the PRAM... perhaps we can
-    adapt them from the PPC code? */
-@@ -84,27 +77,17 @@ static int default_cmode = CMODE_8;
- static int default_vmode = VMODE_NVRAM;
- static int default_cmode = CMODE_NVRAM;
- #endif
--static char fontname[40] __initdata = { 0 };
--
--static int switching = 0;
- struct fb_par_valkyrie {
-       int     vmode, cmode;
-       int     xres, yres;
-       int     vxres, vyres;
--      int     xoffset, yoffset;
-+      struct valkyrie_regvals *init;
- };
- struct fb_info_valkyrie {
--      struct fb_info                  info;
--      struct fb_fix_screeninfo        fix;
--      struct fb_var_screeninfo        var;
--      struct display                  disp;
--      struct fb_par_valkyrie          par;
--      struct {
--          __u8 red, green, blue;
--      }                       palette[256];
--      
-+      struct fb_info          info;
-+      struct fb_par_valkyrie  par;
-       struct cmap_regs        *cmap_regs;
-       unsigned long           cmap_regs_phys;
-       
-@@ -116,9 +99,8 @@ struct fb_info_valkyrie {
-       
-       int                     sense;
-       unsigned long           total_vram;
--#ifdef FBCON_HAS_CFB16
--      u16 fbcon_cfb16_cmap[16];
--#endif
-+
-+      u32                     pseudo_palette[16];
- };
- /*
-@@ -127,10 +109,9 @@ struct fb_info_valkyrie {
- int valkyriefb_init(void);
- int valkyriefb_setup(char*);
--static int valkyrie_set_var(struct fb_var_screeninfo *var, int con,
--                       struct fb_info *info);
--static int valkyrie_get_cmap(struct fb_cmap *cmap, int kspc, int con,
--                        struct fb_info *info);
-+static int valkyriefb_check_var(struct fb_var_screeninfo *var,
-+                              struct fb_info *info);
-+static int valkyriefb_set_par(struct fb_info *info);
- static int valkyriefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
-                            u_int transp, struct fb_info *info);
- static int valkyriefb_blank(int blank_mode, struct fb_info *info);
-@@ -138,136 +119,69 @@ static int valkyriefb_blank(int blank_mo
- static int read_valkyrie_sense(struct fb_info_valkyrie *p);
- static inline int valkyrie_vram_reqd(int video_mode, int color_mode);
- static void set_valkyrie_clock(unsigned char *params);
--static void valkyrie_set_par(const struct fb_par_valkyrie *p, struct fb_info_valkyrie *info);
- static inline int valkyrie_par_to_var(struct fb_par_valkyrie *par, struct fb_var_screeninfo *var);
- static int valkyrie_var_to_par(struct fb_var_screeninfo *var,
-       struct fb_par_valkyrie *par, const struct fb_info *fb_info);
- static void valkyrie_init_info(struct fb_info *info, struct fb_info_valkyrie *p);
--static void valkyrie_par_to_display(struct fb_par_valkyrie *par,
--  struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p);
--static void valkyrie_init_display(struct display *disp);
--static void valkyrie_par_to_fix(struct fb_par_valkyrie *par, struct fb_fix_screeninfo *fix,
--      struct fb_info_valkyrie *p);
-+static void valkyrie_par_to_fix(struct fb_par_valkyrie *par, struct fb_fix_screeninfo *fix);
- static void valkyrie_init_fix(struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p);
- static struct fb_ops valkyriefb_ops = {
-       .owner =        THIS_MODULE,
--      .fb_set_var =   valkyrie_set_var,
--      .fb_get_cmap =  valkyrie_get_cmap,
--      .fb_set_cmap =  gen_set_cmap,
-+      .fb_check_var = valkyriefb_check_var,
-+      .fb_set_par =   valkyriefb_set_par,
-       .fb_setcolreg = valkyriefb_setcolreg,
-       .fb_blank =     valkyriefb_blank,
-+      .fb_fillrect    = cfb_fillrect,
-+      .fb_copyarea    = cfb_copyarea,
-+      .fb_imageblit   = cfb_imageblit,
-+      .fb_cursor      = soft_cursor,
- };
--static int valkyriefb_getcolreg(u_int regno, u_int *red, u_int *green,
--                           u_int *blue, u_int *transp, struct fb_info *info);
--
--/* Sets everything according to var */
--static int valkyrie_set_var(struct fb_var_screeninfo *var, int con,
--                       struct fb_info *info)
-+/* Sets the video mode according to info->var */
-+static int valkyriefb_set_par(struct fb_info *info)
- {
-       struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
--      struct display *disp;
--      struct fb_par_valkyrie par;
--      int depthchange, err;
-+      volatile struct valkyrie_regs *valkyrie_regs = p->valkyrie_regs;
-+      struct fb_par_valkyrie *par = info->par;
-+      struct valkyrie_regvals *init;
-+      int err;
--      disp = (con >= 0) ? &fb_display[con] : &p->disp;
--      if ((err = valkyrie_var_to_par(var, &par, info))) {
--               /* printk (KERN_ERR "Error in valkyrie_set_var, calling valkyrie_var_to_par: %d.\n", err); */
-+      if ((err = valkyrie_var_to_par(&info->var, par, info)))
-               return err;
--      }
--      
--      if ((var->activate & FB_ACTIVATE_MASK) != FB_ACTIVATE_NOW) {
--              /* printk(KERN_ERR "Not activating, in valkyrie_set_var.\n"); */
--              valkyrie_par_to_var(&par, var);
--              return 0;
--      }
--      /*
--       * I know, we want to use fb_display[con], but grab certain info
--       * from p->var instead.
--       */
--#define DIRTY(x) (p->var.x != var->x)
--      depthchange = DIRTY(bits_per_pixel);
--      /* adding "&& !DIRTY(pixclock)" corrects vmode-switching problems */
--      if(!DIRTY(xres) && !DIRTY(yres) && !DIRTY(xres_virtual) &&
--         !DIRTY(yres_virtual) && !DIRTY(bits_per_pixel) && !DIRTY(pixclock)) {
--              valkyrie_par_to_var(&par, var);
--              p->var = disp->var = *var;
--              return 0;
--      }
-+      valkyrie_par_to_fix(par, &info->fix);
--      p->par = par;
--      valkyrie_par_to_var(&par, var);
--      p->var = *var;
--      valkyrie_par_to_fix(&par, &p->fix, p);
--      valkyrie_par_to_display(&par, disp, &p->fix, p);
--      p->disp = *disp;
--      
--      if (info->changevar && !switching) {
--              /* Don't want to do this if just switching consoles. */
--              (*info->changevar)(con);
--      }
--      if (con == info->currcon)
--              valkyrie_set_par(&par, p);
--      if (depthchange)
--              if ((err = fb_alloc_cmap(&disp->cmap, 0, 0)))
--                      return err;
--      if (depthchange || switching)
--              do_install_cmap(con, info);
--      return 0;
--}
-+      /* Reset the valkyrie */
-+      out_8(&valkyrie_regs->status.r, 0);
-+      udelay(100);
--static int valkyrie_get_cmap(struct fb_cmap *cmap, int kspc, int con,
--                        struct fb_info *info)
--{
--      if (con == info->currcon)       {
--              /* current console? */
--              return fb_get_cmap(cmap, kspc, valkyriefb_getcolreg, info);
--      }
--      if (fb_display[con].cmap.len) { /* non default colormap? */
--              fb_copy_cmap(&fb_display[con].cmap, cmap, kspc? 0: 2);
--      }
--      else {
--              int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
--              fb_copy_cmap(fb_default_cmap(size), cmap, kspc ? 0 : 2);
--      }
--      return 0;
--}
-+      /* Initialize display timing registers */
-+      init = par->init;
-+      out_8(&valkyrie_regs->mode.r, init->mode | 0x80);
-+      out_8(&valkyrie_regs->depth.r, par->cmode + 3);
-+      set_valkyrie_clock(init->clock_params);
-+      udelay(100);
--static int valkyriefb_switch(int con, struct fb_info *fb)
--{
--      struct fb_info_valkyrie *info = (struct fb_info_valkyrie *) fb;
--      struct fb_par_valkyrie par;
-+      /* Turn on display */
-+      out_8(&valkyrie_regs->mode.r, init->mode);
--      if (fb_display[fb->currcon].cmap.len)
--              fb_get_cmap(&fb_display[fb->currcon].cmap, 1, valkyriefb_getcolreg,
--                          fb);
--      fb->currcon = con;
--#if 1
--      valkyrie_var_to_par(&fb_display[fb->currcon].var, &par, fb);
--      valkyrie_set_par(&par, info);
--      do_install_cmap(con, fb);
--#else
--      /* I see no reason not to do this.  Minus info->changevar(). */
--      /* DOH.  This makes valkyrie_set_var compare, you guessed it, */
--      /* fb_display[con].var (first param), and fb_display[con].var! */
--      /* Perhaps I just fixed that... */
--      switching = 1;
--      valkyrie_set_var(&fb_display[con].var, con, info);
--      switching = 0;
--#endif
-       return 0;
- }
--static int valkyriefb_updatevar(int con, struct fb_info *info)
-+static int
-+valkyriefb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
- {
-+      int err;
-+      struct fb_par_valkyrie par;
-+
-+      if ((err = valkyrie_var_to_par(var, &par, info)))
-+              return err;
-+      valkyrie_par_to_var(&par, var);
-       return 0;
- }
--static int valkyriefb_blank(int blank_mode, struct fb_info *info)
--{
- /*
-  *  Blank the screen if blank_mode != 0, else unblank. If blank_mode == NULL
-  *  then the caller blanks by setting the CLUT (Color Look Up Table) to all
-@@ -278,48 +192,34 @@ static int valkyriefb_blank(int blank_mo
-  *    blank_mode == 3: suspend hsync
-  *    blank_mode == 4: powerdown
-  */
--      struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
--      struct valkyrie_regvals *init;
--      unsigned char vmode;
--
--      if (p->disp.can_soft_blank
--       && ((vmode = p->par.vmode) > 0)
--       && (vmode <= VMODE_MAX)
--       && ((init = valkyrie_reg_init[vmode - 1]) != NULL)) {
--              if (blank_mode)
--                      --blank_mode;
--              switch (blank_mode) {
--              default:        /* unblank */
--                      out_8(&p->valkyrie_regs->mode.r, init->mode);
--                      break;
--              case VESA_VSYNC_SUSPEND:
--              case VESA_HSYNC_SUSPEND:
--                      /*
--                       * [kps] Value extracted from MacOS. I don't know
--                       * whether this bit disables hsync or vsync, or
--                       * whether the hardware can do the other as well.
--                       */
--                      out_8(&p->valkyrie_regs->mode.r, init->mode | 0x40);
--                      break;
--              case VESA_POWERDOWN:
--                      out_8(&p->valkyrie_regs->mode.r, 0x66);
--                      break;
--              }
--      }
--      return 0;
--}
--
--static int valkyriefb_getcolreg(u_int regno, u_int *red, u_int *green,
--                           u_int *blue, u_int *transp, struct fb_info *info)
-+static int valkyriefb_blank(int blank_mode, struct fb_info *info)
- {
-       struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
-+      struct fb_par_valkyrie *par = info->par;
-+      struct valkyrie_regvals *init = par->init;
--      if (regno > 255)
-+      if (init == NULL)
-               return 1;
--      *red = (p->palette[regno].red<<8) | p->palette[regno].red;
--      *green = (p->palette[regno].green<<8) | p->palette[regno].green;
--      *blue = (p->palette[regno].blue<<8) | p->palette[regno].blue;
-+      switch (blank_mode) {
-+      case 0:                 /* unblank */
-+              out_8(&p->valkyrie_regs->mode.r, init->mode);
-+              break;
-+      case 1:
-+              return 1;       /* get caller to set CLUT to all black */
-+      case VESA_VSYNC_SUSPEND+1:
-+      case VESA_HSYNC_SUSPEND+1:
-+              /*
-+               * [kps] Value extracted from MacOS. I don't know
-+               * whether this bit disables hsync or vsync, or
-+               * whether the hardware can do the other as well.
-+               */
-+              out_8(&p->valkyrie_regs->mode.r, init->mode | 0x40);
-+              break;
-+      case VESA_POWERDOWN+1:
-+              out_8(&p->valkyrie_regs->mode.r, 0x66);
-+              break;
-+      }
-       return 0;
- }
-@@ -328,16 +228,13 @@ static int valkyriefb_setcolreg(u_int re
- {
-       struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) info;
-       volatile struct cmap_regs *cmap_regs = p->cmap_regs;
--
-+      struct fb_par_valkyrie *par = info->par;
-       if (regno > 255)
-               return 1;
-       red >>= 8;
-       green >>= 8;
-       blue >>= 8;
--      p->palette[regno].red = red;
--      p->palette[regno].green = green;
--      p->palette[regno].blue = blue;
-       /* tell clut which address to fill */
-       out_8(&p->cmap_regs->addr, regno);
-@@ -347,11 +244,9 @@ static int valkyriefb_setcolreg(u_int re
-       out_8(&cmap_regs->lut, green);
-       out_8(&cmap_regs->lut, blue);
--      if (regno < 16) {
--#ifdef FBCON_HAS_CFB16
--              p->fbcon_cfb16_cmap[regno] = (regno << 10) | (regno << 5) | regno;
--#endif
--      }
-+      if (regno < 16 && par->cmode == CMODE_16)
-+              ((u32 *)info->pseudo_palette)[regno] =
-+                      (regno << 10) | (regno << 5) | regno;
-       return 0;
- }
-@@ -359,10 +254,11 @@ static int valkyriefb_setcolreg(u_int re
- static int valkyrie_vram_reqd(int video_mode, int color_mode)
- {
-       int pitch;
-+      struct valkyrie_regvals *init = valkyrie_reg_init[video_mode-1];
-       
--      if ((pitch = valkyrie_reg_init[video_mode-1]->pitch[color_mode]) == 0)
--              pitch = 2 * valkyrie_reg_init[video_mode-1]->pitch[0];
--      return valkyrie_reg_init[video_mode-1]->vres * pitch;
-+      if ((pitch = init->pitch[color_mode]) == 0)
-+              pitch = 2 * init->pitch[0];
-+      return init->vres * pitch;
- }
- static void set_valkyrie_clock(unsigned char *params)
-@@ -380,14 +276,10 @@ static void set_valkyrie_clock(unsigned 
- #endif
- }
--static void __init init_valkyrie(struct fb_info_valkyrie *p)
-+static void __init valkyrie_choose_mode(struct fb_info_valkyrie *p)
- {
--      struct fb_par_valkyrie *par = &p->par;
--      struct fb_var_screeninfo var;
--      int j, k;
--
-       p->sense = read_valkyrie_sense(p);
--      printk(KERN_INFO "Monitor sense value = 0x%x, ", p->sense);
-+      printk(KERN_INFO "Monitor sense value = 0x%x\n", p->sense);
-       /* Try to pick a video mode out of NVRAM if we have one. */
- #ifndef CONFIG_MAC
-@@ -409,80 +301,22 @@ static void __init init_valkyrie(struct 
- #endif
-       /*
--       * Reduce the pixel size if we don't have enough VRAM or bandwitdh.
-+       * Reduce the pixel size if we don't have enough VRAM or bandwidth.
-        */
--      if (default_cmode < CMODE_8
--       || default_cmode > CMODE_16
--       || valkyrie_reg_init[default_vmode-1]->pitch[default_cmode] == 0
--       || valkyrie_vram_reqd(default_vmode, default_cmode) > p->total_vram)
-+      if (default_cmode < CMODE_8 || default_cmode > CMODE_16
-+          || valkyrie_reg_init[default_vmode-1]->pitch[default_cmode] == 0
-+          || valkyrie_vram_reqd(default_vmode, default_cmode) > p->total_vram)
-               default_cmode = CMODE_8;
--      
--      printk(KERN_INFO "using video mode %d and color mode %d.\n", default_vmode, default_cmode);
--      mac_vmode_to_var(default_vmode, default_cmode, &var);
--      if (valkyrie_var_to_par(&var, par, &p->info)) {
--          printk(KERN_ERR "valkyriefb: can't set default video mode\n");
--          return ;
--      }
--      
--      valkyrie_init_fix(&p->fix, p);
--      valkyrie_par_to_fix(&p->par, &p->fix, p);
--      valkyrie_par_to_var(&p->par, &p->var);
--      valkyrie_init_display(&p->disp);
--      valkyrie_par_to_display(&p->par, &p->disp, &p->fix, p);
--      valkyrie_init_info(&p->info, p);
--
--      /* Initialize colormap */
--      for (j = 0; j < 16; j++) {
--              k = color_table[j];
--              p->palette[j].red = default_red[k];
--              p->palette[j].green = default_grn[k];
--              p->palette[j].blue = default_blu[k];
--      }
--      
--      valkyrie_set_var (&var, -1, &p->info);
--
--      if (register_framebuffer(&p->info) < 0) {
--              kfree(p);
--              return;
--      }
--      
--      printk(KERN_INFO "fb%d: valkyrie frame buffer device\n", p->info.node); 
--}
--
--static void valkyrie_set_par(const struct fb_par_valkyrie *par,
--                           struct fb_info_valkyrie *p)
--{
--      struct valkyrie_regvals *init;
--      volatile struct valkyrie_regs *valkyrie_regs = p->valkyrie_regs;
--      int vmode, cmode;
--      
--      vmode = par->vmode;
--      cmode = par->cmode;
--      
--      if (vmode <= 0
--       || vmode > VMODE_MAX
--       || (init = valkyrie_reg_init[vmode - 1]) == NULL)
--              panic("valkyrie: display mode %d not supported", vmode);
--
--      /* Reset the valkyrie */
--      out_8(&valkyrie_regs->status.r, 0);
--      udelay(100);
--
--      /* Initialize display timing registers */
--      out_8(&valkyrie_regs->mode.r, init->mode | 0x80);
--      out_8(&valkyrie_regs->depth.r, cmode + 3);
--      set_valkyrie_clock(init->clock_params);
--      udelay(100);
--
--      /* Turn on display */
--      out_8(&valkyrie_regs->mode.r, init->mode);
-+      printk(KERN_INFO "using video mode %d and color mode %d.\n",
-+             default_vmode, default_cmode);
- }
- int __init valkyriefb_init(void)
- {
-       struct fb_info_valkyrie *p;
-       unsigned long frame_buffer_phys, cmap_regs_phys, flags;
-+      int err;
- #ifdef CONFIG_MAC
-       if (!MACH_IS_MAC)
-@@ -503,10 +337,11 @@ int __init valkyriefb_init(void)
-       if (dp == 0)
-               return 0;
--      if(dp->n_addrs != 1) {
--              printk(KERN_ERR "expecting 1 address for valkyrie (got %d)", dp->n_addrs);
-+      if (dp->n_addrs != 1) {
-+              printk(KERN_ERR "expecting 1 address for valkyrie (got %d)\n",
-+                     dp->n_addrs);
-               return 0;
--      }       
-+      }
-       frame_buffer_phys = dp->addrs[0].address;
-       cmap_regs_phys = dp->addrs[0].address+0x304000;
-@@ -515,7 +350,7 @@ int __init valkyriefb_init(void)
-       p = kmalloc(sizeof(*p), GFP_ATOMIC);
-       if (p == 0)
--              return 0;
-+              return -ENOMEM;
-       memset(p, 0, sizeof(*p));
-       /* Map in frame buffer and registers */
-@@ -524,14 +359,42 @@ int __init valkyriefb_init(void)
-               return 0;
-       }
-       p->total_vram = 0x100000;
--      p->frame_buffer_phys  = frame_buffer_phys;
-+      p->frame_buffer_phys = frame_buffer_phys;
-       p->frame_buffer = __ioremap(frame_buffer_phys, p->total_vram, flags);
-       p->cmap_regs_phys = cmap_regs_phys;
-       p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000);
-       p->valkyrie_regs_phys = cmap_regs_phys+0x6000;
-       p->valkyrie_regs = ioremap(p->valkyrie_regs_phys, 0x1000);
--      init_valkyrie(p);
-+      err = -ENOMEM;
-+      if (p->frame_buffer == NULL || p->cmap_regs == NULL
-+          || p->valkyrie_regs == NULL) {
-+              printk(KERN_ERR "valkyriefb: couldn't map resources\n");
-+              goto out_free;
-+      }
-+
-+      valkyrie_choose_mode(p);
-+      mac_vmode_to_var(default_vmode, default_cmode, &p->info.var);
-+      valkyrie_init_info(&p->info, p);
-+      valkyrie_init_fix(&p->info.fix, p);
-+      if (valkyriefb_set_par(&p->info))
-+              /* "can't happen" */
-+              printk(KERN_ERR "valkyriefb: can't set default video mode\n");
-+
-+      if ((err = register_framebuffer(&p->info)) != 0)
-+              goto out_free;
-+
-+      printk(KERN_INFO "fb%d: valkyrie frame buffer device\n", p->info.node);
-       return 0;
-+
-+ out_free:
-+      if (p->frame_buffer)
-+              iounmap(p->frame_buffer);
-+      if (p->cmap_regs)
-+              iounmap(p->cmap_regs);
-+      if (p->valkyrie_regs)
-+              iounmap(p->valkyrie_regs);
-+      kfree(p);
-+      return err;
- }
- /*
-@@ -541,22 +404,22 @@ static int read_valkyrie_sense(struct fb
- {
-       int sense, in;
--    out_8(&p->valkyrie_regs->msense.r, 0);   /* release all lines */
--    __delay(20000);
--    sense = ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x70) << 4;
--    /* drive each sense line low in turn and collect the other 2 */
--    out_8(&p->valkyrie_regs->msense.r, 4);   /* drive A low */
--    __delay(20000);
--    sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x30);
--    out_8(&p->valkyrie_regs->msense.r, 2);   /* drive B low */
--    __delay(20000);
--    sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x40) >> 3;
-+      out_8(&p->valkyrie_regs->msense.r, 0);   /* release all lines */
-+      __delay(20000);
-+      sense = ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x70) << 4;
-+      /* drive each sense line low in turn and collect the other 2 */
-+      out_8(&p->valkyrie_regs->msense.r, 4);   /* drive A low */
-+      __delay(20000);
-+      sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x30);
-+      out_8(&p->valkyrie_regs->msense.r, 2);   /* drive B low */
-+      __delay(20000);
-+      sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x40) >> 3;
-       sense |= (in & 0x10) >> 2;
--    out_8(&p->valkyrie_regs->msense.r, 1);   /* drive C low */
--    __delay(20000);
--    sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x60) >> 5;
-+      out_8(&p->valkyrie_regs->msense.r, 1);   /* drive C low */
-+      __delay(20000);
-+      sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x60) >> 5;
--    out_8(&p->valkyrie_regs->msense.r, 7);
-+      out_8(&p->valkyrie_regs->msense.r, 7);
-       return sense;
- }
-@@ -565,8 +428,6 @@ static int read_valkyrie_sense(struct fb
-  * This routine takes a user-supplied var,
-  * and picks the best vmode/cmode from it.
-  */
--static int valkyrie_var_to_par(struct fb_var_screeninfo *var,
--      struct fb_par_valkyrie *par, const struct fb_info *fb_info)
- /* [bkn] I did a major overhaul of this function.
-  *
-@@ -589,55 +450,56 @@ static int valkyrie_var_to_par(struct fb
-  * good start...
-  */
-+static int valkyrie_var_to_par(struct fb_var_screeninfo *var,
-+      struct fb_par_valkyrie *par, const struct fb_info *fb_info)
- {
--      int bpp = var->bits_per_pixel;
-+      int vmode, cmode;
-       struct valkyrie_regvals *init;
-       struct fb_info_valkyrie *p = (struct fb_info_valkyrie *) fb_info;
--
--      if(mac_var_to_vmode(var, &par->vmode, &par->cmode) != 0) {
--              printk(KERN_ERR "valkyrie_var_to_par: %dx%dx%d unsuccessful.\n",var->xres,var->yres,var->bits_per_pixel);
-+      if (mac_var_to_vmode(var, &vmode, &cmode) != 0) {
-+              printk(KERN_ERR "valkyriefb: can't do %dx%dx%d.\n",
-+                     var->xres, var->yres, var->bits_per_pixel);
-               return -EINVAL;
-       }
-       /* Check if we know about the wanted video mode */
--      if(!valkyrie_reg_init[par->vmode-1]) {
--              printk(KERN_ERR "valkyrie_var_to_par: vmode %d not valid.\n", par->vmode);
-+      if (vmode < 1 || vmode > VMODE_MAX || !valkyrie_reg_init[vmode-1]) {
-+              printk(KERN_ERR "valkyriefb: vmode %d not valid.\n", vmode);
-               return -EINVAL;
-       }
--
--      par->xres = var->xres;
--      par->yres = var->yres;
--      par->xoffset = 0;
--      par->yoffset = 0;
--      par->vxres = par->xres;
--      par->vyres = par->yres;
-       
--      if (var->xres_virtual > var->xres || var->yres_virtual > var->yres
--              || var->xoffset != 0 || var->yoffset != 0) {
-+      if (cmode != CMODE_8 && cmode != CMODE_16) {
-+              printk(KERN_ERR "valkyriefb: cmode %d not valid.\n", cmode);
-               return -EINVAL;
-       }
--      if (bpp <= 8)
--              par->cmode = CMODE_8;
--      else if (bpp <= 16)
--              par->cmode = CMODE_16;
--      else {
--              printk(KERN_ERR "valkyrie_var_to_par: cmode %d not supported.\n", par->cmode);
-+      if (var->xres_virtual > var->xres || var->yres_virtual > var->yres
-+          || var->xoffset != 0 || var->yoffset != 0) {
-               return -EINVAL;
-       }
--      init = valkyrie_reg_init[par->vmode-1];
--      if (init->pitch[par->cmode] == 0) {
--              printk(KERN_ERR "valkyrie_var_to_par: vmode %d does not support cmode %d.\n", par->vmode, par->cmode);
-+      init = valkyrie_reg_init[vmode-1];
-+      if (init->pitch[cmode] == 0) {
-+              printk(KERN_ERR "valkyriefb: vmode %d does not support "
-+                     "cmode %d.\n", vmode, cmode);
-               return -EINVAL;
-       }
--      if (valkyrie_vram_reqd(par->vmode, par->cmode) > p->total_vram) {
--              printk(KERN_ERR "valkyrie_var_to_par: not enough ram for vmode %d, cmode %d.\n", par->vmode, par->cmode);
-+      if (valkyrie_vram_reqd(vmode, cmode) > p->total_vram) {
-+              printk(KERN_ERR "valkyriefb: not enough ram for vmode %d, "
-+                     "cmode %d.\n", vmode, cmode);
-               return -EINVAL;
-       }
-+      par->vmode = vmode;
-+      par->cmode = cmode;
-+      par->init = init;
-+      par->xres = var->xres;
-+      par->yres = var->yres;
-+      par->vxres = par->xres;
-+      par->vyres = par->yres;
-+
-       return 0;
- }
-@@ -653,7 +515,9 @@ static void valkyrie_init_fix(struct fb_
-       fix->mmio_start = p->valkyrie_regs_phys;
-       fix->mmio_len = sizeof(struct valkyrie_regs);
-       fix->type = FB_TYPE_PACKED_PIXELS;
--      
-+      fix->smem_start = p->frame_buffer_phys + 0x1000;
-+      fix->smem_len = p->total_vram;
-+
-       fix->type_aux = 0;
-       fix->ywrapstep = 0;
-       fix->ypanstep = 0;
-@@ -663,67 +527,23 @@ static void valkyrie_init_fix(struct fb_
- /* Fix must already be inited above */
- static void valkyrie_par_to_fix(struct fb_par_valkyrie *par,
--      struct fb_fix_screeninfo *fix,
--      struct fb_info_valkyrie *p)
-+      struct fb_fix_screeninfo *fix)
- {
--      fix->smem_start = p->frame_buffer_phys + 0x1000;
--#if 1
-       fix->smem_len = valkyrie_vram_reqd(par->vmode, par->cmode);
--#else
--      fix->smem_len = p->total_vram;
--#endif
-       fix->visual = (par->cmode == CMODE_8) ?
-               FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
-       fix->line_length = par->vxres << par->cmode;
-               /* ywrapstep, xpanstep, ypanstep */
- }
--static void valkyrie_init_display(struct display *disp)
--{
--      memset(disp, 0, sizeof(*disp));
--      disp->can_soft_blank = can_soft_blank;
--      disp->scrollmode = SCROLL_YREDRAW;
--}
--
--static void valkyrie_par_to_display(struct fb_par_valkyrie *par,
--  struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p)
--{
--      disp->var = p->var;
--
--      if(disp->scrollmode != SCROLL_YREDRAW) {
--              printk(KERN_ERR "Scroll mode not YREDRAW in valkyrie_par_to_display\n");
--              disp->scrollmode = SCROLL_YREDRAW;
--      }
--      switch (par->cmode) {
--#ifdef FBCON_HAS_CFB8
--                case CMODE_8:
--                        disp->dispsw = &fbcon_cfb8;
--                        break;
--#endif
--#ifdef FBCON_HAS_CFB16
--                case CMODE_16:
--                        disp->dispsw = &fbcon_cfb16;
--                        disp->dispsw_data = p->fbcon_cfb16_cmap;
--                        break;
--#endif
--                default:
--                        disp->dispsw = &fbcon_dummy;
--                        break;
--        }
--}
--
- static void __init valkyrie_init_info(struct fb_info *info, struct fb_info_valkyrie *p)
- {
--      strcpy(info->modename, p->fix.id);
-       info->fbops = &valkyriefb_ops;
-       info->screen_base = (char *) p->frame_buffer + 0x1000;
--      info->disp = &p->disp;
--      info->currcon = -1;
--      strcpy(info->fontname, fontname);
--      info->changevar = NULL;
--      info->switch_con = &valkyriefb_switch;
--      info->updatevar = &valkyriefb_updatevar;
-       info->flags = FBINFO_FLAG_DEFAULT;
-+      info->pseudo_palette = p->pseudo_palette;
-+      fb_alloc_cmap(&info->cmap, 256, 0);
-+      info->par = &p->par;
- }
-@@ -738,41 +558,23 @@ int __init valkyriefb_setup(char *option
-               return 0;
-       while ((this_opt = strsep(&options, ",")) != NULL) {
--              if (!strncmp(this_opt, "font:", 5)) {
--                      char *p;
--                      int i;
--
--                      p = this_opt + 5;
--                      for (i = 0; i < sizeof(fontname) - 1; i++)
--                              if (!*p || *p == ' ' || *p == ',')
--                                      break;
--                      memcpy(fontname, this_opt + 5, i);
--                      fontname[i] = 0;
--              }
--              else if (!strncmp(this_opt, "vmode:", 6)) {
-+              if (!strncmp(this_opt, "vmode:", 6)) {
-                       int vmode = simple_strtoul(this_opt+6, NULL, 0);
--              if (vmode > 0 && vmode <= VMODE_MAX)
-+                      if (vmode > 0 && vmode <= VMODE_MAX)
-                               default_vmode = vmode;
-               }
-               else if (!strncmp(this_opt, "cmode:", 6)) {
-                       int depth = simple_strtoul(this_opt+6, NULL, 0);
-                       switch (depth) {
--                       case 8:
--                          default_cmode = CMODE_8;
--                          break;
--                       case 15:
--                       case 16:
--                          default_cmode = CMODE_16;
--                          break;
-+                      case 8:
-+                              default_cmode = CMODE_8;
-+                              break;
-+                      case 15:
-+                      case 16:
-+                              default_cmode = CMODE_16;
-+                              break;
-                       }
-               }
--              /* XXX - remove these options once blanking has been tested */
--              else if (!strncmp(this_opt, "noblank", 7)) {
--                      can_soft_blank = 0;
--              }
--              else if (!strncmp(this_opt, "blank", 5)) {
--                      can_soft_blank = 1;
--              }
-       }
-       return 0;
- }
---- linux-2.6.0-test1/drivers/video/vesafb.c   2003-06-14 12:17:57.000000000 -0700
-+++ 25/drivers/video/vesafb.c  2003-07-19 17:03:50.000000000 -0700
-@@ -51,7 +51,7 @@ static struct fb_info fb_info;
- static u32 pseudo_palette[17];
- static int             inverse   = 0;
--static int             mtrr      = 0;
-+static int             mtrr      = 1;
- static int             pmi_setpal = 0;        /* pmi for palette changes ??? */
- static int             ypan       = 0;  /* 0..nothing, 1..ypan, 2..ywrap */
-@@ -208,6 +208,8 @@ int __init vesafb_setup(char *options)
-                       pmi_setpal=1;
-               else if (! strcmp(this_opt, "mtrr"))
-                       mtrr=1;
-+              else if (! strcmp(this_opt, "nomtrr"))
-+                      mtrr=0;
-       }
-       return 0;
- }
-@@ -231,6 +233,12 @@ int __init vesafb_init(void)
-       vesafb_fix.visual   = (vesafb_defined.bits_per_pixel == 8) ?
-               FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-+      /* limit framebuffer size to 16 MB.  Otherwise we'll eat tons of
-+       * kernel address space for nothing if the gfx card has alot of
-+       * memory (>= 128 MB isn't uncommon these days ...) */
-+      if (vesafb_fix.smem_len > 16 * 1024 * 1024)
-+              vesafb_fix.smem_len = 16 * 1024 * 1024;
-+
- #ifndef __i386__
-       screen_info.vesapm_seg = 0;
- #endif
---- linux-2.6.0-test1/fs/aio.c 2003-07-13 21:44:34.000000000 -0700
-+++ 25/fs/aio.c        2003-07-19 17:07:03.000000000 -0700
-@@ -28,6 +28,8 @@
- #include <linux/module.h>
- #include <linux/highmem.h>
- #include <linux/workqueue.h>
-+#include <linux/writeback.h>
-+#include <linux/pagemap.h>
- #include <asm/kmap_types.h>
- #include <asm/uaccess.h>
-@@ -39,6 +41,9 @@
- #define dprintk(x...) do { ; } while (0)
- #endif
-+long aio_run = 0; /* for testing only */
-+long aio_wakeups = 0; /* for testing only */
-+
- /*------ sysctl variables----*/
- atomic_t aio_nr = ATOMIC_INIT(0);     /* current system wide number of aio requests */
- unsigned aio_max_nr = 0x10000;        /* system wide maximum number of aio requests */
-@@ -48,6 +53,7 @@ static kmem_cache_t  *kiocb_cachep;
- static kmem_cache_t   *kioctx_cachep;
- static struct workqueue_struct *aio_wq;
-+static struct workqueue_struct *aio_fput_wq;
- /* Used for rare fput completion. */
- static void aio_fput_routine(void *);
-@@ -75,6 +81,7 @@ static int __init aio_setup(void)
-               panic("unable to create kioctx cache");
-       aio_wq = create_workqueue("aio");
-+      aio_fput_wq = create_workqueue("aio_fput");
-       pr_debug("aio_setup: sizeof(struct page) = %d\n", (int)sizeof(struct page));
-@@ -281,6 +288,7 @@ static void aio_cancel_all(struct kioctx
-               struct kiocb *iocb = list_kiocb(pos);
-               list_del_init(&iocb->ki_list);
-               cancel = iocb->ki_cancel;
-+              kiocbSetCancelled(iocb);
-               if (cancel) {
-                       iocb->ki_users++;
-                       spin_unlock_irq(&ctx->ctx_lock);
-@@ -341,6 +349,11 @@ void exit_aio(struct mm_struct *mm)
-               aio_cancel_all(ctx);
-               wait_for_all_aios(ctx);
-+              /*
-+               * this is an overkill, but ensures we don't leave
-+               * the ctx on the aio_wq
-+               */
-+              flush_workqueue(aio_wq);
-               if (1 != atomic_read(&ctx->users))
-                       printk(KERN_DEBUG
-@@ -395,6 +408,7 @@ static struct kiocb *__aio_get_req(struc
-       req->ki_cancel = NULL;
-       req->ki_retry = NULL;
-       req->ki_user_obj = NULL;
-+      INIT_LIST_HEAD(&req->ki_run_list);
-       /* Check if the completion queue has enough free space to
-        * accept an event from this io.
-@@ -494,7 +508,7 @@ static int __aio_put_req(struct kioctx *
-               spin_lock(&fput_lock);
-               list_add(&req->ki_list, &fput_head);
-               spin_unlock(&fput_lock);
--              queue_work(aio_wq, &fput_work);
-+              queue_work(aio_fput_wq, &fput_work);
-       } else
-               really_put_req(ctx, req);
-       return 1;
-@@ -536,65 +550,302 @@ struct kioctx *lookup_ioctx(unsigned lon
-       return ioctx;
- }
-+/*
-+ * use_mm
-+ *    Makes the calling kernel thread take on the specified
-+ *    mm context.
-+ *    Called by the retry thread execute retries within the
-+ *    iocb issuer's mm context, so that copy_from/to_user
-+ *    operations work seamlessly for aio.
-+ *    (Note: this routine is intended to be called only
-+ *    from a kernel thread context)
-+ */
- static void use_mm(struct mm_struct *mm)
- {
--      struct mm_struct *active_mm = current->active_mm;
-+      struct mm_struct *active_mm;
-+      struct task_struct *tsk = current;
-+
-+      task_lock(tsk);
-+      active_mm = tsk->active_mm;
-       atomic_inc(&mm->mm_count);
--      current->mm = mm;
--      if (mm != active_mm) {
--              current->active_mm = mm;
--              activate_mm(active_mm, mm);
--      }
-+      tsk->mm = mm;
-+      tsk->active_mm = mm;
-+      activate_mm(active_mm, mm);
-+      task_unlock(tsk);
-+
-       mmdrop(active_mm);
- }
--static void unuse_mm(struct mm_struct *mm)
-+/*
-+ * unuse_mm
-+ *    Reverses the effect of use_mm, i.e. releases the
-+ *    specified mm context which was earlier taken on
-+ *    by the calling kernel thread
-+ *    (Note: this routine is intended to be called only
-+ *    from a kernel thread context)
-+ *
-+ * Comments: Called with ctx->ctx_lock held. This nests
-+ * task_lock instead ctx_lock.
-+ */
-+void unuse_mm(struct mm_struct *mm)
- {
--      current->mm = NULL;
-+      struct task_struct *tsk = current;
-+
-+      task_lock(tsk);
-+      tsk->mm = NULL;
-       /* active_mm is still 'mm' */
--      enter_lazy_tlb(mm, current);
-+      enter_lazy_tlb(mm, tsk);
-+      task_unlock(tsk);
- }
--/* Run on kevent's context.  FIXME: needs to be per-cpu and warn if an
-- * operation blocks.
-+/*
-+ * Queue up a kiocb to be retried. Assumes that the kiocb
-+ * has already been marked as kicked, and places it on
-+ * the retry run list for the corresponding ioctx, if it
-+ * isn't already queued. Returns 1 if it actually queued
-+ * the kiocb (to tell the caller to activate the work
-+ * queue to process it), or 0, if it found that it was
-+ * already queued.
-+ *
-+ * Should be called with the spin lock iocb->ki_ctx->ctx_lock
-+ * held
-  */
--static void aio_kick_handler(void *data)
-+static inline int __queue_kicked_iocb(struct kiocb *iocb)
- {
--      struct kioctx *ctx = data;
-+      struct kioctx   *ctx = iocb->ki_ctx;
--      use_mm(ctx->mm);
-+      if (list_empty(&iocb->ki_run_list)) {
-+              list_add_tail(&iocb->ki_run_list,
-+                      &ctx->run_list);
-+              iocb->ki_queued++;
-+              return 1;
-+      }
-+      return 0;
-+}
--      spin_lock_irq(&ctx->ctx_lock);
--      while (!list_empty(&ctx->run_list)) {
--              struct kiocb *iocb;
--              long ret;
-+/* aio_run_iocb
-+ *     This is the core aio execution routine. It is
-+ *     invoked both for initial i/o submission and
-+ *     subsequent retries via the aio_kick_handler.
-+ *       Expects to be invoked with iocb->ki_ctx->lock
-+ *       already held. The lock is released and reaquired
-+ *       as needed during processing.
-+ *
-+ * Calls the iocb retry method (already setup for the
-+ * iocb on initial submission) for operation specific
-+ * handling, but takes care of most of common retry
-+ * execution details for a given iocb. The retry method
-+ * needs to be non-blocking as far as possible, to avoid
-+ * holding up other iocbs waiting to be serviced by the
-+ * retry kernel thread.
-+ *
-+ * The trickier parts in this code have to do with
-+ * ensuring that only one retry instance is in progress
-+ * for a given iocb at any time. Providing that guarantee
-+ * simplifies the coding of individual aio operations as
-+ * it avoids various potential races.
-+ */
-+static ssize_t aio_run_iocb(struct kiocb *iocb)
-+{
-+      struct kioctx   *ctx = iocb->ki_ctx;
-+      ssize_t (*retry)(struct kiocb *);
-+      ssize_t ret;
--              iocb = list_entry(ctx->run_list.next, struct kiocb,
--                                ki_run_list);
--              list_del(&iocb->ki_run_list);
--              iocb->ki_users ++;
--              spin_unlock_irq(&ctx->ctx_lock);
-+      if (iocb->ki_retried++ > 1024*1024) {
-+              printk("Maximal retry count.  Bytes done %Zd\n",
-+                      iocb->ki_nbytes - iocb->ki_left);
-+              return -EAGAIN;
-+      }
-+
-+      if (!(iocb->ki_retried & 0xff)) {
-+              pr_debug("%ld retry: %d of %d (kick %ld, Q %ld run %ld, wake %ld)\n",
-+                      iocb->ki_retried,
-+                      iocb->ki_nbytes - iocb->ki_left, iocb->ki_nbytes,
-+                      iocb->ki_kicked, iocb->ki_queued, aio_run, aio_wakeups);
-+      }
-+
-+      if (!(retry = iocb->ki_retry)) {
-+              printk("aio_run_iocb: iocb->ki_retry = NULL\n");
-+              return 0;
-+      }
-+
-+      /*
-+       * We don't want the next retry iteration for this
-+       * operation to start until this one has returned and
-+       * updated the iocb state. However, wait_queue functions
-+       * can trigger a kick_iocb from interrupt context in the
-+       * meantime, indicating that data is available for the next
-+       * iteration. We want to remember that and enable the
-+       * next retry iteration _after_ we are through with
-+       * this one.
-+       *
-+       * So, in order to be able to register a "kick", but
-+       * prevent it from being queued now, we clear the kick
-+       * flag, but make the kick code *think* that the iocb is
-+       * still on the run list until we are actually done.
-+       * When we are done with this iteration, we check if
-+       * the iocb was kicked in the meantime and if so, queue
-+       * it up afresh.
-+       */
-+
-+      kiocbClearKicked(iocb);
-+
-+      /*
-+       * This is so that aio_complete knows it doesn't need to
-+       * pull the iocb off the run list (We can't just call
-+       * INIT_LIST_HEAD because we don't want a kick_iocb to
-+       * queue this on the run list yet)
-+       */
-+      iocb->ki_run_list.next = iocb->ki_run_list.prev = NULL;
-+      iocb->ki_retry = NULL;
-+      spin_unlock_irq(&ctx->ctx_lock);
-+
-+      /* Quit retrying if the i/o has been cancelled */
-+      if (kiocbIsCancelled(iocb)) {
-+              ret = -EINTR;
-+              aio_complete(iocb, ret, 0);
-+              /* must not access the iocb after this */
-+              goto out;
-+      }
-+
-+      /*
-+       * Now we are all set to call the retry method in async
-+       * context. By setting this thread's io_wait context
-+       * to point to the wait queue entry inside the currently
-+       * running iocb for the duration of the retry, we ensure
-+       * that async notification wakeups are queued by the
-+       * operation instead of blocking waits, and when notified,
-+       * cause the iocb to be kicked for continuation (through
-+       * the aio_wake_function callback).
-+       */
-+      BUG_ON(current->io_wait != NULL);
-+      current->io_wait = &iocb->ki_wait;
-+      ret = retry(iocb);
-+      current->io_wait = NULL;
--              kiocbClearKicked(iocb);
--              ret = iocb->ki_retry(iocb);
-+      if (-EIOCBRETRY != ret) {
-               if (-EIOCBQUEUED != ret) {
-+                      BUG_ON(!list_empty(&iocb->ki_wait.task_list));
-                       aio_complete(iocb, ret, 0);
--                      iocb = NULL;
-+                      /* must not access the iocb after this */
-               }
-+      } else {
-+              /*
-+               * Issue an additional retry to avoid waiting forever if
-+               * no waits were queued (e.g. in case of a short read).
-+               */
-+              if (list_empty(&iocb->ki_wait.task_list))
-+                      kiocbSetKicked(iocb);
-+      }
-+out:
-+      spin_lock_irq(&ctx->ctx_lock);
--              spin_lock_irq(&ctx->ctx_lock);
--              if (NULL != iocb)
--                      __aio_put_req(ctx, iocb);
-+      if (-EIOCBRETRY == ret) {
-+              /*
-+               * OK, now that we are done with this iteration
-+               * and know that there is more left to go,
-+               * this is where we let go so that a subsequent
-+               * "kick" can start the next iteration
-+               */
-+              iocb->ki_retry = retry;
-+              /* will make __queue_kicked_iocb succeed from here on */
-+              INIT_LIST_HEAD(&iocb->ki_run_list);
-+              /* we must queue the next iteration ourselves, if it
-+               * has already been kicked */
-+              if (kiocbIsKicked(iocb)) {
-+                      __queue_kicked_iocb(iocb);
-+              }
-       }
-+      return ret;
-+}
-+
-+/*
-+ * __aio_run_iocbs:
-+ *    Process all pending retries queued on the ioctx
-+ *    run list.
-+ * Assumes it is operating within the aio issuer's mm
-+ * context. Expects to be called with ctx->ctx_lock held
-+ */
-+static void __aio_run_iocbs(struct kioctx *ctx)
-+{
-+      struct kiocb *iocb;
-+      ssize_t ret;
-+      int count = 0;
-+
-+      while (!list_empty(&ctx->run_list)) {
-+              iocb = list_entry(ctx->run_list.next, struct kiocb,
-+                      ki_run_list);
-+              list_del(&iocb->ki_run_list);
-+              ret = aio_run_iocb(iocb);
-+              count++;
-+      }
-+      aio_run++;
-+}
-+
-+/*
-+ * aio_run_iocbs:
-+ *    Process all pending retries queued on the ioctx
-+ *    run list.
-+ * Assumes it is operating within the aio issuer's mm
-+ * context.
-+ */
-+static inline void aio_run_iocbs(struct kioctx *ctx)
-+{
-+      spin_lock_irq(&ctx->ctx_lock);
-+      __aio_run_iocbs(ctx);
-       spin_unlock_irq(&ctx->ctx_lock);
-+}
-+/*
-+ * aio_kick_handler:
-+ *    Work queue handler triggered to process pending
-+ *    retries on an ioctx. Takes on the aio issuer's
-+ *    mm context before running the iocbs.
-+ * Run on aiod's context.
-+ */
-+static void aio_kick_handler(void *data)
-+{
-+      struct kioctx *ctx = data;
-+
-+      use_mm(ctx->mm);
-+      spin_lock_irq(&ctx->ctx_lock);
-+      __aio_run_iocbs(ctx);
-       unuse_mm(ctx->mm);
-+      spin_unlock_irq(&ctx->ctx_lock);
- }
--void kick_iocb(struct kiocb *iocb)
-+
-+/*
-+ * Called by kick_iocb to queue the kiocb for retry
-+ * and if required activate the aio work queue to process
-+ * it
-+ */
-+void queue_kicked_iocb(struct kiocb *iocb)
- {
-       struct kioctx   *ctx = iocb->ki_ctx;
-+      unsigned long flags;
-+      int run = 0;
-+
-+      WARN_ON((!list_empty(&iocb->ki_wait.task_list)));
-+
-+      spin_lock_irqsave(&ctx->ctx_lock, flags);
-+      run = __queue_kicked_iocb(iocb);
-+      spin_unlock_irqrestore(&ctx->ctx_lock, flags);
-+      if (run) {
-+              queue_work(aio_wq, &ctx->wq);
-+              aio_wakeups++;
-+      }
-+}
-+/*
-+ * kick_iocb:
-+ *    Called typically from a wait queue callback context
-+ *    (aio_wake_function) to trigger a retry of the iocb.
-+ *    The retry is usually executed by aio workqueue
-+ *    threads (See aio_kick_handler).
-+ */
-+void kick_iocb(struct kiocb *iocb)
-+{
-       /* sync iocbs are easy: they can only ever be executing from a 
-        * single context. */
-       if (is_sync_kiocb(iocb)) {
-@@ -603,12 +854,10 @@ void kick_iocb(struct kiocb *iocb)
-               return;
-       }
-+      iocb->ki_kicked++;
-+      /* If its already kicked we shouldn't queue it again */
-       if (!kiocbTryKick(iocb)) {
--              unsigned long flags;
--              spin_lock_irqsave(&ctx->ctx_lock, flags);
--              list_add_tail(&iocb->ki_run_list, &ctx->run_list);
--              spin_unlock_irqrestore(&ctx->ctx_lock, flags);
--              schedule_work(&ctx->wq);
-+              queue_kicked_iocb(iocb);
-       }
- }
-@@ -661,6 +910,9 @@ int aio_complete(struct kiocb *iocb, lon
-        */
-       spin_lock_irqsave(&ctx->ctx_lock, flags);
-+      if (iocb->ki_run_list.prev && !list_empty(&iocb->ki_run_list))
-+              list_del_init(&iocb->ki_run_list);
-+
-       ring = kmap_atomic(info->ring_pages[0], KM_IRQ1);
-       tail = info->tail;
-@@ -689,6 +941,11 @@ int aio_complete(struct kiocb *iocb, lon
-       pr_debug("added to ring %p at [%lu]\n", iocb, tail);
-+      pr_debug("%ld retries: %d of %d (kicked %ld, Q %ld run %ld wake %ld)\n",
-+              iocb->ki_retried,
-+              iocb->ki_nbytes - iocb->ki_left, iocb->ki_nbytes,
-+              iocb->ki_kicked, iocb->ki_queued, aio_run, aio_wakeups);
-+
-       /* everything turned out well, dispose of the aiocb. */
-       ret = __aio_put_req(ctx, iocb);
-@@ -803,6 +1060,7 @@ static int read_events(struct kioctx *ct
-       int                     i = 0;
-       struct io_event         ent;
-       struct timeout          to;
-+      int                     event_loop = 0; /* testing only */
-       /* needed to zero any padding within an entry (there shouldn't be 
-        * any, but C is fun!
-@@ -852,7 +1110,6 @@ static int read_events(struct kioctx *ct
-               add_wait_queue_exclusive(&ctx->wait, &wait);
-               do {
-                       set_task_state(tsk, TASK_INTERRUPTIBLE);
--
-                       ret = aio_read_evt(ctx, &ent);
-                       if (ret)
-                               break;
-@@ -862,6 +1119,7 @@ static int read_events(struct kioctx *ct
-                       if (to.timed_out)       /* Only check after read evt */
-                               break;
-                       schedule();
-+                      event_loop++;
-                       if (signal_pending(tsk)) {
-                               ret = -EINTR;
-                               break;
-@@ -889,6 +1147,9 @@ static int read_events(struct kioctx *ct
-       if (timeout)
-               clear_timeout(&to);
- out:
-+      pr_debug("event loop executed %d times\n", event_loop);
-+      pr_debug("aio_run %ld\n", aio_run);
-+      pr_debug("aio_wakeups %ld\n", aio_wakeups);
-       return i ? i : ret;
- }
-@@ -918,6 +1179,11 @@ static void io_destroy(struct kioctx *io
-       aio_cancel_all(ioctx);
-       wait_for_all_aios(ioctx);
-+      /*
-+       * this is an overkill, but ensures we don't leave
-+       * the ctx on the aio_wq
-+       */
-+      flush_workqueue(aio_wq);
-       put_ioctx(ioctx);       /* once for the lookup */
- }
-@@ -980,13 +1246,191 @@ asmlinkage long sys_io_destroy(aio_conte
-       return -EINVAL;
- }
-+/*
-+ * Retry method for aio_read (also used for first time submit)
-+ * Responsible for updating iocb state as retries progress
-+ */
-+static ssize_t aio_pread(struct kiocb *iocb)
-+{
-+      struct file *file = iocb->ki_filp;
-+      ssize_t ret = 0;
-+
-+      ret = file->f_op->aio_read(iocb, iocb->ki_buf,
-+              iocb->ki_left, iocb->ki_pos);
-+
-+      /*
-+       * Can't just depend on iocb->ki_left to determine
-+       * whether we are done. This may have been a short read.
-+       */
-+      if (ret > 0) {
-+              iocb->ki_buf += ret;
-+              iocb->ki_left -= ret;
-+
-+              ret = -EIOCBRETRY;
-+      }
-+
-+      /* This means we must have transferred all that we could */
-+      /* No need to retry anymore */
-+      if ((ret == 0) || (iocb->ki_left == 0))
-+              ret = iocb->ki_nbytes - iocb->ki_left;
-+
-+      return ret;
-+}
-+
-+/*
-+ * Retry method for aio_write (also used for first time submit)
-+ * Responsible for updating iocb state as retries progress
-+ */
-+static ssize_t aio_pwrite(struct kiocb *iocb)
-+{
-+      struct file *file = iocb->ki_filp;
-+      struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
-+      struct inode *inode = mapping->host;
-+      ssize_t ret = 0;
-+
-+      ret = file->f_op->aio_write(iocb, iocb->ki_buf,
-+                              iocb->ki_left, iocb->ki_pos);
-+
-+      /*
-+       * Even if iocb->ki_left = 0, we may need to wait
-+       * for a balance_dirty_pages to complete
-+       */
-+      if (ret > 0) {
-+              iocb->ki_buf += iocb->ki_buf ? ret : 0;
-+              iocb->ki_left -= ret;
-+
-+              ret = -EIOCBRETRY;
-+      }
-+
-+      /* This means we must have transferred all that we could */
-+      /* No need to retry anymore unless we need to osync data */
-+      if (ret == 0) {
-+              ret = iocb->ki_nbytes - iocb->ki_left;
-+              if (!iocb->ki_buf)
-+                      return ret;
-+
-+              /* Set things up for potential O_SYNC */
-+              if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+                      iocb->ki_buf = NULL;
-+                      iocb->ki_pos -= ret; /* back up fpos */
-+                      iocb->ki_left = ret; /* sync what we have written out */
-+                      iocb->ki_nbytes = ret;
-+                      ret = -EIOCBRETRY;
-+              }
-+      }
-+
-+      return ret;
-+}
-+
-+static ssize_t aio_fdsync(struct kiocb *iocb)
-+{
-+      struct file *file = iocb->ki_filp;
-+      ssize_t ret = -EINVAL;
-+
-+      if (file->f_op->aio_fsync)
-+              ret = file->f_op->aio_fsync(iocb, 1);
-+      return ret;
-+}
-+
-+static ssize_t aio_fsync(struct kiocb *iocb)
-+{
-+      struct file *file = iocb->ki_filp;
-+      ssize_t ret = -EINVAL;
-+
-+      if (file->f_op->aio_fsync)
-+              ret = file->f_op->aio_fsync(iocb, 0);
-+      return ret;
-+}
-+
-+/*
-+ * aio_setup_iocb:
-+ *    Performs the initial checks and aio retry method
-+ *    setup for the kiocb at the time of io submission.
-+ */
-+ssize_t aio_setup_iocb(struct kiocb *kiocb)
-+{
-+      struct file *file = kiocb->ki_filp;
-+      ssize_t ret = 0;
-+
-+      switch (kiocb->ki_opcode) {
-+      case IOCB_CMD_PREAD:
-+              ret = -EBADF;
-+              if (unlikely(!(file->f_mode & FMODE_READ)))
-+                      break;
-+              ret = -EFAULT;
-+              if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf,
-+                      kiocb->ki_left)))
-+                      break;
-+              ret = -EINVAL;
-+              if (file->f_op->aio_read)
-+                      kiocb->ki_retry = aio_pread;
-+              break;
-+      case IOCB_CMD_PWRITE:
-+              ret = -EBADF;
-+              if (unlikely(!(file->f_mode & FMODE_WRITE)))
-+                      break;
-+              ret = -EFAULT;
-+              if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf,
-+                      kiocb->ki_left)))
-+                      break;
-+              ret = -EINVAL;
-+              if (file->f_op->aio_write)
-+                      kiocb->ki_retry = aio_pwrite;
-+              break;
-+      case IOCB_CMD_FDSYNC:
-+              ret = -EINVAL;
-+              if (file->f_op->aio_fsync)
-+                      kiocb->ki_retry = aio_fdsync;
-+              break;
-+      case IOCB_CMD_FSYNC:
-+              ret = -EINVAL;
-+              if (file->f_op->aio_fsync)
-+                      kiocb->ki_retry = aio_fsync;
-+              break;
-+      default:
-+              dprintk("EINVAL: io_submit: no operation provided\n");
-+              ret = -EINVAL;
-+      }
-+
-+      if (!kiocb->ki_retry)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+/*
-+ * aio_wake_function:
-+ *    wait queue callback function for aio notification,
-+ *    Simply triggers a retry of the operation via kick_iocb.
-+ *
-+ *    This callback is specified in the wait queue entry in
-+ *    a kiocb (current->io_wait points to this wait queue
-+ *    entry when an aio operation executes; it is used
-+ *    instead of a synchronous wait when an i/o blocking
-+ *    condition is encountered during aio).
-+ *
-+ * Note:
-+ * This routine is executed with the wait queue lock held.
-+ * Since kick_iocb acquires iocb->ctx->ctx_lock, it nests
-+ * the ioctx lock inside the wait queue lock. This is safe
-+ * because this callback isn't used for wait queues which
-+ * are nested inside ioctx lock (i.e. ctx->wait)
-+ */
-+int aio_wake_function(wait_queue_t *wait, unsigned mode, int sync)
-+{
-+      struct kiocb *iocb = container_of(wait, struct kiocb, ki_wait);
-+
-+      list_del_init(&wait->task_list);
-+      kick_iocb(iocb);
-+      return 1;
-+}
-+
- int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
-                        struct iocb *iocb)
- {
-       struct kiocb *req;
-       struct file *file;
-       ssize_t ret;
--      char *buf;
-       /* enforce forwards compatibility on users */
-       if (unlikely(iocb->aio_reserved1 || iocb->aio_reserved2 ||
-@@ -1027,51 +1471,31 @@ int io_submit_one(struct kioctx *ctx, st
-       req->ki_user_data = iocb->aio_data;
-       req->ki_pos = iocb->aio_offset;
--      buf = (char *)(unsigned long)iocb->aio_buf;
-+      req->ki_buf = (char *)(unsigned long)iocb->aio_buf;
-+      req->ki_left = req->ki_nbytes = iocb->aio_nbytes;
-+      req->ki_opcode = iocb->aio_lio_opcode;
-+      init_waitqueue_func_entry(&req->ki_wait, aio_wake_function);
-+      INIT_LIST_HEAD(&req->ki_wait.task_list);
-+      req->ki_run_list.next = req->ki_run_list.prev = NULL;
-+      req->ki_retry = NULL;
-+      req->ki_retried = 0;
-+      req->ki_kicked = 0;
-+      req->ki_queued = 0;
-+      aio_run = 0;
-+      aio_wakeups = 0;
--      switch (iocb->aio_lio_opcode) {
--      case IOCB_CMD_PREAD:
--              ret = -EBADF;
--              if (unlikely(!(file->f_mode & FMODE_READ)))
--                      goto out_put_req;
--              ret = -EFAULT;
--              if (unlikely(!access_ok(VERIFY_WRITE, buf, iocb->aio_nbytes)))
--                      goto out_put_req;
--              ret = -EINVAL;
--              if (file->f_op->aio_read)
--                      ret = file->f_op->aio_read(req, buf,
--                                      iocb->aio_nbytes, req->ki_pos);
--              break;
--      case IOCB_CMD_PWRITE:
--              ret = -EBADF;
--              if (unlikely(!(file->f_mode & FMODE_WRITE)))
--                      goto out_put_req;
--              ret = -EFAULT;
--              if (unlikely(!access_ok(VERIFY_READ, buf, iocb->aio_nbytes)))
--                      goto out_put_req;
--              ret = -EINVAL;
--              if (file->f_op->aio_write)
--                      ret = file->f_op->aio_write(req, buf,
--                                      iocb->aio_nbytes, req->ki_pos);
--              break;
--      case IOCB_CMD_FDSYNC:
--              ret = -EINVAL;
--              if (file->f_op->aio_fsync)
--                      ret = file->f_op->aio_fsync(req, 1);
--              break;
--      case IOCB_CMD_FSYNC:
--              ret = -EINVAL;
--              if (file->f_op->aio_fsync)
--                      ret = file->f_op->aio_fsync(req, 0);
--              break;
--      default:
--              dprintk("EINVAL: io_submit: no operation provided\n");
--              ret = -EINVAL;
--      }
-+      ret = aio_setup_iocb(req);
-+
-+      if (ret)
-+              goto out_put_req;
-+
-+      spin_lock_irq(&ctx->ctx_lock);
-+      ret = aio_run_iocb(req);
-+      spin_unlock_irq(&ctx->ctx_lock);
-+
-+      if (-EIOCBRETRY == ret)
-+              queue_work(aio_wq, &ctx->wq);
--      if (likely(-EIOCBQUEUED == ret))
--              return 0;
--      aio_complete(req, ret, 0);
-       return 0;
- out_put_req:
---- linux-2.6.0-test1/fs/binfmt_elf.c  2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/binfmt_elf.c 2003-07-19 17:03:50.000000000 -0700
-@@ -1158,7 +1158,7 @@ static int elf_dump_thread_status(long s
-       t->num_notes++;
-       sz += notesize(&t->notes[0]);
--      if ((t->prstatus.pr_fpvalid = elf_core_copy_task_fpregs(p, &t->fpu))) {
-+      if ((t->prstatus.pr_fpvalid = elf_core_copy_task_fpregs(p, NULL, &t->fpu))) {
-               fill_note(&t->notes[1], "CORE", NT_PRFPREG, sizeof(t->fpu), &(t->fpu));
-               t->num_notes++;
-               sz += notesize(&t->notes[1]);
-@@ -1286,7 +1286,7 @@ static int elf_core_dump(long signr, str
-       fill_note(notes +2, "CORE", NT_TASKSTRUCT, sizeof(*current), current);
-   
-       /* Try to dump the FPU. */
--      if ((prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, fpu)))
-+      if ((prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs, fpu)))
-               fill_note(notes +3, "CORE", NT_PRFPREG, sizeof(*fpu), fpu);
-       else
-               --numnote;
---- linux-2.6.0-test1/fs/bio.c 2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/bio.c        2003-07-19 17:03:50.000000000 -0700
-@@ -18,7 +18,7 @@
- #include <linux/mm.h>
- #include <linux/swap.h>
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/kernel.h>
---- linux-2.6.0-test1/fs/buffer.c      2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/buffer.c     2003-07-19 17:06:53.000000000 -0700
-@@ -91,6 +91,7 @@ void wake_up_buffer(struct buffer_head *
- {
-       wait_queue_head_t *wq = bh_waitq_head(bh);
-+      smp_mb();
-       if (waitqueue_active(wq))
-               wake_up_all(wq);
- }
-@@ -115,27 +116,50 @@ void unlock_buffer(struct buffer_head *b
- }
- /*
-- * Block until a buffer comes unlocked.  This doesn't stop it
-+ * Wait until a buffer comes unlocked.  This doesn't stop it
-  * from becoming locked again - you have to lock it yourself
-  * if you want to preserve its state.
-+ * If the wait queue parameter specifies an async i/o callback,
-+ * then instead of blocking, we just queue up the callback
-+ * on the wait queue for async notification when the buffer gets
-+ * unlocked.
-+ * A NULL wait queue parameter defaults to synchronous behaviour
-  */
--void __wait_on_buffer(struct buffer_head * bh)
-+int __wait_on_buffer_wq(struct buffer_head * bh, wait_queue_t *wait)
- {
-       wait_queue_head_t *wqh = bh_waitq_head(bh);
--      DEFINE_WAIT(wait);
-+      DEFINE_WAIT(local_wait);
-+
-+      if (!wait)
-+              wait = &local_wait;
-       if (atomic_read(&bh->b_count) == 0 &&
-                       (!bh->b_page || !PageLocked(bh->b_page)))
-               buffer_error();
-       do {
--              prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
-+              prepare_to_wait(wqh, wait, TASK_UNINTERRUPTIBLE);
-               if (buffer_locked(bh)) {
-                       blk_run_queues();
-+                      if (!is_sync_wait(wait)) {
-+                              /*
-+                               * if we've queued an async wait queue
-+                               * callback do not block; just tell the
-+                               * caller to return and retry later when
-+                               * the callback is notified
-+                               */
-+                              return -EIOCBRETRY;
-+                      }
-                       io_schedule();
-               }
-       } while (buffer_locked(bh));
--      finish_wait(wqh, &wait);
-+      finish_wait(wqh, wait);
-+      return 0;
-+}
-+
-+void __wait_on_buffer(struct buffer_head * bh)
-+{
-+      __wait_on_buffer_wq(bh, NULL);
- }
- static void
-@@ -414,6 +438,9 @@ __find_get_block_slow(struct block_devic
-               bh = bh->b_this_page;
-       } while (bh != head);
-       buffer_error();
-+      printk("block=%llu, b_blocknr=%llu\n",
-+              (unsigned long long)block, (unsigned long long)bh->b_blocknr);
-+      printk("b_state=0x%08lx, b_size=%u\n", bh->b_state, bh->b_size);
- out_unlock:
-       spin_unlock(&bd_mapping->private_lock);
-       page_cache_release(page);
-@@ -1274,9 +1301,12 @@ void __bforget(struct buffer_head *bh)
-       __brelse(bh);
- }
--static struct buffer_head *__bread_slow(struct buffer_head *bh)
-+static struct buffer_head *__bread_slow_wq(struct buffer_head *bh,
-+              wait_queue_t *wait)
- {
--      lock_buffer(bh);
-+      if (-EIOCBRETRY == lock_buffer_wq(bh, wait))
-+              return ERR_PTR(-EIOCBRETRY);
-+
-       if (buffer_uptodate(bh)) {
-               unlock_buffer(bh);
-               return bh;
-@@ -1286,7 +1316,8 @@ static struct buffer_head *__bread_slow(
-               get_bh(bh);
-               bh->b_end_io = end_buffer_io_sync;
-               submit_bh(READ, bh);
--              wait_on_buffer(bh);
-+              if (-EIOCBRETRY == wait_on_buffer_wq(bh, wait))
-+                      return ERR_PTR(-EIOCBRETRY);
-               if (buffer_uptodate(bh))
-                       return bh;
-       }
-@@ -1294,6 +1325,11 @@ static struct buffer_head *__bread_slow(
-       return NULL;
- }
-+static inline struct buffer_head *__bread_slow(struct buffer_head *bh)
-+{
-+      return __bread_slow_wq(bh, NULL);
-+}
-+
- /*
-  * Per-cpu buffer LRU implementation.  To reduce the cost of __find_get_block().
-  * The bhs[] array is sorted - newest buffer is at bhs[0].  Buffers have their
-@@ -1481,6 +1517,18 @@ __bread(struct block_device *bdev, secto
- }
- EXPORT_SYMBOL(__bread);
-+struct buffer_head *
-+__bread_wq(struct block_device *bdev, sector_t block, int size,
-+      wait_queue_t *wait)
-+{
-+      struct buffer_head *bh = __getblk(bdev, block, size);
-+
-+      if (!buffer_uptodate(bh))
-+              bh = __bread_slow_wq(bh, wait);
-+      return bh;
-+}
-+EXPORT_SYMBOL(__bread_wq);
-+
- /*
-  * invalidate_bh_lrus() is called rarely - at unmount.  Because it is only for
-  * unmount it only needs to ensure that all buffers from the target device are
-@@ -1958,8 +2006,9 @@ static int __block_prepare_write(struct 
-       /*
-        * If we issued read requests - let them complete.
-        */
--      while(wait_bh > wait) {
--              wait_on_buffer(*--wait_bh);
-+      while (wait_bh > wait) {
-+              if ((err = wait_on_buffer_wq(*--wait_bh, current->io_wait)))
-+                      return err;
-               if (!buffer_uptodate(*wait_bh))
-                       return -EIO;
-       }
---- linux-2.6.0-test1/fs/cifs/CHANGES  2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/CHANGES 2003-07-19 17:03:50.000000000 -0700
-@@ -1,3 +1,12 @@
-+Version 0.83
-+------------
-+Fix oops when mounting to long server names caused by inverted parms to kmalloc.
-+Fix MultiuserMount (/proc/fs/cifs configuration setting) so that when enabled
-+we will choose a cifs user session (smb uid) that better matches the local
-+uid if a) the mount uid does not match the current uid and b) we have another
-+session to the same server (ip address) for a different mount which
-+matches the current local uid.
-+
- Version 0.82
- ------------
- Add support for mknod of block or character devices.  Fix oplock
---- linux-2.6.0-test1/fs/cifs/cifsfs.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/cifsfs.c        2003-07-19 17:03:50.000000000 -0700
-@@ -230,7 +230,7 @@ cifs_show_options(struct seq_file *s, st
-       if (cifs_sb) {
-               if (cifs_sb->tcon) {
-                       seq_printf(s, ",unc=%s", cifs_sb->tcon->treeName);
--                      if (cifs_sb->tcon->ses->userName)
-+                      if ((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->userName))
-                               seq_printf(s, ",username=%s",
-                                          cifs_sb->tcon->ses->userName);
-                       if(cifs_sb->tcon->ses->domainName)
---- linux-2.6.0-test1/fs/cifs/cifsglob.h       2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/cifs/cifsglob.h      2003-07-19 17:03:50.000000000 -0700
-@@ -155,7 +155,8 @@ struct cifsSesInfo {
-       char *serverOS;         /* name of operating system underlying the server */
-       char *serverNOS;        /* name of network operating system that the server is running */
-       char *serverDomain;     /* security realm of server */
--      int Suid;               /* needed for user level security */
-+      int Suid;               /* remote smb uid  */
-+      uid_t linux_uid;        /* local Linux uid */
-       int capabilities;
-       char serverName[SERVER_NAME_LEN_WITH_NULL * 2]; /* BB make bigger for tcp names - will ipv6 and sctp addresses fit here?? */
-       char userName[MAX_USERNAME_SIZE + 1];
---- linux-2.6.0-test1/fs/cifs/connect.c        2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/connect.c       2003-07-19 17:03:50.000000000 -0700
-@@ -405,7 +405,7 @@ parse_mount_options(char *options, const
-                               return 1;       /* needs_arg; */
-                       }
-                       if ((temp_len = strnlen(value, 300)) < 300) {
--                              vol->UNC = kmalloc(GFP_KERNEL, temp_len);
-+                              vol->UNC = kmalloc(temp_len+1,GFP_KERNEL);
-                               strcpy(vol->UNC,value);
-                               if (strncmp(vol->UNC, "//", 2) == 0) {
-                                       vol->UNC[0] = '\\';
-@@ -482,7 +482,7 @@ parse_mount_options(char *options, const
-                       return 1;
-               }
-               if ((temp_len = strnlen(devname, 300)) < 300) {
--                      vol->UNC = kmalloc(GFP_KERNEL, temp_len);
-+                      vol->UNC = kmalloc(temp_len+1,GFP_KERNEL);
-                       strcpy(vol->UNC,devname);
-                       if (strncmp(vol->UNC, "//", 2) == 0) {
-                               vol->UNC[0] = '\\';
-@@ -860,7 +860,7 @@ cifs_mount(struct super_block *sb, struc
-               FreeXid(xid);
-               return -EINVAL;
-       }
--      /* BB add support to use the multiuser_mount flag BB */
-+
-       existingCifsSes =
-           find_tcp_session(sin_server.sin_addr.s_addr,
-                            volume_info.username, &srvTcp);
-@@ -926,6 +926,7 @@ cifs_mount(struct super_block *sb, struc
-                       if (volume_info.domainname)
-                               strncpy(pSesInfo->domainName,
-                                       volume_info.domainname,MAX_USERNAME_SIZE);
-+                      pSesInfo->linux_uid = volume_info.linux_uid;
-                       rc = setup_session(xid,pSesInfo, cifs_sb->local_nls);
-                       if(!rc)
---- linux-2.6.0-test1/fs/cifs/misc.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/misc.c  2003-07-19 17:03:50.000000000 -0700
-@@ -190,6 +190,8 @@ header_assemble(struct smb_hdr *buffer, 
- {
-       int i;
-       __u32 tmp;
-+      struct list_head* temp_item;
-+      struct cifsSesInfo * ses;
-       char *temp = (char *) buffer;
-       for (i = 0; i < MAX_CIFS_HDR_SIZE; i++) {
-@@ -225,7 +227,52 @@ header_assemble(struct smb_hdr *buffer, 
-                       if (treeCon->ses->capabilities & CAP_STATUS32) {
-                               buffer->Flags2 |= SMBFLG2_ERR_STATUS;
-                       }
-+
-                       buffer->Uid = treeCon->ses->Suid;       /* always in LE format */
-+                      if(multiuser_mount != 0) {
-+              /* For the multiuser case, there are few obvious technically  */
-+              /* possible mechanisms to match the local linux user (uid)    */
-+              /* to a valid remote smb user (smb_uid):                      */
-+              /*      1) Query Winbind (or other local pam/nss daemon       */
-+              /*        for userid/password/logon_domain or credential      */
-+              /*      2) Query Winbind for uid to sid to username mapping   */
-+              /*         and see if we have a matching password for existing*/
-+              /*         session for that user perhas getting password by   */
-+              /*         adding a new pam_cifs module that stores passwords */
-+              /*         so that the cifs vfs can get at that for all logged*/
-+              /*         on users                                           */
-+              /*      3) (Which is the mechanism we have chosen)            */
-+              /*         Search through sessions to the same server for a   */
-+              /*         a match on the uid that was passed in on mount     */
-+              /*         with the current processes uid (or euid?) and use  */
-+              /*         that smb uid.   If no existing smb session for     */
-+              /*         that uid found, use the default smb session ie     */
-+              /*         the smb session for the volume mounted which is    */
-+              /*         the same as would be used if the multiuser mount   */
-+              /*         flag were disabled.  */
-+
-+              /*  BB Add support for establishing new tCon and SMB Session  */
-+              /*      with userid/password pairs found on the smb session   */ 
-+              /*      for other target tcp/ip addresses               BB    */
-+                              if(current->uid != treeCon->ses->linux_uid) {
-+                                      cFYI(1,("Multiuser mode and UID did not match tcon uid "));
-+                                      read_lock(&GlobalSMBSeslock);
-+                                      list_for_each(temp_item, &GlobalSMBSessionList) {
-+                                              ses = list_entry(temp_item, struct cifsSesInfo, cifsSessionList);
-+                                              if(ses->linux_uid == current->uid) {
-+                                                      if(ses->server == treeCon->ses->server) {
-+                                                              cFYI(1,("found matching uid substitute right smb_uid"));  
-+                                                              buffer->Uid = ses->Suid;
-+                                                              break;
-+                                                      } else {
-+                                                              /* BB eventually call setup_session here */
-+                                                              cFYI(1,("local UID found but smb sess with this server does not exist"));  
-+                                                      }
-+                                              }
-+                                      }
-+                                      read_unlock(&GlobalSMBSeslock);
-+                              }
-+                      }
-               }
-               if (treeCon->Flags & SMB_SHARE_IS_IN_DFS)
-                       buffer->Flags2 |= SMBFLG2_DFS;
---- linux-2.6.0-test1/fs/cifs/TODO     2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/cifs/TODO    2003-07-19 17:03:50.000000000 -0700
-@@ -17,9 +17,12 @@ c) multi-user mounts - multiplexed sessi
- d) Kerberos/SPNEGO session setup support - (started)
--e) NTLMv2 authentication and MD5-HMAC signing SMB PDUs - (mostly implemented)
--      signing necessary for some Windows 2003 servers in domain 
--      mode.
-+e) NTLMv2 authentication (mostly implemented)
-+
-+f) MD5-HMAC signing SMB PDUs when SPNEGO style SessionSetup 
-+used (Kerberos or NTLMSSP). Signing alreadyimplemented for NTLM
-+      and raw NTLMSSP already. This is important when enabling
-+      extended security and mounting to Windows 2003 Servers
- f) Directory entry caching relies on a 1 second timer, rather than 
- using FindNotify or equivalent.  - (started)
-@@ -43,11 +46,9 @@ extra copy in/out of the socket buffers 
- m) finish support for IPv6
--n) send oplock break response when sent (oplock currently disabled in
--/proc/fs/cifs)
--
--o) reduces the oplock breaks coming from windows).  Piggyback identical
--file opens on top of each other by incrementing reference count rather
-+o) Better optimize open (and pathbased setfilesize) to reduce the
-+oplock breaks coming from windows srv.  Piggyback identical file
-+opens on top of each other by incrementing reference count rather
- than resending (helps reduce server resource utilization and avoid
- spurious oplock breaks).
---- linux-2.6.0-test1/fs/cifs/transport.c      2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/cifs/transport.c     2003-07-19 17:03:50.000000000 -0700
-@@ -45,6 +45,11 @@ AllocMidQEntry(struct smb_hdr *smb_buffe
-               cERROR(1, ("Null session passed in to AllocMidQEntry "));
-               return NULL;
-       }
-+      if (ses->server == NULL) {
-+              cERROR(1, ("Null TCP session in AllocMidQEntry"));
-+              return NULL;
-+      }
-+      
-       temp = (struct mid_q_entry *) kmem_cache_alloc(cifs_mid_cachep,
-                                                      SLAB_KERNEL);
-       if (temp == NULL)
-@@ -65,7 +70,6 @@ AllocMidQEntry(struct smb_hdr *smb_buffe
-               /* Should we wake up tcp thread first? BB  */
-               timeout = wait_event_interruptible_timeout(ses->server->response_q,
-                       (ses->server->tcpStatus == CifsGood), timeout);
--        cFYI(1,("timeout (after reconnection wait) %d",timeout));
-       }
-       if (ses->server->tcpStatus == CifsGood) {
---- linux-2.6.0-test1/fs/compat_ioctl.c        2003-07-02 14:53:16.000000000 -0700
-+++ 25/fs/compat_ioctl.c       2003-07-19 17:03:50.000000000 -0700
-@@ -52,7 +52,7 @@
- #include <linux/raw.h>
- #include <linux/smb_fs.h>
- #include <linux/blkpg.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/elevator.h>
- #include <linux/rtc.h>
- #include <linux/pci.h>
---- linux-2.6.0-test1/fs/devfs/base.c  2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/devfs/base.c 2003-07-19 17:03:50.000000000 -0700
-@@ -676,6 +676,7 @@
- #include <linux/smp.h>
- #include <linux/version.h>
- #include <linux/rwsem.h>
-+#include <linux/sched.h>
- #include <asm/uaccess.h>
- #include <asm/io.h>
-@@ -1325,8 +1326,20 @@ static void free_dentry (struct devfs_en
- static int is_devfsd_or_child (struct fs_info *fs_info)
- {
--    if (current == fs_info->devfsd_task) return (TRUE);
--    if (current->pgrp == fs_info->devfsd_pgrp) return (TRUE);
-+    struct task_struct *p = current;
-+
-+    if (p == fs_info->devfsd_task) return (TRUE);
-+    if (p->pgrp == fs_info->devfsd_pgrp) return (TRUE);
-+    read_lock(&tasklist_lock);
-+    for ( ; p != &init_task; p = p->real_parent)
-+    {
-+      if (p == fs_info->devfsd_task)
-+      {
-+          read_unlock (&tasklist_lock);
-+          return (TRUE);
-+      }
-+    }
-+    read_unlock (&tasklist_lock);
-     return (FALSE);
- }   /*  End Function is_devfsd_or_child  */
-@@ -1432,12 +1445,6 @@ int devfs_mk_bdev(dev_t dev, umode_t mod
-       va_list args;
-       int error, n;
--      if (!S_ISBLK(mode)) {
--              printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
--                              __FUNCTION__, mode, buf);
--              return -EINVAL;
--      }
--
-       va_start(args, fmt);
-       n = vsnprintf(buf, 64, fmt, args);
-       if (n >= 64 || !buf[0]) {
-@@ -1445,6 +1452,12 @@ int devfs_mk_bdev(dev_t dev, umode_t mod
-                               __FUNCTION__);
-               return -EINVAL;
-       }
-+      
-+      if (!S_ISBLK(mode)) {
-+              printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
-+                              __FUNCTION__, mode, buf);
-+              return -EINVAL;
-+      }
-       de = _devfs_prepare_leaf(&dir, buf, mode);
-       if (!de) {
-@@ -1478,12 +1491,6 @@ int devfs_mk_cdev(dev_t dev, umode_t mod
-       va_list args;
-       int error, n;
--      if (!S_ISCHR(mode)) {
--              printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
--                              __FUNCTION__, mode, buf);
--              return -EINVAL;
--      }
--
-       va_start(args, fmt);
-       n = vsnprintf(buf, 64, fmt, args);
-       if (n >= 64 || !buf[0]) {
-@@ -1492,6 +1499,12 @@ int devfs_mk_cdev(dev_t dev, umode_t mod
-               return -EINVAL;
-       }
-+      if (!S_ISCHR(mode)) {
-+              printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
-+                              __FUNCTION__, mode, buf);
-+              return -EINVAL;
-+      }
-+
-       de = _devfs_prepare_leaf(&dir, buf, mode);
-       if (!de) {
-               printk(KERN_WARNING "%s: could not prepare leaf for %s\n",
---- linux-2.6.0-test1/fs/exec.c        2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/exec.c       2003-07-19 17:07:16.000000000 -0700
-@@ -305,10 +305,10 @@ void put_dirty_page(struct task_struct *
-       if (!pte_chain)
-               goto out_sig;
-       spin_lock(&tsk->mm->page_table_lock);
--      pmd = pmd_alloc(tsk->mm, pgd, address);
-+      pmd = pmd_alloc_map(tsk->mm, pgd, address);
-       if (!pmd)
-               goto out;
--      pte = pte_alloc_map(tsk->mm, pmd, address);
-+      pte = pte_alloc_map(tsk->mm, pgd, &pmd, address);
-       if (!pte)
-               goto out;
-       if (!pte_none(*pte)) {
-@@ -320,6 +320,7 @@ void put_dirty_page(struct task_struct *
-       set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, prot))));
-       pte_chain = page_add_rmap(page, pte, pte_chain);
-       pte_unmap(pte);
-+      pmd_unmap(pmd);
-       tsk->mm->rss++;
-       spin_unlock(&tsk->mm->page_table_lock);
-@@ -327,6 +328,8 @@ void put_dirty_page(struct task_struct *
-       pte_chain_free(pte_chain);
-       return;
- out:
-+      if (pmd)
-+              pmd_unmap(pmd);
-       spin_unlock(&tsk->mm->page_table_lock);
- out_sig:
-       __free_page(page);
---- linux-2.6.0-test1/fs/ext2/inode.c  2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/ext2/inode.c 2003-07-19 17:06:55.000000000 -0700
-@@ -257,11 +257,12 @@ static int ext2_block_to_path(struct ino
-  *    or when it reads all @depth-1 indirect blocks successfully and finds
-  *    the whole chain, all way to the data (returns %NULL, *err == 0).
-  */
--static Indirect *ext2_get_branch(struct inode *inode,
-+static Indirect *ext2_get_branch_wq(struct inode *inode,
-                                int depth,
-                                int *offsets,
-                                Indirect chain[4],
--                               int *err)
-+                               int *err,
-+                               wait_queue_t *wait)
- {
-       struct super_block *sb = inode->i_sb;
-       Indirect *p = chain;
-@@ -273,8 +274,8 @@ static Indirect *ext2_get_branch(struct 
-       if (!p->key)
-               goto no_block;
-       while (--depth) {
--              bh = sb_bread(sb, le32_to_cpu(p->key));
--              if (!bh)
-+              bh = sb_bread_wq(sb, le32_to_cpu(p->key), wait);
-+              if (!bh || IS_ERR(bh))
-                       goto failure;
-               read_lock(&EXT2_I(inode)->i_meta_lock);
-               if (!verify_chain(chain, p))
-@@ -292,11 +293,21 @@ changed:
-       *err = -EAGAIN;
-       goto no_block;
- failure:
--      *err = -EIO;
-+      *err = IS_ERR(bh) ? PTR_ERR(bh) : -EIO;
- no_block:
-       return p;
- }
-+static Indirect *ext2_get_branch(struct inode *inode,
-+                               int depth,
-+                               int *offsets,
-+                               Indirect chain[4],
-+                               int *err)
-+{
-+      return ext2_get_branch_wq(inode, depth, offsets, chain,
-+              err, NULL);
-+}
-+
- /**
-  *    ext2_find_near - find a place for allocation with sufficient locality
-  *    @inode: owner
-@@ -536,7 +547,8 @@ changed:
-  * reachable from inode.
-  */
--static int ext2_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create)
-+static int ext2_get_block_wq(struct inode *inode, sector_t iblock,
-+      struct buffer_head *bh_result, int create, wait_queue_t *wait)
- {
-       int err = -EIO;
-       int offsets[4];
-@@ -551,7 +563,8 @@ static int ext2_get_block(struct inode *
-               goto out;
- reread:
--      partial = ext2_get_branch(inode, depth, offsets, chain, &err);
-+      partial = ext2_get_branch_wq(inode, depth, offsets, chain, &err,
-+              wait);
-       /* Simplest case - block found, no allocation needed */
-       if (!partial) {
-@@ -565,7 +578,7 @@ got_it:
-       }
-       /* Next simple case - plain lookup or failed read of indirect block */
--      if (!create || err == -EIO) {
-+      if (!create || err == -EIO || err == -EIOCBRETRY) {
- cleanup:
-               while (partial > chain) {
-                       brelse(partial->bh);
-@@ -606,6 +619,19 @@ changed:
-       goto reread;
- }
-+static int ext2_get_block_async(struct inode *inode, sector_t iblock,
-+      struct buffer_head *bh_result, int create)
-+{
-+      return ext2_get_block_wq(inode, iblock, bh_result, create,
-+              current->io_wait);
-+}
-+
-+static int ext2_get_block(struct inode *inode, sector_t iblock,
-+      struct buffer_head *bh_result, int create)
-+{
-+      return ext2_get_block_wq(inode, iblock, bh_result, create, NULL);
-+}
-+
- static int ext2_writepage(struct page *page, struct writeback_control *wbc)
- {
-       return block_write_full_page(page, ext2_get_block, wbc);
-@@ -627,7 +653,7 @@ static int
- ext2_prepare_write(struct file *file, struct page *page,
-                       unsigned from, unsigned to)
- {
--      return block_prepare_write(page,from,to,ext2_get_block);
-+      return block_prepare_write(page,from,to,ext2_get_block_async);
- }
- static int
-@@ -1125,9 +1151,16 @@ void ext2_read_inode (struct inode * ino
-                               inode->i_mapping->a_ops = &ext2_aops;
-               }
-       } else {
-+              dev_t devno = le32_to_cpu(raw_inode->i_block[0]);
-+
-+              if (devno == 0) {
-+                      unsigned int lo = le32_to_cpu(raw_inode->i_block[1]);
-+                      unsigned int hi = le32_to_cpu(raw_inode->i_block[2]);
-+
-+                      devno = ((unsigned long long) hi << 32) | lo;
-+              }
-               inode->i_op = &ext2_special_inode_operations;
--              init_special_inode(inode, inode->i_mode,
--                                 le32_to_cpu(raw_inode->i_block[0]));
-+              init_special_inode(inode, inode->i_mode, devno);
-       }
-       brelse (bh);
-       ext2_set_inode_flags(inode);
-@@ -1215,10 +1248,22 @@ static int ext2_update_inode(struct inod
-       }
-       
-       raw_inode->i_generation = cpu_to_le32(inode->i_generation);
--      if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
--              raw_inode->i_block[0] = cpu_to_le32(kdev_t_to_nr(inode->i_rdev));
--      else for (n = 0; n < EXT2_N_BLOCKS; n++)
--              raw_inode->i_block[n] = ei->i_data[n];
-+      if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
-+              dev_t devno = kdev_t_to_nr(inode->i_rdev);
-+              unsigned int hi = (sizeof(dev_t) > 4) ? (devno >> 32) : 0;
-+              unsigned int lo = (devno & 0xffffffff);
-+
-+              if (hi == 0 && lo != 0) {
-+                      raw_inode->i_block[0] = cpu_to_le32(lo);
-+              } else {
-+                      raw_inode->i_block[0] = 0;
-+                      raw_inode->i_block[1] = cpu_to_le32(lo);
-+                      raw_inode->i_block[2] = cpu_to_le32(hi);
-+              }
-+      } else {
-+              for (n = 0; n < EXT2_N_BLOCKS; n++)
-+                      raw_inode->i_block[n] = ei->i_data[n];
-+      }
-       mark_buffer_dirty(bh);
-       if (do_sync) {
-               sync_dirty_buffer(bh);
---- linux-2.6.0-test1/fs/ext3/acl.c    2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/ext3/acl.c   2003-07-19 17:03:50.000000000 -0700
-@@ -425,7 +425,7 @@ ext3_acl_chmod(struct inode *inode)
-       if (!error) {
-               handle_t *handle;
--              handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+              handle = ext3_journal_start(inode, EXT3_DATA_TRANS_BLOCKS);
-               if (IS_ERR(handle)) {
-                       error = PTR_ERR(handle);
-                       ext3_std_error(inode->i_sb, error);
-@@ -531,7 +531,7 @@ ext3_xattr_set_acl(struct inode *inode, 
-       } else
-               acl = NULL;
--      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+      handle = ext3_journal_start(inode, EXT3_DATA_TRANS_BLOCKS);
-       if (IS_ERR(handle))
-               return PTR_ERR(handle);
-       error = ext3_set_acl(handle, inode, type, acl);
---- linux-2.6.0-test1/fs/ext3/balloc.c 2003-06-22 12:04:44.000000000 -0700
-+++ 25/fs/ext3/balloc.c        2003-07-19 17:07:17.000000000 -0700
-@@ -279,7 +279,8 @@ error_return:
-       return;
- }
--/* For ext3 allocations, we must not reuse any blocks which are
-+/*
-+ * For ext3 allocations, we must not reuse any blocks which are
-  * allocated in the bitmap buffer's "last committed data" copy.  This
-  * prevents deletes from freeing up the page for reuse until we have
-  * committed the delete transaction.
-@@ -294,14 +295,21 @@ error_return:
-  * data-writes at some point, and disable it for metadata allocations or
-  * sync-data inodes.
-  */
--static inline int ext3_test_allocatable(int nr, struct buffer_head *bh,
--                                      int have_access)
-+static inline int ext3_test_allocatable(int nr, struct buffer_head *bh)
- {
-+      int ret;
-+      struct journal_head *jh = bh2jh(bh);
-+
-       if (ext3_test_bit(nr, bh->b_data))
-               return 0;
--      if (!have_access || !buffer_jbd(bh) || !bh2jh(bh)->b_committed_data)
--              return 1;
--      return !ext3_test_bit(nr, bh2jh(bh)->b_committed_data);
-+
-+      jbd_lock_bh_state(bh);
-+      if (!jh->b_committed_data)
-+              ret = 1;
-+      else
-+              ret = !ext3_test_bit(nr, jh->b_committed_data);
-+      jbd_unlock_bh_state(bh);
-+      return ret;
- }
- /*
-@@ -311,11 +319,12 @@ static inline int ext3_test_allocatable(
-  * the initial goal; then for a free byte somewhere in the bitmap; then
-  * for any free bit in the bitmap.
-  */
--static int find_next_usable_block(int start, struct buffer_head *bh,
--                              int maxblocks, int have_access)
-+static int
-+find_next_usable_block(int start, struct buffer_head *bh, int maxblocks)
- {
-       int here, next;
-       char *p, *r;
-+      struct journal_head *jh = bh2jh(bh);
-       if (start > 0) {
-               /*
-@@ -328,48 +337,38 @@ static int find_next_usable_block(int st
-                */
-               int end_goal = (start + 63) & ~63;
-               here = ext3_find_next_zero_bit(bh->b_data, end_goal, start);
--              if (here < end_goal &&
--                      ext3_test_allocatable(here, bh, have_access))
-+              if (here < end_goal && ext3_test_allocatable(here, bh))
-                       return here;
--      
--              ext3_debug ("Bit not found near goal\n");
-+              ext3_debug("Bit not found near goal\n");
-       }
-       here = start;
-       if (here < 0)
-               here = 0;
--      /*
--       * There has been no free block found in the near vicinity of
--       * the goal: do a search forward through the block groups,
--       * searching in each group first for an entire free byte in the
--       * bitmap and then for any free bit.
--       * 
--       * Search first in the remainder of the current group 
--       */
--      p = ((char *) bh->b_data) + (here >> 3);
-+      p = ((char *)bh->b_data) + (here >> 3);
-       r = memscan(p, 0, (maxblocks - here + 7) >> 3);
--      next = (r - ((char *) bh->b_data)) << 3;
-+      next = (r - ((char *)bh->b_data)) << 3;
--      if (next < maxblocks && ext3_test_allocatable(next, bh, have_access))
-+      if (next < maxblocks && ext3_test_allocatable(next, bh))
-               return next;
--      /* The bitmap search --- search forward alternately
--       * through the actual bitmap and the last-committed copy
--       * until we find a bit free in both. */
--
-+      /*
-+       * The bitmap search --- search forward alternately through the actual
-+       * bitmap and the last-committed copy until we find a bit free in
-+       * both
-+       */
-       while (here < maxblocks) {
--              next  = ext3_find_next_zero_bit ((unsigned long *) bh->b_data, 
--                                               maxblocks, here);
-+              next = ext3_find_next_zero_bit(bh->b_data, maxblocks, here);
-               if (next >= maxblocks)
-                       return -1;
--              if (ext3_test_allocatable(next, bh, have_access))
-+              if (ext3_test_allocatable(next, bh))
-                       return next;
--
--              if (have_access)
--                      here = ext3_find_next_zero_bit
--                              ((unsigned long *) bh2jh(bh)->b_committed_data, 
--                              maxblocks, next);
-+              jbd_lock_bh_state(bh);
-+              if (jh->b_committed_data)
-+                      here = ext3_find_next_zero_bit(jh->b_committed_data,
-+                                                      maxblocks, next);
-+              jbd_unlock_bh_state(bh);
-       }
-       return -1;
- }
-@@ -384,14 +383,20 @@ static int find_next_usable_block(int st
- static inline int
- claim_block(spinlock_t *lock, int block, struct buffer_head *bh)
- {
-+      struct journal_head *jh = bh2jh(bh);
-+      int ret;
-+
-       if (ext3_set_bit_atomic(lock, block, bh->b_data))
-               return 0;
--      if (buffer_jbd(bh) && bh2jh(bh)->b_committed_data &&
--                      ext3_test_bit(block, bh2jh(bh)->b_committed_data)) {
-+      jbd_lock_bh_state(bh);
-+      if (jh->b_committed_data && ext3_test_bit(block,jh->b_committed_data)) {
-               ext3_clear_bit_atomic(lock, block, bh->b_data);
--              return 0;
-+              ret = 0;
-+      } else {
-+              ret = 1;
-       }
--      return 1;
-+      jbd_unlock_bh_state(bh);
-+      return ret;
- }
- /*
-@@ -403,43 +408,34 @@ static int
- ext3_try_to_allocate(struct super_block *sb, handle_t *handle, int group,
-               struct buffer_head *bitmap_bh, int goal, int *errp)
- {
--      int i, fatal = 0;
--      int have_access = 0;
-+      int i;
-+      int fatal;
-       int credits = 0;
-       *errp = 0;
--      if (goal >= 0 && ext3_test_allocatable(goal, bitmap_bh, 0))
--              goto got;
--
--repeat:
--      goal = find_next_usable_block(goal, bitmap_bh,
--                              EXT3_BLOCKS_PER_GROUP(sb), have_access);
--      if (goal < 0)
-+      /*
-+       * Make sure we use undo access for the bitmap, because it is critical
-+       * that we do the frozen_data COW on bitmap buffers in all cases even
-+       * if the buffer is in BJ_Forget state in the committing transaction.
-+       */
-+      BUFFER_TRACE(bitmap_bh, "get undo access for new block");
-+      fatal = ext3_journal_get_undo_access(handle, bitmap_bh, &credits);
-+      if (fatal) {
-+              *errp = fatal;
-               goto fail;
-+      }
--      for (i = 0;
--              i < 7 && goal > 0 && 
--                      ext3_test_allocatable(goal - 1, bitmap_bh, have_access);
--              i++, goal--);
--
--got:
--      if (!have_access) {
--              /*
--               * Make sure we use undo access for the bitmap, because it is
--               * critical that we do the frozen_data COW on bitmap buffers in
--               * all cases even if the buffer is in BJ_Forget state in the
--               * committing transaction.
--               */
--              BUFFER_TRACE(bitmap_bh, "get undo access for new block");
--              fatal = ext3_journal_get_undo_access(handle, bitmap_bh,
--                                                      &credits);
--              if (fatal) {
--                      *errp = fatal;
--                      goto fail;
--              }
--              jbd_lock_bh_state(bitmap_bh);
--              have_access = 1;
-+repeat:
-+      if (goal < 0 || !ext3_test_allocatable(goal, bitmap_bh)) {
-+              goal = find_next_usable_block(goal, bitmap_bh,
-+                                      EXT3_BLOCKS_PER_GROUP(sb));
-+              if (goal < 0)
-+                      goto fail_access;
-+
-+              for (i = 0; i < 7 && goal > 0 &&
-+                              ext3_test_allocatable(goal - 1, bitmap_bh);
-+                      i++, goal--);
-       }
-       if (!claim_block(sb_bgl_lock(EXT3_SB(sb), group), goal, bitmap_bh)) {
-@@ -449,29 +445,25 @@ got:
-                */
-               goal++;
-               if (goal >= EXT3_BLOCKS_PER_GROUP(sb))
--                      goto fail;
-+                      goto fail_access;
-               goto repeat;
-       }
-       BUFFER_TRACE(bitmap_bh, "journal_dirty_metadata for bitmap block");
--      jbd_unlock_bh_state(bitmap_bh);
-       fatal = ext3_journal_dirty_metadata(handle, bitmap_bh);
-       if (fatal) {
-               *errp = fatal;
-               goto fail;
-       }
--
-       return goal;
-+
-+fail_access:
-+      BUFFER_TRACE(bitmap_bh, "journal_release_buffer");
-+      ext3_journal_release_buffer(handle, bitmap_bh, credits);
- fail:
--      if (have_access) {
--              BUFFER_TRACE(bitmap_bh, "journal_release_buffer");
--              jbd_unlock_bh_state(bitmap_bh);
--              ext3_journal_release_buffer(handle, bitmap_bh, credits);
--      }
-       return -1;
- }
--
- /*
-  * ext3_new_block uses a goal block to assist allocation.  If the goal is
-  * free, or there is a free block within 32 blocks of the goal, that block
---- linux-2.6.0-test1/fs/ext3/inode.c  2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/ext3/inode.c 2003-07-19 17:07:19.000000000 -0700
-@@ -936,12 +936,14 @@ struct buffer_head *ext3_getblk(handle_t
-                          ext3_get_block instead, so it's not a
-                          problem. */
-                       lock_buffer(bh);
--                      BUFFER_TRACE(bh, "call get_create_access");
--                      fatal = ext3_journal_get_create_access(handle, bh);
--                      if (!fatal) {
--                              memset(bh->b_data, 0,
--                                     inode->i_sb->s_blocksize);
--                              set_buffer_uptodate(bh);
-+                      if (!buffer_uptodate(bh)) {
-+                              BUFFER_TRACE(bh, "call get_create_access");
-+                              fatal = ext3_journal_get_create_access(handle, bh);
-+                              if (!fatal) {
-+                                      memset(bh->b_data, 0,
-+                                                      inode->i_sb->s_blocksize);
-+                                      set_buffer_uptodate(bh);
-+                              }
-                       }
-                       unlock_buffer(bh);
-                       BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-@@ -2337,26 +2339,114 @@ static unsigned long ext3_get_inode_bloc
- }
- /* 
-- * ext3_get_inode_loc returns with an extra refcount against the
-- * inode's underlying buffer_head on success. 
-+ * ext3_get_inode_loc returns with an extra refcount against the inode's
-+ * underlying buffer_head on success.  If `in_mem' is false then we're purely
-+ * trying to determine the inode's location on-disk and no read need be
-+ * performed.
-  */
--
--int ext3_get_inode_loc (struct inode *inode, struct ext3_iloc *iloc)
-+static int ext3_get_inode_loc(struct inode *inode,
-+                              struct ext3_iloc *iloc, int in_mem)
- {
-       unsigned long block;
-+      struct buffer_head *bh;
-       block = ext3_get_inode_block(inode->i_sb, inode->i_ino, iloc);
--      if (block) {
--              struct buffer_head *bh = sb_bread(inode->i_sb, block);
--              if (bh) {
--                      iloc->bh = bh;
--                      return 0;
--              }
-+      if (!block)
-+              return -EIO;
-+
-+      bh = sb_getblk(inode->i_sb, block);
-+      if (!bh) {
-               ext3_error (inode->i_sb, "ext3_get_inode_loc",
--                          "unable to read inode block - "
--                          "inode=%lu, block=%lu", inode->i_ino, block);
-+                              "unable to read inode block - "
-+                              "inode=%lu, block=%lu", inode->i_ino, block);
-+              return -EIO;
-       }
--      return -EIO;
-+      if (!buffer_uptodate(bh)) {
-+              lock_buffer(bh);
-+              if (buffer_uptodate(bh)) {
-+                      /* someone brought it uptodate while we waited */
-+                      unlock_buffer(bh);
-+                      goto has_buffer;
-+              }
-+
-+              /* we can't skip I/O if inode is on a disk only */
-+              if (in_mem) {
-+                      struct buffer_head *bitmap_bh;
-+                      struct ext3_group_desc *desc;
-+                      int inodes_per_buffer;
-+                      int inode_offset, i;
-+                      int block_group;
-+                      int start;
-+
-+                      /*
-+                       * If this is the only valid inode in the block we
-+                       * need not read the block.
-+                       */
-+                      block_group = (inode->i_ino - 1) /
-+                                      EXT3_INODES_PER_GROUP(inode->i_sb);
-+                      inodes_per_buffer = bh->b_size /
-+                              EXT3_INODE_SIZE(inode->i_sb);
-+                      inode_offset = ((inode->i_ino - 1) %
-+                                      EXT3_INODES_PER_GROUP(inode->i_sb));
-+                      start = inode_offset & ~(inodes_per_buffer - 1);
-+
-+                      /* Is the inode bitmap in cache? */
-+                      desc = ext3_get_group_desc(inode->i_sb,
-+                                              block_group, NULL);
-+                      if (!desc)
-+                              goto make_io;
-+
-+                      bitmap_bh = sb_getblk(inode->i_sb,
-+                                      le32_to_cpu(desc->bg_inode_bitmap));
-+                      if (!bitmap_bh)
-+                              goto make_io;
-+
-+                      /*
-+                       * If the inode bitmap isn't in cache then the
-+                       * optimisation may end up performing two reads instead
-+                       * of one, so skip it.
-+                       */
-+                      if (!buffer_uptodate(bitmap_bh)) {
-+                              brelse(bitmap_bh);
-+                              goto make_io;
-+                      }
-+                      for (i = start; i < start + inodes_per_buffer; i++) {
-+                              if (i == inode_offset)
-+                                      continue;
-+                              if (ext3_test_bit(i, bitmap_bh->b_data))
-+                                      break;
-+                      }
-+                      brelse(bitmap_bh);
-+                      if (i == start + inodes_per_buffer) {
-+                              /* all other inodes are free, so skip I/O */
-+                              memset(bh->b_data, 0, bh->b_size);
-+                              set_buffer_uptodate(bh);
-+                              unlock_buffer(bh);
-+                              goto has_buffer;
-+                      }
-+              }
-+
-+make_io:
-+              /*
-+               * There are another valid inodes in the buffer so we must
-+               * read the block from disk
-+               */
-+              get_bh(bh);
-+              bh->b_end_io = end_buffer_io_sync;
-+              submit_bh(READ, bh);
-+              wait_on_buffer(bh);
-+              if (!buffer_uptodate(bh)) {
-+                      ext3_error(inode->i_sb, "ext3_get_inode_loc",
-+                                      "unable to read inode block - "
-+                                      "inode=%lu, block=%lu",
-+                                      inode->i_ino, block);
-+                      brelse(bh);
-+                      return -EIO;
-+              }
-+      }
-+has_buffer:
-+      iloc->bh = bh;
-+      return 0;
- }
- void ext3_set_inode_flags(struct inode *inode)
-@@ -2376,7 +2466,6 @@ void ext3_set_inode_flags(struct inode *
-               inode->i_flags |= S_DIRSYNC;
- }
--
- void ext3_read_inode(struct inode * inode)
- {
-       struct ext3_iloc iloc;
-@@ -2389,7 +2478,7 @@ void ext3_read_inode(struct inode * inod
-       ei->i_acl = EXT3_ACL_NOT_CACHED;
-       ei->i_default_acl = EXT3_ACL_NOT_CACHED;
- #endif
--      if (ext3_get_inode_loc(inode, &iloc))
-+      if (ext3_get_inode_loc(inode, &iloc, 0))
-               goto bad_inode;
-       bh = iloc.bh;
-       raw_inode = ext3_raw_inode(&iloc);
-@@ -2476,9 +2565,15 @@ void ext3_read_inode(struct inode * inod
-                       ext3_set_aops(inode);
-               }
-       } else {
-+              dev_t devno = le32_to_cpu(raw_inode->i_block[0]);
-+              if (devno == 0) {
-+                      unsigned int lo = le32_to_cpu(raw_inode->i_block[1]);
-+                      unsigned int hi = le32_to_cpu(raw_inode->i_block[2]);
-+                      devno = ((unsigned long long) hi << 32) | lo;
-+              }
-+
-               inode->i_op = &ext3_special_inode_operations;
--              init_special_inode(inode, inode->i_mode,
--                                 le32_to_cpu(raw_inode->i_block[0]));
-+              init_special_inode(inode, inode->i_mode, devno);
-       }
-       brelse (iloc.bh);
-       ext3_set_inode_flags(inode);
-@@ -2578,12 +2673,22 @@ static int ext3_do_update_inode(handle_t
-               }
-       }
-       raw_inode->i_generation = cpu_to_le32(inode->i_generation);
--      if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
--              raw_inode->i_block[0] =
--                      cpu_to_le32(kdev_t_to_nr(inode->i_rdev));
--      else for (block = 0; block < EXT3_N_BLOCKS; block++)
--              raw_inode->i_block[block] = ei->i_data[block];
-+      if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
-+              dev_t devno = kdev_t_to_nr(inode->i_rdev);
-+              unsigned int hi = (sizeof(dev_t) > 4) ? (devno >> 32) : 0;
-+              unsigned int lo = (devno & 0xffffffff);
-+              if (hi == 0 && lo != 0) {
-+                      raw_inode->i_block[0] = cpu_to_le32(lo);
-+              } else {
-+                      raw_inode->i_block[0] = 0;
-+                      raw_inode->i_block[1] = cpu_to_le32(lo);
-+                      raw_inode->i_block[2] = cpu_to_le32(hi);
-+              }
-+      } else {
-+              for (block = 0; block < EXT3_N_BLOCKS; block++)
-+                      raw_inode->i_block[block] = ei->i_data[block];
-+      }
-       BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
-       rc = ext3_journal_dirty_metadata(handle, bh);
-       if (!err)
-@@ -2793,7 +2898,7 @@ ext3_reserve_inode_write(handle_t *handl
- {
-       int err = 0;
-       if (handle) {
--              err = ext3_get_inode_loc(inode, iloc);
-+              err = ext3_get_inode_loc(inode, iloc, 1);
-               if (!err) {
-                       BUFFER_TRACE(iloc->bh, "get_write_access");
-                       err = ext3_journal_get_write_access(handle, iloc->bh);
-@@ -2891,7 +2996,7 @@ ext3_pin_inode(handle_t *handle, struct 
-       int err = 0;
-       if (handle) {
--              err = ext3_get_inode_loc(inode, &iloc);
-+              err = ext3_get_inode_loc(inode, &iloc, 1);
-               if (!err) {
-                       BUFFER_TRACE(iloc.bh, "get_write_access");
-                       err = journal_get_write_access(handle, iloc.bh);
---- linux-2.6.0-test1/fs/ext3/super.c  2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/ext3/super.c 2003-07-19 17:07:20.000000000 -0700
-@@ -1811,7 +1811,10 @@ void ext3_write_super (struct super_bloc
-       if (down_trylock(&sb->s_lock) == 0)
-               BUG();
-       sb->s_dirt = 0;
-+#if 0
-+      /* we really don't need this because of log's nature -bzzz */
-       journal_start_commit(EXT3_SB(sb)->s_journal, NULL);
-+#endif
- }
- static int ext3_sync_fs(struct super_block *sb, int wait)
---- linux-2.6.0-test1/fs/ext3/xattr.c  2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/ext3/xattr.c 2003-07-19 17:03:50.000000000 -0700
-@@ -875,7 +875,7 @@ ext3_xattr_set(struct inode *inode, int 
-       handle_t *handle;
-       int error, error2;
--      handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS);
-+      handle = ext3_journal_start(inode, EXT3_DATA_TRANS_BLOCKS);
-       if (IS_ERR(handle))
-               error = PTR_ERR(handle);
-       else
-@@ -1050,12 +1050,10 @@ ext3_xattr_cache_find(handle_t *handle, 
-                       ext3_error(inode->i_sb, "ext3_xattr_cache_find",
-                               "inode %ld: block %ld read error",
-                               inode->i_ino, (unsigned long) ce->e_block);
--              } else {
-+              } else if (ext3_journal_get_write_access_credits(
-+                              handle, bh, credits) == 0) {
-                       /* ext3_journal_get_write_access() requires an unlocked
-                        * bh, which complicates things here. */
--                      if (ext3_journal_get_write_access_credits(handle, bh,
--                                                                credits) != 0)
--                              return NULL;
-                       lock_buffer(bh);
-                       if (le32_to_cpu(HDR(bh)->h_refcount) >
-                                  EXT3_XATTR_REFCOUNT_MAX) {
-@@ -1070,6 +1068,7 @@ ext3_xattr_cache_find(handle_t *handle, 
-                       }
-                       unlock_buffer(bh);
-                       journal_release_buffer(handle, bh, *credits);
-+                      *credits = 0;
-                       brelse(bh);
-               }
-               ce = mb_cache_entry_find_next(ce, 0, inode->i_sb->s_bdev, hash);
---- linux-2.6.0-test1/fs/inode.c       2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/inode.c      2003-07-19 17:07:03.000000000 -0700
-@@ -184,6 +184,7 @@ void inode_init_once(struct inode *inode
-       INIT_RADIX_TREE(&inode->i_data.page_tree, GFP_ATOMIC);
-       spin_lock_init(&inode->i_data.page_lock);
-       init_MUTEX(&inode->i_data.i_shared_sem);
-+      atomic_set(&inode->i_data.truncate_count, 0);
-       INIT_LIST_HEAD(&inode->i_data.private_list);
-       spin_lock_init(&inode->i_data.private_lock);
-       INIT_LIST_HEAD(&inode->i_data.i_mmap);
---- linux-2.6.0-test1/fs/intermezzo/sysctl.c   2003-06-14 12:17:59.000000000 -0700
-+++ 25/fs/intermezzo/sysctl.c  2003-07-19 17:03:50.000000000 -0700
-@@ -36,7 +36,6 @@
- #include <asm/segment.h>
- #include <asm/uaccess.h>
- #include <linux/utsname.h>
--#include <linux/blk.h>
- #include "intermezzo_fs.h"
- #include "intermezzo_psdev.h"
---- linux-2.6.0-test1/fs/intermezzo/vfs.c      2003-07-10 18:50:31.000000000 -0700
-+++ 25/fs/intermezzo/vfs.c     2003-07-19 17:03:50.000000000 -0700
-@@ -66,7 +66,7 @@
- #include <linux/file.h>
- #include <linux/fs.h>
- #include <linux/namei.h>
--#include <linux/blk.h>
-+#include <linux/genhd.h>
- #include "intermezzo_fs.h"
- #include "intermezzo_psdev.h"
---- linux-2.6.0-test1/fs/jbd/journal.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/jbd/journal.c        2003-07-19 17:07:09.000000000 -0700
-@@ -119,19 +119,16 @@ void __journal_internal_check(void)
-  *    the disk.  Flushing these old buffers to reclaim space in the log is
-  *    known as checkpointing, and this thread is responsible for that job.
-  */
--
--journal_t *current_journal;           // AKPM: debug
--
- int kjournald(void *arg)
- {
-       journal_t *journal = (journal_t *) arg;
-       transaction_t *transaction;
-       struct timer_list timer;
--      current_journal = journal;
--
-       daemonize("kjournald");
-+      current->flags |= PF_SYNCWRITE; /* Anticipatory scheduler hint */
-+
-       /* Set up an interval timer which can be used to trigger a
-            commit wakeup after the commit interval expires */
-       init_timer(&timer);
---- linux-2.6.0-test1/fs/jbd/transaction.c     2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/jbd/transaction.c    2003-07-19 17:04:15.000000000 -0700
-@@ -742,7 +742,7 @@ int journal_get_write_access(handle_t *h
-       /* We do not want to get caught playing with fields which the
-        * log thread also manipulates.  Make sure that the buffer
-        * completes any outstanding IO before proceeding. */
--      rc = do_get_write_access(handle, jh, 0, NULL);
-+      rc = do_get_write_access(handle, jh, 0, credits);
-       journal_put_journal_head(jh);
-       return rc;
- }
-@@ -1106,16 +1106,6 @@ int journal_dirty_metadata(handle_t *han
-       if (jh->b_transaction == handle->h_transaction &&
-                                       jh->b_jlist == BJ_Metadata) {
-               JBUFFER_TRACE(jh, "fastpath");
--              console_verbose();
--              if (jh->b_transaction != journal->j_running_transaction) {
--                      printk("jh->b_transaction=%p\n", jh->b_transaction);
--                      printk("journal->j_running_transaction=%p\n",
--                              journal->j_running_transaction);
--                      printk("handle->h_transaction=%p\n",
--                              handle->h_transaction);
--                      printk("journal->j_committing_transaction=%p\n",
--                              journal->j_committing_transaction);
--              }
-               J_ASSERT_JH(jh, jh->b_transaction ==
-                                       journal->j_running_transaction);
-               goto out_unlock_bh;
-@@ -1328,9 +1318,6 @@ int journal_stop(handle_t *handle)
-       journal_t *journal = transaction->t_journal;
-       int old_handle_count, err;
--      if (!handle)
--              return 0;
--
-       J_ASSERT(transaction->t_updates > 0);
-       J_ASSERT(journal_current_handle() == handle);
---- linux-2.6.0-test1/fs/jffs2/Makefile        2003-06-14 12:18:03.000000000 -0700
-+++ 25/fs/jffs2/Makefile       2003-07-19 17:03:50.000000000 -0700
-@@ -13,6 +13,7 @@ JFFS2_OBJS   := dir.o file.o ioctl.o nodel
- LINUX_OBJS-24 := super-v24.o crc32.o
- LINUX_OBJS-25 := super.o
-+LINUX_OBJS-26 := super.o
- NAND_OBJS-$(CONFIG_JFFS2_FS_NAND)     := wbuf.o
---- linux-2.6.0-test1/fs/Kconfig       2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/Kconfig      2003-07-19 17:07:09.000000000 -0700
-@@ -1323,6 +1323,31 @@ config NFS_V4
-         If unsure, say N.
-+config NFS_DIRECTIO
-+      bool
-+      depends on NFS_FS
-+      default y
-+      help
-+        This option enables applications to perform uncached I/O on files
-+        in NFS file systems using the O_DIRECT open() flag.  When O_DIRECT
-+        is set for a file, its data is not cached in the system's page
-+        cache.  Data is moved to and from user-level application buffers
-+        directly.  Unlike local disk-based file systems, NFS O_DIRECT has
-+        no alignment restrictions.
-+
-+        Unless your program is designed to use O_DIRECT properly, you are
-+        much better off allowing the NFS client to manage data caching for
-+        you.  Misusing O_DIRECT can cause poor server performance or network
-+        storms.  This kernel build option defaults OFF to avoid exposing
-+        system administrators unwittingly to a potentially hazardous
-+        feature.
-+
-+        For more details on NFS O_DIRECT, see fs/nfs/direct.c.
-+
-+        If unsure, say N.  This reduces the size of the NFS client, and
-+        causes open() to return EINVAL if a file residing in NFS is
-+        opened with the O_DIRECT flag.
-+
- config NFSD
-       tristate "NFS server support"
-       depends on INET
---- linux-2.6.0-test1/fs/lockd/clntlock.c      2003-06-14 12:18:34.000000000 -0700
-+++ 25/fs/lockd/clntlock.c     2003-07-19 17:03:50.000000000 -0700
-@@ -187,8 +187,9 @@ nlmclnt_recovery(struct nlm_host *host, 
-       } else {
-               nlmclnt_prepare_reclaim(host, newstate);
-               nlm_get_host(host);
--              MOD_INC_USE_COUNT;
--              kernel_thread(reclaimer, host, CLONE_KERNEL);
-+              __module_get(THIS_MODULE);
-+              if (kernel_thread(reclaimer, host, CLONE_KERNEL))
-+                      module_put(THIS_MODULE);
-       }
- }
-@@ -244,7 +245,5 @@ restart:
-       nlm_release_host(host);
-       lockd_down();
-       unlock_kernel();
--      MOD_DEC_USE_COUNT;
--
--      return 0;
-+      module_put_and_exit(0);
- }
---- linux-2.6.0-test1/fs/lockd/svc.c   2003-07-02 14:53:16.000000000 -0700
-+++ 25/fs/lockd/svc.c  2003-07-19 17:03:50.000000000 -0700
-@@ -88,7 +88,11 @@ lockd(struct svc_rqst *rqstp)
-       unsigned long grace_period_expire;
-       /* Lock module and set up kernel thread */
--      MOD_INC_USE_COUNT;
-+      /* lockd_up is waiting for us to startup, so will
-+       * be holding a reference to this module, so it
-+       * is safe to just claim another reference
-+       */
-+      __module_get(THIS_MODULE);
-       lock_kernel();
-       /*
-@@ -183,7 +187,7 @@ lockd(struct svc_rqst *rqstp)
-       /* Release module */
-       unlock_kernel();
--      MOD_DEC_USE_COUNT;
-+      module_put_and_exit(0);
- }
- /*
---- linux-2.6.0-test1/fs/namei.c       2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/namei.c      2003-07-19 17:06:37.000000000 -0700
-@@ -1424,11 +1424,12 @@ int vfs_mknod(struct inode *dir, struct 
-       return error;
- }
--asmlinkage long sys_mknod(const char __user * filename, int mode, dev_t dev)
-+static long
-+do_mknod(const char __user *filename, int mode, dev_t dev)
- {
-       int error = 0;
--      char * tmp;
--      struct dentry * dentry;
-+      char *tmp;
-+      struct dentry *dentry;
-       struct nameidata nd;
-       if (S_ISDIR(mode))
-@@ -1469,6 +1470,27 @@ out:
-       return error;
- }
-+asmlinkage long
-+sys_mknod(const char __user *filename, int mode, unsigned int devnr)
-+{
-+      dev_t dev = devnr;
-+
-+      if (dev != devnr)
-+              return -EOVERFLOW;
-+      return do_mknod(filename, mode, dev);
-+}
-+
-+asmlinkage long
-+sys_mknod64(const char __user *filename, int mode,
-+          unsigned int major, unsigned int minor)
-+{
-+      dev_t dev = MKDEV(major, minor);
-+
-+      if (MAJOR(dev) != major || MINOR(dev) != minor)
-+              return -EOVERFLOW;
-+      return do_mknod(filename, mode, dev);
-+}
-+
- int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
- {
-       int error = may_create(dir, dentry, NULL);
---- linux-2.6.0-test1/fs/namespace.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/namespace.c  2003-07-19 17:03:50.000000000 -0700
-@@ -1158,3 +1158,13 @@ void __init mnt_init(unsigned long mempa
-       init_rootfs();
-       init_mount_tree();
- }
-+
-+void __put_namespace(struct namespace *namespace)
-+{
-+      down_write(&namespace->sem);
-+      spin_lock(&vfsmount_lock);
-+      umount_tree(namespace->root);
-+      spin_unlock(&vfsmount_lock);
-+      up_write(&namespace->sem);
-+      kfree(namespace);
-+}
---- linux-2.6.0-test1/fs/nfs/direct.c  2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/direct.c 2003-07-19 17:07:08.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * linux/fs/nfs/direct.c
-  *
-- * Copyright (C) 2001 by Chuck Lever <cel@netapp.com>
-+ * Copyright (C) 2003 by Chuck Lever <cel@netapp.com>
-  *
-  * High-performance uncached I/O for the Linux NFS client
-  *
-@@ -26,19 +26,23 @@
-  * also supports uncaching whole NFS partitions with "-o forcedirectio,"
-  * an undocumented mount option.
-  *
-- * Designed by Jeff Kimmel, Chuck Lever, and Trond Myklebust.
-+ * Designed by Jeff Kimmel, Chuck Lever, and Trond Myklebust, with
-+ * help from Andrew Morton.
-  *
-  * 18 Dec 2001        Initial implementation for 2.4  --cel
-  * 08 Jul 2002        Version for 2.4.19, with bug fixes --trondmy
-- * 24 Sep 2002        Rewrite to use asynchronous RPCs, port to 2.5  --cel
-+ * 08 Jun 2003        Port to 2.5 APIs  --cel
-  *
-  */
- #include <linux/config.h>
-+#include <linux/errno.h>
- #include <linux/sched.h>
- #include <linux/kernel.h>
-+#include <linux/smp_lock.h>
- #include <linux/file.h>
--#include <linux/errno.h>
-+#include <linux/pagemap.h>
-+
- #include <linux/nfs_fs.h>
- #include <linux/nfs_page.h>
- #include <linux/sunrpc/clnt.h>
-@@ -46,35 +50,41 @@
- #include <asm/system.h>
- #include <asm/uaccess.h>
--#define NFSDBG_FACILITY               (NFSDBG_PAGECACHE | NFSDBG_VFS)
-+#define NFSDBG_FACILITY               NFSDBG_VFS
- #define VERF_SIZE             (2 * sizeof(__u32))
-+#define MAX_DIRECTIO_SIZE     (4096UL << PAGE_SHIFT)
- /**
-- * nfs_get_user_pages - find and set up page representing user buffer
-- * addr: user-space address of target buffer
-- * size: total size in bytes of target buffer
-- * @pages: returned array of page struct pointers underlying target buffer
-- * write: whether or not buffer is target of a write operation
-+ * nfs_get_user_pages - find and set up pages underlying user's buffer
-+ * rw: direction (read or write)
-+ * user_addr: starting address of this segment of user's buffer
-+ * count: size of this segment
-+ * @pages: returned array of page struct pointers underlying user's buffer
-  */
- static inline int
--nfs_get_user_pages(unsigned long addr, size_t size,
--              struct page ***pages, int rw)
-+nfs_get_user_pages(int rw, unsigned long user_addr, size_t size,
-+              struct page ***pages)
- {
-       int result = -ENOMEM;
--      unsigned page_count = (unsigned) size >> PAGE_SHIFT;
--      unsigned array_size = (page_count * sizeof(struct page *)) + 2U;
-+      unsigned long page_count;
-+      size_t array_size;
-+
-+      /* set an arbitrary limit to prevent arithmetic overflow */
-+      if (size > MAX_DIRECTIO_SIZE)
-+              return -EFBIG;
--      *pages = (struct page **) kmalloc(array_size, GFP_KERNEL);
-+      page_count = (user_addr + size + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+      page_count -= user_addr >> PAGE_SHIFT;
-+
-+      array_size = (page_count * sizeof(struct page *));
-+      *pages = kmalloc(array_size, GFP_KERNEL);
-       if (*pages) {
-               down_read(&current->mm->mmap_sem);
--              result = get_user_pages(current, current->mm, addr,
--                                      page_count, (rw == WRITE), 0,
-+              result = get_user_pages(current, current->mm, user_addr,
-+                                      page_count, (rw == READ), 0,
-                                       *pages, NULL);
-               up_read(&current->mm->mmap_sem);
--              if (result < 0)
--                      printk(KERN_ERR "%s: get_user_pages result %d\n",
--                                      __FUNCTION__, result);
-       }
-       return result;
- }
-@@ -84,176 +94,349 @@ nfs_get_user_pages(unsigned long addr, s
-  * @pages: array of page struct pointers underlying target buffer
-  */
- static inline void
--nfs_free_user_pages(struct page **pages, unsigned count)
-+nfs_free_user_pages(struct page **pages)
- {
--      unsigned page = 0;
-+      kfree(pages);
-+}
--      while (count--)
--              page_cache_release(pages[page++]);
-+/**
-+ * nfs_direct_read_seg - Read in one iov segment.  Generate separate
-+ *                        read RPCs for each "rsize" bytes.
-+ * @inode: target inode
-+ * @cred: user's credential
-+ * user_addr: starting address of this segment of user's buffer
-+ * count: size of this segment
-+ * file_offset: offset in file to begin the operation
-+ * @pages: array of addresses of page structs defining user's buffer
-+ * nr_pages: size of pages array
-+ */
-+static int
-+nfs_direct_read_seg(struct inode *inode, struct rpc_cred *cred,
-+              unsigned long user_addr, size_t count, loff_t file_offset,
-+              struct page **pages, int nr_pages)
-+{
-+      const unsigned int rsize = NFS_SERVER(inode)->rsize;
-+      int tot_bytes = 0;
-+      int curpage = 0;
-+      struct nfs_read_data    rdata = {
-+              .flags          = 0,
-+              .cred           = cred,
-+              .inode          = inode,
-+              .args           = {
-+                      .fh             = NFS_FH(inode),
-+              },
-+              .res            = {
-+                      .fattr          = &rdata.fattr,
-+              },
-+      };
-+
-+        do {
-+              int request, result;
-+
-+                request = count;
-+                if (count > rsize)
-+                        request = rsize;
-+              rdata.args.count = request,
-+              rdata.args.pgbase = user_addr & ~PAGE_MASK;
-+              rdata.args.offset = file_offset;
-+              rdata.args.pages = &pages[curpage];
-+
-+              dprintk("NFS: direct read: c=%u o=%Ld ua=%lu, pb=%u, cp=%u\n",
-+                      rdata.args.count, (long long) rdata.args.offset,
-+                      user_addr, rdata.args.pgbase, curpage);
-+
-+              lock_kernel();
-+              result = NFS_PROTO(inode)->read(&rdata);
-+              unlock_kernel();
-+
-+              if (result < 0) {
-+                      if (result == -EISDIR)
-+                              result = -EINVAL;
-+                      return result;
-+              }
--      kfree(pages);
-+                tot_bytes += result;
-+                count -= result;
-+                file_offset += result;
-+              user_addr += result;
-+
-+              if (rdata.res.eof)
-+                      break;
-+
-+              curpage += (rdata.args.pgbase + result) >> PAGE_SHIFT;
-+      } while (count);
-+
-+      /* XXX: should we zero the rest of the user's buffer if we
-+       *      hit eof? */
-+
-+      return tot_bytes;
- }
- /**
-- * nfs_iov2pagelist - convert an array of iovecs to a list of page requests
-- * @inode: inode of target file
-- * @cred: credentials of user who requested I/O
-+ * nfs_direct_read - For each iov segment, map the user's buffer
-+ *                   then generate read RPCs.
-+ * @inode: target inode
-+ * @cred: user's credential
-  * @iov: array of vectors that define I/O buffer
-- * offset: where in file to begin the read
-+ * file_offset: offset in file to begin the operation
-  * nr_segs: size of iovec array
-- * @requests: append new page requests to this list head
-+ *
-+ * generic_file_direct_IO has already pushed out any non-direct
-+ * writes so that this read will see them when we read from the
-+ * server.
-  */
- static int
--nfs_iov2pagelist(int rw, const struct inode *inode,
--              const struct rpc_cred *cred,
--              const struct iovec *iov, loff_t offset,
--              unsigned long nr_segs, struct list_head *requests)
-+nfs_direct_read(struct inode *inode, struct rpc_cred *cred,
-+              const struct iovec *iov, loff_t file_offset,
-+              unsigned long nr_segs)
- {
--      unsigned seg;
-       int tot_bytes = 0;
--      struct page **pages;
-+      unsigned long seg = 0;
--      /* for each iovec in the array... */
--      for (seg = 0; seg < nr_segs; seg++) {
--              const unsigned long user_addr =
--                                      (unsigned long) iov[seg].iov_base;
--              size_t bytes = iov[seg].iov_len;
--              unsigned int pg_offset = (user_addr & ~PAGE_MASK);
--              int page_count, page = 0;
--
--              page_count = nfs_get_user_pages(user_addr, bytes, &pages, rw);
--              if (page_count < 0) {
--                      nfs_release_list(requests);
--                      return page_count;
-+      while ((seg < nr_segs) && (tot_bytes >= 0)) {
-+              int result, page_count;
-+              struct page **pages;
-+              const struct iovec *vec = &iov[seg++];
-+              unsigned long user_addr = (unsigned long) vec->iov_base;
-+              size_t size = vec->iov_len;
-+
-+                page_count = nfs_get_user_pages(READ, user_addr, size, &pages);
-+                if (page_count < 0) {
-+                        nfs_free_user_pages(pages);
-+                        return page_count;
-+                }
-+
-+              result = nfs_direct_read_seg(inode, cred, user_addr, size,
-+                              file_offset, pages, page_count);
-+              if (result < 0)
-+                      tot_bytes = result;
-+              else {
-+                      tot_bytes += result;
-+                      file_offset += result;
-               }
--              /* ...build as many page requests as required */
--              while (bytes > 0) {
--                      struct nfs_page *new;
--                      const unsigned int pg_bytes = (bytes > PAGE_SIZE) ?
--                                                      PAGE_SIZE : bytes;
--
--                      new = nfs_create_request((struct rpc_cred *) cred,
--                                               (struct inode *) inode,
--                                               pages[page],
--                                               pg_offset, pg_bytes);
--                      if (IS_ERR(new)) {
--                              nfs_free_user_pages(pages, page_count);
--                              nfs_release_list(requests);
--                              return PTR_ERR(new);
--                      }
--                      new->wb_index = offset;
--                      nfs_list_add_request(new, requests);
--
--                      /* after the first page */
--                      pg_offset = 0;
--                      offset += PAGE_SIZE;
--                      tot_bytes += pg_bytes;
--                      bytes -= pg_bytes;
--                      page++;
-+              nfs_free_user_pages(pages);
-+      }
-+
-+      return tot_bytes;
-+}
-+
-+/**
-+ * nfs_direct_write_seg - Write out one iov segment.  Generate separate
-+ *                        write RPCs for each "wsize" bytes, then commit.
-+ * @inode: target inode
-+ * @cred: user's credential
-+ * user_addr: starting address of this segment of user's buffer
-+ * count: size of this segment
-+ * file_offset: offset in file to begin the operation
-+ * @pages: array of addresses of page structs defining user's buffer
-+ * nr_pages: size of pages array
-+ */
-+static int
-+nfs_direct_write_seg(struct inode *inode, struct rpc_cred *cred,
-+              unsigned long user_addr, size_t count, loff_t file_offset,
-+              struct page **pages, int nr_pages)
-+{
-+      const unsigned int wsize = NFS_SERVER(inode)->wsize;
-+      loff_t save_offset = file_offset;
-+      size_t save_count = count;
-+      int need_commit = 0;
-+      int tot_bytes = 0;
-+      int curpage = 0;
-+      struct nfs_writeverf first_verf;
-+      struct nfs_write_data   wdata = {
-+              .cred           = cred,
-+              .inode          = inode,
-+              .args           = {
-+                      .fh             = NFS_FH(inode),
-+              },
-+              .res            = {
-+                      .fattr          = &wdata.fattr,
-+                      .verf           = &wdata.verf,
-+              },
-+      };
-+
-+      wdata.args.stable = NFS_UNSTABLE;
-+      if (IS_SYNC(inode) || NFS_PROTO(inode)->version == 2 || count <= wsize)
-+              wdata.args.stable = NFS_FILE_SYNC;
-+
-+retry:
-+        do {
-+              int request, result;
-+
-+                request = count;
-+                if (count > wsize)
-+                        request = wsize;
-+              wdata.args.count = request,
-+              wdata.args.pgbase = user_addr & ~PAGE_MASK;
-+              wdata.args.offset = file_offset;
-+              wdata.args.pages = &pages[curpage];
-+
-+              dprintk("NFS: direct write: c=%u o=%Ld ua=%lu, pb=%u, cp=%u\n",
-+                      wdata.args.count, (long long) wdata.args.offset,
-+                      user_addr, wdata.args.pgbase, curpage);
-+
-+              lock_kernel();
-+              result = NFS_PROTO(inode)->write(&wdata);
-+              unlock_kernel();
-+
-+              if (result < 0)
-+                      return result;
-+
-+              if (!tot_bytes)
-+                      memcpy(&first_verf.verifier, &wdata.verf.verifier,
-+                                                              VERF_SIZE);
-+              if (wdata.verf.committed != NFS_FILE_SYNC) {
-+                      need_commit = 1;
-+                      if (memcmp(&first_verf.verifier,
-+                                      &wdata.verf.verifier, VERF_SIZE))
-+                              goto sync_retry;
-               }
--              /* don't release pages here -- I/O completion will do that */
--              nfs_free_user_pages(pages, 0);
-+                tot_bytes += result;
-+                count -= result;
-+                file_offset += result;
-+              user_addr += result;
-+
-+              curpage += (wdata.args.pgbase + result) >> PAGE_SHIFT;
-+      } while (count);
-+
-+      /*
-+       * Commit data written so far, even in the event of an error
-+       */
-+      if (need_commit) {
-+              int result;
-+
-+              wdata.args.count = tot_bytes;
-+              wdata.args.offset = save_offset;
-+
-+              lock_kernel();
-+              result = NFS_PROTO(inode)->commit(&wdata);
-+              unlock_kernel();
-+
-+              if (result < 0)
-+                      goto sync_retry;
-+              if (memcmp(&first_verf.verifier, &wdata.verf.verifier,
-+                                                              VERF_SIZE))
-+                      goto sync_retry;
-       }
-       return tot_bytes;
-+
-+sync_retry:
-+      wdata.args.stable = NFS_FILE_SYNC;
-+      file_offset = save_offset;
-+      count = save_count;
-+      goto retry;
- }
- /**
-- * do_nfs_direct_IO - Read or write data without caching
-- * @inode: inode of target file
-- * @cred: credentials of user who requested I/O
-+ * nfs_direct_write - For each iov segment, map the user's buffer
-+ *                    then generate write and commit RPCs.
-+ * @inode: target inode
-+ * @cred: user's credential
-  * @iov: array of vectors that define I/O buffer
-- * offset: where in file to begin the read
-+ * file_offset: offset in file to begin the operation
-  * nr_segs: size of iovec array
-  *
-- * Break the passed-in iovec into a series of page-sized or smaller
-- * requests, where each page is mapped for direct user-land I/O.
-- *
-- * For each of these pages, create an NFS page request and
-- * append it to an automatic list of page requests.
-- *
-- * When all page requests have been queued, start the I/O on the
-- * whole list.  The underlying routines coalesce the pages on the
-- * list into a bunch of asynchronous "r/wsize" network requests.
-- *
-- * I/O completion automatically unmaps and releases the pages.
-+ * Upon return, generic_file_direct_IO invalidates any cached pages
-+ * that non-direct readers might access, so they will pick up these
-+ * writes immediately.
-  */
- static int
--do_nfs_direct_IO(int rw, const struct inode *inode,
--              const struct rpc_cred *cred, const struct iovec *iov,
--              loff_t offset, unsigned long nr_segs)
-+nfs_direct_write(struct inode *inode, struct rpc_cred *cred,
-+              const struct iovec *iov, loff_t file_offset,
-+              unsigned long nr_segs)
- {
--      LIST_HEAD(requests);
--      int result, tot_bytes;
-+      int tot_bytes = 0;
-+      unsigned long seg = 0;
--      result = nfs_iov2pagelist(rw, inode, cred, iov, offset, nr_segs,
--                                                              &requests);
--      if (result < 0)
--              return result;
--      tot_bytes = result;
-+      while ((seg < nr_segs) && (tot_bytes >= 0)) {
-+              int result, page_count;
-+              struct page **pages;
-+              const struct iovec *vec = &iov[seg++];
-+              unsigned long user_addr = (unsigned long) vec->iov_base;
-+              size_t size = vec->iov_len;
-+
-+                page_count = nfs_get_user_pages(WRITE, user_addr, size, &pages);
-+                if (page_count < 0) {
-+                        nfs_free_user_pages(pages);
-+                        return page_count;
-+                }
--      switch (rw) {
--      case READ:
--              if (IS_SYNC(inode) || (NFS_SERVER(inode)->rsize < PAGE_SIZE)) {
--                      result = nfs_direct_read_sync(inode, cred, iov, offset, nr_segs);
--                      break;
-+              result = nfs_direct_write_seg(inode, cred, user_addr, size,
-+                              file_offset, pages, page_count);
-+              if (result < 0)
-+                      tot_bytes = result;
-+              else {
-+                      tot_bytes += result;
-+                      file_offset += result;
-               }
--              result = nfs_pagein_list(&requests, NFS_SERVER(inode)->rpages);
--              nfs_wait_for_reads(&requests);
--              break;
--      case WRITE:
--              if (IS_SYNC(inode) || (NFS_SERVER(inode)->wsize < PAGE_SIZE))
--                      result = nfs_direct_write_sync(inode, cred, iov, offset, nr_segs);
--              else
--                      result = nfs_flush_list(&requests,
--                                      NFS_SERVER(inode)->wpages, FLUSH_WAIT);
--              /* invalidate cache so non-direct readers pick up changes */
--              invalidate_inode_pages((struct inode *) inode);
--              break;
--      default:
--              result = -EINVAL;
--              break;
-+              nfs_free_user_pages(pages);
-       }
--      if (result < 0)
--              return result;
-       return tot_bytes;
- }
- /**
-  * nfs_direct_IO - NFS address space operation for direct I/O
-  * rw: direction (read or write)
-- * @file: file struct of target file
-+ * @iocb: target I/O control block
-  * @iov: array of vectors that define I/O buffer
-- * offset: offset in file to begin the operation
-+ * file_offset: offset in file to begin the operation
-  * nr_segs: size of iovec array
-  *
-+ * Usually a file system implements direct I/O by calling out to
-+ * blockdev_direct_IO.  The NFS client doesn't have a backing block
-+ * device, so we do everything by hand instead.
-+ *
-  * The inode's i_sem is no longer held by the VFS layer before it calls
-  * this function to do a write.
-  */
- int
- nfs_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
--              loff_t offset, unsigned long nr_segs)
-+              loff_t file_offset, unsigned long nr_segs)
- {
--      /* None of this works yet, so prevent it from compiling. */
--#if 0
--      int result;
-+      int result = -EINVAL;
-+      struct file *file = iocb->ki_filp;
-       struct dentry *dentry = file->f_dentry;
--      const struct inode *inode = dentry->d_inode->i_mapping->host;
--      const struct rpc_cred *cred = nfs_file_cred(file);
--#endif
--
--      dfprintk(VFS, "NFS: direct_IO(%s) (%s/%s) off/no(%Lu/%lu)\n",
--                              ((rw == READ) ? "READ" : "WRITE"),
--                              dentry->d_parent->d_name.name,
--                              dentry->d_name.name, offset, nr_segs);
-+      struct inode *inode = dentry->d_inode;
-+      struct rpc_cred *cred;
-+
-+      /*
-+       * No support for async yet
-+       */
-+      if (!is_sync_kiocb(iocb))
-+              goto out;
-+
-+      cred = get_rpccred(nfs_file_cred(file));
-+      if (!cred)
-+              cred = get_rpccred(NFS_I(inode)->mm_cred);
-+
-+      switch (rw) {
-+      case READ:
-+              dprintk("NFS: direct_IO(read) (%s) off/no(%Lu/%lu)\n",
-+                              dentry->d_name.name, file_offset, nr_segs);
-+
-+              result = nfs_direct_read(inode, cred, iov,
-+                                              file_offset, nr_segs);
-+              break;
-+      case WRITE:
-+              dprintk("NFS: direct_IO(write) (%s) off/no(%Lu/%lu)\n",
-+                              dentry->d_name.name, file_offset, nr_segs);
--      result = do_nfs_direct_IO(rw, inode, cred, iov, offset, nr_segs);
-+              result = nfs_direct_write(inode, cred, iov,
-+                                              file_offset, nr_segs);
-+              break;
-+      default:
-+              break;
-+      }
--      dfprintk(VFS, "NFS: direct_IO result = %d\n", result);
-+      if (cred)
-+              put_rpccred(cred);
-+out:
-+      dprintk("NFS: direct_IO result=%d\n", result);
-       return result;
- }
---- linux-2.6.0-test1/fs/nfsd/nfssvc.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/nfsd/nfssvc.c        2003-07-19 17:03:50.000000000 -0700
-@@ -116,9 +116,12 @@ nfsd_svc(unsigned short port, int nrserv
-       nrservs -= (nfsd_serv->sv_nrthreads-1);
-       while (nrservs > 0) {
-               nrservs--;
-+              __module_get(THIS_MODULE);
-               error = svc_create_thread(nfsd, nfsd_serv);
--              if (error < 0)
-+              if (error < 0) {
-+                      module_put(THIS_MODULE);
-                       break;
-+              }
-       }
-       victim = nfsd_list.next;
-       while (nrservs < 0 && victim != &nfsd_list) {
-@@ -175,7 +178,6 @@ nfsd(struct svc_rqst *rqstp)
-       sigset_t shutdown_mask, allowed_mask;
-       /* Lock module and set up kernel thread */
--      MOD_INC_USE_COUNT;
-       lock_kernel();
-       daemonize("nfsd");
-       current->rlim[RLIMIT_FSIZE].rlim_cur = RLIM_INFINITY;
-@@ -281,7 +283,7 @@ out:
-       svc_exit_thread(rqstp);
-       /* Release module */
--      MOD_DEC_USE_COUNT;
-+      module_put_and_exit(0);
- }
- int
---- linux-2.6.0-test1/fs/nfs/inode.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/nfs/inode.c  2003-07-19 17:03:50.000000000 -0700
-@@ -151,15 +151,16 @@ void
- nfs_put_super(struct super_block *sb)
- {
-       struct nfs_server *server = NFS_SB(sb);
--      struct rpc_clnt *rpc;
- #ifdef CONFIG_NFS_V4
-       if (server->idmap != NULL)
-               nfs_idmap_delete(server);
- #endif /* CONFIG_NFS_V4 */
--      if ((rpc = server->client) != NULL)
--              rpc_shutdown_client(rpc);
-+      if (server->client != NULL)
-+              rpc_shutdown_client(server->client);
-+      if (server->client_sys != NULL)
-+              rpc_shutdown_client(server->client_sys);
-       if (!(server->flags & NFS_MOUNT_NONLM))
-               lockd_down();   /* release rpc.lockd */
-@@ -226,27 +227,57 @@ nfs_block_size(unsigned long bsize, unsi
- /*
-  * Obtain the root inode of the file system.
-  */
--static struct inode *
--nfs_get_root(struct super_block *sb, struct nfs_fh *rootfh)
-+static int
-+nfs_get_root(struct inode **rooti, rpc_authflavor_t authflavor, struct super_block *sb, struct nfs_fh *rootfh)
- {
-       struct nfs_server       *server = NFS_SB(sb);
--      struct nfs_fattr        fattr;
--      struct inode            *inode;
-+      struct nfs_fattr        fattr = { };
-       int                     error;
--      if ((error = server->rpc_ops->getroot(server, rootfh, &fattr)) < 0) {
-+      error = server->rpc_ops->getroot(server, rootfh, &fattr);
-+      if (error == -EACCES && authflavor > RPC_AUTH_MAXFLAVOR) {
-+              /*
-+               * Some authentication types (gss/krb5, most notably)
-+               * are such that root won't be able to present a
-+               * credential for GETATTR (ie, getroot()).
-+               *
-+               * We still want the mount to succeed.
-+               * 
-+               * So we fake the attr values and mark the inode as such.
-+               * On the first succesful traversal, we fix everything.
-+               * The auth type test isn't quite correct, but whatever.
-+               */
-+              dfprintk(VFS, "NFS: faking root inode\n");
-+
-+              fattr.fileid = 1;
-+              fattr.nlink = 2;        /* minimum for a dir */
-+              fattr.type = NFDIR;
-+              fattr.mode = S_IFDIR|S_IRUGO|S_IXUGO;
-+              fattr.size = 4096;
-+              fattr.du.nfs3.used = 1;
-+              fattr.valid = NFS_ATTR_FATTR|NFS_ATTR_FATTR_V3;
-+      } else if (error < 0) {
-               printk(KERN_NOTICE "nfs_get_root: getattr error = %d\n", -error);
--              return NULL;
-+              *rooti = NULL;  /* superfluous ... but safe */
-+              return error;
-       }
--      inode = __nfs_fhget(sb, rootfh, &fattr);
--      return inode;
-+      *rooti = __nfs_fhget(sb, rootfh, &fattr);
-+      if (error == -EACCES && authflavor > RPC_AUTH_MAXFLAVOR) {
-+              if (*rooti) {
-+                      NFS_FLAGS(*rooti) |= NFS_INO_FAKE_ROOT;
-+                      NFS_CACHEINV((*rooti));
-+                      error = 0;
-+              }
-+      }
-+      return error;
- }
- /*
-  * Do NFS version-independent mount processing, and sanity checking
-  */
--int nfs_sb_init(struct super_block *sb)
-+static int
-+nfs_sb_init(struct super_block *sb, rpc_authflavor_t authflavor)
- {
-       struct nfs_server       *server;
-       struct inode            *root_inode = NULL;
-@@ -267,8 +298,7 @@ int nfs_sb_init(struct super_block *sb)
-       sb->s_op         = &nfs_sops;
-       /* Did getting the root inode fail? */
--      root_inode = nfs_get_root(sb, &server->fh);
--      if (!root_inode)
-+      if (nfs_get_root(&root_inode, authflavor, sb, &server->fh) < 0)
-               goto out_no_root;
-       sb->s_root = d_alloc_root(root_inode);
-       if (!sb->s_root)
-@@ -346,19 +376,66 @@ out_no_root:
- }
- /*
-+ * Create an RPC client handle.
-+ */
-+static struct rpc_clnt *
-+nfs_create_client(struct nfs_server *server, const struct nfs_mount_data *data)
-+{
-+      struct rpc_timeout      timeparms;
-+      struct rpc_xprt         *xprt = NULL;
-+      struct rpc_clnt         *clnt = NULL;
-+      int                     tcp   = (data->flags & NFS_MOUNT_TCP);
-+
-+      /* Initialize timeout values */
-+      timeparms.to_initval = data->timeo * HZ / 10;
-+      timeparms.to_retries = data->retrans;
-+      timeparms.to_maxval  = tcp ? RPC_MAX_TCP_TIMEOUT : RPC_MAX_UDP_TIMEOUT;
-+      timeparms.to_exponential = 1;
-+
-+      if (!timeparms.to_initval)
-+              timeparms.to_initval = (tcp ? 600 : 11) * HZ / 10;
-+      if (!timeparms.to_retries)
-+              timeparms.to_retries = 5;
-+
-+      /* create transport and client */
-+      xprt = xprt_create_proto(tcp ? IPPROTO_TCP : IPPROTO_UDP,
-+                               &server->addr, &timeparms);
-+      if (xprt == NULL) {
-+              printk(KERN_WARNING "NFS: cannot create RPC transport.\n");
-+              goto out_fail;
-+      }
-+      clnt = rpc_create_client(xprt, server->hostname, &nfs_program,
-+                               server->rpc_ops->version, data->pseudoflavor);
-+      if (clnt == NULL) {
-+              printk(KERN_WARNING "NFS: cannot create RPC client.\n");
-+              goto out_fail;
-+      }
-+
-+      clnt->cl_intr     = (server->flags & NFS_MOUNT_INTR) ? 1 : 0;
-+      clnt->cl_softrtry = (server->flags & NFS_MOUNT_SOFT) ? 1 : 0;
-+      clnt->cl_droppriv = (server->flags & NFS_MOUNT_BROKEN_SUID) ? 1 : 0;
-+      clnt->cl_chatty   = 1;
-+
-+      return clnt;
-+
-+out_fail:
-+      if (xprt)
-+              xprt_destroy(xprt);
-+      return NULL;
-+}
-+
-+/*
-  * The way this works is that the mount process passes a structure
-  * in the data argument which contains the server's IP address
-  * and the root file handle obtained from the server's mount
-  * daemon. We stash these away in the private superblock fields.
-  */
--int nfs_fill_super(struct super_block *sb, struct nfs_mount_data *data, int silent)
-+static int
-+nfs_fill_super(struct super_block *sb, struct nfs_mount_data *data, int silent)
- {
-       struct nfs_server       *server;
--      struct rpc_xprt         *xprt = NULL;
--      struct rpc_clnt         *clnt = NULL;
--      struct rpc_timeout      timeparms;
--      int                     tcp, err = -EIO;
--      u32                     authflavor;
-+      int                     err = -EIO;
-+      rpc_authflavor_t        authflavor;
-       server           = NFS_SB(sb);
-       sb->s_blocksize_bits = 0;
-@@ -400,46 +477,20 @@ int nfs_fill_super(struct super_block *s
-               server->rpc_ops = &nfs_v2_clientops;
-       }
--      /* Which protocol do we use? */
--      tcp   = (data->flags & NFS_MOUNT_TCP);
--
--      /* Initialize timeout values */
--      timeparms.to_initval = data->timeo * HZ / 10;
--      timeparms.to_retries = data->retrans;
--      timeparms.to_maxval  = tcp? RPC_MAX_TCP_TIMEOUT : RPC_MAX_UDP_TIMEOUT;
--      timeparms.to_exponential = 1;
--
--      if (!timeparms.to_initval)
--              timeparms.to_initval = (tcp ? 600 : 11) * HZ / 10;
--      if (!timeparms.to_retries)
--              timeparms.to_retries = 5;
--
--      /* Now create transport and client */
--      xprt = xprt_create_proto(tcp? IPPROTO_TCP : IPPROTO_UDP,
--                                              &server->addr, &timeparms);
--      if (xprt == NULL) {
--              printk(KERN_WARNING "NFS: cannot create RPC transport.\n");
--              goto out_fail;
--      }
--
--      if (data->flags & NFS_MOUNT_SECFLAVOUR)
--              authflavor = data->pseudoflavor;
--      else
--              authflavor = RPC_AUTH_UNIX;
--
--      clnt = rpc_create_client(xprt, server->hostname, &nfs_program,
--                               server->rpc_ops->version, authflavor);
--      if (clnt == NULL) {
--              printk(KERN_WARNING "NFS: cannot create RPC client.\n");
--              xprt_destroy(xprt);
-+      /* Fill in pseudoflavor for mount version < 5 */
-+      if (!(data->flags & NFS_MOUNT_SECFLAVOUR))
-+              data->pseudoflavor = RPC_AUTH_UNIX;
-+      authflavor = data->pseudoflavor;        /* save for sb_init() */
-+      /* XXX maybe we want to add a server->pseudoflavor field */
-+
-+      /* Create RPC client handles */
-+      server->client = nfs_create_client(server, data);
-+      if (server->client == NULL)
-               goto out_fail;
--      }
--
--      clnt->cl_intr     = (server->flags & NFS_MOUNT_INTR) ? 1 : 0;
--      clnt->cl_softrtry = (server->flags & NFS_MOUNT_SOFT) ? 1 : 0;
--      clnt->cl_droppriv = (server->flags & NFS_MOUNT_BROKEN_SUID) ? 1 : 0;
--      clnt->cl_chatty   = 1;
--      server->client    = clnt;
-+      data->pseudoflavor = RPC_AUTH_UNIX;     /* RFC 2623, sec 2.3.2 */
-+      server->client_sys = nfs_create_client(server, data);
-+      if (server->client_sys == NULL)
-+              goto out_shutdown;
-       /* Fire up rpciod if not yet running */
-       if (rpciod_up() != 0) {
-@@ -447,7 +498,7 @@ int nfs_fill_super(struct super_block *s
-               goto out_shutdown;
-       }
--      err = nfs_sb_init(sb);
-+      err = nfs_sb_init(sb, authflavor);
-       if (err != 0)
-               goto out_noinit;
-@@ -466,7 +517,10 @@ int nfs_fill_super(struct super_block *s
- out_noinit:
-       rpciod_down();
- out_shutdown:
--      rpc_shutdown_client(server->client);
-+      if (server->client)
-+              rpc_shutdown_client(server->client);
-+      if (server->client_sys)
-+              rpc_shutdown_client(server->client_sys);
- out_fail:
-       if (server->hostname)
-               kfree(server->hostname);
-@@ -904,6 +958,11 @@ __nfs_revalidate_inode(struct nfs_server
-               goto out_nowait;
-       if (NFS_STALE(inode) && inode != inode->i_sb->s_root->d_inode)
-               goto out_nowait;
-+      if (NFS_FAKE_ROOT(inode)) {
-+              dfprintk(VFS, "NFS: not revalidating fake root\n");
-+              status = 0;
-+              goto out_nowait;
-+      }
-       while (NFS_REVALIDATING(inode)) {
-               status = nfs_wait_on_inode(inode, NFS_INO_REVALIDATING);
-@@ -1007,6 +1066,13 @@ __nfs_refresh_inode(struct inode *inode,
-                       inode->i_sb->s_id, inode->i_ino,
-                       atomic_read(&inode->i_count), fattr->valid);
-+      /* First successful call after mount, fill real data. */
-+      if (NFS_FAKE_ROOT(inode)) {
-+              dfprintk(VFS, "NFS: updating fake root\n");
-+              nfsi->fileid = fattr->fileid;
-+              NFS_FLAGS(inode) &= ~NFS_INO_FAKE_ROOT;
-+      }
-+
-       if (nfsi->fileid != fattr->fileid) {
-               printk(KERN_ERR "nfs_refresh_inode: inode number mismatch\n"
-                      "expected (%s/0x%Lx), got (%s/0x%Lx)\n",
-@@ -1229,6 +1295,8 @@ static struct super_block *nfs_get_sb(st
-                       root->size = NFS2_FHSIZE;
-                       memcpy(root->data, data->old_root.data, NFS2_FHSIZE);
-               }
-+              if (data->version < 5)
-+                      data->flags &= ~NFS_MOUNT_SECFLAVOUR;
-       }
-       if (root->size > sizeof(root->data)) {
-@@ -1373,7 +1441,7 @@ static int nfs4_fill_super(struct super_
-       if ((server->idmap = nfs_idmap_new(server)) == NULL)
-               printk(KERN_WARNING "NFS: couldn't start IDmap\n");
--      err = nfs_sb_init(sb);
-+      err = nfs_sb_init(sb, authflavour);
-       if (err == 0)
-               return 0;
-       rpciod_down();
---- linux-2.6.0-test1/fs/nfs/nfs3proc.c        2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/nfs3proc.c       2003-07-19 17:07:07.000000000 -0700
-@@ -225,81 +225,74 @@ nfs3_proc_readlink(struct inode *inode, 
- }
- static int
--nfs3_proc_read(struct inode *inode, struct rpc_cred *cred,
--             struct nfs_fattr *fattr, int flags,
--             unsigned int base, unsigned int count, struct page *page,
--             int *eofp)
--{
--      u64                     offset = page_offset(page) + base;
--      struct nfs_readargs     arg = {
--              .fh             = NFS_FH(inode),
--              .offset         = offset,
--              .count          = count,
--              .pgbase         = base,
--              .pages          = &page
--      };
--      struct nfs_readres      res = {
--              .fattr          = fattr,
--              .count          = count,
--      };
-+nfs3_proc_read(struct nfs_read_data *rdata)
-+{
-+      int                     flags = rdata->flags;
-+      struct inode *          inode = rdata->inode;
-+      struct nfs_fattr *      fattr = rdata->res.fattr;
-       struct rpc_message      msg = {
-               .rpc_proc       = &nfs3_procedures[NFS3PROC_READ],
--              .rpc_argp       = &arg,
--              .rpc_resp       = &res,
--              .rpc_cred       = cred
-+              .rpc_argp       = &rdata->args,
-+              .rpc_resp       = &rdata->res,
-+              .rpc_cred       = rdata->cred,
-       };
-       int                     status;
--      dprintk("NFS call  read %d @ %Ld\n", count, (long long)offset);
-+      dprintk("NFS call  read %d @ %Ld\n", rdata->args.count,
-+                      (long long) rdata->args.offset);
-       fattr->valid = 0;
-       status = rpc_call_sync(NFS_CLIENT(inode), &msg, flags);
-       if (status >= 0)
-               nfs_refresh_inode(inode, fattr);
-       dprintk("NFS reply read: %d\n", status);
--      *eofp = res.eof;
-       return status;
- }
- static int
--nfs3_proc_write(struct inode *inode, struct rpc_cred *cred,
--              struct nfs_fattr *fattr, int flags,
--              unsigned int base, unsigned int count,
--              struct page *page, struct nfs_writeverf *verf)
-+nfs3_proc_write(struct nfs_write_data *wdata)
- {
--      u64                     offset = page_offset(page) + base;
--      struct nfs_writeargs    arg = {
--              .fh             = NFS_FH(inode),
--              .offset         = offset,
--              .count          = count,
--              .stable         = NFS_FILE_SYNC,
--              .pgbase         = base,
--              .pages          = &page
--      };
--      struct nfs_writeres     res = {
--              .fattr          = fattr,
--              .verf           = verf,
--      };
-+      int                     rpcflags = wdata->flags;
-+      struct inode *          inode = wdata->inode;
-+      struct nfs_fattr *      fattr = wdata->res.fattr;
-       struct rpc_message      msg = {
-               .rpc_proc       = &nfs3_procedures[NFS3PROC_WRITE],
--              .rpc_argp       = &arg,
--              .rpc_resp       = &res,
--              .rpc_cred       = cred
-+              .rpc_argp       = &wdata->args,
-+              .rpc_resp       = &wdata->res,
-+              .rpc_cred       = wdata->cred,
-       };
--      int                     status, rpcflags = 0;
-+      int                     status;
--      dprintk("NFS call  write %d @ %Ld\n", count, (long long)offset);
-+      dprintk("NFS call  write %d @ %Ld\n", wdata->args.count,
-+                      (long long) wdata->args.offset);
-       fattr->valid = 0;
--      if (flags & NFS_RW_SWAP)
--              rpcflags |= NFS_RPC_SWAPFLAGS;
--      arg.stable = (flags & NFS_RW_SYNC) ? NFS_FILE_SYNC : NFS_UNSTABLE;
--
-       status = rpc_call_sync(NFS_CLIENT(inode), &msg, rpcflags);
--
-       if (status >= 0)
-               nfs3_write_refresh_inode(inode, fattr);
-+      dprintk("NFS reply write: %d\n", status);
-+      return status < 0? status : wdata->res.count;
-+}
--      dprintk("NFS reply read: %d\n", status);
--      return status < 0? status : res.count;
-+static int
-+nfs3_proc_commit(struct nfs_write_data *cdata)
-+{
-+      struct inode *          inode = cdata->inode;
-+      struct nfs_fattr *      fattr = cdata->res.fattr;
-+      struct rpc_message      msg = {
-+              .rpc_proc       = &nfs3_procedures[NFS3PROC_COMMIT],
-+              .rpc_argp       = &cdata->args,
-+              .rpc_resp       = &cdata->res,
-+              .rpc_cred       = cdata->cred,
-+      };
-+      int                     status;
-+
-+      dprintk("NFS call  commit %d @ %Ld\n", cdata->args.count,
-+                      (long long) cdata->args.offset);
-+      fattr->valid = 0;
-+      status = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
-+      if (status >= 0)
-+              nfs3_write_refresh_inode(inode, fattr);
-+      dprintk("NFS reply commit: %d\n", status);
-+      return status;
- }
- /*
-@@ -681,7 +674,7 @@ nfs3_proc_fsinfo(struct nfs_server *serv
-       dprintk("NFS call  fsinfo\n");
-       info->fattr->valid = 0;
--      status = rpc_call(server->client, NFS3PROC_FSINFO, fhandle, info, 0);
-+      status = rpc_call(server->client_sys, NFS3PROC_FSINFO, fhandle, info, 0);
-       dprintk("NFS reply fsinfo: %d\n", status);
-       return status;
- }
-@@ -862,6 +855,7 @@ struct nfs_rpc_ops nfs_v3_clientops = {
-       .readlink       = nfs3_proc_readlink,
-       .read           = nfs3_proc_read,
-       .write          = nfs3_proc_write,
-+      .commit         = nfs3_proc_commit,
-       .create         = nfs3_proc_create,
-       .remove         = nfs3_proc_remove,
-       .unlink_setup   = nfs3_proc_unlink_setup,
---- linux-2.6.0-test1/fs/nfs/nfs3xdr.c 2003-06-14 12:18:51.000000000 -0700
-+++ 25/fs/nfs/nfs3xdr.c        2003-07-19 17:03:50.000000000 -0700
-@@ -124,8 +124,6 @@ xdr_decode_fhandle(u32 *p, struct nfs_fh
- /*
-  * Encode/decode time.
-- * Since the VFS doesn't care for fractional times, we ignore the
-- * nanosecond field.
-  */
- static inline u32 *
- xdr_encode_time3(u32 *p, struct timespec *timep)
---- linux-2.6.0-test1/fs/nfs/nfs4proc.c        2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/nfs4proc.c       2003-07-19 17:07:07.000000000 -0700
-@@ -1012,45 +1012,36 @@ nfs4_proc_readlink(struct inode *inode, 
- }
- static int
--nfs4_proc_read(struct inode *inode, struct rpc_cred *cred,
--             struct nfs_fattr *fattr, int flags,
--             unsigned int base, unsigned int count,
--             struct page *page, int *eofp)
-+nfs4_proc_read(struct nfs_read_data *rdata)
- {
-+      int flags = rdata->flags;
-+      struct inode *inode = rdata->inode;
-+      struct nfs_fattr *fattr = rdata->res.fattr;
-+      nfs4_stateid *stateid = &rdata->args.stateid;
-       struct nfs_server *server = NFS_SERVER(inode);
-       struct nfs4_shareowner  *sp;
--      uint64_t offset = page_offset(page) + base;
--      struct nfs_readargs arg = {
--              .fh             = NFS_FH(inode),
--              .offset         = offset,
--              .count          = count,
--              .pgbase         = base,
--              .pages          = &page,
--      };
--      struct nfs_readres res = {
--              .fattr          = fattr,
--              .count          = count,
--      };
-       struct rpc_message msg = {
-               .rpc_proc       = &nfs4_procedures[NFSPROC4_CLNT_READ],
--              .rpc_argp       = &arg,
--              .rpc_resp       = &res,
--              .rpc_cred       = cred,
-+              .rpc_argp       = &rdata->args,
-+              .rpc_resp       = &rdata->res,
-+              .rpc_cred       = rdata->cred,
-       };
-       unsigned long timestamp = jiffies;
-       int status;
--      dprintk("NFS call  read %d @ %Ld\n", count, (long long)offset);
-+      dprintk("NFS call  read %d @ %Ld\n", rdata->args.count,
-+                      (long long) rdata->args.offset);
-+
-       /*
--      * Try first to use O_RDONLY, then O_RDWR stateid.
--      */
-+       * Try first to use O_RDONLY, then O_RDWR stateid.
-+       */
-       sp = nfs4_get_inode_share(inode, O_RDONLY);
-       if (!sp)
-               sp = nfs4_get_inode_share(inode, O_RDWR);
-       if (sp)
--              memcpy(arg.stateid,sp->so_stateid, sizeof(nfs4_stateid));
-+              memcpy(stateid, sp->so_stateid, sizeof(nfs4_stateid));
-       else
--              memcpy(arg.stateid, zero_stateid, sizeof(nfs4_stateid));
-+              memcpy(stateid, zero_stateid, sizeof(nfs4_stateid));
-       fattr->valid = 0;
-       status = rpc_call_sync(server->client, &msg, flags);
-@@ -1061,56 +1052,82 @@ nfs4_proc_read(struct inode *inode, stru
-                       nfs_zap_caches(inode);
-       }
-       dprintk("NFS reply read: %d\n", status);
--      *eofp = res.eof;
-       return status;
- }
- static int
--nfs4_proc_write(struct inode *inode, struct rpc_cred *cred,
--              struct nfs_fattr *fattr, int flags,
--              unsigned int base, unsigned int count,
--              struct page *page, struct nfs_writeverf *verf)
-+nfs4_proc_write(struct nfs_write_data *wdata)
- {
-+      int rpcflags = wdata->flags;
-+      struct inode *inode = wdata->inode;
-+      struct nfs_fattr *fattr = wdata->res.fattr;
-+      nfs4_stateid *stateid = &wdata->args.stateid;
-       struct nfs_server *server = NFS_SERVER(inode);
--      struct nfs4_shareowner  *sp;
--      uint64_t offset = page_offset(page) + base;
--      struct nfs_writeargs arg = {
--              .fh             = NFS_FH(inode),
--              .offset         = offset,
--              .count          = count,
--              .stable         = (flags & NFS_RW_SYNC) ? NFS_FILE_SYNC : NFS_UNSTABLE,
--              .pgbase         = base,
--              .pages          = &page,
--      };
--      struct nfs_writeres res = {
--              .fattr          = fattr,
--              .count          = count,
--              .verf           = verf,
--      };
-+      struct nfs4_shareowner *sp;
-       struct rpc_message msg = {
-               .rpc_proc       = &nfs4_procedures[NFSPROC4_CLNT_WRITE],
--              .rpc_argp       = &arg,
--              .rpc_resp       = &res,
--              .rpc_cred       = cred,
-+              .rpc_argp       = &wdata->args,
-+              .rpc_resp       = &wdata->res,
-+              .rpc_cred       = wdata->cred,
-+      };
-+      int status;
-+
-+      dprintk("NFS call  write %d @ %Ld\n", wdata->args.count,
-+                      (long long) wdata->args.offset);
-+
-+      /*
-+       * Try first to use O_WRONLY, then O_RDWR stateid.
-+       */
-+      sp = nfs4_get_inode_share(inode, O_WRONLY);
-+      if (!sp)
-+              sp = nfs4_get_inode_share(inode, O_RDWR);
-+
-+      if (sp)
-+              memcpy(stateid, sp->so_stateid, sizeof(nfs4_stateid));
-+      else
-+              memcpy(stateid, zero_stateid, sizeof(nfs4_stateid));
-+
-+      fattr->valid = 0;
-+      status = rpc_call_sync(server->client, &msg, rpcflags);
-+      dprintk("NFS reply write: %d\n", status);
-+      return status;
-+}
-+
-+static int
-+nfs4_proc_commit(struct nfs_write_data *cdata)
-+{
-+      struct inode *inode = cdata->inode;
-+      struct nfs_fattr *fattr = cdata->res.fattr;
-+      nfs4_stateid *stateid = &cdata->args.stateid;
-+      struct nfs_server *server = NFS_SERVER(inode);
-+      struct nfs4_shareowner *sp;
-+      struct rpc_message msg = {
-+              .rpc_proc       = &nfs4_procedures[NFSPROC4_CLNT_COMMIT],
-+              .rpc_argp       = &cdata->args,
-+              .rpc_resp       = &cdata->res,
-+              .rpc_cred       = cdata->cred,
-       };
--      int                     rpcflags = (flags & NFS_RW_SWAP) ? NFS_RPC_SWAPFLAGS : 0;
-+      int status;
--      dprintk("NFS call  write %d @ %Ld\n", count, (long long)offset);
-+      dprintk("NFS call  commit %d @ %Ld\n", cdata->args.count,
-+                      (long long) cdata->args.offset);
-       /*
--      * Try first to use O_WRONLY, then O_RDWR stateid.
--      */
-+       * Try first to use O_WRONLY, then O_RDWR stateid.
-+       */
-       sp = nfs4_get_inode_share(inode, O_WRONLY);
-       if (!sp)
-               sp = nfs4_get_inode_share(inode, O_RDWR);
-       if (sp)
--              memcpy(arg.stateid,sp->so_stateid, sizeof(nfs4_stateid));
-+              memcpy(stateid, sp->so_stateid, sizeof(nfs4_stateid));
-       else
--              memcpy(arg.stateid, zero_stateid, sizeof(nfs4_stateid));
-+              memcpy(stateid, zero_stateid, sizeof(nfs4_stateid));
-       fattr->valid = 0;
--      return rpc_call_sync(server->client, &msg, rpcflags);
-+      status = rpc_call_sync(server->client, &msg, 0);
-+      dprintk("NFS reply commit: %d\n", status);
-+      return status;
- }
- /*
-@@ -1752,7 +1769,7 @@ struct nfs_rpc_ops       nfs_v4_clientops = {
-       .readlink       = nfs4_proc_readlink,
-       .read           = nfs4_proc_read,
-       .write          = nfs4_proc_write,
--      .commit         = NULL,
-+      .commit         = nfs4_proc_commit,
-       .create         = nfs4_proc_create,
-       .remove         = nfs4_proc_remove,
-       .unlink_setup   = nfs4_proc_unlink_setup,
---- linux-2.6.0-test1/fs/nfs/pagelist.c        2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/pagelist.c       2003-07-19 17:07:05.000000000 -0700
-@@ -154,26 +154,6 @@ nfs_release_request(struct nfs_page *req
- }
- /**
-- * nfs_release_list - cleanly dispose of an unattached list of page requests
-- * @list: list of doomed page requests
-- */
--void
--nfs_release_list(struct list_head *list)
--{
--      while (!list_empty(list)) {
--              struct nfs_page *req = nfs_list_entry(list);
--
--              nfs_list_remove_request(req);
--
--              page_cache_release(req->wb_page);
--
--              /* Release struct file or cached credential */
--              nfs_clear_request(req);
--              nfs_page_free(req);
--      }
--}
--
--/**
-  * nfs_list_add_request - Insert a request into a sorted list
-  * @req: request
-  * @head: head of list into which to insert the request.
-@@ -222,37 +202,6 @@ nfs_wait_on_request(struct nfs_page *req
- }
- /**
-- * nfs_wait_for_reads - wait for outstanding requests to complete
-- * @head: list of page requests to wait for
-- */
--int
--nfs_wait_for_reads(struct list_head *head)
--{
--      struct list_head *p = head->next;
--      unsigned int res = 0;
--
--      while (p != head) {
--              struct nfs_page *req = nfs_list_entry(p);
--              int error;
--
--              if (!NFS_WBACK_BUSY(req))
--                      continue;
--
--              req->wb_count++;
--              error = nfs_wait_on_request(req);
--              if (error < 0)
--                      return error;
--              nfs_list_remove_request(req);
--              nfs_clear_request(req);
--              nfs_page_free(req);
--
--              p = head->next;
--              res++;
--      }
--      return res;
--}
--
--/**
-  * nfs_coalesce_requests - Split coalesced requests out from a list.
-  * @head: source list
-  * @dst: destination list
---- linux-2.6.0-test1/fs/nfs/proc.c    2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/proc.c   2003-07-19 17:07:07.000000000 -0700
-@@ -149,82 +149,62 @@ nfs_proc_readlink(struct inode *inode, s
- }
- static int
--nfs_proc_read(struct inode *inode, struct rpc_cred *cred,
--            struct nfs_fattr *fattr, int flags,
--            unsigned int base, unsigned int count, struct page *page,
--            int *eofp)
--{
--      u64                     offset = page_offset(page) + base;
--      struct nfs_readargs     arg = {
--              .fh             = NFS_FH(inode),
--              .offset         = offset,
--              .count          = count,
--              .pgbase         = base,
--              .pages          = &page
--      };
--      struct nfs_readres      res = {
--              .fattr          = fattr,
--              .count          = count
--      };
-+nfs_proc_read(struct nfs_read_data *rdata)
-+{
-+      int                     flags = rdata->flags;
-+      struct inode *          inode = rdata->inode;
-+      struct nfs_fattr *      fattr = rdata->res.fattr;
-       struct rpc_message      msg = {
-               .rpc_proc       = &nfs_procedures[NFSPROC_READ],
--              .rpc_argp       = &arg,
--              .rpc_resp       = &res,
--              .rpc_cred       = cred
-+              .rpc_argp       = &rdata->args,
-+              .rpc_resp       = &rdata->res,
-+              .rpc_cred       = rdata->cred,
-       };
-       int                     status;
--      dprintk("NFS call  read %d @ %Ld\n", count, (long long)offset);
-+      dprintk("NFS call  read %d @ %Ld\n", rdata->args.count,
-+                      (long long) rdata->args.offset);
-       fattr->valid = 0;
-       status = rpc_call_sync(NFS_CLIENT(inode), &msg, flags);
--
--      if (status >= 0)
-+      if (status >= 0) {
-               nfs_refresh_inode(inode, fattr);
-+              /* NFSv2 reads don't return an eof flag, so we make
-+               * up a value here.  XDR has already set eof to 0. */
-+              if (status < rdata->args.count)
-+                      rdata->res.eof = 1;
-+      }
-       dprintk("NFS reply read: %d\n", status);
--      *eofp = res.eof;
-       return status;
- }
- static int
--nfs_proc_write(struct inode *inode, struct rpc_cred *cred,
--             struct nfs_fattr *fattr, int how,
--             unsigned int base, unsigned int count,
--             struct page *page, struct nfs_writeverf *verf)
-+nfs_proc_write(struct nfs_write_data *wdata)
- {
--      u64                     offset = page_offset(page) + base;
--      struct nfs_writeargs    arg = {
--              .fh             = NFS_FH(inode),
--              .offset         = offset,
--              .count          = count,
--              .stable         = NFS_FILE_SYNC,
--              .pgbase         = base,
--              .pages          = &page
--      };
--      struct nfs_writeres     res = {
--              .fattr          = fattr,
--              .verf           = verf,
--              .count          = count
--      };
-+      int                     flags = wdata->flags;
-+      struct inode *          inode = wdata->inode;
-+      struct nfs_fattr *      fattr = wdata->res.fattr;
-       struct rpc_message      msg = {
-               .rpc_proc       = &nfs_procedures[NFSPROC_WRITE],
--              .rpc_argp       = &arg,
--              .rpc_resp       = &res,
--              .rpc_cred       = cred
-+              .rpc_argp       = &wdata->args,
-+              .rpc_resp       = &wdata->res,
-+              .rpc_cred       = wdata->cred
-       };
--      int                     status, flags = 0;
-+      int                     status;
--      dprintk("NFS call  write %d @ %Ld\n", count, (long long)offset);
-+      dprintk("NFS call  write %d @ %Ld\n", wdata->args.count,
-+                      (long long) wdata->args.offset);
-       fattr->valid = 0;
--      if (how & NFS_RW_SWAP)
--              flags |= NFS_RPC_SWAPFLAGS;
-       status = rpc_call_sync(NFS_CLIENT(inode), &msg, flags);
--
--      if (status >= 0)
-+      if (status >= 0) {
-               nfs_write_refresh_inode(inode, fattr);
--
-+              /* NFSv2 writes don't return a byte count or write
-+               * verifier, so we make up values here.  Note that
-+               * v2 writes are always NFS_FILE_SYNC writes. */
-+              wdata->res.count = wdata->args.count;
-+              wdata->verf.committed = NFS_FILE_SYNC;
-+      }
-       dprintk("NFS reply write: %d\n", status);
--      verf->committed = NFS_FILE_SYNC;      /* NFSv2 always syncs data */
--      return status < 0? status : count;
-+      return status < 0? status : wdata->res.count;
- }
- static int
---- linux-2.6.0-test1/fs/nfs/read.c    2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/nfs/read.c   2003-07-19 17:07:06.000000000 -0700
-@@ -69,19 +69,28 @@ void nfs_readdata_release(struct rpc_tas
- static int
- nfs_readpage_sync(struct file *file, struct inode *inode, struct page *page)
- {
--      struct rpc_cred *cred = NULL;
--      struct nfs_fattr fattr;
--      unsigned int    offset = 0;
-       unsigned int    rsize = NFS_SERVER(inode)->rsize;
-       unsigned int    count = PAGE_CACHE_SIZE;
-       int             result;
--      int             flags = IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0;
--      int             eof;
-+      struct nfs_read_data    rdata = {
-+              .flags          = (IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0),
-+              .cred           = NULL,
-+              .inode          = inode,
-+              .args           = {
-+                      .fh             = NFS_FH(inode),
-+                      .pages          = &page,
-+                      .pgbase         = 0UL,
-+                      .count          = rsize,
-+              },
-+              .res            = {
-+                      .fattr          = &rdata.fattr,
-+              }
-+      };
-       dprintk("NFS: nfs_readpage_sync(%p)\n", page);
-       if (file)
--              cred = nfs_file_cred(file);
-+              rdata.cred = nfs_file_cred(file);
-       /*
-        * This works now because the socket layer never tries to DMA
-@@ -89,17 +98,19 @@ nfs_readpage_sync(struct file *file, str
-        */
-       do {
-               if (count < rsize)
--                      rsize = count;
-+                      rdata.args.count = count;
-+              rdata.res.count = rdata.args.count;
-+              rdata.args.offset = page_offset(page) + rdata.args.pgbase;
-               dprintk("NFS: nfs_proc_read(%s, (%s/%Ld), %Lu, %u)\n",
-                       NFS_SERVER(inode)->hostname,
-                       inode->i_sb->s_id,
-                       (long long)NFS_FILEID(inode),
--                      (unsigned long long)offset, rsize);
-+                      (unsigned long long)rdata.args.pgbase,
-+                      rdata.args.count);
-               lock_kernel();
--              result = NFS_PROTO(inode)->read(inode, cred, &fattr, flags,
--                                              offset, rsize, page, &eof);
-+              result = NFS_PROTO(inode)->read(&rdata);
-               unlock_kernel();
-               /*
-@@ -111,14 +122,15 @@ nfs_readpage_sync(struct file *file, str
-                               result = -EINVAL;
-                       goto io_error;
-               }
--              count  -= result;
--              offset += result;
--              if (result < rsize)     /* NFSv2ism */
-+              count -= result;
-+              rdata.args.pgbase += result;
-+
-+              if (rdata.res.eof)
-                       break;
-       } while (count);
-       if (count)
--              memclear_highpage_flush(page, offset, count);
-+              memclear_highpage_flush(page, rdata.args.pgbase, count);
-       SetPageUptodate(page);
-       if (PageError(page))
-               ClearPageError(page);
---- linux-2.6.0-test1/fs/nfs/write.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/nfs/write.c  2003-07-19 17:07:07.000000000 -0700
-@@ -132,66 +132,73 @@ static int
- nfs_writepage_sync(struct file *file, struct inode *inode, struct page *page,
-                  unsigned int offset, unsigned int count)
- {
--      struct rpc_cred *cred = NULL;
--      loff_t          base;
-       unsigned int    wsize = NFS_SERVER(inode)->wsize;
--      int             result, refresh = 0, written = 0, flags;
--      u8              *buffer;
--      struct nfs_fattr fattr;
--      struct nfs_writeverf verf;
--
-+      int             result, written = 0;
-+      int             swapfile = IS_SWAPFILE(inode);
-+      struct nfs_write_data   wdata = {
-+              .flags          = swapfile ? NFS_RPC_SWAPFLAGS : 0,
-+              .cred           = NULL,
-+              .inode          = inode,
-+              .args           = {
-+                      .fh             = NFS_FH(inode),
-+                      .pages          = &page,
-+                      .stable         = NFS_FILE_SYNC,
-+                      .pgbase         = offset,
-+                      .count          = wsize,
-+              },
-+              .res            = {
-+                      .fattr          = &wdata.fattr,
-+                      .verf           = &wdata.verf,
-+              },
-+      };
-       if (file)
--              cred = get_rpccred(nfs_file_cred(file));
--      if (!cred)
--              cred = get_rpccred(NFS_I(inode)->mm_cred);
-+              wdata.cred = get_rpccred(nfs_file_cred(file));
-+      if (!wdata.cred)
-+              wdata.cred = get_rpccred(NFS_I(inode)->mm_cred);
-       dprintk("NFS:      nfs_writepage_sync(%s/%Ld %d@%Ld)\n",
-               inode->i_sb->s_id,
-               (long long)NFS_FILEID(inode),
-               count, (long long)(page_offset(page) + offset));
--      base = page_offset(page) + offset;
--
--      flags = ((IS_SWAPFILE(inode)) ? NFS_RW_SWAP : 0) | NFS_RW_SYNC;
--
-       do {
--              if (count < wsize && !IS_SWAPFILE(inode))
--                      wsize = count;
-+              if (count < wsize && !swapfile)
-+                      wdata.args.count = count;
-+              wdata.args.offset = page_offset(page) + wdata.args.pgbase;
--              result = NFS_PROTO(inode)->write(inode, cred, &fattr, flags,
--                                               offset, wsize, page, &verf);
-+              result = NFS_PROTO(inode)->write(&wdata);
-               if (result < 0) {
-                       /* Must mark the page invalid after I/O error */
-                       ClearPageUptodate(page);
-                       goto io_error;
-               }
--              if (result != wsize)
--                      printk("NFS: short write, wsize=%u, result=%d\n",
--                      wsize, result);
--              refresh = 1;
--              buffer  += wsize;
--              base    += wsize;
--              offset  += wsize;
--              written += wsize;
--              count   -= wsize;
-+              if (result < wdata.args.count)
-+                      printk(KERN_WARNING "NFS: short write, count=%u, result=%d\n",
-+                                      wdata.args.count, result);
-+
-+              wdata.args.offset += result;
-+              wdata.args.pgbase += result;
-+              written += result;
-+              count -= result;
-+
-               /*
-                * If we've extended the file, update the inode
-                * now so we don't invalidate the cache.
-                */
--              if (base > i_size_read(inode))
--                      i_size_write(inode, base);
-+              if (wdata.args.offset > i_size_read(inode))
-+                      i_size_write(inode, wdata.args.offset);
-       } while (count);
-       if (PageError(page))
-               ClearPageError(page);
- io_error:
--      if (cred)
--              put_rpccred(cred);
-+      if (wdata.cred)
-+              put_rpccred(wdata.cred);
--      return written? written : result;
-+      return written ? written : result;
- }
- static int
---- linux-2.6.0-test1/fs/partitions/check.c    2003-06-22 12:04:44.000000000 -0700
-+++ 25/fs/partitions/check.c   2003-07-19 17:03:50.000000000 -0700
-@@ -16,7 +16,6 @@
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/fs.h>
--#include <linux/blk.h>
- #include <linux/kmod.h>
- #include <linux/ctype.h>
- #include <linux/devfs_fs_kernel.h>
-@@ -348,6 +347,9 @@ void register_disk(struct gendisk *disk)
-               return;
-       }
-+      /* always add handle for the whole disk */
-+      devfs_add_partitioned(disk);
-+
-       /* No such device (e.g., media were just removed) */
-       if (!get_capacity(disk))
-               return;
-@@ -356,7 +358,6 @@ void register_disk(struct gendisk *disk)
-       if (blkdev_get(bdev, FMODE_READ, 0, BDEV_RAW) < 0)
-               return;
-       state = check_partition(disk, bdev);
--      devfs_add_partitioned(disk);
-       if (state) {
-               for (j = 1; j < state->limit; j++) {
-                       sector_t size = state->parts[j].size;
---- linux-2.6.0-test1/fs/partitions/efi.h      2003-06-14 12:18:28.000000000 -0700
-+++ 25/fs/partitions/efi.h     2003-07-19 17:03:50.000000000 -0700
-@@ -32,7 +32,6 @@
- #include <linux/kernel.h>
- #include <linux/major.h>
- #include <linux/string.h>
--#include <linux/blk.h>
- #include <linux/efi.h>
- #define MSDOS_MBR_SIGNATURE 0xaa55
---- linux-2.6.0-test1/fs/partitions/nec98.c    2003-06-14 12:17:57.000000000 -0700
-+++ 25/fs/partitions/nec98.c   2003-07-19 17:03:50.000000000 -0700
-@@ -8,7 +8,6 @@
- #include <linux/fs.h>
- #include <linux/genhd.h>
- #include <linux/kernel.h>
--#include <linux/blk.h>
- #include <linux/hdreg.h>
- #include "check.h"
---- linux-2.6.0-test1/fs/proc/array.c  2003-06-26 22:07:25.000000000 -0700
-+++ 25/fs/proc/array.c 2003-07-19 17:06:42.000000000 -0700
-@@ -300,7 +300,7 @@ int proc_pid_stat(struct task_struct *ta
-       task_lock(task);
-       mm = task->mm;
-       if(mm)
--              atomic_inc(&mm->mm_users);
-+              mm = mmgrab(mm);
-       if (task->tty) {
-               tty_pgrp = task->tty->pgrp;
-               tty_nr = task->tty->device;
---- linux-2.6.0-test1/fs/proc/proc_misc.c      2003-07-10 18:50:32.000000000 -0700
-+++ 25/fs/proc/proc_misc.c     2003-07-19 17:06:40.000000000 -0700
-@@ -274,6 +274,18 @@ static struct file_operations proc_cpuin
-       .release        = seq_release,
- };
-+extern struct seq_operations rcu_op;
-+static int rcu_open(struct inode *inode, struct file *file)
-+{
-+      return seq_open(file, &rcu_op);
-+}
-+static struct file_operations proc_rcu_operations = {
-+      .open           = rcu_open,
-+      .read           = seq_read,
-+      .llseek         = seq_lseek,
-+      .release        = seq_release,
-+};
-+
- extern struct seq_operations vmstat_op;
- static int vmstat_open(struct inode *inode, struct file *file)
- {
-@@ -388,10 +400,8 @@ static int kstat_read_proc(char *page, c
-               system += kstat_cpu(i).cpustat.system;
-               idle += kstat_cpu(i).cpustat.idle;
-               iowait += kstat_cpu(i).cpustat.iowait;
--#if !defined(CONFIG_ARCH_S390)
-               for (j = 0 ; j < NR_IRQS ; j++)
-                       sum += kstat_cpu(i).irqs[j];
--#endif
-       }
-       len = sprintf(page, "cpu  %u %u %u %u %u\n",
-@@ -412,7 +422,7 @@ static int kstat_read_proc(char *page, c
-       }
-       len += sprintf(page + len, "intr %u", sum);
--#if !defined(CONFIG_ARCH_S390) && !defined(CONFIG_PPC64) && !defined(CONFIG_ALPHA)
-+#if !defined(CONFIG_PPC64) && !defined(CONFIG_ALPHA)
-       for (i = 0 ; i < NR_IRQS ; i++)
-               len += sprintf(page + len, " %u", kstat_irqs(i));
- #endif
-@@ -440,7 +450,6 @@ static int devices_read_proc(char *page,
-       return proc_calc_metrics(page, start, off, count, eof, len);
- }
--#if !defined(CONFIG_ARCH_S390)
- extern int show_interrupts(struct seq_file *p, void *v);
- static int interrupts_open(struct inode *inode, struct file *file)
- {
-@@ -466,7 +475,6 @@ static struct file_operations proc_inter
-       .llseek         = seq_lseek,
-       .release        = single_release,
- };
--#endif
- static int filesystems_read_proc(char *page, char **start, off_t off,
-                                int count, int *eof, void *data)
-@@ -536,7 +544,8 @@ static ssize_t read_profile(struct file 
-               buf++; p++; count--; read++;
-       }
-       pnt = (char *)prof_buffer + p - sizeof(unsigned int);
--      copy_to_user(buf,(void *)pnt,count);
-+      if (copy_to_user(buf,(void *)pnt,count))
-+              return -EFAULT;
-       read += count;
-       *ppos += read;
-       return read;
-@@ -606,6 +615,36 @@ static void create_seq_entry(char *name,
-               entry->proc_fops = f;
- }
-+#ifdef CONFIG_LOCKMETER
-+extern ssize_t get_lockmeter_info(char *, size_t, loff_t *);
-+extern ssize_t put_lockmeter_info(const char *, size_t);
-+extern int get_lockmeter_info_size(void);
-+
-+/*
-+ * This function accesses lock metering information.
-+ */
-+static ssize_t read_lockmeter(struct file *file, char *buf,
-+                            size_t count, loff_t *ppos)
-+{
-+      return get_lockmeter_info(buf, count, ppos);
-+}
-+
-+/*
-+ * Writing to /proc/lockmeter resets the counters
-+ */
-+static ssize_t write_lockmeter(struct file * file, const char * buf,
-+                             size_t count, loff_t *ppos)
-+{
-+      return put_lockmeter_info(buf, count);
-+}
-+
-+static struct file_operations proc_lockmeter_operations = {
-+      NULL,           /* lseek */
-+      read:           read_lockmeter,
-+      write:          write_lockmeter,
-+};
-+#endif  /* CONFIG_LOCKMETER */
-+
- void __init proc_misc_init(void)
- {
-       struct proc_dir_entry *entry;
-@@ -644,10 +683,9 @@ void __init proc_misc_init(void)
-       if (entry)
-               entry->proc_fops = &proc_kmsg_operations;
-       create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
-+      create_seq_entry("rcu", 0, &proc_rcu_operations);
-       create_seq_entry("partitions", 0, &proc_partitions_operations);
--#if !defined(CONFIG_ARCH_S390)
-       create_seq_entry("interrupts", 0, &proc_interrupts_operations);
--#endif
-       create_seq_entry("slabinfo",S_IWUSR|S_IRUGO,&proc_slabinfo_operations);
-       create_seq_entry("buddyinfo",S_IRUGO, &fragmentation_file_operations);
-       create_seq_entry("vmstat",S_IRUGO, &proc_vmstat_file_operations);
-@@ -673,6 +711,13 @@ void __init proc_misc_init(void)
-       if (entry)
-               entry->proc_fops = &proc_sysrq_trigger_operations;
- #endif
-+#ifdef CONFIG_LOCKMETER
-+      entry = create_proc_entry("lockmeter", S_IWUSR | S_IRUGO, NULL);
-+      if (entry) {
-+              entry->proc_fops = &proc_lockmeter_operations;
-+              entry->size = get_lockmeter_info_size();
-+      }
-+#endif
- #ifdef CONFIG_PPC32
-       {
-               extern struct file_operations ppc_htab_operations;
---- linux-2.6.0-test1/fs/stat.c        2003-07-13 21:44:35.000000000 -0700
-+++ 25/fs/stat.c       2003-07-19 17:06:16.000000000 -0700
-@@ -123,6 +123,7 @@ static int cp_old_stat(struct kstat *sta
-       SET_OLDSTAT_UID(tmp, stat->uid);
-       SET_OLDSTAT_GID(tmp, stat->gid);
-       tmp.st_rdev = stat->rdev;
-+      tmp.__pad_16bit = 0;  /* don't leak kernel stack data! */
- #if BITS_PER_LONG == 32
-       if (stat->size > MAX_NON_LFS)
-               return -EOVERFLOW;
---- linux-2.6.0-test1/fs/umsdos/ioctl.c        2003-06-14 12:17:57.000000000 -0700
-+++ 25/fs/umsdos/ioctl.c       2003-07-19 17:03:50.000000000 -0700
-@@ -4,6 +4,10 @@
-  *  Written 1993 by Jacques Gelinas
-  *
-  *  Extended MS-DOS ioctl directory handling functions
-+ *
-+ *  Changes:
-+ *  11/07/2003      Daniele Bellucci <bellucda@tiscali.it>
-+ *                  - audit copy_to_user/put_user in umsdos_ioctl_fill.
-  */
- #include <asm/uaccess.h>
-@@ -36,11 +40,12 @@ static int umsdos_ioctl_fill (
-       struct UMSDOS_DIR_ONCE *d = (struct UMSDOS_DIR_ONCE *) buf;
-       if (d->count == 0) {
--              copy_to_user (d->ent->d_name, name, name_len);
--              put_user ('\0', d->ent->d_name + name_len);
--              put_user (name_len, &d->ent->d_reclen);
--              put_user (ino, &d->ent->d_ino);
--              put_user (offset, &d->ent->d_off);
-+              if (copy_to_user (d->ent->d_name, name, name_len) ||
-+                  put_user ('\0', d->ent->d_name + name_len) ||
-+                  put_user (name_len, &d->ent->d_reclen) ||
-+                  put_user (ino, &d->ent->d_ino) ||
-+                  put_user (offset, &d->ent->d_off))
-+                      return -EFAULT;
-               d->count = 1;
-               ret = 0;
-       }
---- linux-2.6.0-test1/fs/vfat/namei.c  2003-07-10 18:50:32.000000000 -0700
-+++ 25/fs/vfat/namei.c 2003-07-19 17:03:50.000000000 -0700
-@@ -375,7 +375,7 @@ shortname_info_to_lcase(struct shortname
- }
- static inline int to_shortname_char(struct nls_table *nls,
--                                  char *buf, int buf_size, wchar_t *src,
-+                                  unsigned char *buf, int buf_size, wchar_t *src,
-                                   struct shortname_info *info)
- {
-       int len;
---- linux-2.6.0-test1/include/acpi/acconfig.h  2003-06-22 12:04:44.000000000 -0700
-+++ 25/include/acpi/acconfig.h 2003-07-19 17:03:50.000000000 -0700
-@@ -64,7 +64,7 @@
- /* Version string */
--#define ACPI_CA_VERSION                 0x20030619
-+#define ACPI_CA_VERSION                 0x20030714
- /* Maximum objects in the various object caches */
---- linux-2.6.0-test1/include/acpi/platform/acenv.h    2003-06-14 12:18:03.000000000 -0700
-+++ 25/include/acpi/platform/acenv.h   2003-07-19 17:03:50.000000000 -0700
-@@ -134,6 +134,9 @@
- #elif defined(__FreeBSD__)
- #include "acfreebsd.h"
-+#elif defined(__NetBSD__)
-+#include "acnetbsd.h"
-+
- #elif defined(MODESTO)
- #include "acmodesto.h"
-@@ -187,13 +190,14 @@
- #define DEBUGGER_SINGLE_THREADED    0
- #define DEBUGGER_MULTI_THREADED     1
-+#ifndef DEBUGGER_THREADING
- #ifdef ACPI_APPLICATION
- #define DEBUGGER_THREADING          DEBUGGER_SINGLE_THREADED
- #else
- #define DEBUGGER_THREADING          DEBUGGER_MULTI_THREADED
- #endif
--
-+#endif /* !DEBUGGER_THREADING */
- /******************************************************************************
-  *
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-alpha/lockmeter.h   2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,90 @@
-+/*
-+ *  Written by John Hawkes (hawkes@sgi.com)
-+ *  Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ *
-+ *  Modified by Peter Rival (frival@zk3.dec.com)
-+ */
-+
-+#ifndef _ALPHA_LOCKMETER_H
-+#define _ALPHA_LOCKMETER_H
-+
-+#include <asm/hwrpb.h>
-+#define CPU_CYCLE_FREQUENCY   hwrpb->cycle_freq
-+
-+#define get_cycles64()                get_cycles()
-+
-+#define THIS_CPU_NUMBER               smp_processor_id()
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-+#define local_irq_save(x) \
-+      __save_and_cli(x)
-+#define local_irq_restore(x) \
-+      __restore_flags(x)
-+#endif        /* Linux version 2.2.x */
-+
-+#define SPINLOCK_MAGIC_INIT /**/
-+
-+/*
-+ * Macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * We also assume that the hash table has less than 32767 entries.
-+ * the high order bit is used for write locking a rw_lock
-+ * Note: although these defines and macros are the same as what is being used
-+ *       in include/asm-i386/lockmeter.h, they are present here to easily
-+ *     allow an alternate Alpha implementation.
-+ */
-+/*
-+ * instrumented spinlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a spinlock_t
-+ */
-+typedef struct inst_spinlock_s {
-+      /* remember, Alpha is little endian */
-+      unsigned short lock;
-+      unsigned short index;
-+} inst_spinlock_t;
-+#define PUT_INDEX(lock_ptr,indexv)    ((inst_spinlock_t *)(lock_ptr))->index = indexv
-+#define GET_INDEX(lock_ptr)           ((inst_spinlock_t *)(lock_ptr))->index
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+      volatile int lock;
-+      unsigned short index;
-+      unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv)        ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr)               ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv)   ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr)                ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return true if rwlock is write locked
-+ * (note that other lock attempts can cause the lock value to be negative)
-+ */
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) (((inst_rwlock_t *)rwlock_ptr)->lock & 1)
-+#define IABS(x) ((x) > 0 ? (x) : -(x))
-+
-+#define RWLOCK_READERS(rwlock_ptr)    rwlock_readers(rwlock_ptr)
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+      int tmp = (int) ((inst_rwlock_t *)rwlock_ptr)->lock;
-+      /* readers subtract 2, so we have to:           */
-+      /*      - andnot off a possible writer (bit 0)  */
-+      /*      - get the absolute value                */
-+      /*      - divide by 2 (right shift by one)      */
-+      /* to find the number of readers                */
-+      if (tmp == 0) return(0);
-+      else return(IABS(tmp & ~1)>>1);
-+}
-+
-+#endif /* _ALPHA_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-alpha/pgalloc.h      2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-alpha/pgalloc.h     2003-07-19 17:07:16.000000000 -0700
-@@ -24,9 +24,9 @@ pmd_populate_kernel(struct mm_struct *mm
- }
- static inline void
--pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
--      pgd_set(pgd, pmd);
-+      pgd_set(pgd, page_address(pmd));
- }
- extern pgd_t *pgd_alloc(struct mm_struct *mm);
-@@ -37,19 +37,29 @@ pgd_free(pgd_t *pgd)
-       free_page((unsigned long)pgd);
- }
--static inline pmd_t *
-+static inline struct page *
- pmd_alloc_one(struct mm_struct *mm, unsigned long address)
- {
--      pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
--      if (ret)
--              clear_page(ret);
--      return ret;
-+      struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT);
-+      if (page)
-+              clear_highpage(page);
-+      return page;
-+}
-+
-+static inline pmd_t *
-+pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
-+{
-+      struct page *page = pmd_alloc_one(mm, addr);
-+      if (page)
-+              return page_address(page);
-+      else
-+              return NULL;
- }
- static inline void
--pmd_free(pmd_t *pmd)
-+pmd_free(struct page *pmd)
- {
--      free_page((unsigned long)pmd);
-+      __free_page(pmd);
- }
- extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr);
---- linux-2.6.0-test1/include/asm-alpha/pgtable.h      2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-alpha/pgtable.h     2003-07-19 17:07:16.000000000 -0700
-@@ -229,9 +229,11 @@ pmd_page_kernel(pmd_t pmd)
- #define pmd_page(pmd) (mem_map + ((pmd_val(pmd) & _PFN_MASK) >> 32))
- #endif
--extern inline unsigned long pgd_page(pgd_t pgd)
-+extern inline unsigned long __pgd_page(pgd_t pgd)
- { return PAGE_OFFSET + ((pgd_val(pgd) & _PFN_MASK) >> (32-PAGE_SHIFT)); }
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
-+
- extern inline int pte_none(pte_t pte)         { return !pte_val(pte); }
- extern inline int pte_present(pte_t pte)      { return pte_val(pte) & _PAGE_VALID; }
- extern inline void pte_clear(pte_t *ptep)     { pte_val(*ptep) = 0; }
-@@ -280,9 +282,15 @@ extern inline pte_t pte_mkyoung(pte_t pt
- /* Find an entry in the second-level page table.. */
- extern inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
- {
--      return (pmd_t *) pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1));
-+      return (pmd_t *)__pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1));
- }
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- extern inline pte_t * pte_offset_kernel(pmd_t * dir, unsigned long address)
- {
---- linux-2.6.0-test1/include/asm-alpha/posix_types.h  2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/asm-alpha/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned int  __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned int  __kernel_ino_t;
- typedef unsigned int  __kernel_mode_t;
- typedef unsigned int  __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-alpha/smp.h  2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-alpha/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -3,6 +3,7 @@
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
- #include <asm/pal.h>
-@@ -44,27 +45,12 @@ extern struct cpuinfo_alpha cpu_data[NR_
- #define hard_smp_processor_id()       __hard_smp_processor_id()
- #define smp_processor_id()    (current_thread_info()->cpu)
--extern unsigned long cpu_present_mask;
--extern volatile unsigned long cpu_online_map;
-+extern cpumask_t cpu_present_mask;
-+extern cpumask_t long cpu_online_map;
- extern int smp_num_cpus;
--#define cpu_possible(cpu)     (cpu_present_mask & (1UL << (cpu)))
--#define cpu_online(cpu)               (cpu_online_map & (1UL << (cpu)))
--
--static inline int
--num_online_cpus(void)
--{
--      return hweight64(cpu_online_map);
--}
--
--extern inline int
--any_online_cpu(unsigned int mask)
--{
--        if (mask & cpu_online_map)
--                return __ffs(mask & cpu_online_map);
--
--        return -1;
--}
-+#define cpu_possible(cpu)     cpu_isset(cpu, cpu_present_mask)
-+#define cpu_online(cpu)               cpu_isset(cpu, cpu_online_map)
- extern int smp_call_function_on_cpu(void (*func) (void *info), void *info,int retry, int wait, unsigned long cpu);
---- linux-2.6.0-test1/include/asm-alpha/spinlock.h     2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-alpha/spinlock.h    2003-07-19 17:06:40.000000000 -0700
-@@ -6,6 +6,10 @@
- #include <linux/kernel.h>
- #include <asm/current.h>
-+#ifdef CONFIG_LOCKMETER
-+#undef DEBUG_SPINLOCK
-+#undef DEBUG_RWLOCK
-+#endif
- /*
-  * Simple spin lock operations.  There are two variants, one clears IRQ's
-@@ -95,9 +99,18 @@ static inline int _raw_spin_trylock(spin
- typedef struct {
-       volatile int write_lock:1, read_counter:31;
-+#ifdef CONFIG_LOCKMETER
-+      /* required for LOCKMETER since all bits in lock are used */
-+      /* need this storage for CPU and lock INDEX ............. */
-+      unsigned magic;
-+#endif
- } /*__attribute__((aligned(32)))*/ rwlock_t;
-+#ifdef CONFIG_LOCKMETER
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0 }
-+#else
- #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 }
-+#endif
- #define rwlock_init(x)        do { *(x) = RW_LOCK_UNLOCKED; } while(0)
- #define rwlock_is_locked(x)   (*(volatile int *)(x) != 0)
-@@ -169,4 +182,41 @@ static inline void _raw_read_unlock(rwlo
-       : "m" (*lock) : "memory");
- }
-+#ifdef CONFIG_LOCKMETER
-+static inline int _raw_write_trylock(rwlock_t *lock)
-+{
-+      long temp,result;
-+
-+      __asm__ __volatile__(
-+      "       ldl_l %1,%0\n"
-+      "       mov $31,%2\n"
-+      "       bne %1,1f\n"
-+      "       or $31,1,%2\n"
-+      "       stl_c %2,%0\n"
-+      "1:     mb\n"
-+      : "=m" (*(volatile int *)lock), "=&r" (temp), "=&r" (result)
-+      : "m" (*(volatile int *)lock)
-+      );
-+
-+      return (result);
-+}
-+
-+static inline int _raw_read_trylock(rwlock_t *lock)
-+{
-+      unsigned long temp,result;
-+
-+      __asm__ __volatile__(
-+      "       ldl_l %1,%0\n"
-+      "       mov $31,%2\n"
-+      "       blbs %1,1f\n"
-+      "       subl %1,2,%2\n"
-+      "       stl_c %2,%0\n"
-+      "1:     mb\n"
-+      : "=m" (*(volatile int *)lock), "=&r" (temp), "=&r" (result)
-+      : "m" (*(volatile int *)lock)
-+      );
-+      return (result);
-+}
-+#endif /* CONFIG_LOCKMETER */
-+
- #endif /* _ALPHA_SPINLOCK_H */
---- linux-2.6.0-test1/include/asm-arm26/pgalloc.h      2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-arm26/pgalloc.h     2003-07-19 17:07:16.000000000 -0700
-@@ -55,7 +55,8 @@ pmd_populate_kernel(struct mm_struct *mm
-  * is thrown away. It just cant be zero. -IM
-  */
--#define pmd_alloc_one(mm,addr)                ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,addr)                ((struct page *)2); BUG()
-+#define pmd_alloc_one_kernel(mm,addr) ((pmd_t *)2); BUG()
- #define pmd_free(pmd)                 do { } while (0)
- #define pgd_populate(mm,pmd,pte)      BUG()
---- linux-2.6.0-test1/include/asm-arm26/pgtable.h      2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-arm26/pgtable.h     2003-07-19 17:07:16.000000000 -0700
-@@ -99,7 +99,7 @@ extern struct page *empty_zero_page;
-  * on arm26 we have no 2nd level page table. we simulate this by removing the
-  * PMD.
-  *
-- * pgd_none is 0 to prevernt pmd_alloc() calling __pmd_alloc(). This causes it
-+ * pgd_none is 0 to prevernt pmd_alloc_map() calling __pmd_alloc(). This causes it
-  * to return pmd_offset(pgd,addr) which is a pointer to the pgd (IOW, a no-op).
-  *
-  * however, to work this way, whilst we are allocating 32 pgds, containing 32
-@@ -134,7 +134,7 @@ extern struct page *empty_zero_page;
- #define _PMD_PRESENT     (0x01)
--/* These definitions allow us to optimise out stuff like pmd_alloc() */
-+/* These definitions allow us to optimise out stuff like pmd_alloc_map() */
- #define pgd_none(pgd)         (0) 
- #define pgd_bad(pgd)          (0)
- #define pgd_present(pgd)      (1)
-@@ -189,6 +189,12 @@ extern struct page *empty_zero_page;
- #define pte_unmap(pte)                  do { } while (0)
- #define pte_unmap_nested(pte)           do { } while (0)
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)             pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset(pgd, addr)
-+#define pmd_unmap(pgd, addr)                  do { } while (0)
-+#define pmd_unmap_nested(pgd, addr)           do { } while (0)
-+
- #define _PAGE_PRESENT   0x01
- #define _PAGE_READONLY  0x02
---- linux-2.6.0-test1/include/asm-arm26/posix_types.h  2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-arm26/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -19,7 +19,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned short                __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long         __kernel_ino_t;
- typedef unsigned short                __kernel_mode_t;
- typedef unsigned short                __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-arm/pgalloc.h        2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-arm/pgalloc.h       2003-07-19 17:07:16.000000000 -0700
-@@ -16,7 +16,8 @@
- /*
-  * Since we have only two-level page tables, these are trivial
-  */
--#define pmd_alloc_one(mm,addr)                ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,addr)                ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,addr) ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(pmd)                 do { } while (0)
- #define pgd_populate(mm,pmd,pte)      BUG()
---- linux-2.6.0-test1/include/asm-arm/pgtable.h        2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-arm/pgtable.h       2003-07-19 17:07:16.000000000 -0700
-@@ -125,6 +125,11 @@ extern struct page *empty_zero_page;
- /* Find an entry in the second-level page table.. */
- #define pmd_offset(dir, addr) ((pmd_t *)(dir))
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)             pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                do { } while (0)
-+#define pmd_unmap_nested(pmd)                 do { } while (0)
- /* Find an entry in the third-level page table.. */
- #define __pte_index(addr)     (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-arm/posix_types.h    2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-arm/posix_types.h   2003-07-19 17:06:39.000000000 -0700
-@@ -19,7 +19,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned short                __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long         __kernel_ino_t;
- typedef unsigned short                __kernel_mode_t;
- typedef unsigned short                __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-cris/pgalloc.h       2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-cris/pgalloc.h      2003-07-19 17:07:16.000000000 -0700
-@@ -57,7 +57,8 @@ extern inline void pte_free(struct page 
-  * the pgd will always be present..
-  */
--#define pmd_alloc_one(mm, addr)    ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr)         ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr)  ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x)                do { } while (0)
- #define __pmd_free_tlb(tlb,x)      do { } while (0)
- #define pgd_populate(mm, pmd, pte) BUG()
---- linux-2.6.0-test1/include/asm-cris/pgtable.h       2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-cris/pgtable.h      2003-07-19 17:07:16.000000000 -0700
-@@ -339,4 +339,10 @@ extern inline void update_mmu_cache(stru
- typedef pte_t *pte_addr_t;
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
-+
- #endif /* _CRIS_PGTABLE_H */
---- linux-2.6.0-test1/include/asm-cris/posix_types.h   2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-cris/posix_types.h  2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned short        __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short        __kernel_mode_t;
- typedef unsigned short        __kernel_nlink_t;
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_array.h     2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,41 @@
-+#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H
-+#define __ASM_GENERIC_CPUMASK_ARRAY_H
-+
-+#define CPU_ARRAY_SIZE                BITS_TO_LONGS(NR_CPUS)
-+
-+#define cpu_set(cpu, map)             set_bit(cpu, (map).mask)
-+#define cpu_clear(cpu, map)           clear_bit(cpu, (map).mask)
-+#define cpu_isset(cpu, map)           test_bit(cpu, (map).mask)
-+#define cpu_test_and_set(cpu, map)    test_and_set_bit(cpu, (map).mask)
-+
-+#define cpus_and(dst,src1,src2)       bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS)
-+#define cpus_or(dst,src1,src2)        bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS)
-+#define cpus_clear(map)               bitmap_clear((map).mask, NR_CPUS)
-+#define cpus_complement(map)  bitmap_complement((map).mask, NR_CPUS)
-+#define cpus_equal(map1, map2)        bitmap_equal((map1).mask, (map2).mask, NR_CPUS)
-+#define cpus_empty(map)               bitmap_empty(map.mask, NR_CPUS)
-+#define cpus_weight(map)              bitmap_weight((map).mask, NR_CPUS)
-+#define cpus_shift_right(d, s, n)     bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS)
-+#define cpus_shift_left(d, s, n)      bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS)
-+#define first_cpu(map)                find_first_bit((map).mask, NR_CPUS)
-+#define next_cpu(cpu, map)    find_next_bit((map).mask, NR_CPUS, cpu)
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_coerce(map)      ((map).mask[0])
-+#define cpus_promote(map)     ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
-+                                      __cpu_mask.mask[0] = map;       \
-+                                      __cpu_mask;                     \
-+                              })
-+#define cpumask_of_cpu(cpu)   ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
-+                                      cpu_set(cpu, __cpu_mask);       \
-+                                      __cpu_mask;                     \
-+                              })
-+#define any_online_cpu(map)   find_first_bit((map).mask, NR_CPUS)
-+
-+/*
-+ * um, these need to be usable as static initializers
-+ */
-+#define CPU_MASK_ALL  { {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} }
-+#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] =  0UL} }
-+
-+#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_const_reference.h   2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,29 @@
-+#ifndef __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
-+#define __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
-+
-+struct cpumask_ref {
-+      const cpumask_t *val;
-+};
-+
-+typedef const struct cpumask_ref cpumask_const_t;
-+
-+#define mk_cpumask_const(map)         ((cpumask_const_t){ &(map) })
-+#define cpu_isset_const(cpu, map)     cpu_isset(cpu, *(map).val)
-+
-+#define cpus_and_const(dst,src1,src2) cpus_and(dst,*(src1).val,*(src2).val)
-+#define cpus_or_const(dst,src1,src2)  cpus_or(dst,*(src1).val,*(src2).val)
-+
-+#define cpus_equal_const(map1, map2)  cpus_equal(*(map1).val, *(map2).val)
-+
-+#define cpus_copy_const(map1, map2)   bitmap_copy((map1).mask, (map2).val->mask, NR_CPUS)
-+
-+#define cpus_empty_const(map)         cpus_empty(*(map).val)
-+#define cpus_weight_const(map)                cpus_weight(*(map).val)
-+#define first_cpu_const(map)          first_cpu(*(map).val)
-+#define next_cpu_const(cpu, map)      next_cpu(cpu, *(map).val)
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_coerce_const(map)                cpus_coerce(*(map).val)
-+#define any_online_cpu_const(map)     any_online_cpu(*(map).val)
-+
-+#endif /* __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_const_value.h       2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,21 @@
-+#ifndef __ASM_GENERIC_CPUMASK_CONST_VALUE_H
-+#define __ASM_GENERIC_CPUMASK_CONST_VALUE_H
-+
-+typedef const cpumask_t cpumask_const_t;
-+
-+#define mk_cpumask_const(map)         ((cpumask_const_t)(map))
-+#define cpu_isset_const(cpu, map)     cpu_isset(cpu, map)
-+#define cpus_and_const(dst,src1,src2) cpus_and(dst, src1, src2)
-+#define cpus_or_const(dst,src1,src2)  cpus_or(dst, src1, src2)
-+#define cpus_equal_const(map1, map2)  cpus_equal(map1, map2)
-+#define cpus_empty_const(map)         cpus_empty(map)
-+#define cpus_copy_const(map1, map2)   do { map1 = (cpumask_t)map2; } while (0)
-+#define cpus_weight_const(map)                cpus_weight(map)
-+#define first_cpu_const(map)          first_cpu(map)
-+#define next_cpu_const(cpu, map)      next_cpu(cpu, map)
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_coerce_const(map)                cpus_coerce(map)
-+#define any_online_cpu_const(map)     any_online_cpu(map)
-+
-+#endif /* __ASM_GENERIC_CPUMASK_CONST_VALUE_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/cpumask_up.h        2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,60 @@
-+#ifndef __ASM_GENERIC_CPUMASK_UP_H
-+#define __ASM_GENERIC_CPUMASK_UP_H
-+
-+#define CPU_ARRAY_SIZE                BITS_TO_LONGS(NR_CPUS)
-+
-+#define cpus_coerce(map)      ((map).mask[0])
-+
-+#define cpu_set(cpu, map)             do { cpus_coerce(map) = 1UL; } while (0)
-+#define cpu_clear(cpu, map)           do { cpus_coerce(map) = 0UL; } while (0)
-+#define cpu_isset(cpu, map)           (cpus_coerce(map) != 0UL)
-+#define cpu_test_and_set(cpu, map)    test_and_set_bit(0, (map).mask)
-+
-+#define cpus_and(dst, src1, src2)                                     \
-+      do {                                                            \
-+              if (cpus_coerce(src1) && cpus_coerce(src2))             \
-+                      cpus_coerce(dst) = 1UL;                         \
-+              else                                                    \
-+                      cpus_coerce(dst) = 0UL;                         \
-+      } while (0)
-+
-+#define cpus_or(dst, src1, src2)                                      \
-+      do {                                                            \
-+              if (cpus_coerce(src1) || cpus_coerce(src2))             \
-+                      cpus_coerce(dst) = 1UL;                         \
-+              else                                                    \
-+                      cpus_coerce(dst) = 0UL;                         \
-+      } while (0)
-+
-+#define cpus_clear(map)                       do { cpus_coerce(map) = 0UL; } while (0)
-+
-+#define cpus_complement(map)                                          \
-+      do {                                                            \
-+              cpus_coerce(map) = !cpus_coerce(map);                   \
-+      } while (0)
-+
-+#define cpus_equal(map1, map2)                (cpus_coerce(map1) == cpus_coerce(map2))
-+#define cpus_empty(map)                       (cpus_coerce(map) == 0UL)
-+#define cpus_weight(map)              (cpus_coerce(map) ? 1UL : 0UL)
-+#define cpus_shift_right(d, s, n)     do { cpus_coerce(d) = 0UL; } while (0)
-+#define cpus_shift_left(d, s, n)      do { cpus_coerce(d) = 0UL; } while (0)
-+#define first_cpu(map)                        (cpus_coerce(map) ? 0 : 1)
-+#define next_cpu(cpu, map)            1
-+
-+/* only ever use this for things that are _never_ used on large boxen */
-+#define cpus_promote(map)                                             \
-+      ({                                                              \
-+              cpumask_t __tmp__;                                      \
-+              cpus_coerce(__tmp__) = map;                             \
-+              __tmp__;                                                \
-+      })
-+#define cpumask_of_cpu(cpu)           cpus_promote(1)
-+#define any_online_cpu(map)           (cpus_coerce(map) ? 0 : 1)
-+
-+/*
-+ * um, these need to be usable as static initializers
-+ */
-+#define CPU_MASK_ALL  { {[0 ... CPU_ARRAY_SIZE-1] =  1UL} }
-+#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] =  0UL} }
-+
-+#endif /* __ASM_GENERIC_CPUMASK_UP_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-generic/local.h     2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,118 @@
-+#ifndef _ASM_GENERIC_LOCAL_H
-+#define _ASM_GENERIC_LOCAL_H
-+
-+#include <linux/config.h>
-+#include <linux/percpu.h>
-+#include <asm/types.h>
-+#include <asm/hardirq.h>
-+
-+/* An unsigned long type for operations which are atomic for a single
-+ * CPU.  Usually used in combination with per-cpu variables. */
-+
-+#if BITS_PER_LONG == 32 && !defined(CONFIG_SPARC32)
-+/* Implement in terms of atomics. */
-+
-+/* Don't use typedef: don't want them to be mixed with atomic_t's. */
-+typedef struct
-+{
-+      atomic_t a;
-+} local_t;
-+
-+#define LOCAL_INIT(i) { ATOMIC_INIT(i) }
-+
-+#define local_read(l) ((unsigned long)atomic_read(&(l)->a))
-+#define local_set(l,i)        atomic_set((&(l)->a),(i))
-+#define local_inc(l)  atomic_inc(&(l)->a)
-+#define local_dec(l)  atomic_dec(&(l)->a)
-+#define local_add(i,l)        atomic_add((i),(&(l)->a))
-+#define local_sub(i,l)        atomic_sub((i),(&(l)->a))
-+
-+/* Non-atomic variants, ie. preemption disabled and won't be touched
-+ * in interrupt, etc.  Some archs can optimize this case well. */
-+#define __local_inc(l)                local_set((l), local_read(l) + 1)
-+#define __local_dec(l)                local_set((l), local_read(l) - 1)
-+#define __local_add(i,l)      local_set((l), local_read(l) + (i))
-+#define __local_sub(i,l)      local_set((l), local_read(l) - (i))
-+
-+#else /* ... can't use atomics. */
-+/* Implement in terms of three variables.
-+   Another option would be to use local_irq_save/restore. */
-+
-+typedef struct
-+{
-+      /* 0 = in hardirq, 1 = in softirq, 2 = usermode. */
-+      unsigned long v[3];
-+} local_t;
-+
-+#define _LOCAL_VAR(l) ((l)->v[!in_interrupt() + !in_irq()])
-+
-+#define LOCAL_INIT(i) { { (i), 0, 0 } }
-+
-+static inline unsigned long local_read(local_t *l)
-+{
-+      return l->v[0] + l->v[1] + l->v[2];
-+}
-+
-+static inline void local_set(local_t *l, unsigned long v)
-+{
-+      l->v[0] = v;
-+      l->v[1] = l->v[2] = 0;
-+}
-+
-+static inline void local_inc(local_t *l)
-+{
-+      preempt_disable();
-+      _LOCAL_VAR(l)++;
-+      preempt_enable();
-+}
-+
-+static inline void local_dec(local_t *l)
-+{
-+      preempt_disable();
-+      _LOCAL_VAR(l)--;
-+      preempt_enable();
-+}
-+
-+static inline void local_add(unsigned long v, local_t *l)
-+{
-+      preempt_disable();
-+      _LOCAL_VAR(l) += v;
-+      preempt_enable();
-+}
-+
-+static inline void local_sub(unsigned long v, local_t *l)
-+{
-+      preempt_disable();
-+      _LOCAL_VAR(l) -= v;
-+      preempt_enable();
-+}
-+
-+/* Non-atomic variants, ie. preemption disabled and won't be touched
-+ * in interrupt, etc.  Some archs can optimize this case well. */
-+#define __local_inc(l)                ((l)->v[0]++)
-+#define __local_dec(l)                ((l)->v[0]--)
-+#define __local_add(i,l)      ((l)->v[0] += (i))
-+#define __local_sub(i,l)      ((l)->v[0] -= (i))
-+
-+#endif /* Non-atomic implementation */
-+
-+/* Use these for per-cpu local_t variables: on some archs they are
-+ * much more efficient than these naive implementations.  Note they take
-+ * a variable (eg. mystruct.foo), not an address.
-+ */
-+#define cpu_local_read(v)     local_read(&__get_cpu_var(v))
-+#define cpu_local_set(v, i)   local_set(&__get_cpu_var(v), (i))
-+#define cpu_local_inc(v)      local_inc(&__get_cpu_var(v))
-+#define cpu_local_dec(v)      local_dec(&__get_cpu_var(v))
-+#define cpu_local_add(i, v)   local_add((i), &__get_cpu_var(v))
-+#define cpu_local_sub(i, v)   local_sub((i), &__get_cpu_var(v))
-+
-+/* Non-atomic increments, ie. preemption disabled and won't be touched
-+ * in interrupt, etc.  Some archs can optimize this case well.
-+ */
-+#define __cpu_local_inc(v)    __local_inc(&__get_cpu_var(v))
-+#define __cpu_local_dec(v)    __local_dec(&__get_cpu_var(v))
-+#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v))
-+#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v))
-+
-+#endif /* _ASM_GENERIC_LOCAL_H */
---- linux-2.6.0-test1/include/asm-generic/percpu.h     2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-generic/percpu.h    2003-07-19 17:03:50.000000000 -0700
-@@ -9,33 +9,34 @@ extern unsigned long __per_cpu_offset[NR
- /* Separate out the type, so (int[3], foo) works. */
- #define DEFINE_PER_CPU(type, name) \
--    __attribute__((__section__(".data.percpu"))) __typeof__(type) name##__per_cpu
-+    __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
- /* var is in discarded region: offset to particular copy we want */
--#define per_cpu(var, cpu) (*RELOC_HIDE(&var##__per_cpu, __per_cpu_offset[cpu]))
-+#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
- #define __get_cpu_var(var) per_cpu(var, smp_processor_id())
--static inline void percpu_modcopy(void *pcpudst, const void *src,
--                                unsigned long size)
--{
--      unsigned int i;
--      for (i = 0; i < NR_CPUS; i++)
--              if (cpu_possible(i))
--                      memcpy(pcpudst + __per_cpu_offset[i], src, size);
--}
-+/* A macro to avoid #include hell... */
-+#define percpu_modcopy(pcpudst, src, size)                    \
-+do {                                                          \
-+      unsigned int __i;                                       \
-+      for (__i = 0; __i < NR_CPUS; __i++)                     \
-+              if (cpu_possible(__i))                          \
-+                      memcpy((pcpudst)+__per_cpu_offset[__i], \
-+                             (src), (size));                  \
-+} while (0)
- #else /* ! SMP */
- #define DEFINE_PER_CPU(type, name) \
--    __typeof__(type) name##__per_cpu
-+    __typeof__(type) per_cpu__##name
--#define per_cpu(var, cpu)                     ((void)cpu, var##__per_cpu)
--#define __get_cpu_var(var)                    var##__per_cpu
-+#define per_cpu(var, cpu)                     ((void)cpu, per_cpu__##var)
-+#define __get_cpu_var(var)                    per_cpu__##var
- #endif        /* SMP */
--#define DECLARE_PER_CPU(type, name) extern __typeof__(type) name##__per_cpu
-+#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
--#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(var##__per_cpu)
--#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(var##__per_cpu)
-+#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
-+#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
- #endif /* _ASM_GENERIC_PERCPU_H_ */
---- linux-2.6.0-test1/include/asm-generic/sections.h   2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-generic/sections.h  2003-07-19 17:03:50.000000000 -0700
-@@ -3,9 +3,10 @@
- /* References to section boundaries */
--extern char _text, _etext;
--extern char _data, _edata;
--extern char __bss_start;
--extern char __init_begin, __init_end;
-+extern char _text[], _stext[], _etext[];
-+extern char _data[], _sdata[], _edata[];
-+extern char __bss_start[];
-+extern char __init_begin[], __init_end[];
-+extern char _sinittext[], _einittext[];
- #endif /* _ASM_GENERIC_SECTIONS_H_ */
---- linux-2.6.0-test1/include/asm-h8300/pgtable.h      2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-h8300/pgtable.h     2003-07-19 17:07:16.000000000 -0700
-@@ -15,6 +15,11 @@ typedef pte_t *pte_addr_t;
- #define pgd_clear(pgdp)
- #define kern_addr_valid(addr) (1)
- #define       pmd_offset(a, b)        ((void *)0)
-+#define pmd_offset_kernel(a,b)                pmd_offset(a,b)
-+#define pmd_offset_map(a,b)           pmd_offset(a,b)
-+#define pmd_offset_map_nested(a,b)    pmd_offset(a,b)
-+#define pmd_unmap(pmd)                        do { } while (0)
-+#define pmd_unmap_nested(pmd)         do { } while (0)
- #define PAGE_NONE             __pgprot(0)    /* these mean nothing to NO_MM */
- #define PAGE_SHARED           __pgprot(0)    /* these mean nothing to NO_MM */
---- linux-2.6.0-test1/include/asm-h8300/posix_types.h  2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-h8300/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned short        __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short        __kernel_mode_t;
- typedef unsigned short        __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-i386/atomic.h        2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-i386/atomic.h       2003-07-19 17:04:07.000000000 -0700
-@@ -193,7 +193,7 @@ __asm__ __volatile__(LOCK "andl %0,%1" \
- #define atomic_set_mask(mask, addr) \
- __asm__ __volatile__(LOCK "orl %0,%1" \
--: : "r" (mask),"m" (*addr) : "memory")
-+: : "r" (mask),"m" (*(addr)) : "memory")
- /* Atomic operations are already serializing on x86 */
- #define smp_mb__before_atomic_dec()   barrier()
---- linux-2.6.0-test1/include/asm-i386/bitops.h        2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-i386/bitops.h       2003-07-19 17:04:07.000000000 -0700
-@@ -270,7 +270,7 @@ static __inline__ int variable_test_bit(
-  * Returns the bit-number of the first zero bit, not the number of the byte
-  * containing a bit.
-  */
--static __inline__ int find_first_zero_bit(unsigned long * addr, unsigned size)
-+static __inline__ int find_first_zero_bit(const unsigned long *addr, unsigned size)
- {
-       int d0, d1, d2;
-       int res;
-@@ -302,7 +302,7 @@ static __inline__ int find_first_zero_bi
-  * Returns the bit-number of the first set bit, not the number of the byte
-  * containing a bit.
-  */
--static __inline__ int find_first_bit(unsigned long * addr, unsigned size)
-+static __inline__ int find_first_bit(const unsigned long *addr, unsigned size)
- {
-       int d0, d1;
-       int res;
-@@ -328,7 +328,7 @@ static __inline__ int find_first_bit(uns
-  * @offset: The bitnumber to start searching at
-  * @size: The maximum size to search
-  */
--static __inline__ int find_next_zero_bit(unsigned long * addr, int size, int offset)
-+static __inline__ int find_next_zero_bit(const unsigned long *addr, int size, int offset)
- {
-       unsigned long * p = ((unsigned long *) addr) + (offset >> 5);
-       int set = 0, bit = offset & 31, res;
-@@ -361,9 +361,9 @@ static __inline__ int find_next_zero_bit
-  * @offset: The bitnumber to start searching at
-  * @size: The maximum size to search
-  */
--static __inline__ int find_next_bit(unsigned long *addr, int size, int offset)
-+static __inline__ int find_next_bit(const unsigned long *addr, int size, int offset)
- {
--      unsigned long * p = addr + (offset >> 5);
-+      const unsigned long *p = addr + (offset >> 5);
-       int set = 0, bit = offset & 31, res;
-       if (bit) {
-@@ -430,7 +430,7 @@ static __inline__ unsigned long __ffs(un
-  * unlikely to be set. It's guaranteed that at least one of the 140
-  * bits is cleared.
-  */
--static inline int sched_find_first_bit(unsigned long *b)
-+static inline int sched_find_first_bit(const unsigned long *b)
- {
-       if (unlikely(b[0]))
-               return __ffs(b[0]);
---- linux-2.6.0-test1/include/asm-i386/bugs.h  2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/bugs.h 2003-07-19 17:04:02.000000000 -0700
-@@ -1,11 +1,11 @@
- /*
-  *  include/asm-i386/bugs.h
-  *
-- *  Copyright (C) 1994  Linus Torvalds
-+ *  Copyright (C) 1994        Linus Torvalds
-  *
-  *  Cyrix stuff, June 1998 by:
-  *    - Rafael R. Reilova (moved everything from head.S),
-- *        <rreilova@ececs.uc.edu>
-+ *      <rreilova@ececs.uc.edu>
-  *    - Channing Corn (tests & fixes),
-  *    - Andrew D. Balsa (code cleanup).
-  *
-@@ -25,7 +25,20 @@
- #include <asm/processor.h>
- #include <asm/i387.h>
- #include <asm/msr.h>
--
-+#ifdef CONFIG_KGDB
-+/*
-+ * Provied the command line "gdb" initial break
-+ */
-+int __init kgdb_initial_break(char * str)
-+{
-+      if (*str == '\0'){
-+              breakpoint();
-+              return 1;
-+      }
-+      return 0;
-+}
-+__setup("gdb",kgdb_initial_break);
-+#endif
- static int __init no_halt(char *s)
- {
-       boot_cpu_data.hlt_works_ok = 0;
-@@ -140,7 +153,7 @@ static void __init check_popad(void)
-         : "ecx", "edi" );
-       /* If this fails, it means that any user program may lock the CPU hard. Too bad. */
-       if (res != 12345678) printk( "Buggy.\n" );
--                      else printk( "OK.\n" );
-+                      else printk( "OK.\n" );
- #endif
- }
---- linux-2.6.0-test1/include/asm-i386/genapic.h       2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-i386/genapic.h      2003-07-19 17:04:07.000000000 -0700
-@@ -1,13 +1,13 @@
- #ifndef _ASM_GENAPIC_H
- #define _ASM_GENAPIC_H 1
--/* 
-+/*
-  * Generic APIC driver interface.
-- *  
-- * An straight forward mapping of the APIC related parts of the 
-+ *
-+ * An straight forward mapping of the APIC related parts of the
-  * x86 subarchitecture interface to a dynamic object.
-- *    
-- * This is used by the "generic" x86 subarchitecture. 
-+ *
-+ * This is used by the "generic" x86 subarchitecture.
-  *
-  * Copyright 2003 Andi Kleen, SuSE Labs.
-  */
-@@ -22,23 +22,23 @@ struct genapic { 
-       int (*probe)(void); 
-       int (*apic_id_registered)(void);
--      unsigned long (*target_cpus)(void); 
-+      cpumask_t (*target_cpus)(void);
-       int int_delivery_mode;
-       int int_dest_mode; 
-       int apic_broadcast_id; 
-       int esr_disable;
--      unsigned long (*check_apicid_used)(unsigned long bitmap, int apicid); 
-+      unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid);
-       unsigned long (*check_apicid_present)(int apicid); 
-       int no_balance_irq;
-       void (*init_apic_ldr)(void);
--      unsigned long (*ioapic_phys_id_map)(unsigned long map); 
-+      physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map);
-       void (*clustered_apic_check)(void);
-       int (*multi_timer_check)(int apic, int irq);
-       int (*apicid_to_node)(int logical_apicid); 
-       int (*cpu_to_logical_apicid)(int cpu);
-       int (*cpu_present_to_apicid)(int mps_cpu);
--      unsigned long (*apicid_to_cpu_present)(int phys_apicid); 
-+      physid_mask_t (*apicid_to_cpu_present)(int phys_apicid);
-       int (*mpc_apic_id)(struct mpc_config_processor *m, 
-                          struct mpc_config_translation *t); 
-       void (*setup_portio_remap)(void); 
-@@ -59,11 +59,11 @@ struct genapic { 
-       int (*acpi_madt_oem_check)(char *oem_id, char *oem_table_id);
-       unsigned (*get_apic_id)(unsigned long x);
--      unsigned long apic_id_mask; 
--      unsigned int (*cpu_mask_to_apicid)(unsigned long cpumask);
-+      unsigned long apic_id_mask;
-+      unsigned int (*cpu_mask_to_apicid)(cpumask_const_t cpumask);
-       
-       /* ipi */
--      void (*send_IPI_mask)(int mask, int vector);
-+      void (*send_IPI_mask)(cpumask_t mask, int vector);
-       void (*send_IPI_allbutself)(int vector);
-       void (*send_IPI_all)(int vector);
- }; 
---- linux-2.6.0-test1/include/asm-i386/highmem.h       2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-i386/highmem.h      2003-07-19 17:07:16.000000000 -0700
-@@ -22,6 +22,7 @@
- #include <linux/config.h>
- #include <linux/interrupt.h>
-+#include <linux/threads.h>
- #include <asm/kmap_types.h>
- #include <asm/tlbflush.h>
-@@ -39,7 +40,11 @@ extern void kmap_init(void);
-  * easily, subsequent pte tables have to be allocated in one physical
-  * chunk of RAM.
-  */
--#define PKMAP_BASE (0xff800000UL)
-+#if NR_CPUS <= 32
-+#define PKMAP_BASE (0xff400000UL)
-+#else
-+#define PKMAP_BASE (0xfe800000UL)
-+#endif
- #ifdef CONFIG_X86_PAE
- #define LAST_PKMAP 512
- #else
---- linux-2.6.0-test1/include/asm-i386/hw_irq.h        2003-06-14 12:18:51.000000000 -0700
-+++ 25/include/asm-i386/hw_irq.h       2003-07-19 17:04:07.000000000 -0700
-@@ -16,6 +16,7 @@
- #include <linux/profile.h>
- #include <asm/atomic.h>
- #include <asm/irq.h>
-+#include <asm/sections.h>
- /*
-  * Various low-level irq details needed by irq.c, process.c,
-@@ -30,41 +31,39 @@ extern int irq_vector[NR_IRQS];
- extern void (*interrupt[NR_IRQS])(void);
- #ifdef CONFIG_SMP
--extern asmlinkage void reschedule_interrupt(void);
--extern asmlinkage void invalidate_interrupt(void);
--extern asmlinkage void call_function_interrupt(void);
-+asmlinkage void reschedule_interrupt(void);
-+asmlinkage void invalidate_interrupt(void);
-+asmlinkage void call_function_interrupt(void);
- #endif
- #ifdef CONFIG_X86_LOCAL_APIC
--extern asmlinkage void apic_timer_interrupt(void);
--extern asmlinkage void error_interrupt(void);
--extern asmlinkage void spurious_interrupt(void);
--extern asmlinkage void thermal_interrupt(struct pt_regs);
-+asmlinkage void apic_timer_interrupt(void);
-+asmlinkage void error_interrupt(void);
-+asmlinkage void spurious_interrupt(void);
-+asmlinkage void thermal_interrupt(struct pt_regs);
- #endif
--extern void mask_irq(unsigned int irq);
--extern void unmask_irq(unsigned int irq);
--extern void disable_8259A_irq(unsigned int irq);
--extern void enable_8259A_irq(unsigned int irq);
--extern int i8259A_irq_pending(unsigned int irq);
--extern void make_8259A_irq(unsigned int irq);
--extern void init_8259A(int aeoi);
--extern void FASTCALL(send_IPI_self(int vector));
--extern void init_VISWS_APIC_irqs(void);
--extern void setup_IO_APIC(void);
--extern void disable_IO_APIC(void);
--extern void print_IO_APIC(void);
--extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
--extern void send_IPI(int dest, int vector);
--extern void setup_ioapic_dest(unsigned long mask);
-+void mask_irq(unsigned int irq);
-+void unmask_irq(unsigned int irq);
-+void disable_8259A_irq(unsigned int irq);
-+void enable_8259A_irq(unsigned int irq);
-+int i8259A_irq_pending(unsigned int irq);
-+void make_8259A_irq(unsigned int irq);
-+void init_8259A(int aeoi);
-+void FASTCALL(send_IPI_self(int vector));
-+void init_VISWS_APIC_irqs(void);
-+void setup_IO_APIC(void);
-+void disable_IO_APIC(void);
-+void print_IO_APIC(void);
-+int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
-+void send_IPI(int dest, int vector);
-+void setup_ioapic_dest(cpumask_t mask);
- extern unsigned long io_apic_irqs;
- extern atomic_t irq_err_count;
- extern atomic_t irq_mis_count;
--extern char _stext, _etext;
--
- #define IO_APIC_IRQ(x) (((x) >= 16) || ((1<<(x)) & io_apic_irqs))
- /*
-@@ -95,7 +94,7 @@ static inline void x86_do_profile(struct
-       if (!((1<<smp_processor_id()) & prof_cpu_mask))
-               return;
--      eip -= (unsigned long) &_stext;
-+      eip -= (unsigned long)_stext;
-       eip >>= prof_shift;
-       /*
-        * Don't ignore out-of-bounds EIP values silently,
-@@ -107,7 +106,7 @@ static inline void x86_do_profile(struct
-       atomic_inc((atomic_t *)&prof_buffer[eip]);
- }
-  
--#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_SMP)
-+#if defined(CONFIG_X86_IO_APIC)
- static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i)
- {
-       if (IO_APIC_IRQ(i))
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/kgdb.h 2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,59 @@
-+#ifndef __KGDB
-+#define __KGDB
-+
-+/*
-+ * This file should not include ANY others.  This makes it usable
-+ * most anywhere without the fear of include order or inclusion.
-+ * Make it so!
-+ *
-+ * This file may be included all the time.  It is only active if 
-+ * CONFIG_KGDB is defined, otherwise it stubs out all the macros
-+ * and entry points.
-+ */
-+#if defined(CONFIG_KGDB) && !defined(__ASSEMBLY__)
-+
-+extern void breakpoint(void);
-+#define INIT_KGDB_INTS kgdb_enable_ints()
-+
-+#ifndef BREAKPOINT
-+#define BREAKPOINT   asm("   int $3")
-+#endif
-+/*
-+ * GDB debug stub (or any debug stub) can point the 'linux_debug_hook'
-+ * pointer to its routine and it will be entered as the first thing
-+ * when a trap occurs.
-+ *
-+ * Return values are, at present, undefined.
-+ *
-+ * The debug hook routine does not necessarily return to its caller.
-+ * It has the register image and thus may choose to resume execution
-+ * anywhere it pleases. 
-+ */
-+struct pt_regs;
-+
-+extern int kgdb_handle_exception(int trapno,
-+                               int signo, int err_code, struct pt_regs *regs);
-+extern int in_kgdb(struct pt_regs *regs);
-+
-+#ifdef CONFIG_KGDB_TS
-+void kgdb_tstamp(int line, char *source, int data0, int data1);
-+/*
-+ * This is the time stamp function.  The macro adds the source info and
-+ * does a cast on the data to allow most any 32-bit value.
-+ */
-+
-+#define kgdb_ts(data0,data1) kgdb_tstamp(__LINE__,__FILE__,(int)data0,(int)data1)
-+#else
-+#define kgdb_ts(data0,data1)
-+#endif
-+#else                         /* CONFIG_KGDB  && ! __ASSEMBLY__ ,stubs follow... */
-+#ifndef BREAKPOINT
-+#define BREAKPOINT
-+#endif
-+#define kgdb_ts(data0,data1)
-+#define in_kgdb
-+#define kgdb_handle_exception
-+#define breakpoint
-+#define INIT_KGDB_INTS
-+#endif
-+#endif                                /* __KGDB */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/kgdb_local.h   2003-07-19 17:04:02.000000000 -0700
-@@ -0,0 +1,102 @@
-+#ifndef __KGDB_LOCAL
-+#define ___KGDB_LOCAL
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <linux/serial.h>
-+#include <linux/serialP.h>
-+#include <linux/spinlock.h>
-+#include <asm/processor.h>
-+#include <asm/msr.h>
-+#include <asm/kgdb.h>
-+
-+#define PORT 0x3f8
-+#ifdef CONFIG_KGDB_PORT
-+#undef PORT
-+#define PORT CONFIG_KGDB_PORT
-+#endif
-+#define IRQ 4
-+#ifdef CONFIG_KGDB_IRQ
-+#undef IRQ
-+#define IRQ CONFIG_KGDB_IRQ
-+#endif
-+#define SB_CLOCK 1843200
-+#define SB_BASE (SB_CLOCK/16)
-+#define SB_BAUD9600 SB_BASE/9600
-+#define SB_BAUD192  SB_BASE/19200
-+#define SB_BAUD384  SB_BASE/38400
-+#define SB_BAUD576  SB_BASE/57600
-+#define SB_BAUD1152 SB_BASE/115200
-+#ifdef CONFIG_KGDB_9600BAUD
-+#define SB_BAUD SB_BAUD9600
-+#endif
-+#ifdef CONFIG_KGDB_19200BAUD
-+#define SB_BAUD SB_BAUD192
-+#endif
-+#ifdef CONFIG_KGDB_38400BAUD
-+#define SB_BAUD SB_BAUD384
-+#endif
-+#ifdef CONFIG_KGDB_57600BAUD
-+#define SB_BAUD SB_BAUD576
-+#endif
-+#ifdef CONFIG_KGDB_115200BAUD
-+#define SB_BAUD SB_BAUD1152
-+#endif
-+#ifndef SB_BAUD
-+#define SB_BAUD SB_BAUD1152   /* Start with this if not given */
-+#endif
-+
-+#ifndef CONFIG_X86_TSC
-+#undef rdtsc
-+#define rdtsc(a,b) if (a++ > 10000){a = 0; b++;}
-+#undef rdtscll
-+#define rdtscll(s) s++
-+#endif
-+
-+#ifdef _raw_read_unlock               /* must use a name that is "define"ed, not an inline */
-+#undef spin_lock
-+#undef spin_trylock
-+#undef spin_unlock
-+#define spin_lock      _raw_spin_lock
-+#define spin_trylock   _raw_spin_trylock
-+#define spin_unlock    _raw_spin_unlock
-+#else
-+#endif
-+#undef spin_unlock_wait
-+#define spin_unlock_wait(x)  do { cpu_relax(); barrier();} \
-+                                     while(spin_is_locked(x))
-+
-+#define SB_IER 1
-+#define SB_MCR UART_MCR_OUT2 | UART_MCR_DTR | UART_MCR_RTS
-+
-+#define FLAGS 0
-+#define SB_STATE { \
-+     magic: SSTATE_MAGIC, \
-+     baud_base: SB_BASE,  \
-+     port:      PORT,     \
-+     irq:       IRQ,      \
-+     flags:     FLAGS,    \
-+     custom_divisor:SB_BAUD}
-+#define SB_INFO  { \
-+      magic: SERIAL_MAGIC, \
-+      port:  PORT,0,FLAGS, \
-+      state: &state,       \
-+      tty:   (struct tty_struct *)&state, \
-+      IER:   SB_IER,       \
-+      MCR:   SB_MCR}
-+extern void putDebugChar(int);
-+/* RTAI support needs us to really stop/start interrupts */
-+
-+#define kgdb_sti() __asm__ __volatile__("sti": : :"memory")
-+#define kgdb_cli() __asm__ __volatile__("cli": : :"memory")
-+#define kgdb_local_save_flags(x) __asm__ __volatile__(\
-+                                   "pushfl ; popl %0":"=g" (x): /* no input */)
-+#define kgdb_local_irq_restore(x) __asm__ __volatile__(\
-+                                   "pushl %0 ; popfl": \
-+                                     /* no output */ :"g" (x):"memory", "cc")
-+#define kgdb_local_irq_save(x) kgdb_local_save_flags(x); kgdb_cli()
-+
-+#ifdef CONFIG_SERIAL
-+extern void shutdown_for_kgdb(struct async_struct *info);
-+#endif
-+#define INIT_KDEBUG putDebugChar("+");
-+#endif                                /* __KGDB_LOCAL */
---- linux-2.6.0-test1/include/asm-i386/kmap_types.h    2003-06-14 12:18:28.000000000 -0700
-+++ 25/include/asm-i386/kmap_types.h   2003-07-19 17:07:16.000000000 -0700
-@@ -17,14 +17,16 @@ D(3)       KM_USER0,
- D(4)  KM_USER1,
- D(5)  KM_BIO_SRC_IRQ,
- D(6)  KM_BIO_DST_IRQ,
--D(7)  KM_PTE0,
--D(8)  KM_PTE1,
--D(9)  KM_PTE2,
--D(10) KM_IRQ0,
--D(11) KM_IRQ1,
--D(12) KM_SOFTIRQ0,
--D(13) KM_SOFTIRQ1,
--D(14) KM_TYPE_NR
-+D(7)  KM_PMD0,
-+D(8)  KM_PMD1,
-+D(9)  KM_PTE0,
-+D(10) KM_PTE1,
-+D(11) KM_PTE2,
-+D(12) KM_IRQ0,
-+D(13) KM_IRQ1,
-+D(14) KM_SOFTIRQ0,
-+D(15) KM_SOFTIRQ1,
-+D(16) KM_TYPE_NR
- };
- #undef D
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/local.h        2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,70 @@
-+#ifndef _ARCH_I386_LOCAL_H
-+#define _ARCH_I386_LOCAL_H
-+
-+#include <linux/percpu.h>
-+
-+typedef struct
-+{
-+      volatile unsigned long counter;
-+} local_t;
-+
-+#define LOCAL_INIT(i) { (i) }
-+
-+#define local_read(v) ((v)->counter)
-+#define local_set(v,i)        (((v)->counter) = (i))
-+
-+static __inline__ void local_inc(local_t *v)
-+{
-+      __asm__ __volatile__(
-+              "incl %0"
-+              :"=m" (v->counter)
-+              :"m" (v->counter));
-+}
-+
-+static __inline__ void local_dec(local_t *v)
-+{
-+      __asm__ __volatile__(
-+              "decl %0"
-+              :"=m" (v->counter)
-+              :"m" (v->counter));
-+}
-+
-+static __inline__ void local_add(unsigned long i, local_t *v)
-+{
-+      __asm__ __volatile__(
-+              "addl %1,%0"
-+              :"=m" (v->counter)
-+              :"ir" (i), "m" (v->counter));
-+}
-+
-+static __inline__ void local_sub(unsigned long i, local_t *v)
-+{
-+      __asm__ __volatile__(
-+              "subl %1,%0"
-+              :"=m" (v->counter)
-+              :"ir" (i), "m" (v->counter));
-+}
-+
-+/* On x86, these are no better than the atomic variants. */
-+#define __local_inc(l)                local_inc(l)
-+#define __local_dec(l)                local_dec(l)
-+#define __local_add(i,l)      local_add((i),(l))
-+#define __local_sub(i,l)      local_sub((i),(l))
-+
-+/* Use these for per-cpu local_t variables: on some archs they are
-+ * much more efficient than these naive implementations.  Note they take
-+ * a variable, not an address.
-+ */
-+#define cpu_local_read(v)     local_read(&__get_cpu_var(v))
-+#define cpu_local_set(v, i)   local_set(&__get_cpu_var(v), (i))
-+#define cpu_local_inc(v)      local_inc(&__get_cpu_var(v))
-+#define cpu_local_dec(v)      local_dec(&__get_cpu_var(v))
-+#define cpu_local_add(i, v)   local_add((i), &__get_cpu_var(v))
-+#define cpu_local_sub(i, v)   local_sub((i), &__get_cpu_var(v))
-+
-+#define __cpu_local_inc(v)    cpu_local_inc(v)
-+#define __cpu_local_dec(v)    cpu_local_dec(v)
-+#define __cpu_local_add(i, v) cpu_local_add((i), (v))
-+#define __cpu_local_sub(i, v) cpu_local_sub((i), (v))
-+
-+#endif /* _ARCH_I386_LOCAL_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-i386/lockmeter.h    2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,127 @@
-+/*
-+ *  Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ *  Written by John Hawkes (hawkes@sgi.com)
-+ *  Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ *
-+ *  Modified by Ray Bryant (raybry@us.ibm.com)
-+ *  Changes Copyright (C) 2000 IBM, Inc.
-+ *  Added save of index in spinlock_t to improve efficiency
-+ *  of "hold" time reporting for spinlocks.
-+ *  Added support for hold time statistics for read and write
-+ *  locks.
-+ *  Moved machine dependent code here from include/lockmeter.h.
-+ *
-+ */
-+
-+#ifndef _I386_LOCKMETER_H
-+#define _I386_LOCKMETER_H
-+
-+#include <asm/spinlock.h>
-+#include <asm/rwlock.h>
-+
-+#include <linux/version.h>
-+
-+#ifdef __KERNEL__
-+extern unsigned long cpu_khz;
-+#define CPU_CYCLE_FREQUENCY   (cpu_khz * 1000)
-+#else
-+#define CPU_CYCLE_FREQUENCY   450000000
-+#endif
-+
-+#define THIS_CPU_NUMBER               smp_processor_id()
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-+#define local_irq_save(x) \
-+    __asm__ __volatile__("pushfl ; popl %0 ; cli":"=g" (x): /* no input */ :"memory")
-+
-+#define local_irq_restore(x) \
-+    __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")
-+#endif        /* Linux version 2.2.x */
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a spin lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.  Not normally a problem!!
-+ * we also assume that the hash table has less than 65535 entries.
-+ */
-+/*
-+ * instrumented spinlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a spinlock_t
-+ */
-+typedef struct inst_spinlock_s {
-+      /* remember, Intel is little endian */
-+      unsigned short lock;
-+      unsigned short index;
-+} inst_spinlock_t;
-+#define PUT_INDEX(lock_ptr,indexv) ((inst_spinlock_t *)(lock_ptr))->index = indexv
-+#define GET_INDEX(lock_ptr)        ((inst_spinlock_t *)(lock_ptr))->index
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+      volatile int lock;
-+      unsigned short index;
-+      unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr)        ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv)    ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr)         ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr)   rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+      int tmp = (int) rwlock_ptr->lock;
-+      /* read and write lock attempts may cause the lock value to temporarily */
-+      /* be negative.  Until it is >= 0 we know nothing (i. e. can't tell if  */
-+      /* is -1 because it was write locked and somebody tried to read lock it */
-+      /* or if it is -1 because it was read locked and somebody tried to write*/
-+      /* lock it. ........................................................... */
-+      do {
-+              tmp = (int) rwlock_ptr->lock;
-+      } while (tmp < 0);
-+      if (tmp == 0) return(0);
-+      else return(RW_LOCK_BIAS-tmp);
-+}
-+
-+/*
-+ * return true if rwlock is write locked
-+ * (note that other lock attempts can cause the lock value to be negative)
-+ */
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock <= 0)
-+#define IABS(x) ((x) > 0 ? (x) : -(x))
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr)  ((IABS((rwlock_ptr)->lock) % RW_LOCK_BIAS) != 0)
-+
-+/* this is a lot of typing just to get gcc to emit "rdtsc" */
-+static inline long long get_cycles64 (void)
-+{
-+#ifndef CONFIG_X86_TSC
-+      #error this code requires CONFIG_X86_TSC
-+#else
-+      union longlong_u {
-+              long long intlong;
-+              struct intint_s {
-+                      uint32_t eax;
-+                      uint32_t edx;
-+              } intint;
-+      } longlong;
-+
-+      rdtsc(longlong.intint.eax,longlong.intint.edx);
-+      return longlong.intlong;
-+#endif
-+}
-+
-+#endif /* _I386_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-i386/mach-bigsmp/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-bigsmp/mach_apic.h        2003-07-19 17:04:07.000000000 -0700
-@@ -20,7 +20,7 @@ static inline int apic_id_registered(voi
- }
- #define APIC_DFR_VALUE        (APIC_DFR_CLUSTER)
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- { 
-       return cpu_online_map;
- }
-@@ -29,14 +29,15 @@ static inline unsigned long target_cpus(
- #define INT_DELIVERY_MODE dest_LowestPrio
- #define INT_DEST_MODE 1     /* logical delivery broadcast to all procs */
--#define APIC_BROADCAST_ID     (0x0f)
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid) 
--{ 
-+#define APIC_BROADCAST_ID     (0xff)
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
-+{
-       return 0;
--} 
-+}
-+
- static inline unsigned long check_apicid_present(int bit) 
- {
--      return (phys_cpu_present_map & (1 << bit));
-+      return physid_isset(bit, phys_cpu_present_map);
- }
- #define apicid_cluster(apicid) (apicid & 0xF0)
-@@ -88,9 +89,9 @@ static inline int cpu_present_to_apicid(
-       return (int) bios_cpu_apicid[mps_cpu];
- }
--static inline unsigned long apicid_to_cpu_present(int phys_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int phys_apicid)
- {
--      return (1ul << phys_apicid);
-+      return physid_mask_of_physid(phys_apicid);
- }
- extern volatile u8 cpu_2_logical_apicid[];
-@@ -108,13 +109,13 @@ static inline int mpc_apic_id(struct mpc
-               (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8,
-               (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4,
-               m->mpc_apicver);
--      return (m->mpc_apicid);
-+      return m->mpc_apicid;
- }
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
-       /* For clustered we don't have a good way to do this yet - hack */
--      return (0x0F);
-+      return physids_promote(0xFUL);
- }
- #define WAKE_SECONDARY_VIA_INIT
-@@ -132,25 +133,25 @@ static inline int check_phys_apicid_pres
-       return (1);
- }
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
-       int num_bits_set;
-       int cpus_found = 0;
-       int cpu;
-       int apicid;     
--      num_bits_set = hweight32(cpumask); 
-+      num_bits_set = cpus_weight_const(cpumask);
-       /* Return id to all */
--      if (num_bits_set == 32)
-+      if (num_bits_set == NR_CPUS)
-               return (int) 0xFF;
-       /* 
-        * The cpus in the mask must all be on the apic cluster.  If are not 
-        * on the same apicid cluster return default value of TARGET_CPUS. 
-        */
--      cpu = ffs(cpumask)-1;
-+      cpu = first_cpu_const(cpumask);
-       apicid = cpu_to_logical_apicid(cpu);
-       while (cpus_found < num_bits_set) {
--              if (cpumask & (1 << cpu)) {
-+              if (cpu_isset_const(cpu, cpumask)) {
-                       int new_apicid = cpu_to_logical_apicid(cpu);
-                       if (apicid_cluster(apicid) != 
-                                       apicid_cluster(new_apicid)){
---- linux-2.6.0-test1/include/asm-i386/mach-bigsmp/mach_ipi.h  2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-i386/mach-bigsmp/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
--inline void send_IPI_mask_sequence(int mask, int vector);
-+inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
-       send_IPI_mask_sequence(mask, vector);
- }
- static inline void send_IPI_allbutself(int vector)
- {
--      unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
-+      cpumask_t mask = cpu_online_map;
-+      cpu_clear(smp_processor_id(), mask);
--      if (mask)
-+      if (!cpus_empty(mask))
-               send_IPI_mask(mask, vector);
- }
---- linux-2.6.0-test1/include/asm-i386/mach-default/mach_apic.h        2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-default/mach_apic.h       2003-07-19 17:04:07.000000000 -0700
-@@ -5,12 +5,12 @@
- #define APIC_DFR_VALUE        (APIC_DFR_FLAT)
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- { 
- #ifdef CONFIG_SMP
-       return cpu_online_map;
- #else
--      return 1; 
-+      return cpumask_of_cpu(0);
- #endif
- } 
- #define TARGET_CPUS (target_cpus())
-@@ -21,16 +21,20 @@ static inline unsigned long target_cpus(
- #define INT_DELIVERY_MODE dest_LowestPrio
- #define INT_DEST_MODE 1     /* logical delivery broadcast to all procs */
-+/*
-+ * this isn't really broadcast, just a (potentially inaccurate) upper
-+ * bound for valid physical APIC id's
-+ */
- #define APIC_BROADCAST_ID      0x0F
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid) 
--{ 
--      return (bitmap & (1UL << apicid)); 
--} 
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
-+{
-+      return physid_isset(apicid, bitmap);
-+}
--static inline unsigned long check_apicid_present(int bit) 
-+static inline unsigned long check_apicid_present(int bit)
- {
--      return (phys_cpu_present_map & (1UL << bit));
-+      return physid_isset(bit, phys_cpu_present_map);
- }
- /*
-@@ -50,7 +54,7 @@ static inline void init_apic_ldr(void)
-       apic_write_around(APIC_LDR, val);
- }
--static inline unsigned long ioapic_phys_id_map(unsigned long phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
-       return phys_map;
- }
-@@ -82,9 +86,9 @@ static inline int cpu_present_to_apicid(
-       return  mps_cpu;
- }
--static inline unsigned long apicid_to_cpu_present(int phys_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int phys_apicid)
- {
--      return (1ul << phys_apicid);
-+      return physid_mask_of_physid(phys_apicid);
- }
- static inline int mpc_apic_id(struct mpc_config_processor *m, 
-@@ -104,18 +108,17 @@ static inline void setup_portio_remap(vo
- static inline int check_phys_apicid_present(int boot_cpu_physical_apicid)
- {
--      return test_bit(boot_cpu_physical_apicid, &phys_cpu_present_map);
-+      return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map);
- }
- static inline int apic_id_registered(void)
- {
--      return (test_bit(GET_APIC_ID(apic_read(APIC_ID)), 
--                                              &phys_cpu_present_map));
-+      return physid_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map);
- }
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
--      return cpumask;
-+      return cpus_coerce_const(cpumask);
- }
- static inline void enable_apic_mode(void)
---- linux-2.6.0-test1/include/asm-i386/mach-default/mach_ipi.h 2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-i386/mach-default/mach_ipi.h        2003-07-19 17:04:07.000000000 -0700
-@@ -1,10 +1,10 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
--inline void send_IPI_mask_bitmask(int mask, int vector);
-+inline void send_IPI_mask_bitmask(cpumask_t mask, int vector);
- inline void __send_IPI_shortcut(unsigned int shortcut, int vector);
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
-       send_IPI_mask_bitmask(mask, vector);
- }
---- linux-2.6.0-test1/include/asm-i386/mach-es7000/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-es7000/mach_apic.h        2003-07-19 17:04:07.000000000 -0700
-@@ -11,12 +11,12 @@ static inline int apic_id_registered(voi
-               return (1);
- }
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- { 
- #if defined CONFIG_ES7000_CLUSTERED_APIC
--      return (0xff);
-+      return CPU_MASK_ALL;
- #else
--      return (bios_cpu_apicid[smp_processor_id()]);
-+      return cpumask_of_cpu(bios_cpu_apicid[smp_processor_id()]);
- #endif
- }
- #define TARGET_CPUS   (target_cpus())
-@@ -40,13 +40,13 @@ static inline unsigned long target_cpus(
- #define APIC_BROADCAST_ID     (0xff)
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid) 
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
- { 
-       return 0;
- } 
- static inline unsigned long check_apicid_present(int bit) 
- {
--      return (phys_cpu_present_map & (1 << bit));
-+      return physid_isset(bit, phys_cpu_present_map);
- }
- #define apicid_cluster(apicid) (apicid & 0xF0)
-@@ -88,7 +88,7 @@ static inline void clustered_apic_check(
-       int apic = bios_cpu_apicid[smp_processor_id()];
-       printk("Enabling APIC mode:  %s.  Using %d I/O APICs, target cpus %lx\n",
-               (apic_version[apic] == 0x14) ? 
--              "Physical Cluster" : "Logical Cluster", nr_ioapics, TARGET_CPUS);
-+              "Physical Cluster" : "Logical Cluster", nr_ioapics, cpus_coerce(TARGET_CPUS));
- }
- static inline int multi_timer_check(int apic, int irq)
-@@ -110,10 +110,13 @@ static inline int cpu_present_to_apicid(
-               return (int) bios_cpu_apicid[mps_cpu];
- }
--static inline unsigned long apicid_to_cpu_present(int phys_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int phys_apicid)
- {
--      static int cpu = 0;
--      return (1ul << cpu++);
-+      static int id = 0;
-+      physid_mask_t mask;
-+      mask = physid_mask_of_physid(id);
-+      ++id;
-+      return mask;
- }
- extern volatile u8 cpu_2_logical_apicid[];
-@@ -123,7 +126,7 @@ static inline int cpu_to_logical_apicid(
-        return (int)cpu_2_logical_apicid[cpu];
- }
--static inline int mpc_apic_id(struct mpc_config_processor *m, int quad)
-+static inline int mpc_apic_id(struct mpc_config_processor *m, struct mpc_config_translation *unused)
- {
-       printk("Processor #%d %ld:%ld APIC version %d\n",
-               m->mpc_apicid,
-@@ -133,10 +136,10 @@ static inline int mpc_apic_id(struct mpc
-       return (m->mpc_apicid);
- }
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
-       /* For clustered we don't have a good way to do this yet - hack */
--      return (0xff);
-+      return physids_promote(0xff);
- }
-@@ -151,32 +154,30 @@ static inline int check_phys_apicid_pres
-       return (1);
- }
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
-       int num_bits_set;
-       int cpus_found = 0;
-       int cpu;
-       int apicid;     
--      if (cpumask == TARGET_CPUS)
--              return cpumask;
--      num_bits_set = hweight32(cpumask); 
-+      num_bits_set = cpus_weight_const(cpumask);
-       /* Return id to all */
--      if (num_bits_set == 32)
--              return TARGET_CPUS;
-+      if (num_bits_set == NR_CPUS)
-+              return 0xFF;
-       /* 
-        * The cpus in the mask must all be on the apic cluster.  If are not 
-        * on the same apicid cluster return default value of TARGET_CPUS. 
-        */
--      cpu = ffs(cpumask)-1;
-+      cpu = first_cpu_const(cpumask);
-       apicid = cpu_to_logical_apicid(cpu);
-       while (cpus_found < num_bits_set) {
--              if (cpumask & (1 << cpu)) {
-+              if (cpu_isset_const(cpu, cpumask)) {
-                       int new_apicid = cpu_to_logical_apicid(cpu);
-                       if (apicid_cluster(apicid) != 
-                                       apicid_cluster(new_apicid)){
-                               printk ("%s: Not a valid mask!\n",__FUNCTION__);
--                              return TARGET_CPUS;
-+                              return 0xFF;
-                       }
-                       apicid = new_apicid;
-                       cpus_found++;
---- linux-2.6.0-test1/include/asm-i386/mach-es7000/mach_ipi.h  2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-es7000/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
--static inline void send_IPI_mask_sequence(int mask, int vector);
-+static inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
-       send_IPI_mask_sequence(mask, vector);
- }
- static inline void send_IPI_allbutself(int vector)
- {
--      unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
--
--      if (mask)
-+      cpumask_t mask = cpumask_of_cpu(smp_processor_id());
-+      cpus_complement(mask);
-+      cpus_and(mask, mask, cpu_online_map);
-+      if (!cpus_empty(mask))
-               send_IPI_mask(mask, vector);
- }
---- linux-2.6.0-test1/include/asm-i386/mach-numaq/mach_apic.h  2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-numaq/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -6,7 +6,13 @@
- #define APIC_DFR_VALUE        (APIC_DFR_CLUSTER)
--#define TARGET_CPUS (~0UL)
-+static inline cpumask_t target_cpus(void)
-+{
-+      cpumask_t tmp = CPU_MASK_ALL;
-+      return tmp;
-+}
-+
-+#define TARGET_CPUS (target_cpus())
- #define NO_BALANCE_IRQ (1)
- #define esr_disable (1)
-@@ -15,13 +21,13 @@
- #define INT_DEST_MODE 0     /* physical delivery on LOCAL quad */
-  
- #define APIC_BROADCAST_ID      0x0F
--#define check_apicid_used(bitmap, apicid) ((bitmap) & (1 << (apicid)))
--#define check_apicid_present(bit) (phys_cpu_present_map & (1 << bit))
-+#define check_apicid_used(bitmap, apicid) physid_isset(apicid, bitmap)
-+#define check_apicid_present(bit) physid_isset(bit, phys_cpu_present_map)
- #define apicid_cluster(apicid) (apicid & 0xF0)
- static inline int apic_id_registered(void)
- {
--      return (1);
-+      return 1;
- }
- static inline void init_apic_ldr(void)
-@@ -41,13 +47,13 @@ static inline void clustered_apic_check(
-  */
- static inline int multi_timer_check(int apic, int irq)
- {
--      return (apic != 0 && irq == 0);
-+      return apic != 0 && irq == 0;
- }
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
- {
-       /* We don't have a good way to do this yet - hack */
--      return 0xf;
-+      return physids_promote(0xFUL);
- }
- /* Mapping from cpu number to logical apicid */
-@@ -59,22 +65,25 @@ static inline int cpu_to_logical_apicid(
- static inline int cpu_present_to_apicid(int mps_cpu)
- {
--      return ( ((mps_cpu/4)*16) + (1<<(mps_cpu%4)) );
-+      return ((mps_cpu >> 2) << 4) | (1 << (mps_cpu & 0x3));
- }
- static inline int generate_logical_apicid(int quad, int phys_apicid)
- {
--      return ( (quad << 4) + (phys_apicid ? phys_apicid << 1 : 1) );
-+      return (quad << 4) + (phys_apicid ? phys_apicid << 1 : 1);
- }
- static inline int apicid_to_node(int logical_apicid) 
- {
--      return (logical_apicid >> 4);
-+      return logical_apicid >> 4;
- }
--static inline unsigned long apicid_to_cpu_present(int logical_apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int logical_apicid)
- {
--      return ( (logical_apicid&0xf) << (4*apicid_to_node(logical_apicid)) );
-+      int node = apicid_to_node(logical_apicid);
-+      int cpu = __ffs(logical_apicid & 0xf);
-+
-+      return physid_mask_of_physid(cpu + 4*node);
- }
- static inline int mpc_apic_id(struct mpc_config_processor *m, 
-@@ -115,7 +124,7 @@ static inline void enable_apic_mode(void
-  * We use physical apicids here, not logical, so just return the default
-  * physical broadcast to stop people from breaking us
-  */
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
-       return (int) 0xF;
- }
---- linux-2.6.0-test1/include/asm-i386/mach-numaq/mach_ipi.h   2003-06-14 12:18:29.000000000 -0700
-+++ 25/include/asm-i386/mach-numaq/mach_ipi.h  2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
--static inline void send_IPI_mask_sequence(int mask, int vector);
-+static inline void send_IPI_mask_sequence(cpumask_t, int vector);
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
-       send_IPI_mask_sequence(mask, vector);
- }
- static inline void send_IPI_allbutself(int vector)
- {
--      unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
-+      cpumask_t mask = cpu_online_map;
-+      cpu_clear(smp_processor_id(), mask);
--      if (mask)
-+      if (!cpus_empty(mask))
-               send_IPI_mask(mask, vector);
- }
---- linux-2.6.0-test1/include/asm-i386/mach-summit/mach_apic.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-summit/mach_apic.h        2003-07-19 17:04:07.000000000 -0700
-@@ -18,17 +18,18 @@ static inline unsigned long xapic_phys_t
- #define APIC_DFR_VALUE        (APIC_DFR_CLUSTER)
--static inline unsigned long target_cpus(void)
-+static inline cpumask_t target_cpus(void)
- {
--      return (~0UL);
-+      cpumask_t tmp = CPU_MASK_ALL;
-+      return tmp;
- } 
- #define TARGET_CPUS   (target_cpus())
- #define INT_DELIVERY_MODE (dest_Fixed)
- #define INT_DEST_MODE 1     /* logical delivery broadcast to all procs */
--#define APIC_BROADCAST_ID     (0x0F)
--static inline unsigned long check_apicid_used(unsigned long bitmap, int apicid) 
-+#define APIC_BROADCAST_ID     (0xFF)
-+static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
- {
-       return 0;
- } 
-@@ -72,7 +73,7 @@ static inline void clustered_apic_check(
- static inline int apicid_to_node(int logical_apicid)
- {
--      return (logical_apicid >> 5);          /* 2 clusterids per CEC */
-+      return logical_apicid >> 5;          /* 2 clusterids per CEC */
- }
- /* Mapping from cpu number to logical apicid */
-@@ -87,15 +88,15 @@ static inline int cpu_present_to_apicid(
-       return (int) bios_cpu_apicid[mps_cpu];
- }
--static inline ulong ioapic_phys_id_map(ulong phys_map)
-+static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_id_map)
- {
-       /* For clustered we don't have a good way to do this yet - hack */
--      return 0x0F;
-+      return physids_promote(0x0F);
- }
--static inline unsigned long apicid_to_cpu_present(int apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int apicid)
- {
--      return 1;
-+      return physid_mask_of_physid(0);
- }
- static inline int mpc_apic_id(struct mpc_config_processor *m, 
-@@ -122,25 +123,25 @@ static inline void enable_apic_mode(void
- {
- }
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
-       int num_bits_set;
-       int cpus_found = 0;
-       int cpu;
-       int apicid;     
--      num_bits_set = hweight32(cpumask); 
-+      num_bits_set = cpus_weight_const(cpumask);
-       /* Return id to all */
--      if (num_bits_set == 32)
-+      if (num_bits_set == NR_CPUS)
-               return (int) 0xFF;
-       /* 
-        * The cpus in the mask must all be on the apic cluster.  If are not 
-        * on the same apicid cluster return default value of TARGET_CPUS. 
-        */
--      cpu = ffs(cpumask)-1;
-+      cpu = first_cpu_const(cpumask);
-       apicid = cpu_to_logical_apicid(cpu);
-       while (cpus_found < num_bits_set) {
--              if (cpumask & (1 << cpu)) {
-+              if (cpu_isset_const(cpu, cpumask)) {
-                       int new_apicid = cpu_to_logical_apicid(cpu);
-                       if (apicid_cluster(apicid) != 
-                                       apicid_cluster(new_apicid)){
---- linux-2.6.0-test1/include/asm-i386/mach-summit/mach_ipi.h  2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-i386/mach-summit/mach_ipi.h 2003-07-19 17:04:07.000000000 -0700
-@@ -1,18 +1,19 @@
- #ifndef __ASM_MACH_IPI_H
- #define __ASM_MACH_IPI_H
--inline void send_IPI_mask_sequence(int mask, int vector);
-+inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
--static inline void send_IPI_mask(int mask, int vector)
-+static inline void send_IPI_mask(cpumask_t mask, int vector)
- {
-       send_IPI_mask_sequence(mask, vector);
- }
- static inline void send_IPI_allbutself(int vector)
- {
--      unsigned long mask = cpu_online_map & ~(1 << smp_processor_id());
-+      cpumask_t mask = cpu_online_map;
-+      cpu_clear(smp_processor_id(), mask);
--      if (mask)
-+      if (!cpus_empty(mask))
-               send_IPI_mask(mask, vector);
- }
---- linux-2.6.0-test1/include/asm-i386/mach-visws/mach_apic.h  2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mach-visws/mach_apic.h 2003-07-19 17:04:07.000000000 -0700
-@@ -12,17 +12,16 @@
- #ifdef CONFIG_SMP
-  #define TARGET_CPUS cpu_online_map
- #else
-- #define TARGET_CPUS 0x01
-+ #define TARGET_CPUS cpumask_of_cpu(0)
- #endif
- #define APIC_BROADCAST_ID      0x0F
--#define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid))
--#define check_apicid_present(bit) (phys_cpu_present_map & (1 << bit))
-+#define check_apicid_used(bitmap, apicid)     physid_isset(apicid, bitmap)
-+#define check_apicid_present(bit)             physid_isset(bit, phys_cpu_present_map)
- static inline int apic_id_registered(void)
- {
--      return (test_bit(GET_APIC_ID(apic_read(APIC_ID)), 
--                                              &phys_cpu_present_map));
-+      return physid_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map);
- }
- /*
-@@ -61,9 +60,9 @@ static inline int cpu_present_to_apicid(
-       return mps_cpu;
- }
--static inline unsigned long apicid_to_cpu_present(int apicid)
-+static inline physid_mask_t apicid_to_cpu_present(int apicid)
- {
--      return (1ul << apicid);
-+      return physid_mask_of_physid(apicid);
- }
- #define WAKE_SECONDARY_VIA_INIT
-@@ -78,11 +77,11 @@ static inline void enable_apic_mode(void
- static inline int check_phys_apicid_present(int boot_cpu_physical_apicid)
- {
--      return test_bit(boot_cpu_physical_apicid, &phys_cpu_present_map);
-+      return physid_isset(boot_cpu_physical_apicid, phys_cpu_present_map);
- }
--static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask)
-+static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
- {
--      return cpumask;
-+      return cpus_coerce_const(cpumask);
- }
- #endif /* __ASM_MACH_APIC_H */
---- linux-2.6.0-test1/include/asm-i386/mmu_context.h   2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-i386/mmu_context.h  2003-07-19 17:04:07.000000000 -0700
-@@ -31,12 +31,12 @@ static inline void switch_mm(struct mm_s
-       if (likely(prev != next)) {
-               /* stop flush ipis for the previous mm */
--              clear_bit(cpu, &prev->cpu_vm_mask);
-+              cpu_clear(cpu, prev->cpu_vm_mask);
- #ifdef CONFIG_SMP
-               cpu_tlbstate[cpu].state = TLBSTATE_OK;
-               cpu_tlbstate[cpu].active_mm = next;
- #endif
--              set_bit(cpu, &next->cpu_vm_mask);
-+              cpu_set(cpu, next->cpu_vm_mask);
-               /* Re-load page tables */
-               load_cr3(next->pgd);
-@@ -52,7 +52,7 @@ static inline void switch_mm(struct mm_s
-               cpu_tlbstate[cpu].state = TLBSTATE_OK;
-               BUG_ON(cpu_tlbstate[cpu].active_mm != next);
--              if (!test_and_set_bit(cpu, &next->cpu_vm_mask)) {
-+              if (!cpu_test_and_set(cpu, next->cpu_vm_mask)) {
-                       /* We were in lazy tlb mode and leave_mm disabled 
-                        * tlb flush IPI delivery. We must reload %cr3.
-                        */
---- linux-2.6.0-test1/include/asm-i386/mpspec.h        2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-i386/mpspec.h       2003-07-19 17:04:07.000000000 -0700
-@@ -1,6 +1,7 @@
- #ifndef __ASM_MPSPEC_H
- #define __ASM_MPSPEC_H
-+#include <linux/cpumask.h>
- #include <asm/mpspec_def.h>
- #include <mach_mpspec.h>
-@@ -11,7 +12,6 @@ extern int quad_local_to_mp_bus_id [NR_C
- extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
- extern unsigned int boot_cpu_physical_apicid;
--extern unsigned long phys_cpu_present_map;
- extern int smp_found_config;
- extern void find_smp_config (void);
- extern void get_smp_config (void);
-@@ -41,5 +41,49 @@ extern void mp_config_ioapic_for_sci(int
- extern void mp_parse_prt (void);
- #endif /*CONFIG_ACPI_BOOT*/
-+#define PHYSID_ARRAY_SIZE     BITS_TO_LONGS(MAX_APICS)
-+
-+struct physid_mask
-+{
-+      unsigned long mask[PHYSID_ARRAY_SIZE];
-+};
-+
-+typedef struct physid_mask physid_mask_t;
-+
-+#define physid_set(physid, map)                       set_bit(physid, (map).mask)
-+#define physid_clear(physid, map)             clear_bit(physid, (map).mask)
-+#define physid_isset(physid, map)             test_bit(physid, (map).mask)
-+#define physid_test_and_set(physid, map)      test_and_set_bit(physid, (map).mask)
-+
-+#define physids_and(dst, src1, src2)          bitmap_and((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
-+#define physids_or(dst, src1, src2)           bitmap_or((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
-+#define physids_clear(map)                    bitmap_clear((map).mask, MAX_APICS)
-+#define physids_complement(map)                       bitmap_complement((map).mask, MAX_APICS)
-+#define physids_empty(map)                    bitmap_empty((map).mask, MAX_APICS)
-+#define physids_equal(map1, map2)             bitmap_equal((map1).mask, (map2).mask, MAX_APICS)
-+#define physids_weight(map)                   bitmap_weight((map).mask, MAX_APICS)
-+#define physids_shift_right(d, s, n)          bitmap_shift_right((d).mask, (s).mask, n, MAX_APICS)
-+#define physids_shift_left(d, s, n)           bitmap_shift_left((d).mask, (s).mask, n, MAX_APICS)
-+#define physids_coerce(map)                   ((map).mask[0])
-+
-+#define physids_promote(physids)                                              \
-+      ({                                                                      \
-+              physid_mask_t __physid_mask = PHYSID_MASK_NONE;                 \
-+              __physid_mask.mask[0] = physids;                                \
-+              __physid_mask;                                                  \
-+      })
-+
-+#define physid_mask_of_physid(physid)                                         \
-+      ({                                                                      \
-+              physid_mask_t __physid_mask = PHYSID_MASK_NONE;                 \
-+              physid_set(physid, __physid_mask);                              \
-+              __physid_mask;                                                  \
-+      })
-+
-+#define PHYSID_MASK_ALL               { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} }
-+#define PHYSID_MASK_NONE      { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} }
-+
-+extern physid_mask_t phys_cpu_present_map;
-+
- #endif
---- linux-2.6.0-test1/include/asm-i386/numaq.h 2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-i386/numaq.h        2003-07-19 17:04:07.000000000 -0700
-@@ -28,7 +28,7 @@
- #ifdef CONFIG_X86_NUMAQ
--#define MAX_NUMNODES          8
-+#define MAX_NUMNODES          16
- extern void get_memcfg_numaq(void);
- #define get_memcfg_numa() get_memcfg_numaq()
-@@ -159,7 +159,7 @@ struct sys_cfg_data {
- static inline unsigned long *get_zholes_size(int nid)
- {
--      return 0;
-+      return NULL;
- }
- #endif /* CONFIG_X86_NUMAQ */
- #endif /* NUMAQ_H */
---- linux-2.6.0-test1/include/asm-i386/pgalloc.h       2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-i386/pgalloc.h      2003-07-19 17:07:16.000000000 -0700
-@@ -45,7 +45,8 @@ static inline void pte_free(struct page 
-  * (In the PAE case we free the pmds as part of the pgd.)
-  */
--#define pmd_alloc_one(mm, addr)               ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr)               ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr)        ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x)                   do { } while (0)
- #define __pmd_free_tlb(tlb,x)         do { } while (0)
- #define pgd_populate(mm, pmd, pte)    BUG()
---- linux-2.6.0-test1/include/asm-i386/pgtable-2level.h        2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-i386/pgtable-2level.h       2003-07-19 17:07:16.000000000 -0700
-@@ -48,13 +48,15 @@ static inline int pgd_present(pgd_t pgd)
- #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
- #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval)
--#define pgd_page(pgd) \
--((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd)         pfn_to_page(pgd_val(pgd) >> PAGE_SHIFT)
-+
-+#define pmd_offset_map(pgd, addr)             ({ (pmd_t *)(pgd); })
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset_map(pgd, addr)
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset_map(pgd, addr)
-+
-+#define pmd_unmap(pmd)                                do { } while (0)
-+#define pmd_unmap_nested(pmd)                 do { } while (0)
--static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
--{
--      return (pmd_t *) dir;
--}
- #define ptep_get_and_clear(xp)        __pte(xchg(&(xp)->pte_low, 0))
- #define pte_same(a, b)                ((a).pte_low == (b).pte_low)
- #define pte_page(x)           pfn_to_page(pte_pfn(x))
---- linux-2.6.0-test1/include/asm-i386/pgtable-3level.h        2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/pgtable-3level.h       2003-07-19 17:07:16.000000000 -0700
-@@ -64,12 +64,32 @@ static inline void set_pte(pte_t *ptep, 
-  */
- static inline void pgd_clear (pgd_t * pgd) { }
--#define pgd_page(pgd) \
--((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+static inline unsigned long pgd_pfn(pgd_t pgd)
-+{
-+      return pgd_val(pgd) >> PAGE_SHIFT;
-+}
-+
-+#define pgd_page(pgd)         pfn_to_page(pgd_pfn(pgd))
-+
-+#define pmd_offset_kernel(pgd, addr)                                  \
-+      ((pmd_t *)__va(pgd_val(*(pgd)) & PAGE_MASK) + pmd_index(addr))
- /* Find an entry in the second-level page table.. */
--#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \
--                      pmd_index(address))
-+#ifdef CONFIG_HIGHPMD
-+#define __pmd_offset(pgd, addr, type)                                 \
-+      ((pmd_t *)kmap_atomic(pgd_page(*(pgd)), type) + pmd_index(addr))
-+#define __pmd_unmap(pmd, type)                kunmap_atomic(pmd, type)
-+#else
-+#define __pmd_offset(pgd, addr, type)                                 \
-+      ((pmd_t *)__va(pgd_val(*(pgd)) & PAGE_MASK) + pmd_index(addr))
-+#define __pmd_unmap(pmd, type)                do { } while (0)
-+#endif
-+
-+#define pmd_offset_map(pgd, addr)             __pmd_offset(pgd, addr, KM_PMD0)
-+#define pmd_offset_map_nested(pgd, addr)      __pmd_offset(pgd, addr, KM_PMD1)
-+
-+#define pmd_unmap(pmd)                                __pmd_unmap(pmd, KM_PMD0);
-+#define pmd_unmap_nested(pmd)                 __pmd_unmap(pmd, KM_PMD1);
- static inline pte_t ptep_get_and_clear(pte_t *ptep)
- {
-@@ -123,6 +143,4 @@ static inline pmd_t pfn_pmd(unsigned lon
- #define pgoff_to_pte(off) ((pte_t) { _PAGE_FILE, (off) })
- #define PTE_FILE_MAX_BITS       32
--extern struct kmem_cache_s *pae_pgd_cachep;
--
- #endif /* _I386_PGTABLE_3LEVEL_H */
---- linux-2.6.0-test1/include/asm-i386/pgtable.h       2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/pgtable.h      2003-07-19 17:07:16.000000000 -0700
-@@ -21,15 +21,25 @@
- #include <asm/bitops.h>
- #endif
--extern pgd_t swapper_pg_dir[1024];
--extern void paging_init(void);
-+#include <linux/slab.h>
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
- /*
-  * ZERO_PAGE is a global shared page that is always zero: used
-  * for zero-mapped memory areas etc..
-  */
--extern unsigned long empty_zero_page[1024];
- #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
-+extern unsigned long empty_zero_page[1024];
-+extern pgd_t swapper_pg_dir[1024];
-+extern kmem_cache_t *pgd_cache;
-+extern spinlock_t pgd_lock;
-+extern struct list_head pgd_list;
-+
-+void pgd_ctor(void *, kmem_cache_t *, unsigned long);
-+void pgd_dtor(void *, kmem_cache_t *, unsigned long);
-+void pgtable_cache_init(void);
-+void paging_init(void);
- #endif /* !__ASSEMBLY__ */
-@@ -41,20 +51,8 @@ extern unsigned long empty_zero_page[102
- #ifndef __ASSEMBLY__
- #ifdef CONFIG_X86_PAE
- # include <asm/pgtable-3level.h>
--
--/*
-- * Need to initialise the X86 PAE caches
-- */
--extern void pgtable_cache_init(void);
--
- #else
- # include <asm/pgtable-2level.h>
--
--/*
-- * No page table caches to initialise
-- */
--#define pgtable_cache_init()  do { } while (0)
--
- #endif
- #endif
---- linux-2.6.0-test1/include/asm-i386/posix_types.h   2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/posix_types.h  2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned short        __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short        __kernel_mode_t;
- typedef unsigned short        __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-i386/rwlock.h        2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/rwlock.h       2003-07-19 17:04:49.000000000 -0700
-@@ -20,28 +20,52 @@
- #define RW_LOCK_BIAS           0x01000000
- #define RW_LOCK_BIAS_STR      "0x01000000"
--#define __build_read_lock_ptr(rw, helper)   \
--      asm volatile(LOCK "subl $1,(%0)\n\t" \
--                   "js 2f\n" \
--                   "1:\n" \
--                   LOCK_SECTION_START("") \
--                   "2:\tcall " helper "\n\t" \
--                   "jmp 1b\n" \
--                   LOCK_SECTION_END \
--                   ::"a" (rw) : "memory")
--
--#define __build_read_lock_const(rw, helper)   \
--      asm volatile(LOCK "subl $1,%0\n\t" \
--                   "js 2f\n" \
--                   "1:\n" \
--                   LOCK_SECTION_START("") \
--                   "2:\tpushl %%eax\n\t" \
--                   "leal %0,%%eax\n\t" \
--                   "call " helper "\n\t" \
--                   "popl %%eax\n\t" \
--                   "jmp 1b\n" \
--                   LOCK_SECTION_END \
--                   :"=m" (*(volatile int *)rw) : : "memory")
-+#ifdef CONFIG_SPINLINE
-+
-+      #define __build_read_lock_ptr(rw, helper)   \
-+              asm volatile(LOCK "subl $1,(%0)\n\t" \
-+                           "jns 1f\n\t" \
-+                           "call " helper "\n\t" \
-+                           "1:\t" \
-+                           ::"a" (rw) : "memory")
-+
-+      #define __build_read_lock_const(rw, helper)   \
-+              asm volatile(LOCK "subl $1,%0\n\t" \
-+                           "jns 1f\n\t" \
-+                           "pushl %%eax\n\t" \
-+                           "leal %0,%%eax\n\t" \
-+                           "call " helper "\n\t" \
-+                           "popl %%eax\n\t" \
-+                           "1:\t" \
-+                           :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#else /* !CONFIG_SPINLINE */
-+
-+      #define __build_read_lock_ptr(rw, helper)   \
-+              asm volatile(LOCK "subl $1,(%0)\n\t" \
-+                           "js 2f\n" \
-+                           "1:\n" \
-+                           LOCK_SECTION_START("") \
-+                           "2:\tcall " helper "\n\t" \
-+                           "jmp 1b\n" \
-+                           LOCK_SECTION_END \
-+                           ::"a" (rw) : "memory")
-+
-+      #define __build_read_lock_const(rw, helper)   \
-+              asm volatile(LOCK "subl $1,%0\n\t" \
-+                           "js 2f\n" \
-+                           "1:\n" \
-+                           LOCK_SECTION_START("") \
-+                           "2:\tpushl %%eax\n\t" \
-+                           "leal %0,%%eax\n\t" \
-+                           "call " helper "\n\t" \
-+                           "popl %%eax\n\t" \
-+                           "jmp 1b\n" \
-+                           LOCK_SECTION_END \
-+                           :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#endif /* CONFIG_SPINLINE */
-+
- #define __build_read_lock(rw, helper) do { \
-                                               if (__builtin_constant_p(rw)) \
-@@ -50,28 +74,51 @@
-                                                       __build_read_lock_ptr(rw, helper); \
-                                       } while (0)
--#define __build_write_lock_ptr(rw, helper) \
--      asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
--                   "jnz 2f\n" \
--                   "1:\n" \
--                   LOCK_SECTION_START("") \
--                   "2:\tcall " helper "\n\t" \
--                   "jmp 1b\n" \
--                   LOCK_SECTION_END \
--                   ::"a" (rw) : "memory")
--
--#define __build_write_lock_const(rw, helper) \
--      asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
--                   "jnz 2f\n" \
--                   "1:\n" \
--                   LOCK_SECTION_START("") \
--                   "2:\tpushl %%eax\n\t" \
--                   "leal %0,%%eax\n\t" \
--                   "call " helper "\n\t" \
--                   "popl %%eax\n\t" \
--                   "jmp 1b\n" \
--                   LOCK_SECTION_END \
--                   :"=m" (*(volatile int *)rw) : : "memory")
-+#ifdef CONFIG_SPINLINE
-+
-+      #define __build_write_lock_ptr(rw, helper) \
-+              asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-+                           "jz 1f\n\t" \
-+                           "call " helper "\n\t" \
-+                           "1:\n" \
-+                           ::"a" (rw) : "memory")
-+
-+      #define __build_write_lock_const(rw, helper) \
-+              asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
-+                           "jz 1f\n\t" \
-+                           "pushl %%eax\n\t" \
-+                           "leal %0,%%eax\n\t" \
-+                           "call " helper "\n\t" \
-+                           "popl %%eax\n\t" \
-+                           "1:\n" \
-+                           :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#else /* !CONFIG_SPINLINE */
-+
-+      #define __build_write_lock_ptr(rw, helper) \
-+              asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
-+                           "jnz 2f\n" \
-+                           "1:\n" \
-+                           LOCK_SECTION_START("") \
-+                           "2:\tcall " helper "\n\t" \
-+                           "jmp 1b\n" \
-+                           LOCK_SECTION_END \
-+                           ::"a" (rw) : "memory")
-+
-+      #define __build_write_lock_const(rw, helper) \
-+              asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
-+                           "jnz 2f\n" \
-+                           "1:\n" \
-+                           LOCK_SECTION_START("") \
-+                           "2:\tpushl %%eax\n\t" \
-+                           "leal %0,%%eax\n\t" \
-+                           "call " helper "\n\t" \
-+                           "popl %%eax\n\t" \
-+                           "jmp 1b\n" \
-+                           LOCK_SECTION_END \
-+                           :"=m" (*(volatile int *)rw) : : "memory")
-+
-+#endif /* CONFIG_SPINLINE */
- #define __build_write_lock(rw, helper)        do { \
-                                               if (__builtin_constant_p(rw)) \
---- linux-2.6.0-test1/include/asm-i386/smp.h   2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-i386/smp.h  2003-07-19 17:04:07.000000000 -0700
-@@ -8,6 +8,7 @@
- #include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #endif
- #ifdef CONFIG_X86_LOCAL_APIC
-@@ -31,9 +32,7 @@
-  */
-  
- extern void smp_alloc_memory(void);
--extern unsigned long phys_cpu_present_map;
--extern unsigned long cpu_online_map;
--extern volatile unsigned long smp_invalidate_needed;
-+extern physid_mask_t phys_cpu_present_map;
- extern int pic_mode;
- extern int smp_num_siblings;
- extern int cpu_sibling_map[];
-@@ -54,37 +53,19 @@ extern void zap_low_mappings (void);
-  */
- #define smp_processor_id() (current_thread_info()->cpu)
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
--#define cpu_possible(cpu) (cpu_callout_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--#define for_each_cpu(cpu, mask) \
--      for(mask = cpu_online_map; \
--          cpu = __ffs(mask), mask != 0; \
--          mask &= ~(1<<cpu))
--
--extern inline unsigned int num_online_cpus(void)
--{
--      return hweight32(cpu_online_map);
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_callout_map)
- /* We don't mark CPUs online until __cpu_up(), so we need another measure */
- static inline int num_booting_cpus(void)
- {
--      return hweight32(cpu_callout_map);
-+      return cpus_weight(cpu_callout_map);
- }
- extern void map_cpu_to_logical_apicid(void);
- extern void unmap_cpu_to_logical_apicid(int cpu);
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
--      if (mask & cpu_online_map)
--              return __ffs(mask & cpu_online_map);
--
--      return NR_CPUS;
--}
- #ifdef CONFIG_X86_LOCAL_APIC
- #ifdef APIC_DEFINITION
---- linux-2.6.0-test1/include/asm-i386/spinlock.h      2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-i386/spinlock.h     2003-07-19 17:06:40.000000000 -0700
-@@ -43,18 +43,35 @@ typedef struct {
- #define spin_is_locked(x)     (*(volatile signed char *)(&(x)->lock) <= 0)
- #define spin_unlock_wait(x)   do { barrier(); } while(spin_is_locked(x))
--#define spin_lock_string \
--      "\n1:\t" \
--      "lock ; decb %0\n\t" \
--      "js 2f\n" \
--      LOCK_SECTION_START("") \
--      "2:\t" \
--      "rep;nop\n\t" \
--      "cmpb $0,%0\n\t" \
--      "jle 2b\n\t" \
--      "jmp 1b\n" \
--      LOCK_SECTION_END
-+#ifdef CONFIG_SPINLINE
-+      #define spin_lock_string \
-+              "\n1:\t" \
-+              "lock ; decb %0\n\t" \
-+              "js 2f\n" \
-+              "jmp 3f\n" \
-+              "2:\t" \
-+              "rep;nop\n\t" \
-+              "cmpb $0,%0\n\t" \
-+              "jle 2b\n\t" \
-+              "jmp 1b\n" \
-+              "3:\t"
-+
-+#else /* !CONFIG_SPINLINE */
-+
-+      #define spin_lock_string \
-+              "\n1:\t" \
-+              "lock ; decb %0\n\t" \
-+              "js 2f\n" \
-+              LOCK_SECTION_START("") \
-+              "2:\t" \
-+              "rep;nop\n\t" \
-+              "cmpb $0,%0\n\t" \
-+              "jle 2b\n\t" \
-+              "jmp 1b\n" \
-+              LOCK_SECTION_END
-+
-+#endif /* CONFIG_SPINLINE */
- /*
-  * This works. Despite all the confusion.
-  * (except on PPro SMP or if we are using OOSTORE)
-@@ -138,6 +155,11 @@ here:
-  */
- typedef struct {
-       volatile unsigned int lock;
-+#ifdef CONFIG_LOCKMETER
-+      /* required for LOCKMETER since all bits in lock are used */
-+      /* and we need this storage for CPU and lock INDEX        */
-+      unsigned lockmeter_magic;
-+#endif
- #ifdef CONFIG_DEBUG_SPINLOCK
-       unsigned magic;
- #endif
-@@ -145,11 +167,19 @@ typedef struct {
- #define RWLOCK_MAGIC  0xdeaf1eed
-+#ifdef CONFIG_LOCKMETER
-+#ifdef CONFIG_DEBUG_SPINLOCK
-+#define RWLOCK_MAGIC_INIT     , 0, RWLOCK_MAGIC
-+#else
-+#define RWLOCK_MAGIC_INIT     , 0
-+#endif
-+#else /* !CONFIG_LOCKMETER */
- #ifdef CONFIG_DEBUG_SPINLOCK
- #define RWLOCK_MAGIC_INIT     , RWLOCK_MAGIC
- #else
- #define RWLOCK_MAGIC_INIT     /* */
- #endif
-+#endif /* !CONFIG_LOCKMETER */
- #define RW_LOCK_UNLOCKED (rwlock_t) { RW_LOCK_BIAS RWLOCK_MAGIC_INIT }
-@@ -196,4 +226,58 @@ static inline int _raw_write_trylock(rwl
-       return 0;
- }
-+#ifdef CONFIG_LOCKMETER
-+static inline int _raw_read_trylock(rwlock_t *lock)
-+{
-+/* FIXME -- replace with assembler */
-+      atomic_t *count = (atomic_t *)lock;
-+      atomic_dec(count);
-+      if (count->counter > 0)
-+              return 1;
-+      atomic_inc(count);
-+      return 0;
-+}
-+#endif
-+
-+#if defined(CONFIG_LOCKMETER) && defined(CONFIG_HAVE_DEC_LOCK)
-+extern void _metered_spin_lock  (spinlock_t *lock);
-+extern void _metered_spin_unlock(spinlock_t *lock);
-+
-+/*
-+ *  Matches what is in arch/i386/lib/dec_and_lock.c, except this one is
-+ *  "static inline" so that the spin_lock(), if actually invoked, is charged
-+ *  against the real caller, not against the catch-all atomic_dec_and_lock
-+ */
-+static inline int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
-+{
-+      int counter;
-+      int newcount;
-+
-+repeat:
-+      counter = atomic_read(atomic);
-+      newcount = counter-1;
-+
-+      if (!newcount)
-+              goto slow_path;
-+
-+      asm volatile("lock; cmpxchgl %1,%2"
-+              :"=a" (newcount)
-+              :"r" (newcount), "m" (atomic->counter), "0" (counter));
-+
-+      /* If the above failed, "eax" will have changed */
-+      if (newcount != counter)
-+              goto repeat;
-+      return 0;
-+
-+slow_path:
-+      _metered_spin_lock(lock);
-+      if (atomic_dec_and_test(atomic))
-+              return 1;
-+      _metered_spin_unlock(lock);
-+      return 0;
-+}
-+
-+#define ATOMIC_DEC_AND_LOCK
-+#endif
-+
- #endif /* __ASM_SPINLOCK_H */
---- linux-2.6.0-test1/include/asm-i386/stat.h  2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-i386/stat.h 2003-07-19 17:06:16.000000000 -0700
-@@ -9,6 +9,7 @@ struct __old_kernel_stat {
-       unsigned short st_uid;
-       unsigned short st_gid;
-       unsigned short st_rdev;
-+      unsigned short __pad_16bit;
-       unsigned long  st_size;
-       unsigned long  st_atime;
-       unsigned long  st_mtime;
---- linux-2.6.0-test1/include/asm-i386/thread_info.h   2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-i386/thread_info.h  2003-07-19 17:03:50.000000000 -0700
-@@ -87,8 +87,8 @@ static inline struct thread_info *curren
- /* thread information allocation */
- #define THREAD_SIZE (2*PAGE_SIZE)
--#define alloc_thread_info(tsk) ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
--#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
-+#define alloc_thread_info(task) ((struct thread_info *)kmalloc(THREAD_SIZE, GFP_KERNEL))
-+#define free_thread_info(info)        kfree(info)
- #define get_thread_info(ti) get_task_struct((ti)->task)
- #define put_thread_info(ti) put_task_struct((ti)->task)
---- linux-2.6.0-test1/include/asm-i386/topology.h      2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-i386/topology.h     2003-07-19 17:04:07.000000000 -0700
-@@ -31,9 +31,11 @@
- #include <asm/mpspec.h>
-+#include <linux/cpumask.h>
-+
- /* Mappings between logical cpu number and node number */
--extern volatile unsigned long node_2_cpu_mask[];
--extern volatile int cpu_2_node[];
-+extern cpumask_t node_2_cpu_mask[];
-+extern int cpu_2_node[];
- /* Returns the number of the node containing CPU 'cpu' */
- static inline int cpu_to_node(int cpu)
-@@ -49,7 +51,7 @@ static inline int cpu_to_node(int cpu)
- #define parent_node(node) (node)
- /* Returns a bitmask of CPUs on Node 'node'. */
--static inline unsigned long node_to_cpumask(int node)
-+static inline cpumask_t node_to_cpumask(int node)
- {
-       return node_2_cpu_mask[node];
- }
-@@ -57,14 +59,15 @@ static inline unsigned long node_to_cpum
- /* Returns the number of the first CPU on Node 'node'. */
- static inline int node_to_first_cpu(int node)
- { 
--      return __ffs(node_to_cpumask(node));
-+      cpumask_t mask = node_to_cpumask(node);
-+      return first_cpu(mask);
- }
- /* Returns the number of the first MemBlk on Node 'node' */
- #define node_to_memblk(node) (node)
- /* Returns the number of the node containing PCI bus 'bus' */
--static inline unsigned long pcibus_to_cpumask(int bus)
-+static inline cpumask_t pcibus_to_cpumask(int bus)
- {
-       return node_to_cpumask(mp_bus_id_to_node[bus]);
- }
---- linux-2.6.0-test1/include/asm-i386/unistd.h        2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/asm-i386/unistd.h       2003-07-19 17:06:37.000000000 -0700
-@@ -277,8 +277,9 @@
- #define __NR_fstatfs64                269
- #define __NR_tgkill           270
- #define __NR_utimes           271
-+#define __NR_mknod64          272
--#define NR_syscalls 272
-+#define NR_syscalls 273
- /* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */
---- linux-2.6.0-test1/include/asm-ia64/atomic.h        2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-ia64/atomic.h       2003-07-19 17:03:50.000000000 -0700
-@@ -9,7 +9,7 @@
-  * "int" types were carefully placed so as to ensure proper operation
-  * of the macros.
-  *
-- * Copyright (C) 1998, 1999, 2002 Hewlett-Packard Co
-+ * Copyright (C) 1998, 1999, 2002-2003 Hewlett-Packard Co
-  *    David Mosberger-Tang <davidm@hpl.hp.com>
-  */
- #include <linux/types.h>
-@@ -21,11 +21,16 @@
-  * memory accesses are ordered.
-  */
- typedef struct { volatile __s32 counter; } atomic_t;
-+typedef struct { volatile __s64 counter; } atomic64_t;
- #define ATOMIC_INIT(i)                ((atomic_t) { (i) })
-+#define ATOMIC64_INIT(i)      ((atomic64_t) { (i) })
- #define atomic_read(v)                ((v)->counter)
-+#define atomic64_read(v)      ((v)->counter)
-+
- #define atomic_set(v,i)               (((v)->counter) = (i))
-+#define atomic64_set(v,i)     (((v)->counter) = (i))
- static __inline__ int
- ia64_atomic_add (int i, atomic_t *v)
-@@ -37,7 +42,21 @@ ia64_atomic_add (int i, atomic_t *v)
-               CMPXCHG_BUGCHECK(v);
-               old = atomic_read(v);
-               new = old + i;
--      } while (ia64_cmpxchg("acq", v, old, old + i, sizeof(atomic_t)) != old);
-+      } while (ia64_cmpxchg("acq", v, old, new, sizeof(atomic_t)) != old);
-+      return new;
-+}
-+
-+static __inline__ int
-+ia64_atomic64_add (int i, atomic64_t *v)
-+{
-+      __s64 old, new;
-+      CMPXCHG_BUGCHECK_DECL
-+
-+      do {
-+              CMPXCHG_BUGCHECK(v);
-+              old = atomic_read(v);
-+              new = old + i;
-+      } while (ia64_cmpxchg("acq", v, old, new, sizeof(atomic_t)) != old);
-       return new;
- }
-@@ -55,6 +74,20 @@ ia64_atomic_sub (int i, atomic_t *v)
-       return new;
- }
-+static __inline__ int
-+ia64_atomic64_sub (int i, atomic64_t *v)
-+{
-+      __s64 old, new;
-+      CMPXCHG_BUGCHECK_DECL
-+
-+      do {
-+              CMPXCHG_BUGCHECK(v);
-+              old = atomic_read(v);
-+              new = old - i;
-+      } while (ia64_cmpxchg("acq", v, old, new, sizeof(atomic_t)) != old);
-+      return new;
-+}
-+
- #define atomic_add_return(i,v)                                                \
- ({                                                                    \
-       int __ia64_aar_i = (i);                                         \
-@@ -67,6 +100,18 @@ ia64_atomic_sub (int i, atomic_t *v)
-               : ia64_atomic_add(__ia64_aar_i, v);                     \
- })
-+#define atomic64_add_return(i,v)                                      \
-+({                                                                    \
-+      long __ia64_aar_i = (i);                                        \
-+      (__builtin_constant_p(i)                                        \
-+       && (   (__ia64_aar_i ==  1) || (__ia64_aar_i ==   4)           \
-+           || (__ia64_aar_i ==  8) || (__ia64_aar_i ==  16)           \
-+           || (__ia64_aar_i == -1) || (__ia64_aar_i ==  -4)           \
-+           || (__ia64_aar_i == -8) || (__ia64_aar_i == -16)))         \
-+              ? ia64_fetch_and_add(__ia64_aar_i, &(v)->counter)       \
-+              : ia64_atomic64_add(__ia64_aar_i, v);                   \
-+})
-+
- /*
-  * Atomically add I to V and return TRUE if the resulting value is
-  * negative.
-@@ -77,6 +122,12 @@ atomic_add_negative (int i, atomic_t *v)
-       return atomic_add_return(i, v) < 0;
- }
-+static __inline__ int
-+atomic64_add_negative (int i, atomic64_t *v)
-+{
-+      return atomic64_add_return(i, v) < 0;
-+}
-+
- #define atomic_sub_return(i,v)                                                \
- ({                                                                    \
-       int __ia64_asr_i = (i);                                         \
-@@ -89,18 +140,40 @@ atomic_add_negative (int i, atomic_t *v)
-               : ia64_atomic_sub(__ia64_asr_i, v);                     \
- })
-+#define atomic64_sub_return(i,v)                                      \
-+({                                                                    \
-+      long __ia64_asr_i = (i);                                        \
-+      (__builtin_constant_p(i)                                        \
-+       && (   (__ia64_asr_i ==   1) || (__ia64_asr_i ==   4)          \
-+           || (__ia64_asr_i ==   8) || (__ia64_asr_i ==  16)          \
-+           || (__ia64_asr_i ==  -1) || (__ia64_asr_i ==  -4)          \
-+           || (__ia64_asr_i ==  -8) || (__ia64_asr_i == -16)))        \
-+              ? ia64_fetch_and_add(-__ia64_asr_i, &(v)->counter)      \
-+              : ia64_atomic64_sub(__ia64_asr_i, v);                   \
-+})
-+
- #define atomic_dec_return(v)          atomic_sub_return(1, (v))
- #define atomic_inc_return(v)          atomic_add_return(1, (v))
-+#define atomic64_dec_return(v)                atomic64_sub_return(1, (v))
-+#define atomic64_inc_return(v)                atomic64_add_return(1, (v))
- #define atomic_sub_and_test(i,v)      (atomic_sub_return((i), (v)) == 0)
- #define atomic_dec_and_test(v)                (atomic_sub_return(1, (v)) == 0)
- #define atomic_inc_and_test(v)                (atomic_add_return(1, (v)) != 0)
-+#define atomic64_sub_and_test(i,v)    (atomic64_sub_return((i), (v)) == 0)
-+#define atomic64_dec_and_test(v)      (atomic64_sub_return(1, (v)) == 0)
-+#define atomic64_inc_and_test(v)      (atomic64_add_return(1, (v)) != 0)
- #define atomic_add(i,v)                       atomic_add_return((i), (v))
- #define atomic_sub(i,v)                       atomic_sub_return((i), (v))
- #define atomic_inc(v)                 atomic_add(1, (v))
- #define atomic_dec(v)                 atomic_sub(1, (v))
-+#define atomic64_add(i,v)             atomic64_add_return((i), (v))
-+#define atomic64_sub(i,v)             atomic64_sub_return((i), (v))
-+#define atomic64_inc(v)                       atomic64_add(1, (v))
-+#define atomic64_dec(v)                       atomic64_sub(1, (v))
-+
- /* Atomic operations are already serializing */
- #define smp_mb__before_atomic_dec()   barrier()
- #define smp_mb__after_atomic_dec()    barrier()
---- linux-2.6.0-test1/include/asm-ia64/bitops.h        2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-ia64/bitops.h       2003-07-19 17:04:07.000000000 -0700
-@@ -409,7 +409,7 @@ found_middle:
-  * Find next bit in a bitmap reasonably efficiently..
-  */
- static inline int
--find_next_bit (void *addr, unsigned long size, unsigned long offset)
-+find_next_bit(const void *addr, unsigned long size, unsigned long offset)
- {
-       unsigned long *p = ((unsigned long *) addr) + (offset >> 6);
-       unsigned long result = offset & ~63UL;
---- linux-2.6.0-test1/include/asm-ia64/elf.h   2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/elf.h  2003-07-19 17:03:50.000000000 -0700
-@@ -199,11 +199,11 @@ extern int dump_task_fpu (struct task_st
- #define GATE_EHDR     ((const struct elfhdr *) GATE_ADDR)
--#define ARCH_DLINFO                                                   \
--do {                                                                  \
--      extern char __kernel_syscall_via_epc[];                         \
--      NEW_AUX_ENT(AT_SYSINFO, __kernel_syscall_via_epc);              \
--      NEW_AUX_ENT(AT_SYSINFO_EHDR, (unsigned long) GATE_EHDR);        \
-+#define ARCH_DLINFO                                                           \
-+do {                                                                          \
-+      extern char __kernel_syscall_via_epc[];                                 \
-+      NEW_AUX_ENT(AT_SYSINFO, (unsigned long) __kernel_syscall_via_epc);      \
-+      NEW_AUX_ENT(AT_SYSINFO_EHDR, (unsigned long) GATE_EHDR);                \
- } while (0)
- /*
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-ia64/local.h        2003-07-19 17:03:50.000000000 -0700
-@@ -0,0 +1,50 @@
-+#ifndef _ASM_IA64_LOCAL_H
-+#define _ASM_IA64_LOCAL_H
-+
-+/*
-+ * Copyright (C) 2003 Hewlett-Packard Co
-+ *    David Mosberger-Tang <davidm@hpl.hp.com>
-+ */
-+
-+#include <linux/percpu.h>
-+
-+typedef struct {
-+      atomic64_t val;
-+} local_t;
-+
-+#define LOCAL_INIT(i) ((local_t) { { (i) } })
-+#define local_read(l) atomic64_read(&(l)->val)
-+#define local_set(l, i)       atomic64_set(&(l)->val, i)
-+#define local_inc(l)  atomic64_inc(&(l)->val)
-+#define local_dec(l)  atomic64_dec(&(l)->val)
-+#define local_add(l)  atomic64_add(&(l)->val)
-+#define local_sub(l)  atomic64_sub(&(l)->val)
-+
-+/* Non-atomic variants, i.e., preemption disabled and won't be touched in interrupt, etc.  */
-+
-+#define __local_inc(l)                (++(l)->val.counter)
-+#define __local_dec(l)                (--(l)->val.counter)
-+#define __local_add(i,l)      ((l)->val.counter += (i))
-+#define __local_sub(i,l)      ((l)->val.counter -= (i))
-+
-+/*
-+ * Use these for per-cpu local_t variables.  Note they take a variable (eg. mystruct.foo),
-+ * not an address.
-+ */
-+#define cpu_local_read(v)     local_read(&__ia64_per_cpu_var(v))
-+#define cpu_local_set(v, i)   local_set(&__ia64_per_cpu_var(v), (i))
-+#define cpu_local_inc(v)      local_inc(&__ia64_per_cpu_var(v))
-+#define cpu_local_dec(v)      local_dec(&__ia64_per_cpu_var(v))
-+#define cpu_local_add(i, v)   local_add((i), &__ia64_per_cpu_var(v))
-+#define cpu_local_sub(i, v)   local_sub((i), &__ia64_per_cpu_var(v))
-+
-+/*
-+ * Non-atomic increments, i.e., preemption disabled and won't be touched in interrupt,
-+ * etc.
-+ */
-+#define __cpu_local_inc(v)    __local_inc(&__ia64_per_cpu_var(v))
-+#define __cpu_local_dec(v)    __local_dec(&__ia64_per_cpu_var(v))
-+#define __cpu_local_add(i, v) __local_add((i), &__ia64_per_cpu_var(v))
-+#define __cpu_local_sub(i, v) __local_sub((i), &__ia64_per_cpu_var(v))
-+
-+#endif /* _ASM_IA64_LOCAL_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-ia64/lockmeter.h    2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,72 @@
-+/*
-+ *  Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ *  Written by John Hawkes (hawkes@sgi.com)
-+ *  Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ */
-+
-+#ifndef _IA64_LOCKMETER_H
-+#define _IA64_LOCKMETER_H
-+
-+#ifdef local_cpu_data
-+#define CPU_CYCLE_FREQUENCY   local_cpu_data->itc_freq
-+#else
-+#define CPU_CYCLE_FREQUENCY   my_cpu_data.itc_freq
-+#endif
-+#define get_cycles64()                get_cycles()
-+
-+#define THIS_CPU_NUMBER               smp_processor_id()
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * we also assume that the hash table has less than 32767 entries.
-+ */
-+/*
-+ * instrumented spinlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a spinlock_t
-+ */
-+typedef struct inst_spinlock_s {
-+      /* remember, Intel is little endian */
-+      volatile unsigned short lock;
-+      volatile unsigned short index;
-+} inst_spinlock_t;
-+#define PUT_INDEX(lock_ptr,indexv) ((inst_spinlock_t *)(lock_ptr))->index = indexv
-+#define GET_INDEX(lock_ptr)        ((inst_spinlock_t *)(lock_ptr))->index
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+      volatile int read_counter:31;
-+      volatile int write_lock:1;
-+      volatile unsigned short index;
-+      volatile unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr)        ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv)    ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr)         ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr)    ((rwlock_ptr)->read_counter)
-+
-+/*
-+ * return true if rwlock is write locked
-+ * (note that other lock attempts can cause the lock value to be negative)
-+ */
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->write_lock)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr)  ((rwlock_ptr)->read_counter)
-+
-+#endif /* _IA64_LOCKMETER_H */
-+
---- linux-2.6.0-test1/include/asm-ia64/mmu_context.h   2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-ia64/mmu_context.h  2003-07-19 17:03:50.000000000 -0700
-@@ -86,9 +86,9 @@ delayed_tlb_flush (void)
- {
-       extern void local_flush_tlb_all (void);
--      if (unlikely(__get_cpu_var(ia64_need_tlb_flush))) {
-+      if (unlikely(__ia64_per_cpu_var(ia64_need_tlb_flush))) {
-               local_flush_tlb_all();
--              __get_cpu_var(ia64_need_tlb_flush) = 0;
-+              __ia64_per_cpu_var(ia64_need_tlb_flush) = 0;
-       }
- }
---- linux-2.6.0-test1/include/asm-ia64/percpu.h        2003-06-14 12:18:29.000000000 -0700
-+++ 25/include/asm-ia64/percpu.h       2003-07-19 17:03:50.000000000 -0700
-@@ -1,43 +1,73 @@
- #ifndef _ASM_IA64_PERCPU_H
- #define _ASM_IA64_PERCPU_H
--#include <linux/config.h>
--#include <linux/compiler.h>
--
- /*
-  * Copyright (C) 2002-2003 Hewlett-Packard Co
-  *    David Mosberger-Tang <davidm@hpl.hp.com>
-  */
-+
- #define PERCPU_ENOUGH_ROOM PERCPU_PAGE_SIZE
- #ifdef __ASSEMBLY__
--
--#define THIS_CPU(var) (var##__per_cpu)  /* use this to mark accesses to per-CPU variables... */
--
-+# define THIS_CPU(var)        (per_cpu__##var)  /* use this to mark accesses to per-CPU variables... */
- #else /* !__ASSEMBLY__ */
-+#include <linux/config.h>
-+
- #include <linux/threads.h>
--extern unsigned long __per_cpu_offset[NR_CPUS];
-+#ifdef HAVE_MODEL_SMALL_ATTRIBUTE
-+# define __SMALL_ADDR_AREA    __attribute__((__model__ (__small__)))
-+#else
-+# define __SMALL_ADDR_AREA
-+#endif
--#define DEFINE_PER_CPU(type, name) \
--    __attribute__((__section__(".data.percpu"))) __typeof__(type) name##__per_cpu
--#define DECLARE_PER_CPU(type, name) extern __typeof__(type) name##__per_cpu
-+#define DECLARE_PER_CPU(type, name)                           \
-+      extern __SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
--#define __get_cpu_var(var)    (var##__per_cpu)
-+/* Separate out the type, so (int[3], foo) works. */
-+#define DEFINE_PER_CPU(type, name)                            \
-+      __attribute__((__section__(".data.percpu")))            \
-+      __SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
-+
-+/*
-+ * Pretty much a literal copy of asm-generic/percpu.h, except that percpu_modcopy() is an
-+ * external routine, to avoid include-hell.
-+ */
- #ifdef CONFIG_SMP
--# define per_cpu(var, cpu)    (*RELOC_HIDE(&var##__per_cpu, __per_cpu_offset[cpu]))
-+
-+extern unsigned long __per_cpu_offset[NR_CPUS];
-+
-+/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */
-+DECLARE_PER_CPU(unsigned long, local_per_cpu_offset);
-+
-+#define per_cpu(var, cpu)  (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
-+#define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __ia64_per_cpu_var(local_per_cpu_offset)))
- extern void percpu_modcopy(void *pcpudst, const void *src, unsigned long size);
--#else
--# define per_cpu(var, cpu)    ((void)cpu, __get_cpu_var(var))
--#endif
--#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(var##__per_cpu)
--#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(var##__per_cpu)
-+#else /* ! SMP */
-+
-+#define per_cpu(var, cpu)                     ((void)cpu, per_cpu__##var)
-+#define __get_cpu_var(var)                    per_cpu__##var
-+
-+#endif        /* SMP */
-+
-+#define EXPORT_PER_CPU_SYMBOL(var)            EXPORT_SYMBOL(per_cpu__##var)
-+#define EXPORT_PER_CPU_SYMBOL_GPL(var)                EXPORT_SYMBOL_GPL(per_cpu__##var)
-+
-+/* ia64-specific part: */
- extern void setup_per_cpu_areas (void);
-+/*
-+ * Be extremely careful when taking the address of this variable!  Due to virtual
-+ * remapping, it is different from the canonical address returned by __get_cpu_var(var)!
-+ * On the positive side, using __ia64_per_cpu_var() instead of __get_cpu_var() is slightly
-+ * more efficient.
-+ */
-+#define __ia64_per_cpu_var(var)       (per_cpu__##var)
-+
- #endif /* !__ASSEMBLY__ */
- #endif /* _ASM_IA64_PERCPU_H */
---- linux-2.6.0-test1/include/asm-ia64/pgalloc.h       2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/pgalloc.h      2003-07-19 17:07:16.000000000 -0700
-@@ -71,9 +71,9 @@ pgd_free (pgd_t *pgd)
- }
- static inline void
--pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, pmd_t *pmd)
-+pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, struct page *pmd)
- {
--      pgd_val(*pgd_entry) = __pa(pmd);
-+      pgd_val(*pgd_entry) = __pa(page_address(pmd));
- }
-@@ -90,8 +90,8 @@ pmd_alloc_one_fast (struct mm_struct *mm
-       return (pmd_t *)ret;
- }
--static inline pmd_t*
--pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
-+static inline pmd_t *
-+pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
-       pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
-@@ -100,9 +100,16 @@ pmd_alloc_one (struct mm_struct *mm, uns
-       return pmd;
- }
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      return pmd ? virt_to_page(pmd) : NULL;
-+}
-+
- static inline void
--pmd_free (pmd_t *pmd)
-+pmd_free(struct page *page)
- {
-+      pmd_t *pmd = page_address(page);
-       *(unsigned long *)pmd = (unsigned long) pmd_quicklist;
-       pmd_quicklist = (unsigned long *) pmd;
-       ++pgtable_cache_size;
---- linux-2.6.0-test1/include/asm-ia64/pgtable.h       2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/pgtable.h      2003-07-19 17:07:16.000000000 -0700
-@@ -257,7 +257,8 @@ ia64_phys_addr_valid (unsigned long addr
- #define pgd_bad(pgd)                  (!ia64_phys_addr_valid(pgd_val(pgd)))
- #define pgd_present(pgd)              (pgd_val(pgd) != 0UL)
- #define pgd_clear(pgdp)                       (pgd_val(*(pgdp)) = 0UL)
--#define pgd_page(pgd)                 ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK))
-+#define __pgd_page(pgd)                       ((unsigned long)__va(pgd_val(pgd) & _PFN_MASK))
-+#define pgd_page(pgd)                 virt_to_page(__pgd_page(pgd))
- /*
-  * The following have defined behavior only work if pte_present() is true.
-@@ -326,7 +327,13 @@ pgd_offset (struct mm_struct *mm, unsign
- /* Find an entry in the second-level page table.. */
- #define pmd_offset(dir,addr) \
--      ((pmd_t *) pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
-+      ((pmd_t *)__pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
-+
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)             pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                do { } while (0)
-+#define pmd_unmap_nested(pmd)                 do { } while (0)
- /*
-  * Find an entry in the third-level page table.  This looks more complicated than it
---- linux-2.6.0-test1/include/asm-ia64/posix_types.h   2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-ia64/posix_types.h  2003-07-19 17:06:39.000000000 -0700
-@@ -10,7 +10,9 @@
-  *    David Mosberger-Tang <davidm@hpl.hp.com>
-  */
--typedef unsigned int  __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned int  __kernel_ino_t;
- typedef unsigned int  __kernel_mode_t;
- typedef unsigned int  __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-ia64/processor.h     2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-ia64/processor.h    2003-07-19 17:03:50.000000000 -0700
-@@ -191,10 +191,12 @@ struct cpuinfo_ia64 {
- DECLARE_PER_CPU(struct cpuinfo_ia64, cpu_info);
- /*
-- * The "local" data pointer.  It points to the per-CPU data of the currently executing
-+ * The "local" data variable.  It refers to the per-CPU data of the currently executing
-  * CPU, much like "current" points to the per-task data of the currently executing task.
-+ * Do not use the address of local_cpu_data, since it will be different from
-+ * cpu_data(smp_processor_id())!
-  */
--#define local_cpu_data                (&__get_cpu_var(cpu_info))
-+#define local_cpu_data                (&__ia64_per_cpu_var(cpu_info))
- #define cpu_data(cpu)         (&per_cpu(cpu_info, cpu))
- extern void identify_cpu (struct cpuinfo_ia64 *);
---- linux-2.6.0-test1/include/asm-ia64/smp.h   2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/smp.h  2003-07-19 17:04:07.000000000 -0700
-@@ -16,6 +16,7 @@
- #include <linux/init.h>
- #include <linux/threads.h>
- #include <linux/kernel.h>
-+#include <linux/cpumask.h>
- #include <asm/bitops.h>
- #include <asm/io.h>
-@@ -37,8 +38,8 @@ extern struct smp_boot_data {
- extern char no_int_routing __initdata;
--extern unsigned long phys_cpu_present_map;
--extern volatile unsigned long cpu_online_map;
-+extern cpumask_t phys_cpu_present_map;
-+extern cpumask_t cpu_online_map;
- extern unsigned long ipi_base_addr;
- extern unsigned char smp_int_redirect;
-@@ -47,22 +48,7 @@ extern volatile int ia64_cpu_to_sapicid[
- extern unsigned long ap_wakeup_vector;
--#define cpu_possible(cpu)     (phys_cpu_present_map & (1UL << (cpu)))
--#define cpu_online(cpu)               (cpu_online_map & (1UL << (cpu)))
--
--static inline unsigned int
--num_online_cpus (void)
--{
--      return hweight64(cpu_online_map);
--}
--
--static inline unsigned int
--any_online_cpu (unsigned int mask)
--{
--      if (mask & cpu_online_map)
--              return __ffs(mask & cpu_online_map);
--      return NR_CPUS;
--}
-+#define cpu_possible(cpu)     cpu_isset(cpu, phys_cpu_present_map)
- /*
-  * Function to map hard smp processor id to logical id.  Slow, so don't use this in
---- linux-2.6.0-test1/include/asm-ia64/spinlock.h      2003-06-26 22:07:25.000000000 -0700
-+++ 25/include/asm-ia64/spinlock.h     2003-07-19 17:06:40.000000000 -0700
-@@ -120,8 +120,18 @@ _raw_spin_lock (spinlock_t *lock)
- typedef struct {
-       volatile int read_counter       : 31;
-       volatile int write_lock         :  1;
-+#ifdef CONFIG_LOCKMETER
-+      /* required for LOCKMETER since all bits in lock are used */
-+      /* and we need this storage for CPU and lock INDEX        */
-+      unsigned lockmeter_magic;
-+#endif
- } rwlock_t;
-+
-+#ifdef CONFIG_LOCKMETER
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0 }
-+#else
- #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 }
-+#endif
- #define rwlock_init(x)                do { *(x) = RW_LOCK_UNLOCKED; } while(0)
- #define rwlock_is_locked(x)   (*(volatile int *) (x) != 0)
-@@ -137,6 +147,48 @@ do {                                                                                      \
-       }                                                                               \
- } while (0)
-+#ifdef CONFIG_LOCKMETER
-+/*
-+ * HACK: This works, but still have a timing window that affects performance:
-+ * we see that no one owns the Write lock, then someone * else grabs for Write
-+ * lock before we do a read_lock().
-+ * This means that on rare occasions our read_lock() will stall and spin-wait
-+ * until we acquire for Read, instead of simply returning a trylock failure.
-+ */
-+static inline int _raw_read_trylock(rwlock_t *rw)
-+{
-+      if (rw->write_lock) {
-+              return 0;
-+      } else {
-+              _raw_read_lock(rw);
-+              return 1;
-+      }
-+}
-+
-+static inline int _raw_write_trylock(rwlock_t *rw)
-+{
-+      if (!(rw->write_lock)) {
-+          /* isn't currently write-locked... that looks promising... */
-+          if (test_and_set_bit(31, rw) == 0) {
-+              /* now it is write-locked by me... */
-+              if (rw->read_counter) {
-+                  /* really read-locked, so release write-lock and fail */
-+                  clear_bit(31, rw);
-+              } else {
-+                  /* we've the the write-lock, no read-lockers... success! */
-+                  barrier();
-+                  return 1;
-+              }
-+
-+          }
-+      }
-+
-+      /* falls through ... fails to write-lock */
-+      barrier();
-+      return 0;
-+}
-+#endif
-+
- #define _raw_read_unlock(rw)                                  \
- do {                                                          \
-       rwlock_t *__read_lock_ptr = (rw);                       \
-@@ -181,4 +233,25 @@ do {                                                                              \
-       clear_bit(31, (x));                                                             \
- })
-+#ifdef CONFIG_LOCKMETER
-+extern void _metered_spin_lock  (spinlock_t *lock);
-+extern void _metered_spin_unlock(spinlock_t *lock);
-+
-+/*
-+ *  Use a less efficient, and inline, atomic_dec_and_lock() if lockmetering
-+ *  so we can see the callerPC of who is actually doing the spin_lock().
-+ *  Otherwise, all we see is the generic rollup of all locks done by
-+ *  atomic_dec_and_lock().
-+ */
-+static inline int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
-+{
-+      _metered_spin_lock(lock);
-+      if (atomic_dec_and_test(atomic))
-+              return 1;
-+      _metered_spin_unlock(lock);
-+      return 0;
-+}
-+#define ATOMIC_DEC_AND_LOCK
-+#endif
-+
- #endif /*  _ASM_IA64_SPINLOCK_H */
---- linux-2.6.0-test1/include/asm-ia64/system.h        2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ia64/system.h       2003-07-19 17:03:50.000000000 -0700
-@@ -20,9 +20,9 @@
- #include <asm/percpu.h>
- /* 0xa000000000000000 - 0xa000000000000000+PERCPU_PAGE_SIZE remain unmapped */
--#define PERCPU_ADDR           (0xa000000000000000 + PERCPU_PAGE_SIZE)
--#define GATE_ADDR             (0xa000000000000000 + 2*PERCPU_PAGE_SIZE)
-+#define GATE_ADDR             (0xa000000000000000 + PERCPU_PAGE_SIZE)
- #define KERNEL_START           0xa000000100000000
-+#define PERCPU_ADDR           (-PERCPU_PAGE_SIZE)
- #ifndef __ASSEMBLY__
---- linux-2.6.0-test1/include/asm-ia64/tlb.h   2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-ia64/tlb.h  2003-07-19 17:03:50.000000000 -0700
-@@ -126,7 +126,7 @@ ia64_tlb_flush_mmu (struct mmu_gather *t
- static inline struct mmu_gather *
- tlb_gather_mmu (struct mm_struct *mm, unsigned int full_mm_flush)
- {
--      struct mmu_gather *tlb = &per_cpu(mmu_gathers, smp_processor_id());
-+      struct mmu_gather *tlb = &__get_cpu_var(mmu_gathers);
-       tlb->mm = mm;
-       /*
---- linux-2.6.0-test1/include/asm-m68k/motorola_pgalloc.h      2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-m68k/motorola_pgalloc.h     2003-07-19 17:07:16.000000000 -0700
-@@ -63,19 +63,28 @@ static inline void __pte_free_tlb(struct
- }
--static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
- {
-       return get_pointer_table();
- }
--static inline int pmd_free(pmd_t *pmd)
-+static inline struct page *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
--      return free_pointer_table(pmd);
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
- }
--static inline int __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd)
-+static inline int pmd_free(struct page *pmd)
- {
--      return free_pointer_table(pmd);
-+      return free_pointer_table(page_address(pmd));
-+}
-+
-+static inline int __pmd_free_tlb(struct mmu_gather *tlb, struct page *pmd)
-+{
-+      return free_pointer_table(page_address(pmd));
- }
-@@ -100,9 +109,9 @@ static inline void pmd_populate(struct m
-       pmd_set(pmd, page_address(page));
- }
--static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
--      pgd_set(pgd, pmd);
-+      pgd_set(pgd, page_address(pmd));
- }
- #endif /* _MOTOROLA_PGALLOC_H */
---- linux-2.6.0-test1/include/asm-m68k/motorola_pgtable.h      2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-m68k/motorola_pgtable.h     2003-07-19 17:07:16.000000000 -0700
-@@ -115,6 +115,7 @@ extern inline void pgd_set(pgd_t * pgdp,
- #define __pte_page(pte) ((unsigned long)__va(pte_val(pte) & PAGE_MASK))
- #define __pmd_page(pmd) ((unsigned long)__va(pmd_val(pmd) & _TABLE_MASK))
- #define __pgd_page(pgd) ((unsigned long)__va(pgd_val(pgd) & _TABLE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
- #define pte_none(pte)         (!pte_val(pte))
-@@ -203,6 +204,12 @@ extern inline pmd_t * pmd_offset(pgd_t *
-       return (pmd_t *)__pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PMD-1));
- }
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
-+
- /* Find an entry in the third-level page table.. */ 
- extern inline pte_t * pte_offset_kernel(pmd_t * pmdp, unsigned long address)
- {
---- linux-2.6.0-test1/include/asm-m68knommu/pgtable.h  2003-06-14 12:18:23.000000000 -0700
-+++ 25/include/asm-m68knommu/pgtable.h 2003-07-19 17:07:16.000000000 -0700
-@@ -21,7 +21,12 @@ typedef pte_t *pte_addr_t;
- #define pgd_bad(pgd)          (0)
- #define pgd_clear(pgdp)
- #define kern_addr_valid(addr) (1)
--#define       pmd_offset(a, b)        ((void *)0)
-+#define       pmd_offset(a, b)                ((void *)0)
-+#define       pmd_offset_kernel(a, b)         pmd_offset(a, b)
-+#define       pmd_offset_map(a, b)            pmd_offset(a, b)
-+#define       pmd_offset_map_nested(a, b)     pmd_offset(a, b)
-+#define pmd_unmap(pmd)                        do { } while (0)
-+#define pmd_unmap_nested(pmd)         do { } while (0)
- #define PAGE_NONE     __pgprot(0)
- #define PAGE_SHARED   __pgprot(0)
---- linux-2.6.0-test1/include/asm-m68k/posix_types.h   2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-m68k/posix_types.h  2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned short        __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short        __kernel_mode_t;
- typedef unsigned short        __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-m68k/sun3_pgalloc.h  2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-m68k/sun3_pgalloc.h 2003-07-19 17:07:16.000000000 -0700
-@@ -18,7 +18,8 @@
- extern const char bad_pmd_string[];
--#define pmd_alloc_one(mm,address)       ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,address)             ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,address)      ({ BUG(); ((pmd_t *)2); })
- static inline void pte_free_kernel(pte_t * pte)
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-mips64/lockmeter.h  2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,120 @@
-+/*
-+ *  Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ *  Written by John Hawkes (hawkes@sgi.com)
-+ *  Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ */
-+
-+#ifndef _ASM_LOCKMETER_H
-+#define _ASM_LOCKMETER_H
-+
-+#include <linux/time.h>
-+
-+#define SPINLOCK_MAGIC_INIT   /* */
-+
-+#define CPU_CYCLE_FREQUENCY   get_cpu_cycle_frequency()
-+
-+#define THIS_CPU_NUMBER               smp_processor_id()
-+
-+static uint32_t cpu_cycle_frequency = 0;
-+
-+static uint32_t get_cpu_cycle_frequency(void)
-+{
-+    /* a total hack, slow and invasive, but ... it works */
-+    int sec;
-+    uint32_t start_cycles;
-+    struct timeval tv;
-+
-+    if (cpu_cycle_frequency == 0) {   /* uninitialized */
-+      do_gettimeofday(&tv);
-+      sec = tv.tv_sec;        /* set up to catch the tv_sec rollover */
-+      while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+      sec = tv.tv_sec;        /* rolled over to a new sec value */
-+      start_cycles = get_cycles();
-+      while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+      cpu_cycle_frequency = get_cycles() - start_cycles;
-+    }
-+
-+    return cpu_cycle_frequency;
-+}
-+
-+extern struct timeval xtime;
-+extern long do_gettimeoffset(void);
-+
-+static uint64_t get_cycles64(void)
-+{
-+    static uint64_t last_get_cycles64 = 0;
-+    uint64_t ret;
-+    unsigned long sec;
-+    unsigned long usec, usec_offset;
-+
-+again:
-+    sec  = xtime.tv_sec;
-+    usec = xtime.tv_usec;
-+    usec_offset = do_gettimeoffset();
-+    if ((xtime.tv_sec != sec)  ||
-+      (xtime.tv_usec != usec)||
-+      (usec_offset >= 20000))
-+      goto again;
-+
-+    ret =  ((uint64_t)sec * cpu_cycle_frequency)
-+      + ( ((uint64_t)(usec + usec_offset) * cpu_cycle_frequency) / 1000000 );
-+
-+    /* XXX why does time go backwards?  do_gettimeoffset?  general time adj? */
-+    if (ret <= last_get_cycles64)
-+      ret  = last_get_cycles64+1;
-+    last_get_cycles64 = ret;
-+
-+    return ret;
-+}
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * we also assume that the hash table has less than 32767 entries.
-+ * the high order bit is used for write locking a rw_lock
-+ */
-+#define INDEX_MASK   0x7FFF0000
-+#define READERS_MASK 0x0000FFFF
-+#define INDEX_SHIFT 16
-+#define PUT_INDEX(lockp,index)   \
-+        lockp->lock = (((lockp->lock) & ~INDEX_MASK) | (index) << INDEX_SHIFT)
-+#define GET_INDEX(lockp) \
-+        (((lockp->lock) & INDEX_MASK) >> INDEX_SHIFT)
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+      volatile int lock;
-+      unsigned short index;
-+      unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr)        ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv)    ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr)         ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr)   rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+      int tmp = (int) rwlock_ptr->lock;
-+      return (tmp >= 0) ? tmp : 0;
-+}
-+
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock < 0)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr)  ((rwlock_ptr)->lock > 0)
-+
-+#endif /* _ASM_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-mips64/pgalloc.h     2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/pgalloc.h    2003-07-19 17:07:16.000000000 -0700
-@@ -28,7 +28,7 @@ static inline void pmd_populate(struct m
-       set_pmd(pmd, __pmd((PAGE_OFFSET + page_to_pfn(pte)) << PAGE_SHIFT));
- }
--#define pgd_populate(mm, pgd, pmd)            set_pgd(pgd, __pgd(pmd))
-+#define pgd_populate(mm, pgd, pmd)            set_pgd(pgd, __pgd(page_address(pmd)))
- static inline pgd_t *pgd_alloc(struct mm_struct *mm)
- {
-@@ -88,7 +88,7 @@ static inline void pte_free(struct page 
- #define __pte_free_tlb(tlb,pte)               tlb_remove_page((tlb),(pte))
- #define __pmd_free_tlb(tlb,x)         do { } while (0)
--static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
-       pmd_t *pmd;
-@@ -98,9 +98,18 @@ static inline pmd_t *pmd_alloc_one(struc
-       return pmd;
- }
--static inline void pmd_free(pmd_t *pmd)
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
- {
--      free_pages((unsigned long)pmd, PMD_ORDER);
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
-+}
-+
-+static inline void pmd_free(struct page *pmd)
-+{
-+      __free_pages(pmd, PMD_ORDER);
- }
- extern pte_t kptbl[(PAGE_SIZE << PGD_ORDER)/sizeof(pte_t)];
---- linux-2.6.0-test1/include/asm-mips64/pgtable.h     2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/pgtable.h    2003-07-19 17:07:16.000000000 -0700
-@@ -155,11 +155,13 @@ extern pmd_t empty_bad_pmd_table[2*PAGE_
- #define pmd_page(pmd)         (pfn_to_page(pmd_phys(pmd) >> PAGE_SHIFT))
- #define pmd_page_kernel(pmd)  pmd_val(pmd)
--static inline unsigned long pgd_page(pgd_t pgd)
-+static inline unsigned long __pgd_page(pgd_t pgd)
- {
-       return pgd_val(pgd);
- }
-+#define pgd_page(pgd)         virt_to_page(__pgd_page(pgd))
-+
- static inline int pte_none(pte_t pte)
- {
-       return !(pte_val(pte) & ~_PAGE_GLOBAL);
-@@ -397,10 +399,16 @@ static inline pte_t pte_modify(pte_t pte
- /* Find an entry in the second-level page table.. */
- static inline pmd_t *pmd_offset(pgd_t * dir, unsigned long address)
- {
--      return (pmd_t *) pgd_page(*dir) +
-+      return (pmd_t *)__pgd_page(*dir) +
-              ((address >> PMD_SHIFT) & (PTRS_PER_PMD - 1));
- }
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while(0)
-+#define pmd_unmap_nested(pmd)                         do { } while(0)
-+
- /* Find an entry in the third-level page table.. */
- #define __pte_offset(address)                                         \
-       (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-mips64/posix_types.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/posix_types.h        2003-07-19 17:06:39.000000000 -0700
-@@ -15,7 +15,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned int  __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int  __kernel_mode_t;
- typedef unsigned int  __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-mips64/smp.h 2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips64/smp.h        2003-07-19 17:04:07.000000000 -0700
-@@ -17,6 +17,7 @@
- #include <linux/bitops.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <asm/atomic.h>
- #define smp_processor_id()    (current_thread_info()->cpu)
-@@ -45,56 +46,17 @@ extern struct call_data_struct *call_dat
- #define SMP_RESCHEDULE_YOURSELF       0x1     /* XXX braindead */
- #define SMP_CALL_FUNCTION     0x2
--#if (NR_CPUS <= _MIPS_SZLONG)
--
--typedef unsigned long   cpumask_t;
--
--#define CPUMASK_CLRALL(p)     (p) = 0
--#define CPUMASK_SETB(p, bit)  (p) |= 1UL << (bit)
--#define CPUMASK_CLRB(p, bit)  (p) &= ~(1UL << (bit))
--#define CPUMASK_TSTB(p, bit)  ((p) & (1UL << (bit)))
--
--#elif (NR_CPUS <= 128)
--
--/*
-- * The foll should work till 128 cpus.
-- */
--#define CPUMASK_SIZE          (NR_CPUS/_MIPS_SZLONG)
--#define CPUMASK_INDEX(bit)    ((bit) >> 6)
--#define CPUMASK_SHFT(bit)     ((bit) & 0x3f)
--
--typedef struct {
--      unsigned long   _bits[CPUMASK_SIZE];
--} cpumask_t;
--
--#define       CPUMASK_CLRALL(p)       (p)._bits[0] = 0, (p)._bits[1] = 0
--#define CPUMASK_SETB(p, bit)  (p)._bits[CPUMASK_INDEX(bit)] |= \
--                                      (1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_CLRB(p, bit)  (p)._bits[CPUMASK_INDEX(bit)] &= \
--                                      ~(1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_TSTB(p, bit)  ((p)._bits[CPUMASK_INDEX(bit)] & \
--                                      (1UL << CPUMASK_SHFT(bit)))
--
--#else
--#error cpumask macros only defined for 128p kernels
--#endif
--
- extern cpumask_t phys_cpu_present_map;
- extern cpumask_t cpu_online_map;
--#define cpu_possible(cpu) (phys_cpu_present_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
--      return hweight32(cpu_online_map);
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, phys_cpu_present_map)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
- /* We don't mark CPUs online until __cpu_up(), so we need another measure */
- static inline int num_booting_cpus(void)
- {
--      return hweight32(cpu_callout_map);
-+      return cpus_weight(cpu_callout_map);
- }
- #endif /* CONFIG_SMP */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-mips/lockmeter.h    2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,126 @@
-+/*
-+ *  Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ *  Written by John Hawkes (hawkes@sgi.com)
-+ *  Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ *  Ported to mips32 for Asita Technologies
-+ *   by D.J. Barrow ( dj.barrow@asitatechnologies.com )
-+ */
-+#ifndef _ASM_LOCKMETER_H
-+#define _ASM_LOCKMETER_H
-+
-+/* do_gettimeoffset is a function pointer on mips */
-+/* & it is not included by <linux/time.h> */
-+#include <asm/time.h>
-+#include <linux/time.h>
-+#include <asm/div64.h>
-+
-+#define SPINLOCK_MAGIC_INIT   /* */
-+
-+#define CPU_CYCLE_FREQUENCY   get_cpu_cycle_frequency()
-+
-+#define THIS_CPU_NUMBER               smp_processor_id()
-+
-+static uint32_t cpu_cycle_frequency = 0;
-+
-+static uint32_t get_cpu_cycle_frequency(void)
-+{
-+    /* a total hack, slow and invasive, but ... it works */
-+    int sec;
-+    uint32_t start_cycles;
-+    struct timeval tv;
-+
-+    if (cpu_cycle_frequency == 0) {   /* uninitialized */
-+      do_gettimeofday(&tv);
-+      sec = tv.tv_sec;        /* set up to catch the tv_sec rollover */
-+      while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+      sec = tv.tv_sec;        /* rolled over to a new sec value */
-+      start_cycles = get_cycles();
-+      while (sec == tv.tv_sec) { do_gettimeofday(&tv); }
-+      cpu_cycle_frequency = get_cycles() - start_cycles;
-+    }
-+
-+    return cpu_cycle_frequency;
-+}
-+
-+extern struct timeval xtime;
-+
-+static uint64_t get_cycles64(void)
-+{
-+    static uint64_t last_get_cycles64 = 0;
-+    uint64_t ret;
-+    unsigned long sec;
-+    unsigned long usec, usec_offset;
-+
-+again:
-+    sec  = xtime.tv_sec;
-+    usec = xtime.tv_usec;
-+    usec_offset = do_gettimeoffset();
-+    if ((xtime.tv_sec != sec)  ||
-+      (xtime.tv_usec != usec)||
-+      (usec_offset >= 20000))
-+      goto again;
-+
-+    ret = ((uint64_t)(usec + usec_offset) * cpu_cycle_frequency);
-+    /* We can't do a normal 64 bit division on mips without libgcc.a */
-+    do_div(ret,1000000);
-+    ret +=  ((uint64_t)sec * cpu_cycle_frequency);
-+
-+    /* XXX why does time go backwards?  do_gettimeoffset?  general time adj? */
-+    if (ret <= last_get_cycles64)
-+      ret  = last_get_cycles64+1;
-+    last_get_cycles64 = ret;
-+
-+    return ret;
-+}
-+
-+/*
-+ * macros to cache and retrieve an index value inside of a lock
-+ * these macros assume that there are less than 65536 simultaneous
-+ * (read mode) holders of a rwlock.
-+ * we also assume that the hash table has less than 32767 entries.
-+ * the high order bit is used for write locking a rw_lock
-+ */
-+#define INDEX_MASK   0x7FFF0000
-+#define READERS_MASK 0x0000FFFF
-+#define INDEX_SHIFT 16
-+#define PUT_INDEX(lockp,index)   \
-+        lockp->lock = (((lockp->lock) & ~INDEX_MASK) | (index) << INDEX_SHIFT)
-+#define GET_INDEX(lockp) \
-+        (((lockp->lock) & INDEX_MASK) >> INDEX_SHIFT)
-+
-+/*
-+ * macros to cache and retrieve an index value in a read/write lock
-+ * as well as the cpu where a reader busy period started
-+ * we use the 2nd word (the debug word) for this, so require the
-+ * debug word to be present
-+ */
-+/*
-+ * instrumented rwlock structure -- never used to allocate storage
-+ * only used in macros below to overlay a rwlock_t
-+ */
-+typedef struct inst_rwlock_s {
-+      volatile int lock;
-+      unsigned short index;
-+      unsigned short cpu;
-+} inst_rwlock_t;
-+#define PUT_RWINDEX(rwlock_ptr,indexv) ((inst_rwlock_t *)(rwlock_ptr))->index = indexv
-+#define GET_RWINDEX(rwlock_ptr)        ((inst_rwlock_t *)(rwlock_ptr))->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv)    ((inst_rwlock_t *)(rwlock_ptr))->cpu = cpuv
-+#define GET_RW_CPU(rwlock_ptr)         ((inst_rwlock_t *)(rwlock_ptr))->cpu
-+
-+/*
-+ * return the number of readers for a rwlock_t
-+ */
-+#define RWLOCK_READERS(rwlock_ptr)   rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+      int tmp = (int) rwlock_ptr->lock;
-+      return (tmp >= 0) ? tmp : 0;
-+}
-+
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr) ((rwlock_ptr)->lock < 0)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr)  ((rwlock_ptr)->lock > 0)
-+
-+#endif /* _ASM_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-mips/pgalloc.h       2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/pgalloc.h      2003-07-19 17:07:16.000000000 -0700
-@@ -96,7 +96,8 @@ static inline void pte_free(struct page 
-  * allocating and freeing a pmd is trivial: the 1-entry pmd is
-  * inside the pgd, so has no extra memory associated with it.
-  */
--#define pmd_alloc_one(mm, addr)               ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr)               ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr)        ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x)                   do { } while (0)
- #define __pmd_free_tlb(tlb,x)         do { } while (0)
---- linux-2.6.0-test1/include/asm-mips/pgtable.h       2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/pgtable.h      2003-07-19 17:07:16.000000000 -0700
-@@ -374,6 +374,12 @@ static inline pmd_t *pmd_offset(pgd_t *d
-       return (pmd_t *) dir;
- }
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define __pte_offset(address)                                         \
-       (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-mips/posix_types.h   2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/posix_types.h  2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned int  __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int  __kernel_mode_t;
- typedef unsigned long __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-mips/smp.h   2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/smp.h  2003-07-19 17:04:07.000000000 -0700
-@@ -17,6 +17,7 @@
- #include <linux/bitops.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <asm/atomic.h>
- #define smp_processor_id()    (current_thread_info()->cpu)
-@@ -45,56 +46,17 @@ extern struct call_data_struct *call_dat
- #define SMP_RESCHEDULE_YOURSELF       0x1     /* XXX braindead */
- #define SMP_CALL_FUNCTION     0x2
--#if (NR_CPUS <= _MIPS_SZLONG)
--
--typedef unsigned long   cpumask_t;
--
--#define CPUMASK_CLRALL(p)     (p) = 0
--#define CPUMASK_SETB(p, bit)  (p) |= 1UL << (bit)
--#define CPUMASK_CLRB(p, bit)  (p) &= ~(1UL << (bit))
--#define CPUMASK_TSTB(p, bit)  ((p) & (1UL << (bit)))
--
--#elif (NR_CPUS <= 128)
--
--/*
-- * The foll should work till 128 cpus.
-- */
--#define CPUMASK_SIZE          (NR_CPUS/_MIPS_SZLONG)
--#define CPUMASK_INDEX(bit)    ((bit) >> 6)
--#define CPUMASK_SHFT(bit)     ((bit) & 0x3f)
--
--typedef struct {
--      unsigned long   _bits[CPUMASK_SIZE];
--} cpumask_t;
--
--#define       CPUMASK_CLRALL(p)       (p)._bits[0] = 0, (p)._bits[1] = 0
--#define CPUMASK_SETB(p, bit)  (p)._bits[CPUMASK_INDEX(bit)] |= \
--                                      (1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_CLRB(p, bit)  (p)._bits[CPUMASK_INDEX(bit)] &= \
--                                      ~(1UL << CPUMASK_SHFT(bit))
--#define CPUMASK_TSTB(p, bit)  ((p)._bits[CPUMASK_INDEX(bit)] & \
--                                      (1UL << CPUMASK_SHFT(bit)))
--
--#else
--#error cpumask macros only defined for 128p kernels
--#endif
--
- extern cpumask_t phys_cpu_present_map;
- extern cpumask_t cpu_online_map;
--#define cpu_possible(cpu) (phys_cpu_present_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
--      return hweight32(cpu_online_map);
--}
-+#define cpu_possible(cpu) cpu_isset(cpu, phys_cpu_present_map)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
- /* We don't mark CPUs online until __cpu_up(), so we need another measure */
- static inline int num_booting_cpus(void)
- {
--      return hweight32(cpu_callout_map);
-+      return cpus_weight(cpu_callout_map);
- }
- #endif /* CONFIG_SMP */
---- linux-2.6.0-test1/include/asm-mips/spinlock.h      2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-mips/spinlock.h     2003-07-19 17:06:40.000000000 -0700
-@@ -91,9 +91,18 @@ static inline unsigned int _raw_spin_try
- typedef struct {
-       volatile unsigned int lock;
-+#ifdef CONFIG_LOCKMETER
-+      /* required for LOCKMETER since all bits in lock are used */
-+      /* and we need this storage for CPU and lock INDEX        */
-+      unsigned lockmeter_magic;
-+#endif
- } rwlock_t;
-+#ifdef CONFIG_LOCKMETER
-+#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 }
-+#else
- #define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
-+#endif
- #define rwlock_init(x)  do { *(x) = RW_LOCK_UNLOCKED; } while(0)
---- linux-2.6.0-test1/include/asm-parisc/pgalloc.h     2003-06-14 12:18:35.000000000 -0700
-+++ 25/include/asm-parisc/pgalloc.h    2003-07-19 17:07:16.000000000 -0700
-@@ -28,12 +28,12 @@ static inline void pgd_free(pgd_t *pgd)
- /* Three Level Page Table Support for pmd's */
--static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
--      pgd_val(*pgd) = _PAGE_TABLE + __pa((unsigned long)pmd);
-+      pgd_val(*pgd) = _PAGE_TABLE + __pa(page_address(pmd));
- }
--static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
-       pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
-       if (pmd)
-@@ -41,9 +41,18 @@ static inline pmd_t *pmd_alloc_one(struc
-       return pmd;
- }
--static inline void pmd_free(pmd_t *pmd)
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
- {
--      free_page((unsigned long)pmd);
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
-+}
-+
-+static inline void pmd_free(struct page *pmd)
-+{
-+      __free_page(pmd);
- }
- #else
-@@ -55,7 +64,8 @@ static inline void pmd_free(pmd_t *pmd)
-  * inside the pgd, so has no extra memory associated with it.
-  */
--#define pmd_alloc_one(mm, addr)               ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr)               ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr)        pmd_alloc_one(mm, addr)
- #define pmd_free(x)                   do { } while (0)
- #define pgd_populate(mm, pmd, pte)    BUG()
---- linux-2.6.0-test1/include/asm-parisc/pgtable.h     2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/asm-parisc/pgtable.h    2003-07-19 17:07:16.000000000 -0700
-@@ -242,7 +242,8 @@ extern unsigned long *empty_zero_page;
- #ifdef __LP64__
--#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define __pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
- /* For 64 bit we have three level tables */
-@@ -339,11 +340,17 @@ extern inline pte_t pte_modify(pte_t pte
- #ifdef __LP64__
- #define pmd_offset(dir,address) \
--((pmd_t *) pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1)))
-+((pmd_t *)__pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1)))
- #else
- #define pmd_offset(dir,addr) ((pmd_t *) dir)
- #endif
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)             pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                do { } while (0)
-+#define pmd_unmap_nested(pmd)                 do { } while (0)
-+
- /* Find an entry in the third-level page table.. */ 
- #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE-1))
- #define pte_offset_kernel(pmd, address) \
---- linux-2.6.0-test1/include/asm-parisc/posix_types.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-parisc/posix_types.h        2003-07-19 17:06:39.000000000 -0700
-@@ -6,7 +6,9 @@
-  * be a little careful about namespace pollution etc.  Also, we cannot
-  * assume GCC is being used.
-  */
--typedef unsigned int          __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long         __kernel_ino_t;
- typedef unsigned short                __kernel_mode_t;
- typedef unsigned short                __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-parisc/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-parisc/smp.h        2003-07-19 17:04:07.000000000 -0700
-@@ -14,9 +14,10 @@
- #ifndef ASSEMBLY
- #include <linux/bitops.h>
- #include <linux/threads.h>    /* for NR_CPUS */
-+#include <linux/cpumask.h>
- typedef unsigned long address_t;
--extern volatile unsigned long cpu_online_map;
-+extern cpumask_t cpu_online_map;
- /*
-@@ -51,22 +52,10 @@ extern void smp_send_reschedule(int cpu)
- extern unsigned long cpu_present_mask;
- #define smp_processor_id()    (current_thread_info()->cpu)
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
--#define cpu_possible(cpu)       (cpu_present_mask & (1<<(cpu)))
-+#define cpu_possible(cpu)       cpu_isset(cpu, cpu_present_mask)
--extern inline unsigned int num_online_cpus(void)
--{
--      return hweight32(cpu_online_map);
--}
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
--      if (mask & cpu_online_map)
--              return __ffs(mask & cpu_online_map);
--
--      return NR_CPUS;
--}
- #endif /* CONFIG_SMP */
- #define NO_PROC_ID            0xFF            /* No processor magic marker */
---- linux-2.6.0-test1/include/asm-ppc64/mmu_context.h  2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-ppc64/mmu_context.h 2003-07-19 17:04:07.000000000 -0700
-@@ -143,7 +143,7 @@ switch_mm(struct mm_struct *prev, struct
-         struct task_struct *tsk)
- {
-       flush_stab(tsk, next);
--      set_bit(smp_processor_id(), &next->cpu_vm_mask);
-+      cpu_set(smp_processor_id(), next->cpu_vm_mask);
- }
- #define deactivate_mm(tsk,mm) do { } while (0)
---- linux-2.6.0-test1/include/asm-ppc64/pgalloc.h      2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-ppc64/pgalloc.h     2003-07-19 17:07:16.000000000 -0700
-@@ -26,10 +26,10 @@ pgd_free(pgd_t *pgd)
-       free_page((unsigned long)pgd);
- }
--#define pgd_populate(MM, PGD, PMD)    pgd_set(PGD, PMD)
-+#define pgd_populate(MM, PGD, PMD)    pgd_set(PGD, page_address(PMD))
- static inline pmd_t *
--pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
-       pmd_t *pmd;
-@@ -39,10 +39,19 @@ pmd_alloc_one(struct mm_struct *mm, unsi
-       return pmd;
- }
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
-+}
-+
- static inline void
--pmd_free(pmd_t *pmd)
-+pmd_free(struct page *pmd)
- {
--      free_page((unsigned long)pmd);
-+      __free_page(pmd);
- }
- #define __pmd_free_tlb(tlb, pmd)      pmd_free(pmd)
---- linux-2.6.0-test1/include/asm-ppc64/pgtable.h      2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-ppc64/pgtable.h     2003-07-19 17:07:16.000000000 -0700
-@@ -190,7 +190,8 @@ extern unsigned long empty_zero_page[PAG
- #define pgd_bad(pgd)          ((pgd_val(pgd)) == 0)
- #define pgd_present(pgd)      (pgd_val(pgd) != 0UL)
- #define pgd_clear(pgdp)               (pgd_val(*(pgdp)) = 0UL)
--#define pgd_page(pgd)         (__bpn_to_ba(pgd_val(pgd))) 
-+#define __pgd_page(pgd)               (__bpn_to_ba(pgd_val(pgd)))
-+#define pgd_page(pgd)         virt_to_page(__pgd_page(pgd))
- /* 
-  * Find an entry in a page-table-directory.  We combine the address region 
-@@ -203,12 +204,18 @@ extern unsigned long empty_zero_page[PAG
- /* Find an entry in the second-level page table.. */
- #define pmd_offset(dir,addr) \
--  ((pmd_t *) pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
-+  ((pmd_t *)__pgd_page(*(dir)) + (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)))
- /* Find an entry in the third-level page table.. */
- #define pte_offset_kernel(dir,addr) \
-   ((pte_t *) pmd_page_kernel(*(dir)) + (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)))
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)             pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                do { } while (0)
-+#define pmd_unmap_nested(pmd)                 do { } while (0)
-+
- #define pte_offset_map(dir,addr)      pte_offset_kernel((dir), (addr))
- #define pte_offset_map_nested(dir,addr)       pte_offset_kernel((dir), (addr))
- #define pte_unmap(pte)                        do { } while(0)
---- linux-2.6.0-test1/include/asm-ppc64/semaphore.h    2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/asm-ppc64/semaphore.h   2003-07-19 17:04:51.000000000 -0700
-@@ -22,6 +22,7 @@ struct semaphore {
-        * sleeping on `wait'.
-        */
-       atomic_t count;
-+      int sleepers;
-       wait_queue_head_t wait;
- #ifdef WAITQUEUE_DEBUG
-       long __magic;
-@@ -37,6 +38,7 @@ struct semaphore {
- #define __SEMAPHORE_INITIALIZER(name, count) \
-       { ATOMIC_INIT(count), \
-+        0, \
-         __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
-         __SEM_DEBUG_INIT(name) }
-@@ -52,6 +54,7 @@ struct semaphore {
- static inline void sema_init (struct semaphore *sem, int val)
- {
-       atomic_set(&sem->count, val);
-+      sem->sleepers = 0;
-       init_waitqueue_head(&sem->wait);
- #ifdef WAITQUEUE_DEBUG
-       sem->__magic = (long)&sem->__magic;
---- linux-2.6.0-test1/include/asm-ppc64/smp.h  2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-ppc64/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -19,6 +19,7 @@
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/kernel.h>
- #ifdef CONFIG_SMP
-@@ -27,31 +28,13 @@
- #include <asm/paca.h>
--extern unsigned long cpu_online_map;
--
- extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
- extern void smp_send_tlb_invalidate(int);
- extern void smp_send_xmon_break(int cpu);
- struct pt_regs;
- extern void smp_message_recv(int, struct pt_regs *);
--#define cpu_online(cpu)       test_bit((cpu), &cpu_online_map)
--
- #define cpu_possible(cpu)     paca[cpu].active
--
--static inline unsigned int num_online_cpus(void)
--{
--      return hweight64(cpu_online_map);
--}
--
--static inline unsigned int any_online_cpu(unsigned int mask)
--{
--      if (mask & cpu_online_map)
--              return __ffs(mask & cpu_online_map);
--
--      return NR_CPUS;
--}
--
- #define smp_processor_id() (get_paca()->xPacaIndex)
- /* Since OpenPIC has only 4 IPIs, we use slightly different message numbers.
---- linux-2.6.0-test1/include/asm-ppc64/tlb.h  2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/asm-ppc64/tlb.h 2003-07-19 17:04:07.000000000 -0700
-@@ -49,6 +49,7 @@ static inline void __tlb_remove_tlb_entr
-       struct ppc64_tlb_batch *batch = &ppc64_tlb_batch[cpu];
-       unsigned long i = batch->index;
-       pte_t pte;
-+      cpumask_t local_cpumask = cpumask_of_cpu(cpu);
-       if (pte_val(*ptep) & _PAGE_HASHPTE) {
-               pte = __pte(pte_update(ptep, _PAGE_HPTEFLAGS, 0));
-@@ -61,7 +62,7 @@ static inline void __tlb_remove_tlb_entr
-                       if (i == PPC64_TLB_BATCH_NR) {
-                               int local = 0;
--                              if (tlb->mm->cpu_vm_mask == (1UL << cpu))
-+                              if (cpus_equal(tlb->mm->cpu_vm_mask, local_cpumask))
-                                       local = 1;
-                               flush_hash_range(tlb->mm->context, i, local);
-@@ -78,8 +79,9 @@ static inline void tlb_flush(struct mmu_
-       int cpu = smp_processor_id();
-       struct ppc64_tlb_batch *batch = &ppc64_tlb_batch[cpu];
-       int local = 0;
-+      cpumask_t local_cpumask = cpumask_of_cpu(smp_processor_id());
--      if (tlb->mm->cpu_vm_mask == (1UL << smp_processor_id()))
-+      if (cpus_equal(tlb->mm->cpu_vm_mask, local_cpumask))
-               local = 1;
-       flush_hash_range(tlb->mm->context, batch->index, local);
---- linux-2.6.0-test1/include/asm-ppc/hardirq.h        2003-07-02 14:53:17.000000000 -0700
-+++ 25/include/asm-ppc/hardirq.h       2003-07-19 17:03:50.000000000 -0700
-@@ -14,8 +14,6 @@
-  */
- typedef struct {
-       unsigned long __softirq_pending;        /* set_bit is used on this */
--      unsigned int __syscall_count;
--      struct task_struct * __ksoftirqd_task;
-       unsigned int __last_jiffy_stamp;
- } ____cacheline_aligned irq_cpustat_t;
---- linux-2.6.0-test1/include/asm-ppc/ipc.h    2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-ppc/ipc.h   2003-07-19 17:03:50.000000000 -0700
-@@ -14,6 +14,7 @@ struct ipc_kludge {
- #define SEMOP          1
- #define SEMGET                 2
- #define SEMCTL                 3
-+#define SEMTIMEDOP     4
- #define MSGSND                11
- #define MSGRCV                12
- #define MSGGET                13
---- linux-2.6.0-test1/include/asm-ppc/pci.h    2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ppc/pci.h   2003-07-19 17:03:50.000000000 -0700
-@@ -53,18 +53,12 @@ extern unsigned long phys_to_bus(unsigne
- extern unsigned long pci_phys_to_bus(unsigned long pa, int busnr);
- extern unsigned long pci_bus_to_phys(unsigned int ba, int busnr);
-     
--/* Dynamic DMA Mapping stuff, stolen from i386
-- *    ++ajoshi
-+/*
-+ * Dynamic DMA Mapping stuff
-+ * Originally stolen from i386 by ajoshi and updated by paulus
-+ * Non-consistent cache support by Dan Malek
-  */
--#include <linux/types.h>
--#include <linux/slab.h>
--#include <linux/string.h>
--#include <asm/scatterlist.h>
--#include <asm/io.h>
--
--struct pci_dev;
--
- /* The PCI address space does equal the physical memory
-  * address space.  The networking and block device layers use
-  * this boolean for bounce buffer decisions.
-@@ -101,8 +95,7 @@ extern void pci_free_consistent(struct p
- static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
-                                       size_t size, int direction)
- {
--      if (direction == PCI_DMA_NONE)
--              BUG();
-+      BUG_ON(direction == PCI_DMA_NONE);
-       consistent_sync(ptr, size, direction);
-@@ -130,10 +123,11 @@ static inline void pci_unmap_single(stru
-  * to pci_map_single, but takes a struct page instead of a virtual address
-  */
- static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
--                                    unsigned long offset, size_t size, int direction)
-+                                    unsigned long offset, size_t size,
-+                                    int direction)
- {
--      if (direction == PCI_DMA_NONE)
--              BUG();
-+      BUG_ON(direction == PCI_DMA_NONE);
-+      consistent_sync_page(page, offset, size, direction);
-       return (page - mem_map) * PAGE_SIZE + PCI_DRAM_OFFSET + offset;
- }
-@@ -171,10 +165,11 @@ static inline int pci_map_sg(struct pci_
-       /*
-        * temporary 2.4 hack
-        */
--      for (i = 0; i < nents; i++) {
--              if (!sg[i].page)
--                      BUG();
--              sg[i].dma_address = page_to_bus(sg[i].page) + sg[i].offset;
-+      for (i = 0; i < nents; i++, sg++) {
-+              BUG_ON(!sg->page);
-+              consistent_sync_page(sg->page, sg->offset,
-+                                   sg->length, direction);
-+              sg->dma_address = page_to_bus(sg->page) + sg->offset;
-       }
-       return nents;
-@@ -187,8 +182,7 @@ static inline int pci_map_sg(struct pci_
- static inline void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
-                               int nents, int direction)
- {
--      if (direction == PCI_DMA_NONE)
--              BUG();
-+      BUG_ON(direction == PCI_DMA_NONE);
-       /* nothing to do */
- }
-@@ -205,8 +199,7 @@ static inline void pci_dma_sync_single(s
-                                      dma_addr_t dma_handle,
-                                      size_t size, int direction)
- {
--      if (direction == PCI_DMA_NONE)
--              BUG();
-+      BUG_ON(direction == PCI_DMA_NONE);
-       consistent_sync(bus_to_virt(dma_handle), size, direction);
- }
-@@ -221,9 +214,13 @@ static inline void pci_dma_sync_sg(struc
-                                  struct scatterlist *sg,
-                                  int nelems, int direction)
- {
--      if (direction == PCI_DMA_NONE)
--              BUG();
--      /* nothing to do */
-+      int i;
-+
-+      BUG_ON(direction == PCI_DMA_NONE);
-+
-+      for (i = 0; i < nelems; i++, sg++)
-+              consistent_sync_page(sg->page, sg->offset,
-+                                   sg->length, direction);
- }
- /* Return whether the given PCI device DMA address mask can
---- linux-2.6.0-test1/include/asm-ppc/pgalloc.h        2003-06-14 12:17:55.000000000 -0700
-+++ 25/include/asm-ppc/pgalloc.h       2003-07-19 17:07:16.000000000 -0700
-@@ -15,7 +15,8 @@ extern void pgd_free(pgd_t *pgd);
-  * We don't have any real pmd's, and this code never triggers because
-  * the pgd will always be present..
-  */
--#define pmd_alloc_one(mm,address)       ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,address)       ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,addr)   ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x)                     do { } while (0)
- #define __pmd_free_tlb(tlb,x)         do { } while (0)
- #define pgd_populate(mm, pmd, pte)      BUG()
---- linux-2.6.0-test1/include/asm-ppc/pgtable.h        2003-06-14 12:18:01.000000000 -0700
-+++ 25/include/asm-ppc/pgtable.h       2003-07-19 17:07:16.000000000 -0700
-@@ -370,8 +370,9 @@ static inline int pgd_bad(pgd_t pgd)               { 
- static inline int pgd_present(pgd_t pgd)      { return 1; }
- #define pgd_clear(xp)                         do { } while (0)
--#define pgd_page(pgd) \
-+#define __pgd_page(pgd) \
-       ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
- /*
-  * The following only work if pte_present() is true.
-@@ -503,6 +504,12 @@ static inline pmd_t * pmd_offset(pgd_t *
-       return (pmd_t *) dir;
- }
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define pte_index(address)            \
-       (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
---- linux-2.6.0-test1/include/asm-ppc/posix_types.h    2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-ppc/posix_types.h   2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned int  __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int  __kernel_mode_t;
- typedef unsigned short        __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-ppc/processor.h      2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-ppc/processor.h     2003-07-19 17:03:50.000000000 -0700
-@@ -705,6 +705,7 @@ struct thread_struct {
-       .ksp = INIT_SP, \
-       .fs = KERNEL_DS, \
-       .pgdir = swapper_pg_dir, \
-+      .fpexc_mode = MSR_FE0 | MSR_FE1, \
- }
- /*
---- linux-2.6.0-test1/include/asm-ppc/smp.h    2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-ppc/smp.h   2003-07-19 17:04:07.000000000 -0700
-@@ -14,6 +14,7 @@
- #include <linux/kernel.h>
- #include <linux/bitops.h>
- #include <linux/errno.h>
-+#include <linux/cpumask.h>
- #ifdef CONFIG_SMP
-@@ -28,8 +29,8 @@ struct cpuinfo_PPC {
- };
- extern struct cpuinfo_PPC cpu_data[];
--extern unsigned long cpu_online_map;
--extern unsigned long cpu_possible_map;
-+extern cpumask_t cpu_online_map;
-+extern cpumask_t cpu_possible_map;
- extern unsigned long smp_proc_in_lock[];
- extern volatile unsigned long cpu_callin_map[];
- extern int smp_tb_synchronized;
-@@ -45,21 +46,8 @@ extern void smp_local_timer_interrupt(st
- #define smp_processor_id() (current_thread_info()->cpu)
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--#define cpu_possible(cpu) (cpu_possible_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
--      return hweight32(cpu_online_map);
--}
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
--      if (mask & cpu_online_map)
--              return __ffs(mask & cpu_online_map);
--
--      return NR_CPUS;
--}
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_possible_map)
- extern int __cpu_up(unsigned int cpu);
---- linux-2.6.0-test1/include/asm-ppc/uaccess.h        2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-ppc/uaccess.h       2003-07-19 17:03:51.000000000 -0700
-@@ -16,10 +16,13 @@
-  * get_fs() == KERNEL_DS, checking is bypassed.
-  *
-  * For historical reasons, these macros are grossly misnamed.
-+ *
-+ * The fs/ds values are now the highest legal address in the "segment".
-+ * This simplifies the checking in the routines below.
-  */
--#define KERNEL_DS     ((mm_segment_t) { 0 })
--#define USER_DS               ((mm_segment_t) { 1 })
-+#define KERNEL_DS     ((mm_segment_t) { ~0UL })
-+#define USER_DS               ((mm_segment_t) { TASK_SIZE - 1 })
- #define get_ds()      (KERNEL_DS)
- #define get_fs()      (current->thread.fs)
-@@ -27,14 +30,15 @@
- #define segment_eq(a,b)       ((a).seg == (b).seg)
--#define __kernel_ok (segment_eq(get_fs(), KERNEL_DS))
--#define __user_ok(addr,size) (((size) <= TASK_SIZE)&&((addr) <= TASK_SIZE-(size)))
--#define __access_ok(addr,size) (__kernel_ok || __user_ok((addr),(size)))
--#define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size))
-+#define __access_ok(addr,size)                                                    \
-+      ((addr) <= current->thread.fs.seg                                   \
-+       && ((size) == 0 || (size) - 1 <= current->thread.fs.seg - (addr)))
-+
-+#define access_ok(type, addr, size) __access_ok((unsigned long)(addr),(size))
- extern inline int verify_area(int type, const void __user * addr, unsigned long size)
- {
--      return access_ok(type,addr,size) ? 0 : -EFAULT;
-+      return access_ok(type, addr, size) ? 0 : -EFAULT;
- }
-@@ -303,7 +307,7 @@ extern int __strnlen_user(const char __u
-  */
- extern __inline__ int strnlen_user(const char __user *str, long len)
- {
--      unsigned long top = __kernel_ok? ~0UL: TASK_SIZE - 1;
-+      unsigned long top = current->thread.fs.seg;
-       if ((unsigned long)str > top)
-               return 0;
---- linux-2.6.0-test1/include/asm-ppc/unistd.h 2003-06-16 22:32:21.000000000 -0700
-+++ 25/include/asm-ppc/unistd.h        2003-07-19 17:03:51.000000000 -0700
-@@ -253,177 +253,112 @@
- #define __NR_clock_gettime    246
- #define __NR_clock_getres     247
- #define __NR_clock_nanosleep  248
-+#define __NR_swapcontext      249
-+#define __NR_tgkill           250
-+#define __NR_utimes           251
-+#define __NR_statfs64         252
-+#define __NR_fstatfs64                253
--#define __NR_syscalls         249
-+#define __NR_syscalls         254
- #define __NR(n)       #n
--#define __syscall_return(type) \
--      return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0), \
--             (type) __sc_ret
--
--#define __syscall_clobbers \
--      "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
-+/* On powerpc a system call basically clobbers the same registers like a
-+ * function call, with the exception of LR (which is needed for the
-+ * "sc; bnslr" sequence) and CR (where only CR0.SO is clobbered to signal
-+ * an error return status).
-+ */
--#define _syscall0(type,name)                                          \
--type name(void)                                                               \
--{                                                                     \
-+#define __syscall_nr(nr, type, name, args...)                         \
-       unsigned long __sc_ret, __sc_err;                               \
-       {                                                               \
--              register unsigned long __sc_0 __asm__ ("r0");           \
--              register unsigned long __sc_3 __asm__ ("r3");           \
--                                                                      \
--              __sc_0 = __NR_##name;                                   \
--              __asm__ __volatile__                                    \
--                      ("sc           \n\t"                            \
--                       "mfcr %1      "                                \
--                      : "=&r" (__sc_3), "=&r" (__sc_0)                \
--                      : "0"   (__sc_3), "1"   (__sc_0)                \
--                      : __syscall_clobbers);                          \
-+              register unsigned long __sc_0  __asm__ ("r0");          \
-+              register unsigned long __sc_3  __asm__ ("r3");          \
-+              register unsigned long __sc_4  __asm__ ("r4");          \
-+              register unsigned long __sc_5  __asm__ ("r5");          \
-+              register unsigned long __sc_6  __asm__ ("r6");          \
-+              register unsigned long __sc_7  __asm__ ("r7");          \
-+                                                                      \
-+              __sc_loadargs_##nr(name, args);                         \
-+              __asm__ __volatile__                                    \
-+                      ("sc           \n\t"                            \
-+                       "mfcr %0      "                                \
-+                      : "=&r" (__sc_0),                               \
-+                        "=&r" (__sc_3),  "=&r" (__sc_4),              \
-+                        "=&r" (__sc_5),  "=&r" (__sc_6),              \
-+                        "=&r" (__sc_7)                                \
-+                      : __sc_asm_input_##nr                           \
-+                      : "cr0", "ctr", "memory",                       \
-+                        "r8", "r9", "r10","r11", "r12");              \
-               __sc_ret = __sc_3;                                      \
-               __sc_err = __sc_0;                                      \
-       }                                                               \
--      __syscall_return (type);                                        \
-+      if (__sc_err & 0x10000000)                                      \
-+      {                                                               \
-+              errno = __sc_ret;                                       \
-+              __sc_ret = -1;                                          \
-+      }                                                               \
-+      return (type) __sc_ret
-+
-+#define __sc_loadargs_0(name, dummy...)                                       \
-+      __sc_0 = __NR_##name
-+#define __sc_loadargs_1(name, arg1)                                   \
-+      __sc_loadargs_0(name);                                          \
-+      __sc_3 = (unsigned long) (arg1)
-+#define __sc_loadargs_2(name, arg1, arg2)                             \
-+      __sc_loadargs_1(name, arg1);                                    \
-+      __sc_4 = (unsigned long) (arg2)
-+#define __sc_loadargs_3(name, arg1, arg2, arg3)                               \
-+      __sc_loadargs_2(name, arg1, arg2);                              \
-+      __sc_5 = (unsigned long) (arg3)
-+#define __sc_loadargs_4(name, arg1, arg2, arg3, arg4)                 \
-+      __sc_loadargs_3(name, arg1, arg2, arg3);                        \
-+      __sc_6 = (unsigned long) (arg4)
-+#define __sc_loadargs_5(name, arg1, arg2, arg3, arg4, arg5)           \
-+      __sc_loadargs_4(name, arg1, arg2, arg3, arg4);                  \
-+      __sc_7 = (unsigned long) (arg5)
-+
-+#define __sc_asm_input_0 "0" (__sc_0)
-+#define __sc_asm_input_1 __sc_asm_input_0, "1" (__sc_3)
-+#define __sc_asm_input_2 __sc_asm_input_1, "2" (__sc_4)
-+#define __sc_asm_input_3 __sc_asm_input_2, "3" (__sc_5)
-+#define __sc_asm_input_4 __sc_asm_input_3, "4" (__sc_6)
-+#define __sc_asm_input_5 __sc_asm_input_4, "5" (__sc_7)
-+
-+#define _syscall0(type,name)                                          \
-+type name(void)                                                               \
-+{                                                                     \
-+      __syscall_nr(0, type, name);                                    \
- }
- #define _syscall1(type,name,type1,arg1)                                       \
- type name(type1 arg1)                                                 \
- {                                                                     \
--      unsigned long __sc_ret, __sc_err;                               \
--      {                                                               \
--              register unsigned long __sc_0 __asm__ ("r0");           \
--              register unsigned long __sc_3 __asm__ ("r3");           \
--                                                                      \
--              __sc_3 = (unsigned long) (arg1);                        \
--              __sc_0 = __NR_##name;                                   \
--              __asm__ __volatile__                                    \
--                      ("sc           \n\t"                            \
--                       "mfcr %1      "                                \
--                      : "=&r" (__sc_3), "=&r" (__sc_0)                \
--                      : "0"   (__sc_3), "1"   (__sc_0)                \
--                      : __syscall_clobbers);                          \
--              __sc_ret = __sc_3;                                      \
--              __sc_err = __sc_0;                                      \
--      }                                                               \
--      __syscall_return (type);                                        \
-+      __syscall_nr(1, type, name, arg1);                              \
- }
- #define _syscall2(type,name,type1,arg1,type2,arg2)                    \
- type name(type1 arg1, type2 arg2)                                     \
- {                                                                     \
--      unsigned long __sc_ret, __sc_err;                               \
--      {                                                               \
--              register unsigned long __sc_0 __asm__ ("r0");           \
--              register unsigned long __sc_3 __asm__ ("r3");           \
--              register unsigned long __sc_4 __asm__ ("r4");           \
--                                                                      \
--              __sc_3 = (unsigned long) (arg1);                        \
--              __sc_4 = (unsigned long) (arg2);                        \
--              __sc_0 = __NR_##name;                                   \
--              __asm__ __volatile__                                    \
--                      ("sc           \n\t"                            \
--                       "mfcr %1      "                                \
--                      : "=&r" (__sc_3), "=&r" (__sc_0)                \
--                      : "0"   (__sc_3), "1"   (__sc_0),               \
--                        "r"   (__sc_4)                                \
--                      : __syscall_clobbers);                          \
--              __sc_ret = __sc_3;                                      \
--              __sc_err = __sc_0;                                      \
--      }                                                               \
--      __syscall_return (type);                                        \
-+      __syscall_nr(2, type, name, arg1, arg2);                        \
- }
- #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)         \
- type name(type1 arg1, type2 arg2, type3 arg3)                         \
- {                                                                     \
--      unsigned long __sc_ret, __sc_err;                               \
--      {                                                               \
--              register unsigned long __sc_0 __asm__ ("r0");           \
--              register unsigned long __sc_3 __asm__ ("r3");           \
--              register unsigned long __sc_4 __asm__ ("r4");           \
--              register unsigned long __sc_5 __asm__ ("r5");           \
--                                                                      \
--              __sc_3 = (unsigned long) (arg1);                        \
--              __sc_4 = (unsigned long) (arg2);                        \
--              __sc_5 = (unsigned long) (arg3);                        \
--              __sc_0 = __NR_##name;                                   \
--              __asm__ __volatile__                                    \
--                      ("sc           \n\t"                            \
--                       "mfcr %1      "                                \
--                      : "=&r" (__sc_3), "=&r" (__sc_0)                \
--                      : "0"   (__sc_3), "1"   (__sc_0),               \
--                        "r"   (__sc_4),                               \
--                        "r"   (__sc_5)                                \
--                      : __syscall_clobbers);                          \
--              __sc_ret = __sc_3;                                      \
--              __sc_err = __sc_0;                                      \
--      }                                                               \
--      __syscall_return (type);                                        \
-+      __syscall_nr(3, type, name, arg1, arg2, arg3);                  \
- }
- #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
- type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4)             \
- {                                                                     \
--      unsigned long __sc_ret, __sc_err;                               \
--      {                                                               \
--              register unsigned long __sc_0 __asm__ ("r0");           \
--              register unsigned long __sc_3 __asm__ ("r3");           \
--              register unsigned long __sc_4 __asm__ ("r4");           \
--              register unsigned long __sc_5 __asm__ ("r5");           \
--              register unsigned long __sc_6 __asm__ ("r6");           \
--                                                                      \
--              __sc_3 = (unsigned long) (arg1);                        \
--              __sc_4 = (unsigned long) (arg2);                        \
--              __sc_5 = (unsigned long) (arg3);                        \
--              __sc_6 = (unsigned long) (arg4);                        \
--              __sc_0 = __NR_##name;                                   \
--              __asm__ __volatile__                                    \
--                      ("sc           \n\t"                            \
--                       "mfcr %1      "                                \
--                      : "=&r" (__sc_3), "=&r" (__sc_0)                \
--                      : "0"   (__sc_3), "1"   (__sc_0),               \
--                        "r"   (__sc_4),                               \
--                        "r"   (__sc_5),                               \
--                        "r"   (__sc_6)                                \
--                      : __syscall_clobbers);                          \
--              __sc_ret = __sc_3;                                      \
--              __sc_err = __sc_0;                                      \
--      }                                                               \
--      __syscall_return (type);                                        \
-+      __syscall_nr(4, type, name, arg1, arg2, arg3, arg4);            \
- }
- #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
- type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
- {                                                                     \
--      unsigned long __sc_ret, __sc_err;                               \
--      {                                                               \
--              register unsigned long __sc_0 __asm__ ("r0");           \
--              register unsigned long __sc_3 __asm__ ("r3");           \
--              register unsigned long __sc_4 __asm__ ("r4");           \
--              register unsigned long __sc_5 __asm__ ("r5");           \
--              register unsigned long __sc_6 __asm__ ("r6");           \
--              register unsigned long __sc_7 __asm__ ("r7");           \
--                                                                      \
--              __sc_3 = (unsigned long) (arg1);                        \
--              __sc_4 = (unsigned long) (arg2);                        \
--              __sc_5 = (unsigned long) (arg3);                        \
--              __sc_6 = (unsigned long) (arg4);                        \
--              __sc_7 = (unsigned long) (arg5);                        \
--              __sc_0 = __NR_##name;                                   \
--              __asm__ __volatile__                                    \
--                      ("sc           \n\t"                            \
--                       "mfcr %1      "                                \
--                      : "=&r" (__sc_3), "=&r" (__sc_0)                \
--                      : "0"   (__sc_3), "1"   (__sc_0),               \
--                        "r"   (__sc_4),                               \
--                        "r"   (__sc_5),                               \
--                        "r"   (__sc_6),                               \
--                        "r"   (__sc_7)                                \
--                      : __syscall_clobbers);                          \
--              __sc_ret = __sc_3;                                      \
--              __sc_err = __sc_0;                                      \
--      }                                                               \
--      __syscall_return (type);                                        \
-+      __syscall_nr(5, type, name, arg1, arg2, arg3, arg4, arg5);      \
- }
- #ifdef __KERNEL__
---- linux-2.6.0-test1/include/asm-s390/bitops.h        2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-s390/bitops.h       2003-07-19 17:04:07.000000000 -0700
-@@ -505,7 +505,7 @@ static inline int __test_bit(unsigned lo
-       unsigned char ch;
-       addr = (unsigned long) ptr + ((nr ^ (__BITOPS_WORDSIZE - 8)) >> 3);
--      ch = *(unsigned char *) addr;
-+      ch = *(volatile unsigned char *) addr;
-       return (ch >> (nr & 7)) & 1;
- }
---- linux-2.6.0-test1/include/asm-s390/dma.h   2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-s390/dma.h  2003-07-19 17:03:51.000000000 -0700
-@@ -2,8 +2,6 @@
-  *  include/asm-s390/dma.h
-  *
-  *  S390 version
-- *
-- *  This file exists so that an #include <dma.h> doesn't break anything.
-  */
- #ifndef _ASM_DMA_H
---- linux-2.6.0-test1/include/asm-s390/dma-mapping.h   2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-s390/dma-mapping.h  2003-07-19 17:03:51.000000000 -0700
-@@ -1 +1,11 @@
--#include <asm-generic/dma-mapping.h>
-+/*
-+ *  include/asm-s390/dma-mapping.h
-+ *
-+ *  S390 version
-+ *
-+ *  This file exists so that #include <dma-mapping.h> doesn't break anything.
-+ */
-+
-+#ifndef _ASM_DMA_MAPPING_H
-+#define _ASM_DMA_MAPPING_H
-+#endif /* _ASM_DMA_MAPPING_H */
---- linux-2.6.0-test1/include/asm-s390/irq.h   2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-s390/irq.h  2003-07-19 17:03:51.000000000 -0700
-@@ -8,16 +8,13 @@
-  * the definition of irqs has changed in 2.5.46:
-  * NR_IRQS is no longer the number of i/o
-  * interrupts (65536), but rather the number
-- * of interrupt classes (6).
-+ * of interrupt classes (2).
-+ * Only external and i/o interrupts make much sense here (CH).
-  */
- enum interruption_class {
-       EXTERNAL_INTERRUPT,
-       IO_INTERRUPT,
--      MACHINE_CHECK_INTERRUPT,
--      PROGRAM_INTERRUPT,
--      RESTART_INTERRUPT,
--      SUPERVISOR_CALL,
-       NR_IRQS,
- };
---- linux-2.6.0-test1/include/asm-s390/mmu_context.h   2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-s390/mmu_context.h  2003-07-19 17:04:07.000000000 -0700
-@@ -42,7 +42,7 @@ static inline void switch_mm(struct mm_s
-                              : : "m" (pgd) );
- #endif /* __s390x__ */
-         }
--      set_bit(smp_processor_id(), &next->cpu_vm_mask);
-+      cpu_set(smp_processor_id(), next->cpu_vm_mask);
- }
- #define deactivate_mm(tsk,mm) do { } while (0)
---- linux-2.6.0-test1/include/asm-s390/pgalloc.h       2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-s390/pgalloc.h      2003-07-19 17:07:16.000000000 -0700
-@@ -61,12 +61,13 @@ static inline void pgd_free(pgd_t *pgd)
-  * We use pmd cache only on s390x, so these are dummy routines. This
-  * code never triggers because the pgd will always be present.
-  */
--#define pmd_alloc_one(mm,address)       ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm,address)       ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm,addr)   ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x)                     do { } while (0)
- #define __pmd_free_tlb(tlb,x)         do { } while (0)
- #define pgd_populate(mm, pmd, pte)      BUG()
- #else /* __s390x__ */
--static inline pmd_t * pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
-+static inline pmd_t * pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long vmaddr)
- {
-       pmd_t *pmd;
-         int i;
-@@ -79,16 +80,25 @@ static inline pmd_t * pmd_alloc_one(stru
-       return pmd;
- }
--static inline void pmd_free (pmd_t *pmd)
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
- {
--      free_pages((unsigned long) pmd, 2);
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
-+}
-+
-+static inline void pmd_free(struct page *pmd)
-+{
-+      __free_pages(pmd, 2);
- }
- #define __pmd_free_tlb(tlb,pmd) pmd_free(pmd)
--static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
-+static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, struct page *pmd)
- {
--      pgd_val(*pgd) = _PGD_ENTRY | __pa(pmd);
-+      pgd_val(*pgd) = _PGD_ENTRY | __pa(page_address(pmd));
- }
- #endif /* __s390x__ */
---- linux-2.6.0-test1/include/asm-s390/pgtable.h       2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-s390/pgtable.h      2003-07-19 17:07:16.000000000 -0700
-@@ -613,6 +613,7 @@ static inline pte_t mk_pte_phys(unsigned
- /* to find an entry in a page-table-directory */
- #define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
- #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))
-+#define pgd_page(pgd) virt_to_page(pgd_page_kernel(pgd))
- /* to find an entry in a kernel page-table-directory */
- #define pgd_offset_k(address) pgd_offset(&init_mm, address)
-@@ -634,6 +635,12 @@ extern inline pmd_t * pmd_offset(pgd_t *
- #endif /* __s390x__ */
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
-+
- /* Find an entry in the third-level page table.. */
- #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE-1))
- #define pte_offset_kernel(pmd, address) \
---- linux-2.6.0-test1/include/asm-s390/posix_types.h   2003-06-14 12:17:55.000000000 -0700
-+++ 25/include/asm-s390/posix_types.h  2003-07-19 17:06:39.000000000 -0700
-@@ -34,7 +34,9 @@ typedef long long       __kernel_loff_t;
- #ifndef __s390x__
--typedef unsigned short  __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long   __kernel_ino_t;
- typedef unsigned short  __kernel_mode_t;
- typedef unsigned short  __kernel_nlink_t;
-@@ -51,7 +53,9 @@ typedef unsigned short       __kernel_old_dev_
- #else /* __s390x__ */
--typedef unsigned int    __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned int    __kernel_ino_t;
- typedef unsigned int    __kernel_mode_t;
- typedef unsigned int    __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-s390/siginfo.h       2003-06-14 12:18:33.000000000 -0700
-+++ 25/include/asm-s390/siginfo.h      2003-07-19 17:03:51.000000000 -0700
-@@ -10,6 +10,9 @@
- #define _S390_SIGINFO_H
- #define HAVE_ARCH_SI_CODES
-+#ifdef __s390x__
-+#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
-+#endif
- #include <asm-generic/siginfo.h>
---- linux-2.6.0-test1/include/asm-s390/smp.h   2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-s390/smp.h  2003-07-19 17:04:07.000000000 -0700
-@@ -11,6 +11,7 @@
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
- #if defined(__KERNEL__) && defined(CONFIG_SMP) && !defined(__ASSEMBLY__)
-@@ -28,8 +29,8 @@ typedef struct
-       __u16      cpu;
- } sigp_info;
--extern volatile unsigned long cpu_online_map;
--extern volatile unsigned long cpu_possible_map;
-+extern cpumask_t cpu_online_map;
-+extern cpumask_t cpu_possible_map;
- #define NO_PROC_ID            0xFF            /* No processor magic marker */
-@@ -47,25 +48,8 @@ extern volatile unsigned long cpu_possib
- #define smp_processor_id() (current_thread_info()->cpu)
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--#define cpu_possible(cpu) (cpu_possible_map & (1<<(cpu)))
--
--extern inline unsigned int num_online_cpus(void)
--{
--#ifndef __s390x__
--      return hweight32(cpu_online_map);
--#else /* __s390x__ */
--      return hweight64(cpu_online_map);
--#endif /* __s390x__ */
--}
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
--      if (mask & cpu_online_map)
--              return __ffs(mask & cpu_online_map);
--
--      return NR_CPUS;
--}
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_possible_map)
- extern __inline__ __u16 hard_smp_processor_id(void)
- {
---- linux-2.6.0-test1/include/asm-s390/tlbflush.h      2003-06-14 12:18:49.000000000 -0700
-+++ 25/include/asm-s390/tlbflush.h     2003-07-19 17:04:07.000000000 -0700
-@@ -98,13 +98,15 @@ static inline void global_flush_tlb(void
- static inline void __flush_tlb_mm(struct mm_struct * mm)
- {
-+      cpumask_t local_cpumask;
-       preempt_disable();
--      if (mm->cpu_vm_mask != (1UL << smp_processor_id())) {
-+      local_cpumask = cpumask_of_cpu(smp_processor_id());
-+      if (cpus_equal(mm->cpu_vm_mask, local_cpumask)) {
-               /* mm was active on more than one cpu. */
-               if (mm == current->active_mm &&
-                   atomic_read(&mm->mm_users) == 1)
-                       /* this cpu is the only one using the mm. */
--                      mm->cpu_vm_mask = 1UL << smp_processor_id();
-+                      mm->cpu_vm_mask = local_cpumask;
-               global_flush_tlb();
-       } else
-               local_flush_tlb();
---- linux-2.6.0-test1/include/asm-sh/pgalloc.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-sh/pgalloc.h        2003-07-19 17:07:16.000000000 -0700
-@@ -94,7 +94,8 @@ static inline void pte_free(struct page 
-  * inside the pgd, so has no extra memory associated with it.
-  */
--#define pmd_alloc_one(mm, addr)               ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one_kernel(mm, addr)        ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr)               ({ BUG(); ((struct page *)2); })
- #define pmd_free(x)                   do { } while (0)
- #define __pmd_free_tlb(tlb,x)         do { } while (0)
- #define pgd_populate(mm, pmd, pte)    BUG()
---- linux-2.6.0-test1/include/asm-sh/pgtable-2level.h  2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-sh/pgtable-2level.h 2003-07-19 17:07:16.000000000 -0700
-@@ -48,14 +48,21 @@ static inline void pgd_clear (pgd_t * pg
- #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
- #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval)
--#define pgd_page(pgd) \
-+#define __pgd_page(pgd) \
- ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
- static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
- {
-       return (pmd_t *) dir;
- }
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)             pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                do { } while (0)
-+#define pmd_unmap_nested(pmd)                 do { } while (0)
-+
- #define pte_pfn(x)            ((unsigned long)(((x).pte >> PAGE_SHIFT)))
- #define pfn_pte(pfn, prot)    __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
- #define pfn_pmd(pfn, prot)    __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
---- linux-2.6.0-test1/include/asm-sh/posix_types.h     2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-sh/posix_types.h    2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
-  * assume GCC is being used.
-  */
--typedef unsigned short        __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned short        __kernel_mode_t;
- typedef unsigned short        __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-sparc64/atomic.h     2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-sparc64/atomic.h    2003-07-19 17:03:51.000000000 -0700
-@@ -9,25 +9,46 @@
- #define __ARCH_SPARC64_ATOMIC__
- typedef struct { volatile int counter; } atomic_t;
--#define ATOMIC_INIT(i)        { (i) }
-+typedef struct { volatile long counter; } atomic64_t;
-+
-+#define ATOMIC_INIT(i)                { (i) }
-+#define ATOMIC64_INIT(i)      { (i) }
- #define atomic_read(v)                ((v)->counter)
-+#define atomic64_read(v)      ((v)->counter)
-+
- #define atomic_set(v, i)      (((v)->counter) = i)
-+#define atomic64_set(v, i)    (((v)->counter) = i)
- extern int __atomic_add(int, atomic_t *);
-+extern int __atomic64_add(int, atomic64_t *);
-+
- extern int __atomic_sub(int, atomic_t *);
-+extern int __atomic64_sub(int, atomic64_t *);
- #define atomic_add(i, v) ((void)__atomic_add(i, v))
-+#define atomic64_add(i, v) ((void)__atomic64_add(i, v))
-+
- #define atomic_sub(i, v) ((void)__atomic_sub(i, v))
-+#define atomic64_sub(i, v) ((void)__atomic64_sub(i, v))
- #define atomic_dec_return(v) __atomic_sub(1, v)
-+#define atomic64_dec_return(v) __atomic64_sub(1, v)
-+
- #define atomic_inc_return(v) __atomic_add(1, v)
-+#define atomic64_inc_return(v) __atomic64_add(1, v)
- #define atomic_sub_and_test(i, v) (__atomic_sub(i, v) == 0)
-+#define atomic64_sub_and_test(i, v) (__atomic64_sub(i, v) == 0)
-+
- #define atomic_dec_and_test(v) (__atomic_sub(1, v) == 0)
-+#define atomic64_dec_and_test(v) (__atomic64_sub(1, v) == 0)
- #define atomic_inc(v) ((void)__atomic_add(1, v))
-+#define atomic64_inc(v) ((void)__atomic64_add(1, v))
-+
- #define atomic_dec(v) ((void)__atomic_sub(1, v))
-+#define atomic64_dec(v) ((void)__atomic64_sub(1, v))
- /* Atomic operations are already serializing */
- #define smp_mb__before_atomic_dec()   barrier()
---- linux-2.6.0-test1/include/asm-sparc64/bitops.h     2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-sparc64/bitops.h    2003-07-19 17:04:07.000000000 -0700
-@@ -156,6 +156,14 @@ static __inline__ int ffs(int x)
- #ifdef ULTRA_HAS_POPULATION_COUNT
-+static __inline__ unsigned int hweight64(unsigned long w)
-+{
-+      unsigned int res;
-+
-+      __asm__ ("popc %1,%0" : "=r" (res) : "r" (w));
-+      return res;
-+}
-+
- static __inline__ unsigned int hweight32(unsigned int w)
- {
-       unsigned int res;
-@@ -182,6 +190,7 @@ static __inline__ unsigned int hweight8(
- #else
-+#define hweight64(x) generic_hweight64(x)
- #define hweight32(x) generic_hweight32(x)
- #define hweight16(x) generic_hweight16(x)
- #define hweight8(x) generic_hweight8(x)
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-sparc64/local.h     2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,40 @@
-+#ifndef _ARCH_SPARC64_LOCAL_H
-+#define _ARCH_SPARC64_LOCAL_H
-+
-+#include <linux/percpu.h>
-+#include <asm/atomic.h>
-+
-+typedef atomic64_t local_t;
-+
-+#define LOCAL_INIT(i) ATOMIC64_INIT(i)
-+#define local_read(v) atomic64_read(v)
-+#define local_set(v,i)        atomic64_set(v,i)
-+
-+#define local_inc(v)  atomic64_inc(v)
-+#define local_dec(v)  atomic64_inc(v)
-+#define local_add(i, v)       atomic64_add(i, v)
-+#define local_sub(i, v)       atomic64_sub(i, v)
-+
-+#define __local_inc(v)                ((v)->counter++)
-+#define __local_dec(v)                ((v)->counter++)
-+#define __local_add(i,v)      ((v)->counter+=(i))
-+#define __local_sub(i,v)      ((v)->counter-=(i))
-+
-+/* Use these for per-cpu local_t variables: on some archs they are
-+ * much more efficient than these naive implementations.  Note they take
-+ * a variable, not an address.
-+ */
-+#define cpu_local_read(v)     local_read(&__get_cpu_var(v))
-+#define cpu_local_set(v, i)   local_set(&__get_cpu_var(v), (i))
-+
-+#define cpu_local_inc(v)      local_inc(&__get_cpu_var(v))
-+#define cpu_local_dec(v)      local_dec(&__get_cpu_var(v))
-+#define cpu_local_add(i, v)   local_add((i), &__get_cpu_var(v))
-+#define cpu_local_sub(i, v)   local_sub((i), &__get_cpu_var(v))
-+
-+#define __cpu_local_inc(v)    __local_inc(&__get_cpu_var(v))
-+#define __cpu_local_dec(v)    __local_dec(&__get_cpu_var(v))
-+#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v))
-+#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v))
-+
-+#endif /* _ARCH_SPARC64_LOCAL_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-sparc64/lockmeter.h 2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright (C) 2000 Anton Blanchard (anton@linuxcare.com)
-+ */
-+
-+#ifndef _SPARC64_LOCKMETER_H
-+#define _SPARC64_LOCKMETER_H
-+
-+#include <asm/spinlock.h>
-+
-+#include <linux/version.h>
-+
-+extern unsigned long cpu_hz;
-+#define CPU_CYCLE_FREQUENCY   cpu_hz
-+
-+#define THIS_CPU_NUMBER               __cpu_number_map[smp_processor_id()]
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-+#define local_irq_save(x)     __save_and_cli(x)
-+#define local_irq_restore(x)  __restore_flags(x)
-+#endif /* Linux version 2.2.x */
-+
-+#define PUT_INDEX(lock_ptr,indexv)    (lock_ptr)->index = (indexv)
-+#define GET_INDEX(lock_ptr)           (lock_ptr)->index
-+
-+#define PUT_RWINDEX(rwlock_ptr,indexv) (rwlock_ptr)->index = (indexv)
-+#define GET_RWINDEX(rwlock_ptr)        (rwlock_ptr)->index
-+#define PUT_RW_CPU(rwlock_ptr,cpuv)    (rwlock_ptr)->cpu = (cpuv)
-+#define GET_RW_CPU(rwlock_ptr)         (rwlock_ptr)->cpu
-+
-+#define RWLOCK_READERS(rwlock_ptr)    rwlock_readers(rwlock_ptr)
-+
-+extern inline int rwlock_readers(rwlock_t *rwlock_ptr)
-+{
-+      signed int tmp = rwlock_ptr->lock;
-+
-+      if (tmp > 0)
-+              return tmp;
-+      else
-+              return 0;
-+}
-+
-+#define RWLOCK_IS_WRITE_LOCKED(rwlock_ptr)    ((signed int)((rwlock_ptr)->lock) < 0)
-+#define RWLOCK_IS_READ_LOCKED(rwlock_ptr)     ((signed int)((rwlock_ptr)->lock) > 0)
-+
-+#define get_cycles64()        get_cycles()
-+
-+#endif /* _SPARC64_LOCKMETER_H */
---- linux-2.6.0-test1/include/asm-sparc64/mmu_context.h        2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/asm-sparc64/mmu_context.h       2003-07-19 17:04:07.000000000 -0700
-@@ -125,7 +125,7 @@ static inline void switch_mm(struct mm_s
-       }
-       {
--              unsigned long vm_mask = (1UL << smp_processor_id());
-+              int cpu = smp_processor_id();
-               /* Even if (mm == old_mm) we _must_ check
-                * the cpu_vm_mask.  If we do not we could
-@@ -133,8 +133,8 @@ static inline void switch_mm(struct mm_s
-                * smp_flush_tlb_{page,range,mm} on sparc64
-                * and lazy tlb switches work. -DaveM
-                */
--              if (!ctx_valid || !(mm->cpu_vm_mask & vm_mask)) {
--                      mm->cpu_vm_mask |= vm_mask;
-+              if (!ctx_valid || !cpu_isset(cpu, mm->cpu_vm_mask)) {
-+                      cpu_set(cpu, mm->cpu_vm_mask);
-                       __flush_tlb_mm(CTX_HWBITS(mm->context), SECONDARY_CONTEXT);
-               }
-       }
-@@ -148,14 +148,14 @@ extern void __flush_tlb_mm(unsigned long
- /* Activate a new MM instance for the current task. */
- static inline void activate_mm(struct mm_struct *active_mm, struct mm_struct *mm)
- {
--      unsigned long vm_mask;
-+      int cpu;
-       spin_lock(&mm->page_table_lock);
-       if (!CTX_VALID(mm->context))
-               get_new_mmu_context(mm);
--      vm_mask = (1UL << smp_processor_id());
--      if (!(mm->cpu_vm_mask & vm_mask))
--              mm->cpu_vm_mask |= vm_mask;
-+      cpu = smp_processor_id();
-+      if (!cpu_isset(cpu, mm->cpu_vm_mask))
-+              cpu_set(cpu, mm->cpu_vm_mask);
-       spin_unlock(&mm->page_table_lock);
-       load_secondary_context(mm);
---- linux-2.6.0-test1/include/asm-sparc64/pgalloc.h    2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-sparc64/pgalloc.h   2003-07-19 17:07:16.000000000 -0700
-@@ -132,7 +132,7 @@ static __inline__ void free_pgd_slow(pgd
- #define DCACHE_COLOR(address)         0
- #endif
--#define pgd_populate(MM, PGD, PMD)    pgd_set(PGD, PMD)
-+#define pgd_populate(MM, PGD, PMD)    pgd_set(PGD, page_address(PMD))
- static __inline__ pmd_t *pmd_alloc_one_fast(struct mm_struct *mm, unsigned long address)
- {
-@@ -153,7 +153,7 @@ static __inline__ pmd_t *pmd_alloc_one_f
-       return (pmd_t *)ret;
- }
--static __inline__ pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
-+static __inline__ pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
- {
-       pmd_t *pmd;
-@@ -166,6 +166,15 @@ static __inline__ pmd_t *pmd_alloc_one(s
-       return pmd;
- }
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
-+}
-+
- static __inline__ void free_pmd_fast(pmd_t *pmd)
- {
-       unsigned long color = DCACHE_COLOR((unsigned long)pmd);
-@@ -222,7 +231,7 @@ static __inline__ void free_pte_slow(pte
- #define pte_free_kernel(pte)  free_pte_fast(pte)
- #define pte_free(pte)         free_pte_fast(page_address(pte))
--#define pmd_free(pmd)         free_pmd_fast(pmd)
-+#define pmd_free(pmd)         free_pmd_fast(page_address(pmd))
- #define pgd_free(pgd)         free_pgd_fast(pgd)
- #define pgd_alloc(mm)         get_pgd_fast()
---- linux-2.6.0-test1/include/asm-sparc64/pgtable.h    2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-sparc64/pgtable.h   2003-07-19 17:07:16.000000000 -0700
-@@ -228,7 +228,8 @@ static inline pte_t pte_modify(pte_t ori
-       (pgd_val(*(pgdp)) = (__pa((unsigned long) (pmdp)) >> 11UL))
- #define __pmd_page(pmd)                       ((unsigned long) __va((pmd_val(pmd)<<11UL)))
- #define pmd_page(pmd)                         virt_to_page((void *)__pmd_page(pmd))
--#define pgd_page(pgd)                 ((unsigned long) __va((pgd_val(pgd)<<11UL)))
-+#define __pgd_page(pgd)                       ((unsigned long) __va((pgd_val(pgd)<<11UL)))
-+#define pgd_page(pgd)                 virt_to_page(__pgd_page(pgd))
- #define pte_none(pte)                         (!pte_val(pte))
- #define pte_present(pte)              (pte_val(pte) & _PAGE_PRESENT)
- #define pte_clear(pte)                        (pte_val(*(pte)) = 0UL)
-@@ -270,8 +271,13 @@ static inline pte_t pte_modify(pte_t ori
- #define pgd_offset_k(address) pgd_offset(&init_mm, address)
- /* Find an entry in the second-level page table.. */
--#define pmd_offset(dir, address)      ((pmd_t *) pgd_page(*(dir)) + \
-+#define pmd_offset(dir, address)      ((pmd_t *)__pgd_page(*(dir)) + \
-                                       ((address >> PMD_SHIFT) & (REAL_PTRS_PER_PMD-1)))
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
- /* Find an entry in the third-level page table.. */
- #define pte_index(dir, address)       ((pte_t *) __pmd_page(*(dir)) + \
---- linux-2.6.0-test1/include/asm-sparc64/posix_types.h        2003-06-14 12:18:32.000000000 -0700
-+++ 25/include/asm-sparc64/posix_types.h       2003-07-19 17:06:39.000000000 -0700
-@@ -16,7 +16,9 @@ typedef int                    __kernel_
- typedef int                    __kernel_ipc_pid_t;
- typedef unsigned int           __kernel_uid_t;
- typedef unsigned int           __kernel_gid_t;
--typedef unsigned int           __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned long          __kernel_ino_t;
- typedef unsigned int           __kernel_mode_t;
- typedef unsigned short         __kernel_umode_t;
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-sparc64/sections.h  2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,7 @@
-+#ifndef _SPARC64_SECTIONS_H
-+#define _SPARC64_SECTIONS_H
-+
-+/* nothing to see, move along */
-+#include <asm-generic/sections.h>
-+
-+#endif
---- linux-2.6.0-test1/include/asm-sparc64/smp.h        2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-sparc64/smp.h       2003-07-19 17:04:07.000000000 -0700
-@@ -14,6 +14,7 @@
- #ifndef __ASSEMBLY__
-+#include <linux/cpumask.h>
- #include <linux/cache.h>
- /* PROM provided per-processor information we need
-@@ -68,25 +69,14 @@ extern cpuinfo_sparc cpu_data[NR_CPUS];
- extern unsigned char boot_cpu_id;
--extern unsigned long phys_cpu_present_map;
--#define cpu_possible(cpu)     (phys_cpu_present_map & (1UL << (cpu)))
-+extern cpumask_t phys_cpu_present_map;
-+#define cpu_possible(cpu)     cpu_isset(cpu, phys_cpu_present_map)
--extern unsigned long cpu_online_map;
--#define cpu_online(cpu)               (cpu_online_map & (1UL << (cpu)))
--
--extern atomic_t sparc64_num_cpus_online;
--#define num_online_cpus()     (atomic_read(&sparc64_num_cpus_online))
-+#define cpu_online(cpu)               cpu_isset(cpu, cpu_online_map)
- extern atomic_t sparc64_num_cpus_possible;
- #define num_possible_cpus()   (atomic_read(&sparc64_num_cpus_possible))
--static inline unsigned int any_online_cpu(unsigned long mask)
--{
--      if ((mask &= cpu_online_map) != 0UL)
--              return __ffs(mask);
--      return NR_CPUS;
--}
--
- /*
-  *    General functions that each host system must provide.
-  */
---- linux-2.6.0-test1/include/asm-sparc64/spinlock.h   2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/asm-sparc64/spinlock.h  2003-07-19 17:06:40.000000000 -0700
-@@ -30,15 +30,23 @@
- #ifndef CONFIG_DEBUG_SPINLOCK
--typedef unsigned char spinlock_t;
--#define SPIN_LOCK_UNLOCKED    0
-+typedef struct {
-+      unsigned char lock;
-+      unsigned int  index;
-+} spinlock_t;
--#define spin_lock_init(lock)  (*((unsigned char *)(lock)) = 0)
--#define spin_is_locked(lock)  (*((volatile unsigned char *)(lock)) != 0)
-+#ifdef CONFIG_LOCKMETER
-+#define SPIN_LOCK_UNLOCKED    (spinlock_t) {0, 0}
-+#else
-+#define SPIN_LOCK_UNLOCKED    (spinlock_t) { 0 }
-+#endif
--#define spin_unlock_wait(lock)        \
-+#define spin_lock_init(__lock)        do { *(__lock) = SPIN_LOCK_UNLOCKED; } while(0)
-+#define spin_is_locked(__lock)        (*((volatile unsigned char *)(&((__lock)->lock))) != 0)
-+
-+#define spin_unlock_wait(__lock)      \
- do {  membar("#LoadLoad");    \
--} while(*((volatile unsigned char *)lock))
-+} while(*((volatile unsigned char *)(&(((spinlock_t *)__lock)->lock))))
- static __inline__ void _raw_spin_lock(spinlock_t *lock)
- {
-@@ -109,8 +117,20 @@ extern int _spin_trylock (spinlock_t *lo
- #ifndef CONFIG_DEBUG_SPINLOCK
--typedef unsigned int rwlock_t;
--#define RW_LOCK_UNLOCKED      0
-+#ifdef CONFIG_LOCKMETER
-+typedef struct {
-+      unsigned int lock;
-+      unsigned int index;
-+      unsigned int cpu;
-+} rwlock_t;
-+#define RW_LOCK_UNLOCKED       (rwlock_t) { 0, 0, 0xff }
-+#else
-+typedef struct {
-+      unsigned int lock;
-+} rwlock_t;
-+#define RW_LOCK_UNLOCKED        (rwlock_t) { 0 }
-+#endif
-+
- #define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0)
- #define rwlock_is_locked(x) (*(x) != RW_LOCK_UNLOCKED)
---- linux-2.6.0-test1/include/asm-sparc/pgalloc.h      2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/asm-sparc/pgalloc.h     2003-07-19 17:07:16.000000000 -0700
-@@ -38,15 +38,24 @@ BTFIXUPDEF_CALL(void, free_pgd_fast, pgd
- BTFIXUPDEF_CALL(void, pgd_set, pgd_t *, pmd_t *)
- #define pgd_set(pgdp,pmdp) BTFIXUP_CALL(pgd_set)(pgdp,pmdp)
--#define pgd_populate(MM, PGD, PMD)      pgd_set(PGD, PMD)
-+#define pgd_populate(MM, PGD, PMD)      pgd_set(PGD, page_address(PMD))
--BTFIXUPDEF_CALL(pmd_t *, pmd_alloc_one, struct mm_struct *, unsigned long)
--#define pmd_alloc_one(mm, address)    BTFIXUP_CALL(pmd_alloc_one)(mm, address)
-+BTFIXUPDEF_CALL(pmd_t *, __pmd_alloc_one, struct mm_struct *, unsigned long)
-+#define pmd_alloc_one_kernel(mm, address) BTFIXUP_CALL(__pmd_alloc_one)(mm, address)
-+
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
-+}
- BTFIXUPDEF_CALL(void, free_pmd_fast, pmd_t *)
- #define free_pmd_fast(pmd)    BTFIXUP_CALL(free_pmd_fast)(pmd)
--#define pmd_free(pmd)           free_pmd_fast(pmd)
-+#define pmd_free(pmd)           free_pmd_fast(page_address(pmd))
- #define __pmd_free_tlb(tlb, pmd) pmd_free(pmd)
- BTFIXUPDEF_CALL(void, pmd_populate, pmd_t *, struct page *)
---- linux-2.6.0-test1/include/asm-sparc/pgtable.h      2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-sparc/pgtable.h     2003-07-19 17:07:16.000000000 -0700
-@@ -202,10 +202,11 @@ extern unsigned long empty_zero_page;
- /*
-  */
- BTFIXUPDEF_CALL_CONST(struct page *, pmd_page, pmd_t)
--BTFIXUPDEF_CALL_CONST(unsigned long, pgd_page, pgd_t)
-+BTFIXUPDEF_CALL_CONST(unsigned long, __pgd_page, pgd_t)
- #define pmd_page(pmd) BTFIXUP_CALL(pmd_page)(pmd)
--#define pgd_page(pgd) BTFIXUP_CALL(pgd_page)(pgd)
-+#define __pgd_page(pgd) BTFIXUP_CALL(__pgd_page)(pgd)
-+#define pgd_page(pgd) virt_to_page(__pgd_page(pgd))
- BTFIXUPDEF_SETHI(none_mask)
- BTFIXUPDEF_CALL_CONST(int, pte_present, pte_t)
-@@ -352,6 +353,11 @@ extern __inline__ pte_t pte_modify(pte_t
- /* Find an entry in the second-level page table.. */
- BTFIXUPDEF_CALL(pmd_t *, pmd_offset, pgd_t *, unsigned long)
- #define pmd_offset(dir,addr) BTFIXUP_CALL(pmd_offset)(dir,addr)
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
- /* Find an entry in the third-level page table.. */ 
- BTFIXUPDEF_CALL(pte_t *, pte_offset_kernel, pmd_t *, unsigned long)
---- linux-2.6.0-test1/include/asm-sparc/posix_types.h  2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-sparc/posix_types.h 2003-07-19 17:06:39.000000000 -0700
-@@ -17,7 +17,9 @@ typedef int                    __kernel_
- typedef unsigned short         __kernel_ipc_pid_t;
- typedef unsigned short         __kernel_uid_t;
- typedef unsigned short         __kernel_gid_t;
--typedef unsigned short         __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long          __kernel_ino_t;
- typedef unsigned short         __kernel_mode_t;
- typedef unsigned short         __kernel_umode_t;
---- linux-2.6.0-test1/include/asm-sparc/smp.h  2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-sparc/smp.h 2003-07-19 17:04:07.000000000 -0700
-@@ -8,6 +8,7 @@
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <asm/head.h>
- #include <asm/btfixup.h>
---- linux-2.6.0-test1/include/asm-um/pgalloc.h 2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-um/pgalloc.h        2003-07-19 17:07:16.000000000 -0700
-@@ -42,7 +42,8 @@ static inline void pte_free(struct page 
-  * inside the pgd, so has no extra memory associated with it.
-  */
--#define pmd_alloc_one(mm, addr)               ({ BUG(); ((pmd_t *)2); })
-+#define pmd_alloc_one(mm, addr)               ({ BUG(); ((struct page *)2); })
-+#define pmd_alloc_one_kernel(mm, addr)        ({ BUG(); ((pmd_t *)2); })
- #define pmd_free(x)                   do { } while (0)
- #define __pmd_free_tlb(tlb,x)         do { } while (0)
- #define pgd_populate(mm, pmd, pte)    BUG()
---- linux-2.6.0-test1/include/asm-um/pgtable.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-um/pgtable.h        2003-07-19 17:07:16.000000000 -0700
-@@ -374,6 +374,12 @@ static inline pmd_t * pmd_offset(pgd_t *
-       return (pmd_t *) dir;
- }
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pgd, addr)                          do { } while (0)
-+#define pmd_unmap_nested(pgd, addr)                   do { } while (0)
-+
- /* Find an entry in the third-level page table.. */ 
- #define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
- #define pte_offset_kernel(dir, address) \
---- linux-2.6.0-test1/include/asm-um/smp.h     2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-um/smp.h    2003-07-19 17:04:07.000000000 -0700
-@@ -1,13 +1,14 @@
- #ifndef __UM_SMP_H
- #define __UM_SMP_H
--extern unsigned long cpu_online_map;
--
- #ifdef CONFIG_SMP
- #include "linux/config.h"
- #include "linux/bitops.h"
- #include "asm/current.h"
-+#include "linux/cpumask.h"
-+
-+extern cpumask_t cpu_online_map;
- #define smp_processor_id() (current->thread_info->cpu)
- #define cpu_logical_map(n) (n)
-@@ -16,16 +17,11 @@ extern unsigned long cpu_online_map;
- extern int hard_smp_processor_id(void);
- #define NO_PROC_ID -1
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
- extern int ncpus;
- #define cpu_possible(cpu) (cpu < ncpus)
--extern inline unsigned int num_online_cpus(void)
--{
--      return(hweight32(cpu_online_map));
--}
--
- extern inline void smp_cpus_done(unsigned int maxcpus)
- {
- }
---- linux-2.6.0-test1/include/asm-v850/anna.h  2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/asm-v850/anna.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * include/asm-v850/anna.h -- Anna V850E2 evaluation cpu chip/board
-  *
-- *  Copyright (C) 2001,2002  NEC Corporation
-- *  Copyright (C) 2001,2002  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -14,8 +14,9 @@
- #ifndef __V850_ANNA_H__
- #define __V850_ANNA_H__
-+#include <asm/v850e2.h>               /* Based on V850E2 core.  */
-+
--#define CPU_ARCH      "v850e2"
- #define CPU_MODEL     "v850e2/anna"
- #define CPU_MODEL_LONG        "NEC V850E2/Anna"
- #define PLATFORM      "anna"
-@@ -48,30 +49,6 @@
- /* Anna specific control registers.  */
--#define ANNA_CSC_ADDR(n)              (0xFFFFF060 + (n) * 2)
--#define ANNA_CSC(n)                   (*(volatile u16 *)ANNA_CSC_ADDR(n))
--#define ANNA_BPC_ADDR                 0xFFFFF064
--#define ANNA_BPC                      (*(volatile u16 *)ANNA_BPC_ADDR)
--#define ANNA_BSC_ADDR                 0xFFFFF066
--#define ANNA_BSC                      (*(volatile u16 *)ANNA_BSC_ADDR)
--#define ANNA_BEC_ADDR                 0xFFFFF068
--#define ANNA_BEC                      (*(volatile u16 *)ANNA_BEC_ADDR)
--#define ANNA_BHC_ADDR                 0xFFFFF06A
--#define ANNA_BHC                      (*(volatile u16 *)ANNA_BHC_ADDR)
--#define ANNA_BCT_ADDR(n)              (0xFFFFF480 + (n) * 2)
--#define ANNA_BCT(n)                   (*(volatile u16 *)ANNA_BCT_ADDR(n))
--#define ANNA_DWC_ADDR(n)              (0xFFFFF484 + (n) * 2)
--#define ANNA_DWC(n)                   (*(volatile u16 *)ANNA_DWC_ADDR(n))
--#define ANNA_BCC_ADDR                 0xFFFFF488
--#define ANNA_BCC                      (*(volatile u16 *)ANNA_BCC_ADDR)
--#define ANNA_ASC_ADDR                 0xFFFFF48A
--#define ANNA_ASC                      (*(volatile u16 *)ANNA_ASC_ADDR)
--#define ANNA_LBS_ADDR                 0xFFFFF48E
--#define ANNA_LBS                      (*(volatile u16 *)ANNA_LBS_ADDR)
--#define ANNA_SCR3_ADDR                        0xFFFFF4AC
--#define ANNA_SCR3                     (*(volatile u16 *)ANNA_SCR3_ADDR)
--#define ANNA_RFS3_ADDR                        0xFFFFF4AE
--#define ANNA_RFS3                     (*(volatile u16 *)ANNA_RFS3_ADDR)
- #define ANNA_ILBEN_ADDR                       0xFFFFF7F2
- #define ANNA_ILBEN                    (*(volatile u16 *)ANNA_ILBEN_ADDR)
-@@ -85,9 +62,6 @@
- #define ANNA_PORT_PM(n)                       (*(volatile u8 *)ANNA_PORT_PM_ADDR(n))
--/* NB85E-style interrupt system.  */
--#include <asm/nb85e_intc.h>
--
- /* Hardware-specific interrupt numbers (in the kernel IRQ namespace).  */
- #define IRQ_INTP(n)   (n)     /* Pnnn (pin) interrupts 0-15 */
- #define IRQ_INTP_NUM  16
-@@ -116,12 +90,15 @@ extern void anna_init_irqs (void);
- /* Anna UART details (basically the same as the V850E/MA1, but 2 channels).  */
--#define NB85E_UART_NUM_CHANNELS               2
--#define NB85E_UART_BASE_FREQ          (SYS_CLOCK_FREQ / 2)
--#define NB85E_UART_CHIP_NAME          "V850E2/NA85E2A"
-+#define V850E_UART_NUM_CHANNELS               2
-+#define V850E_UART_BASE_FREQ          (SYS_CLOCK_FREQ / 2)
-+#define V850E_UART_CHIP_NAME          "V850E2/NA85E2A"
-+
-+/* This is the UART channel that's actually connected on the board.  */
-+#define V850E_UART_CONSOLE_CHANNEL    1
- /* This is a function that gets called before configuring the UART.  */
--#define NB85E_UART_PRE_CONFIGURE      anna_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE      anna_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void anna_uart_pre_configure (unsigned chan,
-                                    unsigned cflags, unsigned baud);
-@@ -130,9 +107,9 @@ extern void anna_uart_pre_configure (uns
- /* This board supports RTS/CTS for the on-chip UART, but only for channel 1. */
- /* CTS for UART channel 1 is pin P37 (bit 7 of port 3).  */
--#define NB85E_UART_CTS(chan)  ((chan) == 1 ? !(ANNA_PORT_IO(3) & 0x80) : 1)
-+#define V850E_UART_CTS(chan)  ((chan) == 1 ? !(ANNA_PORT_IO(3) & 0x80) : 1)
- /* RTS for UART channel 1 is pin P07 (bit 7 of port 0).  */
--#define NB85E_UART_SET_RTS(chan, val)                                       \
-+#define V850E_UART_SET_RTS(chan, val)                                       \
-    do {                                                                             \
-          if (chan == 1) {                                                   \
-                  unsigned old = ANNA_PORT_IO(0);                            \
-@@ -145,16 +122,16 @@ extern void anna_uart_pre_configure (uns
- /* Timer C details.  */
--#define NB85E_TIMER_C_BASE_ADDR               0xFFFFF600
-+#define V850E_TIMER_C_BASE_ADDR               0xFFFFF600
- /* Timer D details (the Anna actually has 5 of these; should change later). */
--#define NB85E_TIMER_D_BASE_ADDR               0xFFFFF540
--#define NB85E_TIMER_D_TMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_CMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x2)
--#define NB85E_TIMER_D_TMCD_BASE_ADDR  (NB85E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_BASE_ADDR               0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR  (V850E_TIMER_D_BASE_ADDR + 0x4)
--#define NB85E_TIMER_D_BASE_FREQ               SYS_CLOCK_FREQ
--#define NB85E_TIMER_D_TMCD_CS_MIN     1 /* min 2^1 divider */
-+#define V850E_TIMER_D_BASE_FREQ               SYS_CLOCK_FREQ
-+#define V850E_TIMER_D_TMCD_CS_MIN     1 /* min 2^1 divider */
- /* For <asm/param.h> */
---- linux-2.6.0-test1/include/asm-v850/as85ep1.h       2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-v850/as85ep1.h      2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * include/asm-v850/as85ep1.h -- AS85EP1 evaluation CPU chip/board
-  *
-- *  Copyright (C) 2001,2002  NEC Corporation
-- *  Copyright (C) 2001,2002  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -14,8 +14,9 @@
- #ifndef __V850_AS85EP1_H__
- #define __V850_AS85EP1_H__
-+#include <asm/v850e.h>
-+
--#define CPU_ARCH      "v850e"
- #define CPU_MODEL     "as85ep1"
- #define CPU_MODEL_LONG        "NEC V850E/AS85EP1"
- #define PLATFORM      "AS85EP1"
-@@ -86,9 +87,6 @@
- #define AS85EP1_PORT_PMC(n)   (*(volatile u8 *)AS85EP1_PORT_PMC_ADDR(n))
--/* NB85E-style interrupt system.  */
--#include <asm/nb85e_intc.h>
--
- /* Hardware-specific interrupt numbers (in the kernel IRQ namespace).  */
- #define IRQ_INTCCC(n) (0x0C + (n))
- #define IRQ_INTCCC_NUM        8
-@@ -110,12 +108,12 @@ extern void as85ep1_init_irqs (void);
- /* AS85EP1 UART details (basically the same as the V850E/MA1, but 2 channels).  */
--#define NB85E_UART_NUM_CHANNELS               2
--#define NB85E_UART_BASE_FREQ          (SYS_CLOCK_FREQ / 4)
--#define NB85E_UART_CHIP_NAME          "V850E/NA85E"
-+#define V850E_UART_NUM_CHANNELS               2
-+#define V850E_UART_BASE_FREQ          (SYS_CLOCK_FREQ / 4)
-+#define V850E_UART_CHIP_NAME          "V850E/NA85E"
- /* This is a function that gets called before configuring the UART.  */
--#define NB85E_UART_PRE_CONFIGURE      as85ep1_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE      as85ep1_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void as85ep1_uart_pre_configure (unsigned chan,
-                                       unsigned cflags, unsigned baud);
-@@ -124,9 +122,9 @@ extern void as85ep1_uart_pre_configure (
- /* This board supports RTS/CTS for the on-chip UART, but only for channel 1. */
- /* CTS for UART channel 1 is pin P54 (bit 4 of port 5).  */
--#define NB85E_UART_CTS(chan)   ((chan) == 1 ? !(AS85EP1_PORT_IO(5) & 0x10) : 1)
-+#define V850E_UART_CTS(chan)   ((chan) == 1 ? !(AS85EP1_PORT_IO(5) & 0x10) : 1)
- /* RTS for UART channel 1 is pin P53 (bit 3 of port 5).  */
--#define NB85E_UART_SET_RTS(chan, val)                                       \
-+#define V850E_UART_SET_RTS(chan, val)                                       \
-    do {                                                                             \
-          if (chan == 1) {                                                   \
-                  unsigned old = AS85EP1_PORT_IO(5);                         \
-@@ -139,16 +137,16 @@ extern void as85ep1_uart_pre_configure (
- /* Timer C details.  */
--#define NB85E_TIMER_C_BASE_ADDR               0xFFFFF600
-+#define V850E_TIMER_C_BASE_ADDR               0xFFFFF600
- /* Timer D details (the AS85EP1 actually has 5 of these; should change later). */
--#define NB85E_TIMER_D_BASE_ADDR               0xFFFFF540
--#define NB85E_TIMER_D_TMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_CMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x2)
--#define NB85E_TIMER_D_TMCD_BASE_ADDR  (NB85E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_BASE_ADDR               0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR  (V850E_TIMER_D_BASE_ADDR + 0x4)
--#define NB85E_TIMER_D_BASE_FREQ               SYS_CLOCK_FREQ
--#define NB85E_TIMER_D_TMCD_CS_MIN     2 /* min 2^2 divider */
-+#define V850E_TIMER_D_BASE_FREQ               SYS_CLOCK_FREQ
-+#define V850E_TIMER_D_TMCD_CS_MIN     2 /* min 2^2 divider */
- /* For <asm/param.h> */
---- linux-2.6.0-test1/include/asm-v850/asm.h   2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-v850/asm.h  2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * include/asm-v850/asm.h -- Macros for writing assembly code
-  *
-- *  Copyright (C) 2001,02,03  NEC Corporation
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-  *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/cacheflush.h    2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/asm-v850/cacheflush.h   2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * include/asm-v850/cacheflush.h
-  *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -21,21 +21,40 @@
- #include <asm/machdep.h>
--#ifndef flush_cache_all
--/* If there's no flush_cache_all macro defined by <asm/machdep.h>, then
--   this processor has no cache, so just define these as nops.  */
--
-+/* The following are all used by the kernel in ways that only affect
-+   systems with MMUs, so we don't need them.  */
- #define flush_cache_all()                     ((void)0)
- #define flush_cache_mm(mm)                    ((void)0)
- #define flush_cache_range(vma, start, end)    ((void)0)
- #define flush_cache_page(vma, vmaddr)         ((void)0)
- #define flush_dcache_page(page)                       ((void)0)
-+
-+#ifdef CONFIG_NO_CACHE
-+
-+/* Some systems have no cache at all, in which case we don't need these
-+   either.  */
- #define flush_icache()                                ((void)0)
- #define flush_icache_range(start, end)                ((void)0)
- #define flush_icache_page(vma,pg)             ((void)0)
- #define flush_icache_user_range(vma,pg,adr,len)       ((void)0)
- #define flush_cache_sigtramp(vaddr)           ((void)0)
--#endif /* !flush_cache_all */
-+#else /* !CONFIG_NO_CACHE */
-+
-+struct page;
-+struct mm_struct;
-+struct vm_area_struct;
-+
-+/* Otherwise, somebody had better define them.  */
-+extern void flush_icache (void);
-+extern void flush_icache_range (unsigned long start, unsigned long end);
-+extern void flush_icache_page (struct vm_area_struct *vma, struct page *page);
-+extern void flush_icache_user_range (struct vm_area_struct *vma,
-+                                   struct page *page,
-+                                   unsigned long adr, int len);
-+extern void flush_cache_sigtramp (unsigned long addr);
-+
-+#endif /* CONFIG_NO_CACHE */
-+
- #endif /* __V850_CACHEFLUSH_H__ */
---- linux-2.6.0-test1/include/asm-v850/entry.h 2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-v850/entry.h        2003-07-19 17:03:51.000000000 -0700
-@@ -65,10 +65,10 @@
- #define RESET_GUARD_ACTIVE    0xFAB4BEEF
- #endif /* CONFIG_RESET_GUARD */
--#ifdef CONFIG_V850E_MA1_HIGHRES_TIMER
-+#ifdef CONFIG_V850E_HIGHRES_TIMER
- #define HIGHRES_TIMER_SLOW_TICKS_ADDR (KERNEL_VAR_SPACE_ADDR + 32)
- #define HIGHRES_TIMER_SLOW_TICKS     KERNEL_VAR (HIGHRES_TIMER_SLOW_TICKS_ADDR)
--#endif /* CONFIG_V850E_MA1_HIGHRES_TIMER */
-+#endif /* CONFIG_V850E_HIGHRES_TIMER */
- #ifndef __ASSEMBLY__
---- linux-2.6.0-test1/include/asm-v850/fpga85e2c.h     2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-v850/fpga85e2c.h    2003-07-19 17:03:51.000000000 -0700
-@@ -2,8 +2,8 @@
-  * include/asm-v850/fpga85e2c.h -- Machine-dependent defs for
-  *    FPGA implementation of V850E2/NA85E2C
-  *
-- *  Copyright (C) 2002  NEC Corporation
-- *  Copyright (C) 2002  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2002,03  NEC Electronics Corporation
-+ *  Copyright (C) 2002,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -15,11 +15,10 @@
- #ifndef __V850_FPGA85E2C_H__
- #define __V850_FPGA85E2C_H__
--
-+#include <asm/v850e2.h>
- #include <asm/clinkage.h>
--#define CPU_ARCH      "v850e2"
- #define CPU_MODEL     "v850e2/fpga85e2c"
- #define CPU_MODEL_LONG        "NEC V850E2/NA85E2C"
- #define PLATFORM      "fpga85e2c"
-@@ -42,27 +41,6 @@
- #define CSDEV_ADDR(n)         (0xFFE80110 + 2*(n))
- #define CSDEV(n)              (*(volatile unsigned char *)CSDEV_ADDR (n))
--/* The BSC register controls bus-sizing.  Each memory area CSn uses a pair
--   of bits N*2 and N*2+1, where 00 means an 8-bit bus size, 01 16-bit, and
--   10 32-bit.  */
--#define BSC_ADDR              0xFFFFF066
--#define BSC                   (*(volatile unsigned short *)BSC_ADDR)
--
--#define DWC_ADDR(n)           (0xFFFFF484 + 2*(n))
--#define DWC(n)                        (*(volatile unsigned short *)DWC_ADDR (n))
--
--#define ASC_ADDR              0xFFFFF48A
--#define ASC                   (*(volatile unsigned short *)ASC_ADDR)
--
--#define BTSC_ADDR             0xFFFFF070
--#define BTSC                  (*(volatile unsigned short *)BTSC_ADDR)
--
--#define BHC_ADDR              0xFFFFF06A
--#define BHC                   (*(volatile unsigned short *)BHC_ADDR)
--
--
--/* NB85E-style interrupt system.  */
--#include <asm/nb85e_intc.h>
- /* Timer interrupts 0-3, interrupt at intervals from CLK/4096 to CLK/16384.  */
- #define IRQ_RPU(n)            (60 + (n))
---- linux-2.6.0-test1/include/asm-v850/highres_timer.h 2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/asm-v850/highres_timer.h        2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * include/asm-v850/highres_timer.h -- High resolution timing routines
-  *
-- *  Copyright (C) 2001  NEC Corporation
-- *  Copyright (C) 2001  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -25,7 +25,7 @@
-    counter overflows).  */
- #define HIGHRES_TIMER_SLOW_TICK_RATE  25
--/* Which timer in the nb85e `Timer D' we use.  */
-+/* Which timer in the V850E `Timer D' we use.  */
- #define HIGHRES_TIMER_TIMER_D_UNIT    3
---- linux-2.6.0-test1/include/asm-v850/ma1.h   2003-06-14 12:18:24.000000000 -0700
-+++ 25/include/asm-v850/ma1.h  2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * include/asm-v850/ma1.h -- V850E/MA1 cpu chip
-  *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -40,12 +40,11 @@
- #define IRQ_INTST(n)  (0x27 + (n)*4) /* UART 0-2 transmission completion */
- #define IRQ_INTST_NUM 3
--/* For <asm/irq.h> */
- #define NUM_CPU_IRQS  0x30
- /* The MA1 has a UART with 3 channels.  */
--#define NB85E_UART_NUM_CHANNELS       3
-+#define V850E_UART_NUM_CHANNELS       3
- #endif /* __V850_MA1_H__ */
---- linux-2.6.0-test1/include/asm-v850/machdep.h       2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/asm-v850/machdep.h      2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * include/asm-v850/machdep.h -- Machine-dependent definitions
-  *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -20,6 +20,9 @@
- #ifdef CONFIG_V850E_MA1
- #include <asm/ma1.h>
- #endif
-+#ifdef CONFIG_V850E_ME2
-+#include <asm/me2.h>
-+#endif
- #ifdef CONFIG_V850E_TEG
- #include <asm/teg.h>
- #endif
-@@ -36,6 +39,9 @@
- #ifdef CONFIG_RTE_CB_MA1
- #include <asm/rte_ma1_cb.h>
- #endif
-+#ifdef CONFIG_RTE_CB_ME2
-+#include <asm/rte_me2_cb.h>
-+#endif
- #ifdef CONFIG_RTE_CB_NB85E
- #include <asm/rte_nb85e_cb.h>
- #endif
-@@ -45,6 +51,9 @@
- #ifdef CONFIG_V850E2_SIM85E2C
- #include <asm/sim85e2c.h>
- #endif
-+#ifdef CONFIG_V850E2_SIM85E2S
-+#include <asm/sim85e2s.h>
-+#endif
- #ifdef CONFIG_V850E2_FPGA85E2C
- #include <asm/fpga85e2c.h>
- #endif
---- linux-2.6.0-test1/include/asm-v850/ma.h    2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/asm-v850/ma.h   2003-07-19 17:03:51.000000000 -0700
-@@ -1,8 +1,8 @@
- /*
-  * include/asm-v850/ma.h -- V850E/MA series of cpu chips
-  *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-  * Public License.  See the file COPYING in the main directory of this
-@@ -14,9 +14,8 @@
- #ifndef __V850_MA_H__
- #define __V850_MA_H__
--
--/* The MA series uses the NB85E cpu core.  */
--#include <asm/nb85e.h>
-+/* The MA series uses the V850E cpu core.  */
-+#include <asm/v850e.h>
- /* For <asm/entry.h> */
-@@ -28,10 +27,10 @@
- /* MA series UART details.  */
--#define NB85E_UART_BASE_FREQ          CPU_CLOCK_FREQ
-+#define V850E_UART_BASE_FREQ          CPU_CLOCK_FREQ
- /* This is a function that gets called before configuring the UART.  */
--#define NB85E_UART_PRE_CONFIGURE      ma_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE      ma_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void ma_uart_pre_configure (unsigned chan,
-                                  unsigned cflags, unsigned baud);
-@@ -39,16 +38,16 @@ extern void ma_uart_pre_configure (unsig
- /* MA series timer C details.  */
--#define NB85E_TIMER_C_BASE_ADDR               0xFFFFF600
-+#define V850E_TIMER_C_BASE_ADDR               0xFFFFF600
- /* MA series timer D details.  */
--#define NB85E_TIMER_D_BASE_ADDR               0xFFFFF540
--#define NB85E_TIMER_D_TMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_CMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x2)
--#define NB85E_TIMER_D_TMCD_BASE_ADDR  (NB85E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_BASE_ADDR               0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR  (V850E_TIMER_D_BASE_ADDR + 0x4)
--#define NB85E_TIMER_D_BASE_FREQ               CPU_CLOCK_FREQ
-+#define V850E_TIMER_D_BASE_FREQ               CPU_CLOCK_FREQ
- /* Port 0 */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/me2.h  2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,182 @@
-+/*
-+ * include/asm-v850/me2.h -- V850E/ME2 cpu chip
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_ME2_H__
-+#define __V850_ME2_H__
-+
-+#include <asm/v850e.h>
-+#include <asm/v850e_cache.h>
-+
-+
-+#define CPU_MODEL     "v850e/me2"
-+#define CPU_MODEL_LONG        "NEC V850E/ME2"
-+
-+
-+/* Hardware-specific interrupt numbers (in the kernel IRQ namespace).  */
-+#define IRQ_INTP(n)       (n) /* Pnnn (pin) interrupts */
-+#define IRQ_INTP_NUM      31
-+#define IRQ_INTCMD(n)     (0x31 + (n)) /* interval timer interrupts 0-3 */
-+#define IRQ_INTCMD_NUM    4
-+#define IRQ_INTDMA(n)     (0x41 + (n)) /* DMA interrupts 0-3 */
-+#define IRQ_INTDMA_NUM    4
-+#define IRQ_INTUBTIRE(n)  (0x49 + (n)*5)/* UARTB 0-1 reception error */
-+#define IRQ_INTUBTIRE_NUM 2
-+#define IRQ_INTUBTIR(n)   (0x4a + (n)*5) /* UARTB 0-1 reception complete */
-+#define IRQ_INTUBTIR_NUM  2
-+#define IRQ_INTUBTIT(n)   (0x4b + (n)*5) /* UARTB 0-1 transmission complete */
-+#define IRQ_INTUBTIT_NUM  2
-+#define IRQ_INTUBTIF(n)   (0x4c + (n)*5) /* UARTB 0-1 FIFO trans. complete */
-+#define IRQ_INTUBTIF_NUM  2
-+#define IRQ_INTUBTITO(n)  (0x4d + (n)*5) /* UARTB 0-1 reception timeout */
-+#define IRQ_INTUBTITO_NUM 2
-+
-+/* For <asm/irq.h> */
-+#define NUM_CPU_IRQS          0x59 /* V850E/ME2 */
-+
-+
-+/* For <asm/entry.h> */
-+/* We use on-chip RAM, for a few miscellaneous variables that must be
-+   accessible using a load instruction relative to R0.  */
-+#define R0_RAM_ADDR                   0xFFFFB000 /* V850E/ME2 */
-+
-+
-+/* V850E/ME2 UARTB details.*/
-+#define V850E_UART_NUM_CHANNELS               2
-+#define V850E_UARTB_BASE_FREQ         (CPU_CLOCK_FREQ / 4)
-+
-+/* This is a function that gets called before configuring the UART.  */
-+#define V850E_UART_PRE_CONFIGURE      me2_uart_pre_configure
-+#ifndef __ASSEMBLY__
-+extern void me2_uart_pre_configure (unsigned chan,
-+                                  unsigned cflags, unsigned baud);
-+#endif /* __ASSEMBLY__ */
-+
-+
-+/* V850E/ME2 timer C details.  */
-+#define V850E_TIMER_C_BASE_ADDR               0xFFFFF600
-+
-+
-+/* V850E/ME2 timer D details.  */
-+#define V850E_TIMER_D_BASE_ADDR               0xFFFFF540
-+#define V850E_TIMER_D_TMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_CMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x2)
-+#define V850E_TIMER_D_TMCD_BASE_ADDR  (V850E_TIMER_D_BASE_ADDR + 0x4)
-+
-+#define V850E_TIMER_D_BASE_FREQ               (CPU_CLOCK_FREQ / 2)
-+
-+
-+/* Select iRAM mode.  */
-+#define ME2_IRAMM_ADDR                        0xFFFFF80A
-+#define ME2_IRAMM                     (*(volatile u8*)ME2_IRAMM_ADDR)
-+
-+
-+/* Interrupt edge-detection configuration.  INTF(n) and INTR(n) are only
-+   valid for n == 1, 2, or 5.  */
-+#define ME2_INTF_ADDR(n)              (0xFFFFFC00 + (n) * 0x2)
-+#define ME2_INTF(n)                   (*(volatile u8*)ME2_INTF_ADDR(n))
-+#define ME2_INTR_ADDR(n)              (0xFFFFFC20 + (n) * 0x2)
-+#define ME2_INTR(n)                   (*(volatile u8*)ME2_INTR_ADDR(n))
-+#define ME2_INTFAL_ADDR                       0xFFFFFC10
-+#define ME2_INTFAL                    (*(volatile u8*)ME2_INTFAL_ADDR)
-+#define ME2_INTRAL_ADDR                       0xFFFFFC30
-+#define ME2_INTRAL                    (*(volatile u8*)ME2_INTRAL_ADDR)
-+#define ME2_INTFDH_ADDR                       0xFFFFFC16
-+#define ME2_INTFDH                    (*(volatile u16*)ME2_INTFDH_ADDR)
-+#define ME2_INTRDH_ADDR                       0xFFFFFC36
-+#define ME2_INTRDH                    (*(volatile u16*)ME2_INTRDH_ADDR)
-+#define ME2_SESC_ADDR(n)              (0xFFFFF609 + (n) * 0x10)
-+#define ME2_SESC(n)                   (*(volatile u8*)ME2_SESC_ADDR(n))
-+#define ME2_SESA10_ADDR                       0xFFFFF5AD
-+#define ME2_SESA10                    (*(volatile u8*)ME2_SESA10_ADDR)
-+#define ME2_SESA11_ADDR                       0xFFFFF5DD
-+#define ME2_SESA11                    (*(volatile u8*)ME2_SESA11_ADDR)
-+
-+
-+/* Port 1 */
-+/* Direct I/O.  Bits 0-3 are pins P10-P13.  */
-+#define ME2_PORT1_IO_ADDR             0xFFFFF402
-+#define ME2_PORT1_IO                  (*(volatile u8 *)ME2_PORT1_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input).  */
-+#define ME2_PORT1_PM_ADDR             0xFFFFF422
-+#define ME2_PORT1_PM                  (*(volatile u8 *)ME2_PORT1_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode).  */
-+#define ME2_PORT1_PMC_ADDR            0xFFFFF442
-+#define ME2_PORT1_PMC                 (*(volatile u8 *)ME2_PORT1_PMC_ADDR)
-+/* Port function control (for serial interfaces, 0 = CSI30, 1 = UARTB0 ).  */
-+#define ME2_PORT1_PFC_ADDR            0xFFFFF462
-+#define ME2_PORT1_PFC                 (*(volatile u8 *)ME2_PORT1_PFC_ADDR)
-+
-+/* Port 2 */
-+/* Direct I/O.  Bits 0-3 are pins P20-P25.  */
-+#define ME2_PORT2_IO_ADDR             0xFFFFF404
-+#define ME2_PORT2_IO                  (*(volatile u8 *)ME2_PORT2_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input).  */
-+#define ME2_PORT2_PM_ADDR             0xFFFFF424
-+#define ME2_PORT2_PM                  (*(volatile u8 *)ME2_PORT2_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode).  */
-+#define ME2_PORT2_PMC_ADDR            0xFFFFF444
-+#define ME2_PORT2_PMC                 (*(volatile u8 *)ME2_PORT2_PMC_ADDR)
-+/* Port function control (for serial interfaces, 0 = INTP2x, 1 = UARTB1 ).  */
-+#define ME2_PORT2_PFC_ADDR            0xFFFFF464
-+#define ME2_PORT2_PFC                 (*(volatile u8 *)ME2_PORT2_PFC_ADDR)
-+
-+/* Port 5 */
-+/* Direct I/O.  Bits 0-5 are pins P50-P55.  */
-+#define ME2_PORT5_IO_ADDR             0xFFFFF40A
-+#define ME2_PORT5_IO                  (*(volatile u8 *)ME2_PORT5_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input).  */
-+#define ME2_PORT5_PM_ADDR             0xFFFFF42A
-+#define ME2_PORT5_PM                  (*(volatile u8 *)ME2_PORT5_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode).  */
-+#define ME2_PORT5_PMC_ADDR            0xFFFFF44A
-+#define ME2_PORT5_PMC                 (*(volatile u8 *)ME2_PORT5_PMC_ADDR)
-+/* Port function control ().  */
-+#define ME2_PORT5_PFC_ADDR            0xFFFFF46A
-+#define ME2_PORT5_PFC                 (*(volatile u8 *)ME2_PORT5_PFC_ADDR)
-+
-+/* Port 6 */
-+/* Direct I/O.  Bits 5-7 are pins P65-P67.  */
-+#define ME2_PORT6_IO_ADDR             0xFFFFF40C
-+#define ME2_PORT6_IO                  (*(volatile u8 *)ME2_PORT6_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input).  */
-+#define ME2_PORT6_PM_ADDR             0xFFFFF42C
-+#define ME2_PORT6_PM                  (*(volatile u8 *)ME2_PORT6_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode).  */
-+#define ME2_PORT6_PMC_ADDR            0xFFFFF44C
-+#define ME2_PORT6_PMC                 (*(volatile u8 *)ME2_PORT6_PMC_ADDR)
-+/* Port function control ().  */
-+#define ME2_PORT6_PFC_ADDR            0xFFFFF46C
-+#define ME2_PORT6_PFC                 (*(volatile u8 *)ME2_PORT6_PFC_ADDR)
-+
-+/* Port 7 */
-+/* Direct I/O.  Bits 2-7 are pins P72-P77.  */
-+#define ME2_PORT7_IO_ADDR             0xFFFFF40E
-+#define ME2_PORT7_IO                  (*(volatile u8 *)ME2_PORT7_IO_ADDR)
-+/* Port mode (for direct I/O, 0 = output, 1 = input).  */
-+#define ME2_PORT7_PM_ADDR             0xFFFFF42E
-+#define ME2_PORT7_PM                  (*(volatile u8 *)ME2_PORT7_PM_ADDR)
-+/* Port mode control (0 = direct I/O mode, 1 = alternative I/O mode).  */
-+#define ME2_PORT7_PMC_ADDR            0xFFFFF44E
-+#define ME2_PORT7_PMC                 (*(volatile u8 *)ME2_PORT7_PMC_ADDR)
-+/* Port function control ().  */
-+#define ME2_PORT7_PFC_ADDR            0xFFFFF46E
-+#define ME2_PORT7_PFC                 (*(volatile u8 *)ME2_PORT7_PFC_ADDR)
-+
-+
-+#ifndef __ASSEMBLY__
-+/* Initialize V850E/ME2 chip interrupts.  */
-+extern void me2_init_irqs (void);
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_ME2_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_cache.h   2003-06-14 12:18:21.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,78 +0,0 @@
--/*
-- * include/asm-v850/nb85e_cache_cache.h -- Cache control for NB85E_CACHE212 and
-- *    NB85E_CACHE213 cache memories
-- *
-- *  Copyright (C) 2001,03  NEC Electronics Corporation
-- *  Copyright (C) 2001,03  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_CACHE_H__
--#define __V850_NB85E_CACHE_H__
--
--#include <asm/types.h>
--
--
--/* Cache control registers.  */
--#define NB85E_CACHE_BHC_ADDR  0xFFFFF06A
--#define NB85E_CACHE_BHC               (*(volatile u16 *)NB85E_CACHE_BHC_ADDR)
--#define NB85E_CACHE_ICC_ADDR  0xFFFFF070
--#define NB85E_CACHE_ICC               (*(volatile u16 *)NB85E_CACHE_ICC_ADDR)
--#define NB85E_CACHE_ISI_ADDR  0xFFFFF072
--#define NB85E_CACHE_ISI               (*(volatile u16 *)NB85E_CACHE_ISI_ADDR)
--#define NB85E_CACHE_DCC_ADDR  0xFFFFF078
--#define NB85E_CACHE_DCC               (*(volatile u16 *)NB85E_CACHE_DCC_ADDR)
--
--/* Size of a cache line in bytes.  */
--#define NB85E_CACHE_LINE_SIZE 16
--
--/* For <asm/cache.h> */
--#define L1_CACHE_BYTES                                NB85E_CACHE_LINE_SIZE
--
--
--#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
--
--/* Set caching params via the BHC and DCC registers.  */
--void nb85e_cache_enable (u16 bhc, u16 dcc);
--
--struct page;
--struct mm_struct;
--struct vm_area_struct;
--
--extern void nb85e_cache_flush_all (void);
--extern void nb85e_cache_flush_mm (struct mm_struct *mm);
--extern void nb85e_cache_flush_range (struct mm_struct *mm,
--                                   unsigned long start,
--                                   unsigned long end);
--extern void nb85e_cache_flush_page (struct vm_area_struct *vma,
--                                  unsigned long page_addr);
--extern void nb85e_cache_flush_dcache_page (struct page *page);
--extern void nb85e_cache_flush_icache (void);
--extern void nb85e_cache_flush_icache_range (unsigned long start,
--                                          unsigned long end);
--extern void nb85e_cache_flush_icache_page (struct vm_area_struct *vma,
--                                         struct page *page);
--extern void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma,
--                                               struct page *page,
--                                               unsigned long adr, int len);
--extern void nb85e_cache_flush_sigtramp (unsigned long addr);
--
--#define flush_cache_all               nb85e_cache_flush_all
--#define flush_cache_mm                nb85e_cache_flush_mm
--#define flush_cache_range     nb85e_cache_flush_range
--#define flush_cache_page      nb85e_cache_flush_page
--#define flush_dcache_page     nb85e_cache_flush_dcache_page
--#define flush_icache          nb85e_cache_flush_icache
--#define flush_icache_range    nb85e_cache_flush_icache_range
--#define flush_icache_page     nb85e_cache_flush_icache_page
--#define flush_icache_user_range       nb85e_cache_flush_icache_user_range
--#define flush_cache_sigtramp  nb85e_cache_flush_sigtramp
--
--#endif /* __KERNEL__ && !__ASSEMBLY__ */
--
--#endif /* __V850_NB85E_CACHE_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e.h 2003-06-14 12:18:21.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,21 +0,0 @@
--/*
-- * include/asm-v850/nb85e.h -- NB85E cpu core
-- *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_H__
--#define __V850_NB85E_H__
--
--#include <asm/nb85e_intc.h>
--
--#define CPU_ARCH "v850e"
--
--#endif /* __V850_NB85E_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_intc.h    2003-06-14 12:18:29.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,133 +0,0 @@
--/*
-- * include/asm-v850/nb85e_intc.h -- NB85E cpu core interrupt controller (INTC)
-- *
-- *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-- *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_INTC_H__
--#define __V850_NB85E_INTC_H__
--
--
--/* There are 4 16-bit `Interrupt Mask Registers' located contiguously
--   starting from this base.  Each interrupt uses a single bit to
--   indicated enabled/disabled status.  */
--#define NB85E_INTC_IMR_BASE_ADDR  0xFFFFF100
--#define NB85E_INTC_IMR_ADDR(irq)  (NB85E_INTC_IMR_BASE_ADDR + ((irq) >> 3))
--#define NB85E_INTC_IMR_BIT(irq)         ((irq) & 0x7)
--
--/* Each maskable interrupt has a single-byte control register at this
--   address.  */
--#define NB85E_INTC_IC_BASE_ADDR         0xFFFFF110
--#define NB85E_INTC_IC_ADDR(irq)         (NB85E_INTC_IC_BASE_ADDR + ((irq) << 1))
--#define NB85E_INTC_IC(irq)      (*(volatile u8 *)NB85E_INTC_IC_ADDR(irq))
--/* Encode priority PR for storing in an interrupt control register.  */
--#define NB85E_INTC_IC_PR(pr)    (pr)
--/* Interrupt disable bit in an interrupt control register.  */
--#define NB85E_INTC_IC_MK_BIT    6
--#define NB85E_INTC_IC_MK        (1 << NB85E_INTC_IC_MK_BIT)
--/* Interrupt pending flag in an interrupt control register.  */
--#define NB85E_INTC_IC_IF_BIT    7
--#define NB85E_INTC_IC_IF        (1 << NB85E_INTC_IC_IF_BIT)
--
--/* The ISPR (In-service priority register) contains one bit for each interrupt
--   priority level, which is set to one when that level is currently being
--   serviced (and thus blocking any interrupts of equal or lesser level).  */
--#define NB85E_INTC_ISPR_ADDR    0xFFFFF1FA
--#define NB85E_INTC_ISPR                 (*(volatile u8 *)NB85E_INTC_ISPR_ADDR)
--
--
--#ifndef __ASSEMBLY__
--
--/* Enable interrupt handling for interrupt IRQ.  */
--static inline void nb85e_intc_enable_irq (unsigned irq)
--{
--      __asm__ __volatile__ ("clr1 %0, [%1]"
--                            :: "r" (NB85E_INTC_IMR_BIT (irq)),
--                               "r" (NB85E_INTC_IMR_ADDR (irq))
--                            : "memory");
--}
--
--/* Disable interrupt handling for interrupt IRQ.  Note that any
--   interrupts received while disabled will be delivered once the
--   interrupt is enabled again, unless they are explicitly cleared using
--   `nb85e_intc_clear_pending_irq'.  */
--static inline void nb85e_intc_disable_irq (unsigned irq)
--{
--      __asm__ __volatile__ ("set1 %0, [%1]"
--                            :: "r" (NB85E_INTC_IMR_BIT (irq)),
--                               "r" (NB85E_INTC_IMR_ADDR (irq))
--                            : "memory");
--}
--
--/* Return true if interrupt handling for interrupt IRQ is enabled.  */
--static inline int nb85e_intc_irq_enabled (unsigned irq)
--{
--      int rval;
--      __asm__ __volatile__ ("tst1 %1, [%2]; setf z, %0"
--                            : "=r" (rval)
--                            : "r" (NB85E_INTC_IMR_BIT (irq)),
--                              "r" (NB85E_INTC_IMR_ADDR (irq)));
--      return rval;
--}
--
--/* Disable irqs from 0 until LIMIT.  LIMIT must be a multiple of 8.  */
--static inline void _nb85e_intc_disable_irqs (unsigned limit)
--{
--      unsigned long addr;
--      for (addr = NB85E_INTC_IMR_BASE_ADDR; limit >= 8; addr++, limit -= 8)
--              *(char *)addr = 0xFF;
--}
--
--/* Disable all irqs.  This is purposely a macro, because NUM_MACH_IRQS
--   will be only be defined later.  */
--#define nb85e_intc_disable_irqs()   _nb85e_intc_disable_irqs (NUM_MACH_IRQS)
--
--/* Clear any pending interrupts for IRQ.  */
--static inline void nb85e_intc_clear_pending_irq (unsigned irq)
--{
--      __asm__ __volatile__ ("clr1 %0, 0[%1]"
--                            :: "i" (NB85E_INTC_IC_IF_BIT),
--                               "r" (NB85E_INTC_IC_ADDR (irq))
--                            : "memory");
--}
--
--/* Return true if interrupt IRQ is pending (but disabled).  */
--static inline int nb85e_intc_irq_pending (unsigned irq)
--{
--      int rval;
--      __asm__ __volatile__ ("tst1 %1, 0[%2]; setf nz, %0"
--                            : "=r" (rval)
--                            : "i" (NB85E_INTC_IC_IF_BIT),
--                              "r" (NB85E_INTC_IC_ADDR (irq)));
--      return rval;
--}
--
--
--struct nb85e_intc_irq_init {
--      const char *name;       /* name of interrupt type */
--
--      /* Range of kernel irq numbers for this type:
--         BASE, BASE+INTERVAL, ..., BASE+INTERVAL*NUM  */
--      unsigned base, num, interval;
--
--      unsigned priority;      /* interrupt priority to assign */
--};
--struct hw_interrupt_type;     /* fwd decl */
--
--/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
--   INITS (which is terminated by an entry with the name field == 0).  */
--extern void nb85e_intc_init_irq_types (struct nb85e_intc_irq_init *inits,
--                                     struct hw_interrupt_type *hw_irq_types);
--
--
--#endif /* !__ASSEMBLY__ */
--
--
--#endif /* __V850_NB85E_INTC_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_timer_c.h 2003-06-14 12:17:58.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,48 +0,0 @@
--/*
-- * include/asm-v850/nb85e_timer_c.h -- `Timer C' component often used
-- *    with the NB85E cpu core
-- *
-- *  Copyright (C) 2001  NEC Corporation
-- *  Copyright (C) 2001  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--/* NOTE: this include file currently contains only enough to allow us to
--   use timer C as an interrupt pass-through.  */
--
--#ifndef __V850_NB85E_TIMER_C_H__
--#define __V850_NB85E_TIMER_C_H__
--
--#include <asm/types.h>
--#include <asm/machdep.h>      /* Pick up chip-specific defs.  */
--
--
--/* Timer C (16-bit interval timers).  */
--
--/* Control register 0 for timer C.  */
--#define NB85E_TIMER_C_TMCC0_ADDR(n) (NB85E_TIMER_C_BASE_ADDR + 0x6 + 0x10 *(n))
--#define NB85E_TIMER_C_TMCC0(n)          (*(volatile u8 *)NB85E_TIMER_C_TMCC0_ADDR(n))
--#define NB85E_TIMER_C_TMCC0_CAE         0x01 /* clock action enable */
--#define NB85E_TIMER_C_TMCC0_CE          0x02 /* count enable */
--/* ... */
--
--/* Control register 1 for timer C.  */
--#define NB85E_TIMER_C_TMCC1_ADDR(n) (NB85E_TIMER_C_BASE_ADDR + 0x8 + 0x10 *(n))
--#define NB85E_TIMER_C_TMCC1(n)          (*(volatile u8 *)NB85E_TIMER_C_TMCC1_ADDR(n))
--#define NB85E_TIMER_C_TMCC1_CMS0  0x01 /* capture/compare mode select (ccc0) */
--#define NB85E_TIMER_C_TMCC1_CMS1  0x02 /* capture/compare mode select (ccc1) */
--/* ... */
--
--/* Interrupt edge-sensitivity control for timer C.  */
--#define NB85E_TIMER_C_SESC_ADDR(n) (NB85E_TIMER_C_BASE_ADDR + 0x9 + 0x10 *(n))
--#define NB85E_TIMER_C_SESC(n)   (*(volatile u8 *)NB85E_TIMER_C_SESC_ADDR(n))
--
--/* ...etc... */
--
--
--#endif /* __V850_NB85E_TIMER_C_H__  */
---- linux-2.6.0-test1/include/asm-v850/nb85e_timer_d.h 2003-06-14 12:18:06.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,62 +0,0 @@
--/*
-- * include/asm-v850/nb85e_timer_d.h -- `Timer D' component often used
-- *    with the NB85E cpu core
-- *
-- *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-- *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_TIMER_D_H__
--#define __V850_NB85E_TIMER_D_H__
--
--#include <asm/types.h>
--#include <asm/machdep.h>      /* Pick up chip-specific defs.  */
--
--
--/* Timer D (16-bit interval timers).  */
--
--/* Count registers for timer D.  */
--#define NB85E_TIMER_D_TMD_ADDR(n) (NB85E_TIMER_D_TMD_BASE_ADDR + 0x10 * (n))
--#define NB85E_TIMER_D_TMD(n)    (*(volatile u16 *)NB85E_TIMER_D_TMD_ADDR(n))
--
--/* Count compare registers for timer D.  */
--#define NB85E_TIMER_D_CMD_ADDR(n) (NB85E_TIMER_D_CMD_BASE_ADDR + 0x10 * (n))
--#define NB85E_TIMER_D_CMD(n)    (*(volatile u16 *)NB85E_TIMER_D_CMD_ADDR(n))
--
--/* Control registers for timer D.  */
--#define NB85E_TIMER_D_TMCD_ADDR(n) (NB85E_TIMER_D_TMCD_BASE_ADDR + 0x10 * (n))
--#define NB85E_TIMER_D_TMCD(n)    (*(volatile u8 *)NB85E_TIMER_D_TMCD_ADDR(n))
--/* Control bits for timer D.  */
--#define NB85E_TIMER_D_TMCD_CE            0x2 /* count enable */
--#define NB85E_TIMER_D_TMCD_CAE           0x1 /* clock action enable */
--/* Clock divider setting (log2).  */
--#define NB85E_TIMER_D_TMCD_CS(divlog2) (((divlog2) - NB85E_TIMER_D_TMCD_CS_MIN) << 4)
--/* Minimum clock divider setting (log2).  */
--#ifndef NB85E_TIMER_D_TMCD_CS_MIN /* Can be overridden by mach-specific hdrs */
--#define NB85E_TIMER_D_TMCD_CS_MIN  2 /* Default is correct for the v850e/ma1 */
--#endif
--/* Maximum clock divider setting (log2).  */
--#define NB85E_TIMER_D_TMCD_CS_MAX  (NB85E_TIMER_D_TMCD_CS_MIN + 7)
--
--/* Return the clock-divider (log2) of timer D unit N.  */
--#define NB85E_TIMER_D_DIVLOG2(n) \
--  (((NB85E_TIMER_D_TMCD(n) >> 4) & 0x7) + NB85E_TIMER_D_TMCD_CS_MIN)
--
--
--#ifndef __ASSEMBLY__
--
--/* Start interval timer TIMER (0-3).  The timer will issue the
--   corresponding INTCMD interrupt RATE times per second.  This function
--   does not enable the interrupt.  */
--extern void nb85e_timer_d_configure (unsigned timer, unsigned rate);
--
--#endif /* !__ASSEMBLY__ */
--
--
--#endif /* __V850_NB85E_TIMER_D_H__  */
---- linux-2.6.0-test1/include/asm-v850/nb85e_uart.h    2003-06-14 12:18:50.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,144 +0,0 @@
--/*
-- * include/asm-v850/nb85e_uart.h -- On-chip UART often used with the
-- *    NB85E cpu core
-- *
-- *  Copyright (C) 2001,02  NEC Corporation
-- *  Copyright (C) 2001,02  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--/* There's not actually a single UART implementation used by nb85e
--   derivatives, but rather a series of implementations that are all
--   `close' to one another.  This file attempts to capture some
--   commonality between them.  */
--
--#ifndef __V850_NB85E_UART_H__
--#define __V850_NB85E_UART_H__
--
--#include <asm/types.h>
--#include <asm/machdep.h>      /* Pick up chip-specific defs.  */
--
--
--/* The base address of the UART control registers for channel N.
--   The default is the address used on the V850E/MA1.  */
--#ifndef NB85E_UART_BASE_ADDR
--#define NB85E_UART_BASE_ADDR(n)               (0xFFFFFA00 + 0x10 * (n))
--#endif 
--
--/* Addresses of specific UART control registers for channel N.
--   The defaults are the addresses used on the V850E/MA1; if a platform
--   wants to redefine any of these, it must redefine them all.  */
--#ifndef NB85E_UART_ASIM_ADDR
--#define NB85E_UART_ASIM_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x0)
--#define NB85E_UART_RXB_ADDR(n)                (NB85E_UART_BASE_ADDR(n) + 0x2)
--#define NB85E_UART_ASIS_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x3)
--#define NB85E_UART_TXB_ADDR(n)                (NB85E_UART_BASE_ADDR(n) + 0x4)
--#define NB85E_UART_ASIF_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x5)
--#define NB85E_UART_CKSR_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x6)
--#define NB85E_UART_BRGC_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x7)
--#endif
--
--#ifndef NB85E_UART_CKSR_MAX_FREQ
--#define NB85E_UART_CKSR_MAX_FREQ (25*1000*1000)
--#endif
--
--/* UART config registers.  */
--#define NB85E_UART_ASIM(n)    (*(volatile u8 *)NB85E_UART_ASIM_ADDR(n))
--/* Control bits for config registers.  */
--#define NB85E_UART_ASIM_CAE   0x80 /* clock enable */
--#define NB85E_UART_ASIM_TXE   0x40 /* transmit enable */
--#define NB85E_UART_ASIM_RXE   0x20 /* receive enable */
--#define NB85E_UART_ASIM_PS_MASK       0x18 /* mask covering parity-select bits */
--#define NB85E_UART_ASIM_PS_NONE       0x00 /* no parity */
--#define NB85E_UART_ASIM_PS_ZERO       0x08 /* zero parity */
--#define NB85E_UART_ASIM_PS_ODD        0x10 /* odd parity */
--#define NB85E_UART_ASIM_PS_EVEN       0x18 /* even parity */
--#define NB85E_UART_ASIM_CL_8  0x04 /* char len is 8 bits (otherwise, 7) */
--#define NB85E_UART_ASIM_SL_2  0x02 /* 2 stop bits (otherwise, 1) */
--#define NB85E_UART_ASIM_ISRM  0x01 /* generate INTSR interrupt on errors
--                                      (otherwise, generate INTSER) */
--
--/* UART serial interface status registers.  */
--#define NB85E_UART_ASIS(n)    (*(volatile u8 *)NB85E_UART_ASIS_ADDR(n))
--/* Control bits for status registers.  */
--#define NB85E_UART_ASIS_PE    0x04 /* parity error */
--#define NB85E_UART_ASIS_FE    0x02 /* framing error */
--#define NB85E_UART_ASIS_OVE   0x01 /* overrun error */
--
--/* UART serial interface transmission status registers.  */
--#define NB85E_UART_ASIF(n)    (*(volatile u8 *)NB85E_UART_ASIF_ADDR(n))
--#define NB85E_UART_ASIF_TXBF  0x02 /* transmit buffer flag (data in TXB) */
--#define NB85E_UART_ASIF_TXSF  0x01 /* transmit shift flag (sending data) */
--
--/* UART receive buffer register.  */
--#define NB85E_UART_RXB(n)     (*(volatile u8 *)NB85E_UART_RXB_ADDR(n))
--
--/* UART transmit buffer register.  */
--#define NB85E_UART_TXB(n)     (*(volatile u8 *)NB85E_UART_TXB_ADDR(n))
--
--/* UART baud-rate generator control registers.  */
--#define NB85E_UART_CKSR(n)    (*(volatile u8 *)NB85E_UART_CKSR_ADDR(n))
--#define NB85E_UART_CKSR_MAX   11
--#define NB85E_UART_BRGC(n)    (*(volatile u8 *)NB85E_UART_BRGC_ADDR(n))
--
--
--/* This UART doesn't implement RTS/CTS by default, but some platforms
--   implement them externally, so check to see if <asm/machdep.h> defined
--   anything.  */
--#ifdef NB85E_UART_CTS
--#define nb85e_uart_cts(n)     NB85E_UART_CTS(n)
--#else
--#define nb85e_uart_cts(n)     (1)
--#endif
--
--/* Do the same for RTS.  */
--#ifdef NB85E_UART_SET_RTS
--#define nb85e_uart_set_rts(n,v)       NB85E_UART_SET_RTS(n,v)
--#else
--#define nb85e_uart_set_rts(n,v)       ((void)0)
--#endif
--
--/* Return true if all characters awaiting transmission on uart channel N
--   have been transmitted.  */
--#define nb85e_uart_xmit_done(n)                                                     \
--   (! (NB85E_UART_ASIF(n) & NB85E_UART_ASIF_TXBF))
--/* Wait for this to be true.  */
--#define nb85e_uart_wait_for_xmit_done(n)                                    \
--   do { } while (! nb85e_uart_xmit_done (n))
--
--/* Return true if uart channel N is ready to transmit a character.  */
--#define nb85e_uart_xmit_ok(n)                                               \
--   (nb85e_uart_xmit_done(n) && nb85e_uart_cts(n))
--/* Wait for this to be true.  */
--#define nb85e_uart_wait_for_xmit_ok(n)                                              \
--   do { } while (! nb85e_uart_xmit_ok (n))
--
--/* Write character CH to uart channel N.  */
--#define nb85e_uart_putc(n, ch)        (NB85E_UART_TXB(n) = (ch))
--
--
--#define NB85E_UART_MINOR_BASE 64
--
--
--#ifndef __ASSEMBLY__
--
--/* Setup a console using channel 0 of the builtin uart.  */
--extern void nb85e_uart_cons_init (unsigned chan);
--
--/* Configure and turn on uart channel CHAN, using the termios `control
--   modes' bits in CFLAGS, and a baud-rate of BAUD.  */
--void nb85e_uart_configure (unsigned chan, unsigned cflags, unsigned baud);
--
--/* If the macro NB85E_UART_PRE_CONFIGURE is defined (presumably by a
--   <asm/machdep.h>), it is called from nb85e_uart_pre_configure before
--   anything else is done, with interrupts disabled.  */
--
--#endif /* !__ASSEMBLY__ */
--
--
--#endif /* __V850_NB85E_UART_H__ */
---- linux-2.6.0-test1/include/asm-v850/nb85e_utils.h   2003-06-14 12:18:20.000000000 -0700
-+++ /dev/null  2002-08-30 16:31:37.000000000 -0700
-@@ -1,35 +0,0 @@
--/*
-- * include/asm-v850/nb85e_utils.h -- Utility functions associated with
-- *    the NB85E cpu core
-- *
-- *  Copyright (C) 2001  NEC Corporation
-- *  Copyright (C) 2001  Miles Bader <miles@gnu.org>
-- *
-- * This file is subject to the terms and conditions of the GNU General
-- * Public License.  See the file COPYING in the main directory of this
-- * archive for more details.
-- *
-- * Written by Miles Bader <miles@gnu.org>
-- */
--
--#ifndef __V850_NB85E_UTILS_H__
--#define __V850_NB85E_UTILS_H__
--
--/* Calculate counter clock-divider and count values to attain the
--   desired frequency RATE from the base frequency BASE_FREQ.  The
--   counter is expected to have a clock-divider, which can divide the
--   system cpu clock by a power of two value from MIN_DIVLOG2 to
--   MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
--   counts up and resets whenever it's equal to the compare register,
--   generating an interrupt or whatever when it does so).  The returned
--   values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
--   -- the counter compare value to use.  Returns true if it was possible
--   to find a reasonable value, otherwise false (and the other return
--   values will be set to be as good as possible).  */
--extern int calc_counter_params (unsigned long base_freq,
--                              unsigned long rate,
--                              unsigned min_divlog2, unsigned max_divlog2,
--                              unsigned counter_size,
--                              unsigned *divlog2, unsigned *count);
--
--#endif /* __V850_NB85E_UTILS_H__ */
---- linux-2.6.0-test1/include/asm-v850/pgtable.h       2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/asm-v850/pgtable.h      2003-07-19 17:07:16.000000000 -0700
-@@ -13,6 +13,11 @@ typedef pte_t *pte_addr_t;
- #define pgd_clear(pgdp)               ((void)0)
- #define       pmd_offset(a, b)        ((void *)0)
-+#define pmd_offset_kernel(pgd, addr)          pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)             pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)      pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                do { } while (0)
-+#define pmd_unmap_nested(pmd)                 do { } while (0)
- #define kern_addr_valid(addr) (1)
---- linux-2.6.0-test1/include/asm-v850/posix_types.h   2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/asm-v850/posix_types.h  2003-07-19 17:06:39.000000000 -0700
-@@ -14,7 +14,9 @@
- #ifndef __V850_POSIX_TYPES_H__
- #define __V850_POSIX_TYPES_H__
--typedef unsigned int  __kernel_dev_t;
-+#ifdef __GNUC__
-+typedef unsigned long long    __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned long long __kernel_ino64_t;
- typedef unsigned int  __kernel_mode_t;
---- linux-2.6.0-test1/include/asm-v850/processor.h     2003-06-14 12:18:04.000000000 -0700
-+++ 25/include/asm-v850/processor.h    2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * include/asm-v850/processor.h
-  *
-- *  Copyright (C) 2001,02,03  NEC Corporation
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-  *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/ptrace.h        2003-06-14 12:18:51.000000000 -0700
-+++ 25/include/asm-v850/ptrace.h       2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * include/asm-v850/ptrace.h -- Access to CPU registers
-  *
-- *  Copyright (C) 2001,02,03  NEC Corporation
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-  *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/rte_cb.h        2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-v850/rte_cb.h       2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * include/asm-v850/rte_cb.h -- Midas labs RTE-CB series of evaluation boards
-  *
-- *  Copyright (C) 2001,02,03  NEC Corporation
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-  *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
-@@ -20,42 +20,54 @@
- #define MB_A_SRAM_SIZE                0x00200000 /* 2MB */
-+#ifdef CONFIG_RTE_GBUS_INT
- /* GBUS interrupt support.  */
--#define GBUS_INT_BASE_IRQ     NUM_CPU_IRQS
--#define GBUS_INT_BASE_ADDR    (GCS2_ADDR + 0x00006000)
--#include <asm/gbus_int.h>
--/* We define NUM_MACH_IRQS to include extra interrupts from the GBUS.  */
--#define NUM_MACH_IRQS         (NUM_CPU_IRQS + IRQ_GBUS_INT_NUM)
-+# include <asm/gbus_int.h>
-+
-+# define GBUS_INT_BASE_IRQ    NUM_RTE_CB_IRQS
-+# define GBUS_INT_BASE_ADDR   (GCS2_ADDR + 0x00006000)
- /* Some specific interrupts.  */
--#define IRQ_MB_A_LAN          IRQ_GBUS_INT(10)
--#define IRQ_MB_A_PCI1(n)      (IRQ_GBUS_INT(16) + (n))
--#define IRQ_MB_A_PCI1_NUM     4
--#define IRQ_MB_A_PCI2(n)      (IRQ_GBUS_INT(20) + (n))
--#define IRQ_MB_A_PCI2_NUM     4
--#define IRQ_MB_A_EXT(n)               (IRQ_GBUS_INT(24) + (n))
--#define IRQ_MB_A_EXT_NUM      4
--#define IRQ_MB_A_USB_OC(n)    (IRQ_GBUS_INT(28) + (n))
--#define IRQ_MB_A_USB_OC_NUM   2
--#define IRQ_MB_A_PCMCIA_OC    IRQ_GBUS_INT(30)
-+# define IRQ_MB_A_LAN         IRQ_GBUS_INT(10)
-+# define IRQ_MB_A_PCI1(n)     (IRQ_GBUS_INT(16) + (n))
-+# define IRQ_MB_A_PCI1_NUM    4
-+# define IRQ_MB_A_PCI2(n)     (IRQ_GBUS_INT(20) + (n))
-+# define IRQ_MB_A_PCI2_NUM    4
-+# define IRQ_MB_A_EXT(n)      (IRQ_GBUS_INT(24) + (n))
-+# define IRQ_MB_A_EXT_NUM     4
-+# define IRQ_MB_A_USB_OC(n)   (IRQ_GBUS_INT(28) + (n))
-+# define IRQ_MB_A_USB_OC_NUM  2
-+# define IRQ_MB_A_PCMCIA_OC   IRQ_GBUS_INT(30)
-+
-+/* We define NUM_MACH_IRQS to include extra interrupts from the GBUS.  */
-+# define NUM_MACH_IRQS                (NUM_RTE_CB_IRQS + IRQ_GBUS_INT_NUM)
-+#else /* !CONFIG_RTE_GBUS_INT */
-+# define NUM_MACH_IRQS                NUM_RTE_CB_IRQS
-+
-+#endif /* CONFIG_RTE_GBUS_INT */
-+
-+
-+#ifdef CONFIG_RTE_MB_A_PCI
- /* Mother-A PCI bus support.  */
--#include <asm/rte_mb_a_pci.h>
-+
-+# include <asm/rte_mb_a_pci.h>
- /* These are the base addresses used for allocating device address
-    space.  512K of the motherboard SRAM is in the same space, so we have
-    to be careful not to let it be allocated.  */
--#define PCIBIOS_MIN_MEM               (MB_A_PCI_MEM_ADDR + 0x80000)
--#define PCIBIOS_MIN_IO                MB_A_PCI_IO_ADDR
-+# define PCIBIOS_MIN_MEM      (MB_A_PCI_MEM_ADDR + 0x80000)
-+# define PCIBIOS_MIN_IO               MB_A_PCI_IO_ADDR
- /* As we don't really support PCI DMA to cpu memory, and use bounce-buffers
-    instead, perversely enough, this becomes always true! */
--#define pci_dma_supported(dev, mask)          1
--#define pci_dac_dma_supported(dev, mask)      0
--#define pcibios_assign_all_busses()           1
-+# define pci_dma_supported(dev, mask)         1
-+# define pci_dac_dma_supported(dev, mask)     0
-+# define pcibios_assign_all_busses()          1
-+#endif /* CONFIG_RTE_MB_A_PCI */
- /* For <asm/param.h> */
---- linux-2.6.0-test1/include/asm-v850/rte_ma1_cb.h    2003-06-14 12:17:59.000000000 -0700
-+++ 25/include/asm-v850/rte_ma1_cb.h   2003-07-19 17:03:51.000000000 -0700
-@@ -17,25 +17,6 @@
- #include <asm/rte_cb.h>               /* Common defs for Midas RTE-CB boards.  */
--/* CPU addresses of GBUS memory spaces.  */
--#define GCS0_ADDR             0x05000000 /* GCS0 - Common SRAM (2MB) */
--#define GCS0_SIZE             0x00200000 /*   2MB */
--#define GCS1_ADDR             0x06000000 /* GCS1 - Flash ROM (8MB) */
--#define GCS1_SIZE             0x00800000 /*   8MB */
--#define GCS2_ADDR             0x07900000 /* GCS2 - I/O registers */
--#define GCS2_SIZE             0x00400000 /*   4MB */
--#define GCS5_ADDR             0x04000000 /* GCS5 - PCI bus space */
--#define GCS5_SIZE             0x01000000 /*   16MB */
--#define GCS6_ADDR             0x07980000 /* GCS6 - PCI control registers */
--#define GCS6_SIZE             0x00000200 /*   512B */
--
--
--/* The GBUS GINT0 - GINT4 interrupts are connected to the INTP000 - INTP011
--   pins on the CPU.  These are shared among the GBUS interrupts.  */
--#define IRQ_GINT(n)           IRQ_INTP(n)
--#define IRQ_GINT_NUM          4
--
--
- #define PLATFORM              "rte-v850e/ma1-cb"
- #define PLATFORM_LONG         "Midas lab RTE-V850E/MA1-CB"
-@@ -53,10 +34,32 @@
- #define SDRAM_SIZE            0x02000000 /* 32MB */
-+/* CPU addresses of GBUS memory spaces.  */
-+#define GCS0_ADDR             0x05000000 /* GCS0 - Common SRAM (2MB) */
-+#define GCS0_SIZE             0x00200000 /*   2MB */
-+#define GCS1_ADDR             0x06000000 /* GCS1 - Flash ROM (8MB) */
-+#define GCS1_SIZE             0x00800000 /*   8MB */
-+#define GCS2_ADDR             0x07900000 /* GCS2 - I/O registers */
-+#define GCS2_SIZE             0x00400000 /*   4MB */
-+#define GCS5_ADDR             0x04000000 /* GCS5 - PCI bus space */
-+#define GCS5_SIZE             0x01000000 /*   16MB */
-+#define GCS6_ADDR             0x07980000 /* GCS6 - PCI control registers */
-+#define GCS6_SIZE             0x00000200 /*   512B */
-+
-+
- /* For <asm/page.h> */
- #define PAGE_OFFSET           SRAM_ADDR
-+/* The GBUS GINT0 - GINT3 interrupts are connected to the INTP000 - INTP011
-+   pins on the CPU.  These are shared among the GBUS interrupts.  */
-+#define IRQ_GINT(n)           IRQ_INTP(n)
-+#define IRQ_GINT_NUM          4
-+
-+/* Used by <asm/rte_cb.h> to derive NUM_MACH_IRQS.  */
-+#define NUM_RTE_CB_IRQS               NUM_CPU_IRQS
-+
-+
- #ifdef CONFIG_ROM_KERNEL
- /* Kernel is in ROM, starting at address 0.  */
-@@ -98,8 +101,8 @@
- /* Override the basic MA uart pre-initialization so that we can
-    initialize extra stuff.  */
--#undef NB85E_UART_PRE_CONFIGURE       /* should be defined by <asm/ma.h> */
--#define NB85E_UART_PRE_CONFIGURE      rte_ma1_cb_uart_pre_configure
-+#undef V850E_UART_PRE_CONFIGURE       /* should be defined by <asm/ma.h> */
-+#define V850E_UART_PRE_CONFIGURE      rte_ma1_cb_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void rte_ma1_cb_uart_pre_configure (unsigned chan,
-                                          unsigned cflags, unsigned baud);
-@@ -108,9 +111,9 @@ extern void rte_ma1_cb_uart_pre_configur
- /* This board supports RTS/CTS for the on-chip UART, but only for channel 0. */
- /* CTS for UART channel 0 is pin P43 (bit 3 of port 4).  */
--#define NB85E_UART_CTS(chan)  ((chan) == 0 ? !(MA_PORT4_IO & 0x8) : 1)
-+#define V850E_UART_CTS(chan)  ((chan) == 0 ? !(MA_PORT4_IO & 0x8) : 1)
- /* RTS for UART channel 0 is pin P42 (bit 2 of port 4).  */
--#define NB85E_UART_SET_RTS(chan, val)                                       \
-+#define V850E_UART_SET_RTS(chan, val)                                       \
-    do {                                                                             \
-          if (chan == 0) {                                                   \
-                  unsigned old = MA_PORT4_IO;                                \
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/rte_me2_cb.h   2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,202 @@
-+/*
-+ * include/asm-v850/rte_me2_cb.h -- Midas labs RTE-V850E/ME2-CB board
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_RTE_ME2_CB_H__
-+#define __V850_RTE_ME2_CB_H__
-+
-+#include <asm/rte_cb.h>               /* Common defs for Midas RTE-CB boards.  */
-+
-+
-+#define PLATFORM              "rte-v850e/me2-cb"
-+#define PLATFORM_LONG         "Midas lab RTE-V850E/ME2-CB"
-+
-+#define CPU_CLOCK_FREQ                150000000 /* 150MHz */
-+#define FIXED_BOGOMIPS                50
-+
-+/* 32MB of onbard SDRAM.  */
-+#define SDRAM_ADDR            0x00800000
-+#define SDRAM_SIZE            0x02000000 /* 32MB */
-+
-+
-+/* CPU addresses of GBUS memory spaces.  */
-+#define GCS0_ADDR             0x04000000 /* GCS0 - Common SRAM (2MB) */
-+#define GCS0_SIZE             0x00800000 /*   8MB */
-+#define GCS1_ADDR             0x04800000 /* GCS1 - Flash ROM (8MB) */
-+#define GCS1_SIZE             0x00800000 /*   8MB */
-+#define GCS2_ADDR             0x07000000 /* GCS2 - I/O registers */
-+#define GCS2_SIZE             0x00800000 /*   8MB */
-+#define GCS5_ADDR             0x08000000 /* GCS5 - PCI bus space */
-+#define GCS5_SIZE             0x02000000 /*   32MB */
-+#define GCS6_ADDR             0x07800000 /* GCS6 - PCI control registers */
-+#define GCS6_SIZE             0x00800000 /*   8MB */
-+
-+
-+/* For <asm/page.h> */
-+#define PAGE_OFFSET           SDRAM_ADDR
-+
-+
-+#ifdef CONFIG_ROM_KERNEL
-+/* Kernel is in ROM, starting at address 0.  */
-+
-+#define INTV_BASE             0
-+#define ROOT_FS_IMAGE_RW      0
-+
-+#else /* !CONFIG_ROM_KERNEL */
-+/* Using RAM-kernel.  Assume some sort of boot-loader got us loaded at
-+   address 0.  */
-+
-+#define INTV_BASE             0
-+#define ROOT_FS_IMAGE_RW      1
-+
-+#endif /* CONFIG_ROM_KERNEL */
-+
-+
-+/* Some misc. on-board devices.  */
-+
-+/* Seven-segment LED display (four digits).  */
-+#define LED_ADDR(n)           (0x0FE02000 + (n))
-+#define LED(n)                        (*(volatile unsigned char *)LED_ADDR(n))
-+#define LED_NUM_DIGITS                4
-+
-+
-+/* On-board PIC.  */
-+
-+#define CB_PIC_BASE_ADDR      0x0FE04000
-+
-+#define CB_PIC_INT0M_ADDR     (CB_PIC_BASE_ADDR + 0x00)
-+#define CB_PIC_INT0M          (*(volatile u16 *)CB_PIC_INT0M_ADDR)
-+#define CB_PIC_INT1M_ADDR     (CB_PIC_BASE_ADDR + 0x10)
-+#define CB_PIC_INT1M          (*(volatile u16 *)CB_PIC_INT1M_ADDR)
-+#define CB_PIC_INTR_ADDR      (CB_PIC_BASE_ADDR + 0x20)
-+#define CB_PIC_INTR           (*(volatile u16 *)CB_PIC_INTR_ADDR)
-+#define CB_PIC_INTEN_ADDR     (CB_PIC_BASE_ADDR + 0x30)
-+#define CB_PIC_INTEN          (*(volatile u16 *)CB_PIC_INTEN_ADDR)
-+
-+#define CB_PIC_INT0EN         0x0001
-+#define CB_PIC_INT1EN         0x0002
-+#define CB_PIC_INT0SEL        0x0080
-+
-+/* The PIC interrupts themselves.  */
-+#define CB_PIC_BASE_IRQ               NUM_CPU_IRQS
-+#define IRQ_CB_PIC_NUM                10
-+
-+/* Some specific CB_PIC interrupts. */
-+#define IRQ_CB_EXTTM0         (CB_PIC_BASE_IRQ + 0)
-+#define IRQ_CB_EXTSIO         (CB_PIC_BASE_IRQ + 1)
-+#define IRQ_CB_TOVER          (CB_PIC_BASE_IRQ + 2)
-+#define IRQ_CB_GINT0          (CB_PIC_BASE_IRQ + 3)
-+#define IRQ_CB_USB            (CB_PIC_BASE_IRQ + 4)
-+#define IRQ_CB_LANC           (CB_PIC_BASE_IRQ + 5)
-+#define IRQ_CB_USB_VBUS_ON    (CB_PIC_BASE_IRQ + 6)
-+#define IRQ_CB_USB_VBUS_OFF   (CB_PIC_BASE_IRQ + 7)
-+#define IRQ_CB_EXTTM1         (CB_PIC_BASE_IRQ + 8)
-+#define IRQ_CB_EXTTM2         (CB_PIC_BASE_IRQ + 9)
-+
-+/* The GBUS GINT1 - GINT3 (note, not GINT0!) interrupts are connected to
-+   the INTP65 - INTP67 pins on the CPU.  These are shared among the GBUS
-+   interrupts.  */
-+#define IRQ_GINT(n)           IRQ_INTP((n) + 9)  /* 0 is unused! */
-+#define IRQ_GINT_NUM          4                  /* 0 is unused! */
-+
-+/* The shared interrupt line from the PIC is connected to CPU pin INTP23.  */
-+#define IRQ_CB_PIC            IRQ_INTP(4) /* P23 */
-+
-+/* Used by <asm/rte_cb.h> to derive NUM_MACH_IRQS.  */
-+#define NUM_RTE_CB_IRQS               (NUM_CPU_IRQS + IRQ_CB_PIC_NUM)
-+
-+
-+#ifndef __ASSEMBLY__
-+struct cb_pic_irq_init {
-+      const char *name;       /* name of interrupt type */
-+
-+      /* Range of kernel irq numbers for this type:
-+         BASE, BASE+INTERVAL, ..., BASE+INTERVAL*NUM  */
-+      unsigned base, num, interval;
-+
-+      unsigned priority;      /* interrupt priority to assign */
-+};
-+struct hw_interrupt_type;     /* fwd decl */
-+
-+/* Enable interrupt handling for interrupt IRQ.  */
-+extern void cb_pic_enable_irq (unsigned irq);
-+/* Disable interrupt handling for interrupt IRQ.  Note that any interrupts
-+   received while disabled will be delivered once the interrupt is enabled
-+   again, unless they are explicitly cleared using `cb_pic_clear_pending_irq'.  */
-+extern void cb_pic_disable_irq (unsigned irq);
-+/* Initialize HW_IRQ_TYPES for PIC irqs described in array INITS (which is
-+   terminated by an entry with the name field == 0).  */
-+extern void cb_pic_init_irq_types (struct cb_pic_irq_init *inits,
-+                                 struct hw_interrupt_type *hw_irq_types);
-+/* Initialize PIC interrupts.  */
-+extern void cb_pic_init_irqs (void);
-+#endif /* __ASSEMBLY__ */
-+
-+
-+/* TL16C550C on board UART see also asm/serial.h */
-+#define CB_UART_BASE          0x0FE08000
-+#define CB_UART_REG_GAP       0x10
-+#define CB_UART_CLOCK         0x16000000
-+
-+/* CompactFlash setting see also asm/ide.h, asm/hdreg.h.  */
-+#define CB_CF_BASE                    0x0FE0C000
-+#define CB_CF_CCR_ADDR                (CB_CF_BASE+0x200)
-+#define CB_CF_CCR                     (*(volatile u8 *)CB_CF_CCR_ADDR)
-+#define CB_CF_REG0_ADDR               (CB_CF_BASE+0x1000)
-+#define CB_CF_REG0                    (*(volatile u16 *)CB_CF_REG0_ADDR)
-+#define CB_CF_STS0_ADDR               (CB_CF_BASE+0x1004)
-+#define CB_CF_STS0                    (*(volatile u16 *)CB_CF_STS0_ADDR)
-+#define CB_PCATA_BASE                 (CB_CF_BASE+0x800)
-+#define CB_IDE_BASE                   (CB_CF_BASE+0x9F0)
-+#define CB_IDE_CTRL                   (CB_CF_BASE+0xBF6)
-+#define CB_IDE_REG_OFFS               0x1
-+
-+
-+/* SMSC LAN91C111 setting */
-+#if defined(CONFIG_SMC91111)
-+#define CB_LANC_BASE          0x0FE10300
-+#define CONFIG_SMC16BITONLY
-+#define ETH0_ADDR             CB_LANC_BASE
-+#define ETH0_IRQ              IRQ_CB_LANC
-+#endif /* CONFIG_SMC16BITONLY */
-+
-+
-+#undef V850E_UART_PRE_CONFIGURE
-+#define V850E_UART_PRE_CONFIGURE      rte_me2_cb_uart_pre_configure
-+#ifndef __ASSEMBLY__
-+extern void rte_me2_cb_uart_pre_configure (unsigned chan,
-+                                         unsigned cflags, unsigned baud);
-+#endif /* __ASSEMBLY__ */
-+
-+/* This board supports RTS/CTS for the on-chip UART, but only for channel 0. */
-+
-+/* CTS for UART channel 0 is pin P22 (bit 2 of port 2).  */
-+#define V850E_UART_CTS(chan)  ((chan) == 0 ? !(ME2_PORT2_IO & 0x4) : 1)
-+/* RTS for UART channel 0 is pin P21 (bit 1 of port 2).  */
-+#define V850E_UART_SET_RTS(chan, val)                                       \
-+   do {                                                                             \
-+         if (chan == 0) {                                                   \
-+                 unsigned old = ME2_PORT2_IO;                               \
-+                 if (val)                                                   \
-+                         ME2_PORT2_IO = old & ~0x2;                         \
-+                 else                                                       \
-+                         ME2_PORT2_IO = old | 0x2;                          \
-+         }                                                                  \
-+   } while (0)
-+
-+
-+#ifndef __ASSEMBLY__
-+extern void rte_me2_cb_init_irqs (void);
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_RTE_ME2_CB_H__ */
---- linux-2.6.0-test1/include/asm-v850/rte_nb85e_cb.h  2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/asm-v850/rte_nb85e_cb.h 2003-07-19 17:03:51.000000000 -0700
-@@ -17,6 +17,21 @@
- #include <asm/rte_cb.h>               /* Common defs for Midas RTE-CB boards.  */
-+#define PLATFORM              "rte-v850e/nb85e-cb"
-+#define PLATFORM_LONG         "Midas lab RTE-V850E/NB85E-CB"
-+
-+#define CPU_CLOCK_FREQ                50000000 /* 50MHz */
-+
-+/* 1MB of onboard SRAM.  Note that the monitor ROM uses parts of this
-+   for its own purposes, so care must be taken.  */
-+#define SRAM_ADDR             0x03C00000
-+#define SRAM_SIZE             0x00100000 /* 1MB */
-+
-+/* 16MB of onbard SDRAM.  */
-+#define SDRAM_ADDR            0x01000000
-+#define SDRAM_SIZE            0x01000000 /* 16MB */
-+
-+
- /* CPU addresses of GBUS memory spaces.  */
- #define GCS0_ADDR             0x00400000 /* GCS0 - Common SRAM (2MB) */
- #define GCS0_SIZE             0x00400000 /*   4MB */
-@@ -39,20 +54,8 @@
- #define IRQ_GINT(n)           (10 + (n))
- #define IRQ_GINT_NUM          3
--
--#define PLATFORM      "rte-v850e/nb85e-cb"
--#define PLATFORM_LONG "Midas lab RTE-V850E/NB85E-CB"
--
--#define CPU_CLOCK_FREQ        50000000 /* 50MHz */
--
--/* 1MB of onboard SRAM.  Note that the monitor ROM uses parts of this
--   for its own purposes, so care must be taken.  */
--#define SRAM_ADDR     0x03C00000
--#define SRAM_SIZE     0x00100000 /* 1MB */
--
--/* 16MB of onbard SDRAM.  */
--#define SDRAM_ADDR    0x01000000
--#define SDRAM_SIZE    0x01000000 /* 16MB */
-+/* Used by <asm/rte_cb.h> to derive NUM_MACH_IRQS.  */
-+#define NUM_RTE_CB_IRQS               NUM_CPU_IRQS
- #ifdef CONFIG_ROM_KERNEL
-@@ -86,8 +89,8 @@
- /* Override the basic TEG UART pre-initialization so that we can
-    initialize extra stuff.  */
--#undef NB85E_UART_PRE_CONFIGURE       /* should be defined by <asm/teg.h> */
--#define NB85E_UART_PRE_CONFIGURE      rte_nb85e_cb_uart_pre_configure
-+#undef V850E_UART_PRE_CONFIGURE       /* should be defined by <asm/teg.h> */
-+#define V850E_UART_PRE_CONFIGURE      rte_nb85e_cb_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void rte_nb85e_cb_uart_pre_configure (unsigned chan,
-                                            unsigned cflags, unsigned baud);
-@@ -96,9 +99,9 @@ extern void rte_nb85e_cb_uart_pre_config
- /* This board supports RTS/CTS for the on-chip UART. */
- /* CTS is pin P00.  */
--#define NB85E_UART_CTS(chan)  (! (TEG_PORT0_IO & 0x1))
-+#define V850E_UART_CTS(chan)  (! (TEG_PORT0_IO & 0x1))
- /* RTS is pin P02.  */
--#define NB85E_UART_SET_RTS(chan, val)                                       \
-+#define V850E_UART_SET_RTS(chan, val)                                       \
-    do {                                                                             \
-          unsigned old = TEG_PORT0_IO;                                       \
-          TEG_PORT0_IO = val ? (old & ~0x4) : (old | 0x4);                   \
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/serial.h       2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,58 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 1999 by Ralf Baechle
-+ * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
-+ */ 
-+#include <linux/config.h>
-+
-+#ifdef CONFIG_RTE_CB_ME2
-+
-+#include <asm/rte_me2_cb.h>
-+
-+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
-+
-+#define irq_cannonicalize(x) (x)
-+#define BASE_BAUD     250000  /* (16MHz / (16 * 38400)) * 9600 */
-+#define RS_TABLE_SIZE 1
-+#define SERIAL_PORT_DFNS \
-+   { 0, BASE_BAUD, CB_UART_BASE, IRQ_CB_EXTSIO, STD_COM_FLAGS },
-+
-+/* Redefine UART register offsets.  */
-+#undef UART_RX
-+#undef UART_TX
-+#undef UART_DLL
-+#undef UART_TRG
-+#undef UART_DLM
-+#undef UART_IER
-+#undef UART_FCTR
-+#undef UART_IIR
-+#undef UART_FCR
-+#undef UART_EFR
-+#undef UART_LCR
-+#undef UART_MCR
-+#undef UART_LSR
-+#undef UART_MSR
-+#undef UART_SCR
-+#undef UART_EMSR
-+
-+#define UART_RX               (0 * CB_UART_REG_GAP)
-+#define UART_TX               (0 * CB_UART_REG_GAP)
-+#define UART_DLL      (0 * CB_UART_REG_GAP)
-+#define UART_TRG      (0 * CB_UART_REG_GAP)
-+#define UART_DLM      (1 * CB_UART_REG_GAP)
-+#define UART_IER      (1 * CB_UART_REG_GAP)
-+#define UART_FCTR     (1 * CB_UART_REG_GAP)
-+#define UART_IIR      (2 * CB_UART_REG_GAP)
-+#define UART_FCR      (2 * CB_UART_REG_GAP)
-+#define UART_EFR      (2 * CB_UART_REG_GAP)
-+#define UART_LCR      (3 * CB_UART_REG_GAP)
-+#define UART_MCR      (4 * CB_UART_REG_GAP)
-+#define UART_LSR      (5 * CB_UART_REG_GAP)
-+#define UART_MSR      (6 * CB_UART_REG_GAP)
-+#define UART_SCR      (7 * CB_UART_REG_GAP)
-+#define UART_EMSR     (7 * CB_UART_REG_GAP)
-+
-+#endif /* CONFIG_RTE_CB_ME2 */
---- linux-2.6.0-test1/include/asm-v850/sim85e2c.h      2003-06-14 12:18:01.000000000 -0700
-+++ 25/include/asm-v850/sim85e2c.h     2003-07-19 17:03:51.000000000 -0700
-@@ -15,78 +15,12 @@
- #ifndef __V850_SIM85E2C_H__
- #define __V850_SIM85E2C_H__
-+/* Use generic sim85e2 settings, other than the various names.  */
-+#include <asm/sim85e2.h>
--#define CPU_ARCH      "v850e2"
- #define CPU_MODEL     "v850e2"
- #define CPU_MODEL_LONG        "NEC V850E2"
- #define PLATFORM      "sim85e2c"
- #define PLATFORM_LONG "SIM85E2C V850E2 simulator"
--
--/* Various memory areas supported by the simulator.
--   These should match the corresponding definitions in the linker script.  */
--
--/* `instruction RAM'; instruction fetches are much faster from IRAM than
--   from DRAM.  */
--#define IRAM_ADDR             0
--#define IRAM_SIZE             0x00100000 /* 1MB */
--/* `data RAM', below and contiguous with the I/O space.
--   Data fetches are much faster from DRAM than from IRAM.  */
--#define DRAM_ADDR             0xfff00000
--#define DRAM_SIZE             0x000ff000 /* 1020KB */
--/* `external ram'.  Unlike the above RAM areas, this memory is cached,
--   so both instruction and data fetches should be (mostly) fast --
--   however, currently only write-through caching is supported, so writes
--   to ERAM will be slow.  */
--#define ERAM_ADDR             0x00100000
--#define ERAM_SIZE             0x07f00000 /* 127MB (max) */
--
--
--/* CPU core control registers; these should be expanded and moved into
--   separate header files when we support some other processors based on
--   the same E2 core.  */
--/* Bus Transaction Control Register */
--#define NA85E2C_CACHE_BTSC_ADDR       0xfffff070
--#define NA85E2C_CACHE_BTSC    (*(volatile unsigned short *)NA85E2C_CACHE_BTSC_ADDR)
--#define NA85E2C_CACHE_BTSC_ICM        0x1 /* icache enable */
--#define NA85E2C_CACHE_BTSC_DCM0       0x4 /* dcache enable, bit 0 */
--#define NA85E2C_CACHE_BTSC_DCM1       0x8 /* dcache enable, bit 1 */
--/* Cache Configuration Register */
--#define NA85E2C_BUSM_BHC_ADDR 0xfffff06a
--#define NA85E2C_BUSM_BHC      (*(volatile unsigned short *)NA85E2C_BUSM_BHC_ADDR)
--
--/* Simulator specific control registers.  */
--/* NOTHAL controls whether the simulator will stop at a `halt' insn.  */
--#define NOTHAL_ADDR           0xffffff22
--#define NOTHAL                        (*(volatile unsigned char *)NOTHAL_ADDR)
--/* The simulator will stop N cycles after N is written to SIMFIN.  */
--#define SIMFIN_ADDR           0xffffff24
--#define SIMFIN                        (*(volatile unsigned short *)SIMFIN_ADDR)
--
--
--/* The simulator has an nb85e-style interrupt system.  */
--#include <asm/nb85e_intc.h>
--
--/* For <asm/irq.h> */
--#define NUM_CPU_IRQS          64
--
--
--/* For <asm/page.h> */
--#define PAGE_OFFSET           DRAM_ADDR
--
--
--/* For <asm/entry.h> */
--/* `R0 RAM', used for a few miscellaneous variables that must be accessible
--   using a load instruction relative to R0.  The sim85e2c simulator
--   actually puts 1020K of RAM from FFF00000 to FFFFF000, so we arbitarily
--   choose a small portion at the end of that.  */
--#define R0_RAM_ADDR           0xFFFFE000
--
--
--/* For <asm/param.h> */
--#ifndef HZ
--#define HZ                    24      /* Minimum supported frequency.  */
--#endif
--
--
- #endif /* __V850_SIM85E2C_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/sim85e2.h      2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,79 @@
-+/*
-+ * include/asm-v850/sim85e2.h -- Machine-dependent defs for
-+ *    V850E2 RTL simulator
-+ *
-+ *  Copyright (C) 2002,03  NEC Electronics Corporation
-+ *  Copyright (C) 2002,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_SIM85E2_H__
-+#define __V850_SIM85E2_H__
-+
-+
-+#include <asm/v850e2.h>               /* Based on V850E2 core.  */
-+
-+
-+/* Various memory areas supported by the simulator.
-+   These should match the corresponding definitions in the linker script.  */
-+
-+/* `instruction RAM'; instruction fetches are much faster from IRAM than
-+   from DRAM.  */
-+#define IRAM_ADDR             0
-+#define IRAM_SIZE             0x00100000 /* 1MB */
-+/* `data RAM', below and contiguous with the I/O space.
-+   Data fetches are much faster from DRAM than from IRAM.  */
-+#define DRAM_ADDR             0xfff00000
-+#define DRAM_SIZE             0x000ff000 /* 1020KB */
-+/* `external ram'.  Unlike the above RAM areas, this memory is cached,
-+   so both instruction and data fetches should be (mostly) fast --
-+   however, currently only write-through caching is supported, so writes
-+   to ERAM will be slow.  */
-+#define ERAM_ADDR             0x00100000
-+#define ERAM_SIZE             0x07f00000 /* 127MB (max) */
-+/* Dynamic RAM; uses memory controller.  */
-+#define SDRAM_ADDR            0x10000000
-+#if 0
-+#define SDRAM_SIZE            0x01000000 /* 16MB */
-+#else
-+#define SDRAM_SIZE            0x00200000 /* Only use 2MB for testing */
-+#endif
-+
-+
-+/* Simulator specific control registers.  */
-+/* NOTHAL controls whether the simulator will stop at a `halt' insn.  */
-+#define SIM85E2_NOTHAL_ADDR   0xffffff22
-+#define SIM85E2_NOTHAL                (*(volatile u8 *)SIM85E2_NOTHAL_ADDR)
-+/* The simulator will stop N cycles after N is written to SIMFIN.  */
-+#define SIM85E2_SIMFIN_ADDR   0xffffff24
-+#define SIM85E2_SIMFIN                (*(volatile u16 *)SIM85E2_SIMFIN_ADDR)
-+
-+
-+/* For <asm/irq.h> */
-+#define NUM_CPU_IRQS          64
-+
-+
-+/* For <asm/page.h> */
-+#define PAGE_OFFSET           SDRAM_ADDR
-+
-+
-+/* For <asm/entry.h> */
-+/* `R0 RAM', used for a few miscellaneous variables that must be accessible
-+   using a load instruction relative to R0.  The sim85e2 simulator
-+   actually puts 1020K of RAM from FFF00000 to FFFFF000, so we arbitarily
-+   choose a small portion at the end of that.  */
-+#define R0_RAM_ADDR           0xFFFFE000
-+
-+
-+/* For <asm/param.h> */
-+#ifndef HZ
-+#define HZ                    24      /* Minimum supported frequency.  */
-+#endif
-+
-+
-+#endif /* __V850_SIM85E2_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/sim85e2s.h     2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,28 @@
-+/*
-+ * include/asm-v850/sim85e2s.h -- Machine-dependent defs for
-+ *    V850E2 RTL simulator
-+ *
-+ *  Copyright (C) 2003  NEC Electronics Corporation
-+ *  Copyright (C) 2003  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_SIM85E2S_H__
-+#define __V850_SIM85E2S_H__
-+
-+#include <asm/sim85e2.h>      /* Use generic sim85e2 settings.  */
-+#if 0
-+#include <asm/v850e2_cache.h> /* + cache */
-+#endif
-+
-+#define CPU_MODEL     "v850e2"
-+#define CPU_MODEL_LONG        "NEC V850E2"
-+#define PLATFORM      "sim85e2s"
-+#define PLATFORM_LONG "SIM85E2S V850E2 simulator"
-+
-+#endif /* __V850_SIM85E2S_H__ */
---- linux-2.6.0-test1/include/asm-v850/stat.h  2003-06-14 12:18:26.000000000 -0700
-+++ 25/include/asm-v850/stat.h 2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * include/asm-v850/stat.h -- v850 stat structure
-  *
-- *  Copyright (C) 2001,02,03  NEC Corporation
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-  *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/system.h        2003-06-14 12:18:29.000000000 -0700
-+++ 25/include/asm-v850/system.h       2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  * include/asm-v850/system.h -- Low-level interrupt/thread ops
-  *
-- *  Copyright (C) 2001,02,03  NEC Corporation
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-  *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-  *
-  * This file is subject to the terms and conditions of the GNU General
---- linux-2.6.0-test1/include/asm-v850/teg.h   2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/asm-v850/teg.h  2003-07-19 17:03:51.000000000 -0700
-@@ -15,9 +15,9 @@
- #define __V850_TEG_H__
--/* The TEG uses the NB85E cpu core.  */
--#include <asm/nb85e.h>
--#include <asm/nb85e_cache.h>
-+/* The TEG uses the V850E cpu core.  */
-+#include <asm/v850e.h>
-+#include <asm/v850e_cache.h>
- #define CPU_MODEL     "v850e/nb85e-teg"
-@@ -51,18 +51,18 @@
- /* TEG UART details.  */
--#define NB85E_UART_BASE_ADDR(n)               (0xFFFFF600 + 0x10 * (n))
--#define NB85E_UART_ASIM_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x0)
--#define NB85E_UART_ASIS_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x2)
--#define NB85E_UART_ASIF_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x4)
--#define NB85E_UART_CKSR_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x6)
--#define NB85E_UART_BRGC_ADDR(n)               (NB85E_UART_BASE_ADDR(n) + 0x8)
--#define NB85E_UART_TXB_ADDR(n)                (NB85E_UART_BASE_ADDR(n) + 0xA)
--#define NB85E_UART_RXB_ADDR(n)                (NB85E_UART_BASE_ADDR(n) + 0xC)
--#define NB85E_UART_NUM_CHANNELS               1
--#define NB85E_UART_BASE_FREQ          CPU_CLOCK_FREQ
-+#define V850E_UART_BASE_ADDR(n)               (0xFFFFF600 + 0x10 * (n))
-+#define V850E_UART_ASIM_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x0)
-+#define V850E_UART_ASIS_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x2)
-+#define V850E_UART_ASIF_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x4)
-+#define V850E_UART_CKSR_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x6)
-+#define V850E_UART_BRGC_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x8)
-+#define V850E_UART_TXB_ADDR(n)                (V850E_UART_BASE_ADDR(n) + 0xA)
-+#define V850E_UART_RXB_ADDR(n)                (V850E_UART_BASE_ADDR(n) + 0xC)
-+#define V850E_UART_NUM_CHANNELS               1
-+#define V850E_UART_BASE_FREQ          CPU_CLOCK_FREQ
- /* This is a function that gets called before configuring the UART.  */
--#define NB85E_UART_PRE_CONFIGURE      teg_uart_pre_configure
-+#define V850E_UART_PRE_CONFIGURE      teg_uart_pre_configure
- #ifndef __ASSEMBLY__
- extern void teg_uart_pre_configure (unsigned chan,
-                                   unsigned cflags, unsigned baud);
-@@ -70,15 +70,15 @@ extern void teg_uart_pre_configure (unsi
- /* The TEG RTPU.  */
--#define NB85E_RTPU_BASE_ADDR          0xFFFFF210
-+#define V850E_RTPU_BASE_ADDR          0xFFFFF210
- /* TEG series timer D details.  */
--#define NB85E_TIMER_D_BASE_ADDR               0xFFFFF210
--#define NB85E_TIMER_D_TMCD_BASE_ADDR  (NB85E_TIMER_D_BASE_ADDR + 0x0)
--#define NB85E_TIMER_D_TMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x4)
--#define NB85E_TIMER_D_CMD_BASE_ADDR   (NB85E_TIMER_D_BASE_ADDR + 0x8)
--#define NB85E_TIMER_D_BASE_FREQ               CPU_CLOCK_FREQ
-+#define V850E_TIMER_D_BASE_ADDR               0xFFFFF210
-+#define V850E_TIMER_D_TMCD_BASE_ADDR  (V850E_TIMER_D_BASE_ADDR + 0x0)
-+#define V850E_TIMER_D_TMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x4)
-+#define V850E_TIMER_D_CMD_BASE_ADDR   (V850E_TIMER_D_BASE_ADDR + 0x8)
-+#define V850E_TIMER_D_BASE_FREQ               CPU_CLOCK_FREQ
- /* `Interrupt Source Select' control register.  */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e2_cache.h 2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,74 @@
-+/*
-+ * include/asm-v850/v850e2_cache_cache.h -- Cache control for V850E2
-+ *    cache memories
-+ *
-+ *  Copyright (C) 2003  NEC Electronics Corporation
-+ *  Copyright (C) 2003  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E2_CACHE_H__
-+#define __V850_V850E2_CACHE_H__
-+
-+#include <asm/types.h>
-+
-+
-+/* Cache control registers.  */
-+
-+/* Bus Transaction Control */
-+#define V850E2_CACHE_BTSC_ADDR        0xFFFFF070
-+#define V850E2_CACHE_BTSC     (*(volatile u16 *)V850E2_CACHE_BTSC_ADDR)
-+#define V850E2_CACHE_BTSC_ICM 0x0001 /* icache enable */
-+#define V850E2_CACHE_BTSC_DCM0        0x0004 /* dcache enable, bit 0 */
-+#define V850E2_CACHE_BTSC_DCM1        0x0008 /* dcache enable, bit 1 */
-+#define V850E2_CACHE_BTSC_DCM_WT                    /* write-through */ \
-+                      V850E2_CACHE_BTSC_DCM0
-+#ifdef CONFIG_V850E2_V850E2S
-+# define V850E2_CACHE_BTSC_DCM_WB_NO_ALLOC    /* write-back, non-alloc */ \
-+                      V850E2_CACHE_BTSC_DCM1  
-+# define V850E2_CACHE_BTSC_DCM_WB_ALLOC             /* write-back, non-alloc */ \
-+                      (V850E2_CACHE_BTSC_DCM1 | V850E2_CACHE_BTSC_DCM0)
-+# define V850E2_CACHE_BTSC_ISEQ       0x0010 /* icache `address sequence mode' */
-+# define V850E2_CACHE_BTSC_DSEQ       0x0020 /* dcache `address sequence mode' */
-+# define V850E2_CACHE_BTSC_IRFC       0x0030
-+# define V850E2_CACHE_BTSC_ILCD       0x4000
-+# define V850E2_CACHE_BTSC_VABE       0x8000
-+#endif /* CONFIG_V850E2_V850E2S */
-+
-+/* Cache operation start address register (low-bits).  */
-+#define V850E2_CACHE_CADL_ADDR        0xFFFFF074
-+#define V850E2_CACHE_CADL     (*(volatile u16 *)V850E2_CACHE_CADL_ADDR)
-+/* Cache operation start address register (high-bits).  */
-+#define V850E2_CACHE_CADH_ADDR        0xFFFFF076
-+#define V850E2_CACHE_CADH     (*(volatile u16 *)V850E2_CACHE_CADH_ADDR)
-+/* Cache operation count register.  */
-+#define V850E2_CACHE_CCNT_ADDR        0xFFFFF078
-+#define V850E2_CACHE_CCNT     (*(volatile u16 *)V850E2_CACHE_CCNT_ADDR)
-+/* Cache operation specification register.  */
-+#define V850E2_CACHE_COPR_ADDR        0xFFFFF07A
-+#define V850E2_CACHE_COPR     (*(volatile u16 *)V850E2_CACHE_COPR_ADDR)
-+#define V850E2_CACHE_COPR_STRT        0x0001 /* start cache operation */
-+#define V850E2_CACHE_COPR_LBSL        0x0100 /* 0 = icache, 1 = dcache */
-+#define V850E2_CACHE_COPR_WSLE        0x0200 /* operate on cache way */
-+#define V850E2_CACHE_COPR_WSL(way) ((way) * 0x0400) /* way select */
-+#define V850E2_CACHE_COPR_CFC(op)  ((op)  * 0x1000) /* cache function code */
-+
-+
-+/* Size of a cache line in bytes.  */
-+#define V850E2_CACHE_LINE_SIZE_BITS   4
-+#define V850E2_CACHE_LINE_SIZE                (1 << V850E2_CACHE_LINE_SIZE_BITS)
-+
-+/* The size of each cache `way' in lines.  */
-+#define V850E2_CACHE_WAY_SIZE         256
-+
-+
-+/* For <asm/cache.h> */
-+#define L1_CACHE_BYTES                        V850E2_CACHE_LINE_SIZE
-+
-+
-+#endif /* __V850_V850E2_CACHE_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e2.h       2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,69 @@
-+/*
-+ * include/asm-v850/v850e2.h -- Machine-dependent defs for V850E2 CPUs
-+ *
-+ *  Copyright (C) 2002,03  NEC Electronics Corporation
-+ *  Copyright (C) 2002,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E2_H__
-+#define __V850_V850E2_H__
-+
-+#include <asm/v850e_intc.h>   /* v850e-style interrupt system.  */
-+
-+
-+#define CPU_ARCH "v850e2"
-+
-+
-+/* Control registers.  */
-+
-+/* Chip area select control */ 
-+#define V850E2_CSC_ADDR(n)    (0xFFFFF060 + (n) * 2)
-+#define V850E2_CSC(n)         (*(volatile u16 *)V850E2_CSC_ADDR(n))
-+/* I/O area select control */
-+#define V850E2_BPC_ADDR               0xFFFFF064
-+#define V850E2_BPC            (*(volatile u16 *)V850E2_BPC_ADDR)
-+/* Bus size configuration */
-+#define V850E2_BSC_ADDR               0xFFFFF066
-+#define V850E2_BSC            (*(volatile u16 *)V850E2_BSC_ADDR)
-+/* Endian configuration */
-+#define V850E2_BEC_ADDR               0xFFFFF068
-+#define V850E2_BEC            (*(volatile u16 *)V850E2_BEC_ADDR)
-+/* Cache configuration */
-+#define V850E2_BHC_ADDR               0xFFFFF06A
-+#define V850E2_BHC            (*(volatile u16 *)V850E2_BHC_ADDR)
-+/* NPB strobe-wait configuration */
-+#define V850E2_VSWC_ADDR      0xFFFFF06E
-+#define V850E2_VSWC           (*(volatile u16 *)V850E2_VSWC_ADDR)
-+/* Bus cycle type */
-+#define V850E2_BCT_ADDR(n)    (0xFFFFF480 + (n) * 2)
-+#define V850E2_BCT(n)         (*(volatile u16 *)V850E2_BCT_ADDR(n))
-+/* Data wait control */
-+#define V850E2_DWC_ADDR(n)    (0xFFFFF484 + (n) * 2)
-+#define V850E2_DWC(n)         (*(volatile u16 *)V850E2_DWC_ADDR(n))
-+/* Bus cycle control */
-+#define V850E2_BCC_ADDR               0xFFFFF488
-+#define V850E2_BCC            (*(volatile u16 *)V850E2_BCC_ADDR)
-+/* Address wait control */
-+#define V850E2_ASC_ADDR               0xFFFFF48A
-+#define V850E2_ASC            (*(volatile u16 *)V850E2_ASC_ADDR)
-+/* Local bus sizing control */
-+#define V850E2_LBS_ADDR               0xFFFFF48E
-+#define V850E2_LBS            (*(volatile u16 *)V850E2_LBS_ADDR)
-+/* Line buffer control */
-+#define V850E2_LBC_ADDR(n)    (0xFFFFF490 + (n) * 2)
-+#define V850E2_LBC(n)         (*(volatile u16 *)V850E2_LBC_ADDR(n))
-+/* SDRAM configuration */
-+#define V850E2_SCR_ADDR(n)    (0xFFFFF4A0 + (n) * 4)
-+#define V850E2_SCR(n)         (*(volatile u16 *)V850E2_SCR_ADDR(n))
-+/* SDRAM refresh cycle control */
-+#define V850E2_RFS_ADDR(n)    (0xFFFFF4A2 + (n) * 4)
-+#define V850E2_RFS(n)         (*(volatile u16 *)V850E2_RFS_ADDR(n))
-+
-+
-+#endif /* __V850_V850E2_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_cache.h  2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,48 @@
-+/*
-+ * include/asm-v850/v850e_cache.h -- Cache control for V850E cache memories
-+ *
-+ *  Copyright (C) 2001,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This file implements cache control for the rather simple cache used on
-+   some V850E CPUs, specifically the NB85E/TEG CPU-core and the V850E/ME2
-+   CPU.  V850E2 processors have their own (better) cache
-+   implementation.  */
-+
-+#ifndef __V850_V850E_CACHE_H__
-+#define __V850_V850E_CACHE_H__
-+
-+#include <asm/types.h>
-+
-+
-+/* Cache control registers.  */
-+#define V850E_CACHE_BHC_ADDR  0xFFFFF06A
-+#define V850E_CACHE_BHC               (*(volatile u16 *)V850E_CACHE_BHC_ADDR)
-+#define V850E_CACHE_ICC_ADDR  0xFFFFF070
-+#define V850E_CACHE_ICC               (*(volatile u16 *)V850E_CACHE_ICC_ADDR)
-+#define V850E_CACHE_ISI_ADDR  0xFFFFF072
-+#define V850E_CACHE_ISI               (*(volatile u16 *)V850E_CACHE_ISI_ADDR)
-+#define V850E_CACHE_DCC_ADDR  0xFFFFF078
-+#define V850E_CACHE_DCC               (*(volatile u16 *)V850E_CACHE_DCC_ADDR)
-+
-+/* Size of a cache line in bytes.  */
-+#define V850E_CACHE_LINE_SIZE 16
-+
-+/* For <asm/cache.h> */
-+#define L1_CACHE_BYTES                V850E_CACHE_LINE_SIZE
-+
-+
-+#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
-+/* Set caching params via the BHC, ICC, and DCC registers.  */
-+void v850e_cache_enable (u16 bhc, u16 icc, u16 dcc);
-+#endif /* __KERNEL__ && !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_CACHE_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e.h        2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,21 @@
-+/*
-+ * include/asm-v850/v850e.h -- V850E CPU
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_H__
-+#define __V850_V850E_H__
-+
-+#include <asm/v850e_intc.h>
-+
-+#define CPU_ARCH "v850e"
-+
-+#endif /* __V850_V850E_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_intc.h   2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,133 @@
-+/*
-+ * include/asm-v850/v850e_intc.h -- V850E CPU interrupt controller (INTC)
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_INTC_H__
-+#define __V850_V850E_INTC_H__
-+
-+
-+/* There are 4 16-bit `Interrupt Mask Registers' located contiguously
-+   starting from this base.  Each interrupt uses a single bit to
-+   indicated enabled/disabled status.  */
-+#define V850E_INTC_IMR_BASE_ADDR  0xFFFFF100
-+#define V850E_INTC_IMR_ADDR(irq)  (V850E_INTC_IMR_BASE_ADDR + ((irq) >> 3))
-+#define V850E_INTC_IMR_BIT(irq)         ((irq) & 0x7)
-+
-+/* Each maskable interrupt has a single-byte control register at this
-+   address.  */
-+#define V850E_INTC_IC_BASE_ADDR         0xFFFFF110
-+#define V850E_INTC_IC_ADDR(irq)         (V850E_INTC_IC_BASE_ADDR + ((irq) << 1))
-+#define V850E_INTC_IC(irq)      (*(volatile u8 *)V850E_INTC_IC_ADDR(irq))
-+/* Encode priority PR for storing in an interrupt control register.  */
-+#define V850E_INTC_IC_PR(pr)    (pr)
-+/* Interrupt disable bit in an interrupt control register.  */
-+#define V850E_INTC_IC_MK_BIT    6
-+#define V850E_INTC_IC_MK        (1 << V850E_INTC_IC_MK_BIT)
-+/* Interrupt pending flag in an interrupt control register.  */
-+#define V850E_INTC_IC_IF_BIT    7
-+#define V850E_INTC_IC_IF        (1 << V850E_INTC_IC_IF_BIT)
-+
-+/* The ISPR (In-service priority register) contains one bit for each interrupt
-+   priority level, which is set to one when that level is currently being
-+   serviced (and thus blocking any interrupts of equal or lesser level).  */
-+#define V850E_INTC_ISPR_ADDR    0xFFFFF1FA
-+#define V850E_INTC_ISPR                 (*(volatile u8 *)V850E_INTC_ISPR_ADDR)
-+
-+
-+#ifndef __ASSEMBLY__
-+
-+/* Enable interrupt handling for interrupt IRQ.  */
-+static inline void v850e_intc_enable_irq (unsigned irq)
-+{
-+      __asm__ __volatile__ ("clr1 %0, [%1]"
-+                            :: "r" (V850E_INTC_IMR_BIT (irq)),
-+                               "r" (V850E_INTC_IMR_ADDR (irq))
-+                            : "memory");
-+}
-+
-+/* Disable interrupt handling for interrupt IRQ.  Note that any
-+   interrupts received while disabled will be delivered once the
-+   interrupt is enabled again, unless they are explicitly cleared using
-+   `v850e_intc_clear_pending_irq'.  */
-+static inline void v850e_intc_disable_irq (unsigned irq)
-+{
-+      __asm__ __volatile__ ("set1 %0, [%1]"
-+                            :: "r" (V850E_INTC_IMR_BIT (irq)),
-+                               "r" (V850E_INTC_IMR_ADDR (irq))
-+                            : "memory");
-+}
-+
-+/* Return true if interrupt handling for interrupt IRQ is enabled.  */
-+static inline int v850e_intc_irq_enabled (unsigned irq)
-+{
-+      int rval;
-+      __asm__ __volatile__ ("tst1 %1, [%2]; setf z, %0"
-+                            : "=r" (rval)
-+                            : "r" (V850E_INTC_IMR_BIT (irq)),
-+                              "r" (V850E_INTC_IMR_ADDR (irq)));
-+      return rval;
-+}
-+
-+/* Disable irqs from 0 until LIMIT.  LIMIT must be a multiple of 8.  */
-+static inline void _v850e_intc_disable_irqs (unsigned limit)
-+{
-+      unsigned long addr;
-+      for (addr = V850E_INTC_IMR_BASE_ADDR; limit >= 8; addr++, limit -= 8)
-+              *(char *)addr = 0xFF;
-+}
-+
-+/* Disable all irqs.  This is purposely a macro, because NUM_MACH_IRQS
-+   will be only be defined later.  */
-+#define v850e_intc_disable_irqs()   _v850e_intc_disable_irqs (NUM_MACH_IRQS)
-+
-+/* Clear any pending interrupts for IRQ.  */
-+static inline void v850e_intc_clear_pending_irq (unsigned irq)
-+{
-+      __asm__ __volatile__ ("clr1 %0, 0[%1]"
-+                            :: "i" (V850E_INTC_IC_IF_BIT),
-+                               "r" (V850E_INTC_IC_ADDR (irq))
-+                            : "memory");
-+}
-+
-+/* Return true if interrupt IRQ is pending (but disabled).  */
-+static inline int v850e_intc_irq_pending (unsigned irq)
-+{
-+      int rval;
-+      __asm__ __volatile__ ("tst1 %1, 0[%2]; setf nz, %0"
-+                            : "=r" (rval)
-+                            : "i" (V850E_INTC_IC_IF_BIT),
-+                              "r" (V850E_INTC_IC_ADDR (irq)));
-+      return rval;
-+}
-+
-+
-+struct v850e_intc_irq_init {
-+      const char *name;       /* name of interrupt type */
-+
-+      /* Range of kernel irq numbers for this type:
-+         BASE, BASE+INTERVAL, ..., BASE+INTERVAL*NUM  */
-+      unsigned base, num, interval;
-+
-+      unsigned priority;      /* interrupt priority to assign */
-+};
-+struct hw_interrupt_type;     /* fwd decl */
-+
-+/* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array
-+   INITS (which is terminated by an entry with the name field == 0).  */
-+extern void v850e_intc_init_irq_types (struct v850e_intc_irq_init *inits,
-+                                     struct hw_interrupt_type *hw_irq_types);
-+
-+
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_INTC_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_timer_c.h        2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,48 @@
-+/*
-+ * include/asm-v850/v850e_timer_c.h -- `Timer C' component often used
-+ *    with the V850E cpu core
-+ *
-+ *  Copyright (C) 2001,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* NOTE: this include file currently contains only enough to allow us to
-+   use timer C as an interrupt pass-through.  */
-+
-+#ifndef __V850_V850E_TIMER_C_H__
-+#define __V850_V850E_TIMER_C_H__
-+
-+#include <asm/types.h>
-+#include <asm/machdep.h>      /* Pick up chip-specific defs.  */
-+
-+
-+/* Timer C (16-bit interval timers).  */
-+
-+/* Control register 0 for timer C.  */
-+#define V850E_TIMER_C_TMCC0_ADDR(n) (V850E_TIMER_C_BASE_ADDR + 0x6 + 0x10 *(n))
-+#define V850E_TIMER_C_TMCC0(n)          (*(volatile u8 *)V850E_TIMER_C_TMCC0_ADDR(n))
-+#define V850E_TIMER_C_TMCC0_CAE         0x01 /* clock action enable */
-+#define V850E_TIMER_C_TMCC0_CE          0x02 /* count enable */
-+/* ... */
-+
-+/* Control register 1 for timer C.  */
-+#define V850E_TIMER_C_TMCC1_ADDR(n) (V850E_TIMER_C_BASE_ADDR + 0x8 + 0x10 *(n))
-+#define V850E_TIMER_C_TMCC1(n)          (*(volatile u8 *)V850E_TIMER_C_TMCC1_ADDR(n))
-+#define V850E_TIMER_C_TMCC1_CMS0  0x01 /* capture/compare mode select (ccc0) */
-+#define V850E_TIMER_C_TMCC1_CMS1  0x02 /* capture/compare mode select (ccc1) */
-+/* ... */
-+
-+/* Interrupt edge-sensitivity control for timer C.  */
-+#define V850E_TIMER_C_SESC_ADDR(n) (V850E_TIMER_C_BASE_ADDR + 0x9 + 0x10 *(n))
-+#define V850E_TIMER_C_SESC(n)   (*(volatile u8 *)V850E_TIMER_C_SESC_ADDR(n))
-+
-+/* ...etc... */
-+
-+
-+#endif /* __V850_V850E_TIMER_C_H__  */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_timer_d.h        2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,62 @@
-+/*
-+ * include/asm-v850/v850e_timer_d.h -- `Timer D' component often used
-+ *    with the V850E cpu core
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_TIMER_D_H__
-+#define __V850_V850E_TIMER_D_H__
-+
-+#include <asm/types.h>
-+#include <asm/machdep.h>      /* Pick up chip-specific defs.  */
-+
-+
-+/* Timer D (16-bit interval timers).  */
-+
-+/* Count registers for timer D.  */
-+#define V850E_TIMER_D_TMD_ADDR(n) (V850E_TIMER_D_TMD_BASE_ADDR + 0x10 * (n))
-+#define V850E_TIMER_D_TMD(n)    (*(volatile u16 *)V850E_TIMER_D_TMD_ADDR(n))
-+
-+/* Count compare registers for timer D.  */
-+#define V850E_TIMER_D_CMD_ADDR(n) (V850E_TIMER_D_CMD_BASE_ADDR + 0x10 * (n))
-+#define V850E_TIMER_D_CMD(n)    (*(volatile u16 *)V850E_TIMER_D_CMD_ADDR(n))
-+
-+/* Control registers for timer D.  */
-+#define V850E_TIMER_D_TMCD_ADDR(n) (V850E_TIMER_D_TMCD_BASE_ADDR + 0x10 * (n))
-+#define V850E_TIMER_D_TMCD(n)    (*(volatile u8 *)V850E_TIMER_D_TMCD_ADDR(n))
-+/* Control bits for timer D.  */
-+#define V850E_TIMER_D_TMCD_CE            0x2 /* count enable */
-+#define V850E_TIMER_D_TMCD_CAE           0x1 /* clock action enable */
-+/* Clock divider setting (log2).  */
-+#define V850E_TIMER_D_TMCD_CS(divlog2) (((divlog2) - V850E_TIMER_D_TMCD_CS_MIN) << 4)
-+/* Minimum clock divider setting (log2).  */
-+#ifndef V850E_TIMER_D_TMCD_CS_MIN /* Can be overridden by mach-specific hdrs */
-+#define V850E_TIMER_D_TMCD_CS_MIN  2 /* Default is correct for the v850e/ma1 */
-+#endif
-+/* Maximum clock divider setting (log2).  */
-+#define V850E_TIMER_D_TMCD_CS_MAX  (V850E_TIMER_D_TMCD_CS_MIN + 7)
-+
-+/* Return the clock-divider (log2) of timer D unit N.  */
-+#define V850E_TIMER_D_DIVLOG2(n) \
-+  (((V850E_TIMER_D_TMCD(n) >> 4) & 0x7) + V850E_TIMER_D_TMCD_CS_MIN)
-+
-+
-+#ifndef __ASSEMBLY__
-+
-+/* Start interval timer TIMER (0-3).  The timer will issue the
-+   corresponding INTCMD interrupt RATE times per second.  This function
-+   does not enable the interrupt.  */
-+extern void v850e_timer_d_configure (unsigned timer, unsigned rate);
-+
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_TIMER_D_H__  */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_uarta.h  2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,278 @@
-+/*
-+ * include/asm-v850/v850e_uarta.h -- original V850E on-chip UART
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* This is the original V850E UART implementation is called just `UART' in
-+   the docs, but we name this header file <asm/v850e_uarta.h> because the
-+   name <asm/v850e_uart.h> is used for the common driver that handles both
-+   `UART' and `UARTB' implementations.  */
-+
-+#ifndef __V850_V850E_UARTA_H__
-+#define __V850_V850E_UARTA_H__
-+
-+\f
-+/* Raw hardware interface.  */
-+
-+/* The base address of the UART control registers for channel N.
-+   The default is the address used on the V850E/MA1.  */
-+#ifndef V850E_UART_BASE_ADDR
-+#define V850E_UART_BASE_ADDR(n)               (0xFFFFFA00 + 0x10 * (n))
-+#endif 
-+
-+/* Addresses of specific UART control registers for channel N.
-+   The defaults are the addresses used on the V850E/MA1; if a platform
-+   wants to redefine any of these, it must redefine them all.  */
-+#ifndef V850E_UART_ASIM_ADDR
-+#define V850E_UART_ASIM_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x0)
-+#define V850E_UART_RXB_ADDR(n)                (V850E_UART_BASE_ADDR(n) + 0x2)
-+#define V850E_UART_ASIS_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x3)
-+#define V850E_UART_TXB_ADDR(n)                (V850E_UART_BASE_ADDR(n) + 0x4)
-+#define V850E_UART_ASIF_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x5)
-+#define V850E_UART_CKSR_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x6)
-+#define V850E_UART_BRGC_ADDR(n)               (V850E_UART_BASE_ADDR(n) + 0x7)
-+#endif
-+
-+/* UART config registers.  */
-+#define V850E_UART_ASIM(n)    (*(volatile u8 *)V850E_UART_ASIM_ADDR(n))
-+/* Control bits for config registers.  */
-+#define V850E_UART_ASIM_CAE   0x80 /* clock enable */
-+#define V850E_UART_ASIM_TXE   0x40 /* transmit enable */
-+#define V850E_UART_ASIM_RXE   0x20 /* receive enable */
-+#define V850E_UART_ASIM_PS_MASK       0x18 /* mask covering parity-select bits */
-+#define V850E_UART_ASIM_PS_NONE       0x00 /* no parity */
-+#define V850E_UART_ASIM_PS_ZERO       0x08 /* zero parity */
-+#define V850E_UART_ASIM_PS_ODD        0x10 /* odd parity */
-+#define V850E_UART_ASIM_PS_EVEN       0x18 /* even parity */
-+#define V850E_UART_ASIM_CL_8  0x04 /* char len is 8 bits (otherwise, 7) */
-+#define V850E_UART_ASIM_SL_2  0x02 /* 2 stop bits (otherwise, 1) */
-+#define V850E_UART_ASIM_ISRM  0x01 /* generate INTSR interrupt on errors
-+                                      (otherwise, generate INTSER) */
-+
-+/* UART serial interface status registers.  */
-+#define V850E_UART_ASIS(n)    (*(volatile u8 *)V850E_UART_ASIS_ADDR(n))
-+/* Control bits for status registers.  */
-+#define V850E_UART_ASIS_PE    0x04 /* parity error */
-+#define V850E_UART_ASIS_FE    0x02 /* framing error */
-+#define V850E_UART_ASIS_OVE   0x01 /* overrun error */
-+
-+/* UART serial interface transmission status registers.  */
-+#define V850E_UART_ASIF(n)    (*(volatile u8 *)V850E_UART_ASIF_ADDR(n))
-+#define V850E_UART_ASIF_TXBF  0x02 /* transmit buffer flag (data in TXB) */
-+#define V850E_UART_ASIF_TXSF  0x01 /* transmit shift flag (sending data) */
-+
-+/* UART receive buffer register.  */
-+#define V850E_UART_RXB(n)     (*(volatile u8 *)V850E_UART_RXB_ADDR(n))
-+
-+/* UART transmit buffer register.  */
-+#define V850E_UART_TXB(n)     (*(volatile u8 *)V850E_UART_TXB_ADDR(n))
-+
-+/* UART baud-rate generator control registers.  */
-+#define V850E_UART_CKSR(n)    (*(volatile u8 *)V850E_UART_CKSR_ADDR(n))
-+#define V850E_UART_CKSR_MAX   11
-+#define V850E_UART_BRGC(n)    (*(volatile u8 *)V850E_UART_BRGC_ADDR(n))
-+#define V850E_UART_BRGC_MIN   8
-+
-+
-+#ifndef V850E_UART_CKSR_MAX_FREQ
-+#define V850E_UART_CKSR_MAX_FREQ (25*1000*1000)
-+#endif
-+
-+/* Calculate the minimum value for CKSR on this processor.  */
-+static inline unsigned v850e_uart_cksr_min (void)
-+{
-+      int min = 0;
-+      unsigned freq = V850E_UART_BASE_FREQ;
-+      while (freq > V850E_UART_CKSR_MAX_FREQ) {
-+              freq >>= 1;
-+              min++;
-+      }
-+      return min;
-+}
-+
-+\f
-+/* Slightly abstract interface used by driver.  */
-+
-+
-+/* Interrupts used by the UART.  */
-+
-+/* Received when the most recently transmitted character has been sent.  */
-+#define V850E_UART_TX_IRQ(chan)               IRQ_INTST (chan)
-+/* Received when a new character has been received.  */
-+#define V850E_UART_RX_IRQ(chan)               IRQ_INTSR (chan)
-+
-+
-+/* UART clock generator interface.  */
-+
-+/* This type encapsulates a particular uart frequency.  */
-+typedef struct {
-+      unsigned clk_divlog2;
-+      unsigned brgen_count;
-+} v850e_uart_speed_t;
-+
-+/* Calculate a uart speed from BAUD for this uart.  */
-+static inline v850e_uart_speed_t v850e_uart_calc_speed (unsigned baud)
-+{
-+      v850e_uart_speed_t speed;
-+
-+      /* Calculate the log2 clock divider and baud-rate counter values
-+         (note that the UART divides the resulting clock by 2, so
-+         multiply BAUD by 2 here to compensate).  */
-+      calc_counter_params (V850E_UART_BASE_FREQ, baud * 2,
-+                           v850e_uart_cksr_min(),
-+                           V850E_UART_CKSR_MAX, 8/*bits*/,
-+                           &speed.clk_divlog2, &speed.brgen_count);
-+
-+      return speed;
-+}
-+
-+/* Return the current speed of uart channel CHAN.  */
-+static inline v850e_uart_speed_t v850e_uart_speed (unsigned chan)
-+{
-+      v850e_uart_speed_t speed;
-+      speed.clk_divlog2 = V850E_UART_CKSR (chan);
-+      speed.brgen_count = V850E_UART_BRGC (chan);
-+      return speed;
-+}
-+
-+/* Set the current speed of uart channel CHAN.  */
-+static inline void v850e_uart_set_speed(unsigned chan,v850e_uart_speed_t speed)
-+{
-+      V850E_UART_CKSR (chan) = speed.clk_divlog2;
-+      V850E_UART_BRGC (chan) = speed.brgen_count;
-+}
-+
-+static inline int
-+v850e_uart_speed_eq (v850e_uart_speed_t speed1, v850e_uart_speed_t speed2)
-+{
-+      return speed1.clk_divlog2 == speed2.clk_divlog2
-+              && speed1.brgen_count == speed2.brgen_count;
-+}
-+
-+/* Minimum baud rate possible.  */
-+#define v850e_uart_min_baud() \
-+   ((V850E_UART_BASE_FREQ >> V850E_UART_CKSR_MAX) / (2 * 255) + 1)
-+
-+/* Maximum baud rate possible.  The error is quite high at max, though.  */
-+#define v850e_uart_max_baud() \
-+   ((V850E_UART_BASE_FREQ >> v850e_uart_cksr_min()) / (2 *V850E_UART_BRGC_MIN))
-+
-+/* The `maximum' clock rate the uart can used, which is wanted (though not
-+   really used in any useful way) by the serial framework.  */
-+#define v850e_uart_max_clock() \
-+   ((V850E_UART_BASE_FREQ >> v850e_uart_cksr_min()) / 2)
-+
-+
-+/* UART configuration interface.  */
-+
-+/* Type of the uart config register; must be a scalar.  */
-+typedef u16 v850e_uart_config_t;
-+
-+/* The uart hardware config register for channel CHAN.  */
-+#define V850E_UART_CONFIG(chan)               V850E_UART_ASIM (chan)
-+
-+/* This config bit set if the uart is enabled.  */
-+#define V850E_UART_CONFIG_ENABLED     V850E_UART_ASIM_CAE
-+/* If the uart _isn't_ enabled, store this value to it to do so.  */
-+#define V850E_UART_CONFIG_INIT                V850E_UART_ASIM_CAE
-+/* Store this config value to disable the uart channel completely.  */
-+#define V850E_UART_CONFIG_FINI                0
-+
-+/* Setting/clearing these bits enable/disable TX/RX, respectively (but
-+   otherwise generally leave things running).  */
-+#define V850E_UART_CONFIG_RX_ENABLE   V850E_UART_ASIM_RXE
-+#define V850E_UART_CONFIG_TX_ENABLE   V850E_UART_ASIM_TXE
-+
-+/* These masks define which config bits affect TX/RX modes, respectively.  */
-+#define V850E_UART_CONFIG_RX_BITS \
-+  (V850E_UART_ASIM_PS_MASK | V850E_UART_ASIM_CL_8 | V850E_UART_ASIM_ISRM)
-+#define V850E_UART_CONFIG_TX_BITS \
-+  (V850E_UART_ASIM_PS_MASK | V850E_UART_ASIM_CL_8 | V850E_UART_ASIM_SL_2)
-+
-+static inline v850e_uart_config_t v850e_uart_calc_config (unsigned cflags)
-+{
-+      v850e_uart_config_t config = 0;
-+
-+      /* Figure out new configuration of control register.  */
-+      if (cflags & CSTOPB)
-+              /* Number of stop bits, 1 or 2.  */
-+              config |= V850E_UART_ASIM_SL_2;
-+      if ((cflags & CSIZE) == CS8)
-+              /* Number of data bits, 7 or 8.  */
-+              config |= V850E_UART_ASIM_CL_8;
-+      if (! (cflags & PARENB))
-+              /* No parity check/generation.  */
-+              config |= V850E_UART_ASIM_PS_NONE;
-+      else if (cflags & PARODD)
-+              /* Odd parity check/generation.  */
-+              config |= V850E_UART_ASIM_PS_ODD;
-+      else
-+              /* Even parity check/generation.  */
-+              config |= V850E_UART_ASIM_PS_EVEN;
-+      if (cflags & CREAD)
-+              /* Reading enabled.  */
-+              config |= V850E_UART_ASIM_RXE;
-+
-+      config |= V850E_UART_ASIM_CAE;
-+      config |= V850E_UART_ASIM_TXE; /* Writing is always enabled.  */
-+      config |= V850E_UART_ASIM_ISRM; /* Errors generate a read-irq.  */
-+
-+      return config;
-+}
-+
-+/* This should delay as long as necessary for a recently written config
-+   setting to settle, before we turn the uart back on.  */
-+static inline void
-+v850e_uart_config_delay (v850e_uart_config_t config, v850e_uart_speed_t speed)
-+{
-+      /* The UART may not be reset properly unless we wait at least 2
-+         `basic-clocks' until turning on the TXE/RXE bits again.
-+         A `basic clock' is the clock used by the baud-rate generator,
-+         i.e., the cpu clock divided by the 2^new_clk_divlog2.
-+         The loop takes 2 insns, so loop CYCLES / 2 times.  */
-+      register unsigned count = 1 << speed.clk_divlog2;
-+      while (--count != 0)
-+              /* nothing */;
-+}
-+
-+
-+/* RX/TX interface.  */
-+
-+/* Return true if all characters awaiting transmission on uart channel N
-+   have been transmitted.  */
-+#define v850e_uart_xmit_done(n)                                                     \
-+   (! (V850E_UART_ASIF(n) & V850E_UART_ASIF_TXBF))
-+/* Wait for this to be true.  */
-+#define v850e_uart_wait_for_xmit_done(n)                                    \
-+   do { } while (! v850e_uart_xmit_done (n))
-+
-+/* Return true if uart channel N is ready to transmit a character.  */
-+#define v850e_uart_xmit_ok(n)                                               \
-+   (v850e_uart_xmit_done(n) && v850e_uart_cts(n))
-+/* Wait for this to be true.  */
-+#define v850e_uart_wait_for_xmit_ok(n)                                              \
-+   do { } while (! v850e_uart_xmit_ok (n))
-+
-+/* Write character CH to uart channel CHAN.  */
-+#define v850e_uart_putc(chan, ch)     (V850E_UART_TXB(chan) = (ch))
-+
-+/* Return latest character read on channel CHAN.  */
-+#define v850e_uart_getc(chan)         V850E_UART_RXB (chan)
-+
-+/* Return bit-mask of uart error status.  */
-+#define v850e_uart_err(chan)          V850E_UART_ASIS (chan)
-+/* Various error bits set in the error result.  */
-+#define V850E_UART_ERR_OVERRUN                V850E_UART_ASIS_OVE
-+#define V850E_UART_ERR_FRAME          V850E_UART_ASIS_FE
-+#define V850E_UART_ERR_PARITY         V850E_UART_ASIS_PE
-+
-+
-+#endif /* __V850_V850E_UARTA_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_uartb.h  2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,262 @@
-+/*
-+ * include/asm-v850/v850e_uartb.h -- V850E on-chip `UARTB' UART
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* The V850E UARTB is basically a superset of the original V850E UART, but
-+   even where it's the same, the names and details have changed a bit.
-+   It's similar enough to use the same driver (v850e_uart.c), but the
-+   details have been abstracted slightly to do so.  */
-+
-+#ifndef __V850_V850E_UARTB_H__
-+#define __V850_V850E_UARTB_H__
-+
-+\f
-+/* Raw hardware interface.  */
-+
-+#define V850E_UARTB_BASE_ADDR(n)      (0xFFFFFA00 + 0x10 * (n))
-+
-+/* Addresses of specific UART control registers for channel N.  */
-+#define V850E_UARTB_CTL0_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0x0)
-+#define V850E_UARTB_CTL2_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0x2)
-+#define V850E_UARTB_STR_ADDR(n)               (V850E_UARTB_BASE_ADDR(n) + 0x4)
-+#define V850E_UARTB_RX_ADDR(n)                (V850E_UARTB_BASE_ADDR(n) + 0x6)
-+#define V850E_UARTB_RXAP_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0x6)
-+#define V850E_UARTB_TX_ADDR(n)                (V850E_UARTB_BASE_ADDR(n) + 0x8)
-+#define V850E_UARTB_FIC0_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0xA)
-+#define V850E_UARTB_FIC1_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0xB)
-+#define V850E_UARTB_FIC2_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0xC)
-+#define V850E_UARTB_FIS0_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0xE)
-+#define V850E_UARTB_FIS1_ADDR(n)      (V850E_UARTB_BASE_ADDR(n) + 0xF)
-+
-+/* UARTB control register 0 (general config).  */
-+#define V850E_UARTB_CTL0(n)   (*(volatile u8 *)V850E_UARTB_CTL0_ADDR(n))
-+/* Control bits for config registers.  */
-+#define V850E_UARTB_CTL0_PWR          0x80    /* clock enable */
-+#define V850E_UARTB_CTL0_TXE          0x40    /* transmit enable */
-+#define V850E_UARTB_CTL0_RXE          0x20    /* receive enable */
-+#define V850E_UARTB_CTL0_DIR          0x10    /*  */
-+#define V850E_UARTB_CTL0_PS1          0x08    /* parity */
-+#define V850E_UARTB_CTL0_PS0          0x04    /* parity */
-+#define V850E_UARTB_CTL0_CL           0x02    /* char len 1:8bit, 0:7bit */
-+#define V850E_UARTB_CTL0_SL           0x01    /* stop bit 1:2bit, 0:1bit */
-+#define V850E_UARTB_CTL0_PS_MASK      0x0C    /* mask covering parity bits */
-+#define V850E_UARTB_CTL0_PS_NONE      0x00    /* no parity */
-+#define V850E_UARTB_CTL0_PS_ZERO      0x04    /* zero parity */
-+#define V850E_UARTB_CTL0_PS_ODD               0x08    /* odd parity */
-+#define V850E_UARTB_CTL0_PS_EVEN      0x0C    /* even parity */
-+#define V850E_UARTB_CTL0_CL_8         0x02    /* char len 1:8bit, 0:7bit */
-+#define V850E_UARTB_CTL0_SL_2         0x01    /* stop bit 1:2bit, 0:1bit */
-+
-+/* UARTB control register 2 (clock divider).  */
-+#define V850E_UARTB_CTL2(n)   (*(volatile u16 *)V850E_UARTB_CTL2_ADDR(n))
-+#define V850E_UARTB_CTL2_MIN  4
-+#define V850E_UARTB_CTL2_MAX  0xFFFF
-+
-+/* UARTB serial interface status register.  */
-+#define V850E_UARTB_STR(n)    (*(volatile u8 *)V850E_UARTB_STR_ADDR(n))
-+/* Control bits for status registers.  */
-+#define V850E_UARTB_STR_TSF   0x80    /* UBTX or FIFO exist data  */
-+#define V850E_UARTB_STR_OVF   0x08    /* overflow error */
-+#define V850E_UARTB_STR_PE    0x04    /* parity error */
-+#define V850E_UARTB_STR_FE    0x02    /* framing error */
-+#define V850E_UARTB_STR_OVE   0x01    /* overrun error */
-+
-+/* UARTB receive data register.  */
-+#define V850E_UARTB_RX(n)     (*(volatile u8 *)V850E_UARTB_RX_ADDR(n))
-+#define V850E_UARTB_RXAP(n)   (*(volatile u16 *)V850E_UARTB_RXAP_ADDR(n))
-+/* Control bits for status registers.  */
-+#define V850E_UARTB_RXAP_PEF  0x0200 /* parity error */
-+#define V850E_UARTB_RXAP_FEF  0x0100 /* framing error */
-+
-+/* UARTB transmit data register.  */
-+#define V850E_UARTB_TX(n)     (*(volatile u8 *)V850E_UARTB_TX_ADDR(n))
-+
-+/* UARTB FIFO control register 0.  */
-+#define V850E_UARTB_FIC0(n)   (*(volatile u8 *)V850E_UARTB_FIC0_ADDR(n))
-+
-+/* UARTB FIFO control register 1.  */
-+#define V850E_UARTB_FIC1(n)   (*(volatile u8 *)V850E_UARTB_FIC1_ADDR(n))
-+
-+/* UARTB FIFO control register 2.  */
-+#define V850E_UARTB_FIC2(n)   (*(volatile u16 *)V850E_UARTB_FIC2_ADDR(n))
-+
-+/* UARTB FIFO status register 0.  */
-+#define V850E_UARTB_FIS0(n)   (*(volatile u8 *)V850E_UARTB_FIS0_ADDR(n))
-+
-+/* UARTB FIFO status register 1.  */
-+#define V850E_UARTB_FIS1(n)   (*(volatile u8 *)V850E_UARTB_FIS1_ADDR(n))
-+
-+\f
-+/* Slightly abstract interface used by driver.  */
-+
-+
-+/* Interrupts used by the UART.  */
-+
-+/* Received when the most recently transmitted character has been sent.  */
-+#define V850E_UART_TX_IRQ(chan)               IRQ_INTUBTIT (chan)
-+/* Received when a new character has been received.  */
-+#define V850E_UART_RX_IRQ(chan)               IRQ_INTUBTIR (chan)
-+
-+/* Use by serial driver for information purposes.  */
-+#define V850E_UART_BASE_ADDR(chan)    V850E_UARTB_BASE_ADDR(chan)
-+
-+
-+/* UART clock generator interface.  */
-+
-+/* This type encapsulates a particular uart frequency.  */
-+typedef u16 v850e_uart_speed_t;
-+
-+/* Calculate a uart speed from BAUD for this uart.  */
-+static inline v850e_uart_speed_t v850e_uart_calc_speed (unsigned baud)
-+{
-+      v850e_uart_speed_t speed;
-+
-+      /*
-+       * V850E/ME2 UARTB baud rate is determined by the value of UBCTL2
-+       * fx = V850E_UARTB_BASE_FREQ = CPU_CLOCK_FREQ/4
-+       * baud = fx / 2*speed   [ speed >= 4 ]
-+       */
-+      speed = V850E_UARTB_CTL2_MIN;
-+      while (((V850E_UARTB_BASE_FREQ / 2) / speed ) > baud)
-+              speed++;
-+
-+      return speed;
-+}
-+
-+/* Return the current speed of uart channel CHAN.  */
-+#define v850e_uart_speed(chan)                    V850E_UARTB_CTL2 (chan)
-+
-+/* Set the current speed of uart channel CHAN.  */
-+#define v850e_uart_set_speed(chan, speed)   (V850E_UARTB_CTL2 (chan) = (speed))
-+
-+/* Return true if SPEED1 and SPEED2 are the same.  */
-+#define v850e_uart_speed_eq(speed1, speed2) ((speed1) == (speed2))
-+
-+/* Minimum baud rate possible.  */
-+#define v850e_uart_min_baud() \
-+   ((V850E_UARTB_BASE_FREQ / 2) / V850E_UARTB_CTL2_MAX)
-+
-+/* Maximum baud rate possible.  The error is quite high at max, though.  */
-+#define v850e_uart_max_baud() \
-+   ((V850E_UARTB_BASE_FREQ / 2) / V850E_UARTB_CTL2_MIN)
-+
-+/* The `maximum' clock rate the uart can used, which is wanted (though not
-+   really used in any useful way) by the serial framework.  */
-+#define v850e_uart_max_clock() \
-+   (V850E_UARTB_BASE_FREQ / 2)
-+
-+
-+/* UART configuration interface.  */
-+
-+/* Type of the uart config register; must be a scalar.  */
-+typedef u16 v850e_uart_config_t;
-+
-+/* The uart hardware config register for channel CHAN.  */
-+#define V850E_UART_CONFIG(chan)               V850E_UARTB_CTL0 (chan)
-+
-+/* This config bit set if the uart is enabled.  */
-+#define V850E_UART_CONFIG_ENABLED     V850E_UARTB_CTL0_PWR
-+/* If the uart _isn't_ enabled, store this value to it to do so.  */
-+#define V850E_UART_CONFIG_INIT                V850E_UARTB_CTL0_PWR
-+/* Store this config value to disable the uart channel completely.  */
-+#define V850E_UART_CONFIG_FINI                0
-+
-+/* Setting/clearing these bits enable/disable TX/RX, respectively (but
-+   otherwise generally leave things running).  */
-+#define V850E_UART_CONFIG_RX_ENABLE   V850E_UARTB_CTL0_RXE
-+#define V850E_UART_CONFIG_TX_ENABLE   V850E_UARTB_CTL0_TXE
-+
-+/* These masks define which config bits affect TX/RX modes, respectively.  */
-+#define V850E_UART_CONFIG_RX_BITS \
-+  (V850E_UARTB_CTL0_PS_MASK | V850E_UARTB_CTL0_CL_8)
-+#define V850E_UART_CONFIG_TX_BITS \
-+  (V850E_UARTB_CTL0_PS_MASK | V850E_UARTB_CTL0_CL_8 | V850E_UARTB_CTL0_SL_2)
-+
-+static inline v850e_uart_config_t v850e_uart_calc_config (unsigned cflags)
-+{
-+      v850e_uart_config_t config = 0;
-+
-+      /* Figure out new configuration of control register.  */
-+      if (cflags & CSTOPB)
-+              /* Number of stop bits, 1 or 2.  */
-+              config |= V850E_UARTB_CTL0_SL_2;
-+      if ((cflags & CSIZE) == CS8)
-+              /* Number of data bits, 7 or 8.  */
-+              config |= V850E_UARTB_CTL0_CL_8;
-+      if (! (cflags & PARENB))
-+              /* No parity check/generation.  */
-+              config |= V850E_UARTB_CTL0_PS_NONE;
-+      else if (cflags & PARODD)
-+              /* Odd parity check/generation.  */
-+              config |= V850E_UARTB_CTL0_PS_ODD;
-+      else
-+              /* Even parity check/generation.  */
-+              config |= V850E_UARTB_CTL0_PS_EVEN;
-+      if (cflags & CREAD)
-+              /* Reading enabled.  */
-+              config |= V850E_UARTB_CTL0_RXE;
-+
-+      config |= V850E_UARTB_CTL0_PWR;
-+      config |= V850E_UARTB_CTL0_TXE; /* Writing is always enabled.  */
-+      config |= V850E_UARTB_CTL0_DIR; /* LSB first.  */
-+
-+      return config;
-+}
-+
-+/* This should delay as long as necessary for a recently written config
-+   setting to settle, before we turn the uart back on.  */
-+static inline void
-+v850e_uart_config_delay (v850e_uart_config_t config, v850e_uart_speed_t speed)
-+{
-+      /* The UART may not be reset properly unless we wait at least 2
-+         `basic-clocks' until turning on the TXE/RXE bits again.
-+         A `basic clock' is the clock used by the baud-rate generator,
-+         i.e., the cpu clock divided by the 2^new_clk_divlog2.
-+         The loop takes 2 insns, so loop CYCLES / 2 times.  */
-+      register unsigned count = 1 << speed;
-+      while (--count != 0)
-+              /* nothing */;
-+}
-+
-+
-+/* RX/TX interface.  */
-+
-+/* Return true if all characters awaiting transmission on uart channel N
-+   have been transmitted.  */
-+#define v850e_uart_xmit_done(n)                                                     \
-+   (! (V850E_UARTB_STR(n) & V850E_UARTB_STR_TSF))
-+/* Wait for this to be true.  */
-+#define v850e_uart_wait_for_xmit_done(n)                                    \
-+   do { } while (! v850e_uart_xmit_done (n))
-+
-+/* Return true if uart channel N is ready to transmit a character.  */
-+#define v850e_uart_xmit_ok(n)                                               \
-+   (v850e_uart_xmit_done(n) && v850e_uart_cts(n))
-+/* Wait for this to be true.  */
-+#define v850e_uart_wait_for_xmit_ok(n)                                              \
-+   do { } while (! v850e_uart_xmit_ok (n))
-+
-+/* Write character CH to uart channel CHAN.  */
-+#define v850e_uart_putc(chan, ch)     (V850E_UARTB_TX(chan) = (ch))
-+
-+/* Return latest character read on channel CHAN.  */
-+#define v850e_uart_getc(chan)         V850E_UARTB_RX (chan)
-+
-+/* Return bit-mask of uart error status.  */
-+#define v850e_uart_err(chan)          V850E_UARTB_STR (chan)
-+/* Various error bits set in the error result.  */
-+#define V850E_UART_ERR_OVERRUN                V850E_UARTB_STR_OVE
-+#define V850E_UART_ERR_FRAME          V850E_UARTB_STR_FE
-+#define V850E_UART_ERR_PARITY         V850E_UARTB_STR_PE
-+
-+
-+#endif /* __V850_V850E_UARTB_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_uart.h   2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,77 @@
-+/*
-+ * include/asm-v850/v850e_uart.h -- common V850E on-chip UART driver
-+ *
-+ *  Copyright (C) 2001,02,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+/* There's not actually a single UART implementation used by V850E CPUs,
-+   but rather a series of implementations that are all `close' to one
-+   another.  This file corresponds to the single driver which handles all
-+   of them.  */
-+
-+#ifndef __V850_V850E_UART_H__
-+#define __V850_V850E_UART_H__
-+
-+#include <linux/config.h>
-+#include <linux/termios.h>
-+
-+#include <asm/v850e_utils.h>
-+#include <asm/types.h>
-+#include <asm/machdep.h>      /* Pick up chip-specific defs.  */
-+
-+
-+/* Include model-specific definitions.  */
-+#ifdef CONFIG_V850E_UART
-+# ifdef CONFIG_V850E_UARTB
-+#  include <asm-v850/v850e_uartb.h>
-+# else
-+#  include <asm-v850/v850e_uarta.h> /* original V850E UART */
-+# endif
-+#endif
-+
-+
-+/* Optional capabilities some hardware provides.  */
-+
-+/* This UART doesn't implement RTS/CTS by default, but some platforms
-+   implement them externally, so check to see if <asm/machdep.h> defined
-+   anything.  */
-+#ifdef V850E_UART_CTS
-+#define v850e_uart_cts(n)             V850E_UART_CTS(n)
-+#else
-+#define v850e_uart_cts(n)             (1)
-+#endif
-+
-+/* Do the same for RTS.  */
-+#ifdef V850E_UART_SET_RTS
-+#define v850e_uart_set_rts(n,v)               V850E_UART_SET_RTS(n,v)
-+#else
-+#define v850e_uart_set_rts(n,v)               ((void)0)
-+#endif
-+
-+
-+/* This is the serial channel to use for the boot console (if desired).  */
-+#ifndef V850E_UART_CONSOLE_CHANNEL
-+# define V850E_UART_CONSOLE_CHANNEL 0
-+#endif
-+
-+
-+#ifndef __ASSEMBLY__
-+
-+/* Setup a console using channel 0 of the builtin uart.  */
-+extern void v850e_uart_cons_init (unsigned chan);
-+
-+/* Configure and turn on uart channel CHAN, using the termios `control
-+   modes' bits in CFLAGS, and a baud-rate of BAUD.  */
-+void v850e_uart_configure (unsigned chan, unsigned cflags, unsigned baud);
-+
-+#endif /* !__ASSEMBLY__ */
-+
-+
-+#endif /* __V850_V850E_UART_H__ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/asm-v850/v850e_utils.h  2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,35 @@
-+/*
-+ * include/asm-v850/v850e_utils.h -- Utility functions associated with
-+ *    V850E CPUs
-+ *
-+ *  Copyright (C) 2001,03  NEC Electronics Corporation
-+ *  Copyright (C) 2001,03  Miles Bader <miles@gnu.org>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General
-+ * Public License.  See the file COPYING in the main directory of this
-+ * archive for more details.
-+ *
-+ * Written by Miles Bader <miles@gnu.org>
-+ */
-+
-+#ifndef __V850_V850E_UTILS_H__
-+#define __V850_V850E_UTILS_H__
-+
-+/* Calculate counter clock-divider and count values to attain the
-+   desired frequency RATE from the base frequency BASE_FREQ.  The
-+   counter is expected to have a clock-divider, which can divide the
-+   system cpu clock by a power of two value from MIN_DIVLOG2 to
-+   MAX_DIV_LOG2, and a word-size of COUNTER_SIZE bits (the counter
-+   counts up and resets whenever it's equal to the compare register,
-+   generating an interrupt or whatever when it does so).  The returned
-+   values are: *DIVLOG2 -- log2 of the desired clock divider and *COUNT
-+   -- the counter compare value to use.  Returns true if it was possible
-+   to find a reasonable value, otherwise false (and the other return
-+   values will be set to be as good as possible).  */
-+extern int calc_counter_params (unsigned long base_freq,
-+                              unsigned long rate,
-+                              unsigned min_divlog2, unsigned max_divlog2,
-+                              unsigned counter_size,
-+                              unsigned *divlog2, unsigned *count);
-+
-+#endif /* __V850_V850E_UTILS_H__ */
---- linux-2.6.0-test1/include/asm-x86_64/bitops.h      2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/asm-x86_64/bitops.h     2003-07-19 17:04:07.000000000 -0700
-@@ -477,6 +477,7 @@ static __inline__ int ffs(int x)
-  * The Hamming Weight of a number is the total number of bits set in it.
-  */
-+#define hweight64(x) generic_hweight64(x)
- #define hweight32(x) generic_hweight32(x)
- #define hweight16(x) generic_hweight16(x)
- #define hweight8(x) generic_hweight8(x)
---- linux-2.6.0-test1/include/asm-x86_64/mpspec.h      2003-06-14 12:18:09.000000000 -0700
-+++ 25/include/asm-x86_64/mpspec.h     2003-07-19 17:04:07.000000000 -0700
-@@ -171,7 +171,7 @@ extern int quad_local_to_mp_bus_id [NR_C
- extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
- extern unsigned int boot_cpu_physical_apicid;
--extern unsigned long phys_cpu_present_map;
-+extern cpumask_t phys_cpu_present_map;
- extern int smp_found_config;
- extern void find_smp_config (void);
- extern void get_smp_config (void);
---- linux-2.6.0-test1/include/asm-x86_64/pgalloc.h     2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/asm-x86_64/pgalloc.h    2003-07-19 17:07:16.000000000 -0700
-@@ -10,7 +10,7 @@
- #define pmd_populate_kernel(mm, pmd, pte) \
-               set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)))
- #define pgd_populate(mm, pgd, pmd) \
--              set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pmd)))
-+              set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(page_address(pmd))))
- static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
- {
-@@ -22,18 +22,25 @@ extern __inline__ pmd_t *get_pmd(void)
-       return (pmd_t *)get_zeroed_page(GFP_KERNEL);
- }
--extern __inline__ void pmd_free(pmd_t *pmd)
-+extern __inline__ void pmd_free(struct page *pmd)
- {
--      if ((unsigned long)pmd & (PAGE_SIZE-1)) 
--              BUG(); 
--      free_page((unsigned long)pmd);
-+      __free_page(pmd);
- }
--static inline pmd_t *pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
-+static inline pmd_t *pmd_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
- {
-       return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
- }
-+static inline struct page *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
-+{
-+      pmd_t *pmd = pmd_alloc_one_kernel(mm, addr);
-+      if (pmd)
-+              return virt_to_page(pmd);
-+      else
-+              return NULL;
-+}
-+
- static inline pgd_t *pgd_alloc (struct mm_struct *mm)
- {
-       return (pgd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
---- linux-2.6.0-test1/include/asm-x86_64/pgtable.h     2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/asm-x86_64/pgtable.h    2003-07-19 17:07:16.000000000 -0700
-@@ -98,8 +98,9 @@ static inline void set_pml4(pml4_t *dst,
-       pml4_val(*dst) = pml4_val(val); 
- }
--#define pgd_page(pgd) \
-+#define __pgd_page(pgd) \
- ((unsigned long) __va(pgd_val(pgd) & PHYSICAL_PAGE_MASK))
-+#define pgd_page(pgd)         virt_to_page(__pgd_page(pgd))
- #define ptep_get_and_clear(xp)        __pte(xchg(&(xp)->pte, 0))
- #define pte_same(a, b)                ((a).pte == (b).pte)
-@@ -332,8 +333,13 @@ static inline pgd_t *current_pgd_offset_
- #define pmd_page(pmd)         (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT))
- #define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
--#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \
-+#define pmd_offset(dir, address) ((pmd_t *)__pgd_page(*(dir)) + \
-                       pmd_index(address))
-+#define pmd_offset_kernel(pgd, addr)                  pmd_offset(pgd, addr)
-+#define pmd_offset_map(pgd, addr)                     pmd_offset(pgd, addr)
-+#define pmd_offset_map_nested(pgd, addr)              pmd_offset(pgd, addr)
-+#define pmd_unmap(pmd)                                        do { } while (0)
-+#define pmd_unmap_nested(pmd)                         do { } while (0)
- #define pmd_none(x)   (!pmd_val(x))
- #define pmd_present(x)        (pmd_val(x) & _PAGE_PRESENT)
- #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
---- linux-2.6.0-test1/include/asm-x86_64/posix_types.h 2003-06-14 12:18:48.000000000 -0700
-+++ 25/include/asm-x86_64/posix_types.h        2003-07-19 17:06:39.000000000 -0700
-@@ -7,7 +7,9 @@
-  * assume GCC is being used.
-  */
-+#ifdef __GNUC__
- typedef unsigned long __kernel_dev_t;
-+#endif
- typedef unsigned long __kernel_ino_t;
- typedef unsigned int  __kernel_mode_t;
- typedef unsigned long __kernel_nlink_t;
---- linux-2.6.0-test1/include/asm-x86_64/smp.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/asm-x86_64/smp.h        2003-07-19 17:04:07.000000000 -0700
-@@ -7,6 +7,7 @@
- #ifndef __ASSEMBLY__
- #include <linux/config.h>
- #include <linux/threads.h>
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
- extern int disable_apic;
- #endif
-@@ -35,8 +36,8 @@ struct pt_regs;
-  */
-  
- extern void smp_alloc_memory(void);
--extern unsigned long phys_cpu_present_map;
--extern unsigned long cpu_online_map;
-+extern cpumask_t phys_cpu_present_map;
-+extern cpumask_t cpu_online_map;
- extern volatile unsigned long smp_invalidate_needed;
- extern int pic_mode;
- extern void smp_flush_tlb(void);
-@@ -56,35 +57,17 @@ void smp_stop_cpu(void);
-  * compresses data structures.
-  */
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
--#define cpu_possible(cpu) (cpu_callout_map & (1<<(cpu)))
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
--
--#define for_each_cpu(cpu, mask) \
--      for(mask = cpu_online_map; \
--          cpu = __ffs(mask), mask != 0; \
--          mask &= ~(1UL<<cpu))
--
--extern inline unsigned int any_online_cpu(unsigned int mask)
--{
--      if (mask & cpu_online_map)
--              return __ffs(mask & cpu_online_map);
--
--      return NR_CPUS; 
--} 
--
--extern inline unsigned int num_online_cpus(void)
--{ 
--      return hweight32(cpu_online_map);
--} 
-+#define cpu_possible(cpu) cpu_isset(cpu, cpu_callout_map)
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
- static inline int num_booting_cpus(void)
- {
--      return hweight32(cpu_callout_map);
-+      return cpus_weight(cpu_callout_map);
- }
--extern volatile unsigned long cpu_callout_map;
-+extern cpumask_t cpu_callout_map;
- #define smp_processor_id() read_pda(cpunumber)
-@@ -104,7 +87,7 @@ extern inline int safe_smp_processor_id(
-               return hard_smp_processor_id();
- } 
--#define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
-+#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
- #endif /* !ASSEMBLY */
- #define NO_PROC_ID            0xFF            /* No processor magic marker */
-@@ -117,7 +100,6 @@ extern inline int safe_smp_processor_id(
- #ifndef CONFIG_SMP
- #define stack_smp_processor_id() 0
- #define safe_smp_processor_id() 0
--#define for_each_cpu(x) (x)=0;
- #define cpu_logical_map(x) (x)
- #else
- #include <asm/thread_info.h>
---- linux-2.6.0-test1/include/asm-x86_64/topology.h    2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/asm-x86_64/topology.h   2003-07-19 17:04:07.000000000 -0700
-@@ -8,13 +8,13 @@
- /* Map the K8 CPU local memory controllers to a simple 1:1 CPU:NODE topology */
- extern int fake_node;
--extern unsigned long cpu_online_map;
-+extern cpumask_t cpu_online_map;
- #define cpu_to_node(cpu)              (fake_node ? 0 : (cpu))
- #define memblk_to_node(memblk)        (fake_node ? 0 : (memblk))
- #define parent_node(node)             (node)
- #define node_to_first_cpu(node)       (fake_node ? 0 : (node))
--#define node_to_cpu_mask(node)        (fake_node ? cpu_online_map : (1UL << (node)))
-+#define node_to_cpu_mask(node)        (fake_node ? cpu_online_map : cpumask_of_cpu(node))
- #define node_to_memblk(node)          (node)
- #define NODE_BALANCE_RATE 30  /* CHECKME */ 
---- linux-2.6.0-test1/include/linux/aio.h      2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/aio.h     2003-07-19 17:07:03.000000000 -0700
-@@ -54,7 +54,7 @@ struct kiocb {
-       struct file             *ki_filp;
-       struct kioctx           *ki_ctx;        /* may be NULL for sync ops */
-       int                     (*ki_cancel)(struct kiocb *, struct io_event *);
--      long                    (*ki_retry)(struct kiocb *);
-+      ssize_t                 (*ki_retry)(struct kiocb *);
-       struct list_head        ki_list;        /* the aio core uses this
-                                                * for cancellation */
-@@ -63,6 +63,16 @@ struct kiocb {
-       __u64                   ki_user_data;   /* user's data for completion */
-       loff_t                  ki_pos;
-+      /* State that we remember to be able to restart/retry  */
-+      unsigned short          ki_opcode;
-+      size_t                  ki_nbytes;      /* copy of iocb->aio_nbytes */
-+      char                    *ki_buf;        /* remaining iocb->aio_buf */
-+      size_t                  ki_left;        /* remaining bytes */
-+      wait_queue_t            ki_wait;
-+      long                    ki_retried;     /* just for testing */
-+      long                    ki_kicked;      /* just for testing */
-+      long                    ki_queued;      /* just for testing */
-+
-       char                    private[KIOCB_PRIVATE_SIZE];
- };
-@@ -77,6 +87,8 @@ struct kiocb {
-               (x)->ki_ctx = &tsk->active_mm->default_kioctx;  \
-               (x)->ki_cancel = NULL;                  \
-               (x)->ki_user_obj = tsk;                 \
-+              (x)->ki_user_data = 0;                  \
-+              init_wait((&(x)->ki_wait));             \
-       } while (0)
- #define AIO_RING_MAGIC                        0xa10a10a1
-@@ -159,6 +171,17 @@ int FASTCALL(io_submit_one(struct kioctx
- #define get_ioctx(kioctx)     do { if (unlikely(atomic_read(&(kioctx)->users) <= 0)) BUG(); atomic_inc(&(kioctx)->users); } while (0)
- #define put_ioctx(kioctx)     do { if (unlikely(atomic_dec_and_test(&(kioctx)->users))) __put_ioctx(kioctx); else if (unlikely(atomic_read(&(kioctx)->users) < 0)) BUG(); } while (0)
-+#define in_aio() !is_sync_wait(current->io_wait)
-+/* may be used for debugging */
-+#define warn_if_async()       if (in_aio()) {\
-+      printk(KERN_ERR "%s(%s:%d) called in async context!\n", \
-+      __FUNCTION__, __FILE__, __LINE__); \
-+      dump_stack(); \
-+      }
-+
-+#define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait)
-+#define is_retried_kiocb(iocb) ((iocb)->ki_retried > 1)
-+
- #include <linux/aio_abi.h>
- static inline struct kiocb *list_kiocb(struct list_head *h)
---- linux-2.6.0-test1/include/linux/atmdev.h   2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/atmdev.h  2003-07-19 17:03:51.000000000 -0700
-@@ -252,6 +252,7 @@ enum {
-       ATM_VF_SESSION,         /* VCC is p2mp session control descriptor */
-       ATM_VF_HASSAP,          /* SAP has been set */
-       ATM_VF_CLOSE,           /* asynchronous close - treat like VF_RELEASED*/
-+      ATM_VF_WAITING,         /* waiting for reply from sigd */
- };
-@@ -291,14 +292,11 @@ struct atm_vcc {
-       void            *dev_data;      /* per-device data */
-       void            *proto_data;    /* per-protocol data */
-       struct k_atm_aal_stats *stats;  /* pointer to AAL stats group */
--      wait_queue_head_t sleep;        /* if socket is busy */
-       struct sock     *sk;            /* socket backpointer */
-       /* SVC part --- may move later ------------------------------------- */
-       short           itf;            /* interface number */
-       struct sockaddr_atmsvc local;
-       struct sockaddr_atmsvc remote;
--      void (*callback)(struct atm_vcc *vcc);
--      int             reply;          /* also used by ATMTCP */
-       /* Multipoint part ------------------------------------------------- */
-       struct atm_vcc  *session;       /* session VCC descriptor */
-       /* Other stuff ----------------------------------------------------- */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/bitmap.h  2003-07-19 17:04:13.000000000 -0700
-@@ -0,0 +1,159 @@
-+#ifndef __LINUX_BITMAP_H
-+#define __LINUX_BITMAP_H
-+
-+#ifndef __ASSEMBLY__
-+
-+#include <linux/config.h>
-+#include <linux/compiler.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/bitops.h>
-+#include <linux/string.h>
-+
-+static inline int bitmap_empty(const unsigned long *bitmap, int bits)
-+{
-+      int k, lim = bits/BITS_PER_LONG;
-+      for (k = 0; k < lim; ++k)
-+              if (bitmap[k])
-+                      return 0;
-+
-+      if (bits % BITS_PER_LONG)
-+              if (bitmap[k] & ((1UL << (bits % BITS_PER_LONG)) - 1))
-+                      return 0;
-+
-+      return 1;
-+}
-+
-+static inline int bitmap_full(const unsigned long *bitmap, int bits)
-+{
-+      int k, lim = bits/BITS_PER_LONG;
-+      for (k = 0; k < lim; ++k)
-+              if (~bitmap[k])
-+                      return 0;
-+
-+      if (bits % BITS_PER_LONG)
-+              if (~bitmap[k] & ((1UL << (bits % BITS_PER_LONG)) - 1))
-+                      return 0;
-+
-+      return 1;
-+}
-+
-+static inline int bitmap_equal(const unsigned long *bitmap1,
-+                              unsigned long *bitmap2, int bits)
-+{
-+      int k, lim = bits/BITS_PER_LONG;;
-+      for (k = 0; k < lim; ++k)
-+              if (bitmap1[k] != bitmap2[k])
-+                      return 0;
-+
-+      if (bits % BITS_PER_LONG)
-+              if ((bitmap1[k] ^ bitmap2[k]) &
-+                              ((1UL << (bits % BITS_PER_LONG)) - 1))
-+                      return 0;
-+
-+      return 1;
-+}
-+
-+static inline void bitmap_complement(unsigned long *bitmap, int bits)
-+{
-+      int k;
-+
-+      for (k = 0; k < BITS_TO_LONGS(bits); ++k)
-+              bitmap[k] = ~bitmap[k];
-+}
-+
-+static inline void bitmap_clear(unsigned long *bitmap, int bits)
-+{
-+      CLEAR_BITMAP((unsigned long *)bitmap, bits);
-+}
-+
-+static inline void bitmap_fill(unsigned long *bitmap, int bits)
-+{
-+      memset(bitmap, 0xff, BITS_TO_LONGS(bits)*sizeof(unsigned long));
-+}
-+
-+static inline void bitmap_copy(unsigned long *dst,
-+                      const unsigned long *src, int bits)
-+{
-+      memcpy(dst, src, BITS_TO_LONGS(bits)*sizeof(unsigned long));
-+}
-+
-+static inline void bitmap_shift_right(unsigned long *dst,
-+                              const unsigned long *src, int shift, int bits)
-+{
-+      int k;
-+      DECLARE_BITMAP(__shr_tmp, bits);
-+
-+      bitmap_clear(__shr_tmp, bits);
-+      for (k = 0; k < bits - shift; ++k)
-+              if (test_bit(k + shift, src))
-+                      set_bit(k, __shr_tmp);
-+      bitmap_copy(dst, __shr_tmp, bits);
-+}
-+
-+static inline void bitmap_shift_left(unsigned long *dst,
-+                              const unsigned long *src, int shift, int bits)
-+{
-+      int k;
-+      DECLARE_BITMAP(__shl_tmp, bits);
-+
-+      bitmap_clear(__shl_tmp, bits);
-+      for (k = bits; k >= shift; --k)
-+              if (test_bit(k - shift, src))
-+                      set_bit(k, __shl_tmp);
-+      bitmap_copy(dst, __shl_tmp, bits);
-+}
-+
-+static inline void bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
-+                              const unsigned long *bitmap2, int bits)
-+{
-+      int k;
-+      int nr = BITS_TO_LONGS(bits);
-+
-+      for (k = 0; k < nr; k++)
-+              dst[k] = bitmap1[k] & bitmap2[k];
-+}
-+
-+static inline void bitmap_or(unsigned long *dst, const unsigned long *bitmap1,
-+                              const unsigned long *bitmap2, int bits)
-+{
-+      int k;
-+      int nr = BITS_TO_LONGS(bits);
-+
-+      for (k = 0; k < nr; k++)
-+              dst[k] = bitmap1[k] | bitmap2[k];
-+}
-+
-+#if BITS_PER_LONG == 32
-+static inline int bitmap_weight(const unsigned long *bitmap, int bits)
-+{
-+      int k, w = 0, lim = bits/BITS_PER_LONG;
-+
-+      for (k = 0; k < lim; k++)
-+              w += hweight32(bitmap[k]);
-+
-+      if (bits % BITS_PER_LONG)
-+              w += hweight32(bitmap[k] &
-+                              ((1UL << (bits % BITS_PER_LONG)) - 1));
-+
-+      return w;
-+}
-+#else
-+static inline int bitmap_weight(const unsigned long *bitmap, int bits)
-+{
-+      int k, w = 0, lim = bits/BITS_PER_LONG;
-+
-+      for (k = 0; k < lim; k++)
-+              w += hweight64(bitmap[k]);
-+
-+      if (bits % BITS_PER_LONG)
-+              w += hweight64(bitmap[k] &
-+                              ((1UL << (bits % BITS_PER_LONG)) - 1));
-+
-+      return w;
-+}
-+#endif
-+
-+#endif /* __ASSEMBLY__ */
-+
-+#endif /* __LINUX_BITMAP_H */
---- linux-2.6.0-test1/include/linux/blkdev.h   2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/blkdev.h  2003-07-19 17:06:49.000000000 -0700
-@@ -44,9 +44,9 @@ struct as_io_context {
-       unsigned long ttime_samples;
-       unsigned long ttime_mean;
-       /* Layout pattern */
--      long seek_samples;
-+      unsigned int seek_samples;
-       sector_t last_request_pos;
--      sector_t seek_total;
-+      u64 seek_total;
-       sector_t seek_mean;
- };
-@@ -491,6 +491,7 @@ extern void __blk_attempt_remerge(reques
- extern struct request *blk_get_request(request_queue_t *, int, int);
- extern void blk_put_request(struct request *);
- extern void blk_insert_request(request_queue_t *, struct request *, int, void *);
-+extern void blk_requeue_request(request_queue_t *, struct request *);
- extern void blk_plug_device(request_queue_t *);
- extern int blk_remove_plug(request_queue_t *);
- extern void blk_recount_segments(request_queue_t *, struct bio *);
-@@ -549,6 +550,7 @@ extern void blk_queue_max_phys_segments(
- extern void blk_queue_max_hw_segments(request_queue_t *, unsigned short);
- extern void blk_queue_max_segment_size(request_queue_t *, unsigned int);
- extern void blk_queue_hardsect_size(request_queue_t *, unsigned short);
-+extern void blk_queue_stack_limits(request_queue_t *t, request_queue_t *b);
- extern void blk_queue_segment_boundary(request_queue_t *, unsigned long);
- extern void blk_queue_prep_rq(request_queue_t *, prep_rq_fn *pfn);
- extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *);
-@@ -574,6 +576,7 @@ extern void blk_queue_free_tags(request_
- extern int blk_queue_resize_tags(request_queue_t *, int);
- extern void blk_queue_invalidate_tags(request_queue_t *);
- extern void blk_congestion_wait(int rw, long timeout);
-+extern int blk_congestion_wait_wq(int rw, long timeout, wait_queue_t *wait);
- extern void blk_rq_bio_prep(request_queue_t *, struct request *, struct bio *);
- extern void blk_rq_prep_restart(struct request *);
---- linux-2.6.0-test1/include/linux/blk.h      2003-06-14 12:18:30.000000000 -0700
-+++ 25/include/linux/blk.h     2003-07-19 17:03:51.000000000 -0700
-@@ -1,2 +1,2 @@
--/* this file is obsolete, please use <linux/blkdev.h> instead */
-+#warning this file is obsolete, please use <linux/blkdev.h> instead
- #include <linux/blkdev.h>
---- linux-2.6.0-test1/include/linux/buffer_head.h      2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/buffer_head.h     2003-07-19 17:07:00.000000000 -0700
-@@ -158,6 +158,7 @@ void mark_buffer_async_write(struct buff
- void invalidate_bdev(struct block_device *, int);
- int sync_blockdev(struct block_device *bdev);
- void __wait_on_buffer(struct buffer_head *);
-+int __wait_on_buffer_wq(struct buffer_head *, wait_queue_t *wait);
- wait_queue_head_t *bh_waitq_head(struct buffer_head *bh);
- void wake_up_buffer(struct buffer_head *bh);
- int fsync_bdev(struct block_device *);
-@@ -169,6 +170,8 @@ void __brelse(struct buffer_head *);
- void __bforget(struct buffer_head *);
- void __breadahead(struct block_device *, sector_t block, int size);
- struct buffer_head *__bread(struct block_device *, sector_t block, int size);
-+struct buffer_head *__bread_wq(struct block_device *, sector_t block,
-+      int size, wait_queue_t *wait);
- struct buffer_head *alloc_buffer_head(int gfp_flags);
- void free_buffer_head(struct buffer_head * bh);
- void FASTCALL(unlock_buffer(struct buffer_head *bh));
-@@ -203,11 +206,6 @@ int nobh_prepare_write(struct page*, uns
- int nobh_commit_write(struct file *, struct page *, unsigned, unsigned);
- int nobh_truncate_page(struct address_space *, loff_t);
--#define OSYNC_METADATA        (1<<0)
--#define OSYNC_DATA    (1<<1)
--#define OSYNC_INODE   (1<<2)
--int generic_osync_inode(struct inode *, int);
--
- /*
-  * inline definitions
-@@ -226,13 +224,13 @@ static inline void put_bh(struct buffer_
- static inline void brelse(struct buffer_head *bh)
- {
--      if (bh)
-+      if (bh && !IS_ERR(bh))
-               __brelse(bh);
- }
- static inline void bforget(struct buffer_head *bh)
- {
--      if (bh)
-+      if (bh && !IS_ERR(bh))
-               __bforget(bh);
- }
-@@ -249,7 +247,12 @@ sb_breadahead(struct super_block *sb, se
- }
- static inline struct buffer_head *
--sb_getblk(struct super_block *sb, sector_t block)
-+sb_bread_wq(struct super_block *sb, sector_t block, wait_queue_t *wait)
-+{
-+      return __bread_wq(sb->s_bdev, block, sb->s_blocksize, wait);
-+}
-+
-+static inline struct buffer_head *sb_getblk(struct super_block *sb, sector_t block)
- {
-       return __getblk(sb->s_bdev, block, sb->s_blocksize);
- }
-@@ -273,16 +276,34 @@ map_bh(struct buffer_head *bh, struct su
-  * __wait_on_buffer() just to trip a debug check.  Because debug code in inline
-  * functions is bloaty.
-  */
--static inline void wait_on_buffer(struct buffer_head *bh)
-+
-+static inline int wait_on_buffer_wq(struct buffer_head *bh, wait_queue_t *wait)
- {
-       if (buffer_locked(bh) || atomic_read(&bh->b_count) == 0)
--              __wait_on_buffer(bh);
-+              return __wait_on_buffer_wq(bh, wait);
-+
-+      return 0;
-+}
-+
-+static inline void wait_on_buffer(struct buffer_head *bh)
-+{
-+      wait_on_buffer_wq(bh, NULL);
-+}
-+
-+static inline int lock_buffer_wq(struct buffer_head *bh, wait_queue_t *wait)
-+{
-+      while (test_set_buffer_locked(bh)) {
-+              int ret = __wait_on_buffer_wq(bh, wait);
-+              if (ret)
-+                      return ret;
-+      }
-+
-+      return 0;
- }
- static inline void lock_buffer(struct buffer_head *bh)
- {
--      while (test_set_buffer_locked(bh))
--              __wait_on_buffer(bh);
-+      lock_buffer_wq(bh, NULL);
- }
- #endif /* _LINUX_BUFFER_HEAD_H */
---- linux-2.6.0-test1/include/linux/compiler.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/compiler.h        2003-07-19 17:04:50.000000000 -0700
-@@ -78,6 +78,6 @@
-    shouldn't recognize the original var, and make assumptions about it */
- #define RELOC_HIDE(ptr, off)                                  \
-   ({ unsigned long __ptr;                                     \
--    __asm__ ("" : "=g"(__ptr) : "0"(ptr));            \
-+    __asm__ ("" : "=r"(__ptr) : "0"(ptr));            \
-     (typeof(ptr)) (__ptr + (off)); })
- #endif /* __LINUX_COMPILER_H */
---- linux-2.6.0-test1/include/linux/config.h   2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/config.h  2003-07-19 17:04:53.000000000 -0700
-@@ -2,5 +2,8 @@
- #define _LINUX_CONFIG_H
- #include <linux/autoconf.h>
-+#if defined(__i386__) && !defined(IN_BOOTLOADER)
-+#include <asm/kgdb.h>
-+#endif
- #endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/cpumask.h 2003-07-19 17:04:07.000000000 -0700
-@@ -0,0 +1,62 @@
-+#ifndef __LINUX_CPUMASK_H
-+#define __LINUX_CPUMASK_H
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/threads.h>
-+#include <linux/types.h>
-+#include <linux/bitmap.h>
-+
-+#define CPU_ARRAY_SIZE                BITS_TO_LONGS(NR_CPUS)
-+
-+struct cpumask
-+{
-+      unsigned long mask[CPU_ARRAY_SIZE];
-+};
-+
-+typedef struct cpumask cpumask_t;
-+
-+#ifdef CONFIG_SMP
-+#include <asm-generic/cpumask_array.h>
-+#else
-+#include <asm-generic/cpumask_up.h>
-+#endif
-+
-+#if NR_CPUS <= 4*BITS_PER_LONG
-+#include <asm-generic/cpumask_const_value.h>
-+#else
-+#include <asm-generic/cpumask_const_reference.h>
-+#endif
-+
-+
-+#ifdef CONFIG_SMP
-+
-+extern cpumask_t cpu_online_map;
-+
-+#define num_online_cpus()             cpus_weight(cpu_online_map)
-+#define cpu_online(cpu)                       cpu_isset(cpu, cpu_online_map)
-+#else
-+#define       cpu_online_map                  cpumask_of_cpu(0)
-+#define num_online_cpus()             1
-+#define cpu_online(cpu)                       ({ BUG_ON((cpu) != 0); 1; })
-+#endif
-+
-+static inline int next_online_cpu(int cpu, cpumask_t map)
-+{
-+      do
-+              cpu = next_cpu_const(cpu, map);
-+      while (cpu < NR_CPUS && !cpu_online(cpu));
-+      return cpu;
-+}
-+
-+#define for_each_cpu(cpu, map)                                                \
-+      for (cpu = first_cpu_const(map);                                \
-+              cpu < NR_CPUS;                                          \
-+              cpu = next_cpu_const(cpu,map))
-+
-+#define for_each_online_cpu(cpu, map)                                 \
-+      for (cpu = first_cpu_const(map);                                \
-+              cpu < NR_CPUS;                                          \
-+              cpu = next_online_cpu(cpu,map))
-+
-+#endif /* __LINUX_CPUMASK_H */
---- linux-2.6.0-test1/include/linux/dm-ioctl.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/linux/dm-ioctl.h        2003-07-19 17:03:51.000000000 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2001 Sistina Software (UK) Limited.
-+ * Copyright (C) 2003 Sistina Software (UK) Limited.
-  *
-  * This file is released under the LGPL.
-  */
-@@ -7,143 +7,12 @@
- #ifndef _LINUX_DM_IOCTL_H
- #define _LINUX_DM_IOCTL_H
--#include <linux/types.h>
-+#include <linux/config.h>
--#define DM_DIR "mapper"       /* Slashes not supported */
--#define DM_MAX_TYPE_NAME 16
--#define DM_NAME_LEN 128
--#define DM_UUID_LEN 129
-+#ifdef CONFIG_DM_IOCTL_V4
-+#include "dm-ioctl-v4.h"
-+#else
-+#include "dm-ioctl-v1.h"
-+#endif
--/*
-- * Implements a traditional ioctl interface to the device mapper.
-- */
--
--/*
-- * All ioctl arguments consist of a single chunk of memory, with
-- * this structure at the start.  If a uuid is specified any
-- * lookup (eg. for a DM_INFO) will be done on that, *not* the
-- * name.
-- */
--struct dm_ioctl {
--      /*
--       * The version number is made up of three parts:
--       * major - no backward or forward compatibility,
--       * minor - only backwards compatible,
--       * patch - both backwards and forwards compatible.
--       *
--       * All clients of the ioctl interface should fill in the
--       * version number of the interface that they were
--       * compiled with.
--       *
--       * All recognised ioctl commands (ie. those that don't
--       * return -ENOTTY) fill out this field, even if the
--       * command failed.
--       */
--      uint32_t version[3];    /* in/out */
--      uint32_t data_size;     /* total size of data passed in
--                               * including this struct */
--
--      uint32_t data_start;    /* offset to start of data
--                               * relative to start of this struct */
--
--      uint32_t target_count;  /* in/out */
--      uint32_t open_count;    /* out */
--      uint32_t flags;         /* in/out */
--
--      __kernel_dev_t dev;     /* in/out */
--
--      char name[DM_NAME_LEN]; /* device name */
--      char uuid[DM_UUID_LEN]; /* unique identifier for
--                               * the block device */
--};
--
--/*
-- * Used to specify tables.  These structures appear after the
-- * dm_ioctl.
-- */
--struct dm_target_spec {
--      int32_t status;         /* used when reading from kernel only */
--      uint64_t sector_start;
--      uint32_t length;
--
--      /*
--       * Offset in bytes (from the start of this struct) to
--       * next target_spec.
--       */
--      uint32_t next;
--
--      char target_type[DM_MAX_TYPE_NAME];
--
--      /*
--       * Parameter string starts immediately after this object.
--       * Be careful to add padding after string to ensure correct
--       * alignment of subsequent dm_target_spec.
--       */
--};
--
--/*
-- * Used to retrieve the target dependencies.
-- */
--struct dm_target_deps {
--      uint32_t count;
--
--      __kernel_dev_t dev[0];  /* out */
--};
--
--/*
-- * If you change this make sure you make the corresponding change
-- * to dm-ioctl.c:lookup_ioctl()
-- */
--enum {
--      /* Top level cmds */
--      DM_VERSION_CMD = 0,
--      DM_REMOVE_ALL_CMD,
--
--      /* device level cmds */
--      DM_DEV_CREATE_CMD,
--      DM_DEV_REMOVE_CMD,
--      DM_DEV_RELOAD_CMD,
--      DM_DEV_RENAME_CMD,
--      DM_DEV_SUSPEND_CMD,
--      DM_DEV_DEPS_CMD,
--      DM_DEV_STATUS_CMD,
--
--      /* target level cmds */
--      DM_TARGET_STATUS_CMD,
--      DM_TARGET_WAIT_CMD
--};
--
--#define DM_IOCTL 0xfd
--
--#define DM_VERSION       _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
--#define DM_REMOVE_ALL    _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
--
--#define DM_DEV_CREATE    _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
--#define DM_DEV_REMOVE    _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
--#define DM_DEV_RELOAD    _IOWR(DM_IOCTL, DM_DEV_RELOAD_CMD, struct dm_ioctl)
--#define DM_DEV_SUSPEND   _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
--#define DM_DEV_RENAME    _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
--#define DM_DEV_DEPS      _IOWR(DM_IOCTL, DM_DEV_DEPS_CMD, struct dm_ioctl)
--#define DM_DEV_STATUS    _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
--
--#define DM_TARGET_STATUS _IOWR(DM_IOCTL, DM_TARGET_STATUS_CMD, struct dm_ioctl)
--#define DM_TARGET_WAIT   _IOWR(DM_IOCTL, DM_TARGET_WAIT_CMD, struct dm_ioctl)
--
--#define DM_VERSION_MAJOR      1
--#define DM_VERSION_MINOR      0
--#define DM_VERSION_PATCHLEVEL 6
--#define DM_VERSION_EXTRA      "-ioctl (2002-10-15)"
--
--/* Status bits */
--#define DM_READONLY_FLAG      0x00000001
--#define DM_SUSPEND_FLAG               0x00000002
--#define DM_EXISTS_FLAG                0x00000004
--#define DM_PERSISTENT_DEV_FLAG        0x00000008
--
--/*
-- * Flag passed into ioctl STATUS command to get table information
-- * rather than current status.
-- */
--#define DM_STATUS_TABLE_FLAG  0x00000010
--
--#endif                                /* _LINUX_DM_IOCTL_H */
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/dm-ioctl-v1.h     2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,149 @@
-+/*
-+ * Copyright (C) 2001 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the LGPL.
-+ */
-+
-+#ifndef _LINUX_DM_IOCTL_V1_H
-+#define _LINUX_DM_IOCTL_V1_H
-+
-+#include <linux/types.h>
-+
-+#define DM_DIR "mapper"       /* Slashes not supported */
-+#define DM_MAX_TYPE_NAME 16
-+#define DM_NAME_LEN 128
-+#define DM_UUID_LEN 129
-+
-+/*
-+ * Implements a traditional ioctl interface to the device mapper.
-+ */
-+
-+/*
-+ * All ioctl arguments consist of a single chunk of memory, with
-+ * this structure at the start.  If a uuid is specified any
-+ * lookup (eg. for a DM_INFO) will be done on that, *not* the
-+ * name.
-+ */
-+struct dm_ioctl {
-+      /*
-+       * The version number is made up of three parts:
-+       * major - no backward or forward compatibility,
-+       * minor - only backwards compatible,
-+       * patch - both backwards and forwards compatible.
-+       *
-+       * All clients of the ioctl interface should fill in the
-+       * version number of the interface that they were
-+       * compiled with.
-+       *
-+       * All recognised ioctl commands (ie. those that don't
-+       * return -ENOTTY) fill out this field, even if the
-+       * command failed.
-+       */
-+      uint32_t version[3];    /* in/out */
-+      uint32_t data_size;     /* total size of data passed in
-+                               * including this struct */
-+
-+      uint32_t data_start;    /* offset to start of data
-+                               * relative to start of this struct */
-+
-+      uint32_t target_count;  /* in/out */
-+      uint32_t open_count;    /* out */
-+      uint32_t flags;         /* in/out */
-+
-+      __kernel_dev_t dev;     /* in/out */
-+
-+      char name[DM_NAME_LEN]; /* device name */
-+      char uuid[DM_UUID_LEN]; /* unique identifier for
-+                               * the block device */
-+};
-+
-+/*
-+ * Used to specify tables.  These structures appear after the
-+ * dm_ioctl.
-+ */
-+struct dm_target_spec {
-+      int32_t status;         /* used when reading from kernel only */
-+      uint64_t sector_start;
-+      uint32_t length;
-+
-+      /*
-+       * Offset in bytes (from the start of this struct) to
-+       * next target_spec.
-+       */
-+      uint32_t next;
-+
-+      char target_type[DM_MAX_TYPE_NAME];
-+
-+      /*
-+       * Parameter string starts immediately after this object.
-+       * Be careful to add padding after string to ensure correct
-+       * alignment of subsequent dm_target_spec.
-+       */
-+};
-+
-+/*
-+ * Used to retrieve the target dependencies.
-+ */
-+struct dm_target_deps {
-+      uint32_t count;
-+
-+      __kernel_dev_t dev[0];  /* out */
-+};
-+
-+/*
-+ * If you change this make sure you make the corresponding change
-+ * to dm-ioctl.c:lookup_ioctl()
-+ */
-+enum {
-+      /* Top level cmds */
-+      DM_VERSION_CMD = 0,
-+      DM_REMOVE_ALL_CMD,
-+
-+      /* device level cmds */
-+      DM_DEV_CREATE_CMD,
-+      DM_DEV_REMOVE_CMD,
-+      DM_DEV_RELOAD_CMD,
-+      DM_DEV_RENAME_CMD,
-+      DM_DEV_SUSPEND_CMD,
-+      DM_DEV_DEPS_CMD,
-+      DM_DEV_STATUS_CMD,
-+
-+      /* target level cmds */
-+      DM_TARGET_STATUS_CMD,
-+      DM_TARGET_WAIT_CMD
-+};
-+
-+#define DM_IOCTL 0xfd
-+
-+#define DM_VERSION       _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
-+#define DM_REMOVE_ALL    _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
-+
-+#define DM_DEV_CREATE    _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
-+#define DM_DEV_REMOVE    _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
-+#define DM_DEV_RELOAD    _IOWR(DM_IOCTL, DM_DEV_RELOAD_CMD, struct dm_ioctl)
-+#define DM_DEV_SUSPEND   _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
-+#define DM_DEV_RENAME    _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
-+#define DM_DEV_DEPS      _IOWR(DM_IOCTL, DM_DEV_DEPS_CMD, struct dm_ioctl)
-+#define DM_DEV_STATUS    _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
-+
-+#define DM_TARGET_STATUS _IOWR(DM_IOCTL, DM_TARGET_STATUS_CMD, struct dm_ioctl)
-+#define DM_TARGET_WAIT   _IOWR(DM_IOCTL, DM_TARGET_WAIT_CMD, struct dm_ioctl)
-+
-+#define DM_VERSION_MAJOR      1
-+#define DM_VERSION_MINOR      0
-+#define DM_VERSION_PATCHLEVEL 6
-+#define DM_VERSION_EXTRA      "-ioctl (2002-10-15)"
-+
-+/* Status bits */
-+#define DM_READONLY_FLAG      0x00000001
-+#define DM_SUSPEND_FLAG               0x00000002
-+#define DM_EXISTS_FLAG                0x00000004
-+#define DM_PERSISTENT_DEV_FLAG        0x00000008
-+
-+/*
-+ * Flag passed into ioctl STATUS command to get table information
-+ * rather than current status.
-+ */
-+#define DM_STATUS_TABLE_FLAG  0x00000010
-+
-+#endif                                /* _LINUX_DM_IOCTL_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/dm-ioctl-v4.h     2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,237 @@
-+/*
-+ * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited.
-+ *
-+ * This file is released under the LGPL.
-+ */
-+
-+#ifndef _LINUX_DM_IOCTL_V4_H
-+#define _LINUX_DM_IOCTL_V4_H
-+
-+#include <linux/types.h>
-+
-+#define DM_DIR "mapper"               /* Slashes not supported */
-+#define DM_MAX_TYPE_NAME 16
-+#define DM_NAME_LEN 128
-+#define DM_UUID_LEN 129
-+
-+/*
-+ * A traditional ioctl interface for the device mapper.
-+ *
-+ * Each device can have two tables associated with it, an
-+ * 'active' table which is the one currently used by io passing
-+ * through the device, and an 'inactive' one which is a table
-+ * that is being prepared as a replacement for the 'active' one.
-+ *
-+ * DM_VERSION:
-+ * Just get the version information for the ioctl interface.
-+ *
-+ * DM_REMOVE_ALL:
-+ * Remove all dm devices, destroy all tables.  Only really used
-+ * for debug.
-+ *
-+ * DM_LIST_DEVICES:
-+ * Get a list of all the dm device names.
-+ *
-+ * DM_DEV_CREATE:
-+ * Create a new device, neither the 'active' or 'inactive' table
-+ * slots will be filled.  The device will be in suspended state
-+ * after creation, however any io to the device will get errored
-+ * since it will be out-of-bounds.
-+ *
-+ * DM_DEV_REMOVE:
-+ * Remove a device, destroy any tables.
-+ *
-+ * DM_DEV_RENAME:
-+ * Rename a device.
-+ *
-+ * DM_SUSPEND:
-+ * This performs both suspend and resume, depending which flag is
-+ * passed in.
-+ * Suspend: This command will not return until all pending io to
-+ * the device has completed.  Further io will be deferred until
-+ * the device is resumed.
-+ * Resume: It is no longer an error to issue this command on an
-+ * unsuspended device.  If a table is present in the 'inactive'
-+ * slot, it will be moved to the active slot, then the old table
-+ * from the active slot will be _destroyed_.  Finally the device
-+ * is resumed.
-+ *
-+ * DM_DEV_STATUS:
-+ * Retrieves the status for the table in the 'active' slot.
-+ *
-+ * DM_DEV_WAIT:
-+ * Wait for a significant event to occur to the device.  This
-+ * could either be caused by an event triggered by one of the
-+ * targets of the table in the 'active' slot, or a table change.
-+ *
-+ * DM_TABLE_LOAD:
-+ * Load a table into the 'inactive' slot for the device.  The
-+ * device does _not_ need to be suspended prior to this command.
-+ *
-+ * DM_TABLE_CLEAR:
-+ * Destroy any table in the 'inactive' slot (ie. abort).
-+ *
-+ * DM_TABLE_DEPS:
-+ * Return a set of device dependencies for the 'active' table.
-+ *
-+ * DM_TABLE_STATUS:
-+ * Return the targets status for the 'active' table.
-+ */
-+
-+/*
-+ * All ioctl arguments consist of a single chunk of memory, with
-+ * this structure at the start.  If a uuid is specified any
-+ * lookup (eg. for a DM_INFO) will be done on that, *not* the
-+ * name.
-+ */
-+struct dm_ioctl {
-+      /*
-+       * The version number is made up of three parts:
-+       * major - no backward or forward compatibility,
-+       * minor - only backwards compatible,
-+       * patch - both backwards and forwards compatible.
-+       *
-+       * All clients of the ioctl interface should fill in the
-+       * version number of the interface that they were
-+       * compiled with.
-+       *
-+       * All recognised ioctl commands (ie. those that don't
-+       * return -ENOTTY) fill out this field, even if the
-+       * command failed.
-+       */
-+      uint32_t version[3];    /* in/out */
-+      uint32_t data_size;     /* total size of data passed in
-+                               * including this struct */
-+
-+      uint32_t data_start;    /* offset to start of data
-+                               * relative to start of this struct */
-+
-+      uint32_t target_count;  /* in/out */
-+      int32_t open_count;     /* out */
-+      uint32_t flags;         /* in/out */
-+      uint32_t event_nr;              /* in/out */
-+      uint32_t padding;
-+
-+      uint64_t dev;           /* in/out */
-+
-+      char name[DM_NAME_LEN]; /* device name */
-+      char uuid[DM_UUID_LEN]; /* unique identifier for
-+                               * the block device */
-+};
-+
-+/*
-+ * Used to specify tables.  These structures appear after the
-+ * dm_ioctl.
-+ */
-+struct dm_target_spec {
-+      uint64_t sector_start;
-+      uint64_t length;
-+      int32_t status;         /* used when reading from kernel only */
-+
-+      /*
-+       * Offset in bytes (from the start of this struct) to
-+       * next target_spec.
-+       */
-+      uint32_t next;
-+
-+      char target_type[DM_MAX_TYPE_NAME];
-+
-+      /*
-+       * Parameter string starts immediately after this object.
-+       * Be careful to add padding after string to ensure correct
-+       * alignment of subsequent dm_target_spec.
-+       */
-+};
-+
-+/*
-+ * Used to retrieve the target dependencies.
-+ */
-+struct dm_target_deps {
-+      uint32_t count; /* Array size */
-+      uint32_t padding;       /* unused */
-+      uint64_t dev[0];        /* out */
-+};
-+
-+/*
-+ * Used to get a list of all dm devices.
-+ */
-+struct dm_name_list {
-+      uint64_t dev;
-+      uint32_t next;          /* offset to the next record from
-+                                 the _start_ of this */
-+      char name[0];
-+};
-+
-+/*
-+ * If you change this make sure you make the corresponding change
-+ * to dm-ioctl.c:lookup_ioctl()
-+ */
-+enum {
-+      /* Top level cmds */
-+      DM_VERSION_CMD = 0,
-+      DM_REMOVE_ALL_CMD,
-+      DM_LIST_DEVICES_CMD,
-+
-+      /* device level cmds */
-+      DM_DEV_CREATE_CMD,
-+      DM_DEV_REMOVE_CMD,
-+      DM_DEV_RENAME_CMD,
-+      DM_DEV_SUSPEND_CMD,
-+      DM_DEV_STATUS_CMD,
-+      DM_DEV_WAIT_CMD,
-+
-+      /* Table level cmds */
-+      DM_TABLE_LOAD_CMD,
-+      DM_TABLE_CLEAR_CMD,
-+      DM_TABLE_DEPS_CMD,
-+      DM_TABLE_STATUS_CMD,
-+};
-+
-+#define DM_IOCTL 0xfd
-+
-+#define DM_VERSION       _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
-+#define DM_REMOVE_ALL    _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
-+#define DM_LIST_DEVICES  _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl)
-+
-+#define DM_DEV_CREATE    _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
-+#define DM_DEV_REMOVE    _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
-+#define DM_DEV_RENAME    _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
-+#define DM_DEV_SUSPEND   _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
-+#define DM_DEV_STATUS    _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
-+#define DM_DEV_WAIT      _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl)
-+
-+#define DM_TABLE_LOAD    _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl)
-+#define DM_TABLE_CLEAR   _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl)
-+#define DM_TABLE_DEPS    _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl)
-+#define DM_TABLE_STATUS  _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl)
-+
-+#define DM_VERSION_MAJOR      4
-+#define DM_VERSION_MINOR      0
-+#define DM_VERSION_PATCHLEVEL 0
-+#define DM_VERSION_EXTRA      "-ioctl (2003-06-04)"
-+
-+/* Status bits */
-+#define DM_READONLY_FLAG      (1 << 0) /* In/Out */
-+#define DM_SUSPEND_FLAG               (1 << 1) /* In/Out */
-+#define DM_PERSISTENT_DEV_FLAG        (1 << 3) /* In */
-+
-+/*
-+ * Flag passed into ioctl STATUS command to get table information
-+ * rather than current status.
-+ */
-+#define DM_STATUS_TABLE_FLAG  (1 << 4) /* In */
-+
-+/*
-+ * Flags that indicate whether a table is present in either of
-+ * the two table slots that a device has.
-+ */
-+#define DM_ACTIVE_PRESENT_FLAG   (1 << 5) /* Out */
-+#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */
-+
-+/*
-+ * Indicates that the buffer passed in wasn't big enough for the
-+ * results.
-+ */
-+#define DM_BUFFER_FULL_FLAG   (1 << 8) /* Out */
-+
-+#endif                                /* _LINUX_DM_IOCTL_H */
---- linux-2.6.0-test1/include/linux/elevator.h 2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/elevator.h        2003-07-19 17:03:51.000000000 -0700
-@@ -13,6 +13,7 @@ typedef struct request *(elevator_next_r
- typedef void (elevator_add_req_fn) (request_queue_t *, struct request *, struct list_head *);
- typedef int (elevator_queue_empty_fn) (request_queue_t *);
- typedef void (elevator_remove_req_fn) (request_queue_t *, struct request *);
-+typedef void (elevator_requeue_req_fn) (request_queue_t *, struct request *);
- typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *);
- typedef struct list_head *(elevator_get_sort_head_fn) (request_queue_t *, struct request *);
- typedef void (elevator_completed_req_fn) (request_queue_t *, struct request *);
-@@ -33,6 +34,7 @@ struct elevator_s
-       elevator_next_req_fn *elevator_next_req_fn;
-       elevator_add_req_fn *elevator_add_req_fn;
-       elevator_remove_req_fn *elevator_remove_req_fn;
-+      elevator_requeue_req_fn *elevator_requeue_req_fn;
-       elevator_queue_empty_fn *elevator_queue_empty_fn;
-       elevator_completed_req_fn *elevator_completed_req_fn;
-@@ -64,6 +66,7 @@ extern void elv_merge_requests(request_q
-                              struct request *);
- extern void elv_merged_request(request_queue_t *, struct request *);
- extern void elv_remove_request(request_queue_t *, struct request *);
-+extern void elv_requeue_request(request_queue_t *, struct request *);
- extern int elv_queue_empty(request_queue_t *);
- extern struct request *elv_next_request(struct request_queue *q);
- extern struct request *elv_former_request(request_queue_t *, struct request *);
---- linux-2.6.0-test1/include/linux/elfcore.h  2003-06-14 12:18:51.000000000 -0700
-+++ 25/include/linux/elfcore.h 2003-07-19 17:03:51.000000000 -0700
-@@ -107,12 +107,12 @@ static inline int elf_core_copy_task_reg
- extern int dump_fpu (struct pt_regs *, elf_fpregset_t *);
--static inline int elf_core_copy_task_fpregs(struct task_struct *t, elf_fpregset_t *fpu)
-+static inline int elf_core_copy_task_fpregs(struct task_struct *t, struct pt_regs *regs, elf_fpregset_t *fpu)
- {
- #ifdef ELF_CORE_COPY_FPREGS
-       return ELF_CORE_COPY_FPREGS(t, fpu);
- #else
--      return dump_fpu(NULL, fpu);
-+      return dump_fpu(regs, fpu);
- #endif
- }
---- linux-2.6.0-test1/include/linux/errno.h    2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/errno.h   2003-07-19 17:06:43.000000000 -0700
-@@ -22,6 +22,7 @@
- #define EBADTYPE      527     /* Type not supported by server */
- #define EJUKEBOX      528     /* Request initiated, but will not complete before timeout */
- #define EIOCBQUEUED   529     /* iocb queued, will get completion event */
-+#define EIOCBRETRY    530     /* iocb queued, will trigger a retry */
- #endif
---- linux-2.6.0-test1/include/linux/ext3_fs.h  2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/ext3_fs.h 2003-07-19 17:07:18.000000000 -0700
-@@ -721,7 +721,6 @@ extern int ext3_forget(handle_t *, int, 
- extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *);
- extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *);
--extern int  ext3_get_inode_loc (struct inode *, struct ext3_iloc *);
- extern void ext3_read_inode (struct inode *);
- extern void ext3_write_inode (struct inode *, int);
- extern int  ext3_setattr (struct dentry *, struct iattr *);
---- linux-2.6.0-test1/include/linux/ext3_jbd.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/linux/ext3_jbd.h        2003-07-19 17:03:51.000000000 -0700
-@@ -30,10 +30,11 @@
- #define EXT3_SINGLEDATA_TRANS_BLOCKS  8U
--/* Extended attributes may touch two data buffers, two bitmap buffers,
-- * and two group and summaries. */
-+/* Extended attribute operations touch at most two data buffers,
-+ * two bitmap buffers, and two group summaries, in addition to the inode
-+ * and the superblock, which are already accounted for. */
--#define EXT3_XATTR_TRANS_BLOCKS               8
-+#define EXT3_XATTR_TRANS_BLOCKS               6U
- /* Define the minimum size for a transaction which modifies data.  This
-  * needs to take into account the fact that we may end up modifying two
---- linux-2.6.0-test1/include/linux/fb.h       2003-06-14 12:18:06.000000000 -0700
-+++ 25/include/linux/fb.h      2003-07-19 17:04:55.000000000 -0700
-@@ -2,7 +2,6 @@
- #define _LINUX_FB_H
- #include <linux/tty.h>
--#include <linux/workqueue.h>
- #include <asm/types.h>
- #include <asm/io.h>
-@@ -326,28 +325,38 @@ struct fb_cursor {
-       struct fb_image image;  /* Cursor image */
- };
-+#ifdef __KERNEL__
-+
-+#include <linux/fs.h>
-+#include <linux/init.h>
-+#include <linux/workqueue.h>
-+#include <linux/devfs_fs_kernel.h>
-+
-+/*
-+ * The purpose of this structure is to translate data
-+ * from the hardwre independent format of fbdev to what 
-+ * format the hardware needs.
-+ */ 
-+
- #define FB_PIXMAP_DEFAULT 1     /* used internally by fbcon */
- #define FB_PIXMAP_SYSTEM  2     /* memory is in system RAM  */
- #define FB_PIXMAP_IO      4     /* memory is iomapped       */
- #define FB_PIXMAP_SYNC    256   /* set if GPU can DMA       */
- struct fb_pixmap {
--        __u8  *addr;                      /* pointer to memory             */  
--      __u32 size;                       /* size of buffer in bytes       */
--      __u32 offset;                     /* current offset to buffer      */
--      __u32 buf_align;                  /* byte alignment of each bitmap */
--      __u32 scan_align;                 /* alignment per scanline        */
--      __u32 flags;                      /* see FB_PIXMAP_*               */
--                                        /* access methods                */
--      void (*outbuf)(u8 *dst, u8 *addr, unsigned int size); 
--      u8   (*inbuf) (u8 *addr);
--      spinlock_t lock;                  /* spinlock                      */
-+      u8  *addr;              /* pointer to memory                    */
-+      u32 size;               /* size of buffer in bytes              */
-+      u32 offset;             /* current offset to buffer             */
-+      u32 buf_align;          /* byte alignment of each bitmap        */
-+      u32 scan_align;         /* alignment per scanline               */
-+      u32 access_align;       /* alignment per read/write             */
-+      u32 flags;              /* see FB_PIXMAP_*                      */
-+      spinlock_t lock;        /* spinlock                             */
-       atomic_t count;
-+      /* access methods */
-+      void (*outbuf)(u8 *addr, u8 *dst, unsigned int size); 
-+      u8   (*inbuf) (u8 *addr);
- };
--#ifdef __KERNEL__
--
--#include <linux/fs.h>
--#include <linux/init.h>
- struct fb_info;
- struct vm_area_struct;
-@@ -396,24 +405,24 @@ struct fb_ops {
- };
- struct fb_info {
--   int node;
--   int flags;
--   int open;                            /* Has this been open already ? */
-+      int node;
-+      int flags;
- #define FBINFO_FLAG_MODULE    1       /* Low-level driver is a module */
--   struct fb_var_screeninfo var;        /* Current var */
--   struct fb_fix_screeninfo fix;        /* Current fix */
--   struct fb_monspecs monspecs;         /* Current Monitor specs */
--   struct fb_cursor cursor;           /* Current cursor */    
--   struct work_struct queue;          /* Framebuffer event queue */
--   struct fb_pixmap pixmap;           /* Current pixmap */
--   struct fb_cmap cmap;                 /* Current cmap */
--   struct fb_ops *fbops;
--   char *screen_base;                   /* Virtual address */
--   struct vc_data *display_fg;                /* Console visible on this display */
--   int currcon;                               /* Current VC. */       
--   void *pseudo_palette;                /* Fake palette of 16 colors */ 
--   /* From here on everything is device dependent */
--   void *par; 
-+      struct fb_var_screeninfo var;   /* Current var */
-+      struct fb_fix_screeninfo fix;   /* Current fix */
-+      struct fb_monspecs monspecs;    /* Current Monitor specs */
-+      struct fb_cursor cursor;        /* Current cursor */    
-+      struct work_struct queue;       /* Framebuffer event queue */
-+      struct fb_pixmap pixmap;        /* Image HW mapper */
-+      struct fb_pixmap sprite;        /* Cursor HW mapper */
-+      struct fb_cmap cmap;            /* Current cmap */
-+      struct fb_ops *fbops;
-+      char *screen_base;              /* Virtual address */
-+      struct vc_data *display_fg;     /* Console visible on this display */
-+      void *pseudo_palette;           /* Fake palette of 16 colors */ 
-+      int currcon;                    /* Current VC. */       
-+      /* From here on everything is device dependent */
-+      void *par;      
- };
- #ifdef MODULE
-@@ -481,12 +490,12 @@ extern int register_framebuffer(struct f
- extern int unregister_framebuffer(struct fb_info *fb_info);
- extern int fb_prepare_logo(struct fb_info *fb_info);
- extern int fb_show_logo(struct fb_info *fb_info);
--extern u32 fb_get_buffer_offset(struct fb_info *info, u32 size);
--extern void move_buf_unaligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch,
--                              u32 height, u32 mask, u32 shift_high, u32 shift_low,
-+extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
-+extern void move_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src,
-+                              u32 d_pitch, u32 height, u32 mask, u32 shift_high, u32 shift_low,
-                               u32 mod, u32 idx);
--extern void move_buf_aligned(struct fb_info *info, u8 *dst, u8 *src, u32 d_pitch,
--                           u32 s_pitch, u32 height);
-+extern void move_buf_aligned(struct fb_info *info, struct fb_pixmap *buf, u8 *dst, u8 *src, 
-+                           u32 d_pitch, u32 s_pitch, u32 height);
- extern struct fb_info *registered_fb[FB_MAX];
- extern int num_registered_fb;
---- linux-2.6.0-test1/include/linux/fs.h       2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/linux/fs.h      2003-07-19 17:07:03.000000000 -0700
-@@ -323,6 +323,7 @@ struct address_space {
-       struct list_head        i_mmap;         /* list of private mappings */
-       struct list_head        i_mmap_shared;  /* list of shared mappings */
-       struct semaphore        i_shared_sem;   /* protect both above lists */
-+      atomic_t                truncate_count; /* Cover race condition with truncate */
-       unsigned long           dirtied_when;   /* jiffies of first page dirtying */
-       int                     gfp_mask;       /* how to allocate the pages */
-       struct backing_dev_info *backing_dev_info; /* device readahead, etc */
-@@ -729,6 +730,11 @@ extern int vfs_rename(struct inode *, st
- #define DT_SOCK               12
- #define DT_WHT                14
-+#define OSYNC_METADATA        (1<<0)
-+#define OSYNC_DATA    (1<<1)
-+#define OSYNC_INODE   (1<<2)
-+int generic_osync_inode(struct inode *, int);
-+
- /*
-  * This is the "filldir" function type, used by readdir() to let
-  * the kernel specify what kind of dirent layout it wants to have.
---- linux-2.6.0-test1/include/linux/hfs_sysdep.h       2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/linux/hfs_sysdep.h      2003-07-19 17:03:51.000000000 -0700
-@@ -28,9 +28,6 @@
- extern struct timezone sys_tz;
--#undef offsetof
--#define offsetof(TYPE, MEMB) ((size_t) &((TYPE *)0)->MEMB)
--
- /* Typedefs for integer types by size and signedness */
- typedef __u8            hfs_u8;
- typedef __u16           hfs_u16;
---- linux-2.6.0-test1/include/linux/ide.h      2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/ide.h     2003-07-19 17:03:51.000000000 -0700
-@@ -1288,12 +1288,6 @@ extern ide_devices_t   *idescsi;
- #endif
- extern int noautodma;
--/*
-- * We need blk.h, but we replace its end_request by our own version.
-- */
--#define IDE_DRIVER            /* Toggle some magic bits in blk.h */
--#include <linux/blk.h>
--
- extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
- /*
---- linux-2.6.0-test1/include/linux/init_task.h        2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/init_task.h       2003-07-19 17:06:43.000000000 -0700
-@@ -70,7 +70,7 @@
-       .prio           = MAX_PRIO-20,                                  \
-       .static_prio    = MAX_PRIO-20,                                  \
-       .policy         = SCHED_NORMAL,                                 \
--      .cpus_allowed   = ~0UL,                                         \
-+      .cpus_allowed   = CPU_MASK_ALL,                                 \
-       .mm             = NULL,                                         \
-       .active_mm      = &init_mm,                                     \
-       .run_list       = LIST_HEAD_INIT(tsk.run_list),                 \
-@@ -108,6 +108,7 @@
-       .proc_lock      = SPIN_LOCK_UNLOCKED,                           \
-       .switch_lock    = SPIN_LOCK_UNLOCKED,                           \
-       .journal_info   = NULL,                                         \
-+      .io_wait        = NULL,                                         \
- }
---- linux-2.6.0-test1/include/linux/irq.h      2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/linux/irq.h     2003-07-19 17:04:07.000000000 -0700
-@@ -15,6 +15,7 @@
- #include <linux/cache.h>
- #include <linux/spinlock.h>
-+#include <linux/cpumask.h>
- #include <asm/irq.h>
- #include <asm/ptrace.h>
-@@ -44,7 +45,7 @@ struct hw_interrupt_type {
-       void (*disable)(unsigned int irq);
-       void (*ack)(unsigned int irq);
-       void (*end)(unsigned int irq);
--      void (*set_affinity)(unsigned int irq, unsigned long mask);
-+      void (*set_affinity)(unsigned int irq, cpumask_t dest);
- };
- typedef struct hw_interrupt_type  hw_irq_controller;
---- linux-2.6.0-test1/include/linux/kdev_t.h   2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/kdev_t.h  2003-07-19 17:06:39.000000000 -0700
-@@ -1,82 +1,14 @@
- #ifndef _LINUX_KDEV_T_H
- #define _LINUX_KDEV_T_H
- #ifdef __KERNEL__
--/*
--As a preparation for the introduction of larger device numbers,
--we introduce a type kdev_t to hold them. No information about
--this type is known outside of this include file.
--
--Objects of type kdev_t designate a device. Outside of the kernel
--the corresponding things are objects of type dev_t - usually an
--integral type with the device major and minor in the high and low
--bits, respectively. Conversion is done by
--
--extern kdev_t to_kdev_t(int);
--
--It is up to the various file systems to decide how objects of type
--dev_t are stored on disk.
--The only other point of contact between kernel and outside world
--are the system calls stat and mknod, new versions of which will
--eventually have to be used in libc.
--
--[Unfortunately, the floppy control ioctls fail to hide the internal
--kernel structures, and the fd_device field of a struct floppy_drive_struct
--is user-visible. So, it remains a dev_t for the moment, with some ugly
--conversions in floppy.c.]
--
--Inside the kernel, we aim for a kdev_t type that is a pointer
--to a structure with information about the device (like major,
--minor, size, blocksize, sectorsize, name, read-only flag,
--struct file_operations etc.).
--
--However, for the time being we let kdev_t be almost the same as dev_t:
--
--typedef struct { unsigned short major, minor; } kdev_t;
--
--Admissible operations on an object of type kdev_t:
--- passing it along
--- comparing it for equality with another such object
--- storing it in inode->i_rdev or tty->device
--- using its bit pattern as argument in a hash function
--- finding its major and minor
--- complaining about it
--
--An object of type kdev_t is created only by the function MKDEV(),
--with the single exception of the constant 0 (no device).
--
--Right now the other information mentioned above is usually found
--in static arrays indexed by major or major,minor.
--
--An obstacle to immediately using
--    typedef struct { ... (* lots of information *) } *kdev_t
--is the case of mknod used to create a block device that the
--kernel doesn't know about at present (but first learns about
--when some module is inserted).
--
--aeb - 950811
--*/
-+#include <linux/types.h>       /* for dev_t */
--/*
-- * NOTE NOTE NOTE!
-- *
-- * The kernel-internal "kdev_t" will eventually have
-- * 20 bits for minor numbers, and 12 bits for majors.
-- *
-- * HOWEVER, the external representation is still 8+8
-- * bits, and there is no way to generate the extended
-- * "kdev_t" format yet. Which is just as well, since
-- * we still use "minor" as an index into various
-- * static arrays, and they are sized for a 8-bit index.
-- */
- typedef struct {
--      unsigned short value;
-+      unsigned long long value;
- } kdev_t;
--#define KDEV_MINOR_BITS               8
--#define KDEV_MAJOR_BITS               8
--
--#define __mkdev(major,minor)  (((major) << KDEV_MINOR_BITS) + (minor))
-+#define __mkdev(major, minor) (((unsigned long long)(major) << 32) + (minor))
- #define mk_kdev(major, minor) ((kdev_t) { __mkdev(major,minor) } )
-@@ -85,12 +17,12 @@ typedef struct {
-  * internal equality comparisons and for things
-  * like NFS filehandle conversion.
-  */
--static inline unsigned int kdev_val(kdev_t dev)
-+static inline unsigned long long kdev_val(kdev_t dev)
- {
-       return dev.value;
- }
--static inline kdev_t val_to_kdev(unsigned int val)
-+static inline kdev_t val_to_kdev(unsigned long long val)
- {
-       kdev_t dev;
-       dev.value = val;
-@@ -107,37 +39,85 @@ static inline int kdev_same(kdev_t dev1,
- #define kdev_none(d1) (!kdev_val(d1))
--/* Mask off the high bits for now.. */
--#define minor(dev)    ((dev).value & 0xff)
--#define major(dev)    (((dev).value >> KDEV_MINOR_BITS) & 0xff)
-+#define minor(dev)    (unsigned int)((dev).value & 0xffffffff)
-+#define major(dev)    (unsigned int)((dev).value >> 32)
- /* These are for user-level "dev_t" */
--#define MINORBITS     8
--#define MINORMASK     ((1U << MINORBITS) - 1)
-+/* Going back and forth between dev and (ma,mi) is one-to-one
-+   provided ma is nonzero or ma is zero and mi is 8-bit only.
-+   Never use major 0 together with a minor larger than 255. */
-+#if 0
-+/* readable versions */
-+static inline unsigned int
-+MAJOR(dev_t dev) {
-+        return (dev & ~0xffffffffULL) ? (dev >> 32) :
-+                (dev & ~0xffff) ? (dev >> 16) : (dev >> 8);
-+}
--#define MAJOR(dev)    ((unsigned int) ((dev) >> MINORBITS))
--#define MINOR(dev)    ((unsigned int) ((dev) & MINORMASK))
--#define MKDEV(ma,mi)  (((ma) << MINORBITS) | (mi))
-+static inline unsigned int
-+MINOR(dev_t dev) {
-+        return (dev & ~0xffffffffULL) ? (dev & 0xffffffff) :
-+                (dev & ~0xffff) ? (dev & 0xffff) : (dev & 0xff);
-+}
-+
-+static inline dev_t
-+MKDEV(unsigned int major, unsigned int minor) {
-+        unsigned int both = (major | minor);
-+        return ((both & ~0xffff) ? (((dev_t) major) << 32) :
-+                (both & ~0xff) ? (((dev_t) major) << 16) :
-+                (((dev_t) major) << 8) ) | minor;
-+}
-+#else
-+/* ugly macro versions */
-+#define MAJOR(dev) ((unsigned int)({ dev_t __dev = dev; \
-+   (__dev & ~0xffffffffULL) ? (__dev >> 32) : \
-+   (__dev & ~0xffff) ? (__dev >> 16) : (__dev >> 8); }))
-+#define MINOR(dev) ((unsigned int)({ dev_t __dev = dev; \
-+   (__dev & ~0xffffffffULL) ? (__dev & 0xffffffff) : \
-+   (__dev & ~0xffff) ? (__dev & 0xffff) : (__dev & 0xff); }))
-+#define constant_MKDEV(ma, mi) \
-+   ((((ma)|(mi)) & ~0xffff) ? ((ma) << 32) | (mi) : \
-+    (((ma)|(mi)) & ~0xff) ? ((ma) << 16) | (mi) : ((ma) << 8) | (mi))
-+#define MKDEV(major, minor) ({ \
-+   unsigned int __ma = major, __mi = minor, __both = (__ma | __mi); \
-+   ((sizeof(dev_t) > 4 && (__both & ~0xffff)) ? (((dev_t) __ma) << 32) : \
-+    (__both & ~0xff) ? (((dev_t) __ma) << 16) : (((dev_t) __ma) << 8) \
-+   ) | __mi; })
-+#endif
- /*
-  * Conversion functions
-  */
--static inline int kdev_t_to_nr(kdev_t dev)
-+static inline dev_t kdev_t_to_nr(kdev_t dev)
- {
--      return MKDEV(major(dev), minor(dev));
-+      unsigned int ma = major(dev);
-+      unsigned int mi = minor(dev);
-+      return MKDEV(ma, mi);
- }
--static inline kdev_t to_kdev_t(int dev)
-+static inline kdev_t to_kdev_t(dev_t dev)
- {
--      return mk_kdev(MAJOR(dev),MINOR(dev));
-+      unsigned int ma = MAJOR(dev);
-+      unsigned int mi = MINOR(dev);
-+      return mk_kdev(ma, mi);
- }
-+#define print_dev_t(buffer, dev)                                      \
-+      sprintf((buffer), "%u:%u\n", MAJOR(dev), MINOR(dev))
-+
-+#define format_dev_t(buffer, dev)                                     \
-+      ({                                                              \
-+              sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev));       \
-+              buffer;                                                 \
-+      })
-+
- #else /* __KERNEL__ */
- /*
- Some programs want their definitions of MAJOR and MINOR and MKDEV
- from the kernel sources. These must be the externally visible ones.
-+Of course such programs should be updated.
- */
- #define MAJOR(dev)    ((dev)>>8)
- #define MINOR(dev)    ((dev) & 0xff)
---- linux-2.6.0-test1/include/linux/kernel_stat.h      2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/kernel_stat.h     2003-07-19 17:03:51.000000000 -0700
-@@ -23,9 +23,7 @@ struct cpu_usage_stat {
- struct kernel_stat {
-       struct cpu_usage_stat   cpustat;
--#if !defined(CONFIG_ARCH_S390)
-       unsigned int irqs[NR_IRQS];
--#endif
- };
- DECLARE_PER_CPU(struct kernel_stat, kstat);
-@@ -36,7 +34,6 @@ DECLARE_PER_CPU(struct kernel_stat, ksta
- extern unsigned long nr_context_switches(void);
--#if !defined(CONFIG_ARCH_S390)
- /*
-  * Number of interrupts per specific IRQ source, since bootup
-  */
-@@ -50,6 +47,5 @@ static inline int kstat_irqs(int irq)
-       return sum;
- }
--#endif
- #endif /* _LINUX_KERNEL_STAT_H */
---- linux-2.6.0-test1/include/linux/linux_logo.h       2003-06-14 12:18:05.000000000 -0700
-+++ 25/include/linux/linux_logo.h      2003-07-19 17:04:55.000000000 -0700
-@@ -16,13 +16,11 @@
- #include <linux/init.h>
--
- #define LINUX_LOGO_MONO               1       /* monochrome black/white */
- #define LINUX_LOGO_VGA16      2       /* 16 colors VGA text palette */
- #define LINUX_LOGO_CLUT224    3       /* 224 colors */
- #define LINUX_LOGO_GRAY256    4       /* 256 levels grayscale */
--
- struct linux_logo {
-       int type;                       /* one of LINUX_LOGO_* */
-       unsigned int width;
-@@ -32,6 +30,6 @@ struct linux_logo {
-       const unsigned char *data;
- };
--extern const struct linux_logo *fb_find_logo(int depth);
-+extern const struct linux_logo *find_logo(int depth);
- #endif /* _LINUX_LINUX_LOGO_H */
---- linux-2.6.0-test1/include/linux/list.h     2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/list.h    2003-07-19 17:06:35.000000000 -0700
-@@ -142,8 +142,11 @@ static inline void __list_del(struct lis
-  * Note: list_empty on entry does not return true after this, the entry is
-  * in an undefined state.
-  */
-+#include <linux/kernel.h>     /* BUG_ON */
- static inline void list_del(struct list_head *entry)
- {
-+      BUG_ON(entry->prev->next != entry);
-+      BUG_ON(entry->next->prev != entry);
-       __list_del(entry->prev, entry->next);
-       entry->next = LIST_POISON1;
-       entry->prev = LIST_POISON2;
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/linux/lockmeter.h       2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,320 @@
-+/*
-+ *  Copyright (C) 1999-2002 Silicon Graphics, Inc.
-+ *
-+ *  Written by John Hawkes (hawkes@sgi.com)
-+ *  Based on klstat.h by Jack Steiner (steiner@sgi.com)
-+ *
-+ *  Modified by Ray Bryant (raybry@us.ibm.com) Feb-Apr 2000
-+ *  Changes Copyright (C) 2000 IBM, Inc.
-+ *  Added save of index in spinlock_t to improve efficiency
-+ *  of "hold" time reporting for spinlocks
-+ *  Added support for hold time statistics for read and write
-+ *  locks.
-+ *  Moved machine dependent code to include/asm/lockmeter.h.
-+ *
-+ */
-+
-+#ifndef _LINUX_LOCKMETER_H
-+#define _LINUX_LOCKMETER_H
-+
-+
-+/*---------------------------------------------------
-+ *    architecture-independent lockmeter.h
-+ *-------------------------------------------------*/
-+
-+/*
-+ * raybry -- version 2: added efficient hold time statistics
-+ *           requires lstat recompile, so flagged as new version
-+ * raybry -- version 3: added global reader lock data
-+ * hawkes -- version 4: removed some unnecessary fields to simplify mips64 port
-+ */
-+#define LSTAT_VERSION 5
-+
-+int   lstat_update(void*, void*, int);
-+int   lstat_update_time(void*, void*, int, uint32_t);
-+
-+/*
-+ * Currently, the mips64 and sparc64 kernels talk to a 32-bit lockstat, so we
-+ * need to force compatibility in the inter-communication data structure.
-+ */
-+
-+#if defined(CONFIG_MIPS32_COMPAT)
-+#define TIME_T                uint32_t
-+#elif defined(CONFIG_SPARC32_COMPAT)
-+#define TIME_T                uint64_t
-+#else
-+#define TIME_T                time_t
-+#endif
-+
-+#if defined(__KERNEL__) || (!defined(CONFIG_MIPS32_COMPAT) && !defined(CONFIG_SPARC32_COMPAT)) || (_MIPS_SZLONG==32)
-+#define POINTER               void *
-+#else
-+#define       POINTER         int64_t
-+#endif
-+
-+/*
-+ * Values for the "action" parameter passed to lstat_update.
-+ *    ZZZ - do we want a try-success status here???
-+ */
-+#define LSTAT_ACT_NO_WAIT     0
-+#define LSTAT_ACT_SPIN                1
-+#define LSTAT_ACT_REJECT      2
-+#define LSTAT_ACT_WW_SPIN       3
-+#define LSTAT_ACT_SLEPT               4 /* UNUSED */
-+
-+#define LSTAT_ACT_MAX_VALUES  4 /* NOTE: Increase to 5 if use ACT_SLEPT */
-+
-+/*
-+ * Special values for the low 2 bits of an RA passed to
-+ * lstat_update.
-+ */
-+/* we use these values to figure out what kind of lock data */
-+/* is stored in the statistics table entry at index ....... */
-+#define LSTAT_RA_SPIN           0  /* spin lock data */
-+#define LSTAT_RA_READ           1  /* read lock statistics */
-+#define LSTAT_RA_SEMA         2  /* RESERVED */
-+#define LSTAT_RA_WRITE          3  /* write lock statistics*/
-+
-+#define LSTAT_RA(n)   \
-+      ((void*)( ((unsigned long)__builtin_return_address(0) & ~3) | n) )
-+
-+/*
-+ * Constants used for lock addresses in the lstat_directory
-+ * to indicate special values of the lock address.
-+ */
-+#define       LSTAT_MULTI_LOCK_ADDRESS        NULL
-+
-+/*
-+ * Maximum size of the lockstats tables. Increase this value
-+ * if its not big enough. (Nothing bad happens if its not
-+ * big enough although some locks will not be monitored.)
-+ * We record overflows of this quantity in lstat_control.dir_overflows
-+ *
-+ * Note:  The max value here must fit into the field set
-+ * and obtained by the macro's PUT_INDEX() and GET_INDEX().
-+ * This value depends on how many bits are available in the
-+ * lock word in the particular machine implementation we are on.
-+ */
-+#define LSTAT_MAX_STAT_INDEX          2000
-+
-+/*
-+ * Size and mask for the hash table into the directory.
-+ */
-+#define LSTAT_HASH_TABLE_SIZE         4096            /* must be 2**N */
-+#define LSTAT_HASH_TABLE_MASK         (LSTAT_HASH_TABLE_SIZE-1)
-+
-+#define DIRHASH(ra)      ((unsigned long)(ra)>>2 & LSTAT_HASH_TABLE_MASK)
-+
-+/*
-+ *    This defines an entry in the lockstat directory. It contains
-+ *    information about a lock being monitored.
-+ *    A directory entry only contains the lock identification -
-+ *    counts on usage of the lock are kept elsewhere in a per-cpu
-+ *    data structure to minimize cache line pinging.
-+ */
-+typedef struct {
-+      POINTER caller_ra;                /* RA of code that set lock */
-+      POINTER lock_ptr;                 /* lock address */
-+      ushort  next_stat_index;  /* Used to link multiple locks that have the same hash table value */
-+} lstat_directory_entry_t;
-+
-+/*
-+ *    A multi-dimensioned array used to contain counts for lock accesses.
-+ *    The array is 3-dimensional:
-+ *            - CPU number. Keep from thrashing cache lines between CPUs
-+ *            - Directory entry index. Identifies the lock
-+ *            - Action. Indicates what kind of contention occurred on an
-+ *              access to the lock.
-+ *
-+ *    The index of an entry in the directory is the same as the 2nd index
-+ *    of the entry in the counts array.
-+ */
-+/*
-+ *  This table contains data for spin_locks, write locks, and read locks
-+ *  Not all data is used for all cases.  In particular, the hold time
-+ *  information is not stored here for read locks since that is a global
-+ *  (e. g. cannot be separated out by return address) quantity.
-+ *  See the lstat_read_lock_counts_t structure for the global read lock
-+ *  hold time.
-+ */
-+typedef struct {
-+      uint64_t    cum_wait_ticks;     /* sum of wait times               */
-+                                      /* for write locks, sum of time a  */
-+                                      /* writer is waiting for a reader  */
-+      int64_t     cum_hold_ticks;     /* cumulative sum of holds         */
-+                                      /* not used for read mode locks    */
-+                                      /* must be signed. ............... */
-+      uint32_t    max_wait_ticks;     /* max waiting time                */
-+      uint32_t    max_hold_ticks;     /* max holding time                */
-+      uint64_t    cum_wait_ww_ticks;  /* sum times writer waits on writer*/
-+      uint32_t    max_wait_ww_ticks;  /* max wait time writer vs writer  */
-+                                      /* prev 2 only used for write locks*/
-+      uint32_t    acquire_time;       /* time lock acquired this CPU     */
-+      uint32_t    count[LSTAT_ACT_MAX_VALUES];
-+} lstat_lock_counts_t;
-+
-+typedef lstat_lock_counts_t   lstat_cpu_counts_t[LSTAT_MAX_STAT_INDEX];
-+
-+/*
-+ * User request to:
-+ *    - turn statistic collection on/off, or to reset
-+ */
-+#define LSTAT_OFF      0
-+#define LSTAT_ON       1
-+#define LSTAT_RESET      2
-+#define LSTAT_RELEASE    3
-+
-+#define LSTAT_MAX_READ_LOCK_INDEX 1000
-+typedef struct {
-+      POINTER     lock_ptr;            /* address of lock for output stats */
-+      uint32_t    read_lock_count;
-+      int64_t     cum_hold_ticks;       /* sum of read lock hold times over */
-+                                        /* all callers. ....................*/
-+      uint32_t    write_index;          /* last write lock hash table index */
-+      uint32_t    busy_periods;         /* count of busy periods ended this */
-+      uint64_t    start_busy;           /* time this busy period started. ..*/
-+      uint64_t    busy_ticks;           /* sum of busy periods this lock. ..*/
-+      uint64_t    max_busy;             /* longest busy period for this lock*/
-+      uint32_t    max_readers;          /* maximum number of readers ...... */
-+#ifdef USER_MODE_TESTING
-+      rwlock_t    entry_lock;           /* lock for this read lock entry... */
-+                                        /* avoid having more than one rdr at*/
-+                                        /* needed for user space testing... */
-+                                        /* not needed for kernel 'cause it  */
-+                                        /* is non-preemptive. ............. */
-+#endif
-+} lstat_read_lock_counts_t;
-+typedef lstat_read_lock_counts_t      lstat_read_lock_cpu_counts_t[LSTAT_MAX_READ_LOCK_INDEX];
-+
-+#if defined(__KERNEL__) || defined(USER_MODE_TESTING)
-+
-+#ifndef USER_MODE_TESTING
-+#include <asm/lockmeter.h>
-+#else
-+#include "asm_newlockmeter.h"
-+#endif
-+
-+/*
-+ * Size and mask for the hash table into the directory.
-+ */
-+#define LSTAT_HASH_TABLE_SIZE         4096            /* must be 2**N */
-+#define LSTAT_HASH_TABLE_MASK         (LSTAT_HASH_TABLE_SIZE-1)
-+
-+#define DIRHASH(ra)      ((unsigned long)(ra)>>2 & LSTAT_HASH_TABLE_MASK)
-+
-+/*
-+ * This version eliminates the per processor lock stack.  What we do is to
-+ * store the index of the lock hash structure in unused bits in the lock
-+ * itself.  Then on unlock we can find the statistics record without doing
-+ * any additional hash or lock stack lookup.  This works for spin_locks.
-+ * Hold time reporting is now basically as cheap as wait time reporting
-+ * so we ignore the difference between LSTAT_ON_HOLD and LSTAT_ON_WAIT
-+ * as in version 1.1.* of lockmeter.
-+ *
-+ * For rw_locks, we store the index of a global reader stats structure in
-+ * the lock and the writer index is stored in the latter structure.
-+ * For read mode locks we hash at the time of the lock to find an entry
-+ * in the directory for reader wait time and the like.
-+ * At unlock time for read mode locks, we update just the global structure
-+ * so we don't need to know the reader directory index value at unlock time.
-+ *
-+ */
-+
-+/*
-+ * Protocol to change lstat_control.state
-+ *   This is complicated because we don't want the cum_hold_time for
-+ * a rw_lock to be decremented in _read_lock_ without making sure it
-+ * is incremented in _read_lock_ and vice versa.  So here is the
-+ * way we change the state of lstat_control.state:
-+ * I.  To Turn Statistics On
-+ *     After allocating storage, set lstat_control.state non-zero.
-+ * This works because we don't start updating statistics for in use
-+ * locks until the reader lock count goes to zero.
-+ * II. To Turn Statistics Off:
-+ * (0)  Disable interrupts on this CPU
-+ * (1)  Seize the lstat_control.directory_lock
-+ * (2)  Obtain the current value of lstat_control.next_free_read_lock_index
-+ * (3)  Store a zero in lstat_control.state.
-+ * (4)  Release the lstat_control.directory_lock
-+ * (5)  For each lock in the read lock list up to the saved value
-+ *      (well, -1) of the next_free_read_lock_index, do the following:
-+ *      (a)  Check validity of the stored lock address
-+ *           by making sure that the word at the saved addr
-+ *           has an index that matches this entry.  If not
-+ *           valid, then skip this entry.
-+ *      (b)  If there is a write lock already set on this lock,
-+ *           skip to (d) below.
-+ *      (c)  Set a non-metered write lock on the lock
-+ *      (d)  set the cached INDEX in the lock to zero
-+ *      (e)  Release the non-metered write lock.
-+ * (6)  Re-enable interrupts
-+ *
-+ * These rules ensure that a read lock will not have its statistics
-+ * partially updated even though the global lock recording state has
-+ * changed.  See put_lockmeter_info() for implementation.
-+ *
-+ * The reason for (b) is that there may be write locks set on the
-+ * syscall path to put_lockmeter_info() from user space.  If we do
-+ * not do this check, then we can deadlock.  A similar problem would
-+ * occur if the lock was read locked by the current CPU.  At the
-+ * moment this does not appear to happen.
-+ */
-+
-+/*
-+ * Main control structure for lockstat. Used to turn statistics on/off
-+ * and to maintain directory info.
-+ */
-+typedef struct {
-+      int                             state;
-+      spinlock_t              control_lock;           /* used to serialize turning statistics on/off   */
-+      spinlock_t              directory_lock;         /* for serialize adding entries to directory     */
-+      volatile int    next_free_dir_index;/* next free entry in the directory */
-+      /* FIXME not all of these fields are used / needed .............. */
-+                /* the following fields represent data since     */
-+              /* first "lstat on" or most recent "lstat reset" */
-+      TIME_T      first_started_time;     /* time when measurement first enabled */
-+      TIME_T      started_time;           /* time when measurement last started  */
-+      TIME_T      ending_time;            /* time when measurement last disabled */
-+      uint64_t    started_cycles64;       /* cycles when measurement last started          */
-+      uint64_t    ending_cycles64;        /* cycles when measurement last disabled         */
-+      uint64_t    enabled_cycles64;       /* total cycles with measurement enabled         */
-+      int         intervals;              /* number of measurement intervals recorded      */
-+                                          /* i. e. number of times did lstat on;lstat off  */
-+      lstat_directory_entry_t *dir;           /* directory */
-+      int         dir_overflow;           /* count of times ran out of space in directory  */
-+      int         rwlock_overflow;        /* count of times we couldn't allocate a rw block*/
-+      ushort          *hashtab;                           /* hash table for quick dir scans */
-+      lstat_cpu_counts_t      *counts[NR_CPUS];        /* Array of pointers to per-cpu stats */
-+    int         next_free_read_lock_index;   /* next rwlock reader (global) stats block  */
-+    lstat_read_lock_cpu_counts_t *read_lock_counts[NR_CPUS]; /* per cpu read lock stats  */
-+} lstat_control_t;
-+
-+#endif        /* defined(__KERNEL__) || defined(USER_MODE_TESTING) */
-+
-+typedef struct {
-+      short           lstat_version;          /* version of the data */
-+      short           state;                  /* the current state is returned */
-+      int             maxcpus;                /* Number of cpus present */
-+      int             next_free_dir_index;    /* index of the next free directory entry */
-+      TIME_T          first_started_time;     /* when measurement enabled for first time */
-+      TIME_T          started_time;           /* time in secs since 1969 when stats last turned on  */
-+      TIME_T          ending_time;            /* time in secs since 1969 when stats last turned off */
-+      uint32_t        cycleval;               /* cycles per second */
-+#ifdef notyet
-+      void            *kernel_magic_addr;     /* address of kernel_magic */
-+      void            *kernel_end_addr;       /* contents of kernel magic (points to "end") */
-+#endif
-+      int              next_free_read_lock_index; /* index of next (global) read lock stats struct */
-+      uint64_t         started_cycles64;      /* cycles when measurement last started        */
-+      uint64_t         ending_cycles64;       /* cycles when stats last turned off           */
-+      uint64_t         enabled_cycles64;      /* total cycles with measurement enabled       */
-+      int              intervals;             /* number of measurement intervals recorded      */
-+                                              /* i.e. number of times we did lstat on;lstat off*/
-+      int              dir_overflow;          /* number of times we wanted more space in directory */
-+      int              rwlock_overflow;       /* # of times we wanted more space in read_locks_count */
-+      struct new_utsname   uts;               /* info about machine where stats are measured */
-+                                              /* -T option of lockstat allows data to be     */
-+                                              /* moved to another machine. ................. */
-+} lstat_user_request_t;
-+
-+#endif /* _LINUX_LOCKMETER_H */
---- linux-2.6.0-test1/include/linux/loop.h     2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/linux/loop.h    2003-07-19 17:03:51.000000000 -0700
-@@ -15,7 +15,7 @@
- #ifdef __KERNEL__
- #include <linux/bio.h>
--#include <linux/blk.h>
-+#include <linux/blkdev.h>
- #include <linux/spinlock.h>
- /* Possible states of device */
---- linux-2.6.0-test1/include/linux/mm.h       2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/mm.h      2003-07-19 17:07:16.000000000 -0700
-@@ -421,10 +421,14 @@ int copy_page_range(struct mm_struct *ds
- int zeromap_page_range(struct vm_area_struct *vma, unsigned long from,
-                       unsigned long size, pgprot_t prot);
-+extern void invalidate_mmap_range(struct address_space *mapping,
-+                                loff_t const holebegin,
-+                                loff_t const holelen);
- extern int vmtruncate(struct inode * inode, loff_t offset);
- extern pmd_t *FASTCALL(__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address));
-+pmd_t *FASTCALL(__pmd_alloc_kernel(struct mm_struct *mm, pgd_t *pmd, unsigned long address));
- extern pte_t *FASTCALL(pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
--extern pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
-+pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd, unsigned long address));
- extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot);
- extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
- extern int make_pages_present(unsigned long addr, unsigned long end);
-@@ -485,12 +489,11 @@ static inline int set_page_dirty(struct 
-  * inlining and the symmetry break with pte_alloc_map() that does all
-  * of this out-of-line.
-  */
--static inline pmd_t *pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
--{
--      if (pgd_none(*pgd))
--              return __pmd_alloc(mm, pgd, address);
--      return pmd_offset(pgd, address);
--}
-+#define pmd_alloc_map(mm, pgd, addr)                          \
-+      (pgd_none(*(pgd))? __pmd_alloc(mm,pgd,addr): pmd_offset_map(pgd,addr))
-+
-+#define pmd_alloc_kernel(mm, pgd, addr)                               \
-+      (pgd_none(*(pgd))? __pmd_alloc_kernel(mm,pgd,addr): pmd_offset_kernel(pgd,addr))
- extern void free_area_init(unsigned long * zones_size);
- extern void free_area_init_node(int nid, pg_data_t *pgdat, struct page *pmap,
---- linux-2.6.0-test1/include/linux/module.h   2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/module.h  2003-07-19 17:03:51.000000000 -0700
-@@ -16,6 +16,7 @@
- #include <linux/kmod.h>
- #include <linux/elf.h>
- #include <linux/stringify.h>
-+#include <asm/local.h>
- #include <asm/module.h>
-@@ -171,7 +172,7 @@ void *__symbol_get_gpl(const char *symbo
- struct module_ref
- {
--      atomic_t count;
-+      local_t count;
- } ____cacheline_aligned;
- enum module_state
-@@ -276,19 +277,17 @@ struct module *module_get_kallsym(unsign
-                                 char *type,
-                                 char namebuf[128]);
- int is_exported(const char *name, const struct module *mod);
--#ifdef CONFIG_MODULE_UNLOAD
-+extern void __module_put_and_exit(struct module *mod, long code)
-+      __attribute__((noreturn));
-+#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code);
-+
-+#ifdef CONFIG_MODULE_UNLOAD
- unsigned int module_refcount(struct module *mod);
- void __symbol_put(const char *symbol);
- #define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x)
- void symbol_put_addr(void *addr);
--/* We only need protection against local interrupts. */
--#ifndef __HAVE_ARCH_LOCAL_INC
--#define local_inc(x) atomic_inc(x)
--#define local_dec(x) atomic_dec(x)
--#endif
--
- /* Sometimes we know we already have a refcount, and it's easier not
-    to handle the error case (which only happens with rmmod --wait). */
- static inline void __module_get(struct module *module)
-@@ -445,6 +444,8 @@ static inline int unregister_module_noti
-       return 0;
- }
-+#define module_put_and_exit(code) do_exit(code)
-+
- #endif /* CONFIG_MODULES */
- #ifdef MODULE
---- linux-2.6.0-test1/include/linux/namespace.h        2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/linux/namespace.h       2003-07-19 17:03:51.000000000 -0700
-@@ -2,7 +2,7 @@
- #define _NAMESPACE_H_
- #ifdef __KERNEL__
--#include <linux/dcache.h>
-+#include <linux/mount.h>
- #include <linux/sched.h>
- struct namespace {
-@@ -14,17 +14,12 @@ struct namespace {
- extern void umount_tree(struct vfsmount *);
- extern int copy_namespace(int, struct task_struct *);
-+void __put_namespace(struct namespace *namespace);
- static inline void put_namespace(struct namespace *namespace)
- {
--      if (atomic_dec_and_test(&namespace->count)) {
--              down_write(&namespace->sem);
--              spin_lock(&dcache_lock);
--              umount_tree(namespace->root);
--              spin_unlock(&dcache_lock);
--              up_write(&namespace->sem);
--              kfree(namespace);
--      }
-+      if (atomic_dec_and_test(&namespace->count))
-+              __put_namespace(namespace);
- }
- static inline void exit_namespace(struct task_struct *p)
---- linux-2.6.0-test1/include/linux/netdevice.h        2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/netdevice.h       2003-07-19 17:03:51.000000000 -0700
-@@ -29,6 +29,7 @@
- #include <linux/if_ether.h>
- #include <linux/if_packet.h>
- #include <linux/device.h>
-+#include <linux/percpu.h>
- #include <asm/atomic.h>
- #include <asm/cache.h>
-@@ -544,10 +545,9 @@ struct softnet_data
-       struct sk_buff          *completion_queue;
-       struct net_device       backlog_dev;    /* Sorry. 8) */
--} ____cacheline_aligned;
--
-+};
--extern struct softnet_data softnet_data[NR_CPUS];
-+DECLARE_PER_CPU(struct softnet_data,softnet_data);
- #define HAVE_NETIF_QUEUE
-@@ -555,12 +555,12 @@ static inline void __netif_schedule(stru
- {
-       if (!test_and_set_bit(__LINK_STATE_SCHED, &dev->state)) {
-               unsigned long flags;
--              int cpu;
-+              struct softnet_data *sd;
-               local_irq_save(flags);
--              cpu = smp_processor_id();
--              dev->next_sched = softnet_data[cpu].output_queue;
--              softnet_data[cpu].output_queue = dev;
-+              sd = &__get_cpu_var(softnet_data);
-+              dev->next_sched = sd->output_queue;
-+              sd->output_queue = dev;
-               raise_softirq_irqoff(NET_TX_SOFTIRQ);
-               local_irq_restore(flags);
-       }
-@@ -605,13 +605,13 @@ static inline int netif_running(const st
- static inline void dev_kfree_skb_irq(struct sk_buff *skb)
- {
-       if (atomic_dec_and_test(&skb->users)) {
--              int cpu;
-+              struct softnet_data *sd;
-               unsigned long flags;
-               local_irq_save(flags);
--              cpu = smp_processor_id();
--              skb->next = softnet_data[cpu].completion_queue;
--              softnet_data[cpu].completion_queue = skb;
-+              sd = &__get_cpu_var(softnet_data);
-+              skb->next = sd->completion_queue;
-+              sd->completion_queue = skb;
-               raise_softirq_irqoff(NET_TX_SOFTIRQ);
-               local_irq_restore(flags);
-       }
-@@ -769,12 +769,10 @@ static inline int netif_rx_schedule_prep
- static inline void __netif_rx_schedule(struct net_device *dev)
- {
-       unsigned long flags;
--      int cpu;
-       local_irq_save(flags);
--      cpu = smp_processor_id();
-       dev_hold(dev);
--      list_add_tail(&dev->poll_list, &softnet_data[cpu].poll_list);
-+      list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list);
-       if (dev->quota < 0)
-               dev->quota += dev->weight;
-       else
-@@ -798,13 +796,11 @@ static inline int netif_rx_reschedule(st
- {
-       if (netif_rx_schedule_prep(dev)) {
-               unsigned long flags;
--              int cpu;
-               dev->quota += undo;
-               local_irq_save(flags);
--              cpu = smp_processor_id();
--              list_add_tail(&dev->poll_list, &softnet_data[cpu].poll_list);
-+              list_add_tail(&dev->poll_list, &__get_cpu_var(softnet_data).poll_list);
-               __raise_softirq_irqoff(NET_RX_SOFTIRQ);
-               local_irq_restore(flags);
-               return 1;
---- linux-2.6.0-test1/include/linux/nfs_fs.h   2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/nfs_fs.h  2003-07-19 17:07:05.000000000 -0700
-@@ -172,6 +172,7 @@ struct nfs_inode {
- #define NFS_INO_ADVISE_RDPLUS   0x0002          /* advise readdirplus */
- #define NFS_INO_REVALIDATING  0x0004          /* revalidating attrs */
- #define NFS_INO_FLUSH         0x0008          /* inode is due for flushing */
-+#define NFS_INO_FAKE_ROOT     0x0080          /* root inode placeholder */
- static inline struct nfs_inode *NFS_I(struct inode *inode)
- {
-@@ -207,6 +208,7 @@ do { \
- #define NFS_FLAGS(inode)              (NFS_I(inode)->flags)
- #define NFS_REVALIDATING(inode)               (NFS_FLAGS(inode) & NFS_INO_REVALIDATING)
- #define NFS_STALE(inode)              (NFS_FLAGS(inode) & NFS_INO_STALE)
-+#define NFS_FAKE_ROOT(inode)          (NFS_FLAGS(inode) & NFS_INO_FAKE_ROOT)
- #define NFS_FILEID(inode)             (NFS_I(inode)->fileid)
-@@ -269,7 +271,7 @@ nfs_file_cred(struct file *file)
- /*
-  * linux/fs/nfs/direct.c
-  */
--extern int nfs_direct_IO(int, struct file *, const struct iovec *, loff_t,
-+extern int nfs_direct_IO(int, struct kiocb *, const struct iovec *, loff_t,
-                       unsigned long);
- /*
---- linux-2.6.0-test1/include/linux/nfs_fs_sb.h        2003-06-14 12:18:52.000000000 -0700
-+++ 25/include/linux/nfs_fs_sb.h       2003-07-19 17:03:51.000000000 -0700
-@@ -9,6 +9,7 @@
-  */
- struct nfs_server {
-       struct rpc_clnt *       client;         /* RPC client handle */
-+      struct rpc_clnt *       client_sys;     /* 2nd handle for FSINFO */
-       struct nfs_rpc_ops *    rpc_ops;        /* NFS protocol vector */
-       struct backing_dev_info backing_dev_info;
-       int                     flags;          /* various flags */
---- linux-2.6.0-test1/include/linux/nfs_mount.h        2003-06-14 12:17:56.000000000 -0700
-+++ 25/include/linux/nfs_mount.h       2003-07-19 17:03:51.000000000 -0700
-@@ -20,7 +20,7 @@
-  * mount-to-kernel version compatibility.  Some of these aren't used yet
-  * but here they are anyway.
-  */
--#define NFS_MOUNT_VERSION     4
-+#define NFS_MOUNT_VERSION     5
- struct nfs_mount_data {
-       int             version;                /* 1 */
-@@ -40,7 +40,7 @@ struct nfs_mount_data {
-       int             namlen;                 /* 2 */
-       unsigned int    bsize;                  /* 3 */
-       struct nfs3_fh  root;                   /* 4 */
--      int             pseudoflavor;           /* 4 */
-+      int             pseudoflavor;           /* 5 */
- };
- /* bits in the flags field */
-@@ -57,7 +57,7 @@ struct nfs_mount_data {
- #define NFS_MOUNT_NONLM               0x0200  /* 3 */
- #define NFS_MOUNT_BROKEN_SUID 0x0400  /* 4 */
- #define NFS_MOUNT_STRICTLOCK  0x1000  /* reserved for NFSv4 */
--#define NFS_MOUNT_SECFLAVOUR  0x2000  /* reserved */
-+#define NFS_MOUNT_SECFLAVOUR  0x2000  /* 5 */
- #define NFS_MOUNT_FLAGMASK    0xFFFF
- #endif
---- linux-2.6.0-test1/include/linux/nfs_page.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/nfs_page.h        2003-07-19 17:07:05.000000000 -0700
-@@ -46,7 +46,6 @@ extern       struct nfs_page *nfs_create_reque
-                                           unsigned int, unsigned int);
- extern        void nfs_clear_request(struct nfs_page *req);
- extern        void nfs_release_request(struct nfs_page *req);
--extern        void nfs_release_list(struct list_head *list);
- extern        void nfs_list_add_request(struct nfs_page *, struct list_head *);
-@@ -56,7 +55,6 @@ extern       int nfs_scan_list(struct list_hea
- extern        int nfs_coalesce_requests(struct list_head *, struct list_head *,
-                                 unsigned int);
- extern  int nfs_wait_on_request(struct nfs_page *);
--extern        int nfs_wait_for_reads(struct list_head *);
- extern        spinlock_t nfs_wreq_lock;
---- linux-2.6.0-test1/include/linux/nfs_xdr.h  2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/nfs_xdr.h 2003-07-19 17:07:07.000000000 -0700
-@@ -591,6 +591,7 @@ struct nfs4_compound {
- #endif /* CONFIG_NFS_V4 */
- struct nfs_read_data {
-+      int                     flags;
-       struct rpc_task         task;
-       struct inode            *inode;
-       struct rpc_cred         *cred;
-@@ -605,6 +606,7 @@ struct nfs_read_data {
- };
- struct nfs_write_data {
-+      int                     flags;
-       struct rpc_task         task;
-       struct inode            *inode;
-       struct rpc_cred         *cred;
-@@ -634,16 +636,9 @@ struct nfs_rpc_ops {
-                           struct nfs_fh *, struct nfs_fattr *);
-       int     (*access)  (struct inode *, struct rpc_cred *, int);
-       int     (*readlink)(struct inode *, struct page *);
--      int     (*read)    (struct inode *, struct rpc_cred *,
--                          struct nfs_fattr *,
--                          int, unsigned int, unsigned int,
--                          struct page *, int *eofp);
--      int     (*write)   (struct inode *, struct rpc_cred *,
--                          struct nfs_fattr *,
--                          int, unsigned int, unsigned int,
--                          struct page *, struct nfs_writeverf *verfp);
--      int     (*commit)  (struct inode *, struct nfs_fattr *,
--                          unsigned long, unsigned int);
-+      int     (*read)    (struct nfs_read_data *);
-+      int     (*write)   (struct nfs_write_data *);
-+      int     (*commit)  (struct nfs_write_data *);
-       int     (*create)  (struct inode *, struct qstr *, struct iattr *,
-                           int, struct nfs_fh *, struct nfs_fattr *);
-       int     (*remove)  (struct inode *, struct qstr *);
---- linux-2.6.0-test1/include/linux/node.h     2003-06-14 12:18:34.000000000 -0700
-+++ 25/include/linux/node.h    2003-07-19 17:04:07.000000000 -0700
-@@ -20,9 +20,10 @@
- #define _LINUX_NODE_H_
- #include <linux/sysdev.h>
-+#include <linux/cpumask.h>
- struct node {
--      unsigned long cpumap;   /* Bitmap of CPUs on the Node */
-+      cpumask_t cpumap;       /* Bitmap of CPUs on the Node */
-       struct sys_device       sysdev;
- };
---- linux-2.6.0-test1/include/linux/pagemap.h  2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/pagemap.h 2003-07-19 17:07:00.000000000 -0700
-@@ -130,17 +130,27 @@ static inline void ___add_to_page_cache(
- extern void FASTCALL(__lock_page(struct page *page));
- extern void FASTCALL(unlock_page(struct page *page));
--static inline void lock_page(struct page *page)
-+
-+extern int FASTCALL(__lock_page_wq(struct page *page, wait_queue_t *wait));
-+static inline int lock_page_wq(struct page *page, wait_queue_t *wait)
- {
-       if (TestSetPageLocked(page))
--              __lock_page(page);
-+              return __lock_page_wq(page, wait);
-+      else
-+              return 0;
-+}
-+
-+static inline void lock_page(struct page *page)
-+{
-+      lock_page_wq(page, NULL);
- }
-       
- /*
-  * This is exported only for wait_on_page_locked/wait_on_page_writeback.
-  * Never use this directly!
-  */
--extern void FASTCALL(wait_on_page_bit(struct page *page, int bit_nr));
-+extern int FASTCALL(wait_on_page_bit_wq(struct page *page, int bit_nr,
-+      wait_queue_t *wait));
- /* 
-  * Wait for a page to be unlocked.
-@@ -149,19 +159,33 @@ extern void FASTCALL(wait_on_page_bit(st
-  * ie with increased "page->count" so that the page won't
-  * go away during the wait..
-  */
--static inline void wait_on_page_locked(struct page *page)
-+static inline int wait_on_page_locked_wq(struct page *page, wait_queue_t *wait)
- {
-       if (PageLocked(page))
--              wait_on_page_bit(page, PG_locked);
-+              return wait_on_page_bit_wq(page, PG_locked, wait);
-+      return 0;
-+}
-+
-+static inline void wait_on_page_locked(struct page *page)
-+{
-+      wait_on_page_locked_wq(page, NULL);
- }
- /* 
-  * Wait for a page to complete writeback
-  */
--static inline void wait_on_page_writeback(struct page *page)
-+
-+static inline int wait_on_page_writeback_wq(struct page *page,
-+                                              wait_queue_t *wait)
- {
-       if (PageWriteback(page))
--              wait_on_page_bit(page, PG_writeback);
-+              return wait_on_page_bit_wq(page, PG_writeback, wait);
-+      return 0;
-+}
-+
-+static inline void wait_on_page_writeback(struct page *page)
-+{
-+      wait_on_page_writeback_wq(page, NULL);
- }
- extern void end_page_writeback(struct page *page);
---- linux-2.6.0-test1/include/linux/pci.h      2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/pci.h     2003-07-19 17:03:51.000000000 -0700
-@@ -715,7 +715,6 @@ static inline int pci_dac_set_dma_mask(s
- static inline int pci_assign_resource(struct pci_dev *dev, int i) { return -EBUSY;}
- static inline int pci_register_driver(struct pci_driver *drv) { return 0;}
- static inline void pci_unregister_driver(struct pci_driver *drv) { }
--static inline int scsi_to_pci_dma_dir(unsigned char scsi_dir) { return scsi_dir; }
- static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; }
- static inline const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) { return NULL; }
---- linux-2.6.0-test1/include/linux/raid/md_k.h        2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/raid/md_k.h       2003-07-19 17:06:39.000000000 -0700
-@@ -64,11 +64,7 @@ static inline int level_to_pers (int lev
- typedef struct mddev_s mddev_t;
- typedef struct mdk_rdev_s mdk_rdev_t;
--#if (MINORBITS != 8)
--#error MD does not handle bigger kdev yet
--#endif
--
--#define MAX_MD_DEVS  (1<<MINORBITS)   /* Max number of md dev */
-+#define MAX_MD_DEVS  256      /* Max number of md dev */
- /*
-  * options passed in raidrun:
---- linux-2.6.0-test1/include/linux/rcupdate.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/rcupdate.h        2003-07-19 17:04:56.000000000 -0700
-@@ -40,6 +40,7 @@
- #include <linux/spinlock.h>
- #include <linux/threads.h>
- #include <linux/percpu.h>
-+#include <linux/cpumask.h>
- /**
-  * struct rcu_head - callback structure for use with RCU
-@@ -67,7 +68,7 @@ struct rcu_ctrlblk {
-       spinlock_t      mutex;          /* Guard this struct                  */
-       long            curbatch;       /* Current batch number.              */
-       long            maxbatch;       /* Max requested batch number.        */
--      unsigned long   rcu_cpu_mask;   /* CPUs that need to switch in order  */
-+      cpumask_t       rcu_cpu_mask;   /* CPUs that need to switch in order  */
-                                       /* for current batch to proceed.      */
- };
-@@ -95,6 +96,8 @@ struct rcu_data {
-         long                  batch;           /* Batch # for current RCU batch */
-         struct list_head  nxtlist;
-         struct list_head  curlist;
-+      long            nr_rcureqs;
-+      long            nr_rcupdates;
- };
- DECLARE_PER_CPU(struct rcu_data, rcu_data);
-@@ -105,6 +108,8 @@ extern struct rcu_ctrlblk rcu_ctrlblk;
- #define RCU_batch(cpu)                (per_cpu(rcu_data, (cpu)).batch)
- #define RCU_nxtlist(cpu)      (per_cpu(rcu_data, (cpu)).nxtlist)
- #define RCU_curlist(cpu)      (per_cpu(rcu_data, (cpu)).curlist)
-+#define RCU_nr_rcureqs(cpu)   (per_cpu(rcu_data, (cpu)).nr_rcureqs)
-+#define RCU_nr_rcupdates(cpu)         (per_cpu(rcu_data, (cpu)).nr_rcupdates)
- #define RCU_QSCTR_INVALID     0
-@@ -114,7 +119,7 @@ static inline int rcu_pending(int cpu) 
-            rcu_batch_before(RCU_batch(cpu), rcu_ctrlblk.curbatch)) ||
-           (list_empty(&RCU_curlist(cpu)) &&
-                        !list_empty(&RCU_nxtlist(cpu))) ||
--          test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
-+          cpu_isset(cpu, rcu_ctrlblk.rcu_cpu_mask))
-               return 1;
-       else
-               return 0;
---- linux-2.6.0-test1/include/linux/root_dev.h 2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/root_dev.h        2003-07-19 17:06:39.000000000 -0700
-@@ -1,18 +1,16 @@
- #ifndef _ROOT_DEV_H_
- #define _ROOT_DEV_H_
--enum {
--      Root_NFS = MKDEV(UNNAMED_MAJOR, 255),
--      Root_RAM0 = MKDEV(RAMDISK_MAJOR, 0),
--      Root_RAM1 = MKDEV(RAMDISK_MAJOR, 1),
--      Root_FD0 = MKDEV(FLOPPY_MAJOR, 0),
--      Root_HDA1 = MKDEV(IDE0_MAJOR, 1),
--      Root_HDA2 = MKDEV(IDE0_MAJOR, 2),
--      Root_SDA1 = MKDEV(SCSI_DISK0_MAJOR, 1),
--      Root_SDA2 = MKDEV(SCSI_DISK0_MAJOR, 2),
--      Root_HDC1 = MKDEV(IDE1_MAJOR, 1),
--      Root_SR0 = MKDEV(SCSI_CDROM_MAJOR, 0),
--};
-+#define       Root_NFS        MKDEV(UNNAMED_MAJOR, 255)
-+#define       Root_RAM0       MKDEV(RAMDISK_MAJOR, 0)
-+#define       Root_RAM1       MKDEV(RAMDISK_MAJOR, 1)
-+#define       Root_FD0        MKDEV(FLOPPY_MAJOR, 0)
-+#define       Root_HDA1       MKDEV(IDE0_MAJOR, 1)
-+#define       Root_HDA2       MKDEV(IDE0_MAJOR, 2)
-+#define       Root_SDA1       MKDEV(SCSI_DISK0_MAJOR, 1)
-+#define       Root_SDA2       MKDEV(SCSI_DISK0_MAJOR, 2)
-+#define       Root_HDC1       MKDEV(IDE1_MAJOR, 1)
-+#define       Root_SR0        MKDEV(SCSI_CDROM_MAJOR, 0)
- extern dev_t ROOT_DEV;
---- linux-2.6.0-test1/include/linux/sched.h    2003-07-10 18:50:32.000000000 -0700
-+++ 25/include/linux/sched.h   2003-07-19 17:07:10.000000000 -0700
-@@ -12,6 +12,7 @@
- #include <linux/jiffies.h>
- #include <linux/rbtree.h>
- #include <linux/thread_info.h>
-+#include <linux/cpumask.h>
- #include <asm/system.h>
- #include <asm/semaphore.h>
-@@ -52,6 +53,7 @@ struct exec_domain;
- #define CLONE_DETACHED                0x00400000      /* parent wants no child-exit signal */
- #define CLONE_UNTRACED                0x00800000      /* set if the tracing process can't force CLONE_PTRACE on this clone */
- #define CLONE_CHILD_SETTID    0x01000000      /* set the TID in the child */
-+#define CLONE_STOPPED         0x02000000      /* Start in stopped state */
- /*
-  * List of flags we want to share for kernel threads,
-@@ -149,6 +151,7 @@ extern void init_idle(task_t *idle, int 
- extern void show_state(void);
- extern void show_regs(struct pt_regs *);
-+extern void show_trace_task(task_t *tsk);
- /*
-  * TASK is a pointer to the task whose backtrace we want to see (or NULL for current
-@@ -202,7 +205,7 @@ struct mm_struct {
-       unsigned long arg_start, arg_end, env_start, env_end;
-       unsigned long rss, total_vm, locked_vm;
-       unsigned long def_flags;
--      unsigned long cpu_vm_mask;
-+      cpumask_t cpu_vm_mask;
-       unsigned long swap_address;
-       unsigned dumpable:1;
-@@ -338,10 +341,11 @@ struct task_struct {
-       prio_array_t *array;
-       unsigned long sleep_avg;
-+      unsigned long avg_start;
-       unsigned long last_run;
-       unsigned long policy;
--      unsigned long cpus_allowed;
-+      cpumask_t cpus_allowed;
-       unsigned int time_slice, first_time_slice;
-       struct list_head tasks;
-@@ -456,12 +460,24 @@ struct task_struct {
-       unsigned long ptrace_message;
-       siginfo_t *last_siginfo; /* For ptrace use.  */
-+      long debug;
-+/*
-+ * current io wait handle: wait queue entry to use for io waits
-+ * If this thread is processing aio, this points at the waitqueue
-+ * inside the currently handled kiocb. It may be NULL (i.e. default
-+ * to a stack based synchronous wait) if its doing sync IO.
-+ */
-+      wait_queue_t *io_wait;
- };
- extern void __put_task_struct(struct task_struct *tsk);
- #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
--#define put_task_struct(tsk) \
--do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
-+#define put_task_struct(tsk)                                  \
-+      do {                                                    \
-+              BUG_ON((tsk)->debug == 0x6b6b6b6b);             \
-+              if (atomic_dec_and_test(&(tsk)->usage))         \
-+                      __put_task_struct(tsk);                 \
-+      } while (0)
- /*
-  * Per process flags
-@@ -488,9 +504,9 @@ do { if (atomic_dec_and_test(&(tsk)->usa
- #define PF_SYNCWRITE  0x00200000      /* I am doing a sync write */
- #ifdef CONFIG_SMP
--extern int set_cpus_allowed(task_t *p, unsigned long new_mask);
-+extern int set_cpus_allowed(task_t *p, cpumask_t new_mask);
- #else
--static inline int set_cpus_allowed(task_t *p, unsigned long new_mask)
-+static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask)
- {
-       return 0;
- }
-@@ -636,6 +652,8 @@ static inline void mmdrop(struct mm_stru
- /* mmput gets rid of the mappings and all user-space */
- extern void mmput(struct mm_struct *);
-+/* Grab a reference to the mm if its not already going away */
-+extern struct mm_struct *mmgrab(struct mm_struct *);
- /* Remove the current tasks stale references to the old mm_struct */
- extern void mm_release(struct task_struct *, struct mm_struct *);
-@@ -743,7 +761,7 @@ static inline struct mm_struct * get_tas
-       task_lock(task);
-       mm = task->mm;
-       if (mm)
--              atomic_inc(&mm->mm_users);
-+              mm = mmgrab(mm);
-       task_unlock(task);
-       return mm;
---- linux-2.6.0-test1/include/linux/serial_core.h      2003-06-14 12:17:58.000000000 -0700
-+++ 25/include/linux/serial_core.h     2003-07-19 17:03:51.000000000 -0700
-@@ -57,7 +57,7 @@
- #define PORT_SUNSAB   39
- /* NEC v850.  */
--#define PORT_NB85E_UART       40
-+#define PORT_V850E_UART       40
- /* NEC PC-9800 */
- #define PORT_8251_PC98        41
---- linux-2.6.0-test1/include/linux/smp.h      2003-06-14 12:18:22.000000000 -0700
-+++ 25/include/linux/smp.h     2003-07-19 17:04:07.000000000 -0700
-@@ -102,9 +102,6 @@ void smp_prepare_boot_cpu(void);
- #define smp_call_function(func,info,retry,wait)       ({ 0; })
- #define on_each_cpu(func,info,retry,wait)     ({ func(info); 0; })
- static inline void smp_send_reschedule(int cpu) { }
--#define cpu_online_map                                1
--#define cpu_online(cpu)                               ({ BUG_ON((cpu) != 0); 1; })
--#define num_online_cpus()                     1
- #define num_booting_cpus()                    1
- #define cpu_possible(cpu)                     ({ BUG_ON((cpu) != 0); 1; })
- #define smp_prepare_boot_cpu()                        do {} while (0)
---- linux-2.6.0-test1/include/linux/spinlock.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/spinlock.h        2003-07-19 17:06:40.000000000 -0700
-@@ -184,6 +184,17 @@ typedef struct {
- #endif /* !SMP */
-+#ifdef CONFIG_LOCKMETER
-+extern void _metered_spin_lock   (spinlock_t *lock);
-+extern void _metered_spin_unlock (spinlock_t *lock);
-+extern int  _metered_spin_trylock(spinlock_t *lock);
-+extern void _metered_read_lock    (rwlock_t *lock);
-+extern void _metered_read_unlock  (rwlock_t *lock);
-+extern void _metered_write_lock   (rwlock_t *lock);
-+extern void _metered_write_unlock (rwlock_t *lock);
-+extern int  _metered_write_trylock(rwlock_t *lock);
-+#endif
-+
- /*
-  * Define the various spin_lock and rw_lock methods.  Note we define these
-  * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various
-@@ -389,6 +400,141 @@ do { \
-                               _raw_spin_trylock(lock) ? 1 : \
-                               ({preempt_enable(); local_bh_enable(); 0;});})
-+#ifdef CONFIG_LOCKMETER
-+#undef spin_lock
-+#undef spin_trylock
-+#undef spin_unlock
-+#undef spin_lock_irqsave
-+#undef spin_lock_irq
-+#undef spin_lock_bh
-+#undef read_lock
-+#undef read_unlock
-+#undef write_lock
-+#undef write_unlock
-+#undef write_trylock
-+#undef spin_unlock_bh
-+#undef read_lock_irqsave
-+#undef read_lock_irq
-+#undef read_lock_bh
-+#undef read_unlock_bh
-+#undef write_lock_irqsave
-+#undef write_lock_irq
-+#undef write_lock_bh
-+#undef write_unlock_bh
-+
-+#define spin_lock(lock) \
-+do { \
-+      preempt_disable(); \
-+      _metered_spin_lock(lock); \
-+} while(0)
-+
-+#define spin_trylock(lock)     ({preempt_disable(); _metered_spin_trylock(lock) ? \
-+                              1 : ({preempt_enable(); 0;});})
-+#define spin_unlock(lock) \
-+do { \
-+      _metered_spin_unlock(lock); \
-+      preempt_enable(); \
-+} while (0)
-+
-+#define spin_lock_irqsave(lock, flags) \
-+do { \
-+      local_irq_save(flags); \
-+      preempt_disable(); \
-+      _metered_spin_lock(lock); \
-+} while (0)
-+
-+#define spin_lock_irq(lock) \
-+do { \
-+      local_irq_disable(); \
-+      preempt_disable(); \
-+      _metered_spin_lock(lock); \
-+} while (0)
-+
-+#define spin_lock_bh(lock) \
-+do { \
-+      local_bh_disable(); \
-+      preempt_disable(); \
-+      _metered_spin_lock(lock); \
-+} while (0)
-+
-+#define spin_unlock_bh(lock) \
-+do { \
-+      _metered_spin_unlock(lock); \
-+      preempt_enable(); \
-+      local_bh_enable(); \
-+} while (0)
-+
-+
-+#define read_lock(lock)                ({preempt_disable(); _metered_read_lock(lock);})
-+#define read_unlock(lock)      ({_metered_read_unlock(lock); preempt_enable();})
-+#define write_lock(lock)       ({preempt_disable(); _metered_write_lock(lock);})
-+#define write_unlock(lock)     ({_metered_write_unlock(lock); preempt_enable();})
-+#define write_trylock(lock)    ({preempt_disable();_metered_write_trylock(lock) ? \
-+                              1 : ({preempt_enable(); 0;});})
-+#define spin_unlock_no_resched(lock) \
-+do { \
-+      _metered_spin_unlock(lock); \
-+      preempt_enable_no_resched(); \
-+} while (0)
-+
-+#define read_lock_irqsave(lock, flags) \
-+do { \
-+      local_irq_save(flags); \
-+      preempt_disable(); \
-+      _metered_read_lock(lock); \
-+} while (0)
-+
-+#define read_lock_irq(lock) \
-+do { \
-+      local_irq_disable(); \
-+      preempt_disable(); \
-+      _metered_read_lock(lock); \
-+} while (0)
-+
-+#define read_lock_bh(lock) \
-+do { \
-+      local_bh_disable(); \
-+      preempt_disable(); \
-+      _metered_read_lock(lock); \
-+} while (0)
-+
-+#define read_unlock_bh(lock) \
-+do { \
-+      _metered_read_unlock(lock); \
-+      preempt_enable(); \
-+      local_bh_enable(); \
-+} while (0)
-+
-+#define write_lock_irqsave(lock, flags) \
-+do { \
-+      local_irq_save(flags); \
-+      preempt_disable(); \
-+      _metered_write_lock(lock); \
-+} while (0)
-+
-+#define write_lock_irq(lock) \
-+do { \
-+      local_irq_disable(); \
-+      preempt_disable(); \
-+      _metered_write_lock(lock); \
-+} while (0)
-+
-+#define write_lock_bh(lock) \
-+do { \
-+      local_bh_disable(); \
-+      preempt_disable(); \
-+      _metered_write_lock(lock); \
-+} while (0)
-+
-+#define write_unlock_bh(lock) \
-+do { \
-+      _metered_write_unlock(lock); \
-+      preempt_enable(); \
-+      local_bh_enable(); \
-+} while (0)
-+
-+#endif /* !CONFIG_LOCKMETER */
-+
- /* "lock on reference count zero" */
- #ifndef ATOMIC_DEC_AND_LOCK
- #include <asm/atomic.h>
---- linux-2.6.0-test1/include/linux/times.h    2003-06-14 12:17:57.000000000 -0700
-+++ 25/include/linux/times.h   2003-07-19 17:03:51.000000000 -0700
-@@ -11,6 +11,26 @@
- # define jiffies_to_clock_t(x) ((clock_t) jiffies_64_to_clock_t((u64) x))
- #endif
-+static inline unsigned long clock_t_to_jiffies(unsigned long x)
-+{
-+#if (HZ % USER_HZ)==0
-+      if (x >= ~0UL / (HZ / USER_HZ))
-+              return ~0UL;
-+      return x * (HZ / USER_HZ);
-+#else
-+      u64 jif;
-+
-+      /* Don't worry about loss of precision here .. */
-+      if (x >= ~0UL / HZ * USER_HZ)
-+              return ~0UL;
-+
-+      /* .. but do try to contain it here */
-+      jif = x * (u64) HZ;
-+      do_div(jif, USER_HZ);
-+      return jif;
-+#endif
-+}
-+
- static inline u64 jiffies_64_to_clock_t(u64 x)
- {
- #if (HZ % USER_HZ)==0
---- linux-2.6.0-test1/include/linux/topology.h 2003-06-14 12:18:25.000000000 -0700
-+++ 25/include/linux/topology.h        2003-07-19 17:04:07.000000000 -0700
-@@ -27,6 +27,7 @@
- #ifndef _LINUX_TOPOLOGY_H
- #define _LINUX_TOPOLOGY_H
-+#include <linux/cpumask.h>
- #include <linux/bitops.h>
- #include <linux/mmzone.h>
- #include <linux/smp.h>
-@@ -34,7 +35,12 @@
- #include <asm/topology.h>
- #ifndef nr_cpus_node
--#define nr_cpus_node(node)    (hweight_long(node_to_cpumask(node)))
-+#define nr_cpus_node(node)                                                    \
-+      ({                                                                      \
-+              cpumask_t __tmp__;                                              \
-+              __tmp__ = node_to_cpumask(node);                                \
-+              cpus_weight(__tmp__);                                           \
-+      })
- #endif
- static inline int __next_node_with_cpus(int node)
---- linux-2.6.0-test1/include/linux/tty.h      2003-06-14 12:18:21.000000000 -0700
-+++ 25/include/linux/tty.h     2003-07-19 17:03:51.000000000 -0700
-@@ -57,40 +57,40 @@
-  */
- struct screen_info {
--      unsigned char  orig_x;                  /* 0x00 */
--      unsigned char  orig_y;                  /* 0x01 */
--      unsigned short dontuse1;                /* 0x02 -- EXT_MEM_K sits here */
--      unsigned short orig_video_page;         /* 0x04 */
--      unsigned char  orig_video_mode;         /* 0x06 */
--      unsigned char  orig_video_cols;         /* 0x07 */
--      unsigned short unused2;                 /* 0x08 */
--      unsigned short orig_video_ega_bx;       /* 0x0a */
--      unsigned short unused3;                 /* 0x0c */
--      unsigned char  orig_video_lines;        /* 0x0e */
--      unsigned char  orig_video_isVGA;        /* 0x0f */
--      unsigned short orig_video_points;       /* 0x10 */
-+      u8  orig_x;             /* 0x00 */
-+      u8  orig_y;             /* 0x01 */
-+      u16 dontuse1;           /* 0x02 -- EXT_MEM_K sits here */
-+      u16 orig_video_page;    /* 0x04 */
-+      u8  orig_video_mode;    /* 0x06 */
-+      u8  orig_video_cols;    /* 0x07 */
-+      u16 unused2;            /* 0x08 */
-+      u16 orig_video_ega_bx;  /* 0x0a */
-+      u16 unused3;            /* 0x0c */
-+      u8  orig_video_lines;   /* 0x0e */
-+      u8  orig_video_isVGA;   /* 0x0f */
-+      u16 orig_video_points;  /* 0x10 */
-       /* VESA graphic mode -- linear frame buffer */
--      unsigned short lfb_width;               /* 0x12 */
--      unsigned short lfb_height;              /* 0x14 */
--      unsigned short lfb_depth;               /* 0x16 */
--      unsigned long  lfb_base;                /* 0x18 */
--      unsigned long  lfb_size;                /* 0x1c */
--      unsigned short dontuse2, dontuse3;      /* 0x20 -- CL_MAGIC and CL_OFFSET here */
--      unsigned short lfb_linelength;          /* 0x24 */
--      unsigned char  red_size;                /* 0x26 */
--      unsigned char  red_pos;                 /* 0x27 */
--      unsigned char  green_size;              /* 0x28 */
--      unsigned char  green_pos;               /* 0x29 */
--      unsigned char  blue_size;               /* 0x2a */
--      unsigned char  blue_pos;                /* 0x2b */
--      unsigned char  rsvd_size;               /* 0x2c */
--      unsigned char  rsvd_pos;                /* 0x2d */
--      unsigned short vesapm_seg;              /* 0x2e */
--      unsigned short vesapm_off;              /* 0x30 */
--      unsigned short pages;                   /* 0x32 */
--      unsigned short vesa_attributes;         /* 0x34 */
--                                              /* 0x36 -- 0x3f reserved for future expansion */
-+      u16 lfb_width;          /* 0x12 */
-+      u16 lfb_height;         /* 0x14 */
-+      u16 lfb_depth;          /* 0x16 */
-+      u32 lfb_base;           /* 0x18 */
-+      u32 lfb_size;           /* 0x1c */
-+      u16 dontuse2, dontuse3; /* 0x20 -- CL_MAGIC and CL_OFFSET here */
-+      u16 lfb_linelength;     /* 0x24 */
-+      u8  red_size;           /* 0x26 */
-+      u8  red_pos;            /* 0x27 */
-+      u8  green_size;         /* 0x28 */
-+      u8  green_pos;          /* 0x29 */
-+      u8  blue_size;          /* 0x2a */
-+      u8  blue_pos;           /* 0x2b */
-+      u8  rsvd_size;          /* 0x2c */
-+      u8  rsvd_pos;           /* 0x2d */
-+      u16 vesapm_seg;         /* 0x2e */
-+      u16 vesapm_off;         /* 0x30 */
-+      u16 pages;              /* 0x32 */
-+      u16 vesa_attributes;    /* 0x34 */
-+                              /* 0x36 -- 0x3f reserved for future expansion */
- };
- extern struct screen_info screen_info;
---- linux-2.6.0-test1/include/linux/usb.h      2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/linux/usb.h     2003-07-19 17:03:51.000000000 -0700
-@@ -80,7 +80,8 @@ struct usb_host_interface {
-  * @act_altsetting: index of current altsetting.  this number is always
-  *    less than num_altsetting.  after the device is configured, each
-  *    interface uses its default setting of zero.
-- * @max_altsetting:
-+ * @max_altsetting: the max number of altsettings for this interface.
-+ * @driver: the USB driver that is bound to this interface.
-  * @minor: the minor number assigned to this interface, if this
-  *    interface is bound to a driver that uses the USB major number.
-  *    If this interface does not use the USB major, this field should
-@@ -409,7 +410,11 @@ static inline int usb_make_path (struct 
-  *    do (or don't) show up otherwise in the filesystem.
-  * @id_table: USB drivers use ID table to support hotplugging.
-  *    Export this with MODULE_DEVICE_TABLE(usb,...).  This must be set
-- *    or your driver's probe function will never get called. 
-+ *    or your driver's probe function will never get called.
-+ * @driver: the driver model core driver structure.
-+ * @serialize: a semaphore used to serialize access to this driver.  Used
-+ *    in the probe and disconnect functions.  Only the USB core should use
-+ *    this lock.
-  *
-  * USB drivers must provide a name, probe() and disconnect() methods,
-  * and an id_table.  Other driver fields are optional.
-@@ -575,6 +580,8 @@ typedef void (*usb_complete_t)(struct ur
-  *    it likes with the URB, including resubmitting or freeing it.
-  * @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to 
-  *    collect the transfer status for each buffer.
-+ * @timeout: If set to zero, the urb will never timeout.  Otherwise this is
-+ *    the time in jiffies that this urb will timeout in.
-  *
-  * This structure identifies USB transfer requests.  URBs must be allocated by
-  * calling usb_alloc_urb() and freed with a call to usb_free_urb().
-@@ -677,10 +684,14 @@ typedef void (*usb_complete_t)(struct ur
-  */
- struct urb
- {
-+      /* private, usb core and host controller only fields in the urb */
-       spinlock_t lock;                /* lock for the URB */
-       atomic_t count;                 /* reference count of the URB */
-       void *hcpriv;                   /* private data for host controller */
-       struct list_head urb_list;      /* list pointer to all active urbs */
-+      int bandwidth;                  /* bandwidth for INT/ISO request */
-+
-+      /* public, documented fields in the urb that can be used by drivers */
-       struct usb_device *dev;         /* (in) pointer to associated device */
-       unsigned int pipe;              /* (in) pipe information */
-       int status;                     /* (return) non-ISO status */
-@@ -689,7 +700,6 @@ struct urb
-       dma_addr_t transfer_dma;        /* (in) dma addr for transfer_buffer */
-       int transfer_buffer_length;     /* (in) data buffer length */
-       int actual_length;              /* (return) actual transfer length */
--      int bandwidth;                  /* bandwidth for INT/ISO request */
-       unsigned char *setup_packet;    /* (in) setup packet (control only) */
-       dma_addr_t setup_dma;           /* (in) dma addr for setup_packet */
-       int start_frame;                /* (modify) start frame (INT/ISO) */
-@@ -891,8 +901,10 @@ struct usb_sg_request {
-       int                     status;
-       size_t                  bytes;
--      // members not documented above are private to usbcore,
--      // and are not provided for driver access!
-+      /* 
-+       * members below are private to usbcore,
-+       * and are not provided for driver access!
-+       */
-       spinlock_t              lock;
-       struct usb_device       *dev;
---- linux-2.6.0-test1/include/linux/wait.h     2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/wait.h    2003-07-19 17:06:43.000000000 -0700
-@@ -80,6 +80,15 @@ static inline int waitqueue_active(wait_
-       return !list_empty(&q->task_list);
- }
-+/*
-+ * Used to distinguish between sync and async io wait context:
-+ * sync i/o typically specifies a NULL wait queue entry or a wait
-+ * queue entry bound to a task (current task) to wake up.
-+ * aio specifies a wait queue entry with an async notification
-+ * callback routine, not associated with any task.
-+ */
-+#define is_sync_wait(wait)    (!(wait) || ((wait)->task))
-+
- extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
- extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
- extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
---- linux-2.6.0-test1/include/linux/writeback.h        2003-06-26 22:07:26.000000000 -0700
-+++ 25/include/linux/writeback.h       2003-07-19 17:06:57.000000000 -0700
-@@ -84,10 +84,12 @@ int dirty_writeback_centisecs_handler(st
-                                         void *, size_t *);
- void page_writeback_init(void);
--void balance_dirty_pages(struct address_space *mapping);
--void balance_dirty_pages_ratelimited(struct address_space *mapping);
-+int balance_dirty_pages(struct address_space *mapping);
-+int balance_dirty_pages_ratelimited(struct address_space *mapping);
- int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0);
- int do_writepages(struct address_space *mapping, struct writeback_control *wbc);
-+ssize_t sync_page_range(struct inode *inode, struct address_space *mapping,
-+                      loff_t pos, size_t count);
- /* pdflush.c */
- extern int nr_pdflush_threads;        /* Global so it can be exported to sysctl
---- linux-2.6.0-test1/include/media/saa7146.h  2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/media/saa7146.h 2003-07-19 17:03:51.000000000 -0700
-@@ -89,8 +89,6 @@ struct saa7146_extension
- #define SAA7146_USE_I2C_IRQ   0x1
-       int     flags;
-       
--      struct saa7146_ext_vv   *ext_vv_data;
--      
-       /* pairs of subvendor and subdevice ids for
-          supported devices, last entry 0xffff, 0xfff */
-       struct module *module;
-@@ -134,6 +132,7 @@ struct saa7146_dev
-       /* extension handling */
-       struct saa7146_extension        *ext;           /* indicates if handled by extension */
-       void                            *ext_priv;      /* pointer for extension private use (most likely some private data) */
-+      struct saa7146_ext_vv           *ext_vv_data;
-       /* per device video/vbi informations (if available) */
-       struct saa7146_vv       *vv_data;
---- linux-2.6.0-test1/include/media/saa7146_vv.h       2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/media/saa7146_vv.h      2003-07-19 17:03:51.000000000 -0700
-@@ -10,12 +10,10 @@
- #define BUFFER_TIMEOUT     (HZ/2)  /* 0.5 seconds */
- #define WRITE_RPS0(x) do { \
--      static int count = 0;   \
-       dev->d_rps0.cpu_addr[ count++ ] = cpu_to_le32(x); \
-       } while (0);
- #define WRITE_RPS1(x) do { \
--      static int count = 0;   \
-       dev->d_rps1.cpu_addr[ count++ ] = cpu_to_le32(x); \
-       } while (0);
-@@ -41,13 +39,13 @@ struct saa7146_standard
-       char          *name;
-       v4l2_std_id   id;
--      int v_offset;
--      int v_field;
--      int v_calc;
-+      int v_offset;   /* number of lines of vertical offset before processing */
-+      int v_field;    /* number of lines in a field for HPS to process */
-+      int v_calc;     /* number of vertical active lines */
-       
--      int h_offset;
--      int h_pixels;
--      int h_calc;
-+      int h_offset;   /* horizontal offset of processing window */
-+      int h_pixels;   /* number of horizontal pixels to process */
-+      int h_calc;     /* number of horizontal active pixels */
-       
-       int v_max_out;
-       int h_max_out;
-@@ -122,6 +120,7 @@ struct saa7146_vv
-       /* video capture */
-       struct saa7146_dmaqueue         video_q;
-       struct saa7146_fh               *streaming;
-+      enum v4l2_field                 last_field;
-       /* common: fixme? shouldn't this be in saa7146_fh?
-          (this leads to a more complicated question: shall the driver
-@@ -166,7 +165,7 @@ struct saa7146_ext_vv
-       int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *);
-               
-       struct saa7146_extension_ioctls *ioctls;
--      int (*ioctl)(struct saa7146_dev*, unsigned int cmd, void *arg);
-+      int (*ioctl)(struct saa7146_fh*, unsigned int cmd, void *arg);
- };
- struct saa7146_use_ops  {
-@@ -188,7 +187,7 @@ int saa7146_buffer_queue(struct saa7146_
- void saa7146_buffer_timeout(unsigned long data);
- void saa7146_dma_free(struct saa7146_dev *dev,struct saa7146_buf *buf);
--int saa7146_vv_init(struct saa7146_dev* dev);
-+int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv);
- int saa7146_vv_release(struct saa7146_dev* dev);
-@@ -201,6 +200,8 @@ void saa7146_set_gpio(struct saa7146_dev
- /* from saa7146_video.c */
- extern struct saa7146_use_ops saa7146_video_uops;
-+int saa7146_start_preview(struct saa7146_fh *fh);
-+int saa7146_stop_preview(struct saa7146_fh *fh);
- /* from saa7146_vbi.c */
- extern struct saa7146_use_ops saa7146_vbi_uops;
-@@ -215,35 +216,6 @@ extern struct saa7146_use_ops saa7146_vb
- #define SAA7146_HPS_SYNC_PORT_A               0x00
- #define SAA7146_HPS_SYNC_PORT_B               0x01
--/* number of vertical active lines */
--#define V_ACTIVE_LINES_PAL    576
--#define V_ACTIVE_LINES_NTSC   480
--#define V_ACTIVE_LINES_SECAM  576
--
--/* number of lines in a field for HPS to process */
--#define V_FIELD_PAL   288
--#define V_FIELD_NTSC  240
--#define V_FIELD_SECAM 288
--
--/* number of lines of vertical offset before processing */
--#define V_OFFSET_PAL  0x17
--#define V_OFFSET_NTSC 0x16
--#define V_OFFSET_SECAM        0x14
--
--/* number of horizontal pixels to process */
--#define H_PIXELS_PAL  680
--#define H_PIXELS_NTSC 708
--#define H_PIXELS_SECAM        720
--
--/* horizontal offset of processing window */
--#define H_OFFSET_PAL  0x14
--#define H_OFFSET_NTSC 0x06
--#define H_OFFSET_SECAM        0x14
--
--#define SAA7146_PAL_VALUES    V_OFFSET_PAL, V_FIELD_PAL, V_ACTIVE_LINES_PAL, H_OFFSET_PAL, H_PIXELS_PAL, H_PIXELS_PAL+1, V_ACTIVE_LINES_PAL, 768
--#define SAA7146_NTSC_VALUES   V_OFFSET_NTSC, V_FIELD_NTSC, V_ACTIVE_LINES_NTSC, H_OFFSET_NTSC, H_PIXELS_NTSC, H_PIXELS_NTSC+1, V_ACTIVE_LINES_NTSC, 640
--#define SAA7146_SECAM_VALUES  V_OFFSET_SECAM, V_FIELD_SECAM, V_ACTIVE_LINES_SECAM, H_OFFSET_SECAM, H_PIXELS_SECAM, H_PIXELS_SECAM+1, V_ACTIVE_LINES_SECAM, 768
--
- /* some memory sizes */
- #define SAA7146_CLIPPING_MEM  (14*PAGE_SIZE)
---- linux-2.6.0-test1/include/net/ip_vs.h      2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/net/ip_vs.h     2003-07-19 17:03:51.000000000 -0700
-@@ -887,7 +887,6 @@ extern int sysctl_ip_vs_cache_bypass;
- extern int sysctl_ip_vs_expire_nodest_conn;
- extern int sysctl_ip_vs_sync_threshold[2];
- extern int sysctl_ip_vs_nat_icmp_send;
--extern atomic_t ip_vs_dropentry;
- extern struct ip_vs_stats ip_vs_stats;
- extern struct ip_vs_service *
-@@ -902,7 +901,6 @@ extern struct ip_vs_dest *
- ip_vs_lookup_real_service(__u16 protocol, __u32 daddr, __u16 dport);
- extern int ip_vs_use_count_inc(void);
- extern void ip_vs_use_count_dec(void);
--extern void update_defense_level(void);
- extern int ip_vs_control_init(void);
- extern void ip_vs_control_cleanup(void);
---- linux-2.6.0-test1/include/pcmcia/ss.h      2003-07-13 21:44:35.000000000 -0700
-+++ 25/include/pcmcia/ss.h     2003-07-19 17:03:51.000000000 -0700
-@@ -51,6 +51,7 @@
- #define SS_3VCARD     0x1000
- #define SS_XVCARD     0x2000
- #define SS_PENDING    0x4000
-+#define SS_ZVCARD     0x8000
- /* InquireSocket capabilities */
- #define SS_CAP_PAGE_REGS      0x0001
-@@ -209,6 +210,10 @@ struct pcmcia_socket {
-       /* socket operations */
-       struct pccard_operations *      ops;
-+      /* Zoom video behaviour is so chip specific its not worth adding
-+         this to _ops */
-+      void                            (*zoom_video)(struct pcmcia_socket *, int);
-+                           
-       /* state thread */
-       struct semaphore                skt_sem;        /* protects socket h/w state */
---- linux-2.6.0-test1/include/scsi/scsi_device.h       2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/scsi/scsi_device.h      2003-07-19 17:03:51.000000000 -0700
-@@ -11,8 +11,6 @@ struct scsi_mode_data;
- struct scsi_device {
--      struct class_device     sdev_classdev;
--
-       struct list_head    siblings;   /* list of all devices on this host */
-       struct list_head    same_target_siblings; /* just the devices sharing same target id */
-       struct Scsi_Host *host;
-@@ -86,10 +84,11 @@ struct scsi_device {
-       unsigned int max_device_blocked; /* what device_blocked counts down from  */
- #define SCSI_DEFAULT_DEVICE_BLOCKED   3
--      struct device sdev_driverfs_dev;
-+      struct device           sdev_gendev;
-+      struct class_device     sdev_classdev;
- };
- #define       to_scsi_device(d)       \
--      container_of(d, struct scsi_device, sdev_driverfs_dev)
-+      container_of(d, struct scsi_device, sdev_gendev)
- extern struct scsi_device *scsi_add_device(struct Scsi_Host *,
-               uint, uint, uint);
---- linux-2.6.0-test1/include/scsi/scsi_host.h 2003-06-22 12:04:45.000000000 -0700
-+++ 25/include/scsi/scsi_host.h        2003-07-19 17:03:51.000000000 -0700
-@@ -329,12 +329,12 @@ struct scsi_host_template {
- #define SCSI_DEFAULT_HOST_BLOCKED     7
-       /*
--       * Pointer to the sysfs class properties for this host
-+       * Pointer to the sysfs class properties for this host, NULL terminated.
-        */
-       struct class_device_attribute **shost_attrs;
-       /*
--       * Pointer to the SCSI device properties for this host
-+       * Pointer to the SCSI device properties for this host, NULL terminated.
-        */
-       struct device_attribute **sdev_attrs;
-@@ -442,12 +442,6 @@ struct Scsi_Host {
-        */
-       unsigned int max_host_blocked;
--      /* 
--       * Support for sysfs
--       */
--      struct device host_gendev;
--      struct class_device class_dev;
--
-       /* legacy crap */
-       unsigned long base;
-       unsigned long io_port;
-@@ -455,6 +449,9 @@ struct Scsi_Host {
-       unsigned char dma_channel;
-       unsigned int  irq;
-+      /* ldm bits */
-+      struct device           shost_gendev;
-+      struct class_device     shost_classdev;
-       /*
-        * List of hosts per template.
-@@ -474,12 +471,13 @@ struct Scsi_Host {
-               __attribute__ ((aligned (sizeof(unsigned long))));
- };
- #define               dev_to_shost(d)         \
--      container_of(d, struct Scsi_Host, host_gendev)
-+      container_of(d, struct Scsi_Host, shost_gendev)
- #define               class_to_shost(d)       \
--      container_of(d, struct Scsi_Host, class_dev)
-+      container_of(d, struct Scsi_Host, shost_classdev)
- extern struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *, int);
- extern int scsi_add_host(struct Scsi_Host *, struct device *);
-+extern void scsi_scan_host(struct Scsi_Host *);
- extern int scsi_remove_host(struct Scsi_Host *);
- extern void scsi_host_get(struct Scsi_Host *);
- extern void scsi_host_put(struct Scsi_Host *t);
-@@ -495,16 +493,14 @@ static inline void scsi_assign_lock(stru
- static inline void scsi_set_device(struct Scsi_Host *shost,
-                                    struct device *dev)
- {
--        shost->host_gendev.parent = dev;
-+        shost->shost_gendev.parent = dev;
- }
- static inline struct device *scsi_get_device(struct Scsi_Host *shost)
- {
--        return shost->host_gendev.parent;
-+        return shost->shost_gendev.parent;
- }
--extern void scsi_sysfs_release_attributes(struct scsi_host_template *);
--
- extern void scsi_unblock_requests(struct Scsi_Host *);
- extern void scsi_block_requests(struct Scsi_Host *);
---- linux-2.6.0-test1/include/scsi/scsi_request.h      2003-07-02 14:53:18.000000000 -0700
-+++ 25/include/scsi/scsi_request.h     2003-07-19 17:03:51.000000000 -0700
-@@ -56,7 +56,7 @@ extern void scsi_do_req(struct scsi_requ
-                       int timeout, int retries);
- struct scsi_mode_data {
--      __u16   length;
-+      __u32   length;
-       __u16   block_descriptor_length;
-       __u8    medium_type;
-       __u8    device_specific;
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/include/video/epson1355.h       2003-07-19 17:04:55.000000000 -0700
-@@ -0,0 +1,64 @@
-+/*
-+ * include/video/epson13xx.h -- Epson 13xx frame buffer
-+ *
-+ * Copyright (C) Hewlett-Packard Company.  All rights reserved.
-+ *
-+ * Written by Christopher Hoover <ch@hpl.hp.com>
-+ *
-+ */
-+
-+#ifndef _EPSON13XX_H_
-+#define _EPSON13XX_H_
-+
-+#define REG_REVISION_CODE              0x00
-+#define REG_MEMORY_CONFIG              0x01
-+#define REG_PANEL_TYPE                 0x02
-+#define REG_MOD_RATE                   0x03
-+#define REG_HORZ_DISP_WIDTH            0x04
-+#define REG_HORZ_NONDISP_PERIOD        0x05
-+#define REG_HRTC_START_POSITION        0x06
-+#define REG_HRTC_PULSE_WIDTH           0x07
-+#define REG_VERT_DISP_HEIGHT0          0x08
-+#define REG_VERT_DISP_HEIGHT1          0x09
-+#define REG_VERT_NONDISP_PERIOD        0x0A
-+#define REG_VRTC_START_POSITION        0x0B
-+#define REG_VRTC_PULSE_WIDTH           0x0C
-+#define REG_DISPLAY_MODE               0x0D
-+#define REG_SCRN1_LINE_COMPARE0        0x0E
-+#define REG_SCRN1_LINE_COMPARE1        0x0F
-+#define REG_SCRN1_DISP_START_ADDR0     0x10
-+#define REG_SCRN1_DISP_START_ADDR1     0x11
-+#define REG_SCRN1_DISP_START_ADDR2     0x12
-+#define REG_SCRN2_DISP_START_ADDR0     0x13
-+#define REG_SCRN2_DISP_START_ADDR1     0x14
-+#define REG_SCRN2_DISP_START_ADDR2     0x15
-+#define REG_MEM_ADDR_OFFSET0           0x16
-+#define REG_MEM_ADDR_OFFSET1           0x17
-+#define REG_PIXEL_PANNING              0x18
-+#define REG_CLOCK_CONFIG               0x19
-+#define REG_POWER_SAVE_CONFIG          0x1A
-+#define REG_MISC                       0x1B
-+#define REG_MD_CONFIG_READBACK0        0x1C
-+#define REG_MD_CONFIG_READBACK1        0x1D
-+#define REG_GPIO_CONFIG0               0x1E
-+#define REG_GPIO_CONFIG1               0x1F
-+#define REG_GPIO_CONTROL0              0x20
-+#define REG_GPIO_CONTROL1              0x21
-+#define REG_PERF_ENHANCEMENT0          0x22
-+#define REG_PERF_ENHANCEMENT1          0x23
-+#define REG_LUT_ADDR                   0x24
-+#define REG_RESERVED_1                 0x25
-+#define REG_LUT_DATA                   0x26
-+#define REG_INK_CURSOR_CONTROL         0x27
-+#define REG_CURSOR_X_POSITION0         0x28
-+#define REG_CURSOR_X_POSITION1         0x29
-+#define REG_CURSOR_Y_POSITION0         0x2A
-+#define REG_CURSOR_Y_POSITION1         0x2B
-+#define REG_INK_CURSOR_COLOR0_0        0x2C
-+#define REG_INK_CURSOR_COLOR0_1        0x2D
-+#define REG_INK_CURSOR_COLOR1_0        0x2E
-+#define REG_INK_CURSOR_COLOR1_1        0x2F
-+#define REG_INK_CURSOR_START_ADDR      0x30
-+#define REG_ALTERNATE_FRM              0x31
-+
-+#endif
---- linux-2.6.0-test1/include/video/neomagic.h 2003-06-14 12:18:07.000000000 -0700
-+++ 25/include/video/neomagic.h        2003-07-19 17:04:55.000000000 -0700
-@@ -75,45 +75,45 @@
- struct xtimings {
--  unsigned int pixclock;
--  unsigned int HDisplay;
--  unsigned int HSyncStart;
--  unsigned int HSyncEnd;
--  unsigned int HTotal;
--  unsigned int VDisplay;
--  unsigned int VSyncStart;
--  unsigned int VSyncEnd;
--  unsigned int VTotal;
--  unsigned int sync;
--  int        dblscan;
--  int        interlaced;
-+      unsigned int pixclock;
-+      unsigned int HDisplay;
-+      unsigned int HSyncStart;
-+      unsigned int HSyncEnd;
-+      unsigned int HTotal;
-+      unsigned int VDisplay;
-+      unsigned int VSyncStart;
-+      unsigned int VSyncEnd;
-+      unsigned int VTotal;
-+      unsigned int sync;
-+      int dblscan;
-+      int interlaced;
- };
- /* --------------------------------------------------------------------- */
- typedef volatile struct {
--  __u32 bltStat;
--  __u32 bltCntl;
--  __u32 xpColor;
--  __u32 fgColor;
--  __u32 bgColor;
--  __u32 pitch;
--  __u32 clipLT;
--  __u32 clipRB;
--  __u32 srcBitOffset;
--  __u32 srcStart;
--  __u32 reserved0;
--  __u32 dstStart;
--  __u32 xyExt;
--
--  __u32 reserved1[19];
--
--  __u32 pageCntl;
--  __u32 pageBase;
--  __u32 postBase;
--  __u32 postPtr;
--  __u32 dataPtr;
-+      __u32 bltStat;
-+      __u32 bltCntl;
-+      __u32 xpColor;
-+      __u32 fgColor;
-+      __u32 bgColor;
-+      __u32 pitch;
-+      __u32 clipLT;
-+      __u32 clipRB;
-+      __u32 srcBitOffset;
-+      __u32 srcStart;
-+      __u32 reserved0;
-+      __u32 dstStart;
-+      __u32 xyExt;
-+
-+      __u32 reserved1[19];
-+
-+      __u32 pageCntl;
-+      __u32 pageBase;
-+      __u32 postBase;
-+      __u32 postPtr;
-+      __u32 dataPtr;
- } Neo2200;
- #define NR_PALETTE    256
-@@ -124,142 +124,65 @@ typedef volatile struct {
- #define NEO_EXT_GR_MAX 0xC7
- struct neofb_par {
--  
--  unsigned char MiscOutReg;     /* Misc */
--  unsigned char CRTC[25];       /* Crtc Controller */
--  unsigned char Sequencer[5];   /* Video Sequencer */
--  unsigned char Graphics[9];    /* Video Graphics */
--  unsigned char Attribute[21];  /* Video Atribute */
--
--  unsigned char GeneralLockReg;
--  unsigned char ExtCRTDispAddr;
--  unsigned char ExtCRTOffset;
--  unsigned char SysIfaceCntl1;
--  unsigned char SysIfaceCntl2;
--  unsigned char ExtColorModeSelect;
--  unsigned char biosMode;
--
--  unsigned char PanelDispCntlReg1;
--  unsigned char PanelDispCntlReg2;
--  unsigned char PanelDispCntlReg3;
--  unsigned char PanelVertCenterReg1;
--  unsigned char PanelVertCenterReg2;
--  unsigned char PanelVertCenterReg3;
--  unsigned char PanelVertCenterReg4;
--  unsigned char PanelVertCenterReg5;
--  unsigned char PanelHorizCenterReg1;
--  unsigned char PanelHorizCenterReg2;
--  unsigned char PanelHorizCenterReg3;
--  unsigned char PanelHorizCenterReg4;
--  unsigned char PanelHorizCenterReg5;
--
--  int           ProgramVCLK;
--  unsigned char VCLK3NumeratorLow;
--  unsigned char VCLK3NumeratorHigh;
--  unsigned char VCLK3Denominator;
--  unsigned char VerticalExt;
-+      struct vgastate state;
-+      unsigned char MiscOutReg;       /* Misc */
-+      unsigned char CRTC[25];         /* Crtc Controller */
-+      unsigned char Sequencer[5];     /* Video Sequencer */
-+      unsigned char Graphics[9];      /* Video Graphics */
-+      unsigned char Attribute[21];    /* Video Atribute */
-+
-+      unsigned char GeneralLockReg;
-+      unsigned char ExtCRTDispAddr;
-+      unsigned char ExtCRTOffset;
-+      unsigned char SysIfaceCntl1;
-+      unsigned char SysIfaceCntl2;
-+      unsigned char ExtColorModeSelect;
-+      unsigned char biosMode;
-+
-+      unsigned char PanelDispCntlReg1;
-+      unsigned char PanelDispCntlReg2;
-+      unsigned char PanelDispCntlReg3;
-+      unsigned char PanelVertCenterReg1;
-+      unsigned char PanelVertCenterReg2;
-+      unsigned char PanelVertCenterReg3;
-+      unsigned char PanelVertCenterReg4;
-+      unsigned char PanelVertCenterReg5;
-+      unsigned char PanelHorizCenterReg1;
-+      unsigned char PanelHorizCenterReg2;
-+      unsigned char PanelHorizCenterReg3;
-+      unsigned char PanelHorizCenterReg4;
-+      unsigned char PanelHorizCenterReg5;
-+
-+      int ProgramVCLK;
-+      unsigned char VCLK3NumeratorLow;
-+      unsigned char VCLK3NumeratorHigh;
-+      unsigned char VCLK3Denominator;
-+      unsigned char VerticalExt;
- #ifdef CONFIG_MTRR
--  int    mtrr;
-+      int mtrr;
- #endif
--  u8    *mmio_vbase;
-+      u8 *mmio_vbase;
--  Neo2200 *neo2200;
-+      Neo2200 *neo2200;
--  /* Panels size */
--  int NeoPanelWidth;
--  int NeoPanelHeight;
-+      /* Panels size */
-+      int NeoPanelWidth;
-+      int NeoPanelHeight;
--  int maxClock;
-+      int maxClock;
--  int pci_burst;
--  int lcd_stretch;
--  int internal_display;
--  int external_display;
--  int libretto;
-+      int pci_burst;
-+      int lcd_stretch;
-+      int internal_display;
-+      int external_display;
-+      int libretto;
- };
- typedef struct {
--    int x_res;
--    int y_res;
--    int mode;
-+      int x_res;
-+      int y_res;
-+      int mode;
- } biosMode;
--/* vga IO functions */
--static inline u8 VGArCR (u8 index)
--{
--  outb (index, 0x3d4);
--  return inb (0x3d5);
--}
--
--static inline void VGAwCR (u8 index, u8 val)
--{
--  outb (index, 0x3d4);
--  outb (val, 0x3d5);
--}
--
--static inline u8 VGArGR (u8 index)
--{
--  outb (index, 0x3ce);
--  return inb (0x3cf);
--}
--
--static inline void VGAwGR (u8 index, u8 val)
--{
--  outb (index, 0x3ce);
--  outb (val, 0x3cf);
--}
--
--static inline u8 VGArSEQ (u8 index)
--{
--  outb (index, 0x3c4);
--  return inb (0x3c5);
--}
--
--static inline void VGAwSEQ (u8 index, u8 val)
--{
--  outb (index, 0x3c4);
--  outb (val, 0x3c5);
--}
--
--
--static int paletteEnabled = 0;
--
--static inline void VGAenablePalette (void)
--{
--  u8 tmp;
--
--  tmp = inb (0x3da);
--  outb (0x00, 0x3c0);
--  paletteEnabled = 1;
--}
--
--static inline void VGAdisablePalette (void)
--{
--  u8 tmp;
--
--  tmp = inb (0x3da);
--  outb (0x20, 0x3c0);
--  paletteEnabled = 0;
--}
--
--static inline void VGAwATTR (u8 index, u8 value)
--{
--  u8 tmp;
--
--  if (paletteEnabled)
--    index &= ~0x20;
--  else
--    index |= 0x20;
--
--  tmp = inb (0x3da);
--  outb (index, 0x3c0);
--  outb (value, 0x3c0);
--}
--
--static inline void VGAwMISC (u8 value)
--{
--  outb (value, 0x3c2);
--}
- #endif
--
---- linux-2.6.0-test1/include/video/sisfb.h    2003-06-14 12:18:08.000000000 -0700
-+++ 25/include/video/sisfb.h   2003-07-19 17:04:55.000000000 -0700
-@@ -6,6 +6,53 @@
- #include <asm/ioctl.h>
- #include <asm/types.h>
-+/* TW: vbflags */
-+#define CRT2_DEFAULT            0x00000001
-+#define CRT2_LCD                0x00000002  /* TW: Never change the order of the CRT2_XXX entries */
-+#define CRT2_TV                 0x00000004  /*     (see SISCycleCRT2Type())                       */
-+#define CRT2_VGA                0x00000008
-+#define CRT2_ENABLE           (CRT2_LCD | CRT2_TV | CRT2_VGA)
-+#define VB_DISPTYPE_DISP2     CRT2_ENABLE
-+#define VB_DISPTYPE_CRT2      CRT2_ENABLE
-+#define TV_NTSC                 0x00000010
-+#define TV_PAL                  0x00000020
-+#define TV_HIVISION             0x00000040
-+#define TV_HIVISION_LV          0x00000080
-+#define TV_TYPE                 (TV_NTSC | TV_PAL | TV_HIVISION | TV_HIVISION_LV)
-+#define TV_AVIDEO               0x00000100
-+#define TV_SVIDEO               0x00000200
-+#define TV_SCART                0x00000400
-+#define TV_INTERFACE            (TV_AVIDEO | TV_SVIDEO | TV_SCART | TV_CHSCART | TV_CHHDTV)
-+#define VB_USELCDA            0x00000800
-+#define TV_PALM                 0x00001000
-+#define TV_PALN                 0x00002000
-+#define TV_CHSCART              0x00008000
-+#define TV_CHHDTV               0x00010000
-+#define VGA2_CONNECTED          0x00040000
-+#define VB_DISPTYPE_CRT1      0x00080000      /* CRT1 connected and used */
-+#define VBDISPTYPE_DISP1      VB_DISPTYPE_CRT1
-+#define VB_301                  0x00100000    /* Video bridge type */
-+#define VB_301B                 0x00200000
-+#define VB_302B                 0x00400000
-+#define VB_30xBDH             0x00800000      /* 30xB DH version (w/o LCD support) */
-+#define VB_LVDS                 0x01000000
-+#define VB_CHRONTEL             0x02000000
-+#define VB_301LV                0x04000000    
-+#define VB_302LV                0x08000000    
-+#define VB_TRUMPION           0x10000000     
-+#define VB_VIDEOBRIDGE                (VB_301|VB_301B|VB_302B|VB_301LV|VB_302LV| \
-+                               VB_LVDS|VB_CHRONTEL|VB_TRUMPION)
-+#define VB_SISBRIDGE            (VB_301|VB_301B|VB_302B|VB_301LV|VB_302LV)
-+#define VB_SINGLE_MODE          0x20000000     /* CRT1 or CRT2; determined by VB_DISPTYPE_CRTx */
-+#define VB_DISPMODE_SINGLE    VB_SINGLE_MODE   
-+#define VB_MIRROR_MODE                0x40000000       /* CRT1 + CRT2 identical (mirror mode) */
-+#define VB_DISPMODE_MIRROR    VB_MIRROR_MODE   
-+#define VB_DUALVIEW_MODE      0x80000000       /* CRT1 + CRT2 independent (dual head mode) */
-+#define VB_DISPMODE_DUAL      VB_DUALVIEW_MODE 
-+#define VB_DISPLAY_MODE         (VB_SINGLE_MODE | VB_MIRROR_MODE | VB_DUALVIEW_MODE) 
-+
-+
-+/* entries for disp_state - deprecated as of 1.6.02 */
- #define DISPTYPE_CRT1       0x00000008L
- #define DISPTYPE_CRT2       0x00000004L
- #define DISPTYPE_LCD        0x00000002L
-@@ -16,6 +63,7 @@
- #define DISPMODE_MIRROR           0x00000010L
- #define DISPMODE_DUALVIEW   0x00000040L
-+/* Deprecated as of 1.6.02 - use vbflags instead */
- #define HASVB_NONE            0x00
- #define HASVB_301             0x01
- #define HASVB_LVDS            0x02
-@@ -39,6 +87,7 @@ typedef enum _SIS_CHIP_TYPE {
-       SIS_650,
-       SIS_740,
-       SIS_330,
-+      SIS_660,
-       MAX_SIS_CHIP
- } SIS_CHIP_TYPE;
-@@ -83,13 +132,15 @@ struct ap_data {
-       struct mode_info minfo;
-       unsigned long iobase;
-       unsigned int  mem_size;
--      unsigned long disp_state;       
-+      unsigned long disp_state;  /* deprecated */     
-       SIS_CHIP_TYPE chip;
-       unsigned char hasVB;
--      SIS_TV_TYPE TV_type;
--      SIS_TV_PLUG TV_plug;
-+      SIS_TV_TYPE TV_type;       /* deprecated */
-+      SIS_TV_PLUG TV_plug;       /* deprecated */
-       unsigned long version;
--      char reserved[256];
-+      unsigned long vbflags;     /* replaces deprecated entries above */
-+      unsigned long currentvbflags;
-+      char reserved[248];
- };
- struct video_info {
-@@ -114,10 +165,10 @@ struct video_info {
-       int    video_linelength;
-       unsigned int refresh_rate;
--      unsigned long disp_state;
--      unsigned char hasVB;
--      unsigned char TV_type;
--      unsigned char TV_plug;
-+      unsigned long disp_state;               /* DEPRECATED */
-+      unsigned char hasVB;                    /* DEPRECATED */
-+      unsigned char TV_type;                  /* DEPRECATED */
-+      unsigned char TV_plug;                  /* DEPRECATED */
-       SIS_CHIP_TYPE chip;
-       unsigned char revision_id;
-@@ -136,8 +187,19 @@ struct video_info {
-       unsigned short subsysvendor;
-       unsigned short subsysdevice;
-+      
-+      unsigned long  vbflags;                 /* Replacing deprecated stuff from above */
-+      unsigned long  currentvbflags;
-+      
-+      int    current_bpp;
-+      int    current_width;
-+      int    current_height;
-+      int    current_htotal;
-+      int    current_vtotal;
-+      __u32  current_pixclock;
-+      int    current_refresh_rate;
--      char reserved[236];
-+      char reserved[200];
- };
-@@ -177,8 +239,11 @@ struct _SISFB_INFO {
-       unsigned char sisfb_lcdpdc;     /* PanelDelayCompensation */
-       
-       unsigned char sisfb_lcda;       /* Detected status of LCDA for low res/text modes */
-+      
-+      unsigned long sisfb_vbflags;
-+      unsigned long sisfb_currentvbflags;
--      char reserved[235];             /* for future use */
-+      char reserved[227];             /* for future use */
- };
- #ifdef __KERNEL__
---- linux-2.6.0-test1/init/do_mounts.h 2003-06-14 12:18:24.000000000 -0700
-+++ 25/init/do_mounts.h        2003-07-19 17:03:51.000000000 -0700
-@@ -6,7 +6,7 @@
- #include <linux/unistd.h>
- #include <linux/slab.h>
- #include <linux/mount.h>
--#include <linux/blk.h>
-+#include <linux/major.h>
- #include <linux/root_dev.h>
- asmlinkage long sys_unlink(const char *name);
---- linux-2.6.0-test1/init/do_mounts_initrd.c  2003-06-14 12:17:57.000000000 -0700
-+++ 25/init/do_mounts_initrd.c 2003-07-19 17:03:51.000000000 -0700
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/initrd.h>
-+#include <linux/sched.h>
- #include "do_mounts.h"
---- linux-2.6.0-test1/init/do_mounts_rd.c      2003-06-14 12:18:28.000000000 -0700
-+++ 25/init/do_mounts_rd.c     2003-07-19 17:03:51.000000000 -0700
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/initrd.h>
-+#include <linux/string.h>
- #include "do_mounts.h"
---- linux-2.6.0-test1/init/main.c      2003-06-26 22:07:26.000000000 -0700
-+++ 25/init/main.c     2003-07-19 17:03:51.000000000 -0700
-@@ -23,7 +23,6 @@
- #include <linux/ioport.h>
- #include <linux/init.h>
- #include <linux/smp_lock.h>
--#include <linux/blk.h>
- #include <linux/initrd.h>
- #include <linux/hdreg.h>
- #include <linux/bootmem.h>
---- linux-2.6.0-test1/kernel/compat.c  2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/compat.c 2003-07-19 17:03:51.000000000 -0700
-@@ -425,9 +425,11 @@ asmlinkage int compat_sys_sched_getaffin
-                                   &kernel_mask);
-       set_fs(old_fs);
--      if (ret > 0)
-+      if (ret > 0) {
-+              ret = sizeof(compat_ulong_t);
-               if (put_user(kernel_mask, user_mask_ptr))
-                       return -EFAULT;
-+      }
-       return ret;
- }
---- linux-2.6.0-test1/kernel/extable.c 2003-06-14 12:18:06.000000000 -0700
-+++ 25/kernel/extable.c        2003-07-19 17:03:51.000000000 -0700
-@@ -17,10 +17,10 @@
- */
- #include <linux/module.h>
- #include <asm/uaccess.h>
-+#include <asm/sections.h>
- extern const struct exception_table_entry __start___ex_table[];
- extern const struct exception_table_entry __stop___ex_table[];
--extern char _stext[], _etext[], _sinittext[], _einittext[];
- /* Given an address, look for it in the exception tables. */
- const struct exception_table_entry *search_exception_tables(unsigned long addr)
---- linux-2.6.0-test1/kernel/fork.c    2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/fork.c   2003-07-19 17:06:43.000000000 -0700
-@@ -53,13 +53,6 @@ DEFINE_PER_CPU(unsigned long, process_co
- rwlock_t tasklist_lock __cacheline_aligned = RW_LOCK_UNLOCKED;  /* outer */
--/*
-- * A per-CPU task cache - this relies on the fact that
-- * the very last portion of sys_exit() is executed with
-- * preemption turned off.
-- */
--static task_t *task_cache[NR_CPUS] __cacheline_aligned;
--
- int nr_processes(void)
- {
-       int cpu;
-@@ -80,26 +73,8 @@ static kmem_cache_t *task_struct_cachep;
- static void free_task(struct task_struct *tsk)
- {
--      /*
--       * The task cache is effectively disabled right now.
--       * Do we want it? The slab cache already has per-cpu
--       * stuff, but the thread info (usually a order-1 page
--       * allocation) doesn't.
--       */
--      if (tsk != current) {
--              free_thread_info(tsk->thread_info);
--              free_task_struct(tsk);
--      } else {
--              int cpu = get_cpu();
--
--              tsk = task_cache[cpu];
--              if (tsk) {
--                      free_thread_info(tsk->thread_info);
--                      free_task_struct(tsk);
--              }
--              task_cache[cpu] = current;
--              put_cpu();
--      }
-+      free_thread_info(tsk->thread_info);
-+      free_task_struct(tsk);
- }
- void __put_task_struct(struct task_struct *tsk)
-@@ -146,7 +121,12 @@ void prepare_to_wait(wait_queue_head_t *
- {
-       unsigned long flags;
--      __set_current_state(state);
-+      /*
-+       * don't alter the task state if this is just going to
-+       * queue an async wait queue callback
-+       */
-+      if (is_sync_wait(wait))
-+              __set_current_state(state);
-       wait->flags &= ~WQ_FLAG_EXCLUSIVE;
-       spin_lock_irqsave(&q->lock, flags);
-       if (list_empty(&wait->task_list))
-@@ -159,7 +139,12 @@ prepare_to_wait_exclusive(wait_queue_hea
- {
-       unsigned long flags;
--      __set_current_state(state);
-+      /*
-+       * don't alter the task state if this is just going to
-+       * queue an async wait queue callback
-+       */
-+      if (is_sync_wait(wait))
-+              __set_current_state(state);
-       wait->flags |= WQ_FLAG_EXCLUSIVE;
-       spin_lock_irqsave(&q->lock, flags);
-       if (list_empty(&wait->task_list))
-@@ -220,25 +205,18 @@ static struct task_struct *dup_task_stru
- {
-       struct task_struct *tsk;
-       struct thread_info *ti;
--      int cpu = get_cpu();
-       prepare_to_copy(orig);
--      tsk = task_cache[cpu];
--      task_cache[cpu] = NULL;
--      put_cpu();
--      if (!tsk) {
--              tsk = alloc_task_struct();
--              if (!tsk)
--                      return NULL;
--
--              ti = alloc_thread_info(tsk);
--              if (!ti) {
--                      free_task_struct(tsk);
--                      return NULL;
--              }
--      } else
--              ti = tsk->thread_info;
-+      tsk = alloc_task_struct();
-+      if (!tsk)
-+              return NULL;
-+
-+      ti = alloc_thread_info(tsk);
-+      if (!ti) {
-+              free_task_struct(tsk);
-+              return NULL;
-+      }
-       *ti = *orig->thread_info;
-       *tsk = *orig;
-@@ -265,7 +243,7 @@ static inline int dup_mmap(struct mm_str
-       mm->free_area_cache = TASK_UNMAPPED_BASE;
-       mm->map_count = 0;
-       mm->rss = 0;
--      mm->cpu_vm_mask = 0;
-+      cpus_clear(mm->cpu_vm_mask);
-       pprev = &mm->mmap;
-       /*
-@@ -430,6 +408,23 @@ void mmput(struct mm_struct *mm)
-       }
- }
-+/*
-+ * Checks if the use count of an mm is non-zero and if so
-+ * returns a reference to it after bumping up the use count.
-+ * If the use count is zero, it means this mm is going away,
-+ * so return NULL.
-+ */
-+struct mm_struct *mmgrab(struct mm_struct *mm)
-+{
-+      spin_lock(&mmlist_lock);
-+      if (!atomic_read(&mm->mm_users))
-+              mm = NULL;
-+      else
-+              atomic_inc(&mm->mm_users);
-+      spin_unlock(&mmlist_lock);
-+      return mm;
-+}
-+
- /* Please note the differences between mmput and mm_release.
-  * mmput is called whenever we stop holding onto a mm_struct,
-  * error success whatever.
-@@ -791,8 +786,10 @@ struct task_struct *copy_process(unsigne
-               goto fork_out;
-       retval = -EAGAIN;
--      if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur) {
--              if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE))
-+      if (atomic_read(&p->user->processes) >=
-+                      p->rlim[RLIMIT_NPROC].rlim_cur) {
-+              if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE) &&
-+                              p->user != &root_user)
-                       goto bad_fork_free;
-       }
-@@ -866,6 +863,7 @@ struct task_struct *copy_process(unsigne
-       p->start_time = get_jiffies_64();
-       p->security = NULL;
-       p->io_context = NULL;
-+      p->io_wait = NULL;
-       retval = -ENOMEM;
-       if ((retval = security_task_alloc(p)))
-@@ -1106,7 +1104,7 @@ long do_fork(unsigned long clone_flags,
-                       init_completion(&vfork);
-               }
--              if (p->ptrace & PT_PTRACED) {
-+              if ((p->ptrace & PT_PTRACED) || (clone_flags & CLONE_STOPPED)) {
-                       /*
-                        * We'll start up with an immediate SIGSTOP.
-                        */
-@@ -1114,7 +1112,9 @@ long do_fork(unsigned long clone_flags,
-                       set_tsk_thread_flag(p, TIF_SIGPENDING);
-               }
--              wake_up_forked_process(p);              /* do this last */
-+              p->state = TASK_STOPPED;
-+              if (!(clone_flags & CLONE_STOPPED))
-+                      wake_up_forked_process(p);      /* do this last */
-               ++total_forks;
-               if (unlikely (trace)) {
---- linux-2.6.0-test1/kernel/ksyms.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/ksyms.c  2003-07-19 17:06:51.000000000 -0700
-@@ -120,12 +120,14 @@ EXPORT_SYMBOL(mem_map);
- EXPORT_SYMBOL(max_mapnr);
- #endif
- EXPORT_SYMBOL(high_memory);
-+EXPORT_SYMBOL_GPL(invalidate_mmap_range);
- EXPORT_SYMBOL(vmtruncate);
- EXPORT_SYMBOL(find_vma);
- EXPORT_SYMBOL(get_unmapped_area);
- EXPORT_SYMBOL(init_mm);
- EXPORT_SYMBOL(blk_queue_bounce);
- EXPORT_SYMBOL(blk_congestion_wait);
-+EXPORT_SYMBOL(blk_congestion_wait_wq);
- #ifdef CONFIG_HIGHMEM
- EXPORT_SYMBOL(kmap_high);
- EXPORT_SYMBOL(kunmap_high);
-@@ -219,6 +221,7 @@ EXPORT_SYMBOL(sync_dirty_buffer);
- EXPORT_SYMBOL(submit_bh);
- EXPORT_SYMBOL(unlock_buffer);
- EXPORT_SYMBOL(__wait_on_buffer);
-+EXPORT_SYMBOL(__wait_on_buffer_wq);
- EXPORT_SYMBOL(blockdev_direct_IO);
- EXPORT_SYMBOL(block_write_full_page);
- EXPORT_SYMBOL(block_read_full_page);
-@@ -605,6 +608,19 @@ EXPORT_SYMBOL(next_thread);
- EXPORT_SYMBOL(__per_cpu_offset);
- #endif
-+EXPORT_SYMBOL(set_fs_pwd);
-+EXPORT_SYMBOL(set_fs_root);
-+
-+#if defined(CONFIG_LOCKMETER)
-+EXPORT_SYMBOL(_metered_spin_lock);
-+EXPORT_SYMBOL(_metered_spin_unlock);
-+EXPORT_SYMBOL(_metered_spin_trylock);
-+EXPORT_SYMBOL(_metered_read_lock);
-+EXPORT_SYMBOL(_metered_read_unlock);
-+EXPORT_SYMBOL(_metered_write_lock);
-+EXPORT_SYMBOL(_metered_write_unlock);
-+#endif
-+
- /* debug */
- EXPORT_SYMBOL(dump_stack);
- EXPORT_SYMBOL(ptrace_notify);
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/kernel/lockmeter.c      2003-07-19 17:06:40.000000000 -0700
-@@ -0,0 +1,1169 @@
-+/*
-+ *  Copyright (C) 1999,2000 Silicon Graphics, Inc.
-+ *
-+ *  Written by John Hawkes (hawkes@sgi.com)
-+ *  Based on klstat.c by Jack Steiner (steiner@sgi.com)
-+ *
-+ *  Modified by Ray Bryant (raybry@us.ibm.com)
-+ *  Changes Copyright (C) 2000 IBM, Inc.
-+ *  Added save of index in spinlock_t to improve efficiency
-+ *  of "hold" time reporting for spinlocks
-+ *  Added support for hold time statistics for read and write
-+ *  locks.
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+#include <linux/smp.h>
-+#include <linux/threads.h>
-+#include <linux/version.h>
-+#include <linux/vmalloc.h>
-+#include <linux/spinlock.h>
-+#include <linux/utsname.h>
-+#include <asm/system.h>
-+#include <asm/uaccess.h>
-+
-+#include <linux/lockmeter.h>
-+
-+#define ASSERT(cond)
-+#define bzero(loc,size)               memset(loc,0,size)
-+
-+/*<---------------------------------------------------*/
-+/*              lockmeter.c                           */
-+/*>---------------------------------------------------*/
-+
-+static lstat_control_t lstat_control __cacheline_aligned =
-+      { LSTAT_OFF, SPIN_LOCK_UNLOCKED, SPIN_LOCK_UNLOCKED,
-+        19 * 0, NR_CPUS * 0, 0, NR_CPUS * 0 };
-+
-+static ushort lstat_make_dir_entry(void *, void *);
-+
-+/*
-+ * lstat_lookup
-+ *
-+ * Given a RA, locate the directory entry for the lock.
-+ */
-+static ushort
-+lstat_lookup(void *lock_ptr, void *caller_ra)
-+{
-+      ushort index;
-+      lstat_directory_entry_t *dirp;
-+
-+      dirp = lstat_control.dir;
-+
-+      index = lstat_control.hashtab[DIRHASH(caller_ra)];
-+      while (dirp[index].caller_ra != caller_ra) {
-+              if (index == 0) {
-+                      return lstat_make_dir_entry(lock_ptr, caller_ra);
-+              }
-+              index = dirp[index].next_stat_index;
-+      }
-+
-+      if (dirp[index].lock_ptr != NULL && dirp[index].lock_ptr != lock_ptr) {
-+              dirp[index].lock_ptr = NULL;
-+      }
-+
-+      return index;
-+}
-+
-+/*
-+ * lstat_make_dir_entry
-+ * Called to add a new lock to the lock directory.
-+ */
-+static ushort
-+lstat_make_dir_entry(void *lock_ptr, void *caller_ra)
-+{
-+      lstat_directory_entry_t *dirp;
-+      ushort index, hindex;
-+      unsigned long flags;
-+
-+      /* lock the table without recursively reentering this metering code */
-+      local_irq_save(flags);
-+      _raw_spin_lock(&lstat_control.directory_lock);
-+
-+      hindex = DIRHASH(caller_ra);
-+      index = lstat_control.hashtab[hindex];
-+      dirp = lstat_control.dir;
-+      while (index && dirp[index].caller_ra != caller_ra)
-+              index = dirp[index].next_stat_index;
-+
-+      if (index == 0) {
-+              if (lstat_control.next_free_dir_index < LSTAT_MAX_STAT_INDEX) {
-+                      index = lstat_control.next_free_dir_index++;
-+                      lstat_control.dir[index].caller_ra = caller_ra;
-+                      lstat_control.dir[index].lock_ptr = lock_ptr;
-+                      lstat_control.dir[index].next_stat_index =
-+                              lstat_control.hashtab[hindex];
-+                      lstat_control.hashtab[hindex] = index;
-+              } else {
-+                      lstat_control.dir_overflow++;
-+              }
-+      }
-+      _raw_spin_unlock(&lstat_control.directory_lock);
-+      local_irq_restore(flags);
-+      return index;
-+}
-+
-+int
-+lstat_update(void *lock_ptr, void *caller_ra, int action)
-+{
-+      int index;
-+      int cpu;
-+
-+      ASSERT(action < LSTAT_ACT_MAX_VALUES);
-+
-+      if (lstat_control.state == LSTAT_OFF)
-+              return 0;
-+
-+      index = lstat_lookup(lock_ptr, caller_ra);
-+      cpu = THIS_CPU_NUMBER;
-+      (*lstat_control.counts[cpu])[index].count[action]++;
-+      (*lstat_control.counts[cpu])[index].acquire_time = get_cycles();
-+
-+      return index;
-+}
-+
-+int
-+lstat_update_time(void *lock_ptr, void *caller_ra, int action, uint32_t ticks)
-+{
-+      ushort index;
-+      int cpu;
-+
-+      ASSERT(action < LSTAT_ACT_MAX_VALUES);
-+
-+      if (lstat_control.state == LSTAT_OFF)
-+              return 0;
-+
-+      index = lstat_lookup(lock_ptr, caller_ra);
-+      cpu = THIS_CPU_NUMBER;
-+      (*lstat_control.counts[cpu])[index].count[action]++;
-+      (*lstat_control.counts[cpu])[index].cum_wait_ticks += (uint64_t) ticks;
-+      if ((*lstat_control.counts[cpu])[index].max_wait_ticks < ticks)
-+              (*lstat_control.counts[cpu])[index].max_wait_ticks = ticks;
-+
-+      (*lstat_control.counts[cpu])[index].acquire_time = get_cycles();
-+
-+      return index;
-+}
-+
-+void
-+_metered_spin_lock(spinlock_t * lock_ptr)
-+{
-+      if (lstat_control.state == LSTAT_OFF) {
-+              _raw_spin_lock(lock_ptr);       /* do the real lock */
-+              PUT_INDEX(lock_ptr, 0); /* clean index in case lockmetering  */
-+              /* gets turned on before unlock */
-+      } else {
-+              void *this_pc = LSTAT_RA(LSTAT_RA_SPIN);
-+              int index;
-+
-+              if (_raw_spin_trylock(lock_ptr)) {
-+                      index = lstat_update(lock_ptr, this_pc,
-+                                              LSTAT_ACT_NO_WAIT);
-+              } else {
-+                      uint32_t start_cycles = get_cycles();
-+                      _raw_spin_lock(lock_ptr);       /* do the real lock */
-+                      index = lstat_update_time(lock_ptr, this_pc,
-+                              LSTAT_ACT_SPIN, get_cycles() - start_cycles);
-+              }
-+              /* save the index in the lock itself for use in spin unlock */
-+              PUT_INDEX(lock_ptr, index);
-+      }
-+}
-+
-+int
-+_metered_spin_trylock(spinlock_t * lock_ptr)
-+{
-+      if (lstat_control.state == LSTAT_OFF) {
-+              return _raw_spin_trylock(lock_ptr);
-+      } else {
-+              int retval;
-+              void *this_pc = LSTAT_RA(LSTAT_RA_SPIN);
-+
-+              if ((retval = _raw_spin_trylock(lock_ptr))) {
-+                      int index = lstat_update(lock_ptr, this_pc,
-+                                              LSTAT_ACT_NO_WAIT);
-+                      /*
-+                       * save the index in the lock itself for use in spin
-+                       * unlock
-+                       */
-+                      PUT_INDEX(lock_ptr, index);
-+              } else {
-+                      lstat_update(lock_ptr, this_pc, LSTAT_ACT_REJECT);
-+              }
-+
-+              return retval;
-+      }
-+}
-+
-+void
-+_metered_spin_unlock(spinlock_t * lock_ptr)
-+{
-+      int index = -1;
-+
-+      if (lstat_control.state != LSTAT_OFF) {
-+              index = GET_INDEX(lock_ptr);
-+              /*
-+               * If statistics were turned off when we set the lock,
-+               * then the index can be zero.  If that is the case,
-+               * then collect no stats on this call.
-+               */
-+              if (index > 0) {
-+                      uint32_t hold_time;
-+                      int cpu = THIS_CPU_NUMBER;
-+                      hold_time = get_cycles() -
-+                       (*lstat_control.counts[cpu])[index].acquire_time;
-+                      (*lstat_control.counts[cpu])[index].cum_hold_ticks +=
-+                              (uint64_t) hold_time;
-+                      if ((*lstat_control.counts[cpu])[index].max_hold_ticks <
-+                          hold_time)
-+                              (*lstat_control.counts[cpu])[index].
-+                                  max_hold_ticks = hold_time;
-+              }
-+      }
-+
-+      /* make sure we don't have a stale index value saved */
-+      PUT_INDEX(lock_ptr, 0);
-+      _raw_spin_unlock(lock_ptr);     /* do the real unlock */
-+}
-+
-+/*
-+ * allocate the next global read lock structure and store its index
-+ * in the rwlock at "lock_ptr".
-+ */
-+uint32_t
-+alloc_rwlock_struct(rwlock_t * rwlock_ptr)
-+{
-+      int index;
-+      unsigned long flags;
-+      int cpu = THIS_CPU_NUMBER;
-+
-+      /* If we've already overflowed, then do a quick exit */
-+      if (lstat_control.next_free_read_lock_index >
-+                      LSTAT_MAX_READ_LOCK_INDEX) {
-+              lstat_control.rwlock_overflow++;
-+              return 0;
-+      }
-+
-+      local_irq_save(flags);
-+      _raw_spin_lock(&lstat_control.directory_lock);
-+
-+      /* It is possible this changed while we were waiting for the directory_lock */
-+      if (lstat_control.state == LSTAT_OFF) {
-+              index = 0;
-+              goto unlock;
-+      }
-+
-+      /* It is possible someone else got here first and set the index */
-+      if ((index = GET_RWINDEX(rwlock_ptr)) == 0) {
-+              /*
-+               * we can't turn on read stats for this lock while there are
-+               * readers (this would mess up the running hold time sum at
-+               * unlock time)
-+               */
-+              if (RWLOCK_READERS(rwlock_ptr) != 0) {
-+                      index = 0;
-+                      goto unlock;
-+              }
-+
-+              /*
-+               * if stats are turned on after being off, we may need to
-+               * return an old index from when the statistics were on last
-+               * time.
-+               */
-+              for (index = 1; index < lstat_control.next_free_read_lock_index;
-+                              index++)
-+                      if ((*lstat_control.read_lock_counts[cpu])[index].
-+                                      lock_ptr == rwlock_ptr)
-+                              goto put_index_and_unlock;
-+
-+              /* allocate the next global read lock structure */
-+              if (lstat_control.next_free_read_lock_index >=
-+                  LSTAT_MAX_READ_LOCK_INDEX) {
-+                      lstat_control.rwlock_overflow++;
-+                      index = 0;
-+                      goto unlock;
-+              }
-+              index = lstat_control.next_free_read_lock_index++;
-+
-+              /*
-+               * initialize the global read stats data structure for each
-+               * cpu
-+               */
-+              for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+                      (*lstat_control.read_lock_counts[cpu])[index].lock_ptr =
-+                              rwlock_ptr;
-+              }
-+put_index_and_unlock:
-+              /* store the index for the read lock structure into the lock */
-+              PUT_RWINDEX(rwlock_ptr, index);
-+      }
-+
-+unlock:
-+      _raw_spin_unlock(&lstat_control.directory_lock);
-+      local_irq_restore(flags);
-+      return index;
-+}
-+
-+void
-+_metered_read_lock(rwlock_t * rwlock_ptr)
-+{
-+      void *this_pc;
-+      uint32_t start_cycles;
-+      int index;
-+      int cpu;
-+      unsigned long flags;
-+      int readers_before, readers_after;
-+      uint64_t cycles64;
-+
-+      if (lstat_control.state == LSTAT_OFF) {
-+              _raw_read_lock(rwlock_ptr);
-+              /* clean index in case lockmetering turns on before an unlock */
-+              PUT_RWINDEX(rwlock_ptr, 0);
-+              return;
-+      }
-+
-+      this_pc = LSTAT_RA(LSTAT_RA_READ);
-+      cpu = THIS_CPU_NUMBER;
-+      index = GET_RWINDEX(rwlock_ptr);
-+
-+      /* allocate the global stats entry for this lock, if needed */
-+      if (index == 0)
-+              index = alloc_rwlock_struct(rwlock_ptr);
-+
-+      readers_before = RWLOCK_READERS(rwlock_ptr);
-+      if (_raw_read_trylock(rwlock_ptr)) {
-+              /*
-+               * We have decremented the lock to count a new reader,
-+               * and have confirmed that no writer has it locked.
-+               */
-+              /* update statistics if enabled */
-+              if (index > 0) {
-+                      local_irq_save(flags);
-+                      lstat_update((void *) rwlock_ptr, this_pc,
-+                                      LSTAT_ACT_NO_WAIT);
-+                      /* preserve value of TSC so cum_hold_ticks and start_busy use same value */
-+                      cycles64 = get_cycles64();
-+                      (*lstat_control.read_lock_counts[cpu])[index].
-+                              cum_hold_ticks -= cycles64;
-+
-+                      /* record time and cpu of start of busy period */
-+                      /* this is not perfect (some race conditions are possible) */
-+                      if (readers_before == 0) {
-+                              (*lstat_control.read_lock_counts[cpu])[index].
-+                                      start_busy = cycles64;
-+                              PUT_RW_CPU(rwlock_ptr, cpu);
-+                      }
-+                      readers_after = RWLOCK_READERS(rwlock_ptr);
-+                      if (readers_after >
-+                              (*lstat_control.read_lock_counts[cpu])[index].
-+                                      max_readers)
-+                              (*lstat_control.read_lock_counts[cpu])[index].
-+                                      max_readers = readers_after;
-+                      local_irq_restore(flags);
-+              }
-+
-+              return;
-+      }
-+      /* If we get here, then we could not quickly grab the read lock */
-+
-+      start_cycles = get_cycles();    /* start counting the wait time */
-+
-+      /* Now spin until read_lock is successful */
-+      _raw_read_lock(rwlock_ptr);
-+
-+      lstat_update_time((void *) rwlock_ptr, this_pc, LSTAT_ACT_SPIN,
-+                        get_cycles() - start_cycles);
-+
-+      /* update statistics if they are enabled for this lock */
-+      if (index > 0) {
-+              local_irq_save(flags);
-+              cycles64 = get_cycles64();
-+              (*lstat_control.read_lock_counts[cpu])[index].cum_hold_ticks -=
-+                              cycles64;
-+
-+              /* this is not perfect (some race conditions are possible) */
-+              if (readers_before == 0) {
-+                      (*lstat_control.read_lock_counts[cpu])[index].
-+                              start_busy = cycles64;
-+                      PUT_RW_CPU(rwlock_ptr, cpu);
-+              }
-+              readers_after = RWLOCK_READERS(rwlock_ptr);
-+              if (readers_after >
-+                  (*lstat_control.read_lock_counts[cpu])[index].max_readers)
-+                      (*lstat_control.read_lock_counts[cpu])[index].
-+                              max_readers = readers_after;
-+              local_irq_restore(flags);
-+      }
-+}
-+
-+void
-+_metered_read_unlock(rwlock_t * rwlock_ptr)
-+{
-+      int index;
-+      int cpu;
-+      unsigned long flags;
-+      uint64_t busy_length;
-+      uint64_t cycles64;
-+
-+      if (lstat_control.state == LSTAT_OFF) {
-+              _raw_read_unlock(rwlock_ptr);
-+              return;
-+      }
-+
-+      index = GET_RWINDEX(rwlock_ptr);
-+      cpu = THIS_CPU_NUMBER;
-+
-+      if (index > 0) {
-+              local_irq_save(flags);
-+              /*
-+               * preserve value of TSC so cum_hold_ticks and busy_ticks are
-+               * consistent.
-+               */
-+              cycles64 = get_cycles64();
-+              (*lstat_control.read_lock_counts[cpu])[index].cum_hold_ticks +=
-+                      cycles64;
-+              (*lstat_control.read_lock_counts[cpu])[index].read_lock_count++;
-+
-+              /*
-+               * once again, this is not perfect (some race conditions are
-+               * possible)
-+               */
-+              if (RWLOCK_READERS(rwlock_ptr) == 1) {
-+                      int cpu1 = GET_RW_CPU(rwlock_ptr);
-+                      uint64_t last_start_busy =
-+                              (*lstat_control.read_lock_counts[cpu1])[index].
-+                                      start_busy;
-+                      (*lstat_control.read_lock_counts[cpu])[index].
-+                              busy_periods++;
-+                      if (cycles64 > last_start_busy) {
-+                              busy_length = cycles64 - last_start_busy;
-+                              (*lstat_control.read_lock_counts[cpu])[index].
-+                                      busy_ticks += busy_length;
-+                              if (busy_length >
-+                                      (*lstat_control.
-+                                              read_lock_counts[cpu])[index].
-+                                                      max_busy)
-+                                      (*lstat_control.
-+                                       read_lock_counts[cpu])[index].
-+                                              max_busy = busy_length;
-+                      }
-+              }
-+              local_irq_restore(flags);
-+      }
-+      _raw_read_unlock(rwlock_ptr);
-+}
-+
-+void
-+_metered_write_lock(rwlock_t * rwlock_ptr)
-+{
-+      uint32_t start_cycles;
-+      void *this_pc;
-+      uint32_t spin_ticks = 0; /* in anticipation of a potential wait */
-+      int index;
-+      int write_index = 0;
-+      int cpu;
-+      enum {
-+              writer_writer_conflict,
-+              writer_reader_conflict
-+      } why_wait = writer_writer_conflict;
-+
-+      if (lstat_control.state == LSTAT_OFF) {
-+              _raw_write_lock(rwlock_ptr);
-+              /* clean index in case lockmetering turns on before an unlock */
-+              PUT_RWINDEX(rwlock_ptr, 0);
-+              return;
-+      }
-+
-+      this_pc = LSTAT_RA(LSTAT_RA_WRITE);
-+      cpu = THIS_CPU_NUMBER;
-+      index = GET_RWINDEX(rwlock_ptr);
-+
-+      /* allocate the global stats entry for this lock, if needed */
-+      if (index == 0) {
-+              index = alloc_rwlock_struct(rwlock_ptr);
-+      }
-+
-+      if (_raw_write_trylock(rwlock_ptr)) {
-+              /* We acquired the lock on the first try */
-+              write_index = lstat_update((void *) rwlock_ptr, this_pc,
-+                                      LSTAT_ACT_NO_WAIT);
-+              /* save the write_index for use in unlock if stats enabled */
-+              if (index > 0)
-+                      (*lstat_control.read_lock_counts[cpu])[index].
-+                              write_index = write_index;
-+              return;
-+      }
-+
-+      /* If we get here, then we could not quickly grab the write lock */
-+      start_cycles = get_cycles();    /* start counting the wait time */
-+
-+      why_wait = RWLOCK_READERS(rwlock_ptr) ?
-+                      writer_reader_conflict : writer_writer_conflict;
-+
-+      /* Now set the lock and wait for conflicts to disappear */
-+      _raw_write_lock(rwlock_ptr);
-+
-+      spin_ticks = get_cycles() - start_cycles;
-+
-+      /* update stats -- if enabled */
-+      if (index > 0 && spin_ticks) {
-+              if (why_wait == writer_reader_conflict) {
-+                      /* waited due to a reader holding the lock */
-+                      write_index = lstat_update_time((void *)rwlock_ptr,
-+                                      this_pc, LSTAT_ACT_SPIN, spin_ticks);
-+              } else {
-+                      /*
-+                       * waited due to another writer holding the lock
-+                       */
-+                      write_index = lstat_update_time((void *)rwlock_ptr,
-+                              this_pc, LSTAT_ACT_WW_SPIN, spin_ticks);
-+                      (*lstat_control.counts[cpu])[write_index].
-+                              cum_wait_ww_ticks += spin_ticks;
-+                      if (spin_ticks >
-+                              (*lstat_control.counts[cpu])[write_index].
-+                                      max_wait_ww_ticks) {
-+                              (*lstat_control.counts[cpu])[write_index].
-+                                      max_wait_ww_ticks = spin_ticks;
-+                      }
-+              }
-+
-+              /* save the directory index for use on write_unlock */
-+              (*lstat_control.read_lock_counts[cpu])[index].
-+                      write_index = write_index;
-+      }
-+}
-+
-+void
-+_metered_write_unlock(rwlock_t * rwlock_ptr)
-+{
-+      int index;
-+      int cpu;
-+      int write_index;
-+      uint32_t hold_time;
-+
-+      if (lstat_control.state == LSTAT_OFF) {
-+              _raw_write_unlock(rwlock_ptr);
-+              return;
-+      }
-+
-+      cpu = THIS_CPU_NUMBER;
-+      index = GET_RWINDEX(rwlock_ptr);
-+
-+      /* update statistics if stats enabled for this lock */
-+      if (index > 0) {
-+              write_index =
-+                  (*lstat_control.read_lock_counts[cpu])[index].write_index;
-+
-+              hold_time = get_cycles() -
-+                      (*lstat_control.counts[cpu])[write_index].acquire_time;
-+              (*lstat_control.counts[cpu])[write_index].cum_hold_ticks +=
-+                      (uint64_t) hold_time;
-+              if ((*lstat_control.counts[cpu])[write_index].max_hold_ticks <
-+                              hold_time)
-+                      (*lstat_control.counts[cpu])[write_index].
-+                              max_hold_ticks = hold_time;
-+      }
-+      _raw_write_unlock(rwlock_ptr);
-+}
-+
-+int
-+_metered_write_trylock(rwlock_t * rwlock_ptr)
-+{
-+      int retval;
-+      void *this_pc = LSTAT_RA(LSTAT_RA_WRITE);
-+
-+      if ((retval = _raw_write_trylock(rwlock_ptr))) {
-+              lstat_update(rwlock_ptr, this_pc, LSTAT_ACT_NO_WAIT);
-+      } else {
-+              lstat_update(rwlock_ptr, this_pc, LSTAT_ACT_REJECT);
-+      }
-+
-+      return retval;
-+}
-+
-+static void
-+init_control_space(void)
-+{
-+      /* Set all control space pointers to null and indices to "empty" */
-+      int cpu;
-+
-+      /*
-+       * Access CPU_CYCLE_FREQUENCY at the outset, which in some
-+       * architectures may trigger a runtime calculation that uses a
-+       * spinlock.  Let's do this before lockmetering is turned on.
-+       */
-+      if (CPU_CYCLE_FREQUENCY == 0)
-+              BUG();
-+
-+      lstat_control.hashtab = NULL;
-+      lstat_control.dir = NULL;
-+      for (cpu = 0; cpu < NR_CPUS; cpu++) {
-+              lstat_control.counts[cpu] = NULL;
-+              lstat_control.read_lock_counts[cpu] = NULL;
-+      }
-+}
-+
-+static int
-+reset_lstat_data(void)
-+{
-+      int cpu, flags;
-+
-+      flags = 0;
-+      lstat_control.next_free_dir_index = 1;  /* 0 is for overflows */
-+      lstat_control.next_free_read_lock_index = 1;
-+      lstat_control.dir_overflow = 0;
-+      lstat_control.rwlock_overflow = 0;
-+
-+      lstat_control.started_cycles64 = 0;
-+      lstat_control.ending_cycles64 = 0;
-+      lstat_control.enabled_cycles64 = 0;
-+      lstat_control.first_started_time = 0;
-+      lstat_control.started_time = 0;
-+      lstat_control.ending_time = 0;
-+      lstat_control.intervals = 0;
-+
-+      /*
-+       * paranoia -- in case someone does a "lockstat reset" before
-+       * "lockstat on"
-+       */
-+      if (lstat_control.hashtab) {
-+              bzero(lstat_control.hashtab,
-+                      LSTAT_HASH_TABLE_SIZE * sizeof (short));
-+              bzero(lstat_control.dir, LSTAT_MAX_STAT_INDEX *
-+                              sizeof (lstat_directory_entry_t));
-+
-+              for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+                      bzero(lstat_control.counts[cpu],
-+                              sizeof (lstat_cpu_counts_t));
-+                      bzero(lstat_control.read_lock_counts[cpu],
-+                              sizeof (lstat_read_lock_cpu_counts_t));
-+              }
-+      }
-+#ifdef NOTDEF
-+      _raw_spin_unlock(&lstat_control.directory_lock);
-+      local_irq_restore(flags);
-+#endif
-+      return 1;
-+}
-+
-+static void
-+release_control_space(void)
-+{
-+      /*
-+       * Called when either (1) allocation of kmem
-+       * or (2) when user writes LSTAT_RELEASE to /pro/lockmeter.
-+       * Assume that all pointers have been initialized to zero,
-+       * i.e., nonzero pointers are valid addresses.
-+       */
-+      int cpu;
-+
-+      if (lstat_control.hashtab) {
-+              kfree(lstat_control.hashtab);
-+              lstat_control.hashtab = NULL;
-+      }
-+
-+      if (lstat_control.dir) {
-+              vfree(lstat_control.dir);
-+              lstat_control.dir = NULL;
-+      }
-+
-+      for (cpu = 0; cpu < NR_CPUS; cpu++) {
-+              if (lstat_control.counts[cpu]) {
-+                      vfree(lstat_control.counts[cpu]);
-+                      lstat_control.counts[cpu] = NULL;
-+              }
-+              if (lstat_control.read_lock_counts[cpu]) {
-+                      kfree(lstat_control.read_lock_counts[cpu]);
-+                      lstat_control.read_lock_counts[cpu] = NULL;
-+              }
-+      }
-+}
-+
-+int
-+get_lockmeter_info_size(void)
-+{
-+      return sizeof (lstat_user_request_t)
-+              + num_online_cpus() * sizeof (lstat_cpu_counts_t)
-+              + num_online_cpus() * sizeof (lstat_read_lock_cpu_counts_t)
-+              + (LSTAT_MAX_STAT_INDEX * sizeof (lstat_directory_entry_t));
-+}
-+
-+ssize_t
-+get_lockmeter_info(char *buffer, size_t max_len, loff_t * last_index)
-+{
-+      lstat_user_request_t req;
-+      struct timeval tv;
-+      ssize_t next_ret_bcount;
-+      ssize_t actual_ret_bcount = 0;
-+      int cpu;
-+
-+      *last_index = 0;        /* a one-shot read */
-+
-+      req.lstat_version = LSTAT_VERSION;
-+      req.state = lstat_control.state;
-+      req.maxcpus = num_online_cpus();
-+      req.cycleval = CPU_CYCLE_FREQUENCY;
-+#ifdef notyet
-+      req.kernel_magic_addr = (void *) &_etext;
-+      req.kernel_end_addr = (void *) &_etext;
-+#endif
-+      req.uts = system_utsname;
-+      req.intervals = lstat_control.intervals;
-+
-+      req.first_started_time = lstat_control.first_started_time;
-+      req.started_time = lstat_control.started_time;
-+      req.started_cycles64 = lstat_control.started_cycles64;
-+
-+      req.next_free_dir_index = lstat_control.next_free_dir_index;
-+      req.next_free_read_lock_index = lstat_control.next_free_read_lock_index;
-+      req.dir_overflow = lstat_control.dir_overflow;
-+      req.rwlock_overflow = lstat_control.rwlock_overflow;
-+
-+      if (lstat_control.state == LSTAT_OFF) {
-+              if (req.intervals == 0) {
-+                      /* mesasurement is off and no valid data present */
-+                      next_ret_bcount = sizeof (lstat_user_request_t);
-+                      req.enabled_cycles64 = 0;
-+
-+                      if ((actual_ret_bcount + next_ret_bcount) > max_len)
-+                              return actual_ret_bcount;
-+
-+                      copy_to_user(buffer, (void *) &req, next_ret_bcount);
-+                      actual_ret_bcount += next_ret_bcount;
-+                      return actual_ret_bcount;
-+              } else {
-+                      /*
-+                       * measurement is off but valid data present
-+                       * fetch time info from lstat_control
-+                       */
-+                      req.ending_time = lstat_control.ending_time;
-+                      req.ending_cycles64 = lstat_control.ending_cycles64;
-+                      req.enabled_cycles64 = lstat_control.enabled_cycles64;
-+              }
-+      } else {
-+              /*
-+               * this must be a read while data active--use current time,
-+               * etc
-+               */
-+              do_gettimeofday(&tv);
-+              req.ending_time = tv.tv_sec;
-+              req.ending_cycles64 = get_cycles64();
-+              req.enabled_cycles64 = req.ending_cycles64 -
-+                      req.started_cycles64 + lstat_control.enabled_cycles64;
-+      }
-+
-+      next_ret_bcount = sizeof (lstat_user_request_t);
-+      if ((actual_ret_bcount + next_ret_bcount) > max_len)
-+              return actual_ret_bcount;
-+
-+      copy_to_user(buffer, (void *) &req, next_ret_bcount);
-+      actual_ret_bcount += next_ret_bcount;
-+
-+      if (!lstat_control.counts[0])   /* not initialized? */
-+              return actual_ret_bcount;
-+
-+      next_ret_bcount = sizeof (lstat_cpu_counts_t);
-+      for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+              if ((actual_ret_bcount + next_ret_bcount) > max_len)
-+                      return actual_ret_bcount;       /* leave early */
-+              copy_to_user(buffer + actual_ret_bcount,
-+                              lstat_control.counts[cpu], next_ret_bcount);
-+              actual_ret_bcount += next_ret_bcount;
-+      }
-+
-+      next_ret_bcount = LSTAT_MAX_STAT_INDEX *
-+                      sizeof (lstat_directory_entry_t);
-+      if (((actual_ret_bcount + next_ret_bcount) > max_len)
-+                      || !lstat_control.dir)
-+              return actual_ret_bcount;       /* leave early */
-+
-+      copy_to_user(buffer + actual_ret_bcount, lstat_control.dir,
-+                      next_ret_bcount);
-+      actual_ret_bcount += next_ret_bcount;
-+
-+      next_ret_bcount = sizeof (lstat_read_lock_cpu_counts_t);
-+      for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+              if (actual_ret_bcount + next_ret_bcount > max_len)
-+                      return actual_ret_bcount;
-+              copy_to_user(buffer + actual_ret_bcount,
-+                              lstat_control.read_lock_counts[cpu],
-+                              next_ret_bcount);
-+              actual_ret_bcount += next_ret_bcount;
-+      }
-+
-+      return actual_ret_bcount;
-+}
-+
-+/*
-+ *  Writing to the /proc lockmeter node enables or disables metering.
-+ *  based upon the first byte of the "written" data.
-+ *  The following values are defined:
-+ *  LSTAT_ON: 1st call: allocates storage, intializes and turns on measurement
-+ *            subsequent calls just turn on measurement
-+ *  LSTAT_OFF: turns off measurement
-+ *  LSTAT_RESET: resets statistics
-+ *  LSTAT_RELEASE: releases statistics storage
-+ *
-+ *  This allows one to accumulate statistics over several lockstat runs:
-+ *
-+ *  lockstat on
-+ *  lockstat off
-+ *  ...repeat above as desired...
-+ *  lockstat get
-+ *  ...now start a new set of measurements...
-+ *  lockstat reset
-+ *  lockstat on
-+ *  ...
-+ *
-+ */
-+ssize_t
-+put_lockmeter_info(const char *buffer, size_t len)
-+{
-+      int error = 0;
-+      int dirsize, countsize, read_lock_countsize, hashsize;
-+      int cpu;
-+      char put_char;
-+      int i, read_lock_blocks;
-+      unsigned long flags;
-+      rwlock_t *lock_ptr;
-+      struct timeval tv;
-+
-+      if (len <= 0)
-+              return -EINVAL;
-+
-+      _raw_spin_lock(&lstat_control.control_lock);
-+
-+      get_user(put_char, buffer);
-+      switch (put_char) {
-+
-+      case LSTAT_OFF:
-+              if (lstat_control.state != LSTAT_OFF) {
-+                      /*
-+                       * To avoid seeing read lock hold times in an
-+                       * inconsisent state, we have to follow this protocol
-+                       * to turn off statistics
-+                       */
-+                      local_irq_save(flags);
-+                      /*
-+                       * getting this lock will stop any read lock block
-+                       * allocations
-+                       */
-+                      _raw_spin_lock(&lstat_control.directory_lock);
-+                      /*
-+                       * keep any more read lock blocks from being
-+                       * allocated
-+                       */
-+                      lstat_control.state = LSTAT_OFF;
-+                      /* record how may read lock blocks there are */
-+                      read_lock_blocks =
-+                              lstat_control.next_free_read_lock_index;
-+                      _raw_spin_unlock(&lstat_control.directory_lock);
-+                      /* now go through the list of read locks */
-+                      cpu = THIS_CPU_NUMBER;
-+                      for (i = 1; i < read_lock_blocks; i++) {
-+                              lock_ptr =
-+                                  (*lstat_control.read_lock_counts[cpu])[i].
-+                                  lock_ptr;
-+                              /* is this saved lock address still valid? */
-+                              if (GET_RWINDEX(lock_ptr) == i) {
-+                                      /*
-+                                       * lock address appears to still be
-+                                       * valid because we only hold one lock
-+                                       * at a time, this can't cause a
-+                                       * deadlock unless this is a lock held
-+                                       * as part of the current system call
-+                                       * path. At the moment there
-+                                       * are no READ mode locks held to get
-+                                       * here from user space, so we solve
-+                                       * this by skipping locks held in
-+                                       * write mode.
-+                                       */
-+                                      if (RWLOCK_IS_WRITE_LOCKED(lock_ptr)) {
-+                                              PUT_RWINDEX(lock_ptr, 0);
-+                                              continue;
-+                                      }
-+                                      /*
-+                                       * now we know there are no read
-+                                       * holders of this lock! stop
-+                                       * statistics collection for this
-+                                       * lock
-+                                       */
-+                                      _raw_write_lock(lock_ptr);
-+                                      PUT_RWINDEX(lock_ptr, 0);
-+                                      _raw_write_unlock(lock_ptr);
-+                              }
-+                              /*
-+                               * it may still be possible for the hold time
-+                               * sum to be negative e.g. if a lock is
-+                               * reallocated while "busy" we will have to fix
-+                               * this up in the data reduction program.
-+                               */
-+                      }
-+                      local_irq_restore(flags);
-+                      lstat_control.intervals++;
-+                      lstat_control.ending_cycles64 = get_cycles64();
-+                      lstat_control.enabled_cycles64 +=
-+                              lstat_control.ending_cycles64 -
-+                              lstat_control.started_cycles64;
-+                      do_gettimeofday(&tv);
-+                      lstat_control.ending_time = tv.tv_sec;
-+                      /*
-+                       * don't deallocate the structures -- we may do a
-+                       * lockstat on to add to the data that is already
-+                       * there. Use LSTAT_RELEASE to release storage
-+                       */
-+              } else {
-+                      error = -EBUSY; /* already OFF */
-+              }
-+              break;
-+
-+      case LSTAT_ON:
-+              if (lstat_control.state == LSTAT_OFF) {
-+#ifdef DEBUG_LOCKMETER
-+                      printk("put_lockmeter_info(cpu=%d): LSTAT_ON\n",
-+                              THIS_CPU_NUMBER);
-+#endif
-+                      lstat_control.next_free_dir_index = 1;  /* 0 is for overflows */
-+
-+                      dirsize = LSTAT_MAX_STAT_INDEX *
-+                                      sizeof (lstat_directory_entry_t);
-+                      hashsize =
-+                              (1 + LSTAT_HASH_TABLE_SIZE) * sizeof (ushort);
-+                      countsize = sizeof (lstat_cpu_counts_t);
-+                      read_lock_countsize =
-+                              sizeof (lstat_read_lock_cpu_counts_t);
-+#ifdef DEBUG_LOCKMETER
-+                      printk(" dirsize:%d", dirsize);
-+                      printk(" hashsize:%d", hashsize);
-+                      printk(" countsize:%d", countsize);
-+                      printk(" read_lock_countsize:%d\n",
-+                              read_lock_countsize);
-+#endif
-+#ifdef DEBUG_LOCKMETER
-+                      {
-+                              int secs;
-+                              unsigned long cycles;
-+                              uint64_t cycles64;
-+
-+                              do_gettimeofday(&tv);
-+                              secs = tv.tv_sec;
-+                              do {
-+                                      do_gettimeofday(&tv);
-+                              } while (secs == tv.tv_sec);
-+                              cycles = get_cycles();
-+                              cycles64 = get_cycles64();
-+                              secs = tv.tv_sec;
-+                              do {
-+                                      do_gettimeofday(&tv);
-+                              } while (secs == tv.tv_sec);
-+                              cycles = get_cycles() - cycles;
-+                              cycles64 = get_cycles64() - cycles;
-+                              printk("lockmeter: cycleFrequency:%d "
-+                                      "cycles:%d cycles64:%d\n",
-+                                      CPU_CYCLE_FREQUENCY, cycles, cycles64);
-+                      }
-+#endif
-+
-+                      /*
-+                       * if this is the first call, allocate storage and
-+                       * initialize
-+                       */
-+                      if (!lstat_control.hashtab) {
-+
-+                              spin_lock_init(&lstat_control.directory_lock);
-+
-+                              /* guarantee all pointers at zero */
-+                              init_control_space();
-+
-+                              lstat_control.hashtab =
-+                                  kmalloc(hashsize, GFP_KERNEL);
-+                              if (!lstat_control.hashtab) {
-+                                      error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+                                      printk("!!error kmalloc of hashtab\n");
-+#endif
-+                              }
-+                              lstat_control.dir = vmalloc(dirsize);
-+                              if (!lstat_control.dir) {
-+                                      error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+                                      printk("!!error kmalloc of dir\n");
-+#endif
-+                              }
-+
-+                              for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+                                      lstat_control.counts[cpu] =
-+                                              vmalloc(countsize);
-+                                      if (!lstat_control.counts[cpu]) {
-+                                              error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+                                              printk("!!error vmalloc of "
-+                                                      "counts[%d]\n", cpu);
-+#endif
-+                                      }
-+                                      lstat_control.read_lock_counts[cpu] =
-+                                              (lstat_read_lock_cpu_counts_t *)
-+                                              kmalloc(read_lock_countsize,
-+                                                      GFP_KERNEL);
-+                                      if (!lstat_control.
-+                                                      read_lock_counts[cpu]) {
-+                                              error = -ENOSPC;
-+#ifdef DEBUG_LOCKMETER
-+                                              printk("!!error kmalloc of "
-+                                                "read_lock_counts[%d]\n",
-+                                                      cpu);
-+#endif
-+                                      }
-+                              }
-+                      }
-+
-+                      if (error) {
-+                              /*
-+                               * One or more kmalloc failures -- free
-+                               * everything
-+                               */
-+                              release_control_space();
-+                      } else {
-+
-+                              if (!reset_lstat_data()) {
-+                                      error = -EINVAL;
-+                                      break;
-+                              };
-+
-+                              /*
-+                               * record starting and ending times and the
-+                               * like
-+                               */
-+                              if (lstat_control.intervals == 0) {
-+                                      do_gettimeofday(&tv);
-+                                      lstat_control.first_started_time =
-+                                              tv.tv_sec;
-+                              }
-+                              lstat_control.started_cycles64 = get_cycles64();
-+                              do_gettimeofday(&tv);
-+                              lstat_control.started_time = tv.tv_sec;
-+
-+                              lstat_control.state = LSTAT_ON;
-+                      }
-+              } else {
-+                      error = -EBUSY; /* already ON */
-+              }
-+              break;
-+
-+      case LSTAT_RESET:
-+              if (lstat_control.state == LSTAT_OFF) {
-+                      if (!reset_lstat_data())
-+                              error = -EINVAL;
-+              } else {
-+                      error = -EBUSY; /* still on; can't reset */
-+              }
-+              break;
-+
-+      case LSTAT_RELEASE:
-+              if (lstat_control.state == LSTAT_OFF) {
-+                      release_control_space();
-+                      lstat_control.intervals = 0;
-+                      lstat_control.enabled_cycles64 = 0;
-+              } else {
-+                      error = -EBUSY;
-+              }
-+              break;
-+
-+      default:
-+              error = -EINVAL;
-+      }                       /* switch */
-+
-+      _raw_spin_unlock(&lstat_control.control_lock);
-+      return error ? error : len;
-+}
-+
-+#ifdef USER_MODE_TESTING
-+/* following used for user mode testing */
-+void
-+lockmeter_init()
-+{
-+      int dirsize, hashsize, countsize, read_lock_countsize, cpu;
-+
-+      printf("lstat_control is at %x size=%d\n", &lstat_control,
-+              sizeof (lstat_control));
-+      printf("sizeof(spinlock_t)=%d\n", sizeof (spinlock_t));
-+      lstat_control.state = LSTAT_ON;
-+
-+      lstat_control.directory_lock = SPIN_LOCK_UNLOCKED;
-+      lstat_control.next_free_dir_index = 1;  /* 0 is for overflows */
-+      lstat_control.next_free_read_lock_index = 1;
-+
-+      dirsize = LSTAT_MAX_STAT_INDEX * sizeof (lstat_directory_entry_t);
-+      hashsize = (1 + LSTAT_HASH_TABLE_SIZE) * sizeof (ushort);
-+      countsize = sizeof (lstat_cpu_counts_t);
-+      read_lock_countsize = sizeof (lstat_read_lock_cpu_counts_t);
-+
-+      lstat_control.hashtab = (ushort *) malloc(hashsize);
-+
-+      if (lstat_control.hashtab == 0) {
-+              printf("malloc failure for at line %d in lockmeter.c\n",
-+                      __LINE__);
-+              exit(0);
-+      }
-+
-+      lstat_control.dir = (lstat_directory_entry_t *) malloc(dirsize);
-+
-+      if (lstat_control.dir == 0) {
-+              printf("malloc failure for at line %d in lockmeter.c\n", cpu,
-+                      __LINE__);
-+              exit(0);
-+      }
-+
-+      for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+              int j, k;
-+              j = (int) (lstat_control.counts[cpu] =
-+                         (lstat_cpu_counts_t *) malloc(countsize));
-+              k = (int) (lstat_control.read_lock_counts[cpu] =
-+                         (lstat_read_lock_cpu_counts_t *)
-+                         malloc(read_lock_countsize));
-+              if (j * k == 0) {
-+                      printf("malloc failure for cpu=%d at line %d in "
-+                              "lockmeter.c\n", cpu, __LINE__);
-+                      exit(0);
-+              }
-+      }
-+
-+      memset(lstat_control.hashtab, 0, hashsize);
-+      memset(lstat_control.dir, 0, dirsize);
-+
-+      for (cpu = 0; cpu < num_online_cpus(); cpu++) {
-+              memset(lstat_control.counts[cpu], 0, countsize);
-+              memset(lstat_control.read_lock_counts[cpu], 0,
-+                      read_lock_countsize);
-+      }
-+}
-+
-+asm("
-+.align        4
-+.globl        __write_lock_failed
-+__write_lock_failed:
-+      " LOCK "addl    $" RW_LOCK_BIAS_STR ",(%eax)
-+1:    cmpl    $" RW_LOCK_BIAS_STR ",(%eax)
-+      jne     1b
-+
-+      " LOCK "subl    $" RW_LOCK_BIAS_STR ",(%eax)
-+      jnz     __write_lock_failed
-+      ret
-+
-+
-+.align        4
-+.globl        __read_lock_failed
-+__read_lock_failed:
-+      lock ; incl     (%eax)
-+1:    cmpl    $1,(%eax)
-+      js      1b
-+
-+      lock ; decl     (%eax)
-+      js      __read_lock_failed
-+      ret
-+");
-+#endif
---- linux-2.6.0-test1/kernel/Makefile  2003-06-26 22:07:26.000000000 -0700
-+++ 25/kernel/Makefile 2003-07-19 17:06:40.000000000 -0700
-@@ -11,6 +11,7 @@ obj-y     = sched.o fork.o exec_domain.o
- obj-$(CONFIG_FUTEX) += futex.o
- obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o
- obj-$(CONFIG_SMP) += cpu.o
-+obj-$(CONFIG_LOCKMETER) += lockmeter.o
- obj-$(CONFIG_UID16) += uid16.o
- obj-$(CONFIG_MODULES) += ksyms.o module.o
- obj-$(CONFIG_KALLSYMS) += kallsyms.o
---- linux-2.6.0-test1/kernel/module.c  2003-07-02 14:53:18.000000000 -0700
-+++ 25/kernel/module.c 2003-07-19 17:04:07.000000000 -0700
-@@ -98,6 +98,17 @@ int init_module(void)
- }
- EXPORT_SYMBOL(init_module);
-+/* A thread that wants to hold a reference to a module only while it
-+ * is running can call ths to safely exit.
-+ * nfsd and lockd use this.
-+ */
-+void __module_put_and_exit(struct module *mod, long code)
-+{
-+      module_put(mod);
-+      do_exit(code);
-+}
-+EXPORT_SYMBOL(__module_put_and_exit);
-+      
- /* Find a module section: 0 means not found. */
- static unsigned int find_sec(Elf_Ehdr *hdr,
-                            Elf_Shdr *sechdrs,
-@@ -374,9 +385,9 @@ static void module_unload_init(struct mo
-       INIT_LIST_HEAD(&mod->modules_which_use_me);
-       for (i = 0; i < NR_CPUS; i++)
--              atomic_set(&mod->ref[i].count, 0);
-+              local_set(&mod->ref[i].count, 0);
-       /* Hold reference count during initialization. */
--      atomic_set(&mod->ref[smp_processor_id()].count, 1);
-+      local_set(&mod->ref[smp_processor_id()].count, 1);
-       /* Backwards compatibility macros put refcount during init. */
-       mod->waiter = current;
- }
-@@ -471,7 +482,7 @@ static int stopref(void *cpu)
-       struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 };
-       setscheduler(current->pid, SCHED_FIFO, &param);
- #endif
--      set_cpus_allowed(current, 1UL << (unsigned long)cpu);
-+      set_cpus_allowed(current, cpumask_of_cpu((int)(long)cpu));
-       /* Ack: we are alive */
-       atomic_inc(&stopref_thread_ack);
-@@ -524,7 +535,7 @@ static void stopref_set_state(enum stopr
- static int stop_refcounts(void)
- {
-       unsigned int i, cpu;
--      unsigned long old_allowed;
-+      cpumask_t old_allowed;
-       int ret = 0;
-       /* One thread per cpu.  We'll do our own. */
-@@ -532,7 +543,7 @@ static int stop_refcounts(void)
-       /* FIXME: racy with set_cpus_allowed. */
-       old_allowed = current->cpus_allowed;
--      set_cpus_allowed(current, 1UL << (unsigned long)cpu);
-+      set_cpus_allowed(current, cpumask_of_cpu(cpu));
-       atomic_set(&stopref_thread_ack, 0);
-       stopref_num_threads = 0;
-@@ -599,7 +610,7 @@ unsigned int module_refcount(struct modu
-       unsigned int i, total = 0;
-       for (i = 0; i < NR_CPUS; i++)
--              total += atomic_read(&mod->ref[i].count);
-+              total += local_read(&mod->ref[i].count);
-       return total;
- }
- EXPORT_SYMBOL(module_refcount);
-@@ -610,7 +621,10 @@ static void free_module(struct module *m
- #ifdef CONFIG_MODULE_FORCE_UNLOAD
- static inline int try_force(unsigned int flags)
- {
--      return (flags & O_TRUNC);
-+      int ret = (flags & O_TRUNC);
-+      if (ret)
-+              tainted |= TAINT_FORCED_MODULE;
-+      return ret;
- }
- #else
- static inline int try_force(unsigned int flags)
---- linux-2.6.0-test1/kernel/printk.c  2003-07-02 14:53:18.000000000 -0700
-+++ 25/kernel/printk.c 2003-07-19 17:07:04.000000000 -0700
-@@ -399,9 +399,13 @@ asmlinkage int printk(const char *fmt, .
-       char *p;
-       static char printk_buf[1024];
-       static int log_level_unknown = 1;
-+      static int printk_cpu = -1;
--      if (oops_in_progress) {
--              /* If a crash is occurring, make sure we can't deadlock */
-+      if (oops_in_progress && printk_cpu == smp_processor_id()) {
-+              /*
-+               * If a crash is occurring during printk() on this CPU, make
-+               * sure we can't deadlock
-+               */
-               spin_lock_init(&logbuf_lock);
-               /* And make sure that we print immediately */
-               init_MUTEX(&console_sem);
-@@ -409,6 +413,7 @@ asmlinkage int printk(const char *fmt, .
-       /* This stops the holder of console_sem just where we want him */
-       spin_lock_irqsave(&logbuf_lock, flags);
-+      printk_cpu = smp_processor_id();
-       /* Emit the output into the temporary buffer */
-       va_start(args, fmt);
---- linux-2.6.0-test1/kernel/profile.c 2003-06-14 12:18:34.000000000 -0700
-+++ 25/kernel/profile.c        2003-07-19 17:03:51.000000000 -0700
-@@ -8,8 +8,7 @@
- #include <linux/bootmem.h>
- #include <linux/notifier.h>
- #include <linux/mm.h>
--
--extern char _stext, _etext;
-+#include <asm/sections.h>
- unsigned int * prof_buffer;
- unsigned long prof_len;
-@@ -36,7 +35,7 @@ void __init profile_init(void)
-               return;
-  
-       /* only text is profiled */
--      prof_len = (unsigned long) &_etext - (unsigned long) &_stext;
-+      prof_len = _etext - _stext;
-       prof_len >>= prof_shift;
-               
-       size = prof_len * sizeof(unsigned int) + PAGE_SIZE - 1;
---- linux-2.6.0-test1/kernel/rcupdate.c        2003-06-26 22:07:26.000000000 -0700
-+++ 25/kernel/rcupdate.c       2003-07-19 17:04:56.000000000 -0700
-@@ -41,6 +41,7 @@
- #include <linux/module.h>
- #include <linux/completion.h>
- #include <linux/percpu.h>
-+#include <linux/seq_file.h>
- #include <linux/notifier.h>
- #include <linux/rcupdate.h>
- #include <linux/cpu.h>
-@@ -48,7 +49,7 @@
- /* Definition for rcupdate control block. */
- struct rcu_ctrlblk rcu_ctrlblk = 
-       { .mutex = SPIN_LOCK_UNLOCKED, .curbatch = 1, 
--        .maxbatch = 1, .rcu_cpu_mask = 0 };
-+        .maxbatch = 1, .rcu_cpu_mask = CPU_MASK_NONE };
- DEFINE_PER_CPU(struct rcu_data, rcu_data) = { 0L };
- /* Fake initialization required by compiler */
-@@ -76,6 +77,7 @@ void call_rcu(struct rcu_head *head, voi
-       local_irq_save(flags);
-       cpu = smp_processor_id();
-       list_add_tail(&head->list, &RCU_nxtlist(cpu));
-+      RCU_nr_rcureqs(cpu)++;
-       local_irq_restore(flags);
- }
-@@ -83,7 +85,7 @@ void call_rcu(struct rcu_head *head, voi
-  * Invoke the completed RCU callbacks. They are expected to be in
-  * a per-cpu list.
-  */
--static void rcu_do_batch(struct list_head *list)
-+static void rcu_do_batch(int cpu, struct list_head *list)
- {
-       struct list_head *entry;
-       struct rcu_head *head;
-@@ -93,6 +95,7 @@ static void rcu_do_batch(struct list_hea
-               list_del(entry);
-               head = list_entry(entry, struct rcu_head, list);
-               head->func(head->arg);
-+              RCU_nr_rcupdates(cpu)++;
-       }
- }
-@@ -107,7 +110,7 @@ static void rcu_start_batch(long newbatc
-               rcu_ctrlblk.maxbatch = newbatch;
-       }
-       if (rcu_batch_before(rcu_ctrlblk.maxbatch, rcu_ctrlblk.curbatch) ||
--          (rcu_ctrlblk.rcu_cpu_mask != 0)) {
-+          !cpus_empty(rcu_ctrlblk.rcu_cpu_mask)) {
-               return;
-       }
-       rcu_ctrlblk.rcu_cpu_mask = cpu_online_map;
-@@ -122,7 +125,7 @@ static void rcu_check_quiescent_state(vo
- {
-       int cpu = smp_processor_id();
--      if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
-+      if (!cpu_isset(cpu, rcu_ctrlblk.rcu_cpu_mask))
-               return;
-       /* 
-@@ -138,12 +141,12 @@ static void rcu_check_quiescent_state(vo
-               return;
-       spin_lock(&rcu_ctrlblk.mutex);
--      if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
-+      if (!cpu_isset(cpu, rcu_ctrlblk.rcu_cpu_mask))
-               goto out_unlock;
--      clear_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask);
-+      cpu_clear(cpu, rcu_ctrlblk.rcu_cpu_mask);
-       RCU_last_qsctr(cpu) = RCU_QSCTR_INVALID;
--      if (rcu_ctrlblk.rcu_cpu_mask != 0)
-+      if (!cpus_empty(rcu_ctrlblk.rcu_cpu_mask))
-               goto out_unlock;
-       rcu_ctrlblk.curbatch++;
-@@ -186,7 +189,7 @@ static void rcu_process_callbacks(unsign
-       }
-       rcu_check_quiescent_state();
-       if (!list_empty(&list))
--              rcu_do_batch(&list);
-+              rcu_do_batch(cpu, &list);
- }
- void rcu_check_callbacks(int cpu, int user)
-@@ -265,3 +268,44 @@ void synchronize_kernel(void)
- EXPORT_SYMBOL(call_rcu);
- EXPORT_SYMBOL(synchronize_kernel);
-+
-+#ifdef        CONFIG_PROC_FS
-+
-+static void *rcu_start(struct seq_file *m, loff_t *pos)
-+{
-+      static int cpu;
-+      cpu = *pos;
-+      return *pos < NR_CPUS ? &cpu : NULL;
-+}
-+
-+static void *rcu_next(struct seq_file *m, void *v, loff_t *pos)
-+{
-+      ++*pos;
-+      return rcu_start(m, pos);
-+}
-+
-+static void rcu_stop(struct seq_file *m, void *v)
-+{
-+}
-+
-+static int show_rcu(struct seq_file *m, void *v)
-+{
-+      int cpu = *(int *)v;
-+
-+      if (!cpu_online(cpu))
-+              return 0;
-+      seq_printf(m, "CPU : %d\n", cpu);
-+      seq_printf(m, "RCU requests : %ld\n", RCU_nr_rcureqs(cpu));
-+      seq_printf(m, "RCU updates : %ld\n\n", RCU_nr_rcupdates(cpu));
-+      return 0;
-+}
-+
-+struct seq_operations rcu_op = {
-+      .start  = rcu_start,
-+      .next   = rcu_next,
-+      .stop   = rcu_stop,
-+      .show   = show_rcu,
-+};
-+
-+#endif
-+
---- linux-2.6.0-test1/kernel/sched.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/sched.c  2003-07-19 17:07:14.000000000 -0700
-@@ -68,14 +68,16 @@
-  */
- #define MIN_TIMESLICE         ( 10 * HZ / 1000)
- #define MAX_TIMESLICE         (200 * HZ / 1000)
--#define CHILD_PENALTY         50
-+#define CHILD_PENALTY         95
- #define PARENT_PENALTY                100
- #define EXIT_WEIGHT           3
- #define PRIO_BONUS_RATIO      25
- #define INTERACTIVE_DELTA     2
-+#define MIN_SLEEP_AVG         (HZ)
- #define MAX_SLEEP_AVG         (10*HZ)
- #define STARVATION_LIMIT      (10*HZ)
- #define NODE_THRESHOLD                125
-+#define MAX_BONUS             (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100)
- /*
-  * If a task is 'interactive' then we reinsert it in the active
-@@ -176,7 +178,7 @@ struct runqueue {
- static DEFINE_PER_CPU(struct runqueue, runqueues);
- #define cpu_rq(cpu)           (&per_cpu(runqueues, (cpu)))
--#define this_rq()             (&__get_cpu_var(runqueues))
-+#define this_rq()             (cpu_rq(smp_processor_id())) /* not __get_cpu_var(runqueues)! */
- #define task_rq(p)            cpu_rq(task_cpu(p))
- #define cpu_curr(cpu)         (cpu_rq(cpu)->curr)
- #define rt_task(p)            ((p)->prio < MAX_RT_PRIO)
-@@ -297,6 +299,26 @@ static inline void enqueue_task(struct t
-       array->nr_active++;
-       p->array = array;
- }
-+/*
-+ * normalise_sleep converts a task's sleep_avg to
-+ * an appropriate proportion of MIN_SLEEP_AVG.
-+ */
-+static inline void normalise_sleep(task_t *p)
-+{
-+      unsigned long old_avg_time = jiffies - p->avg_start;
-+
-+      if (unlikely(old_avg_time < MIN_SLEEP_AVG))
-+              return;
-+
-+      if (p->sleep_avg > MAX_SLEEP_AVG)
-+              p->sleep_avg = MAX_SLEEP_AVG;
-+
-+      if (old_avg_time > MAX_SLEEP_AVG)
-+              old_avg_time = MAX_SLEEP_AVG;
-+
-+      p->sleep_avg = p->sleep_avg * MIN_SLEEP_AVG / old_avg_time;
-+      p->avg_start = jiffies - MIN_SLEEP_AVG;
-+}
- /*
-  * effective_prio - return the priority that is based on the static
-@@ -315,11 +337,28 @@ static inline void enqueue_task(struct t
- static int effective_prio(task_t *p)
- {
-       int bonus, prio;
-+      unsigned long sleep_period;
-       if (rt_task(p))
-               return p->prio;
--      bonus = MAX_USER_PRIO*PRIO_BONUS_RATIO*p->sleep_avg/MAX_SLEEP_AVG/100 -
-+      sleep_period = jiffies - p->avg_start;
-+
-+      if (unlikely(!sleep_period))
-+              return p->static_prio;
-+
-+      if (sleep_period > MAX_SLEEP_AVG)
-+              sleep_period = MAX_SLEEP_AVG;
-+
-+      if (p->sleep_avg > sleep_period)
-+              sleep_period = p->sleep_avg;
-+
-+      /*
-+       * The bonus is determined according to the accumulated
-+       * sleep avg over the duration the task has been running
-+       * until it reaches MAX_SLEEP_AVG. -ck
-+       */
-+      bonus = MAX_USER_PRIO*PRIO_BONUS_RATIO*p->sleep_avg/sleep_period/100 -
-                       MAX_USER_PRIO*PRIO_BONUS_RATIO/100/2;
-       prio = p->static_prio - bonus;
-@@ -350,31 +389,47 @@ static inline void activate_task(task_t 
-       long sleep_time = jiffies - p->last_run - 1;
-       if (sleep_time > 0) {
--              int sleep_avg;
--
-               /*
--               * This code gives a bonus to interactive tasks.
--               *
--               * The boost works by updating the 'average sleep time'
--               * value here, based on ->last_run. The more time a task
--               * spends sleeping, the higher the average gets - and the
--               * higher the priority boost gets as well.
-+               * User tasks that sleep a long time are categorised as idle and
-+               * will get just under interactive status with a small runtime
-+               * to allow them to become interactive or non-interactive rapidly
-                */
--              sleep_avg = p->sleep_avg + sleep_time;
-+              if (sleep_time > MIN_SLEEP_AVG && p->mm){
-+                      p->avg_start = jiffies - MIN_SLEEP_AVG;
-+                      p->sleep_avg = MIN_SLEEP_AVG * (MAX_BONUS - INTERACTIVE_DELTA - 2) /
-+                              MAX_BONUS;
-+              } else {
-+                      unsigned long runtime = jiffies - p->avg_start;
--              /*
--               * 'Overflow' bonus ticks go to the waker as well, so the
--               * ticks are not lost. This has the effect of further
--               * boosting tasks that are related to maximum-interactive
--               * tasks.
--               */
--              if (sleep_avg > MAX_SLEEP_AVG)
--                      sleep_avg = MAX_SLEEP_AVG;
--              if (p->sleep_avg != sleep_avg) {
--                      p->sleep_avg = sleep_avg;
--                      p->prio = effective_prio(p);
-+                      if (runtime > MAX_SLEEP_AVG)
-+                              runtime = MAX_SLEEP_AVG;
-+
-+                      /*
-+                       * This code gives a bonus to interactive tasks.
-+                       *
-+                       * The boost works by updating the 'average sleep time'
-+                       * value here, based on ->last_run. The more time a task
-+                       * spends sleeping, the higher the average gets - and the
-+                       * higher the priority boost gets as well.
-+                       */
-+                      p->sleep_avg += sleep_time;
-+
-+                      /*
-+                       * Processes that sleep get pushed to a higher priority
-+                       * each time they sleep
-+                       */
-+                      p->sleep_avg = (p->sleep_avg * MAX_BONUS / runtime + 1) * runtime / MAX_BONUS;
-+
-+                      if (p->sleep_avg > MAX_SLEEP_AVG)
-+                              p->sleep_avg = MAX_SLEEP_AVG;
-+              }
-+
-+              if (unlikely(p->avg_start > jiffies)){
-+                      p->avg_start = jiffies;
-+                      p->sleep_avg = 0;
-               }
-       }
-+      p->prio = effective_prio(p);
-       __activate_task(p, rq);
- }
-@@ -489,7 +544,7 @@ repeat_lock_task:
-                        */
-                       if (unlikely(sync && !task_running(rq, p) &&
-                               (task_cpu(p) != smp_processor_id()) &&
--                              (p->cpus_allowed & (1UL << smp_processor_id())))) {
-+                              cpu_isset(smp_processor_id(), p->cpus_allowed))) {
-                               set_task_cpu(p, smp_processor_id());
-                               task_rq_unlock(rq, &flags);
-@@ -551,6 +606,7 @@ void wake_up_forked_process(task_t * p)
-        * from forking tasks that are max-interactive.
-        */
-       current->sleep_avg = current->sleep_avg * PARENT_PENALTY / 100;
-+      normalise_sleep(p);
-       p->sleep_avg = p->sleep_avg * CHILD_PENALTY / 100;
-       p->prio = effective_prio(p);
-       set_task_cpu(p, smp_processor_id());
-@@ -591,6 +647,8 @@ void sched_exit(task_t * p)
-        * If the child was a (relative-) CPU hog then decrease
-        * the sleep_avg of the parent as well.
-        */
-+      normalise_sleep(p);
-+      normalise_sleep(p->parent);
-       if (p->sleep_avg < p->parent->sleep_avg)
-               p->parent->sleep_avg = (p->parent->sleep_avg * EXIT_WEIGHT +
-                       p->sleep_avg) / (EXIT_WEIGHT + 1);
-@@ -758,13 +816,13 @@ static inline void double_rq_unlock(runq
-  */
- static void sched_migrate_task(task_t *p, int dest_cpu)
- {
--      unsigned long old_mask;
-+      cpumask_t old_mask;
-       old_mask = p->cpus_allowed;
--      if (!(old_mask & (1UL << dest_cpu)))
-+      if (!cpu_isset(dest_cpu, old_mask))
-               return;
-       /* force the process onto the specified CPU */
--      set_cpus_allowed(p, 1UL << dest_cpu);
-+      set_cpus_allowed(p, cpumask_of_cpu(dest_cpu));
-       /* restore the cpus allowed mask */
-       set_cpus_allowed(p, old_mask);
-@@ -777,7 +835,7 @@ static void sched_migrate_task(task_t *p
- static int sched_best_cpu(struct task_struct *p)
- {
-       int i, minload, load, best_cpu, node = 0;
--      unsigned long cpumask;
-+      cpumask_t cpumask;
-       best_cpu = task_cpu(p);
-       if (cpu_rq(best_cpu)->nr_running <= 2)
-@@ -801,7 +859,7 @@ static int sched_best_cpu(struct task_st
-       minload = 10000000;
-       cpumask = node_to_cpumask(node);
-       for (i = 0; i < NR_CPUS; ++i) {
--              if (!(cpumask & (1UL << i)))
-+              if (!cpu_isset(i, cpumask))
-                       continue;
-               if (cpu_rq(i)->nr_running < minload) {
-                       best_cpu = i;
-@@ -888,7 +946,7 @@ static inline unsigned int double_lock_b
- /*
-  * find_busiest_queue - find the busiest runqueue among the cpus in cpumask.
-  */
--static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu, int idle, int *imbalance, unsigned long cpumask)
-+static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu, int idle, int *imbalance, cpumask_t cpumask)
- {
-       int nr_running, load, max_load, i;
-       runqueue_t *busiest, *rq_src;
-@@ -923,7 +981,7 @@ static inline runqueue_t *find_busiest_q
-       busiest = NULL;
-       max_load = 1;
-       for (i = 0; i < NR_CPUS; i++) {
--              if (!((1UL << i) & cpumask))
-+              if (!cpu_isset(i, cpumask))
-                       continue;
-               rq_src = cpu_rq(i);
-@@ -942,10 +1000,10 @@ static inline runqueue_t *find_busiest_q
-       if (likely(!busiest))
-               goto out;
--      *imbalance = (max_load - nr_running) / 2;
-+      *imbalance = max_load - nr_running;
-       /* It needs an at least ~25% imbalance to trigger balancing. */
--      if (!idle && (*imbalance < (max_load + 3)/4)) {
-+      if (!idle && ((*imbalance)*4 < max_load)) {
-               busiest = NULL;
-               goto out;
-       }
-@@ -955,7 +1013,7 @@ static inline runqueue_t *find_busiest_q
-        * Make sure nothing changed since we checked the
-        * runqueue length.
-        */
--      if (busiest->nr_running <= nr_running + 1) {
-+      if (busiest->nr_running <= nr_running) {
-               spin_unlock(&busiest->lock);
-               busiest = NULL;
-       }
-@@ -995,7 +1053,7 @@ static inline void pull_task(runqueue_t 
-  * We call this with the current runqueue locked,
-  * irqs disabled.
-  */
--static void load_balance(runqueue_t *this_rq, int idle, unsigned long cpumask)
-+static void load_balance(runqueue_t *this_rq, int idle, cpumask_t cpumask)
- {
-       int imbalance, idx, this_cpu = smp_processor_id();
-       runqueue_t *busiest;
-@@ -1008,6 +1066,12 @@ static void load_balance(runqueue_t *thi
-               goto out;
-       /*
-+       * We only want to steal a number of tasks equal to 1/2 the imbalance,
-+       * otherwise we'll just shift the imbalance to the new queue:
-+       */
-+      imbalance /= 2;
-+
-+      /*
-        * We first consider expired tasks. Those will likely not be
-        * executed in the near future, and they are most likely to
-        * be cache-cold, thus switching CPUs has the least effect
-@@ -1049,7 +1113,7 @@ skip_queue:
- #define CAN_MIGRATE_TASK(p,rq,this_cpu)                                       \
-       ((!idle || (jiffies - (p)->last_run > cache_decay_ticks)) &&    \
-               !task_running(rq, p) &&                                 \
--                      ((p)->cpus_allowed & (1UL << (this_cpu))))
-+                      cpu_isset(this_cpu, (p)->cpus_allowed))
-       curr = curr->prev;
-@@ -1092,10 +1156,10 @@ out:
- static void balance_node(runqueue_t *this_rq, int idle, int this_cpu)
- {
-       int node = find_busiest_node(cpu_to_node(this_cpu));
--      unsigned long cpumask, this_cpumask = 1UL << this_cpu;
-       if (node >= 0) {
--              cpumask = node_to_cpumask(node) | this_cpumask;
-+              cpumask_t cpumask = node_to_cpumask(node);
-+              cpu_set(this_cpu, cpumask);
-               spin_lock(&this_rq->lock);
-               load_balance(this_rq, idle, cpumask);
-               spin_unlock(&this_rq->lock);
-@@ -1207,11 +1271,7 @@ void scheduler_tick(int user_ticks, int 
-       spin_lock(&rq->lock);
-       /*
-        * The task was running during this tick - update the
--       * time slice counter and the sleep average. Note: we
--       * do not update a thread's priority until it either
--       * goes to sleep or uses up its timeslice. This makes
--       * it possible for interactive tasks to use up their
--       * timeslices at their highest priority levels.
-+       * time slice counter and the sleep average.
-        */
-       if (p->sleep_avg)
-               p->sleep_avg--;
-@@ -1244,6 +1304,17 @@ void scheduler_tick(int user_ticks, int 
-                       enqueue_task(p, rq->expired);
-               } else
-                       enqueue_task(p, rq->active);
-+      } else if (p->mm && !((task_timeslice(p) - p->time_slice) %
-+               (MIN_TIMESLICE * (MAX_BONUS + 1 - p->sleep_avg * MAX_BONUS / MAX_SLEEP_AVG)))){
-+              /*
-+               * Running user tasks get requeued with their remaining timeslice
-+               * after a period proportional to how cpu intensive they are to
-+               * minimise the duration one interactive task can starve another
-+               */
-+              dequeue_task(p, rq->active);
-+              set_tsk_need_resched(p);
-+              p->prio = effective_prio(p);
-+              enqueue_task(p, rq->active);
-       }
- out_unlock:
-       spin_unlock(&rq->lock);
-@@ -1606,6 +1677,13 @@ out_unlock:
-       task_rq_unlock(rq, &flags);
- }
-+#if defined( CONFIG_KGDB) 
-+struct task_struct * kgdb_get_idle(int this_cpu)
-+{
-+        return cpu_rq(this_cpu)->idle;
-+}
-+#endif
-+
- #ifndef __alpha__
- /*
-@@ -1898,7 +1976,7 @@ out_unlock:
- asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len,
-                                     unsigned long __user *user_mask_ptr)
- {
--      unsigned long new_mask;
-+      cpumask_t new_mask;
-       int retval;
-       task_t *p;
-@@ -1946,7 +2024,7 @@ asmlinkage long sys_sched_getaffinity(pi
-                                     unsigned long __user *user_mask_ptr)
- {
-       unsigned int real_len;
--      unsigned long mask;
-+      cpumask_t mask;
-       int retval;
-       task_t *p;
-@@ -1962,7 +2040,7 @@ asmlinkage long sys_sched_getaffinity(pi
-               goto out_unlock;
-       retval = 0;
--      mask = p->cpus_allowed & cpu_online_map;
-+      cpus_and(mask, p->cpus_allowed, cpu_online_map);
- out_unlock:
-       read_unlock(&tasklist_lock);
-@@ -2080,7 +2158,7 @@ asmlinkage long sys_sched_get_priority_m
- }
- /**
-- * sys_sched_get_priority_mix - return minimum RT priority.
-+ * sys_sched_get_priority_min - return minimum RT priority.
-  * @policy: scheduling class.
-  *
-  * this syscall returns the minimum rt_priority that can be used
-@@ -2159,17 +2237,16 @@ static inline struct task_struct *younge
- static void show_task(task_t * p)
- {
--      unsigned long free = 0;
-       task_t *relative;
--      int state;
--      static const char * stat_nam[] = { "R", "S", "D", "T", "Z", "W" };
-+      unsigned state;
-+      static const char *stat_nam[] = { "R", "S", "D", "T", "Z", "W" };
-       printk("%-13.13s ", p->comm);
-       state = p->state ? __ffs(p->state) + 1 : 0;
--      if (((unsigned) state) < sizeof(stat_nam)/sizeof(char *))
-+      if (state < ARRAY_SIZE(stat_nam))
-               printk(stat_nam[state]);
-       else
--              printk(" ");
-+              printk("?");
- #if (BITS_PER_LONG == 32)
-       if (p == current)
-               printk(" current  ");
-@@ -2181,13 +2258,7 @@ static void show_task(task_t * p)
-       else
-               printk(" %016lx ", thread_saved_pc(p));
- #endif
--      {
--              unsigned long * n = (unsigned long *) (p->thread_info+1);
--              while (!*n)
--                      n++;
--              free = (unsigned long) n - (unsigned long)(p+1);
--      }
--      printk("%5lu %5d %6d ", free, p->pid, p->parent->pid);
-+      printk("%5d %6d ", p->pid, p->parent->pid);
-       if ((relative = eldest_child(p)))
-               printk("%5d ", relative->pid);
-       else
-@@ -2214,12 +2285,12 @@ void show_state(void)
- #if (BITS_PER_LONG == 32)
-       printk("\n"
--             "                         free                        sibling\n");
--      printk("  task             PC    stack   pid father child younger older\n");
-+             "                                               sibling\n");
-+      printk("  task             PC      pid father child younger older\n");
- #else
-       printk("\n"
--             "                                 free                        sibling\n");
--      printk("  task                 PC        stack   pid father child younger older\n");
-+             "                                                       sibling\n");
-+      printk("  task                 PC          pid father child younger older\n");
- #endif
-       read_lock(&tasklist_lock);
-       do_each_thread(g, p) {
-@@ -2292,7 +2363,7 @@ typedef struct {
-  * task must not exit() & deallocate itself prematurely.  The
-  * call is not atomic; no spinlocks may be held.
-  */
--int set_cpus_allowed(task_t *p, unsigned long new_mask)
-+int set_cpus_allowed(task_t *p, cpumask_t new_mask)
- {
-       unsigned long flags;
-       migration_req_t req;
-@@ -2307,7 +2378,7 @@ int set_cpus_allowed(task_t *p, unsigned
-        * Can the task run on the task's current CPU? If not then
-        * migrate the thread off to a proper CPU.
-        */
--      if (new_mask & (1UL << task_cpu(p))) {
-+      if (cpu_isset(task_cpu(p), new_mask)) {
-               task_rq_unlock(rq, &flags);
-               return 0;
-       }
-@@ -2377,7 +2448,7 @@ static int migration_thread(void * data)
-        * migration thread on this CPU, guaranteed (we're started
-        * serially).
-        */
--      set_cpus_allowed(current, 1UL << cpu);
-+      set_cpus_allowed(current, cpumask_of_cpu(cpu));
-       ret = setscheduler(0, SCHED_FIFO, &param);
-@@ -2541,7 +2612,7 @@ void __might_sleep(char *file, int line)
-               if (time_before(jiffies, prev_jiffy + HZ))
-                       return;
-               prev_jiffy = jiffies;
--              printk(KERN_ERR "Debug: sleeping function called from illegal"
-+              printk(KERN_ERR "Debug: sleeping function called from invalid"
-                               " context at %s:%d\n", file, line);
-               dump_stack();
-       }
---- linux-2.6.0-test1/kernel/softirq.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/kernel/softirq.c        2003-07-19 17:04:53.000000000 -0700
-@@ -59,11 +59,22 @@ static inline void wakeup_softirqd(void)
-               wake_up_process(tsk);
- }
-+/*
-+ * We restart softirq processing MAX_SOFTIRQ_RESTART times,
-+ * and we fall back to softirqd after that.
-+ *
-+ * This number has been established via experimentation.
-+ * The two things to balance is latency against fairness -
-+ * we want to handle softirqs as soon as possible, but they
-+ * should not be able to lock up the box.
-+ */
-+#define MAX_SOFTIRQ_RESTART 10
-+
- asmlinkage void do_softirq(void)
- {
-+      int max_restart = MAX_SOFTIRQ_RESTART;
-       __u32 pending;
-       unsigned long flags;
--      __u32 mask;
-       if (in_interrupt())
-               return;
-@@ -75,7 +86,6 @@ asmlinkage void do_softirq(void)
-       if (pending) {
-               struct softirq_action *h;
--              mask = ~pending;
-               local_bh_disable();
- restart:
-               /* Reset the pending bitmask before enabling irqs */
-@@ -95,10 +105,8 @@ restart:
-               local_irq_disable();
-               pending = local_softirq_pending();
--              if (pending & mask) {
--                      mask &= ~pending;
-+              if (pending && --max_restart)
-                       goto restart;
--              }
-               if (pending)
-                       wakeup_softirqd();
-               __local_bh_enable();
-@@ -322,9 +330,8 @@ static int ksoftirqd(void * __bind_cpu)
-       current->flags |= PF_IOTHREAD;
-       /* Migrate to the right CPU */
--      set_cpus_allowed(current, 1UL << cpu);
--      if (smp_processor_id() != cpu)
--              BUG();
-+      set_cpus_allowed(current, cpumask_of_cpu(cpu));
-+      BUG_ON(smp_processor_id() != cpu);
-       __set_current_state(TASK_INTERRUPTIBLE);
-       mb();
---- linux-2.6.0-test1/kernel/suspend.c 2003-07-10 18:50:32.000000000 -0700
-+++ 25/kernel/suspend.c        2003-07-19 17:03:51.000000000 -0700
-@@ -52,7 +52,6 @@
- #include <linux/genhd.h>
- #include <linux/kernel.h>
- #include <linux/major.h>
--#include <linux/blk.h>
- #include <linux/swap.h>
- #include <linux/pm.h>
- #include <linux/device.h>
---- linux-2.6.0-test1/kernel/sys.c     2003-07-13 21:44:35.000000000 -0700
-+++ 25/kernel/sys.c    2003-07-19 17:03:51.000000000 -0700
-@@ -601,6 +601,14 @@ static int set_user(uid_t new_ruid, int 
-       new_user = alloc_uid(new_ruid);
-       if (!new_user)
-               return -EAGAIN;
-+
-+      if (atomic_read(&new_user->processes) >=
-+                              current->rlim[RLIMIT_NPROC].rlim_cur &&
-+                      new_user != &root_user) {
-+              free_uid(new_user);
-+              return -EAGAIN;
-+      }
-+
-       switch_uid(new_user);
-       if(dumpclear)
-@@ -1159,6 +1167,7 @@ asmlinkage long sys_newuname(struct new_
- asmlinkage long sys_sethostname(char __user *name, int len)
- {
-       int errno;
-+      char tmp[__NEW_UTS_LEN];
-       if (!capable(CAP_SYS_ADMIN))
-               return -EPERM;
-@@ -1166,7 +1175,8 @@ asmlinkage long sys_sethostname(char __u
-               return -EINVAL;
-       down_write(&uts_sem);
-       errno = -EFAULT;
--      if (!copy_from_user(system_utsname.nodename, name, len)) {
-+      if (!copy_from_user(tmp, name, len)) {
-+              memcpy(system_utsname.nodename, tmp, len);
-               system_utsname.nodename[len] = 0;
-               errno = 0;
-       }
-@@ -1198,6 +1208,7 @@ asmlinkage long sys_gethostname(char __u
- asmlinkage long sys_setdomainname(char __user *name, int len)
- {
-       int errno;
-+      char tmp[__NEW_UTS_LEN];
-       if (!capable(CAP_SYS_ADMIN))
-               return -EPERM;
-@@ -1206,9 +1217,10 @@ asmlinkage long sys_setdomainname(char _
-       down_write(&uts_sem);
-       errno = -EFAULT;
--      if (!copy_from_user(system_utsname.domainname, name, len)) {
--              errno = 0;
-+      if (!copy_from_user(tmp, name, len)) {
-+              memcpy(system_utsname.domainname, tmp, len);
-               system_utsname.domainname[len] = 0;
-+              errno = 0;
-       }
-       up_write(&uts_sem);
-       return errno;
---- linux-2.6.0-test1/kernel/time.c    2003-06-16 22:32:21.000000000 -0700
-+++ 25/kernel/time.c   2003-07-19 17:03:51.000000000 -0700
-@@ -66,7 +66,7 @@ asmlinkage long sys_time(int * tloc)
-  * architectures that need it).
-  */
-  
--asmlinkage long sys_stime(int * tptr)
-+asmlinkage long sys_stime(time_t *tptr)
- {
-       struct timespec tv;
-@@ -160,22 +160,25 @@ int do_sys_settimeofday(struct timespec 
-       return 0;
- }
--asmlinkage long sys_settimeofday(struct timeval __user *tv, struct timezone __user *tz)
-+asmlinkage long sys_settimeofday(struct timeval __user *tv,
-+                              struct timezone __user *tz)
- {
--      struct timespec new_tv;
-+      struct timeval user_tv;
-+      struct timespec new_ts;
-       struct timezone new_tz;
-       if (tv) {
--              if (copy_from_user(&new_tv, tv, sizeof(*tv)))
-+              if (copy_from_user(&user_tv, tv, sizeof(*tv)))
-                       return -EFAULT;
--              new_tv.tv_nsec *= NSEC_PER_USEC;
-+              new_ts.tv_sec = user_tv.tv_sec;
-+              new_ts.tv_nsec = user_tv.tv_usec * NSEC_PER_USEC;
-       }
-       if (tz) {
-               if (copy_from_user(&new_tz, tz, sizeof(*tz)))
-                       return -EFAULT;
-       }
--      return do_sys_settimeofday(tv ? &new_tv : NULL, tz ? &new_tz : NULL);
-+      return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
- }
- long pps_offset;              /* pps time offset (us) */
---- linux-2.6.0-test1/kernel/timer.c   2003-07-10 18:50:32.000000000 -0700
-+++ 25/kernel/timer.c  2003-07-19 17:04:53.000000000 -0700
-@@ -160,7 +160,7 @@ static void internal_add_timer(tvec_base
-  */
- void add_timer(struct timer_list *timer)
- {
--      tvec_base_t *base = &get_cpu_var(tvec_bases);
-+      tvec_base_t *base = &per_cpu(tvec_bases, get_cpu());
-       unsigned long flags;
-   
-       BUG_ON(timer_pending(timer) || !timer->function);
-@@ -171,7 +171,7 @@ void add_timer(struct timer_list *timer)
-       internal_add_timer(base, timer);
-       timer->base = base;
-       spin_unlock_irqrestore(&base->lock, flags);
--      put_cpu_var(tvec_bases);
-+      put_cpu();
- }
- /***
-@@ -234,7 +234,7 @@ int mod_timer(struct timer_list *timer, 
-               return 1;
-       spin_lock_irqsave(&timer->lock, flags);
--      new_base = &__get_cpu_var(tvec_bases);
-+      new_base = &per_cpu(tvec_bases, smp_processor_id());
- repeat:
-       old_base = timer->base;
-@@ -792,7 +792,7 @@ seqlock_t xtime_lock __cacheline_aligned
-  */
- static void run_timer_softirq(struct softirq_action *h)
- {
--      tvec_base_t *base = &__get_cpu_var(tvec_bases);
-+      tvec_base_t *base = &per_cpu(tvec_bases, smp_processor_id());
-       if (time_after_eq(jiffies, base->timer_jiffies))
-               __run_timers(base);
---- linux-2.6.0-test1/kernel/workqueue.c       2003-07-02 14:53:18.000000000 -0700
-+++ 25/kernel/workqueue.c      2003-07-19 17:04:07.000000000 -0700
-@@ -176,7 +176,7 @@ static int worker_thread(void *__startup
-       cwq->thread = current;
-       set_user_nice(current, -10);
--      set_cpus_allowed(current, 1UL << cpu);
-+      set_cpus_allowed(current, cpumask_of_cpu(cpu));
-       complete(&startup->done);
---- linux-2.6.0-test1/MAINTAINERS      2003-07-13 21:44:34.000000000 -0700
-+++ 25/MAINTAINERS     2003-07-19 17:04:55.000000000 -0700
-@@ -657,6 +657,11 @@ L:        emu10k1-devel@lists.sourceforge.net
- W:    http://sourceforge.net/projects/emu10k1/
- S:    Maintained
-+EPSON 1355 FRAMEBUFFER DRIVER
-+P:    Christopher Hoover
-+M:    ch@murgatroid.com, ch@hpl.hp.com
-+S:    Maintained
-+
- ETHEREXPRESS-16 NETWORK DRIVER
- P:    Philip Blundell
- M:    Philip.Blundell@pobox.com
-@@ -973,7 +978,7 @@ M: scott.feldman@intel.com
- S:    Supported
- INTERMEZZO FILE SYSTEM
--P:    Chen Yang
-+P:    Cluster File Systems    
- M:    intermezzo-devel@lists.sf.net
- W:    http://www.inter-mezzo.org/
- L:    intermezzo-discuss@lists.sourceforge.net
-@@ -1076,6 +1081,12 @@ L:      kbuild-devel@lists.sourceforge.net
- W:    http://kbuild.sourceforge.net
- S:    Maintained 
-+KGDB FOR I386 PLATFORM
-+P:    George Anzinger
-+M:    george@mvista.com
-+L:    linux-net@vger.kernel.org
-+S:    Supported
-+
- KERNEL NFSD
- P:    Neil Brown
- M:    neilb@cse.unsw.edu.au
---- linux-2.6.0-test1/Makefile 2003-07-13 21:44:34.000000000 -0700
-+++ 25/Makefile        2003-07-19 17:03:58.000000000 -0700
-@@ -1,7 +1,7 @@
- VERSION = 2
- PATCHLEVEL = 6
- SUBLEVEL = 0
--EXTRAVERSION = -test1
-+EXTRAVERSION = -test1-mm2
- # *DOCUMENTATION*
- # To see a list of typical targets execute "make help"
-@@ -781,7 +781,8 @@ rpm:       clean spec
-       tar -cvz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
-       rm $(KERNELPATH) ; \
-       cd $(TOPDIR) ; \
--      $(CONFIG_SHELL) $(srctree)/scripts/mkversion > .version ; \
-+      $(CONFIG_SHELL) $(srctree)/scripts/mkversion > .tmp_version ; \
-+      mv -f .tmp_version .version; \
-       $(RPM) -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
-       rm $(TOPDIR)/../$(KERNELPATH).tar.gz
---- linux-2.6.0-test1/mm/bootmem.c     2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/bootmem.c    2003-07-19 17:03:51.000000000 -0700
-@@ -183,7 +183,7 @@ restart_scan:
-       for (i = preferred; i < eidx; i += incr) {
-               unsigned long j;
-               i = find_next_zero_bit(bdata->node_bootmem_map, eidx, i);
--              i = (i + incr - 1) & -incr;
-+              i = ALIGN(i, incr);
-               if (test_bit(i, bdata->node_bootmem_map))
-                       continue;
-               for (j = i + 1; j < i + areasize; ++j) {
-@@ -195,7 +195,7 @@ restart_scan:
-               start = i;
-               goto found;
-       fail_block:
--              ;
-+              i = ALIGN(j, incr);
-       }
-       if (preferred > offset) {
---- linux-2.6.0-test1/mm/filemap.c     2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/filemap.c    2003-07-19 17:07:03.000000000 -0700
-@@ -265,21 +265,42 @@ static wait_queue_head_t *page_waitqueue
-       return &zone->wait_table[hash_ptr(page, zone->wait_table_bits)];
- }
--void wait_on_page_bit(struct page *page, int bit_nr)
-+/*
-+ * wait for the specified page bit to be cleared
-+ * this could be a synchronous wait or could just queue an async
-+ * notification callback depending on the wait queue entry parameter
-+ *
-+ * A NULL wait queue parameter defaults to sync behaviour
-+ */
-+int wait_on_page_bit_wq(struct page *page, int bit_nr, wait_queue_t *wait)
- {
-       wait_queue_head_t *waitqueue = page_waitqueue(page);
--      DEFINE_WAIT(wait);
-+      DEFINE_WAIT(local_wait);
-+
-+      if (!wait)
-+              wait = &local_wait; /* default to a sync wait entry */
-       do {
--              prepare_to_wait(waitqueue, &wait, TASK_UNINTERRUPTIBLE);
-+              prepare_to_wait(waitqueue, wait, TASK_UNINTERRUPTIBLE);
-               if (test_bit(bit_nr, &page->flags)) {
-                       sync_page(page);
-+                      if (!is_sync_wait(wait)) {
-+                              /*
-+                               * if we've queued an async wait queue
-+                               * callback do not block; just tell the
-+                               * caller to return and retry later when
-+                               * the callback is notified
-+                               */
-+                              return -EIOCBRETRY;
-+                      }
-                       io_schedule();
-               }
-       } while (test_bit(bit_nr, &page->flags));
--      finish_wait(waitqueue, &wait);
-+      finish_wait(waitqueue, wait);
-+
-+      return 0;
- }
--EXPORT_SYMBOL(wait_on_page_bit);
-+EXPORT_SYMBOL(wait_on_page_bit_wq);
- /**
-  * unlock_page() - unlock a locked page
-@@ -289,7 +310,9 @@ EXPORT_SYMBOL(wait_on_page_bit);
-  * Unlocks the page and wakes up sleepers in ___wait_on_page_locked().
-  * Also wakes sleepers in wait_on_page_writeback() because the wakeup
-  * mechananism between PageLocked pages and PageWriteback pages is shared.
-- * But that's OK - sleepers in wait_on_page_writeback() just go back to sleep.
-+ * But that's OK - sleepers in wait_on_page_writeback() just go back to sleep,
-+ * or in case the wakeup notifies async wait queue entries, as in the case
-+ * of aio, retries would be triggered and may re-queue their callbacks.
-  *
-  * The first mb is necessary to safely close the critical section opened by the
-  * TestSetPageLocked(), the second mb is necessary to enforce ordering between
-@@ -326,26 +349,51 @@ void end_page_writeback(struct page *pag
- EXPORT_SYMBOL(end_page_writeback);
- /*
-- * Get a lock on the page, assuming we need to sleep to get it.
-+ * Get a lock on the page, assuming we need to either sleep to get it
-+ * or to queue an async notification callback to try again when its
-+ * available.
-+ *
-+ * A NULL wait queue parameter defaults to sync behaviour. Otherwise
-+ * it specifies the wait queue entry to be used for async notification
-+ * or waiting.
-  *
-  * Ugly: running sync_page() in state TASK_UNINTERRUPTIBLE is scary.  If some
-  * random driver's requestfn sets TASK_RUNNING, we could busywait.  However
-  * chances are that on the second loop, the block layer's plug list is empty,
-  * so sync_page() will then return in state TASK_UNINTERRUPTIBLE.
-  */
--void __lock_page(struct page *page)
-+int __lock_page_wq(struct page *page, wait_queue_t *wait)
- {
-       wait_queue_head_t *wqh = page_waitqueue(page);
--      DEFINE_WAIT(wait);
-+      DEFINE_WAIT(local_wait);
-+
-+      if (!wait)
-+              wait = &local_wait;
-       while (TestSetPageLocked(page)) {
--              prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
-+              prepare_to_wait(wqh, wait, TASK_UNINTERRUPTIBLE);
-               if (PageLocked(page)) {
-                       sync_page(page);
-+                      if (!is_sync_wait(wait)) {
-+                              /*
-+                               * if we've queued an async wait queue
-+                               * callback do not block; just tell the
-+                               * caller to return and retry later when
-+                               * the callback is notified
-+                               */
-+                              return -EIOCBRETRY;
-+                      }
-                       io_schedule();
-               }
-       }
--      finish_wait(wqh, &wait);
-+      finish_wait(wqh, wait);
-+      return 0;
-+}
-+EXPORT_SYMBOL(__lock_page_wq);
-+
-+void __lock_page(struct page *page)
-+{
-+      __lock_page_wq(page, NULL);
- }
- EXPORT_SYMBOL(__lock_page);
-@@ -395,8 +443,8 @@ struct page *find_trylock_page(struct ad
-  *
-  * Returns zero if the page was not present. find_lock_page() may sleep.
-  */
--struct page *find_lock_page(struct address_space *mapping,
--                              unsigned long offset)
-+struct page *find_lock_page_wq(struct address_space *mapping,
-+                              unsigned long offset, wait_queue_t *wait)
- {
-       struct page *page;
-@@ -407,7 +455,10 @@ repeat:
-               page_cache_get(page);
-               if (TestSetPageLocked(page)) {
-                       spin_unlock(&mapping->page_lock);
--                      lock_page(page);
-+                      if (-EIOCBRETRY == lock_page_wq(page, wait)) {
-+                              page_cache_release(page);
-+                              return ERR_PTR(-EIOCBRETRY);
-+                      }
-                       spin_lock(&mapping->page_lock);
-                       /* Has the page been truncated while we slept? */
-@@ -422,6 +473,12 @@ repeat:
-       return page;
- }
-+struct page *find_lock_page(struct address_space *mapping,
-+                              unsigned long offset)
-+{
-+      return find_lock_page_wq(mapping, offset, NULL);
-+}
-+
- /**
-  * find_or_create_page - locate or add a pagecache page
-  *
-@@ -544,21 +601,39 @@ void do_generic_mapping_read(struct addr
-                            read_actor_t actor)
- {
-       struct inode *inode = mapping->host;
--      unsigned long index, offset;
-+      unsigned long index, offset, last, end_index;
-       struct page *cached_page;
-+      loff_t isize = i_size_read(inode);
-       int error;
-       cached_page = NULL;
-       index = *ppos >> PAGE_CACHE_SHIFT;
-       offset = *ppos & ~PAGE_CACHE_MASK;
-+      last = (*ppos + desc->count) >> PAGE_CACHE_SHIFT;
-+      end_index = isize >> PAGE_CACHE_SHIFT;
-+      if (last > end_index)
-+              last = end_index;
-+
-+      /* Don't repeat the readahead if we are executing aio retries */
-+      if (in_aio()) {
-+              if (is_retried_kiocb(io_wait_to_kiocb(current->io_wait)))
-+                      goto done_readahead;
-+      }
-+
-+      /*
-+       * Let the readahead logic know upfront about all
-+       * the pages we'll need to satisfy this request
-+       */
-+      for (; index < last; index++)
-+              page_cache_readahead(mapping, ra, filp, index);
-+      index = *ppos >> PAGE_CACHE_SHIFT;
-+
-+done_readahead:
-       for (;;) {
-               struct page *page;
--              unsigned long end_index, nr, ret;
--              loff_t isize = i_size_read(inode);
-+              unsigned long nr, ret;
--              end_index = isize >> PAGE_CACHE_SHIFT;
--                      
-               if (index > end_index)
-                       break;
-               nr = PAGE_CACHE_SIZE;
-@@ -569,7 +644,6 @@ void do_generic_mapping_read(struct addr
-               }
-               cond_resched();
--              page_cache_readahead(mapping, ra, filp, index);
-               nr = nr - offset;
- find_page:
-@@ -619,7 +693,12 @@ page_not_up_to_date:
-                       goto page_ok;
-               /* Get exclusive access to the page ... */
--              lock_page(page);
-+
-+              if (lock_page_wq(page, current->io_wait)) {
-+                      pr_debug("queued lock page \n");
-+                      error = -EIOCBRETRY;
-+                      goto sync_error;
-+              }
-               /* Did it get unhashed before we got the lock? */
-               if (!page->mapping) {
-@@ -641,13 +720,23 @@ readpage:
-               if (!error) {
-                       if (PageUptodate(page))
-                               goto page_ok;
--                      wait_on_page_locked(page);
-+                      if (wait_on_page_locked_wq(page, current->io_wait)) {
-+                              pr_debug("queued wait_on_page \n");
-+                              error = -EIOCBRETRY;
-+                              goto sync_error;
-+                      }
-+
-                       if (PageUptodate(page))
-                               goto page_ok;
-                       error = -EIO;
-               }
--              /* UHHUH! A synchronous read error occurred. Report it */
-+sync_error:
-+              /* We don't have uptodate data in the page yet */
-+              /* Could be due to an error or because we need to
-+               * retry when we get an async i/o notification.
-+               * Report the reason.
-+               */
-               desc->error = error;
-               page_cache_release(page);
-               break;
-@@ -1385,7 +1474,9 @@ __grab_cache_page(struct address_space *
-       int err;
-       struct page *page;
- repeat:
--      page = find_lock_page(mapping, index);
-+      page = find_lock_page_wq(mapping, index, current->io_wait);
-+      if (IS_ERR(page))
-+              return page;
-       if (!page) {
-               if (!*cached_page) {
-                       *cached_page = page_cache_alloc(mapping);
-@@ -1672,7 +1763,6 @@ generic_file_aio_write_nolock(struct kio
-       if (err)
-               goto out;
--
-       if (count == 0)
-               goto out;
-@@ -1726,6 +1816,10 @@ generic_file_aio_write_nolock(struct kio
-               fault_in_pages_readable(buf, bytes);
-               page = __grab_cache_page(mapping,index,&cached_page,&lru_pvec);
-+              if (IS_ERR(page)) {
-+                      status = PTR_ERR(page);
-+                      break;
-+              }
-               if (!page) {
-                       status = -ENOMEM;
-                       break;
-@@ -1776,7 +1870,11 @@ generic_file_aio_write_nolock(struct kio
-               page_cache_release(page);
-               if (status < 0)
-                       break;
--              balance_dirty_pages_ratelimited(mapping);
-+              status = balance_dirty_pages_ratelimited(mapping);
-+              if (status < 0) {
-+                      pr_debug("async balance_dirty_pages\n");
-+                      break;
-+              }
-               cond_resched();
-       } while (count);
-       *ppos = pos;
-@@ -1787,12 +1885,14 @@ generic_file_aio_write_nolock(struct kio
-       /*
-        * For now, when the user asks for O_SYNC, we'll actually give O_DSYNC
-        */
--      if (status >= 0) {
--              if ((file->f_flags & O_SYNC) || IS_SYNC(inode))
--                      status = generic_osync_inode(inode,
--                                      OSYNC_METADATA|OSYNC_DATA);
-+      if (likely(status >= 0)) {
-+              if (unlikely((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+                      if (!a_ops->writepage)
-+                              status = generic_osync_inode(inode,
-+                                              OSYNC_METADATA|OSYNC_DATA);
-+              }
-       }
--      
-+
- out_status:   
-       err = written ? written : status;
- out:
-@@ -1819,18 +1919,43 @@ ssize_t generic_file_aio_write(struct ki
-                              size_t count, loff_t pos)
- {
-       struct file *file = iocb->ki_filp;
--      struct inode *inode = file->f_dentry->d_inode->i_mapping->host;
--      ssize_t err;
--      struct iovec local_iov = { .iov_base = (void __user *)buf, .iov_len = count };
-+      struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
-+      struct inode *inode = mapping->host;
-+      ssize_t ret;
-+      struct iovec local_iov = { .iov_base = (void __user *)buf,
-+                                      .iov_len = count };
-       BUG_ON(iocb->ki_pos != pos);
-+      if (!buf && !is_sync_kiocb(iocb)) {
-+              /* nothing to transfer, may just need to sync data */
-+              ret = count;
-+              goto osync;
-+      }
-+
-       down(&inode->i_sem);
--      err = generic_file_aio_write_nolock(iocb, &local_iov, 1, 
-+      ret = generic_file_aio_write_nolock(iocb, &local_iov, 1,
-                                               &iocb->ki_pos);
-       up(&inode->i_sem);
--      return err;
-+      /*
-+       * Avoid doing a sync in parts for aio - its more efficient to
-+       * call in again after all the data has been copied
-+       */
-+      if (!is_sync_kiocb(iocb))
-+              return ret;
-+
-+osync:
-+      if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+              ssize_t err;
-+
-+              err = sync_page_range(inode, mapping, pos, ret);
-+              if (err < 0)
-+                      ret = err;
-+              else
-+                      iocb->ki_pos = pos + err;
-+      }
-+      return ret;
- }
- EXPORT_SYMBOL(generic_file_aio_write);
- EXPORT_SYMBOL(generic_file_aio_write_nolock);
-@@ -1838,15 +1963,24 @@ EXPORT_SYMBOL(generic_file_aio_write_nol
- ssize_t generic_file_write(struct file *file, const char __user *buf,
-                          size_t count, loff_t *ppos)
- {
--      struct inode    *inode = file->f_dentry->d_inode->i_mapping->host;
--      ssize_t         err;
--      struct iovec local_iov = { .iov_base = (void __user *)buf, .iov_len = count };
-+      struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
-+      struct inode *inode = mapping->host;
-+      ssize_t ret;
-+      struct iovec local_iov = { .iov_base = (void __user *)buf,
-+                                      .iov_len = count };
-       down(&inode->i_sem);
--      err = generic_file_write_nolock(file, &local_iov, 1, ppos);
-+      ret = generic_file_write_nolock(file, &local_iov, 1, ppos);
-       up(&inode->i_sem);
--      return err;
-+      if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+              ssize_t err;
-+
-+              err = sync_page_range(inode, mapping, *ppos - ret, ret);
-+              if (err < 0)
-+                      ret = err;
-+      }
-+      return ret;
- }
- ssize_t generic_file_readv(struct file *filp, const struct iovec *iov,
-@@ -1863,7 +1997,7 @@ ssize_t generic_file_readv(struct file *
- }
- ssize_t generic_file_writev(struct file *file, const struct iovec *iov,
--                      unsigned long nr_segs, loff_t * ppos) 
-+                      unsigned long nr_segs, loff_t *ppos)
- {
-       struct inode *inode = file->f_dentry->d_inode;
-       ssize_t ret;
-@@ -1871,6 +2005,15 @@ ssize_t generic_file_writev(struct file 
-       down(&inode->i_sem);
-       ret = generic_file_write_nolock(file, iov, nr_segs, ppos);
-       up(&inode->i_sem);
-+
-+      if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) {
-+              ssize_t err;
-+
-+              err = sync_page_range(inode, inode->i_mapping,
-+                                      *ppos - ret, ret);
-+              if (err < 0)
-+                      ret = err;
-+      }
-       return ret;
- }
---- linux-2.6.0-test1/mm/fremap.c      2003-06-14 12:17:56.000000000 -0700
-+++ 25/mm/fremap.c     2003-07-19 17:07:16.000000000 -0700
-@@ -67,11 +67,11 @@ int install_page(struct mm_struct *mm, s
-       pgd = pgd_offset(mm, addr);
-       spin_lock(&mm->page_table_lock);
--      pmd = pmd_alloc(mm, pgd, addr);
-+      pmd = pmd_alloc_map(mm, pgd, addr);
-       if (!pmd)
-               goto err_unlock;
--      pte = pte_alloc_map(mm, pmd, addr);
-+      pte = pte_alloc_map(mm, pgd, &pmd, addr);
-       if (!pte)
-               goto err_unlock;
-@@ -82,6 +82,7 @@ int install_page(struct mm_struct *mm, s
-       set_pte(pte, mk_pte(page, prot));
-       pte_chain = page_add_rmap(page, pte, pte_chain);
-       pte_unmap(pte);
-+      pmd_unmap(pmd);
-       if (flush)
-               flush_tlb_page(vma, addr);
-       update_mmu_cache(vma, addr, *pte);
---- linux-2.6.0-test1/mm/memory.c      2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/memory.c     2003-07-19 17:07:16.000000000 -0700
-@@ -104,6 +104,7 @@ static inline void free_one_pgd(struct m
- {
-       int j;
-       pmd_t * pmd;
-+      struct page *page;
-       if (pgd_none(*dir))
-               return;
-@@ -112,11 +113,13 @@ static inline void free_one_pgd(struct m
-               pgd_clear(dir);
-               return;
-       }
--      pmd = pmd_offset(dir, 0);
-+      page = pgd_page(*dir);
-+      pmd = pmd_offset_map(dir, 0);
-       pgd_clear(dir);
-       for (j = 0; j < PTRS_PER_PMD ; j++)
-               free_one_pmd(tlb, pmd+j);
--      pmd_free_tlb(tlb, pmd);
-+      pmd_unmap(pmd);
-+      pmd_free_tlb(tlb, page);
- }
- /*
-@@ -136,30 +139,38 @@ void clear_page_tables(struct mmu_gather
-       } while (--nr);
- }
--pte_t * pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
-+/*
-+ * error return happens with pmd unmapped
-+ */
-+pte_t *pte_alloc_map(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd, unsigned long addr)
- {
--      if (!pmd_present(*pmd)) {
-+      if (!pmd_present(**pmd)) {
-               struct page *new;
-+              pmd_unmap(*pmd);
-               spin_unlock(&mm->page_table_lock);
--              new = pte_alloc_one(mm, address);
-+              new = pte_alloc_one(mm, addr);
-               spin_lock(&mm->page_table_lock);
--              if (!new)
-+              if (!new) {
-+                      *pmd = NULL;
-                       return NULL;
-+              }
-+
-+              *pmd = pmd_offset_map(pgd, addr);
-               /*
-                * Because we dropped the lock, we should re-check the
-                * entry, as somebody else could have populated it..
-                */
--              if (pmd_present(*pmd)) {
-+              if (pmd_present(**pmd)) {
-                       pte_free(new);
-                       goto out;
-               }
--              pgtable_add_rmap(new, mm, address);
--              pmd_populate(mm, pmd, new);
-+              pgtable_add_rmap(new, mm, addr);
-+              pmd_populate(mm, *pmd, new);
-       }
- out:
--      return pte_offset_map(pmd, address);
-+      return pte_offset_map(*pmd, addr);
- }
- pte_t * pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
-@@ -199,7 +210,7 @@ out:
-  *         variable count and make things faster. -jj
-  *
-  * dst->page_table_lock is held on entry and exit,
-- * but may be dropped within pmd_alloc() and pte_alloc_map().
-+ * but may be dropped within pmd_alloc_map() and pte_alloc_map().
-  */
- int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
-                       struct vm_area_struct *vma)
-@@ -244,11 +255,10 @@ skip_copy_pmd_range:     address = (address 
-                       continue;
-               }
--              src_pmd = pmd_offset(src_pgd, address);
--              dst_pmd = pmd_alloc(dst, dst_pgd, address);
-+              dst_pmd = pmd_alloc_map(dst, dst_pgd, address);
-               if (!dst_pmd)
-                       goto nomem;
--
-+              src_pmd = pmd_offset_map_nested(src_pgd, address);
-               do {
-                       pte_t * src_pte, * dst_pte;
-               
-@@ -261,15 +271,20 @@ skip_copy_pmd_range:     address = (address 
-                               pmd_clear(src_pmd);
- skip_copy_pte_range:
-                               address = (address + PMD_SIZE) & PMD_MASK;
--                              if (address >= end)
-+                              if (address >= end) {
-+                                      pmd_unmap(dst_pmd);
-+                                      pmd_unmap_nested(src_pmd);
-                                       goto out;
-+                              }
-                               goto cont_copy_pmd_range;
-                       }
--                      dst_pte = pte_alloc_map(dst, dst_pmd, address);
-+                      pmd_unmap_nested(src_pmd);
-+                      dst_pte = pte_alloc_map(dst, dst_pgd, &dst_pmd, address);
-                       if (!dst_pte)
-                               goto nomem;
-                       spin_lock(&src->page_table_lock);       
-+                      src_pmd = pmd_offset_map_nested(src_pgd, address);
-                       src_pte = pte_offset_map_nested(src_pmd, address);
-                       do {
-                               pte_t pte = *src_pte;
-@@ -336,6 +351,8 @@ skip_copy_pte_range:
-                                */
-                               pte_unmap_nested(src_pte);
-                               pte_unmap(dst_pte);
-+                              pmd_unmap_nested(src_pmd);
-+                              pmd_unmap(dst_pmd);
-                               spin_unlock(&src->page_table_lock);     
-                               spin_unlock(&dst->page_table_lock);     
-                               pte_chain = pte_chain_alloc(GFP_KERNEL);
-@@ -343,12 +360,16 @@ skip_copy_pte_range:
-                               if (!pte_chain)
-                                       goto nomem;
-                               spin_lock(&src->page_table_lock);
-+                              dst_pmd = pmd_offset_map(dst_pgd, address);
-+                              src_pmd = pmd_offset_map_nested(src_pgd, address);
-                               dst_pte = pte_offset_map(dst_pmd, address);
-                               src_pte = pte_offset_map_nested(src_pmd,
-                                                               address);
- cont_copy_pte_range_noset:
-                               address += PAGE_SIZE;
-                               if (address >= end) {
-+                                      pmd_unmap(dst_pmd);
-+                                      pmd_unmap_nested(src_pmd);
-                                       pte_unmap_nested(src_pte);
-                                       pte_unmap(dst_pte);
-                                       goto out_unlock;
-@@ -364,6 +385,8 @@ cont_copy_pmd_range:
-                       src_pmd++;
-                       dst_pmd++;
-               } while ((unsigned long)src_pmd & PMD_TABLE_MASK);
-+              pmd_unmap_nested(src_pmd-1);
-+              pmd_unmap(dst_pmd-1);
-       }
- out_unlock:
-       spin_unlock(&src->page_table_lock);
-@@ -439,7 +462,7 @@ zap_pmd_range(struct mmu_gather *tlb, pg
-               pgd_clear(dir);
-               return;
-       }
--      pmd = pmd_offset(dir, address);
-+      pmd = pmd_offset_map(dir, address);
-       end = address + size;
-       if (end > ((address + PGDIR_SIZE) & PGDIR_MASK))
-               end = ((address + PGDIR_SIZE) & PGDIR_MASK);
-@@ -448,6 +471,7 @@ zap_pmd_range(struct mmu_gather *tlb, pg
-               address = (address + PMD_SIZE) & PMD_MASK; 
-               pmd++;
-       } while (address < end);
-+      pmd_unmap(pmd - 1);
- }
- void unmap_page_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
-@@ -629,20 +653,27 @@ follow_page(struct mm_struct *mm, unsign
-       if (pgd_none(*pgd) || pgd_bad(*pgd))
-               goto out;
--      pmd = pmd_offset(pgd, address);
-+      pmd = pmd_offset_map(pgd, address);
-       if (pmd_none(*pmd))
--              goto out;
--      if (pmd_huge(*pmd))
--              return follow_huge_pmd(mm, address, pmd, write);
--      if (pmd_bad(*pmd))
--              goto out;
-+              goto out_unmap;
-+      if (pmd_bad(*pmd)) {
-+              pmd_ERROR(*pmd);
-+              pmd_clear(pmd);
-+              goto out_unmap;
-+      }
-+      if (pmd_huge(*pmd)) {
-+              struct page *page = follow_huge_pmd(mm, address, pmd, write);
-+              pmd_unmap(pmd);
-+              return page;
-+      }
-       ptep = pte_offset_map(pmd, address);
-       if (!ptep)
--              goto out;
-+              goto out_unmap;
-       pte = *ptep;
-       pte_unmap(ptep);
-+      pmd_unmap(pmd);
-       if (pte_present(pte)) {
-               if (!write || (pte_write(pte) && pte_dirty(pte))) {
-                       pfn = pte_pfn(pte);
-@@ -653,6 +684,9 @@ follow_page(struct mm_struct *mm, unsign
- out:
-       return NULL;
-+out_unmap:
-+      pmd_unmap(pmd);
-+      goto out;
- }
- /* 
-@@ -711,7 +745,7 @@ int get_user_pages(struct task_struct *t
-                       pgd = pgd_offset_k(pg);
-                       if (!pgd)
-                               return i ? : -EFAULT;
--                      pmd = pmd_offset(pgd, pg);
-+                      pmd = pmd_offset_kernel(pgd, pg);
-                       if (!pmd)
-                               return i ? : -EFAULT;
-                       pte = pte_offset_kernel(pmd, pg);
-@@ -803,8 +837,8 @@ static void zeromap_pte_range(pte_t * pt
-       } while (address && (address < end));
- }
--static inline int zeromap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address,
--                                    unsigned long size, pgprot_t prot)
-+static inline int zeromap_pmd_range(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd,
-+                      unsigned long address, unsigned long size, pgprot_t prot)
- {
-       unsigned long end;
-@@ -813,13 +847,13 @@ static inline int zeromap_pmd_range(stru
-       if (end > PGDIR_SIZE)
-               end = PGDIR_SIZE;
-       do {
--              pte_t * pte = pte_alloc_map(mm, pmd, address);
-+              pte_t *pte = pte_alloc_map(mm, pgd, pmd, address);
-               if (!pte)
-                       return -ENOMEM;
-               zeromap_pte_range(pte, address, end - address, prot);
-               pte_unmap(pte);
-               address = (address + PMD_SIZE) & PMD_MASK;
--              pmd++;
-+              (*pmd)++;
-       } while (address && (address < end));
-       return 0;
- }
-@@ -839,13 +873,14 @@ int zeromap_page_range(struct vm_area_st
-       spin_lock(&mm->page_table_lock);
-       do {
--              pmd_t *pmd = pmd_alloc(mm, dir, address);
-+              pmd_t *pmd = pmd_alloc_map(mm, dir, address);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
--              error = zeromap_pmd_range(mm, pmd, address, end - address, prot);
-+              error = zeromap_pmd_range(mm, dir, &pmd, address, end - address, prot);
-               if (error)
-                       break;
-+              pmd_unmap(pmd - 1);
-               address = (address + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (address && (address < end));
-@@ -880,8 +915,9 @@ static inline void remap_pte_range(pte_t
-       } while (address && (address < end));
- }
--static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size,
--      unsigned long phys_addr, pgprot_t prot)
-+static inline int remap_pmd_range(struct mm_struct *mm, pgd_t *pgd, pmd_t **pmd,
-+                              unsigned long address, unsigned long size,
-+                              unsigned long phys_addr, pgprot_t prot)
- {
-       unsigned long base, end;
-@@ -892,13 +928,13 @@ static inline int remap_pmd_range(struct
-               end = PGDIR_SIZE;
-       phys_addr -= address;
-       do {
--              pte_t * pte = pte_alloc_map(mm, pmd, base + address);
-+              pte_t *pte = pte_alloc_map(mm, pgd, pmd, base + address);
-               if (!pte)
-                       return -ENOMEM;
-               remap_pte_range(pte, base + address, end - address, address + phys_addr, prot);
-               pte_unmap(pte);
-               address = (address + PMD_SIZE) & PMD_MASK;
--              pmd++;
-+              (*pmd)++;
-       } while (address && (address < end));
-       return 0;
- }
-@@ -920,13 +956,14 @@ int remap_page_range(struct vm_area_stru
-       spin_lock(&mm->page_table_lock);
-       do {
--              pmd_t *pmd = pmd_alloc(mm, dir, from);
-+              pmd_t *pmd = pmd_alloc_map(mm, dir, from);
-               error = -ENOMEM;
-               if (!pmd)
-                       break;
--              error = remap_pmd_range(mm, pmd, from, end - from, phys_addr + from, prot);
-+              error = remap_pmd_range(mm, dir, &pmd, from, end - from, phys_addr + from, prot);
-               if (error)
-                       break;
-+              pmd_unmap(pmd - 1);
-               from = (from + PGDIR_SIZE) & PGDIR_MASK;
-               dir++;
-       } while (from && (from < end));
-@@ -996,6 +1033,7 @@ static int do_wp_page(struct mm_struct *
-                * data, but for the moment just pretend this is OOM.
-                */
-               pte_unmap(page_table);
-+              pmd_unmap(pmd);
-               printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n",
-                               address);
-               goto oom;
-@@ -1010,11 +1048,13 @@ static int do_wp_page(struct mm_struct *
-                       establish_pte(vma, address, page_table,
-                               pte_mkyoung(pte_mkdirty(pte_mkwrite(pte))));
-                       pte_unmap(page_table);
-+                      pmd_unmap(pmd);
-                       ret = VM_FAULT_MINOR;
-                       goto out;
-               }
-       }
-       pte_unmap(page_table);
-+      pmd_unmap(pmd);
-       /*
-        * Ok, we need to copy. Oh, well..
-@@ -1034,6 +1074,7 @@ static int do_wp_page(struct mm_struct *
-        * Re-check the pte - we dropped the lock
-        */
-       spin_lock(&mm->page_table_lock);
-+      pmd = pmd_offset_map(pgd_offset(mm, address), address);
-       page_table = pte_offset_map(pmd, address);
-       if (pte_same(*page_table, pte)) {
-               if (PageReserved(old_page))
-@@ -1047,6 +1088,7 @@ static int do_wp_page(struct mm_struct *
-               new_page = old_page;
-       }
-       pte_unmap(page_table);
-+      pmd_unmap(pmd);
-       page_cache_release(new_page);
-       page_cache_release(old_page);
-       ret = VM_FAULT_MINOR;
-@@ -1062,35 +1104,77 @@ out:
-       return ret;
- }
--static void vmtruncate_list(struct list_head *head, unsigned long pgoff)
-+/*
-+ * Helper function for invalidate_mmap_range().
-+ * Both hba and hlen are page numbers in PAGE_SIZE units.
-+ * An hlen of zero blows away the entire portion file after hba.
-+ */
-+static void
-+invalidate_mmap_range_list(struct list_head *head,
-+                         unsigned long const hba,
-+                         unsigned long const hlen)
- {
--      unsigned long start, end, len, diff;
--      struct vm_area_struct *vma;
-       struct list_head *curr;
--
-+      unsigned long hea;      /* last page of hole. */
-+      unsigned long vba;
-+      unsigned long vea;      /* last page of corresponding uva hole. */
-+      struct vm_area_struct *vp;
-+      unsigned long zba;
-+      unsigned long zea;
-+
-+      hea = hba + hlen - 1;   /* avoid overflow. */
-+      if (hea < hba)
-+              hea = ULONG_MAX;
-       list_for_each(curr, head) {
--              vma = list_entry(curr, struct vm_area_struct, shared);
--              start = vma->vm_start;
--              end = vma->vm_end;
--              len = end - start;
--
--              /* mapping wholly truncated? */
--              if (vma->vm_pgoff >= pgoff) {
--                      zap_page_range(vma, start, len);
--                      continue;
--              }
-+              vp = list_entry(curr, struct vm_area_struct, shared);
-+              vba = vp->vm_pgoff;
-+              vea = vba + ((vp->vm_end - vp->vm_start) >> PAGE_SHIFT) - 1;
-+              if (hea < vba || vea < hba)
-+                      continue;       /* Mapping disjoint from hole. */
-+              zba = (hba <= vba) ? vba : hba;
-+              zea = (vea <= hea) ? vea : hea;
-+              zap_page_range(vp,
-+                             ((zba - vba) << PAGE_SHIFT) + vp->vm_start,
-+                             (zea - zba + 1) << PAGE_SHIFT);
-+      }
-+}
--              /* mapping wholly unaffected? */
--              len = len >> PAGE_SHIFT;
--              diff = pgoff - vma->vm_pgoff;
--              if (diff >= len)
--                      continue;
-+/**
-+ * invalidate_mmap_range - invalidate the portion of all mmaps
-+ * in the specified address_space corresponding to the specified
-+ * page range in the underlying file.
-+ * @address_space: the address space containing mmaps to be invalidated.
-+ * @holebegin: byte in first page to invalidate, relative to the start of
-+ * the underlying file.  This will be rounded down to a PAGE_SIZE
-+ * boundary.  Note that this is different from vmtruncate(), which
-+ * must keep the partial page.  In contrast, we must get rid of
-+ * partial pages.
-+ * @holelen: size of prospective hole in bytes.  This will be rounded
-+ * up to a PAGE_SIZE boundary.  A holelen of zero truncates to the
-+ * end of the file.
-+ */
-+void invalidate_mmap_range(struct address_space *mapping,
-+                    loff_t const holebegin, loff_t const holelen)
-+{
-+      unsigned long hba = holebegin >> PAGE_SHIFT;
-+      unsigned long hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+
-+      /* Check for overflow. */
-+      if (sizeof(holelen) > sizeof(hlen)) {
-+              long long holeend =
-+                      (holebegin + holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
--              /* Ok, partially affected.. */
--              start += diff << PAGE_SHIFT;
--              len = (len - diff) << PAGE_SHIFT;
--              zap_page_range(vma, start, len);
-+              if (holeend & ~(long long)ULONG_MAX)
-+                      hlen = ULONG_MAX - hba + 1;
-       }
-+      down(&mapping->i_shared_sem);
-+      /* Protect against page fault */
-+      atomic_inc(&mapping->truncate_count);
-+      if (unlikely(!list_empty(&mapping->i_mmap)))
-+              invalidate_mmap_range_list(&mapping->i_mmap, hba, hlen);
-+      if (unlikely(!list_empty(&mapping->i_mmap_shared)))
-+              invalidate_mmap_range_list(&mapping->i_mmap_shared, hba, hlen);
-+      up(&mapping->i_shared_sem);
- }
- /*
-@@ -1103,20 +1187,13 @@ static void vmtruncate_list(struct list_
-  */
- int vmtruncate(struct inode * inode, loff_t offset)
- {
--      unsigned long pgoff;
-       struct address_space *mapping = inode->i_mapping;
-       unsigned long limit;
-       if (inode->i_size < offset)
-               goto do_expand;
-       i_size_write(inode, offset);
--      pgoff = (offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
--      down(&mapping->i_shared_sem);
--      if (unlikely(!list_empty(&mapping->i_mmap)))
--              vmtruncate_list(&mapping->i_mmap, pgoff);
--      if (unlikely(!list_empty(&mapping->i_mmap_shared)))
--              vmtruncate_list(&mapping->i_mmap_shared, pgoff);
--      up(&mapping->i_shared_sem);
-+      invalidate_mmap_range(mapping, offset + PAGE_SIZE - 1, 0);
-       truncate_inode_pages(mapping, offset);
-       goto out_truncate;
-@@ -1180,6 +1257,7 @@ static int do_swap_page(struct mm_struct
-       struct pte_chain *pte_chain = NULL;
-       pte_unmap(page_table);
-+      pmd_unmap(pmd);
-       spin_unlock(&mm->page_table_lock);
-       page = lookup_swap_cache(entry);
-       if (!page) {
-@@ -1191,12 +1269,14 @@ static int do_swap_page(struct mm_struct
-                        * we released the page table lock.
-                        */
-                       spin_lock(&mm->page_table_lock);
-+                      pmd = pmd_offset_map(pgd_offset(mm, address), address);
-                       page_table = pte_offset_map(pmd, address);
-                       if (pte_same(*page_table, orig_pte))
-                               ret = VM_FAULT_OOM;
-                       else
-                               ret = VM_FAULT_MINOR;
-                       pte_unmap(page_table);
-+                      pmd_unmap(pmd);
-                       spin_unlock(&mm->page_table_lock);
-                       goto out;
-               }
-@@ -1219,9 +1299,11 @@ static int do_swap_page(struct mm_struct
-        * released the page table lock.
-        */
-       spin_lock(&mm->page_table_lock);
-+      pmd = pmd_offset_map(pgd_offset(mm, address), address);
-       page_table = pte_offset_map(pmd, address);
-       if (!pte_same(*page_table, orig_pte)) {
-               pte_unmap(page_table);
-+              pmd_unmap(pmd);
-               spin_unlock(&mm->page_table_lock);
-               unlock_page(page);
-               page_cache_release(page);
-@@ -1247,6 +1329,7 @@ static int do_swap_page(struct mm_struct
-       /* No need to invalidate - it was non-present before */
-       update_mmu_cache(vma, address, pte);
-+      pmd_unmap(pmd);
-       pte_unmap(page_table);
-       spin_unlock(&mm->page_table_lock);
- out:
-@@ -1272,11 +1355,13 @@ do_anonymous_page(struct mm_struct *mm, 
-       pte_chain = pte_chain_alloc(GFP_ATOMIC);
-       if (!pte_chain) {
-               pte_unmap(page_table);
-+              pmd_unmap(pmd);
-               spin_unlock(&mm->page_table_lock);
-               pte_chain = pte_chain_alloc(GFP_KERNEL);
-               if (!pte_chain)
-                       goto no_mem;
-               spin_lock(&mm->page_table_lock);
-+              pmd = pmd_offset_map(pgd_offset(mm, addr), addr);
-               page_table = pte_offset_map(pmd, addr);
-       }
-               
-@@ -1287,6 +1372,7 @@ do_anonymous_page(struct mm_struct *mm, 
-       if (write_access) {
-               /* Allocate our own private page. */
-               pte_unmap(page_table);
-+              pmd_unmap(pmd);
-               spin_unlock(&mm->page_table_lock);
-               page = alloc_page(GFP_HIGHUSER);
-@@ -1295,9 +1381,11 @@ do_anonymous_page(struct mm_struct *mm, 
-               clear_user_highpage(page, addr);
-               spin_lock(&mm->page_table_lock);
-+              pmd = pmd_offset_map(pgd_offset(mm, addr), addr);
-               page_table = pte_offset_map(pmd, addr);
-               if (!pte_none(*page_table)) {
-+                      pmd_unmap(pmd);
-                       pte_unmap(page_table);
-                       page_cache_release(page);
-                       spin_unlock(&mm->page_table_lock);
-@@ -1313,6 +1401,7 @@ do_anonymous_page(struct mm_struct *mm, 
-       set_pte(page_table, entry);
-       /* ignores ZERO_PAGE */
-       pte_chain = page_add_rmap(page, page_table, pte_chain);
-+      pmd_unmap(pmd);
-       pte_unmap(page_table);
-       /* No need to invalidate - it was non-present before */
-@@ -1345,16 +1434,22 @@ do_no_page(struct mm_struct *mm, struct 
-       unsigned long address, int write_access, pte_t *page_table, pmd_t *pmd)
- {
-       struct page * new_page;
-+      struct address_space *mapping;
-       pte_t entry;
-       struct pte_chain *pte_chain;
-+      int sequence;
-       int ret;
-       if (!vma->vm_ops || !vma->vm_ops->nopage)
-               return do_anonymous_page(mm, vma, page_table,
-                                       pmd, write_access, address);
-       pte_unmap(page_table);
--      spin_unlock(&mm->page_table_lock);
-+      pmd_unmap(pmd);
-+      mapping = vma->vm_file->f_dentry->d_inode->i_mapping;
-+      sequence = atomic_read(&mapping->truncate_count);
-+      spin_unlock(&mm->page_table_lock);
-+retry:
-       new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, 0);
-       /* no page was available -- either SIGBUS or OOM */
-@@ -1383,6 +1478,18 @@ do_no_page(struct mm_struct *mm, struct 
-       }
-       spin_lock(&mm->page_table_lock);
-+      /*
-+       * For a file-backed vma, someone could have truncated or otherwise
-+       * invalidated this page.  If invalidate_mmap_range got called,
-+       * retry getting the page.
-+       */
-+      if (unlikely(sequence != atomic_read(&mapping->truncate_count))) {
-+              sequence = atomic_read(&mapping->truncate_count);
-+              spin_unlock(&mm->page_table_lock);
-+              page_cache_release(new_page);
-+              goto retry;
-+      }
-+      pmd = pmd_offset_map(pgd_offset(mm, address), address);
-       page_table = pte_offset_map(pmd, address);
-       /*
-@@ -1405,9 +1512,11 @@ do_no_page(struct mm_struct *mm, struct 
-               set_pte(page_table, entry);
-               pte_chain = page_add_rmap(new_page, page_table, pte_chain);
-               pte_unmap(page_table);
-+              pmd_unmap(pmd);
-       } else {
-               /* One of our sibling threads was faster, back out. */
-               pte_unmap(page_table);
-+              pmd_unmap(pmd);
-               page_cache_release(new_page);
-               spin_unlock(&mm->page_table_lock);
-               ret = VM_FAULT_MINOR;
-@@ -1451,6 +1560,7 @@ static int do_file_page(struct mm_struct
-       pgoff = pte_to_pgoff(*pte);
-       pte_unmap(pte);
-+      pmd_unmap(pmd);
-       spin_unlock(&mm->page_table_lock);
-       err = vma->vm_ops->populate(vma, address & PAGE_MASK, PAGE_SIZE, vma->vm_page_prot, pgoff, 0);
-@@ -1511,6 +1621,7 @@ static inline int handle_pte_fault(struc
-       entry = pte_mkyoung(entry);
-       establish_pte(vma, address, pte, entry);
-       pte_unmap(pte);
-+      pmd_unmap(pmd);
-       spin_unlock(&mm->page_table_lock);
-       return VM_FAULT_MINOR;
- }
-@@ -1537,10 +1648,10 @@ int handle_mm_fault(struct mm_struct *mm
-        * and the SMP-safe atomic PTE updates.
-        */
-       spin_lock(&mm->page_table_lock);
--      pmd = pmd_alloc(mm, pgd, address);
-+      pmd = pmd_alloc_map(mm, pgd, address);
-       if (pmd) {
--              pte_t * pte = pte_alloc_map(mm, pmd, address);
-+              pte_t *pte = pte_alloc_map(mm, pgd, &pmd, address);
-               if (pte)
-                       return handle_pte_fault(mm, vma, address, write_access, pte, pmd);
-       }
-@@ -1559,10 +1670,33 @@ int handle_mm_fault(struct mm_struct *mm
-  */
- pmd_t *__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
- {
-+      struct page *page;
-+
-+      spin_unlock(&mm->page_table_lock);
-+      page = pmd_alloc_one(mm, address);
-+      spin_lock(&mm->page_table_lock);
-+      if (!page)
-+              return NULL;
-+
-+      /*
-+       * Because we dropped the lock, we should re-check the
-+       * entry, as somebody else could have populated it..
-+       */
-+      if (pgd_present(*pgd)) {
-+              pmd_free(page);
-+              goto out;
-+      }
-+      pgd_populate(mm, pgd, page);
-+out:
-+      return pmd_offset_map(pgd, address);
-+}
-+
-+pmd_t *__pmd_alloc_kernel(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
-+{
-       pmd_t *new;
-       spin_unlock(&mm->page_table_lock);
--      new = pmd_alloc_one(mm, address);
-+      new = pmd_alloc_one_kernel(mm, address);
-       spin_lock(&mm->page_table_lock);
-       if (!new)
-               return NULL;
-@@ -1572,12 +1706,12 @@ pmd_t *__pmd_alloc(struct mm_struct *mm,
-        * entry, as somebody else could have populated it..
-        */
-       if (pgd_present(*pgd)) {
--              pmd_free(new);
-+              pmd_free(virt_to_page(new));
-               goto out;
-       }
--      pgd_populate(mm, pgd, new);
-+      pgd_populate(mm, pgd, virt_to_page(new));
- out:
--      return pmd_offset(pgd, address);
-+      return pmd_offset_kernel(pgd, address);
- }
- int make_pages_present(unsigned long addr, unsigned long end)
-@@ -1609,7 +1743,7 @@ struct page * vmalloc_to_page(void * vma
-       pte_t *ptep, pte;
-   
-       if (!pgd_none(*pgd)) {
--              pmd = pmd_offset(pgd, addr);
-+              pmd = pmd_offset_map(pgd, addr);
-               if (!pmd_none(*pmd)) {
-                       preempt_disable();
-                       ptep = pte_offset_map(pmd, addr);
-@@ -1619,6 +1753,7 @@ struct page * vmalloc_to_page(void * vma
-                       pte_unmap(ptep);
-                       preempt_enable();
-               }
-+              pmd_unmap(pmd);
-       }
-       return page;
- }
---- linux-2.6.0-test1/mm/mprotect.c    2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/mprotect.c   2003-07-19 17:07:16.000000000 -0700
-@@ -73,7 +73,7 @@ change_pmd_range(pgd_t *pgd, unsigned lo
-               pgd_clear(pgd);
-               return;
-       }
--      pmd = pmd_offset(pgd, address);
-+      pmd = pmd_offset_map(pgd, address);
-       address &= ~PGDIR_MASK;
-       end = address + size;
-       if (end > PGDIR_SIZE)
-@@ -83,6 +83,7 @@ change_pmd_range(pgd_t *pgd, unsigned lo
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
-+      pmd_unmap(pmd - 1);
- }
- static void
---- linux-2.6.0-test1/mm/mremap.c      2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/mremap.c     2003-07-19 17:07:16.000000000 -0700
-@@ -38,7 +38,7 @@ static pte_t *get_one_pte_map_nested(str
-               goto end;
-       }
--      pmd = pmd_offset(pgd, addr);
-+      pmd = pmd_offset_map_nested(pgd, addr);
-       if (pmd_none(*pmd))
-               goto end;
-       if (pmd_bad(*pmd)) {
-@@ -53,6 +53,7 @@ static pte_t *get_one_pte_map_nested(str
-               pte = NULL;
-       }
- end:
-+      pmd_unmap_nested(pmd);
-       return pte;
- }
-@@ -61,12 +62,15 @@ static inline int page_table_present(str
- {
-       pgd_t *pgd;
-       pmd_t *pmd;
-+      int ret;
-       pgd = pgd_offset(mm, addr);
-       if (pgd_none(*pgd))
-               return 0;
--      pmd = pmd_offset(pgd, addr);
--      return pmd_present(*pmd);
-+      pmd = pmd_offset_map(pgd, addr);
-+      ret = pmd_present(*pmd);
-+      pmd_unmap(pmd);
-+      return ret != 0;
- }
- #else
- #define page_table_present(mm, addr)  (1)
-@@ -74,12 +78,15 @@ static inline int page_table_present(str
- static inline pte_t *alloc_one_pte_map(struct mm_struct *mm, unsigned long addr)
- {
-+      pgd_t *pgd;
-       pmd_t *pmd;
-       pte_t *pte = NULL;
--      pmd = pmd_alloc(mm, pgd_offset(mm, addr), addr);
-+      pgd = pgd_offset(mm, addr);
-+      pmd = pmd_alloc_map(mm, pgd, addr);
-       if (pmd)
--              pte = pte_alloc_map(mm, pmd, addr);
-+              pte = pte_alloc_map(mm, pgd, &pmd, addr);
-+      pmd_unmap(pmd);
-       return pte;
- }
---- linux-2.6.0-test1/mm/msync.c       2003-06-14 12:18:07.000000000 -0700
-+++ 25/mm/msync.c      2003-07-19 17:07:16.000000000 -0700
-@@ -82,7 +82,7 @@ static inline int filemap_sync_pmd_range
-               pgd_clear(pgd);
-               return 0;
-       }
--      pmd = pmd_offset(pgd, address);
-+      pmd = pmd_offset_map(pgd, address);
-       if ((address & PGDIR_MASK) != (end & PGDIR_MASK))
-               end = (address & PGDIR_MASK) + PGDIR_SIZE;
-       error = 0;
-@@ -91,6 +91,7 @@ static inline int filemap_sync_pmd_range
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
-+      pmd_unmap(pmd - 1);
-       return error;
- }
---- linux-2.6.0-test1/mm/page-writeback.c      2003-07-02 14:53:18.000000000 -0700
-+++ 25/mm/page-writeback.c     2003-07-19 17:06:58.000000000 -0700
-@@ -28,6 +28,7 @@
- #include <linux/smp.h>
- #include <linux/sysctl.h>
- #include <linux/cpu.h>
-+#include <linux/pagevec.h>
- /*
-  * The maximum number of pages to writeout in a single bdflush/kupdate
-@@ -144,7 +145,7 @@ get_dirty_limits(struct page_state *ps, 
-  * If we're over `background_thresh' then pdflush is woken to perform some
-  * writeout.
-  */
--void balance_dirty_pages(struct address_space *mapping)
-+int balance_dirty_pages(struct address_space *mapping)
- {
-       struct page_state ps;
-       long nr_reclaimable;
-@@ -161,6 +162,7 @@ void balance_dirty_pages(struct address_
-                       .sync_mode      = WB_SYNC_NONE,
-                       .older_than_this = NULL,
-                       .nr_to_write    = write_chunk,
-+                      .nonblocking    = !is_sync_wait(current->io_wait)
-               };
-               get_dirty_limits(&ps, &background_thresh, &dirty_thresh);
-@@ -187,7 +189,11 @@ void balance_dirty_pages(struct address_
-                       if (pages_written >= write_chunk)
-                               break;          /* We've done our duty */
-               }
--              blk_congestion_wait(WRITE, HZ/10);
-+              if (-EIOCBRETRY == blk_congestion_wait_wq(WRITE, HZ/10,
-+                      current->io_wait)) {
-+                      pr_debug("async blk congestion wait\n");
-+                      return -EIOCBRETRY;
-+              }
-       }
-       if (nr_reclaimable + ps.nr_writeback <= dirty_thresh)
-@@ -195,6 +201,8 @@ void balance_dirty_pages(struct address_
-       if (!writeback_in_progress(bdi) && nr_reclaimable > background_thresh)
-               pdflush_operation(background_writeout, 0);
-+
-+      return 0;
- }
- /**
-@@ -210,7 +218,7 @@ void balance_dirty_pages(struct address_
-  * decrease the ratelimiting by a lot, to prevent individual processes from
-  * overshooting the limit by (ratelimit_pages) each.
-  */
--void balance_dirty_pages_ratelimited(struct address_space *mapping)
-+int balance_dirty_pages_ratelimited(struct address_space *mapping)
- {
-       static DEFINE_PER_CPU(int, ratelimits) = 0;
-       long ratelimit;
-@@ -222,10 +230,10 @@ void balance_dirty_pages_ratelimited(str
-       if (get_cpu_var(ratelimits)++ >= ratelimit) {
-               __get_cpu_var(ratelimits) = 0;
-               put_cpu_var(ratelimits);
--              balance_dirty_pages(mapping);
--              return;
-+              return balance_dirty_pages(mapping);
-       }
-       put_cpu_var(ratelimits);
-+      return 0;
- }
- /*
-@@ -560,3 +568,107 @@ int test_clear_page_dirty(struct page *p
-       return 0;
- }
- EXPORT_SYMBOL(test_clear_page_dirty);
-+
-+
-+static ssize_t operate_on_page_range(struct address_space *mapping,
-+              loff_t pos, size_t count, int (*operator)(struct page *))
-+{
-+      pgoff_t first = pos >> PAGE_CACHE_SHIFT;
-+      pgoff_t last = (pos + count - 1) >> PAGE_CACHE_SHIFT;   /* inclusive */
-+      pgoff_t next = first;
-+      struct pagevec pvec;
-+      ssize_t ret = 0, bytes = 0;
-+      int i;
-+
-+      if (count == 0)
-+              return 0;
-+
-+      pagevec_init(&pvec, 0);
-+      while (pagevec_lookup(&pvec, mapping, next,
-+                              min((pgoff_t)PAGEVEC_SIZE, last - next + 1))) {
-+              for (i = 0; i < pagevec_count(&pvec); i++) {
-+                      struct page *page = pvec.pages[i];
-+
-+                      lock_page(page);        /* stabilise ->index */
-+                      if (!page->mapping) {   /* truncated */
-+                              unlock_page(page);
-+                              next++;
-+                              continue;
-+                      }
-+                      next = page->index + 1;
-+                      ret = (*operator)(page);
-+                      if (ret == -EIOCBRETRY)
-+                              break;
-+                      if (PageError(page)) {
-+                              if (!ret)
-+                                      ret = -EIO;
-+                      }
-+                      if (next > last)
-+                              break;
-+              }
-+              pagevec_release(&pvec);
-+              if ((next > last) || (ret == -EIOCBRETRY))
-+                      break;
-+      }
-+      bytes = (next << PAGE_CACHE_SHIFT) - pos;
-+      if (bytes > count)
-+              bytes = count;
-+      return (bytes && (!ret || (ret == -EIOCBRETRY))) ? bytes : ret;
-+}
-+
-+static int page_waiter(struct page *page)
-+{
-+      unlock_page(page);
-+      return wait_on_page_writeback_wq(page, current->io_wait);
-+}
-+
-+static size_t
-+wait_on_page_range(struct address_space *mapping, loff_t pos, size_t count)
-+{
-+      return operate_on_page_range(mapping, pos, count, page_waiter);
-+}
-+
-+static int page_writer(struct page *page)
-+{
-+      struct writeback_control wbc = {
-+              .sync_mode      = WB_SYNC_ALL,
-+              .nr_to_write    = 1,
-+      };
-+
-+      wait_on_page_writeback(page);
-+      return page->mapping->a_ops->writepage(page, &wbc);
-+}
-+
-+static ssize_t
-+write_out_page_range(struct address_space *mapping, loff_t pos, size_t count)
-+{
-+      return operate_on_page_range(mapping, pos, count, page_writer);
-+}
-+
-+/*
-+ * Write and wait upon all the pages in the passed range.  This is a "data
-+ * integrity" operation.  It waits upon in-flight writeout before starting and
-+ * waiting upon new writeout.  If there was an IO error, return it.
-+ *
-+ * We need to re-take i_sem during the generic_osync_inode list walk because
-+ * it is otherwise livelockable.
-+ */
-+ssize_t sync_page_range(struct inode *inode, struct address_space *mapping,
-+                      loff_t pos, size_t count)
-+{
-+      int ret;
-+
-+      if (!mapping->a_ops->writepage)
-+              return 0;
-+      if (mapping->backing_dev_info->memory_backed)
-+              return 0;
-+      ret = write_out_page_range(mapping, pos, count);
-+      if (ret >= 0) {
-+              down(&inode->i_sem);
-+              ret = generic_osync_inode(inode, OSYNC_METADATA);
-+              up(&inode->i_sem);
-+      }
-+      if (ret >= 0)
-+              ret = wait_on_page_range(mapping, pos, count);
-+      return ret;
-+}
---- linux-2.6.0-test1/mm/slab.c        2003-07-10 18:50:32.000000000 -0700
-+++ 25/mm/slab.c       2003-07-19 17:07:16.000000000 -0700
-@@ -1628,7 +1628,13 @@ static inline void *cache_free_debugchec
-       kfree_debugcheck(objp);
-       page = virt_to_page(objp);
--      BUG_ON(GET_PAGE_CACHE(page) != cachep);
-+      if (GET_PAGE_CACHE(page) != cachep) {
-+              printk(KERN_ERR "mismatch in kmem_cache_free: expected cache %p, got %p\n",
-+                              GET_PAGE_CACHE(page),cachep);
-+              printk(KERN_ERR "%p is %s.\n", cachep, cachep->name);
-+              printk(KERN_ERR "%p is %s.\n", GET_PAGE_CACHE(page), GET_PAGE_CACHE(page)->name);
-+              WARN_ON(1);
-+      }
-       slabp = GET_PAGE_SLAB(page);
-       if (cachep->flags & SLAB_STORE_USER) {
-@@ -2482,11 +2488,11 @@ static void *s_start(struct seq_file *m,
-               seq_puts(m, "slabinfo - version: 2.0\n");
- #endif
-               seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
--              seq_puts(m, " : tunables <batchcount> <limit <sharedfactor>");
-+              seq_puts(m, " : tunables <batchcount> <limit> <sharedfactor>");
-               seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
- #if STATS
-               seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> <error> <maxfreeable> <freelimit>");
--              seq_puts(m, " : cpustat <allochit <allocmiss <freehit <freemiss>");
-+              seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit <freemiss>");
- #endif
-               seq_putc(m, '\n');
-       }
-@@ -2717,7 +2723,7 @@ void ptrinfo(unsigned long addr)
-                       printk("No pgd.\n");
-                       break;
-               }
--              pmd = pmd_offset(pgd, addr);
-+              pmd = pmd_offset_kernel(pgd, addr);
-               if (pmd_none(*pmd)) {
-                       printk("No pmd.\n");
-                       break;
---- linux-2.6.0-test1/mm/swapfile.c    2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/swapfile.c   2003-07-19 17:07:16.000000000 -0700
-@@ -448,7 +448,7 @@ static int unuse_pgd(struct vm_area_stru
-               pgd_clear(dir);
-               return 0;
-       }
--      pmd = pmd_offset(dir, address);
-+      pmd = pmd_offset_map(dir, address);
-       offset = address & PGDIR_MASK;
-       address &= ~PGDIR_MASK;
-       end = address + size;
-@@ -463,6 +463,7 @@ static int unuse_pgd(struct vm_area_stru
-               address = (address + PMD_SIZE) & PMD_MASK;
-               pmd++;
-       } while (address && (address < end));
-+      pmd_unmap(pmd - 1);
-       return 0;
- }
---- linux-2.6.0-test1/mm/swap_state.c  2003-06-26 22:07:26.000000000 -0700
-+++ 25/mm/swap_state.c 2003-07-19 17:07:03.000000000 -0700
-@@ -35,6 +35,7 @@ struct address_space swapper_space = {
-       .i_mmap         = LIST_HEAD_INIT(swapper_space.i_mmap),
-       .i_mmap_shared  = LIST_HEAD_INIT(swapper_space.i_mmap_shared),
-       .i_shared_sem   = __MUTEX_INITIALIZER(swapper_space.i_shared_sem),
-+      .truncate_count  = ATOMIC_INIT(0),
-       .private_lock   = SPIN_LOCK_UNLOCKED,
-       .private_list   = LIST_HEAD_INIT(swapper_space.private_list),
- };
---- linux-2.6.0-test1/mm/vmalloc.c     2003-06-14 12:18:23.000000000 -0700
-+++ 25/mm/vmalloc.c    2003-07-19 17:07:16.000000000 -0700
-@@ -70,7 +70,7 @@ static void unmap_area_pmd(pgd_t *dir, u
-               return;
-       }
--      pmd = pmd_offset(dir, address);
-+      pmd = pmd_offset_kernel(dir, address);
-       address &= ~PGDIR_MASK;
-       end = address + size;
-       if (end > PGDIR_SIZE)
-@@ -159,7 +159,7 @@ int map_vm_area(struct vm_struct *area, 
-       dir = pgd_offset_k(address);
-       spin_lock(&init_mm.page_table_lock);
-       do {
--              pmd_t *pmd = pmd_alloc(&init_mm, dir, address);
-+              pmd_t *pmd = pmd_alloc_kernel(&init_mm, dir, address);
-               if (!pmd) {
-                       err = -ENOMEM;
-                       break;
---- linux-2.6.0-test1/mm/vmscan.c      2003-07-13 21:44:35.000000000 -0700
-+++ 25/mm/vmscan.c     2003-07-19 17:06:15.000000000 -0700
-@@ -921,7 +921,7 @@ static int balance_pgdat(pg_data_t *pgda
-                       if (i < ZONE_HIGHMEM) {
-                               reclaim_state->reclaimed_slab = 0;
-                               shrink_slab(max_scan + nr_mapped, GFP_KERNEL);
--                              to_free += reclaim_state->reclaimed_slab;
-+                              to_free -= reclaim_state->reclaimed_slab;
-                       }
-                       if (zone->all_unreclaimable)
-                               continue;
-@@ -930,7 +930,8 @@ static int balance_pgdat(pg_data_t *pgda
-               }
-               if (all_zones_ok)
-                       break;
--              blk_congestion_wait(WRITE, HZ/10);
-+              if (to_free)
-+                      blk_congestion_wait(WRITE, HZ/10);
-       }
-       return nr_pages - to_free;
- }
-@@ -956,11 +957,11 @@ int kswapd(void *p)
-       struct reclaim_state reclaim_state = {
-               .reclaimed_slab = 0,
-       };
--      unsigned long cpumask;
-+      cpumask_t cpumask;
-       daemonize("kswapd%d", pgdat->node_id);
-       cpumask = node_to_cpumask(pgdat->node_id);
--      if (cpumask)
-+      if (!cpus_empty(cpumask))
-               set_cpus_allowed(tsk, cpumask);
-       current->reclaim_state = &reclaim_state;
---- linux-2.6.0-test1/net/atm/br2684.c 2003-06-14 12:18:08.000000000 -0700
-+++ 25/net/atm/br2684.c        2003-07-19 17:03:51.000000000 -0700
-@@ -16,9 +16,12 @@ Author: Marcell GAL, 2000, XDSL Ltd, Hun
- #include <linux/ip.h>
- #include <asm/uaccess.h>
- #include <net/arp.h>
-+#include <linux/atm.h>
-+#include <linux/atmdev.h>
- #include <linux/atmbr2684.h>
-+#include "common.h"
- #include "ipcommon.h"
- /*
-@@ -768,8 +771,6 @@ static struct file_operations br2684_pro
- extern struct proc_dir_entry *atm_proc_root;  /* from proc.c */
--extern int (*br2684_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
--
- /* the following avoids some spurious warnings from the compiler */
- #define UNUSED __attribute__((unused))
-@@ -779,14 +780,14 @@ static int __init UNUSED br2684_init(voi
-       if ((p = create_proc_entry("br2684", 0, atm_proc_root)) == NULL)
-               return -ENOMEM;
-       p->proc_fops = &br2684_proc_operations;
--      br2684_ioctl_hook = br2684_ioctl;
-+      br2684_ioctl_set(br2684_ioctl);
-       return 0;
- }
- static void __exit UNUSED br2684_exit(void)
- {
-       struct br2684_dev *brdev;
--      br2684_ioctl_hook = NULL;
-+      br2684_ioctl_set(NULL);
-       remove_proc_entry("br2684", atm_proc_root);
-       while (!list_empty(&br2684_devs)) {
-               brdev = list_entry_brdev(br2684_devs.next);
---- linux-2.6.0-test1/net/atm/clip.c   2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/atm/clip.c  2003-07-19 17:03:51.000000000 -0700
-@@ -67,7 +67,7 @@ static int to_atmarpd(enum atmarp_ctrl_t
-       ctrl->ip = ip;
-       atm_force_charge(atmarpd,skb->truesize);
-       skb_queue_tail(&atmarpd->sk->sk_receive_queue, skb);
--      wake_up(&atmarpd->sleep);
-+      atmarpd->sk->sk_data_ready(atmarpd->sk, skb->len);
-       return 0;
- }
---- linux-2.6.0-test1/net/atm/common.c 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/common.c        2003-07-19 17:03:51.000000000 -0700
-@@ -129,14 +129,34 @@ EXPORT_SYMBOL(atm_clip_ops_set);
- #endif
- #if defined(CONFIG_PPPOATM) || defined(CONFIG_PPPOATM_MODULE)
--int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
--EXPORT_SYMBOL(pppoatm_ioctl_hook);
-+static DECLARE_MUTEX(pppoatm_ioctl_mutex);
-+
-+static int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
-+
-+void pppoatm_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long))
-+{
-+      down(&pppoatm_ioctl_mutex);
-+      pppoatm_ioctl_hook = hook;
-+      up(&pppoatm_ioctl_mutex);
-+}
-+#ifdef CONFIG_PPPOATM_MODULE
-+EXPORT_SYMBOL(pppoatm_ioctl_set);
-+#endif
- #endif
- #if defined(CONFIG_ATM_BR2684) || defined(CONFIG_ATM_BR2684_MODULE)
--int (*br2684_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
-+static DECLARE_MUTEX(br2684_ioctl_mutex);
-+
-+static int (*br2684_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
-+
-+void br2684_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long))
-+{
-+      down(&br2684_ioctl_mutex);
-+      br2684_ioctl_hook = hook;
-+      up(&br2684_ioctl_mutex);
-+}
- #ifdef CONFIG_ATM_BR2684_MODULE
--EXPORT_SYMBOL(br2684_ioctl_hook);
-+EXPORT_SYMBOL(br2684_ioctl_set);
- #endif
- #endif
-@@ -215,6 +235,37 @@ static void vcc_sock_destruct(struct soc
-       kfree(sk->sk_protinfo);
- }
-+
-+static void vcc_def_wakeup(struct sock *sk)
-+{
-+      read_lock(&sk->sk_callback_lock);
-+      if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
-+              wake_up(sk->sk_sleep);
-+      read_unlock(&sk->sk_callback_lock);
-+}
-+
-+static inline int vcc_writable(struct sock *sk)
-+{
-+      struct atm_vcc *vcc = atm_sk(sk);
-+
-+      return (vcc->qos.txtp.max_sdu +
-+              atomic_read(&sk->sk_wmem_alloc)) <= sk->sk_sndbuf;
-+}
-+
-+static void vcc_write_space(struct sock *sk)
-+{       
-+      read_lock(&sk->sk_callback_lock);
-+
-+      if (vcc_writable(sk)) {
-+              if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
-+                      wake_up_interruptible(sk->sk_sleep);
-+
-+              sk_wake_async(sk, 2, POLL_OUT);
-+      }
-+
-+      read_unlock(&sk->sk_callback_lock);
-+}
-+
-  
- int vcc_create(struct socket *sock, int protocol, int family)
- {
-@@ -227,7 +278,9 @@ int vcc_create(struct socket *sock, int 
-       sk = sk_alloc(family, GFP_KERNEL, 1, NULL);
-       if (!sk)
-               return -ENOMEM;
--      sock_init_data(NULL, sk);
-+      sock_init_data(sock, sk);
-+      sk->sk_state_change = vcc_def_wakeup;
-+      sk->sk_write_space = vcc_write_space;
-       vcc = atm_sk(sk) = kmalloc(sizeof(*vcc), GFP_KERNEL);
-       if (!vcc) {
-@@ -238,7 +291,6 @@ int vcc_create(struct socket *sock, int 
-       memset(vcc, 0, sizeof(*vcc));
-       vcc->sk = sk;
-       vcc->dev = NULL;
--      vcc->callback = NULL;
-       memset(&vcc->local,0,sizeof(struct sockaddr_atmsvc));
-       memset(&vcc->remote,0,sizeof(struct sockaddr_atmsvc));
-       vcc->qos.txtp.max_sdu = 1 << 16; /* for meta VCs */
-@@ -249,8 +301,6 @@ int vcc_create(struct socket *sock, int 
-       vcc->push_oam = NULL;
-       vcc->vpi = vcc->vci = 0; /* no VCI/VPI yet */
-       vcc->atm_options = vcc->aal_options = 0;
--      init_waitqueue_head(&vcc->sleep);
--      sk->sk_sleep = &vcc->sleep;
-       sk->sk_destruct = vcc_sock_destruct;
-       sock->sk = sk;
-       return 0;
-@@ -300,9 +350,9 @@ int vcc_release(struct socket *sock)
- void vcc_release_async(struct atm_vcc *vcc, int reply)
- {
-       set_bit(ATM_VF_CLOSE, &vcc->flags);
--      vcc->reply = reply;
-       vcc->sk->sk_err = -reply;
--      wake_up(&vcc->sleep);
-+      clear_bit(ATM_VF_WAITING, &vcc->flags);
-+      vcc->sk->sk_state_change(vcc->sk);
- }
-@@ -475,7 +525,7 @@ int vcc_recvmsg(struct kiocb *iocb, stru
-       vcc = ATM_SD(sock);
-       if (test_bit(ATM_VF_RELEASED,&vcc->flags) ||
-           test_bit(ATM_VF_CLOSE,&vcc->flags))
--              return vcc->reply;
-+              return -sk->sk_err;
-       if (!test_bit(ATM_VF_READY, &vcc->flags))
-               return 0;
-@@ -532,7 +582,7 @@ int vcc_sendmsg(struct kiocb *iocb, stru
-       vcc = ATM_SD(sock);
-       if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
-           test_bit(ATM_VF_CLOSE, &vcc->flags)) {
--              error = vcc->reply;
-+              error = -sk->sk_err;
-               goto out;
-       }
-       if (!test_bit(ATM_VF_READY, &vcc->flags)) {
-@@ -549,7 +599,7 @@ int vcc_sendmsg(struct kiocb *iocb, stru
-       }
-       /* verify_area is done by net/socket.c */
-       eff = (size+3) & ~3; /* align to word boundary */
--      prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+      prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-       error = 0;
-       while (!(skb = alloc_tx(vcc,eff))) {
-               if (m->msg_flags & MSG_DONTWAIT) {
-@@ -563,16 +613,16 @@ int vcc_sendmsg(struct kiocb *iocb, stru
-               }
-               if (test_bit(ATM_VF_RELEASED,&vcc->flags) ||
-                   test_bit(ATM_VF_CLOSE,&vcc->flags)) {
--                      error = vcc->reply;
-+                      error = -sk->sk_err;
-                       break;
-               }
-               if (!test_bit(ATM_VF_READY,&vcc->flags)) {
-                       error = -EPIPE;
-                       break;
-               }
--              prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+              prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-       }
--      finish_wait(&vcc->sleep, &wait);
-+      finish_wait(sk->sk_sleep, &wait);
-       if (error)
-               goto out;
-       skb->dev = NULL; /* for paths shared with net_device interfaces */
-@@ -591,29 +641,38 @@ out:
- }
--unsigned int atm_poll(struct file *file,struct socket *sock,poll_table *wait)
-+unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
- {
-+      struct sock *sk = sock->sk;
-       struct atm_vcc *vcc;
-       unsigned int mask;
--      vcc = ATM_SD(sock);
--      poll_wait(file,&vcc->sleep,wait);
-+      poll_wait(file, sk->sk_sleep, wait);
-       mask = 0;
--      if (skb_peek(&vcc->sk->sk_receive_queue))
--              mask |= POLLIN | POLLRDNORM;
--      if (test_bit(ATM_VF_RELEASED,&vcc->flags) ||
--          test_bit(ATM_VF_CLOSE,&vcc->flags))
-+
-+      vcc = ATM_SD(sock);
-+
-+      /* exceptional events */
-+      if (sk->sk_err)
-+              mask = POLLERR;
-+
-+      if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
-+          test_bit(ATM_VF_CLOSE, &vcc->flags))
-               mask |= POLLHUP;
--      if (sock->state != SS_CONNECTING) {
--              if (vcc->qos.txtp.traffic_class != ATM_NONE &&
--                  vcc->qos.txtp.max_sdu +
--                  atomic_read(&vcc->sk->sk_wmem_alloc) <= vcc->sk->sk_sndbuf)
--                      mask |= POLLOUT | POLLWRNORM;
--      }
--      else if (vcc->reply != WAITING) {
--                      mask |= POLLOUT | POLLWRNORM;
--                      if (vcc->reply) mask |= POLLERR;
--              }
-+
-+      /* readable? */
-+      if (!skb_queue_empty(&sk->sk_receive_queue))
-+              mask |= POLLIN | POLLRDNORM;
-+
-+      /* writable? */
-+      if (sock->state == SS_CONNECTING &&
-+          test_bit(ATM_VF_WAITING, &vcc->flags))
-+              return mask;
-+
-+      if (vcc->qos.txtp.traffic_class != ATM_NONE &&
-+          vcc_writable(vcc->sk))
-+              mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
-+
-       return mask;
- }
-@@ -859,19 +918,22 @@ int vcc_ioctl(struct socket *sock, unsig
-               default:
-                       break;
-       }
-+      error = -ENOIOCTLCMD;
- #if defined(CONFIG_PPPOATM) || defined(CONFIG_PPPOATM_MODULE)
--      if (pppoatm_ioctl_hook) {
-+      down(&pppoatm_ioctl_mutex);
-+      if (pppoatm_ioctl_hook)
-               error = pppoatm_ioctl_hook(vcc, cmd, arg);
--              if (error != -ENOIOCTLCMD)
--                      goto done;
--      }
-+      up(&pppoatm_ioctl_mutex);
-+      if (error != -ENOIOCTLCMD)
-+              goto done;
- #endif
- #if defined(CONFIG_ATM_BR2684) || defined(CONFIG_ATM_BR2684_MODULE)
--      if (br2684_ioctl_hook) {
-+      down(&br2684_ioctl_mutex);
-+      if (br2684_ioctl_hook)
-               error = br2684_ioctl_hook(vcc, cmd, arg);
--              if (error != -ENOIOCTLCMD)
--                      goto done;
--      }
-+      up(&br2684_ioctl_mutex);
-+      if (error != -ENOIOCTLCMD)
-+              goto done;
- #endif
-       error = atm_dev_ioctl(cmd, arg);
---- linux-2.6.0-test1/net/atm/common.h 2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/common.h        2003-07-19 17:03:51.000000000 -0700
-@@ -17,7 +17,7 @@ int vcc_recvmsg(struct kiocb *iocb, stru
-               int size, int flags);
- int vcc_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m,
-               int total_len);
--unsigned int atm_poll(struct file *file,struct socket *sock,poll_table *wait);
-+unsigned int vcc_poll(struct file *file, struct socket *sock, poll_table *wait);
- int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
- int vcc_setsockopt(struct socket *sock, int level, int optname, char *optval,
-                  int optlen);
-@@ -26,6 +26,9 @@ int vcc_getsockopt(struct socket *sock, 
- void atm_shutdown_dev(struct atm_dev *dev);
-+void pppoatm_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long));
-+void br2684_ioctl_set(int (*hook)(struct atm_vcc *, unsigned int, unsigned long));
-+
- int atmpvc_init(void);
- void atmpvc_exit(void);
- int atmsvc_init(void);
---- linux-2.6.0-test1/net/atm/lec.c    2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/lec.c   2003-07-19 17:03:51.000000000 -0700
-@@ -134,7 +134,7 @@ static void lec_handle_bridge(struct sk_
-                 priv = (struct lec_priv *)dev->priv;
-                 atm_force_charge(priv->lecd, skb2->truesize);
-                 skb_queue_tail(&priv->lecd->sk->sk_receive_queue, skb2);
--                wake_up(&priv->lecd->sleep);
-+                priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb2->len);
-         }
-         return;
-@@ -513,7 +513,7 @@ lec_atm_send(struct atm_vcc *vcc, struct
-                         memcpy(skb2->data, mesg, sizeof(struct atmlec_msg));
-                         atm_force_charge(priv->lecd, skb2->truesize);
-                         skb_queue_tail(&priv->lecd->sk->sk_receive_queue, skb2);
--                        wake_up(&priv->lecd->sleep);
-+                        priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb2->len);
-                 }
-                 if (f != NULL) br_fdb_put_hook(f);
- #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
-@@ -598,13 +598,13 @@ send_to_lecd(struct lec_priv *priv, atml
-         atm_force_charge(priv->lecd, skb->truesize);
-       skb_queue_tail(&priv->lecd->sk->sk_receive_queue, skb);
--        wake_up(&priv->lecd->sleep);
-+        priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb->len);
-         if (data != NULL) {
-                 DPRINTK("lec: about to send %d bytes of data\n", data->len);
-                 atm_force_charge(priv->lecd, data->truesize);
-                 skb_queue_tail(&priv->lecd->sk->sk_receive_queue, data);
--                wake_up(&priv->lecd->sleep);
-+                priv->lecd->sk->sk_data_ready(priv->lecd->sk, skb->len);
-         }
-         return 0;
-@@ -686,7 +686,7 @@ lec_push(struct atm_vcc *vcc, struct sk_
-         if (memcmp(skb->data, lec_ctrl_magic, 4) ==0) { /* Control frame, to daemon*/
-                 DPRINTK("%s: To daemon\n",dev->name);
-                 skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
--                wake_up(&vcc->sleep);
-+                vcc->sk->sk_data_ready(vcc->sk, skb->len);
-         } else { /* Data frame, queue to protocol handlers */
-                 unsigned char *dst;
---- linux-2.6.0-test1/net/atm/mpc.c    2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/mpc.c   2003-07-19 17:03:51.000000000 -0700
-@@ -669,7 +669,7 @@ static void mpc_push(struct atm_vcc *vcc
-               dprintk("mpoa: (%s) mpc_push: control packet arrived\n", dev->name);
-               /* Pass control packets to daemon */
-               skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
--              wake_up(&vcc->sleep);
-+              vcc->sk->sk_data_ready(vcc->sk, skb->len);
-               return;
-       }
-@@ -947,7 +947,7 @@ int msg_to_mpoad(struct k_message *mesg,
-       memcpy(skb->data, mesg, sizeof(struct k_message));
-       atm_force_charge(mpc->mpoad_vcc, skb->truesize);
-       skb_queue_tail(&mpc->mpoad_vcc->sk->sk_receive_queue, skb);
--      wake_up(&mpc->mpoad_vcc->sleep);
-+      mpc->mpoad_vcc->sk->sk_data_ready(mpc->mpoad_vcc->sk, skb->len);
-       return 0;
- }
-@@ -1226,7 +1226,7 @@ static void purge_egress_shortcut(struct
-       atm_force_charge(vcc, skb->truesize);
-       skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
--      wake_up(&vcc->sleep);
-+      vcc->sk->sk_data_ready(vcc->sk, skb->len);
-       dprintk("mpoa: purge_egress_shortcut: exiting:\n");
-       return;
---- linux-2.6.0-test1/net/atm/pppoatm.c        2003-06-14 12:18:24.000000000 -0700
-+++ 25/net/atm/pppoatm.c       2003-07-19 17:03:51.000000000 -0700
-@@ -44,6 +44,8 @@
- #include <linux/ppp_channel.h>
- #include <linux/atmppp.h>
-+#include "common.h"
-+
- #if 0
- #define DPRINTK(format, args...) \
-       printk(KERN_DEBUG "pppoatm: " format, ##args)
-@@ -344,17 +346,15 @@ static int pppoatm_ioctl(struct atm_vcc 
- /* the following avoids some spurious warnings from the compiler */
- #define UNUSED __attribute__((unused))
--extern int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
--
- static int __init UNUSED pppoatm_init(void)
- {
--      pppoatm_ioctl_hook = pppoatm_ioctl;
-+      pppoatm_ioctl_set(pppoatm_ioctl);
-       return 0;
- }
- static void __exit UNUSED pppoatm_exit(void)
- {
--      pppoatm_ioctl_hook = NULL;
-+      pppoatm_ioctl_set(NULL);
- }
- module_init(pppoatm_init);
---- linux-2.6.0-test1/net/atm/proc.c   2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/proc.c  2003-07-19 17:03:51.000000000 -0700
-@@ -224,7 +224,7 @@ static void vc_info(struct atm_vcc *vcc,
-                       here += sprintf(here, "%3d", vcc->sk->sk_family);
-       }
-       here += sprintf(here," %04lx  %5d %7d/%7d %7d/%7d\n",vcc->flags,
--          vcc->reply,
-+          vcc->sk->sk_err,
-           atomic_read(&vcc->sk->sk_wmem_alloc), vcc->sk->sk_sndbuf,
-           atomic_read(&vcc->sk->sk_rmem_alloc), vcc->sk->sk_rcvbuf);
- }
---- linux-2.6.0-test1/net/atm/pvc.c    2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/pvc.c   2003-07-19 17:03:51.000000000 -0700
-@@ -111,7 +111,7 @@ static struct proto_ops pvc_proto_ops = 
-       .socketpair =   sock_no_socketpair,
-       .accept =       sock_no_accept,
-       .getname =      pvc_getname,
--      .poll =         atm_poll,
-+      .poll =         vcc_poll,
-       .ioctl =        vcc_ioctl,
-       .listen =       sock_no_listen,
-       .shutdown =     pvc_shutdown,
---- linux-2.6.0-test1/net/atm/raw.c    2003-06-14 12:18:34.000000000 -0700
-+++ 25/net/atm/raw.c   2003-07-19 17:03:51.000000000 -0700
-@@ -29,7 +29,7 @@ void atm_push_raw(struct atm_vcc *vcc,st
- {
-       if (skb) {
-               skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
--              wake_up(&vcc->sleep);
-+              vcc->sk->sk_data_ready(vcc->sk, skb->len);
-       }
- }
-@@ -40,7 +40,7 @@ static void atm_pop_raw(struct atm_vcc *
-               skb->truesize);
-       atomic_sub(skb->truesize, &vcc->sk->sk_wmem_alloc);
-       dev_kfree_skb_any(skb);
--      wake_up(&vcc->sleep);
-+      vcc->sk->sk_write_space(vcc->sk);
- }
---- linux-2.6.0-test1/net/atm/signaling.c      2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/signaling.c     2003-07-19 17:03:51.000000000 -0700
-@@ -61,7 +61,7 @@ static void sigd_put_skb(struct sk_buff 
- #endif
-       atm_force_charge(sigd,skb->truesize);
-       skb_queue_tail(&sigd->sk->sk_receive_queue,skb);
--      wake_up(&sigd->sleep);
-+      sigd->sk->sk_data_ready(sigd->sk, skb->len);
- }
-@@ -103,7 +103,8 @@ static int sigd_send(struct atm_vcc *vcc
-       vcc = *(struct atm_vcc **) &msg->vcc;
-       switch (msg->type) {
-               case as_okay:
--                      vcc->reply = msg->reply;
-+                      vcc->sk->sk_err = -msg->reply;
-+                      clear_bit(ATM_VF_WAITING, &vcc->flags);
-                       if (!*vcc->local.sas_addr.prv &&
-                           !*vcc->local.sas_addr.pub) {
-                               vcc->local.sas_family = AF_ATMSVC;
-@@ -123,8 +124,8 @@ static int sigd_send(struct atm_vcc *vcc
-               case as_error:
-                       clear_bit(ATM_VF_REGIS,&vcc->flags);
-                       clear_bit(ATM_VF_READY,&vcc->flags);
--                      vcc->reply = msg->reply;
-                       vcc->sk->sk_err = -msg->reply;
-+                      clear_bit(ATM_VF_WAITING, &vcc->flags);
-                       break;
-               case as_indicate:
-                       vcc = *(struct atm_vcc **) &msg->listen_vcc;
-@@ -137,19 +138,16 @@ static int sigd_send(struct atm_vcc *vcc
-                       }
-                       vcc->sk->sk_ack_backlog++;
-                       skb_queue_tail(&vcc->sk->sk_receive_queue, skb);
--                      if (vcc->callback) {
--                              DPRINTK("waking vcc->sleep 0x%p\n",
--                                  &vcc->sleep);
--                              vcc->callback(vcc);
--                      }
-+                      DPRINTK("waking vcc->sk->sk_sleep 0x%p\n", vcc->sk->sk_sleep);
-+                      vcc->sk->sk_state_change(vcc->sk);
- as_indicate_complete:
-                       release_sock(vcc->sk);
-                       return 0;
-               case as_close:
-                       set_bit(ATM_VF_RELEASED,&vcc->flags);
-                       clear_bit(ATM_VF_READY,&vcc->flags);
--                      vcc->reply = msg->reply;
-                       vcc->sk->sk_err = -msg->reply;
-+                      clear_bit(ATM_VF_WAITING, &vcc->flags);
-                       break;
-               case as_modify:
-                       modify_qos(vcc,msg);
-@@ -159,7 +157,7 @@ as_indicate_complete:
-                           (int) msg->type);
-                       return -EINVAL;
-       }
--      if (vcc->callback) vcc->callback(vcc);
-+      vcc->sk->sk_state_change(vcc->sk);
-       dev_kfree_skb(skb);
-       return 0;
- }
-@@ -205,9 +203,9 @@ static void purge_vcc(struct atm_vcc *vc
-       if (vcc->sk->sk_family == PF_ATMSVC &&
-           !test_bit(ATM_VF_META,&vcc->flags)) {
-               set_bit(ATM_VF_RELEASED,&vcc->flags);
--              vcc->reply = -EUNATCH;
-               vcc->sk->sk_err = EUNATCH;
--              wake_up(&vcc->sleep);
-+              clear_bit(ATM_VF_WAITING, &vcc->flags);
-+              vcc->sk->sk_state_change(vcc->sk);
-       }
- }
---- linux-2.6.0-test1/net/atm/signaling.h      2003-06-14 12:17:56.000000000 -0700
-+++ 25/net/atm/signaling.h     2003-07-19 17:03:51.000000000 -0700
-@@ -11,9 +11,6 @@
- #include <linux/atmsvc.h>
--#define WAITING 1 /* for reply: 0: no error, < 0: error, ... */
--
--
- extern struct atm_vcc *sigd; /* needed in svc_release */
---- linux-2.6.0-test1/net/atm/svc.c    2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/atm/svc.c   2003-07-19 17:03:51.000000000 -0700
-@@ -43,14 +43,6 @@ static int svc_create(struct socket *soc
-  */
--void svc_callback(struct atm_vcc *vcc)
--{
--      wake_up(&vcc->sleep);
--}
--
--
--
--
- static int svc_shutdown(struct socket *sock,int how)
- {
-       return 0;
-@@ -64,13 +56,13 @@ static void svc_disconnect(struct atm_vc
-       DPRINTK("svc_disconnect %p\n",vcc);
-       if (test_bit(ATM_VF_REGIS,&vcc->flags)) {
--              prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+              prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-               sigd_enq(vcc,as_close,NULL,NULL,NULL);
-               while (!test_bit(ATM_VF_RELEASED,&vcc->flags) && sigd) {
-                       schedule();
--                      prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+                      prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-               }
--              finish_wait(&vcc->sleep, &wait);
-+              finish_wait(vcc->sk->sk_sleep, &wait);
-       }
-       /* beware - socket is still in use by atmsigd until the last
-          as_indicate has been answered */
-@@ -145,22 +137,22 @@ static int svc_bind(struct socket *sock,
-               goto out;
-       }
-       vcc->local = *addr;
--      vcc->reply = WAITING;
--      prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+      set_bit(ATM_VF_WAITING, &vcc->flags);
-+      prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-       sigd_enq(vcc,as_bind,NULL,NULL,&vcc->local);
--      while (vcc->reply == WAITING && sigd) {
-+      while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
-               schedule();
--              prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+              prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-       }
--      finish_wait(&vcc->sleep, &wait);
-+      finish_wait(sk->sk_sleep, &wait);
-       clear_bit(ATM_VF_REGIS,&vcc->flags); /* doesn't count */
-       if (!sigd) {
-               error = -EUNATCH;
-               goto out;
-       }
--        if (!vcc->reply)
-+        if (!sk->sk_err)
-               set_bit(ATM_VF_BOUND,&vcc->flags);
--      error = vcc->reply;
-+      error = -sk->sk_err;
- out:
-       release_sock(sk);
-       return error;
-@@ -191,13 +183,13 @@ static int svc_connect(struct socket *so
-               error = -EISCONN;
-               goto out;
-       case SS_CONNECTING:
--              if (vcc->reply == WAITING) {
-+              if (test_bit(ATM_VF_WAITING, &vcc->flags)) {
-                       error = -EALREADY;
-                       goto out;
-               }
-               sock->state = SS_UNCONNECTED;
--              if (vcc->reply) {
--                      error = vcc->reply;
-+              if (sk->sk_err) {
-+                      error = -sk->sk_err;
-                       goto out;
-               }
-               break;
-@@ -226,20 +218,20 @@ static int svc_connect(struct socket *so
-                       goto out;
-               }
-               vcc->remote = *addr;
--              vcc->reply = WAITING;
--              prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+              set_bit(ATM_VF_WAITING, &vcc->flags);
-+              prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-               sigd_enq(vcc,as_connect,NULL,NULL,&vcc->remote);
-               if (flags & O_NONBLOCK) {
--                      finish_wait(&vcc->sleep, &wait);
-+                      finish_wait(sk->sk_sleep, &wait);
-                       sock->state = SS_CONNECTING;
-                       error = -EINPROGRESS;
-                       goto out;
-               }
-               error = 0;
--              while (vcc->reply == WAITING && sigd) {
-+              while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
-                       schedule();
-                       if (!signal_pending(current)) {
--                              prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+                              prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-                               continue;
-                       }
-                       DPRINTK("*ABORT*\n");
-@@ -256,14 +248,14 @@ static int svc_connect(struct socket *so
-                        *   Kernel <--close--- Demon
-                        */
-                       sigd_enq(vcc,as_close,NULL,NULL,NULL);
--                      while (vcc->reply == WAITING && sigd) {
--                              prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+                      while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
-+                              prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-                               schedule();
-                       }
--                      if (!vcc->reply)
-+                      if (!sk->sk_err)
-                               while (!test_bit(ATM_VF_RELEASED,&vcc->flags)
-                                   && sigd) {
--                                      prepare_to_wait(&vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+                                      prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-                                       schedule();
-                               }
-                       clear_bit(ATM_VF_REGIS,&vcc->flags);
-@@ -273,15 +265,15 @@ static int svc_connect(struct socket *so
-                       error = -EINTR;
-                       break;
-               }
--              finish_wait(&vcc->sleep, &wait);
-+              finish_wait(sk->sk_sleep, &wait);
-               if (error)
-                       goto out;
-               if (!sigd) {
-                       error = -EUNATCH;
-                       goto out;
-               }
--              if (vcc->reply) {
--                      error = vcc->reply;
-+              if (sk->sk_err) {
-+                      error = -sk->sk_err;
-                       goto out;
-               }
-       }
-@@ -319,14 +311,14 @@ static int svc_listen(struct socket *soc
-               error = -EINVAL;
-               goto out;
-       }
--      vcc->reply = WAITING;
--      prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+      set_bit(ATM_VF_WAITING, &vcc->flags);
-+      prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-       sigd_enq(vcc,as_listen,NULL,NULL,&vcc->local);
--      while (vcc->reply == WAITING && sigd) {
-+      while (test_bit(ATM_VF_WAITING, &vcc->flags) && sigd) {
-               schedule();
--              prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+              prepare_to_wait(sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-       }
--      finish_wait(&vcc->sleep, &wait);
-+      finish_wait(sk->sk_sleep, &wait);
-       if (!sigd) {
-               error = -EUNATCH;
-               goto out;
-@@ -334,7 +326,7 @@ static int svc_listen(struct socket *soc
-       set_bit(ATM_VF_LISTEN,&vcc->flags);
-       vcc->sk->sk_max_ack_backlog = backlog > 0 ? backlog :
-                                                   ATM_BACKLOG_DEFAULT;
--      error = vcc->reply;
-+      error = -sk->sk_err;
- out:
-       release_sock(sk);
-       return error;
-@@ -362,12 +354,12 @@ static int svc_accept(struct socket *soc
-       while (1) {
-               DEFINE_WAIT(wait);
--              prepare_to_wait(&old_vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+              prepare_to_wait(old_vcc->sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-               while (!(skb = skb_dequeue(&old_vcc->sk->sk_receive_queue)) &&
-                      sigd) {
-                       if (test_bit(ATM_VF_RELEASED,&old_vcc->flags)) break;
-                       if (test_bit(ATM_VF_CLOSE,&old_vcc->flags)) {
--                              error = old_vcc->reply;
-+                              error = -sk->sk_err;
-                               break;
-                       }
-                       if (flags & O_NONBLOCK) {
-@@ -381,9 +373,9 @@ static int svc_accept(struct socket *soc
-                               error = -ERESTARTSYS;
-                               break;
-                       }
--                      prepare_to_wait(&old_vcc->sleep, &wait, TASK_INTERRUPTIBLE);
-+                      prepare_to_wait(old_vcc->sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-               }
--              finish_wait(&old_vcc->sleep, &wait);
-+              finish_wait(old_vcc->sk->sk_sleep, &wait);
-               if (error)
-                       goto out;
-               if (!skb) {
-@@ -407,23 +399,24 @@ static int svc_accept(struct socket *soc
-                       goto out;
-               }
-               /* wait should be short, so we ignore the non-blocking flag */
--              new_vcc->reply = WAITING;
--              prepare_to_wait(&new_vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+              set_bit(ATM_VF_WAITING, &new_vcc->flags);
-+              prepare_to_wait(new_vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-               sigd_enq(new_vcc,as_accept,old_vcc,NULL,NULL);
--              while (new_vcc->reply == WAITING && sigd) {
-+              while (test_bit(ATM_VF_WAITING, &new_vcc->flags) && sigd) {
-                       release_sock(sk);
-                       schedule();
-                       lock_sock(sk);
--                      prepare_to_wait(&new_vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+                      prepare_to_wait(new_vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-               }
--              finish_wait(&new_vcc->sleep, &wait);
-+              finish_wait(new_vcc->sk->sk_sleep, &wait);
-               if (!sigd) {
-                       error = -EUNATCH;
-                       goto out;
-               }
--              if (!new_vcc->reply) break;
--              if (new_vcc->reply != -ERESTARTSYS) {
--                      error = new_vcc->reply;
-+              if (!new_vcc->sk->sk_err)
-+                      break;
-+              if (new_vcc->sk->sk_err != ERESTARTSYS) {
-+                      error = -new_vcc->sk->sk_err;
-                       goto out;
-               }
-       }
-@@ -451,17 +444,17 @@ int svc_change_qos(struct atm_vcc *vcc,s
- {
-       DEFINE_WAIT(wait);
--      vcc->reply = WAITING;
--      prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+      set_bit(ATM_VF_WAITING, &vcc->flags);
-+      prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-       sigd_enq2(vcc,as_modify,NULL,NULL,&vcc->local,qos,0);
--      while (vcc->reply == WAITING && !test_bit(ATM_VF_RELEASED,&vcc->flags)
--          && sigd) {
-+      while (test_bit(ATM_VF_WAITING, &vcc->flags) &&
-+             !test_bit(ATM_VF_RELEASED, &vcc->flags) && sigd) {
-               schedule();
--              prepare_to_wait(&vcc->sleep, &wait, TASK_UNINTERRUPTIBLE);
-+              prepare_to_wait(vcc->sk->sk_sleep, &wait, TASK_UNINTERRUPTIBLE);
-       }
--      finish_wait(&vcc->sleep, &wait);
-+      finish_wait(vcc->sk->sk_sleep, &wait);
-       if (!sigd) return -EUNATCH;
--      return vcc->reply;
-+      return -vcc->sk->sk_err;
- }
-@@ -527,7 +520,7 @@ static struct proto_ops svc_proto_ops = 
-       .socketpair =   sock_no_socketpair,
-       .accept =       svc_accept,
-       .getname =      svc_getname,
--      .poll =         atm_poll,
-+      .poll =         vcc_poll,
-       .ioctl =        vcc_ioctl,
-       .listen =       svc_listen,
-       .shutdown =     svc_shutdown,
-@@ -547,7 +540,6 @@ static int svc_create(struct socket *soc
-       sock->ops = &svc_proto_ops;
-       error = vcc_create(sock, protocol, AF_ATMSVC);
-       if (error) return error;
--      ATM_SD(sock)->callback = svc_callback;
-       ATM_SD(sock)->local.sas_family = AF_ATMSVC;
-       ATM_SD(sock)->remote.sas_family = AF_ATMSVC;
-       return 0;
---- linux-2.6.0-test1/net/core/dev.c   2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/core/dev.c  2003-07-19 17:03:51.000000000 -0700
-@@ -178,7 +178,7 @@ static struct notifier_block *netdev_cha
-  *    Device drivers call our routines to queue packets here. We empty the
-  *    queue in the local softnet handler.
-  */
--struct softnet_data softnet_data[NR_CPUS] __cacheline_aligned;
-+DEFINE_PER_CPU(struct softnet_data, softnet_data) = { 0, };
- #ifdef CONFIG_NET_FASTROUTE
- int netdev_fastroute;
-@@ -1280,34 +1280,35 @@ static void get_sample_stats(int cpu)
-       unsigned long rd;
-       int rq;
- #endif
--      int blog = softnet_data[cpu].input_pkt_queue.qlen;
--      int avg_blog = softnet_data[cpu].avg_blog;
-+      struct softnet_data *sd = &per_cpu(softnet_data, cpu);
-+      int blog = sd->input_pkt_queue.qlen;
-+      int avg_blog = sd->avg_blog;
-       avg_blog = (avg_blog >> 1) + (blog >> 1);
-       if (avg_blog > mod_cong) {
-               /* Above moderate congestion levels. */
--              softnet_data[cpu].cng_level = NET_RX_CN_HIGH;
-+              sd->cng_level = NET_RX_CN_HIGH;
- #ifdef RAND_LIE
-               rd = net_random();
-               rq = rd % netdev_max_backlog;
-               if (rq < avg_blog) /* unlucky bastard */
--                      softnet_data[cpu].cng_level = NET_RX_DROP;
-+                      sd->cng_level = NET_RX_DROP;
- #endif
-       } else if (avg_blog > lo_cong) {
--              softnet_data[cpu].cng_level = NET_RX_CN_MOD;
-+              sd->cng_level = NET_RX_CN_MOD;
- #ifdef RAND_LIE
-               rd = net_random();
-               rq = rd % netdev_max_backlog;
-                       if (rq < avg_blog) /* unlucky bastard */
--                              softnet_data[cpu].cng_level = NET_RX_CN_HIGH;
-+                              sd->cng_level = NET_RX_CN_HIGH;
- #endif
-       } else if (avg_blog > no_cong)
--              softnet_data[cpu].cng_level = NET_RX_CN_LOW;
-+              sd->cng_level = NET_RX_CN_LOW;
-       else  /* no congestion */
--              softnet_data[cpu].cng_level = NET_RX_SUCCESS;
-+              sd->cng_level = NET_RX_SUCCESS;
--      softnet_data[cpu].avg_blog = avg_blog;
-+      sd->avg_blog = avg_blog;
- }
- #ifdef OFFLINE_SAMPLE
-@@ -1357,7 +1358,7 @@ int netif_rx(struct sk_buff *skb)
-        */
-       local_irq_save(flags);
-       this_cpu = smp_processor_id();
--      queue = &softnet_data[this_cpu];
-+      queue = &__get_cpu_var(softnet_data);
-       netdev_rx_stat[this_cpu].total++;
-       if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {
-@@ -1445,14 +1446,14 @@ static __inline__ void skb_bond(struct s
- static void net_tx_action(struct softirq_action *h)
- {
--      int cpu = smp_processor_id();
-+      struct softnet_data *sd = &__get_cpu_var(softnet_data);
--      if (softnet_data[cpu].completion_queue) {
-+      if (sd->completion_queue) {
-               struct sk_buff *clist;
-               local_irq_disable();
--              clist = softnet_data[cpu].completion_queue;
--              softnet_data[cpu].completion_queue = NULL;
-+              clist = sd->completion_queue;
-+              sd->completion_queue = NULL;
-               local_irq_enable();
-               while (clist) {
-@@ -1464,12 +1465,12 @@ static void net_tx_action(struct softirq
-               }
-       }
--      if (softnet_data[cpu].output_queue) {
-+      if (sd->output_queue) {
-               struct net_device *head;
-               local_irq_disable();
--              head = softnet_data[cpu].output_queue;
--              softnet_data[cpu].output_queue = NULL;
-+              head = sd->output_queue;
-+              sd->output_queue = NULL;
-               local_irq_enable();
-               while (head) {
-@@ -1611,8 +1612,7 @@ static int process_backlog(struct net_de
- {
-       int work = 0;
-       int quota = min(backlog_dev->quota, *budget);
--      int this_cpu = smp_processor_id();
--      struct softnet_data *queue = &softnet_data[this_cpu];
-+      struct softnet_data *queue = &__get_cpu_var(softnet_data);
-       unsigned long start_time = jiffies;
-       for (;;) {
-@@ -1673,7 +1673,7 @@ job_done:
- static void net_rx_action(struct softirq_action *h)
- {
-       int this_cpu = smp_processor_id();
--      struct softnet_data *queue = &softnet_data[this_cpu];
-+      struct softnet_data *queue = &__get_cpu_var(softnet_data);
-       unsigned long start_time = jiffies;
-       int budget = netdev_max_backlog;
-@@ -2979,7 +2979,7 @@ static int __init net_dev_init(void)
-       for (i = 0; i < NR_CPUS; i++) {
-               struct softnet_data *queue;
--              queue = &softnet_data[i];
-+              queue = &per_cpu(softnet_data, i);
-               skb_queue_head_init(&queue->input_pkt_queue);
-               queue->throttle = 0;
-               queue->cng_level = 0;
---- linux-2.6.0-test1/net/ipv4/ip_gre.c        2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv4/ip_gre.c       2003-07-19 17:03:51.000000000 -0700
-@@ -816,6 +816,7 @@ static int ipgre_tunnel_xmit(struct sk_b
-                       skb_set_owner_w(new_skb, skb->sk);
-               dev_kfree_skb(skb);
-               skb = new_skb;
-+              old_iph = skb->nh.iph;
-       }
-       skb->nh.raw = skb_push(skb, gre_hlen);
---- linux-2.6.0-test1/net/ipv4/ipip.c  2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv4/ipip.c 2003-07-19 17:03:51.000000000 -0700
-@@ -616,6 +616,7 @@ static int ipip_tunnel_xmit(struct sk_bu
-                       skb_set_owner_w(new_skb, skb->sk);
-               dev_kfree_skb(skb);
-               skb = new_skb;
-+              old_iph = skb->nh.iph;
-       }
-       skb->nh.raw = skb_push(skb, sizeof(struct iphdr));
---- linux-2.6.0-test1/net/ipv4/ipvs/ip_vs_conn.c       2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/ip_vs_conn.c      2003-07-19 17:03:51.000000000 -0700
-@@ -507,9 +507,6 @@ static void ip_vs_conn_expire(unsigned l
-        *      refcnt==1 implies I'm the only one referrer
-        */
-       if (likely(atomic_read(&cp->refcnt) == 1)) {
--              /* make sure that there is no timer on it now */
--              del_timer_sync(&cp->timer);
--
-               /* does anybody control me? */
-               if (cp->control)
-                       ip_vs_control_del(cp);
-@@ -517,7 +514,6 @@ static void ip_vs_conn_expire(unsigned l
-               if (unlikely(cp->app != NULL))
-                       ip_vs_unbind_app(cp);
-               ip_vs_unbind_dest(cp);
--              //ip_vs_timeout_detach(cp);
-               if (cp->flags & IP_VS_CONN_F_NO_CPORT)
-                       atomic_dec(&ip_vs_conn_no_cport_cnt);
-               atomic_dec(&ip_vs_conn_count);
---- linux-2.6.0-test1/net/ipv4/ipvs/ip_vs_ctl.c        2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/ip_vs_ctl.c       2003-07-19 17:03:51.000000000 -0700
-@@ -93,7 +93,7 @@ int ip_vs_get_debug_level(void)
- /*
-  *    update_defense_level is called from timer bh and from sysctl.
-  */
--void update_defense_level(void)
-+static void update_defense_level(void)
- {
-       struct sysinfo i;
-       static int old_secure_tcp = 0;
-@@ -210,6 +210,22 @@ void update_defense_level(void)
- }
-+/*
-+ *    Timer for checking the defense
-+ */
-+static struct timer_list defense_timer;
-+#define DEFENSE_TIMER_PERIOD  1*HZ
-+
-+static void defense_timer_handler(unsigned long data)
-+{
-+      update_defense_level();
-+      if (atomic_read(&ip_vs_dropentry))
-+              ip_vs_random_dropentry();
-+
-+      mod_timer(&defense_timer, jiffies + DEFENSE_TIMER_PERIOD);
-+}
-+
-+
- int
- ip_vs_use_count_inc(void)
- {
-@@ -2187,6 +2203,12 @@ int ip_vs_control_init(void)
-       ip_vs_stats.lock = SPIN_LOCK_UNLOCKED;
-       ip_vs_new_estimator(&ip_vs_stats);
-+      /* Hook the defense timer */
-+      init_timer(&defense_timer);
-+      defense_timer.function = defense_timer_handler;
-+      defense_timer.expires = jiffies + DEFENSE_TIMER_PERIOD;
-+      add_timer(&defense_timer);
-+
-       LeaveFunction(2);
-       return 0;
- }
-@@ -2196,6 +2218,7 @@ void ip_vs_control_cleanup(void)
- {
-       EnterFunction(2);
-       ip_vs_trash_cleanup();
-+      del_timer_sync(&defense_timer);
-       ip_vs_kill_estimator(&ip_vs_stats);
-       unregister_sysctl_table(ipv4_vs_table.sysctl_header);
-       proc_net_remove("ip_vs_stats");
---- linux-2.6.0-test1/net/ipv4/ipvs/ip_vs_xmit.c       2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/ip_vs_xmit.c      2003-07-19 17:03:51.000000000 -0700
-@@ -78,7 +78,6 @@ __ip_vs_get_out_rt(struct ip_vs_conn *cp
-                                               .daddr = dest->addr,
-                                               .saddr = 0,
-                                               .tos = rtos, } },
--                              .proto = cp->protocol,
-                       };
-                       if (ip_route_output_key(&rt, &fl)) {
-@@ -102,7 +101,6 @@ __ip_vs_get_out_rt(struct ip_vs_conn *cp
-                                       .daddr = dest->addr,
-                                       .saddr = 0,
-                                       .tos = rtos, } },
--                      .proto = cp->protocol,
-               };
-               if (ip_route_output_key(&rt, &fl)) {
---- linux-2.6.0-test1/net/ipv4/ipvs/Kconfig    2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/ipvs/Kconfig   2003-07-19 17:03:51.000000000 -0700
-@@ -147,7 +147,7 @@ config     IP_VS_WLC
-         unsure, say N.
- config        IP_VS_LBLC
--      tristate "locality-based least-connection with replication scheduling"
-+      tristate "locality-based least-connection scheduling"
-         depends on IP_VS
-       ---help---
-         The locality-based least-connection scheduling algorithm is for
-@@ -163,7 +163,7 @@ config     IP_VS_LBLC
-         unsure, say N.
- config  IP_VS_LBLCR
--      tristate "locality-based least-connection with replication schedulin"
-+      tristate "locality-based least-connection with replication scheduling"
-         depends on IP_VS
-       ---help---
-         The locality-based least-connection with replication scheduling
---- linux-2.6.0-test1/net/ipv4/tcp_input.c     2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv4/tcp_input.c    2003-07-19 17:03:51.000000000 -0700
-@@ -2373,7 +2373,7 @@ static void tcp_fin(struct sk_buff *skb,
-       tcp_schedule_ack(tp);
-       sk->sk_shutdown |= RCV_SHUTDOWN;
--      sock_reset_flag(sk, SOCK_DONE);
-+      sock_set_flag(sk, SOCK_DONE);
-       switch (sk->sk_state) {
-               case TCP_SYN_RECV:
---- linux-2.6.0-test1/net/ipv6/addrconf.c      2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv6/addrconf.c     2003-07-19 17:03:51.000000000 -0700
-@@ -368,7 +368,8 @@ static struct inet6_dev * ipv6_add_dev(s
-                               dev, dev->name);
-                       ndev->cnf.use_tempaddr = -1;
-               } else {
--                      __ipv6_regen_rndid(ndev);
-+                      in6_dev_hold(ndev);
-+                      ipv6_regen_rndid((unsigned long) ndev);
-               }
- #endif
-@@ -1122,9 +1123,6 @@ static int __ipv6_regen_rndid(struct ine
-       sg[1].offset = ((long) eui64 & ~PAGE_MASK);
-       sg[1].length = 8;
--      if (!del_timer(&idev->regen_timer))
--              in6_dev_hold(idev);
--
-       dev = idev->dev;
-       if (ipv6_generate_eui64(eui64, dev)) {
-@@ -1137,7 +1135,6 @@ regen:
-       spin_lock(&md5_tfm_lock);
-       if (unlikely(md5_tfm == NULL)) {
-               spin_unlock(&md5_tfm_lock);
--              in6_dev_put(idev);
-               return -1;
-       }
-       crypto_digest_init(md5_tfm);
-@@ -1170,33 +1167,41 @@ regen:
-               if ((idev->rndid[2]|idev->rndid[3]|idev->rndid[4]|idev->rndid[5]|idev->rndid[6]|idev->rndid[7]) == 0x00)
-                       goto regen;
-       }
--      
--      idev->regen_timer.expires = jiffies +
--                                      idev->cnf.temp_prefered_lft * HZ - 
--                                      idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - desync_factor;
--      if (time_before(idev->regen_timer.expires, jiffies)) {
--              idev->regen_timer.expires = 0;
--              printk(KERN_WARNING
--                      "__ipv6_regen_rndid(): too short regeneration interval; timer disabled for %s.\n",
--                      idev->dev->name);
--              in6_dev_put(idev);
--              return -1;
--      }
--      add_timer(&idev->regen_timer);
-       return 0;
- }
- static void ipv6_regen_rndid(unsigned long data)
- {
-       struct inet6_dev *idev = (struct inet6_dev *) data;
-+      unsigned long expires;
-       read_lock_bh(&addrconf_lock);
-       write_lock_bh(&idev->lock);
--      if (!idev->dead)
--              __ipv6_regen_rndid(idev);
-+
-+      if (idev->dead)
-+              goto out;
-+
-+      if (__ipv6_regen_rndid(idev) < 0)
-+              goto out;
-+      
-+      expires = jiffies +
-+              idev->cnf.temp_prefered_lft * HZ - 
-+              idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - desync_factor;
-+      if (time_before(expires, jiffies)) {
-+              printk(KERN_WARNING
-+                      "ipv6_regen_rndid(): too short regeneration interval; timer disabled for %s.\n",
-+                      idev->dev->name);
-+              goto out;
-+      }
-+
-+      if (!mod_timer(&idev->regen_timer, expires))
-+              in6_dev_hold(idev);
-+
-+out:
-       write_unlock_bh(&idev->lock);
-       read_unlock_bh(&addrconf_lock);
-+      in6_dev_put(idev);
- }
- static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr) {
-@@ -1928,6 +1933,27 @@ static int addrconf_ifdown(struct net_de
-       /* Step 3: clear address list */
-       write_lock_bh(&idev->lock);
-+#ifdef CONFIG_IPV6_PRIVACY
-+      if (how == 1 && del_timer(&idev->regen_timer))
-+              in6_dev_put(idev);
-+
-+      /* clear tempaddr list */
-+      while ((ifa = idev->tempaddr_list) != NULL) {
-+              idev->tempaddr_list = ifa->tmp_next;
-+              ifa->tmp_next = NULL;
-+              ifa->dead = 1;
-+              write_unlock_bh(&idev->lock);
-+              spin_lock_bh(&ifa->lock);
-+
-+              if (ifa->ifpub) {
-+                      in6_ifa_put(ifa->ifpub);
-+                      ifa->ifpub = NULL;
-+              }
-+              spin_unlock_bh(&ifa->lock);
-+              in6_ifa_put(ifa);
-+              write_lock_bh(&idev->lock);
-+      }
-+#endif
-       while ((ifa = idev->addr_list) != NULL) {
-               idev->addr_list = ifa->if_next;
-               ifa->if_next = NULL;
---- linux-2.6.0-test1/net/ipv6/ah6.c   2003-06-16 22:32:21.000000000 -0700
-+++ 25/net/ipv6/ah6.c  2003-07-19 17:03:51.000000000 -0700
-@@ -19,7 +19,7 @@
-  *
-  *    Mitsuru KANDA @USAGI       : IPv6 Support 
-  *    Kazunori MIYAZAWA @USAGI   :
-- *    Kunihiro Ishiguro          :
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *    
-  *    This file is derived from net/ipv4/ah.c.
-  */
---- linux-2.6.0-test1/net/ipv6/esp6.c  2003-06-14 12:18:24.000000000 -0700
-+++ 25/net/ipv6/esp6.c 2003-07-19 17:03:51.000000000 -0700
-@@ -19,7 +19,7 @@
-  *
-  *    Mitsuru KANDA @USAGI       : IPv6 Support 
-  *    Kazunori MIYAZAWA @USAGI   :
-- *    Kunihiro Ishiguro          :
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *    
-  *    This file is derived from net/ipv4/esp.c
-  */
---- linux-2.6.0-test1/net/ipv6/route.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/ipv6/route.c        2003-07-19 17:03:51.000000000 -0700
-@@ -567,6 +567,11 @@ struct dst_entry *ndisc_dst_alloc(struct
-       if (unlikely(rt == NULL))
-               goto out;
-+      if (dev)
-+              dev_hold(dev);
-+      if (neigh)
-+              neigh_hold(neigh);
-+
-       rt->rt6i_dev      = dev;
-       rt->rt6i_nexthop  = neigh;
-       rt->rt6i_expires  = 0;
---- linux-2.6.0-test1/net/ipv6/sit.c   2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv6/sit.c  2003-07-19 17:03:51.000000000 -0700
-@@ -550,6 +550,7 @@ static int ipip6_tunnel_xmit(struct sk_b
-                       skb_set_owner_w(new_skb, skb->sk);
-               dev_kfree_skb(skb);
-               skb = new_skb;
-+              iph6 = skb->nh.ipv6h;
-       }
-       skb->nh.raw = skb_push(skb, sizeof(struct iphdr));
---- linux-2.6.0-test1/net/ipv6/tcp_ipv6.c      2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/ipv6/tcp_ipv6.c     2003-07-19 17:03:51.000000000 -0700
-@@ -579,7 +579,7 @@ static int tcp_v6_connect(struct sock *s
-       addr_type = ipv6_addr_type(&usin->sin6_addr);
--      if(addr_type & IPV6_ADDR_MULTICAST)
-+      if (addr_type & (IPV6_ADDR_ANYCAST | IPV6_ADDR_MULTICAST))
-               return -ENETUNREACH;
-       if (addr_type&IPV6_ADDR_LINKLOCAL) {
-@@ -967,12 +967,14 @@ static void tcp_v6_send_reset(struct sk_
-       struct tcphdr *th = skb->h.th, *t1; 
-       struct sk_buff *buff;
-       struct flowi fl;
-+      int daddr_type;
-       if (th->rst)
-               return;
--      if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr))
--              return; 
-+      daddr_type = ipv6_addr_type(&skb->nh.ipv6h->daddr);
-+      if (daddr_type & (IPV6_ADDR_ANYCAST | IPV6_ADDR_MULTICAST))
-+              return;
-       /*
-        * We need to grab some memory, and put together an RST,
-@@ -1171,13 +1173,14 @@ static int tcp_v6_conn_request(struct so
-       struct tcp_opt tmptp, *tp = tcp_sk(sk);
-       struct open_request *req = NULL;
-       __u32 isn = TCP_SKB_CB(skb)->when;
-+      int daddr_type;
-       if (skb->protocol == htons(ETH_P_IP))
-               return tcp_v4_conn_request(sk, skb);
--      /* FIXME: do the same check for anycast */
--      if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr))
--              goto drop; 
-+      daddr_type = ipv6_addr_type(&skb->nh.ipv6h->daddr);
-+      if (daddr_type & (IPV6_ADDR_ANYCAST | IPV6_ADDR_MULTICAST))
-+              goto drop;
-       /*
-        *      There are no SYN attacks on IPv6, yet...        
---- linux-2.6.0-test1/net/ipv6/xfrm6_input.c   2003-07-02 14:53:18.000000000 -0700
-+++ 25/net/ipv6/xfrm6_input.c  2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
-  * Authors:
-  *    Mitsuru KANDA @USAGI
-  *    Kazunori MIYAZAWA @USAGI
-- *    Kunihiro Ishiguro
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *    YOSHIFUJI Hideaki @USAGI
-  *            IPv6 support
-  */
---- linux-2.6.0-test1/net/ipv6/xfrm6_policy.c  2003-06-22 12:04:45.000000000 -0700
-+++ 25/net/ipv6/xfrm6_policy.c 2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
-  * Authors:
-  *    Mitsuru KANDA @USAGI
-  *    Kazunori MIYAZAWA @USAGI
-- *    Kunihiro Ishiguro
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *            IPv6 support
-  *    YOSHIFUJI Hideaki
-  *            Split up af-specific portion
---- linux-2.6.0-test1/net/ipv6/xfrm6_state.c   2003-06-14 12:18:08.000000000 -0700
-+++ 25/net/ipv6/xfrm6_state.c  2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
-  * Authors:
-  *    Mitsuru KANDA @USAGI
-  *    Kazunori MIYAZAWA @USAGI
-- *    Kunihiro Ishiguro
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *            IPv6 support
-  *    YOSHIFUJI Hideaki @USAGI
-  *            Split up af-specific portion
---- linux-2.6.0-test1/net/netsyms.c    2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/netsyms.c   2003-07-19 17:03:51.000000000 -0700
-@@ -685,7 +685,7 @@ EXPORT_SYMBOL(ip_route_me_harder);
- EXPORT_SYMBOL(register_gifconf);
--EXPORT_SYMBOL(softnet_data);
-+EXPORT_PER_CPU_SYMBOL(softnet_data);
- #ifdef CONFIG_NET_RADIO
- #include <net/iw_handler.h>           /* Wireless Extensions driver API */
---- linux-2.6.0-test1/net/sunrpc/auth_gss/auth_gss.c   2003-06-14 12:18:09.000000000 -0700
-+++ 25/net/sunrpc/auth_gss/auth_gss.c  2003-07-19 17:03:51.000000000 -0700
-@@ -235,7 +235,7 @@ gss_parse_init_downcall(struct gss_api_m
-               goto err;
-       }
-       ctx->gc_proc = RPC_GSS_PROC_DATA;
--      ctx->gc_seq = 0;
-+      ctx->gc_seq = 1;        /* NetApp 6.4R1 doesn't accept seq. no. 0 */
-       spin_lock_init(&ctx->gc_seq_lock);
-       atomic_set(&ctx->count,1);
---- linux-2.6.0-test1/net/sunrpc/clnt.c        2003-06-14 12:18:07.000000000 -0700
-+++ 25/net/sunrpc/clnt.c       2003-07-19 17:07:18.000000000 -0700
-@@ -385,7 +385,8 @@ rpc_setbufsize(struct rpc_clnt *clnt, un
-       xprt->rcvsize = 0;
-       if (rcvsize)
-               xprt->rcvsize = rcvsize + RPC_SLACK_SPACE;
--      xprt_sock_setbufsize(xprt);
-+      if (xprt_connected(xprt))
-+              xprt_sock_setbufsize(xprt);
- }
- /*
-@@ -743,14 +744,14 @@ call_timeout(struct rpc_task *task)
-       dprintk("RPC: %4d call_timeout (major)\n", task->tk_pid);
-       if (clnt->cl_softrtry) {
--              if (clnt->cl_chatty && !task->tk_exit)
-+              if (clnt->cl_chatty)
-                       printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
-                               clnt->cl_protname, clnt->cl_server);
-               rpc_exit(task, -EIO);
-               return;
-       }
--      if (clnt->cl_chatty && !(task->tk_flags & RPC_CALL_MAJORSEEN) && rpc_ntimeo(&clnt->cl_rtt) > 7) {
-+      if (clnt->cl_chatty && !(task->tk_flags & RPC_CALL_MAJORSEEN)) {
-               task->tk_flags |= RPC_CALL_MAJORSEEN;
-               printk(KERN_NOTICE "%s: server %s not responding, still trying\n",
-                       clnt->cl_protname, clnt->cl_server);
---- linux-2.6.0-test1/net/sunrpc/xprt.c        2003-06-14 12:18:25.000000000 -0700
-+++ 25/net/sunrpc/xprt.c       2003-07-19 17:07:18.000000000 -0700
-@@ -436,6 +436,7 @@ xprt_connect(struct rpc_task *task)
-               goto out_write;
-       }
-       xprt_bind_socket(xprt, sock);
-+      xprt_sock_setbufsize(xprt);
-       if (!xprt->stream)
-               goto out_write;
-@@ -1041,21 +1042,6 @@ out:
- }
- /*
-- * Exponential backoff for UDP retries
-- */
--static inline int
--xprt_expbackoff(struct rpc_task *task, struct rpc_rqst *req)
--{
--      int backoff;
--
--      req->rq_ntimeo++;
--      backoff = min(rpc_ntimeo(&task->tk_client->cl_rtt), XPRT_MAX_BACKOFF);
--      if (req->rq_ntimeo < (1 << backoff))
--              return 1;
--      return 0;
--}
--
--/*
-  * RPC receive timeout handler.
-  */
- static void
-@@ -1068,14 +1054,7 @@ xprt_timer(struct rpc_task *task)
-       if (req->rq_received)
-               goto out;
--      if (!xprt->nocong) {
--              if (xprt_expbackoff(task, req)) {
--                      rpc_add_timer(task, xprt_timer);
--                      goto out_unlock;
--              }
--              rpc_inc_timeo(&task->tk_client->cl_rtt);
--              xprt_adjust_cwnd(req->rq_xprt, -ETIMEDOUT);
--      }
-+      xprt_adjust_cwnd(req->rq_xprt, -ETIMEDOUT);
-       req->rq_nresend++;
-       dprintk("RPC: %4d xprt_timer (%s request)\n",
-@@ -1085,7 +1064,6 @@ xprt_timer(struct rpc_task *task)
- out:
-       task->tk_timeout = 0;
-       rpc_wake_up_task(task);
--out_unlock:
-       spin_unlock(&xprt->sock_lock);
- }
-@@ -1221,16 +1199,17 @@ xprt_transmit(struct rpc_task *task)
-       return;
-  out_receive:
-       dprintk("RPC: %4d xmit complete\n", task->tk_pid);
-+      spin_lock_bh(&xprt->sock_lock);
-       /* Set the task's receive timeout value */
-       if (!xprt->nocong) {
-               task->tk_timeout = rpc_calc_rto(&clnt->cl_rtt,
-                               task->tk_msg.rpc_proc->p_timer);
--              req->rq_ntimeo = 0;
-+              task->tk_timeout <<= clnt->cl_timeout.to_retries
-+                      - req->rq_timeout.to_retries;
-               if (task->tk_timeout > req->rq_timeout.to_maxval)
-                       task->tk_timeout = req->rq_timeout.to_maxval;
-       } else
-               task->tk_timeout = req->rq_timeout.to_current;
--      spin_lock_bh(&xprt->sock_lock);
-       /* Don't race with disconnect */
-       if (!xprt_connected(xprt))
-               task->tk_status = -ENOTCONN;
---- linux-2.6.0-test1/net/wanrouter/wanmain.c  2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/wanrouter/wanmain.c 2003-07-19 17:03:51.000000000 -0700
-@@ -668,7 +668,7 @@ static int wanrouter_device_stat(struct 
- static int wanrouter_device_new_if(struct wan_device *wandev,
-                                  wanif_conf_t *u_conf)
- {
--      wanif_conf_t conf;
-+      wanif_conf_t *cnf;
-       struct net_device *dev = NULL;
- #ifdef CONFIG_WANPIPE_MULTPPP
-       struct ppp_device *pppdev=NULL;
-@@ -678,38 +678,47 @@ static int wanrouter_device_new_if(struc
-       if ((wandev->state == WAN_UNCONFIGURED) || (wandev->new_if == NULL))
-               return -ENODEV;
--      if (copy_from_user(&conf, u_conf, sizeof(wanif_conf_t)))
--              return -EFAULT;
--
--      if (conf.magic != ROUTER_MAGIC)
--              return -EINVAL;
-+      cnf = kmalloc(sizeof(wanif_conf_t), GFP_KERNEL);
-+      if (!cnf)
-+              return -ENOBUFS;
-+
-+      err = -EFAULT;
-+      if (copy_from_user(cnf, u_conf, sizeof(wanif_conf_t)))
-+              goto out;
-+
-+      err = -EINVAL;
-+      if (cnf->magic != ROUTER_MAGIC)
-+              goto out;
--      if (conf.config_id == WANCONFIG_MPPP) {
-+      if (cnf->config_id == WANCONFIG_MPPP) {
- #ifdef CONFIG_WANPIPE_MULTPPP
-               pppdev = kmalloc(sizeof(struct ppp_device), GFP_KERNEL);
-+              err = -ENOBUFS;
-               if (pppdev == NULL)
--                      return -ENOBUFS;
-+                      goto out;
-               memset(pppdev, 0, sizeof(struct ppp_device));
-               pppdev->dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-               if (pppdev->dev == NULL) {
-                       kfree(pppdev);
--                      return -ENOBUFS;
-+                      err = -ENOBUFS;
-+                      goto out;
-               }
-               memset(pppdev->dev, 0, sizeof(struct net_device));
--              err = wandev->new_if(wandev,
--                                   (struct net_device *)pppdev, &conf);
-+              err = wandev->new_if(wandev, (struct net_device *)pppdev, cnf);
-               dev = pppdev->dev;
- #else
-               printk(KERN_INFO "%s: Wanpipe Mulit-Port PPP support has not been compiled in!\n",
-                               wandev->name);
--              return -EPROTONOSUPPORT;
-+              err = -EPROTONOSUPPORT;
-+              goto out;
- #endif
-       } else {
-               dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
-+              err = -ENOBUFS;
-               if (dev == NULL)
--                      return -ENOBUFS;
-+                      goto out;
-               memset(dev, 0, sizeof(struct net_device));
--              err = wandev->new_if(wandev, dev, &conf);
-+              err = wandev->new_if(wandev, dev, cnf);
-       }
-       if (!err) {
-@@ -748,7 +757,8 @@ static int wanrouter_device_new_if(struc
-                               ++wandev->ndev;
-                               unlock_adapter_irq(&wandev->lock, &smp_flags);
--                              return 0;       /* done !!! */
-+                              err = 0;        /* done !!! */
-+                              goto out;
-                       }
-               }
-               if (wandev->del_if)
-@@ -761,18 +771,19 @@ static int wanrouter_device_new_if(struc
-               dev->priv = NULL;
-       }
--
- #ifdef CONFIG_WANPIPE_MULTPPP
--      if (conf.config_id == WANCONFIG_MPPP)
-+      if (cnf->config_id == WANCONFIG_MPPP)
-               kfree(pppdev);
-       else
-               kfree(dev);
- #else
-       /* Sync PPP is disabled */
--      if (conf.config_id != WANCONFIG_MPPP)
-+      if (cnf->config_id != WANCONFIG_MPPP)
-               kfree(dev);
- #endif
-+out:
-+      kfree(cnf);
-       return err;
- }
---- linux-2.6.0-test1/net/xfrm/xfrm_policy.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/net/xfrm/xfrm_policy.c  2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
-  * Changes:
-  *    Mitsuru KANDA @USAGI
-  *    Kazunori MIYAZAWA @USAGI
-- *    Kunihiro Ishiguro
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *            IPv6 support
-  *    Kazunori MIYAZAWA @USAGI
-  *    YOSHIFUJI Hideaki
---- linux-2.6.0-test1/net/xfrm/xfrm_state.c    2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/xfrm/xfrm_state.c   2003-07-19 17:03:51.000000000 -0700
-@@ -4,7 +4,7 @@
-  * Changes:
-  *    Mitsuru KANDA @USAGI
-  *    Kazunori MIYAZAWA @USAGI
-- *    Kunihiro Ishiguro
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *            IPv6 support
-  *    YOSHIFUJI Hideaki @USAGI
-  *            Split up af-specific functions
---- linux-2.6.0-test1/net/xfrm/xfrm_user.c     2003-07-10 18:50:32.000000000 -0700
-+++ 25/net/xfrm/xfrm_user.c    2003-07-19 17:03:51.000000000 -0700
-@@ -5,7 +5,7 @@
-  * Changes:
-  *    Mitsuru KANDA @USAGI
-  *    Kazunori MIYAZAWA @USAGI
-- *    Kunihiro Ishiguro
-+ *    Kunihiro Ishiguro <kunihiro@ipinfusion.com>
-  *            IPv6 support
-  *    
-  */
---- linux-2.6.0-test1/scripts/ver_linux        2003-07-10 18:50:32.000000000 -0700
-+++ 25/scripts/ver_linux       2003-07-19 17:03:51.000000000 -0700
-@@ -54,11 +54,14 @@ pppd --version 2>&1| grep version | awk 
- isdnctrl 2>&1 | grep version | awk \
- 'NR==1{print "isdn4k-utils          ", $NF}'
-+showmount --version 2>&1 | grep nfs-utils | awk \
-+'NR==1{print "nfs-utils             ", $NF}'
-+
- ls -l `ldd /bin/sh | awk '/libc/{print $3}'` | sed \
- -e 's/\.so$//' | awk -F'[.-]'   '{print "Linux C Library        " \
- $(NF-2)"."$(NF-1)"."$NF}'
--ldd -v > /dev/null 2>&1 && ldd -v || ldd --version |head -1 | awk \
-+ldd -v > /dev/null 2>&1 && ldd -v || ldd --version |head -n 1 | awk \
- 'NR==1{print "Dynamic linker (ldd)  ", $NF}'
- ls -l /usr/lib/lib{g,stdc}++.so  2>/dev/null | awk -F. \
---- linux-2.6.0-test1/security/Kconfig 2003-06-14 12:18:25.000000000 -0700
-+++ 25/security/Kconfig        2003-07-19 17:04:47.000000000 -0700
-@@ -44,5 +44,7 @@ config SECURITY_ROOTPLUG
-         
-         If you are unsure how to answer this question, answer N.
-+source security/selinux/Kconfig
-+
- endmenu
---- linux-2.6.0-test1/security/Makefile        2003-06-14 12:18:28.000000000 -0700
-+++ 25/security/Makefile       2003-07-19 17:04:47.000000000 -0700
-@@ -2,6 +2,8 @@
- # Makefile for the kernel security code
- #
-+subdir-$(CONFIG_SECURITY_SELINUX)     += selinux
-+
- # if we don't select a security model, use the default capabilities
- ifneq ($(CONFIG_SECURITY),y)
- obj-y         += capability.o
-@@ -9,5 +11,9 @@ endif
- # Object file lists
- obj-$(CONFIG_SECURITY)                        += security.o dummy.o
-+# Must precede capability.o in order to stack properly.
-+ifeq ($(CONFIG_SECURITY_SELINUX),y)
-+      obj-$(CONFIG_SECURITY_SELINUX)  += selinux/built-in.o
-+endif
- obj-$(CONFIG_SECURITY_CAPABILITIES)   += capability.o
- obj-$(CONFIG_SECURITY_ROOTPLUG)               += root_plug.o
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/avc.c  2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,1115 @@
-+/*
-+ * Implementation of the kernel access vector cache (AVC).
-+ *
-+ * Authors:  Stephen Smalley, <sds@epoch.ncsc.mil>
-+ *           James Morris <jmorris@redhat.com>
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ *    This program is free software; you can redistribute it and/or modify
-+ *    it under the terms of the GNU General Public License version 2,
-+ *      as published by the Free Software Foundation.
-+ */
-+#include <linux/types.h>
-+#include <linux/stddef.h>
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/dcache.h>
-+#include <linux/skbuff.h>
-+#include <net/sock.h>
-+#include <linux/un.h>
-+#include <net/af_unix.h>
-+#include <linux/ip.h>
-+#include <linux/udp.h>
-+#include <linux/tcp.h>
-+#include "avc.h"
-+#include "avc_ss.h"
-+#include "class_to_string.h"
-+#include "common_perm_to_string.h"
-+#include "av_inherit.h"
-+#include "av_perm_to_string.h"
-+#include "objsec.h"
-+
-+#define AVC_CACHE_SLOTS               512
-+#define AVC_CACHE_MAXNODES    410
-+
-+struct avc_entry {
-+      u32                     ssid;
-+      u32                     tsid;
-+      u16                     tclass;
-+      struct av_decision      avd;
-+      int                     used;   /* used recently */
-+};
-+
-+struct avc_node {
-+      struct avc_entry        ae;
-+      struct avc_node         *next;
-+};
-+
-+struct avc_cache {
-+      struct avc_node *slots[AVC_CACHE_SLOTS];
-+      u32             lru_hint;       /* LRU hint for reclaim scan */
-+      u32             active_nodes;
-+      u32             latest_notif;   /* latest revocation notification */
-+};
-+
-+struct avc_callback_node {
-+      int (*callback) (u32 event, u32 ssid, u32 tsid,
-+                       u16 tclass, u32 perms,
-+                       u32 *out_retained);
-+      u32 events;
-+      u32 ssid;
-+      u32 tsid;
-+      u16 tclass;
-+      u32 perms;
-+      struct avc_callback_node *next;
-+};
-+
-+static spinlock_t avc_lock = SPIN_LOCK_UNLOCKED;
-+static spinlock_t avc_log_lock = SPIN_LOCK_UNLOCKED;
-+static struct avc_node *avc_node_freelist = NULL;
-+static struct avc_cache avc_cache;
-+static char *avc_audit_buffer = NULL;
-+static unsigned avc_cache_stats[AVC_NSTATS];
-+static struct avc_callback_node *avc_callbacks = NULL;
-+static unsigned int avc_log_level = 4; /* default:  KERN_WARNING */
-+static char avc_level_string[4] = "< >";
-+
-+static inline int avc_hash(u32 ssid, u32 tsid, u16 tclass)
-+{
-+      return (ssid ^ (tsid<<2) ^ (tclass<<4)) & (AVC_CACHE_SLOTS - 1);
-+}
-+
-+/**
-+ * avc_dump_av - Display an access vector in human-readable form.
-+ * @tclass: target security class
-+ * @av: access vector
-+ */
-+void avc_dump_av(u16 tclass, u32 av)
-+{
-+      char **common_pts = 0;
-+      u32 common_base = 0;
-+      int i, i2, perm;
-+
-+      if (av == 0) {
-+              printk(" null");
-+              return;
-+      }
-+
-+      for (i = 0; i < ARRAY_SIZE(av_inherit); i++) {
-+              if (av_inherit[i].tclass == tclass) {
-+                      common_pts = av_inherit[i].common_pts;
-+                      common_base = av_inherit[i].common_base;
-+                      break;
-+              }
-+      }
-+
-+      printk(" {");
-+      i = 0;
-+      perm = 1;
-+      while (perm < common_base) {
-+              if (perm & av)
-+                      printk(" %s", common_pts[i]);
-+              i++;
-+              perm <<= 1;
-+      }
-+
-+      while (i < sizeof(av) * 8) {
-+              if (perm & av) {
-+                      for (i2 = 0; i2 < ARRAY_SIZE(av_perm_to_string); i2++) {
-+                              if ((av_perm_to_string[i2].tclass == tclass) &&
-+                                  (av_perm_to_string[i2].value == perm))
-+                                      break;
-+                      }
-+                      if (i2 < ARRAY_SIZE(av_perm_to_string))
-+                              printk(" %s", av_perm_to_string[i2].name);
-+              }
-+              i++;
-+              perm <<= 1;
-+      }
-+
-+      printk(" }");
-+}
-+
-+/**
-+ * avc_dump_query - Display a SID pair and a class in human-readable form.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ */
-+void avc_dump_query(u32 ssid, u32 tsid, u16 tclass)
-+{
-+      int rc;
-+      char *scontext;
-+      u32 scontext_len;
-+
-+      rc = security_sid_to_context(ssid, &scontext, &scontext_len);
-+      if (rc)
-+              printk("ssid=%d", ssid);
-+      else {
-+              printk("scontext=%s", scontext);
-+              kfree(scontext);
-+      }
-+
-+      rc = security_sid_to_context(tsid, &scontext, &scontext_len);
-+      if (rc)
-+              printk(" tsid=%d", tsid);
-+      else {
-+              printk(" tcontext=%s", scontext);
-+              kfree(scontext);
-+      }
-+      printk(" tclass=%s", class_to_string[tclass]);
-+}
-+
-+/**
-+ * avc_init - Initialize the AVC.
-+ *
-+ * Initialize the access vector cache.
-+ */
-+void avc_init(void)
-+{
-+      struct avc_node *new;
-+      int i;
-+
-+      for (i = 0; i < AVC_NSTATS; i++)
-+              avc_cache_stats[i] = 0;
-+
-+      for (i = 0; i < AVC_CACHE_SLOTS; i++)
-+              avc_cache.slots[i] = 0;
-+      avc_cache.lru_hint = 0;
-+      avc_cache.active_nodes = 0;
-+      avc_cache.latest_notif = 0;
-+
-+      for (i = 0; i < AVC_CACHE_MAXNODES; i++) {
-+              new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+              if (!new) {
-+                      printk(KERN_WARNING "avc:  only able to allocate "
-+                             "%d entries\n", i);
-+                      break;
-+              }
-+              memset(new, 0, sizeof(*new));
-+              new->next = avc_node_freelist;
-+              avc_node_freelist = new;
-+      }
-+
-+      avc_audit_buffer = (char *)__get_free_page(GFP_ATOMIC);
-+      if (!avc_audit_buffer)
-+              panic("AVC:  unable to allocate audit buffer\n");
-+
-+      avc_level_string[1] = '0' + avc_log_level;
-+}
-+
-+#if 0
-+static void avc_hash_eval(char *tag)
-+{
-+      int i, chain_len, max_chain_len, slots_used;
-+      struct avc_node *node;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&avc_lock,flags);
-+
-+      slots_used = 0;
-+      max_chain_len = 0;
-+      for (i = 0; i < AVC_CACHE_SLOTS; i++) {
-+              node = avc_cache.slots[i];
-+              if (node) {
-+                      slots_used++;
-+                      chain_len = 0;
-+                      while (node) {
-+                              chain_len++;
-+                              node = node->next;
-+                      }
-+                      if (chain_len > max_chain_len)
-+                              max_chain_len = chain_len;
-+              }
-+      }
-+
-+      spin_unlock_irqrestore(&avc_lock,flags);
-+
-+      printk(KERN_INFO "\n");
-+      printk(KERN_INFO "%s avc:  %d entries and %d/%d buckets used, longest "
-+             "chain length %d\n", tag, avc_cache.active_nodes, slots_used,
-+             AVC_CACHE_SLOTS, max_chain_len);
-+}
-+#else
-+static inline void avc_hash_eval(char *tag)
-+{ }
-+#endif
-+
-+static inline struct avc_node *avc_reclaim_node(void)
-+{
-+      struct avc_node *prev, *cur;
-+      int hvalue, try;
-+
-+      hvalue = avc_cache.lru_hint;
-+      for (try = 0; try < 2; try++) {
-+              do {
-+                      prev = NULL;
-+                      cur = avc_cache.slots[hvalue];
-+                      while (cur) {
-+                              if (!cur->ae.used)
-+                                      goto found;
-+
-+                              cur->ae.used = 0;
-+
-+                              prev = cur;
-+                              cur = cur->next;
-+                      }
-+                      hvalue = (hvalue + 1) & (AVC_CACHE_SLOTS - 1);
-+              } while (hvalue != avc_cache.lru_hint);
-+      }
-+
-+      panic("avc_reclaim_node");
-+
-+found:
-+      avc_cache.lru_hint = hvalue;
-+
-+      if (prev == NULL)
-+              avc_cache.slots[hvalue] = cur->next;
-+      else
-+              prev->next = cur->next;
-+
-+      return cur;
-+}
-+
-+static inline struct avc_node *avc_claim_node(u32 ssid,
-+                                              u32 tsid, u16 tclass)
-+{
-+      struct avc_node *new;
-+      int hvalue;
-+
-+      hvalue = avc_hash(ssid, tsid, tclass);
-+      if (avc_node_freelist) {
-+              new = avc_node_freelist;
-+              avc_node_freelist = avc_node_freelist->next;
-+              avc_cache.active_nodes++;
-+      } else {
-+              new = avc_reclaim_node();
-+              if (!new)
-+                      goto out;
-+      }
-+
-+      new->ae.used = 1;
-+      new->ae.ssid = ssid;
-+      new->ae.tsid = tsid;
-+      new->ae.tclass = tclass;
-+      new->next = avc_cache.slots[hvalue];
-+      avc_cache.slots[hvalue] = new;
-+
-+out:
-+      return new;
-+}
-+
-+static inline struct avc_node *avc_search_node(u32 ssid, u32 tsid,
-+                                               u16 tclass, int *probes)
-+{
-+      struct avc_node *cur;
-+      int hvalue;
-+      int tprobes = 1;
-+
-+      hvalue = avc_hash(ssid, tsid, tclass);
-+      cur = avc_cache.slots[hvalue];
-+      while (cur != NULL &&
-+             (ssid != cur->ae.ssid ||
-+              tclass != cur->ae.tclass ||
-+              tsid != cur->ae.tsid)) {
-+              tprobes++;
-+              cur = cur->next;
-+      }
-+
-+      if (cur == NULL) {
-+              /* cache miss */
-+              goto out;
-+      }
-+
-+      /* cache hit */
-+      if (probes)
-+              *probes = tprobes;
-+
-+      cur->ae.used = 1;
-+
-+out:
-+      return cur;
-+}
-+
-+/**
-+ * avc_lookup - Look up an AVC entry.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions, interpreted based on @tclass
-+ * @aeref:  AVC entry reference
-+ *
-+ * Look up an AVC entry that is valid for the
-+ * @requested permissions between the SID pair
-+ * (@ssid, @tsid), interpreting the permissions
-+ * based on @tclass.  If a valid AVC entry exists,
-+ * then this function updates @aeref to refer to the
-+ * entry and returns %0. Otherwise, this function
-+ * returns -%ENOENT.
-+ */
-+int avc_lookup(u32 ssid, u32 tsid, u16 tclass,
-+               u32 requested, struct avc_entry_ref *aeref)
-+{
-+      struct avc_node *node;
-+      int probes, rc = 0;
-+
-+      avc_cache_stats_incr(AVC_CAV_LOOKUPS);
-+      node = avc_search_node(ssid, tsid, tclass,&probes);
-+
-+      if (node && ((node->ae.avd.decided & requested) == requested)) {
-+              avc_cache_stats_incr(AVC_CAV_HITS);
-+              avc_cache_stats_add(AVC_CAV_PROBES,probes);
-+              aeref->ae = &node->ae;
-+              goto out;
-+      }
-+
-+      avc_cache_stats_incr(AVC_CAV_MISSES);
-+      rc = -ENOENT;
-+out:
-+      return rc;
-+}
-+
-+/**
-+ * avc_insert - Insert an AVC entry.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @ae: AVC entry
-+ * @aeref:  AVC entry reference
-+ *
-+ * Insert an AVC entry for the SID pair
-+ * (@ssid, @tsid) and class @tclass.
-+ * The access vectors and the sequence number are
-+ * normally provided by the security server in
-+ * response to a security_compute_av() call.  If the
-+ * sequence number @ae->avd.seqno is not less than the latest
-+ * revocation notification, then the function copies
-+ * the access vectors into a cache entry, updates
-+ * @aeref to refer to the entry, and returns %0.
-+ * Otherwise, this function returns -%EAGAIN.
-+ */
-+int avc_insert(u32 ssid, u32 tsid, u16 tclass,
-+               struct avc_entry *ae, struct avc_entry_ref *aeref)
-+{
-+      struct avc_node *node;
-+      int rc = 0;
-+
-+      if (ae->avd.seqno < avc_cache.latest_notif) {
-+              printk(KERN_WARNING "avc:  seqno %d < latest_notif %d\n",
-+                     ae->avd.seqno, avc_cache.latest_notif);
-+              rc = -EAGAIN;
-+              goto out;
-+      }
-+
-+      node = avc_claim_node(ssid, tsid, tclass);
-+      if (!node) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      node->ae.avd.allowed = ae->avd.allowed;
-+      node->ae.avd.decided = ae->avd.decided;
-+      node->ae.avd.auditallow = ae->avd.auditallow;
-+      node->ae.avd.auditdeny = ae->avd.auditdeny;
-+      node->ae.avd.seqno = ae->avd.seqno;
-+      aeref->ae = &node->ae;
-+out:
-+      return rc;
-+}
-+
-+static inline void avc_print_ipv4_addr(u32 addr, u16 port, char *name1, char *name2)
-+{
-+      if (addr)
-+              printk(" %s=%d.%d.%d.%d", name1, NIPQUAD(addr));
-+      if (port)
-+              printk(" %s=%d", name2, ntohs(port));
-+}
-+
-+/*
-+ * Copied from net/core/utils.c:net_ratelimit and modified for
-+ * use by the AVC audit facility.
-+ */
-+#define AVC_MSG_COST  5*HZ
-+#define AVC_MSG_BURST 10*5*HZ
-+
-+/*
-+ * This enforces a rate limit: not more than one kernel message
-+ * every 5secs to make a denial-of-service attack impossible.
-+ */
-+static int avc_ratelimit(void)
-+{
-+      static spinlock_t ratelimit_lock = SPIN_LOCK_UNLOCKED;
-+      static unsigned long toks = 10*5*HZ;
-+      static unsigned long last_msg;
-+      static int missed, rc = 0;
-+      unsigned long flags;
-+      unsigned long now = jiffies;
-+
-+      spin_lock_irqsave(&ratelimit_lock, flags);
-+      toks += now - last_msg;
-+      last_msg = now;
-+      if (toks > AVC_MSG_BURST)
-+              toks = AVC_MSG_BURST;
-+      if (toks >= AVC_MSG_COST) {
-+              int lost = missed;
-+              missed = 0;
-+              toks -= AVC_MSG_COST;
-+              spin_unlock_irqrestore(&ratelimit_lock, flags);
-+              if (lost)
-+                      printk(KERN_WARNING "AVC: %d messages suppressed.\n",
-+                             lost);
-+              rc = 1;
-+              goto out;
-+      }
-+      missed++;
-+      spin_unlock_irqrestore(&ratelimit_lock, flags);
-+out:
-+      return rc;
-+}
-+
-+static inline int check_avc_ratelimit(void)
-+{
-+      if (selinux_enforcing)
-+              return avc_ratelimit();
-+      else {
-+              /* If permissive, then never suppress messages. */
-+              return 1;
-+      }
-+}
-+
-+/**
-+ * avc_audit - Audit the granting or denial of permissions.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions
-+ * @avd: access vector decisions
-+ * @result: result from avc_has_perm_noaudit
-+ * @a:  auxiliary audit data
-+ *
-+ * Audit the granting or denial of permissions in accordance
-+ * with the policy.  This function is typically called by
-+ * avc_has_perm() after a permission check, but can also be
-+ * called directly by callers who use avc_has_perm_noaudit()
-+ * in order to separate the permission check from the auditing.
-+ * For example, this separation is useful when the permission check must
-+ * be performed under a lock, to allow the lock to be released
-+ * before calling the auditing code.
-+ */
-+void avc_audit(u32 ssid, u32 tsid,
-+               u16 tclass, u32 requested,
-+               struct av_decision *avd, int result, struct avc_audit_data *a)
-+{
-+      struct task_struct *tsk = current;
-+      struct inode *inode = NULL;
-+      char *p;
-+      u32 denied, audited;
-+
-+      denied = requested & ~avd->allowed;
-+      if (denied) {
-+              audited = denied;
-+              if (!(audited & avd->auditdeny))
-+                      return;
-+      } else if (result) {
-+              audited = denied = requested;
-+        } else {
-+              audited = requested;
-+              if (!(audited & avd->auditallow))
-+                      return;
-+      }
-+
-+      if (!check_avc_ratelimit())
-+              return;
-+
-+      /* prevent overlapping printks */
-+      spin_lock_irq(&avc_log_lock);
-+
-+      printk("%s\n", avc_level_string);
-+      printk("%savc:  %s ", avc_level_string, denied ? "denied" : "granted");
-+      avc_dump_av(tclass,audited);
-+      printk(" for ");
-+      if (a && a->tsk)
-+              tsk = a->tsk;
-+      if (tsk && tsk->pid) {
-+              struct mm_struct *mm;
-+              struct vm_area_struct *vma;
-+              printk(" pid=%d", tsk->pid);
-+              if (tsk == current)
-+                      mm = current->mm;
-+              else
-+                      mm = get_task_mm(tsk);
-+              if (mm) {
-+                      if (down_read_trylock(&mm->mmap_sem)) {
-+                              vma = mm->mmap;
-+                              while (vma) {
-+                                      if ((vma->vm_flags & VM_EXECUTABLE) &&
-+                                          vma->vm_file) {
-+                                              p = d_path(vma->vm_file->f_dentry,
-+                                                         vma->vm_file->f_vfsmnt,
-+                                                         avc_audit_buffer,
-+                                                         PAGE_SIZE);
-+                                              printk(" exe=%s", p);
-+                                              break;
-+                                      }
-+                                      vma = vma->vm_next;
-+                              }
-+                              up_read(&mm->mmap_sem);
-+                      }
-+                      if (tsk != current)
-+                              mmput(mm);
-+              } else {
-+                      printk(" comm=%s", tsk->comm);
-+              }
-+      }
-+      if (a) {
-+              switch (a->type) {
-+              case AVC_AUDIT_DATA_IPC:
-+                      printk(" key=%d", a->u.ipc_id);
-+                      break;
-+              case AVC_AUDIT_DATA_CAP:
-+                      printk(" capability=%d", a->u.cap);
-+                      break;
-+              case AVC_AUDIT_DATA_FS:
-+                      if (a->u.fs.dentry) {
-+                              if (a->u.fs.mnt) {
-+                                      p = d_path(a->u.fs.dentry,
-+                                                 a->u.fs.mnt,
-+                                                 avc_audit_buffer,
-+                                                 PAGE_SIZE);
-+                                      if (p)
-+                                              printk(" path=%s", p);
-+                              }
-+                              inode = a->u.fs.dentry->d_inode;
-+                      } else if (a->u.fs.inode) {
-+                              inode = a->u.fs.inode;
-+                      }
-+                      if (inode)
-+                              printk(" dev=%s ino=%ld",
-+                                     inode->i_sb->s_id, inode->i_ino);
-+                      break;
-+              case AVC_AUDIT_DATA_NET:
-+                      if (a->u.net.sk) {
-+                              struct sock *sk = a->u.net.sk;
-+                              struct unix_sock *u;
-+                              struct inet_opt *inet;
-+
-+                              switch (sk->sk_family) {
-+                              case AF_INET:
-+                                      inet = inet_sk(sk);
-+                                      avc_print_ipv4_addr(inet->rcv_saddr,
-+                                                          inet->sport,
-+                                                          "laddr", "lport");
-+                                      avc_print_ipv4_addr(inet->daddr,
-+                                                          inet->dport,
-+                                                          "faddr", "fport");
-+                                      break;
-+                              case AF_UNIX:
-+                                      u = unix_sk(sk);
-+                                      if (u->dentry) {
-+                                              p = d_path(u->dentry,
-+                                                         u->mnt,
-+                                                         avc_audit_buffer,
-+                                                         PAGE_SIZE);
-+                                              printk(" path=%s", p);
-+                                      } else if (u->addr) {
-+                                              p = avc_audit_buffer;
-+                                              memcpy(p,
-+                                                     u->addr->name->sun_path,
-+                                                     u->addr->len-sizeof(short));
-+                                              if (*p == 0) {
-+                                                      *p = '@';
-+                                                      p += u->addr->len-sizeof(short);
-+                                                      *p = 0;
-+                                              }
-+                                              printk(" path=%s",
-+                                                     avc_audit_buffer);
-+                                      }
-+                                      break;
-+                              }
-+                      }
-+                      if (a->u.net.daddr) {
-+                              printk(" daddr=%d.%d.%d.%d",
-+                                     NIPQUAD(a->u.net.daddr));
-+                              if (a->u.net.port)
-+                                      printk(" dest=%d", a->u.net.port);
-+                      } else if (a->u.net.port)
-+                              printk(" port=%d", a->u.net.port);
-+                      if (a->u.net.skb) {
-+                              struct sk_buff *skb = a->u.net.skb;
-+
-+                              if ((skb->protocol == htons(ETH_P_IP)) &&
-+                                   skb->nh.iph) {
-+                                      u16 source = 0, dest = 0;
-+                                      u8  protocol = skb->nh.iph->protocol;
-+
-+
-+                                      if (protocol == IPPROTO_TCP &&
-+                                          skb->h.th) {
-+                                              source = skb->h.th->source;
-+                                              dest = skb->h.th->dest;
-+                                      }
-+                                      if (protocol == IPPROTO_UDP &&
-+                                          skb->h.uh) {
-+                                              source = skb->h.uh->source;
-+                                              dest = skb->h.uh->dest;
-+                                      }
-+
-+                                      avc_print_ipv4_addr(skb->nh.iph->saddr,
-+                                                          source,
-+                                                          "saddr", "source");
-+                                      avc_print_ipv4_addr(skb->nh.iph->daddr,
-+                                                          dest,
-+                                                          "daddr", "dest");
-+                              }
-+                      }
-+                      if (a->u.net.netif)
-+                              printk(" netif=%s", a->u.net.netif);
-+                      break;
-+              }
-+      }
-+      printk(" ");
-+      avc_dump_query(ssid, tsid, tclass);
-+      printk("\n");
-+
-+      spin_unlock_irq(&avc_log_lock);
-+}
-+
-+/**
-+ * avc_add_callback - Register a callback for security events.
-+ * @callback: callback function
-+ * @events: security events
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions
-+ *
-+ * Register a callback function for events in the set @events
-+ * related to the SID pair (@ssid, @tsid) and
-+ * and the permissions @perms, interpreting
-+ * @perms based on @tclass.  Returns %0 on success or
-+ * -%ENOMEM if insufficient memory exists to add the callback.
-+ */
-+int avc_add_callback(int (*callback)(u32 event, u32 ssid, u32 tsid,
-+                                     u16 tclass, u32 perms,
-+                                     u32 *out_retained),
-+                     u32 events, u32 ssid, u32 tsid,
-+                     u16 tclass, u32 perms)
-+{
-+      struct avc_callback_node *c;
-+      int rc = 0;
-+
-+      c = kmalloc(sizeof(*c), GFP_ATOMIC);
-+      if (!c) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      c->callback = callback;
-+      c->events = events;
-+      c->ssid = ssid;
-+      c->tsid = tsid;
-+      c->perms = perms;
-+      c->next = avc_callbacks;
-+      avc_callbacks = c;
-+out:
-+      return rc;
-+}
-+
-+static inline int avc_sidcmp(u32 x, u32 y)
-+{
-+      return (x == y || x == SECSID_WILD || y == SECSID_WILD);
-+}
-+
-+static inline void avc_update_node(u32 event, struct avc_node *node, u32 perms)
-+{
-+      switch (event) {
-+      case AVC_CALLBACK_GRANT:
-+              node->ae.avd.allowed |= perms;
-+              break;
-+      case AVC_CALLBACK_TRY_REVOKE:
-+      case AVC_CALLBACK_REVOKE:
-+              node->ae.avd.allowed &= ~perms;
-+              break;
-+      case AVC_CALLBACK_AUDITALLOW_ENABLE:
-+              node->ae.avd.auditallow |= perms;
-+              break;
-+      case AVC_CALLBACK_AUDITALLOW_DISABLE:
-+              node->ae.avd.auditallow &= ~perms;
-+              break;
-+      case AVC_CALLBACK_AUDITDENY_ENABLE:
-+              node->ae.avd.auditdeny |= perms;
-+              break;
-+      case AVC_CALLBACK_AUDITDENY_DISABLE:
-+              node->ae.avd.auditdeny &= ~perms;
-+              break;
-+      }
-+}
-+
-+static int avc_update_cache(u32 event, u32 ssid, u32 tsid,
-+                            u16 tclass, u32 perms)
-+{
-+      struct avc_node *node;
-+      int i;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&avc_lock,flags);
-+
-+      if (ssid == SECSID_WILD || tsid == SECSID_WILD) {
-+              /* apply to all matching nodes */
-+              for (i = 0; i < AVC_CACHE_SLOTS; i++) {
-+                      for (node = avc_cache.slots[i]; node;
-+                           node = node->next) {
-+                              if (avc_sidcmp(ssid, node->ae.ssid) &&
-+                                  avc_sidcmp(tsid, node->ae.tsid) &&
-+                                  tclass == node->ae.tclass) {
-+                                      avc_update_node(event,node,perms);
-+                              }
-+                      }
-+              }
-+      } else {
-+              /* apply to one node */
-+              node = avc_search_node(ssid, tsid, tclass, 0);
-+              if (node) {
-+                      avc_update_node(event,node,perms);
-+              }
-+      }
-+
-+      spin_unlock_irqrestore(&avc_lock,flags);
-+
-+      return 0;
-+}
-+
-+static int avc_control(u32 event, u32 ssid, u32 tsid,
-+                       u16 tclass, u32 perms,
-+                       u32 seqno, u32 *out_retained)
-+{
-+      struct avc_callback_node *c;
-+      u32 tretained = 0, cretained = 0;
-+      int rc = 0;
-+      unsigned long flags;
-+
-+      /*
-+       * try_revoke only removes permissions from the cache
-+       * state if they are not retained by the object manager.
-+       * Hence, try_revoke must wait until after the callbacks have
-+       * been invoked to update the cache state.
-+       */
-+      if (event != AVC_CALLBACK_TRY_REVOKE)
-+              avc_update_cache(event,ssid,tsid,tclass,perms);
-+
-+      for (c = avc_callbacks; c; c = c->next)
-+      {
-+              if ((c->events & event) &&
-+                  avc_sidcmp(c->ssid, ssid) &&
-+                  avc_sidcmp(c->tsid, tsid) &&
-+                  c->tclass == tclass &&
-+                  (c->perms & perms)) {
-+                      cretained = 0;
-+                      rc = c->callback(event, ssid, tsid, tclass,
-+                                       (c->perms & perms),
-+                                       &cretained);
-+                      if (rc)
-+                              goto out;
-+                      tretained |= cretained;
-+              }
-+      }
-+
-+      if (event == AVC_CALLBACK_TRY_REVOKE) {
-+              /* revoke any unretained permissions */
-+              perms &= ~tretained;
-+              avc_update_cache(event,ssid,tsid,tclass,perms);
-+              *out_retained = tretained;
-+      }
-+
-+      spin_lock_irqsave(&avc_lock,flags);
-+      if (seqno > avc_cache.latest_notif)
-+              avc_cache.latest_notif = seqno;
-+      spin_unlock_irqrestore(&avc_lock,flags);
-+
-+out:
-+      return rc;
-+}
-+
-+/**
-+ * avc_ss_grant - Grant previously denied permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ */
-+int avc_ss_grant(u32 ssid, u32 tsid, u16 tclass,
-+                 u32 perms, u32 seqno)
-+{
-+      return avc_control(AVC_CALLBACK_GRANT,
-+                         ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_ss_try_revoke - Try to revoke previously granted permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ * @out_retained: subset of @perms that are retained
-+ *
-+ * Try to revoke previously granted permissions, but
-+ * only if they are not retained as migrated permissions.
-+ * Return the subset of permissions that are retained via @out_retained.
-+ */
-+int avc_ss_try_revoke(u32 ssid, u32 tsid, u16 tclass,
-+                      u32 perms, u32 seqno, u32 *out_retained)
-+{
-+      return avc_control(AVC_CALLBACK_TRY_REVOKE,
-+                         ssid, tsid, tclass, perms, seqno, out_retained);
-+}
-+
-+/**
-+ * avc_ss_revoke - Revoke previously granted permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ *
-+ * Revoke previously granted permissions, even if
-+ * they are retained as migrated permissions.
-+ */
-+int avc_ss_revoke(u32 ssid, u32 tsid, u16 tclass,
-+                  u32 perms, u32 seqno)
-+{
-+      return avc_control(AVC_CALLBACK_REVOKE,
-+                         ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_ss_reset - Flush the cache and revalidate migrated permissions.
-+ * @seqno: policy sequence number
-+ */
-+int avc_ss_reset(u32 seqno)
-+{
-+      struct avc_callback_node *c;
-+      int i, rc = 0;
-+      struct avc_node *node, *tmp;
-+      unsigned long flags;
-+
-+      avc_hash_eval("reset");
-+
-+      spin_lock_irqsave(&avc_lock,flags);
-+
-+      for (i = 0; i < AVC_CACHE_SLOTS; i++) {
-+              node = avc_cache.slots[i];
-+              while (node) {
-+                      tmp = node;
-+                      node = node->next;
-+                      tmp->ae.ssid = tmp->ae.tsid = SECSID_NULL;
-+                      tmp->ae.tclass = SECCLASS_NULL;
-+                      tmp->ae.avd.allowed = tmp->ae.avd.decided = 0;
-+                      tmp->ae.avd.auditallow = tmp->ae.avd.auditdeny = 0;
-+                      tmp->ae.used = 0;
-+                      tmp->next = avc_node_freelist;
-+                      avc_node_freelist = tmp;
-+                      avc_cache.active_nodes--;
-+              }
-+              avc_cache.slots[i] = 0;
-+      }
-+      avc_cache.lru_hint = 0;
-+
-+      spin_unlock_irqrestore(&avc_lock,flags);
-+
-+      for (i = 0; i < AVC_NSTATS; i++)
-+              avc_cache_stats[i] = 0;
-+
-+      for (c = avc_callbacks; c; c = c->next) {
-+              if (c->events & AVC_CALLBACK_RESET) {
-+                      rc = c->callback(AVC_CALLBACK_RESET,
-+                                       0, 0, 0, 0, 0);
-+                      if (rc)
-+                              goto out;
-+              }
-+      }
-+
-+      spin_lock_irqsave(&avc_lock,flags);
-+      if (seqno > avc_cache.latest_notif)
-+              avc_cache.latest_notif = seqno;
-+      spin_unlock_irqrestore(&avc_lock,flags);
-+out:
-+      return rc;
-+}
-+
-+/**
-+ * avc_ss_set_auditallow - Enable or disable auditing of granted permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ * @enable: enable flag.
-+ */
-+int avc_ss_set_auditallow(u32 ssid, u32 tsid, u16 tclass,
-+                          u32 perms, u32 seqno, u32 enable)
-+{
-+      if (enable)
-+              return avc_control(AVC_CALLBACK_AUDITALLOW_ENABLE,
-+                                 ssid, tsid, tclass, perms, seqno, 0);
-+      else
-+              return avc_control(AVC_CALLBACK_AUDITALLOW_DISABLE,
-+                                 ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_ss_set_auditdeny - Enable or disable auditing of denied permissions.
-+ * @ssid: source security identifier or %SECSID_WILD
-+ * @tsid: target security identifier or %SECSID_WILD
-+ * @tclass: target security class
-+ * @perms: permissions to grant
-+ * @seqno: policy sequence number
-+ * @enable: enable flag.
-+ */
-+int avc_ss_set_auditdeny(u32 ssid, u32 tsid, u16 tclass,
-+                         u32 perms, u32 seqno, u32 enable)
-+{
-+      if (enable)
-+              return avc_control(AVC_CALLBACK_AUDITDENY_ENABLE,
-+                                 ssid, tsid, tclass, perms, seqno, 0);
-+      else
-+              return avc_control(AVC_CALLBACK_AUDITDENY_DISABLE,
-+                                 ssid, tsid, tclass, perms, seqno, 0);
-+}
-+
-+/**
-+ * avc_has_perm_noaudit - Check permissions but perform no auditing.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions, interpreted based on @tclass
-+ * @aeref:  AVC entry reference
-+ * @avd: access vector decisions
-+ *
-+ * Check the AVC to determine whether the @requested permissions are granted
-+ * for the SID pair (@ssid, @tsid), interpreting the permissions
-+ * based on @tclass, and call the security server on a cache miss to obtain
-+ * a new decision and add it to the cache.  Update @aeref to refer to an AVC
-+ * entry with the resulting decisions, and return a copy of the decisions
-+ * in @avd.  Return %0 if all @requested permissions are granted,
-+ * -%EACCES if any permissions are denied, or another -errno upon
-+ * other errors.  This function is typically called by avc_has_perm(),
-+ * but may also be called directly to separate permission checking from
-+ * auditing, e.g. in cases where a lock must be held for the check but
-+ * should be released for the auditing.
-+ */
-+int avc_has_perm_noaudit(u32 ssid, u32 tsid,
-+                         u16 tclass, u32 requested,
-+                         struct avc_entry_ref *aeref, struct av_decision *avd)
-+{
-+      struct avc_entry *ae;
-+      int rc = 0;
-+      unsigned long flags;
-+      struct avc_entry entry;
-+      u32 denied;
-+      struct avc_entry_ref ref;
-+
-+      if (!aeref) {
-+              avc_entry_ref_init(&ref);
-+              aeref = &ref;
-+      }
-+
-+      spin_lock_irqsave(&avc_lock, flags);
-+      avc_cache_stats_incr(AVC_ENTRY_LOOKUPS);
-+      ae = aeref->ae;
-+      if (ae) {
-+              if (ae->ssid == ssid &&
-+                  ae->tsid == tsid &&
-+                  ae->tclass == tclass &&
-+                  ((ae->avd.decided & requested) == requested)) {
-+                      avc_cache_stats_incr(AVC_ENTRY_HITS);
-+                      ae->used = 1;
-+              } else {
-+                      avc_cache_stats_incr(AVC_ENTRY_DISCARDS);
-+                      ae = 0;
-+              }
-+      }
-+
-+      if (!ae) {
-+              avc_cache_stats_incr(AVC_ENTRY_MISSES);
-+              rc = avc_lookup(ssid, tsid, tclass, requested, aeref);
-+              if (rc) {
-+                      spin_unlock_irqrestore(&avc_lock,flags);
-+                      rc = security_compute_av(ssid,tsid,tclass,requested,&entry.avd);
-+                      if (rc)
-+                              goto out;
-+                      spin_lock_irqsave(&avc_lock, flags);
-+                      rc = avc_insert(ssid,tsid,tclass,&entry,aeref);
-+                      if (rc) {
-+                              spin_unlock_irqrestore(&avc_lock,flags);
-+                              goto out;
-+                      }
-+              }
-+              ae = aeref->ae;
-+      }
-+
-+      if (avd)
-+              memcpy(avd, &ae->avd, sizeof(*avd));
-+
-+      denied = requested & ~(ae->avd.allowed);
-+
-+      if (!requested || denied) {
-+              if (selinux_enforcing) {
-+                      spin_unlock_irqrestore(&avc_lock,flags);
-+                      rc = -EACCES;
-+                      goto out;
-+              } else {
-+                      ae->avd.allowed |= requested;
-+                      spin_unlock_irqrestore(&avc_lock,flags);
-+                      goto out;
-+              }
-+      }
-+
-+      spin_unlock_irqrestore(&avc_lock,flags);
-+out:
-+      return rc;
-+}
-+
-+/**
-+ * avc_has_perm - Check permissions and perform any appropriate auditing.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions, interpreted based on @tclass
-+ * @aeref:  AVC entry reference
-+ * @auditdata: auxiliary audit data
-+ *
-+ * Check the AVC to determine whether the @requested permissions are granted
-+ * for the SID pair (@ssid, @tsid), interpreting the permissions
-+ * based on @tclass, and call the security server on a cache miss to obtain
-+ * a new decision and add it to the cache.  Update @aeref to refer to an AVC
-+ * entry with the resulting decisions.  Audit the granting or denial of
-+ * permissions in accordance with the policy.  Return %0 if all @requested
-+ * permissions are granted, -%EACCES if any permissions are denied, or
-+ * another -errno upon other errors.
-+ */
-+int avc_has_perm(u32 ssid, u32 tsid, u16 tclass,
-+                 u32 requested, struct avc_entry_ref *aeref,
-+                 struct avc_audit_data *auditdata)
-+{
-+      struct av_decision avd;
-+      int rc;
-+
-+      rc = avc_has_perm_noaudit(ssid, tsid, tclass, requested, aeref, &avd);
-+      avc_audit(ssid, tsid, tclass, requested, &avd, rc, auditdata);
-+      return rc;
-+}
-+
-+static int __init avc_log_level_setup(char *str)
-+{
-+      avc_log_level = simple_strtol(str, NULL, 0);
-+      if (avc_log_level > 7)
-+              avc_log_level = 7;
-+      return 1;
-+}
-+
-+__setup("avc_log_level=", avc_log_level_setup);
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/hooks.c        2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,3405 @@
-+/*
-+ *  NSA Security-Enhanced Linux (SELinux) security module
-+ *
-+ *  This file contains the SELinux hook function implementations.
-+ *
-+ *  Authors:  Stephen Smalley, <sds@epoch.ncsc.mil>
-+ *            Chris Vance, <cvance@nai.com>
-+ *            Wayne Salamon, <wsalamon@nai.com>
-+ *            James Morris <jmorris@redhat.com>
-+ *
-+ *  Copyright (C) 2001,2002 Networks Associates Technology, Inc.
-+ *  Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ *    This program is free software; you can redistribute it and/or modify
-+ *    it under the terms of the GNU General Public License version 2,
-+ *      as published by the Free Software Foundation.
-+ */
-+
-+#define XATTR_SECURITY_PREFIX "security."
-+#define XATTR_SELINUX_SUFFIX "selinux"
-+#define XATTR_NAME_SELINUX XATTR_SECURITY_PREFIX XATTR_SELINUX_SUFFIX
-+
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/ptrace.h>
-+#include <linux/errno.h>
-+#include <linux/sched.h>
-+#include <linux/security.h>
-+#include <linux/xattr.h>
-+#include <linux/capability.h>
-+#include <linux/unistd.h>
-+#include <linux/mm.h>
-+#include <linux/mman.h>
-+#include <linux/slab.h>
-+#include <linux/pagemap.h>
-+#include <linux/swap.h>
-+#include <linux/smp_lock.h>
-+#include <linux/spinlock.h>
-+#include <linux/file.h>
-+#include <linux/namei.h>
-+#include <linux/mount.h>
-+#include <linux/ext2_fs.h>
-+#include <linux/proc_fs.h>
-+#include <linux/kd.h>
-+#include <net/icmp.h>
-+#include <net/ip.h>           /* for sysctl_local_port_range[] */
-+#include <net/tcp.h>          /* struct or_callable used in sock_rcv_skb */
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+#include <asm/ioctls.h>
-+#include <linux/bitops.h>
-+#include <linux/interrupt.h>
-+#include <linux/netdevice.h>  /* for network interface checks */
-+#include <linux/netlink.h>
-+#include <linux/tcp.h>
-+#include <linux/quota.h>
-+#include <linux/un.h>         /* for Unix socket types */
-+#include <net/af_unix.h>      /* for Unix socket types */
-+
-+#include "avc.h"
-+#include "objsec.h"
-+
-+#ifdef CONFIG_SECURITY_SELINUX_DEVELOP
-+int selinux_enforcing = 0;
-+
-+static int __init enforcing_setup(char *str)
-+{
-+      selinux_enforcing = simple_strtol(str,NULL,0);
-+      return 1;
-+}
-+__setup("enforcing=", enforcing_setup);
-+#endif
-+
-+/* Original (dummy) security module. */
-+static struct security_operations *original_ops = NULL;
-+
-+/* Minimal support for a secondary security module,
-+   just to allow the use of the dummy or capability modules.
-+   The owlsm module can alternatively be used as a secondary
-+   module as long as CONFIG_OWLSM_FD is not enabled. */
-+static struct security_operations *secondary_ops = NULL;
-+
-+/* Lists of inode and superblock security structures initialized
-+   before the policy was loaded. */
-+static LIST_HEAD(inode_security_head);
-+static spinlock_t inode_security_lock = SPIN_LOCK_UNLOCKED;
-+
-+static LIST_HEAD(superblock_security_head);
-+static spinlock_t sb_security_lock = SPIN_LOCK_UNLOCKED;
-+
-+/* Allocate and free functions for each kind of security blob. */
-+
-+static int task_alloc_security(struct task_struct *task)
-+{
-+      struct task_security_struct *tsec;
-+
-+      tsec = kmalloc(sizeof(struct task_security_struct), GFP_KERNEL);
-+      if (!tsec)
-+              return -ENOMEM;
-+
-+      memset(tsec, 0, sizeof(struct task_security_struct));
-+      tsec->magic = SELINUX_MAGIC;
-+      tsec->task = task;
-+      tsec->osid = tsec->sid = SECINITSID_UNLABELED;
-+      task->security = tsec;
-+
-+      return 0;
-+}
-+
-+static void task_free_security(struct task_struct *task)
-+{
-+      struct task_security_struct *tsec = task->security;
-+
-+      if (!tsec || tsec->magic != SELINUX_MAGIC)
-+              return;
-+
-+      task->security = NULL;
-+      kfree(tsec);
-+}
-+
-+static int inode_alloc_security(struct inode *inode)
-+{
-+      struct task_security_struct *tsec = current->security;
-+      struct inode_security_struct *isec;
-+
-+      isec = kmalloc(sizeof(struct inode_security_struct), GFP_KERNEL);
-+      if (!isec)
-+              return -ENOMEM;
-+
-+      memset(isec, 0, sizeof(struct inode_security_struct));
-+      init_MUTEX(&isec->sem);
-+      INIT_LIST_HEAD(&isec->list);
-+      isec->magic = SELINUX_MAGIC;
-+      isec->inode = inode;
-+      isec->sid = SECINITSID_UNLABELED;
-+      isec->sclass = SECCLASS_FILE;
-+      if (tsec && tsec->magic == SELINUX_MAGIC)
-+              isec->task_sid = tsec->sid;
-+      else
-+              isec->task_sid = SECINITSID_UNLABELED;
-+      inode->i_security = isec;
-+
-+      return 0;
-+}
-+
-+static void inode_free_security(struct inode *inode)
-+{
-+      struct inode_security_struct *isec = inode->i_security;
-+
-+      if (!isec || isec->magic != SELINUX_MAGIC)
-+              return;
-+
-+      spin_lock(&inode_security_lock);
-+      if (!list_empty(&isec->list))
-+              list_del_init(&isec->list);
-+      spin_unlock(&inode_security_lock);
-+
-+      inode->i_security = NULL;
-+      kfree(isec);
-+}
-+
-+static int file_alloc_security(struct file *file)
-+{
-+      struct task_security_struct *tsec = current->security;
-+      struct file_security_struct *fsec;
-+
-+      fsec = kmalloc(sizeof(struct file_security_struct), GFP_ATOMIC);
-+      if (!fsec)
-+              return -ENOMEM;
-+
-+      memset(fsec, 0, sizeof(struct file_security_struct));
-+      fsec->magic = SELINUX_MAGIC;
-+      fsec->file = file;
-+      if (tsec && tsec->magic == SELINUX_MAGIC) {
-+              fsec->sid = tsec->sid;
-+              fsec->fown_sid = tsec->sid;
-+      } else {
-+              fsec->sid = SECINITSID_UNLABELED;
-+              fsec->fown_sid = SECINITSID_UNLABELED;
-+      }
-+      file->f_security = fsec;
-+
-+      return 0;
-+}
-+
-+static void file_free_security(struct file *file)
-+{
-+      struct file_security_struct *fsec = file->f_security;
-+
-+      if (!fsec || fsec->magic != SELINUX_MAGIC)
-+              return;
-+
-+      file->f_security = NULL;
-+      kfree(fsec);
-+}
-+
-+static int superblock_alloc_security(struct super_block *sb)
-+{
-+      struct superblock_security_struct *sbsec;
-+
-+      sbsec = kmalloc(sizeof(struct superblock_security_struct), GFP_KERNEL);
-+      if (!sbsec)
-+              return -ENOMEM;
-+
-+      memset(sbsec, 0, sizeof(struct superblock_security_struct));
-+      init_MUTEX(&sbsec->sem);
-+      INIT_LIST_HEAD(&sbsec->list);
-+      sbsec->magic = SELINUX_MAGIC;
-+      sbsec->sb = sb;
-+      sbsec->sid = SECINITSID_UNLABELED;
-+      sb->s_security = sbsec;
-+
-+      return 0;
-+}
-+
-+static void superblock_free_security(struct super_block *sb)
-+{
-+      struct superblock_security_struct *sbsec = sb->s_security;
-+
-+      if (!sbsec || sbsec->magic != SELINUX_MAGIC)
-+              return;
-+
-+      spin_lock(&sb_security_lock);
-+      if (!list_empty(&sbsec->list))
-+              list_del_init(&sbsec->list);
-+      spin_unlock(&sb_security_lock);
-+
-+      sb->s_security = NULL;
-+      kfree(sbsec);
-+}
-+
-+/* The security server must be initialized before
-+   any labeling or access decisions can be provided. */
-+extern int ss_initialized;
-+
-+/* The file system's label must be initialized prior to use. */
-+
-+static char *labeling_behaviors[5] = {
-+      "uses xattr",
-+      "uses transition SIDs",
-+      "uses task SIDs",
-+      "uses genfs_contexts",
-+      "not configured for labeling"
-+};
-+
-+static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry);
-+
-+static inline int inode_doinit(struct inode *inode)
-+{
-+      return inode_doinit_with_dentry(inode, NULL);
-+}
-+
-+static int superblock_doinit(struct super_block *sb)
-+{
-+      struct superblock_security_struct *sbsec = sb->s_security;
-+      struct dentry *root = sb->s_root;
-+      struct inode *inode = root->d_inode;
-+      int rc = 0;
-+
-+      down(&sbsec->sem);
-+      if (sbsec->initialized)
-+              goto out;
-+
-+      if (!ss_initialized) {
-+              /* Defer initialization until selinux_complete_init,
-+                 after the initial policy is loaded and the security
-+                 server is ready to handle calls. */
-+              spin_lock(&sb_security_lock);
-+              if (list_empty(&sbsec->list))
-+                      list_add(&sbsec->list, &superblock_security_head);
-+              spin_unlock(&sb_security_lock);
-+              goto out;
-+      }
-+
-+      /* Determine the labeling behavior to use for this filesystem type. */
-+      rc = security_fs_use(sb->s_type->name, &sbsec->behavior, &sbsec->sid);
-+      if (rc) {
-+              printk(KERN_WARNING "%s:  security_fs_use(%s) returned %d\n",
-+                     __FUNCTION__, sb->s_type->name, rc);
-+              goto out;
-+      }
-+
-+      if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
-+              /* Make sure that the xattr handler exists and that no
-+                 error other than -ENODATA is returned by getxattr on
-+                 the root directory.  -ENODATA is ok, as this may be
-+                 the first boot of the SELinux kernel before we have
-+                 assigned xattr values to the filesystem. */
-+              if (!inode->i_op->getxattr) {
-+                      printk(KERN_WARNING "SELinux: (dev %s, type %s) has no "
-+                             "xattr support\n", sb->s_id, sb->s_type->name);
-+                      rc = -EOPNOTSUPP;
-+                      goto out;
-+              }
-+              rc = inode->i_op->getxattr(root, XATTR_NAME_SELINUX, NULL, 0);
-+              if (rc < 0 && rc != -ENODATA) {
-+                      if (rc == -EOPNOTSUPP)
-+                              printk(KERN_WARNING "SELinux: (dev %s, type "
-+                                     "%s) has no security xattr handler\n",
-+                                     sb->s_id, sb->s_type->name);
-+                      else
-+                              printk(KERN_WARNING "SELinux: (dev %s, type "
-+                                     "%s) getxattr errno %d\n", sb->s_id,
-+                                     sb->s_type->name, -rc);
-+                      goto out;
-+              }
-+      }
-+
-+      if (strcmp(sb->s_type->name, "proc") == 0)
-+              sbsec->proc = 1;
-+
-+      sbsec->initialized = 1;
-+
-+      printk(KERN_INFO "SELinux: initialized (dev %s, type %s), %s\n",
-+             sb->s_id, sb->s_type->name,
-+             labeling_behaviors[sbsec->behavior-1]);
-+
-+      /* Initialize the root inode. */
-+      rc = inode_doinit_with_dentry(sb->s_root->d_inode, sb->s_root);
-+out:
-+      up(&sbsec->sem);
-+      return rc;
-+}
-+
-+static inline u16 inode_mode_to_security_class(umode_t mode)
-+{
-+      switch (mode & S_IFMT) {
-+      case S_IFSOCK:
-+              return SECCLASS_SOCK_FILE;
-+      case S_IFLNK:
-+              return SECCLASS_LNK_FILE;
-+      case S_IFREG:
-+              return SECCLASS_FILE;
-+      case S_IFBLK:
-+              return SECCLASS_BLK_FILE;
-+      case S_IFDIR:
-+              return SECCLASS_DIR;
-+      case S_IFCHR:
-+              return SECCLASS_CHR_FILE;
-+      case S_IFIFO:
-+              return SECCLASS_FIFO_FILE;
-+
-+      }
-+
-+      return SECCLASS_FILE;
-+}
-+
-+static inline u16 socket_type_to_security_class(int family, int type)
-+{
-+      switch (family) {
-+      case PF_UNIX:
-+              switch (type) {
-+              case SOCK_STREAM:
-+                      return SECCLASS_UNIX_STREAM_SOCKET;
-+              case SOCK_DGRAM:
-+                      return SECCLASS_UNIX_DGRAM_SOCKET;
-+              }
-+      case PF_INET:
-+      case PF_INET6:
-+              switch (type) {
-+              case SOCK_STREAM:
-+                      return SECCLASS_TCP_SOCKET;
-+              case SOCK_DGRAM:
-+                      return SECCLASS_UDP_SOCKET;
-+              case SOCK_RAW:
-+                      return SECCLASS_RAWIP_SOCKET;
-+              }
-+      case PF_NETLINK:
-+              return SECCLASS_NETLINK_SOCKET;
-+      case PF_PACKET:
-+              return SECCLASS_PACKET_SOCKET;
-+      case PF_KEY:
-+              return SECCLASS_KEY_SOCKET;
-+      }
-+
-+      return SECCLASS_SOCKET;
-+}
-+
-+#ifdef CONFIG_PROC_FS
-+static int selinux_proc_get_sid(struct proc_dir_entry *de,
-+                              u16 tclass,
-+                              u32 *sid)
-+{
-+      int buflen, rc;
-+      char *buffer, *path, *end;
-+
-+      buffer = (char*)__get_free_page(GFP_KERNEL);
-+      if (!buffer)
-+              return -ENOMEM;
-+
-+      buflen = PAGE_SIZE;
-+      end = buffer+buflen;
-+      *--end = '\0';
-+      buflen--;
-+      path = end-1;
-+      *path = '/';
-+      while (de && de != de->parent) {
-+              buflen -= de->namelen + 1;
-+              if (buflen < 0)
-+                      break;
-+              end -= de->namelen;
-+              memcpy(end, de->name, de->namelen);
-+              *--end = '/';
-+              path = end;
-+              de = de->parent;
-+      }
-+      rc = security_genfs_sid("proc", path, tclass, sid);
-+      free_page((unsigned long)buffer);
-+      return rc;
-+}
-+#else
-+static int selinux_proc_get_sid(struct proc_dir_entry *de,
-+                              u16 tclass,
-+                              u32 *sid)
-+{
-+      return -EINVAL;
-+}
-+#endif
-+
-+/* The inode's security attributes must be initialized before first use. */
-+static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry)
-+{
-+      struct superblock_security_struct *sbsec = NULL;
-+      struct inode_security_struct *isec = inode->i_security;
-+      u32 sid;
-+      struct dentry *dentry;
-+#define INITCONTEXTLEN 255
-+      char *context = NULL;
-+      unsigned len = 0;
-+      int rc = 0;
-+      int hold_sem = 0;
-+
-+      if (isec->initialized)
-+              goto out;
-+
-+      down(&isec->sem);
-+      hold_sem = 1;
-+      if (isec->initialized)
-+              goto out;
-+
-+      sbsec = inode->i_sb->s_security;
-+      if (!sbsec || !sbsec->initialized) {
-+              /* Defer initialization until selinux_complete_init,
-+                 after the initial policy is loaded and the security
-+                 server is ready to handle calls. */
-+              spin_lock(&inode_security_lock);
-+              if (list_empty(&isec->list))
-+                      list_add(&isec->list, &inode_security_head);
-+              spin_unlock(&inode_security_lock);
-+              goto out;
-+      }
-+
-+      switch (sbsec->behavior) {
-+      case SECURITY_FS_USE_XATTR:
-+              if (!inode->i_op->getxattr) {
-+                      isec->sid = SECINITSID_FILE;
-+                      break;
-+              }
-+
-+              /* Need a dentry, since the xattr API requires one.
-+                 Life would be simpler if we could just pass the inode. */
-+              if (opt_dentry) {
-+                      /* Called from d_instantiate or d_splice_alias. */
-+                      dentry = dget(opt_dentry);
-+              } else {
-+                      /* Called from selinux_complete_init, try to find a dentry. */
-+                      dentry = d_find_alias(inode);
-+              }
-+              if (!dentry) {
-+                      printk(KERN_WARNING "%s:  no dentry for dev=%s "
-+                             "ino=%ld\n", __FUNCTION__, inode->i_sb->s_id,
-+                             inode->i_ino);
-+                      goto out;
-+              }
-+
-+              len = INITCONTEXTLEN;
-+              context = kmalloc(len, GFP_KERNEL);
-+              if (!context) {
-+                      rc = -ENOMEM;
-+                      dput(dentry);
-+                      goto out;
-+              }
-+              rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX,
-+                                         context, len);
-+              if (rc == -ERANGE) {
-+                      /* Need a larger buffer.  Query for the right size. */
-+                      rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX,
-+                                                 NULL, 0);
-+                      if (rc < 0) {
-+                              dput(dentry);
-+                              goto out;
-+                      }
-+                      kfree(context);
-+                      len = rc;
-+                      context = kmalloc(len, GFP_KERNEL);
-+                      if (!context) {
-+                              rc = -ENOMEM;
-+                              dput(dentry);
-+                              goto out;
-+                      }
-+                      rc = inode->i_op->getxattr(dentry,
-+                                                 XATTR_NAME_SELINUX,
-+                                                 context, len);
-+              }
-+              dput(dentry);
-+              if (rc < 0) {
-+                      if (rc != -ENODATA) {
-+                              printk(KERN_WARNING "%s:  getxattr returned "
-+                                     "%d for dev=%s ino=%ld\n", __FUNCTION__,
-+                                     -rc, inode->i_sb->s_id, inode->i_ino);
-+                              kfree(context);
-+                              goto out;
-+                      }
-+                      /* Map ENODATA to the default file SID */
-+                      sid = SECINITSID_FILE;
-+                      rc = 0;
-+              } else {
-+                      rc = security_context_to_sid(context, rc, &sid);
-+                      if (rc) {
-+                              printk(KERN_WARNING "%s:  context_to_sid(%s) "
-+                                     "returned %d for dev=%s ino=%ld\n",
-+                                     __FUNCTION__, context, -rc,
-+                                     inode->i_sb->s_id, inode->i_ino);
-+                              kfree(context);
-+                              goto out;
-+                      }
-+              }
-+              kfree(context);
-+              isec->sid = sid;
-+              break;
-+      case SECURITY_FS_USE_TASK:
-+              isec->sid = isec->task_sid;
-+              break;
-+      case SECURITY_FS_USE_TRANS:
-+              /* Default to the fs SID. */
-+              isec->sid = sbsec->sid;
-+
-+              /* Try to obtain a transition SID. */
-+              isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+              rc = security_transition_sid(isec->task_sid,
-+                                           sbsec->sid,
-+                                           isec->sclass,
-+                                           &sid);
-+              if (rc)
-+                      goto out;
-+              isec->sid = sid;
-+              break;
-+      default:
-+              /* Default to the fs SID. */
-+              isec->sid = sbsec->sid;
-+
-+              if (sbsec->proc) {
-+                      struct proc_inode *proci = PROC_I(inode);
-+                      if (proci->pde) {
-+                              isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+                              rc = selinux_proc_get_sid(proci->pde,
-+                                                        isec->sclass,
-+                                                        &sid);
-+                              if (rc)
-+                                      goto out;
-+                              isec->sid = sid;
-+                      }
-+              }
-+              break;
-+      }
-+
-+      isec->initialized = 1;
-+
-+out:
-+      if (inode->i_sock) {
-+              struct socket *sock = SOCKET_I(inode);
-+              if (sock->sk) {
-+                      isec->sclass = socket_type_to_security_class(sock->sk->sk_family,
-+                                                                   sock->sk->sk_type);
-+              } else {
-+                      isec->sclass = SECCLASS_SOCKET;
-+              }
-+      } else {
-+              isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+      }
-+
-+      if (hold_sem)
-+              up(&isec->sem);
-+      return rc;
-+}
-+
-+/* Convert a Linux signal to an access vector. */
-+static inline u32 signal_to_av(int sig)
-+{
-+      u32 perm = 0;
-+
-+      switch (sig) {
-+      case SIGCHLD:
-+              /* Commonly granted from child to parent. */
-+              perm = PROCESS__SIGCHLD;
-+              break;
-+      case SIGKILL:
-+              /* Cannot be caught or ignored */
-+              perm = PROCESS__SIGKILL;
-+              break;
-+      case SIGSTOP:
-+              /* Cannot be caught or ignored */
-+              perm = PROCESS__SIGSTOP;
-+              break;
-+      default:
-+              /* All other signals. */
-+              perm = PROCESS__SIGNAL;
-+              break;
-+      }
-+
-+      return perm;
-+}
-+
-+/* Check permission betweeen a pair of tasks, e.g. signal checks,
-+   fork check, ptrace check, etc. */
-+int task_has_perm(struct task_struct *tsk1,
-+                struct task_struct *tsk2,
-+                u32 perms)
-+{
-+      struct task_security_struct *tsec1, *tsec2;
-+
-+      tsec1 = tsk1->security;
-+      tsec2 = tsk2->security;
-+      return avc_has_perm(tsec1->sid, tsec2->sid,
-+                          SECCLASS_PROCESS, perms, &tsec2->avcr, NULL);
-+}
-+
-+/* Check whether a task is allowed to use a capability. */
-+int task_has_capability(struct task_struct *tsk,
-+                      int cap)
-+{
-+      struct task_security_struct *tsec;
-+      struct avc_audit_data ad;
-+
-+      tsec = tsk->security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,CAP);
-+      ad.tsk = tsk;
-+      ad.u.cap = cap;
-+
-+      return avc_has_perm(tsec->sid, tsec->sid,
-+                          SECCLASS_CAPABILITY, CAP_TO_MASK(cap), NULL, &ad);
-+}
-+
-+/* Check whether a task is allowed to use a system operation. */
-+int task_has_system(struct task_struct *tsk,
-+                  u32 perms)
-+{
-+      struct task_security_struct *tsec;
-+
-+      tsec = tsk->security;
-+
-+      return avc_has_perm(tsec->sid, SECINITSID_KERNEL,
-+                          SECCLASS_SYSTEM, perms, NULL, NULL);
-+}
-+
-+/* Check whether a task has a particular permission to an inode.
-+   The 'aeref' parameter is optional and allows other AVC
-+   entry references to be passed (e.g. the one in the struct file).
-+   The 'adp' parameter is optional and allows other audit
-+   data to be passed (e.g. the dentry). */
-+int inode_has_perm(struct task_struct *tsk,
-+                 struct inode *inode,
-+                 u32 perms,
-+                 struct avc_entry_ref *aeref,
-+                 struct avc_audit_data *adp)
-+{
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *isec;
-+      struct avc_audit_data ad;
-+
-+      tsec = tsk->security;
-+      isec = inode->i_security;
-+
-+      if (!adp) {
-+              adp = &ad;
-+              AVC_AUDIT_DATA_INIT(&ad, FS);
-+              ad.u.fs.inode = inode;
-+      }
-+
-+      return avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                          perms, aeref ? aeref : &isec->avcr, adp);
-+}
-+
-+/* Same as inode_has_perm, but pass explicit audit data containing
-+   the dentry to help the auditing code to more easily generate the
-+   pathname if needed. */
-+static inline int dentry_has_perm(struct task_struct *tsk,
-+                                struct vfsmount *mnt,
-+                                struct dentry *dentry,
-+                                u32 av)
-+{
-+      struct inode *inode = dentry->d_inode;
-+      struct avc_audit_data ad;
-+      AVC_AUDIT_DATA_INIT(&ad,FS);
-+      ad.u.fs.mnt = mnt;
-+      ad.u.fs.dentry = dentry;
-+      return inode_has_perm(tsk, inode, av, NULL, &ad);
-+}
-+
-+/* Check whether a task can use an open file descriptor to
-+   access an inode in a given way.  Check access to the
-+   descriptor itself, and then use dentry_has_perm to
-+   check a particular permission to the file.
-+   Access to the descriptor is implicitly granted if it
-+   has the same SID as the process.  If av is zero, then
-+   access to the file is not checked, e.g. for cases
-+   where only the descriptor is affected like seek. */
-+static inline int file_has_perm(struct task_struct *tsk,
-+                              struct file *file,
-+                              u32 av)
-+{
-+      struct task_security_struct *tsec = tsk->security;
-+      struct file_security_struct *fsec = file->f_security;
-+      struct vfsmount *mnt = file->f_vfsmnt;
-+      struct dentry *dentry = file->f_dentry;
-+      struct inode *inode = dentry->d_inode;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, FS);
-+      ad.u.fs.mnt = mnt;
-+      ad.u.fs.dentry = dentry;
-+
-+      if (tsec->sid != fsec->sid) {
-+              rc = avc_has_perm(tsec->sid, fsec->sid,
-+                                SECCLASS_FD,
-+                                FD__USE,
-+                                &fsec->avcr, &ad);
-+              if (rc)
-+                      return rc;
-+      }
-+
-+      /* av is zero if only checking access to the descriptor. */
-+      if (av)
-+              return inode_has_perm(tsk, inode, av, &fsec->inode_avcr, &ad);
-+
-+      return 0;
-+}
-+
-+/* Check whether a task can create a file. */
-+static int may_create(struct inode *dir,
-+                    struct dentry *dentry,
-+                    u16 tclass)
-+{
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *dsec;
-+      struct superblock_security_struct *sbsec;
-+      u32 newsid;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      tsec = current->security;
-+      dsec = dir->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, FS);
-+      ad.u.fs.dentry = dentry;
-+
-+      rc = avc_has_perm(tsec->sid, dsec->sid, SECCLASS_DIR,
-+                        DIR__ADD_NAME | DIR__SEARCH,
-+                        &dsec->avcr, &ad);
-+      if (rc)
-+              return rc;
-+
-+      if (tsec->create_sid) {
-+              newsid = tsec->create_sid;
-+      } else {
-+              rc = security_transition_sid(tsec->sid, dsec->sid, tclass,
-+                                           &newsid);
-+              if (rc)
-+                      return rc;
-+      }
-+
-+      rc = avc_has_perm(tsec->sid, newsid, tclass, FILE__CREATE, NULL, &ad);
-+      if (rc)
-+              return rc;
-+
-+      sbsec = dir->i_sb->s_security;
-+
-+      return avc_has_perm(newsid, sbsec->sid,
-+                          SECCLASS_FILESYSTEM,
-+                          FILESYSTEM__ASSOCIATE, NULL, &ad);
-+}
-+
-+#define MAY_LINK   0
-+#define MAY_UNLINK 1
-+#define MAY_RMDIR  2
-+
-+/* Check whether a task can link, unlink, or rmdir a file/directory. */
-+static int may_link(struct inode *dir,
-+                  struct dentry *dentry,
-+                  int kind)
-+
-+{
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *dsec, *isec;
-+      struct avc_audit_data ad;
-+      u32 av;
-+      int rc;
-+
-+      tsec = current->security;
-+      dsec = dir->i_security;
-+      isec = dentry->d_inode->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, FS);
-+      ad.u.fs.dentry = dentry;
-+
-+      av = DIR__SEARCH;
-+      av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME);
-+      rc = avc_has_perm(tsec->sid, dsec->sid, SECCLASS_DIR,
-+                        av, &dsec->avcr, &ad);
-+      if (rc)
-+              return rc;
-+
-+      switch (kind) {
-+      case MAY_LINK:
-+              av = FILE__LINK;
-+              break;
-+      case MAY_UNLINK:
-+              av = FILE__UNLINK;
-+              break;
-+      case MAY_RMDIR:
-+              av = DIR__RMDIR;
-+              break;
-+      default:
-+              printk(KERN_WARNING "may_link:  unrecognized kind %d\n", kind);
-+              return 0;
-+      }
-+
-+      rc = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                        av, &isec->avcr, &ad);
-+      return rc;
-+}
-+
-+static inline int may_rename(struct inode *old_dir,
-+                           struct dentry *old_dentry,
-+                           struct inode *new_dir,
-+                           struct dentry *new_dentry)
-+{
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *old_dsec, *new_dsec, *old_isec, *new_isec;
-+      struct avc_audit_data ad;
-+      u32 av;
-+      int old_is_dir, new_is_dir;
-+      int rc;
-+
-+      tsec = current->security;
-+      old_dsec = old_dir->i_security;
-+      old_isec = old_dentry->d_inode->i_security;
-+      old_is_dir = S_ISDIR(old_dentry->d_inode->i_mode);
-+      new_dsec = new_dir->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, FS);
-+
-+      ad.u.fs.dentry = old_dentry;
-+      rc = avc_has_perm(tsec->sid, old_dsec->sid, SECCLASS_DIR,
-+                        DIR__REMOVE_NAME | DIR__SEARCH,
-+                        &old_dsec->avcr, &ad);
-+      if (rc)
-+              return rc;
-+      rc = avc_has_perm(tsec->sid, old_isec->sid,
-+                        old_isec->sclass,
-+                        FILE__RENAME,
-+                        &old_isec->avcr, &ad);
-+      if (rc)
-+              return rc;
-+      if (old_is_dir && new_dir != old_dir) {
-+              rc = avc_has_perm(tsec->sid, old_isec->sid,
-+                                old_isec->sclass,
-+                                DIR__REPARENT,
-+                                &old_isec->avcr, &ad);
-+              if (rc)
-+                      return rc;
-+      }
-+
-+      ad.u.fs.dentry = new_dentry;
-+      av = DIR__ADD_NAME | DIR__SEARCH;
-+      if (new_dentry->d_inode)
-+              av |= DIR__REMOVE_NAME;
-+      rc = avc_has_perm(tsec->sid, new_dsec->sid, SECCLASS_DIR,
-+                        av,&new_dsec->avcr, &ad);
-+      if (rc)
-+              return rc;
-+      if (new_dentry->d_inode) {
-+              new_isec = new_dentry->d_inode->i_security;
-+              new_is_dir = S_ISDIR(new_dentry->d_inode->i_mode);
-+              rc = avc_has_perm(tsec->sid, new_isec->sid,
-+                                new_isec->sclass,
-+                                (new_is_dir ? DIR__RMDIR : FILE__UNLINK),
-+                                &new_isec->avcr, &ad);
-+              if (rc)
-+                      return rc;
-+      }
-+
-+      return 0;
-+}
-+
-+/* Check whether a task can perform a filesystem operation. */
-+int superblock_has_perm(struct task_struct *tsk,
-+                      struct super_block *sb,
-+                      u32 perms,
-+                      struct avc_audit_data *ad)
-+{
-+      struct task_security_struct *tsec;
-+      struct superblock_security_struct *sbsec;
-+
-+      tsec = tsk->security;
-+      sbsec = sb->s_security;
-+      return avc_has_perm(tsec->sid, sbsec->sid, SECCLASS_FILESYSTEM,
-+                          perms, NULL, ad);
-+}
-+
-+/* Convert a Linux mode and permission mask to an access vector. */
-+static inline u32 file_mask_to_av(int mode, int mask)
-+{
-+      u32 av = 0;
-+
-+      if ((mode & S_IFMT) != S_IFDIR) {
-+              if (mask & MAY_EXEC)
-+                      av |= FILE__EXECUTE;
-+              if (mask & MAY_READ)
-+                      av |= FILE__READ;
-+
-+              if (mask & MAY_APPEND)
-+                      av |= FILE__APPEND;
-+              else if (mask & MAY_WRITE)
-+                      av |= FILE__WRITE;
-+
-+      } else {
-+              if (mask & MAY_EXEC)
-+                      av |= DIR__SEARCH;
-+              if (mask & MAY_WRITE)
-+                      av |= DIR__WRITE;
-+              if (mask & MAY_READ)
-+                      av |= DIR__READ;
-+      }
-+
-+      return av;
-+}
-+
-+/* Convert a Linux file to an access vector. */
-+static inline u32 file_to_av(struct file *file)
-+{
-+      u32 av = 0;
-+
-+      if (file->f_mode & FMODE_READ)
-+              av |= FILE__READ;
-+      if (file->f_mode & FMODE_WRITE) {
-+              if (file->f_flags & O_APPEND)
-+                      av |= FILE__APPEND;
-+              else
-+                      av |= FILE__WRITE;
-+      }
-+
-+      return av;
-+}
-+
-+/* Set an inode's SID to a specified value. */
-+int inode_security_set_sid(struct inode *inode, u32 sid)
-+{
-+      struct inode_security_struct *isec = inode->i_security;
-+
-+      down(&isec->sem);
-+      isec->sclass = inode_mode_to_security_class(inode->i_mode);
-+      isec->sid = sid;
-+      isec->initialized = 1;
-+      up(&isec->sem);
-+      return 0;
-+}
-+
-+/* Set the security attributes on a newly created file. */
-+static int post_create(struct inode *dir,
-+                     struct dentry *dentry)
-+{
-+
-+      struct task_security_struct *tsec;
-+      struct inode *inode;
-+      struct inode_security_struct *dsec;
-+      struct superblock_security_struct *sbsec;
-+      u32 newsid;
-+      char *context;
-+      unsigned int len;
-+      int rc;
-+
-+      tsec = current->security;
-+      dsec = dir->i_security;
-+
-+      inode = dentry->d_inode;
-+      if (!inode) {
-+              /* Some file system types (e.g. NFS) may not instantiate
-+                 a dentry for all create operations (e.g. symlink),
-+                 so we have to check to see if the inode is non-NULL. */
-+              printk(KERN_WARNING "post_create:  no inode, dir (dev=%s, "
-+                     "ino=%ld)\n", dir->i_sb->s_id, dir->i_ino);
-+              return 0;
-+      }
-+
-+      if (tsec->create_sid) {
-+              newsid = tsec->create_sid;
-+      } else {
-+              rc = security_transition_sid(tsec->sid, dsec->sid,
-+                                           inode_mode_to_security_class(inode->i_mode),
-+                                           &newsid);
-+              if (rc) {
-+                      printk(KERN_WARNING "post_create:  "
-+                             "security_transition_sid failed, rc=%d (dev=%s "
-+                             "ino=%ld)\n",
-+                             -rc, inode->i_sb->s_id, inode->i_ino);
-+                      return rc;
-+              }
-+      }
-+
-+      rc = inode_security_set_sid(inode, newsid);
-+      if (rc) {
-+              printk(KERN_WARNING "post_create:  inode_security_set_sid "
-+                     "failed, rc=%d (dev=%s ino=%ld)\n",
-+                     -rc, inode->i_sb->s_id, inode->i_ino);
-+              return rc;
-+      }
-+
-+      sbsec = dir->i_sb->s_security;
-+      if (!sbsec)
-+              return 0;
-+
-+      if (sbsec->behavior == SECURITY_FS_USE_XATTR &&
-+          inode->i_op->setxattr) {
-+              /* Use extended attributes. */
-+              rc = security_sid_to_context(newsid, &context, &len);
-+              if (rc) {
-+                      printk(KERN_WARNING "post_create:  sid_to_context "
-+                             "failed, rc=%d (dev=%s ino=%ld)\n",
-+                             -rc, inode->i_sb->s_id, inode->i_ino);
-+                      return rc;
-+              }
-+              down(&inode->i_sem);
-+              rc = inode->i_op->setxattr(dentry,
-+                                         XATTR_NAME_SELINUX,
-+                                         context, len, 0);
-+              up(&inode->i_sem);
-+              kfree(context);
-+              if (rc < 0) {
-+                      printk(KERN_WARNING "post_create:  setxattr failed, "
-+                             "rc=%d (dev=%s ino=%ld)\n",
-+                             -rc, inode->i_sb->s_id, inode->i_ino);
-+                      return rc;
-+              }
-+      }
-+
-+      return 0;
-+}
-+
-+
-+/* Hook functions begin here. */
-+
-+static int selinux_ptrace(struct task_struct *parent, struct task_struct *child)
-+{
-+      int rc;
-+
-+      rc = secondary_ops->ptrace(parent,child);
-+      if (rc)
-+              return rc;
-+
-+      return task_has_perm(parent, child, PROCESS__PTRACE);
-+}
-+
-+static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,
-+                          kernel_cap_t *inheritable, kernel_cap_t *permitted)
-+{
-+      int error;
-+
-+      error = task_has_perm(current, target, PROCESS__GETCAP);
-+      if (error)
-+              return error;
-+
-+      return secondary_ops->capget(target, effective, inheritable, permitted);
-+}
-+
-+static int selinux_capset_check(struct task_struct *target, kernel_cap_t *effective,
-+                                kernel_cap_t *inheritable, kernel_cap_t *permitted)
-+{
-+      int error;
-+
-+      error = task_has_perm(current, target, PROCESS__SETCAP);
-+      if (error)
-+              return error;
-+
-+      return secondary_ops->capset_check(target, effective, inheritable, permitted);
-+}
-+
-+static void selinux_capset_set(struct task_struct *target, kernel_cap_t *effective,
-+                               kernel_cap_t *inheritable, kernel_cap_t *permitted)
-+{
-+      int error;
-+
-+      error = task_has_perm(current, target, PROCESS__SETCAP);
-+      if (error)
-+              return;
-+
-+      return secondary_ops->capset_set(target, effective, inheritable, permitted);
-+}
-+
-+static int selinux_capable(struct task_struct *tsk, int cap)
-+{
-+      int rc;
-+
-+      rc = secondary_ops->capable(tsk, cap);
-+      if (rc)
-+              return rc;
-+
-+      return task_has_capability(tsk,cap);
-+}
-+
-+static int selinux_sysctl(ctl_table *table, int op)
-+{
-+      int error = 0;
-+      u32 av;
-+      struct task_security_struct *tsec;
-+      u32 tsid;
-+      int rc;
-+
-+      tsec = current->security;
-+
-+      rc = selinux_proc_get_sid(table->de, (op == 001) ?
-+                                SECCLASS_DIR : SECCLASS_FILE, &tsid);
-+      if (rc) {
-+              /* Default to the well-defined sysctl SID. */
-+              tsid = SECINITSID_SYSCTL;
-+      }
-+
-+      /* The op values are "defined" in sysctl.c, thereby creating
-+       * a bad coupling between this module and sysctl.c */
-+      if(op == 001) {
-+              error = avc_has_perm(tsec->sid, tsid,
-+                                   SECCLASS_DIR, DIR__SEARCH, NULL, NULL);
-+      } else {
-+              av = 0;
-+              if (op & 004)
-+                      av |= FILE__READ;
-+              if (op & 002)
-+                      av |= FILE__WRITE;
-+              if (av)
-+                      error = avc_has_perm(tsec->sid, tsid,
-+                                           SECCLASS_FILE, av, NULL, NULL);
-+        }
-+
-+      return error;
-+}
-+
-+static int selinux_quotactl(int cmds, int type, int id, struct super_block *sb)
-+{
-+      int rc = 0;
-+
-+      if (!sb)
-+              return 0;
-+
-+      switch (cmds) {
-+              case Q_SYNC:
-+              case Q_QUOTAON:
-+              case Q_QUOTAOFF:
-+              case Q_SETINFO:
-+              case Q_SETQUOTA:
-+                      rc = superblock_has_perm(current,
-+                                               sb,
-+                                               FILESYSTEM__QUOTAMOD, NULL);
-+                      break;
-+              case Q_GETFMT:
-+              case Q_GETINFO:
-+              case Q_GETQUOTA:
-+                      rc = superblock_has_perm(current,
-+                                               sb,
-+                                               FILESYSTEM__QUOTAGET, NULL);
-+                      break;
-+              default:
-+                      rc = 0;  /* let the kernel handle invalid cmds */
-+                      break;
-+      }
-+      return rc;
-+}
-+
-+static int selinux_quota_on(struct file *f)
-+{
-+      return file_has_perm(current, f, FILE__QUOTAON);;
-+}
-+
-+static int selinux_syslog(int type)
-+{
-+      int rc;
-+
-+      rc = secondary_ops->syslog(type);
-+      if (rc)
-+              return rc;
-+
-+      switch (type) {
-+              case 3:         /* Read last kernel messages */
-+                      rc = task_has_system(current, SYSTEM__SYSLOG_READ);
-+                      break;
-+              case 6:         /* Disable logging to console */
-+              case 7:         /* Enable logging to console */
-+              case 8:         /* Set level of messages printed to console */
-+                      rc = task_has_system(current, SYSTEM__SYSLOG_CONSOLE);
-+                      break;
-+              case 0:         /* Close log */
-+              case 1:         /* Open log */
-+              case 2:         /* Read from log */
-+              case 4:         /* Read/clear last kernel messages */
-+              case 5:         /* Clear ring buffer */
-+              default:
-+                      rc = task_has_system(current, SYSTEM__SYSLOG_MOD);
-+                      break;
-+      }
-+      return rc;
-+}
-+
-+/*
-+ * Check that a process has enough memory to allocate a new virtual
-+ * mapping. 0 means there is enough memory for the allocation to
-+ * succeed and -ENOMEM implies there is not.
-+ *
-+ * We currently support three overcommit policies, which are set via the
-+ * vm.overcommit_memory sysctl.  See Documentation/vm/overcommit-acounting
-+ *
-+ * Strict overcommit modes added 2002 Feb 26 by Alan Cox.
-+ * Additional code 2002 Jul 20 by Robert Love.
-+ */
-+static int selinux_vm_enough_memory(long pages)
-+{
-+      unsigned long free, allowed;
-+      int rc;
-+      struct task_security_struct *tsec = current->security;
-+
-+      vm_acct_memory(pages);
-+
-+        /*
-+       * Sometimes we want to use more memory than we have
-+       */
-+      if (sysctl_overcommit_memory == 1)
-+              return 0;
-+
-+      if (sysctl_overcommit_memory == 0) {
-+              free = get_page_cache_size();
-+              free += nr_free_pages();
-+              free += nr_swap_pages;
-+
-+              /*
-+               * Any slabs which are created with the
-+               * SLAB_RECLAIM_ACCOUNT flag claim to have contents
-+               * which are reclaimable, under pressure.  The dentry
-+               * cache and most inode caches should fall into this
-+               */
-+              free += atomic_read(&slab_reclaim_pages);
-+
-+              /*
-+               * Leave the last 3% for privileged processes.
-+               * Don't audit the check, as it is applied to all processes
-+               * that allocate mappings.
-+               */
-+              rc = secondary_ops->capable(current, CAP_SYS_ADMIN);
-+              if (!rc) {
-+                      rc = avc_has_perm_noaudit(tsec->sid, tsec->sid,
-+                                                SECCLASS_CAPABILITY,
-+                                                CAP_TO_MASK(CAP_SYS_ADMIN),
-+                                                NULL, NULL);
-+              }
-+              if (rc)
-+                      free -= free / 32;
-+
-+              if (free > pages)
-+                      return 0;
-+              vm_unacct_memory(pages);
-+              return -ENOMEM;
-+      }
-+
-+      allowed = totalram_pages * sysctl_overcommit_ratio / 100;
-+      allowed += total_swap_pages;
-+
-+      if (atomic_read(&vm_committed_space) < allowed)
-+              return 0;
-+
-+      vm_unacct_memory(pages);
-+
-+      return -ENOMEM;
-+}
-+
-+static int selinux_netlink_send(struct sk_buff *skb)
-+{
-+      if (capable(CAP_NET_ADMIN))
-+              cap_raise (NETLINK_CB (skb).eff_cap, CAP_NET_ADMIN);
-+      else
-+              NETLINK_CB(skb).eff_cap = 0;
-+      return 0;
-+}
-+
-+static int selinux_netlink_recv(struct sk_buff *skb)
-+{
-+      if (!cap_raised(NETLINK_CB(skb).eff_cap, CAP_NET_ADMIN))
-+              return -EPERM;
-+      return 0;
-+}
-+
-+/* binprm security operations */
-+
-+static int selinux_bprm_alloc_security(struct linux_binprm *bprm)
-+{
-+      int rc;
-+
-+      /* Make sure that the secondary module doesn't use the
-+         bprm->security field, since we do not yet support chaining
-+         of multiple security structures on the field.  Neither
-+         the dummy nor the capability module use the field.  The owlsm
-+         module uses the field if CONFIG_OWLSM_FD is enabled. */
-+      rc = secondary_ops->bprm_alloc_security(bprm);
-+      if (rc)
-+              return rc;
-+      if (bprm->security) {
-+              printk(KERN_WARNING "%s: no support yet for chaining on the "
-+                     "security field by secondary modules.\n", __FUNCTION__);
-+              /* Release the secondary module's security object. */
-+              secondary_ops->bprm_free_security(bprm);
-+              /* Unregister the secondary module to prevent problems
-+                 with subsequent binprm hooks. This will revert to the
-+                 original (dummy) module for the secondary operations. */
-+              rc = security_ops->unregister_security("unknown", secondary_ops);
-+              if (rc)
-+                      return rc;
-+              printk(KERN_WARNING "%s: Unregistered the secondary security "
-+                     "module.\n", __FUNCTION__);
-+      }
-+      bprm->security = NULL;
-+      return 0;
-+}
-+
-+static int selinux_bprm_set_security(struct linux_binprm *bprm)
-+{
-+      struct task_security_struct *tsec;
-+      struct inode *inode = bprm->file->f_dentry->d_inode;
-+      struct inode_security_struct *isec;
-+      u32 newsid;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      rc = secondary_ops->bprm_set_security(bprm);
-+      if (rc)
-+              return rc;
-+
-+      if (bprm->sh_bang || bprm->security)
-+              /* The security field should already be set properly. */
-+              return 0;
-+
-+      tsec = current->security;
-+      isec = inode->i_security;
-+
-+      /* Default to the current task SID. */
-+      bprm->security = (void *)tsec->sid;
-+
-+      /* Reset create SID on execve. */
-+      tsec->create_sid = 0;
-+
-+      if (tsec->exec_sid) {
-+              newsid = tsec->exec_sid;
-+              /* Reset exec SID on execve. */
-+              tsec->exec_sid = 0;
-+      } else {
-+              /* Check for a default transition on this program. */
-+              rc = security_transition_sid(tsec->sid, isec->sid,
-+                                           SECCLASS_PROCESS, &newsid);
-+              if (rc)
-+                      return rc;
-+      }
-+
-+      AVC_AUDIT_DATA_INIT(&ad, FS);
-+      ad.u.fs.mnt = bprm->file->f_vfsmnt;
-+      ad.u.fs.dentry = bprm->file->f_dentry;
-+
-+      if (bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)
-+              newsid = tsec->sid;
-+
-+        if (tsec->sid == newsid) {
-+              rc = avc_has_perm(tsec->sid, isec->sid,
-+                                SECCLASS_FILE, FILE__EXECUTE_NO_TRANS,
-+                                &isec->avcr, &ad);
-+              if (rc)
-+                      return rc;
-+      } else {
-+              /* Check permissions for the transition. */
-+              rc = avc_has_perm(tsec->sid, newsid,
-+                                SECCLASS_PROCESS, PROCESS__TRANSITION,
-+                                NULL,
-+                                &ad);
-+              if (rc)
-+                      return rc;
-+
-+              rc = avc_has_perm(newsid, isec->sid,
-+                                SECCLASS_FILE, FILE__ENTRYPOINT,
-+                                &isec->avcr, &ad);
-+              if (rc)
-+                      return rc;
-+
-+              /* Set the security field to the new SID. */
-+              bprm->security = (void*) newsid;
-+      }
-+
-+      return 0;
-+}
-+
-+static int selinux_bprm_check_security (struct linux_binprm *bprm)
-+{
-+      return 0;
-+}
-+
-+
-+static int selinux_bprm_secureexec (struct linux_binprm *bprm)
-+{
-+      struct task_security_struct *tsec = current->security;
-+      int atsecure = 0;
-+
-+      if (tsec->osid != tsec->sid) {
-+              /* Enable secure mode for SIDs transitions unless
-+                 the noatsecure permission is granted between
-+                 the two SIDs, i.e. ahp returns 0. */
-+              atsecure = avc_has_perm(tsec->osid, tsec->sid,
-+                                       SECCLASS_PROCESS,
-+                                       PROCESS__NOATSECURE, NULL, NULL);
-+      }
-+
-+      /* Note that we must include the legacy uid/gid test below
-+         to retain it, as the new userland will simply use the
-+         value passed by AT_SECURE to decide whether to enable
-+         secure mode. */
-+      return ( atsecure || current->euid != current->uid ||
-+              current->egid != current->gid);
-+}
-+
-+static void selinux_bprm_free_security(struct linux_binprm *bprm)
-+{
-+      /* Nothing to do - not dynamically allocated. */
-+      return;
-+}
-+
-+/* Derived from fs/exec.c:flush_old_files. */
-+static inline void flush_unauthorized_files(struct files_struct * files)
-+{
-+      struct avc_audit_data ad;
-+      struct file *file;
-+      long j = -1;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,FS);
-+
-+      spin_lock(&files->file_lock);
-+      for (;;) {
-+              unsigned long set, i;
-+
-+              j++;
-+              i = j * __NFDBITS;
-+              if (i >= files->max_fds || i >= files->max_fdset)
-+                      break;
-+              set = files->open_fds->fds_bits[j];
-+              if (!set)
-+                      continue;
-+              spin_unlock(&files->file_lock);
-+              for ( ; set ; i++,set >>= 1) {
-+                      if (set & 1) {
-+                              file = fget(i);
-+                              if (!file)
-+                                      continue;
-+                              if (file_has_perm(current,
-+                                                file,
-+                                                file_to_av(file)))
-+                                      sys_close(i);
-+                              fput(file);
-+                      }
-+              }
-+              spin_lock(&files->file_lock);
-+
-+      }
-+      spin_unlock(&files->file_lock);
-+}
-+
-+static void selinux_bprm_compute_creds(struct linux_binprm *bprm)
-+{
-+      struct task_security_struct *tsec, *psec;
-+      u32 sid;
-+      struct av_decision avd;
-+      int rc;
-+
-+      secondary_ops->bprm_compute_creds(bprm);
-+
-+      tsec = current->security;
-+
-+      sid = (u32)bprm->security;
-+      if (!sid)
-+              sid = tsec->sid;
-+
-+      tsec->osid = tsec->sid;
-+      if (tsec->sid != sid) {
-+              /* Check for shared state.  If not ok, leave SID
-+                 unchanged and kill. */
-+              if ((atomic_read(&current->fs->count) > 1 ||
-+                   atomic_read(&current->files->count) > 1 ||
-+                   atomic_read(&current->sighand->count) > 1)) {
-+                      rc = avc_has_perm(tsec->sid, sid,
-+                                        SECCLASS_PROCESS, PROCESS__SHARE,
-+                                        NULL, NULL);
-+                      if (rc) {
-+                              force_sig_specific(SIGKILL, current);
-+                              return;
-+                      }
-+              }
-+
-+              /* Check for ptracing, and update the task SID if ok.
-+                 Otherwise, leave SID unchanged and kill. */
-+              task_lock(current);
-+              if (current->ptrace & PT_PTRACED) {
-+                      psec = current->parent->security;
-+                      rc = avc_has_perm_noaudit(psec->sid, sid,
-+                                        SECCLASS_PROCESS, PROCESS__PTRACE,
-+                                        NULL, &avd);
-+                      if (!rc)
-+                              tsec->sid = sid;
-+                      task_unlock(current);
-+                      avc_audit(psec->sid, sid, SECCLASS_PROCESS,
-+                                PROCESS__PTRACE, &avd, rc, NULL);
-+                      if (rc) {
-+                              force_sig_specific(SIGKILL, current);
-+                              return;
-+                      }
-+              } else {
-+                      tsec->sid = sid;
-+                      task_unlock(current);
-+              }
-+
-+              /* Close files for which the new task SID is not authorized. */
-+              flush_unauthorized_files(current->files);
-+
-+              /* Wake up the parent if it is waiting so that it can
-+                 recheck wait permission to the new task SID. */
-+              wake_up_interruptible(&current->parent->wait_chldexit);
-+      }
-+}
-+
-+/* superblock security operations */
-+
-+static int selinux_sb_alloc_security(struct super_block *sb)
-+{
-+      return superblock_alloc_security(sb);
-+}
-+
-+static void selinux_sb_free_security(struct super_block *sb)
-+{
-+      superblock_free_security(sb);
-+}
-+
-+static int selinux_sb_kern_mount(struct super_block *sb)
-+{
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      rc = superblock_doinit(sb);
-+      if (rc)
-+              return rc;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,FS);
-+      ad.u.fs.dentry = sb->s_root;
-+      return superblock_has_perm(current, sb, FILESYSTEM__MOUNT, &ad);
-+}
-+
-+static int selinux_sb_statfs(struct super_block *sb)
-+{
-+      struct avc_audit_data ad;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,FS);
-+      ad.u.fs.dentry = sb->s_root;
-+      return superblock_has_perm(current, sb, FILESYSTEM__GETATTR, &ad);
-+}
-+
-+static int selinux_mount(char * dev_name,
-+                         struct nameidata *nd,
-+                         char * type,
-+                         unsigned long flags,
-+                         void * data)
-+{
-+      if (flags & MS_REMOUNT)
-+              return superblock_has_perm(current, nd->mnt->mnt_sb,
-+                                         FILESYSTEM__REMOUNT, NULL);
-+      else
-+              return dentry_has_perm(current, nd->mnt, nd->dentry,
-+                                     FILE__MOUNTON);
-+}
-+
-+static int selinux_umount(struct vfsmount *mnt, int flags)
-+{
-+      return superblock_has_perm(current,mnt->mnt_sb,
-+                                 FILESYSTEM__UNMOUNT,NULL);
-+}
-+
-+/* inode security operations */
-+
-+static int selinux_inode_alloc_security(struct inode *inode)
-+{
-+      return inode_alloc_security(inode);
-+}
-+
-+static void selinux_inode_free_security(struct inode *inode)
-+{
-+      inode_free_security(inode);
-+}
-+
-+static int selinux_inode_create(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+      return may_create(dir, dentry, SECCLASS_FILE);
-+}
-+
-+static void selinux_inode_post_create(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+      post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry)
-+{
-+      int rc;
-+
-+      rc = secondary_ops->inode_link(old_dentry,dir,new_dentry);
-+      if (rc)
-+              return rc;
-+      return may_link(dir, old_dentry, MAY_LINK);
-+}
-+
-+static void selinux_inode_post_link(struct dentry *old_dentry, struct inode *inode, struct dentry *new_dentry)
-+{
-+      return;
-+}
-+
-+static int selinux_inode_unlink(struct inode *dir, struct dentry *dentry)
-+{
-+      return may_link(dir, dentry, MAY_UNLINK);
-+}
-+
-+static int selinux_inode_symlink(struct inode *dir, struct dentry *dentry, const char *name)
-+{
-+      return may_create(dir, dentry, SECCLASS_LNK_FILE);
-+}
-+
-+static void selinux_inode_post_symlink(struct inode *dir, struct dentry *dentry, const char *name)
-+{
-+      post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_mkdir(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+      return may_create(dir, dentry, SECCLASS_DIR);
-+}
-+
-+static void selinux_inode_post_mkdir(struct inode *dir, struct dentry *dentry, int mask)
-+{
-+      post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_rmdir(struct inode *dir, struct dentry *dentry)
-+{
-+      return may_link(dir, dentry, MAY_RMDIR);
-+}
-+
-+static int selinux_inode_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
-+{
-+      return may_create(dir, dentry, inode_mode_to_security_class(mode));
-+}
-+
-+static void selinux_inode_post_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
-+{
-+      post_create(dir, dentry);
-+}
-+
-+static int selinux_inode_rename(struct inode *old_inode, struct dentry *old_dentry,
-+                                struct inode *new_inode, struct dentry *new_dentry)
-+{
-+      return may_rename(old_inode, old_dentry, new_inode, new_dentry);
-+}
-+
-+static void selinux_inode_post_rename(struct inode *old_inode, struct dentry *old_dentry,
-+                                      struct inode *new_inode, struct dentry *new_dentry)
-+{
-+      return;
-+}
-+
-+static int selinux_inode_readlink(struct dentry *dentry)
-+{
-+      return dentry_has_perm(current, NULL, dentry, FILE__READ);
-+}
-+
-+static int selinux_inode_follow_link(struct dentry *dentry, struct nameidata *nameidata)
-+{
-+      int rc;
-+
-+      rc = secondary_ops->inode_follow_link(dentry,nameidata);
-+      if (rc)
-+              return rc;
-+      return dentry_has_perm(current, NULL, dentry, FILE__READ);
-+}
-+
-+static int selinux_inode_permission(struct inode *inode, int mask)
-+{
-+      if (!mask) {
-+              /* No permission to check.  Existence test. */
-+              return 0;
-+      }
-+
-+      return inode_has_perm(current, inode,
-+                             file_mask_to_av(inode->i_mode, mask), NULL, NULL);
-+}
-+
-+static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)
-+{
-+      if (iattr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID |
-+                             ATTR_ATIME_SET | ATTR_MTIME_SET))
-+              return dentry_has_perm(current, NULL, dentry, FILE__SETATTR);
-+
-+      return dentry_has_perm(current, NULL, dentry, FILE__WRITE);
-+}
-+
-+static int selinux_inode_getattr(struct vfsmount *mnt, struct dentry *dentry)
-+{
-+      return dentry_has_perm(current, mnt, dentry, FILE__GETATTR);
-+}
-+
-+static int selinux_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t size, int flags)
-+{
-+      struct task_security_struct *tsec = current->security;
-+      struct inode *inode = dentry->d_inode;
-+      struct inode_security_struct *isec = inode->i_security;
-+      struct superblock_security_struct *sbsec;
-+      struct avc_audit_data ad;
-+      u32 newsid;
-+      int rc = 0;
-+
-+      if (strcmp(name, XATTR_NAME_SELINUX)) {
-+              if (!strncmp(name, XATTR_SECURITY_PREFIX,
-+                           sizeof XATTR_SECURITY_PREFIX - 1) &&
-+                  !capable(CAP_SYS_ADMIN)) {
-+                      /* A different attribute in the security namespace.
-+                         Restrict to administrator. */
-+                      return -EPERM;
-+              }
-+
-+              /* Not an attribute we recognize, so just check the
-+                 ordinary setattr permission. */
-+              return dentry_has_perm(current, NULL, dentry, FILE__SETATTR);
-+      }
-+
-+      AVC_AUDIT_DATA_INIT(&ad,FS);
-+      ad.u.fs.dentry = dentry;
-+
-+      rc = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                        FILE__RELABELFROM,
-+                        &isec->avcr, &ad);
-+      if (rc)
-+              return rc;
-+
-+      rc = security_context_to_sid(value, size, &newsid);
-+      if (rc)
-+              return rc;
-+
-+      rc = avc_has_perm(tsec->sid, newsid, isec->sclass,
-+                        FILE__RELABELTO, NULL, &ad);
-+      if (rc)
-+              return rc;
-+
-+      sbsec = inode->i_sb->s_security;
-+      if (!sbsec)
-+              return 0;
-+
-+      return avc_has_perm(newsid,
-+                          sbsec->sid,
-+                          SECCLASS_FILESYSTEM,
-+                          FILESYSTEM__ASSOCIATE,
-+                          NULL,
-+                          &ad);
-+}
-+
-+static void selinux_inode_post_setxattr(struct dentry *dentry, char *name,
-+                                        void *value, size_t size, int flags)
-+{
-+      struct inode *inode = dentry->d_inode;
-+      struct inode_security_struct *isec = inode->i_security;
-+      u32 newsid;
-+      int rc;
-+
-+      if (strcmp(name, XATTR_NAME_SELINUX)) {
-+              /* Not an attribute we recognize, so nothing to do. */
-+              return;
-+      }
-+
-+      rc = security_context_to_sid(value, size, &newsid);
-+      if (rc) {
-+              printk(KERN_WARNING "%s:  unable to obtain SID for context "
-+                     "%s, rc=%d\n", __FUNCTION__, (char*)value, -rc);
-+              return;
-+      }
-+
-+      isec->sid = newsid;
-+      return;
-+}
-+
-+static int selinux_inode_getxattr (struct dentry *dentry, char *name)
-+{
-+      return dentry_has_perm(current, NULL, dentry, FILE__GETATTR);
-+}
-+
-+static int selinux_inode_listxattr (struct dentry *dentry)
-+{
-+      return dentry_has_perm(current, NULL, dentry, FILE__GETATTR);
-+}
-+
-+static int selinux_inode_removexattr (struct dentry *dentry, char *name)
-+{
-+      if (strcmp(name, XATTR_NAME_SELINUX)) {
-+              if (!strncmp(name, XATTR_SECURITY_PREFIX,
-+                           sizeof XATTR_SECURITY_PREFIX - 1) &&
-+                  !capable(CAP_SYS_ADMIN)) {
-+                      /* A different attribute in the security namespace.
-+                         Restrict to administrator. */
-+                      return -EPERM;
-+              }
-+
-+              /* Not an attribute we recognize, so just check the
-+                 ordinary setattr permission. Might want a separate
-+                 permission for removexattr. */
-+              return dentry_has_perm(current, NULL, dentry, FILE__SETATTR);
-+      }
-+
-+      /* No one is allowed to remove a SELinux security label.
-+         You can change the label, but all data must be labeled. */
-+      return -EACCES;
-+}
-+
-+static int selinux_inode_getsecurity(struct dentry *dentry, const char *name, void *buffer, size_t size)
-+{
-+      struct inode *inode = dentry->d_inode;
-+      struct inode_security_struct *isec = inode->i_security;
-+      char *context;
-+      unsigned len;
-+      int rc;
-+
-+      /* Permission check handled by selinux_inode_getxattr hook.*/
-+
-+      if (strcmp(name, XATTR_SELINUX_SUFFIX))
-+              return -EOPNOTSUPP;
-+
-+      rc = security_sid_to_context(isec->sid, &context, &len);
-+      if (rc)
-+              return rc;
-+
-+      if (!buffer || !size) {
-+              kfree(context);
-+              return len;
-+      }
-+      if (size < len) {
-+              kfree(context);
-+              return -ERANGE;
-+      }
-+      memcpy(buffer, context, len);
-+      kfree(context);
-+      return len;
-+}
-+
-+static int selinux_inode_setsecurity(struct dentry *dentry, const char *name,
-+                                     const void *value, size_t size, int flags)
-+{
-+      struct inode *inode = dentry->d_inode;
-+      struct inode_security_struct *isec = inode->i_security;
-+      u32 newsid;
-+      int rc;
-+
-+      if (strcmp(name, XATTR_SELINUX_SUFFIX))
-+              return -EOPNOTSUPP;
-+
-+      if (!value || !size)
-+              return -EACCES;
-+
-+      rc = security_context_to_sid((void*)value, size, &newsid);
-+      if (rc)
-+              return rc;
-+
-+      isec->sid = newsid;
-+      return 0;
-+}
-+
-+static int selinux_inode_listsecurity(struct dentry *dentry, char *buffer)
-+{
-+      const int len = sizeof(XATTR_NAME_SELINUX);
-+      if (buffer)
-+              memcpy(buffer, XATTR_NAME_SELINUX, len);
-+      return len;
-+}
-+
-+/* file security operations */
-+
-+static int selinux_file_permission(struct file *file, int mask)
-+{
-+      struct inode *inode = file->f_dentry->d_inode;
-+
-+      if (!mask) {
-+              /* No permission to check.  Existence test. */
-+              return 0;
-+      }
-+
-+      /* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */
-+      if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE))
-+              mask |= MAY_APPEND;
-+
-+      return file_has_perm(current, file,
-+                           file_mask_to_av(inode->i_mode, mask));
-+}
-+
-+static int selinux_file_alloc_security(struct file *file)
-+{
-+      return file_alloc_security(file);
-+}
-+
-+static void selinux_file_free_security(struct file *file)
-+{
-+      file_free_security(file);
-+}
-+
-+static int selinux_file_ioctl(struct file *file, unsigned int cmd,
-+                            unsigned long arg)
-+{
-+      int error = 0;
-+
-+      switch (cmd) {
-+              case FIONREAD:
-+              /* fall through */
-+              case FIBMAP:
-+              /* fall through */
-+              case FIGETBSZ:
-+              /* fall through */
-+              case EXT2_IOC_GETFLAGS:
-+              /* fall through */
-+              case EXT2_IOC_GETVERSION:
-+                      error = file_has_perm(current, file, FILE__GETATTR);
-+                      break;
-+
-+              case EXT2_IOC_SETFLAGS:
-+              /* fall through */
-+              case EXT2_IOC_SETVERSION:
-+                      error = file_has_perm(current, file, FILE__SETATTR);
-+                      break;
-+
-+              /* sys_ioctl() checks */
-+              case FIONBIO:
-+              /* fall through */
-+              case FIOASYNC:
-+                      error = file_has_perm(current, file, 0);
-+                      break;
-+
-+              case KDSKBENT:
-+              case KDSKBSENT:
-+                      if (!capable(CAP_SYS_TTY_CONFIG))
-+                              error = -EPERM;
-+                      break;
-+
-+              /* default case assumes that the command will go
-+               * to the file's ioctl() function.
-+               */
-+              default:
-+                      error = file_has_perm(current, file, FILE__IOCTL);
-+
-+      }
-+      return error;
-+}
-+
-+static int selinux_file_mmap(struct file *file, unsigned long prot, unsigned long flags)
-+{
-+      u32 av;
-+
-+      if (file) {
-+              /* read access is always possible with a mapping */
-+              av = FILE__READ;
-+
-+              /* write access only matters if the mapping is shared */
-+              if ((flags & MAP_TYPE) == MAP_SHARED && (prot & PROT_WRITE))
-+                      av |= FILE__WRITE;
-+
-+              if (prot & PROT_EXEC)
-+                      av |= FILE__EXECUTE;
-+
-+              return file_has_perm(current, file, av);
-+      }
-+      return 0;
-+}
-+
-+static int selinux_file_mprotect(struct vm_area_struct *vma,
-+                               unsigned long prot)
-+{
-+      return selinux_file_mmap(vma->vm_file, prot, vma->vm_flags);
-+}
-+
-+static int selinux_file_lock(struct file *file, unsigned int cmd)
-+{
-+      return file_has_perm(current, file, FILE__LOCK);
-+}
-+
-+static int selinux_file_fcntl(struct file *file, unsigned int cmd,
-+                            unsigned long arg)
-+{
-+      int err = 0;
-+
-+      switch (cmd) {
-+              case F_SETFL:
-+                      if (!file->f_dentry || !file->f_dentry->d_inode) {
-+                              err = -EINVAL;
-+                              break;
-+                      }
-+
-+                      if ((file->f_flags & O_APPEND) && !(arg & O_APPEND)) {
-+                              err = file_has_perm(current, file,FILE__WRITE);
-+                              break;
-+                      }
-+                      /* fall through */
-+              case F_SETOWN:
-+              case F_SETSIG:
-+              case F_GETFL:
-+              case F_GETOWN:
-+              case F_GETSIG:
-+                      /* Just check FD__USE permission */
-+                      err = file_has_perm(current, file, 0);
-+                      break;
-+              case F_GETLK:
-+              case F_SETLK:
-+              case F_SETLKW:
-+              case F_GETLK64:
-+              case F_SETLK64:
-+              case F_SETLKW64:
-+                      if (!file->f_dentry || !file->f_dentry->d_inode) {
-+                              err = -EINVAL;
-+                              break;
-+                      }
-+                      err = file_has_perm(current, file, FILE__LOCK);
-+                      break;
-+      }
-+
-+      return err;
-+}
-+
-+static int selinux_file_set_fowner(struct file *file)
-+{
-+      struct task_security_struct *tsec;
-+      struct file_security_struct *fsec;
-+
-+      tsec = current->security;
-+      fsec = file->f_security;
-+      fsec->fown_sid = tsec->sid;
-+
-+      return 0;
-+}
-+
-+static int selinux_file_send_sigiotask(struct task_struct *tsk,
-+                                     struct fown_struct *fown,
-+                                     int fd, int reason)
-+{
-+        struct file *file;
-+      u32 perm;
-+      struct task_security_struct *tsec;
-+      struct file_security_struct *fsec;
-+
-+      /* struct fown_struct is never outside the context of a struct file */
-+        file = (struct file *)((long)fown - offsetof(struct file,f_owner));
-+
-+      tsec = tsk->security;
-+      fsec = file->f_security;
-+
-+      if (!fown->signum)
-+              perm = signal_to_av(SIGIO); /* as per send_sigio_to_task */
-+      else
-+              perm = signal_to_av(fown->signum);
-+
-+      return avc_has_perm(fsec->fown_sid, tsec->sid,
-+                          SECCLASS_PROCESS, perm, NULL, NULL);
-+}
-+
-+static int selinux_file_receive(struct file *file)
-+{
-+      return file_has_perm(current, file, file_to_av(file));
-+}
-+
-+/* task security operations */
-+
-+static int selinux_task_create(unsigned long clone_flags)
-+{
-+      return task_has_perm(current, current, PROCESS__FORK);
-+}
-+
-+static int selinux_task_alloc_security(struct task_struct *tsk)
-+{
-+      struct task_security_struct *tsec1, *tsec2;
-+      int rc;
-+
-+      tsec1 = current->security;
-+
-+      rc = task_alloc_security(tsk);
-+      if (rc)
-+              return rc;
-+      tsec2 = tsk->security;
-+
-+      tsec2->osid = tsec1->osid;
-+      tsec2->sid = tsec1->sid;
-+
-+      /* Retain the exec and create SIDs across fork */
-+      tsec2->exec_sid = tsec1->exec_sid;
-+      tsec2->create_sid = tsec1->create_sid;
-+
-+      return 0;
-+}
-+
-+static void selinux_task_free_security(struct task_struct *tsk)
-+{
-+      task_free_security(tsk);
-+}
-+
-+static int selinux_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags)
-+{
-+      /* Since setuid only affects the current process, and
-+         since the SELinux controls are not based on the Linux
-+         identity attributes, SELinux does not need to control
-+         this operation.  However, SELinux does control the use
-+         of the CAP_SETUID and CAP_SETGID capabilities using the
-+         capable hook. */
-+      return 0;
-+}
-+
-+static int selinux_task_post_setuid(uid_t id0, uid_t id1, uid_t id2, int flags)
-+{
-+      return secondary_ops->task_post_setuid(id0,id1,id2,flags);
-+}
-+
-+static int selinux_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags)
-+{
-+      /* See the comment for setuid above. */
-+      return 0;
-+}
-+
-+static int selinux_task_setpgid(struct task_struct *p, pid_t pgid)
-+{
-+      return task_has_perm(current, p, PROCESS__SETPGID);
-+}
-+
-+static int selinux_task_getpgid(struct task_struct *p)
-+{
-+      return task_has_perm(current, p, PROCESS__GETPGID);
-+}
-+
-+static int selinux_task_getsid(struct task_struct *p)
-+{
-+      return task_has_perm(current, p, PROCESS__GETSESSION);
-+}
-+
-+static int selinux_task_setgroups(int gidsetsize, gid_t *grouplist)
-+{
-+      /* See the comment for setuid above. */
-+      return 0;
-+}
-+
-+static int selinux_task_setnice(struct task_struct *p, int nice)
-+{
-+      return task_has_perm(current,p, PROCESS__SETSCHED);
-+}
-+
-+static int selinux_task_setrlimit(unsigned int resource, struct rlimit *new_rlim)
-+{
-+      /* SELinux does not currently provide a process
-+         resource limit policy based on security contexts.
-+         It does control the use of the CAP_SYS_RESOURCE capability
-+         using the capable hook. */
-+      return 0;
-+}
-+
-+static int selinux_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp)
-+{
-+      struct task_security_struct *tsec1, *tsec2;
-+
-+      tsec1 = current->security;
-+      tsec2 = p->security;
-+
-+      /* No auditing from the setscheduler hook, since the runqueue lock
-+         is held and the system will deadlock if we try to log an audit
-+         message. */
-+      return avc_has_perm_noaudit(tsec1->sid, tsec2->sid,
-+                                  SECCLASS_PROCESS, PROCESS__SETSCHED,
-+                                  &tsec2->avcr, NULL);
-+}
-+
-+static int selinux_task_getscheduler(struct task_struct *p)
-+{
-+      return task_has_perm(current, p, PROCESS__GETSCHED);
-+}
-+
-+static int selinux_task_kill(struct task_struct *p, struct siginfo *info, int sig)
-+{
-+      u32 perm;
-+
-+      if (info && ((unsigned long)info == 1 ||
-+                   (unsigned long)info == 2 || SI_FROMKERNEL(info)))
-+              return 0;
-+
-+      if (!sig)
-+              perm = PROCESS__SIGNULL; /* null signal; existence test */
-+      else
-+              perm = signal_to_av(sig);
-+
-+      return task_has_perm(current, p, perm);
-+}
-+
-+static int selinux_task_prctl(int option,
-+                            unsigned long arg2,
-+                            unsigned long arg3,
-+                            unsigned long arg4,
-+                            unsigned long arg5)
-+{
-+      /* The current prctl operations do not appear to require
-+         any SELinux controls since they merely observe or modify
-+         the state of the current process. */
-+      return 0;
-+}
-+
-+static int selinux_task_wait(struct task_struct *p)
-+{
-+      u32 perm;
-+
-+      perm = signal_to_av(p->exit_signal);
-+
-+      return task_has_perm(p, current, perm);
-+}
-+
-+static void selinux_task_reparent_to_init(struct task_struct *p)
-+{
-+      struct task_security_struct *tsec;
-+
-+      secondary_ops->task_reparent_to_init(p);
-+
-+      tsec = p->security;
-+      tsec->osid = tsec->sid;
-+      tsec->sid = SECINITSID_KERNEL;
-+      return;
-+}
-+
-+static void selinux_task_to_inode(struct task_struct *p,
-+                                struct inode *inode)
-+{
-+      struct task_security_struct *tsec = p->security;
-+      struct inode_security_struct *isec = inode->i_security;
-+
-+      isec->sid = tsec->sid;
-+      isec->initialized = 1;
-+      return;
-+}
-+
-+#ifdef CONFIG_SECURITY_NETWORK
-+
-+/* socket security operations */
-+static int socket_has_perm(struct task_struct *task, struct socket *sock,
-+                         u32 perms)
-+{
-+      struct inode_security_struct *isec;
-+      struct task_security_struct *tsec;
-+      struct avc_audit_data ad;
-+      int err;
-+
-+      tsec = task->security;
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,NET);
-+      ad.u.net.sk = sock->sk;
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         perms, &isec->avcr, &ad);
-+
-+      return err;
-+}
-+
-+static int selinux_socket_create(int family, int type, int protocol)
-+{
-+      int err;
-+      struct task_security_struct *tsec;
-+
-+      tsec = current->security;
-+
-+      err = avc_has_perm(tsec->sid, tsec->sid,
-+                         socket_type_to_security_class(family, type),
-+                         SOCKET__CREATE, NULL, NULL);
-+
-+      return err;
-+}
-+
-+static void selinux_socket_post_create(struct socket *sock, int family, int type, int protocol)
-+{
-+      int err;
-+      struct inode_security_struct *isec;
-+      struct task_security_struct *tsec;
-+
-+      err = inode_doinit(SOCK_INODE(sock));
-+      if (err < 0)
-+              return;
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      tsec = current->security;
-+      isec->sclass = socket_type_to_security_class(family, type);
-+      isec->sid = tsec->sid;
-+
-+      return;
-+}
-+
-+/* Range of port numbers used to automatically bind.
-+   Need to determine whether we should perform a name_bind
-+   permission check between the socket and the port number. */
-+#define ip_local_port_range_0 sysctl_local_port_range[0]
-+#define ip_local_port_range_1 sysctl_local_port_range[1]
-+
-+static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen)
-+{
-+      int err;
-+
-+      err = socket_has_perm(current, sock, SOCKET__BIND);
-+      if (err)
-+              return err;
-+
-+      /*
-+       * If PF_INET, check name_bind permission for the port.
-+       */
-+      if (sock->sk->sk_family == PF_INET) {
-+              struct inode_security_struct *isec;
-+              struct task_security_struct *tsec;
-+              struct avc_audit_data ad;
-+              struct sockaddr_in *addr = (struct sockaddr_in *)address;
-+              unsigned short snum = ntohs(addr->sin_port);
-+              struct sock *sk = sock->sk;
-+              u32 sid;
-+
-+              tsec = current->security;
-+              isec = SOCK_INODE(sock)->i_security;
-+
-+              if (snum&&(snum < max(PROT_SOCK,ip_local_port_range_0) ||
-+                         snum > ip_local_port_range_1)) {
-+                      err = security_port_sid(sk->sk_family, sk->sk_type,
-+                                              sk->sk_protocol, snum, &sid);
-+                      if (err)
-+                              return err;
-+                      AVC_AUDIT_DATA_INIT(&ad,NET);
-+                      ad.u.net.port = snum;
-+                      err = avc_has_perm(isec->sid, sid,
-+                                         isec->sclass,
-+                                         SOCKET__NAME_BIND, NULL, &ad);
-+                      if (err)
-+                              return err;
-+              }
-+      }
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_connect(struct socket *sock, struct sockaddr *address, int addrlen)
-+{
-+      int err;
-+      struct sock *sk = sock->sk;
-+      struct avc_audit_data ad;
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *isec;
-+
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      tsec = current->security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, NET);
-+      ad.u.net.sk = sk;
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         SOCKET__CONNECT, &isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_listen(struct socket *sock, int backlog)
-+{
-+      int err;
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *isec;
-+      struct avc_audit_data ad;
-+
-+      tsec = current->security;
-+
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, NET);
-+      ad.u.net.sk = sock->sk;
-+
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         SOCKET__LISTEN, &isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_accept(struct socket *sock, struct socket *newsock)
-+{
-+      int err;
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *isec;
-+      struct inode_security_struct *newisec;
-+      struct avc_audit_data ad;
-+
-+      tsec = current->security;
-+
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, NET);
-+      ad.u.net.sk = sock->sk;
-+
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         SOCKET__ACCEPT, &isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      err = inode_doinit(SOCK_INODE(newsock));
-+      if (err < 0)
-+              return err;
-+      newisec = SOCK_INODE(newsock)->i_security;
-+
-+      newisec->sclass = isec->sclass;
-+      newisec->sid = isec->sid;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_sendmsg(struct socket *sock, struct msghdr *msg,
-+                                int size)
-+{
-+      struct task_security_struct *tsec;
-+      struct inode_security_struct *isec;
-+      struct avc_audit_data ad;
-+      struct sock *sk;
-+      int err;
-+
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      tsec = current->security;
-+
-+      sk = sock->sk;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, NET);
-+      ad.u.net.sk = sk;
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         SOCKET__WRITE, &isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_recvmsg(struct socket *sock, struct msghdr *msg,
-+                                int size, int flags)
-+{
-+      struct inode_security_struct *isec;
-+      struct task_security_struct *tsec;
-+      struct avc_audit_data ad;
-+      int err;
-+
-+      isec = SOCK_INODE(sock)->i_security;
-+      tsec = current->security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,NET);
-+      ad.u.net.sk = sock->sk;
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         SOCKET__READ, &isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_getsockname(struct socket *sock)
-+{
-+      struct inode_security_struct *isec;
-+      struct task_security_struct *tsec;
-+      struct avc_audit_data ad;
-+      int err;
-+
-+      tsec = current->security;
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,NET);
-+      ad.u.net.sk = sock->sk;
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         SOCKET__GETATTR, &isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_getpeername(struct socket *sock)
-+{
-+      struct inode_security_struct *isec;
-+      struct task_security_struct *tsec;
-+      struct avc_audit_data ad;
-+      int err;
-+
-+      tsec = current->security;
-+      isec = SOCK_INODE(sock)->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,NET);
-+      ad.u.net.sk = sock->sk;
-+      err = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
-+                         SOCKET__GETATTR, &isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_setsockopt(struct socket *sock,int level,int optname)
-+{
-+      return socket_has_perm(current, sock, SOCKET__SETOPT);
-+}
-+
-+static int selinux_socket_getsockopt(struct socket *sock, int level,
-+                                   int optname)
-+{
-+      return socket_has_perm(current, sock, SOCKET__GETOPT);
-+}
-+
-+static int selinux_socket_shutdown(struct socket *sock, int how)
-+{
-+      return socket_has_perm(current, sock, SOCKET__SHUTDOWN);
-+}
-+
-+static int selinux_socket_unix_stream_connect(struct socket *sock,
-+                                            struct socket *other,
-+                                            struct sock *newsk)
-+{
-+      struct inode_security_struct *isec;
-+      struct inode_security_struct *other_isec;
-+      struct avc_audit_data ad;
-+      int err;
-+
-+      isec = SOCK_INODE(sock)->i_security;
-+      other_isec = SOCK_INODE(other)->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,NET);
-+      ad.u.net.sk = other->sk;
-+
-+      err = avc_has_perm(isec->sid, other_isec->sid,
-+                         isec->sclass,
-+                         UNIX_STREAM_SOCKET__CONNECTTO,
-+                         &other_isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+static int selinux_socket_unix_may_send(struct socket *sock,
-+                                      struct socket *other)
-+{
-+      struct inode_security_struct *isec;
-+      struct inode_security_struct *other_isec;
-+      struct avc_audit_data ad;
-+      int err;
-+
-+      isec = SOCK_INODE(sock)->i_security;
-+      other_isec = SOCK_INODE(other)->i_security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad,NET);
-+      ad.u.net.sk = other->sk;
-+
-+      err = avc_has_perm(isec->sid, other_isec->sid,
-+                         isec->sclass,
-+                         SOCKET__SENDTO,
-+                         &other_isec->avcr, &ad);
-+      if (err)
-+              return err;
-+
-+      return 0;
-+}
-+
-+#endif
-+
-+static int ipc_alloc_security(struct task_struct *task,
-+                            struct kern_ipc_perm *perm,
-+                            u16 sclass)
-+{
-+      struct task_security_struct *tsec = task->security;
-+      struct ipc_security_struct *isec;
-+
-+      isec = kmalloc(sizeof(struct ipc_security_struct), GFP_KERNEL);
-+      if (!isec)
-+              return -ENOMEM;
-+
-+      memset(isec, 0, sizeof(struct ipc_security_struct));
-+      isec->magic = SELINUX_MAGIC;
-+      isec->sclass = sclass;
-+      isec->ipc_perm = perm;
-+      if (tsec) {
-+              isec->sid = tsec->sid;
-+      } else {
-+              isec->sid = SECINITSID_UNLABELED;
-+      }
-+      perm->security = isec;
-+
-+      return 0;
-+}
-+
-+static void ipc_free_security(struct kern_ipc_perm *perm)
-+{
-+      struct ipc_security_struct *isec = perm->security;
-+      if (!isec || isec->magic != SELINUX_MAGIC)
-+              return;
-+
-+      perm->security = NULL;
-+      kfree(isec);
-+}
-+
-+static int msg_msg_alloc_security(struct msg_msg *msg)
-+{
-+      struct msg_security_struct *msec;
-+
-+      msec = kmalloc(sizeof(struct msg_security_struct), GFP_KERNEL);
-+      if (!msec)
-+              return -ENOMEM;
-+
-+      memset(msec, 0, sizeof(struct msg_security_struct));
-+      msec->magic = SELINUX_MAGIC;
-+      msec->msg = msg;
-+      msec->sid = SECINITSID_UNLABELED;
-+      msg->security = msec;
-+
-+      return 0;
-+}
-+
-+static void msg_msg_free_security(struct msg_msg *msg)
-+{
-+      struct msg_security_struct *msec = msg->security;
-+      if (!msec || msec->magic != SELINUX_MAGIC)
-+              return;
-+
-+      msg->security = NULL;
-+      kfree(msec);
-+}
-+
-+static int ipc_has_perm(struct kern_ipc_perm *ipc_perms,
-+                      u16 sclass, u32 perms)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct avc_audit_data ad;
-+
-+      tsec = current->security;
-+      isec = ipc_perms->security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = ipc_perms->key;
-+
-+      return avc_has_perm(tsec->sid, isec->sid, sclass,
-+                          perms, &isec->avcr, &ad);
-+}
-+
-+static int selinux_msg_msg_alloc_security(struct msg_msg *msg)
-+{
-+      return msg_msg_alloc_security(msg);
-+}
-+
-+static void selinux_msg_msg_free_security(struct msg_msg *msg)
-+{
-+      return msg_msg_free_security(msg);
-+}
-+
-+/* message queue security operations */
-+static int selinux_msg_queue_alloc_security(struct msg_queue *msq)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      rc = ipc_alloc_security(current, &msq->q_perm, SECCLASS_MSGQ);
-+      if (rc)
-+              return rc;
-+
-+      tsec = current->security;
-+      isec = msq->q_perm.security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = msq->q_perm.key;
-+
-+      rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_MSGQ,
-+                        MSGQ__CREATE, &isec->avcr, &ad);
-+      if (rc) {
-+              ipc_free_security(&msq->q_perm);
-+              return rc;
-+      }
-+      return 0;
-+}
-+
-+static void selinux_msg_queue_free_security(struct msg_queue *msq)
-+{
-+      ipc_free_security(&msq->q_perm);
-+}
-+
-+static int selinux_msg_queue_associate(struct msg_queue *msq, int msqflg)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct avc_audit_data ad;
-+
-+      tsec = current->security;
-+      isec = msq->q_perm.security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = msq->q_perm.key;
-+
-+      return avc_has_perm(tsec->sid, isec->sid, SECCLASS_MSGQ,
-+                          MSGQ__ASSOCIATE, &isec->avcr, &ad);
-+}
-+
-+static int selinux_msg_queue_msgctl(struct msg_queue *msq, int cmd)
-+{
-+      int err;
-+      int perms;
-+
-+      switch(cmd) {
-+      case IPC_INFO:
-+      case MSG_INFO:
-+              /* No specific object, just general system-wide information. */
-+              return task_has_system(current, SYSTEM__IPC_INFO);
-+      case IPC_STAT:
-+      case MSG_STAT:
-+              perms = MSGQ__GETATTR | MSGQ__ASSOCIATE;
-+              break;
-+      case IPC_SET:
-+              perms = MSGQ__SETATTR;
-+              break;
-+      case IPC_RMID:
-+              perms = MSGQ__DESTROY;
-+              break;
-+      default:
-+              return 0;
-+      }
-+
-+      err = ipc_has_perm(&msq->q_perm, SECCLASS_MSGQ, perms);
-+      return err;
-+}
-+
-+static int selinux_msg_queue_msgsnd(struct msg_queue *msq, struct msg_msg *msg, int msqflg)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct msg_security_struct *msec;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      tsec = current->security;
-+      isec = msq->q_perm.security;
-+      msec = msg->security;
-+
-+      /*
-+       * First time through, need to assign label to the message
-+       */
-+      if (msec->sid == SECINITSID_UNLABELED) {
-+              /*
-+               * Compute new sid based on current process and
-+               * message queue this message will be stored in
-+               */
-+              rc = security_transition_sid(tsec->sid,
-+                                           isec->sid,
-+                                           SECCLASS_MSG,
-+                                           &msec->sid);
-+              if (rc)
-+                      return rc;
-+      }
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = msq->q_perm.key;
-+
-+      /* Can this process write to the queue? */
-+      rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_MSGQ,
-+                        MSGQ__WRITE, &isec->avcr, &ad);
-+      if (!rc)
-+              /* Can this process send the message */
-+              rc = avc_has_perm(tsec->sid, msec->sid,
-+                                SECCLASS_MSG, MSG__SEND,
-+                                &msec->avcr, &ad);
-+      if (!rc)
-+              /* Can the message be put in the queue? */
-+              rc = avc_has_perm(msec->sid, isec->sid,
-+                                SECCLASS_MSGQ, MSGQ__ENQUEUE,
-+                                &isec->avcr, &ad);
-+
-+      return rc;
-+}
-+
-+static int selinux_msg_queue_msgrcv(struct msg_queue *msq, struct msg_msg *msg,
-+                                  struct task_struct *target,
-+                                  long type, int mode)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct msg_security_struct *msec;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      tsec = target->security;
-+      isec = msq->q_perm.security;
-+      msec = msg->security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = msq->q_perm.key;
-+
-+      rc = avc_has_perm(tsec->sid, isec->sid,
-+                        SECCLASS_MSGQ, MSGQ__READ,
-+                        &isec->avcr, &ad);
-+      if (!rc)
-+              rc = avc_has_perm(tsec->sid, msec->sid,
-+                                SECCLASS_MSG, MSG__RECEIVE,
-+                                &msec->avcr, &ad);
-+      return rc;
-+}
-+
-+/* Shared Memory security operations */
-+static int selinux_shm_alloc_security(struct shmid_kernel *shp)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      rc = ipc_alloc_security(current, &shp->shm_perm, SECCLASS_SHM);
-+      if (rc)
-+              return rc;
-+
-+      tsec = current->security;
-+      isec = shp->shm_perm.security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = shp->shm_perm.key;
-+
-+      rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_SHM,
-+                        SHM__CREATE, &isec->avcr, &ad);
-+      if (rc) {
-+              ipc_free_security(&shp->shm_perm);
-+              return rc;
-+      }
-+      return 0;
-+}
-+
-+static void selinux_shm_free_security(struct shmid_kernel *shp)
-+{
-+      ipc_free_security(&shp->shm_perm);
-+}
-+
-+static int selinux_shm_associate(struct shmid_kernel *shp, int shmflg)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct avc_audit_data ad;
-+
-+      tsec = current->security;
-+      isec = shp->shm_perm.security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = shp->shm_perm.key;
-+
-+      return avc_has_perm(tsec->sid, isec->sid, SECCLASS_SHM,
-+                          SHM__ASSOCIATE, &isec->avcr, &ad);
-+}
-+
-+/* Note, at this point, shp is locked down */
-+static int selinux_shm_shmctl(struct shmid_kernel *shp, int cmd)
-+{
-+      int perms;
-+      int err;
-+
-+      switch(cmd) {
-+      case IPC_INFO:
-+      case SHM_INFO:
-+              /* No specific object, just general system-wide information. */
-+              return task_has_system(current, SYSTEM__IPC_INFO);
-+      case IPC_STAT:
-+      case SHM_STAT:
-+              perms = SHM__GETATTR | SHM__ASSOCIATE;
-+              break;
-+      case IPC_SET:
-+              perms = SHM__SETATTR;
-+              break;
-+      case SHM_LOCK:
-+      case SHM_UNLOCK:
-+              perms = SHM__LOCK;
-+              break;
-+      case IPC_RMID:
-+              perms = SHM__DESTROY;
-+              break;
-+      default:
-+              return 0;
-+      }
-+
-+      err = ipc_has_perm(&shp->shm_perm, SECCLASS_SHM, perms);
-+      return err;
-+}
-+
-+static int selinux_shm_shmat(struct shmid_kernel *shp,
-+                           char *shmaddr, int shmflg)
-+{
-+      u32 perms;
-+
-+      if (shmflg & SHM_RDONLY)
-+              perms = SHM__READ;
-+      else
-+              perms = SHM__READ | SHM__WRITE;
-+
-+      return ipc_has_perm(&shp->shm_perm, SECCLASS_SHM, perms);
-+}
-+
-+/* Semaphore security operations */
-+static int selinux_sem_alloc_security(struct sem_array *sma)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct avc_audit_data ad;
-+      int rc;
-+
-+      rc = ipc_alloc_security(current, &sma->sem_perm, SECCLASS_SEM);
-+      if (rc)
-+              return rc;
-+
-+      tsec = current->security;
-+      isec = sma->sem_perm.security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = sma->sem_perm.key;
-+
-+      rc = avc_has_perm(tsec->sid, isec->sid, SECCLASS_SEM,
-+                        SEM__CREATE, &isec->avcr, &ad);
-+      if (rc) {
-+              ipc_free_security(&sma->sem_perm);
-+              return rc;
-+      }
-+      return 0;
-+}
-+
-+static void selinux_sem_free_security(struct sem_array *sma)
-+{
-+      ipc_free_security(&sma->sem_perm);
-+}
-+
-+static int selinux_sem_associate(struct sem_array *sma, int semflg)
-+{
-+      struct task_security_struct *tsec;
-+      struct ipc_security_struct *isec;
-+      struct avc_audit_data ad;
-+
-+      tsec = current->security;
-+      isec = sma->sem_perm.security;
-+
-+      AVC_AUDIT_DATA_INIT(&ad, IPC);
-+      ad.u.ipc_id = sma->sem_perm.key;
-+
-+      return avc_has_perm(tsec->sid, isec->sid, SECCLASS_SEM,
-+                          SEM__ASSOCIATE, &isec->avcr, &ad);
-+}
-+
-+/* Note, at this point, sma is locked down */
-+static int selinux_sem_semctl(struct sem_array *sma, int cmd)
-+{
-+      int err;
-+      u32 perms;
-+
-+      switch(cmd) {
-+      case IPC_INFO:
-+      case SEM_INFO:
-+              /* No specific object, just general system-wide information. */
-+              return task_has_system(current, SYSTEM__IPC_INFO);
-+      case GETPID:
-+      case GETNCNT:
-+      case GETZCNT:
-+              perms = SEM__GETATTR;
-+              break;
-+      case GETVAL:
-+      case GETALL:
-+              perms = SEM__READ;
-+              break;
-+      case SETVAL:
-+      case SETALL:
-+              perms = SEM__WRITE;
-+              break;
-+      case IPC_RMID:
-+              perms = SEM__DESTROY;
-+              break;
-+      case IPC_SET:
-+              perms = SEM__SETATTR;
-+              break;
-+      case IPC_STAT:
-+      case SEM_STAT:
-+              perms = SEM__GETATTR | SEM__ASSOCIATE;
-+              break;
-+      default:
-+              return 0;
-+      }
-+
-+      err = ipc_has_perm(&sma->sem_perm, SECCLASS_SEM, perms);
-+      return err;
-+}
-+
-+static int selinux_sem_semop(struct sem_array *sma,
-+                           struct sembuf *sops, unsigned nsops, int alter)
-+{
-+      u32 perms;
-+
-+      if (alter)
-+              perms = SEM__READ | SEM__WRITE;
-+      else
-+              perms = SEM__READ;
-+
-+      return ipc_has_perm(&sma->sem_perm, SECCLASS_SEM, perms);
-+}
-+
-+static int selinux_ipc_permission(struct kern_ipc_perm *ipcp, short flag)
-+{
-+      struct ipc_security_struct *isec = ipcp->security;
-+      u16 sclass = SECCLASS_IPC;
-+      u32 av = 0;
-+
-+      if (isec && isec->magic == SELINUX_MAGIC)
-+              sclass = isec->sclass;
-+
-+      av = 0;
-+      if (flag & S_IRUGO)
-+              av |= IPC__UNIX_READ;
-+      if (flag & S_IWUGO)
-+              av |= IPC__UNIX_WRITE;
-+
-+      if (av == 0)
-+              return 0;
-+
-+      return ipc_has_perm(ipcp, sclass, av);
-+}
-+
-+/* module stacking operations */
-+int selinux_register_security (const char *name, struct security_operations *ops)
-+{
-+      if (secondary_ops != original_ops) {
-+              printk(KERN_INFO "%s:  There is already a secondary security "
-+                     "module registered.\n", __FUNCTION__);
-+              return -EINVAL;
-+      }
-+
-+      secondary_ops = ops;
-+
-+      printk(KERN_INFO "%s:  Registering secondary module %s\n",
-+             __FUNCTION__,
-+             name);
-+
-+      return 0;
-+}
-+
-+int selinux_unregister_security (const char *name, struct security_operations *ops)
-+{
-+      if (ops != secondary_ops) {
-+              printk (KERN_INFO "%s:  trying to unregister a security module "
-+                      "that is not registered.\n", __FUNCTION__);
-+              return -EINVAL;
-+      }
-+
-+      secondary_ops = original_ops;
-+
-+      return 0;
-+}
-+
-+static void selinux_d_instantiate (struct dentry *dentry, struct inode *inode)
-+{
-+      if (inode)
-+              inode_doinit_with_dentry(inode, dentry);
-+}
-+
-+static int selinux_getprocattr(struct task_struct *p,
-+                             char *name, void *value, size_t size)
-+{
-+      struct task_security_struct *tsec;
-+      u32 sid;
-+      char *context;
-+      size_t len;
-+      int error;
-+
-+      if (current != p) {
-+              error = task_has_perm(current, p, PROCESS__GETATTR);
-+              if (error)
-+                      return error;
-+      }
-+
-+      if (!size)
-+              return -ERANGE;
-+
-+      tsec = p->security;
-+
-+      if (!strcmp(name, "current"))
-+              sid = tsec->sid;
-+      else if (!strcmp(name, "prev"))
-+              sid = tsec->osid;
-+      else if (!strcmp(name, "exec"))
-+              sid = tsec->exec_sid;
-+      else if (!strcmp(name, "fscreate"))
-+              sid = tsec->create_sid;
-+      else
-+              return -EINVAL;
-+
-+      if (!sid)
-+              return 0;
-+
-+      error = security_sid_to_context(sid, &context, &len);
-+      if (error)
-+              return error;
-+      if (len > size) {
-+              kfree(context);
-+              return -ERANGE;
-+      }
-+      memcpy(value, context, len);
-+      kfree(context);
-+      return len;
-+}
-+
-+static int selinux_setprocattr(struct task_struct *p,
-+                             char *name, void *value, size_t size)
-+{
-+      struct task_security_struct *tsec;
-+      u32 sid = 0;
-+      int error;
-+
-+      if (current != p || !strcmp(name, "current")) {
-+              /* SELinux only allows a process to change its own
-+                 security attributes, and it only allows the process
-+                 current SID to change via exec. */
-+              return -EACCES;
-+      }
-+
-+      /*
-+       * Basic control over ability to set these attributes at all.
-+       * current == p, but we'll pass them separately in case the
-+       * above restriction is ever removed.
-+       */
-+      if (!strcmp(name, "exec"))
-+              error = task_has_perm(current, p, PROCESS__SETEXEC);
-+      else if (!strcmp(name, "fscreate"))
-+              error = task_has_perm(current, p, PROCESS__SETFSCREATE);
-+      else
-+              error = -EINVAL;
-+      if (error)
-+              return error;
-+
-+      /* Obtain a SID for the context, if one was specified. */
-+      if (size) {
-+              int error;
-+              error = security_context_to_sid(value, size, &sid);
-+              if (error)
-+                      return error;
-+      }
-+
-+      /* Permission checking based on the specified context is
-+         performed during the actual operation (execve,
-+         open/mkdir/...), when we know the full context of the
-+         operation.  See selinux_bprm_set_security for the execve
-+         checks and may_create for the file creation checks. The
-+         operation will then fail if the context is not permitted. */
-+      tsec = p->security;
-+      if (!strcmp(name, "exec"))
-+              tsec->exec_sid = sid;
-+      else if (!strcmp(name, "fscreate"))
-+              tsec->create_sid = sid;
-+      else
-+              return -EINVAL;
-+
-+      return size;
-+}
-+
-+struct security_operations selinux_ops = {
-+      .ptrace =                       selinux_ptrace,
-+      .capget =                       selinux_capget,
-+      .capset_check =                 selinux_capset_check,
-+      .capset_set =                   selinux_capset_set,
-+      .sysctl =                       selinux_sysctl,
-+      .capable =                      selinux_capable,
-+      .quotactl =                     selinux_quotactl,
-+      .quota_on =                     selinux_quota_on,
-+      .syslog =                       selinux_syslog,
-+      .vm_enough_memory =             selinux_vm_enough_memory,
-+
-+      .netlink_send =                 selinux_netlink_send,
-+        .netlink_recv =                       selinux_netlink_recv,
-+
-+      .bprm_alloc_security =          selinux_bprm_alloc_security,
-+      .bprm_free_security =           selinux_bprm_free_security,
-+      .bprm_compute_creds =           selinux_bprm_compute_creds,
-+      .bprm_set_security =            selinux_bprm_set_security,
-+      .bprm_check_security =          selinux_bprm_check_security,
-+      .bprm_secureexec =              selinux_bprm_secureexec,
-+
-+      .sb_alloc_security =            selinux_sb_alloc_security,
-+      .sb_free_security =             selinux_sb_free_security,
-+      .sb_kern_mount =                selinux_sb_kern_mount,
-+      .sb_statfs =                    selinux_sb_statfs,
-+      .sb_mount =                     selinux_mount,
-+      .sb_umount =                    selinux_umount,
-+
-+      .inode_alloc_security =         selinux_inode_alloc_security,
-+      .inode_free_security =          selinux_inode_free_security,
-+      .inode_create =                 selinux_inode_create,
-+      .inode_post_create =            selinux_inode_post_create,
-+      .inode_link =                   selinux_inode_link,
-+      .inode_post_link =              selinux_inode_post_link,
-+      .inode_unlink =                 selinux_inode_unlink,
-+      .inode_symlink =                selinux_inode_symlink,
-+      .inode_post_symlink =           selinux_inode_post_symlink,
-+      .inode_mkdir =                  selinux_inode_mkdir,
-+      .inode_post_mkdir =             selinux_inode_post_mkdir,
-+      .inode_rmdir =                  selinux_inode_rmdir,
-+      .inode_mknod =                  selinux_inode_mknod,
-+      .inode_post_mknod =             selinux_inode_post_mknod,
-+      .inode_rename =                 selinux_inode_rename,
-+      .inode_post_rename =            selinux_inode_post_rename,
-+      .inode_readlink =               selinux_inode_readlink,
-+      .inode_follow_link =            selinux_inode_follow_link,
-+      .inode_permission =             selinux_inode_permission,
-+      .inode_setattr =                selinux_inode_setattr,
-+      .inode_getattr =                selinux_inode_getattr,
-+      .inode_setxattr =               selinux_inode_setxattr,
-+      .inode_post_setxattr =          selinux_inode_post_setxattr,
-+      .inode_getxattr =               selinux_inode_getxattr,
-+      .inode_listxattr =              selinux_inode_listxattr,
-+      .inode_removexattr =            selinux_inode_removexattr,
-+      .inode_getsecurity =            selinux_inode_getsecurity,
-+      .inode_setsecurity =            selinux_inode_setsecurity,
-+      .inode_listsecurity =           selinux_inode_listsecurity,
-+
-+      .file_permission =              selinux_file_permission,
-+      .file_alloc_security =          selinux_file_alloc_security,
-+      .file_free_security =           selinux_file_free_security,
-+      .file_ioctl =                   selinux_file_ioctl,
-+      .file_mmap =                    selinux_file_mmap,
-+      .file_mprotect =                selinux_file_mprotect,
-+      .file_lock =                    selinux_file_lock,
-+      .file_fcntl =                   selinux_file_fcntl,
-+      .file_set_fowner =              selinux_file_set_fowner,
-+      .file_send_sigiotask =          selinux_file_send_sigiotask,
-+      .file_receive =                 selinux_file_receive,
-+
-+      .task_create =                  selinux_task_create,
-+      .task_alloc_security =          selinux_task_alloc_security,
-+      .task_free_security =           selinux_task_free_security,
-+      .task_setuid =                  selinux_task_setuid,
-+      .task_post_setuid =             selinux_task_post_setuid,
-+      .task_setgid =                  selinux_task_setgid,
-+      .task_setpgid =                 selinux_task_setpgid,
-+      .task_getpgid =                 selinux_task_getpgid,
-+      .task_getsid =                  selinux_task_getsid,
-+      .task_setgroups =               selinux_task_setgroups,
-+      .task_setnice =                 selinux_task_setnice,
-+      .task_setrlimit =               selinux_task_setrlimit,
-+      .task_setscheduler =            selinux_task_setscheduler,
-+      .task_getscheduler =            selinux_task_getscheduler,
-+      .task_kill =                    selinux_task_kill,
-+      .task_wait =                    selinux_task_wait,
-+      .task_prctl =                   selinux_task_prctl,
-+      .task_reparent_to_init =        selinux_task_reparent_to_init,
-+      .task_to_inode =                selinux_task_to_inode,
-+
-+      .ipc_permission =               selinux_ipc_permission,
-+
-+      .msg_msg_alloc_security =       selinux_msg_msg_alloc_security,
-+      .msg_msg_free_security =        selinux_msg_msg_free_security,
-+
-+      .msg_queue_alloc_security =     selinux_msg_queue_alloc_security,
-+      .msg_queue_free_security =      selinux_msg_queue_free_security,
-+      .msg_queue_associate =          selinux_msg_queue_associate,
-+      .msg_queue_msgctl =             selinux_msg_queue_msgctl,
-+      .msg_queue_msgsnd =             selinux_msg_queue_msgsnd,
-+      .msg_queue_msgrcv =             selinux_msg_queue_msgrcv,
-+
-+      .shm_alloc_security =           selinux_shm_alloc_security,
-+      .shm_free_security =            selinux_shm_free_security,
-+      .shm_associate =                selinux_shm_associate,
-+      .shm_shmctl =                   selinux_shm_shmctl,
-+      .shm_shmat =                    selinux_shm_shmat,
-+
-+      .sem_alloc_security =           selinux_sem_alloc_security,
-+      .sem_free_security =            selinux_sem_free_security,
-+      .sem_associate =                selinux_sem_associate,
-+      .sem_semctl =                   selinux_sem_semctl,
-+      .sem_semop =                    selinux_sem_semop,
-+
-+      .register_security =            selinux_register_security,
-+      .unregister_security =          selinux_unregister_security,
-+
-+      .d_instantiate =                selinux_d_instantiate,
-+
-+      .getprocattr =                  selinux_getprocattr,
-+      .setprocattr =                  selinux_setprocattr,
-+
-+#ifdef CONFIG_SECURITY_NETWORK
-+        .unix_stream_connect =                selinux_socket_unix_stream_connect,
-+      .unix_may_send =                selinux_socket_unix_may_send,
-+
-+      .socket_create =                selinux_socket_create,
-+      .socket_post_create =           selinux_socket_post_create,
-+      .socket_bind =                  selinux_socket_bind,
-+      .socket_connect =               selinux_socket_connect,
-+      .socket_listen =                selinux_socket_listen,
-+      .socket_accept =                selinux_socket_accept,
-+      .socket_sendmsg =               selinux_socket_sendmsg,
-+      .socket_recvmsg =               selinux_socket_recvmsg,
-+      .socket_getsockname =           selinux_socket_getsockname,
-+      .socket_getpeername =           selinux_socket_getpeername,
-+      .socket_getsockopt =            selinux_socket_getsockopt,
-+      .socket_setsockopt =            selinux_socket_setsockopt,
-+      .socket_shutdown =              selinux_socket_shutdown,
-+#endif
-+};
-+
-+__init int selinux_init(void)
-+{
-+      struct task_security_struct *tsec;
-+
-+      printk(KERN_INFO "SELinux:  Initializing.\n");
-+
-+      /* Set the security state for the initial task. */
-+      if (task_alloc_security(current))
-+              panic("SELinux:  Failed to initialize initial task.\n");
-+      tsec = current->security;
-+      tsec->osid = tsec->sid = SECINITSID_KERNEL;
-+
-+      avc_init();
-+
-+      original_ops = secondary_ops = security_ops;
-+      if (!secondary_ops)
-+              panic ("SELinux: No initial security operations\n");
-+      if (register_security (&selinux_ops))
-+              panic("SELinux: Unable to register with kernel.\n");
-+
-+      if (selinux_enforcing) {
-+              printk(KERN_INFO "SELinux:  Starting in enforcing mode\n");
-+      } else {
-+              printk(KERN_INFO "SELinux:  Starting in permissive mode\n");
-+      }
-+      return 0;
-+}
-+
-+void selinux_complete_init(void)
-+{
-+      printk(KERN_INFO "SELinux:  Completing initialization.\n");
-+
-+      /* Set up any superblocks initialized prior to the policy load. */
-+      printk(KERN_INFO "SELinux:  Setting up existing superblocks.\n");
-+      spin_lock(&sb_security_lock);
-+next_sb:
-+      if (!list_empty(&superblock_security_head)) {
-+              struct superblock_security_struct *sbsec =
-+                              list_entry(superblock_security_head.next,
-+                                         struct superblock_security_struct,
-+                                         list);
-+              struct super_block *sb = sbsec->sb;
-+              spin_lock(&sb_lock);
-+              sb->s_count++;
-+              spin_unlock(&sb_lock);
-+              spin_unlock(&sb_security_lock);
-+              down_read(&sb->s_umount);
-+              if (sb->s_root)
-+                      superblock_doinit(sb);
-+              drop_super(sb);
-+              spin_lock(&sb_security_lock);
-+              list_del_init(&sbsec->list);
-+              goto next_sb;
-+      }
-+      spin_unlock(&sb_security_lock);
-+
-+      /* Set up any inodes initialized prior to the policy load. */
-+      printk(KERN_INFO "SELinux:  Setting up existing inodes.\n");
-+      spin_lock(&inode_security_lock);
-+next_inode:
-+      if (!list_empty(&inode_security_head)) {
-+              struct inode_security_struct *isec =
-+                              list_entry(inode_security_head.next,
-+                                         struct inode_security_struct, list);
-+              struct inode *inode = isec->inode;
-+              spin_unlock(&inode_security_lock);
-+              inode = igrab(inode);
-+              if (inode) {
-+                      inode_doinit(inode);
-+                      iput(inode);
-+              }
-+              spin_lock(&inode_security_lock);
-+              list_del_init(&isec->list);
-+              goto next_inode;
-+      }
-+      spin_unlock(&inode_security_lock);
-+}
-+
-+/* SELinux requires early initialization in order to label
-+   all processes and objects when they are created. */
-+security_initcall(selinux_init);
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/avc.h  2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,159 @@
-+/*
-+ * Access vector cache interface for object managers.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SELINUX_AVC_H_
-+#define _SELINUX_AVC_H_
-+
-+#include <linux/stddef.h>
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/kdev_t.h>
-+#include <linux/spinlock.h>
-+#include <asm/system.h>
-+#include "flask.h"
-+#include "av_permissions.h"
-+#include "security.h"
-+
-+#ifdef CONFIG_SECURITY_SELINUX_DEVELOP
-+extern int selinux_enforcing;
-+#else
-+#define selinux_enforcing 1
-+#endif
-+
-+/*
-+ * An entry in the AVC.
-+ */
-+struct avc_entry;
-+
-+/*
-+ * A reference to an AVC entry.
-+ */
-+struct avc_entry_ref {
-+      struct avc_entry *ae;
-+};
-+
-+/* Initialize an AVC entry reference before first use. */
-+static inline void avc_entry_ref_init(struct avc_entry_ref *h)
-+{
-+      h->ae = NULL;
-+}
-+
-+struct task_struct;
-+struct vfsmount;
-+struct dentry;
-+struct inode;
-+struct sock;
-+struct sk_buff;
-+
-+/* Auxiliary data to use in generating the audit record. */
-+struct avc_audit_data {
-+      char    type;
-+#define AVC_AUDIT_DATA_FS   1
-+#define AVC_AUDIT_DATA_NET  2
-+#define AVC_AUDIT_DATA_CAP  3
-+#define AVC_AUDIT_DATA_IPC  4
-+      struct task_struct *tsk;
-+      union   {
-+              struct {
-+                      struct vfsmount *mnt;
-+                      struct dentry *dentry;
-+                      struct inode *inode;
-+              } fs;
-+              struct {
-+                      char *netif;
-+                      struct sk_buff *skb;
-+                      struct sock *sk;
-+                      u16 port;
-+                      u32 daddr;
-+              } net;
-+              int cap;
-+              int ipc_id;
-+      } u;
-+};
-+
-+/* Initialize an AVC audit data structure. */
-+#define AVC_AUDIT_DATA_INIT(_d,_t) \
-+        { memset((_d), 0, sizeof(struct avc_audit_data)); (_d)->type = AVC_AUDIT_DATA_##_t; }
-+
-+/*
-+ * AVC statistics
-+ */
-+#define AVC_ENTRY_LOOKUPS        0
-+#define AVC_ENTRY_HITS                 1
-+#define AVC_ENTRY_MISSES         2
-+#define AVC_ENTRY_DISCARDS       3
-+#define AVC_CAV_LOOKUPS          4
-+#define AVC_CAV_HITS             5
-+#define AVC_CAV_PROBES           6
-+#define AVC_CAV_MISSES           7
-+#define AVC_NSTATS               8
-+extern unsigned avc_cache_stats[AVC_NSTATS];
-+
-+#ifdef AVC_CACHE_STATS
-+static inline void avc_cache_stats_incr(int type)
-+{
-+      avc_cache_stats[type]++;
-+}
-+
-+static inline void avc_cache_stats_add(int type, unsigned val)
-+{
-+      avc_cache_stats[type] += val;
-+}
-+#else
-+static inline void avc_cache_stats_incr(int type)
-+{ }
-+
-+static inline void avc_cache_stats_add(int type, unsigned val)
-+{ }
-+#endif
-+
-+/*
-+ * AVC display support
-+ */
-+void avc_dump_av(u16 tclass, u32 av);
-+void avc_dump_query(u32 ssid, u32 tsid, u16 tclass);
-+void avc_dump_cache(char *tag);
-+
-+/*
-+ * AVC operations
-+ */
-+
-+void avc_init(void);
-+
-+int avc_lookup(u32 ssid, u32 tsid, u16 tclass,
-+               u32 requested, struct avc_entry_ref *aeref);
-+
-+int avc_insert(u32 ssid, u32 tsid, u16 tclass,
-+               struct avc_entry *ae, struct avc_entry_ref *out_aeref);
-+
-+void avc_audit(u32 ssid, u32 tsid,
-+               u16 tclass, u32 requested,
-+               struct av_decision *avd, int result, struct avc_audit_data *auditdata);
-+
-+int avc_has_perm_noaudit(u32 ssid, u32 tsid,
-+                         u16 tclass, u32 requested,
-+                         struct avc_entry_ref *aeref, struct av_decision *avd);
-+
-+int avc_has_perm(u32 ssid, u32 tsid,
-+                 u16 tclass, u32 requested,
-+                 struct avc_entry_ref *aeref, struct avc_audit_data *auditdata);
-+
-+#define AVC_CALLBACK_GRANT            1
-+#define AVC_CALLBACK_TRY_REVOKE               2
-+#define AVC_CALLBACK_REVOKE           4
-+#define AVC_CALLBACK_RESET            8
-+#define AVC_CALLBACK_AUDITALLOW_ENABLE        16
-+#define AVC_CALLBACK_AUDITALLOW_DISABLE       32
-+#define AVC_CALLBACK_AUDITDENY_ENABLE 64
-+#define AVC_CALLBACK_AUDITDENY_DISABLE        128
-+
-+int avc_add_callback(int (*callback)(u32 event, u32 ssid, u32 tsid,
-+                                     u16 tclass, u32 perms,
-+                                   u32 *out_retained),
-+                   u32 events, u32 ssid, u32 tsid,
-+                   u16 tclass, u32 perms);
-+
-+#endif /* _SELINUX_AVC_H_ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/avc_ss.h       2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,27 @@
-+/*
-+ * Access vector cache interface for the security server.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SELINUX_AVC_SS_H_
-+#define _SELINUX_AVC_SS_H_
-+
-+#include "flask.h"
-+
-+int avc_ss_grant(u32 ssid, u32 tsid, u16 tclass, u32 perms, u32 seqno);
-+
-+int avc_ss_try_revoke(u32 ssid, u32 tsid, u16 tclass, u32 perms, u32 seqno,
-+                    u32 *out_retained);
-+
-+int avc_ss_revoke(u32 ssid, u32 tsid, u16 tclass, u32 perms, u32 seqno);
-+
-+int avc_ss_reset(u32 seqno);
-+
-+int avc_ss_set_auditallow(u32 ssid, u32 tsid, u16 tclass, u32 perms,
-+                        u32 seqno, u32 enable);
-+
-+int avc_ss_set_auditdeny(u32 ssid, u32 tsid, u16 tclass, u32 perms,
-+                       u32 seqno, u32 enable);
-+
-+#endif /* _SELINUX_AVC_SS_H_ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/av_inherit.h   2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,35 @@
-+/* This file is automatically generated.  Do not edit. */
-+/* FLASK */
-+
-+struct av_inherit
-+{
-+    u16 tclass;
-+    char **common_pts;
-+    u32 common_base;
-+};
-+
-+static struct av_inherit av_inherit[] = {
-+   { SECCLASS_DIR, common_file_perm_to_string, 0x00020000UL },
-+   { SECCLASS_FILE, common_file_perm_to_string, 0x00020000UL },
-+   { SECCLASS_LNK_FILE, common_file_perm_to_string, 0x00020000UL },
-+   { SECCLASS_CHR_FILE, common_file_perm_to_string, 0x00020000UL },
-+   { SECCLASS_BLK_FILE, common_file_perm_to_string, 0x00020000UL },
-+   { SECCLASS_SOCK_FILE, common_file_perm_to_string, 0x00020000UL },
-+   { SECCLASS_FIFO_FILE, common_file_perm_to_string, 0x00020000UL },
-+   { SECCLASS_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_TCP_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_UDP_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_RAWIP_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_NETLINK_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_PACKET_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_KEY_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_UNIX_STREAM_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_UNIX_DGRAM_SOCKET, common_socket_perm_to_string, 0x00400000UL },
-+   { SECCLASS_IPC, common_ipc_perm_to_string, 0x00000200UL },
-+   { SECCLASS_SEM, common_ipc_perm_to_string, 0x00000200UL },
-+   { SECCLASS_MSGQ, common_ipc_perm_to_string, 0x00000200UL },
-+   { SECCLASS_SHM, common_ipc_perm_to_string, 0x00000200UL },
-+};
-+
-+
-+/* FLASK */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/av_permissions.h       2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,550 @@
-+/* This file is automatically generated.  Do not edit. */
-+/* FLASK */
-+
-+#define COMMON_FILE__IOCTL                               0x00000001UL
-+#define COMMON_FILE__READ                                0x00000002UL
-+#define COMMON_FILE__WRITE                               0x00000004UL
-+#define COMMON_FILE__CREATE                              0x00000008UL
-+#define COMMON_FILE__GETATTR                             0x00000010UL
-+#define COMMON_FILE__SETATTR                             0x00000020UL
-+#define COMMON_FILE__LOCK                                0x00000040UL
-+#define COMMON_FILE__RELABELFROM                         0x00000080UL
-+#define COMMON_FILE__RELABELTO                           0x00000100UL
-+#define COMMON_FILE__APPEND                              0x00000200UL
-+#define COMMON_FILE__UNLINK                              0x00000400UL
-+#define COMMON_FILE__LINK                                0x00000800UL
-+#define COMMON_FILE__RENAME                              0x00001000UL
-+#define COMMON_FILE__EXECUTE                             0x00002000UL
-+#define COMMON_FILE__SWAPON                              0x00004000UL
-+#define COMMON_FILE__QUOTAON                             0x00008000UL
-+#define COMMON_FILE__MOUNTON                             0x00010000UL
-+
-+#define COMMON_SOCKET__IOCTL                             0x00000001UL
-+#define COMMON_SOCKET__READ                              0x00000002UL
-+#define COMMON_SOCKET__WRITE                             0x00000004UL
-+#define COMMON_SOCKET__CREATE                            0x00000008UL
-+#define COMMON_SOCKET__GETATTR                           0x00000010UL
-+#define COMMON_SOCKET__SETATTR                           0x00000020UL
-+#define COMMON_SOCKET__LOCK                              0x00000040UL
-+#define COMMON_SOCKET__RELABELFROM                       0x00000080UL
-+#define COMMON_SOCKET__RELABELTO                         0x00000100UL
-+#define COMMON_SOCKET__APPEND                            0x00000200UL
-+#define COMMON_SOCKET__BIND                              0x00000400UL
-+#define COMMON_SOCKET__CONNECT                           0x00000800UL
-+#define COMMON_SOCKET__LISTEN                            0x00001000UL
-+#define COMMON_SOCKET__ACCEPT                            0x00002000UL
-+#define COMMON_SOCKET__GETOPT                            0x00004000UL
-+#define COMMON_SOCKET__SETOPT                            0x00008000UL
-+#define COMMON_SOCKET__SHUTDOWN                          0x00010000UL
-+#define COMMON_SOCKET__RECVFROM                          0x00020000UL
-+#define COMMON_SOCKET__SENDTO                            0x00040000UL
-+#define COMMON_SOCKET__RECV_MSG                          0x00080000UL
-+#define COMMON_SOCKET__SEND_MSG                          0x00100000UL
-+#define COMMON_SOCKET__NAME_BIND                         0x00200000UL
-+
-+#define COMMON_IPC__CREATE                               0x00000001UL
-+#define COMMON_IPC__DESTROY                              0x00000002UL
-+#define COMMON_IPC__GETATTR                              0x00000004UL
-+#define COMMON_IPC__SETATTR                              0x00000008UL
-+#define COMMON_IPC__READ                                 0x00000010UL
-+#define COMMON_IPC__WRITE                                0x00000020UL
-+#define COMMON_IPC__ASSOCIATE                            0x00000040UL
-+#define COMMON_IPC__UNIX_READ                            0x00000080UL
-+#define COMMON_IPC__UNIX_WRITE                           0x00000100UL
-+
-+#define FILESYSTEM__MOUNT                         0x00000001UL
-+#define FILESYSTEM__REMOUNT                       0x00000002UL
-+#define FILESYSTEM__UNMOUNT                       0x00000004UL
-+#define FILESYSTEM__GETATTR                       0x00000008UL
-+#define FILESYSTEM__RELABELFROM                   0x00000010UL
-+#define FILESYSTEM__RELABELTO                     0x00000020UL
-+#define FILESYSTEM__TRANSITION                    0x00000040UL
-+#define FILESYSTEM__ASSOCIATE                     0x00000080UL
-+#define FILESYSTEM__QUOTAMOD                      0x00000100UL
-+#define FILESYSTEM__QUOTAGET                      0x00000200UL
-+
-+#define DIR__EXECUTE                              0x00002000UL
-+#define DIR__UNLINK                               0x00000400UL
-+#define DIR__SETATTR                              0x00000020UL
-+#define DIR__QUOTAON                              0x00008000UL
-+#define DIR__RELABELFROM                          0x00000080UL
-+#define DIR__LINK                                 0x00000800UL
-+#define DIR__WRITE                                0x00000004UL
-+#define DIR__IOCTL                                0x00000001UL
-+#define DIR__RELABELTO                            0x00000100UL
-+#define DIR__READ                                 0x00000002UL
-+#define DIR__RENAME                               0x00001000UL
-+#define DIR__APPEND                               0x00000200UL
-+#define DIR__LOCK                                 0x00000040UL
-+#define DIR__SWAPON                               0x00004000UL
-+#define DIR__GETATTR                              0x00000010UL
-+#define DIR__MOUNTON                              0x00010000UL
-+#define DIR__CREATE                               0x00000008UL
-+
-+#define DIR__ADD_NAME                             0x00020000UL
-+#define DIR__REMOVE_NAME                          0x00040000UL
-+#define DIR__REPARENT                             0x00080000UL
-+#define DIR__SEARCH                               0x00100000UL
-+#define DIR__RMDIR                                0x00200000UL
-+
-+#define FILE__EXECUTE                             0x00002000UL
-+#define FILE__UNLINK                              0x00000400UL
-+#define FILE__SETATTR                             0x00000020UL
-+#define FILE__QUOTAON                             0x00008000UL
-+#define FILE__RELABELFROM                         0x00000080UL
-+#define FILE__LINK                                0x00000800UL
-+#define FILE__WRITE                               0x00000004UL
-+#define FILE__IOCTL                               0x00000001UL
-+#define FILE__RELABELTO                           0x00000100UL
-+#define FILE__READ                                0x00000002UL
-+#define FILE__RENAME                              0x00001000UL
-+#define FILE__APPEND                              0x00000200UL
-+#define FILE__LOCK                                0x00000040UL
-+#define FILE__SWAPON                              0x00004000UL
-+#define FILE__GETATTR                             0x00000010UL
-+#define FILE__MOUNTON                             0x00010000UL
-+#define FILE__CREATE                              0x00000008UL
-+
-+#define FILE__EXECUTE_NO_TRANS                    0x00020000UL
-+#define FILE__ENTRYPOINT                          0x00040000UL
-+
-+#define LNK_FILE__EXECUTE                         0x00002000UL
-+#define LNK_FILE__UNLINK                          0x00000400UL
-+#define LNK_FILE__SETATTR                         0x00000020UL
-+#define LNK_FILE__QUOTAON                         0x00008000UL
-+#define LNK_FILE__RELABELFROM                     0x00000080UL
-+#define LNK_FILE__LINK                            0x00000800UL
-+#define LNK_FILE__WRITE                           0x00000004UL
-+#define LNK_FILE__IOCTL                           0x00000001UL
-+#define LNK_FILE__RELABELTO                       0x00000100UL
-+#define LNK_FILE__READ                            0x00000002UL
-+#define LNK_FILE__RENAME                          0x00001000UL
-+#define LNK_FILE__APPEND                          0x00000200UL
-+#define LNK_FILE__LOCK                            0x00000040UL
-+#define LNK_FILE__SWAPON                          0x00004000UL
-+#define LNK_FILE__GETATTR                         0x00000010UL
-+#define LNK_FILE__MOUNTON                         0x00010000UL
-+#define LNK_FILE__CREATE                          0x00000008UL
-+
-+#define CHR_FILE__EXECUTE                         0x00002000UL
-+#define CHR_FILE__UNLINK                          0x00000400UL
-+#define CHR_FILE__SETATTR                         0x00000020UL
-+#define CHR_FILE__QUOTAON                         0x00008000UL
-+#define CHR_FILE__RELABELFROM                     0x00000080UL
-+#define CHR_FILE__LINK                            0x00000800UL
-+#define CHR_FILE__WRITE                           0x00000004UL
-+#define CHR_FILE__IOCTL                           0x00000001UL
-+#define CHR_FILE__RELABELTO                       0x00000100UL
-+#define CHR_FILE__READ                            0x00000002UL
-+#define CHR_FILE__RENAME                          0x00001000UL
-+#define CHR_FILE__APPEND                          0x00000200UL
-+#define CHR_FILE__LOCK                            0x00000040UL
-+#define CHR_FILE__SWAPON                          0x00004000UL
-+#define CHR_FILE__GETATTR                         0x00000010UL
-+#define CHR_FILE__MOUNTON                         0x00010000UL
-+#define CHR_FILE__CREATE                          0x00000008UL
-+
-+#define BLK_FILE__EXECUTE                         0x00002000UL
-+#define BLK_FILE__UNLINK                          0x00000400UL
-+#define BLK_FILE__SETATTR                         0x00000020UL
-+#define BLK_FILE__QUOTAON                         0x00008000UL
-+#define BLK_FILE__RELABELFROM                     0x00000080UL
-+#define BLK_FILE__LINK                            0x00000800UL
-+#define BLK_FILE__WRITE                           0x00000004UL
-+#define BLK_FILE__IOCTL                           0x00000001UL
-+#define BLK_FILE__RELABELTO                       0x00000100UL
-+#define BLK_FILE__READ                            0x00000002UL
-+#define BLK_FILE__RENAME                          0x00001000UL
-+#define BLK_FILE__APPEND                          0x00000200UL
-+#define BLK_FILE__LOCK                            0x00000040UL
-+#define BLK_FILE__SWAPON                          0x00004000UL
-+#define BLK_FILE__GETATTR                         0x00000010UL
-+#define BLK_FILE__MOUNTON                         0x00010000UL
-+#define BLK_FILE__CREATE                          0x00000008UL
-+
-+#define SOCK_FILE__EXECUTE                        0x00002000UL
-+#define SOCK_FILE__UNLINK                         0x00000400UL
-+#define SOCK_FILE__SETATTR                        0x00000020UL
-+#define SOCK_FILE__QUOTAON                        0x00008000UL
-+#define SOCK_FILE__RELABELFROM                    0x00000080UL
-+#define SOCK_FILE__LINK                           0x00000800UL
-+#define SOCK_FILE__WRITE                          0x00000004UL
-+#define SOCK_FILE__IOCTL                          0x00000001UL
-+#define SOCK_FILE__RELABELTO                      0x00000100UL
-+#define SOCK_FILE__READ                           0x00000002UL
-+#define SOCK_FILE__RENAME                         0x00001000UL
-+#define SOCK_FILE__APPEND                         0x00000200UL
-+#define SOCK_FILE__LOCK                           0x00000040UL
-+#define SOCK_FILE__SWAPON                         0x00004000UL
-+#define SOCK_FILE__GETATTR                        0x00000010UL
-+#define SOCK_FILE__MOUNTON                        0x00010000UL
-+#define SOCK_FILE__CREATE                         0x00000008UL
-+
-+#define FIFO_FILE__EXECUTE                        0x00002000UL
-+#define FIFO_FILE__UNLINK                         0x00000400UL
-+#define FIFO_FILE__SETATTR                        0x00000020UL
-+#define FIFO_FILE__QUOTAON                        0x00008000UL
-+#define FIFO_FILE__RELABELFROM                    0x00000080UL
-+#define FIFO_FILE__LINK                           0x00000800UL
-+#define FIFO_FILE__WRITE                          0x00000004UL
-+#define FIFO_FILE__IOCTL                          0x00000001UL
-+#define FIFO_FILE__RELABELTO                      0x00000100UL
-+#define FIFO_FILE__READ                           0x00000002UL
-+#define FIFO_FILE__RENAME                         0x00001000UL
-+#define FIFO_FILE__APPEND                         0x00000200UL
-+#define FIFO_FILE__LOCK                           0x00000040UL
-+#define FIFO_FILE__SWAPON                         0x00004000UL
-+#define FIFO_FILE__GETATTR                        0x00000010UL
-+#define FIFO_FILE__MOUNTON                        0x00010000UL
-+#define FIFO_FILE__CREATE                         0x00000008UL
-+
-+#define FD__USE                                   0x00000001UL
-+
-+#define SOCKET__RELABELTO                         0x00000100UL
-+#define SOCKET__RECV_MSG                          0x00080000UL
-+#define SOCKET__RELABELFROM                       0x00000080UL
-+#define SOCKET__SETOPT                            0x00008000UL
-+#define SOCKET__APPEND                            0x00000200UL
-+#define SOCKET__SETATTR                           0x00000020UL
-+#define SOCKET__SENDTO                            0x00040000UL
-+#define SOCKET__GETOPT                            0x00004000UL
-+#define SOCKET__READ                              0x00000002UL
-+#define SOCKET__SHUTDOWN                          0x00010000UL
-+#define SOCKET__LISTEN                            0x00001000UL
-+#define SOCKET__BIND                              0x00000400UL
-+#define SOCKET__WRITE                             0x00000004UL
-+#define SOCKET__ACCEPT                            0x00002000UL
-+#define SOCKET__CONNECT                           0x00000800UL
-+#define SOCKET__LOCK                              0x00000040UL
-+#define SOCKET__IOCTL                             0x00000001UL
-+#define SOCKET__CREATE                            0x00000008UL
-+#define SOCKET__NAME_BIND                         0x00200000UL
-+#define SOCKET__SEND_MSG                          0x00100000UL
-+#define SOCKET__RECVFROM                          0x00020000UL
-+#define SOCKET__GETATTR                           0x00000010UL
-+
-+#define TCP_SOCKET__RELABELTO                     0x00000100UL
-+#define TCP_SOCKET__RECV_MSG                      0x00080000UL
-+#define TCP_SOCKET__RELABELFROM                   0x00000080UL
-+#define TCP_SOCKET__SETOPT                        0x00008000UL
-+#define TCP_SOCKET__APPEND                        0x00000200UL
-+#define TCP_SOCKET__SETATTR                       0x00000020UL
-+#define TCP_SOCKET__SENDTO                        0x00040000UL
-+#define TCP_SOCKET__GETOPT                        0x00004000UL
-+#define TCP_SOCKET__READ                          0x00000002UL
-+#define TCP_SOCKET__SHUTDOWN                      0x00010000UL
-+#define TCP_SOCKET__LISTEN                        0x00001000UL
-+#define TCP_SOCKET__BIND                          0x00000400UL
-+#define TCP_SOCKET__WRITE                         0x00000004UL
-+#define TCP_SOCKET__ACCEPT                        0x00002000UL
-+#define TCP_SOCKET__CONNECT                       0x00000800UL
-+#define TCP_SOCKET__LOCK                          0x00000040UL
-+#define TCP_SOCKET__IOCTL                         0x00000001UL
-+#define TCP_SOCKET__CREATE                        0x00000008UL
-+#define TCP_SOCKET__NAME_BIND                     0x00200000UL
-+#define TCP_SOCKET__SEND_MSG                      0x00100000UL
-+#define TCP_SOCKET__RECVFROM                      0x00020000UL
-+#define TCP_SOCKET__GETATTR                       0x00000010UL
-+
-+#define TCP_SOCKET__CONNECTTO                     0x00400000UL
-+#define TCP_SOCKET__NEWCONN                       0x00800000UL
-+#define TCP_SOCKET__ACCEPTFROM                    0x01000000UL
-+
-+#define UDP_SOCKET__RELABELTO                     0x00000100UL
-+#define UDP_SOCKET__RECV_MSG                      0x00080000UL
-+#define UDP_SOCKET__RELABELFROM                   0x00000080UL
-+#define UDP_SOCKET__SETOPT                        0x00008000UL
-+#define UDP_SOCKET__APPEND                        0x00000200UL
-+#define UDP_SOCKET__SETATTR                       0x00000020UL
-+#define UDP_SOCKET__SENDTO                        0x00040000UL
-+#define UDP_SOCKET__GETOPT                        0x00004000UL
-+#define UDP_SOCKET__READ                          0x00000002UL
-+#define UDP_SOCKET__SHUTDOWN                      0x00010000UL
-+#define UDP_SOCKET__LISTEN                        0x00001000UL
-+#define UDP_SOCKET__BIND                          0x00000400UL
-+#define UDP_SOCKET__WRITE                         0x00000004UL
-+#define UDP_SOCKET__ACCEPT                        0x00002000UL
-+#define UDP_SOCKET__CONNECT                       0x00000800UL
-+#define UDP_SOCKET__LOCK                          0x00000040UL
-+#define UDP_SOCKET__IOCTL                         0x00000001UL
-+#define UDP_SOCKET__CREATE                        0x00000008UL
-+#define UDP_SOCKET__NAME_BIND                     0x00200000UL
-+#define UDP_SOCKET__SEND_MSG                      0x00100000UL
-+#define UDP_SOCKET__RECVFROM                      0x00020000UL
-+#define UDP_SOCKET__GETATTR                       0x00000010UL
-+
-+#define RAWIP_SOCKET__RELABELTO                   0x00000100UL
-+#define RAWIP_SOCKET__RECV_MSG                    0x00080000UL
-+#define RAWIP_SOCKET__RELABELFROM                 0x00000080UL
-+#define RAWIP_SOCKET__SETOPT                      0x00008000UL
-+#define RAWIP_SOCKET__APPEND                      0x00000200UL
-+#define RAWIP_SOCKET__SETATTR                     0x00000020UL
-+#define RAWIP_SOCKET__SENDTO                      0x00040000UL
-+#define RAWIP_SOCKET__GETOPT                      0x00004000UL
-+#define RAWIP_SOCKET__READ                        0x00000002UL
-+#define RAWIP_SOCKET__SHUTDOWN                    0x00010000UL
-+#define RAWIP_SOCKET__LISTEN                      0x00001000UL
-+#define RAWIP_SOCKET__BIND                        0x00000400UL
-+#define RAWIP_SOCKET__WRITE                       0x00000004UL
-+#define RAWIP_SOCKET__ACCEPT                      0x00002000UL
-+#define RAWIP_SOCKET__CONNECT                     0x00000800UL
-+#define RAWIP_SOCKET__LOCK                        0x00000040UL
-+#define RAWIP_SOCKET__IOCTL                       0x00000001UL
-+#define RAWIP_SOCKET__CREATE                      0x00000008UL
-+#define RAWIP_SOCKET__NAME_BIND                   0x00200000UL
-+#define RAWIP_SOCKET__SEND_MSG                    0x00100000UL
-+#define RAWIP_SOCKET__RECVFROM                    0x00020000UL
-+#define RAWIP_SOCKET__GETATTR                     0x00000010UL
-+
-+#define NODE__TCP_RECV                            0x00000001UL
-+#define NODE__TCP_SEND                            0x00000002UL
-+#define NODE__UDP_RECV                            0x00000004UL
-+#define NODE__UDP_SEND                            0x00000008UL
-+#define NODE__RAWIP_RECV                          0x00000010UL
-+#define NODE__RAWIP_SEND                          0x00000020UL
-+#define NODE__ENFORCE_DEST                        0x00000040UL
-+
-+#define NETIF__TCP_RECV                           0x00000001UL
-+#define NETIF__TCP_SEND                           0x00000002UL
-+#define NETIF__UDP_RECV                           0x00000004UL
-+#define NETIF__UDP_SEND                           0x00000008UL
-+#define NETIF__RAWIP_RECV                         0x00000010UL
-+#define NETIF__RAWIP_SEND                         0x00000020UL
-+
-+#define NETLINK_SOCKET__RELABELTO                 0x00000100UL
-+#define NETLINK_SOCKET__RECV_MSG                  0x00080000UL
-+#define NETLINK_SOCKET__RELABELFROM               0x00000080UL
-+#define NETLINK_SOCKET__SETOPT                    0x00008000UL
-+#define NETLINK_SOCKET__APPEND                    0x00000200UL
-+#define NETLINK_SOCKET__SETATTR                   0x00000020UL
-+#define NETLINK_SOCKET__SENDTO                    0x00040000UL
-+#define NETLINK_SOCKET__GETOPT                    0x00004000UL
-+#define NETLINK_SOCKET__READ                      0x00000002UL
-+#define NETLINK_SOCKET__SHUTDOWN                  0x00010000UL
-+#define NETLINK_SOCKET__LISTEN                    0x00001000UL
-+#define NETLINK_SOCKET__BIND                      0x00000400UL
-+#define NETLINK_SOCKET__WRITE                     0x00000004UL
-+#define NETLINK_SOCKET__ACCEPT                    0x00002000UL
-+#define NETLINK_SOCKET__CONNECT                   0x00000800UL
-+#define NETLINK_SOCKET__LOCK                      0x00000040UL
-+#define NETLINK_SOCKET__IOCTL                     0x00000001UL
-+#define NETLINK_SOCKET__CREATE                    0x00000008UL
-+#define NETLINK_SOCKET__NAME_BIND                 0x00200000UL
-+#define NETLINK_SOCKET__SEND_MSG                  0x00100000UL
-+#define NETLINK_SOCKET__RECVFROM                  0x00020000UL
-+#define NETLINK_SOCKET__GETATTR                   0x00000010UL
-+
-+#define PACKET_SOCKET__RELABELTO                  0x00000100UL
-+#define PACKET_SOCKET__RECV_MSG                   0x00080000UL
-+#define PACKET_SOCKET__RELABELFROM                0x00000080UL
-+#define PACKET_SOCKET__SETOPT                     0x00008000UL
-+#define PACKET_SOCKET__APPEND                     0x00000200UL
-+#define PACKET_SOCKET__SETATTR                    0x00000020UL
-+#define PACKET_SOCKET__SENDTO                     0x00040000UL
-+#define PACKET_SOCKET__GETOPT                     0x00004000UL
-+#define PACKET_SOCKET__READ                       0x00000002UL
-+#define PACKET_SOCKET__SHUTDOWN                   0x00010000UL
-+#define PACKET_SOCKET__LISTEN                     0x00001000UL
-+#define PACKET_SOCKET__BIND                       0x00000400UL
-+#define PACKET_SOCKET__WRITE                      0x00000004UL
-+#define PACKET_SOCKET__ACCEPT                     0x00002000UL
-+#define PACKET_SOCKET__CONNECT                    0x00000800UL
-+#define PACKET_SOCKET__LOCK                       0x00000040UL
-+#define PACKET_SOCKET__IOCTL                      0x00000001UL
-+#define PACKET_SOCKET__CREATE                     0x00000008UL
-+#define PACKET_SOCKET__NAME_BIND                  0x00200000UL
-+#define PACKET_SOCKET__SEND_MSG                   0x00100000UL
-+#define PACKET_SOCKET__RECVFROM                   0x00020000UL
-+#define PACKET_SOCKET__GETATTR                    0x00000010UL
-+
-+#define KEY_SOCKET__RELABELTO                     0x00000100UL
-+#define KEY_SOCKET__RECV_MSG                      0x00080000UL
-+#define KEY_SOCKET__RELABELFROM                   0x00000080UL
-+#define KEY_SOCKET__SETOPT                        0x00008000UL
-+#define KEY_SOCKET__APPEND                        0x00000200UL
-+#define KEY_SOCKET__SETATTR                       0x00000020UL
-+#define KEY_SOCKET__SENDTO                        0x00040000UL
-+#define KEY_SOCKET__GETOPT                        0x00004000UL
-+#define KEY_SOCKET__READ                          0x00000002UL
-+#define KEY_SOCKET__SHUTDOWN                      0x00010000UL
-+#define KEY_SOCKET__LISTEN                        0x00001000UL
-+#define KEY_SOCKET__BIND                          0x00000400UL
-+#define KEY_SOCKET__WRITE                         0x00000004UL
-+#define KEY_SOCKET__ACCEPT                        0x00002000UL
-+#define KEY_SOCKET__CONNECT                       0x00000800UL
-+#define KEY_SOCKET__LOCK                          0x00000040UL
-+#define KEY_SOCKET__IOCTL                         0x00000001UL
-+#define KEY_SOCKET__CREATE                        0x00000008UL
-+#define KEY_SOCKET__NAME_BIND                     0x00200000UL
-+#define KEY_SOCKET__SEND_MSG                      0x00100000UL
-+#define KEY_SOCKET__RECVFROM                      0x00020000UL
-+#define KEY_SOCKET__GETATTR                       0x00000010UL
-+
-+#define UNIX_STREAM_SOCKET__RELABELTO             0x00000100UL
-+#define UNIX_STREAM_SOCKET__RECV_MSG              0x00080000UL
-+#define UNIX_STREAM_SOCKET__RELABELFROM           0x00000080UL
-+#define UNIX_STREAM_SOCKET__SETOPT                0x00008000UL
-+#define UNIX_STREAM_SOCKET__APPEND                0x00000200UL
-+#define UNIX_STREAM_SOCKET__SETATTR               0x00000020UL
-+#define UNIX_STREAM_SOCKET__SENDTO                0x00040000UL
-+#define UNIX_STREAM_SOCKET__GETOPT                0x00004000UL
-+#define UNIX_STREAM_SOCKET__READ                  0x00000002UL
-+#define UNIX_STREAM_SOCKET__SHUTDOWN              0x00010000UL
-+#define UNIX_STREAM_SOCKET__LISTEN                0x00001000UL
-+#define UNIX_STREAM_SOCKET__BIND                  0x00000400UL
-+#define UNIX_STREAM_SOCKET__WRITE                 0x00000004UL
-+#define UNIX_STREAM_SOCKET__ACCEPT                0x00002000UL
-+#define UNIX_STREAM_SOCKET__CONNECT               0x00000800UL
-+#define UNIX_STREAM_SOCKET__LOCK                  0x00000040UL
-+#define UNIX_STREAM_SOCKET__IOCTL                 0x00000001UL
-+#define UNIX_STREAM_SOCKET__CREATE                0x00000008UL
-+#define UNIX_STREAM_SOCKET__NAME_BIND             0x00200000UL
-+#define UNIX_STREAM_SOCKET__SEND_MSG              0x00100000UL
-+#define UNIX_STREAM_SOCKET__RECVFROM              0x00020000UL
-+#define UNIX_STREAM_SOCKET__GETATTR               0x00000010UL
-+
-+#define UNIX_STREAM_SOCKET__CONNECTTO             0x00400000UL
-+#define UNIX_STREAM_SOCKET__NEWCONN               0x00800000UL
-+#define UNIX_STREAM_SOCKET__ACCEPTFROM            0x01000000UL
-+
-+#define UNIX_DGRAM_SOCKET__RELABELTO              0x00000100UL
-+#define UNIX_DGRAM_SOCKET__RECV_MSG               0x00080000UL
-+#define UNIX_DGRAM_SOCKET__RELABELFROM            0x00000080UL
-+#define UNIX_DGRAM_SOCKET__SETOPT                 0x00008000UL
-+#define UNIX_DGRAM_SOCKET__APPEND                 0x00000200UL
-+#define UNIX_DGRAM_SOCKET__SETATTR                0x00000020UL
-+#define UNIX_DGRAM_SOCKET__SENDTO                 0x00040000UL
-+#define UNIX_DGRAM_SOCKET__GETOPT                 0x00004000UL
-+#define UNIX_DGRAM_SOCKET__READ                   0x00000002UL
-+#define UNIX_DGRAM_SOCKET__SHUTDOWN               0x00010000UL
-+#define UNIX_DGRAM_SOCKET__LISTEN                 0x00001000UL
-+#define UNIX_DGRAM_SOCKET__BIND                   0x00000400UL
-+#define UNIX_DGRAM_SOCKET__WRITE                  0x00000004UL
-+#define UNIX_DGRAM_SOCKET__ACCEPT                 0x00002000UL
-+#define UNIX_DGRAM_SOCKET__CONNECT                0x00000800UL
-+#define UNIX_DGRAM_SOCKET__LOCK                   0x00000040UL
-+#define UNIX_DGRAM_SOCKET__IOCTL                  0x00000001UL
-+#define UNIX_DGRAM_SOCKET__CREATE                 0x00000008UL
-+#define UNIX_DGRAM_SOCKET__NAME_BIND              0x00200000UL
-+#define UNIX_DGRAM_SOCKET__SEND_MSG               0x00100000UL
-+#define UNIX_DGRAM_SOCKET__RECVFROM               0x00020000UL
-+#define UNIX_DGRAM_SOCKET__GETATTR                0x00000010UL
-+
-+#define PROCESS__FORK                             0x00000001UL
-+#define PROCESS__TRANSITION                       0x00000002UL
-+#define PROCESS__SIGCHLD                          0x00000004UL
-+#define PROCESS__SIGKILL                          0x00000008UL
-+#define PROCESS__SIGSTOP                          0x00000010UL
-+#define PROCESS__SIGNULL                          0x00000020UL
-+#define PROCESS__SIGNAL                           0x00000040UL
-+#define PROCESS__PTRACE                           0x00000080UL
-+#define PROCESS__GETSCHED                         0x00000100UL
-+#define PROCESS__SETSCHED                         0x00000200UL
-+#define PROCESS__GETSESSION                       0x00000400UL
-+#define PROCESS__GETPGID                          0x00000800UL
-+#define PROCESS__SETPGID                          0x00001000UL
-+#define PROCESS__GETCAP                           0x00002000UL
-+#define PROCESS__SETCAP                           0x00004000UL
-+#define PROCESS__SHARE                            0x00008000UL
-+#define PROCESS__GETATTR                          0x00010000UL
-+#define PROCESS__SETEXEC                          0x00020000UL
-+#define PROCESS__SETFSCREATE                      0x00040000UL
-+#define PROCESS__NOATSECURE                       0x00080000UL
-+
-+#define IPC__SETATTR                              0x00000008UL
-+#define IPC__READ                                 0x00000010UL
-+#define IPC__ASSOCIATE                            0x00000040UL
-+#define IPC__DESTROY                              0x00000002UL
-+#define IPC__UNIX_WRITE                           0x00000100UL
-+#define IPC__CREATE                               0x00000001UL
-+#define IPC__UNIX_READ                            0x00000080UL
-+#define IPC__GETATTR                              0x00000004UL
-+#define IPC__WRITE                                0x00000020UL
-+
-+#define SEM__SETATTR                              0x00000008UL
-+#define SEM__READ                                 0x00000010UL
-+#define SEM__ASSOCIATE                            0x00000040UL
-+#define SEM__DESTROY                              0x00000002UL
-+#define SEM__UNIX_WRITE                           0x00000100UL
-+#define SEM__CREATE                               0x00000001UL
-+#define SEM__UNIX_READ                            0x00000080UL
-+#define SEM__GETATTR                              0x00000004UL
-+#define SEM__WRITE                                0x00000020UL
-+
-+#define MSGQ__SETATTR                             0x00000008UL
-+#define MSGQ__READ                                0x00000010UL
-+#define MSGQ__ASSOCIATE                           0x00000040UL
-+#define MSGQ__DESTROY                             0x00000002UL
-+#define MSGQ__UNIX_WRITE                          0x00000100UL
-+#define MSGQ__CREATE                              0x00000001UL
-+#define MSGQ__UNIX_READ                           0x00000080UL
-+#define MSGQ__GETATTR                             0x00000004UL
-+#define MSGQ__WRITE                               0x00000020UL
-+
-+#define MSGQ__ENQUEUE                             0x00000200UL
-+
-+#define MSG__SEND                                 0x00000001UL
-+#define MSG__RECEIVE                              0x00000002UL
-+
-+#define SHM__SETATTR                              0x00000008UL
-+#define SHM__READ                                 0x00000010UL
-+#define SHM__ASSOCIATE                            0x00000040UL
-+#define SHM__DESTROY                              0x00000002UL
-+#define SHM__UNIX_WRITE                           0x00000100UL
-+#define SHM__CREATE                               0x00000001UL
-+#define SHM__UNIX_READ                            0x00000080UL
-+#define SHM__GETATTR                              0x00000004UL
-+#define SHM__WRITE                                0x00000020UL
-+
-+#define SHM__LOCK                                 0x00000200UL
-+
-+#define SECURITY__COMPUTE_AV                      0x00000001UL
-+#define SECURITY__COMPUTE_CREATE                  0x00000002UL
-+#define SECURITY__COMPUTE_MEMBER                  0x00000004UL
-+#define SECURITY__CHECK_CONTEXT                   0x00000008UL
-+#define SECURITY__LOAD_POLICY                     0x00000010UL
-+#define SECURITY__COMPUTE_RELABEL                 0x00000020UL
-+#define SECURITY__COMPUTE_USER                    0x00000040UL
-+#define SECURITY__SETENFORCE                      0x00000080UL
-+
-+#define SYSTEM__IPC_INFO                          0x00000001UL
-+#define SYSTEM__SYSLOG_READ                       0x00000002UL
-+#define SYSTEM__SYSLOG_MOD                        0x00000004UL
-+#define SYSTEM__SYSLOG_CONSOLE                    0x00000008UL
-+
-+#define CAPABILITY__CHOWN                         0x00000001UL
-+#define CAPABILITY__DAC_OVERRIDE                  0x00000002UL
-+#define CAPABILITY__DAC_READ_SEARCH               0x00000004UL
-+#define CAPABILITY__FOWNER                        0x00000008UL
-+#define CAPABILITY__FSETID                        0x00000010UL
-+#define CAPABILITY__KILL                          0x00000020UL
-+#define CAPABILITY__SETGID                        0x00000040UL
-+#define CAPABILITY__SETUID                        0x00000080UL
-+#define CAPABILITY__SETPCAP                       0x00000100UL
-+#define CAPABILITY__LINUX_IMMUTABLE               0x00000200UL
-+#define CAPABILITY__NET_BIND_SERVICE              0x00000400UL
-+#define CAPABILITY__NET_BROADCAST                 0x00000800UL
-+#define CAPABILITY__NET_ADMIN                     0x00001000UL
-+#define CAPABILITY__NET_RAW                       0x00002000UL
-+#define CAPABILITY__IPC_LOCK                      0x00004000UL
-+#define CAPABILITY__IPC_OWNER                     0x00008000UL
-+#define CAPABILITY__SYS_MODULE                    0x00010000UL
-+#define CAPABILITY__SYS_RAWIO                     0x00020000UL
-+#define CAPABILITY__SYS_CHROOT                    0x00040000UL
-+#define CAPABILITY__SYS_PTRACE                    0x00080000UL
-+#define CAPABILITY__SYS_PACCT                     0x00100000UL
-+#define CAPABILITY__SYS_ADMIN                     0x00200000UL
-+#define CAPABILITY__SYS_BOOT                      0x00400000UL
-+#define CAPABILITY__SYS_NICE                      0x00800000UL
-+#define CAPABILITY__SYS_RESOURCE                  0x01000000UL
-+#define CAPABILITY__SYS_TIME                      0x02000000UL
-+#define CAPABILITY__SYS_TTY_CONFIG                0x04000000UL
-+#define CAPABILITY__MKNOD                         0x08000000UL
-+#define CAPABILITY__LEASE                         0x10000000UL
-+
-+#define PASSWD__PASSWD                            0x00000001UL
-+#define PASSWD__CHFN                              0x00000002UL
-+#define PASSWD__CHSH                              0x00000004UL
-+
-+
-+/* FLASK */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/av_perm_to_string.h    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,120 @@
-+/* This file is automatically generated.  Do not edit. */
-+/* FLASK */
-+
-+struct av_perm_to_string
-+{
-+    u16 tclass;
-+    u32 value;
-+    char *name;
-+};
-+
-+static struct av_perm_to_string av_perm_to_string[] = {
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__MOUNT, "mount" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__REMOUNT, "remount" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__UNMOUNT, "unmount" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__GETATTR, "getattr" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__RELABELFROM, "relabelfrom" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__RELABELTO, "relabelto" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__TRANSITION, "transition" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__ASSOCIATE, "associate" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__QUOTAMOD, "quotamod" },
-+   { SECCLASS_FILESYSTEM, FILESYSTEM__QUOTAGET, "quotaget" },
-+   { SECCLASS_DIR, DIR__ADD_NAME, "add_name" },
-+   { SECCLASS_DIR, DIR__REMOVE_NAME, "remove_name" },
-+   { SECCLASS_DIR, DIR__REPARENT, "reparent" },
-+   { SECCLASS_DIR, DIR__SEARCH, "search" },
-+   { SECCLASS_DIR, DIR__RMDIR, "rmdir" },
-+   { SECCLASS_FILE, FILE__EXECUTE_NO_TRANS, "execute_no_trans" },
-+   { SECCLASS_FILE, FILE__ENTRYPOINT, "entrypoint" },
-+   { SECCLASS_FD, FD__USE, "use" },
-+   { SECCLASS_TCP_SOCKET, TCP_SOCKET__CONNECTTO, "connectto" },
-+   { SECCLASS_TCP_SOCKET, TCP_SOCKET__NEWCONN, "newconn" },
-+   { SECCLASS_TCP_SOCKET, TCP_SOCKET__ACCEPTFROM, "acceptfrom" },
-+   { SECCLASS_NODE, NODE__TCP_RECV, "tcp_recv" },
-+   { SECCLASS_NODE, NODE__TCP_SEND, "tcp_send" },
-+   { SECCLASS_NODE, NODE__UDP_RECV, "udp_recv" },
-+   { SECCLASS_NODE, NODE__UDP_SEND, "udp_send" },
-+   { SECCLASS_NODE, NODE__RAWIP_RECV, "rawip_recv" },
-+   { SECCLASS_NODE, NODE__RAWIP_SEND, "rawip_send" },
-+   { SECCLASS_NODE, NODE__ENFORCE_DEST, "enforce_dest" },
-+   { SECCLASS_NETIF, NETIF__TCP_RECV, "tcp_recv" },
-+   { SECCLASS_NETIF, NETIF__TCP_SEND, "tcp_send" },
-+   { SECCLASS_NETIF, NETIF__UDP_RECV, "udp_recv" },
-+   { SECCLASS_NETIF, NETIF__UDP_SEND, "udp_send" },
-+   { SECCLASS_NETIF, NETIF__RAWIP_RECV, "rawip_recv" },
-+   { SECCLASS_NETIF, NETIF__RAWIP_SEND, "rawip_send" },
-+   { SECCLASS_UNIX_STREAM_SOCKET, UNIX_STREAM_SOCKET__CONNECTTO, "connectto" },
-+   { SECCLASS_UNIX_STREAM_SOCKET, UNIX_STREAM_SOCKET__NEWCONN, "newconn" },
-+   { SECCLASS_UNIX_STREAM_SOCKET, UNIX_STREAM_SOCKET__ACCEPTFROM, "acceptfrom" },
-+   { SECCLASS_PROCESS, PROCESS__FORK, "fork" },
-+   { SECCLASS_PROCESS, PROCESS__TRANSITION, "transition" },
-+   { SECCLASS_PROCESS, PROCESS__SIGCHLD, "sigchld" },
-+   { SECCLASS_PROCESS, PROCESS__SIGKILL, "sigkill" },
-+   { SECCLASS_PROCESS, PROCESS__SIGSTOP, "sigstop" },
-+   { SECCLASS_PROCESS, PROCESS__SIGNULL, "signull" },
-+   { SECCLASS_PROCESS, PROCESS__SIGNAL, "signal" },
-+   { SECCLASS_PROCESS, PROCESS__PTRACE, "ptrace" },
-+   { SECCLASS_PROCESS, PROCESS__GETSCHED, "getsched" },
-+   { SECCLASS_PROCESS, PROCESS__SETSCHED, "setsched" },
-+   { SECCLASS_PROCESS, PROCESS__GETSESSION, "getsession" },
-+   { SECCLASS_PROCESS, PROCESS__GETPGID, "getpgid" },
-+   { SECCLASS_PROCESS, PROCESS__SETPGID, "setpgid" },
-+   { SECCLASS_PROCESS, PROCESS__GETCAP, "getcap" },
-+   { SECCLASS_PROCESS, PROCESS__SETCAP, "setcap" },
-+   { SECCLASS_PROCESS, PROCESS__SHARE, "share" },
-+   { SECCLASS_PROCESS, PROCESS__GETATTR, "getattr" },
-+   { SECCLASS_PROCESS, PROCESS__SETEXEC, "setexec" },
-+   { SECCLASS_PROCESS, PROCESS__SETFSCREATE, "setfscreate" },
-+   { SECCLASS_PROCESS, PROCESS__NOATSECURE, "noatsecure" },
-+   { SECCLASS_MSGQ, MSGQ__ENQUEUE, "enqueue" },
-+   { SECCLASS_MSG, MSG__SEND, "send" },
-+   { SECCLASS_MSG, MSG__RECEIVE, "receive" },
-+   { SECCLASS_SHM, SHM__LOCK, "lock" },
-+   { SECCLASS_SECURITY, SECURITY__COMPUTE_AV, "compute_av" },
-+   { SECCLASS_SECURITY, SECURITY__COMPUTE_CREATE, "compute_create" },
-+   { SECCLASS_SECURITY, SECURITY__COMPUTE_MEMBER, "compute_member" },
-+   { SECCLASS_SECURITY, SECURITY__CHECK_CONTEXT, "check_context" },
-+   { SECCLASS_SECURITY, SECURITY__LOAD_POLICY, "load_policy" },
-+   { SECCLASS_SECURITY, SECURITY__COMPUTE_RELABEL, "compute_relabel" },
-+   { SECCLASS_SECURITY, SECURITY__COMPUTE_USER, "compute_user" },
-+   { SECCLASS_SECURITY, SECURITY__SETENFORCE, "setenforce" },
-+   { SECCLASS_SYSTEM, SYSTEM__IPC_INFO, "ipc_info" },
-+   { SECCLASS_SYSTEM, SYSTEM__SYSLOG_READ, "syslog_read" },
-+   { SECCLASS_SYSTEM, SYSTEM__SYSLOG_MOD, "syslog_mod" },
-+   { SECCLASS_SYSTEM, SYSTEM__SYSLOG_CONSOLE, "syslog_console" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__CHOWN, "chown" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__DAC_OVERRIDE, "dac_override" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__DAC_READ_SEARCH, "dac_read_search" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__FOWNER, "fowner" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__FSETID, "fsetid" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__KILL, "kill" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SETGID, "setgid" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SETUID, "setuid" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SETPCAP, "setpcap" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__LINUX_IMMUTABLE, "linux_immutable" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__NET_BIND_SERVICE, "net_bind_service" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__NET_BROADCAST, "net_broadcast" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__NET_ADMIN, "net_admin" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__NET_RAW, "net_raw" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__IPC_LOCK, "ipc_lock" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__IPC_OWNER, "ipc_owner" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_MODULE, "sys_module" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_RAWIO, "sys_rawio" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_CHROOT, "sys_chroot" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_PTRACE, "sys_ptrace" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_PACCT, "sys_pacct" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_ADMIN, "sys_admin" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_BOOT, "sys_boot" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_NICE, "sys_nice" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_RESOURCE, "sys_resource" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_TIME, "sys_time" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__SYS_TTY_CONFIG, "sys_tty_config" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__MKNOD, "mknod" },
-+   { SECCLASS_CAPABILITY, CAPABILITY__LEASE, "lease" },
-+   { SECCLASS_PASSWD, PASSWD__PASSWD, "passwd" },
-+   { SECCLASS_PASSWD, PASSWD__CHFN, "chfn" },
-+   { SECCLASS_PASSWD, PASSWD__CHSH, "chsh" },
-+};
-+
-+
-+/* FLASK */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/class_to_string.h      2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,39 @@
-+/* This file is automatically generated.  Do not edit. */
-+/*
-+ * Security object class definitions
-+ */
-+static char *class_to_string[] =
-+{
-+    "null",
-+    "security",
-+    "process",
-+    "system",
-+    "capability",
-+    "filesystem",
-+    "file",
-+    "dir",
-+    "fd",
-+    "lnk_file",
-+    "chr_file",
-+    "blk_file",
-+    "sock_file",
-+    "fifo_file",
-+    "socket",
-+    "tcp_socket",
-+    "udp_socket",
-+    "rawip_socket",
-+    "node",
-+    "netif",
-+    "netlink_socket",
-+    "packet_socket",
-+    "key_socket",
-+    "unix_stream_socket",
-+    "unix_dgram_socket",
-+    "sem",
-+    "msg",
-+    "msgq",
-+    "shm",
-+    "ipc",
-+    "passwd",
-+};
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/common_perm_to_string.h        2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,65 @@
-+/* This file is automatically generated.  Do not edit. */
-+/* FLASK */
-+
-+static char *common_file_perm_to_string[] =
-+{
-+    "ioctl",
-+    "read",
-+    "write",
-+    "create",
-+    "getattr",
-+    "setattr",
-+    "lock",
-+    "relabelfrom",
-+    "relabelto",
-+    "append",
-+    "unlink",
-+    "link",
-+    "rename",
-+    "execute",
-+    "swapon",
-+    "quotaon",
-+    "mounton",
-+};
-+
-+static char *common_socket_perm_to_string[] =
-+{
-+    "ioctl",
-+    "read",
-+    "write",
-+    "create",
-+    "getattr",
-+    "setattr",
-+    "lock",
-+    "relabelfrom",
-+    "relabelto",
-+    "append",
-+    "bind",
-+    "connect",
-+    "listen",
-+    "accept",
-+    "getopt",
-+    "setopt",
-+    "shutdown",
-+    "recvfrom",
-+    "sendto",
-+    "recv_msg",
-+    "send_msg",
-+    "name_bind",
-+};
-+
-+static char *common_ipc_perm_to_string[] =
-+{
-+    "create",
-+    "destroy",
-+    "getattr",
-+    "setattr",
-+    "read",
-+    "write",
-+    "associate",
-+    "unix_read",
-+    "unix_write",
-+};
-+
-+
-+/* FLASK */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/flask.h        2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,71 @@
-+/* This file is automatically generated.  Do not edit. */
-+#ifndef _SELINUX_FLASK_H_
-+#define _SELINUX_FLASK_H_
-+
-+/*
-+ * Security object class definitions
-+ */
-+#define SECCLASS_SECURITY                                1
-+#define SECCLASS_PROCESS                                 2
-+#define SECCLASS_SYSTEM                                  3
-+#define SECCLASS_CAPABILITY                              4
-+#define SECCLASS_FILESYSTEM                              5
-+#define SECCLASS_FILE                                    6
-+#define SECCLASS_DIR                                     7
-+#define SECCLASS_FD                                      8
-+#define SECCLASS_LNK_FILE                                9
-+#define SECCLASS_CHR_FILE                                10
-+#define SECCLASS_BLK_FILE                                11
-+#define SECCLASS_SOCK_FILE                               12
-+#define SECCLASS_FIFO_FILE                               13
-+#define SECCLASS_SOCKET                                  14
-+#define SECCLASS_TCP_SOCKET                              15
-+#define SECCLASS_UDP_SOCKET                              16
-+#define SECCLASS_RAWIP_SOCKET                            17
-+#define SECCLASS_NODE                                    18
-+#define SECCLASS_NETIF                                   19
-+#define SECCLASS_NETLINK_SOCKET                          20
-+#define SECCLASS_PACKET_SOCKET                           21
-+#define SECCLASS_KEY_SOCKET                              22
-+#define SECCLASS_UNIX_STREAM_SOCKET                      23
-+#define SECCLASS_UNIX_DGRAM_SOCKET                       24
-+#define SECCLASS_SEM                                     25
-+#define SECCLASS_MSG                                     26
-+#define SECCLASS_MSGQ                                    27
-+#define SECCLASS_SHM                                     28
-+#define SECCLASS_IPC                                     29
-+#define SECCLASS_PASSWD                                  30
-+
-+/*
-+ * Security identifier indices for initial entities
-+ */
-+#define SECINITSID_KERNEL                               1
-+#define SECINITSID_SECURITY                             2
-+#define SECINITSID_UNLABELED                            3
-+#define SECINITSID_FS                                   4
-+#define SECINITSID_FILE                                 5
-+#define SECINITSID_FILE_LABELS                          6
-+#define SECINITSID_INIT                                 7
-+#define SECINITSID_ANY_SOCKET                           8
-+#define SECINITSID_PORT                                 9
-+#define SECINITSID_NETIF                                10
-+#define SECINITSID_NETMSG                               11
-+#define SECINITSID_NODE                                 12
-+#define SECINITSID_IGMP_PACKET                          13
-+#define SECINITSID_ICMP_SOCKET                          14
-+#define SECINITSID_TCP_SOCKET                           15
-+#define SECINITSID_SYSCTL_MODPROBE                      16
-+#define SECINITSID_SYSCTL                               17
-+#define SECINITSID_SYSCTL_FS                            18
-+#define SECINITSID_SYSCTL_KERNEL                        19
-+#define SECINITSID_SYSCTL_NET                           20
-+#define SECINITSID_SYSCTL_NET_UNIX                      21
-+#define SECINITSID_SYSCTL_VM                            22
-+#define SECINITSID_SYSCTL_DEV                           23
-+#define SECINITSID_KMOD                                 24
-+#define SECINITSID_POLICY                               25
-+#define SECINITSID_SCMP_PACKET                          26
-+
-+#define SECINITSID_NUM                                  26
-+
-+#endif
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/initial_sid_to_string.h        2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,32 @@
-+/* This file is automatically generated.  Do not edit. */
-+static char *initial_sid_to_string[] =
-+{
-+    "null",
-+    "kernel",
-+    "security",
-+    "unlabeled",
-+    "fs",
-+    "file",
-+    "file_labels",
-+    "init",
-+    "any_socket",
-+    "port",
-+    "netif",
-+    "netmsg",
-+    "node",
-+    "igmp_packet",
-+    "icmp_socket",
-+    "tcp_socket",
-+    "sysctl_modprobe",
-+    "sysctl",
-+    "sysctl_fs",
-+    "sysctl_kernel",
-+    "sysctl_net",
-+    "sysctl_net_unix",
-+    "sysctl_vm",
-+    "sysctl_dev",
-+    "kmod",
-+    "policy",
-+    "scmp_packet",
-+};
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/objsec.h       2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,88 @@
-+/*
-+ *  NSA Security-Enhanced Linux (SELinux) security module
-+ *
-+ *  This file contains the SELinux security data structures for kernel objects.
-+ *
-+ *  Author(s):  Stephen Smalley, <sds@epoch.ncsc.mil>
-+ *              Chris Vance, <cvance@nai.com>
-+ *              Wayne Salamon, <wsalamon@nai.com>
-+ *              James Morris <jmorris@redhat.com>
-+ *
-+ *  Copyright (C) 2001,2002 Networks Associates Technology, Inc.
-+ *  Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ *    This program is free software; you can redistribute it and/or modify
-+ *    it under the terms of the GNU General Public License version 2,
-+ *      as published by the Free Software Foundation.
-+ */
-+#ifndef _SELINUX_OBJSEC_H_
-+#define _SELINUX_OBJSEC_H_
-+
-+#include <linux/list.h>
-+#include <linux/sched.h>
-+#include <linux/fs.h>
-+#include <linux/in.h>
-+#include "flask.h"
-+#include "avc.h"
-+
-+struct task_security_struct {
-+        unsigned long magic;           /* magic number for this module */
-+      struct task_struct *task;      /* back pointer to task object */
-+      u32 osid;            /* SID prior to last execve */
-+      u32 sid;             /* current SID */
-+      u32 exec_sid;        /* exec SID */
-+      u32 create_sid;      /* fscreate SID */
-+        struct avc_entry_ref avcr;     /* reference to process permissions */
-+};
-+
-+struct inode_security_struct {
-+      unsigned long magic;           /* magic number for this module */
-+        struct inode *inode;           /* back pointer to inode object */
-+      struct list_head list;         /* list of inode_security_struct */
-+      u32 task_sid;        /* SID of creating task */
-+      u32 sid;             /* SID of this object */
-+      u16 sclass;       /* security class of this object */
-+      struct avc_entry_ref avcr;     /* reference to object permissions */
-+      unsigned char initialized;     /* initialization flag */
-+      struct semaphore sem;
-+      unsigned char inherit;         /* inherit SID from parent entry */
-+};
-+
-+struct file_security_struct {
-+      unsigned long magic;            /* magic number for this module */
-+      struct file *file;              /* back pointer to file object */
-+      u32 sid;              /* SID of open file description */
-+      u32 fown_sid;         /* SID of file owner (for SIGIO) */
-+      struct avc_entry_ref avcr;      /* reference to fd permissions */
-+      struct avc_entry_ref inode_avcr;     /* reference to object permissions */
-+};
-+
-+struct superblock_security_struct {
-+      unsigned long magic;            /* magic number for this module */
-+      struct super_block *sb;         /* back pointer to sb object */
-+      struct list_head list;          /* list of superblock_security_struct */
-+      u32 sid;              /* SID of file system */
-+      unsigned int behavior;          /* labeling behavior */
-+      unsigned char initialized;      /* initialization flag */
-+      unsigned char proc;             /* proc fs */
-+      struct semaphore sem;
-+};
-+
-+struct msg_security_struct {
-+        unsigned long magic;          /* magic number for this module */
-+      struct msg_msg *msg;            /* back pointer */
-+      u32 sid;              /* SID of message */
-+        struct avc_entry_ref avcr;    /* reference to permissions */
-+};
-+
-+struct ipc_security_struct {
-+        unsigned long magic;          /* magic number for this module */
-+      struct kern_ipc_perm *ipc_perm; /* back pointer */
-+      u16 sclass;     /* security class of this object */
-+      u32 sid;              /* SID of IPC resource */
-+        struct avc_entry_ref avcr;    /* reference to permissions */
-+};
-+
-+extern int inode_security_set_sid(struct inode *inode, u32 sid);
-+
-+#endif /* _SELINUX_OBJSEC_H_ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/include/security.h     2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,70 @@
-+/*
-+ * Security server interface.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SELINUX_SECURITY_H_
-+#define _SELINUX_SECURITY_H_
-+
-+#include "flask.h"
-+
-+#define SECSID_NULL                   0x00000000 /* unspecified SID */
-+#define SECSID_WILD                   0xffffffff /* wildcard SID */
-+#define SECCLASS_NULL                 0x0000 /* no class */
-+
-+#define SELINUX_MAGIC 0xf97cff8c
-+
-+int security_load_policy(void * data, size_t len);
-+
-+struct av_decision {
-+      u32 allowed;
-+      u32 decided;
-+      u32 auditallow;
-+      u32 auditdeny;
-+      u32 seqno;
-+};
-+
-+int security_compute_av(u32 ssid, u32 tsid,
-+      u16 tclass, u32 requested,
-+      struct av_decision *avd);
-+
-+int security_transition_sid(u32 ssid, u32 tsid,
-+      u16 tclass, u32 *out_sid);
-+
-+int security_member_sid(u32 ssid, u32 tsid,
-+      u16 tclass, u32 *out_sid);
-+
-+int security_change_sid(u32 ssid, u32 tsid,
-+      u16 tclass, u32 *out_sid);
-+
-+int security_sid_to_context(u32 sid, char **scontext,
-+      u32 *scontext_len);
-+
-+int security_context_to_sid(char *scontext, u32 scontext_len,
-+      u32 *out_sid);
-+
-+int security_get_user_sids(u32 callsid, char *username,
-+                         u32 **sids, u32 *nel);
-+
-+int security_port_sid(u16 domain, u16 type, u8 protocol, u16 port,
-+      u32 *out_sid);
-+
-+int security_netif_sid(char *name, u32 *if_sid,
-+      u32 *msg_sid);
-+
-+int security_node_sid(u16 domain, void *addr, u32 addrlen,
-+      u32 *out_sid);
-+
-+#define SECURITY_FS_USE_XATTR 1 /* use xattr */
-+#define SECURITY_FS_USE_TRANS 2 /* use transition SIDs, e.g. devpts/tmpfs */
-+#define SECURITY_FS_USE_TASK  3 /* use task SIDs, e.g. pipefs/sockfs */
-+#define SECURITY_FS_USE_GENFS 4 /* use the genfs support */
-+#define SECURITY_FS_USE_NONE  5 /* no labeling support */
-+int security_fs_use(const char *fstype, unsigned int *behavior,
-+      u32 *sid);
-+
-+int security_genfs_sid(const char *fstype, char *name, u16 sclass,
-+      u32 *sid);
-+
-+#endif /* _SELINUX_SECURITY_H_ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/Kconfig        2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,34 @@
-+config SECURITY_SELINUX
-+      bool "NSA SELinux Support"
-+      depends on SECURITY
-+      default n
-+      help
-+        This enables NSA Security-Enhanced Linux (SELinux).
-+        You will also need a policy configuration and a labeled filesystem.
-+        You can obtain the policy compiler (checkpolicy), the utility for
-+        labeling filesystems (setfiles), and an example policy configuration
-+        from http://www.nsa.gov/selinux.
-+        If you are unsure how to answer this question, answer N.
-+
-+config SECURITY_SELINUX_DEVELOP
-+      bool "NSA SELinux Development Support"
-+      depends on SECURITY_SELINUX
-+      default y
-+      help
-+        This enables the development support option of NSA SELinux,
-+        which is useful for experimenting with SELinux and developing
-+        policies.  If unsure, say Y.  With this option enabled, the
-+        kernel will start in permissive mode (log everything, deny nothing)
-+        unless you specify enforcing=1 on the kernel command line.  You
-+        can interactively toggle the kernel between enforcing mode and
-+        permissive mode (if permitted by the policy) via /selinux/enforce.
-+
-+config SECURITY_SELINUX_MLS
-+      bool "NSA SELinux MLS policy (EXPERIMENTAL)"
-+      depends on SECURITY_SELINUX && EXPERIMENTAL
-+      default n
-+      help
-+        This enables the NSA SELinux Multi-Level Security (MLS) policy in
-+        addition to the default RBAC/TE policy.  This policy is
-+        experimental and has not been configured for use.  Unless you
-+        specifically want to experiment with MLS, say N.
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/Makefile       2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,10 @@
-+#
-+# Makefile for building the SELinux module as part of the kernel tree.
-+#
-+
-+obj-$(CONFIG_SECURITY_SELINUX) := selinux.o ss/
-+
-+selinux-objs := avc.o hooks.o selinuxfs.o
-+
-+EXTRA_CFLAGS += -Isecurity/selinux/include
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/selinuxfs.c    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,593 @@
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <linux/fs.h>
-+#include <linux/init.h>
-+#include <linux/string.h>
-+#include <linux/security.h>
-+#include <asm/uaccess.h>
-+
-+/* selinuxfs pseudo filesystem for exporting the security policy API.
-+   Based on the proc code and the fs/nfsd/nfsctl.c code. */
-+
-+#include "flask.h"
-+#include "avc.h"
-+#include "avc_ss.h"
-+#include "security.h"
-+#include "objsec.h"
-+
-+/* Check whether a task is allowed to use a security operation. */
-+int task_has_security(struct task_struct *tsk,
-+                    u32 perms)
-+{
-+      struct task_security_struct *tsec;
-+
-+      tsec = tsk->security;
-+
-+      return avc_has_perm(tsec->sid, SECINITSID_SECURITY,
-+                          SECCLASS_SECURITY, perms, NULL, NULL);
-+}
-+
-+enum sel_inos {
-+      SEL_ROOT_INO = 2,
-+      SEL_LOAD,       /* load policy */
-+      SEL_ENFORCE,    /* get or set enforcing status */
-+      SEL_CONTEXT,    /* validate context */
-+      SEL_ACCESS,     /* compute access decision */
-+      SEL_CREATE,     /* compute create labeling decision */
-+      SEL_RELABEL,    /* compute relabeling decision */
-+      SEL_USER        /* compute reachable user contexts */
-+};
-+
-+static ssize_t sel_read_enforce(struct file *filp, char *buf,
-+                              size_t count, loff_t *ppos)
-+{
-+      char *page;
-+      ssize_t length;
-+      ssize_t end;
-+
-+      if (count < 0 || count > PAGE_SIZE)
-+              return -EINVAL;
-+      if (!(page = (char*)__get_free_page(GFP_KERNEL)))
-+              return -ENOMEM;
-+      memset(page, 0, PAGE_SIZE);
-+
-+      length = snprintf(page, PAGE_SIZE, "%d", selinux_enforcing);
-+      if (length < 0) {
-+              free_page((unsigned long)page);
-+              return length;
-+      }
-+
-+      if (*ppos >= length) {
-+              free_page((unsigned long)page);
-+              return 0;
-+      }
-+      if (count + *ppos > length)
-+              count = length - *ppos;
-+      end = count + *ppos;
-+      if (copy_to_user(buf, (char *) page + *ppos, count)) {
-+              count = -EFAULT;
-+              goto out;
-+      }
-+      *ppos = end;
-+out:
-+      free_page((unsigned long)page);
-+      return count;
-+}
-+
-+#ifdef CONFIG_SECURITY_SELINUX_DEVELOP
-+static ssize_t sel_write_enforce(struct file * file, const char * buf,
-+                               size_t count, loff_t *ppos)
-+
-+{
-+      char *page;
-+      ssize_t length;
-+      int new_value;
-+
-+      if (count < 0 || count >= PAGE_SIZE)
-+              return -ENOMEM;
-+      if (*ppos != 0) {
-+              /* No partial writes. */
-+              return -EINVAL;
-+      }
-+      page = (char*)__get_free_page(GFP_KERNEL);
-+      if (!page)
-+              return -ENOMEM;
-+      memset(page, 0, PAGE_SIZE);
-+      length = -EFAULT;
-+      if (copy_from_user(page, buf, count))
-+              goto out;
-+
-+      length = -EINVAL;
-+      if (sscanf(page, "%d", &new_value) != 1)
-+              goto out;
-+
-+      if (new_value != selinux_enforcing) {
-+              length = task_has_security(current, SECURITY__SETENFORCE);
-+              if (length)
-+                      goto out;
-+              selinux_enforcing = new_value;
-+              if (selinux_enforcing)
-+                      avc_ss_reset(0);
-+      }
-+      length = count;
-+out:
-+      free_page((unsigned long) page);
-+      return length;
-+}
-+#else
-+#define sel_write_enforce NULL
-+#endif
-+
-+static struct file_operations sel_enforce_ops = {
-+      .read           = sel_read_enforce,
-+      .write          = sel_write_enforce,
-+};
-+
-+static ssize_t sel_write_load(struct file * file, const char * buf,
-+                            size_t count, loff_t *ppos)
-+
-+{
-+      ssize_t length;
-+      void *data;
-+
-+      length = task_has_security(current, SECURITY__LOAD_POLICY);
-+      if (length)
-+              return length;
-+
-+      if (*ppos != 0) {
-+              /* No partial writes. */
-+              return -EINVAL;
-+      }
-+
-+      if ((count < 0) || (count > 64 * 1024 * 1024) || (data = vmalloc(count)) == NULL)
-+              return -ENOMEM;
-+
-+      length = -EFAULT;
-+      if (copy_from_user(data, buf, count) != 0)
-+              goto out;
-+
-+      length = security_load_policy(data, count);
-+      if (length)
-+              goto out;
-+
-+      length = count;
-+out:
-+      vfree(data);
-+      return length;
-+}
-+
-+static struct file_operations sel_load_ops = {
-+      .write          = sel_write_load,
-+};
-+
-+
-+static ssize_t sel_write_context(struct file * file, const char * buf,
-+                               size_t count, loff_t *ppos)
-+
-+{
-+      char *page;
-+      u32 sid;
-+      ssize_t length;
-+
-+      length = task_has_security(current, SECURITY__CHECK_CONTEXT);
-+      if (length)
-+              return length;
-+
-+      if (count < 0 || count >= PAGE_SIZE)
-+              return -ENOMEM;
-+      if (*ppos != 0) {
-+              /* No partial writes. */
-+              return -EINVAL;
-+      }
-+      page = (char*)__get_free_page(GFP_KERNEL);
-+      if (!page)
-+              return -ENOMEM;
-+      memset(page, 0, PAGE_SIZE);
-+      length = -EFAULT;
-+      if (copy_from_user(page, buf, count))
-+              goto out;
-+
-+      length = security_context_to_sid(page, count, &sid);
-+      if (length < 0)
-+              goto out;
-+
-+      length = count;
-+out:
-+      free_page((unsigned long) page);
-+      return length;
-+}
-+
-+static struct file_operations sel_context_ops = {
-+      .write          = sel_write_context,
-+};
-+
-+
-+/*
-+ * Remaining nodes use transaction based IO methods like nfsd/nfsctl.c
-+ */
-+static ssize_t sel_write_access(struct file * file, char *buf, size_t size);
-+static ssize_t sel_write_create(struct file * file, char *buf, size_t size);
-+static ssize_t sel_write_relabel(struct file * file, char *buf, size_t size);
-+static ssize_t sel_write_user(struct file * file, char *buf, size_t size);
-+
-+static ssize_t (*write_op[])(struct file *, char *, size_t) = {
-+      [SEL_ACCESS] = sel_write_access,
-+      [SEL_CREATE] = sel_write_create,
-+      [SEL_RELABEL] = sel_write_relabel,
-+      [SEL_USER] = sel_write_user,
-+};
-+
-+/* an argresp is stored in an allocated page and holds the
-+ * size of the argument or response, along with its content
-+ */
-+struct argresp {
-+      ssize_t size;
-+      char data[0];
-+};
-+
-+#define PAYLOAD_SIZE (PAGE_SIZE - sizeof(struct argresp))
-+
-+/*
-+ * transaction based IO methods.
-+ * The file expects a single write which triggers the transaction, and then
-+ * possibly a read which collects the result - which is stored in a
-+ * file-local buffer.
-+ */
-+static ssize_t TA_write(struct file *file, const char *buf, size_t size, loff_t *pos)
-+{
-+      ino_t ino =  file->f_dentry->d_inode->i_ino;
-+      struct argresp *ar;
-+      ssize_t rv = 0;
-+
-+      if (ino >= sizeof(write_op)/sizeof(write_op[0]) || !write_op[ino])
-+              return -EINVAL;
-+      if (file->private_data)
-+              return -EINVAL; /* only one write allowed per open */
-+      if (size > PAYLOAD_SIZE - 1) /* allow one byte for null terminator */
-+              return -EFBIG;
-+
-+      ar = kmalloc(PAGE_SIZE, GFP_KERNEL);
-+      if (!ar)
-+              return -ENOMEM;
-+      memset(ar, 0, PAGE_SIZE); /* clear buffer, particularly last byte */
-+      ar->size = 0;
-+      down(&file->f_dentry->d_inode->i_sem);
-+      if (file->private_data)
-+              rv = -EINVAL;
-+      else
-+              file->private_data = ar;
-+      up(&file->f_dentry->d_inode->i_sem);
-+      if (rv) {
-+              kfree(ar);
-+              return rv;
-+      }
-+      if (copy_from_user(ar->data, buf, size))
-+              return -EFAULT;
-+
-+      rv =  write_op[ino](file, ar->data, size);
-+      if (rv>0) {
-+              ar->size = rv;
-+              rv = size;
-+      }
-+      return rv;
-+}
-+
-+static ssize_t TA_read(struct file *file, char *buf, size_t size, loff_t *pos)
-+{
-+      struct argresp *ar;
-+      ssize_t rv = 0;
-+
-+      if (file->private_data == NULL)
-+              rv = TA_write(file, buf, 0, pos);
-+      if (rv < 0)
-+              return rv;
-+
-+      ar = file->private_data;
-+      if (!ar)
-+              return 0;
-+      if (*pos >= ar->size)
-+              return 0;
-+      if (*pos + size > ar->size)
-+              size = ar->size - *pos;
-+      if (copy_to_user(buf, ar->data + *pos, size))
-+              return -EFAULT;
-+      *pos += size;
-+      return size;
-+}
-+
-+static int TA_open(struct inode *inode, struct file *file)
-+{
-+      file->private_data = NULL;
-+      return 0;
-+}
-+
-+static int TA_release(struct inode *inode, struct file *file)
-+{
-+      void *p = file->private_data;
-+      file->private_data = NULL;
-+      kfree(p);
-+      return 0;
-+}
-+
-+static struct file_operations transaction_ops = {
-+      .write          = TA_write,
-+      .read           = TA_read,
-+      .open           = TA_open,
-+      .release        = TA_release,
-+};
-+
-+/*
-+ * payload - write methods
-+ * If the method has a response, the response should be put in buf,
-+ * and the length returned.  Otherwise return 0 or and -error.
-+ */
-+
-+static ssize_t sel_write_access(struct file * file, char *buf, size_t size)
-+{
-+      char *scon, *tcon;
-+      u32 ssid, tsid;
-+      u16 tclass;
-+      u32 req;
-+      struct av_decision avd;
-+      ssize_t length;
-+
-+      length = task_has_security(current, SECURITY__COMPUTE_AV);
-+      if (length)
-+              return length;
-+
-+      length = -ENOMEM;
-+      scon = kmalloc(size+1, GFP_KERNEL);
-+      if (!scon)
-+              return length;
-+      memset(scon, 0, size+1);
-+
-+      tcon = kmalloc(size+1, GFP_KERNEL);
-+      if (!tcon)
-+              goto out;
-+      memset(tcon, 0, size+1);
-+
-+      length = -EINVAL;
-+      if (sscanf(buf, "%s %s %hu %x", scon, tcon, &tclass, &req) != 4)
-+              goto out2;
-+
-+      length = security_context_to_sid(scon, strlen(scon)+1, &ssid);
-+      if (length < 0)
-+              goto out2;
-+      length = security_context_to_sid(tcon, strlen(tcon)+1, &tsid);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = security_compute_av(ssid, tsid, tclass, req, &avd);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = snprintf(buf, PAYLOAD_SIZE, "%x %x %x %x %u",
-+                        avd.allowed, avd.decided,
-+                        avd.auditallow, avd.auditdeny,
-+                        avd.seqno);
-+out2:
-+      kfree(tcon);
-+out:
-+      kfree(scon);
-+      return length;
-+}
-+
-+static ssize_t sel_write_create(struct file * file, char *buf, size_t size)
-+{
-+      char *scon, *tcon;
-+      u32 ssid, tsid, newsid;
-+      u16 tclass;
-+      ssize_t length;
-+      char *newcon;
-+      u32 len;
-+
-+      length = task_has_security(current, SECURITY__COMPUTE_CREATE);
-+      if (length)
-+              return length;
-+
-+      length = -ENOMEM;
-+      scon = kmalloc(size+1, GFP_KERNEL);
-+      if (!scon)
-+              return length;
-+      memset(scon, 0, size+1);
-+
-+      tcon = kmalloc(size+1, GFP_KERNEL);
-+      if (!tcon)
-+              goto out;
-+      memset(tcon, 0, size+1);
-+
-+      length = -EINVAL;
-+      if (sscanf(buf, "%s %s %hu", scon, tcon, &tclass) != 3)
-+              goto out2;
-+
-+      length = security_context_to_sid(scon, strlen(scon)+1, &ssid);
-+      if (length < 0)
-+              goto out2;
-+      length = security_context_to_sid(tcon, strlen(tcon)+1, &tsid);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = security_transition_sid(ssid, tsid, tclass, &newsid);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = security_sid_to_context(newsid, &newcon, &len);
-+      if (length < 0)
-+              goto out2;
-+
-+      if (len > PAYLOAD_SIZE) {
-+              printk(KERN_ERR "%s:  context size (%u) exceeds payload "
-+                     "max\n", __FUNCTION__, len);
-+              length = -ERANGE;
-+              goto out3;
-+      }
-+
-+      memcpy(buf, newcon, len);
-+      length = len;
-+out3:
-+      kfree(newcon);
-+out2:
-+      kfree(tcon);
-+out:
-+      kfree(scon);
-+      return length;
-+}
-+
-+static ssize_t sel_write_relabel(struct file * file, char *buf, size_t size)
-+{
-+      char *scon, *tcon;
-+      u32 ssid, tsid, newsid;
-+      u16 tclass;
-+      ssize_t length;
-+      char *newcon;
-+      u32 len;
-+
-+      length = task_has_security(current, SECURITY__COMPUTE_RELABEL);
-+      if (length)
-+              return length;
-+
-+      length = -ENOMEM;
-+      scon = kmalloc(size+1, GFP_KERNEL);
-+      if (!scon)
-+              return length;
-+      memset(scon, 0, size+1);
-+
-+      tcon = kmalloc(size+1, GFP_KERNEL);
-+      if (!tcon)
-+              goto out;
-+      memset(tcon, 0, size+1);
-+
-+      length = -EINVAL;
-+      if (sscanf(buf, "%s %s %hu", scon, tcon, &tclass) != 3)
-+              goto out2;
-+
-+      length = security_context_to_sid(scon, strlen(scon)+1, &ssid);
-+      if (length < 0)
-+              goto out2;
-+      length = security_context_to_sid(tcon, strlen(tcon)+1, &tsid);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = security_change_sid(ssid, tsid, tclass, &newsid);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = security_sid_to_context(newsid, &newcon, &len);
-+      if (length < 0)
-+              goto out2;
-+
-+      if (len > PAYLOAD_SIZE) {
-+              length = -ERANGE;
-+              goto out3;
-+      }
-+
-+      memcpy(buf, newcon, len);
-+      length = len;
-+out3:
-+      kfree(newcon);
-+out2:
-+      kfree(tcon);
-+out:
-+      kfree(scon);
-+      return length;
-+}
-+
-+static ssize_t sel_write_user(struct file * file, char *buf, size_t size)
-+{
-+      char *con, *user, *ptr;
-+      u32 sid, *sids;
-+      ssize_t length;
-+      char *newcon;
-+      int i, rc;
-+      u32 len, nsids;
-+
-+      length = task_has_security(current, SECURITY__COMPUTE_USER);
-+      if (length)
-+              return length;
-+
-+      length = -ENOMEM;
-+      con = kmalloc(size+1, GFP_KERNEL);
-+      if (!con)
-+              return length;
-+      memset(con, 0, size+1);
-+
-+      user = kmalloc(size+1, GFP_KERNEL);
-+      if (!user)
-+              goto out;
-+      memset(user, 0, size+1);
-+
-+      length = -EINVAL;
-+      if (sscanf(buf, "%s %s", con, user) != 2)
-+              goto out2;
-+
-+      length = security_context_to_sid(con, strlen(con)+1, &sid);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = security_get_user_sids(sid, user, &sids, &nsids);
-+      if (length < 0)
-+              goto out2;
-+
-+      length = sprintf(buf, "%u", nsids) + 1;
-+      ptr = buf + length;
-+      for (i = 0; i < nsids; i++) {
-+              rc = security_sid_to_context(sids[i], &newcon, &len);
-+              if (rc) {
-+                      length = rc;
-+                      goto out3;
-+              }
-+              if ((length + len) >= PAYLOAD_SIZE) {
-+                      kfree(newcon);
-+                      length = -ERANGE;
-+                      goto out3;
-+              }
-+              memcpy(ptr, newcon, len);
-+              kfree(newcon);
-+              ptr += len;
-+              length += len;
-+      }
-+out3:
-+      kfree(sids);
-+out2:
-+      kfree(user);
-+out:
-+      kfree(con);
-+      return length;
-+}
-+
-+
-+static int sel_fill_super(struct super_block * sb, void * data, int silent)
-+{
-+      static struct tree_descr selinux_files[] = {
-+              [SEL_LOAD] = {"load", &sel_load_ops, S_IRUSR|S_IWUSR},
-+              [SEL_ENFORCE] = {"enforce", &sel_enforce_ops, S_IRUSR|S_IWUSR},
-+              [SEL_CONTEXT] = {"context", &sel_context_ops, S_IRUGO|S_IWUGO},
-+              [SEL_ACCESS] = {"access", &transaction_ops, S_IRUGO|S_IWUGO},
-+              [SEL_CREATE] = {"create", &transaction_ops, S_IRUGO|S_IWUGO},
-+              [SEL_RELABEL] = {"relabel", &transaction_ops, S_IRUGO|S_IWUGO},
-+              [SEL_USER] = {"user", &transaction_ops, S_IRUGO|S_IWUGO},
-+              /* last one */ {""}
-+      };
-+      return simple_fill_super(sb, SELINUX_MAGIC, selinux_files);
-+}
-+
-+static struct super_block *sel_get_sb(struct file_system_type *fs_type,
-+                                    int flags, const char *dev_name, void *data)
-+{
-+      return get_sb_single(fs_type, flags, data, sel_fill_super);
-+}
-+
-+static struct file_system_type sel_fs_type = {
-+      .name           = "selinuxfs",
-+      .get_sb         = sel_get_sb,
-+      .kill_sb        = kill_litter_super,
-+};
-+
-+static int __init init_sel_fs(void)
-+{
-+      return register_filesystem(&sel_fs_type);
-+}
-+
-+__initcall(init_sel_fs);
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/avtab.c     2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,264 @@
-+/*
-+ * Implementation of the access vector table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "avtab.h"
-+#include "policydb.h"
-+
-+#define AVTAB_HASH(keyp) \
-+((keyp->target_class + \
-+ (keyp->target_type << 2) + \
-+ (keyp->source_type << 9)) & \
-+ AVTAB_HASH_MASK)
-+
-+int avtab_insert(struct avtab *h, struct avtab_key *key, struct avtab_datum *datum)
-+{
-+      int hvalue;
-+      struct avtab_node *prev, *cur, *newnode;
-+
-+      if (!h)
-+              return -EINVAL;
-+
-+      hvalue = AVTAB_HASH(key);
-+      for (prev = NULL, cur = h->htable[hvalue];
-+           cur;
-+           prev = cur, cur = cur->next) {
-+              if (key->source_type == cur->key.source_type &&
-+                  key->target_type == cur->key.target_type &&
-+                  key->target_class == cur->key.target_class &&
-+                  (datum->specified & cur->datum.specified))
-+                      return -EEXIST;
-+              if (key->source_type < cur->key.source_type)
-+                      break;
-+              if (key->source_type == cur->key.source_type &&
-+                  key->target_type < cur->key.target_type)
-+                      break;
-+              if (key->source_type == cur->key.source_type &&
-+                  key->target_type == cur->key.target_type &&
-+                  key->target_class < cur->key.target_class)
-+                      break;
-+      }
-+
-+      newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);
-+      if (newnode == NULL)
-+              return -ENOMEM;
-+      memset(newnode, 0, sizeof(*newnode));
-+      newnode->key = *key;
-+      newnode->datum = *datum;
-+      if (prev) {
-+              newnode->next = prev->next;
-+              prev->next = newnode;
-+      } else {
-+              newnode->next = h->htable[hvalue];
-+              h->htable[hvalue] = newnode;
-+      }
-+
-+      h->nel++;
-+      return 0;
-+}
-+
-+
-+struct avtab_datum *avtab_search(struct avtab *h, struct avtab_key *key, int specified)
-+{
-+      int hvalue;
-+      struct avtab_node *cur;
-+
-+      if (!h)
-+              return NULL;
-+
-+      hvalue = AVTAB_HASH(key);
-+      for (cur = h->htable[hvalue]; cur; cur = cur->next) {
-+              if (key->source_type == cur->key.source_type &&
-+                  key->target_type == cur->key.target_type &&
-+                  key->target_class == cur->key.target_class &&
-+                  (specified & cur->datum.specified))
-+                      return &cur->datum;
-+
-+              if (key->source_type < cur->key.source_type)
-+                      break;
-+              if (key->source_type == cur->key.source_type &&
-+                  key->target_type < cur->key.target_type)
-+                      break;
-+              if (key->source_type == cur->key.source_type &&
-+                  key->target_type == cur->key.target_type &&
-+                  key->target_class < cur->key.target_class)
-+                      break;
-+      }
-+
-+      return NULL;
-+}
-+
-+void avtab_destroy(struct avtab *h)
-+{
-+      int i;
-+      struct avtab_node *cur, *temp;
-+
-+      if (!h)
-+              return;
-+
-+      for (i = 0; i < AVTAB_SIZE; i++) {
-+              cur = h->htable[i];
-+              while (cur != NULL) {
-+                      temp = cur;
-+                      cur = cur->next;
-+                      kfree(temp);
-+              }
-+              h->htable[i] = NULL;
-+      }
-+      kfree(h->htable);
-+}
-+
-+
-+int avtab_map(struct avtab *h,
-+            int (*apply) (struct avtab_key *k,
-+                          struct avtab_datum *d,
-+                          void *args),
-+            void *args)
-+{
-+      int i, ret;
-+      struct avtab_node *cur;
-+
-+      if (!h)
-+              return 0;
-+
-+      for (i = 0; i < AVTAB_SIZE; i++) {
-+              cur = h->htable[i];
-+              while (cur != NULL) {
-+                      ret = apply(&cur->key, &cur->datum, args);
-+                      if (ret)
-+                              return ret;
-+                      cur = cur->next;
-+              }
-+      }
-+      return 0;
-+}
-+
-+int avtab_init(struct avtab *h)
-+{
-+      int i;
-+
-+      h->htable = kmalloc(sizeof(*(h->htable)) * AVTAB_SIZE, GFP_KERNEL);
-+      if (!h->htable)
-+              return -ENOMEM;
-+      for (i = 0; i < AVTAB_SIZE; i++)
-+              h->htable[i] = NULL;
-+      h->nel = 0;
-+      return 0;
-+}
-+
-+void avtab_hash_eval(struct avtab *h, char *tag)
-+{
-+      int i, chain_len, slots_used, max_chain_len;
-+      struct avtab_node *cur;
-+
-+      slots_used = 0;
-+      max_chain_len = 0;
-+      for (i = 0; i < AVTAB_SIZE; i++) {
-+              cur = h->htable[i];
-+              if (cur) {
-+                      slots_used++;
-+                      chain_len = 0;
-+                      while (cur) {
-+                              chain_len++;
-+                              cur = cur->next;
-+                      }
-+
-+                      if (chain_len > max_chain_len)
-+                              max_chain_len = chain_len;
-+              }
-+      }
-+
-+      printk(KERN_INFO "%s:  %d entries and %d/%d buckets used, longest "
-+             "chain length %d\n", tag, h->nel, slots_used, AVTAB_SIZE,
-+             max_chain_len);
-+}
-+
-+int avtab_read(struct avtab *a, void *fp, u32 config)
-+{
-+      int i, rc = -EINVAL;
-+      struct avtab_key avkey;
-+      struct avtab_datum avdatum;
-+      u32 *buf;
-+      u32 nel, items, items2;
-+
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf) {
-+              printk(KERN_ERR "security: avtab: truncated table\n");
-+              goto bad;
-+      }
-+      nel = le32_to_cpu(buf[0]);
-+      if (!nel) {
-+              printk(KERN_ERR "security: avtab: table is empty\n");
-+              goto bad;
-+      }
-+      for (i = 0; i < nel; i++) {
-+              memset(&avkey, 0, sizeof(avkey));
-+              memset(&avdatum, 0, sizeof(avdatum));
-+
-+              buf = next_entry(fp, sizeof(u32));
-+              if (!buf) {
-+                      printk(KERN_ERR "security: avtab: truncated entry\n");
-+                      goto bad;
-+              }
-+              items2 = le32_to_cpu(buf[0]);
-+              buf = next_entry(fp, sizeof(u32)*items2);
-+              if (!buf) {
-+                      printk(KERN_ERR "security: avtab: truncated entry\n");
-+                      goto bad;
-+              }
-+              items = 0;
-+              avkey.source_type = le32_to_cpu(buf[items++]);
-+              avkey.target_type = le32_to_cpu(buf[items++]);
-+              avkey.target_class = le32_to_cpu(buf[items++]);
-+              avdatum.specified = le32_to_cpu(buf[items++]);
-+              if (!(avdatum.specified & (AVTAB_AV | AVTAB_TYPE))) {
-+                      printk(KERN_ERR "security: avtab: null entry\n");
-+                      goto bad;
-+              }
-+              if ((avdatum.specified & AVTAB_AV) &&
-+                  (avdatum.specified & AVTAB_TYPE)) {
-+                      printk(KERN_ERR "security: avtab: entry has both "
-+                             "access vectors and types\n");
-+                      goto bad;
-+              }
-+              if (avdatum.specified & AVTAB_AV) {
-+                      if (avdatum.specified & AVTAB_ALLOWED)
-+                              avtab_allowed(&avdatum) = le32_to_cpu(buf[items++]);
-+                      if (avdatum.specified & AVTAB_AUDITDENY)
-+                              avtab_auditdeny(&avdatum) = le32_to_cpu(buf[items++]);
-+                      if (avdatum.specified & AVTAB_AUDITALLOW)
-+                              avtab_auditallow(&avdatum) = le32_to_cpu(buf[items++]);
-+              } else {
-+                      if (avdatum.specified & AVTAB_TRANSITION)
-+                              avtab_transition(&avdatum) = le32_to_cpu(buf[items++]);
-+                      if (avdatum.specified & AVTAB_CHANGE)
-+                              avtab_change(&avdatum) = le32_to_cpu(buf[items++]);
-+                      if (avdatum.specified & AVTAB_MEMBER)
-+                              avtab_member(&avdatum) = le32_to_cpu(buf[items++]);
-+              }
-+              if (items != items2) {
-+                      printk(KERN_ERR "security: avtab: entry only had %d "
-+                             "items, expected %d\n", items2, items);
-+                      goto bad;
-+              }
-+              rc = avtab_insert(a, &avkey, &avdatum);
-+              if (rc) {
-+                      if (rc == -ENOMEM)
-+                              printk(KERN_ERR "security: avtab: out of memory\n");
-+                      if (rc == -EEXIST)
-+                              printk(KERN_ERR "security: avtab: duplicate entry\n");
-+                      goto bad;
-+              }
-+      }
-+
-+      rc = 0;
-+out:
-+      return rc;
-+
-+bad:
-+      avtab_destroy(a);
-+      goto out;
-+}
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/avtab.h     2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,68 @@
-+/*
-+ * An access vector table (avtab) is a hash table
-+ * of access vectors and transition types indexed
-+ * by a type pair and a class.  An access vector
-+ * table is used to represent the type enforcement
-+ * tables.
-+ *
-+ *  Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_AVTAB_H_
-+#define _SS_AVTAB_H_
-+
-+struct avtab_key {
-+      u32 source_type;        /* source type */
-+      u32 target_type;        /* target type */
-+      u32 target_class;       /* target object class */
-+};
-+
-+struct avtab_datum {
-+#define AVTAB_ALLOWED     1
-+#define AVTAB_AUDITALLOW  2
-+#define AVTAB_AUDITDENY   4
-+#define AVTAB_AV         (AVTAB_ALLOWED | AVTAB_AUDITALLOW | AVTAB_AUDITDENY)
-+#define AVTAB_TRANSITION 16
-+#define AVTAB_MEMBER     32
-+#define AVTAB_CHANGE     64
-+#define AVTAB_TYPE       (AVTAB_TRANSITION | AVTAB_MEMBER | AVTAB_CHANGE)
-+      u32 specified;  /* what fields are specified */
-+      u32 data[3];    /* access vectors or types */
-+#define avtab_allowed(x) (x)->data[0]
-+#define avtab_auditdeny(x) (x)->data[1]
-+#define avtab_auditallow(x) (x)->data[2]
-+#define avtab_transition(x) (x)->data[0]
-+#define avtab_change(x) (x)->data[1]
-+#define avtab_member(x) (x)->data[2]
-+};
-+
-+struct avtab_node {
-+      struct avtab_key key;
-+      struct avtab_datum datum;
-+      struct avtab_node *next;
-+};
-+
-+struct avtab {
-+      struct avtab_node **htable;
-+      u32 nel;        /* number of elements */
-+};
-+
-+int avtab_init(struct avtab *);
-+int avtab_insert(struct avtab *h, struct avtab_key *k, struct avtab_datum *d);
-+struct avtab_datum *avtab_search(struct avtab *h, struct avtab_key *k, int specified);
-+void avtab_destroy(struct avtab *h);
-+int avtab_map(struct avtab *h,
-+            int (*apply) (struct avtab_key *k,
-+                          struct avtab_datum *d,
-+                          void *args),
-+            void *args);
-+void avtab_hash_eval(struct avtab *h, char *tag);
-+int avtab_read(struct avtab *a, void *fp, u32 config);
-+
-+#define AVTAB_HASH_BITS 15
-+#define AVTAB_HASH_BUCKETS (1 << AVTAB_HASH_BITS)
-+#define AVTAB_HASH_MASK (AVTAB_HASH_BUCKETS-1)
-+
-+#define AVTAB_SIZE AVTAB_HASH_BUCKETS
-+
-+#endif        /* _SS_AVTAB_H_ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/constraint.h        2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,54 @@
-+/*
-+ * A constraint is a condition that must be satisfied in
-+ * order for one or more permissions to be granted.
-+ * Constraints are used to impose additional restrictions
-+ * beyond the type-based rules in `te' or the role-based
-+ * transition rules in `rbac'.  Constraints are typically
-+ * used to prevent a process from transitioning to a new user
-+ * identity or role unless it is in a privileged type.
-+ * Constraints are likewise typically used to prevent a
-+ * process from labeling an object with a different user
-+ * identity.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_CONSTRAINT_H_
-+#define _SS_CONSTRAINT_H_
-+
-+#include "ebitmap.h"
-+
-+#define CEXPR_MAXDEPTH 5
-+
-+struct constraint_expr {
-+#define CEXPR_NOT             1 /* not expr */
-+#define CEXPR_AND             2 /* expr and expr */
-+#define CEXPR_OR              3 /* expr or expr */
-+#define CEXPR_ATTR            4 /* attr op attr */
-+#define CEXPR_NAMES           5 /* attr op names */
-+      u32 expr_type;          /* expression type */
-+
-+#define CEXPR_USER 1          /* user */
-+#define CEXPR_ROLE 2          /* role */
-+#define CEXPR_TYPE 4          /* type */
-+#define CEXPR_TARGET 8                /* target if set, source otherwise */
-+      u32 attr;               /* attribute */
-+
-+#define CEXPR_EQ     1                /* == or eq */
-+#define CEXPR_NEQ    2                /* != */
-+#define CEXPR_DOM    3                /* dom */
-+#define CEXPR_DOMBY  4                /* domby  */
-+#define CEXPR_INCOMP 5                /* incomp */
-+      u32 op;                 /* operator */
-+
-+      struct ebitmap names;   /* names */
-+
-+      struct constraint_expr *next;   /* next expression */
-+};
-+
-+struct constraint_node {
-+      u32 permissions;        /* constrained permissions */
-+      struct constraint_expr *expr;   /* constraint on permissions */
-+      struct constraint_node *next;   /* next constraint */
-+};
-+
-+#endif        /* _SS_CONSTRAINT_H_ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/context.h   2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,117 @@
-+/*
-+ * A security context is a set of security attributes
-+ * associated with each subject and object controlled
-+ * by the security policy.  Security contexts are
-+  * externally represented as variable-length strings
-+ * that can be interpreted by a user or application
-+ * with an understanding of the security policy.
-+ * Internally, the security server uses a simple
-+ * structure.  This structure is private to the
-+ * security server and can be changed without affecting
-+ * clients of the security server.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_CONTEXT_H_
-+#define _SS_CONTEXT_H_
-+
-+#include "ebitmap.h"
-+#include "mls_types.h"
-+
-+/*
-+ * A security context consists of an authenticated user
-+ * identity, a role, a type and a MLS range.
-+ */
-+struct context {
-+      u32 user;
-+      u32 role;
-+      u32 type;
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+      struct mls_range range;
-+#endif
-+};
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+
-+static inline void mls_context_init(struct context *c)
-+{
-+      memset(&c->range, 0, sizeof(c->range));
-+}
-+
-+static inline int mls_context_cpy(struct context *dst, struct context *src)
-+{
-+      int rc;
-+
-+      dst->range.level[0].sens = src->range.level[0].sens;
-+      rc = ebitmap_cpy(&dst->range.level[0].cat, &src->range.level[0].cat);
-+      if (rc)
-+              goto out;
-+
-+      dst->range.level[1].sens = src->range.level[1].sens;
-+      rc = ebitmap_cpy(&dst->range.level[1].cat, &src->range.level[1].cat);
-+      if (rc)
-+              ebitmap_destroy(&dst->range.level[0].cat);
-+out:
-+      return rc;
-+}
-+
-+static inline int mls_context_cmp(struct context *c1, struct context *c2)
-+{
-+      return ((c1->range.level[0].sens == c2->range.level[0].sens) &&
-+              ebitmap_cmp(&c1->range.level[0].cat,&c2->range.level[0].cat) &&
-+              (c1->range.level[1].sens == c2->range.level[1].sens) &&
-+              ebitmap_cmp(&c1->range.level[1].cat,&c2->range.level[1].cat));
-+}
-+
-+static inline void mls_context_destroy(struct context *c)
-+{
-+      ebitmap_destroy(&c->range.level[0].cat);
-+      ebitmap_destroy(&c->range.level[1].cat);
-+      mls_context_init(c);
-+}
-+
-+#else
-+
-+static inline void mls_context_init(struct context *c)
-+{ }
-+
-+static inline int mls_context_cpy(struct context *dst, struct context *src)
-+{ return 0; }
-+
-+static inline int mls_context_cmp(struct context *c1, struct context *c2)
-+{ return 1; }
-+
-+static inline void mls_context_destroy(struct context *c)
-+{ }
-+
-+#endif
-+
-+static inline void context_init(struct context *c)
-+{
-+      memset(c, 0, sizeof(*c));
-+}
-+
-+static inline int context_cpy(struct context *dst, struct context *src)
-+{
-+      dst->user = src->user;
-+      dst->role = src->role;
-+      dst->type = src->type;
-+      return mls_context_cpy(dst, src);
-+}
-+
-+static inline void context_destroy(struct context *c)
-+{
-+      c->user = c->role = c->type = 0;
-+      mls_context_destroy(c);
-+}
-+
-+static inline int context_cmp(struct context *c1, struct context *c2)
-+{
-+      return ((c1->user == c2->user) &&
-+              (c1->role == c2->role) &&
-+              (c1->type == c2->type) &&
-+              mls_context_cmp(c1, c2));
-+}
-+
-+#endif        /* _SS_CONTEXT_H_ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/ebitmap.c   2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,332 @@
-+/*
-+ * Implementation of the extensible bitmap type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "ebitmap.h"
-+#include "policydb.h"
-+
-+int ebitmap_or(struct ebitmap *dst, struct ebitmap *e1, struct ebitmap *e2)
-+{
-+      struct ebitmap_node *n1, *n2, *new, *prev;
-+
-+      ebitmap_init(dst);
-+
-+      n1 = e1->node;
-+      n2 = e2->node;
-+      prev = 0;
-+      while (n1 || n2) {
-+              new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+              if (!new) {
-+                      ebitmap_destroy(dst);
-+                      return -ENOMEM;
-+              }
-+              memset(new, 0, sizeof(*new));
-+              if (n1 && n2 && n1->startbit == n2->startbit) {
-+                      new->startbit = n1->startbit;
-+                      new->map = n1->map | n2->map;
-+                      n1 = n1->next;
-+                      n2 = n2->next;
-+              } else if (!n2 || (n1 && n1->startbit < n2->startbit)) {
-+                      new->startbit = n1->startbit;
-+                      new->map = n1->map;
-+                      n1 = n1->next;
-+              } else {
-+                      new->startbit = n2->startbit;
-+                      new->map = n2->map;
-+                      n2 = n2->next;
-+              }
-+
-+              new->next = 0;
-+              if (prev)
-+                      prev->next = new;
-+              else
-+                      dst->node = new;
-+              prev = new;
-+      }
-+
-+      dst->highbit = (e1->highbit > e2->highbit) ? e1->highbit : e2->highbit;
-+      return 0;
-+}
-+
-+int ebitmap_cmp(struct ebitmap *e1, struct ebitmap *e2)
-+{
-+      struct ebitmap_node *n1, *n2;
-+
-+      if (e1->highbit != e2->highbit)
-+              return 0;
-+
-+      n1 = e1->node;
-+      n2 = e2->node;
-+      while (n1 && n2 &&
-+             (n1->startbit == n2->startbit) &&
-+             (n1->map == n2->map)) {
-+              n1 = n1->next;
-+              n2 = n2->next;
-+      }
-+
-+      if (n1 || n2)
-+              return 0;
-+
-+      return 1;
-+}
-+
-+int ebitmap_cpy(struct ebitmap *dst, struct ebitmap *src)
-+{
-+      struct ebitmap_node *n, *new, *prev;
-+
-+      ebitmap_init(dst);
-+      n = src->node;
-+      prev = 0;
-+      while (n) {
-+              new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+              if (!new) {
-+                      ebitmap_destroy(dst);
-+                      return -ENOMEM;
-+              }
-+              memset(new, 0, sizeof(*new));
-+              new->startbit = n->startbit;
-+              new->map = n->map;
-+              new->next = 0;
-+              if (prev)
-+                      prev->next = new;
-+              else
-+                      dst->node = new;
-+              prev = new;
-+              n = n->next;
-+      }
-+
-+      dst->highbit = src->highbit;
-+      return 0;
-+}
-+
-+int ebitmap_contains(struct ebitmap *e1, struct ebitmap *e2)
-+{
-+      struct ebitmap_node *n1, *n2;
-+
-+      if (e1->highbit < e2->highbit)
-+              return 0;
-+
-+      n1 = e1->node;
-+      n2 = e2->node;
-+      while (n1 && n2 && (n1->startbit <= n2->startbit)) {
-+              if (n1->startbit < n2->startbit) {
-+                      n1 = n1->next;
-+                      continue;
-+              }
-+              if ((n1->map & n2->map) != n2->map)
-+                      return 0;
-+
-+              n1 = n1->next;
-+              n2 = n2->next;
-+      }
-+
-+      if (n2)
-+              return 0;
-+
-+      return 1;
-+}
-+
-+int ebitmap_get_bit(struct ebitmap *e, unsigned long bit)
-+{
-+      struct ebitmap_node *n;
-+
-+      if (e->highbit < bit)
-+              return 0;
-+
-+      n = e->node;
-+      while (n && (n->startbit <= bit)) {
-+              if ((n->startbit + MAPSIZE) > bit) {
-+                      if (n->map & (MAPBIT << (bit - n->startbit)))
-+                              return 1;
-+                      else
-+                              return 0;
-+              }
-+              n = n->next;
-+      }
-+
-+      return 0;
-+}
-+
-+int ebitmap_set_bit(struct ebitmap *e, unsigned long bit, int value)
-+{
-+      struct ebitmap_node *n, *prev, *new;
-+
-+      prev = 0;
-+      n = e->node;
-+      while (n && n->startbit <= bit) {
-+              if ((n->startbit + MAPSIZE) > bit) {
-+                      if (value) {
-+                              n->map |= (MAPBIT << (bit - n->startbit));
-+                      } else {
-+                              n->map &= ~(MAPBIT << (bit - n->startbit));
-+                              if (!n->map) {
-+                                      /* drop this node from the bitmap */
-+
-+                                      if (!n->next) {
-+                                              /*
-+                                               * this was the highest map
-+                                               * within the bitmap
-+                                               */
-+                                              if (prev)
-+                                                      e->highbit = prev->startbit + MAPSIZE;
-+                                              else
-+                                                      e->highbit = 0;
-+                                      }
-+                                      if (prev)
-+                                              prev->next = n->next;
-+                                      else
-+                                              e->node = n->next;
-+
-+                                      kfree(n);
-+                              }
-+                      }
-+                      return 0;
-+              }
-+              prev = n;
-+              n = n->next;
-+      }
-+
-+      if (!value)
-+              return 0;
-+
-+      new = kmalloc(sizeof(*new), GFP_ATOMIC);
-+      if (!new)
-+              return -ENOMEM;
-+      memset(new, 0, sizeof(*new));
-+
-+      new->startbit = bit & ~(MAPSIZE - 1);
-+      new->map = (MAPBIT << (bit - new->startbit));
-+
-+      if (!n)
-+              /* this node will be the highest map within the bitmap */
-+              e->highbit = new->startbit + MAPSIZE;
-+
-+      if (prev) {
-+              new->next = prev->next;
-+              prev->next = new;
-+      } else {
-+              new->next = e->node;
-+              e->node = new;
-+      }
-+
-+      return 0;
-+}
-+
-+void ebitmap_destroy(struct ebitmap *e)
-+{
-+      struct ebitmap_node *n, *temp;
-+
-+      if (!e)
-+              return;
-+
-+      n = e->node;
-+      while (n) {
-+              temp = n;
-+              n = n->next;
-+              kfree(temp);
-+      }
-+
-+      e->highbit = 0;
-+      e->node = 0;
-+      return;
-+}
-+
-+int ebitmap_read(struct ebitmap *e, void *fp)
-+{
-+      int rc = -EINVAL;
-+      struct ebitmap_node *n, *l;
-+      u32 *buf, mapsize, count, i;
-+      u64 map;
-+
-+      ebitmap_init(e);
-+
-+      buf = next_entry(fp, sizeof(u32)*3);
-+      if (!buf)
-+              goto out;
-+
-+      mapsize = le32_to_cpu(buf[0]);
-+      e->highbit = le32_to_cpu(buf[1]);
-+      count = le32_to_cpu(buf[2]);
-+
-+      if (mapsize != MAPSIZE) {
-+              printk(KERN_ERR "security: ebitmap: map size %d does not "
-+                     "match my size %d (high bit was %d)\n", mapsize,
-+                     MAPSIZE, e->highbit);
-+              goto out;
-+      }
-+      if (!e->highbit) {
-+              e->node = NULL;
-+              goto ok;
-+      }
-+      if (e->highbit & (MAPSIZE - 1)) {
-+              printk(KERN_ERR "security: ebitmap: high bit (%d) is not a "
-+                     "multiple of the map size (%d)\n", e->highbit, MAPSIZE);
-+              goto bad;
-+      }
-+      l = NULL;
-+      for (i = 0; i < count; i++) {
-+              buf = next_entry(fp, sizeof(u32));
-+              if (!buf) {
-+                      printk(KERN_ERR "security: ebitmap: truncated map\n");
-+                      goto bad;
-+              }
-+              n = kmalloc(sizeof(*n), GFP_KERNEL);
-+              if (!n) {
-+                      printk(KERN_ERR "security: ebitmap: out of memory\n");
-+                      rc = -ENOMEM;
-+                      goto bad;
-+              }
-+              memset(n, 0, sizeof(*n));
-+
-+              n->startbit = le32_to_cpu(buf[0]);
-+
-+              if (n->startbit & (MAPSIZE - 1)) {
-+                      printk(KERN_ERR "security: ebitmap start bit (%d) is "
-+                             "not a multiple of the map size (%d)\n",
-+                             n->startbit, MAPSIZE);
-+                      goto bad_free;
-+              }
-+              if (n->startbit > (e->highbit - MAPSIZE)) {
-+                      printk(KERN_ERR "security: ebitmap start bit (%d) is "
-+                             "beyond the end of the bitmap (%d)\n",
-+                             n->startbit, (e->highbit - MAPSIZE));
-+                      goto bad_free;
-+              }
-+              buf = next_entry(fp, sizeof(u64));
-+              if (!buf) {
-+                      printk(KERN_ERR "security: ebitmap: truncated map\n");
-+                      goto bad_free;
-+              }
-+              memcpy(&map, buf, sizeof(u64));
-+              n->map = le64_to_cpu(map);
-+
-+              if (!n->map) {
-+                      printk(KERN_ERR "security: ebitmap: null map in "
-+                             "ebitmap (startbit %d)\n", n->startbit);
-+                      goto bad_free;
-+              }
-+              if (l) {
-+                      if (n->startbit <= l->startbit) {
-+                              printk(KERN_ERR "security: ebitmap: start "
-+                                     "bit %d comes after start bit %d\n",
-+                                     n->startbit, l->startbit);
-+                              goto bad_free;
-+                      }
-+                      l->next = n;
-+              } else
-+                      e->node = n;
-+
-+              l = n;
-+      }
-+
-+ok:
-+      rc = 0;
-+out:
-+      return rc;
-+bad_free:
-+      kfree(n);
-+bad:
-+      ebitmap_destroy(e);
-+      goto out;
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/ebitmap.h   2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,49 @@
-+/*
-+ * An extensible bitmap is a bitmap that supports an
-+ * arbitrary number of bits.  Extensible bitmaps are
-+ * used to represent sets of values, such as types,
-+ * roles, categories, and classes.
-+ *
-+ * Each extensible bitmap is implemented as a linked
-+ * list of bitmap nodes, where each bitmap node has
-+ * an explicitly specified starting bit position within
-+ * the total bitmap.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_EBITMAP_H_
-+#define _SS_EBITMAP_H_
-+
-+#define MAPTYPE u64                   /* portion of bitmap in each node */
-+#define MAPSIZE (sizeof(MAPTYPE) * 8) /* number of bits in node bitmap */
-+#define MAPBIT  1ULL                  /* a bit in the node bitmap */
-+
-+struct ebitmap_node {
-+      u32 startbit;           /* starting position in the total bitmap */
-+      MAPTYPE map;            /* this node's portion of the bitmap */
-+      struct ebitmap_node *next;
-+};
-+
-+struct ebitmap {
-+      struct ebitmap_node *node;      /* first node in the bitmap */
-+      u32 highbit;    /* highest position in the total bitmap */
-+};
-+
-+#define ebitmap_length(e) ((e)->highbit)
-+#define ebitmap_startbit(e) ((e)->node ? (e)->node->startbit : 0)
-+
-+static inline void ebitmap_init(struct ebitmap *e)
-+{
-+      memset(e, 0, sizeof(*e));
-+}
-+
-+int ebitmap_cmp(struct ebitmap *e1, struct ebitmap *e2);
-+int ebitmap_or(struct ebitmap *dst, struct ebitmap *e1, struct ebitmap *e2);
-+int ebitmap_cpy(struct ebitmap *dst, struct ebitmap *src);
-+int ebitmap_contains(struct ebitmap *e1, struct ebitmap *e2);
-+int ebitmap_get_bit(struct ebitmap *e, unsigned long bit);
-+int ebitmap_set_bit(struct ebitmap *e, unsigned long bit, int value);
-+void ebitmap_destroy(struct ebitmap *e);
-+int ebitmap_read(struct ebitmap *e, void *fp);
-+
-+#endif        /* _SS_EBITMAP_H_ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/global.h    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,17 @@
-+#ifndef _SS_GLOBAL_H_
-+#define _SS_GLOBAL_H_
-+
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/string.h>
-+#include <linux/ctype.h>
-+#include <linux/in.h>
-+#include <linux/spinlock.h>
-+#include <asm/semaphore.h>
-+
-+#include "flask.h"
-+#include "avc.h"
-+#include "avc_ss.h"
-+#include "security.h"
-+
-+#endif /* _SS_GLOBAL_H_ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/hashtab.c   2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,277 @@
-+/*
-+ * Implementation of the hash table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "hashtab.h"
-+
-+struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key),
-+                               int (*keycmp)(struct hashtab *h, void *key1, void *key2),
-+                               u32 size)
-+{
-+      struct hashtab *p;
-+      u32 i;
-+
-+      p = kmalloc(sizeof(*p), GFP_KERNEL);
-+      if (p == NULL)
-+              return p;
-+
-+      memset(p, 0, sizeof(*p));
-+      p->size = size;
-+      p->nel = 0;
-+      p->hash_value = hash_value;
-+      p->keycmp = keycmp;
-+      p->htable = kmalloc(sizeof(*(p->htable)) * size, GFP_KERNEL);
-+      if (p->htable == NULL) {
-+              kfree(p);
-+              return NULL;
-+      }
-+
-+      for (i = 0; i < size; i++)
-+              p->htable[i] = NULL;
-+
-+      return p;
-+}
-+
-+int hashtab_insert(struct hashtab *h, void *key, void *datum)
-+{
-+      u32 hvalue;
-+      struct hashtab_node *prev, *cur, *newnode;
-+
-+      if (!h || h->nel == HASHTAB_MAX_NODES)
-+              return -EINVAL;
-+
-+      hvalue = h->hash_value(h, key);
-+      prev = NULL;
-+      cur = h->htable[hvalue];
-+      while (cur && h->keycmp(h, key, cur->key) > 0) {
-+              prev = cur;
-+              cur = cur->next;
-+      }
-+
-+      if (cur && (h->keycmp(h, key, cur->key) == 0))
-+              return -EEXIST;
-+
-+      newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);
-+      if (newnode == NULL)
-+              return -ENOMEM;
-+      memset(newnode, 0, sizeof(*newnode));
-+      newnode->key = key;
-+      newnode->datum = datum;
-+      if (prev) {
-+              newnode->next = prev->next;
-+              prev->next = newnode;
-+      } else {
-+              newnode->next = h->htable[hvalue];
-+              h->htable[hvalue] = newnode;
-+      }
-+
-+      h->nel++;
-+      return 0;
-+}
-+
-+int hashtab_remove(struct hashtab *h, void *key,
-+                 void (*destroy)(void *k, void *d, void *args),
-+                 void *args)
-+{
-+      u32 hvalue;
-+      struct hashtab_node *cur, *last;
-+
-+      if (!h)
-+              return -EINVAL;
-+
-+      hvalue = h->hash_value(h, key);
-+      last = NULL;
-+      cur = h->htable[hvalue];
-+      while (cur != NULL && h->keycmp(h, key, cur->key) > 0) {
-+              last = cur;
-+              cur = cur->next;
-+      }
-+
-+      if (cur == NULL || (h->keycmp(h, key, cur->key) != 0))
-+              return -ENOENT;
-+
-+      if (last == NULL)
-+              h->htable[hvalue] = cur->next;
-+      else
-+              last->next = cur->next;
-+
-+      if (destroy)
-+              destroy(cur->key, cur->datum, args);
-+      kfree(cur);
-+      h->nel--;
-+      return 0;
-+}
-+
-+int hashtab_replace(struct hashtab *h, void *key, void *datum,
-+                  void (*destroy)(void *k, void *d, void *args),
-+                  void *args)
-+{
-+      u32 hvalue;
-+      struct hashtab_node *prev, *cur, *newnode;
-+
-+      if (!h)
-+              return -EINVAL;
-+
-+      hvalue = h->hash_value(h, key);
-+      prev = NULL;
-+      cur = h->htable[hvalue];
-+      while (cur != NULL && h->keycmp(h, key, cur->key) > 0) {
-+              prev = cur;
-+              cur = cur->next;
-+      }
-+
-+      if (cur && (h->keycmp(h, key, cur->key) == 0)) {
-+              if (destroy)
-+                      destroy(cur->key, cur->datum, args);
-+              cur->key = key;
-+              cur->datum = datum;
-+      } else {
-+              newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);
-+              if (newnode == NULL)
-+                      return -ENOMEM;
-+              memset(newnode, 0, sizeof(*newnode));
-+              newnode->key = key;
-+              newnode->datum = datum;
-+              if (prev) {
-+                      newnode->next = prev->next;
-+                      prev->next = newnode;
-+              } else {
-+                      newnode->next = h->htable[hvalue];
-+                      h->htable[hvalue] = newnode;
-+              }
-+      }
-+
-+      return 0;
-+}
-+
-+void *hashtab_search(struct hashtab *h, void *key)
-+{
-+      u32 hvalue;
-+      struct hashtab_node *cur;
-+
-+      if (!h)
-+              return NULL;
-+
-+      hvalue = h->hash_value(h, key);
-+      cur = h->htable[hvalue];
-+      while (cur != NULL && h->keycmp(h, key, cur->key) > 0)
-+              cur = cur->next;
-+
-+      if (cur == NULL || (h->keycmp(h, key, cur->key) != 0))
-+              return NULL;
-+
-+      return cur->datum;
-+}
-+
-+void hashtab_destroy(struct hashtab *h)
-+{
-+      u32 i;
-+      struct hashtab_node *cur, *temp;
-+
-+      if (!h)
-+              return;
-+
-+      for (i = 0; i < h->size; i++) {
-+              cur = h->htable[i];
-+              while (cur != NULL) {
-+                      temp = cur;
-+                      cur = cur->next;
-+                      kfree(temp);
-+              }
-+              h->htable[i] = NULL;
-+      }
-+
-+      kfree(h->htable);
-+      h->htable = NULL;
-+
-+      kfree(h);
-+}
-+
-+int hashtab_map(struct hashtab *h,
-+              int (*apply)(void *k, void *d, void *args),
-+              void *args)
-+{
-+      u32 i;
-+      int ret;
-+      struct hashtab_node *cur;
-+
-+      if (!h)
-+              return 0;
-+
-+      for (i = 0; i < h->size; i++) {
-+              cur = h->htable[i];
-+              while (cur != NULL) {
-+                      ret = apply(cur->key, cur->datum, args);
-+                      if (ret)
-+                              return ret;
-+                      cur = cur->next;
-+              }
-+      }
-+      return 0;
-+}
-+
-+
-+void hashtab_map_remove_on_error(struct hashtab *h,
-+                                 int (*apply)(void *k, void *d, void *args),
-+                                 void (*destroy)(void *k, void *d, void *args),
-+                                 void *args)
-+{
-+      u32 i;
-+      int ret;
-+      struct hashtab_node *last, *cur, *temp;
-+
-+      if (!h)
-+              return;
-+
-+      for (i = 0; i < h->size; i++) {
-+              last = NULL;
-+              cur = h->htable[i];
-+              while (cur != NULL) {
-+                      ret = apply(cur->key, cur->datum, args);
-+                      if (ret) {
-+                              if (last)
-+                                      last->next = cur->next;
-+                              else
-+                                      h->htable[i] = cur->next;
-+
-+                              temp = cur;
-+                              cur = cur->next;
-+                              if (destroy)
-+                                      destroy(temp->key, temp->datum, args);
-+                              kfree(temp);
-+                              h->nel--;
-+                      } else {
-+                              last = cur;
-+                              cur = cur->next;
-+                      }
-+              }
-+      }
-+      return;
-+}
-+
-+void hashtab_stat(struct hashtab *h, struct hashtab_info *info)
-+{
-+      u32 i, chain_len, slots_used, max_chain_len;
-+      struct hashtab_node *cur;
-+
-+      slots_used = 0;
-+      max_chain_len = 0;
-+      for (slots_used = max_chain_len = i = 0; i < h->size; i++) {
-+              cur = h->htable[i];
-+              if (cur) {
-+                      slots_used++;
-+                      chain_len = 0;
-+                      while (cur) {
-+                              chain_len++;
-+                              cur = cur->next;
-+                      }
-+
-+                      if (chain_len > max_chain_len)
-+                              max_chain_len = chain_len;
-+              }
-+      }
-+
-+      info->slots_used = slots_used;
-+      info->max_chain_len = max_chain_len;
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/hashtab.h   2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,125 @@
-+/*
-+ * A hash table (hashtab) maintains associations between
-+ * key values and datum values.  The type of the key values
-+ * and the type of the datum values is arbitrary.  The
-+ * functions for hash computation and key comparison are
-+ * provided by the creator of the table.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_HASHTAB_H_
-+#define _SS_HASHTAB_H_
-+
-+#define HASHTAB_MAX_NODES     0xffffffff
-+
-+struct hashtab_node {
-+      void *key;
-+      void *datum;
-+      struct hashtab_node *next;
-+};
-+
-+struct hashtab {
-+      struct hashtab_node **htable;   /* hash table */
-+      u32 size;                       /* number of slots in hash table */
-+      u32 nel;                        /* number of elements in hash table */
-+      u32 (*hash_value)(struct hashtab *h, void *key);
-+                                      /* hash function */
-+      int (*keycmp)(struct hashtab *h, void *key1, void *key2);
-+                                      /* key comparison function */
-+};
-+
-+struct hashtab_info {
-+      u32 slots_used;
-+      u32 max_chain_len;
-+};
-+
-+/*
-+ * Creates a new hash table with the specified characteristics.
-+ *
-+ * Returns NULL if insufficent space is available or
-+ * the new hash table otherwise.
-+ */
-+struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key),
-+                               int (*keycmp)(struct hashtab *h, void *key1, void *key2),
-+                               u32 size);
-+
-+/*
-+ * Inserts the specified (key, datum) pair into the specified hash table.
-+ *
-+ * Returns -ENOMEM on memory allocation error,
-+ * -EEXIST if there is already an entry with the same key,
-+ * -EINVAL for general errors or
-+ * 0 otherwise.
-+ */
-+int hashtab_insert(struct hashtab *h, void *k, void *d);
-+
-+/*
-+ * Removes the entry with the specified key from the hash table.
-+ * Applies the specified destroy function to (key,datum,args) for
-+ * the entry.
-+ *
-+ * Returns -ENOENT if no entry has the specified key,
-+ * -EINVAL for general errors or
-+ *0 otherwise.
-+ */
-+int hashtab_remove(struct hashtab *h, void *k,
-+                 void (*destroy)(void *k, void *d, void *args),
-+                 void *args);
-+
-+/*
-+ * Insert or replace the specified (key, datum) pair in the specified
-+ * hash table.  If an entry for the specified key already exists,
-+ * then the specified destroy function is applied to (key,datum,args)
-+ * for the entry prior to replacing the entry's contents.
-+ *
-+ * Returns -ENOMEM if insufficient space is available,
-+ * -EINVAL for general errors or
-+ * 0 otherwise.
-+ */
-+int hashtab_replace(struct hashtab *h, void *k, void *d,
-+                  void (*destroy)(void *k, void *d, void *args),
-+                  void *args);
-+
-+/*
-+ * Searches for the entry with the specified key in the hash table.
-+ *
-+ * Returns NULL if no entry has the specified key or
-+ * the datum of the entry otherwise.
-+ */
-+void *hashtab_search(struct hashtab *h, void *k);
-+
-+/*
-+ * Destroys the specified hash table.
-+ */
-+void hashtab_destroy(struct hashtab *h);
-+
-+/*
-+ * Applies the specified apply function to (key,datum,args)
-+ * for each entry in the specified hash table.
-+ *
-+ * The order in which the function is applied to the entries
-+ * is dependent upon the internal structure of the hash table.
-+ *
-+ * If apply returns a non-zero status, then hashtab_map will cease
-+ * iterating through the hash table and will propagate the error
-+ * return to its caller.
-+ */
-+int hashtab_map(struct hashtab *h,
-+              int (*apply)(void *k, void *d, void *args),
-+              void *args);
-+
-+/*
-+ * Same as hashtab_map, except that if apply returns a non-zero status,
-+ * then the (key,datum) pair will be removed from the hashtab and the
-+ * destroy function will be applied to (key,datum,args).
-+ */
-+void hashtab_map_remove_on_error(struct hashtab *h,
-+                                 int (*apply)(void *k, void *d, void *args),
-+                                 void (*destroy)(void *k, void *d, void *args),
-+                                 void *args);
-+
-+
-+/* Fill info with some hash table statistics */
-+void hashtab_stat(struct hashtab *h, struct hashtab_info *info);
-+
-+#endif        /* _SS_HASHTAB_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/Makefile    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,14 @@
-+#
-+# Makefile for building the SELinux security server as part of the kernel tree.
-+#
-+
-+EXTRA_CFLAGS += -Isecurity/selinux/include -include security/selinux/ss/global.h
-+
-+obj-y := ss.o
-+
-+ss-objs := ebitmap.o hashtab.o symtab.o sidtab.o avtab.o policydb.o services.o
-+
-+ifeq ($(CONFIG_SECURITY_SELINUX_MLS),y)
-+ss-objs += mls.o
-+endif
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/mls.c       2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,741 @@
-+/*
-+ * Implementation of the multi-level security (MLS) policy.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "mls.h"
-+#include "policydb.h"
-+#include "services.h"
-+
-+/*
-+ * Remove any permissions from `allowed' that are
-+ * denied by the MLS policy.
-+ */
-+void mls_compute_av(struct context *scontext,
-+                  struct context *tcontext,
-+                  struct class_datum *tclass,
-+                  u32 *allowed)
-+{
-+      unsigned int rel[2];
-+      int l;
-+
-+      for (l = 0; l < 2; l++)
-+              rel[l] = mls_level_relation(scontext->range.level[l],
-+                                          tcontext->range.level[l]);
-+
-+      if (rel[1] != MLS_RELATION_EQ) {
-+              if (rel[1] != MLS_RELATION_DOM &&
-+                  !ebitmap_get_bit(&policydb.trustedreaders, scontext->type - 1) &&
-+                  !ebitmap_get_bit(&policydb.trustedobjects, tcontext->type - 1)) {
-+                      /* read(s,t) = (s.high >= t.high) = False */
-+                      *allowed = (*allowed) & ~(tclass->mlsperms.read);
-+              }
-+              if (rel[1] != MLS_RELATION_DOMBY &&
-+                  !ebitmap_get_bit(&policydb.trustedreaders, tcontext->type - 1) &&
-+                  !ebitmap_get_bit(&policydb.trustedobjects, scontext->type - 1)) {
-+                      /* readby(s,t) = read(t,s) = False */
-+                      *allowed = (*allowed) & ~(tclass->mlsperms.readby);
-+              }
-+      }
-+      if (((rel[0] != MLS_RELATION_DOMBY && rel[0] != MLS_RELATION_EQ) ||
-+          ((!mls_level_eq(tcontext->range.level[0],
-+                          tcontext->range.level[1])) &&
-+           (rel[1] != MLS_RELATION_DOM && rel[1] != MLS_RELATION_EQ))) &&
-+          !ebitmap_get_bit(&policydb.trustedwriters, scontext->type - 1) &&
-+          !ebitmap_get_bit(&policydb.trustedobjects, tcontext->type - 1)) {
-+              /*
-+               * write(s,t) = ((s.low <= t.low = t.high) or (s.low
-+               * <= t.low <= t.high <= s.high)) = False
-+               */
-+              *allowed = (*allowed) & ~(tclass->mlsperms.write);
-+      }
-+
-+      if (((rel[0] != MLS_RELATION_DOM && rel[0] != MLS_RELATION_EQ) ||
-+          ((!mls_level_eq(scontext->range.level[0],
-+                          scontext->range.level[1])) &&
-+           (rel[1] != MLS_RELATION_DOMBY && rel[1] != MLS_RELATION_EQ))) &&
-+          !ebitmap_get_bit(&policydb.trustedwriters, tcontext->type - 1) &&
-+          !ebitmap_get_bit(&policydb.trustedobjects, scontext->type - 1)) {
-+              /* writeby(s,t) = write(t,s) = False */
-+              *allowed = (*allowed) & ~(tclass->mlsperms.writeby);
-+      }
-+}
-+
-+/*
-+ * Return the length in bytes for the MLS fields of the
-+ * security context string representation of `context'.
-+ */
-+int mls_compute_context_len(struct context * context)
-+{
-+      int i, l, len;
-+
-+
-+      len = 0;
-+      for (l = 0; l < 2; l++) {
-+              len += strlen(policydb.p_sens_val_to_name[context->range.level[l].sens - 1]) + 1;
-+
-+              for (i = 1; i <= ebitmap_length(&context->range.level[l].cat); i++)
-+                      if (ebitmap_get_bit(&context->range.level[l].cat, i - 1))
-+                              len += strlen(policydb.p_cat_val_to_name[i - 1]) + 1;
-+
-+              if (mls_level_relation(context->range.level[0], context->range.level[1])
-+                              == MLS_RELATION_EQ)
-+                      break;
-+      }
-+
-+      return len;
-+}
-+
-+/*
-+ * Write the security context string representation of
-+ * the MLS fields of `context' into the string `*scontext'.
-+ * Update `*scontext' to point to the end of the MLS fields.
-+ */
-+int mls_sid_to_context(struct context *context,
-+                     char **scontext)
-+{
-+      char *scontextp;
-+      int i, l;
-+
-+      scontextp = *scontext;
-+
-+      for (l = 0; l < 2; l++) {
-+              strcpy(scontextp,
-+                     policydb.p_sens_val_to_name[context->range.level[l].sens - 1]);
-+              scontextp += strlen(policydb.p_sens_val_to_name[context->range.level[l].sens - 1]);
-+              *scontextp = ':';
-+              scontextp++;
-+              for (i = 1; i <= ebitmap_length(&context->range.level[l].cat); i++)
-+                      if (ebitmap_get_bit(&context->range.level[l].cat, i - 1)) {
-+                              strcpy(scontextp, policydb.p_cat_val_to_name[i - 1]);
-+                              scontextp += strlen(policydb.p_cat_val_to_name[i - 1]);
-+                              *scontextp = ',';
-+                              scontextp++;
-+                      }
-+              if (mls_level_relation(context->range.level[0], context->range.level[1])
-+                              != MLS_RELATION_EQ) {
-+                      scontextp--;
-+                      sprintf(scontextp, "-");
-+                      scontextp++;
-+
-+              } else {
-+                      break;
-+              }
-+      }
-+
-+      *scontext = scontextp;
-+      return 0;
-+}
-+
-+/*
-+ * Return 1 if the MLS fields in the security context
-+ * structure `c' are valid.  Return 0 otherwise.
-+ */
-+int mls_context_isvalid(struct policydb *p, struct context *c)
-+{
-+      unsigned int relation;
-+      struct level_datum *levdatum;
-+      struct user_datum *usrdatum;
-+      struct mls_range_list *rnode;
-+      int i, l;
-+
-+      /*
-+       * MLS range validity checks: high must dominate low, low level must
-+       * be valid (category set <-> sensitivity check), and high level must
-+       * be valid (category set <-> sensitivity check)
-+       */
-+      relation = mls_level_relation(c->range.level[1],
-+                                    c->range.level[0]);
-+      if (!(relation & (MLS_RELATION_DOM | MLS_RELATION_EQ)))
-+              /* High does not dominate low. */
-+              return 0;
-+
-+      for (l = 0; l < 2; l++) {
-+              if (!c->range.level[l].sens || c->range.level[l].sens > p->p_levels.nprim)
-+                      return 0;
-+              levdatum = hashtab_search(p->p_levels.table,
-+                      p->p_sens_val_to_name[c->range.level[l].sens - 1]);
-+              if (!levdatum)
-+                      return 0;
-+
-+              for (i = 1; i <= ebitmap_length(&c->range.level[l].cat); i++) {
-+                      if (ebitmap_get_bit(&c->range.level[l].cat, i - 1)) {
-+                              if (i > p->p_cats.nprim)
-+                                      return 0;
-+                              if (!ebitmap_get_bit(&levdatum->level->cat, i - 1))
-+                                      /*
-+                                       * Category may not be associated with
-+                                       * sensitivity in low level.
-+                                       */
-+                                      return 0;
-+                      }
-+              }
-+      }
-+
-+      if (c->role == OBJECT_R_VAL)
-+              return 1;
-+
-+      /*
-+       * User must be authorized for the MLS range.
-+       */
-+      if (!c->user || c->user > p->p_users.nprim)
-+              return 0;
-+      usrdatum = p->user_val_to_struct[c->user - 1];
-+      for (rnode = usrdatum->ranges; rnode; rnode = rnode->next) {
-+              if (mls_range_contains(rnode->range, c->range))
-+                      break;
-+      }
-+      if (!rnode)
-+              /* user may not be associated with range */
-+              return 0;
-+
-+      return 1;
-+}
-+
-+
-+/*
-+ * Set the MLS fields in the security context structure
-+ * `context' based on the string representation in
-+ * the string `*scontext'.  Update `*scontext' to
-+ * point to the end of the string representation of
-+ * the MLS fields.
-+ *
-+ * This function modifies the string in place, inserting
-+ * NULL characters to terminate the MLS fields.
-+ */
-+int mls_context_to_sid(char oldc,
-+                     char **scontext,
-+                     struct context *context)
-+{
-+
-+      char delim;
-+      char *scontextp, *p;
-+      struct level_datum *levdatum;
-+      struct cat_datum *catdatum;
-+      int l, rc = -EINVAL;
-+
-+      if (!oldc) {
-+              /* No MLS component to the security context.  Try
-+                 to use a default 'unclassified' value. */
-+              levdatum = hashtab_search(policydb.p_levels.table,
-+                                        "unclassified");
-+              if (!levdatum)
-+                      goto out;
-+              context->range.level[0].sens = levdatum->level->sens;
-+              context->range.level[1].sens = context->range.level[0].sens;
-+              rc = 0;
-+              goto out;
-+      }
-+
-+      /* Extract low sensitivity. */
-+      scontextp = p = *scontext;
-+      while (*p && *p != ':' && *p != '-')
-+              p++;
-+
-+      delim = *p;
-+      if (delim != 0)
-+              *p++ = 0;
-+
-+      for (l = 0; l < 2; l++) {
-+              levdatum = hashtab_search(policydb.p_levels.table, scontextp);
-+              if (!levdatum)
-+                      goto out;
-+
-+              context->range.level[l].sens = levdatum->level->sens;
-+
-+              if (delim == ':') {
-+                      /* Extract low category set. */
-+                      while (1) {
-+                              scontextp = p;
-+                              while (*p && *p != ',' && *p != '-')
-+                                      p++;
-+                              delim = *p;
-+                              if (delim != 0)
-+                                      *p++ = 0;
-+
-+                              catdatum = hashtab_search(policydb.p_cats.table,
-+                                                        scontextp);
-+                              if (!catdatum)
-+                                      goto out;
-+
-+                              rc = ebitmap_set_bit(&context->range.level[l].cat,
-+                                                   catdatum->value - 1, 1);
-+                              if (rc)
-+                                      goto out;
-+                              if (delim != ',')
-+                                      break;
-+                      }
-+              }
-+              if (delim == '-') {
-+                      /* Extract high sensitivity. */
-+                      scontextp = p;
-+                      while (*p && *p != ':')
-+                              p++;
-+
-+                      delim = *p;
-+                      if (delim != 0)
-+                              *p++ = 0;
-+              } else
-+                      break;
-+      }
-+
-+      if (l == 0) {
-+              context->range.level[1].sens = context->range.level[0].sens;
-+              rc = ebitmap_cpy(&context->range.level[1].cat,
-+                               &context->range.level[0].cat);
-+              if (rc)
-+                      goto out;
-+      }
-+      *scontext = p;
-+      rc = 0;
-+out:
-+      return rc;
-+}
-+
-+/*
-+ * Copies the MLS range from `src' into `dst'.
-+ */
-+static inline int mls_copy_context(struct context *dst,
-+                                 struct context *src)
-+{
-+      int l, rc = 0;
-+
-+      /* Copy the MLS range from the source context */
-+      for (l = 0; l < 2; l++) {
-+
-+              dst->range.level[l].sens = src->range.level[l].sens;
-+              rc = ebitmap_cpy(&dst->range.level[l].cat,
-+                               &src->range.level[l].cat);
-+              if (rc)
-+                      break;
-+      }
-+
-+      return rc;
-+}
-+
-+/*
-+ * Convert the MLS fields in the security context
-+ * structure `c' from the values specified in the
-+ * policy `oldp' to the values specified in the policy `newp'.
-+ */
-+int mls_convert_context(struct policydb *oldp,
-+                      struct policydb *newp,
-+                      struct context *c)
-+{
-+      struct level_datum *levdatum;
-+      struct cat_datum *catdatum;
-+      struct ebitmap bitmap;
-+      int l, i;
-+
-+      for (l = 0; l < 2; l++) {
-+              levdatum = hashtab_search(newp->p_levels.table,
-+                      oldp->p_sens_val_to_name[c->range.level[l].sens - 1]);
-+
-+              if (!levdatum)
-+                      return -EINVAL;
-+              c->range.level[l].sens = levdatum->level->sens;
-+
-+              ebitmap_init(&bitmap);
-+              for (i = 1; i <= ebitmap_length(&c->range.level[l].cat); i++) {
-+                      if (ebitmap_get_bit(&c->range.level[l].cat, i - 1)) {
-+                              int rc;
-+
-+                              catdatum = hashtab_search(newp->p_cats.table,
-+                                              oldp->p_cat_val_to_name[i - 1]);
-+                              if (!catdatum)
-+                                      return -EINVAL;
-+                              rc = ebitmap_set_bit(&bitmap, catdatum->value - 1, 1);
-+                              if (rc)
-+                                      return rc;
-+                      }
-+              }
-+              ebitmap_destroy(&c->range.level[l].cat);
-+              c->range.level[l].cat = bitmap;
-+      }
-+
-+      return 0;
-+}
-+
-+int mls_compute_sid(struct context *scontext,
-+                  struct context *tcontext,
-+                  u16 tclass,
-+                  u32 specified,
-+                  struct context *newcontext)
-+{
-+      switch (specified) {
-+      case AVTAB_TRANSITION:
-+      case AVTAB_CHANGE:
-+              /* Use the process MLS attributes. */
-+              return mls_copy_context(newcontext, scontext);
-+      case AVTAB_MEMBER:
-+              /* Only polyinstantiate the MLS attributes if
-+                 the type is being polyinstantiated */
-+              if (newcontext->type != tcontext->type) {
-+                      /* Use the process MLS attributes. */
-+                      return mls_copy_context(newcontext, scontext);
-+              } else {
-+                      /* Use the related object MLS attributes. */
-+                      return mls_copy_context(newcontext, tcontext);
-+              }
-+      default:
-+              return -EINVAL;
-+      }
-+      return -EINVAL;
-+}
-+
-+void mls_user_destroy(struct user_datum *usrdatum)
-+{
-+      struct mls_range_list *rnode, *rtmp;
-+      rnode = usrdatum->ranges;
-+      while (rnode) {
-+              rtmp = rnode;
-+              rnode = rnode->next;
-+              ebitmap_destroy(&rtmp->range.level[0].cat);
-+              ebitmap_destroy(&rtmp->range.level[1].cat);
-+              kfree(rtmp);
-+      }
-+}
-+
-+int mls_read_perm(struct perm_datum *perdatum, void *fp)
-+{
-+      u32 *buf;
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf)
-+              return -EINVAL;
-+      perdatum->base_perms = le32_to_cpu(buf[0]);
-+      return 0;
-+}
-+
-+/*
-+ * Read a MLS level structure from a policydb binary
-+ * representation file.
-+ */
-+struct mls_level *mls_read_level(void *fp)
-+{
-+      struct mls_level *l;
-+      u32 *buf;
-+
-+      l = kmalloc(sizeof(*l), GFP_ATOMIC);
-+      if (!l) {
-+              printk(KERN_ERR "security: mls: out of memory\n");
-+              return NULL;
-+      }
-+      memset(l, 0, sizeof(*l));
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf) {
-+              printk(KERN_ERR "security: mls: truncated level\n");
-+              goto bad;
-+      }
-+      l->sens = cpu_to_le32(buf[0]);
-+
-+      if (ebitmap_read(&l->cat, fp)) {
-+              printk(KERN_ERR "security: mls:  error reading level "
-+                     "categories\n");
-+              goto bad;
-+      }
-+      return l;
-+
-+bad:
-+      kfree(l);
-+      return NULL;
-+}
-+
-+
-+/*
-+ * Read a MLS range structure from a policydb binary
-+ * representation file.
-+ */
-+static int mls_read_range_helper(struct mls_range *r, void *fp)
-+{
-+      u32 *buf;
-+      int items, rc = -EINVAL;
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf)
-+              goto out;
-+
-+      items = le32_to_cpu(buf[0]);
-+      buf = next_entry(fp, sizeof(u32) * items);
-+      if (!buf) {
-+              printk(KERN_ERR "security: mls:  truncated range\n");
-+              goto out;
-+      }
-+      r->level[0].sens = le32_to_cpu(buf[0]);
-+      if (items > 1) {
-+              r->level[1].sens = le32_to_cpu(buf[1]);
-+      } else {
-+              r->level[1].sens = r->level[0].sens;
-+      }
-+
-+      rc = ebitmap_read(&r->level[0].cat, fp);
-+      if (rc) {
-+              printk(KERN_ERR "security: mls:  error reading low "
-+                     "categories\n");
-+              goto out;
-+      }
-+      if (items > 1) {
-+              rc = ebitmap_read(&r->level[1].cat, fp);
-+              if (rc) {
-+                      printk(KERN_ERR "security: mls:  error reading high "
-+                             "categories\n");
-+                      goto bad_high;
-+              }
-+      } else {
-+              rc = ebitmap_cpy(&r->level[1].cat, &r->level[0].cat);
-+              if (rc) {
-+                      printk(KERN_ERR "security: mls:  out of memory\n");
-+                      goto bad_high;
-+              }
-+      }
-+
-+      rc = 0;
-+out:
-+      return rc;
-+bad_high:
-+      ebitmap_destroy(&r->level[0].cat);
-+      goto out;
-+}
-+
-+int mls_read_range(struct context *c, void *fp)
-+{
-+      return mls_read_range_helper(&c->range, fp);
-+}
-+
-+
-+/*
-+ * Read a MLS perms structure from a policydb binary
-+ * representation file.
-+ */
-+int mls_read_class(struct class_datum *cladatum, void *fp)
-+{
-+      struct mls_perms *p = &cladatum->mlsperms;
-+      u32 *buf;
-+
-+      buf = next_entry(fp, sizeof(u32)*4);
-+      if (!buf) {
-+              printk(KERN_ERR "security: mls:  truncated mls permissions\n");
-+              return -EINVAL;
-+      }
-+      p->read = le32_to_cpu(buf[0]);
-+      p->readby = le32_to_cpu(buf[1]);
-+      p->write = le32_to_cpu(buf[2]);
-+      p->writeby = le32_to_cpu(buf[3]);
-+      return 0;
-+}
-+
-+int mls_read_user(struct user_datum *usrdatum, void *fp)
-+{
-+      struct mls_range_list *r, *l;
-+      int rc = 0;
-+      u32 nel, i;
-+      u32 *buf;
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+      nel = le32_to_cpu(buf[0]);
-+      l = NULL;
-+      for (i = 0; i < nel; i++) {
-+              r = kmalloc(sizeof(*r), GFP_ATOMIC);
-+              if (!r) {
-+                      rc = -ENOMEM;
-+                      goto out;
-+              }
-+              memset(r, 0, sizeof(*r));
-+
-+              rc = mls_read_range_helper(&r->range, fp);
-+              if (rc)
-+                      goto out;
-+
-+              if (l)
-+                      l->next = r;
-+              else
-+                      usrdatum->ranges = r;
-+              l = r;
-+      }
-+out:
-+      return rc;
-+}
-+
-+int mls_read_nlevels(struct policydb *p, void *fp)
-+{
-+      u32 *buf;
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf)
-+              return -EINVAL;
-+      p->nlevels = le32_to_cpu(buf[0]);
-+      return 0;
-+}
-+
-+int mls_read_trusted(struct policydb *p, void *fp)
-+{
-+      int rc = 0;
-+
-+      rc = ebitmap_read(&p->trustedreaders, fp);
-+      if (rc)
-+              goto out;
-+      rc = ebitmap_read(&p->trustedwriters, fp);
-+      if (rc)
-+              goto out;
-+      rc = ebitmap_read(&p->trustedobjects, fp);
-+out:
-+      return rc;
-+}
-+
-+int sens_index(void *key, void *datum, void *datap)
-+{
-+      struct policydb *p;
-+      struct level_datum *levdatum;
-+
-+
-+      levdatum = datum;
-+      p = datap;
-+
-+      if (!levdatum->isalias)
-+              p->p_sens_val_to_name[levdatum->level->sens - 1] = key;
-+
-+      return 0;
-+}
-+
-+int cat_index(void *key, void *datum, void *datap)
-+{
-+      struct policydb *p;
-+      struct cat_datum *catdatum;
-+
-+
-+      catdatum = datum;
-+      p = datap;
-+
-+
-+      if (!catdatum->isalias)
-+              p->p_cat_val_to_name[catdatum->value - 1] = key;
-+
-+      return 0;
-+}
-+
-+int sens_destroy(void *key, void *datum, void *p)
-+{
-+      struct level_datum *levdatum;
-+
-+      kfree(key);
-+      levdatum = datum;
-+      if (!levdatum->isalias) {
-+              ebitmap_destroy(&levdatum->level->cat);
-+              kfree(levdatum->level);
-+      }
-+      kfree(datum);
-+      return 0;
-+}
-+
-+int cat_destroy(void *key, void *datum, void *p)
-+{
-+      kfree(key);
-+      kfree(datum);
-+      return 0;
-+}
-+
-+int sens_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct level_datum *levdatum;
-+      int rc;
-+      u32 *buf, len;
-+
-+      levdatum = kmalloc(sizeof(*levdatum), GFP_ATOMIC);
-+      if (!levdatum) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memset(levdatum, 0, sizeof(*levdatum));
-+
-+      buf = next_entry(fp, sizeof(u32)*2);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      levdatum->isalias = le32_to_cpu(buf[1]);
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_ATOMIC);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      levdatum->level = mls_read_level(fp);
-+      if (!levdatum->level) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      rc = hashtab_insert(h, key, levdatum);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      sens_destroy(key, levdatum, NULL);
-+      goto out;
-+}
-+
-+
-+int cat_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct cat_datum *catdatum;
-+      int rc;
-+      u32 *buf, len;
-+
-+      catdatum = kmalloc(sizeof(*catdatum), GFP_ATOMIC);
-+      if (!catdatum) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memset(catdatum, 0, sizeof(*catdatum));
-+
-+      buf = next_entry(fp, sizeof(u32)*3);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      catdatum->value = le32_to_cpu(buf[1]);
-+      catdatum->isalias = le32_to_cpu(buf[2]);
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_ATOMIC);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      rc = hashtab_insert(h, key, catdatum);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+
-+bad:
-+      cat_destroy(key, catdatum, NULL);
-+      goto out;
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/mls.h       2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,99 @@
-+/*
-+ * Multi-level security (MLS) policy operations.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_MLS_H_
-+#define _SS_MLS_H_
-+
-+#include "context.h"
-+#include "policydb.h"
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+
-+void mls_compute_av(struct context *scontext,
-+                  struct context *tcontext,
-+                  struct class_datum *tclass,
-+                  u32 *allowed);
-+
-+int mls_compute_context_len(struct context *context);
-+int mls_sid_to_context(struct context *context, char **scontext);
-+int mls_context_isvalid(struct policydb *p, struct context *c);
-+
-+int mls_context_to_sid(char oldc,
-+                     char **scontext,
-+                     struct context *context);
-+
-+int mls_convert_context(struct policydb *oldp,
-+                      struct policydb *newp,
-+                      struct context *context);
-+
-+int mls_compute_sid(struct context *scontext,
-+                  struct context *tcontext,
-+                  u16 tclass,
-+                  u32 specified,
-+                  struct context *newcontext);
-+
-+int sens_index(void *key, void *datum, void *datap);
-+int cat_index(void *key, void *datum, void *datap);
-+int sens_destroy(void *key, void *datum, void *p);
-+int cat_destroy(void *key, void *datum, void *p);
-+int sens_read(struct policydb *p, struct hashtab *h, void *fp);
-+int cat_read(struct policydb *p, struct hashtab *h, void *fp);
-+
-+#define mls_for_user_ranges(user, usercon) { \
-+struct mls_range_list *__ranges; \
-+for (__ranges = user->ranges; __ranges; __ranges = __ranges->next) { \
-+usercon.range = __ranges->range;
-+
-+#define mls_end_user_ranges } }
-+
-+#define mls_symtab_names , "levels", "categories"
-+#define mls_symtab_sizes , 16, 16
-+#define mls_index_f ,sens_index, cat_index
-+#define mls_destroy_f ,sens_destroy, cat_destroy
-+#define mls_read_f ,sens_read, cat_read
-+#define mls_write_f ,sens_write, cat_write
-+#define mls_policydb_index_others(p) printk(", %d levels", p->nlevels);
-+
-+#define mls_set_config(config) config |= POLICYDB_CONFIG_MLS
-+
-+void mls_user_destroy(struct user_datum *usrdatum);
-+int mls_read_range(struct context *c, void *fp);
-+int mls_read_perm(struct perm_datum *perdatum, void *fp);
-+int mls_read_class(struct class_datum *cladatum,  void *fp);
-+int mls_read_user(struct user_datum *usrdatum, void *fp);
-+int mls_read_nlevels(struct policydb *p, void *fp);
-+int mls_read_trusted(struct policydb *p, void *fp);
-+
-+#else
-+
-+#define       mls_compute_av(scontext, tcontext, tclass_datum, allowed)
-+#define mls_compute_context_len(context) 0
-+#define       mls_sid_to_context(context, scontextpp)
-+#define mls_context_isvalid(p, c) 1
-+#define       mls_context_to_sid(oldc, context_str, context) 0
-+#define mls_convert_context(oldp, newp, c) 0
-+#define mls_compute_sid(scontext, tcontext, tclass, specified, newcontextp) 0
-+#define mls_for_user_ranges(user, usercon)
-+#define mls_end_user_ranges
-+#define mls_symtab_names
-+#define mls_symtab_sizes
-+#define mls_index_f
-+#define mls_destroy_f
-+#define mls_read_f
-+#define mls_write_f
-+#define mls_policydb_index_others(p)
-+#define mls_set_config(config)
-+#define mls_user_destroy(usrdatum)
-+#define mls_read_range(c, fp) 0
-+#define mls_read_perm(p, fp) 0
-+#define mls_read_class(c, fp) 0
-+#define mls_read_user(u, fp) 0
-+#define mls_read_nlevels(p, fp) 0
-+#define mls_read_trusted(p, fp) 0
-+
-+#endif
-+
-+#endif        /* _SS_MLS_H */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/mls_types.h 2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,58 @@
-+/*
-+ * Type definitions for the multi-level security (MLS) policy.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_MLS_TYPES_H_
-+#define _SS_MLS_TYPES_H_
-+
-+struct mls_level {
-+      u32 sens;               /* sensitivity */
-+      struct ebitmap cat;     /* category set */
-+};
-+
-+struct mls_range {
-+      struct mls_level level[2]; /* low == level[0], high == level[1] */
-+};
-+
-+struct mls_range_list {
-+      struct mls_range range;
-+      struct mls_range_list *next;
-+};
-+
-+#define MLS_RELATION_DOM      1 /* source dominates */
-+#define MLS_RELATION_DOMBY    2 /* target dominates */
-+#define MLS_RELATION_EQ               4 /* source and target are equivalent */
-+#define MLS_RELATION_INCOMP   8 /* source and target are incomparable */
-+
-+#define mls_level_eq(l1,l2) \
-+(((l1).sens == (l2).sens) && ebitmap_cmp(&(l1).cat,&(l2).cat))
-+
-+#define mls_level_relation(l1,l2) ( \
-+(((l1).sens == (l2).sens) && ebitmap_cmp(&(l1).cat,&(l2).cat)) ? \
-+                                  MLS_RELATION_EQ : \
-+(((l1).sens >= (l2).sens) && ebitmap_contains(&(l1).cat, &(l2).cat)) ? \
-+                                  MLS_RELATION_DOM : \
-+(((l2).sens >= (l1).sens) && ebitmap_contains(&(l2).cat, &(l1).cat)) ? \
-+                                  MLS_RELATION_DOMBY : \
-+                                  MLS_RELATION_INCOMP )
-+
-+#define mls_range_contains(r1,r2) \
-+((mls_level_relation((r1).level[0], (r2).level[0]) & \
-+        (MLS_RELATION_EQ | MLS_RELATION_DOMBY)) && \
-+       (mls_level_relation((r1).level[1], (r2).level[1]) & \
-+        (MLS_RELATION_EQ | MLS_RELATION_DOM)))
-+
-+/*
-+ * Every access vector permission is mapped to a set of MLS base
-+ * permissions, based on the flow properties of the corresponding
-+ * operation.
-+ */
-+struct mls_perms {
-+      u32 read;     /* permissions that map to `read' */
-+      u32 readby;   /* permissions that map to `readby' */
-+      u32 write;    /* permissions that map to `write' */
-+      u32 writeby;  /* permissions that map to `writeby' */
-+};
-+
-+#endif        /* _SS_MLS_TYPES_H_ */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/policydb.c  2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,1429 @@
-+/*
-+ * Implementation of the policy database.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "policydb.h"
-+#include "mls.h"
-+
-+#define _DEBUG_HASHES
-+
-+#ifdef DEBUG_HASHES
-+static char *symtab_name[SYM_NUM] = {
-+      "common prefixes",
-+      "classes",
-+      "roles",
-+      "types",
-+      "users"
-+      mls_symtab_names
-+};
-+#endif
-+
-+static unsigned int symtab_sizes[SYM_NUM] = {
-+      2,
-+      32,
-+      16,
-+      512,
-+      128
-+      mls_symtab_sizes
-+};
-+
-+/*
-+ * Initialize the role table.
-+ */
-+int roles_init(struct policydb *p)
-+{
-+      char *key = 0;
-+      int rc;
-+      struct role_datum *role;
-+
-+      role = kmalloc(sizeof(*role), GFP_KERNEL);
-+      if (!role) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memset(role, 0, sizeof(*role));
-+      role->value = ++p->p_roles.nprim;
-+      if (role->value != OBJECT_R_VAL) {
-+              rc = -EINVAL;
-+              goto out_free_role;
-+      }
-+      key = kmalloc(strlen(OBJECT_R)+1,GFP_KERNEL);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto out_free_role;
-+      }
-+      strcpy(key, OBJECT_R);
-+      rc = hashtab_insert(p->p_roles.table, key, role);
-+      if (rc)
-+              goto out_free_key;
-+out:
-+      return rc;
-+
-+out_free_key:
-+      kfree(key);
-+out_free_role:
-+      kfree(role);
-+      goto out;
-+}
-+
-+/*
-+ * Initialize a policy database structure.
-+ */
-+int policydb_init(struct policydb *p)
-+{
-+      int i, rc;
-+
-+      memset(p, 0, sizeof(*p));
-+
-+      for (i = 0; i < SYM_NUM; i++) {
-+              rc = symtab_init(&p->symtab[i], symtab_sizes[i]);
-+              if (rc)
-+                      goto out_free_symtab;
-+      }
-+
-+      rc = avtab_init(&p->te_avtab);
-+      if (rc)
-+              goto out_free_symtab;
-+
-+      rc = roles_init(p);
-+      if (rc)
-+              goto out_free_avtab;
-+
-+out:
-+      return rc;
-+
-+out_free_avtab:
-+      avtab_destroy(&p->te_avtab);
-+
-+out_free_symtab:
-+      for (i = 0; i < SYM_NUM; i++)
-+              hashtab_destroy(p->symtab[i].table);
-+      goto out;
-+}
-+
-+/*
-+ * The following *_index functions are used to
-+ * define the val_to_name and val_to_struct arrays
-+ * in a policy database structure.  The val_to_name
-+ * arrays are used when converting security context
-+ * structures into string representations.  The
-+ * val_to_struct arrays are used when the attributes
-+ * of a class, role, or user are needed.
-+ */
-+
-+static int common_index(void *key, void *datum, void *datap)
-+{
-+      struct policydb *p;
-+      struct common_datum *comdatum;
-+
-+      comdatum = datum;
-+      p = datap;
-+      p->p_common_val_to_name[comdatum->value - 1] = key;
-+      return 0;
-+}
-+
-+static int class_index(void *key, void *datum, void *datap)
-+{
-+      struct policydb *p;
-+      struct class_datum *cladatum;
-+
-+      cladatum = datum;
-+      p = datap;
-+      p->p_class_val_to_name[cladatum->value - 1] = key;
-+      p->class_val_to_struct[cladatum->value - 1] = cladatum;
-+      return 0;
-+}
-+
-+static int role_index(void *key, void *datum, void *datap)
-+{
-+      struct policydb *p;
-+      struct role_datum *role;
-+
-+      role = datum;
-+      p = datap;
-+      p->p_role_val_to_name[role->value - 1] = key;
-+      p->role_val_to_struct[role->value - 1] = role;
-+      return 0;
-+}
-+
-+static int type_index(void *key, void *datum, void *datap)
-+{
-+      struct policydb *p;
-+      struct type_datum *typdatum;
-+
-+      typdatum = datum;
-+      p = datap;
-+
-+      if (typdatum->primary)
-+              p->p_type_val_to_name[typdatum->value - 1] = key;
-+
-+      return 0;
-+}
-+
-+static int user_index(void *key, void *datum, void *datap)
-+{
-+      struct policydb *p;
-+      struct user_datum *usrdatum;
-+
-+      usrdatum = datum;
-+      p = datap;
-+      p->p_user_val_to_name[usrdatum->value - 1] = key;
-+      p->user_val_to_struct[usrdatum->value - 1] = usrdatum;
-+      return 0;
-+}
-+
-+static int (*index_f[SYM_NUM]) (void *key, void *datum, void *datap) =
-+{
-+      common_index,
-+      class_index,
-+      role_index,
-+      type_index,
-+      user_index
-+      mls_index_f
-+};
-+
-+/*
-+ * Define the common val_to_name array and the class
-+ * val_to_name and val_to_struct arrays in a policy
-+ * database structure.
-+ *
-+ * Caller must clean up upon failure.
-+ */
-+int policydb_index_classes(struct policydb *p)
-+{
-+      int rc;
-+
-+      p->p_common_val_to_name =
-+              kmalloc(p->p_commons.nprim * sizeof(char *), GFP_KERNEL);
-+      if (!p->p_common_val_to_name) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      rc = hashtab_map(p->p_commons.table, common_index, p);
-+      if (rc)
-+              goto out;
-+
-+      p->class_val_to_struct =
-+              kmalloc(p->p_classes.nprim * sizeof(*(p->class_val_to_struct)), GFP_KERNEL);
-+      if (!p->class_val_to_struct) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      p->p_class_val_to_name =
-+              kmalloc(p->p_classes.nprim * sizeof(char *), GFP_KERNEL);
-+      if (!p->p_class_val_to_name) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      rc = hashtab_map(p->p_classes.table, class_index, p);
-+out:
-+      return rc;
-+}
-+
-+#ifdef DEBUG_HASHES
-+static void symtab_hash_eval(struct symtab *s)
-+{
-+      int i;
-+
-+      for (i = 0; i < SYM_NUM; i++) {
-+              struct hashtab *h = s[i].table;
-+              struct hashtab_info info;
-+
-+              hashtab_stat(h, &info);
-+              printk(KERN_INFO "%s:  %d entries and %d/%d buckets used, "
-+                     "longest chain length %d\n", symtab_name[i], h->nel,
-+                     info.slots_used, h->size, info.max_chain_len);
-+      }
-+}
-+#endif
-+
-+/*
-+ * Define the other val_to_name and val_to_struct arrays
-+ * in a policy database structure.
-+ *
-+ * Caller must clean up on failure.
-+ */
-+int policydb_index_others(struct policydb *p)
-+{
-+      int i, rc = 0;
-+
-+      printk(KERN_INFO "security:  %d users, %d roles, %d types",
-+             p->p_users.nprim, p->p_roles.nprim, p->p_types.nprim);
-+      mls_policydb_index_others(p);
-+      printk("\n");
-+
-+      printk(KERN_INFO "security:  %d classes, %d rules\n",
-+             p->p_classes.nprim, p->te_avtab.nel);
-+
-+#ifdef DEBUG_HASHES
-+      avtab_hash_eval(&p->te_avtab, "rules");
-+      symtab_hash_eval(p->symtab);
-+#endif
-+
-+      p->role_val_to_struct =
-+              kmalloc(p->p_roles.nprim * sizeof(*(p->role_val_to_struct)),
-+                      GFP_KERNEL);
-+      if (!p->role_val_to_struct) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      p->user_val_to_struct =
-+              kmalloc(p->p_users.nprim * sizeof(*(p->user_val_to_struct)),
-+                      GFP_KERNEL);
-+      if (!p->user_val_to_struct) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      for (i = SYM_ROLES; i < SYM_NUM; i++) {
-+              p->sym_val_to_name[i] =
-+                      kmalloc(p->symtab[i].nprim * sizeof(char *), GFP_KERNEL);
-+              if (!p->sym_val_to_name[i]) {
-+                      rc = -ENOMEM;
-+                      goto out;
-+              }
-+              rc = hashtab_map(p->symtab[i].table, index_f[i], p);
-+              if (rc)
-+                      goto out;
-+      }
-+
-+out:
-+      return rc;
-+}
-+
-+/*
-+ * The following *_destroy functions are used to
-+ * free any memory allocated for each kind of
-+ * symbol data in the policy database.
-+ */
-+
-+static int perm_destroy(void *key, void *datum, void *p)
-+{
-+      kfree(key);
-+      kfree(datum);
-+      return 0;
-+}
-+
-+static int common_destroy(void *key, void *datum, void *p)
-+{
-+      struct common_datum *comdatum;
-+
-+      kfree(key);
-+      comdatum = datum;
-+      hashtab_map(comdatum->permissions.table, perm_destroy, 0);
-+      hashtab_destroy(comdatum->permissions.table);
-+      kfree(datum);
-+      return 0;
-+}
-+
-+static int class_destroy(void *key, void *datum, void *p)
-+{
-+      struct class_datum *cladatum;
-+      struct constraint_node *constraint, *ctemp;
-+      struct constraint_expr *e, *etmp;
-+
-+      kfree(key);
-+      cladatum = datum;
-+      hashtab_map(cladatum->permissions.table, perm_destroy, 0);
-+      hashtab_destroy(cladatum->permissions.table);
-+      constraint = cladatum->constraints;
-+      while (constraint) {
-+              e = constraint->expr;
-+              while (e) {
-+                      ebitmap_destroy(&e->names);
-+                      etmp = e;
-+                      e = e->next;
-+                      kfree(etmp);
-+              }
-+              ctemp = constraint;
-+              constraint = constraint->next;
-+              kfree(ctemp);
-+      }
-+      kfree(cladatum->comkey);
-+      kfree(datum);
-+      return 0;
-+}
-+
-+static int role_destroy(void *key, void *datum, void *p)
-+{
-+      struct role_datum *role;
-+
-+      kfree(key);
-+      role = datum;
-+      ebitmap_destroy(&role->dominates);
-+      ebitmap_destroy(&role->types);
-+      kfree(datum);
-+      return 0;
-+}
-+
-+static int type_destroy(void *key, void *datum, void *p)
-+{
-+      kfree(key);
-+      kfree(datum);
-+      return 0;
-+}
-+
-+static int user_destroy(void *key, void *datum, void *p)
-+{
-+      struct user_datum *usrdatum;
-+
-+      kfree(key);
-+      usrdatum = datum;
-+      ebitmap_destroy(&usrdatum->roles);
-+      mls_user_destroy(usrdatum);
-+      kfree(datum);
-+      return 0;
-+}
-+
-+static int (*destroy_f[SYM_NUM]) (void *key, void *datum, void *datap) =
-+{
-+      common_destroy,
-+      class_destroy,
-+      role_destroy,
-+      type_destroy,
-+      user_destroy
-+      mls_destroy_f
-+};
-+
-+/*
-+ * Free any memory allocated by a policy database structure.
-+ */
-+void policydb_destroy(struct policydb *p)
-+{
-+      struct ocontext *c, *ctmp;
-+      struct genfs *g, *gtmp;
-+      int i;
-+
-+      for (i = 0; i < SYM_NUM; i++) {
-+              hashtab_map(p->symtab[i].table, destroy_f[i], 0);
-+              hashtab_destroy(p->symtab[i].table);
-+      }
-+
-+      for (i = 0; i < SYM_NUM; i++) {
-+              if (p->sym_val_to_name[i])
-+                      kfree(p->sym_val_to_name[i]);
-+      }
-+
-+      if (p->class_val_to_struct)
-+              kfree(p->class_val_to_struct);
-+      if (p->role_val_to_struct)
-+              kfree(p->role_val_to_struct);
-+      if (p->user_val_to_struct)
-+              kfree(p->user_val_to_struct);
-+
-+      avtab_destroy(&p->te_avtab);
-+
-+      for (i = 0; i < OCON_NUM; i++) {
-+              c = p->ocontexts[i];
-+              while (c) {
-+                      ctmp = c;
-+                      c = c->next;
-+                      context_destroy(&ctmp->context[0]);
-+                      context_destroy(&ctmp->context[1]);
-+                      if (i == OCON_ISID || i == OCON_FS ||
-+                          i == OCON_NETIF || i == OCON_FSUSE)
-+                              kfree(ctmp->u.name);
-+                      kfree(ctmp);
-+              }
-+      }
-+
-+      g = p->genfs;
-+      while (g) {
-+              kfree(g->fstype);
-+              c = g->head;
-+              while (c) {
-+                      ctmp = c;
-+                      c = c->next;
-+                      context_destroy(&ctmp->context[0]);
-+                      kfree(ctmp->u.name);
-+                      kfree(ctmp);
-+              }
-+              gtmp = g;
-+              g = g->next;
-+              kfree(gtmp);
-+      }
-+
-+      return;
-+}
-+
-+/*
-+ * Load the initial SIDs specified in a policy database
-+ * structure into a SID table.
-+ */
-+int policydb_load_isids(struct policydb *p, struct sidtab *s)
-+{
-+      struct ocontext *head, *c;
-+      int rc;
-+
-+      rc = sidtab_init(s);
-+      if (rc) {
-+              printk(KERN_ERR "security:  out of memory on SID table init\n");
-+              goto out;
-+      }
-+
-+      head = p->ocontexts[OCON_ISID];
-+      for (c = head; c; c = c->next) {
-+              if (!c->context[0].user) {
-+                      printk(KERN_ERR "security:  SID %s was never "
-+                             "defined.\n", c->u.name);
-+                      rc = -EINVAL;
-+                      goto out;
-+              }
-+              if (sidtab_insert(s, c->sid[0], &c->context[0])) {
-+                      printk(KERN_ERR "security:  unable to load initial "
-+                             "SID %s.\n", c->u.name);
-+                      rc = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+out:
-+      return rc;
-+}
-+
-+/*
-+ * Return 1 if the fields in the security context
-+ * structure `c' are valid.  Return 0 otherwise.
-+ */
-+int policydb_context_isvalid(struct policydb *p, struct context *c)
-+{
-+      struct role_datum *role;
-+      struct user_datum *usrdatum;
-+
-+      /*
-+       * Role must be authorized for the type.
-+       */
-+      if (!c->role || c->role > p->p_roles.nprim)
-+              return 0;
-+
-+      if (c->role != OBJECT_R_VAL) {
-+              role = p->role_val_to_struct[c->role - 1];
-+              if (!ebitmap_get_bit(&role->types,
-+                                   c->type - 1))
-+                      /* role may not be associated with type */
-+                      return 0;
-+
-+              /*
-+               * User must be authorized for the role.
-+               */
-+              if (!c->user || c->user > p->p_users.nprim)
-+                      return 0;
-+              usrdatum = p->user_val_to_struct[c->user - 1];
-+              if (!usrdatum)
-+                      return 0;
-+
-+              if (!ebitmap_get_bit(&usrdatum->roles,
-+                                   c->role - 1))
-+                      /* user may not be associated with role */
-+                      return 0;
-+      }
-+
-+      if (!mls_context_isvalid(p, c))
-+              return 0;
-+
-+      return 1;
-+}
-+
-+/*
-+ * Read and validate a security context structure
-+ * from a policydb binary representation file.
-+ */
-+static int context_read_and_validate(struct context *c,
-+                                   struct policydb *p,
-+                                   void *fp)
-+{
-+      u32 *buf;
-+      int rc = 0;
-+
-+      buf = next_entry(fp, sizeof(u32)*3);
-+      if (!buf) {
-+              printk(KERN_ERR "security: context truncated\n");
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+      c->user = le32_to_cpu(buf[0]);
-+      c->role = le32_to_cpu(buf[1]);
-+      c->type = le32_to_cpu(buf[2]);
-+      if (mls_read_range(c, fp)) {
-+              printk(KERN_ERR "security: error reading MLS range of "
-+                     "context\n");
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+
-+      if (!policydb_context_isvalid(p, c)) {
-+              printk(KERN_ERR "security:  invalid security context\n");
-+              context_destroy(c);
-+              rc = -EINVAL;
-+      }
-+out:
-+      return rc;
-+}
-+
-+/*
-+ * The following *_read functions are used to
-+ * read the symbol data from a policy database
-+ * binary representation file.
-+ */
-+
-+static int perm_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct perm_datum *perdatum;
-+      int rc;
-+      u32 *buf, len;
-+
-+      perdatum = kmalloc(sizeof(*perdatum), GFP_KERNEL);
-+      if (!perdatum) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memset(perdatum, 0, sizeof(*perdatum));
-+
-+      buf = next_entry(fp, sizeof(u32)*2);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      perdatum->value = le32_to_cpu(buf[1]);
-+      rc = mls_read_perm(perdatum, fp);
-+      if (rc)
-+              goto bad;
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_KERNEL);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      rc = hashtab_insert(h, key, perdatum);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      perm_destroy(key, perdatum, NULL);
-+      goto out;
-+}
-+
-+static int common_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct common_datum *comdatum;
-+      u32 *buf, len, nel;
-+      int i, rc;
-+
-+      comdatum = kmalloc(sizeof(*comdatum), GFP_KERNEL);
-+      if (!comdatum) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memset(comdatum, 0, sizeof(*comdatum));
-+
-+      buf = next_entry(fp, sizeof(u32)*4);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      comdatum->value = le32_to_cpu(buf[1]);
-+
-+      rc = symtab_init(&comdatum->permissions, PERM_SYMTAB_SIZE);
-+      if (rc)
-+              goto bad;
-+      comdatum->permissions.nprim = le32_to_cpu(buf[2]);
-+      nel = le32_to_cpu(buf[3]);
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_KERNEL);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      for (i = 0; i < nel; i++) {
-+              rc = perm_read(p, comdatum->permissions.table, fp);
-+              if (rc)
-+                      goto bad;
-+      }
-+
-+      rc = hashtab_insert(h, key, comdatum);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      common_destroy(key, comdatum, NULL);
-+      goto out;
-+}
-+
-+static int class_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct class_datum *cladatum;
-+      struct constraint_node *c, *lc;
-+      struct constraint_expr *e, *le;
-+      u32 *buf, len, len2, ncons, nexpr, nel;
-+      int i, j, depth, rc;
-+
-+      cladatum = kmalloc(sizeof(*cladatum), GFP_KERNEL);
-+      if (!cladatum) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memset(cladatum, 0, sizeof(*cladatum));
-+
-+      buf = next_entry(fp, sizeof(u32)*6);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      len2 = le32_to_cpu(buf[1]);
-+      cladatum->value = le32_to_cpu(buf[2]);
-+
-+      rc = symtab_init(&cladatum->permissions, PERM_SYMTAB_SIZE);
-+      if (rc)
-+              goto bad;
-+      cladatum->permissions.nprim = le32_to_cpu(buf[3]);
-+      nel = le32_to_cpu(buf[4]);
-+
-+      ncons = le32_to_cpu(buf[5]);
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_KERNEL);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      if (len2) {
-+              cladatum->comkey = kmalloc(len2 + 1,GFP_KERNEL);
-+              if (!cladatum->comkey) {
-+                      rc = -ENOMEM;
-+                      goto bad;
-+              }
-+              buf = next_entry(fp, len2);
-+              if (!buf) {
-+                      rc = -EINVAL;
-+                      goto bad;
-+              }
-+              memcpy(cladatum->comkey, buf, len2);
-+              cladatum->comkey[len2] = 0;
-+
-+              cladatum->comdatum = hashtab_search(p->p_commons.table,
-+                                                  cladatum->comkey);
-+              if (!cladatum->comdatum) {
-+                      printk(KERN_ERR "security:  unknown common %s\n",
-+                             cladatum->comkey);
-+                      rc = -EINVAL;
-+                      goto bad;
-+              }
-+      }
-+      for (i = 0; i < nel; i++) {
-+              rc = perm_read(p, cladatum->permissions.table, fp);
-+              if (rc)
-+                      goto bad;
-+      }
-+
-+      lc = NULL;
-+      rc = -EINVAL;
-+      for (i = 0; i < ncons; i++) {
-+              c = kmalloc(sizeof(*c), GFP_KERNEL);
-+              if (!c) {
-+                      rc = -ENOMEM;
-+                      goto bad;
-+              }
-+              memset(c, 0, sizeof(*c));
-+              buf = next_entry(fp, sizeof(u32)*2);
-+              if (!buf)
-+                      goto bad;
-+              c->permissions = le32_to_cpu(buf[0]);
-+              nexpr = le32_to_cpu(buf[1]);
-+              le = NULL;
-+              depth = -1;
-+              for (j = 0; j < nexpr; j++) {
-+                      e = kmalloc(sizeof(*e), GFP_KERNEL);
-+                      if (!e) {
-+                              rc = -ENOMEM;
-+                              goto bad;
-+                      }
-+                      memset(e, 0, sizeof(*e));
-+                      buf = next_entry(fp, sizeof(u32)*3);
-+                      if (!buf) {
-+                              kfree(e);
-+                              goto bad;
-+                      }
-+                      e->expr_type = le32_to_cpu(buf[0]);
-+                      e->attr = le32_to_cpu(buf[1]);
-+                      e->op = le32_to_cpu(buf[2]);
-+
-+                      switch (e->expr_type) {
-+                      case CEXPR_NOT:
-+                              if (depth < 0) {
-+                                      kfree(e);
-+                                      goto bad;
-+                              }
-+                              break;
-+                      case CEXPR_AND:
-+                      case CEXPR_OR:
-+                              if (depth < 1) {
-+                                      kfree(e);
-+                                      goto bad;
-+                              }
-+                              depth--;
-+                              break;
-+                      case CEXPR_ATTR:
-+                              if (depth == (CEXPR_MAXDEPTH-1)) {
-+                                      kfree(e);
-+                                      goto bad;
-+                              }
-+                              depth++;
-+                              break;
-+                      case CEXPR_NAMES:
-+                              if (depth == (CEXPR_MAXDEPTH-1)) {
-+                                      kfree(e);
-+                                      goto bad;
-+                              }
-+                              depth++;
-+                              if (ebitmap_read(&e->names, fp)) {
-+                                      kfree(e);
-+                                      goto bad;
-+                              }
-+                              break;
-+                      default:
-+                              kfree(e);
-+                              goto bad;
-+                              break;
-+                      }
-+                      if (le) {
-+                              le->next = e;
-+                      } else {
-+                              c->expr = e;
-+                      }
-+                      le = e;
-+              }
-+              if (depth != 0)
-+                      goto bad;
-+              if (lc) {
-+                      lc->next = c;
-+              } else {
-+                      cladatum->constraints = c;
-+              }
-+              lc = c;
-+      }
-+
-+      rc = mls_read_class(cladatum, fp);
-+      if (rc)
-+              goto bad;
-+
-+      rc = hashtab_insert(h, key, cladatum);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      class_destroy(key, cladatum, NULL);
-+      goto out;
-+}
-+
-+static int role_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct role_datum *role;
-+      int rc;
-+      u32 *buf, len;
-+
-+      role = kmalloc(sizeof(*role), GFP_KERNEL);
-+      if (!role) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memset(role, 0, sizeof(*role));
-+
-+      buf = next_entry(fp, sizeof(u32)*2);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      role->value = le32_to_cpu(buf[1]);
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_KERNEL);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      rc = ebitmap_read(&role->dominates, fp);
-+      if (rc)
-+              goto bad;
-+
-+      rc = ebitmap_read(&role->types, fp);
-+      if (rc)
-+              goto bad;
-+
-+      if (strcmp(key, OBJECT_R) == 0) {
-+              if (role->value != OBJECT_R_VAL) {
-+                      printk(KERN_ERR "Role %s has wrong value %d\n",
-+                             OBJECT_R, role->value);
-+                      rc = -EINVAL;
-+                      goto bad;
-+              }
-+              rc = 0;
-+              goto bad;
-+      }
-+
-+      rc = hashtab_insert(h, key, role);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      role_destroy(key, role, NULL);
-+      goto out;
-+}
-+
-+static int type_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct type_datum *typdatum;
-+      int rc;
-+      u32 *buf, len;
-+
-+      typdatum = kmalloc(sizeof(*typdatum),GFP_KERNEL);
-+      if (!typdatum) {
-+              rc = -ENOMEM;
-+              return rc;
-+      }
-+      memset(typdatum, 0, sizeof(*typdatum));
-+
-+      buf = next_entry(fp, sizeof(u32)*3);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      typdatum->value = le32_to_cpu(buf[1]);
-+      typdatum->primary = le32_to_cpu(buf[2]);
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_KERNEL);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      rc = hashtab_insert(h, key, typdatum);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      type_destroy(key, typdatum, NULL);
-+      goto out;
-+}
-+
-+static int user_read(struct policydb *p, struct hashtab *h, void *fp)
-+{
-+      char *key = 0;
-+      struct user_datum *usrdatum;
-+      int rc;
-+      u32 *buf, len;
-+
-+
-+      usrdatum = kmalloc(sizeof(*usrdatum), GFP_KERNEL);
-+      if (!usrdatum) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memset(usrdatum, 0, sizeof(*usrdatum));
-+
-+      buf = next_entry(fp, sizeof(u32)*2);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+
-+      len = le32_to_cpu(buf[0]);
-+      usrdatum->value = le32_to_cpu(buf[1]);
-+
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      key = kmalloc(len + 1,GFP_KERNEL);
-+      if (!key) {
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(key, buf, len);
-+      key[len] = 0;
-+
-+      rc = ebitmap_read(&usrdatum->roles, fp);
-+      if (rc)
-+              goto bad;
-+
-+      rc = mls_read_user(usrdatum, fp);
-+      if (rc)
-+              goto bad;
-+
-+      rc = hashtab_insert(h, key, usrdatum);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      user_destroy(key, usrdatum, NULL);
-+      goto out;
-+}
-+
-+static int (*read_f[SYM_NUM]) (struct policydb *p, struct hashtab *h, void *fp) =
-+{
-+      common_read,
-+      class_read,
-+      role_read,
-+      type_read,
-+      user_read
-+      mls_read_f
-+};
-+
-+#define mls_config(x) \
-+       ((x) & POLICYDB_CONFIG_MLS) ? "mls" : "no_mls"
-+
-+/*
-+ * Read the configuration data from a policy database binary
-+ * representation file into a policy database structure.
-+ */
-+int policydb_read(struct policydb *p, void *fp)
-+{
-+      struct role_allow *ra, *lra;
-+      struct role_trans *tr, *ltr;
-+      struct ocontext *l, *c, *newc;
-+      struct genfs *genfs_p, *genfs, *newgenfs;
-+      int i, j, rc;
-+      u32 *buf, len, len2, config, nprim, nel, nel2;
-+      char *policydb_str;
-+
-+      config = 0;
-+      mls_set_config(config);
-+
-+      rc = policydb_init(p);
-+      if (rc)
-+              goto out;
-+
-+      rc = -EINVAL;
-+      /* Read the magic number and string length. */
-+      buf = next_entry(fp, sizeof(u32)* 2);
-+      if (!buf)
-+              goto bad;
-+
-+      for (i = 0; i < 2; i++)
-+              buf[i] = le32_to_cpu(buf[i]);
-+
-+      if (buf[0] != POLICYDB_MAGIC) {
-+              printk(KERN_ERR "security:  policydb magic number 0x%x does "
-+                     "not match expected magic number 0x%x\n",
-+                     buf[0], POLICYDB_MAGIC);
-+              goto bad;
-+      }
-+
-+      len = buf[1];
-+      if (len != strlen(POLICYDB_STRING)) {
-+              printk(KERN_ERR "security:  policydb string length %d does not "
-+                     "match expected length %d\n",
-+                     len, strlen(POLICYDB_STRING));
-+              goto bad;
-+      }
-+      buf = next_entry(fp, len);
-+      if (!buf) {
-+              printk(KERN_ERR "security:  truncated policydb string identifier\n");
-+              goto bad;
-+      }
-+      policydb_str = kmalloc(len + 1,GFP_KERNEL);
-+      if (!policydb_str) {
-+              printk(KERN_ERR "security:  unable to allocate memory for policydb "
-+                     "string of length %d\n", len);
-+              rc = -ENOMEM;
-+              goto bad;
-+      }
-+      memcpy(policydb_str, buf, len);
-+      policydb_str[len] = 0;
-+      if (strcmp(policydb_str, POLICYDB_STRING)) {
-+              printk(KERN_ERR "security:  policydb string %s does not match "
-+                     "my string %s\n", policydb_str, POLICYDB_STRING);
-+              kfree(policydb_str);
-+              goto bad;
-+      }
-+      /* Done with policydb_str. */
-+      kfree(policydb_str);
-+      policydb_str = NULL;
-+
-+      /* Read the version, config, and table sizes. */
-+      buf = next_entry(fp, sizeof(u32)*4);
-+      if (!buf)
-+              goto bad;
-+      for (i = 0; i < 4; i++)
-+              buf[i] = le32_to_cpu(buf[i]);
-+
-+      if (buf[0] != POLICYDB_VERSION) {
-+              printk(KERN_ERR "security:  policydb version %d does not match "
-+                     "my version %d\n", buf[0], POLICYDB_VERSION);
-+              goto bad;
-+      }
-+      if (buf[1] != config) {
-+              printk(KERN_ERR "security:  policydb configuration (%s) does "
-+                     "not match my configuration (%s)\n",
-+                     mls_config(buf[1]),
-+                     mls_config(config));
-+              goto bad;
-+      }
-+      if (buf[2] != SYM_NUM || buf[3] != OCON_NUM) {
-+              printk(KERN_ERR "security:  policydb table sizes (%d,%d) do "
-+                     "not match mine (%d,%d)\n",
-+                     buf[2], buf[3], SYM_NUM, OCON_NUM);
-+              goto bad;
-+      }
-+
-+      rc = mls_read_nlevels(p, fp);
-+      if (rc)
-+              goto bad;
-+
-+      for (i = 0; i < SYM_NUM; i++) {
-+              buf = next_entry(fp, sizeof(u32)*2);
-+              if (!buf) {
-+                      rc = -EINVAL;
-+                      goto bad;
-+              }
-+              nprim = le32_to_cpu(buf[0]);
-+              nel = le32_to_cpu(buf[1]);
-+              for (j = 0; j < nel; j++) {
-+                      rc = read_f[i](p, p->symtab[i].table, fp);
-+                      if (rc)
-+                              goto bad;
-+              }
-+
-+              p->symtab[i].nprim = nprim;
-+      }
-+
-+      rc = avtab_read(&p->te_avtab, fp, config);
-+      if (rc)
-+              goto bad;
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      nel = le32_to_cpu(buf[0]);
-+      ltr = NULL;
-+      for (i = 0; i < nel; i++) {
-+              tr = kmalloc(sizeof(*tr), GFP_KERNEL);
-+              if (!tr) {
-+                      rc = -ENOMEM;
-+                      goto bad;
-+              }
-+              memset(tr, 0, sizeof(*tr));
-+              if (ltr) {
-+                      ltr->next = tr;
-+              } else {
-+                      p->role_tr = tr;
-+              }
-+              buf = next_entry(fp, sizeof(u32)*3);
-+              if (!buf) {
-+                      rc = -EINVAL;
-+                      goto bad;
-+              }
-+              tr->role = le32_to_cpu(buf[0]);
-+              tr->type = le32_to_cpu(buf[1]);
-+              tr->new_role = le32_to_cpu(buf[2]);
-+              ltr = tr;
-+      }
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      nel = le32_to_cpu(buf[0]);
-+      lra = NULL;
-+      for (i = 0; i < nel; i++) {
-+              ra = kmalloc(sizeof(*ra), GFP_KERNEL);
-+              if (!ra) {
-+                      rc = -ENOMEM;
-+                      goto bad;
-+              }
-+              memset(ra, 0, sizeof(*ra));
-+              if (lra) {
-+                      lra->next = ra;
-+              } else {
-+                      p->role_allow = ra;
-+              }
-+              buf = next_entry(fp, sizeof(u32)*2);
-+              if (!buf) {
-+                      rc = -EINVAL;
-+                      goto bad;
-+              }
-+              ra->role = le32_to_cpu(buf[0]);
-+              ra->new_role = le32_to_cpu(buf[1]);
-+              lra = ra;
-+      }
-+
-+      rc = policydb_index_classes(p);
-+      if (rc)
-+              goto bad;
-+
-+      rc = policydb_index_others(p);
-+      if (rc)
-+              goto bad;
-+
-+      for (i = 0; i < OCON_NUM; i++) {
-+              buf = next_entry(fp, sizeof(u32));
-+              if (!buf) {
-+                      rc = -EINVAL;
-+                      goto bad;
-+              }
-+              nel = le32_to_cpu(buf[0]);
-+              l = NULL;
-+              for (j = 0; j < nel; j++) {
-+                      c = kmalloc(sizeof(*c), GFP_KERNEL);
-+                      if (!c) {
-+                              rc = -ENOMEM;
-+                              goto bad;
-+                      }
-+                      memset(c, 0, sizeof(*c));
-+                      if (l) {
-+                              l->next = c;
-+                      } else {
-+                              p->ocontexts[i] = c;
-+                      }
-+                      l = c;
-+                      rc = -EINVAL;
-+                      switch (i) {
-+                      case OCON_ISID:
-+                              buf = next_entry(fp, sizeof(u32));
-+                              if (!buf)
-+                                      goto bad;
-+                              c->sid[0] = le32_to_cpu(buf[0]);
-+                              rc = context_read_and_validate(&c->context[0], p, fp);
-+                              if (rc)
-+                                      goto bad;
-+                              break;
-+                      case OCON_FS:
-+                      case OCON_NETIF:
-+                              buf = next_entry(fp, sizeof(u32));
-+                              if (!buf)
-+                                      goto bad;
-+                              len = le32_to_cpu(buf[0]);
-+                              buf = next_entry(fp, len);
-+                              if (!buf)
-+                                      goto bad;
-+                              c->u.name = kmalloc(len + 1,GFP_KERNEL);
-+                              if (!c->u.name) {
-+                                      rc = -ENOMEM;
-+                                      goto bad;
-+                              }
-+                              memcpy(c->u.name, buf, len);
-+                              c->u.name[len] = 0;
-+                              rc = context_read_and_validate(&c->context[0], p, fp);
-+                              if (rc)
-+                                      goto bad;
-+                              rc = context_read_and_validate(&c->context[1], p, fp);
-+                              if (rc)
-+                                      goto bad;
-+                              break;
-+                      case OCON_PORT:
-+                              buf = next_entry(fp, sizeof(u32)*3);
-+                              if (!buf)
-+                                      goto bad;
-+                              c->u.port.protocol = le32_to_cpu(buf[0]);
-+                              c->u.port.low_port = le32_to_cpu(buf[1]);
-+                              c->u.port.high_port = le32_to_cpu(buf[2]);
-+                              rc = context_read_and_validate(&c->context[0], p, fp);
-+                              if (rc)
-+                                      goto bad;
-+                              break;
-+                      case OCON_NODE:
-+                              buf = next_entry(fp, sizeof(u32)* 2);
-+                              if (!buf)
-+                                      goto bad;
-+                              c->u.node.addr = le32_to_cpu(buf[0]);
-+                              c->u.node.mask = le32_to_cpu(buf[1]);
-+                              rc = context_read_and_validate(&c->context[0], p, fp);
-+                              if (rc)
-+                                      goto bad;
-+                              break;
-+                      case OCON_FSUSE:
-+                              buf = next_entry(fp, sizeof(u32)*2);
-+                              if (!buf)
-+                                      goto bad;
-+                              c->v.behavior = le32_to_cpu(buf[0]);
-+                              len = le32_to_cpu(buf[1]);
-+                              buf = next_entry(fp, len);
-+                              if (!buf)
-+                                      goto bad;
-+                              c->u.name = kmalloc(len + 1,GFP_KERNEL);
-+                              if (!c->u.name) {
-+                                      rc = -ENOMEM;
-+                                      goto bad;
-+                              }
-+                              memcpy(c->u.name, buf, len);
-+                              c->u.name[len] = 0;
-+                              rc = context_read_and_validate(&c->context[0], p, fp);
-+                              if (rc)
-+                                      goto bad;
-+                              break;
-+                      }
-+              }
-+      }
-+
-+      buf = next_entry(fp, sizeof(u32));
-+      if (!buf) {
-+              rc = -EINVAL;
-+              goto bad;
-+      }
-+      nel = le32_to_cpu(buf[0]);
-+      genfs_p = NULL;
-+      rc = -EINVAL;
-+      for (i = 0; i < nel; i++) {
-+              newgenfs = kmalloc(sizeof(*newgenfs), GFP_KERNEL);
-+              if (!newgenfs) {
-+                      rc = -ENOMEM;
-+                      goto bad;
-+              }
-+              memset(newgenfs, 0, sizeof(*newgenfs));
-+              buf = next_entry(fp, sizeof(u32));
-+              if (!buf)
-+                      goto bad;
-+              len = le32_to_cpu(buf[0]);
-+              buf = next_entry(fp, len);
-+              if (!buf)
-+                      goto bad;
-+              newgenfs->fstype = kmalloc(len + 1,GFP_KERNEL);
-+              if (!newgenfs->fstype) {
-+                      rc = -ENOMEM;
-+                      goto bad;
-+              }
-+              memcpy(newgenfs->fstype, buf, len);
-+              newgenfs->fstype[len] = 0;
-+              for (genfs_p = NULL, genfs = p->genfs; genfs;
-+                   genfs_p = genfs, genfs = genfs->next) {
-+                      if (strcmp(newgenfs->fstype, genfs->fstype) == 0) {
-+                              printk(KERN_ERR "security:  dup genfs "
-+                                     "fstype %s\n", newgenfs->fstype);
-+                              goto bad;
-+                      }
-+                      if (strcmp(newgenfs->fstype, genfs->fstype) < 0)
-+                              break;
-+              }
-+              newgenfs->next = genfs;
-+              if (genfs_p)
-+                      genfs_p->next = newgenfs;
-+              else
-+                      p->genfs = newgenfs;
-+              buf = next_entry(fp, sizeof(u32));
-+              if (!buf)
-+                      goto bad;
-+              nel2 = le32_to_cpu(buf[0]);
-+              for (j = 0; j < nel2; j++) {
-+                      newc = kmalloc(sizeof(*newc), GFP_KERNEL);
-+                      if (!newc) {
-+                              rc = -ENOMEM;
-+                              goto bad;
-+                      }
-+                      memset(newc, 0, sizeof(*newc));
-+                      buf = next_entry(fp, sizeof(u32));
-+                      if (!buf)
-+                              goto bad;
-+                      len = le32_to_cpu(buf[0]);
-+                      buf = next_entry(fp, len);
-+                      if (!buf)
-+                              goto bad;
-+                      newc->u.name = kmalloc(len + 1,GFP_KERNEL);
-+                      if (!newc->u.name) {
-+                              rc = -ENOMEM;
-+                              goto bad;
-+                      }
-+                      memcpy(newc->u.name, buf, len);
-+                      newc->u.name[len] = 0;
-+                      buf = next_entry(fp, sizeof(u32));
-+                      if (!buf)
-+                              goto bad;
-+                      newc->v.sclass = le32_to_cpu(buf[0]);
-+                      if (context_read_and_validate(&newc->context[0], p, fp))
-+                              goto bad;
-+                      for (l = NULL, c = newgenfs->head; c;
-+                           l = c, c = c->next) {
-+                              if (!strcmp(newc->u.name, c->u.name) &&
-+                                  (!c->v.sclass || !newc->v.sclass ||
-+                                   newc->v.sclass == c->v.sclass)) {
-+                                      printk(KERN_ERR "security:  dup genfs "
-+                                             "entry (%s,%s)\n",
-+                                             newgenfs->fstype, c->u.name);
-+                                      goto bad;
-+                              }
-+                              len = strlen(newc->u.name);
-+                              len2 = strlen(c->u.name);
-+                              if (len > len2)
-+                                      break;
-+                      }
-+                      newc->next = c;
-+                      if (l)
-+                              l->next = newc;
-+                      else
-+                              newgenfs->head = newc;
-+              }
-+      }
-+
-+      rc = mls_read_trusted(p, fp);
-+      if (rc)
-+              goto bad;
-+out:
-+      return rc;
-+bad:
-+      policydb_destroy(p);
-+      goto out;
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/policydb.h  2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,256 @@
-+/*
-+ * A policy database (policydb) specifies the
-+ * configuration data for the security policy.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_POLICYDB_H_
-+#define _SS_POLICYDB_H_
-+
-+#include "symtab.h"
-+#include "avtab.h"
-+#include "sidtab.h"
-+#include "context.h"
-+#include "constraint.h"
-+
-+/*
-+ * A datum type is defined for each kind of symbol
-+ * in the configuration data:  individual permissions,
-+ * common prefixes for access vectors, classes,
-+ * users, roles, types, sensitivities, categories, etc.
-+ */
-+
-+/* Permission attributes */
-+struct perm_datum {
-+      u32 value;              /* permission bit + 1 */
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+#define MLS_BASE_READ    1    /* MLS base permission `read' */
-+#define MLS_BASE_WRITE   2    /* MLS base permission `write' */
-+#define MLS_BASE_READBY  4    /* MLS base permission `readby' */
-+#define MLS_BASE_WRITEBY 8    /* MLS base permission `writeby' */
-+      u32 base_perms;         /* MLS base permission mask */
-+#endif
-+};
-+
-+/* Attributes of a common prefix for access vectors */
-+struct common_datum {
-+      u32 value;                      /* internal common value */
-+      struct symtab permissions;      /* common permissions */
-+};
-+
-+/* Class attributes */
-+struct class_datum {
-+      u32 value;                      /* class value */
-+      char *comkey;                   /* common name */
-+      struct common_datum *comdatum;  /* common datum */
-+      struct symtab permissions;      /* class-specific permission symbol table */
-+      struct constraint_node *constraints;    /* constraints on class permissions */
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+      struct mls_perms mlsperms;      /* MLS base permission masks */
-+#endif
-+};
-+
-+/* Role attributes */
-+struct role_datum {
-+      u32 value;                      /* internal role value */
-+      struct ebitmap dominates;       /* set of roles dominated by this role */
-+      struct ebitmap types;           /* set of authorized types for role */
-+};
-+
-+struct role_trans {
-+      u32 role;               /* current role */
-+      u32 type;               /* program executable type */
-+      u32 new_role;           /* new role */
-+      struct role_trans *next;
-+};
-+
-+struct role_allow {
-+      u32 role;               /* current role */
-+      u32 new_role;           /* new role */
-+      struct role_allow *next;
-+};
-+
-+/* Type attributes */
-+struct type_datum {
-+      u32 value;              /* internal type value */
-+      unsigned char primary;  /* primary name? */
-+};
-+
-+/* User attributes */
-+struct user_datum {
-+      u32 value;                      /* internal user value */
-+      struct ebitmap roles;           /* set of authorized roles for user */
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+      struct mls_range_list *ranges;  /* list of authorized MLS ranges for user */
-+#endif
-+};
-+
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+/* Sensitivity attributes */
-+struct level_datum {
-+      struct mls_level *level;        /* sensitivity and associated categories */
-+      unsigned char isalias;  /* is this sensitivity an alias for another? */
-+};
-+
-+/* Category attributes */
-+struct cat_datum {
-+      u32 value;              /* internal category bit + 1 */
-+      unsigned char isalias;  /* is this category an alias for another? */
-+};
-+#endif
-+
-+
-+/*
-+ * The configuration data includes security contexts for
-+ * initial SIDs, unlabeled file systems, TCP and UDP port numbers,
-+ * network interfaces, and nodes.  This structure stores the
-+ * relevant data for one such entry.  Entries of the same kind
-+ * (e.g. all initial SIDs) are linked together into a list.
-+ */
-+struct ocontext {
-+      union {
-+              char *name;     /* name of initial SID, fs, netif, fstype, path */
-+              struct {
-+                      u8 protocol;
-+                      u16 low_port;
-+                      u16 high_port;
-+              } port;         /* TCP or UDP port information */
-+              struct {
-+                      u32 addr;
-+                      u32 mask;
-+              } node;         /* node information */
-+      } u;
-+      union {
-+              u32 sclass;  /* security class for genfs */
-+              u32 behavior;  /* labeling behavior for fs_use */
-+      } v;
-+      struct context context[2];      /* security context(s) */
-+      u32 sid[2];     /* SID(s) */
-+      struct ocontext *next;
-+};
-+
-+struct genfs {
-+      char *fstype;
-+      struct ocontext *head;
-+      struct genfs *next;
-+};
-+
-+/* symbol table array indices */
-+#define SYM_COMMONS 0
-+#define SYM_CLASSES 1
-+#define SYM_ROLES   2
-+#define SYM_TYPES   3
-+#define SYM_USERS   4
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+#define SYM_LEVELS  5
-+#define SYM_CATS    6
-+#define SYM_NUM     7
-+#else
-+#define SYM_NUM     5
-+#endif
-+
-+/* object context array indices */
-+#define OCON_ISID  0  /* initial SIDs */
-+#define OCON_FS    1  /* unlabeled file systems */
-+#define OCON_PORT  2  /* TCP and UDP port numbers */
-+#define OCON_NETIF 3  /* network interfaces */
-+#define OCON_NODE  4  /* nodes */
-+#define OCON_FSUSE 5  /* fs_use */
-+#define OCON_NUM   6
-+
-+/* The policy database */
-+struct policydb {
-+      /* symbol tables */
-+      struct symtab symtab[SYM_NUM];
-+#define p_commons symtab[SYM_COMMONS]
-+#define p_classes symtab[SYM_CLASSES]
-+#define p_roles symtab[SYM_ROLES]
-+#define p_types symtab[SYM_TYPES]
-+#define p_users symtab[SYM_USERS]
-+#define p_levels symtab[SYM_LEVELS]
-+#define p_cats symtab[SYM_CATS]
-+
-+      /* symbol names indexed by (value - 1) */
-+      char **sym_val_to_name[SYM_NUM];
-+#define p_common_val_to_name sym_val_to_name[SYM_COMMONS]
-+#define p_class_val_to_name sym_val_to_name[SYM_CLASSES]
-+#define p_role_val_to_name sym_val_to_name[SYM_ROLES]
-+#define p_type_val_to_name sym_val_to_name[SYM_TYPES]
-+#define p_user_val_to_name sym_val_to_name[SYM_USERS]
-+#define p_sens_val_to_name sym_val_to_name[SYM_LEVELS]
-+#define p_cat_val_to_name sym_val_to_name[SYM_CATS]
-+
-+      /* class, role, and user attributes indexed by (value - 1) */
-+      struct class_datum **class_val_to_struct;
-+      struct role_datum **role_val_to_struct;
-+      struct user_datum **user_val_to_struct;
-+
-+      /* type enforcement access vectors and transitions */
-+      struct avtab te_avtab;
-+
-+      /* role transitions */
-+      struct role_trans *role_tr;
-+
-+      /* role allows */
-+      struct role_allow *role_allow;
-+
-+      /* security contexts of initial SIDs, unlabeled file systems,
-+         TCP or UDP port numbers, network interfaces and nodes */
-+      struct ocontext *ocontexts[OCON_NUM];
-+
-+        /* security contexts for files in filesystems that cannot support
-+         a persistent label mapping or use another
-+         fixed labeling behavior. */
-+      struct genfs *genfs;
-+
-+#ifdef CONFIG_SECURITY_SELINUX_MLS
-+      /* number of legitimate MLS levels */
-+      u32 nlevels;
-+
-+      struct ebitmap trustedreaders;
-+      struct ebitmap trustedwriters;
-+      struct ebitmap trustedobjects;
-+#endif
-+};
-+
-+extern int policydb_init(struct policydb *p);
-+extern int policydb_index_classes(struct policydb *p);
-+extern int policydb_index_others(struct policydb *p);
-+extern int constraint_expr_destroy(struct constraint_expr *expr);
-+extern void policydb_destroy(struct policydb *p);
-+extern int policydb_load_isids(struct policydb *p, struct sidtab *s);
-+extern int policydb_context_isvalid(struct policydb *p, struct context *c);
-+extern int policydb_read(struct policydb *p, void *fp);
-+
-+#define PERM_SYMTAB_SIZE 32
-+
-+#define POLICYDB_VERSION 15
-+#define POLICYDB_CONFIG_MLS    1
-+
-+#define OBJECT_R "object_r"
-+#define OBJECT_R_VAL 1
-+
-+#define POLICYDB_MAGIC SELINUX_MAGIC
-+#define POLICYDB_STRING "SE Linux"
-+
-+struct policy_file {
-+      char *data;
-+      size_t len;
-+};
-+
-+static inline void *next_entry(struct policy_file *fp, size_t bytes)
-+{
-+      void *buf;
-+
-+      if (bytes > fp->len)
-+              return NULL;
-+
-+      buf = fp->data;
-+      fp->data += bytes;
-+      fp->len -= bytes;
-+      return buf;
-+}
-+
-+#endif        /* _SS_POLICYDB_H_ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/services.c  2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,1413 @@
-+/*
-+ * Implementation of the security services.
-+ *
-+ * Authors : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ *           James Morris <jmorris@redhat.com>
-+ *
-+ *  Copyright (C) 2003 Red Hat, Inc., James Morris <jmorris@redhat.com>
-+ *
-+ *    This program is free software; you can redistribute it and/or modify
-+ *    it under the terms of the GNU General Public License version 2,
-+ *      as published by the Free Software Foundation.
-+ */
-+#include "context.h"
-+#include "policydb.h"
-+#include "sidtab.h"
-+#include "services.h"
-+#include "mls.h"
-+
-+static rwlock_t policy_rwlock = RW_LOCK_UNLOCKED;
-+#define POLICY_RDLOCK read_lock(&policy_rwlock)
-+#define POLICY_WRLOCK write_lock_irq(&policy_rwlock)
-+#define POLICY_RDUNLOCK read_unlock(&policy_rwlock)
-+#define POLICY_WRUNLOCK write_unlock_irq(&policy_rwlock)
-+
-+static DECLARE_MUTEX(load_sem);
-+#define LOAD_LOCK down(&load_sem)
-+#define LOAD_UNLOCK up(&load_sem)
-+
-+struct sidtab sidtab;
-+struct policydb policydb;
-+int ss_initialized = 0;
-+
-+/*
-+ * The largest sequence number that has been used when
-+ * providing an access decision to the access vector cache.
-+ * The sequence number only changes when a policy change
-+ * occurs.
-+ */
-+static u32 latest_granting = 0;
-+
-+/*
-+ * Return the boolean value of a constraint expression
-+ * when it is applied to the specified source and target
-+ * security contexts.
-+ */
-+static int constraint_expr_eval(struct context *scontext,
-+                              struct context *tcontext,
-+                              struct constraint_expr *cexpr)
-+{
-+      u32 val1, val2;
-+      struct context *c;
-+      struct role_datum *r1, *r2;
-+      struct constraint_expr *e;
-+      int s[CEXPR_MAXDEPTH];
-+      int sp = -1;
-+
-+      for (e = cexpr; e; e = e->next) {
-+              switch (e->expr_type) {
-+              case CEXPR_NOT:
-+                      BUG_ON(sp < 0);
-+                      s[sp] = !s[sp];
-+                      break;
-+              case CEXPR_AND:
-+                      BUG_ON(sp < 1);
-+                      sp--;
-+                      s[sp] &= s[sp+1];
-+                      break;
-+              case CEXPR_OR:
-+                      BUG_ON(sp < 1);
-+                      sp--;
-+                      s[sp] |= s[sp+1];
-+                      break;
-+              case CEXPR_ATTR:
-+                      if (sp == (CEXPR_MAXDEPTH-1))
-+                              return 0;
-+                      switch (e->attr) {
-+                      case CEXPR_USER:
-+                              val1 = scontext->user;
-+                              val2 = tcontext->user;
-+                              break;
-+                      case CEXPR_TYPE:
-+                              val1 = scontext->type;
-+                              val2 = tcontext->type;
-+                              break;
-+                      case CEXPR_ROLE:
-+                              val1 = scontext->role;
-+                              val2 = tcontext->role;
-+                              r1 = policydb.role_val_to_struct[val1 - 1];
-+                              r2 = policydb.role_val_to_struct[val2 - 1];
-+                              switch (e->op) {
-+                              case CEXPR_DOM:
-+                                      s[++sp] = ebitmap_get_bit(&r1->dominates,
-+                                                                val2 - 1);
-+                                      continue;
-+                              case CEXPR_DOMBY:
-+                                      s[++sp] = ebitmap_get_bit(&r2->dominates,
-+                                                                val1 - 1);
-+                                      continue;
-+                              case CEXPR_INCOMP:
-+                                      s[++sp] = ( !ebitmap_get_bit(&r1->dominates,
-+                                                                   val2 - 1) &&
-+                                                  !ebitmap_get_bit(&r2->dominates,
-+                                                                   val1 - 1) );
-+                                      continue;
-+                              default:
-+                                      break;
-+                              }
-+                              break;
-+                      default:
-+                              BUG();
-+                              return 0;
-+                      }
-+
-+                      switch (e->op) {
-+                      case CEXPR_EQ:
-+                              s[++sp] = (val1 == val2);
-+                              break;
-+                      case CEXPR_NEQ:
-+                              s[++sp] = (val1 != val2);
-+                              break;
-+                      default:
-+                              BUG();
-+                              return 0;
-+                      }
-+                      break;
-+              case CEXPR_NAMES:
-+                      if (sp == (CEXPR_MAXDEPTH-1))
-+                              return 0;
-+                      c = scontext;
-+                      if (e->attr & CEXPR_TARGET)
-+                              c = tcontext;
-+                      if (e->attr & CEXPR_USER)
-+                              val1 = c->user;
-+                      else if (e->attr & CEXPR_ROLE)
-+                              val1 = c->role;
-+                      else if (e->attr & CEXPR_TYPE)
-+                              val1 = c->type;
-+                      else {
-+                              BUG();
-+                              return 0;
-+                      }
-+
-+                      switch (e->op) {
-+                      case CEXPR_EQ:
-+                              s[++sp] = ebitmap_get_bit(&e->names, val1 - 1);
-+                              break;
-+                      case CEXPR_NEQ:
-+                              s[++sp] = !ebitmap_get_bit(&e->names, val1 - 1);
-+                              break;
-+                      default:
-+                              BUG();
-+                              return 0;
-+                      }
-+                      break;
-+              default:
-+                      BUG();
-+                      return 0;
-+              }
-+      }
-+
-+      BUG_ON(sp != 0);
-+      return s[0];
-+}
-+
-+/*
-+ * Compute access vectors based on a context structure pair for
-+ * the permissions in a particular class.
-+ */
-+static int context_struct_compute_av(struct context *scontext,
-+                                   struct context *tcontext,
-+                                   u16 tclass,
-+                                   u32 requested,
-+                                   struct av_decision *avd)
-+{
-+      struct constraint_node *constraint;
-+      struct role_allow *ra;
-+      struct avtab_key avkey;
-+      struct avtab_datum *avdatum;
-+      struct class_datum *tclass_datum;
-+
-+      if (!tclass || tclass > policydb.p_classes.nprim) {
-+              printk(KERN_ERR "security_compute_av:  unrecognized class %d\n",
-+                     tclass);
-+              return -EINVAL;
-+      }
-+      tclass_datum = policydb.class_val_to_struct[tclass - 1];
-+
-+      /*
-+       * Initialize the access vectors to the default values.
-+       */
-+      avd->allowed = 0;
-+      avd->decided = 0xffffffff;
-+      avd->auditallow = 0;
-+      avd->auditdeny = 0xffffffff;
-+      avd->seqno = latest_granting;
-+
-+      /*
-+       * If a specific type enforcement rule was defined for
-+       * this permission check, then use it.
-+       */
-+      avkey.source_type = scontext->type;
-+      avkey.target_type = tcontext->type;
-+      avkey.target_class = tclass;
-+      avdatum = avtab_search(&policydb.te_avtab, &avkey, AVTAB_AV);
-+      if (avdatum) {
-+              if (avdatum->specified & AVTAB_ALLOWED)
-+                      avd->allowed = avtab_allowed(avdatum);
-+              if (avdatum->specified & AVTAB_AUDITDENY)
-+                      avd->auditdeny = avtab_auditdeny(avdatum);
-+              if (avdatum->specified & AVTAB_AUDITALLOW)
-+                      avd->auditallow = avtab_auditallow(avdatum);
-+      }
-+
-+      /*
-+       * Remove any permissions prohibited by the MLS policy.
-+       */
-+      mls_compute_av(scontext, tcontext, tclass_datum, &avd->allowed);
-+
-+      /*
-+       * Remove any permissions prohibited by a constraint.
-+       */
-+      constraint = tclass_datum->constraints;
-+      while (constraint) {
-+              if ((constraint->permissions & (avd->allowed)) &&
-+                  !constraint_expr_eval(scontext, tcontext,
-+                                        constraint->expr)) {
-+                      avd->allowed = (avd->allowed) & ~(constraint->permissions);
-+              }
-+              constraint = constraint->next;
-+      }
-+
-+      /*
-+       * If checking process transition permission and the
-+       * role is changing, then check the (current_role, new_role)
-+       * pair.
-+       */
-+      if (tclass == SECCLASS_PROCESS &&
-+          avd->allowed && PROCESS__TRANSITION &&
-+          scontext->role != tcontext->role) {
-+              for (ra = policydb.role_allow; ra; ra = ra->next) {
-+                      if (scontext->role == ra->role &&
-+                          tcontext->role == ra->new_role)
-+                              break;
-+              }
-+              if (!ra)
-+                      avd->allowed = (avd->allowed) & ~(PROCESS__TRANSITION);
-+      }
-+
-+      return 0;
-+}
-+
-+/**
-+ * security_compute_av - Compute access vector decisions.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @requested: requested permissions
-+ * @avd: access vector decisions
-+ *
-+ * Compute a set of access vector decisions based on the
-+ * SID pair (@ssid, @tsid) for the permissions in @tclass.
-+ * Return -%EINVAL if any of the parameters are invalid or %0
-+ * if the access vector decisions were computed successfully.
-+ */
-+int security_compute_av(u32 ssid,
-+                      u32 tsid,
-+                      u16 tclass,
-+                      u32 requested,
-+                      struct av_decision *avd)
-+{
-+      struct context *scontext = 0, *tcontext = 0;
-+      int rc = 0;
-+
-+      if (!ss_initialized) {
-+              avd->allowed = requested;
-+              avd->decided = requested;
-+              avd->auditallow = 0;
-+              avd->auditdeny = 0xffffffff;
-+              avd->seqno = latest_granting;
-+              return 0;
-+      }
-+
-+      POLICY_RDLOCK;
-+
-+      scontext = sidtab_search(&sidtab, ssid);
-+      if (!scontext) {
-+              printk(KERN_ERR "security_compute_av:  unrecognized SID %d\n",
-+                     ssid);
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+      tcontext = sidtab_search(&sidtab, tsid);
-+      if (!tcontext) {
-+              printk(KERN_ERR "security_compute_av:  unrecognized SID %d\n",
-+                     tsid);
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+
-+      rc = context_struct_compute_av(scontext, tcontext, tclass,
-+                                     requested, avd);
-+out:
-+      POLICY_RDUNLOCK;
-+      return rc;
-+}
-+
-+/*
-+ * Write the security context string representation of
-+ * the context structure `context' into a dynamically
-+ * allocated string of the correct size.  Set `*scontext'
-+ * to point to this string and set `*scontext_len' to
-+ * the length of the string.
-+ */
-+int context_struct_to_string(struct context *context, char **scontext, u32 *scontext_len)
-+{
-+      char *scontextp;
-+
-+      *scontext = 0;
-+      *scontext_len = 0;
-+
-+      /* Compute the size of the context. */
-+      *scontext_len += strlen(policydb.p_user_val_to_name[context->user - 1]) + 1;
-+      *scontext_len += strlen(policydb.p_role_val_to_name[context->role - 1]) + 1;
-+      *scontext_len += strlen(policydb.p_type_val_to_name[context->type - 1]) + 1;
-+      *scontext_len += mls_compute_context_len(context);
-+
-+      /* Allocate space for the context; caller must free this space. */
-+      scontextp = kmalloc(*scontext_len+1,GFP_ATOMIC);
-+      if (!scontextp) {
-+              return -ENOMEM;
-+      }
-+      *scontext = scontextp;
-+
-+      /*
-+       * Copy the user name, role name and type name into the context.
-+       */
-+      sprintf(scontextp, "%s:%s:%s:",
-+              policydb.p_user_val_to_name[context->user - 1],
-+              policydb.p_role_val_to_name[context->role - 1],
-+              policydb.p_type_val_to_name[context->type - 1]);
-+      scontextp += strlen(policydb.p_user_val_to_name[context->user - 1]) +
-+                   1 + strlen(policydb.p_role_val_to_name[context->role - 1]) +
-+                   1 + strlen(policydb.p_type_val_to_name[context->type - 1]) + 1;
-+
-+      mls_sid_to_context(context, &scontextp);
-+
-+      scontextp--;
-+      *scontextp = 0;
-+
-+      return 0;
-+}
-+
-+#include "initial_sid_to_string.h"
-+
-+/**
-+ * security_sid_to_context - Obtain a context for a given SID.
-+ * @sid: security identifier, SID
-+ * @scontext: security context
-+ * @scontext_len: length in bytes
-+ *
-+ * Write the string representation of the context associated with @sid
-+ * into a dynamically allocated string of the correct size.  Set @scontext
-+ * to point to this string and set @scontext_len to the length of the string.
-+ */
-+int security_sid_to_context(u32 sid, char **scontext, u32 *scontext_len)
-+{
-+      struct context *context;
-+      int rc = 0;
-+
-+      if (!ss_initialized) {
-+              if (sid <= SECINITSID_NUM) {
-+                      char *scontextp;
-+
-+                      *scontext_len = strlen(initial_sid_to_string[sid]) + 1;
-+                      scontextp = kmalloc(*scontext_len,GFP_KERNEL);
-+                      strcpy(scontextp, initial_sid_to_string[sid]);
-+                      *scontext = scontextp;
-+                      goto out;
-+              }
-+              printk(KERN_ERR "security_sid_to_context:  called before initial "
-+                     "load_policy on unknown SID %d\n", sid);
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+      POLICY_RDLOCK;
-+      context = sidtab_search(&sidtab, sid);
-+      if (!context) {
-+              printk(KERN_ERR "security_sid_to_context:  unrecognized SID "
-+                     "%d\n", sid);
-+              rc = -EINVAL;
-+              goto out_unlock;
-+      }
-+      rc = context_struct_to_string(context, scontext, scontext_len);
-+out_unlock:
-+      POLICY_RDUNLOCK;
-+out:
-+      return rc;
-+
-+}
-+
-+/**
-+ * security_context_to_sid - Obtain a SID for a given security context.
-+ * @scontext: security context
-+ * @scontext_len: length in bytes
-+ * @sid: security identifier, SID
-+ *
-+ * Obtains a SID associated with the security context that
-+ * has the string representation specified by @scontext.
-+ * Returns -%EINVAL if the context is invalid, -%ENOMEM if insufficient
-+ * memory is available, or 0 on success.
-+ */
-+int security_context_to_sid(char *scontext, u32 scontext_len, u32 *sid)
-+{
-+      char *scontext2;
-+      struct context context;
-+      struct role_datum *role;
-+      struct type_datum *typdatum;
-+      struct user_datum *usrdatum;
-+      char *scontextp, *p, oldc;
-+      int rc = 0;
-+
-+      if (!ss_initialized) {
-+              int i;
-+
-+              for (i = 1; i < SECINITSID_NUM; i++) {
-+                      if (!strcmp(initial_sid_to_string[i], scontext)) {
-+                              *sid = i;
-+                              goto out;
-+                      }
-+              }
-+              printk(KERN_ERR "security_context_to_sid: called before "
-+                     "initial load_policy on unknown context %s\n", scontext);
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+      *sid = SECSID_NULL;
-+
-+      /* Copy the string so that we can modify the copy as we parse it.
-+         The string should already by null terminated, but we append a
-+         null suffix to the copy to avoid problems with the existing
-+         attr package, which doesn't view the null terminator as part
-+         of the attribute value. */
-+      scontext2 = kmalloc(scontext_len+1,GFP_KERNEL);
-+      if (!scontext2) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      memcpy(scontext2, scontext, scontext_len);
-+      scontext2[scontext_len] = 0;
-+
-+      context_init(&context);
-+      *sid = SECSID_NULL;
-+
-+      POLICY_RDLOCK;
-+
-+      /* Parse the security context. */
-+
-+      rc = -EINVAL;
-+      scontextp = (char *) scontext2;
-+
-+      /* Extract the user. */
-+      p = scontextp;
-+      while (*p && *p != ':')
-+              p++;
-+
-+      if (*p == 0)
-+              goto out_unlock;
-+
-+      *p++ = 0;
-+
-+      usrdatum = hashtab_search(policydb.p_users.table, scontextp);
-+      if (!usrdatum)
-+              goto out_unlock;
-+
-+      context.user = usrdatum->value;
-+
-+      /* Extract role. */
-+      scontextp = p;
-+      while (*p && *p != ':')
-+              p++;
-+
-+      if (*p == 0)
-+              goto out_unlock;
-+
-+      *p++ = 0;
-+
-+      role = hashtab_search(policydb.p_roles.table, scontextp);
-+      if (!role)
-+              goto out_unlock;
-+      context.role = role->value;
-+
-+      /* Extract type. */
-+      scontextp = p;
-+      while (*p && *p != ':')
-+              p++;
-+      oldc = *p;
-+      *p++ = 0;
-+
-+      typdatum = hashtab_search(policydb.p_types.table, scontextp);
-+      if (!typdatum)
-+              goto out_unlock;
-+
-+      context.type = typdatum->value;
-+
-+      rc = mls_context_to_sid(oldc, &p, &context);
-+      if (rc)
-+              goto out_unlock;
-+
-+      /* Check the validity of the new context. */
-+      if (!policydb_context_isvalid(&policydb, &context)) {
-+              rc = -EINVAL;
-+              goto out_unlock;
-+      }
-+      /* Obtain the new sid. */
-+      rc = sidtab_context_to_sid(&sidtab, &context, sid);
-+out_unlock:
-+      POLICY_RDUNLOCK;
-+      context_destroy(&context);
-+      kfree(scontext2);
-+out:
-+      return rc;
-+}
-+
-+static inline int compute_sid_handle_invalid_context(
-+      struct context *scontext,
-+      struct context *tcontext,
-+      u16 tclass,
-+      struct context *newcontext)
-+{
-+      int rc = 0;
-+
-+      if (selinux_enforcing) {
-+              rc = -EACCES;
-+      } else {
-+              char *s, *t, *n;
-+              u32 slen, tlen, nlen;
-+
-+              context_struct_to_string(scontext, &s, &slen);
-+              context_struct_to_string(tcontext, &t, &tlen);
-+              context_struct_to_string(newcontext, &n, &nlen);
-+              printk(KERN_ERR "security_compute_sid:  invalid context %s", n);
-+              printk(" for scontext=%s", s);
-+              printk(" tcontext=%s", t);
-+              printk(" tclass=%s\n", policydb.p_class_val_to_name[tclass-1]);
-+              kfree(s);
-+              kfree(t);
-+              kfree(n);
-+      }
-+      return rc;
-+}
-+
-+static int security_compute_sid(u32 ssid,
-+                              u32 tsid,
-+                              u16 tclass,
-+                              u32 specified,
-+                              u32 *out_sid)
-+{
-+      struct context *scontext = 0, *tcontext = 0, newcontext;
-+      struct role_trans *roletr = 0;
-+      struct avtab_key avkey;
-+      struct avtab_datum *avdatum;
-+      unsigned int type_change = 0;
-+      int rc = 0;
-+
-+      if (!ss_initialized) {
-+              switch (tclass) {
-+              case SECCLASS_PROCESS:
-+                      *out_sid = ssid;
-+                      break;
-+              default:
-+                      *out_sid = tsid;
-+                      break;
-+              }
-+              goto out;
-+      }
-+
-+      POLICY_RDLOCK;
-+
-+      scontext = sidtab_search(&sidtab, ssid);
-+      if (!scontext) {
-+              printk(KERN_ERR "security_compute_sid:  unrecognized SID %d\n",
-+                     ssid);
-+              rc = -EINVAL;
-+              goto out_unlock;
-+      }
-+      tcontext = sidtab_search(&sidtab, tsid);
-+      if (!tcontext) {
-+              printk(KERN_ERR "security_compute_sid:  unrecognized SID %d\n",
-+                     tsid);
-+              rc = -EINVAL;
-+              goto out_unlock;
-+      }
-+
-+      context_init(&newcontext);
-+
-+      /* Set the user identity. */
-+      switch (specified) {
-+      case AVTAB_TRANSITION:
-+      case AVTAB_CHANGE:
-+              /* Use the process user identity. */
-+              newcontext.user = scontext->user;
-+              break;
-+      case AVTAB_MEMBER:
-+              /* Use the related object owner. */
-+              newcontext.user = tcontext->user;
-+              break;
-+      }
-+
-+      /* Set the role and type to default values. */
-+      switch (tclass) {
-+      case SECCLASS_PROCESS:
-+              /* Use the current role and type of process. */
-+              newcontext.role = scontext->role;
-+              newcontext.type = scontext->type;
-+              break;
-+      default:
-+              /* Use the well-defined object role. */
-+              newcontext.role = OBJECT_R_VAL;
-+              /* Use the type of the related object. */
-+              newcontext.type = tcontext->type;
-+      }
-+
-+      /* Look for a type transition/member/change rule. */
-+      avkey.source_type = scontext->type;
-+      avkey.target_type = tcontext->type;
-+      avkey.target_class = tclass;
-+      avdatum = avtab_search(&policydb.te_avtab, &avkey, AVTAB_TYPE);
-+      type_change = (avdatum && (avdatum->specified & specified));
-+      if (type_change) {
-+              /* Use the type from the type transition/member/change rule. */
-+              switch (specified) {
-+              case AVTAB_TRANSITION:
-+                      newcontext.type = avtab_transition(avdatum);
-+                      break;
-+              case AVTAB_MEMBER:
-+                      newcontext.type = avtab_member(avdatum);
-+                      break;
-+              case AVTAB_CHANGE:
-+                      newcontext.type = avtab_change(avdatum);
-+                      break;
-+              }
-+      }
-+
-+      /* Check for class-specific changes. */
-+      switch (tclass) {
-+      case SECCLASS_PROCESS:
-+              if (specified & AVTAB_TRANSITION) {
-+                      /* Look for a role transition rule. */
-+                      for (roletr = policydb.role_tr; roletr;
-+                           roletr = roletr->next) {
-+                              if (roletr->role == scontext->role &&
-+                                  roletr->type == tcontext->type) {
-+                                      /* Use the role transition rule. */
-+                                      newcontext.role = roletr->new_role;
-+                                      break;
-+                              }
-+                      }
-+              }
-+
-+              if (!type_change && !roletr) {
-+                      /* No change in process role or type. */
-+                      *out_sid = ssid;
-+                      goto out_unlock;
-+
-+              }
-+              break;
-+      default:
-+              if (!type_change &&
-+                  (newcontext.user == tcontext->user) &&
-+                  mls_context_cmp(scontext, tcontext)) {
-+                        /* No change in object type, owner,
-+                         or MLS attributes. */
-+                      *out_sid = tsid;
-+                      goto out_unlock;
-+              }
-+              break;
-+      }
-+
-+      /* Set the MLS attributes.
-+         This is done last because it may allocate memory. */
-+      rc = mls_compute_sid(scontext, tcontext, tclass, specified, &newcontext);
-+      if (rc)
-+              goto out_unlock;
-+
-+      /* Check the validity of the context. */
-+      if (!policydb_context_isvalid(&policydb, &newcontext)) {
-+              rc = compute_sid_handle_invalid_context(scontext,
-+                                                      tcontext,
-+                                                      tclass,
-+                                                      &newcontext);
-+              if (rc)
-+                      goto out_unlock;
-+      }
-+      /* Obtain the sid for the context. */
-+      rc = sidtab_context_to_sid(&sidtab, &newcontext, out_sid);
-+out_unlock:
-+      POLICY_RDUNLOCK;
-+      context_destroy(&newcontext);
-+out:
-+      return rc;
-+}
-+
-+/**
-+ * security_transition_sid - Compute the SID for a new subject/object.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @out_sid: security identifier for new subject/object
-+ *
-+ * Compute a SID to use for labeling a new subject or object in the
-+ * class @tclass based on a SID pair (@ssid, @tsid).
-+ * Return -%EINVAL if any of the parameters are invalid, -%ENOMEM
-+ * if insufficient memory is available, or %0 if the new SID was
-+ * computed successfully.
-+ */
-+int security_transition_sid(u32 ssid,
-+                          u32 tsid,
-+                          u16 tclass,
-+                          u32 *out_sid)
-+{
-+      return security_compute_sid(ssid, tsid, tclass, AVTAB_TRANSITION, out_sid);
-+}
-+
-+/**
-+ * security_member_sid - Compute the SID for member selection.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @out_sid: security identifier for selected member
-+ *
-+ * Compute a SID to use when selecting a member of a polyinstantiated
-+ * object of class @tclass based on a SID pair (@ssid, @tsid).
-+ * Return -%EINVAL if any of the parameters are invalid, -%ENOMEM
-+ * if insufficient memory is available, or %0 if the SID was
-+ * computed successfully.
-+ */
-+int security_member_sid(u32 ssid,
-+                      u32 tsid,
-+                      u16 tclass,
-+                      u32 *out_sid)
-+{
-+      return security_compute_sid(ssid, tsid, tclass, AVTAB_MEMBER, out_sid);
-+}
-+
-+/**
-+ * security_change_sid - Compute the SID for object relabeling.
-+ * @ssid: source security identifier
-+ * @tsid: target security identifier
-+ * @tclass: target security class
-+ * @out_sid: security identifier for selected member
-+ *
-+ * Compute a SID to use for relabeling an object of class @tclass
-+ * based on a SID pair (@ssid, @tsid).
-+ * Return -%EINVAL if any of the parameters are invalid, -%ENOMEM
-+ * if insufficient memory is available, or %0 if the SID was
-+ * computed successfully.
-+ */
-+int security_change_sid(u32 ssid,
-+                      u32 tsid,
-+                      u16 tclass,
-+                      u32 *out_sid)
-+{
-+      return security_compute_sid(ssid, tsid, tclass, AVTAB_CHANGE, out_sid);
-+}
-+
-+/*
-+ * Verify that each permission that is defined under the
-+ * existing policy is still defined with the same value
-+ * in the new policy.
-+ */
-+static int validate_perm(void *key, void *datum, void *p)
-+{
-+      struct hashtab *h;
-+      struct perm_datum *perdatum, *perdatum2;
-+      int rc = 0;
-+
-+
-+      h = p;
-+      perdatum = datum;
-+
-+      perdatum2 = hashtab_search(h, key);
-+      if (!perdatum2) {
-+              printk(KERN_ERR "security:  permission %s disappeared",
-+                     (char *)key);
-+              rc = -ENOENT;
-+              goto out;
-+      }
-+      if (perdatum->value != perdatum2->value) {
-+              printk(KERN_ERR "security:  the value of permission %s changed",
-+                     (char *)key);
-+              rc = -EINVAL;
-+      }
-+out:
-+      return rc;
-+}
-+
-+/*
-+ * Verify that each class that is defined under the
-+ * existing policy is still defined with the same
-+ * attributes in the new policy.
-+ */
-+static int validate_class(void *key, void *datum, void *p)
-+{
-+      struct policydb *newp;
-+      struct class_datum *cladatum, *cladatum2;
-+      int rc;
-+
-+      newp = p;
-+      cladatum = datum;
-+
-+      cladatum2 = hashtab_search(newp->p_classes.table, key);
-+      if (!cladatum2) {
-+              printk(KERN_ERR "security:  class %s disappeared\n",
-+                     (char *)key);
-+              rc = -ENOENT;
-+              goto out;
-+      }
-+      if (cladatum->value != cladatum2->value) {
-+              printk(KERN_ERR "security:  the value of class %s changed\n",
-+                     (char *)key);
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+      if ((cladatum->comdatum && !cladatum2->comdatum) ||
-+          (!cladatum->comdatum && cladatum2->comdatum)) {
-+              printk(KERN_ERR "security:  the inherits clause for the access "
-+                     "vector definition for class %s changed\n", (char *)key);
-+              rc = -EINVAL;
-+              goto out;
-+      }
-+      if (cladatum->comdatum) {
-+              rc = hashtab_map(cladatum->comdatum->permissions.table, validate_perm,
-+                               cladatum2->comdatum->permissions.table);
-+              if (rc) {
-+                      printk(" in the access vector definition for class "
-+                             "%s\n", (char *)key);
-+                      goto out;
-+              }
-+      }
-+      rc = hashtab_map(cladatum->permissions.table, validate_perm,
-+                       cladatum2->permissions.table);
-+      if (rc)
-+              printk(" in access vector definition for class %s\n",
-+                     (char *)key);
-+out:
-+      return rc;
-+}
-+
-+/* Clone the SID into the new SID table. */
-+static int clone_sid(u32 sid,
-+                   struct context *context,
-+                   void *arg)
-+{
-+      struct sidtab *s = arg;
-+
-+      return sidtab_insert(s, sid, context);
-+}
-+
-+static inline int convert_context_handle_invalid_context(struct context *context)
-+{
-+      int rc = 0;
-+
-+      if (selinux_enforcing) {
-+              rc = -EINVAL;
-+      } else {
-+              char *s;
-+              u32 len;
-+
-+              context_struct_to_string(context, &s, &len);
-+              printk(KERN_ERR "security:  context %s is invalid\n", s);
-+              kfree(s);
-+      }
-+      return rc;
-+}
-+
-+struct convert_context_args {
-+      struct policydb *oldp;
-+      struct policydb *newp;
-+};
-+
-+/*
-+ * Convert the values in the security context
-+ * structure `c' from the values specified
-+ * in the policy `p->oldp' to the values specified
-+ * in the policy `p->newp'.  Verify that the
-+ * context is valid under the new policy.
-+ */
-+static int convert_context(u32 key,
-+                         struct context *c,
-+                         void *p)
-+{
-+      struct convert_context_args *args;
-+      struct context oldc;
-+      struct role_datum *role;
-+      struct type_datum *typdatum;
-+      struct user_datum *usrdatum;
-+      char *s;
-+      u32 len;
-+      int rc = -EINVAL;
-+
-+      args = p;
-+
-+      rc = context_cpy(&oldc, c);
-+      if (rc)
-+              goto out;
-+
-+      /* Convert the user. */
-+      usrdatum = hashtab_search(args->newp->p_users.table,
-+                                args->oldp->p_user_val_to_name[c->user - 1]);
-+      if (!usrdatum) {
-+              goto bad;
-+      }
-+      c->user = usrdatum->value;
-+
-+      /* Convert the role. */
-+      role = hashtab_search(args->newp->p_roles.table,
-+                            args->oldp->p_role_val_to_name[c->role - 1]);
-+      if (!role) {
-+              goto bad;
-+      }
-+      c->role = role->value;
-+
-+      /* Convert the type. */
-+      typdatum = hashtab_search(args->newp->p_types.table,
-+                                args->oldp->p_type_val_to_name[c->type - 1]);
-+      if (!typdatum) {
-+              goto bad;
-+      }
-+      c->type = typdatum->value;
-+
-+      rc = mls_convert_context(args->oldp, args->newp, c);
-+      if (rc)
-+              goto bad;
-+
-+      /* Check the validity of the new context. */
-+      if (!policydb_context_isvalid(args->newp, c)) {
-+              rc = convert_context_handle_invalid_context(&oldc);
-+              if (rc)
-+                      goto bad;
-+      }
-+
-+      context_destroy(&oldc);
-+out:
-+      return rc;
-+bad:
-+      context_struct_to_string(&oldc, &s, &len);
-+      context_destroy(&oldc);
-+      printk(KERN_ERR "security:  invalidating context %s\n", s);
-+      kfree(s);
-+      goto out;
-+}
-+
-+extern void selinux_complete_init(void);
-+
-+/**
-+ * security_load_policy - Load a security policy configuration.
-+ * @data: binary policy data
-+ * @len: length of data in bytes
-+ *
-+ * Load a new set of security policy configuration data,
-+ * validate it and convert the SID table as necessary.
-+ * This function will flush the access vector cache after
-+ * loading the new policy.
-+ */
-+int security_load_policy(void *data, size_t len)
-+{
-+      struct policydb oldpolicydb, newpolicydb;
-+      struct sidtab oldsidtab, newsidtab;
-+      struct convert_context_args args;
-+      u32 seqno;
-+      int rc = 0;
-+      struct policy_file file = { data, len }, *fp = &file;
-+
-+      LOAD_LOCK;
-+
-+      if (!ss_initialized) {
-+              if (policydb_read(&policydb, fp)) {
-+                      LOAD_UNLOCK;
-+                      return -EINVAL;
-+              }
-+              if (policydb_load_isids(&policydb, &sidtab)) {
-+                      LOAD_UNLOCK;
-+                      policydb_destroy(&policydb);
-+                      return -EINVAL;
-+              }
-+              ss_initialized = 1;
-+              LOAD_UNLOCK;
-+              selinux_complete_init();
-+              return 0;
-+      }
-+
-+#if 0
-+      sidtab_hash_eval(&sidtab, "sids");
-+#endif
-+
-+      if (policydb_read(&newpolicydb, fp)) {
-+              LOAD_UNLOCK;
-+              return -EINVAL;
-+      }
-+
-+      sidtab_init(&newsidtab);
-+
-+      /* Verify that the existing classes did not change. */
-+      if (hashtab_map(policydb.p_classes.table, validate_class, &newpolicydb)) {
-+              printk(KERN_ERR "security:  the definition of an existing "
-+                     "class changed\n");
-+              rc = -EINVAL;
-+              goto err;
-+      }
-+
-+      /* Clone the SID table. */
-+      sidtab_shutdown(&sidtab);
-+      if (sidtab_map(&sidtab, clone_sid, &newsidtab)) {
-+              rc = -ENOMEM;
-+              goto err;
-+      }
-+
-+      /* Convert the internal representations of contexts
-+         in the new SID table and remove invalid SIDs. */
-+      args.oldp = &policydb;
-+      args.newp = &newpolicydb;
-+      sidtab_map_remove_on_error(&newsidtab, convert_context, &args);
-+
-+      /* Save the old policydb and SID table to free later. */
-+      memcpy(&oldpolicydb, &policydb, sizeof policydb);
-+      sidtab_set(&oldsidtab, &sidtab);
-+
-+      /* Install the new policydb and SID table. */
-+      POLICY_WRLOCK;
-+      memcpy(&policydb, &newpolicydb, sizeof policydb);
-+      sidtab_set(&sidtab, &newsidtab);
-+      seqno = ++latest_granting;
-+      POLICY_WRUNLOCK;
-+      LOAD_UNLOCK;
-+
-+      /* Free the old policydb and SID table. */
-+      policydb_destroy(&oldpolicydb);
-+      sidtab_destroy(&oldsidtab);
-+
-+      avc_ss_reset(seqno);
-+
-+      return 0;
-+
-+err:
-+      LOAD_UNLOCK;
-+      sidtab_destroy(&newsidtab);
-+      policydb_destroy(&newpolicydb);
-+      return rc;
-+
-+}
-+
-+/**
-+ * security_port_sid - Obtain the SID for a port.
-+ * @domain: communication domain aka address family
-+ * @type: socket type
-+ * @protocol: protocol number
-+ * @port: port number
-+ * @out_sid: security identifier
-+ */
-+int security_port_sid(u16 domain,
-+                    u16 type,
-+                    u8 protocol,
-+                    u16 port,
-+                    u32 *out_sid)
-+{
-+      struct ocontext *c;
-+      int rc = 0;
-+
-+      POLICY_RDLOCK;
-+
-+      c = policydb.ocontexts[OCON_PORT];
-+      while (c) {
-+              if (c->u.port.protocol == protocol &&
-+                  c->u.port.low_port <= port &&
-+                  c->u.port.high_port >= port)
-+                      break;
-+              c = c->next;
-+      }
-+
-+      if (c) {
-+              if (!c->sid[0]) {
-+                      rc = sidtab_context_to_sid(&sidtab,
-+                                                 &c->context[0],
-+                                                 &c->sid[0]);
-+                      if (rc)
-+                              goto out;
-+              }
-+              *out_sid = c->sid[0];
-+      } else {
-+              *out_sid = SECINITSID_PORT;
-+      }
-+
-+out:
-+      POLICY_RDUNLOCK;
-+      return rc;
-+}
-+
-+/**
-+ * security_netif_sid - Obtain the SID for a network interface.
-+ * @name: interface name
-+ * @if_sid: interface SID
-+ * @msg_sid: default SID for received packets
-+ */
-+int security_netif_sid(char *name,
-+                     u32 *if_sid,
-+                     u32 *msg_sid)
-+{
-+      int rc = 0;
-+      struct ocontext *c;
-+
-+      POLICY_RDLOCK;
-+
-+      c = policydb.ocontexts[OCON_NETIF];
-+      while (c) {
-+              if (strcmp(name, c->u.name) == 0)
-+                      break;
-+              c = c->next;
-+      }
-+
-+      if (c) {
-+              if (!c->sid[0] || !c->sid[1]) {
-+                      rc = sidtab_context_to_sid(&sidtab,
-+                                                &c->context[0],
-+                                                &c->sid[0]);
-+                      if (rc)
-+                              goto out;
-+                      rc = sidtab_context_to_sid(&sidtab,
-+                                                 &c->context[1],
-+                                                 &c->sid[1]);
-+                      if (rc)
-+                              goto out;
-+              }
-+              *if_sid = c->sid[0];
-+              *msg_sid = c->sid[1];
-+      } else {
-+              *if_sid = SECINITSID_NETIF;
-+              *msg_sid = SECINITSID_NETMSG;
-+      }
-+
-+out:
-+      POLICY_RDUNLOCK;
-+      return rc;
-+}
-+
-+
-+/**
-+ * security_node_sid - Obtain the SID for a node (host).
-+ * @domain: communication domain aka address family
-+ * @addrp: address
-+ * @addrlen: address length in bytes
-+ * @out_sid: security identifier
-+ */
-+int security_node_sid(u16 domain,
-+                    void *addrp,
-+                    u32 addrlen,
-+                    u32 *out_sid)
-+{
-+      int rc = 0;
-+      u32 addr;
-+      struct ocontext *c;
-+
-+      POLICY_RDLOCK;
-+
-+      if (domain != AF_INET || addrlen != sizeof(u32)) {
-+              *out_sid = SECINITSID_NODE;
-+              goto out;
-+      }
-+      addr = *((u32 *)addrp);
-+
-+      c = policydb.ocontexts[OCON_NODE];
-+      while (c) {
-+              if (c->u.node.addr == (addr & c->u.node.mask))
-+                      break;
-+              c = c->next;
-+      }
-+
-+      if (c) {
-+              if (!c->sid[0]) {
-+                      rc = sidtab_context_to_sid(&sidtab,
-+                                                 &c->context[0],
-+                                                 &c->sid[0]);
-+                      if (rc)
-+                              goto out;
-+              }
-+              *out_sid = c->sid[0];
-+      } else {
-+              *out_sid = SECINITSID_NODE;
-+      }
-+
-+out:
-+      POLICY_RDUNLOCK;
-+      return rc;
-+}
-+
-+#define SIDS_NEL 25
-+
-+/**
-+ * security_get_user_sids - Obtain reachable SIDs for a user.
-+ * @fromsid: starting SID
-+ * @username: username
-+ * @sids: array of reachable SIDs for user
-+ * @nel: number of elements in @sids
-+ *
-+ * Generate the set of SIDs for legal security contexts
-+ * for a given user that can be reached by @fromsid.
-+ * Set *@sids to point to a dynamically allocated
-+ * array containing the set of SIDs.  Set *@nel to the
-+ * number of elements in the array.
-+ */
-+
-+int security_get_user_sids(u32 fromsid,
-+                         char *username,
-+                         u32 **sids,
-+                         u32 *nel)
-+{
-+      struct context *fromcon, usercon;
-+      u32 *mysids, *mysids2, sid;
-+      u32 mynel = 0, maxnel = SIDS_NEL;
-+      struct user_datum *user;
-+      struct role_datum *role;
-+      struct av_decision avd;
-+      int rc = 0, i, j;
-+
-+      if (!ss_initialized) {
-+              *sids = NULL;
-+              *nel = 0;
-+              goto out;
-+      }
-+
-+      POLICY_RDLOCK;
-+
-+      fromcon = sidtab_search(&sidtab, fromsid);
-+      if (!fromcon) {
-+              rc = -EINVAL;
-+              goto out_unlock;
-+      }
-+
-+      user = hashtab_search(policydb.p_users.table, username);
-+      if (!user) {
-+              rc = -EINVAL;
-+              goto out_unlock;
-+      }
-+      usercon.user = user->value;
-+
-+      mysids = kmalloc(maxnel*sizeof(*mysids), GFP_ATOMIC);
-+      if (!mysids) {
-+              rc = -ENOMEM;
-+              goto out_unlock;
-+      }
-+      memset(mysids, 0, maxnel*sizeof(*mysids));
-+
-+      for (i = ebitmap_startbit(&user->roles); i < ebitmap_length(&user->roles); i++) {
-+              if (!ebitmap_get_bit(&user->roles, i))
-+                      continue;
-+              role = policydb.role_val_to_struct[i];
-+              usercon.role = i+1;
-+              for (j = ebitmap_startbit(&role->types); j < ebitmap_length(&role->types); j++) {
-+                      if (!ebitmap_get_bit(&role->types, j))
-+                              continue;
-+                      usercon.type = j+1;
-+                      if (usercon.type == fromcon->type)
-+                              continue;
-+                      mls_for_user_ranges(user,usercon) {
-+                              rc = context_struct_compute_av(fromcon, &usercon,
-+                                                             SECCLASS_PROCESS,
-+                                                             PROCESS__TRANSITION,
-+                                                             &avd);
-+                              if (rc ||  !(avd.allowed & PROCESS__TRANSITION))
-+                                      continue;
-+                              rc = sidtab_context_to_sid(&sidtab, &usercon, &sid);
-+                              if (rc) {
-+                                      kfree(mysids);
-+                                      goto out_unlock;
-+                              }
-+                              if (mynel < maxnel) {
-+                                      mysids[mynel++] = sid;
-+                              } else {
-+                                      maxnel += SIDS_NEL;
-+                                      mysids2 = kmalloc(maxnel*sizeof(*mysids2), GFP_ATOMIC);
-+                                      if (!mysids2) {
-+                                              rc = -ENOMEM;
-+                                              kfree(mysids);
-+                                              goto out_unlock;
-+                                      }
-+                                      memset(mysids2, 0, maxnel*sizeof(*mysids2));
-+                                      memcpy(mysids2, mysids, mynel * sizeof(*mysids2));
-+                                      kfree(mysids);
-+                                      mysids = mysids2;
-+                                      mysids[mynel++] = sid;
-+                              }
-+                      }
-+                      mls_end_user_ranges;
-+              }
-+      }
-+
-+      *sids = mysids;
-+      *nel = mynel;
-+
-+out_unlock:
-+      POLICY_RDUNLOCK;
-+out:
-+      return rc;
-+}
-+
-+/**
-+ * security_genfs_sid - Obtain a SID for a file in a filesystem
-+ * @fstype: filesystem type
-+ * @path: path from root of mount
-+ * @sclass: file security class
-+ * @sid: SID for path
-+ *
-+ * Obtain a SID to use for a file in a filesystem that
-+ * cannot support xattr or use a fixed labeling behavior like
-+ * transition SIDs or task SIDs.
-+ */
-+int security_genfs_sid(const char *fstype,
-+                     char *path,
-+                     u16 sclass,
-+                     u32 *sid)
-+{
-+      int len;
-+      struct genfs *genfs;
-+      struct ocontext *c;
-+      int rc = 0, cmp = 0;
-+
-+      POLICY_RDLOCK;
-+
-+      for (genfs = policydb.genfs; genfs; genfs = genfs->next) {
-+              cmp = strcmp(fstype, genfs->fstype);
-+              if (cmp <= 0)
-+                      break;
-+      }
-+
-+      if (!genfs || cmp) {
-+              *sid = SECINITSID_UNLABELED;
-+              rc = -ENOENT;
-+              goto out;
-+      }
-+
-+      for (c = genfs->head; c; c = c->next) {
-+              len = strlen(c->u.name);
-+              if ((!c->v.sclass || sclass == c->v.sclass) &&
-+                  (strncmp(c->u.name, path, len) == 0))
-+                      break;
-+      }
-+
-+      if (!c) {
-+              *sid = SECINITSID_UNLABELED;
-+              rc = -ENOENT;
-+              goto out;
-+      }
-+
-+      if (!c->sid[0]) {
-+              rc = sidtab_context_to_sid(&sidtab,
-+                                         &c->context[0],
-+                                         &c->sid[0]);
-+              if (rc)
-+                      goto out;
-+      }
-+
-+      *sid = c->sid[0];
-+out:
-+      POLICY_RDUNLOCK;
-+      return rc;
-+}
-+
-+/**
-+ * security_fs_use - Determine how to handle labeling for a filesystem.
-+ * @fstype: filesystem type
-+ * @behavior: labeling behavior
-+ * @sid: SID for filesystem (superblock)
-+ */
-+int security_fs_use(
-+      const char *fstype,
-+      unsigned int *behavior,
-+      u32 *sid)
-+{
-+      int rc = 0;
-+      struct ocontext *c;
-+
-+      POLICY_RDLOCK;
-+
-+      c = policydb.ocontexts[OCON_FSUSE];
-+      while (c) {
-+              if (strcmp(fstype, c->u.name) == 0)
-+                      break;
-+              c = c->next;
-+      }
-+
-+      if (c) {
-+              *behavior = c->v.behavior;
-+              if (!c->sid[0]) {
-+                      rc = sidtab_context_to_sid(&sidtab,
-+                                                 &c->context[0],
-+                                                 &c->sid[0]);
-+                      if (rc)
-+                              goto out;
-+              }
-+              *sid = c->sid[0];
-+      } else {
-+              rc = security_genfs_sid(fstype, "/", SECCLASS_DIR, sid);
-+              if (rc) {
-+                      *behavior = SECURITY_FS_USE_NONE;
-+                      rc = 0;
-+              } else {
-+                      *behavior = SECURITY_FS_USE_GENFS;
-+              }
-+      }
-+
-+out:
-+      POLICY_RDUNLOCK;
-+      return rc;
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/services.h  2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,21 @@
-+/*
-+ * Implementation of the security services.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_SERVICES_H_
-+#define _SS_SERVICES_H_
-+
-+#include "policydb.h"
-+#include "sidtab.h"
-+
-+/*
-+ * The security server uses two global data structures
-+ * when providing its services:  the SID table (sidtab)
-+ * and the policy database (policydb).
-+ */
-+extern struct sidtab sidtab;
-+extern struct policydb policydb;
-+
-+#endif        /* _SS_SERVICES_H_ */
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/sidtab.c    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,329 @@
-+/*
-+ * Implementation of the SID table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "sidtab.h"
-+
-+#define SIDTAB_HASH(sid) \
-+(sid & SIDTAB_HASH_MASK)
-+
-+#define INIT_SIDTAB_LOCK(s) spin_lock_init(&s->lock)
-+#define SIDTAB_LOCK(s) spin_lock_irq(&s->lock)
-+#define SIDTAB_UNLOCK(s) spin_unlock_irq(&s->lock)
-+
-+int sidtab_init(struct sidtab *s)
-+{
-+      int i;
-+
-+      s->htable = kmalloc(sizeof(*(s->htable)) * SIDTAB_SIZE, GFP_ATOMIC);
-+      if (!s->htable)
-+              return -ENOMEM;
-+      for (i = 0; i < SIDTAB_SIZE; i++)
-+              s->htable[i] = NULL;
-+      s->nel = 0;
-+      s->next_sid = 1;
-+      s->shutdown = 0;
-+      INIT_SIDTAB_LOCK(s);
-+      return 0;
-+}
-+
-+int sidtab_insert(struct sidtab *s, u32 sid, struct context *context)
-+{
-+      int hvalue, rc = 0;
-+      struct sidtab_node *prev, *cur, *newnode;
-+
-+      if (!s) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      hvalue = SIDTAB_HASH(sid);
-+      prev = NULL;
-+      cur = s->htable[hvalue];
-+      while (cur != NULL && sid > cur->sid) {
-+              prev = cur;
-+              cur = cur->next;
-+      }
-+
-+      if (cur && sid == cur->sid) {
-+              rc = -EEXIST;
-+              goto out;
-+      }
-+
-+      newnode = kmalloc(sizeof(*newnode), GFP_ATOMIC);
-+      if (newnode == NULL) {
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+      newnode->sid = sid;
-+      if (context_cpy(&newnode->context, context)) {
-+              kfree(newnode);
-+              rc = -ENOMEM;
-+              goto out;
-+      }
-+
-+      if (prev) {
-+              newnode->next = prev->next;
-+              wmb();
-+              prev->next = newnode;
-+      } else {
-+              newnode->next = s->htable[hvalue];
-+              wmb();
-+              s->htable[hvalue] = newnode;
-+      }
-+
-+      s->nel++;
-+      if (sid >= s->next_sid)
-+              s->next_sid = sid + 1;
-+out:
-+      return rc;
-+}
-+
-+int sidtab_remove(struct sidtab *s, u32 sid)
-+{
-+      int hvalue, rc = 0;
-+      struct sidtab_node *cur, *last;
-+
-+      if (!s) {
-+              rc = -ENOENT;
-+              goto out;
-+      }
-+
-+      hvalue = SIDTAB_HASH(sid);
-+      last = NULL;
-+      cur = s->htable[hvalue];
-+      while (cur != NULL && sid > cur->sid) {
-+              last = cur;
-+              cur = cur->next;
-+      }
-+
-+      if (cur == NULL || sid != cur->sid) {
-+              rc = -ENOENT;
-+              goto out;
-+      }
-+
-+      if (last == NULL)
-+              s->htable[hvalue] = cur->next;
-+      else
-+              last->next = cur->next;
-+
-+      context_destroy(&cur->context);
-+
-+      kfree(cur);
-+      s->nel--;
-+out:
-+      return rc;
-+}
-+
-+struct context *sidtab_search(struct sidtab *s, u32 sid)
-+{
-+      int hvalue;
-+      struct sidtab_node *cur;
-+
-+      if (!s)
-+              return NULL;
-+
-+      hvalue = SIDTAB_HASH(sid);
-+      cur = s->htable[hvalue];
-+      while (cur != NULL && sid > cur->sid)
-+              cur = cur->next;
-+
-+      if (cur == NULL || sid != cur->sid) {
-+              /* Remap invalid SIDs to the unlabeled SID. */
-+              sid = SECINITSID_UNLABELED;
-+              hvalue = SIDTAB_HASH(sid);
-+              cur = s->htable[hvalue];
-+              while (cur != NULL && sid > cur->sid)
-+                      cur = cur->next;
-+              if (!cur || sid != cur->sid)
-+                      return NULL;
-+      }
-+
-+      return &cur->context;
-+}
-+
-+int sidtab_map(struct sidtab *s,
-+             int (*apply) (u32 sid,
-+                           struct context *context,
-+                           void *args),
-+             void *args)
-+{
-+      int i, rc = 0;
-+      struct sidtab_node *cur;
-+
-+      if (!s)
-+              goto out;
-+
-+      for (i = 0; i < SIDTAB_SIZE; i++) {
-+              cur = s->htable[i];
-+              while (cur != NULL) {
-+                      rc = apply(cur->sid, &cur->context, args);
-+                      if (rc)
-+                              goto out;
-+                      cur = cur->next;
-+              }
-+      }
-+out:
-+      return rc;
-+}
-+
-+void sidtab_map_remove_on_error(struct sidtab *s,
-+                              int (*apply) (u32 sid,
-+                                            struct context *context,
-+                                            void *args),
-+                              void *args)
-+{
-+      int i, ret;
-+      struct sidtab_node *last, *cur, *temp;
-+
-+      if (!s)
-+              return;
-+
-+      for (i = 0; i < SIDTAB_SIZE; i++) {
-+              last = NULL;
-+              cur = s->htable[i];
-+              while (cur != NULL) {
-+                      ret = apply(cur->sid, &cur->context, args);
-+                      if (ret) {
-+                              if (last) {
-+                                      last->next = cur->next;
-+                              } else {
-+                                      s->htable[i] = cur->next;
-+                              }
-+
-+                              temp = cur;
-+                              cur = cur->next;
-+                              context_destroy(&temp->context);
-+                              kfree(temp);
-+                              s->nel--;
-+                      } else {
-+                              last = cur;
-+                              cur = cur->next;
-+                      }
-+              }
-+      }
-+
-+      return;
-+}
-+
-+static inline u32 sidtab_search_context(struct sidtab *s,
-+                                                struct context *context)
-+{
-+      int i;
-+      struct sidtab_node *cur;
-+
-+      for (i = 0; i < SIDTAB_SIZE; i++) {
-+              cur = s->htable[i];
-+              while (cur != NULL) {
-+                      if (context_cmp(&cur->context, context))
-+                              return cur->sid;
-+                      cur = cur->next;
-+              }
-+      }
-+      return 0;
-+}
-+
-+int sidtab_context_to_sid(struct sidtab *s,
-+                        struct context *context,
-+                        u32 *out_sid)
-+{
-+      u32 sid;
-+      int ret = 0;
-+
-+      *out_sid = SECSID_NULL;
-+
-+      sid = sidtab_search_context(s, context);
-+      if (!sid) {
-+              SIDTAB_LOCK(s);
-+              /* Rescan now that we hold the lock. */
-+              sid = sidtab_search_context(s, context);
-+              if (sid)
-+                      goto unlock_out;
-+              /* No SID exists for the context.  Allocate a new one. */
-+              if (s->next_sid == UINT_MAX || s->shutdown) {
-+                      ret = -ENOMEM;
-+                      goto unlock_out;
-+              }
-+              sid = s->next_sid++;
-+              ret = sidtab_insert(s, sid, context);
-+              if (ret)
-+                      s->next_sid--;
-+unlock_out:
-+              SIDTAB_UNLOCK(s);
-+      }
-+
-+      if (ret)
-+              return ret;
-+
-+      *out_sid = sid;
-+      return 0;
-+}
-+
-+void sidtab_hash_eval(struct sidtab *h, char *tag)
-+{
-+      int i, chain_len, slots_used, max_chain_len;
-+      struct sidtab_node *cur;
-+
-+      slots_used = 0;
-+      max_chain_len = 0;
-+      for (i = 0; i < SIDTAB_SIZE; i++) {
-+              cur = h->htable[i];
-+              if (cur) {
-+                      slots_used++;
-+                      chain_len = 0;
-+                      while (cur) {
-+                              chain_len++;
-+                              cur = cur->next;
-+                      }
-+
-+                      if (chain_len > max_chain_len)
-+                              max_chain_len = chain_len;
-+              }
-+      }
-+
-+      printk(KERN_INFO "%s:  %d entries and %d/%d buckets used, longest "
-+             "chain length %d\n", tag, h->nel, slots_used, SIDTAB_SIZE,
-+             max_chain_len);
-+}
-+
-+void sidtab_destroy(struct sidtab *s)
-+{
-+      int i;
-+      struct sidtab_node *cur, *temp;
-+
-+      if (!s)
-+              return;
-+
-+      for (i = 0; i < SIDTAB_SIZE; i++) {
-+              cur = s->htable[i];
-+              while (cur != NULL) {
-+                      temp = cur;
-+                      cur = cur->next;
-+                      context_destroy(&temp->context);
-+                      kfree(temp);
-+              }
-+              s->htable[i] = NULL;
-+      }
-+      kfree(s->htable);
-+      s->htable = NULL;
-+      s->nel = 0;
-+      s->next_sid = 1;
-+}
-+
-+void sidtab_set(struct sidtab *dst, struct sidtab *src)
-+{
-+      SIDTAB_LOCK(src);
-+      dst->htable = src->htable;
-+      dst->nel = src->nel;
-+      dst->next_sid = src->next_sid;
-+      dst->shutdown = 0;
-+      SIDTAB_UNLOCK(src);
-+}
-+
-+void sidtab_shutdown(struct sidtab *s)
-+{
-+      SIDTAB_LOCK(s);
-+      s->shutdown = 1;
-+      SIDTAB_UNLOCK(s);
-+}
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/sidtab.h    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,59 @@
-+/*
-+ * A security identifier table (sidtab) is a hash table
-+ * of security context structures indexed by SID value.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_SIDTAB_H_
-+#define _SS_SIDTAB_H_
-+
-+#include "context.h"
-+
-+struct sidtab_node {
-+      u32 sid;                /* security identifier */
-+      struct context context; /* security context structure */
-+      struct sidtab_node *next;
-+};
-+
-+#define SIDTAB_HASH_BITS 7
-+#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
-+#define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1)
-+
-+#define SIDTAB_SIZE SIDTAB_HASH_BUCKETS
-+
-+struct sidtab {
-+      struct sidtab_node **htable;
-+      unsigned int nel;       /* number of elements */
-+      unsigned int next_sid;  /* next SID to allocate */
-+      unsigned char shutdown;
-+      spinlock_t lock;
-+};
-+
-+int sidtab_init(struct sidtab *s);
-+int sidtab_insert(struct sidtab *s, u32 sid, struct context *context);
-+struct context *sidtab_search(struct sidtab *s, u32 sid);
-+
-+int sidtab_map(struct sidtab *s,
-+             int (*apply) (u32 sid,
-+                           struct context *context,
-+                           void *args),
-+             void *args);
-+
-+void sidtab_map_remove_on_error(struct sidtab *s,
-+                              int (*apply) (u32 sid,
-+                                            struct context *context,
-+                                            void *args),
-+                              void *args);
-+
-+int sidtab_context_to_sid(struct sidtab *s,
-+                        struct context *context,
-+                        u32 *sid);
-+
-+void sidtab_hash_eval(struct sidtab *h, char *tag);
-+void sidtab_destroy(struct sidtab *s);
-+void sidtab_set(struct sidtab *dst, struct sidtab *src);
-+void sidtab_shutdown(struct sidtab *s);
-+
-+#endif        /* _SS_SIDTAB_H_ */
-+
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/symtab.c    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,40 @@
-+/*
-+ * Implementation of the symbol table type.
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#include "symtab.h"
-+
-+static unsigned int symhash(struct hashtab *h, void *key)
-+{
-+      char *p, *keyp;
-+      unsigned int size;
-+      unsigned int val;
-+
-+      val = 0;
-+      keyp = key;
-+      size = strlen(keyp);
-+      for (p = keyp; (p - keyp) < size; p++)
-+              val = (val << 4 | (val >> (8*sizeof(unsigned int)-4))) ^ (*p);
-+      return val & (h->size - 1);
-+}
-+
-+static int symcmp(struct hashtab *h, void *key1, void *key2)
-+{
-+      char *keyp1, *keyp2;
-+
-+      keyp1 = key1;
-+      keyp2 = key2;
-+      return strcmp(keyp1, keyp2);
-+}
-+
-+
-+int symtab_init(struct symtab *s, unsigned int size)
-+{
-+      s->table = hashtab_create(symhash, symcmp, size);
-+      if (!s->table)
-+              return -1;
-+      s->nprim = 0;
-+      return 0;
-+}
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/security/selinux/ss/symtab.h    2003-07-19 17:04:47.000000000 -0700
-@@ -0,0 +1,23 @@
-+/*
-+ * A symbol table (symtab) maintains associations between symbol
-+ * strings and datum values.  The type of the datum values
-+ * is arbitrary.  The symbol table type is implemented
-+ * using the hash table type (hashtab).
-+ *
-+ * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
-+ */
-+#ifndef _SS_SYMTAB_H_
-+#define _SS_SYMTAB_H_
-+
-+#include "hashtab.h"
-+
-+struct symtab {
-+      struct hashtab *table;  /* hash table (keyed on a string) */
-+      u32 nprim;              /* number of primary names in table */
-+};
-+
-+int symtab_init(struct symtab *s, unsigned int size);
-+
-+#endif        /* _SS_SYMTAB_H_ */
-+
-+
---- linux-2.6.0-test1/sound/core/timer.c       2003-06-14 12:18:24.000000000 -0700
-+++ 25/sound/core/timer.c      2003-07-19 17:06:14.000000000 -0700
-@@ -1688,10 +1688,11 @@ static ssize_t snd_timer_user_read(struc
-                               break;
-                       }
-               }
--              spin_unlock_irq(&tu->qlock);
-               if (err < 0)
-                       break;
-+              spin_unlock_irq(&tu->qlock);
-+
-               if (tu->tread) {
-                       if (copy_to_user(buffer, &tu->tqueue[tu->qhead++], sizeof(snd_timer_tread_t))) {
-                               err = -EFAULT;
-@@ -1712,6 +1713,7 @@ static ssize_t snd_timer_user_read(struc
-               spin_lock_irq(&tu->qlock);
-               tu->qused--;
-       }
-+      spin_unlock_irq(&tu->qlock);
-       return result > 0 ? result : err;
- }
---- linux-2.6.0-test1/sound/isa/cmi8330.c      2003-06-14 12:17:58.000000000 -0700
-+++ 25/sound/isa/cmi8330.c     2003-07-19 17:03:51.000000000 -0700
-@@ -293,7 +293,7 @@ static int __devinit snd_cmi8330_pnp(int
-                                    const struct pnp_card_device_id *id)
- {
-       struct pnp_dev *pdev;
--      struct pnp_resource_table * cfg = kmalloc(GFP_ATOMIC, sizeof(struct pnp_resource_table));
-+      struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_ATOMIC);
-       int err;
-       acard->cap = pnp_request_card_device(card, id->devs[0].id, NULL);
---- linux-2.6.0-test1/sound/isa/es18xx.c       2003-06-14 12:18:08.000000000 -0700
-+++ 25/sound/isa/es18xx.c      2003-07-19 17:03:51.000000000 -0700
-@@ -1966,7 +1966,7 @@ static int __devinit snd_audiodrive_pnp(
-                                       const struct pnp_card_device_id *id)
- {
-       struct pnp_dev *pdev;
--      struct pnp_resource_table * cfg = kmalloc(GFP_ATOMIC, sizeof(struct pnp_resource_table));
-+      struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_ATOMIC);
-       int err;
-       if (!cfg)
---- linux-2.6.0-test1/sound/oss/ac97_plugin_ad1980.c   2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/ac97_plugin_ad1980.c  2003-07-19 17:03:51.000000000 -0700
-@@ -17,7 +17,7 @@
-    the provisions above, a recipient may use your version of this
-    file under either the OSL or the GPL.
-    
--   Authors:   Arjan van de Ven <arjanv@redhat.com>
-+   Authors:   Alan Cox <alan@redhat.com>
-    This is an example codec plugin. This one switches the connections
-    around to match the setups some vendors use with audio switched to
---- linux-2.6.0-test1/sound/oss/ad1816.c       2003-06-14 12:18:33.000000000 -0700
-+++ 25/sound/oss/ad1816.c      2003-07-19 17:03:51.000000000 -0700
-@@ -1,15 +1,15 @@
- /*
-  *
-- * AD1816 lowlevel sound driver for Linux 2.2.0 and above
-+ * AD1816 lowlevel sound driver for Linux 2.6.0 and above
-  *
-- * Copyright (C) 1998 by Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de>
-+ * Copyright (C) 1998-2003 by Thorsten Knabe <linux@thorsten-knabe.de>
-  *
-  * Based on the CS4232/AD1848 driver Copyright (C) by Hannu Savolainen 1993-1996
-  *
-  *
-- * version: 1.3.1
-- * status: experimental
-- * date: 1999/4/18
-+ * version: 1.5
-+ * status: beta
-+ * date: 2003/07/15
-  *
-  * Changes:
-  *    Oleg Drokin: Some cleanup of load/unload functions.     1998/11/24
-@@ -30,8 +30,17 @@
-  *    Christoph Hellwig: Added isapnp support                 2000/03/15
-  *
-  *    Arnaldo Carvalho de Melo: get rid of check_region       2001/10/07
-+ *      
-+ *      Thorsten Knabe: Compiling with CONFIG_PNP enabled
-+ *    works again. It is now possible to use more than one 
-+ *    AD1816 sound card. Sample rate now may be changed during
-+ *    playback/capture. printk() uses log levels everywhere.
-+ *    SMP fixes. DMA handling fixes.
-+ *    Other minor code cleanup.                               2003/07/15
-+ *
-  */
-+
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/init.h>
-@@ -42,9 +51,6 @@
- #include "sound_config.h"
- #define DEBUGNOISE(x)
--#define DEBUGINFO(x)
--#define DEBUGLOG(x)
--#define DEBUGWARN(x)
- #define CHECK_FOR_POWER { int timeout=100; \
-   while (timeout > 0 && (inb(devc->base)&0x80)!= 0x80) {\
-@@ -63,21 +69,21 @@ typedef struct
-       int            dma_playback;
-         int            dma_capture;
-   
--        int            speed;         /* open */
-+      int            opened;         /* open */
-+        int            speed; 
-       int            channels;
-       int            audio_format;
--      unsigned char  format_bits;
-         int            audio_mode; 
--      int            opened;
-   
-         int            recmask;        /* setup */
-+      unsigned char  format_bits;
-       int            supported_devices;
-       int            supported_rec_devices;
-       unsigned short levels[SOUND_MIXER_NRDEVICES];
-+                                      /* misc */
-+      struct pnp_dev *pnpdev;  /* configured via pnp */
-         int            dev_no;   /* this is the # in audio_devs and NOT 
-                                   in ad1816_info */
--      int            irq_ok;
--      int            *osp;
-       spinlock_t      lock;  
- } ad1816_info;
-@@ -85,12 +91,6 @@ static int nr_ad1816_devs;
- static int ad1816_clockfreq = 33000;
- static int options;
--/* for backward mapping of irq to sound device */
--
--static volatile char irq2dev[17] = {-1, -1, -1, -1, -1, -1, -1, -1,
--                                  -1, -1, -1, -1, -1, -1, -1, -1, -1};
--
--
- /* supported audio formats */
- static int  ad_format_mask =
- AFMT_U8 | AFMT_S16_LE | AFMT_S16_BE | AFMT_MU_LAW | AFMT_A_LAW;
-@@ -105,33 +105,22 @@ static ad1816_info dev_info[MAX_AUDIO_DE
- static int ad_read (ad1816_info * devc, int reg)
- {
--      unsigned long   flags;
-       int result;
-       
-       CHECK_FOR_POWER;
--
--      spin_lock_irqsave(&devc->lock,flags); /* make register access atomic */
-       outb ((unsigned char) (reg & 0x3f), devc->base+0);
-       result = inb(devc->base+2);
-       result+= inb(devc->base+3)<<8;
--      spin_unlock_irqrestore(&devc->lock,flags);
--      
-       return (result);
- }
- static void ad_write (ad1816_info * devc, int reg, int data)
- {
--      unsigned long flags;
--      
-       CHECK_FOR_POWER;
--      
--      spin_lock_irqsave(&devc->lock,flags); /* make register access atomic */
-       outb ((unsigned char) (reg & 0xff), devc->base+0);
-       outb ((unsigned char) (data & 0xff),devc->base+2);
-       outb ((unsigned char) ((data>>8)&0xff),devc->base+3);
--      spin_unlock_irqrestore(&devc->lock,flags);
--
- }
- /* ------------------------------------------------------------------- */
-@@ -144,7 +133,7 @@ static void ad1816_halt_input (int dev)
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
-       unsigned char buffer;
-       
--      DEBUGINFO (printk("ad1816: halt_input called\n"));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: halt_input called\n"));
-       
-       spin_lock_irqsave(&devc->lock,flags); 
-       
-@@ -176,7 +165,7 @@ static void ad1816_halt_output (int dev)
-       
-       unsigned char buffer;
--      DEBUGINFO (printk("ad1816: halt_output called!\n"));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: halt_output called!\n"));
-       spin_lock_irqsave(&devc->lock,flags); 
-       /* Mute pcm output */
-@@ -210,7 +199,7 @@ static void ad1816_output_block (int dev
-       unsigned long cnt;
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
-       
--      DEBUGINFO(printk("ad1816: output_block called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: output_block called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-   
-       cnt = count/4 - 1;
-   
-@@ -231,7 +220,7 @@ static void ad1816_start_input (int dev,
-       unsigned long  cnt;
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
-       
--      DEBUGINFO(printk("ad1816: start_input called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: start_input called buf=%ld count=%d flags=%d\n",buf,count,intrflag));
-       cnt = count/4 - 1;
-@@ -239,7 +228,6 @@ static void ad1816_start_input (int dev,
-       /* set transfer count */
-       ad_write (devc, 10, cnt & 0xffff); 
--
-       devc->audio_mode |= PCM_ENABLE_INPUT;
-       spin_unlock_irqrestore(&devc->lock,flags);
- }
-@@ -251,33 +239,19 @@ static int ad1816_prepare_for_input (int
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
-       unsigned char fmt_bits;
-       
--      DEBUGINFO (printk ("ad1816: prepare_for_input called: bsize=%d bcount=%d\n",bsize,bcount));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: prepare_for_input called: bsize=%d bcount=%d\n",bsize,bcount));
-       spin_lock_irqsave(&devc->lock,flags);
--      
-       fmt_bits= (devc->format_bits&0x7)<<3;
-       
-       /* set mono/stereo mode */
-       if (devc->channels > 1) {
-               fmt_bits |=0x4;
-       }
--
-       /* set Mono/Stereo in playback/capture register */
-       outb( (inb(devc->base+8) & ~0x3C)|fmt_bits, devc->base+8); 
-       outb( (inb(devc->base+9) & ~0x3C)|fmt_bits, devc->base+9);
--  
--      /* If compiled into kernel, AD1816_CLOCK is defined, so use it */
--#ifdef AD1816_CLOCK 
--      ad1816_clockfreq=AD1816_CLOCK;
--#endif
--
--      /* capture/playback frequency correction for soundcards 
--         with clock chips != 33MHz (allowed range 5 - 100 kHz) */
--      if (ad1816_clockfreq<5000 || ad1816_clockfreq>100000) {
--              ad1816_clockfreq=33000;
--      }
--      
-       freq=((unsigned int)devc->speed*33000)/ad1816_clockfreq; 
-       /* write playback/capture speeds */
-@@ -297,7 +271,7 @@ static int ad1816_prepare_for_output (in
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
-       unsigned char fmt_bits;
--      DEBUGINFO (printk ("ad1816: prepare_for_output called: bsize=%d bcount=%d\n",bsize,bcount));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: prepare_for_output called: bsize=%d bcount=%d\n",bsize,bcount));
-       spin_lock_irqsave(&devc->lock,flags);
-@@ -311,17 +285,6 @@ static int ad1816_prepare_for_output (in
-       outb( (inb(devc->base+8) & ~0x3C)|fmt_bits, devc->base+8); 
-       outb( (inb(devc->base+9) & ~0x3C)|fmt_bits, devc->base+9);
-   
--#ifdef AD1816_CLOCK 
--      ad1816_clockfreq=AD1816_CLOCK;
--#endif
--
--      /* capture/playback frequency correction for soundcards 
--         with clock chips != 33MHz (allowed range 5 - 100 kHz)*/
--
--      if (ad1816_clockfreq<5000 || ad1816_clockfreq>100000) {
--              ad1816_clockfreq=33000;
--      }
--  
-       freq=((unsigned int)devc->speed*33000)/ad1816_clockfreq; 
-       
-       /* write playback/capture speeds */
-@@ -340,7 +303,7 @@ static void ad1816_trigger (int dev, int
-       unsigned long flags;
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
--      DEBUGINFO (printk("ad1816: trigger called! (devc=%d,devc->base=%d\n", devc, devc->base));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: trigger called! (devc=%d,devc->base=%d\n", devc, devc->base));
-       /* mode may have changed */
-@@ -388,10 +351,17 @@ static void ad1816_reset (int dev)
- /* set playback speed */
- static int ad1816_set_speed (int dev, int arg)
- {
-+      unsigned long flags;
-+      unsigned int freq;
-+      int ret;
-+
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
-       
-+      spin_lock_irqsave(&devc->lock, flags);
-       if (arg == 0) {
--              return devc->speed;
-+              ret = devc->speed;
-+              spin_unlock_irqrestore(&devc->lock, flags);
-+              return ret;
-       }
-       /* range checking */
-       if (arg < 4000) {
-@@ -400,14 +370,23 @@ static int ad1816_set_speed (int dev, in
-       if (arg > 55000) {
-               arg = 55000;
-       }
--
-       devc->speed = arg;
--      return devc->speed;
-+
-+      /* change speed during playback */
-+      freq=((unsigned int)devc->speed*33000)/ad1816_clockfreq; 
-+      /* write playback/capture speeds */
-+      ad_write (devc, 2, freq & 0xffff);      
-+      ad_write (devc, 3, freq & 0xffff);      
-+
-+      ret = devc->speed;
-+      spin_unlock_irqrestore(&devc->lock, flags);
-+      return ret;
- }
- static unsigned int ad1816_set_bits (int dev, unsigned int arg)
- {
-+      unsigned long flags;
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
-       
-       static struct format_tbl {
-@@ -428,10 +407,13 @@ static unsigned int ad1816_set_bits (int
-       int  i, n = sizeof (format2bits) / sizeof (struct format_tbl);
-+      spin_lock_irqsave(&devc->lock, flags);
-       /* return current format */
--      if (arg == 0)
--              return devc->audio_format;
--      
-+      if (arg == 0) {
-+              arg = devc->audio_format;
-+              spin_unlock_irqrestore(&devc->lock, flags);
-+              return arg;
-+      }
-       devc->audio_format = arg;
-       /* search matching format bits */
-@@ -439,12 +421,15 @@ static unsigned int ad1816_set_bits (int
-               if (format2bits[i].format == arg) {
-                       devc->format_bits = format2bits[i].bits;
-                       devc->audio_format = arg;
-+                      spin_unlock_irqrestore(&devc->lock, flags);
-                       return arg;
-               }
-       /* Still hanging here. Something must be terribly wrong */
-       devc->format_bits = 0;
--      return devc->audio_format = AFMT_U8;
-+      devc->audio_format = AFMT_U8;
-+      spin_unlock_irqrestore(&devc->lock, flags);
-+      return(AFMT_U8); 
- }
- static short ad1816_set_channels (int dev, short arg)
-@@ -486,9 +471,8 @@ static int ad1816_open (int dev, int mod
-       devc->speed = 8000;
-       devc->audio_format=AFMT_U8;
-       devc->channels=1;
--
--      ad1816_reset(devc->dev_no); /* halt all pending output */
-       spin_unlock_irqrestore(&devc->lock,flags);
-+      ad1816_reset(devc->dev_no); /* halt all pending output */
-       return 0;
- }
-@@ -497,17 +481,15 @@ static void ad1816_close (int dev) /* cl
-       unsigned long flags;
-       ad1816_info    *devc = (ad1816_info *) audio_devs[dev]->devc;
--      spin_lock_irqsave(&devc->lock,flags);
--
-       /* halt all pending output */
-       ad1816_reset(devc->dev_no); 
--      
-+
-+      spin_lock_irqsave(&devc->lock,flags);
-       devc->opened = 0;
-       devc->audio_mode = 0;
-       devc->speed = 8000;
-       devc->audio_format=AFMT_U8;
-       devc->format_bits = 0;
--
-       spin_unlock_irqrestore(&devc->lock,flags);
- }
-@@ -543,25 +525,13 @@ static struct audio_driver ad1816_audio_
- static irqreturn_t ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
- {
-       unsigned char   status;
--      ad1816_info     *devc;
--      int             dev;
--
-+      ad1816_info     *devc = (ad1816_info *)dev_id;
-       
-       if (irq < 0 || irq > 15) {
-               printk(KERN_WARNING "ad1816: Got bogus interrupt %d\n", irq);
-               return IRQ_NONE;
-       }
--      dev = irq2dev[irq];
--      
--      if (dev < 0 || dev >= num_audiodevs) {
--              printk(KERN_WARNING "ad1816: IRQ2AD1816-mapping failed for "
--                                  "irq %d device %d\n", irq,dev);
--              return IRQ_NONE;
--      }
--
--      devc = (ad1816_info *) audio_devs[dev]->devc;
--      
-       spin_lock(&devc->lock);
-       /* read interrupt register */
-@@ -569,18 +539,19 @@ static irqreturn_t ad1816_interrupt (int
-       /* Clear all interrupt  */
-       outb (~status, devc->base+1);   
--      DEBUGNOISE (printk("ad1816: Got interrupt subclass %d\n",status));
--      
--      devc->irq_ok=1;
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: Got interrupt subclass %d\n",status));
--      if (status == 0)
--              DEBUGWARN(printk ("ad1816: interrupt: Got interrupt, but no reason?\n"));
-+      if (status == 0) {
-+              DEBUGNOISE(printk(KERN_DEBUG "ad1816: interrupt: Got interrupt, but no source.\n"));
-+              spin_unlock(&devc->lock);
-+              return IRQ_NONE;
-+      }
-       if (devc->opened && (devc->audio_mode & PCM_ENABLE_INPUT) && (status&64))
--              DMAbuf_inputintr (dev);
-+              DMAbuf_inputintr (devc->dev_no);
-       if (devc->opened && (devc->audio_mode & PCM_ENABLE_OUTPUT) && (status & 128))
--              DMAbuf_outputintr (dev, 1);
-+              DMAbuf_outputintr (devc->dev_no, 1);
-       spin_unlock(&devc->lock);
-       return IRQ_HANDLED;
-@@ -671,9 +642,11 @@ static unsigned short default_mixer_leve
- static int
- ad1816_set_recmask (ad1816_info * devc, int mask)
- {
-+      unsigned long   flags;
-       unsigned char   recdev;
-       int             i, n;
-       
-+      spin_lock_irqsave(&devc->lock, flags);
-       mask &= devc->supported_rec_devices;
-       
-       n = 0;
-@@ -733,6 +706,7 @@ ad1816_set_recmask (ad1816_info * devc, 
-                 (ad_read (devc, 20) & 0x8f8f) | recdev | (recdev<<8));
-       devc->recmask = mask;
-+      spin_unlock_irqrestore(&devc->lock, flags);
-       return mask;
- }
-@@ -760,7 +734,7 @@ change_bits (int *regval, int dev, int c
- static int
- ad1816_mixer_get (ad1816_info * devc, int dev)
- {
--      DEBUGINFO(printk("ad1816: mixer_get called!\n"));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: mixer_get called!\n"));
-       
-       /* range check + supported mixer check */
-       if (dev < 0 || dev >= SOUND_MIXER_NRDEVICES )
-@@ -781,8 +755,9 @@ ad1816_mixer_set (ad1816_info * devc, in
-       int   regoffs;
-       int   val;
-       int   valmute;
-+      unsigned long flags;
--      DEBUGINFO(printk("ad1816: mixer_set called!\n"));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: mixer_set called!\n"));
-       
-       if (dev < 0 || dev >= SOUND_MIXER_NRDEVICES )
-               return -(EINVAL);
-@@ -813,6 +788,7 @@ ad1816_mixer_set (ad1816_info * devc, in
-       /* sanity check */
-       if (mix_devices[dev][LEFT_CHN].nbits == 0)
-               return -(EINVAL);
-+      spin_lock_irqsave(&devc->lock, flags);
-       /* keep precise volume internal */
-       devc->levels[dev] = retvol;
-@@ -840,8 +816,10 @@ ad1816_mixer_set (ad1816_info * devc, in
-        */
-  
-       /* Was just a mono channel */
--      if (mix_devices[dev][RIGHT_CHN].nbits == 0)
-+      if (mix_devices[dev][RIGHT_CHN].nbits == 0) {
-+              spin_unlock_irqrestore(&devc->lock, flags);
-               return retvol;          
-+      }
-       regoffs = mix_devices[dev][RIGHT_CHN].regno;
-       val = ad_read (devc, regoffs);
-@@ -857,7 +835,7 @@ ad1816_mixer_set (ad1816_info * devc, in
-                       valmute &= ~0x80;
-       }
-       ad_write (devc, regoffs, valmute); /* mute */
--      
-+      spin_unlock_irqrestore(&devc->lock, flags);
-               return retvol;
- }
-@@ -901,7 +879,7 @@ ad1816_mixer_ioctl (int dev, unsigned in
-       ad1816_info    *devc = mixer_devs[dev]->devc;
-       int val;
-   
--      DEBUGINFO(printk("ad1816: mixer_ioctl called!\n"));
-+      DEBUGNOISE(printk(KERN_DEBUG "ad1816: mixer_ioctl called!\n"));
-   
-       /* Mixer ioctl */
-       if (((cmd >> 8) & 0xff) == 'M') { 
-@@ -980,83 +958,91 @@ static struct mixer_operations ad1816_mi
- /* ------------------------------------------------------------------- */
--/* stuff for card recognition, init and unloading */
-+/* stuff for card recognition, init and unloading PNP ...*/
--/* replace with probe routine */
--static int __init probe_ad1816 ( struct address_info *hw_config )
-+/* check if AD1816 present at specified hw_config and register device with OS 
-+ * return 1 if initialization was successful, 0 otherwise
-+ */
-+static int __init ad1816_init_card (struct address_info *hw_config, 
-+      struct pnp_dev *pnp)
- {
--      ad1816_info    *devc = &dev_info[nr_ad1816_devs];
--      int io_base=hw_config->io_base;
--      int *osp=hw_config->osp;
-+      ad1816_info    *devc = NULL;
-       int tmp;
-+      int oss_devno = -1;
--      printk(KERN_INFO "ad1816: AD1816 sounddriver "
--                       "Copyright (C) 1998 by Thorsten Knabe\n");
--      printk(KERN_INFO "ad1816: io=0x%x, irq=%d, dma=%d, dma2=%d, "
--                       "clockfreq=%d, options=%d isadmabug=%d\n",
-+      printk(KERN_INFO "ad1816: initializing card: io=0x%x, irq=%d, dma=%d, "
-+                       "dma2=%d, clockfreq=%d, options=%d isadmabug=%d "
-+                       "%s\n",
-              hw_config->io_base,
-              hw_config->irq,
-              hw_config->dma,
-              hw_config->dma2,
-              ad1816_clockfreq,
-              options,
--             isa_dma_bridge_buggy);
-+             isa_dma_bridge_buggy,
-+             pnp?"(PNP)":"");
--      if (!request_region(io_base, 16, "AD1816 Sound")) {
--              printk(KERN_WARNING "ad1816: I/O port 0x%03x not free\n",
--                                  io_base);
--              goto err;
--      }
--
--      DEBUGLOG(printk ("ad1816: detect(%x)\n", io_base));
--      
-+      /* ad1816_info structure remaining ? */
-       if (nr_ad1816_devs >= MAX_AUDIO_DEV) {
--              printk(KERN_WARNING "ad1816: detect error - step 0\n");
--              goto out_release_region;
-+              printk(KERN_WARNING "ad1816: no more ad1816_info structures "
-+                      "left\n");
-+              goto out;
-       }
--      devc->base = io_base;
--      devc->irq_ok = 0;
--      devc->irq = 0;
-+      devc = &dev_info[nr_ad1816_devs];
-+      devc->base = hw_config->io_base;
-+      devc->irq = hw_config->irq;
-+      devc->dma_playback=hw_config->dma;
-+      devc->dma_capture=hw_config->dma2;
-       devc->opened = 0;
--      devc->osp = osp;
-+      devc->pnpdev = pnp;
-       spin_lock_init(&devc->lock);
-+      if (!request_region(devc->base, 16, "AD1816 Sound")) {
-+              printk(KERN_WARNING "ad1816: I/O port 0x%03x not free\n",
-+                                  devc->base);
-+              goto out;
-+      }
-+
-+      printk(KERN_INFO "ad1816: Examining AD1816 at address 0x%03x.\n", 
-+              devc->base);
-+      
-+
-+      /* tests for ad1816 */
-       /* base+0: bit 1 must be set but not 255 */
-       tmp=inb(devc->base);
-       if ( (tmp&0x80)==0 || tmp==255 ) {
--              DEBUGLOG (printk ("ad1816: Chip is not an AD1816 or chip is not active (Test 0)\n"));
-+              printk (KERN_INFO "ad1816: Chip is not an AD1816 or chip "
-+                      "is not active (Test 0)\n");
-               goto out_release_region;
-       }
--
-       /* writes to ireg 8 are copied to ireg 9 */
-       ad_write(devc,8,12345); 
-       if (ad_read(devc,9)!=12345) {
--              DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 1)\n"));
-+              printk(KERN_INFO "ad1816: Chip is not an AD1816 (Test 1)\n");
-               goto out_release_region;
-       }
-   
-       /* writes to ireg 8 are copied to ireg 9 */
-       ad_write(devc,8,54321); 
-       if (ad_read(devc,9)!=54321) {
--              DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 2)\n"));
-+              printk(KERN_INFO "ad1816: Chip is not an AD1816 (Test 2)\n");
-               goto out_release_region;
-       }
--
-       /* writes to ireg 10 are copied to ireg 11 */
-       ad_write(devc,10,54321); 
-       if (ad_read(devc,11)!=54321) {
--              DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 3)\n"));
-+              printk (KERN_INFO "ad1816: Chip is not an AD1816 (Test 3)\n");
-               goto out_release_region;
-       }
-       /* writes to ireg 10 are copied to ireg 11 */
-       ad_write(devc,10,12345); 
-       if (ad_read(devc,11)!=12345) {
--              DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 4)\n"));
-+              printk (KERN_INFO "ad1816: Chip is not an AD1816 (Test 4)\n");
-               goto out_release_region;
-       }
-@@ -1064,35 +1050,12 @@ static int __init probe_ad1816 ( struct 
-       tmp=inb(devc->base+1);
-       outb(0xff,devc->base+1); 
-       if (inb(devc->base+1)!=tmp) {
--              DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 5)\n"));
-+              printk(KERN_INFO "ad1816: Chip is not an AD1816 (Test 5)\n");
-               goto out_release_region;
-       }
--
-   
--      DEBUGLOG (printk ("ad1816: detect() - Detected OK\n"));
--      DEBUGLOG (printk ("ad1816: AD1816 Version: %d\n",ad_read(devc,45)));
--
--      /* detection was successful */
--      return 1; 
--out_release_region:
--      release_region(io_base, 16);
--      /* detection was NOT successful */
--err:  return 0;
--}
--
--
--/* allocate resources from the kernel. If any allocation fails, free
--   all allocated resources and exit attach.
--  
-- */
--
--static void __init attach_ad1816 (struct address_info *hw_config)
--{
--      int             my_dev;
--      char            dev_name[100];
--      ad1816_info    *devc = &dev_info[nr_ad1816_devs];
--
--      devc->base = hw_config->io_base;        
-+      printk(KERN_INFO "ad1816: AD1816 (version %d) successfully detected!\n",
-+              ad_read(devc,45));
-       /* disable all interrupts */
-       ad_write(devc,1,0);     
-@@ -1101,62 +1064,54 @@ static void __init attach_ad1816 (struct
-       outb (0, devc->base+1); 
-       /* allocate irq */
--      if (hw_config->irq < 0 || hw_config->irq > 15)
-+      if (devc->irq < 0 || devc->irq > 15)
-               goto out_release_region;
--      if (request_irq(hw_config->irq, ad1816_interrupt,0,
--                      "SoundPort", hw_config->osp) < 0)       {
-+      if (request_irq(devc->irq, ad1816_interrupt,0,
-+                      "SoundPort", devc) < 0) {
-               printk(KERN_WARNING "ad1816: IRQ in use\n");
-               goto out_release_region;
-       }
--      devc->irq=hw_config->irq;
-       /* DMA stuff */
--      if (sound_alloc_dma (hw_config->dma, "Sound System")) {
-+      if (sound_alloc_dma (devc->dma_playback, "Sound System")) {
-               printk(KERN_WARNING "ad1816: Can't allocate DMA%d\n",
--                                  hw_config->dma);
-+                                  devc->dma_playback);
-               goto out_free_irq;
-       }
--      devc->dma_playback=hw_config->dma;
-       
--      if ( hw_config->dma2 != -1 && hw_config->dma2 != hw_config->dma) {
--              if (sound_alloc_dma(hw_config->dma2,
-+      if ( devc->dma_capture >= 0 && 
-+              devc->dma_capture != devc->dma_playback) {
-+              if (sound_alloc_dma(devc->dma_capture,
-                                   "Sound System (capture)")) {
-                       printk(KERN_WARNING "ad1816: Can't allocate DMA%d\n",
--                                          hw_config->dma2);
-+                                          devc->dma_capture);
-                       goto out_free_dma;
-               }
--              devc->dma_capture=hw_config->dma2;
-               devc->audio_mode=DMA_AUTOMODE|DMA_DUPLEX;
-       } else {
--              devc->dma_capture=-1;
-+              printk(KERN_WARNING "ad1816: Only one DMA channel "
-+                      "available/configured. No duplex operation possible\n");
-               devc->audio_mode=DMA_AUTOMODE;
-       }
--      sprintf (dev_name,"AD1816 audio driver");
--  
--      conf_printf2 (dev_name,
--                    devc->base, devc->irq, hw_config->dma, hw_config->dma2);
-+      conf_printf2 ("AD1816 audio driver",
-+                    devc->base, devc->irq, devc->dma_playback, 
-+                    devc->dma_capture);
-       /* register device */
--      if ((my_dev = sound_install_audiodrv (AUDIO_DRIVER_VERSION,
--                                            dev_name,
-+      if ((oss_devno = sound_install_audiodrv (AUDIO_DRIVER_VERSION,
-+                                            "AD1816 audio driver",
-                                             &ad1816_audio_driver,
-                                             sizeof (struct audio_driver),
-                                             devc->audio_mode,
-                                             ad_format_mask,
-                                             devc,
--                                            hw_config->dma, 
--                                            hw_config->dma2)) < 0) {
-+                                            devc->dma_playback, 
-+                                            devc->dma_capture)) < 0) {
-               printk(KERN_WARNING "ad1816: Can't install sound driver\n");
-               goto out_free_dma_2;
-       }
--      /* fill rest of structure with reasonable default values */
--      irq2dev[hw_config->irq] = devc->dev_no = my_dev;
--      devc->opened = 0;
--      devc->irq_ok = 0;
--      devc->osp = hw_config->osp;  
--      nr_ad1816_devs++;
-       ad_write(devc,32,0x80f0); /* sound system mode */
-       if (options&1) {
-@@ -1186,25 +1141,30 @@ static void __init attach_ad1816 (struct
-       ad1816_mixer_reset (devc); 
-   
-       /* register mixer */
--      if ((audio_devs[my_dev]->mixer_dev=sound_install_mixer(
-+      if ((audio_devs[oss_devno]->mixer_dev=sound_install_mixer(
-                                      MIXER_DRIVER_VERSION,
--                                     dev_name,
-+                                     "AD1816 audio driver",
-                                      &ad1816_mixer_operations,
-                                      sizeof (struct mixer_operations),
--                                     devc)) >= 0) {
--              audio_devs[my_dev]->min_fragment = 0;
-+                                     devc)) < 0) {
-+              printk(KERN_WARNING "Can't install mixer\n");
-       }
--out:  return;
-+      /* make ad1816_info active */
-+      nr_ad1816_devs++;
-+      printk(KERN_INFO "ad1816: card successfully installed!\n");
-+      return 1;
-+      /* error handling */
- out_free_dma_2:
--      if (devc->dma_capture >= 0)
--              sound_free_dma(hw_config->dma2);
-+      if (devc->dma_capture >= 0 && devc->dma_capture != devc->dma_playback)
-+              sound_free_dma(devc->dma_capture);
- out_free_dma:
--      sound_free_dma(hw_config->dma);
-+      sound_free_dma(devc->dma_playback);
- out_free_irq:
--      free_irq(hw_config->irq,hw_config->osp);
-+      free_irq(devc->irq, devc);
- out_release_region:
--      release_region(hw_config->io_base, 16);
--      goto out;
-+      release_region(devc->base, 16);
-+out:
-+      return 0;
- }
- static void __exit unload_card(ad1816_info *devc)
-@@ -1212,7 +1172,7 @@ static void __exit unload_card(ad1816_in
-       int  mixer, dev = 0;
-       
-       if (devc != NULL) {
--              DEBUGLOG (printk("ad1816: Unloading card at base=%x\n",devc->base));
-+              printk("ad1816: Unloading card at address 0x%03x\n",devc->base);
-               
-               dev = devc->dev_no;
-               mixer = audio_devs[dev]->mixer_dev;
-@@ -1221,45 +1181,41 @@ static void __exit unload_card(ad1816_in
-               if(mixer>=0) {
-                       sound_unload_mixerdev(mixer);
-               }
-+              /* unreg audiodev */
-               sound_unload_audiodev(dev);
-               
-               /* free dma channels */
--              if (devc->dma_capture>=0) {
-+              if (devc->dma_capture>=0 && 
-+                      devc->dma_capture != devc->dma_playback) {
-                       sound_free_dma(devc->dma_capture);
-               }
--
--              /* card won't get added if resources could not be allocated
--                 thus we need not ckeck if allocation was successful */
-               sound_free_dma (devc->dma_playback);
--              free_irq(devc->irq, devc->osp);
-+              /* free irq */
-+              free_irq(devc->irq, devc);
-+              /* free io */
-               release_region (devc->base, 16);
--              
--              DEBUGLOG (printk("ad1816: Unloading card at base=%x was successful\n",devc->base));
-+#ifdef __ISAPNP__
-+              if (devc->pnpdev) {
-+                      pnp_disable_dev(devc->pnpdev);
-+                      pnp_device_detach(devc->pnpdev);
-+              }
-+#endif
-               
-       } else
-               printk(KERN_WARNING "ad1816: no device/card specified\n");
- }
--static struct address_info cfg;
--
- static int __initdata io = -1;
- static int __initdata irq = -1;
- static int __initdata dma = -1;
- static int __initdata dma2 = -1;
- #ifdef __ISAPNP__
--struct pci_dev        *ad1816_dev  = NULL;
--
--static int activated  = 1;
--
-+/* use isapnp for configuration */
- static int isapnp     = 1;
- static int isapnpjump = 0;
--
- MODULE_PARM(isapnp, "i");
- MODULE_PARM(isapnpjump, "i");
--
--#else
--static int isapnp = 0;
- #endif
- MODULE_PARM(io,"i");
-@@ -1270,51 +1226,6 @@ MODULE_PARM(ad1816_clockfreq,"i");
- MODULE_PARM(options,"i");
- #ifdef __ISAPNP__
--
--static struct pci_dev *activate_dev(char *devname, char *resname, struct pci_dev *dev)
--{
--      int err;
--      
--      if(dev->active) {
--              activated = 0;
--              return(dev);
--      }
--
--      if((err = dev->activate(dev)) < 0) {
--              printk(KERN_ERR "ad1816: %s %s config failed (out of resources?)[%d]\n",
--                      devname, resname, err);
--              dev->deactivate(dev);
--              return(NULL);
--      }
--              
--      return(dev);
--}
--
--static struct pci_dev *ad1816_init_generic(struct pci_bus *bus, struct pci_dev *card,
--      struct address_info *hw_config)
--{
--      if((ad1816_dev = isapnp_find_dev(bus, card->vendor, card->device, NULL))) {
--              ad1816_dev->prepare(ad1816_dev);
--              
--              if((ad1816_dev = activate_dev("Analog Devices 1816(A)", "ad1816", ad1816_dev))) {
--                      hw_config->io_base      = ad1816_dev->resource[2].start;
--                      hw_config->irq          = ad1816_dev->irq_resource[0].start;
--                      hw_config->dma          = ad1816_dev->dma_resource[0].start;
--                      hw_config->dma2         = ad1816_dev->dma_resource[1].start;
--              }
--      }
--      
--      return(ad1816_dev);
--}
--
--static struct ad1816_data {
--      struct pci_dev * (*initfunc)(struct pci_bus*, struct pci_dev *, struct address_info *);
--      char *name;
--} ad1816_pnp_data[] __initdata = {
--      { &ad1816_init_generic, "Analog Devices 1815" },
--      { &ad1816_init_generic, "Analog Devices 1816A" }
--};
--
- static struct {
-       unsigned short card_vendor, card_device;
-       unsigned short vendor;
-@@ -1323,107 +1234,101 @@ static struct {
- } isapnp_ad1816_list[] __initdata = {
-       {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
-               ISAPNP_VENDOR('A','D','S'), ISAPNP_FUNCTION(0x7150), 
--              &ad1816_pnp_data[0] },
-+              0 },
-       {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
-               ISAPNP_VENDOR('A','D','S'), ISAPNP_FUNCTION(0x7180),
--              &ad1816_pnp_data[1] },
-+              0 },
-       {0}
- };
- MODULE_DEVICE_TABLE(isapnp, isapnp_ad1816_list);
--static int __init ad1816_init_isapnp(struct address_info *hw_config,
--      struct pci_bus *bus, struct pci_dev *card, int slot)
-+
-+void __init ad1816_config_pnp_card(struct pnp_card *card, unsigned short vendor,
-+      unsigned short function)
- {
--      struct pci_dev *idev = NULL;
--      
--      /* You missed the init func? That's bad. */
--      if(isapnp_ad1816_list[slot].data->initfunc) {
--              char *busname = bus->name[0] ? bus->name : isapnp_ad1816_list[slot].data->name;
--              
--              printk(KERN_INFO "ad1816: %s detected\n", busname);
--              
--              /* Initialize this baby. */
--              if((idev = isapnp_ad1816_list[slot].data->initfunc(bus, card, hw_config))) {
--                      /* We got it. */
--
--                      printk(KERN_NOTICE "ad1816: ISAPnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
--                              busname,
--                              hw_config->io_base, hw_config->irq, hw_config->dma,
--                              hw_config->dma2);
--                      return 1;
--              } else
--                      printk(KERN_INFO "ad1816: Failed to initialize %s\n", busname);
--      } else
--              printk(KERN_ERR "ad1816: Bad entry in ad1816.c PnP table\n");
--      
--      return 0;
-+      struct address_info cfg;
-+      struct pnp_dev *card_dev = pnp_find_dev(card, vendor, function, NULL);
-+      if (!card_dev) return;
-+      if (pnp_device_attach(card_dev) < 0) {
-+              printk(KERN_WARNING "ad1816: Failed to attach PnP device\n");
-+              return;
-+      }
-+      if (pnp_activate_dev(card_dev) < 0) {
-+              printk(KERN_WARNING "ad1816: Failed to activate PnP device\n");
-+              pnp_device_detach(card_dev);
-+              return;
-+      }
-+      cfg.io_base = pnp_port_start(card_dev, 2);
-+      cfg.irq = pnp_irq(card_dev, 0);
-+      cfg.dma = pnp_irq(card_dev, 0);
-+      cfg.dma2 = pnp_irq(card_dev, 1);
-+      if (!ad1816_init_card(&cfg, card_dev)) {
-+              pnp_disable_dev(card_dev);
-+              pnp_device_detach(card_dev);
-+      }
- }
--/*
-- * Actually this routine will detect and configure only the first card with successful
-- * initialization. isapnpjump could be used to jump to a specific entry.
-- * Please always add entries at the end of the array.
-- * Should this be fixed? - azummo
-- */
--
--int __init ad1816_probe_isapnp(struct address_info *hw_config)
-+void __init ad1816_config_pnp_cards(void)
- {
-+      int nr_pnp_cfg;
-       int i;
-       
-       /* Count entries in isapnp_ad1816_list */
--      for (i = 0; isapnp_ad1816_list[i].vendor != 0; i++)
--              ;
-+      for (nr_pnp_cfg = 0; isapnp_ad1816_list[nr_pnp_cfg].card_vendor != 0; 
-+              nr_pnp_cfg++);
-       /* Check and adjust isapnpjump */
--      if( isapnpjump < 0 || isapnpjump > ( i - 1 ) ) {
--              printk(KERN_ERR "ad1816: Valid range for isapnpjump is 0-%d. Adjusted to 0.\n", i-1);
-+      if( isapnpjump < 0 || isapnpjump >= nr_pnp_cfg) {
-+              printk(KERN_WARNING 
-+                      "ad1816: Valid range for isapnpjump is 0-%d. "
-+                      "Adjusted to 0.\n", nr_pnp_cfg-1);
-               isapnpjump = 0;
-       }
--
--       for (i = isapnpjump; isapnp_ad1816_list[i].vendor != 0; i++) {
--              struct pci_dev *card = NULL;
--              
--              while ((card = isapnp_find_dev(NULL, isapnp_ad1816_list[i].vendor,
--                isapnp_ad1816_list[i].function, card)))
--                      if(ad1816_init_isapnp(hw_config, card->bus, card, i))
--                              return 0;
-+      for (i = isapnpjump; isapnp_ad1816_list[i].card_vendor != 0; i++) {
-+              struct pnp_card *card = NULL;
-+              /* iterate over all pnp cards */                
-+              while ((card = pnp_find_card(isapnp_ad1816_list[i].card_vendor,
-+                              isapnp_ad1816_list[i].card_device, card))) 
-+                      ad1816_config_pnp_card(card, 
-+                              isapnp_ad1816_list[i].vendor,
-+                              isapnp_ad1816_list[i].function);
-       }
--
--      return -ENODEV;
- }
- #endif
-+/* module initialization */
- static int __init init_ad1816(void)
- {
--
--#ifdef __ISAPNP__
--      if(isapnp && (ad1816_probe_isapnp(&cfg) < 0) ) {
--              printk(KERN_NOTICE "ad1816: No ISAPnP cards found, trying standard ones...\n");
--              isapnp = 0;
--      }
-+      printk(KERN_INFO "ad1816: AD1816 sounddriver "
-+                       "Copyright (C) 1998-2003 by Thorsten Knabe and "
-+                       "others\n");
-+#ifdef AD1816_CLOCK 
-+      /* set ad1816_clockfreq if set during compilation */
-+      ad1816_clockfreq=AD1816_CLOCK;
- #endif
--
--      if( isapnp == 0) {
--              cfg.io_base     = io;
--              cfg.irq         = irq;
--              cfg.dma         = dma;
--              cfg.dma2        = dma2;
--      }
--
--      if (cfg.io_base == -1 || cfg.irq == -1 || cfg.dma == -1 || cfg.dma2 == -1) {
--              printk(KERN_INFO "ad1816: dma, dma2, irq and io must be set.\n");
--              return -EINVAL;
-+      if (ad1816_clockfreq<5000 || ad1816_clockfreq>100000) {
-+              ad1816_clockfreq=33000;
-       }
--      if (probe_ad1816(&cfg) == 0) {
--              return -ENODEV;
-+#ifdef __ISAPNP__
-+      /* configure PnP cards */
-+      if(isapnp) ad1816_config_pnp_cards();
-+#endif
-+      /* configure card by module params */
-+      if (io != -1 && irq != -1 && dma != -1) {
-+              struct address_info cfg;
-+              cfg.io_base = io;
-+              cfg.irq = irq;
-+              cfg.dma = dma;
-+              cfg.dma2 = dma2;
-+              ad1816_init_card(&cfg, NULL);
-       }
--
--      attach_ad1816(&cfg);
--
-+      if (nr_ad1816_devs <= 0)
-+              return -ENODEV;
-       return 0;
- }
-+/* module cleanup */
- static void __exit cleanup_ad1816 (void)
- {
-       int          i;
-@@ -1435,18 +1340,14 @@ static void __exit cleanup_ad1816 (void)
-               unload_card(devc);
-       }     
-       nr_ad1816_devs=0;
--
--#ifdef __ISAPNP__
--      if(activated)
--              if(ad1816_dev)
--                      ad1816_dev->deactivate(ad1816_dev);
--#endif
-+      printk(KERN_INFO "ad1816: driver unloaded!\n");
- }
- module_init(init_ad1816);
- module_exit(cleanup_ad1816);
- #ifndef MODULE
-+/* kernel command line parameter evaluation */
- static int __init setup_ad1816(char *str)
- {
-       /* io, irq, dma, dma2 */
-@@ -1458,7 +1359,6 @@ static int __init setup_ad1816(char *str
-       irq     = ints[2];
-       dma     = ints[3];
-       dma2    = ints[4];
--
-       return 1;
- }
---- linux-2.6.0-test1/sound/oss/ad1889.c       2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/ad1889.c      2003-07-19 17:03:51.000000000 -0700
-@@ -245,7 +245,6 @@ static ad1889_dev_t *ad1889_alloc_dev(st
-               dmabuf->ready = 0;
-               dmabuf->rate = 44100;
-       }
--out:
-       return dev;
- err_free_dmabuf:
---- linux-2.6.0-test1/sound/oss/btaudio.c      2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/btaudio.c     2003-07-19 17:03:51.000000000 -0700
-@@ -328,8 +328,8 @@ static int btaudio_mixer_ioctl(struct in
-       if (cmd == SOUND_MIXER_INFO) {
-               mixer_info info;
-               memset(&info,0,sizeof(info));
--                strncpy(info.id,"bt878",sizeof(info.id));
--                strncpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
-+                strlcpy(info.id,"bt878",sizeof(info.id));
-+                strlcpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
-                 info.modify_counter = bta->mixcount;
-                 if (copy_to_user((void *)arg, &info, sizeof(info)))
-                         return -EFAULT;
-@@ -338,8 +338,8 @@ static int btaudio_mixer_ioctl(struct in
-       if (cmd == SOUND_OLD_MIXER_INFO) {
-               _old_mixer_info info;
-               memset(&info,0,sizeof(info));
--                strncpy(info.id,"bt878",sizeof(info.id)-1);
--                strncpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
-+                strlcpy(info.id,"bt878",sizeof(info.id)-1);
-+                strlcpy(info.name,"Brooktree Bt878 audio",sizeof(info.name));
-                 if (copy_to_user((void *)arg, &info, sizeof(info)))
-                         return -EFAULT;
-               return 0;
---- linux-2.6.0-test1/sound/oss/dmasound/dmasound_core.c       2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/dmasound/dmasound_core.c      2003-07-19 17:03:51.000000000 -0700
-@@ -1660,13 +1660,13 @@ static int __init dmasound_setup(char *s
- #ifdef HAS_RECORD
-         case 5:
-                 if ((ints[5] < 0) || (ints[5] > MAX_CATCH_RADIUS))
--                        printk("dmasound_setup: illegal catch radius, using default = %d\n", catchRadius);
-+                        printk("dmasound_setup: invalid catch radius, using default = %d\n", catchRadius);
-                 else
-                         catchRadius = ints[5];
-                 /* fall through */
-         case 4:
-                 if (ints[4] < MIN_BUFFERS)
--                        printk("dmasound_setup: illegal number of read buffers, using default = %d\n",
-+                        printk("dmasound_setup: invalid number of read buffers, using default = %d\n",
-                                  numReadBufs);
-                 else
-                         numReadBufs = ints[4];
-@@ -1675,21 +1675,21 @@ static int __init dmasound_setup(char *s
-               if ((size = ints[3]) < 256)  /* check for small buffer specs */
-                       size <<= 10 ;
-                 if (size < MIN_BUFSIZE || size > MAX_BUFSIZE)
--                        printk("dmasound_setup: illegal read buffer size, using default = %d\n", readBufSize);
-+                        printk("dmasound_setup: invalid read buffer size, using default = %d\n", readBufSize);
-                 else
-                         readBufSize = size;
-                 /* fall through */
- #else
-       case 3:
-               if ((ints[3] < 0) || (ints[3] > MAX_CATCH_RADIUS))
--                      printk("dmasound_setup: illegal catch radius, using default = %d\n", catchRadius);
-+                      printk("dmasound_setup: invalid catch radius, using default = %d\n", catchRadius);
-               else
-                       catchRadius = ints[3];
-               /* fall through */
- #endif
-       case 2:
-               if (ints[1] < MIN_BUFFERS)
--                      printk("dmasound_setup: illegal number of buffers, using default = %d\n", numWriteBufs);
-+                      printk("dmasound_setup: invalid number of buffers, using default = %d\n", numWriteBufs);
-               else
-                       numWriteBufs = ints[1];
-               /* fall through */
-@@ -1697,13 +1697,13 @@ static int __init dmasound_setup(char *s
-               if ((size = ints[2]) < 256) /* check for small buffer specs */
-                       size <<= 10 ;
-                 if (size < MIN_BUFSIZE || size > MAX_BUFSIZE)
--                        printk("dmasound_setup: illegal write buffer size, using default = %d\n", writeBufSize);
-+                        printk("dmasound_setup: invalid write buffer size, using default = %d\n", writeBufSize);
-                 else
-                         writeBufSize = size;
-       case 0:
-               break;
-       default:
--              printk("dmasound_setup: illegal number of arguments\n");
-+              printk("dmasound_setup: invalid number of arguments\n");
-               return 0;
-       }
-       return 1;
---- linux-2.6.0-test1/sound/oss/emu10k1/8010.h 2003-06-14 12:17:56.000000000 -0700
-+++ 25/sound/oss/emu10k1/8010.h        2003-07-19 17:03:51.000000000 -0700
-@@ -1,7 +1,7 @@
- /*
-  **********************************************************************
-  *     8010.h
-- *     Copyright 1999, 2000 Creative Labs, Inc.
-+ *     Copyright 1999-2001 Creative Labs, Inc.
-  *
-  **********************************************************************
-  *
-@@ -11,6 +11,8 @@
-  *     November 2, 1999     Alan Cox      Cleaned of 8bit chars, DOS
-  *                                        line endings
-  *     December 8, 1999     Jon Taylor            Added lots of new register info
-+ *     May 16, 2001         Daniel Bertrand Added unofficial DBG register info
-+ *     Oct-Nov 2001         D.B.            Added unofficial Audigy registers 
-  *
-  **********************************************************************
-  *
-@@ -39,6 +41,14 @@
- #include <linux/types.h>
-+// Driver version:
-+#define MAJOR_VER 0
-+#define MINOR_VER 20
-+#define DRIVER_VERSION "0.20a"
-+
-+
-+// Audigy specify registers are prefixed with 'A_'
-+
- /************************************************************************************************/
- /* PCI function 0 registers, address = <val> + PCIBASE0                                               */
- /************************************************************************************************/
-@@ -57,6 +67,11 @@
- #define IPR                   0x08            /* Global interrupt pending register            */
-                                               /* Clear pending interrupts by writing a 1 to   */
-                                               /* the relevant bits and zero to the other bits */
-+
-+/* The next two interrupts are for the midi port on the Audigy Drive (A_MPU1)                 */
-+#define A_IPR_MIDITRANSBUFEMPTY2      0x10000000      /* MIDI UART transmit buffer empty              */
-+#define A_IPR_MIDIRECVBUFEMPTY2       0x08000000      /* MIDI UART receive buffer empty               */
-+
- #define IPR_SAMPLERATETRACKER 0x01000000      /* Sample rate tracker lock status change       */
- #define IPR_FXDSP             0x00800000      /* Enable FX DSP interrupts                     */
- #define IPR_FORCEINT          0x00400000      /* Force Sound Blaster interrupt                */
-@@ -81,6 +96,10 @@
-                                               /* IP is written with CL set, the bit in CLIPL  */
-                                               /* or CLIPH corresponding to the CIN value      */
-                                               /* written will be cleared.                     */
-+#define A_IPR_MIDITRANSBUFEMPTY1      IPR_MIDITRANSBUFEMPTY   /* MIDI UART transmit buffer empty              */
-+#define A_IPR_MIDIRECVBUFEMPTY1       IPR_MIDIRECVBUFEMPTY    /* MIDI UART receive buffer empty               */
-+
-+
- #define INTE                  0x0c            /* Interrupt enable register                    */
- #define INTE_VIRTUALSB_MASK   0xc0000000      /* Virtual Soundblaster I/O port capture        */
-@@ -108,6 +127,11 @@
-                                               /* behavior and possibly random segfaults and   */
-                                               /* lockups if enabled.                          */
-+/* The next two interrupts are for the midi port on the Audigy Drive (A_MPU1)                 */
-+#define A_INTE_MIDITXENABLE2  0x00020000      /* Enable MIDI transmit-buffer-empty interrupts */
-+#define A_INTE_MIDIRXENABLE2  0x00010000      /* Enable MIDI receive-buffer-empty interrupts  */
-+
-+
- #define INTE_SAMPLERATETRACKER        0x00002000      /* Enable sample rate tracker interrupts        */
-                                               /* NOTE: This bit must always be enabled        */
- #define INTE_FXDSPENABLE      0x00001000      /* Enable FX DSP interrupts                     */
-@@ -124,6 +148,10 @@
- #define INTE_MIDITXENABLE     0x00000002      /* Enable MIDI transmit-buffer-empty interrupts */
- #define INTE_MIDIRXENABLE     0x00000001      /* Enable MIDI receive-buffer-empty interrupts  */
-+/* The next two interrupts are for the midi port on the Audigy (A_MPU2)       */
-+#define A_INTE_MIDITXENABLE1          INTE_MIDITXENABLE
-+#define A_INTE_MIDIRXENABLE1  INTE_MIDIRXENABLE
-+
- #define WC                    0x10            /* Wall Clock register                          */
- #define WC_SAMPLECOUNTER_MASK 0x03FFFFC0      /* Sample periods elapsed since reset           */
- #define WC_SAMPLECOUNTER      0x14060010
-@@ -186,6 +214,8 @@
-                                               /* Should be set to 1 when the EMU10K1 is       */
-                                               /* completely initialized.                      */
-+//For Audigy, MPU port move to 0x70-0x74 ptr register
-+
- #define MUDATA                        0x18            /* MPU401 data register (8 bits)                */
- #define MUCMD                 0x19            /* MPU401 command register (8 bits)             */
-@@ -197,13 +227,16 @@
- #define MUSTAT_IRDYN          0x80            /* 0 = MIDI data or command ACK                 */
- #define MUSTAT_ORDYN          0x40            /* 0 = MUDATA can accept a command or data      */
--#define TIMER                 0x1a            /* Timer terminal count register                */
-+#define A_IOCFG                       0x18            /* GPIO on Audigy card (16bits)                 */
-+#define A_GPINPUT_MASK                0xff00
-+#define A_GPOUTPUT_MASK               0x00ff
-+
-+#define TIMER                 0x1a            /* Timer terminal count register (16-bit)       */
-                                               /* NOTE: After the rate is changed, a maximum   */
-                                               /* of 1024 sample periods should be allowed     */
-                                               /* before the new rate is guaranteed accurate.  */
--#define TIMER_RATE_MASK               0x000003ff      /* Timer interrupt rate in sample periods       */
-+#define TIMER_RATE_MASK               0x03ff          /* Timer interrupt rate in sample periods       */
-                                               /* 0 == 1024 periods, [1..4] are not useful     */
--#define TIMER_RATE            0x0a00001a
- #define AC97DATA              0x1c            /* AC97 register set data register (16 bit)     */
-@@ -386,6 +419,8 @@
- #define TREMFRQ               0x1c            /* Tremolo amount and modulation LFO frequency register */
- #define TREMFRQ_DEPTH         0x0000ff00      /* Tremolo depth                                        */
-                                               /* Signed 2's complement, with +/- 12dB extremes        */
-+#define TREMFRQ_FREQUENCY     0x000000ff      /* Tremolo LFO frequency                                */
-+                                              /* ??Hz steps, maximum of ?? Hz.                        */
- #define FM2FRQ2               0x1d            /* Vibrato amount and vibrato LFO frequency register    */
- #define FM2FRQ2_DEPTH         0x0000ff00      /* Vibrato LFO vibrato depth                            */
-@@ -426,7 +461,12 @@
- #define ADCCR_LCHANENABLE     0x00000008      /* Enables left channel for writing to the host         */
-                                               /* NOTE: To guarantee phase coherency, both channels    */
-                                               /* must be disabled prior to enabling both channels.    */
-+#define A_ADCCR_RCHANENABLE   0x00000020
-+#define A_ADCCR_LCHANENABLE   0x00000010
-+
-+#define A_ADCCR_SAMPLERATE_MASK 0x0000000F      /* Audigy sample rate convertor output rate           */
- #define ADCCR_SAMPLERATE_MASK 0x00000007      /* Sample rate convertor output rate                    */
-+
- #define ADCCR_SAMPLERATE_48   0x00000000      /* 48kHz sample rate                                    */
- #define ADCCR_SAMPLERATE_44   0x00000001      /* 44.1kHz sample rate                                  */
- #define ADCCR_SAMPLERATE_32   0x00000002      /* 32kHz sample rate                                    */
-@@ -436,10 +476,16 @@
- #define ADCCR_SAMPLERATE_11   0x00000006      /* 11.025kHz sample rate                                */
- #define ADCCR_SAMPLERATE_8    0x00000007      /* 8kHz sample rate                                     */
-+#define A_ADCCR_SAMPLERATE_12 0x00000006      /* 12kHz sample rate                                    */
-+#define A_ADCCR_SAMPLERATE_11 0x00000007      /* 11.025kHz sample rate                                */
-+#define A_ADCCR_SAMPLERATE_8  0x00000008      /* 8kHz sample rate                                     */
-+
- #define FXWC                  0x43            /* FX output write channels register                    */
-                                               /* When set, each bit enables the writing of the        */
--                                              /* corresponding FX output channel into host memory     */
--
-+                                              /* corresponding FX output channel (internal registers  */
-+                                              /* 0x20-0x3f) into host memory. This mode of recording  */
-+                                              /* is 16bit, 48KHz only. All 32 channels can be enabled */
-+                                              /* simultaneously.                                      */
- #define TCBS                  0x44            /* Tank cache buffer size register                      */
- #define TCBS_MASK             0x00000007      /* Tank cache buffer size field                         */
- #define TCBS_BUFFSIZE_16K     0x00000000
-@@ -519,6 +565,13 @@
- #define REG53                 0x53            /* DO NOT PROGRAM THIS REGISTER!!! MAY DESTROY CHIP */
-+#define A_DBG                  0x53
-+#define A_DBG_SINGLE_STEP      0x00020000     /* Set to zero to start dsp */
-+#define A_DBG_ZC               0x40000000     /* zero tram counter */
-+#define A_DBG_STEP_ADDR                0x000003ff
-+#define A_DBG_SATURATION_OCCURED 0x20000000
-+#define A_DBG_SATURATION_ADDR  0x0ffc0000
-+
- #define SPCS0                 0x54            /* SPDIF output Channel Status 0 register       */
- #define SPCS1                 0x55            /* SPDIF output Channel Status 1 register       */
-@@ -582,10 +635,19 @@
- #define SRCS_RATELOCKED               0x01000000      /* Sample rate locked                           */
- #define SRCS_ESTSAMPLERATE    0x0007ffff      /* Do not modify this field.                    */
-+
-+/* Note that these values can vary +/- by a small amount                                        */
-+#define SRCS_SPDIFRATE_44     0x0003acd9
-+#define SRCS_SPDIFRATE_48     0x00040000
-+#define SRCS_SPDIFRATE_96     0x00080000
-+
- #define MICIDX                  0x63            /* Microphone recording buffer index register   */
- #define MICIDX_MASK             0x0000ffff      /* 16-bit value                                 */
- #define MICIDX_IDX            0x10000063
-+#define A_ADCIDX              0x63
-+#define A_ADCIDX_IDX          0x10000063
-+
- #define ADCIDX                        0x64            /* ADC recording buffer index register          */
- #define ADCIDX_MASK           0x0000ffff      /* 16 bit index field                           */
- #define ADCIDX_IDX            0x10000064
-@@ -594,9 +656,50 @@
- #define FXIDX_MASK            0x0000ffff      /* 16-bit value                                 */
- #define FXIDX_IDX             0x10000065
-+/* This is the MPU port on the card (via the game port)                                               */
-+#define A_MUDATA1             0x70
-+#define A_MUCMD1              0x71
-+#define A_MUSTAT1             A_MUCMD1
-+
-+/* This is the MPU port on the Audigy Drive                                                   */
-+#define A_MUDATA2             0x72
-+#define A_MUCMD2              0x73
-+#define A_MUSTAT2             A_MUCMD2        
-+
-+/* The next two are the Audigy equivalent of FXWC                                             */
-+/* the Audigy can record any output (16bit, 48kHz, up to 64 channel simultaneously)           */
-+/* Each bit selects a channel for recording */
-+#define A_FXWC1                       0x74            /* Selects 0x7f-0x60 for FX recording           */
-+#define A_FXWC2                       0x75            /* Selects 0x9f-0x80 for FX recording           */
-+
-+#define A_SPDIF_SAMPLERATE    0x76            /* Set the sample rate of SPDIF output          */
-+#define A_SPDIF_48000         0x00000080
-+#define A_SPDIF_44100         0x00000000
-+#define A_SPDIF_96000         0x00000040
-+
-+#define A_FXRT2                       0x7c
-+#define A_FXRT_CHANNELE               0x0000003f      /* Effects send bus number for channel's effects send E */
-+#define A_FXRT_CHANNELF               0x00003f00      /* Effects send bus number for channel's effects send F */
-+#define A_FXRT_CHANNELG               0x003f0000      /* Effects send bus number for channel's effects send G */
-+#define A_FXRT_CHANNELH               0x3f000000      /* Effects send bus number for channel's effects send H */
-+
-+#define A_SENDAMOUNTS         0x7d
-+#define A_FXSENDAMOUNT_E_MASK 0xff000000
-+#define A_FXSENDAMOUNT_F_MASK 0x00ff0000
-+#define A_FXSENDAMOUNT_G_MASK 0x0000ff00
-+#define A_FXSENDAMOUNT_H_MASK 0x000000ff
-+
-+/* The send amounts for this one are the same as used with the emu10k1 */
-+#define A_FXRT1                       0x7e
-+#define A_FXRT_CHANNELA               0x0000003f
-+#define A_FXRT_CHANNELB               0x00003f00
-+#define A_FXRT_CHANNELC               0x003f0000
-+#define A_FXRT_CHANNELD               0x3f000000
-+
-+
- /* Each FX general purpose register is 32 bits in length, all bits are used                   */
- #define FXGPREGBASE           0x100           /* FX general purpose registers base            */
--
-+#define A_FXGPREGBASE         0x400           /* Audigy GPRs, 0x400 to 0x5ff                  */
- /* Tank audio data is logarithmically compressed down to 16 bits before writing to TRAM and is        */
- /* decompressed back to 20 bits on a read.  There are a total of 160 locations, the last 32   */
- /* locations are for external TRAM.                                                           */
-@@ -621,4 +724,14 @@
- #define HIWORD_RESULT_MASK    0x000ffc00      /* Instruction result                           */
- #define HIWORD_OPA_MASK               0x000003ff      /* Instruction operand A                        */
-+
-+/* Audigy Soundcard have a different instruction format */
-+#define AUDIGY_CODEBASE               0x600
-+#define A_LOWORD_OPY_MASK     0x000007ff              
-+#define A_LOWORD_OPX_MASK     0x007ff000
-+#define A_HIWORD_OPCODE_MASK  0x0f000000
-+#define A_HIWORD_RESULT_MASK  0x007ff000
-+#define A_HIWORD_OPA_MASK     0x000007ff
-+
-+
- #endif /* _8010_H */
---- linux-2.6.0-test1/sound/oss/emu10k1/audio.c        2003-06-14 12:17:57.000000000 -0700
-+++ 25/sound/oss/emu10k1/audio.c       2003-07-19 17:03:51.000000000 -0700
-@@ -158,8 +158,8 @@ static ssize_t emu10k1_audio_write(struc
-               spin_unlock_irqrestore(&woinst->lock, flags);
-               return -ENXIO;
-       }
--
--      if (woinst->format.passthrough) {
-+      // This is for emu10k1 revs less than 7, we need to go through tram
-+      if (woinst->format.passthrough == 1) {
-               int r;
-               
-               woinst->buffer.ossfragshift = PT_BLOCKSIZE_LOG2;
-@@ -350,8 +350,9 @@ static int emu10k1_audio_ioctl(struct in
-       case SNDCTL_DSP_GETCAPS:
-               DPF(2, "SNDCTL_DSP_GETCAPS:\n");
--              return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP | DSP_CAP_COPROC, (int *) arg);
--
-+              return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME |
-+                              DSP_CAP_TRIGGER | DSP_CAP_MMAP |
-+                              DSP_CAP_COPROC| DSP_CAP_MULTI, (int *) arg);
-       case SNDCTL_DSP_SPEED:
-               DPF(2, "SNDCTL_DSP_SPEED:\n");
-@@ -528,8 +529,8 @@ static int emu10k1_audio_ioctl(struct in
-               else if (file->f_mode & FMODE_WRITE) {
-                       val = AFMT_S16_LE | AFMT_U8;
-                       if (emu10k1_find_control_gpr(&wave_dev->card->mgr,
--                                                   wave_dev->card->pt.patch_name, 
--                                                   wave_dev->card->pt.enable_gpr_name) >= 0)
-+                                                   wave_dev->card->pt.patch_name, 
-+                                                   wave_dev->card->pt.enable_gpr_name) >= 0)
-                               val |= AFMT_AC3;
-               }
-               return put_user(val, (int *) arg);
-@@ -789,7 +790,7 @@ static int emu10k1_audio_ioctl(struct in
-                               cinfo.blocks = 0;
-                       }
--                      if(wiinst->mmapped)
-+                      if (wiinst->mmapped)
-                               wiinst->buffer.bytestocopy %= wiinst->buffer.fragment_size;
-                       spin_unlock_irqrestore(&wiinst->lock, flags);
-@@ -811,15 +812,17 @@ static int emu10k1_audio_ioctl(struct in
-                       spin_lock_irqsave(&woinst->lock, flags);
-                       if (woinst->state & WAVE_STATE_OPEN || 
--                          (woinst->format.passthrough && wave_dev->card->pt.state)) {
-+                          ((woinst->format.passthrough == 1) && wave_dev->card->pt.state)) {
-                               int num_fragments;
--                              if (woinst->format.passthrough) {
-+
-+                              if (woinst->format.passthrough == 1) {
-                                       emu10k1_pt_waveout_update(wave_dev);
-                                       cinfo.bytes = woinst->total_played;
-                               } else {
-                                       emu10k1_waveout_update(woinst);
-                                       cinfo.bytes = woinst->total_played;
-                               }
-+
-                               cinfo.ptr = woinst->buffer.hw_pos;
-                               num_fragments = cinfo.bytes / woinst->buffer.fragment_size;
-                               cinfo.blocks = num_fragments - woinst->blocks;
-@@ -899,7 +902,7 @@ static int emu10k1_audio_ioctl(struct in
-               if (file->f_mode & FMODE_WRITE) {
-                       /* digital pass-through fragment count and size are fixed values */
--                      if (woinst->state & WAVE_STATE_OPEN || woinst->format.passthrough)
-+                      if (woinst->state & WAVE_STATE_OPEN || (woinst->format.passthrough == 1))
-                               return -EINVAL; /* too late to change */
-                       woinst->buffer.ossfragshift = val & 0xffff;
-@@ -936,19 +939,35 @@ static int emu10k1_audio_ioctl(struct in
-                               kfree (buf);
-                               return -EINVAL;
-                       }
-+
-+                      if (buf->command == CMD_WRITE) {
-+                              
- #ifdef DBGEMU
--                      if ( (buf->offs < 0) || (buf->offs + buf->len > 0x800) || (buf->len > 1000)) {
-+                              if ((buf->offs < 0) || (buf->offs + buf->len > 0xe00) || (buf->len > 1000)) {
- #else
--                      if ( ((buf->offs < 0x100 ) || (buf->offs + buf->len > 0x800) || (buf->len > 1000))
--                           && !( ( buf->offs == DBG) && (buf->len ==1) )){
--#endif        
--                              kfree(buf);
--                              return -EINVAL;
--                      }
-+                              if (((buf->offs < 0x100) || (buf->offs + buf->len > (wave_dev->card->is_audigy ? 0xe00 : 0x800)) || (buf->len > 1000)
-+                              ) && !(
-+                                      //any register allowed raw access to users goes here:
-+                                      (buf->offs == DBG ||
-+                                        buf->offs == A_DBG)
-+                                      && (buf->len == 1))) {
-+#endif                
-+                                      kfree(buf);
-+                                      return -EINVAL;
-+                              }
-+                      } else {
-+                              if ((buf->offs < 0) || (buf->offs + buf->len > 0xe00) || (buf->len > 1000)) {
-+                                      kfree(buf);
-+                                      return -EINVAL;
-+                              }
-+                      }                       
-+                              
-+                      if (((unsigned)buf->flags) > 0x3f)
-+                              buf->flags = 0;
-                       if (buf->command == CMD_READ) {
-                               for (i = 0; i < buf->len; i++)
--                                      ((u32 *) buf->data)[i] = sblive_readptr(wave_dev->card, buf->offs + i, 0);
-+                                      ((u32 *) buf->data)[i] = sblive_readptr(wave_dev->card, buf->offs + i, buf->flags);
-                               if (copy_to_user((copr_buffer *) arg, buf, sizeof(copr_buffer))) {
-                                       kfree(buf);
-@@ -956,7 +975,7 @@ static int emu10k1_audio_ioctl(struct in
-                               }
-                       } else {
-                               for (i = 0; i < buf->len; i++)
--                                      sblive_writeptr(wave_dev->card, buf->offs + i, 0, ((u32 *) buf->data)[i]);
-+                                      sblive_writeptr(wave_dev->card, buf->offs + i, buf->flags, ((u32 *) buf->data)[i]);
-                       }
-                       kfree (buf);
-@@ -1244,8 +1263,9 @@ static int emu10k1_audio_release(struct 
-               struct woinst *woinst = wave_dev->woinst;
-               spin_lock_irqsave(&woinst->lock, flags);
--
--              if (woinst->format.passthrough && card->pt.state != PT_STATE_INACTIVE) {
-+              if(woinst->format.passthrough==2)
-+                      card->pt.state=PT_STATE_PLAYING;
-+              if (woinst->format.passthrough && card->pt.state != PT_STATE_INACTIVE){
-                       spin_lock(&card->pt.lock);
-                         emu10k1_pt_stop(card);
-                       spin_unlock(&card->pt.lock);
---- linux-2.6.0-test1/sound/oss/emu10k1/cardmi.c       2003-06-14 12:18:22.000000000 -0700
-+++ 25/sound/oss/emu10k1/cardmi.c      2003-07-19 17:03:51.000000000 -0700
-@@ -113,7 +113,7 @@ int emu10k1_mpuin_close(struct emu10k1_c
-       }
-       /* Disable RX interrupt */
--      emu10k1_irq_disable(card, INTE_MIDIRXENABLE);
-+      emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
-       emu10k1_mpu_release(card);
-@@ -189,7 +189,7 @@ int emu10k1_mpuin_start(struct emu10k1_c
-               card_mpuin->qhead = 0;
-               card_mpuin->qtail = 0;
--              emu10k1_irq_enable(card, INTE_MIDIRXENABLE);
-+              emu10k1_irq_enable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
-       }
-       return 0;
-@@ -207,7 +207,7 @@ int emu10k1_mpuin_stop(struct emu10k1_ca
-       DPF(2, "emu10k1_mpuin_stop()\n");
--      emu10k1_irq_disable(card, INTE_MIDIRXENABLE);
-+      emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
-       card_mpuin->status &= ~FLAGS_MIDM_STARTED;      /* clear */
-@@ -246,7 +246,7 @@ int emu10k1_mpuin_reset(struct emu10k1_c
-       DPF(2, "emu10k1_mpuin_reset()\n");
--      emu10k1_irq_disable(card, INTE_MIDIRXENABLE);
-+      emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDIRXENABLE : INTE_MIDIRXENABLE);
-       while (card_mpuin->firstmidiq) {
-               midiq = card_mpuin->firstmidiq;
---- linux-2.6.0-test1/sound/oss/emu10k1/cardmo.c       2003-06-14 12:17:58.000000000 -0700
-+++ 25/sound/oss/emu10k1/cardmo.c      2003-07-19 17:03:51.000000000 -0700
-@@ -72,7 +72,7 @@ int emu10k1_mpuout_close(struct emu10k1_
-       DPF(2, "emu10k1_mpuout_close()\n");
--      emu10k1_irq_disable(card, INTE_MIDITXENABLE);
-+      emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
-       spin_lock_irqsave(&card_mpuout->lock, flags);
-@@ -142,7 +142,7 @@ int emu10k1_mpuout_add_buffer(struct emu
-       card_mpuout->intr = 0;
--      emu10k1_irq_enable(card, INTE_MIDITXENABLE);
-+      emu10k1_irq_enable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
-       spin_unlock_irqrestore(&card_mpuout->lock, flags);
-@@ -206,7 +206,7 @@ void emu10k1_mpuout_bh(unsigned long ref
-       if ((card_mpuout->firstmidiq != NULL) || cByteSent) {
-               card_mpuout->intr = 0;
--              emu10k1_irq_enable(card, INTE_MIDITXENABLE);
-+              emu10k1_irq_enable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
-       }
-       spin_unlock_irqrestore(&card_mpuout->lock, flags);
-@@ -221,7 +221,7 @@ int emu10k1_mpuout_irqhandler(struct emu
-       DPF(4, "emu10k1_mpuout_irqhandler\n");
-       card_mpuout->intr = 1;
--      emu10k1_irq_disable(card, INTE_MIDITXENABLE);
-+      emu10k1_irq_disable(card, card->is_audigy ? A_INTE_MIDITXENABLE : INTE_MIDITXENABLE);
-       tasklet_hi_schedule(&card_mpuout->tasklet);
---- linux-2.6.0-test1/sound/oss/emu10k1/cardwo.c       2003-06-14 12:18:30.000000000 -0700
-+++ 25/sound/oss/emu10k1/cardwo.c      2003-07-19 17:03:51.000000000 -0700
-@@ -85,25 +85,36 @@ static void query_format(struct emu10k1_
-               break;
-       }       
-       if (do_passthrough) {
--              i = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.intr_gpr_name);
--              j = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.enable_gpr_name);
-               /* currently only one waveout instance may use pass-through */
--              if (i < 0 || j < 0 || woinst->state != WAVE_STATE_CLOSED || 
-+              if (woinst->state != WAVE_STATE_CLOSED || 
-                   card->pt.state != PT_STATE_INACTIVE ||
--                  (wave_fmt->samplingrate != 48000 && !is_ac3) ||
-                   (wave_fmt->samplingrate != 48000 && !is_ac3)) {
-                       DPF(2, "unable to set pass-through mode\n");
--              } else {
--                      wave_fmt->samplingrate = 48000;
--                      wave_fmt->channels = 2;
--                      wave_fmt->passthrough = 1;
--                      card->pt.intr_gpr = i;
--                      card->pt.enable_gpr = j;
--                      card->pt.state = PT_STATE_INACTIVE;
--                      card->pt.pos_gpr = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.pos_gpr_name);
--                      DPD(2, "is_ac3 is %d\n", is_ac3);
--                      card->pt.ac3data = is_ac3;
--                      wave_fmt->bitsperchannel = 16;
-+              } else if (USE_PT_METHOD1) {
-+                      i = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.intr_gpr_name);
-+                      j = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name, card->pt.enable_gpr_name);
-+                      if (i < 0 || j < 0)
-+                              DPF(2, "unable to set pass-through mode\n");
-+                      else {
-+                              wave_fmt->samplingrate = 48000;
-+                              wave_fmt->channels = 2;
-+                              card->pt.pos_gpr = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name,
-+                                                                          card->pt.pos_gpr_name);
-+                              wave_fmt->passthrough = 1;
-+                              card->pt.intr_gpr = i;
-+                              card->pt.enable_gpr = j;
-+                              card->pt.state = PT_STATE_INACTIVE;
-+                      
-+                              DPD(2, "is_ac3 is %d\n", is_ac3);
-+                              card->pt.ac3data = is_ac3;
-+                              wave_fmt->bitsperchannel = 16;
-+                      }
-+              }else{
-+                      DPF(2, "Using Passthrough Method 2\n");
-+                      card->pt.enable_gpr = emu10k1_find_control_gpr(&card->mgr, card->pt.patch_name,
-+                                                                     card->pt.enable_gpr_name);
-+                      wave_fmt->passthrough = 2;
-+                      wave_fmt->bitsperchannel = 16;
-               }
-       }
-@@ -149,33 +160,37 @@ static int get_voice(struct emu10k1_card
-       voice->endloop = voice->startloop + woinst->buffer.size / woinst->format.bytespervoicesample;
-       voice->start = voice->startloop;
--      if (voice->flags & VOICE_FLAGS_STEREO) {
--              voice->params[0].send_a = card->waveout.send_a[1];
--              voice->params[0].send_b = card->waveout.send_b[1];
--              voice->params[0].send_c = card->waveout.send_c[1];
--              voice->params[0].send_d = card->waveout.send_d[1];
--
--              if (woinst->device)
--                      voice->params[0].send_routing = 0x7654;
--              else
--                      voice->params[0].send_routing = card->waveout.send_routing[1];
--
--              voice->params[0].volume_target = 0xffff;
--              voice->params[0].initial_fc = 0xff;
--              voice->params[0].initial_attn = 0x00;
--              voice->params[0].byampl_env_sustain = 0x7f;
--              voice->params[0].byampl_env_decay = 0x7f;
--
--              voice->params[1].send_a = card->waveout.send_a[2];
--              voice->params[1].send_b = card->waveout.send_b[2];
--              voice->params[1].send_c = card->waveout.send_c[2];
--              voice->params[1].send_d = card->waveout.send_d[2];
--
--              if (woinst->device)
--                      voice->params[1].send_routing = 0x7654;
--              else
--                      voice->params[1].send_routing = card->waveout.send_routing[2];
-+      
-+      voice->params[0].volume_target = 0xffff;
-+      voice->params[0].initial_fc = 0xff;
-+      voice->params[0].initial_attn = 0x00;
-+      voice->params[0].byampl_env_sustain = 0x7f;
-+      voice->params[0].byampl_env_decay = 0x7f;
-+      
-+      if (voice->flags & VOICE_FLAGS_STEREO) {
-+              if (woinst->format.passthrough == 2) {
-+                      voice->params[0].send_routing  = voice->params[1].send_routing  = card->waveout.send_routing[ROUTE_PT];
-+                      voice->params[0].send_routing2 = voice->params[1].send_routing2 = card->waveout.send_routing2[ROUTE_PT];
-+                      voice->params[0].send_dcba = 0xff;
-+                      voice->params[1].send_dcba = 0xff00;
-+                      voice->params[0].send_hgfe = voice->params[1].send_hgfe=0;
-+              } else {
-+                      voice->params[0].send_dcba = card->waveout.send_dcba[SEND_LEFT];
-+                      voice->params[0].send_hgfe = card->waveout.send_hgfe[SEND_LEFT];
-+                      voice->params[1].send_dcba = card->waveout.send_dcba[SEND_RIGHT];
-+                      voice->params[1].send_hgfe = card->waveout.send_hgfe[SEND_RIGHT];
-+
-+                      if (woinst->device) {
-+                              // /dev/dps1
-+                              voice->params[0].send_routing  = voice->params[1].send_routing  = card->waveout.send_routing[ROUTE_PCM1];
-+                              voice->params[0].send_routing2 = voice->params[1].send_routing2 = card->waveout.send_routing2[ROUTE_PCM1];
-+                      } else {
-+                              voice->params[0].send_routing  = voice->params[1].send_routing  = card->waveout.send_routing[ROUTE_PCM];
-+                              voice->params[0].send_routing2 = voice->params[1].send_routing2 = card->waveout.send_routing2[ROUTE_PCM];
-+                      }
-+              }
-+              
-               voice->params[1].volume_target = 0xffff;
-               voice->params[1].initial_fc = 0xff;
-               voice->params[1].initial_attn = 0x00;
-@@ -183,30 +198,28 @@ static int get_voice(struct emu10k1_card
-               voice->params[1].byampl_env_decay = 0x7f;
-       } else {
-               if (woinst->num_voices > 1) {
--                      voice->params[0].send_a = 0xff;
--                      voice->params[0].send_b = 0;
--                      voice->params[0].send_c = 0;
--                      voice->params[0].send_d = 0;
--
--                      voice->params[0].send_routing =
--                       0xfff0 + card->mchannel_fx + voicenum;
-+                      // Multichannel pcm
-+                      voice->params[0].send_dcba=0xff;
-+                      voice->params[0].send_hgfe=0;
-+                      if (card->is_audigy) {
-+                              voice->params[0].send_routing = 0x3f3f3f00 + card->mchannel_fx + voicenum;
-+                              voice->params[0].send_routing2 = 0x3f3f3f3f;
-+                      } else {
-+                              voice->params[0].send_routing = 0xfff0 + card->mchannel_fx + voicenum;
-+                      }
-+                      
-               } else {
--                      voice->params[0].send_a = card->waveout.send_a[0];
--                      voice->params[0].send_b = card->waveout.send_b[0];
--                      voice->params[0].send_c = card->waveout.send_c[0];
--                      voice->params[0].send_d = card->waveout.send_d[0];
--
--                      if (woinst->device)
--                              voice->params[0].send_routing = 0x7654;
--                      else
--                              voice->params[0].send_routing = card->waveout.send_routing[0];
--              }       
--
--              voice->params[0].volume_target = 0xffff;
--              voice->params[0].initial_fc = 0xff;
--              voice->params[0].initial_attn = 0x00;
--              voice->params[0].byampl_env_sustain = 0x7f;
--              voice->params[0].byampl_env_decay = 0x7f;
-+                      voice->params[0].send_dcba = card->waveout.send_dcba[SEND_MONO];
-+                      voice->params[0].send_hgfe = card->waveout.send_hgfe[SEND_MONO];
-+
-+                      if (woinst->device) {
-+                              voice->params[0].send_routing = card->waveout.send_routing[ROUTE_PCM1];
-+                              voice->params[0].send_routing2 = card->waveout.send_routing2[ROUTE_PCM1];
-+                      } else {
-+                              voice->params[0].send_routing = card->waveout.send_routing[ROUTE_PCM];
-+                              voice->params[0].send_routing2 = card->waveout.send_routing2[ROUTE_PCM];
-+                      }
-+              }
-       }
-       DPD(2, "voice: startloop=%#x, endloop=%#x\n", voice->startloop, voice->endloop);
-@@ -280,9 +293,16 @@ void emu10k1_waveout_start(struct emu10k
- {
-       struct emu10k1_card *card = wave_dev->card;
-       struct woinst *woinst = wave_dev->woinst;
-+      struct pt_data *pt = &card->pt;
-       DPF(2, "emu10k1_waveout_start()\n");
-+      if (woinst->format.passthrough == 2) {
-+              emu10k1_pt_setup(wave_dev);
-+              sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + pt->enable_gpr, 0, 1);
-+              pt->state = PT_STATE_PLAYING;
-+      }
-+
-       /* Actual start */
-       emu10k1_voices_start(woinst->voice, woinst->num_voices, woinst->total_played);
---- linux-2.6.0-test1/sound/oss/emu10k1/efxmgr.c       2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/efxmgr.c      2003-07-19 17:03:51.000000000 -0700
-@@ -80,15 +80,20 @@ void emu10k1_set_control_gpr(struct emu1
-       if (addr < 0 || addr >= NUM_GPRS)
-               return;
--      if (flag)
--              val += sblive_readptr(card, GPR_BASE + addr, 0);
--
--      if (val > mgr->gpr[addr].max)
--              val = mgr->gpr[addr].max;
--      else if (val < mgr->gpr[addr].min)
--              val = mgr->gpr[addr].min;
--
--      sblive_writeptr(card, GPR_BASE + addr, 0, val);
-+      //fixme: once patch manager is up, remember to fix this for the audigy
-+      if (card->is_audigy) {
-+              sblive_writeptr(card, A_GPR_BASE + addr, 0, val);
-+      } else {
-+              if (flag)
-+                      val += sblive_readptr(card, GPR_BASE + addr, 0);
-+              if (val > mgr->gpr[addr].max)
-+                      val = mgr->gpr[addr].max;
-+              else if (val < mgr->gpr[addr].min)
-+                      val = mgr->gpr[addr].min;
-+              sblive_writeptr(card, GPR_BASE + addr, 0, val);
-+      }
-+      
-+      
- }
- //TODO: make this configurable:
---- linux-2.6.0-test1/sound/oss/emu10k1/efxmgr.h       2003-06-14 12:18:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/efxmgr.h      2003-07-19 17:03:51.000000000 -0700
-@@ -32,16 +32,30 @@
- #ifndef _EFXMGR_H
- #define _EFXMGR_H
--#define WRITE_EFX(a, b, c) sblive_writeptr((a), MICROCODEBASE + (b), 0, (c))
-+struct emu_efx_info_t{
-+      int opcode_shift;
-+      int high_operand_shift;
-+      int instruction_start;
-+      int gpr_base;
-+      int output_base;
-+};
-+
-+
-+#define WRITE_EFX(a, b, c) sblive_writeptr((a), emu_efx_info[card->is_audigy].instruction_start + (b), 0, (c))
- #define OP(op, z, w, x, y) \
--      do { WRITE_EFX(card, (pc) * 2, ((x) << 10) | (y)); \
--      WRITE_EFX(card, (pc) * 2 + 1, ((op) << 20) | ((z) << 10) | (w)); \
-+      do { WRITE_EFX(card, (pc) * 2, ((x) << emu_efx_info[card->is_audigy].high_operand_shift) | (y)); \
-+      WRITE_EFX(card, (pc) * 2 + 1, ((op) << emu_efx_info[card->is_audigy].opcode_shift ) | ((z) << emu_efx_info[card->is_audigy].high_operand_shift) | (w)); \
-       ++pc; } while (0)
- #define NUM_INPUTS 0x20
- #define NUM_OUTPUTS 0x20
- #define NUM_GPRS 0x100
-+
-+#define A_NUM_INPUTS 0x60
-+#define A_NUM_OUTPUTS 0x60  //fixme: this may or may not be true
-+#define A_NUM_GPRS 0x200
-+
- #define GPR_NAME_SIZE   32
- #define PATCH_NAME_SIZE 32
-@@ -98,6 +112,9 @@ enum {
- #define GPR_BASE 0x100
- #define OUTPUT_BASE 0x20
-+#define A_GPR_BASE 0x400
-+#define A_OUTPUT_BASE 0x60
-+
- #define MAX_PATCHES_PAGES 32
- struct patch_manager {
---- linux-2.6.0-test1/sound/oss/emu10k1/hwaccess.c     2003-06-14 12:18:06.000000000 -0700
-+++ 25/sound/oss/emu10k1/hwaccess.c    2003-07-19 17:03:51.000000000 -0700
-@@ -160,6 +160,24 @@ void emu10k1_writefn0(struct emu10k1_car
-       return;
- }
-+void emu10k1_writefn0_2(struct emu10k1_card *card, u32 reg, u32 data, int size)
-+{
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&card->lock, flags);
-+
-+      if (size == 32)
-+              outl(data, card->iobase + (reg & 0x1F));
-+      else if (size == 16)
-+              outw(data, card->iobase + (reg & 0x1F));
-+      else
-+              outb(data, card->iobase + (reg & 0x1F));
-+
-+      spin_unlock_irqrestore(&card->lock, flags);
-+
-+      return;
-+}
-+
- u32 emu10k1_readfn0(struct emu10k1_card * card, u32 reg)
- {
-       u32 val;
-@@ -200,12 +218,13 @@ void emu10k1_timer_set(struct emu10k1_ca
- * write/read Emu10k1 pointer-offset register set, accessed through      *
- *  the PTR and DATA registers                                           *
- *************************************************************************/
-+#define A_PTR_ADDRESS_MASK 0x0fff0000
- void sblive_writeptr(struct emu10k1_card *card, u32 reg, u32 channel, u32 data)
- {
-       u32 regptr;
-       unsigned long flags;
--      regptr = ((reg << 16) & PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-+      regptr = ((reg << 16) & A_PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-       if (reg & 0xff000000) {
-               u32 mask;
-@@ -242,7 +261,7 @@ void sblive_writeptr_tag(struct emu10k1_
-       spin_lock_irqsave(&card->lock, flags);
-       while ((reg = va_arg(args, u32)) != TAGLIST_END) {
-               u32 data = va_arg(args, u32);
--              u32 regptr = (((reg << 16) & PTR_ADDRESS_MASK)
-+              u32 regptr = (((reg << 16) & A_PTR_ADDRESS_MASK)
-                             | (channel & PTR_CHANNELNUM_MASK));
-               outl(regptr, card->iobase + PTR);
-               if (reg & 0xff000000) {
-@@ -267,7 +286,7 @@ u32 sblive_readptr(struct emu10k1_card *
-       u32 regptr, val;
-       unsigned long flags;
--      regptr = ((reg << 16) & PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-+      regptr = ((reg << 16) & A_PTR_ADDRESS_MASK) | (channel & PTR_CHANNELNUM_MASK);
-       if (reg & 0xff000000) {
-               u32 mask;
-@@ -389,7 +408,7 @@ void emu10k1_ac97_write(struct ac97_code
-       outb(reg, card->iobase + AC97ADDRESS);
-       outw(value, card->iobase + AC97DATA);
--
-+      outb( AC97_EXTENDED_ID, card->iobase + AC97ADDRESS); 
-       spin_unlock_irqrestore(&card->lock, flags);
- }
-@@ -402,15 +421,23 @@ int emu10k1_mpu_write_data(struct emu10k
-       unsigned long flags;
-       int ret;
--      spin_lock_irqsave(&card->lock, flags);
-+      if (card->is_audigy) {
-+              if ((sblive_readptr(card, A_MUSTAT,0) & MUSTAT_ORDYN) == 0) {
-+                      sblive_writeptr(card, A_MUDATA, 0, data);
-+                      ret = 0;
-+              } else
-+                      ret = -1;
-+      } else {
-+              spin_lock_irqsave(&card->lock, flags);
--      if ((inb(card->iobase + MUSTAT) & MUSTAT_ORDYN) == 0) {
--              outb(data, card->iobase + MUDATA);
--              ret = 0;
--      } else
--              ret = -1;
-+              if ((inb(card->iobase + MUSTAT) & MUSTAT_ORDYN) == 0) {
-+                      outb(data, card->iobase + MUDATA);
-+                      ret = 0;
-+              } else
-+                      ret = -1;
--      spin_unlock_irqrestore(&card->lock, flags);
-+              spin_unlock_irqrestore(&card->lock, flags);
-+      }
-       return ret;
- }
-@@ -420,15 +447,23 @@ int emu10k1_mpu_read_data(struct emu10k1
-       unsigned long flags;
-       int ret;
--      spin_lock_irqsave(&card->lock, flags);
-+      if (card->is_audigy) {
-+              if ((sblive_readptr(card, A_MUSTAT,0) & MUSTAT_IRDYN) == 0) {
-+                      *data = sblive_readptr(card, A_MUDATA,0);
-+                      ret = 0;
-+              } else
-+                      ret = -1;
-+      } else {
-+              spin_lock_irqsave(&card->lock, flags);
--      if ((inb(card->iobase + MUSTAT) & MUSTAT_IRDYN) == 0) {
--              *data = inb(card->iobase + MUDATA);
--              ret = 0;
--      } else
--              ret = -1;
-+              if ((inb(card->iobase + MUSTAT) & MUSTAT_IRDYN) == 0) {
-+                      *data = inb(card->iobase + MUDATA);
-+                      ret = 0;
-+              } else
-+                      ret = -1;
--      spin_unlock_irqrestore(&card->lock, flags);
-+              spin_unlock_irqrestore(&card->lock, flags);
-+      }
-       return ret;
- }
-@@ -439,37 +474,54 @@ int emu10k1_mpu_reset(struct emu10k1_car
-       unsigned long flags;
-       DPF(2, "emu10k1_mpu_reset()\n");
-+      if (card->is_audigy) {
-+              if (card->mpuacqcount == 0) {
-+                      sblive_writeptr(card, A_MUCMD, 0, MUCMD_RESET);
-+                      sblive_wcwait(card, 8);
-+                      sblive_writeptr(card, A_MUCMD, 0, MUCMD_RESET);
-+                      sblive_wcwait(card, 8);
-+                      sblive_writeptr(card, A_MUCMD, 0, MUCMD_ENTERUARTMODE);
-+                      sblive_wcwait(card, 8);
-+                      status = sblive_readptr(card, A_MUDATA, 0);
-+                      if (status == 0xfe)
-+                              return 0;
-+                      else
-+                              return -1;
-+              }
--      if (card->mpuacqcount == 0) {
--              spin_lock_irqsave(&card->lock, flags);
--              outb(MUCMD_RESET, card->iobase + MUCMD);
--              spin_unlock_irqrestore(&card->lock, flags);
-+              return 0;
-+      } else {
-+              if (card->mpuacqcount == 0) {
-+                      spin_lock_irqsave(&card->lock, flags);
-+                      outb(MUCMD_RESET, card->iobase + MUCMD);
-+                      spin_unlock_irqrestore(&card->lock, flags);
--              sblive_wcwait(card, 8);
-+                      sblive_wcwait(card, 8);
--              spin_lock_irqsave(&card->lock, flags);
--              outb(MUCMD_RESET, card->iobase + MUCMD);
--              spin_unlock_irqrestore(&card->lock, flags);
-+                      spin_lock_irqsave(&card->lock, flags);
-+                      outb(MUCMD_RESET, card->iobase + MUCMD);
-+                      spin_unlock_irqrestore(&card->lock, flags);
--              sblive_wcwait(card, 8);
-+                      sblive_wcwait(card, 8);
--              spin_lock_irqsave(&card->lock, flags);
--              outb(MUCMD_ENTERUARTMODE, card->iobase + MUCMD);
--              spin_unlock_irqrestore(&card->lock, flags);
-+                      spin_lock_irqsave(&card->lock, flags);
-+                      outb(MUCMD_ENTERUARTMODE, card->iobase + MUCMD);
-+                      spin_unlock_irqrestore(&card->lock, flags);
--              sblive_wcwait(card, 8);
-+                      sblive_wcwait(card, 8);
--              spin_lock_irqsave(&card->lock, flags);
--              status = inb(card->iobase + MUDATA);
--              spin_unlock_irqrestore(&card->lock, flags);
-+                      spin_lock_irqsave(&card->lock, flags);
-+                      status = inb(card->iobase + MUDATA);
-+                      spin_unlock_irqrestore(&card->lock, flags);
--              if (status == 0xfe)
--                      return 0;
--              else
--                      return -1;
--      }
-+                      if (status == 0xfe)
-+                              return 0;
-+                      else
-+                              return -1;
-+              }
--      return 0;
-+              return 0;
-+      }
- }
- int emu10k1_mpu_acquire(struct emu10k1_card *card)
---- linux-2.6.0-test1/sound/oss/emu10k1/hwaccess.h     2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/hwaccess.h    2003-07-19 17:03:51.000000000 -0700
-@@ -79,13 +79,21 @@ struct memhandle
- struct emu10k1_waveout
- {
--      u16 send_routing[3];
--
--      u8 send_a[3];
--      u8 send_b[3];
--      u8 send_c[3];
--      u8 send_d[3];
-+      u32 send_routing[3];
-+      // audigy only:
-+      u32 send_routing2[3];
-+
-+      u32 send_dcba[3];
-+      // audigy only:
-+      u32 send_hgfe[3];
- };
-+#define ROUTE_PCM 0
-+#define ROUTE_PT 1
-+#define ROUTE_PCM1 2
-+
-+#define SEND_MONO 0
-+#define SEND_LEFT 1
-+#define SEND_RIGHT 2
- struct emu10k1_wavein
- {
-@@ -129,7 +137,7 @@ struct mixer_private_ioctl {
- #define CMD_AC97_BOOST                _IOW('D', 20, struct mixer_private_ioctl)
- //up this number when breaking compatibility
--#define PRIVATE3_VERSION 1
-+#define PRIVATE3_VERSION 2
- struct emu10k1_card 
- {
-@@ -181,7 +189,7 @@ struct emu10k1_card 
-       u32         has_toslink;               // TOSLink detection
-       u8 chiprev;                    /* Chip revision                */
--
-+      u8 is_audigy;
-       u8 is_aps;
-       struct patch_manager mgr;
-@@ -211,6 +219,7 @@ extern struct list_head emu10k1_devs;
- /* Hardware Abstraction Layer access functions */
- void emu10k1_writefn0(struct emu10k1_card *, u32, u32);
-+void emu10k1_writefn0_2(struct emu10k1_card *, u32, u32, int);
- u32 emu10k1_readfn0(struct emu10k1_card *, u32);
- void emu10k1_timer_set(struct emu10k1_card *, u16);
---- linux-2.6.0-test1/sound/oss/emu10k1/irqmgr.h       2003-06-14 12:18:03.000000000 -0700
-+++ 25/sound/oss/emu10k1/irqmgr.h      2003-07-19 17:03:51.000000000 -0700
-@@ -33,15 +33,15 @@
- #define _IRQ_H
- /* EMU Irq Types */
--#define IRQTYPE_PCIBUSERROR         IPR_PCIERROR
--#define IRQTYPE_MIXERBUTTON         (IPR_VOLINCR | IPR_VOLDECR | IPR_MUTE)
--#define IRQTYPE_VOICE               (IPR_CHANNELLOOP | IPR_CHANNELNUMBERMASK)
--#define IRQTYPE_RECORD              (IPR_ADCBUFFULL | IPR_ADCBUFHALFFULL | IPR_MICBUFFULL | IPR_MICBUFHALFFULL | IPR_EFXBUFFULL | IPR_EFXBUFHALFFULL)
--#define IRQTYPE_MPUOUT              IPR_MIDITRANSBUFEMPTY
--#define IRQTYPE_MPUIN               IPR_MIDIRECVBUFEMPTY
--#define IRQTYPE_TIMER               IPR_INTERVALTIMER
--#define IRQTYPE_SPDIF               (IPR_GPSPDIFSTATUSCHANGE | IPR_CDROMSTATUSCHANGE)
--#define IRQTYPE_DSP                 IPR_FXDSP
-+#define IRQTYPE_PCIBUSERROR   IPR_PCIERROR
-+#define IRQTYPE_MIXERBUTTON   (IPR_VOLINCR | IPR_VOLDECR | IPR_MUTE)
-+#define IRQTYPE_VOICE         (IPR_CHANNELLOOP | IPR_CHANNELNUMBERMASK)
-+#define IRQTYPE_RECORD                (IPR_ADCBUFFULL | IPR_ADCBUFHALFFULL | IPR_MICBUFFULL | IPR_MICBUFHALFFULL | IPR_EFXBUFFULL | IPR_EFXBUFHALFFULL)
-+#define IRQTYPE_MPUOUT                (IPR_MIDITRANSBUFEMPTY | A_IPR_MIDITRANSBUFEMPTY2) 
-+#define IRQTYPE_MPUIN         (IPR_MIDIRECVBUFEMPTY | A_IPR_MIDIRECVBUFEMPTY2)
-+#define IRQTYPE_TIMER         IPR_INTERVALTIMER
-+#define IRQTYPE_SPDIF         (IPR_GPSPDIFSTATUSCHANGE | IPR_CDROMSTATUSCHANGE)
-+#define IRQTYPE_DSP           IPR_FXDSP
- void emu10k1_timer_irqhandler(struct emu10k1_card *);
- void emu10k1_dsp_irqhandler(struct emu10k1_card *);
---- linux-2.6.0-test1/sound/oss/emu10k1/main.c 2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/main.c        2003-07-19 17:03:51.000000000 -0700
-@@ -78,10 +78,11 @@
-  *          Cleaned up poll() functions (audio and midi). Don't start input.
-  *        Restrict DMA pages used to 512Mib range.
-  *        New AC97_BOOST mixer ioctl.
-- *     0.19 Real fix for kernel with highmem support (cast dma_handle to u32).
-+ *    0.19a Added Support for Audigy Cards
-+ *        Real fix for kernel with highmem support (cast dma_handle to u32).
-  *        Fix recording buffering parameters calculation.
-  *        Use unsigned long for variables in bit ops.
-- *     0.20 Fixed recording startup
-+ *    0.20a Fixed recording startup
-  *        Fixed timer rate setting (it's a 16-bit register)
-  *********************************************************************/
-@@ -114,7 +115,6 @@
- #define SNDCARD_EMU10K1 46
- #endif
-  
--#define DRIVER_VERSION "0.20"
- /* the emu10k1 _seems_ to only supports 29 bit (512MiB) bit bus master */
- #define EMU10K1_DMA_MASK                0x1fffffff    /* DMA buffer mask for pci_alloc_consist */
-@@ -126,20 +126,27 @@
- #ifndef PCI_DEVICE_ID_CREATIVE_EMU10K1
- #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002
- #endif
-+#ifndef PCI_DEVICE_ID_CREATIVE_AUDIGY
-+#define PCI_DEVICE_ID_CREATIVE_AUDIGY 0x0004
-+#endif
- #define EMU_APS_SUBID 0x40011102
-  
- enum {
-       EMU10K1 = 0,
-+      AUDIGY,
- };
- static char *card_names[] __devinitdata = {
-       "EMU10K1",
-+      "Audigy",
- };
- static struct pci_device_id emu10k1_pci_tbl[] = {
-       {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_EMU10K1,
-        PCI_ANY_ID, PCI_ANY_ID, 0, 0, EMU10K1},
-+      {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_AUDIGY,
-+       PCI_ANY_ID, PCI_ANY_ID, 0, 0, AUDIGY},
-       {0,}
- };
-@@ -161,6 +168,67 @@ extern irqreturn_t emu10k1_interrupt(int
- static int __devinit emu10k1_audio_init(struct emu10k1_card *card)
- {
-+      /* Assign default playback voice parameters */
-+      if (card->is_audigy)
-+              card->mchannel_fx = 0;
-+      else
-+              card->mchannel_fx = 8;
-+
-+
-+      if (card->is_audigy) {
-+              /* mono voice */
-+              card->waveout.send_dcba[SEND_MONO] = 0xffffffff;
-+              card->waveout.send_hgfe[SEND_MONO] = 0x0000ffff;
-+      
-+              /* stereo voice */
-+              /* left */
-+              card->waveout.send_dcba[SEND_LEFT] = 0x00ff00ff;
-+              card->waveout.send_hgfe[SEND_LEFT] = 0x00007f7f;        
-+              /* right */
-+              card->waveout.send_dcba[SEND_RIGHT] = 0xff00ff00;
-+              card->waveout.send_hgfe[SEND_RIGHT] = 0x00007f7f;
-+
-+              card->waveout.send_routing[ROUTE_PCM] = 0x03020100; // Regular pcm
-+              card->waveout.send_routing2[ROUTE_PCM] = 0x07060504;
-+
-+              card->waveout.send_routing[ROUTE_PT] = 0x3f3f3d3c; // Passthrough
-+              card->waveout.send_routing2[ROUTE_PT] = 0x3f3f3f3f;
-+              
-+              card->waveout.send_routing[ROUTE_PCM1] = 0x03020100; // Spare
-+              card->waveout.send_routing2[ROUTE_PCM1] = 0x07060404;
-+              
-+      } else {
-+              /* mono voice */
-+              card->waveout.send_dcba[SEND_MONO] = 0x0000ffff;
-+      
-+              /* stereo voice */
-+              /* left */
-+              card->waveout.send_dcba[SEND_LEFT] = 0x000000ff;
-+              /* right */
-+              card->waveout.send_dcba[SEND_RIGHT] = 0x0000ff00;
-+
-+              card->waveout.send_routing[ROUTE_PCM] = 0x3210; // pcm
-+              card->waveout.send_routing[ROUTE_PT] = 0x3210; // passthrough
-+              card->waveout.send_routing[ROUTE_PCM1] = 0x7654; // /dev/dsp1
-+      }
-+
-+      /* Assign default recording parameters */
-+      /* FIXME */
-+      if (card->is_aps)
-+              card->wavein.recsrc = WAVERECORD_FX;
-+      else
-+              card->wavein.recsrc = WAVERECORD_AC97;
-+
-+      card->wavein.fxwc = 0x0003;
-+      return 0;
-+}
-+
-+static void emu10k1_audio_cleanup(struct emu10k1_card *card)
-+{
-+}
-+
-+static int __devinit emu10k1_register_devices(struct emu10k1_card *card)
-+{
-       card->audio_dev = register_sound_dsp(&emu10k1_audio_fops, -1);
-       if (card->audio_dev < 0) {
-               printk(KERN_ERR "emu10k1: cannot register first audio device!\n");
-@@ -173,56 +241,167 @@ static int __devinit emu10k1_audio_init(
-               goto err_dev1;
-       }
--      /* Assign default playback voice parameters */
--      card->mchannel_fx = 8;
--      /* mono voice */
--      card->waveout.send_a[0] = 0xff;
--      card->waveout.send_b[0] = 0xff;
--      card->waveout.send_c[0] = 0x00;
--      card->waveout.send_d[0] = 0x00;
--      card->waveout.send_routing[0] = 0x3210;
--
--      /* stereo voice */
--      /* left */
--      card->waveout.send_a[1] = 0xff;
--      card->waveout.send_b[1] = 0x00;
--      card->waveout.send_c[1] = 0x00;
--      card->waveout.send_d[1] = 0x00;
--      card->waveout.send_routing[1] = 0x3210;
--
--      /* right */
--      card->waveout.send_a[2] = 0x00;
--      card->waveout.send_b[2] = 0xff;
--      card->waveout.send_c[2] = 0x00;
--      card->waveout.send_d[2] = 0x00;
--      card->waveout.send_routing[2] = 0x3210;
-+      card->ac97->dev_mixer = register_sound_mixer(&emu10k1_mixer_fops, -1);
-+      if (card->ac97->dev_mixer < 0) {
-+              printk(KERN_ERR "emu10k1: cannot register mixer device\n");
-+              goto err_mixer;
-+        }
--      /* Assign default recording parameters */
--      /* FIXME */
--      if (card->is_aps)
--              card->wavein.recsrc = WAVERECORD_FX;
--      else
--              card->wavein.recsrc = WAVERECORD_AC97;
-+      card->midi_dev = register_sound_midi(&emu10k1_midi_fops, -1);
-+      if (card->midi_dev < 0) {
-+                printk(KERN_ERR "emu10k1: cannot register midi device!\n");
-+              goto err_midi;
-+        }
--      card->wavein.fxwc = 0x0003;
-+#ifdef EMU10K1_SEQUENCER
-+      card->seq_dev = sound_alloc_mididev();
-+      if (card->seq_dev == -1)
-+              printk(KERN_WARNING "emu10k1: unable to register sequencer device!");
-+      else {
-+              std_midi_synth.midi_dev = card->seq_dev;
-+              midi_devs[card->seq_dev] = 
-+                      (struct midi_operations *)
-+                      kmalloc(sizeof(struct midi_operations), GFP_KERNEL);
-+
-+              if (midi_devs[card->seq_dev] == NULL) {
-+                      printk(KERN_ERR "emu10k1: unable to allocate memory!");
-+                      sound_unload_mididev(card->seq_dev);
-+                      card->seq_dev = -1;
-+                      /* return without error */
-+              } else {
-+                      memcpy((char *)midi_devs[card->seq_dev], 
-+                              (char *)&emu10k1_midi_operations, 
-+                              sizeof(struct midi_operations));
-+                      midi_devs[card->seq_dev]->devc = card;
-+                      sequencer_init();
-+                      card->seq_mididev = NULL;
-+              }
-+      }
-+#endif
-       return 0;
-+err_midi:
-+      unregister_sound_mixer(card->ac97->dev_mixer);
-+err_mixer:
-+      unregister_sound_dsp(card->audio_dev);
- err_dev1:
-       unregister_sound_dsp(card->audio_dev);
- err_dev:
-       return -ENODEV;
- }
--static void __devinit emu10k1_audio_cleanup(struct emu10k1_card *card)
-+static void emu10k1_unregister_devices(struct emu10k1_card *card)
- {
-+#ifdef EMU10K1_SEQUENCER
-+      if (card->seq_dev > -1) {
-+              kfree(midi_devs[card->seq_dev]);
-+              midi_devs[card->seq_dev] = NULL;
-+              sound_unload_mididev(card->seq_dev);
-+              card->seq_dev = -1;
-+      }
-+#endif
-+
-+      unregister_sound_midi(card->midi_dev);
-+      unregister_sound_mixer(card->ac97->dev_mixer);
-       unregister_sound_dsp(card->audio_dev1);
-       unregister_sound_dsp(card->audio_dev);
- }
--static int __devinit emu10k1_mixer_init(struct emu10k1_card *card)
-+int emu10k1_info_proc (char *page, char **start, off_t off,
-+                  int count, int *eof, void *data)
-+{
-+      struct emu10k1_card *card = data;
-+      int len = 0;
-+      
-+      if (card == NULL)
-+              return -ENODEV;
-+
-+      len += sprintf (page + len, "Driver Version : %s\n", DRIVER_VERSION);
-+      len += sprintf (page + len, "Card type      : %s\n", card->is_aps ? "Aps" : (card->is_audigy ? "Audigy" : "Emu10k1"));
-+      len += sprintf (page + len, "Revision       : %d\n", card->chiprev);
-+      len += sprintf (page + len, "Model          : %#06x\n", card->model);
-+      len += sprintf (page + len, "IO             : %#06lx-%#06lx\n", card->iobase, card->iobase + card->length - 1);
-+      len += sprintf (page + len, "IRQ            : %d\n\n", card->irq);
-+      
-+      len += sprintf (page + len, "Registered /dev Entries:\n");
-+      len += sprintf (page + len, "/dev/dsp%d\n", card->audio_dev / 16);
-+      len += sprintf (page + len, "/dev/dsp%d\n", card->audio_dev1 / 16);
-+      len += sprintf (page + len, "/dev/mixer%d\n", card->ac97->dev_mixer / 16);
-+      len += sprintf (page + len, "/dev/midi%d\n", card->midi_dev / 16);
-+
-+#ifdef EMU10K1_SEQUENCER
-+      len += sprintf (page + len, "/dev/sequencer\n");
-+#endif
-+
-+      return len;
-+}
-+
-+static int __devinit emu10k1_proc_init(struct emu10k1_card *card)
-+{
-+      char s[48];
-+
-+      if (!proc_mkdir ("driver/emu10k1", 0)) {
-+              printk(KERN_ERR "emu10k1: unable to create proc directory driver/emu10k1\n");
-+              goto err_out;
-+      }
-+
-+      sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-+      if (!proc_mkdir (s, 0)) {
-+              printk(KERN_ERR "emu10k1: unable to create proc directory %s\n", s);
-+              goto err_emu10k1_proc;
-+      }
-+
-+      sprintf(s, "driver/emu10k1/%s/info", card->pci_dev->slot_name);
-+      if (!create_proc_read_entry (s, 0, 0, emu10k1_info_proc, card)) {
-+              printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
-+              goto err_dev_proc;
-+      }
-+
-+      if (!card->is_aps) {
-+              sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
-+              if (!create_proc_read_entry (s, 0, 0, ac97_read_proc, card->ac97)) {
-+                      printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
-+                      goto err_proc_ac97;
-+              }
-+      }
-+
-+      return 0;
-+
-+err_proc_ac97:
-+      sprintf(s, "driver/emu10k1/%s/info", card->pci_dev->slot_name);
-+      remove_proc_entry(s, NULL);
-+
-+err_dev_proc:
-+      sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-+      remove_proc_entry(s, NULL);
-+
-+err_emu10k1_proc:
-+      remove_proc_entry("driver/emu10k1", NULL);
-+
-+err_out:
-+      return -EIO;
-+}
-+
-+static void emu10k1_proc_cleanup(struct emu10k1_card *card)
- {
--      char s[32];
-+      char s[48];
-+      if (!card->is_aps) {
-+              sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
-+              remove_proc_entry(s, NULL);
-+      }
-+
-+      sprintf(s, "driver/emu10k1/%s/info", card->pci_dev->slot_name);
-+      remove_proc_entry(s, NULL);
-+
-+      sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
-+      remove_proc_entry(s, NULL);
-+              
-+      remove_proc_entry("driver/emu10k1", NULL);
-+}
-+
-+static int __devinit emu10k1_mixer_init(struct emu10k1_card *card)
-+{
-       struct ac97_codec *codec  = ac97_alloc_codec();
-       
-       if(codec == NULL)
-@@ -231,15 +410,6 @@ static int __devinit emu10k1_mixer_init(
-               return -EIO;
-       }
-       card->ac97 = codec;
--      
--#warning "Initialisation order race. Must register after usable"
--
--      card->ac97->dev_mixer = register_sound_mixer(&emu10k1_mixer_fops, -1);
--      if (card->ac97->dev_mixer < 0) {
--              printk(KERN_ERR "emu10k1: cannot register mixer device\n");
--              goto err_codec;
--        }
--
-       card->ac97->private_data = card;
-       if (!card->is_aps) {
-@@ -261,23 +431,6 @@ static int __devinit emu10k1_mixer_init(
-               // Force 5bit:              
-               //card->ac97->bit_resolution=5;
--              if (!proc_mkdir ("driver/emu10k1", 0)) {
--                      printk(KERN_ERR "emu10k1: unable to create proc directory driver/emu10k1\n");
--                      goto err_out;
--              }
--
--              sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
--              if (!proc_mkdir (s, 0)) {
--                      printk(KERN_ERR "emu10k1: unable to create proc directory %s\n", s);
--                      goto err_emu10k1_proc;
--              }
--      
--              sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
--              if (!create_proc_read_entry (s, 0, 0, ac97_read_proc, card->ac97)) {
--                      printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
--                      goto err_ac97_proc;
--              }
--
-               /* these will store the original values and never be modified */
-               card->ac97_supported_mixers = card->ac97->supported_mixers;
-               card->ac97_stereo_mixers = card->ac97->stereo_mixers;
-@@ -285,34 +438,13 @@ static int __devinit emu10k1_mixer_init(
-       return 0;
-- err_ac97_proc:
--      sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
--      remove_proc_entry(s, NULL);
--
-- err_emu10k1_proc:
--      remove_proc_entry("driver/emu10k1", NULL);
-  err_out:
--      unregister_sound_mixer (card->ac97->dev_mixer);
-- err_codec:
-       ac97_release_codec(card->ac97);
-       return -EIO;
- }
--static void __devinit emu10k1_mixer_cleanup(struct emu10k1_card *card)
-+static void emu10k1_mixer_cleanup(struct emu10k1_card *card)
- {
--      char s[32];
--
--      if (!card->is_aps) {
--              sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
--              remove_proc_entry(s, NULL);
--
--              sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
--              remove_proc_entry(s, NULL);
--
--              remove_proc_entry("driver/emu10k1", NULL);
--      }
--
--      unregister_sound_mixer (card->ac97->dev_mixer);
-       ac97_release_codec(card->ac97);
- }
-@@ -320,13 +452,6 @@ static int __devinit emu10k1_midi_init(s
- {
-       int ret;
--      card->midi_dev = register_sound_midi(&emu10k1_midi_fops, -1);
--      if (card->midi_dev < 0) {
--                printk(KERN_ERR "emu10k1: cannot register midi device!\n");
--              return -ENODEV;
--        }
--
--
-       card->mpuout = kmalloc(sizeof(struct emu10k1_mpuout), GFP_KERNEL);
-       if (card->mpuout == NULL) {
-               printk(KERN_WARNING "emu10k1: Unable to allocate emu10k1_mpuout: out of memory\n");
-@@ -366,31 +491,6 @@ static int __devinit emu10k1_midi_init(s
-               goto err_out3;
-       }
--#ifdef EMU10K1_SEQUENCER
--      card->seq_dev = sound_alloc_mididev();
--      if (card->seq_dev == -1)
--                      printk(KERN_WARNING "emu10k1: unable to register sequencer device!");
--      else {
--                      std_midi_synth.midi_dev = card->seq_dev;
--                      midi_devs[card->seq_dev] = 
--                                      (struct midi_operations *)
--                                      kmalloc(sizeof(struct midi_operations), GFP_KERNEL);
--                      
--                      if (midi_devs[card->seq_dev] == NULL) {
--                              printk(KERN_ERR "emu10k1: unable to allocate memory!");
--                              sound_unload_mididev(card->seq_dev);
--                              card->seq_dev = -1;
--                              return 0;
--                      } else {
--                              memcpy((char *)midi_devs[card->seq_dev], 
--                                      (char *)&emu10k1_midi_operations, 
--                                      sizeof(struct midi_operations));
--                              midi_devs[card->seq_dev]->devc = card;
--                              sequencer_init();
--                      }
--      }
--      card->seq_mididev = 0;
--#endif
-       return 0;
- err_out3:
-@@ -398,28 +498,16 @@ err_out3:
- err_out2:
-       kfree(card->mpuout);
- err_out1:
--      unregister_sound_midi(card->midi_dev);
-       return ret;
- }
--static void __devinit emu10k1_midi_cleanup(struct emu10k1_card *card)
-+static void emu10k1_midi_cleanup(struct emu10k1_card *card)
- {
-       tasklet_kill(&card->mpuout->tasklet);
-       kfree(card->mpuout);
-       tasklet_kill(&card->mpuin->tasklet);
-       kfree(card->mpuin);
--
--#ifdef EMU10K1_SEQUENCER
--      if (card->seq_dev > -1) {
--              kfree(midi_devs[card->seq_dev]);
--              midi_devs[card->seq_dev] = NULL;
--              sound_unload_mididev(card->seq_dev);
--              card->seq_dev = -1;
--      }
--#endif
--
--      unregister_sound_midi(card->midi_dev);
- }
- static void __devinit voice_init(struct emu10k1_card *card)
-@@ -450,7 +538,7 @@ static void __devinit addxmgr_init(struc
-       card->emupagetable[1] = MAXPAGES - 1;
- }
--static void __devinit fx_cleanup(struct patch_manager *mgr)
-+static void fx_cleanup(struct patch_manager *mgr)
- {
-       int i;
-       for(i = 0; i < mgr->current_pages; i++)
-@@ -465,24 +553,25 @@ static int __devinit fx_init(struct emu1
-       s32 left, right;
-       int i;
-       u32 pc = 0;
--      u32 patch_n;
-+      u32 patch_n=0;
-+      struct emu_efx_info_t emu_efx_info[2]=
-+              {{ 20, 10, 0x400, 0x100, 0x20 },
-+               { 24, 12, 0x600, 0x400, 0x60 },
-+              }; 
-+                      
-       for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
-               mgr->ctrl_gpr[i][0] = -1;
-               mgr->ctrl_gpr[i][1] = -1;
-       }
--      for (i = 0; i < 512; i++)
--              OP(6, 0x40, 0x40, 0x40, 0x40);
--
--      for (i = 0; i < 256; i++)
--              sblive_writeptr_tag(card, 0,
--                                  FXGPREGBASE + i, 0,
--                                  TANKMEMADDRREGBASE + i, 0,
--                                  TAGLIST_END);
--      /* !! The number bellow must equal the number of patches, currently 11 !! */
--      mgr->current_pages = (11 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
-+      if (card->is_audigy)
-+              mgr->current_pages = (2 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
-+      else
-+              /* !! The number below must equal the number of patches, currently 11 !! */
-+              mgr->current_pages = (11 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
-+      
-       for (i = 0; i < mgr->current_pages; i++) {
-               mgr->patch[i] = (void *)__get_free_page(GFP_KERNEL);
-               if (mgr->patch[i] == NULL) {
-@@ -493,215 +582,298 @@ static int __devinit fx_init(struct emu1
-               memset(mgr->patch[i], 0, PAGE_SIZE);
-       }
--      pc = 0;
--      patch_n = 0;
--      //first free GPR = 0x11b
--
--      /* FX volume correction and Volume control*/
--      INPUT_PATCH_START(patch, "Pcm L vol", 0x0, 0);
--      GET_OUTPUT_GPR(patch, 0x100, 0x0);
--      GET_CONTROL_GPR(patch, 0x106, "Vol", 0, 0x7fffffff);
--      GET_DYNAMIC_GPR(patch, 0x112);
--
--      OP(4, 0x112, 0x40, PCM_IN_L, 0x44); //*4
--      OP(0, 0x100, 0x040, 0x112, 0x106);  //*vol
--      INPUT_PATCH_END(patch);
--
--
--      INPUT_PATCH_START(patch, "Pcm R vol", 0x1, 0);
--      GET_OUTPUT_GPR(patch, 0x101, 0x1);
--      GET_CONTROL_GPR(patch, 0x107, "Vol", 0, 0x7fffffff);
--      GET_DYNAMIC_GPR(patch, 0x112);
--
--      OP(4, 0x112, 0x40, PCM_IN_R, 0x44); 
--      OP(0, 0x101, 0x040, 0x112, 0x107);
--
--      INPUT_PATCH_END(patch);
--
--
--      // CD-Digital In Volume control
--      INPUT_PATCH_START(patch, "CD-Digital Vol L", 0x12, 0);
--      GET_OUTPUT_GPR(patch, 0x10c, 0x12);
--      GET_CONTROL_GPR(patch, 0x10d, "Vol", 0, 0x7fffffff);
--
--      OP(0, 0x10c, 0x040, SPDIF_CD_L, 0x10d);
--      INPUT_PATCH_END(patch);
--
--      INPUT_PATCH_START(patch, "CD-Digital Vol R", 0x13, 0);
--      GET_OUTPUT_GPR(patch, 0x10e, 0x13);
--      GET_CONTROL_GPR(patch, 0x10f, "Vol", 0, 0x7fffffff);
--
--      OP(0, 0x10e, 0x040, SPDIF_CD_R, 0x10f);
--      INPUT_PATCH_END(patch);
--
--      //Volume Correction for Multi-channel Inputs
--      INPUT_PATCH_START(patch, "Multi-Channel Gain", 0x08, 0);
--      patch->input=patch->output=0x3F00;
--
--      GET_OUTPUT_GPR(patch, 0x113, MULTI_FRONT_L);
--      GET_OUTPUT_GPR(patch, 0x114, MULTI_FRONT_R);
--      GET_OUTPUT_GPR(patch, 0x115, MULTI_REAR_L);
--      GET_OUTPUT_GPR(patch, 0x116, MULTI_REAR_R);
--      GET_OUTPUT_GPR(patch, 0x117, MULTI_CENTER);
--      GET_OUTPUT_GPR(patch, 0x118, MULTI_LFE);
--
--      OP(4, 0x113, 0x40, MULTI_FRONT_L, 0x44);
--      OP(4, 0x114, 0x40, MULTI_FRONT_R, 0x44);
--      OP(4, 0x115, 0x40, MULTI_REAR_L, 0x44);
--      OP(4, 0x116, 0x40, MULTI_REAR_R, 0x44);
--      OP(4, 0x117, 0x40, MULTI_CENTER, 0x44);
--      OP(4, 0x118, 0x40, MULTI_LFE, 0x44);
--      
--      INPUT_PATCH_END(patch);
--
--
--      //Routing patch start
--      ROUTING_PATCH_START(rpatch, "Routing");
--      GET_INPUT_GPR(rpatch, 0x100, 0x0);
--      GET_INPUT_GPR(rpatch, 0x101, 0x1);
--      GET_INPUT_GPR(rpatch, 0x10c, 0x12);
--      GET_INPUT_GPR(rpatch, 0x10e, 0x13);
--      GET_INPUT_GPR(rpatch, 0x113, MULTI_FRONT_L);
--      GET_INPUT_GPR(rpatch, 0x114, MULTI_FRONT_R);
--      GET_INPUT_GPR(rpatch, 0x115, MULTI_REAR_L);
--      GET_INPUT_GPR(rpatch, 0x116, MULTI_REAR_R);
--      GET_INPUT_GPR(rpatch, 0x117, MULTI_CENTER);
--      GET_INPUT_GPR(rpatch, 0x118, MULTI_LFE);
--
--      GET_DYNAMIC_GPR(rpatch, 0x102);
--      GET_DYNAMIC_GPR(rpatch, 0x103);
--
--      GET_OUTPUT_GPR(rpatch, 0x104, 0x8);
--      GET_OUTPUT_GPR(rpatch, 0x105, 0x9);
--      GET_OUTPUT_GPR(rpatch, 0x10a, 0x2);
--      GET_OUTPUT_GPR(rpatch, 0x10b, 0x3);
--
--
--      /* input buffer */
--      OP(6, 0x102, AC97_IN_L, 0x40, 0x40);
--      OP(6, 0x103, AC97_IN_R, 0x40, 0x40);
--
--
--      /* Digital In + PCM + MULTI_FRONT-> AC97 out (front speakers)*/
--      OP(6, AC97_FRONT_L, 0x100, 0x10c, 0x113);
--
--      CONNECT(MULTI_FRONT_L, AC97_FRONT_L);
--      CONNECT(PCM_IN_L, AC97_FRONT_L);
--      CONNECT(SPDIF_CD_L, AC97_FRONT_L);
--
--      OP(6, AC97_FRONT_R, 0x101, 0x10e, 0x114);
--
--      CONNECT(MULTI_FRONT_R, AC97_FRONT_R);
--      CONNECT(PCM_IN_R, AC97_FRONT_R);
--      CONNECT(SPDIF_CD_R, AC97_FRONT_R);
--
--      /* Digital In + PCM + AC97 In + PCM1 + MULTI_REAR --> Rear Channel */ 
--      OP(6, 0x104, PCM1_IN_L, 0x100, 0x115);
--      OP(6, 0x104, 0x104, 0x10c, 0x102);
--
--      CONNECT(MULTI_REAR_L, ANALOG_REAR_L);
--      CONNECT(AC97_IN_L, ANALOG_REAR_L);
--      CONNECT(PCM_IN_L, ANALOG_REAR_L);
--      CONNECT(SPDIF_CD_L, ANALOG_REAR_L);
--      CONNECT(PCM1_IN_L, ANALOG_REAR_L);
--
--      OP(6, 0x105, PCM1_IN_R, 0x101, 0x116);
--      OP(6, 0x105, 0x105, 0x10e, 0x103);
--
--      CONNECT(MULTI_REAR_R, ANALOG_REAR_R);
--      CONNECT(AC97_IN_R, ANALOG_REAR_R);
--      CONNECT(PCM_IN_R, ANALOG_REAR_R);
--      CONNECT(SPDIF_CD_R, ANALOG_REAR_R);
--      CONNECT(PCM1_IN_R, ANALOG_REAR_R);
--
--      /* Digital In + PCM + AC97 In + MULTI_FRONT --> Digital out */
--      OP(6, 0x10a, 0x100, 0x102, 0x10c);
--      OP(6, 0x10a, 0x10a, 0x113, 0x40);
--
--      CONNECT(MULTI_FRONT_L, DIGITAL_OUT_L);
--      CONNECT(PCM_IN_L, DIGITAL_OUT_L);
--      CONNECT(AC97_IN_L, DIGITAL_OUT_L);
--      CONNECT(SPDIF_CD_L, DIGITAL_OUT_L);
--
--      OP(6, 0x10b, 0x101, 0x103, 0x10e);
--      OP(6, 0x10b, 0x10b, 0x114, 0x40);
--
--      CONNECT(MULTI_FRONT_R, DIGITAL_OUT_R);
--      CONNECT(PCM_IN_R, DIGITAL_OUT_R);
--      CONNECT(AC97_IN_R, DIGITAL_OUT_R);
--      CONNECT(SPDIF_CD_R, DIGITAL_OUT_R);
--
--      /* AC97 In --> ADC Recording Buffer */
--      OP(6, ADC_REC_L, 0x102, 0x40, 0x40);
--
--      CONNECT(AC97_IN_L, ADC_REC_L);
--
--      OP(6, ADC_REC_R, 0x103, 0x40, 0x40);
--
--      CONNECT(AC97_IN_R, ADC_REC_R);
-+      if (card->is_audigy) {
-+              for (i = 0; i < 1024; i++)
-+                      OP(0xf, 0x0c0, 0x0c0, 0x0cf, 0x0c0);
-+
-+              for (i = 0; i < 512 ; i++)
-+                      sblive_writeptr(card, A_GPR_BASE+i,0,0);
-+
-+              pc=0;
-+
-+              //Pcm input volume
-+              OP(0, 0x402, 0x0c0, 0x406, 0x000);
-+              OP(0, 0x403, 0x0c0, 0x407, 0x001);
-+
-+              //CD-Digital input Volume
-+              OP(0, 0x404, 0x0c0, 0x40d, 0x42);
-+              OP(0, 0x405, 0x0c0, 0x40f, 0x43);
-+
-+              // CD + PCM 
-+              OP(6, 0x400, 0x0c0, 0x402, 0x404);
-+              OP(6, 0x401, 0x0c0, 0x403, 0x405);
-+              
-+              // Front Output + Master Volume
-+              OP(0, 0x68, 0x0c0, 0x408, 0x400);
-+              OP(0, 0x69, 0x0c0, 0x409, 0x401);
-+
-+              // Add-in analog inputs for other speakers
-+              OP(6, 0x400, 0x40, 0x400, 0xc0);
-+              OP(6, 0x401, 0x41, 0x401, 0xc0);
-+
-+              // Digital Front + Master Volume
-+              OP(0, 0x60, 0x0c0, 0x408, 0x400);
-+              OP(0, 0x61, 0x0c0, 0x409, 0x401);
-+
-+              // Rear Output + Rear Volume
-+              OP(0, 0x06e, 0x0c0, 0x419, 0x400);
-+              OP(0, 0x06f, 0x0c0, 0x41a, 0x401);              
-+
-+              // Digital Rear Output + Rear Volume
-+              OP(0, 0x066, 0x0c0, 0x419, 0x400);
-+              OP(0, 0x067, 0x0c0, 0x41a, 0x401);              
-+
-+              // Audigy Drive, Headphone out
-+              OP(6, 0x64, 0x0c0, 0x0c0, 0x400);
-+              OP(6, 0x65, 0x0c0, 0x0c0, 0x401);
-+
-+              // ac97 Recording
-+              OP(6, 0x76, 0x0c0, 0x0c0, 0x40);
-+              OP(6, 0x77, 0x0c0, 0x0c0, 0x41);
-+              
-+              // Center = sub = Left/2 + Right/2
-+              OP(0xe, 0x400, 0x401, 0xcd, 0x400);
-+
-+              // center/sub  Volume (master)
-+              OP(0, 0x06a, 0x0c0, 0x408, 0x400);
-+              OP(0, 0x06b, 0x0c0, 0x409, 0x400);
-+
-+              // Digital center/sub  Volume (master)
-+              OP(0, 0x062, 0x0c0, 0x408, 0x400);
-+              OP(0, 0x063, 0x0c0, 0x409, 0x400);
-+
-+              ROUTING_PATCH_START(rpatch, "Routing");
-+              ROUTING_PATCH_END(rpatch);
-+
-+              /* delimiter patch */
-+              patch = PATCH(mgr, patch_n);
-+              patch->code_size = 0;
-+      
-+              sblive_writeptr(card, 0x53, 0, 0);
-+      } else {
-+              for (i = 0; i < 512 ; i++)
-+                      OP(6, 0x40, 0x40, 0x40, 0x40);
-+
-+              for (i = 0; i < 256; i++)
-+                      sblive_writeptr_tag(card, 0,
-+                                          FXGPREGBASE + i, 0,
-+                                          TANKMEMADDRREGBASE + i, 0,
-+                                          TAGLIST_END);
--      /* fx12:Analog-Center */
--      OP(6, ANALOG_CENTER, 0x117, 0x40, 0x40);
--      CONNECT(MULTI_CENTER, ANALOG_CENTER);
-+              
-+              pc = 0;
--      /* fx11:Analog-LFE */
--      OP(6, ANALOG_LFE, 0x118, 0x40, 0x40);
--      CONNECT(MULTI_LFE, ANALOG_LFE);
-+              //first free GPR = 0x11b
-+      
-+              
-+              /* FX volume correction and Volume control*/
-+              INPUT_PATCH_START(patch, "Pcm L vol", 0x0, 0);
-+              GET_OUTPUT_GPR(patch, 0x100, 0x0);
-+              GET_CONTROL_GPR(patch, 0x106, "Vol", 0, 0x7fffffff);
-+              GET_DYNAMIC_GPR(patch, 0x112);
-+
-+              OP(4, 0x112, 0x40, PCM_IN_L, 0x44); //*4        
-+              OP(0, 0x100, 0x040, 0x112, 0x106);  //*vol      
-+              INPUT_PATCH_END(patch);
-+
-+
-+              INPUT_PATCH_START(patch, "Pcm R vol", 0x1, 0);
-+              GET_OUTPUT_GPR(patch, 0x101, 0x1);
-+              GET_CONTROL_GPR(patch, 0x107, "Vol", 0, 0x7fffffff);
-+              GET_DYNAMIC_GPR(patch, 0x112);
-+
-+              OP(4, 0x112, 0x40, PCM_IN_R, 0x44); 
-+              OP(0, 0x101, 0x040, 0x112, 0x107);
-+
-+              INPUT_PATCH_END(patch);
-+
-+
-+              // CD-Digital In Volume control 
-+              INPUT_PATCH_START(patch, "CD-Digital Vol L", 0x12, 0);
-+              GET_OUTPUT_GPR(patch, 0x10c, 0x12);
-+              GET_CONTROL_GPR(patch, 0x10d, "Vol", 0, 0x7fffffff);
-+
-+              OP(0, 0x10c, 0x040, SPDIF_CD_L, 0x10d);
-+              INPUT_PATCH_END(patch);
-+
-+              INPUT_PATCH_START(patch, "CD-Digital Vol R", 0x13, 0);
-+              GET_OUTPUT_GPR(patch, 0x10e, 0x13);
-+              GET_CONTROL_GPR(patch, 0x10f, "Vol", 0, 0x7fffffff);
-+
-+              OP(0, 0x10e, 0x040, SPDIF_CD_R, 0x10f);
-+              INPUT_PATCH_END(patch);
-+
-+              //Volume Correction for Multi-channel Inputs    
-+              INPUT_PATCH_START(patch, "Multi-Channel Gain", 0x08, 0);
-+              patch->input=patch->output=0x3F00;
-+
-+              GET_OUTPUT_GPR(patch, 0x113, MULTI_FRONT_L);
-+              GET_OUTPUT_GPR(patch, 0x114, MULTI_FRONT_R);
-+              GET_OUTPUT_GPR(patch, 0x115, MULTI_REAR_L);
-+              GET_OUTPUT_GPR(patch, 0x116, MULTI_REAR_R);
-+              GET_OUTPUT_GPR(patch, 0x117, MULTI_CENTER);
-+              GET_OUTPUT_GPR(patch, 0x118, MULTI_LFE);
-+
-+              OP(4, 0x113, 0x40, MULTI_FRONT_L, 0x44);
-+              OP(4, 0x114, 0x40, MULTI_FRONT_R, 0x44);
-+              OP(4, 0x115, 0x40, MULTI_REAR_L, 0x44);
-+              OP(4, 0x116, 0x40, MULTI_REAR_R, 0x44);
-+              OP(4, 0x117, 0x40, MULTI_CENTER, 0x44);
-+              OP(4, 0x118, 0x40, MULTI_LFE, 0x44);
-+      
-+              INPUT_PATCH_END(patch);
--      /* fx12:Digital-Center */
--      OP(6, DIGITAL_CENTER, 0x117, 0x40, 0x40);
--      CONNECT(MULTI_CENTER, DIGITAL_CENTER);
--      /* fx11:Analog-LFE */
--      OP(6, DIGITAL_LFE, 0x118, 0x40, 0x40);
--      CONNECT(MULTI_LFE, DIGITAL_LFE);
-+              //Routing patch start   
-+              ROUTING_PATCH_START(rpatch, "Routing");
-+              GET_INPUT_GPR(rpatch, 0x100, 0x0);
-+              GET_INPUT_GPR(rpatch, 0x101, 0x1);
-+              GET_INPUT_GPR(rpatch, 0x10c, 0x12);
-+              GET_INPUT_GPR(rpatch, 0x10e, 0x13);
-+              GET_INPUT_GPR(rpatch, 0x113, MULTI_FRONT_L);
-+              GET_INPUT_GPR(rpatch, 0x114, MULTI_FRONT_R);
-+              GET_INPUT_GPR(rpatch, 0x115, MULTI_REAR_L);
-+              GET_INPUT_GPR(rpatch, 0x116, MULTI_REAR_R);
-+              GET_INPUT_GPR(rpatch, 0x117, MULTI_CENTER);
-+              GET_INPUT_GPR(rpatch, 0x118, MULTI_LFE);
-+
-+              GET_DYNAMIC_GPR(rpatch, 0x102);
-+              GET_DYNAMIC_GPR(rpatch, 0x103);
-+
-+              GET_OUTPUT_GPR(rpatch, 0x104, 0x8);
-+              GET_OUTPUT_GPR(rpatch, 0x105, 0x9);
-+              GET_OUTPUT_GPR(rpatch, 0x10a, 0x2);
-+              GET_OUTPUT_GPR(rpatch, 0x10b, 0x3);
-+              
-+              
-+              /* input buffer */
-+              OP(6, 0x102, AC97_IN_L, 0x40, 0x40);
-+              OP(6, 0x103, AC97_IN_R, 0x40, 0x40);
-+
-+
-+              /* Digital In + PCM + MULTI_FRONT-> AC97 out (front speakers)*/
-+              OP(6, AC97_FRONT_L, 0x100, 0x10c, 0x113);
-+
-+              CONNECT(MULTI_FRONT_L, AC97_FRONT_L);
-+              CONNECT(PCM_IN_L, AC97_FRONT_L);
-+              CONNECT(SPDIF_CD_L, AC97_FRONT_L);
-+
-+              OP(6, AC97_FRONT_R, 0x101, 0x10e, 0x114);
-+
-+              CONNECT(MULTI_FRONT_R, AC97_FRONT_R);
-+              CONNECT(PCM_IN_R, AC97_FRONT_R);
-+              CONNECT(SPDIF_CD_R, AC97_FRONT_R);
-+
-+              /* Digital In + PCM + AC97 In + PCM1 + MULTI_REAR --> Rear Channel */ 
-+              OP(6, 0x104, PCM1_IN_L, 0x100, 0x115);
-+              OP(6, 0x104, 0x104, 0x10c, 0x102);
-+
-+              CONNECT(MULTI_REAR_L, ANALOG_REAR_L);
-+              CONNECT(AC97_IN_L, ANALOG_REAR_L);
-+              CONNECT(PCM_IN_L, ANALOG_REAR_L);
-+              CONNECT(SPDIF_CD_L, ANALOG_REAR_L);
-+              CONNECT(PCM1_IN_L, ANALOG_REAR_L);
-+
-+              OP(6, 0x105, PCM1_IN_R, 0x101, 0x116);
-+              OP(6, 0x105, 0x105, 0x10e, 0x103);
-+
-+              CONNECT(MULTI_REAR_R, ANALOG_REAR_R);
-+              CONNECT(AC97_IN_R, ANALOG_REAR_R);
-+              CONNECT(PCM_IN_R, ANALOG_REAR_R);
-+              CONNECT(SPDIF_CD_R, ANALOG_REAR_R);
-+              CONNECT(PCM1_IN_R, ANALOG_REAR_R);
-+
-+              /* Digital In + PCM + AC97 In + MULTI_FRONT --> Digital out */
-+              OP(6, 0x10b, 0x100, 0x102, 0x10c);
-+              OP(6, 0x10b, 0x10b, 0x113, 0x40);
-+
-+              CONNECT(MULTI_FRONT_L, DIGITAL_OUT_L);
-+              CONNECT(PCM_IN_L, DIGITAL_OUT_L);
-+              CONNECT(AC97_IN_L, DIGITAL_OUT_L);
-+              CONNECT(SPDIF_CD_L, DIGITAL_OUT_L);
-+
-+              OP(6, 0x10a, 0x101, 0x103, 0x10e);
-+              OP(6, 0x10b, 0x10b, 0x114, 0x40);
-+
-+              CONNECT(MULTI_FRONT_R, DIGITAL_OUT_R);
-+              CONNECT(PCM_IN_R, DIGITAL_OUT_R);
-+              CONNECT(AC97_IN_R, DIGITAL_OUT_R);
-+              CONNECT(SPDIF_CD_R, DIGITAL_OUT_R);
-+
-+              /* AC97 In --> ADC Recording Buffer */
-+              OP(6, ADC_REC_L, 0x102, 0x40, 0x40);
-+
-+              CONNECT(AC97_IN_L, ADC_REC_L);
-+
-+              OP(6, ADC_REC_R, 0x103, 0x40, 0x40);
-+
-+              CONNECT(AC97_IN_R, ADC_REC_R);
-+
-+
-+              /* fx12:Analog-Center */
-+              OP(6, ANALOG_CENTER, 0x117, 0x40, 0x40);
-+              CONNECT(MULTI_CENTER, ANALOG_CENTER);
-+
-+              /* fx11:Analog-LFE */
-+              OP(6, ANALOG_LFE, 0x118, 0x40, 0x40);
-+              CONNECT(MULTI_LFE, ANALOG_LFE);
-+
-+              /* fx12:Digital-Center */
-+              OP(6, DIGITAL_CENTER, 0x117, 0x40, 0x40);
-+              CONNECT(MULTI_CENTER, DIGITAL_CENTER);
-+              
-+              /* fx11:Analog-LFE */
-+              OP(6, DIGITAL_LFE, 0x118, 0x40, 0x40);
-+              CONNECT(MULTI_LFE, DIGITAL_LFE);
-       
--      ROUTING_PATCH_END(rpatch);
-+              ROUTING_PATCH_END(rpatch);
--      // Rear volume control
--      OUTPUT_PATCH_START(patch, "Vol Rear L", 0x8, 0);
--      GET_INPUT_GPR(patch, 0x104, 0x8);
--      GET_CONTROL_GPR(patch, 0x119, "Vol", 0, 0x7fffffff);
-+              // Rear volume control  
-+              OUTPUT_PATCH_START(patch, "Vol Rear L", 0x8, 0);
-+              GET_INPUT_GPR(patch, 0x104, 0x8);
-+              GET_CONTROL_GPR(patch, 0x119, "Vol", 0, 0x7fffffff);
--      OP(0, ANALOG_REAR_L, 0x040, 0x104, 0x119);
--      OUTPUT_PATCH_END(patch);
-+              OP(0, ANALOG_REAR_L, 0x040, 0x104, 0x119);
-+              OUTPUT_PATCH_END(patch);
-+              OUTPUT_PATCH_START(patch, "Vol Rear R", 0x9, 0);
-+              GET_INPUT_GPR(patch, 0x105, 0x9);
-+              GET_CONTROL_GPR(patch, 0x11a, "Vol", 0, 0x7fffffff);
--      OUTPUT_PATCH_START(patch, "Vol Rear R", 0x9, 0);
--      GET_INPUT_GPR(patch, 0x105, 0x9);
--      GET_CONTROL_GPR(patch, 0x11a, "Vol", 0, 0x7fffffff);
-+              OP(0, ANALOG_REAR_R, 0x040, 0x105, 0x11a);
-+              OUTPUT_PATCH_END(patch);
--      OP(0, ANALOG_REAR_R, 0x040, 0x105, 0x11a);
--      OUTPUT_PATCH_END(patch);
-+              //Master volume control on front-digital        
-+              OUTPUT_PATCH_START(patch, "Vol Master L", 0x2, 1);
-+              GET_INPUT_GPR(patch, 0x10a, 0x2);
-+              GET_CONTROL_GPR(patch, 0x108, "Vol", 0, 0x7fffffff);
--      //Master volume control on front-digital
--      OUTPUT_PATCH_START(patch, "Vol Master L", 0x2, 1);
--      GET_INPUT_GPR(patch, 0x10a, 0x2);
--      GET_CONTROL_GPR(patch, 0x108, "Vol", 0, 0x7fffffff);
-+              OP(0, DIGITAL_OUT_L, 0x040, 0x10a, 0x108);
-+              OUTPUT_PATCH_END(patch);
--      OP(0, DIGITAL_OUT_L, 0x040, 0x10a, 0x108);
--      OUTPUT_PATCH_END(patch);
-+              OUTPUT_PATCH_START(patch, "Vol Master R", 0x3, 1);
-+              GET_INPUT_GPR(patch, 0x10b, 0x3);
-+              GET_CONTROL_GPR(patch, 0x109, "Vol", 0, 0x7fffffff);
--      OUTPUT_PATCH_START(patch, "Vol Master R", 0x3, 1);
--      GET_INPUT_GPR(patch, 0x10b, 0x3);
--      GET_CONTROL_GPR(patch, 0x109, "Vol", 0, 0x7fffffff);
-+              OP(0, DIGITAL_OUT_R, 0x040, 0x10b, 0x109);
-+              OUTPUT_PATCH_END(patch);
--      OP(0, DIGITAL_OUT_R, 0x040, 0x10b, 0x109);
--      OUTPUT_PATCH_END(patch);
-+              /* delimiter patch */
-+              patch = PATCH(mgr, patch_n);
-+              patch->code_size = 0;
--      /* delimiter patch */
--      patch = PATCH(mgr, patch_n);
--      patch->code_size = 0;
--
--      sblive_writeptr(card, DBG, 0, 0);
-+      
-+              sblive_writeptr(card, DBG, 0, 0);
-+      }
-       mgr->lock = SPIN_LOCK_UNLOCKED;
-+      // Set up Volume controls, try to keep this the same for both Audigy and Live
-       //Master volume
-       mgr->ctrl_gpr[SOUND_MIXER_VOLUME][0] = 8;
-@@ -749,8 +921,16 @@ static int __devinit fx_init(struct emu1
-       emu10k1_set_volume_gpr(card, 0xd, left, VOL_5BIT);
-       emu10k1_set_volume_gpr(card, 0xf, right, VOL_5BIT);
--      //hard wire the ac97's pcm, we'll do that in dsp code instead.
--      emu10k1_ac97_write(card->ac97, 0x18, 0x0);
-+
-+      //hard wire the ac97's pcm, pcm volume is done above using dsp code.
-+      if (card->is_audigy)
-+              //for Audigy, we mute it and use the philips 6 channel DAC instead
-+              emu10k1_ac97_write(card->ac97, 0x18, 0x8000);
-+      else
-+              //For the Live we hardwire it to full volume
-+              emu10k1_ac97_write(card->ac97, 0x18, 0x0);
-+
-+      //remove it from the ac97_codec's control
-       card->ac97_supported_mixers &= ~SOUND_MASK_PCM;
-       card->ac97_stereo_mixers &= ~SOUND_MASK_PCM;
-@@ -789,6 +969,13 @@ static int __devinit hw_init(struct emu1
-                           SOLEH, 0,
-                           TAGLIST_END);
-+      if (card->is_audigy) {
-+              sblive_writeptr_tag(card,0,
-+                                  0x5e,0xf00,
-+                                  0x5f,0x3,
-+                                  TAGLIST_END);
-+      }
-+
-       /* Init envelope engine */
-       for (nCh = 0; nCh < NUM_G; nCh++) {
-               sblive_writeptr_tag(card, nCh,
-@@ -824,6 +1011,21 @@ static int __devinit hw_init(struct emu1
-                                   ENVVAL, 0,
-                                     TAGLIST_END);
-               sblive_writeptr(card, CPF, nCh, 0);
-+              /*
-+                Audigy FXRT initialization
-+                reversed eng'd, may not be accurate.
-+               */
-+              if (card->is_audigy) {
-+                      sblive_writeptr_tag(card,nCh,
-+                                          0x4c,0x0,
-+                                          0x4d,0x0,
-+                                          0x4e,0x0,
-+                                          0x4f,0x0,
-+                                          A_FXRT1, 0x3f3f3f3f,
-+                                          A_FXRT2, 0x3f3f3f3f,
-+                                          A_SENDAMOUNTS, 0,
-+                                          TAGLIST_END);
-+              }
-       }
-       
-@@ -858,6 +1060,25 @@ static int __devinit hw_init(struct emu1
-                           TAGLIST_END);
-+      if (card->is_audigy && (card->chiprev == 4)) {
-+              /* Hacks for Alice3 to work independent of haP16V driver */
-+              u32 tmp;
-+
-+              //Setup SRCMulti_I2S SamplingRate
-+              tmp = sblive_readptr(card, A_SPDIF_SAMPLERATE, 0);
-+              tmp &= 0xfffff1ff;
-+              tmp |= (0x2<<9);
-+              sblive_writeptr(card, A_SPDIF_SAMPLERATE, 0, tmp);
-+
-+              /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
-+              emu10k1_writefn0(card, 0x20, 0x600000);
-+              emu10k1_writefn0(card, 0x24, 0x14);
-+
-+              /* Setup SRCMulti Input Audio Enable */
-+              emu10k1_writefn0(card, 0x20, 0x6E0000);
-+              emu10k1_writefn0(card, 0x24, 0xFF00FF00);
-+      }
-+
-       ret = fx_init(card);            /* initialize effects engine */
-       if (ret < 0)
-               return ret;
-@@ -905,16 +1126,30 @@ static int __devinit hw_init(struct emu1
-       /* Lock Tank Memory = 1 */
-       /* Lock Sound Memory = 0 */
-       /* Auto Mute = 1 */
--
--      if (card->model == 0x20 || card->model == 0xc400 ||
--        (card->model == 0x21 && card->chiprev < 6))
--              emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE);
--      else
--              emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE);
--
-+      if (card->is_audigy) {
-+              if (card->chiprev == 4)
-+                      emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_AC3ENABLE_CDSPDIF | HCFG_AC3ENABLE_GPSPDIF | HCFG_AUTOMUTE | HCFG_JOYENABLE);
-+              else
-+                      emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_AUTOMUTE | HCFG_JOYENABLE);
-+      } else {
-+              if (card->model == 0x20 || card->model == 0xc400 ||
-+               (card->model == 0x21 && card->chiprev < 6))
-+                      emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE);
-+              else
-+                      emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE);
-+      }
-       /* Enable Vol_Ctrl irqs */
-       emu10k1_irq_enable(card, INTE_VOLINCRENABLE | INTE_VOLDECRENABLE | INTE_MUTEENABLE | INTE_FXDSPENABLE);
-+      if (card->is_audigy && (card->chiprev == 4)) {
-+              /* Unmute Analog now.  Set GPO6 to 1 for Apollo.
-+               * This has to be done after init ALice3 I2SOut beyond 48KHz.
-+               * So, sequence is important. */
-+              u32 tmp = emu10k1_readfn0(card, A_IOCFG);
-+              tmp |= 0x0040;
-+              emu10k1_writefn0(card, A_IOCFG, tmp);
-+      }
-+      
-       /* FIXME: TOSLink detection */
-       card->has_toslink = 0;
-@@ -967,7 +1202,7 @@ static int __devinit emu10k1_init(struct
-       return 0;
- }
--static void __devinit emu10k1_cleanup(struct emu10k1_card *card)
-+static void emu10k1_cleanup(struct emu10k1_card *card)
- {
-       int ch;
-@@ -1012,6 +1247,8 @@ static void __devinit emu10k1_cleanup(st
-                           SOLEH, 0,
-                           TAGLIST_END);
-+      if (card->is_audigy)
-+              sblive_writeptr(card, 0, A_DBG,  A_DBG_SINGLE_STEP);
-       pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
-       pci_free_consistent(card->pci_dev, card->silentpage.size, card->silentpage.addr, card->silentpage.dma_handle);
-@@ -1074,6 +1311,9 @@ static int __devinit emu10k1_probe(struc
-               card_names[pci_id->driver_data], card->chiprev, card->model, card->iobase,
-               card->iobase + card->length - 1, card->irq);
-+      if (pci_id->device == PCI_DEVICE_ID_CREATIVE_AUDIGY)
-+              card->is_audigy = 1;
-+
-       pci_read_config_dword(pci_dev, PCI_SUBSYSTEM_VENDOR_ID, &subsysvid);
-       card->is_aps = (subsysvid == EMU_APS_SUBID);
-@@ -1083,13 +1323,13 @@ static int __devinit emu10k1_probe(struc
-       init_waitqueue_head(&card->open_wait);
-       ret = emu10k1_audio_init(card);
--      if(ret < 0) {
-+      if (ret < 0) {
-                 printk(KERN_ERR "emu10k1: cannot initialize audio devices\n");
-                 goto err_audio;
-         }
-       ret = emu10k1_mixer_init(card);
--      if(ret < 0) {
-+      if (ret < 0) {
-               printk(KERN_ERR "emu10k1: cannot initialize AC97 codec\n");
-                 goto err_mixer;
-       }
-@@ -1109,10 +1349,28 @@ static int __devinit emu10k1_probe(struc
-       if (card->is_aps)
-               emu10k1_ecard_init(card);
-+      ret = emu10k1_register_devices(card);
-+      if (ret < 0)
-+              goto err_register;
-+
-+      /* proc entries must be created after registering devices, as
-+       * emu10k1_info_proc prints card->audio_dev &co. */
-+      ret = emu10k1_proc_init(card);
-+      if (ret < 0) {
-+              printk(KERN_ERR "emu10k1: cannot initialize proc directory\n");
-+                goto err_proc;
-+      }
-+      
-       list_add(&card->list, &emu10k1_devs);
-       return 0;
-+err_proc:
-+      emu10k1_unregister_devices(card);
-+
-+err_register:
-+      emu10k1_cleanup(card);
-+      
- err_emu10k1_init:
-       emu10k1_midi_cleanup(card);
-@@ -1141,9 +1399,11 @@ static void __devexit emu10k1_remove(str
-       list_del(&card->list);
-+      emu10k1_unregister_devices(card);
-       emu10k1_cleanup(card);
-       emu10k1_midi_cleanup(card);
-       emu10k1_mixer_cleanup(card);
-+      emu10k1_proc_cleanup(card);
-       emu10k1_audio_cleanup(card);    
-       free_irq(card->irq, card);
-       release_region(card->iobase, card->length);
---- linux-2.6.0-test1/sound/oss/emu10k1/midi.h 2003-06-14 12:18:00.000000000 -0700
-+++ 25/sound/oss/emu10k1/midi.h        2003-07-19 17:03:51.000000000 -0700
-@@ -52,4 +52,27 @@ struct emu10k1_mididevice
-       struct list_head mid_hdrs;
- };
-+/* uncomment next line to use midi port on Audigy drive */
-+//#define USE_AUDIGY_DRIVE_MIDI
-+
-+#ifdef USE_AUDIGY_DRIVE_MIDI
-+#define A_MUDATA      A_MUDATA2
-+#define A_MUCMD               A_MUCMD2
-+#define A_MUSTAT      A_MUCMD2
-+#define A_IPR_MIDITRANSBUFEMPTY       A_IPR_MIDITRANSBUFEMPTY2
-+#define A_IPR_MIDIRECVBUFEMPTY        A_IPR_MIDIRECVBUFEMPTY2
-+#define A_INTE_MIDITXENABLE   A_INTE_MIDITXENABLE2
-+#define A_INTE_MIDIRXENABLE   A_INTE_MIDIRXENABLE2
-+#else
-+#define A_MUDATA      A_MUDATA1
-+#define A_MUCMD               A_MUCMD1
-+#define A_MUSTAT      A_MUCMD1
-+#define A_IPR_MIDITRANSBUFEMPTY       A_IPR_MIDITRANSBUFEMPTY1
-+#define A_IPR_MIDIRECVBUFEMPTY        A_IPR_MIDIRECVBUFEMPTY1
-+#define A_INTE_MIDITXENABLE   A_INTE_MIDITXENABLE1
-+#define A_INTE_MIDIRXENABLE   A_INTE_MIDIRXENABLE1
-+#endif
-+
-+
- #endif /* _MIDI_H */
-+
---- linux-2.6.0-test1/sound/oss/emu10k1/mixer.c        2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/emu10k1/mixer.c       2003-07-19 17:03:51.000000000 -0700
-@@ -136,7 +136,7 @@ static void set_bass(struct emu10k1_card
-       r = (r * 40 + 50) / 100;
-       for (i = 0; i < 5; i++)
--              sblive_writeptr(card, GPR_BASE + card->mgr.ctrl_gpr[SOUND_MIXER_BASS][0] + i, 0, bass_table[l][i]);
-+              sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + card->mgr.ctrl_gpr[SOUND_MIXER_BASS][0] + i, 0, bass_table[l][i]);
- }
- static void set_treble(struct emu10k1_card *card, int l, int r)
-@@ -147,7 +147,7 @@ static void set_treble(struct emu10k1_ca
-       r = (r * 40 + 50) / 100;
-       for (i = 0; i < 5; i++)
--              sblive_writeptr(card, GPR_BASE + card->mgr.ctrl_gpr[SOUND_MIXER_TREBLE][0] + i , 0, treble_table[l][i]);
-+              sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + card->mgr.ctrl_gpr[SOUND_MIXER_TREBLE][0] + i , 0, treble_table[l][i]);
- }
- const char volume_params[SOUND_MIXER_NRDEVICES]= {
-@@ -206,22 +206,25 @@ static int emu10k1_private_mixer(struct 
-               switch (ctl->cmd) {
- #ifdef DBGEMU
-               case CMD_WRITEFN0:
--                      emu10k1_writefn0(card, ctl->val[0], ctl->val[1]);
-+                      emu10k1_writefn0_2(card, ctl->val[0], ctl->val[1], ctl->val[2]);
-                       break;
--
-+#endif
-               case CMD_WRITEPTR:
--                      if (ctl->val[1] >= 0x40 || ctl->val[0] > 0xff) {
-+#ifdef DBGEMU
-+                      if (ctl->val[1] >= 0x40 || ctl->val[0] >= 0x1000) {
-+#else
-+                      if (ctl->val[1] >= 0x40 || ctl->val[0] >= 0x1000 || ((ctl->val[0] < 0x100 ) &&
-+                  //Any register allowed raw access goes here:
-+                                   (ctl->val[0] != A_SPDIF_SAMPLERATE) && (ctl->val[0] != A_DBG)
-+                      )
-+                              ) {
-+#endif
-                               ret = -EINVAL;
-                               break;
-                       }
--
--                      if ((ctl->val[0] & 0x7ff) > 0x3f)
--                              ctl->val[1] = 0x00;
--
-                       sblive_writeptr(card, ctl->val[0], ctl->val[1], ctl->val[2]);
--
-                       break;
--#endif
-+
-               case CMD_READFN0:
-                       ctl->val[2] = emu10k1_readfn0(card, ctl->val[0]);
-@@ -286,16 +289,13 @@ static int emu10k1_private_mixer(struct 
-               case CMD_GETVOICEPARAM:
-                       ctl->val[0] = card->waveout.send_routing[0];
--                      ctl->val[1] = card->waveout.send_a[0] | card->waveout.send_b[0] << 8 |
--                                    card->waveout.send_c[0] << 16 | card->waveout.send_d[0] << 24;
-+                      ctl->val[1] = card->waveout.send_dcba[0];
-                       ctl->val[2] = card->waveout.send_routing[1];
--                      ctl->val[3] = card->waveout.send_a[1] | card->waveout.send_b[1] << 8 |
--                                    card->waveout.send_c[1] << 16 | card->waveout.send_d[1] << 24;
-+                      ctl->val[3] = card->waveout.send_dcba[1];
-                       ctl->val[4] = card->waveout.send_routing[2];
--                      ctl->val[5] = card->waveout.send_a[2] | card->waveout.send_b[2] << 8 |
--                                   card->waveout.send_c[2] << 16 | card->waveout.send_d[2] << 24;
-+                      ctl->val[5] = card->waveout.send_dcba[2];
-                       if (copy_to_user((void *) arg, ctl, sizeof(struct mixer_private_ioctl)))
-                               ret = -EFAULT;
-@@ -303,23 +303,14 @@ static int emu10k1_private_mixer(struct 
-                       break;
-               case CMD_SETVOICEPARAM:
--                      card->waveout.send_routing[0] = ctl->val[0] & 0xffff;
--                      card->waveout.send_a[0] = ctl->val[1] & 0xff;
--                      card->waveout.send_b[0] = (ctl->val[1] >> 8) & 0xff;
--                      card->waveout.send_c[0] = (ctl->val[1] >> 16) & 0xff;
--                      card->waveout.send_d[0] = (ctl->val[1] >> 24) & 0xff;
--
--                      card->waveout.send_routing[1] = ctl->val[2] & 0xffff;
--                      card->waveout.send_a[1] = ctl->val[3] & 0xff;
--                      card->waveout.send_b[1] = (ctl->val[3] >> 8) & 0xff;
--                      card->waveout.send_c[1] = (ctl->val[3] >> 16) & 0xff;
--                      card->waveout.send_d[1] = (ctl->val[3] >> 24) & 0xff;
--
--                      card->waveout.send_routing[2] = ctl->val[4] & 0xffff;
--                      card->waveout.send_a[2] = ctl->val[5] & 0xff;
--                      card->waveout.send_b[2] = (ctl->val[5] >> 8) & 0xff;
--                      card->waveout.send_c[2] = (ctl->val[5] >> 16) & 0xff;
--                      card->waveout.send_d[2] = (ctl->val[5] >> 24) & 0xff;
-+                      card->waveout.send_routing[0] = ctl->val[0];
-+                      card->waveout.send_dcba[0] = ctl->val[1];
-+
-+                      card->waveout.send_routing[1] = ctl->val[2];
-+                      card->waveout.send_dcba[1] = ctl->val[3];
-+
-+                      card->waveout.send_routing[2] = ctl->val[4];
-+                      card->waveout.send_dcba[2] = ctl->val[5];
-                       break;
-               
-@@ -416,12 +407,16 @@ static int emu10k1_private_mixer(struct 
-                       break;
-               case CMD_SETGPOUT:
--                      if (ctl->val[0] > 2 || ctl->val[1] > 1) {
-+                      if ( ((ctl->val[0] > 2) && (!card->is_audigy))
-+                           || (ctl->val[0] > 15) || ctl->val[1] > 1) {
-                               ret= -EINVAL;
-                               break;
-                       }
--                      emu10k1_writefn0(card, (1 << 24) | (((ctl->val[0]) + 10) << 16) | HCFG, ctl->val[1]);
-+                      if (card->is_audigy)
-+                              emu10k1_writefn0(card, (1 << 24) | ((ctl->val[0]) << 16) | A_IOCFG, ctl->val[1]);
-+                      else
-+                              emu10k1_writefn0(card, (1 << 24) | (((ctl->val[0]) + 10) << 16) | HCFG, ctl->val[1]);
-                       break;
-               case CMD_GETGPR2OSS:
-@@ -493,13 +488,20 @@ static int emu10k1_private_mixer(struct 
-                       break;
-               case CMD_PRIVATE3_VERSION:
--                      ctl->val[0]=PRIVATE3_VERSION;
-+                      ctl->val[0] = PRIVATE3_VERSION; //private3 version
-+                      ctl->val[1] = MAJOR_VER;        //major driver version
-+                      ctl->val[2] = MINOR_VER;        //minor driver version
-+                      ctl->val[3] = card->is_audigy;  //1=card is audigy
-+
-+                      if (card->is_audigy)
-+                              ctl->val[4]=emu10k1_readfn0(card, 0x18);
-+
-                       if (copy_to_user((void *) arg, ctl, sizeof(struct mixer_private_ioctl)))
-                               ret = -EFAULT;
-                       break;
-               case CMD_AC97_BOOST:
--                      if(ctl->val[0])
-+                      if (ctl->val[0])
-                               emu10k1_ac97_write(card->ac97, 0x18, 0x0);      
-                       else
-                               emu10k1_ac97_write(card->ac97, 0x18, 0x0808);
-@@ -556,7 +558,7 @@ static int emu10k1_private_mixer(struct 
-                               card->tankmem.size = size;
--                              sblive_writeptr_tag(card, 0, TCB, (u32) card->tankmem.dma_handle, TCBS, size_reg, TAGLIST_END);
-+                              sblive_writeptr_tag(card, 0, TCB, (u32) card->tankmem.dma_handle, TCBS,(u32) size_reg, TAGLIST_END);
-                               emu10k1_writefn0(card, HCFG_LOCKTANKCACHE, 0);
-                       }
-@@ -623,8 +625,13 @@ static int emu10k1_mixer_ioctl(struct in
-               if (cmd == SOUND_MIXER_INFO) {
-                       mixer_info info;
--                      strncpy(info.id, card->ac97->name, sizeof(info.id));
--                      strncpy(info.name, "Creative SBLive - Emu10k1", sizeof(info.name));
-+                      strlcpy(info.id, card->ac97->name, sizeof(info.id));
-+
-+                      if (card->is_audigy)
-+                              strlcpy(info.name, "Audigy - Emu10k1", sizeof(info.name));
-+                      else
-+                              strlcpy(info.name, "Creative SBLive - Emu10k1", sizeof(info.name));
-+                              
-                       info.modify_counter = card->ac97->modcnt;
-                       if (copy_to_user((void *)arg, &info, sizeof(info)))
---- linux-2.6.0-test1/sound/oss/emu10k1/passthrough.c  2003-06-14 12:18:09.000000000 -0700
-+++ 25/sound/oss/emu10k1/passthrough.c 2003-07-19 17:03:51.000000000 -0700
-@@ -109,7 +109,7 @@ static int pt_putblock(struct emu10k1_wa
-       return 0;
- }
--static int pt_setup(struct emu10k1_wavedevice *wave_dev)
-+int emu10k1_pt_setup(struct emu10k1_wavedevice *wave_dev)
- {
-       u32 bits;
-       struct emu10k1_card *card = wave_dev->card;
-@@ -155,7 +155,7 @@ ssize_t emu10k1_pt_write(struct file *fi
-               pt->prepend_size = 0;
-               if (pt->buf == NULL)
-                       return -ENOMEM;
--              pt_setup(wave_dev);
-+              emu10k1_pt_setup(wave_dev);
-       }
-       if (pt->prepend_size) {
-               int needed = PT_BLOCKSIZE - pt->prepend_size;
-@@ -208,13 +208,14 @@ void emu10k1_pt_stop(struct emu10k1_card
-       if (pt->state != PT_STATE_INACTIVE) {
-               DPF(2, "digital pass-through stopped\n");
--              sblive_writeptr(card, GPR_BASE + pt->enable_gpr, 0, 0);
-+              sblive_writeptr(card, (card->is_audigy ? A_GPR_BASE : GPR_BASE) + pt->enable_gpr, 0, 0);
-               for (i = 0; i < 3; i++) {
-                         if (pt->spcs_to_use & (1 << i))
-                               sblive_writeptr(card, SPCS0 + i, 0, pt->old_spcs[i]);
-               }
-               pt->state = PT_STATE_INACTIVE;
--              kfree(pt->buf);
-+              if(pt->buf)
-+                      kfree(pt->buf);
-       }
- }
---- linux-2.6.0-test1/sound/oss/emu10k1/passthrough.h  2003-06-14 12:18:21.000000000 -0700
-+++ 25/sound/oss/emu10k1/passthrough.h 2003-07-19 17:03:51.000000000 -0700
-@@ -63,7 +63,36 @@ struct pt_data
-       spinlock_t lock;
- };
-+/*
-+  Passthrough can be done in two methods:
-+
-+  Method 1 : tram
-+     In original emu10k1, we couldn't bypass the sample rate converters. Even at 48kHz
-+     (the internal sample rate of the emu10k1) the samples would get messed up.
-+     To over come this, samples are copied into the tram and a special dsp patch copies
-+     the samples out and generates interrupts when a block has finnished playing.
-+
-+  Method 2 : Interpolator bypass
-+
-+     Creative fixed the sample rate convert problem in emu10k1 rev 7 and higher
-+     (including the emu10k2 (audigy)). This allows us to use the regular, and much simpler
-+     playback method. 
-+
-+
-+  In both methods, dsp code is used to mux audio and passthrough. This ensures that the spdif
-+  doesn't receive audio and pasthrough data at the same time. The spdif flag SPCS_NOTAUDIODATA
-+  is set to tell 
-+
-+ */
-+
-+// emu10k1 revs greater than or equal to 7 can use method2
-+
-+#define USE_PT_METHOD2  (card->is_audigy)
-+#define USE_PT_METHOD1        !USE_PT_METHOD2
-+
- ssize_t emu10k1_pt_write(struct file *file, const char *buf, size_t count);
-+
-+int emu10k1_pt_setup(struct emu10k1_wavedevice *wave_dev);
- void emu10k1_pt_stop(struct emu10k1_card *card);
- void emu10k1_pt_waveout_update(struct emu10k1_wavedevice *wave_dev);
---- linux-2.6.0-test1/sound/oss/emu10k1/recmgr.c       2003-06-14 12:18:52.000000000 -0700
-+++ 25/sound/oss/emu10k1/recmgr.c      2003-07-19 17:03:51.000000000 -0700
-@@ -74,7 +74,7 @@ void emu10k1_set_record_src(struct emu10
-               DPF(2, "recording source: AC97\n");
-               buffer->sizereg = ADCBS;
-               buffer->addrreg = ADCBA;
--              buffer->idxreg = ADCIDX_IDX;
-+              buffer->idxreg = card->is_audigy ? A_ADCIDX_IDX : ADCIDX_IDX;
-               switch (wiinst->format.samplingrate) {
-               case 0xBB80:
-@@ -95,21 +95,27 @@ void emu10k1_set_record_src(struct emu10
-               case 0x3E80:
-                       buffer->adcctl = ADCCR_SAMPLERATE_16;
-                       break;
-+              // FIXME: audigy supports 12kHz recording
-+              /*
-+              case ????:
-+                      buffer->adcctl = A_ADCCR_SAMPLERATE_12;
-+                      break;
-+              */
-               case 0x2B11:
--                      buffer->adcctl = ADCCR_SAMPLERATE_11;
-+                      buffer->adcctl = card->is_audigy ? A_ADCCR_SAMPLERATE_11 : ADCCR_SAMPLERATE_11;
-                       break;
-               case 0x1F40:
--                      buffer->adcctl = ADCCR_SAMPLERATE_8;
-+                      buffer->adcctl = card->is_audigy ? A_ADCCR_SAMPLERATE_8 : ADCCR_SAMPLERATE_8;
-                       break;
-               default:
-                       BUG();
-                       break;
-               }
--              buffer->adcctl |= ADCCR_LCHANENABLE;
-+              buffer->adcctl |= card->is_audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE;
-               if (wiinst->format.channels == 2)
--                      buffer->adcctl |= ADCCR_RCHANENABLE;
-+                      buffer->adcctl |= card->is_audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE;
-               break;
---- linux-2.6.0-test1/sound/oss/emu10k1/voicemgr.c     2003-06-14 12:18:23.000000000 -0700
-+++ 25/sound/oss/emu10k1/voicemgr.c    2003-07-19 17:03:51.000000000 -0700
-@@ -32,6 +32,34 @@
- #include "voicemgr.h"
- #include "8010.h"
-+#define PITCH_48000 0x00004000
-+#define PITCH_96000 0x00008000
-+#define PITCH_85000 0x00007155
-+#define PITCH_80726 0x00006ba2
-+#define PITCH_67882 0x00005a82
-+#define PITCH_57081 0x00004c1c
-+
-+u32 emu10k1_select_interprom(struct emu10k1_card *card, struct emu_voice *voice)
-+{
-+      if(voice->pitch_target==PITCH_48000)
-+              return CCCA_INTERPROM_0;
-+      else if(voice->pitch_target<PITCH_48000)
-+              return CCCA_INTERPROM_1;
-+      else  if(voice->pitch_target>=PITCH_96000)
-+              return CCCA_INTERPROM_0;
-+      else  if(voice->pitch_target>=PITCH_85000)
-+              return CCCA_INTERPROM_6;
-+      else  if(voice->pitch_target>=PITCH_80726)
-+              return CCCA_INTERPROM_5;
-+      else  if(voice->pitch_target>=PITCH_67882)
-+              return CCCA_INTERPROM_4;
-+      else  if(voice->pitch_target>=PITCH_57081)
-+              return CCCA_INTERPROM_3;
-+      else  
-+              return CCCA_INTERPROM_2;
-+}
-+
-+
- /**
-  * emu10k1_voice_alloc_buffer -
-  *
-@@ -216,17 +244,25 @@ void emu10k1_voice_playback_setup(struct
-       voice->start += start;
-       for (i = 0; i < (voice->flags & VOICE_FLAGS_STEREO ? 2 : 1); i++) {
--              sblive_writeptr(card, FXRT, voice->num + i, voice->params[i].send_routing << 16);
-+              if (card->is_audigy) {
-+                      sblive_writeptr(card, A_FXRT1, voice->num + i, voice->params[i].send_routing);
-+                      sblive_writeptr(card, A_FXRT2, voice->num + i, voice->params[i].send_routing2);
-+                      sblive_writeptr(card,  A_SENDAMOUNTS, voice->num + i, voice->params[i].send_hgfe);
-+              } else {
-+                      sblive_writeptr(card, FXRT, voice->num + i, voice->params[i].send_routing << 16);
-+              }
-               /* Stop CA */
-               /* Assumption that PT is already 0 so no harm overwriting */
--              sblive_writeptr(card, PTRX, voice->num + i, (voice->params[i].send_a << 8) | voice->params[i].send_b);
-+              sblive_writeptr(card, PTRX, voice->num + i, ((voice->params[i].send_dcba & 0xff) << 8)
-+                              | ((voice->params[i].send_dcba & 0xff00) >> 8));
-               sblive_writeptr_tag(card, voice->num + i,
-                               /* CSL, ST, CA */
--                                  DSL, voice->endloop | (voice->params[i].send_d << 24),
--                                  PSST, voice->startloop | (voice->params[i].send_c << 24),
--                                  CCCA, (voice->start) | CCCA_INTERPROM_0 | ((voice->flags & VOICE_FLAGS_16BIT) ? 0 : CCCA_8BITSELECT),
-+                                  DSL, voice->endloop | (voice->params[i].send_dcba & 0xff000000),
-+                                  PSST, voice->startloop | ((voice->params[i].send_dcba & 0x00ff0000) << 8),
-+                                  CCCA, (voice->start) |  emu10k1_select_interprom(card,voice) |
-+                                      ((voice->flags & VOICE_FLAGS_16BIT) ? 0 : CCCA_8BITSELECT),
-                                   /* Clear filter delay memory */
-                                   Z1, 0,
-                                   Z2, 0,
---- linux-2.6.0-test1/sound/oss/emu10k1/voicemgr.h     2003-06-14 12:18:23.000000000 -0700
-+++ 25/sound/oss/emu10k1/voicemgr.h    2003-07-19 17:03:51.000000000 -0700
-@@ -48,11 +48,13 @@ struct voice_param
-       /* FX bus amount send */
-       u32 send_routing;
-+      // audigy only:
-+      u32 send_routing2;
-+
-+      u32 send_dcba;
-+      // audigy only:
-+      u32 send_hgfe;
--      u32 send_a;
--      u32 send_b;
--      u32 send_c;
--      u32 send_d;
-       u32 initial_fc;
-       u32 fc_target;
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/hal2.c        2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,1498 @@
-+/*
-+ *  Driver for HAL2 sound processors
-+ *  Copyright (c) 2001, 2002 Ladislav Michl <ladis@psi.cz>
-+ *  
-+ *  Based on Ulf Carlsson's code.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License version 2 as 
-+ *  published by the Free Software Foundation.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ *  Supported devices:
-+ *  /dev/dsp    standard dsp device, (mostly) OSS compatible
-+ *  /dev/mixer        standard mixer device, (mostly) OSS compatible
-+ *
-+ *  BUGS:
-+ *  + Driver currently supports indigo mode only.
-+ *  + Recording doesn't work. I guess that it is caused by PBUS channel
-+ *    misconfiguration, but until I get relevant info I'm unable to fix it.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/sched.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/poll.h>
-+#include <linux/sound.h>
-+#include <linux/soundcard.h>
-+#include <asm/io.h>
-+#include <asm/uaccess.h>
-+#include <asm/sgi/sgint23.h>
-+
-+#include "hal2.h"
-+
-+#if 0
-+#define DEBUG(args...)                printk(args)
-+#else
-+#define DEBUG(args...)
-+#endif
-+
-+#if 0 
-+#define DEBUG_MIX(args...)    printk(args)
-+#else
-+#define DEBUG_MIX(args...)
-+#endif
-+
-+#define H2_INDIRECT_WAIT(regs)        while (regs->isr & H2_ISR_TSTATUS);
-+
-+#define H2_READ_ADDR(addr)    (addr | (1<<7))
-+#define H2_WRITE_ADDR(addr)   (addr)
-+
-+static char *hal2str = "HAL2 audio";
-+static int ibuffers = 32;
-+static int obuffers = 32;
-+
-+/* I doubt anyone has a machine with two HAL2 cards. It's possible to
-+ * have two HPC's, so it is probably possible to have two HAL2 cards.
-+ * Try to deal with it, but note that it is not tested.
-+ */
-+#define MAXCARDS      2
-+static hal2_card_t* hal2_card[MAXCARDS];
-+
-+static const struct {
-+      unsigned char idx:4, avail:1;
-+} mixtable[SOUND_MIXER_NRDEVICES] = {
-+      [SOUND_MIXER_PCM] = { H2_MIX_OUTPUT_ATT, 1 },   /* voice */
-+      [SOUND_MIXER_MIC] = { H2_MIX_INPUT_GAIN, 1 },   /* mic */
-+};
-+
-+#define H2_SUPPORTED_FORMATS  (AFMT_S16_LE | AFMT_S16_BE)
-+
-+static inline void hal2_isr_write(hal2_card_t *hal2, u32 val)
-+{
-+      hal2->ctl_regs->isr = val;
-+}
-+
-+static inline u32 hal2_isr_look(hal2_card_t *hal2)
-+{
-+      return hal2->ctl_regs->isr;
-+}
-+
-+static inline u32 hal2_rev_look(hal2_card_t *hal2)
-+{
-+      return hal2->ctl_regs->rev;
-+}
-+
-+#if 0
-+static u16 hal2_i_look16(hal2_card_t *hal2, u32 addr)
-+{
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->iar = H2_READ_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+      return (regs->idr0 & 0xffff);
-+}
-+#endif
-+
-+static u32 hal2_i_look32(hal2_card_t *hal2, u32 addr)
-+{
-+      u32 ret;
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->iar = H2_READ_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+      ret = regs->idr0 & 0xffff;
-+      regs->iar = H2_READ_ADDR(addr | 0x1);
-+      H2_INDIRECT_WAIT(regs);
-+      ret |= (regs->idr0 & 0xffff) << 16;
-+      return ret;
-+}
-+
-+static void hal2_i_write16(hal2_card_t *hal2, u32 addr, u16 val)
-+{
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->idr0 = val;
-+      regs->idr1 = 0;
-+      regs->idr2 = 0;
-+      regs->idr3 = 0;
-+      regs->iar = H2_WRITE_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_write32(hal2_card_t *hal2, u32 addr, u32 val)
-+{
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->idr0 = val & 0xffff;
-+      regs->idr1 = val >> 16;
-+      regs->idr2 = 0;
-+      regs->idr3 = 0;
-+      regs->iar = H2_WRITE_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_setbit16(hal2_card_t *hal2, u32 addr, u16 bit)
-+{
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->iar = H2_READ_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+      regs->idr0 = regs->idr0 | bit;
-+      regs->idr1 = 0;
-+      regs->idr2 = 0;
-+      regs->idr3 = 0;
-+      regs->iar = H2_WRITE_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_setbit32(hal2_card_t *hal2, u32 addr, u32 bit)
-+{
-+      u32 tmp;
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->iar = H2_READ_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+      tmp = regs->idr0 | (regs->idr1 << 16) | bit;
-+      regs->idr0 = tmp & 0xffff;
-+      regs->idr1 = tmp >> 16;
-+      regs->idr2 = 0;
-+      regs->idr3 = 0;
-+      regs->iar = H2_WRITE_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+}
-+
-+static void hal2_i_clearbit16(hal2_card_t *hal2, u32 addr, u16 bit)
-+{
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->iar = H2_READ_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+      regs->idr0 = regs->idr0 & ~bit;
-+      regs->idr1 = 0;
-+      regs->idr2 = 0;
-+      regs->idr3 = 0;
-+      regs->iar = H2_WRITE_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+}
-+
-+#if 0
-+static void hal2_i_clearbit32(hal2_card_t *hal2, u32 addr, u32 bit)
-+{
-+      u32 tmp;
-+      hal2_ctl_regs_t *regs = hal2->ctl_regs;
-+
-+      regs->iar = H2_READ_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+      tmp = (regs->idr0 | (regs->idr1 << 16)) & ~bit;
-+      regs->idr0 = tmp & 0xffff;
-+      regs->idr1 = tmp >> 16;
-+      regs->idr2 = 0;
-+      regs->idr3 = 0;
-+      regs->iar = H2_WRITE_ADDR(addr);
-+      H2_INDIRECT_WAIT(regs);
-+}
-+#endif
-+
-+#ifdef HAL2_DEBUG
-+static void hal2_dump_regs(hal2_card_t *hal2)
-+{
-+      printk("isr: %08hx ", hal2_isr_look(hal2));
-+      printk("rev: %08hx\n", hal2_rev_look(hal2));
-+      printk("relay: %04hx\n", hal2_i_look16(hal2, H2I_RELAY_C));
-+      printk("port en: %04hx ", hal2_i_look16(hal2, H2I_DMA_PORT_EN));
-+      printk("dma end: %04hx ", hal2_i_look16(hal2, H2I_DMA_END));
-+      printk("dma drv: %04hx\n", hal2_i_look16(hal2, H2I_DMA_DRV));
-+      printk("syn ctl: %04hx ", hal2_i_look16(hal2, H2I_SYNTH_C));
-+      printk("aesrx ctl: %04hx ", hal2_i_look16(hal2, H2I_AESRX_C));
-+      printk("aestx ctl: %04hx ", hal2_i_look16(hal2, H2I_AESTX_C));
-+      printk("dac ctl1: %04hx ", hal2_i_look16(hal2, H2I_ADC_C1));
-+      printk("dac ctl2: %08lx ", hal2_i_look32(hal2, H2I_ADC_C2));
-+      printk("adc ctl1: %04hx ", hal2_i_look16(hal2, H2I_DAC_C1));
-+      printk("adc ctl2: %08lx ", hal2_i_look32(hal2, H2I_DAC_C2));
-+      printk("syn map: %04hx\n", hal2_i_look16(hal2, H2I_SYNTH_MAP_C));
-+      printk("bres1 ctl1: %04hx ", hal2_i_look16(hal2, H2I_BRES1_C1));
-+      printk("bres1 ctl2: %04lx ", hal2_i_look32(hal2, H2I_BRES1_C2));
-+      printk("bres2 ctl1: %04hx ", hal2_i_look16(hal2, H2I_BRES2_C1));
-+      printk("bres2 ctl2: %04lx ", hal2_i_look32(hal2, H2I_BRES2_C2));
-+      printk("bres3 ctl1: %04hx ", hal2_i_look16(hal2, H2I_BRES3_C1));
-+      printk("bres3 ctl2: %04lx\n", hal2_i_look32(hal2, H2I_BRES3_C2));
-+}
-+#endif
-+
-+static hal2_card_t* hal2_dsp_find_card(int minor)
-+{
-+      int i;
-+
-+      for (i = 0; i < MAXCARDS; i++)
-+              if (hal2_card[i] != NULL && hal2_card[i]->dev_dsp == minor)
-+                      return hal2_card[i];
-+      return NULL;
-+}
-+
-+static hal2_card_t* hal2_mixer_find_card(int minor)
-+{
-+      int i;
-+
-+      for (i = 0; i < MAXCARDS; i++)
-+              if (hal2_card[i] != NULL && hal2_card[i]->dev_mixer == minor)
-+                      return hal2_card[i];
-+      return NULL;
-+}
-+
-+
-+static void hal2_dac_interrupt(hal2_codec_t *dac)
-+{
-+      int running;
-+
-+      spin_lock(&dac->lock);
-+      
-+      /* if tail buffer contains zero samples DMA stream was already
-+       * stopped */
-+      running = dac->tail->info.cnt;
-+      dac->tail->info.cnt = 0;
-+      dac->tail->info.desc.cntinfo = HPCDMA_XIE | HPCDMA_EOX;
-+      dma_cache_wback_inv((unsigned long) dac->tail,
-+                          sizeof(struct hpc_dma_desc));
-+      /* we just proccessed empty buffer, don't update tail pointer */
-+      if (running)
-+              dac->tail = dac->tail->info.next;
-+
-+      spin_unlock(&dac->lock);
-+
-+      wake_up(&dac->dma_wait);
-+}
-+
-+static void hal2_adc_interrupt(hal2_codec_t *adc)
-+{
-+      int running;
-+      
-+      spin_lock(&adc->lock);
-+
-+      /* if head buffer contains nonzero samples DMA stream was already
-+       * stopped */
-+      running = !adc->head->info.cnt;
-+      adc->head->info.cnt = H2_BUFFER_SIZE;
-+      adc->head->info.desc.cntinfo = HPCDMA_XIE | HPCDMA_EOX;
-+      dma_cache_wback_inv((unsigned long) adc->head,
-+                          sizeof(struct hpc_dma_desc));
-+      /* we just proccessed empty buffer, don't update head pointer */
-+      if (running) {
-+              dma_cache_inv((unsigned long) adc->head->data, H2_BUFFER_SIZE);
-+              adc->head = adc->head->info.next;
-+      }
-+
-+      spin_unlock(&adc->lock);
-+
-+      wake_up(&adc->dma_wait);
-+}
-+
-+static irqreturn_t hal2_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+      hal2_card_t *hal2 = (hal2_card_t*)dev_id;
-+
-+      /* decide what caused this interrupt */
-+      if (hal2->dac.pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_INT)
-+              hal2_dac_interrupt(&hal2->dac);
-+      if (hal2->adc.pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_INT)
-+              hal2_adc_interrupt(&hal2->adc);
-+      return IRQ_HANDLED;
-+}
-+
-+static int hal2_compute_rate(hal2_codec_t *codec, unsigned int rate)
-+{
-+      unsigned short inc;
-+      
-+      /* We default to 44.1 kHz and if it isn't possible to fall back to
-+       * 48.0 kHz with the needed adjustments of real_rate.
-+       */
-+
-+      DEBUG("rate: %d\n", rate);
-+      
-+      /* Refer to CS4216 data sheet */
-+      if (rate < 4000)
-+              rate = 4000;
-+      if (rate > 50000)
-+              rate = 50000;
-+
-+      /* Note: This is NOT the way they set up the bresenham clock generators
-+       * in the specification. I've tried to implement that method but it
-+       * doesn't work. It's probably another silly bug in the spec.
-+       *
-+       * I accidently discovered this method while I was testing and it seems
-+       * to work very well with all frequencies, and thee shall follow rule #1
-+       * of programming :-)
-+       */
-+      
-+      if (44100 % rate == 0) {
-+              inc = 44100 / rate;
-+              if (inc < 1) inc = 1;
-+              codec->master = 44100;
-+      } else {
-+              inc = 48000 / rate;
-+              if (inc < 1) inc = 1;
-+              rate = 48000 / inc;
-+              codec->master = 48000;
-+      }
-+      codec->inc = inc;
-+      codec->mod = 1;
-+      
-+      DEBUG("real_rate: %d\n", rate);
-+
-+      return rate;
-+}
-+
-+static void hal2_set_dac_rate(hal2_card_t *hal2)
-+{
-+      unsigned int master = hal2->dac.master;
-+      int inc = hal2->dac.inc;
-+      int mod = hal2->dac.mod;
-+
-+      DEBUG("master: %d inc: %d mod: %d\n", master, inc, mod);
-+      
-+      hal2_i_write16(hal2, H2I_BRES1_C1, (master == 44100) ? 1 : 0);
-+      hal2_i_write32(hal2, H2I_BRES1_C2, ((0xffff & (mod - inc - 1)) << 16) | 1);
-+}
-+
-+static void hal2_set_adc_rate(hal2_card_t *hal2)
-+{
-+      unsigned int master = hal2->adc.master;
-+      int inc = hal2->adc.inc;
-+      int mod = hal2->adc.mod;
-+
-+      DEBUG("master: %d inc: %d mod: %d\n", master, inc, mod);
-+      
-+      hal2_i_write16(hal2, H2I_BRES2_C1, (master == 44100) ? 1 : 0);
-+      hal2_i_write32(hal2, H2I_BRES2_C2, ((0xffff & (mod - inc - 1)) << 16) | 1);
-+}
-+
-+static void hal2_setup_dac(hal2_card_t *hal2)
-+{
-+      unsigned int fifobeg, fifoend, highwater, sample_size;
-+      hal2_pbus_t *pbus = &hal2->dac.pbus;
-+
-+      DEBUG("hal2_setup_dac\n");
-+      
-+      /* Now we set up some PBUS information. The PBUS needs information about
-+       * what portion of the fifo it will use. If it's receiving or
-+       * transmitting, and finally whether the stream is little endian or big
-+       * endian. The information is written later, on the start call.
-+       */
-+      sample_size = 2 * hal2->dac.voices;
-+
-+      /* Fifo should be set to hold exactly four samples. Highwater mark
-+       * should be set to two samples. */
-+      highwater = (sample_size * 2) >> 1;     /* halfwords */
-+      fifobeg = 0;                            /* playback is first */
-+      fifoend = (sample_size * 4) >> 3;       /* doublewords */
-+      pbus->ctrl = HPC3_PDMACTRL_RT | HPC3_PDMACTRL_LD |
-+                   (highwater << 8) | (fifobeg << 16) | (fifoend << 24);
-+      /* We disable everything before we do anything at all */
-+      pbus->pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+      hal2_i_clearbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECTX);
-+      hal2_i_clearbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+      /* Setup the HAL2 for playback */
-+      hal2_set_dac_rate(hal2);
-+      /* We are using 1st Bresenham clock generator for playback */
-+      hal2_i_write16(hal2, H2I_DAC_C1, (pbus->pbusnr << H2I_C1_DMA_SHIFT)
-+                      | (1 << H2I_C1_CLKID_SHIFT)
-+                      | (hal2->dac.voices << H2I_C1_DATAT_SHIFT));
-+}
-+
-+static void hal2_setup_adc(hal2_card_t *hal2)
-+{
-+      unsigned int fifobeg, fifoend, highwater, sample_size;
-+      hal2_pbus_t *pbus = &hal2->adc.pbus;
-+
-+      DEBUG("hal2_setup_adc\n");
-+      
-+      sample_size = 2 * hal2->adc.voices;
-+
-+      highwater = (sample_size * 2) >> 1;             /* halfwords */
-+      fifobeg = (4 * 4) >> 3;                         /* record is second */
-+      fifoend = (4 * 4 + sample_size * 4) >> 3;       /* doublewords */
-+      pbus->ctrl = HPC3_PDMACTRL_RT | HPC3_PDMACTRL_RCV | HPC3_PDMACTRL_LD | 
-+                   (highwater << 8) | (fifobeg << 16) | (fifoend << 24);
-+      pbus->pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+      hal2_i_clearbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECR);
-+      hal2_i_clearbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+      /* Setup the HAL2 for record */
-+      hal2_set_adc_rate(hal2);
-+      /* We are using 2nd Bresenham clock generator for record */
-+      hal2_i_write16(hal2, H2I_ADC_C1, (pbus->pbusnr << H2I_C1_DMA_SHIFT)
-+                      | (2 << H2I_C1_CLKID_SHIFT)
-+                      | (hal2->adc.voices << H2I_C1_DATAT_SHIFT));
-+}
-+
-+static void hal2_start_dac(hal2_card_t *hal2)
-+{
-+      hal2_pbus_t *pbus = &hal2->dac.pbus;
-+
-+      DEBUG("hal2_start_dac\n");
-+      
-+      pbus->pbus->pbdma_dptr = PHYSADDR(hal2->dac.tail);
-+      pbus->pbus->pbdma_ctrl = pbus->ctrl | HPC3_PDMACTRL_ACT;
-+
-+      /* set endianess */
-+      if (hal2->dac.format & AFMT_S16_LE)
-+              hal2_i_setbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECTX);
-+      else
-+              hal2_i_clearbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECTX);
-+      /* set DMA bus */
-+      hal2_i_setbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+      /* enable DAC */
-+      hal2_i_setbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECTX);
-+}
-+
-+static void hal2_start_adc(hal2_card_t *hal2)
-+{
-+      hal2_pbus_t *pbus = &hal2->adc.pbus;
-+
-+      DEBUG("hal2_start_adc\n");
-+      
-+      pbus->pbus->pbdma_dptr = PHYSADDR(hal2->adc.head);
-+      pbus->pbus->pbdma_ctrl = pbus->ctrl | HPC3_PDMACTRL_ACT;
-+      
-+      /* set endianess */
-+      if (hal2->adc.format & AFMT_S16_LE)
-+              hal2_i_setbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECR);
-+      else
-+              hal2_i_clearbit16(hal2, H2I_DMA_END, H2I_DMA_END_CODECR);
-+      /* set DMA bus */
-+      hal2_i_setbit16(hal2, H2I_DMA_DRV, (1 << pbus->pbusnr));
-+      /* enable ADC */
-+      hal2_i_setbit16(hal2, H2I_DMA_PORT_EN, H2I_DMA_PORT_EN_CODECR);
-+}
-+
-+static inline void hal2_stop_dac(hal2_card_t *hal2)
-+{
-+      DEBUG("hal2_stop_dac\n");
-+      
-+      hal2->dac.pbus.pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+      /* The HAL2 itself may remain enabled safely */
-+}
-+
-+static inline void hal2_stop_adc(hal2_card_t *hal2)
-+{
-+      DEBUG("hal2_stop_adc\n");
-+      
-+      hal2->adc.pbus.pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
-+}
-+
-+#define hal2_alloc_dac_dmabuf(hal2)   hal2_alloc_dmabuf(hal2, 1)
-+#define hal2_alloc_adc_dmabuf(hal2)   hal2_alloc_dmabuf(hal2, 0)
-+static int hal2_alloc_dmabuf(hal2_card_t *hal2, int is_dac)
-+{
-+      int buffers, cntinfo;
-+      hal2_buf_t *buf, *prev;
-+      hal2_codec_t *codec;
-+
-+      if (is_dac) {
-+              codec = &hal2->dac;
-+              buffers = obuffers;
-+              cntinfo = HPCDMA_XIE | HPCDMA_EOX;
-+      } else {
-+              codec = &hal2->adc;
-+              buffers = ibuffers;
-+              cntinfo = HPCDMA_XIE | H2_BUFFER_SIZE;
-+      }
-+      
-+      DEBUG("allocating %d DMA buffers.\n", buffers);
-+      
-+      buf = (hal2_buf_t*) get_zeroed_page(GFP_KERNEL);
-+      if (!buf)
-+              return -ENOMEM;
-+      codec->head = buf;
-+      codec->tail = buf;
-+      
-+      while (--buffers) {
-+              buf->info.desc.pbuf = PHYSADDR(&buf->data);
-+              buf->info.desc.cntinfo = cntinfo;
-+              buf->info.cnt = 0;
-+              prev = buf;
-+              buf = (hal2_buf_t*) get_zeroed_page(GFP_KERNEL);
-+              if (!buf) {
-+                      printk("HAL2: Not enough memory for DMA buffer.\n");
-+                      buf = codec->head;
-+                      while (buf) {
-+                              prev = buf;
-+                              free_page((unsigned long) buf);
-+                              buf = prev->info.next;
-+                      }
-+                      return -ENOMEM;
-+              }
-+              prev->info.next = buf;
-+              prev->info.desc.pnext = PHYSADDR(buf);
-+              /* The PBUS can prolly not read this stuff when it's in
-+               * the cache so we have to flush it back to main memory
-+               */
-+              dma_cache_wback_inv((unsigned long) prev, PAGE_SIZE);
-+      }
-+      buf->info.desc.pbuf = PHYSADDR(&buf->data);
-+      buf->info.desc.cntinfo = cntinfo;
-+      buf->info.cnt = 0;
-+      buf->info.next = codec->head;
-+      buf->info.desc.pnext = PHYSADDR(codec->head);
-+      dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE);
-+      
-+      return 0;
-+}
-+
-+#define hal2_free_dac_dmabuf(hal2)    hal2_free_dmabuf(hal2, 1)
-+#define hal2_free_adc_dmabuf(hal2)    hal2_free_dmabuf(hal2, 0)
-+static void hal2_free_dmabuf(hal2_card_t *hal2, int is_dac)
-+{
-+      hal2_buf_t *buf, *next;
-+      hal2_codec_t *codec = (is_dac) ? &hal2->dac : &hal2->adc;
-+
-+      if (!codec->head)
-+              return;
-+      
-+      buf = codec->head->info.next;
-+      codec->head->info.next = NULL;
-+      while (buf) {
-+              next = buf->info.next;
-+              free_page((unsigned long) buf);
-+              buf = next;
-+      }
-+      codec->head = codec->tail = NULL;
-+}
-+
-+/* 
-+ * Add 'count' bytes to 'buffer' from DMA ring buffers. Return number of
-+ * bytes added or -EFAULT if copy_from_user failed.
-+ */
-+static int hal2_get_buffer(hal2_card_t *hal2, char *buffer, int count)
-+{
-+      unsigned long flags;
-+      int size, ret = 0;
-+      hal2_codec_t *adc = &hal2->adc;
-+      
-+      spin_lock_irqsave(&adc->lock, flags);
-+      
-+      DEBUG("getting %d bytes ", count);
-+
-+      /* enable DMA stream if there are no data */
-+      if (!(adc->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT) &&
-+          adc->tail->info.cnt == 0)
-+              hal2_start_adc(hal2);
-+
-+      DEBUG("... ");
-+
-+      while (adc->tail->info.cnt > 0 && count > 0) {
-+              size = min(adc->tail->info.cnt, count);
-+              spin_unlock_irqrestore(&adc->lock, flags);
-+
-+              if (copy_to_user(buffer, &adc->tail->data[H2_BUFFER_SIZE-size],
-+                               size)) {
-+                      ret = -EFAULT;
-+                      goto out;
-+              }
-+
-+              spin_lock_irqsave(&adc->lock, flags);
-+              
-+              adc->tail->info.cnt -= size;
-+              /* buffer is empty, update tail pointer */
-+              if (adc->tail->info.cnt == 0) {
-+                      adc->tail->info.desc.cntinfo = HPCDMA_XIE |
-+                                                     H2_BUFFER_SIZE;
-+                      dma_cache_wback_inv((unsigned long) adc->tail,
-+                                          sizeof(struct hpc_dma_desc));
-+                      adc->tail = adc->tail->info.next;
-+                      /* enable DMA stream again if needed */
-+                      if (!(adc->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT))
-+                              hal2_start_adc(hal2);
-+
-+              }
-+              buffer += size;
-+              ret += size;
-+              count -= size;
-+
-+              DEBUG("(%d) ", size);
-+      }
-+      spin_unlock_irqrestore(&adc->lock, flags);
-+out:  
-+      DEBUG("\n");
-+      
-+      return ret;
-+} 
-+
-+/* 
-+ * Add 'count' bytes from 'buffer' to DMA ring buffers. Return number of
-+ * bytes added or -EFAULT if copy_from_user failed.
-+ */
-+static int hal2_add_buffer(hal2_card_t *hal2, char *buffer, int count)
-+{
-+      unsigned long flags;
-+      int size, ret = 0;
-+      hal2_codec_t *dac = &hal2->dac;
-+      
-+      spin_lock_irqsave(&dac->lock, flags);
-+      
-+      DEBUG("adding %d bytes ", count);
-+
-+      while (dac->head->info.cnt == 0 && count > 0) {
-+              size = min((int)H2_BUFFER_SIZE, count);
-+              spin_unlock_irqrestore(&dac->lock, flags);
-+              
-+              if (copy_from_user(dac->head->data, buffer, size)) {
-+                      ret = -EFAULT;
-+                      goto out;
-+              }
-+              spin_lock_irqsave(&dac->lock, flags);
-+
-+              dac->head->info.desc.cntinfo = size | HPCDMA_XIE;
-+              dac->head->info.cnt = size;
-+              dma_cache_wback_inv((unsigned long) dac->head, 
-+                                  size + PAGE_SIZE - H2_BUFFER_SIZE);
-+              buffer += size;
-+              ret += size;
-+              count -= size;
-+              dac->head = dac->head->info.next;
-+
-+              DEBUG("(%d) ", size);
-+      }
-+      if (!(dac->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT) && ret > 0)
-+              hal2_start_dac(hal2);
-+      
-+      spin_unlock_irqrestore(&dac->lock, flags);
-+out:  
-+      DEBUG("\n");
-+      
-+      return ret;
-+}
-+
-+#define hal2_reset_dac_pointer(hal2)  hal2_reset_pointer(hal2, 1)
-+#define hal2_reset_adc_pointer(hal2)  hal2_reset_pointer(hal2, 0)
-+static void hal2_reset_pointer(hal2_card_t *hal2, int is_dac)
-+{
-+      hal2_codec_t *codec = (is_dac) ? &hal2->dac : &hal2->adc;
-+      
-+      DEBUG("hal2_reset_pointer\n");
-+
-+      codec->tail = codec->head;
-+      do {
-+              codec->tail->info.desc.cntinfo = HPCDMA_XIE | (is_dac) ? 
-+                                               HPCDMA_EOX : H2_BUFFER_SIZE;
-+              codec->tail->info.cnt = 0;
-+              dma_cache_wback_inv((unsigned long) codec->tail, 
-+                                  sizeof(struct hpc_dma_desc));
-+              codec->tail = codec->tail->info.next;
-+      } while (codec->tail != codec->head);
-+}
-+
-+static int hal2_sync_dac(hal2_card_t *hal2)
-+{
-+      DECLARE_WAITQUEUE(wait, current);
-+      hal2_codec_t *dac = &hal2->dac;
-+      int ret = 0;
-+      signed long timeout = 1000 * H2_BUFFER_SIZE * 2 * dac->voices *
-+                            HZ / dac->sample_rate / 900;
-+
-+      down(&dac->sem);
-+      
-+      while (dac->pbus.pbus->pbdma_ctrl & HPC3_PDMACTRL_ISACT) {
-+              add_wait_queue(&dac->dma_wait, &wait);
-+              set_current_state(TASK_INTERRUPTIBLE);
-+              if (!schedule_timeout(timeout))
-+                      /* We may get bogus timeout when system is 
-+                       * heavily loaded */
-+                      if (dac->tail->info.cnt) {
-+                              printk("HAL2: timeout...\n");
-+                              ret = -ETIME;
-+                      }
-+              if (signal_pending(current))
-+                      ret = -ERESTARTSYS;
-+              if (ret) {
-+                      hal2_stop_dac(hal2);
-+                      hal2_reset_dac_pointer(hal2);
-+              }
-+              remove_wait_queue(&dac->dma_wait, &wait);
-+      }
-+
-+      up(&dac->sem);
-+      
-+      return ret;
-+}
-+
-+static int hal2_write_mixer(hal2_card_t *hal2, int index, int vol)
-+{
-+      unsigned int l, r;
-+
-+      DEBUG_MIX("mixer %d write\n", index);
-+      
-+      if (index >= SOUND_MIXER_NRDEVICES || !mixtable[index].avail)
-+              return -EINVAL;
-+
-+      r = (vol >> 8) & 0xff;
-+      if (r > 100)
-+              r = 100;
-+      l = vol & 0xff;
-+      if (l > 100)
-+              l = 100;
-+      
-+      hal2->mixer.volume[mixtable[index].idx] = l | (r << 8);
-+
-+      switch (mixtable[index].idx) {
-+      case H2_MIX_OUTPUT_ATT: {
-+
-+              DEBUG_MIX("output attenuator %d,%d\n", l, r);
-+
-+              if (r | l) {
-+                      unsigned int tmp = hal2_i_look32(hal2, H2I_DAC_C2); 
-+              
-+                      tmp &= ~(H2I_C2_L_ATT_M | H2I_C2_R_ATT_M | H2I_C2_MUTE);
-+
-+                      /* Attenuator has five bits */
-+                      l = (31 * (100 - l) / 99);
-+                      r = (31 * (100 - r) / 99);
-+                      
-+                      DEBUG_MIX("left: %d, right %d\n", l, r);
-+
-+                      tmp |= (l << H2I_C2_L_ATT_SHIFT) & H2I_C2_L_ATT_M;
-+                      tmp |= (r << H2I_C2_R_ATT_SHIFT) & H2I_C2_R_ATT_M;
-+                      hal2_i_write32(hal2, H2I_DAC_C2, tmp);
-+              } else 
-+                      hal2_i_setbit32(hal2, H2I_DAC_C2, H2I_C2_MUTE);
-+      }
-+      case H2_MIX_INPUT_GAIN: {
-+              /* TODO */
-+      }
-+      }
-+      return 0;
-+}
-+
-+static void hal2_init_mixer(hal2_card_t *hal2)
-+{
-+      int i;
-+
-+      for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
-+              hal2_write_mixer(hal2, i, 100 | (100 << 8));
-+              
-+}
-+
-+static int hal2_mixer_ioctl(hal2_card_t *hal2, unsigned int cmd, 
-+                          unsigned long arg)
-+{
-+      int val;
-+
-+        if (cmd == SOUND_MIXER_INFO) {
-+              mixer_info info;
-+              
-+              strncpy(info.id, hal2str, sizeof(info.id));
-+              strncpy(info.name, hal2str, sizeof(info.name));
-+              info.modify_counter = hal2->mixer.modcnt;
-+              if (copy_to_user((void *)arg, &info, sizeof(info)))
-+                      return -EFAULT;
-+              return 0;
-+      }
-+      if (cmd == SOUND_OLD_MIXER_INFO) {
-+              _old_mixer_info info;
-+              
-+              strncpy(info.id, hal2str, sizeof(info.id));
-+              strncpy(info.name, hal2str, sizeof(info.name));
-+              if (copy_to_user((void *)arg, &info, sizeof(info)))
-+                      return -EFAULT;
-+              return 0;
-+      }
-+      if (cmd == OSS_GETVERSION)
-+              return put_user(SOUND_VERSION, (int *)arg);
-+
-+      if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int))
-+                return -EINVAL;
-+
-+        if (_IOC_DIR(cmd) == _IOC_READ) {
-+                switch (_IOC_NR(cmd)) {
-+              /* Give the current record source */
-+              case SOUND_MIXER_RECSRC:
-+                      val = 0;        /* FIXME */
-+                      break;
-+              /* Give the supported mixers, all of them support stereo */
-+                case SOUND_MIXER_DEVMASK:
-+                case SOUND_MIXER_STEREODEVS: {
-+                      int i;
-+                      
-+                      for (val = i = 0; i < SOUND_MIXER_NRDEVICES; i++)
-+                              if (mixtable[i].avail)
-+                                      val |= 1 << i;
-+                      break;
-+                      }
-+              /* Arg contains a bit for each supported recording source */
-+                case SOUND_MIXER_RECMASK:
-+                      val = 0;
-+                      break;
-+                case SOUND_MIXER_CAPS:
-+                      val = 0;
-+                      break;
-+              /* Read a specific mixer */
-+              default: {
-+                      int i = _IOC_NR(cmd);
-+                      
-+                      if (i >= SOUND_MIXER_NRDEVICES || !mixtable[i].avail)
-+                              return -EINVAL;
-+                      val = hal2->mixer.volume[mixtable[i].idx];
-+                      break;
-+                      }
-+              }
-+              return put_user(val, (int *)arg);
-+      }
-+      
-+        if (_IOC_DIR(cmd) != (_IOC_WRITE|_IOC_READ))
-+              return -EINVAL;
-+      
-+      hal2->mixer.modcnt++;
-+
-+      if (get_user(val, (int *)arg))
-+              return -EFAULT;
-+
-+      switch (_IOC_NR(cmd)) {
-+      /* Arg contains a bit for each recording source */
-+      case SOUND_MIXER_RECSRC:
-+              return 0;       /* FIXME */
-+      default:
-+              return hal2_write_mixer(hal2, _IOC_NR(cmd), val);
-+      }
-+
-+      return 0;
-+}
-+
-+static int hal2_open_mixdev(struct inode *inode, struct file *file)
-+{
-+      hal2_card_t *hal2 = hal2_mixer_find_card(MINOR(inode->i_rdev));
-+
-+      if (hal2) {
-+              file->private_data = hal2;
-+              return 0;
-+      }
-+      return -ENODEV;
-+}
-+
-+static int hal2_release_mixdev(struct inode *inode, struct file *file)
-+{
-+      return 0;
-+}
-+
-+static int hal2_ioctl_mixdev(struct inode *inode, struct file *file,
-+                           unsigned int cmd, unsigned long arg)
-+{
-+      return hal2_mixer_ioctl((hal2_card_t *)file->private_data, cmd, arg);
-+}
-+
-+
-+static int hal2_ioctl(struct inode *inode, struct file *file, 
-+                    unsigned int cmd, unsigned long arg)
-+{
-+      int val;
-+      hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+
-+      switch (cmd) {
-+      case OSS_GETVERSION:
-+              return put_user(SOUND_VERSION, (int *)arg);
-+              
-+      case SNDCTL_DSP_SYNC:
-+              if (file->f_mode & FMODE_WRITE)
-+                      return hal2_sync_dac(hal2);
-+              return 0;
-+              
-+      case SNDCTL_DSP_SETDUPLEX:
-+              return 0;
-+
-+      case SNDCTL_DSP_GETCAPS:
-+              return put_user(DSP_CAP_DUPLEX | DSP_CAP_MULTI, (int *)arg);
-+              
-+      case SNDCTL_DSP_RESET:
-+              if (file->f_mode & FMODE_READ) {
-+                      hal2_stop_adc(hal2);
-+                      hal2_reset_adc_pointer(hal2);
-+              }
-+              if (file->f_mode & FMODE_WRITE) {
-+                      hal2_stop_dac(hal2);
-+                      hal2_reset_dac_pointer(hal2);
-+              }
-+              return 0;
-+
-+      case SNDCTL_DSP_SPEED:
-+              if (get_user(val, (int *)arg))
-+                      return -EFAULT;
-+              if (file->f_mode & FMODE_READ) {
-+                      hal2_stop_adc(hal2);
-+                      val = hal2_compute_rate(&hal2->adc, val);
-+                      hal2->adc.sample_rate = val;
-+                      hal2_set_adc_rate(hal2);
-+              }
-+              if (file->f_mode & FMODE_WRITE) {
-+                      hal2_stop_dac(hal2);
-+                      val = hal2_compute_rate(&hal2->dac, val);
-+                      hal2->dac.sample_rate = val;
-+                      hal2_set_dac_rate(hal2);
-+              }
-+              return put_user(val, (int *)arg);
-+              
-+      case SNDCTL_DSP_STEREO:
-+              if (get_user(val, (int *)arg))
-+                      return -EFAULT;
-+              if (file->f_mode & FMODE_READ) {
-+                      hal2_stop_adc(hal2);
-+                      hal2->adc.voices = (val) ? 2 : 1;
-+                      hal2_setup_adc(hal2);
-+              }
-+              if (file->f_mode & FMODE_WRITE) {
-+                      hal2_stop_dac(hal2);
-+                      hal2->dac.voices = (val) ? 2 : 1;
-+                      hal2_setup_dac(hal2);
-+                }
-+              return 0;
-+
-+      case SNDCTL_DSP_CHANNELS:
-+              if (get_user(val, (int *)arg))
-+                      return -EFAULT;
-+              if (val != 0) {
-+                      if (file->f_mode & FMODE_READ) {
-+                              hal2_stop_adc(hal2);
-+                              hal2->adc.voices = (val == 1) ? 1 : 2;
-+                              hal2_setup_adc(hal2);
-+                      }
-+                      if (file->f_mode & FMODE_WRITE) {
-+                              hal2_stop_dac(hal2);
-+                              hal2->dac.voices = (val == 1) ? 1 : 2;
-+                              hal2_setup_dac(hal2);
-+                      }
-+              }
-+              val = -EINVAL;
-+              if (file->f_mode & FMODE_READ)
-+                      val = hal2->adc.voices;
-+              if (file->f_mode & FMODE_WRITE)
-+                      val = hal2->dac.voices;
-+              return put_user(val, (int *)arg);
-+              
-+      case SNDCTL_DSP_GETFMTS: /* Returns a mask */
-+                return put_user(H2_SUPPORTED_FORMATS, (int *)arg);
-+              
-+      case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
-+              if (get_user(val, (int *)arg))
-+                      return -EFAULT;
-+              if (val != AFMT_QUERY) {
-+                      if (!(val & H2_SUPPORTED_FORMATS))
-+                              return -EINVAL;
-+                      if (file->f_mode & FMODE_READ) {
-+                              hal2_stop_adc(hal2);
-+                              hal2->adc.format = val;
-+                              hal2_setup_adc(hal2);
-+                      }
-+                      if (file->f_mode & FMODE_WRITE) {
-+                              hal2_stop_dac(hal2);
-+                              hal2->dac.format = val;
-+                              hal2_setup_dac(hal2);
-+                      }
-+              } else {
-+                      val = -EINVAL;
-+                      if (file->f_mode & FMODE_READ)
-+                              val = hal2->adc.format;
-+                      if (file->f_mode & FMODE_WRITE)
-+                              val = hal2->dac.format;
-+              }
-+              return put_user(val, (int *)arg);
-+              
-+      case SNDCTL_DSP_POST:
-+              return 0;
-+
-+      case SNDCTL_DSP_GETOSPACE: {
-+              unsigned long flags;
-+              audio_buf_info info;
-+              hal2_buf_t *buf;
-+              hal2_codec_t *dac = &hal2->dac;
-+              
-+              if (!(file->f_mode & FMODE_WRITE))
-+                      return -EINVAL;
-+              
-+              spin_lock_irqsave(&dac->lock, flags);
-+              info.fragments = 0;
-+              buf = dac->head;
-+              while (buf->info.cnt == 0 && buf != dac->tail) {
-+                      info.fragments++;
-+                      buf = buf->info.next;
-+              }
-+              spin_unlock_irqrestore(&dac->lock, flags);
-+              
-+              info.fragstotal = obuffers;
-+              info.fragsize = H2_BUFFER_SIZE;
-+                info.bytes = info.fragsize * info.fragments;
-+
-+              return copy_to_user((void *)arg, &info, sizeof(info)) ? -EFAULT : 0;
-+      }
-+                         
-+      case SNDCTL_DSP_GETISPACE: {
-+              unsigned long flags;
-+              audio_buf_info info;
-+              hal2_buf_t *buf;
-+              hal2_codec_t *adc = &hal2->adc;
-+                      
-+              if (!(file->f_mode & FMODE_READ))
-+                      return -EINVAL;
-+              
-+              spin_lock_irqsave(&adc->lock, flags);
-+              info.fragments = 0;
-+              info.bytes = 0;
-+              buf = adc->tail;
-+              while (buf->info.cnt > 0 && buf != adc->head) {
-+                      info.fragments++;
-+                      info.bytes += buf->info.cnt;
-+                      buf = buf->info.next;
-+              }
-+              spin_unlock_irqrestore(&adc->lock, flags);
-+
-+              info.fragstotal = ibuffers;
-+              info.fragsize = H2_BUFFER_SIZE;
-+              
-+              return copy_to_user((void *)arg, &info, sizeof(info)) ? -EFAULT : 0;
-+      }
-+
-+      case SNDCTL_DSP_NONBLOCK:
-+              file->f_flags |= O_NONBLOCK;
-+              return 0;
-+              
-+      case SNDCTL_DSP_GETBLKSIZE:
-+              return put_user(H2_BUFFER_SIZE, (int *)arg);
-+      
-+      case SNDCTL_DSP_SETFRAGMENT:
-+              return 0;
-+
-+      case SOUND_PCM_READ_RATE:
-+              val = -EINVAL;
-+              if (file->f_mode & FMODE_READ)
-+                      val = hal2->adc.sample_rate;
-+              if (file->f_mode & FMODE_WRITE)
-+                      val = hal2->dac.sample_rate;
-+              return put_user(val, (int *)arg);
-+
-+      case SOUND_PCM_READ_CHANNELS:
-+              val = -EINVAL;
-+              if (file->f_mode & FMODE_READ)
-+                      val = hal2->adc.voices;
-+              if (file->f_mode & FMODE_WRITE)
-+                      val = hal2->dac.voices;
-+              return put_user(val, (int *)arg);
-+
-+      case SOUND_PCM_READ_BITS:
-+              val = 16;
-+              return put_user(val, (int *)arg);
-+      }
-+      
-+      return hal2_mixer_ioctl(hal2, cmd, arg);
-+}
-+
-+static ssize_t hal2_read(struct file *file, char *buffer,
-+                       size_t count, loff_t *ppos)
-+{
-+      ssize_t err;
-+      hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+      hal2_codec_t *adc = &hal2->adc;
-+
-+      if (count == 0)
-+              return 0;
-+      if (ppos != &file->f_pos)
-+              return -ESPIPE;
-+      
-+      down(&adc->sem);
-+      
-+      if (file->f_flags & O_NONBLOCK) {
-+              err = hal2_get_buffer(hal2, buffer, count);
-+              err = err == 0 ? -EAGAIN : err;
-+      } else {
-+              do {
-+                      /* ~10% longer */
-+                      signed long timeout = 1000 * H2_BUFFER_SIZE *
-+                              2 * adc->voices * HZ / adc->sample_rate / 900;
-+                      DECLARE_WAITQUEUE(wait, current);
-+                      ssize_t cnt = 0;
-+                      
-+                      err = hal2_get_buffer(hal2, buffer, count);
-+                      if (err > 0) {
-+                              count -= err;
-+                              cnt += err;
-+                              buffer += err;
-+                              err = cnt;
-+                      }
-+                      if (count > 0 && err >= 0) {
-+                              add_wait_queue(&adc->dma_wait, &wait);
-+                              set_current_state(TASK_INTERRUPTIBLE);
-+                              /* Well, it is possible, that interrupt already
-+                               * arrived. Hmm, shit happens, we have one more
-+                               * buffer filled ;) */
-+                              if (!schedule_timeout(timeout))
-+                                      /* We may get bogus timeout when system
-+                                       * is heavily loaded */
-+                                      if (!adc->tail->info.cnt) {
-+                                              printk("HAL2: timeout...\n");
-+                                              hal2_stop_adc(hal2);
-+                                              hal2_reset_adc_pointer(hal2);
-+                                              err = -EAGAIN;
-+                                      }
-+                              if (signal_pending(current))
-+                                      err = -ERESTARTSYS;
-+                              remove_wait_queue(&adc->dma_wait, &wait);
-+                      }
-+              } while (count > 0 && err >= 0);
-+      
-+      }
-+      
-+      up(&adc->sem);
-+      
-+      return err;
-+}
-+
-+static ssize_t hal2_write(struct file *file, const char *buffer,
-+                        size_t count, loff_t *ppos)
-+{
-+      ssize_t err;
-+      char *buf = (char*) buffer;
-+      hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+      hal2_codec_t *dac = &hal2->dac;
-+
-+      if (count == 0)
-+              return 0;
-+      if (ppos != &file->f_pos)
-+              return -ESPIPE;
-+
-+      down(&dac->sem);
-+
-+      if (file->f_flags & O_NONBLOCK) {
-+              err = hal2_add_buffer(hal2, buf, count);
-+              err = err == 0 ? -EAGAIN : err;
-+      } else {
-+              do {
-+                      /* ~10% longer */
-+                      signed long timeout = 1000 * H2_BUFFER_SIZE *
-+                              2 * dac->voices * HZ / dac->sample_rate / 900;
-+                      DECLARE_WAITQUEUE(wait, current);
-+                      ssize_t cnt = 0;
-+                      
-+                      err = hal2_add_buffer(hal2, buf, count);
-+                      if (err > 0) {
-+                              count -= err;
-+                              cnt += err;
-+                              buf += err;
-+                              err = cnt;
-+                      }
-+                      if (count > 0 && err >= 0) {
-+                              add_wait_queue(&dac->dma_wait, &wait);
-+                              set_current_state(TASK_INTERRUPTIBLE);
-+                              /* Well, it is possible, that interrupt already
-+                               * arrived. Hmm, shit happens, we have one more
-+                               * buffer free ;) */
-+                              if (!schedule_timeout(timeout))
-+                                      /* We may get bogus timeout when system
-+                                       * is heavily loaded */
-+                                      if (dac->head->info.cnt) {
-+                                              printk("HAL2: timeout...\n");
-+                                              hal2_stop_dac(hal2);
-+                                              hal2_reset_dac_pointer(hal2);
-+                                              err = -EAGAIN;
-+                                      }
-+                              if (signal_pending(current))
-+                                      err = -ERESTARTSYS;
-+                              remove_wait_queue(&dac->dma_wait, &wait);
-+                      }
-+              } while (count > 0 && err >= 0);
-+      }
-+      
-+      up(&dac->sem);
-+
-+      return err;
-+}
-+
-+static unsigned int hal2_poll(struct file *file, struct poll_table_struct *wait)
-+{
-+      unsigned long flags;
-+      unsigned int mask = 0;
-+      hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+
-+      if (file->f_mode & FMODE_READ) {
-+              hal2_codec_t *adc = &hal2->adc;
-+              
-+              poll_wait(file, &hal2->adc.dma_wait, wait);
-+              spin_lock_irqsave(&adc->lock, flags);
-+              if (adc->tail->info.cnt > 0)
-+                      mask |= POLLIN;
-+              spin_unlock_irqrestore(&adc->lock, flags);
-+      }
-+      
-+      if (file->f_mode & FMODE_WRITE) {
-+              hal2_codec_t *dac = &hal2->dac;
-+              
-+              poll_wait(file, &dac->dma_wait, wait);
-+              spin_lock_irqsave(&dac->lock, flags);
-+              if (dac->head->info.cnt == 0)
-+                      mask |= POLLOUT;
-+              spin_unlock_irqrestore(&dac->lock, flags);
-+      }
-+      
-+      return mask;
-+}
-+
-+static int hal2_open(struct inode *inode, struct file *file)
-+{
-+      int err;
-+      hal2_card_t *hal2 = hal2_dsp_find_card(MINOR(inode->i_rdev));
-+
-+      DEBUG("opening audio device.\n");
-+
-+      if (!hal2) {
-+              printk("HAL2: Whee?! Open door and go away!\n");
-+              return -ENODEV;
-+      }
-+      file->private_data = hal2;
-+
-+      if (file->f_mode & FMODE_READ) {
-+              if (hal2->adc.usecount)
-+                      return -EBUSY;
-+              
-+              /* OSS spec wanted us to use 8 bit, 8 kHz mono by default,
-+               * but HAL2 can't do 8bit audio */
-+              hal2->adc.format = AFMT_S16_BE;
-+              hal2->adc.voices = 1;
-+              hal2->adc.sample_rate = hal2_compute_rate(&hal2->adc, 8000);
-+              hal2_set_adc_rate(hal2);
-+
-+              /* alloc DMA buffers */
-+              err = hal2_alloc_adc_dmabuf(hal2);
-+              if (err)
-+                      return err;
-+              hal2_setup_adc(hal2);
-+
-+              hal2->adc.usecount++;
-+      }
-+
-+      if (file->f_mode & FMODE_WRITE) {
-+              if (hal2->dac.usecount)
-+                      return -EBUSY;
-+
-+              hal2->dac.format = AFMT_S16_BE;
-+              hal2->dac.voices = 1;
-+              hal2->dac.sample_rate = hal2_compute_rate(&hal2->dac, 8000);
-+              hal2_set_dac_rate(hal2);
-+
-+              /* alloc DMA buffers */
-+              err = hal2_alloc_dac_dmabuf(hal2);
-+              if (err)
-+                      return err;
-+              hal2_setup_dac(hal2);
-+              
-+              hal2->dac.usecount++;
-+      }
-+      
-+      return 0;
-+}
-+
-+static int hal2_release(struct inode *inode, struct file *file)
-+{
-+      hal2_card_t *hal2 = (hal2_card_t *) file->private_data;
-+
-+      if (file->f_mode & FMODE_READ) {
-+              hal2_stop_adc(hal2);
-+              hal2_free_adc_dmabuf(hal2);
-+              hal2->adc.usecount--;
-+      }
-+
-+      if (file->f_mode & FMODE_WRITE) {
-+              hal2_sync_dac(hal2);
-+              hal2_free_dac_dmabuf(hal2);
-+              hal2->dac.usecount--;
-+      }
-+
-+      return 0;
-+}
-+
-+static struct file_operations hal2_audio_fops = {
-+      owner:          THIS_MODULE,
-+      llseek:         no_llseek,
-+      read:           hal2_read,
-+      write:          hal2_write,
-+      poll:           hal2_poll,
-+      ioctl:          hal2_ioctl,
-+      open:           hal2_open,
-+      release:        hal2_release,
-+};
-+
-+static struct file_operations hal2_mixer_fops = {
-+      owner:          THIS_MODULE,
-+      llseek:         no_llseek,
-+      ioctl:          hal2_ioctl_mixdev,
-+      open:           hal2_open_mixdev,
-+      release:        hal2_release_mixdev,
-+};
-+
-+static int hal2_request_irq(hal2_card_t *hal2, int irq)
-+{
-+      unsigned long flags;
-+      int ret = 0;
-+
-+      save_and_cli(flags);
-+      if (request_irq(irq, hal2_interrupt, SA_SHIRQ, hal2str, hal2)) {
-+              printk(KERN_ERR "HAL2: Can't get irq %d\n", irq);
-+              ret = -EAGAIN;
-+      }
-+      restore_flags(flags);
-+      return ret;
-+}
-+
-+static int hal2_alloc_resources(hal2_card_t *hal2, struct hpc3_regs *hpc3)
-+{
-+      hal2_pbus_t *pbus;
-+
-+      pbus = &hal2->dac.pbus;
-+      pbus->pbusnr = 0;
-+      pbus->pbus = &hpc3->pbdma[pbus->pbusnr];
-+      /* The spec says that we should write 0x08248844 but that's WRONG. HAL2
-+       * does 8 bit DMA, not 16 bit even if it generates 16 bit audio. */
-+      hpc3->pbus_dmacfgs[pbus->pbusnr][0] = 0x08208844;       /* Magic :-) */
-+
-+      pbus = &hal2->adc.pbus;
-+      pbus->pbusnr = 1;
-+      pbus->pbus = &hpc3->pbdma[pbus->pbusnr];
-+      hpc3->pbus_dmacfgs[pbus->pbusnr][0] = 0x08208844;       /* Magic :-) */
-+
-+      return hal2_request_irq(hal2, SGI_HPCDMA_IRQ);
-+}
-+
-+static void hal2_init_codec(hal2_codec_t *codec)
-+{
-+      init_waitqueue_head(&codec->dma_wait);
-+      init_MUTEX(&codec->sem);
-+      spin_lock_init(&codec->lock);
-+}
-+
-+static void hal2_free_resources(hal2_card_t *hal2)
-+{
-+      free_irq(SGI_HPCDMA_IRQ, hal2);
-+}
-+
-+static int hal2_detect(hal2_card_t *hal2)
-+{
-+      unsigned short board, major, minor;
-+      unsigned short rev;
-+
-+      /* reset HAL2 */
-+      hal2_isr_write(hal2, 0);
-+
-+      /* release reset */
-+      hal2_isr_write(hal2, H2_ISR_GLOBAL_RESET_N | H2_ISR_CODEC_RESET_N);
-+
-+      hal2_i_write16(hal2, H2I_RELAY_C, H2I_RELAY_C_STATE); 
-+
-+      if ((rev = hal2_rev_look(hal2)) & H2_REV_AUDIO_PRESENT) {
-+              DEBUG("HAL2: no device detected, rev: 0x%04hx\n", rev);
-+              return -ENODEV;
-+      }
-+
-+      board = (rev & H2_REV_BOARD_M) >> 12;
-+      major = (rev & H2_REV_MAJOR_CHIP_M) >> 4;
-+      minor = (rev & H2_REV_MINOR_CHIP_M);
-+
-+      printk("SGI HAL2 Processor revision %i.%i.%i detected\n",
-+             board, major, minor);
-+
-+      if (board != 4 || major != 1 || minor != 0) 
-+              printk( "Other revision than 4.1.0 detected. "
-+                      "Your card is probably unsupported\n");
-+
-+      return 0;
-+}
-+
-+static int hal2_init_card(hal2_card_t **phal2, struct hpc3_regs *hpc3,
-+                        unsigned long hpc3_base)
-+{
-+      int ret = 0;
-+      hal2_card_t *hal2;
-+      
-+      hal2 = (hal2_card_t *) kmalloc(sizeof(hal2_card_t), GFP_KERNEL);
-+      if (!hal2)
-+              return -ENOMEM;
-+      memset(hal2, 0, sizeof(hal2_card_t));
-+
-+      hal2->ctl_regs = (hal2_ctl_regs_t *) KSEG1ADDR(hpc3_base + H2_CTL_PIO);
-+      hal2->aes_regs = (hal2_aes_regs_t *) KSEG1ADDR(hpc3_base + H2_AES_PIO);
-+      hal2->vol_regs = (hal2_vol_regs_t *) KSEG1ADDR(hpc3_base + H2_VOL_PIO);
-+      hal2->syn_regs = (hal2_syn_regs_t *) KSEG1ADDR(hpc3_base + H2_SYN_PIO);
-+
-+      if (hal2_detect(hal2) < 0) {
-+              printk("HAL2 audio processor not found\n");
-+              ret = -ENODEV;
-+              goto fail1;
-+      }
-+
-+      hal2_init_codec(&hal2->dac);
-+      hal2_init_codec(&hal2->adc);
-+
-+      ret = hal2_alloc_resources(hal2, hpc3);
-+      if (ret)
-+              goto fail1;
-+      
-+      hal2_init_mixer(hal2);
-+
-+      hal2->dev_dsp = register_sound_dsp(&hal2_audio_fops, -1);
-+      if (hal2->dev_dsp < 0) {
-+              ret = hal2->dev_dsp;
-+              goto fail2;
-+      }
-+
-+      hal2->dev_mixer = register_sound_mixer(&hal2_mixer_fops, -1);
-+      if (hal2->dev_mixer < 0) {
-+              ret = hal2->dev_mixer;
-+              goto fail3;
-+      }
-+      
-+      *phal2 = hal2;
-+      return 0;
-+fail3:
-+      unregister_sound_dsp(hal2->dev_dsp);
-+fail2:
-+      hal2_free_resources(hal2);
-+fail1:
-+      kfree(hal2);
-+      
-+      return ret;
-+}
-+
-+/* 
-+ * We are assuming only one HAL2 card. If you ever meet machine with more than
-+ * one, tell immediately about it to someone. Preferably to me. --ladis
-+ */
-+static int __init init_hal2(void)
-+{
-+      int i;
-+
-+      for (i = 0; i < MAXCARDS; i++)
-+              hal2_card[i] = NULL;
-+
-+      return hal2_init_card(&hal2_card[0], hpc3c0, HPC3_CHIP0_PBASE);
-+}
-+
-+static void __exit exit_hal2(void)
-+{
-+      int i;
-+      
-+      for (i = 0; i < MAXCARDS; i++)
-+              if (hal2_card[i]) {
-+                      hal2_free_resources(hal2_card[i]);
-+                      unregister_sound_dsp(hal2_card[i]->dev_dsp);
-+                      unregister_sound_mixer(hal2_card[i]->dev_mixer);
-+                      kfree(hal2_card[i]);
-+      }
-+}
-+
-+module_init(init_hal2);
-+module_exit(exit_hal2);
-+
-+MODULE_DESCRIPTION("OSS compatible driver for SGI HAL2 audio");
-+MODULE_AUTHOR("Ladislav Michl");
-+MODULE_LICENSE("GPL");
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/hal2.h        2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,328 @@
-+#ifndef __HAL2_H
-+#define __HAL2_H
-+
-+/*
-+ *  Driver for HAL2 sound processors
-+ *  Copyright (c) 1999 Ulf Carlsson <ulfc@bun.falkenberg.se>
-+ *  Copyright (c) 2001 Ladislav Michl <ladis@psi.cz>
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License version 2 as 
-+ *  published by the Free Software Foundation.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+#include <asm/addrspace.h>
-+#include <asm/sgi/sgihpc.h>
-+#include <linux/spinlock.h>
-+#include <linux/types.h>
-+
-+#define H2_HAL2_BASE          0x58000
-+#define H2_CTL_PIO            (H2_HAL2_BASE + 0 * 0x400)
-+#define H2_AES_PIO            (H2_HAL2_BASE + 1 * 0x400)
-+#define H2_VOL_PIO            (H2_HAL2_BASE + 2 * 0x400)
-+#define H2_SYN_PIO            (H2_HAL2_BASE + 3 * 0x400)
-+
-+/* Indirect status register */
-+
-+#define H2_ISR_TSTATUS                0x01    /* RO: transaction status 1=busy */
-+#define H2_ISR_USTATUS                0x02    /* RO: utime status bit 1=armed */
-+#define H2_ISR_QUAD_MODE      0x04    /* codec mode 0=indigo 1=quad */
-+#define H2_ISR_GLOBAL_RESET_N 0x08    /* chip global reset 0=reset */
-+#define H2_ISR_CODEC_RESET_N  0x10    /* codec/synth reset 0=reset  */
-+
-+/* Revision register */
-+
-+#define H2_REV_AUDIO_PRESENT  0x8000  /* RO: audio present 0=present */
-+#define H2_REV_BOARD_M                0x7000  /* RO: bits 14:12, board revision */
-+#define H2_REV_MAJOR_CHIP_M   0x00F0  /* RO: bits 7:4, major chip revision */
-+#define H2_REV_MINOR_CHIP_M   0x000F  /* RO: bits 3:0, minor chip revision */
-+
-+/* Indirect address register */
-+
-+/*
-+ * Address of indirect internal register to be accessed. A write to this
-+ * register initiates read or write access to the indirect registers in the
-+ * HAL2. Note that there af four indirect data registers for write access to
-+ * registers larger than 16 byte.
-+ */
-+
-+#define H2_IAR_TYPE_M         0xF000  /* bits 15:12, type of functional */
-+                                      /* block the register resides in */
-+                                      /* 1=DMA Port */
-+                                      /* 9=Global DMA Control */
-+                                      /* 2=Bresenham */
-+                                      /* 3=Unix Timer */
-+#define H2_IAR_NUM_M          0x0F00  /* bits 11:8 instance of the */
-+                                      /* blockin which the indirect */
-+                                      /* register resides */
-+                                      /* If IAR_TYPE_M=DMA Port: */
-+                                      /* 1=Synth In */
-+                                      /* 2=AES In */
-+                                      /* 3=AES Out */
-+                                      /* 4=DAC Out */
-+                                      /* 5=ADC Out */
-+                                      /* 6=Synth Control */
-+                                      /* If IAR_TYPE_M=Global DMA Control: */
-+                                      /* 1=Control */
-+                                      /* If IAR_TYPE_M=Bresenham: */
-+                                      /* 1=Bresenham Clock Gen 1 */
-+                                      /* 2=Bresenham Clock Gen 2 */
-+                                      /* 3=Bresenham Clock Gen 3 */
-+                                      /* If IAR_TYPE_M=Unix Timer: */
-+                                      /* 1=Unix Timer */
-+#define H2_IAR_ACCESS_SELECT  0x0080  /* 1=read 0=write */
-+#define H2_IAR_PARAM          0x000C  /* Parameter Select */
-+#define H2_IAR_RB_INDEX_M     0x0003  /* Read Back Index */
-+                                      /* 00:word0 */
-+                                      /* 01:word1 */
-+                                      /* 10:word2 */
-+                                      /* 11:word3 */
-+/*
-+ * HAL2 internal addressing
-+ *
-+ * The HAL2 has "indirect registers" (idr) which are accessed by writing to the
-+ * Indirect Data registers. Write the address to the Indirect Address register
-+ * to transfer the data.
-+ *
-+ * We define the H2IR_* to the read address and H2IW_* to the write address and
-+ * H2I_* to be fields in whatever register is referred to.
-+ *
-+ * When we write to indirect registers which are larger than one word (16 bit)
-+ * we have to fill more than one indirect register before writing. When we read
-+ * back however we have to read several times, each time with different Read
-+ * Back Indexes (there are defs for doing this easily).
-+ */
-+
-+/*
-+ * Relay Control
-+ */
-+#define H2I_RELAY_C           0x9100
-+#define H2I_RELAY_C_STATE     0x01            /* state of RELAY pin signal */
-+
-+/* DMA port enable */
-+
-+#define H2I_DMA_PORT_EN               0x9104
-+#define H2I_DMA_PORT_EN_SY_IN 0x01            /* Synth_in DMA port */
-+#define H2I_DMA_PORT_EN_AESRX 0x02            /* AES receiver DMA port */
-+#define H2I_DMA_PORT_EN_AESTX 0x04            /* AES transmitter DMA port */
-+#define H2I_DMA_PORT_EN_CODECTX       0x08            /* CODEC transmit DMA port */
-+#define H2I_DMA_PORT_EN_CODECR        0x10            /* CODEC receive DMA port */
-+
-+#define H2I_DMA_END           0x9108          /* global dma endian select */
-+#define H2I_DMA_END_SY_IN     0x01            /* Synth_in DMA port */
-+#define H2I_DMA_END_AESRX     0x02            /* AES receiver DMA port */
-+#define H2I_DMA_END_AESTX     0x04            /* AES transmitter DMA port */
-+#define H2I_DMA_END_CODECTX   0x08            /* CODEC transmit DMA port */
-+#define H2I_DMA_END_CODECR    0x10            /* CODEC receive DMA port */
-+                                              /* 0=b_end 1=l_end */
-+
-+#define H2I_DMA_DRV           0x910C          /* global PBUS DMA enable */
-+
-+#define H2I_SYNTH_C           0x1104          /* Synth DMA control */
-+
-+#define H2I_AESRX_C           0x1204          /* AES RX dma control */
-+
-+#define H2I_C_TS_EN           0x20            /* Timestamp enable */
-+#define H2I_C_TS_FRMT         0x40            /* Timestamp format */
-+#define H2I_C_NAUDIO          0x80            /* Sign extend */
-+
-+/* AESRX CTL, 16 bit */
-+
-+#define H2I_AESTX_C           0x1304          /* AES TX DMA control */
-+#define H2I_AESTX_C_CLKID_SHIFT       3               /* Bresenham Clock Gen 1-3 */
-+#define H2I_AESTX_C_CLKID_M   0x18
-+#define H2I_AESTX_C_DATAT_SHIFT       8               /* 1=mono 2=stereo (3=quad) */
-+#define H2I_AESTX_C_DATAT_M   0x300
-+
-+/* CODEC registers */
-+
-+#define H2I_DAC_C1            0x1404          /* DAC DMA control, 16 bit */
-+#define H2I_DAC_C2            0x1408          /* DAC DMA control, 32 bit */
-+#define H2I_ADC_C1            0x1504          /* ADC DMA control, 16 bit */
-+#define H2I_ADC_C2            0x1508          /* ADC DMA control, 32 bit */
-+
-+/* Bits in CTL1 register */
-+
-+#define H2I_C1_DMA_SHIFT      0               /* DMA channel */
-+#define H2I_C1_DMA_M          0x7
-+#define H2I_C1_CLKID_SHIFT    3               /* Bresenham Clock Gen 1-3 */
-+#define H2I_C1_CLKID_M                0x18
-+#define H2I_C1_DATAT_SHIFT    8               /* 1=mono 2=stereo (3=quad) */
-+#define H2I_C1_DATAT_M                0x300
-+
-+/* Bits in CTL2 register */
-+
-+#define H2I_C2_R_GAIN_SHIFT   0               /* right a/d input gain */      
-+#define H2I_C2_R_GAIN_M               0xf     
-+#define H2I_C2_L_GAIN_SHIFT   4               /* left a/d input gain */
-+#define H2I_C2_L_GAIN_M               0xf0
-+#define H2I_C2_R_SEL          0x100           /* right input select */
-+#define H2I_C2_L_SEL          0x200           /* left input select */
-+#define H2I_C2_MUTE           0x400           /* mute */
-+#define H2I_C2_DO1            0x00010000      /* digital output port bit 0 */
-+#define H2I_C2_DO2            0x00020000      /* digital output port bit 1 */
-+#define H2I_C2_R_ATT_SHIFT    18              /* right d/a output - */
-+#define H2I_C2_R_ATT_M                0x007c0000      /* attenuation */
-+#define H2I_C2_L_ATT_SHIFT    23              /* left d/a output - */
-+#define H2I_C2_L_ATT_M                0x0f800000      /* attenuation */
-+
-+#define H2I_SYNTH_MAP_C               0x1104          /* synth dma handshake ctrl */
-+
-+/* Clock generator CTL 1, 16 bit */
-+
-+#define H2I_BRES1_C1          0x2104
-+#define H2I_BRES2_C1          0x2204
-+#define H2I_BRES3_C1          0x2304
-+
-+#define H2I_BRES_C1_SHIFT     0               /* 0=48.0 1=44.1 2=aes_rx */
-+#define H2I_BRES_C1_M         0x03
-+                              
-+/* Clock generator CTL 2, 32 bit */
-+
-+#define H2I_BRES1_C2          0x2108
-+#define H2I_BRES2_C2          0x2208
-+#define H2I_BRES3_C2          0x2308
-+
-+#define H2I_BRES_C2_INC_SHIFT 0               /* increment value */
-+#define H2I_BRES_C2_INC_M     0xffff
-+#define H2I_BRES_C2_MOD_SHIFT 16              /* modcontrol value */
-+#define H2I_BRES_C2_MOD_M     0xffff0000      /* modctrl=0xffff&(modinc-1) */
-+
-+/* Unix timer, 64 bit */
-+
-+#define H2I_UTIME             0x3104
-+#define H2I_UTIME_0_LD                0xffff          /* microseconds, LSB's */
-+#define H2I_UTIME_1_LD0               0x0f            /* microseconds, MSB's */
-+#define H2I_UTIME_1_LD1               0xf0            /* tenths of microseconds */
-+#define H2I_UTIME_2_LD                0xffff          /* seconds, LSB's */
-+#define H2I_UTIME_3_LD                0xffff          /* seconds, MSB's */
-+
-+typedef volatile u32 hal2_reg_t;
-+
-+typedef struct stru_hal2_ctl_regs hal2_ctl_regs_t;
-+struct stru_hal2_ctl_regs {
-+      hal2_reg_t _unused0[4];
-+      hal2_reg_t isr;                 /* 0x10 Status Register */
-+      hal2_reg_t _unused1[3];
-+      hal2_reg_t rev;                 /* 0x20 Revision Register */
-+      hal2_reg_t _unused2[3];
-+      hal2_reg_t iar;                 /* 0x30 Indirect Address Register */
-+      hal2_reg_t _unused3[3];
-+      hal2_reg_t idr0;                /* 0x40 Indirect Data Register 0 */
-+      hal2_reg_t _unused4[3];
-+      hal2_reg_t idr1;                /* 0x50 Indirect Data Register 1 */
-+      hal2_reg_t _unused5[3];
-+      hal2_reg_t idr2;                /* 0x60 Indirect Data Register 2 */
-+      hal2_reg_t _unused6[3];
-+      hal2_reg_t idr3;                /* 0x70 Indirect Data Register 3 */
-+};
-+
-+typedef struct stru_hal2_aes_regs hal2_aes_regs_t;
-+struct stru_hal2_aes_regs {
-+      hal2_reg_t rx_stat[2];          /* Status registers */
-+      hal2_reg_t rx_cr[2];            /* Control registers */
-+      hal2_reg_t rx_ud[4];            /* User data window */
-+      hal2_reg_t rx_st[24];           /* Channel status data */
-+      
-+      hal2_reg_t tx_stat[1];          /* Status register */
-+      hal2_reg_t tx_cr[3];            /* Control registers */
-+      hal2_reg_t tx_ud[4];            /* User data window */
-+      hal2_reg_t tx_st[24];           /* Channel status data */
-+};
-+
-+typedef struct stru_hal2_vol_regs hal2_vol_regs_t;
-+struct stru_hal2_vol_regs {
-+      hal2_reg_t right;               /* 0x00 Right volume */
-+      hal2_reg_t left;                /* 0x04 Left volume */
-+};
-+
-+typedef struct stru_hal2_syn_regs hal2_syn_regs_t;
-+struct stru_hal2_syn_regs {
-+      hal2_reg_t _unused0[2];
-+      hal2_reg_t page;                /* DOC Page register */
-+      hal2_reg_t regsel;              /* DOC Register selection */
-+      hal2_reg_t dlow;                /* DOC Data low */
-+      hal2_reg_t dhigh;               /* DOC Data high */
-+      hal2_reg_t irq;                 /* IRQ Status */
-+      hal2_reg_t dram;                /* DRAM Access */
-+};
-+
-+/* HAL2 specific structures */
-+
-+typedef struct stru_hal2_pbus hal2_pbus_t;
-+struct stru_hal2_pbus {
-+      struct hpc3_pbus_dmacregs *pbus;
-+      int pbusnr;
-+      unsigned int ctrl;              /* Current state of pbus->pbdma_ctrl */
-+};
-+
-+typedef struct stru_hal2_binfo hal2_binfo_t;
-+typedef struct stru_hal2_buffer hal2_buf_t;
-+struct stru_hal2_binfo {
-+      volatile struct hpc_dma_desc desc;
-+      hal2_buf_t *next;               /* pointer to next buffer */
-+      int cnt;                        /* bytes in buffer */
-+};
-+#define H2_BUFFER_SIZE        (PAGE_SIZE - \
-+              ((sizeof(hal2_binfo_t) - 1) / 8 + 1) * 8)
-+struct stru_hal2_buffer {
-+      hal2_binfo_t info;
-+      char data[H2_BUFFER_SIZE] __attribute__((aligned(8)));
-+};
-+
-+typedef struct stru_hal2_codec hal2_codec_t;
-+struct stru_hal2_codec {
-+      hal2_buf_t *head;
-+      hal2_buf_t *tail; 
-+      hal2_pbus_t pbus;
-+      unsigned int format;            /* Audio data format */
-+      int voices;                     /* mono/stereo */
-+      unsigned int sample_rate;
-+      unsigned int master;            /* Master frequency */
-+      unsigned short mod;             /* MOD value */
-+      unsigned short inc;             /* INC value */
-+
-+      wait_queue_head_t dma_wait;
-+      spinlock_t lock;
-+      struct semaphore sem;
-+
-+      int usecount;                   /* recording and playback are 
-+                                       * independent */
-+};
-+
-+#define H2_MIX_OUTPUT_ATT     0
-+#define H2_MIX_INPUT_GAIN     1
-+#define H2_MIXERS             2
-+typedef struct stru_hal2_mixer hal2_mixer_t;
-+struct stru_hal2_mixer {
-+      int modcnt;
-+      unsigned int volume[H2_MIXERS];
-+};
-+
-+typedef struct stru_hal2_card hal2_card_t;
-+struct stru_hal2_card {
-+      int dev_dsp;                    /* audio device */
-+      int dev_mixer;                  /* mixer device */
-+      int dev_midi;                   /* midi device */
-+      
-+      hal2_ctl_regs_t *ctl_regs;      /* HAL2 ctl registers */
-+      hal2_aes_regs_t *aes_regs;      /* HAL2 vol registers */
-+      hal2_vol_regs_t *vol_regs;      /* HAL2 aes registers */
-+      hal2_syn_regs_t *syn_regs;      /* HAL2 syn registers */
-+
-+      hal2_codec_t dac;
-+      hal2_codec_t adc;
-+      hal2_mixer_t mixer;
-+};
-+
-+#endif                                /* __HAL2_H */
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/harmony.c     2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,1307 @@
-+/*
-+      drivers/sound/harmony.c 
-+
-+      This is a sound driver for ASP's and Lasi's Harmony sound chip
-+      and is unlikely to be used for anything other than on a HP PA-RISC.
-+
-+      Harmony is found in HP 712s, 715/new and many other GSC based machines.
-+      On older 715 machines you'll find the technically identical chip 
-+      called 'Vivace'. Both Harmony and Vicace are supported by this driver.
-+
-+      Copyright 2000 (c) Linuxcare Canada, Alex deVries <alex@linuxcare.com>
-+      Copyright 2000-2002 (c) Helge Deller <deller@gmx.de>
-+      Copyright 2001 (c) Matthieu Delahaye <delahaym@esiee.fr>
-+      Copyright 2001 (c) Jean-Christophe Vaugeois <vaugeoij@esiee.fr>
-+
-+                              
-+TODO:
-+      - fix SNDCTL_DSP_GETOSPACE and SNDCTL_DSP_GETISPACE ioctls to
-+              return the real values
-+      - add private ioctl for selecting line- or microphone input
-+              (only one of them is available at the same time)
-+      - add module parameters
-+      - implement mmap functionality
-+      - implement gain meter ?
-+      - ...
-+*/
-+
-+#include <linux/delay.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/types.h>
-+#include <linux/mm.h>
-+#include <linux/pci.h>
-+
-+#include <asm/gsc.h>
-+#include <asm/io.h>
-+#include <asm/pgalloc.h>
-+
-+#include "sound_config.h"
-+
-+
-+#define PFX "harmony: "
-+#define HARMONY_VERSION "V0.9a"
-+
-+#undef DEBUG
-+#ifdef DEBUG
-+# define DPRINTK printk 
-+#else
-+# define DPRINTK(x,...)
-+#endif
-+
-+
-+#define MAX_BUFS 10           /* maximum number of rotating buffers */
-+#define HARMONY_BUF_SIZE 4096 /* needs to be a multiple of PAGE_SIZE (4096)! */
-+
-+#define CNTL_C                0x80000000
-+#define       CNTL_ST         0x00000020
-+#define CNTL_44100    0x00000015      /* HARMONY_SR_44KHZ */
-+#define CNTL_8000     0x00000008      /* HARMONY_SR_8KHZ */
-+
-+#define GAINCTL_HE    0x08000000
-+#define GAINCTL_LE    0x04000000
-+#define GAINCTL_SE    0x02000000
-+
-+#define DSTATUS_PN    0x00000200
-+#define DSTATUS_RN    0x00000002
-+
-+#define DSTATUS_IE    0x80000000
-+
-+#define HARMONY_DF_16BIT_LINEAR       0
-+#define HARMONY_DF_8BIT_ULAW  1
-+#define HARMONY_DF_8BIT_ALAW  2
-+
-+#define HARMONY_SS_MONO               0
-+#define HARMONY_SS_STEREO     1
-+
-+#define HARMONY_SR_8KHZ               0x08
-+#define HARMONY_SR_16KHZ      0x09
-+#define HARMONY_SR_27KHZ      0x0A
-+#define HARMONY_SR_32KHZ      0x0B
-+#define HARMONY_SR_48KHZ      0x0E
-+#define HARMONY_SR_9KHZ               0x0F
-+#define HARMONY_SR_5KHZ               0x10
-+#define HARMONY_SR_11KHZ      0x11
-+#define HARMONY_SR_18KHZ      0x12
-+#define HARMONY_SR_22KHZ      0x13
-+#define HARMONY_SR_37KHZ      0x14
-+#define HARMONY_SR_44KHZ      0x15
-+#define HARMONY_SR_33KHZ      0x16
-+#define HARMONY_SR_6KHZ               0x17
-+
-+/*
-+ * Some magics numbers used to auto-detect file formats
-+ */
-+
-+#define HARMONY_MAGIC_8B_ULAW 1
-+#define HARMONY_MAGIC_8B_ALAW 27
-+#define HARMONY_MAGIC_16B_LINEAR 3
-+#define HARMONY_MAGIC_MONO    1
-+#define HARMONY_MAGIC_STEREO  2
-+
-+/*
-+ * Channels Positions in mixer register
-+ */
-+
-+#define GAIN_HE_SHIFT   27
-+#define GAIN_HE_MASK    ( 1 << GAIN_HE_SHIFT) 
-+#define GAIN_LE_SHIFT   26
-+#define GAIN_LE_MASK    ( 1 << GAIN_LE_SHIFT) 
-+#define GAIN_SE_SHIFT   25
-+#define GAIN_SE_MASK    ( 1 << GAIN_SE_SHIFT) 
-+#define GAIN_IS_SHIFT   24
-+#define GAIN_IS_MASK    ( 1 << GAIN_IS_SHIFT) 
-+#define GAIN_MA_SHIFT   20
-+#define GAIN_MA_MASK    ( 0x0f << GAIN_MA_SHIFT) 
-+#define GAIN_LI_SHIFT   16
-+#define GAIN_LI_MASK    ( 0x0f << GAIN_LI_SHIFT) 
-+#define GAIN_RI_SHIFT   12
-+#define GAIN_RI_MASK    ( 0x0f << GAIN_RI_SHIFT) 
-+#define GAIN_LO_SHIFT   6
-+#define GAIN_LO_MASK    ( 0x3f << GAIN_LO_SHIFT) 
-+#define GAIN_RO_SHIFT   0
-+#define GAIN_RO_MASK    ( 0x3f << GAIN_RO_SHIFT) 
-+
-+
-+#define MAX_OUTPUT_LEVEL (GAIN_RO_MASK >> GAIN_RO_SHIFT)
-+#define MAX_INPUT_LEVEL  (GAIN_RI_MASK >> GAIN_RI_SHIFT)
-+#define MAX_VOLUME_LEVEL (GAIN_MA_MASK >> GAIN_MA_SHIFT)
-+
-+/*
-+ * Channels Mask in mixer register
-+ */
-+
-+#define GAIN_TOTAL_SILENCE 0x00F00FFF
-+#define GAIN_DEFAULT       0x0FF00000
-+
-+
-+struct harmony_hpa {
-+      u8      unused000;
-+      u8      id;
-+      u8      teleshare_id;
-+      u8      unused003;
-+      u32     reset;
-+      u32     cntl;
-+      u32     gainctl;
-+      u32     pnxtadd;
-+      u32     pcuradd;
-+      u32     rnxtadd;
-+      u32     rcuradd;
-+      u32     dstatus;
-+      u32     ov;
-+      u32     pio;
-+      u32     unused02c;
-+      u32     unused030[3];
-+      u32     diag;
-+};
-+
-+struct harmony_dev {
-+      int irq;
-+      struct harmony_hpa *hpa;
-+      u32 current_gain;
-+      u8 data_format;         /* HARMONY_DF_xx_BIT_xxx */
-+      u8 sample_rate;         /* HARMONY_SR_xx_KHZ */
-+      u8 stereo_select;       /* HARMONY_SS_MONO or HARMONY_SS_STEREO */
-+      int format_initialized;
-+      u32 dac_rate;           /* 8000 ... 48000 (Hz) */
-+      int suspended_playing;
-+      int suspended_recording;
-+      
-+      int blocked_playing;
-+      int blocked_recording;
-+      
-+      wait_queue_head_t wq_play, wq_record;
-+      int first_filled_play;  /* first buffer containing data (next to play) */
-+      int nb_filled_play; 
-+      int play_offset;
-+      int first_filled_record;
-+      int nb_filled_record;
-+              
-+      int audio_open, mixer_open;
-+      int dsp_unit, mixer_unit;
-+
-+      struct pci_dev *fake_pci_dev; /* The fake pci_dev needed for 
-+                                      pci_* functions under ccio. */
-+};
-+
-+
-+static struct harmony_dev harmony;
-+
-+
-+/*
-+ * Dynamic sound buffer allocation and DMA memory
-+ */
-+
-+struct harmony_buffer {
-+      unsigned char *addr;
-+      dma_addr_t dma_handle;
-+      int dma_consistent;     /* Zero if pci_alloc_consistent() fails */
-+      int len;
-+};
-+
-+/*
-+ * Harmony memory buffers
-+ */
-+
-+static struct harmony_buffer played_buf, recorded_buf, silent, graveyard;
-+
-+
-+#define CHECK_WBACK_INV_OFFSET(b,offset,len) \
-+        do { if (!b.dma_consistent) \
-+              dma_cache_wback_inv((unsigned long)b.addr+offset,len); \
-+      } while (0) 
-+
-+      
-+static int __init harmony_alloc_buffer(struct harmony_buffer *b, 
-+              int buffer_count)
-+{
-+      b->len = buffer_count * HARMONY_BUF_SIZE;
-+      b->addr = pci_alloc_consistent(harmony.fake_pci_dev, 
-+                        b->len, &b->dma_handle);
-+      if (b->addr && b->dma_handle) {
-+              b->dma_consistent = 1;
-+              DPRINTK(KERN_INFO PFX "consistent memory: 0x%lx, played_buf: 0x%lx\n",
-+                              (unsigned long)b->dma_handle, (unsigned long)b->addr);
-+      } else {
-+              b->dma_consistent = 0;
-+              /* kmalloc()ed memory will HPMC on ccio machines ! */
-+              b->addr = kmalloc(b->len, GFP_KERNEL);
-+              if (!b->addr) {
-+                      printk(KERN_ERR PFX "couldn't allocate memory\n");
-+                      return -EBUSY;
-+              }
-+              b->dma_handle = __pa(b->addr);
-+      }
-+      return 0;
-+}
-+
-+static void __exit harmony_free_buffer(struct harmony_buffer *b)
-+{
-+      if (!b->addr)
-+              return;
-+
-+      if (b->dma_consistent)
-+              pci_free_consistent(harmony.fake_pci_dev,
-+                              b->len, b->addr, b->dma_handle);
-+      else
-+              kfree(b->addr);
-+
-+      memset(b, 0, sizeof(*b));
-+}
-+
-+
-+
-+/*
-+ * Low-Level sound-chip programming
-+ */
-+
-+static void __inline__ harmony_wait_CNTL(void)
-+{
-+      /* Wait until we're out of control mode */
-+      while (gsc_readl(&harmony.hpa->cntl) & CNTL_C)
-+              /* wait */ ;
-+}
-+
-+
-+static void harmony_update_control(void) 
-+{
-+      u32 default_cntl;
-+      
-+      /* Set CNTL */
-+      default_cntl = (CNTL_C |                /* The C bit */
-+              (harmony.data_format << 6) |    /* Set the data format */
-+              (harmony.stereo_select << 5) |  /* Stereo select */
-+              (harmony.sample_rate));         /* Set sample rate */
-+      harmony.format_initialized = 1;
-+      
-+      /* initialize CNTL */
-+      gsc_writel(default_cntl, &harmony.hpa->cntl);
-+}
-+
-+static void harmony_set_control(u8 data_format, u8 sample_rate, u8 stereo_select) 
-+{
-+      harmony.sample_rate = sample_rate;
-+      harmony.data_format = data_format;
-+      harmony.stereo_select = stereo_select;
-+      harmony_update_control();
-+}
-+
-+static void harmony_set_rate(u8 data_rate) 
-+{
-+      harmony.sample_rate = data_rate;
-+      harmony_update_control();
-+}
-+
-+static int harmony_detect_rate(int *freq)
-+{
-+      int newrate;
-+      switch (*freq) {
-+      case 8000:      newrate = HARMONY_SR_8KHZ;      break;
-+      case 16000:     newrate = HARMONY_SR_16KHZ;     break; 
-+      case 27428:     newrate = HARMONY_SR_27KHZ;     break; 
-+      case 32000:     newrate = HARMONY_SR_32KHZ;     break; 
-+      case 48000:     newrate = HARMONY_SR_48KHZ;     break; 
-+      case 9600:      newrate = HARMONY_SR_9KHZ;      break; 
-+      case 5125:      newrate = HARMONY_SR_5KHZ;      break; 
-+      case 11025:     newrate = HARMONY_SR_11KHZ;     break; 
-+      case 18900:     newrate = HARMONY_SR_18KHZ;     break; 
-+      case 22050:     newrate = HARMONY_SR_22KHZ;     break; 
-+      case 37800:     newrate = HARMONY_SR_37KHZ;     break; 
-+      case 44100:     newrate = HARMONY_SR_44KHZ;     break; 
-+      case 33075:     newrate = HARMONY_SR_33KHZ;     break; 
-+      case 6615:      newrate = HARMONY_SR_6KHZ;      break; 
-+      default:        newrate = HARMONY_SR_8KHZ; 
-+                      *freq = 8000;                   break;
-+      }
-+      return newrate;
-+}
-+
-+static void harmony_set_format(u8 data_format) 
-+{
-+      harmony.data_format = data_format;
-+      harmony_update_control();
-+}
-+
-+static void harmony_set_stereo(u8 stereo_select) 
-+{
-+      harmony.stereo_select = stereo_select;
-+      harmony_update_control();
-+}
-+
-+static void harmony_disable_interrupts(void) 
-+{
-+      harmony_wait_CNTL();
-+      gsc_writel(0, &harmony.hpa->dstatus); 
-+}
-+
-+static void harmony_enable_interrupts(void) 
-+{
-+      harmony_wait_CNTL();
-+      gsc_writel(DSTATUS_IE, &harmony.hpa->dstatus); 
-+}
-+
-+/*
-+ * harmony_silence()
-+ *
-+ * This subroutine fills in a buffer starting at location start and
-+ * silences for length bytes.  This references the current
-+ * configuration of the audio format.
-+ *
-+ */
-+
-+static void harmony_silence(struct harmony_buffer *buffer, int start, int length) 
-+{
-+      u8 silence_char;
-+
-+      /* Despite what you hear, silence is different in
-+         different audio formats.  */
-+      switch (harmony.data_format) {
-+              case HARMONY_DF_8BIT_ULAW:      silence_char = 0x55; break;
-+              case HARMONY_DF_8BIT_ALAW:      silence_char = 0xff; break;
-+              case HARMONY_DF_16BIT_LINEAR:   /* fall through */
-+              default:                        silence_char = 0;
-+      }
-+
-+      memset(buffer->addr+start, silence_char, length);
-+}
-+
-+
-+static int harmony_audio_open(struct inode *inode, struct file *file)
-+{
-+      if (harmony.audio_open) 
-+              return -EBUSY;
-+      
-+      harmony.audio_open++;
-+      harmony.suspended_playing = harmony.suspended_recording = 1;
-+      harmony.blocked_playing   = harmony.blocked_recording   = 0;
-+      harmony.first_filled_play = harmony.first_filled_record = 0;
-+      harmony.nb_filled_play    = harmony.nb_filled_record    = 0;
-+      harmony.play_offset = 0;
-+      init_waitqueue_head(&harmony.wq_play);
-+      init_waitqueue_head(&harmony.wq_record);
-+      
-+      /* Start off in a balanced mode. */
-+      harmony_set_control(HARMONY_DF_8BIT_ULAW, HARMONY_SR_8KHZ, HARMONY_SS_MONO);
-+      harmony_update_control();
-+      harmony.format_initialized = 0;
-+
-+      /* Clear out all the buffers and flush to cache */
-+      harmony_silence(&played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+      CHECK_WBACK_INV_OFFSET(played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+      
-+      return 0;
-+}
-+
-+/*
-+ * Release (close) the audio device.
-+ */
-+
-+static int harmony_audio_release(struct inode *inode, struct file *file)
-+{
-+      if (!harmony.audio_open) 
-+              return -EBUSY;
-+      
-+      harmony.audio_open--;
-+
-+      return 0;
-+}
-+
-+/*
-+ * Read recorded data off the audio device.
-+ */
-+
-+static ssize_t harmony_audio_read(struct file *file,
-+                                char *buffer,
-+                                size_t size_count,
-+                                loff_t *ppos)
-+{
-+      int total_count = (int) size_count;
-+      int count = 0;
-+      int buf_to_read;
-+
-+      while (count<total_count) {
-+              /* Wait until we're out of control mode */
-+              harmony_wait_CNTL();
-+              
-+              /* Figure out which buffer to fill in */
-+              if (harmony.nb_filled_record <= 2) {
-+                      harmony.blocked_recording = 1;
-+                      if (harmony.suspended_recording) {
-+                              harmony.suspended_recording = 0;
-+                              harmony_enable_interrupts();
-+                      }
-+                                                      
-+                      interruptible_sleep_on(&harmony.wq_record);
-+                      harmony.blocked_recording = 0;
-+              }
-+              
-+              if (harmony.nb_filled_record < 2)
-+                      return -EBUSY;
-+              
-+              buf_to_read = harmony.first_filled_record;
-+
-+              /* Copy the page to an aligned buffer */
-+              if (copy_to_user(buffer+count, recorded_buf.addr +
-+                               (HARMONY_BUF_SIZE*buf_to_read),
-+                               HARMONY_BUF_SIZE)) {
-+                      count = -EFAULT;
-+                      break;
-+              }
-+              
-+              harmony.nb_filled_record--;
-+              harmony.first_filled_record++;
-+              harmony.first_filled_record %= MAX_BUFS;
-+                              
-+              count += HARMONY_BUF_SIZE;
-+      }
-+      return count;
-+}
-+
-+
-+
-+
-+/*
-+ * Here is the place where we try to recognize file format.
-+ * Sun/NeXT .au files begin with the string .snd
-+ * At offset 12 is specified the encoding.
-+ * At offset 16 is specified speed rate
-+ * At Offset 20 is specified the numbers of voices
-+ */
-+
-+#define four_bytes_to_u32(start) (file_header[start] << 24)|\
-+                                  (file_header[start+1] << 16)|\
-+                                  (file_header[start+2] << 8)|\
-+                                  (file_header[start+3]);
-+
-+#define test_rate(tested,real_value,harmony_value) if ((tested)<=(real_value))\
-+                                                    
-+
-+static int harmony_format_auto_detect(const char *buffer, int block_size)
-+{
-+      u8 file_header[24];
-+      u32 start_string;
-+      int ret = 0;
-+      
-+      if (block_size>24) {
-+              if (copy_from_user(file_header, buffer, sizeof(file_header)))
-+                      ret = -EFAULT;
-+                      
-+              start_string = four_bytes_to_u32(0);
-+              
-+              if ((file_header[4]==0) && (start_string==0x2E736E64)) {
-+                      u32 format;
-+                      u32 nb_voices;
-+                      u32 speed;
-+                      
-+                      format = four_bytes_to_u32(12);
-+                      nb_voices = four_bytes_to_u32(20);
-+                      speed = four_bytes_to_u32(16);
-+                      
-+                      switch (format) {
-+                      case HARMONY_MAGIC_8B_ULAW:
-+                              harmony.data_format = HARMONY_DF_8BIT_ULAW;
-+                              break;
-+                      case HARMONY_MAGIC_8B_ALAW:
-+                              harmony.data_format = HARMONY_DF_8BIT_ALAW;
-+                              break;
-+                      case HARMONY_MAGIC_16B_LINEAR:
-+                              harmony.data_format = HARMONY_DF_16BIT_LINEAR;
-+                              break;
-+                      default:
-+                              harmony_set_control(HARMONY_DF_16BIT_LINEAR,
-+                                              HARMONY_SR_44KHZ, HARMONY_SS_STEREO);
-+                              goto out;
-+                      }
-+                      switch (nb_voices) {
-+                      case HARMONY_MAGIC_MONO:
-+                              harmony.stereo_select = HARMONY_SS_MONO;
-+                              break;
-+                      case HARMONY_MAGIC_STEREO:
-+                              harmony.stereo_select = HARMONY_SS_STEREO;
-+                              break;
-+                      default:
-+                              harmony.stereo_select = HARMONY_SS_MONO;
-+                              break;
-+                      }
-+                      harmony_set_rate(harmony_detect_rate(&speed));
-+                      harmony.dac_rate = speed;
-+                      goto out;
-+              }
-+      }
-+      harmony_set_control(HARMONY_DF_8BIT_ULAW, HARMONY_SR_8KHZ, HARMONY_SS_MONO);
-+out:
-+      return ret;
-+}
-+#undef four_bytes_to_u32
-+
-+
-+static ssize_t harmony_audio_write(struct file *file,
-+                                 const char *buffer,
-+                                 size_t size_count,
-+                                 loff_t *ppos)
-+{
-+      int total_count = (int) size_count;
-+      int count = 0;
-+      int frame_size;
-+      int buf_to_fill;
-+
-+      if (!harmony.format_initialized) {
-+              if (harmony_format_auto_detect(buffer, total_count))
-+                      return -EFAULT;
-+      }
-+      
-+      while (count<total_count) {
-+              /* Wait until we're out of control mode */
-+              harmony_wait_CNTL();
-+
-+              /* Figure out which buffer to fill in */
-+              if (harmony.nb_filled_play+2 >= MAX_BUFS && !harmony.play_offset) {
-+                      harmony.blocked_playing = 1;
-+                      interruptible_sleep_on(&harmony.wq_play);
-+                      harmony.blocked_playing = 0;
-+              }
-+              if (harmony.nb_filled_play+2 >= MAX_BUFS && !harmony.play_offset)
-+                      return -EBUSY;
-+              
-+              
-+              buf_to_fill = (harmony.first_filled_play+harmony.nb_filled_play); 
-+              if (harmony.play_offset)
-+                      buf_to_fill--;
-+              buf_to_fill %= MAX_BUFS;
-+
-+              /* Figure out the size of the frame */
-+              if ((total_count-count) > HARMONY_BUF_SIZE - harmony.play_offset) {
-+                      frame_size = HARMONY_BUF_SIZE - harmony.play_offset;
-+              } else {
-+                      frame_size = total_count - count;
-+                      /* Clear out the buffer, since there we'll only be 
-+                         overlaying part of the old buffer with the new one */
-+                      harmony_silence(&played_buf, 
-+                              HARMONY_BUF_SIZE*buf_to_fill+frame_size+harmony.play_offset,
-+                              HARMONY_BUF_SIZE-frame_size-harmony.play_offset);
-+              }
-+
-+              /* Copy the page to an aligned buffer */
-+              if (copy_from_user(played_buf.addr +(HARMONY_BUF_SIZE*buf_to_fill) + harmony.play_offset, 
-+                                 buffer+count, frame_size))
-+                      return -EFAULT;
-+              CHECK_WBACK_INV_OFFSET(played_buf, (HARMONY_BUF_SIZE*buf_to_fill + harmony.play_offset), 
-+                              frame_size);
-+      
-+              if (!harmony.play_offset)
-+                      harmony.nb_filled_play++;
-+              
-+              count += frame_size;
-+              harmony.play_offset += frame_size;
-+              harmony.play_offset %= HARMONY_BUF_SIZE;
-+              if (harmony.suspended_playing && (harmony.nb_filled_play>=4))
-+                      harmony_enable_interrupts();
-+      }
-+      
-+      return count;
-+}
-+
-+static unsigned int harmony_audio_poll(struct file *file,
-+                                     struct poll_table_struct *wait)
-+{
-+      unsigned int mask = 0;
-+      
-+      if (file->f_mode & FMODE_READ) {
-+              if (!harmony.suspended_recording)
-+                      poll_wait(file, &harmony.wq_record, wait);
-+              if (harmony.nb_filled_record)
-+                      mask |= POLLIN | POLLRDNORM;
-+      }
-+
-+      if (file->f_mode & FMODE_WRITE) {
-+              if (!harmony.suspended_playing)
-+                      poll_wait(file, &harmony.wq_play, wait);
-+              if (harmony.nb_filled_play)
-+                      mask |= POLLOUT | POLLWRNORM;
-+      }
-+
-+      return mask;
-+}
-+
-+static int harmony_audio_ioctl(struct inode *inode,
-+                                struct file *file,
-+                              unsigned int cmd,
-+                                unsigned long arg)
-+{
-+      int ival, new_format;
-+      int frag_size, frag_buf;
-+      struct audio_buf_info info;
-+      
-+      switch (cmd) {
-+      case OSS_GETVERSION:
-+              return put_user(SOUND_VERSION, (int *) arg);
-+
-+      case SNDCTL_DSP_GETCAPS:
-+              ival = DSP_CAP_DUPLEX;
-+              return put_user(ival, (int *) arg);
-+
-+      case SNDCTL_DSP_GETFMTS:
-+              ival = (AFMT_S16_BE | AFMT_MU_LAW | AFMT_A_LAW ); 
-+              return put_user(ival, (int *) arg);
-+      
-+      case SNDCTL_DSP_SETFMT:
-+              if (get_user(ival, (int *) arg)) 
-+                      return -EFAULT;
-+              if (ival != AFMT_QUERY) {
-+                      switch (ival) {
-+                      case AFMT_MU_LAW:       new_format = HARMONY_DF_8BIT_ULAW; break;
-+                      case AFMT_A_LAW:        new_format = HARMONY_DF_8BIT_ALAW; break;
-+                      case AFMT_S16_LE:       /* fall through, but not really supported */
-+                      case AFMT_S16_BE:       new_format = HARMONY_DF_16BIT_LINEAR;
-+                                              ival = AFMT_S16_BE;
-+                                              break; 
-+                      default: {
-+                              DPRINTK(KERN_WARNING PFX 
-+                                      "unsupported sound format 0x%04x requested.\n",
-+                                      ival);
-+                              return -EINVAL;
-+                      }
-+                      }
-+                      harmony_set_format(new_format);
-+              } else {
-+                      switch (harmony.data_format) {
-+                      case HARMONY_DF_8BIT_ULAW:      ival = AFMT_MU_LAW; break;
-+                      case HARMONY_DF_8BIT_ALAW:      ival = AFMT_A_LAW;  break;
-+                      case HARMONY_DF_16BIT_LINEAR:   ival = AFMT_U16_BE; break;
-+                      default: ival = 0;
-+                      }
-+              }
-+              return put_user(ival, (int *) arg);
-+
-+      case SOUND_PCM_READ_RATE:
-+              ival = harmony.dac_rate;
-+              return put_user(ival, (int *) arg);
-+
-+      case SNDCTL_DSP_SPEED:
-+              if (get_user(ival, (int *) arg))
-+                      return -EFAULT;
-+              harmony_set_rate(harmony_detect_rate(&ival));
-+              harmony.dac_rate = ival;
-+              return put_user(ival, (int*) arg);
-+
-+      case SNDCTL_DSP_STEREO:
-+              if (get_user(ival, (int *) arg))
-+                      return -EFAULT;
-+              if (ival != 0 && ival != 1)
-+                      return -EINVAL;
-+              harmony_set_stereo(ival);
-+              return put_user(ival, (int *) arg);
-+
-+      case SNDCTL_DSP_GETBLKSIZE:
-+              ival = HARMONY_BUF_SIZE;
-+              return put_user(ival, (int *) arg);
-+              
-+        case SNDCTL_DSP_NONBLOCK:
-+                file->f_flags |= O_NONBLOCK;
-+                return 0;
-+
-+        case SNDCTL_DSP_RESET:
-+              if (!harmony.suspended_recording) {
-+                      /* TODO: stop_recording() */
-+              }
-+              return 0;
-+
-+      case SNDCTL_DSP_SETFRAGMENT:
-+              if (get_user(ival, (int *)arg))
-+                      return -EFAULT;
-+              frag_size = ival & 0xffff;
-+              frag_buf = (ival>>16) & 0xffff;
-+              /* TODO: We use hardcoded fragment sizes and numbers for now */
-+              frag_size = 12;  /* 4096 == 2^12 */
-+              frag_buf  = MAX_BUFS;
-+              ival = (frag_buf << 16) + frag_size;
-+              return put_user(ival, (int *) arg);
-+              
-+      case SNDCTL_DSP_GETOSPACE:
-+              if (!(file->f_mode & FMODE_WRITE))
-+                      return -EINVAL;
-+              info.fragstotal = MAX_BUFS;
-+                info.fragments = MAX_BUFS - harmony.nb_filled_play;
-+              info.fragsize = HARMONY_BUF_SIZE;
-+                info.bytes = info.fragments * info.fragsize;
-+              return copy_to_user((void *)arg, &info, sizeof(info));
-+
-+      case SNDCTL_DSP_GETISPACE:
-+              if (!(file->f_mode & FMODE_READ))
-+                      return -EINVAL;
-+              info.fragstotal = MAX_BUFS;
-+                info.fragments = /*MAX_BUFS-*/ harmony.nb_filled_record;
-+              info.fragsize = HARMONY_BUF_SIZE;
-+                info.bytes = info.fragments * info.fragsize;
-+              return copy_to_user((void *)arg, &info, sizeof(info));
-+      
-+      case SNDCTL_DSP_SYNC:
-+              return 0;
-+      }
-+      
-+      return -EINVAL;
-+}
-+
-+
-+/*
-+ * harmony_interrupt()
-+ *
-+ * harmony interruption service routine
-+ * 
-+ */
-+
-+static irqreturn_t harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
-+{
-+      u32 dstatus;
-+      struct harmony_hpa *hpa;
-+
-+      /* Setup the hpa */
-+      hpa = ((struct harmony_dev *)dev)->hpa;
-+      harmony_wait_CNTL();
-+
-+      /* Read dstatus and pcuradd (the current address) */
-+      dstatus = gsc_readl(&hpa->dstatus);
-+      
-+      /* Turn off interrupts */
-+      harmony_disable_interrupts();
-+      
-+      /* Check if this is a request to get the next play buffer */
-+      if (dstatus & DSTATUS_PN) {
-+              if (!harmony.nb_filled_play) {
-+                      harmony.suspended_playing = 1;
-+                      gsc_writel((unsigned long)silent.dma_handle, &hpa->pnxtadd);
-+                                              
-+                      if (!harmony.suspended_recording)
-+                              harmony_enable_interrupts();
-+              } else {
-+                      harmony.suspended_playing = 0;
-+                      gsc_writel((unsigned long)played_buf.dma_handle + 
-+                                      (HARMONY_BUF_SIZE*harmony.first_filled_play),
-+                                      &hpa->pnxtadd);
-+                      harmony.first_filled_play++;
-+                      harmony.first_filled_play %= MAX_BUFS;
-+                      harmony.nb_filled_play--;
-+                      
-+                      harmony_enable_interrupts();
-+              }
-+              
-+              if (harmony.blocked_playing)
-+                      wake_up_interruptible(&harmony.wq_play);
-+      }
-+      
-+      /* Check if we're being asked to fill in a recording buffer */
-+      if (dstatus & DSTATUS_RN) {
-+              if((harmony.nb_filled_record+2>=MAX_BUFS) || harmony.suspended_recording)
-+              {
-+                      harmony.nb_filled_record = 0;
-+                      harmony.first_filled_record = 0;
-+                      harmony.suspended_recording = 1;
-+                      gsc_writel((unsigned long)graveyard.dma_handle, &hpa->rnxtadd);
-+                      if (!harmony.suspended_playing)
-+                              harmony_enable_interrupts();
-+              } else {
-+                      int buf_to_fill;
-+                      buf_to_fill = (harmony.first_filled_record+harmony.nb_filled_record) % MAX_BUFS;
-+                      CHECK_WBACK_INV_OFFSET(recorded_buf, HARMONY_BUF_SIZE*buf_to_fill, HARMONY_BUF_SIZE);
-+                      gsc_writel((unsigned long)recorded_buf.dma_handle +
-+                                      HARMONY_BUF_SIZE*buf_to_fill,
-+                                      &hpa->rnxtadd);
-+                      harmony.nb_filled_record++;
-+                      harmony_enable_interrupts();
-+              }
-+
-+              if (harmony.blocked_recording && harmony.nb_filled_record>3)
-+                      wake_up_interruptible(&harmony.wq_record);
-+      }
-+      return IRQ_HANDLED;
-+}
-+
-+/*
-+ * Sound playing functions
-+ */
-+
-+static struct file_operations harmony_audio_fops = {
-+      owner:  THIS_MODULE,
-+      llseek: no_llseek,
-+      read:   harmony_audio_read,
-+      write:  harmony_audio_write,
-+      poll:   harmony_audio_poll,
-+      ioctl:  harmony_audio_ioctl,
-+      open:   harmony_audio_open,
-+      release:harmony_audio_release,
-+};
-+
-+static int harmony_audio_init(void)
-+{
-+      /* Request that IRQ */
-+      if (request_irq(harmony.irq, harmony_interrupt, 0 ,"harmony", &harmony)) {
-+              printk(KERN_ERR PFX "Error requesting irq %d.\n", harmony.irq);
-+              return -EFAULT;
-+      }
-+
-+      harmony.dsp_unit = register_sound_dsp(&harmony_audio_fops, -1);
-+      if (harmony.dsp_unit < 0) {
-+              printk(KERN_ERR PFX "Error registering dsp\n");
-+              free_irq(harmony.irq, &harmony);
-+              return -EFAULT;
-+      }
-+      
-+      /* Clear the buffers so you don't end up with crap in the buffers. */ 
-+      harmony_silence(&played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+
-+      /* Make sure this makes it to cache */
-+      CHECK_WBACK_INV_OFFSET(played_buf, 0, HARMONY_BUF_SIZE*MAX_BUFS);
-+
-+      /* Clear out the silent buffer and flush to cache */
-+      harmony_silence(&silent, 0, HARMONY_BUF_SIZE);
-+      CHECK_WBACK_INV_OFFSET(silent, 0, HARMONY_BUF_SIZE);
-+      
-+      harmony.audio_open = 0;
-+      
-+      return 0;
-+}
-+
-+
-+/*
-+ * mixer functions 
-+ */
-+
-+static void harmony_mixer_set_gain(void)
-+{
-+      harmony_wait_CNTL();
-+      gsc_writel(harmony.current_gain, &harmony.hpa->gainctl);
-+}
-+
-+/* 
-+ *  Read gain of selected channel.
-+ *  The OSS rate is from 0 (silent) to 100 -> need some conversions
-+ *
-+ *  The harmony gain are attenuation for output and monitor gain.
-+ *                   is amplifaction for input gain
-+ */
-+#define to_harmony_level(level,max) ((level)*max/100)
-+#define to_oss_level(level,max) ((level)*100/max)
-+
-+static int harmony_mixer_get_level(int channel)
-+{
-+      int left_level;
-+      int right_level;
-+
-+      switch (channel) {
-+              case SOUND_MIXER_OGAIN:
-+                      left_level  = (harmony.current_gain & GAIN_LO_MASK) >> GAIN_LO_SHIFT;
-+                      right_level = (harmony.current_gain & GAIN_RO_MASK) >> GAIN_RO_SHIFT;
-+                      left_level  = to_oss_level(MAX_OUTPUT_LEVEL - left_level, MAX_OUTPUT_LEVEL);
-+                      right_level = to_oss_level(MAX_OUTPUT_LEVEL - right_level, MAX_OUTPUT_LEVEL);
-+                      return (right_level << 8)+left_level;
-+                      
-+              case SOUND_MIXER_IGAIN:
-+                      left_level = (harmony.current_gain & GAIN_LI_MASK) >> GAIN_LI_SHIFT;
-+                      right_level= (harmony.current_gain & GAIN_RI_MASK) >> GAIN_RI_SHIFT;
-+                      left_level = to_oss_level(left_level, MAX_INPUT_LEVEL);
-+                      right_level= to_oss_level(right_level, MAX_INPUT_LEVEL);
-+                      return (right_level << 8)+left_level;
-+                      
-+              case SOUND_MIXER_VOLUME:
-+                      left_level = (harmony.current_gain & GAIN_MA_MASK) >> GAIN_MA_SHIFT;
-+                      left_level = to_oss_level(MAX_VOLUME_LEVEL-left_level, MAX_VOLUME_LEVEL);
-+                      return left_level;
-+      }
-+      return -EINVAL;
-+}
-+
-+
-+
-+/*
-+ * Some conversions for the same reasons.
-+ * We give back the new real value(s) due to
-+ * the rescale.
-+ */
-+
-+static int harmony_mixer_set_level(int channel, int value)
-+{
-+      int left_level;
-+      int right_level;
-+      int new_left_level;
-+      int new_right_level;
-+
-+      right_level = (value & 0x0000ff00) >> 8;
-+      left_level = value & 0x000000ff;
-+  
-+      switch (channel) {
-+              case SOUND_MIXER_OGAIN:
-+                      right_level = to_harmony_level(100-right_level, MAX_OUTPUT_LEVEL);
-+                      left_level  = to_harmony_level(100-left_level, MAX_OUTPUT_LEVEL);
-+                      new_right_level = to_oss_level(MAX_OUTPUT_LEVEL - right_level, MAX_OUTPUT_LEVEL);
-+                      new_left_level  = to_oss_level(MAX_OUTPUT_LEVEL - left_level, MAX_OUTPUT_LEVEL);
-+                      harmony.current_gain = (harmony.current_gain & ~(GAIN_LO_MASK | GAIN_RO_MASK)) 
-+                                      | (left_level << GAIN_LO_SHIFT) | (right_level << GAIN_RO_SHIFT);
-+                      harmony_mixer_set_gain();
-+                      return (new_right_level << 8) + new_left_level;
-+                      
-+              case SOUND_MIXER_IGAIN:
-+                      right_level = to_harmony_level(right_level, MAX_INPUT_LEVEL);
-+                      left_level  = to_harmony_level(left_level, MAX_INPUT_LEVEL);
-+                      new_right_level = to_oss_level(right_level, MAX_INPUT_LEVEL);
-+                      new_left_level  = to_oss_level(left_level, MAX_INPUT_LEVEL);
-+                      harmony.current_gain = (harmony.current_gain & ~(GAIN_LI_MASK | GAIN_RI_MASK))
-+                                      | (left_level << GAIN_LI_SHIFT) | (right_level << GAIN_RI_SHIFT);
-+                      harmony_mixer_set_gain();
-+                      return (new_right_level << 8) + new_left_level;
-+      
-+              case SOUND_MIXER_VOLUME:
-+                      left_level = to_harmony_level(100-left_level, MAX_VOLUME_LEVEL);
-+                      new_left_level = to_oss_level(MAX_VOLUME_LEVEL-left_level, MAX_VOLUME_LEVEL);
-+                      harmony.current_gain = (harmony.current_gain & ~GAIN_MA_MASK)| (left_level << GAIN_MA_SHIFT);
-+                      harmony_mixer_set_gain();
-+                      return new_left_level;
-+      }
-+
-+      return -EINVAL;
-+}
-+
-+#undef to_harmony_level
-+#undef to_oss_level
-+
-+/* 
-+ * Return the selected input device (mic or line)
-+ */
-+
-+static int harmony_mixer_get_recmask(void) 
-+{
-+      int current_input_line;
-+      
-+      current_input_line = (harmony.current_gain & GAIN_IS_MASK) 
-+                                  >> GAIN_IS_SHIFT;
-+      if (current_input_line) 
-+              return SOUND_MASK_MIC;
-+
-+      return SOUND_MASK_LINE;
-+}
-+
-+/*
-+ * Set the input (only one at time, arbitrary priority to line in)
-+ */
-+
-+static int harmony_mixer_set_recmask(int recmask)
-+{
-+      int new_input_line;
-+      int new_input_mask;
-+
-+      if ((recmask & SOUND_MASK_LINE)) {
-+              new_input_line = 0;
-+              new_input_mask = SOUND_MASK_LINE;
-+      } else  {
-+              new_input_line = 1;
-+              new_input_mask = SOUND_MASK_MIC;
-+      }
-+      harmony.current_gain = ((harmony.current_gain & ~GAIN_IS_MASK) | 
-+                              (new_input_line << GAIN_IS_SHIFT ));
-+      harmony_mixer_set_gain();
-+      return new_input_mask;
-+}
-+
-+
-+/* 
-+ * give the active outlines
-+ */
-+
-+static int harmony_mixer_get_outmask(void)
-+{
-+      int outmask = 0;
-+      
-+      if (harmony.current_gain & GAIN_HE_MASK) outmask |=SOUND_MASK_PHONEOUT;
-+      if (harmony.current_gain & GAIN_LE_MASK) outmask |=SOUND_MASK_LINE;
-+      if (harmony.current_gain & GAIN_SE_MASK) outmask |=SOUND_MASK_SPEAKER;
-+      
-+      return outmask;
-+}
-+
-+
-+static int harmony_mixer_set_outmask(int outmask)
-+{
-+      if (outmask & SOUND_MASK_PHONEOUT) 
-+              harmony.current_gain |= GAIN_HE_MASK; 
-+      else 
-+              harmony.current_gain &= ~GAIN_HE_MASK;
-+      
-+      if (outmask & SOUND_MASK_LINE) 
-+              harmony.current_gain |= GAIN_LE_MASK;
-+      else 
-+              harmony.current_gain &= ~GAIN_LE_MASK;
-+      
-+      if (outmask & SOUND_MASK_SPEAKER) 
-+              harmony.current_gain |= GAIN_SE_MASK;
-+      else 
-+              harmony.current_gain &= ~GAIN_SE_MASK;
-+      
-+      harmony_mixer_set_gain();
-+
-+      return (outmask & (SOUND_MASK_PHONEOUT | SOUND_MASK_LINE | SOUND_MASK_SPEAKER));
-+}
-+
-+/*
-+ * This code is inspired from sb_mixer.c
-+ */
-+
-+static int harmony_mixer_ioctl(struct inode * inode, struct file * file,
-+              unsigned int cmd, unsigned long arg)
-+{
-+      int val;
-+      int ret;
-+
-+      if (cmd == SOUND_MIXER_INFO) {
-+              mixer_info info;
-+              memset(&info, 0, sizeof(info));
-+                strncpy(info.id, "harmony", sizeof(info.id)-1);
-+                strncpy(info.name, "Harmony audio", sizeof(info.name)-1);
-+                info.modify_counter = 1; /* ? */
-+                if (copy_to_user((void *)arg, &info, sizeof(info)))
-+                        return -EFAULT;
-+              return 0;
-+      }
-+      
-+      if (cmd == OSS_GETVERSION)
-+              return put_user(SOUND_VERSION, (int *)arg);
-+
-+      /* read */
-+      val = 0;
-+      if (_SIOC_DIR(cmd) & _SIOC_WRITE)
-+              if (get_user(val, (int *)arg))
-+                      return -EFAULT;
-+
-+      switch (cmd) {
-+      case MIXER_READ(SOUND_MIXER_CAPS):
-+              ret = SOUND_CAP_EXCL_INPUT;
-+              break;
-+      case MIXER_READ(SOUND_MIXER_STEREODEVS):
-+              ret = SOUND_MASK_IGAIN | SOUND_MASK_OGAIN;
-+              break;
-+              
-+      case MIXER_READ(SOUND_MIXER_RECMASK):
-+              ret = SOUND_MASK_MIC | SOUND_MASK_LINE;
-+              break;
-+      case MIXER_READ(SOUND_MIXER_DEVMASK):
-+              ret = SOUND_MASK_OGAIN | SOUND_MASK_IGAIN |
-+                      SOUND_MASK_VOLUME;
-+              break;
-+      case MIXER_READ(SOUND_MIXER_OUTMASK):
-+              ret = SOUND_MASK_SPEAKER | SOUND_MASK_LINE |
-+                      SOUND_MASK_PHONEOUT;
-+              break;
-+              
-+      case MIXER_WRITE(SOUND_MIXER_RECSRC):
-+              ret = harmony_mixer_set_recmask(val);
-+              break;
-+      case MIXER_READ(SOUND_MIXER_RECSRC):
-+              ret = harmony_mixer_get_recmask();
-+              break;
-+            
-+      case MIXER_WRITE(SOUND_MIXER_OUTSRC):
-+              ret = harmony_mixer_set_outmask(val);
-+              break;
-+      case MIXER_READ(SOUND_MIXER_OUTSRC):
-+              ret = harmony_mixer_get_outmask();
-+              break;
-+      
-+      case MIXER_WRITE(SOUND_MIXER_OGAIN):
-+      case MIXER_WRITE(SOUND_MIXER_IGAIN):
-+      case MIXER_WRITE(SOUND_MIXER_VOLUME):
-+              ret = harmony_mixer_set_level(cmd & 0xff, val);
-+              break;
-+
-+      case MIXER_READ(SOUND_MIXER_OGAIN):
-+      case MIXER_READ(SOUND_MIXER_IGAIN):
-+      case MIXER_READ(SOUND_MIXER_VOLUME):
-+              ret = harmony_mixer_get_level(cmd & 0xff);
-+              break;
-+
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      if (put_user(ret, (int *)arg))
-+              return -EFAULT;
-+      return 0;
-+}
-+
-+
-+static int harmony_mixer_open(struct inode *inode, struct file *file)
-+{
-+      if (harmony.mixer_open) 
-+              return -EBUSY;
-+      harmony.mixer_open++;
-+      return 0;
-+}
-+
-+static int harmony_mixer_release(struct inode *inode, struct file *file)
-+{
-+      if (!harmony.mixer_open) 
-+              return -EBUSY;
-+      harmony.mixer_open--;
-+      return 0;
-+}
-+
-+static struct file_operations harmony_mixer_fops = {
-+      owner:          THIS_MODULE,
-+      llseek:         no_llseek,
-+      open:           harmony_mixer_open,
-+      release:        harmony_mixer_release,
-+      ioctl:          harmony_mixer_ioctl,
-+};
-+
-+
-+/*
-+ * Mute all the output and reset Harmony.
-+ */
-+
-+static void __init harmony_mixer_reset(void)
-+{
-+      harmony.current_gain = GAIN_TOTAL_SILENCE;
-+      harmony_mixer_set_gain();
-+      harmony_wait_CNTL();
-+      gsc_writel(1, &harmony.hpa->reset);
-+      mdelay(50);             /* wait 50 ms */
-+      gsc_writel(0, &harmony.hpa->reset);
-+      harmony.current_gain = GAIN_DEFAULT;
-+      harmony_mixer_set_gain();
-+}
-+
-+static int __init harmony_mixer_init(void)
-+{
-+      /* Register the device file operations */
-+      harmony.mixer_unit = register_sound_mixer(&harmony_mixer_fops, -1);
-+      if (harmony.mixer_unit < 0) {
-+              printk(KERN_WARNING PFX "Error Registering Mixer Driver\n");
-+              return -EFAULT;
-+      }
-+  
-+      harmony_mixer_reset();
-+      harmony.mixer_open = 0;
-+      
-+      return 0;
-+}
-+
-+
-+
-+/* 
-+ * This is the callback that's called by the inventory hardware code 
-+ * if it finds a match to the registered driver. 
-+ */
-+static int __init
-+harmony_driver_callback(struct parisc_device *dev)
-+{
-+      u8      id;
-+      u8      rev;
-+      u32     cntl;
-+      int     ret;
-+
-+      if (harmony.hpa) {
-+              /* We only support one Harmony at this time */
-+              printk(KERN_ERR PFX "driver already registered\n");
-+              return -EBUSY;
-+      }
-+
-+      /* Set the HPA of harmony */
-+      harmony.hpa = (struct harmony_hpa *)dev->hpa;
-+
-+      harmony.irq = dev->irq;
-+      if (!harmony.irq) {
-+              printk(KERN_ERR PFX "no irq found\n");
-+              return -ENODEV;
-+      }
-+
-+      /* Grab the ID and revision from the device */
-+      id = gsc_readb(&harmony.hpa->id);
-+      if ((id | 1) != 0x15) {
-+              printk(KERN_WARNING PFX "wrong harmony id 0x%02x\n", id);
-+              return -EBUSY;
-+      }
-+      cntl = gsc_readl(&harmony.hpa->cntl);
-+      rev = (cntl>>20) & 0xff;
-+
-+      printk(KERN_INFO "Lasi Harmony Audio driver " HARMONY_VERSION ", "
-+                      "h/w id %i, rev. %i at 0x%lx, IRQ %i\n",
-+                      id, rev, dev->hpa, harmony.irq);
-+      
-+      /* Make sure the control bit isn't set, although I don't think it 
-+         ever is. */
-+      if (cntl & CNTL_C) {
-+              printk(KERN_WARNING PFX "CNTL busy\n");
-+              harmony.hpa = 0;
-+              return -EBUSY;
-+      }
-+
-+      /* a fake pci_dev is needed for pci_* functions under ccio */
-+      harmony.fake_pci_dev = ccio_get_fake(dev);
-+      
-+      /* Initialize the memory buffers */
-+      if (harmony_alloc_buffer(&played_buf, MAX_BUFS) || 
-+          harmony_alloc_buffer(&recorded_buf, MAX_BUFS) ||
-+          harmony_alloc_buffer(&graveyard, 1) ||
-+          harmony_alloc_buffer(&silent, 1)) {
-+              ret = -EBUSY;
-+              goto out_err;
-+      }
-+
-+      /* Initialize /dev/mixer and /dev/audio  */
-+      if ((ret=harmony_mixer_init())) 
-+              goto out_err;
-+      if ((ret=harmony_audio_init())) 
-+              goto out_err;
-+
-+      return 0;
-+
-+out_err:
-+      harmony.hpa = 0;
-+      harmony_free_buffer(&played_buf);
-+      harmony_free_buffer(&recorded_buf);
-+      harmony_free_buffer(&graveyard);
-+      harmony_free_buffer(&silent);
-+      return ret;
-+}
-+
-+
-+static struct parisc_device_id harmony_tbl[] = {
-+ /* { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007A }, Bushmaster/Flounder */
-+ { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007B }, /* 712/715 Audio */
-+ { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007E }, /* Pace Audio */
-+ { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007F }, /* Outfield / Coral II */
-+ { 0, }
-+};
-+
-+MODULE_DEVICE_TABLE(parisc, harmony_tbl);
-+
-+static struct parisc_driver harmony_driver = {
-+      name:           "Lasi Harmony",
-+      id_table:       harmony_tbl,
-+      probe:          harmony_driver_callback,
-+};
-+
-+static int __init init_harmony(void)
-+{
-+      return register_parisc_driver(&harmony_driver);
-+}
-+
-+static void __exit cleanup_harmony(void)
-+{
-+      free_irq(harmony.irq, &harmony);
-+      unregister_sound_mixer(harmony.mixer_unit);
-+      unregister_sound_dsp(harmony.dsp_unit);
-+      harmony_free_buffer(&played_buf);
-+      harmony_free_buffer(&recorded_buf);
-+      harmony_free_buffer(&graveyard);
-+      harmony_free_buffer(&silent);
-+      unregister_parisc_driver(&harmony_driver);
-+}
-+
-+EXPORT_NO_SYMBOLS;
-+
-+MODULE_AUTHOR("Alex DeVries <alex@linuxcare.com>");
-+MODULE_DESCRIPTION("Harmony sound driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(init_harmony);
-+module_exit(cleanup_harmony);
-+
---- /dev/null  2002-08-30 16:31:37.000000000 -0700
-+++ 25/sound/oss/kahlua.c      2003-07-19 17:03:51.000000000 -0700
-@@ -0,0 +1,227 @@
-+/*
-+ *    Initialisation code for Cyrix/NatSemi VSA1 softaudio
-+ *
-+ *    (C) Copyright 2003 Red Hat Inc <alan@redhat.com>
-+ *
-+ * XpressAudio(tm) is used on the Cyrix MediaGX (now NatSemi Geode) systems.
-+ * The older version (VSA1) provides fairly good soundblaster emulation
-+ * although there are a couple of bugs: large DMA buffers break record,
-+ * and the MPU event handling seems suspect. VSA2 allows the native driver
-+ * to control the AC97 audio engine directly and requires a different driver.
-+ *
-+ * Thanks to National Semiconductor for providing the needed information
-+ * on the XpressAudio(tm) internals.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * General Public License for more details.
-+ *
-+ * TO DO:
-+ *    Investigate whether we can portably support Cognac (5520) in the
-+ *    same manner.
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+
-+#include "sound_config.h"
-+
-+#include "sb.h"
-+
-+/*
-+ *    Read a soundblaster compatible mixer register.
-+ *    In this case we are actually reading an SMI trap
-+ *    not real hardware.
-+ */
-+
-+static u8 __devinit mixer_read(unsigned long io, u8 reg)
-+{
-+      outb(reg, io + 4);
-+      udelay(20);
-+      reg = inb(io + 5);
-+      udelay(20);
-+      return reg;
-+}
-+
-+static int __devinit probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+      struct address_info *hw_config;
-+      unsigned long base;
-+      void *mem;
-+      unsigned long io;
-+      u16 map;
-+      u8 irq, dma8, dma16;
-+      int oldquiet;
-+      extern int sb_be_quiet;
-+              
-+      base = pci_resource_start(pdev, 0);
-+      if(base == 0UL)
-+              return 1;
-+      
-+      mem = ioremap(base, 128);
-+      if(mem == 0UL)
-+              return 1;
-+      map = readw(mem + 0x18);        /* Read the SMI enables */
-+      iounmap(mem);
-+      
-+      /* Map bits
-+              0:1     * 0x20 + 0x200 = sb base
-+              2       sb enable
-+              3       adlib enable
-+              5       MPU enable 0x330
-+              6       MPU enable 0x300
-+              
-+         The other bits may be used internally so must be masked */
-+
-+      io = 0x220 + 0x20 * (map & 3);     
-+      
-+      if(map & (1<<2))
-+              printk(KERN_INFO "kahlua: XpressAudio at 0x%lx\n", io);
-+      else
-+              return 1;
-+              
-+      if(map & (1<<5))
-+              printk(KERN_INFO "kahlua: MPU at 0x300\n");
-+      else if(map & (1<<6))
-+              printk(KERN_INFO "kahlua: MPU at 0x330\n");
-+      
-+      irq = mixer_read(io, 0x80) & 0x0F;
-+      dma8 = mixer_read(io, 0x81);
-+
-+      // printk("IRQ=%x MAP=%x DMA=%x\n", irq, map, dma8);
-+      
-+      if(dma8 & 0x20)
-+              dma16 = 5;
-+      else if(dma8 & 0x40)
-+              dma16 = 6;
-+      else if(dma8 & 0x80)
-+              dma16 = 7;
-+      else
-+      {
-+              printk(KERN_ERR "kahlua: No 16bit DMA enabled.\n");
-+              return 1;
-+      }
-+              
-+      if(dma8 & 0x01)
-+              dma8 = 0;
-+      else if(dma8 & 0x02)
-+              dma8 = 1;
-+      else if(dma8 & 0x08)
-+              dma8 = 3;
-+      else
-+      {
-+              printk(KERN_ERR "kahlua: No 8bit DMA enabled.\n");
-+              return 1;
-+      }
-+      
-+      if(irq & 1)
-+              irq = 9;
-+      else if(irq & 2)
-+              irq = 5;
-+      else if(irq & 4)
-+              irq = 7;
-+      else if(irq & 8)
-+              irq = 10;
-+      else
-+      {
-+              printk(KERN_ERR "kahlua: SB IRQ not set.\n");
-+              return 1;
-+      }
-+      
-+      printk(KERN_INFO "kahlua: XpressAudio on IRQ %d, DMA %d, %d\n",
-+              irq, dma8, dma16);
-+      
-+      hw_config = kmalloc(sizeof(struct address_info), GFP_KERNEL);
-+      if(hw_config == NULL)
-+      {
-+              printk(KERN_ERR "kahlua: out of memory.\n");
-+              return 1;
-+      }
-+      memset(hw_config, 0, sizeof(*hw_config));
-+      
-+      pci_set_drvdata(pdev, hw_config);
-+      
-+      hw_config->io_base = io;
-+      hw_config->irq = irq;
-+      hw_config->dma = dma8;
-+      hw_config->dma2 = dma16;
-+      hw_config->name = "Cyrix XpressAudio";
-+      hw_config->driver_use_1 = SB_NO_MIDI | SB_PCI_IRQ;
-+      
-+      if(sb_dsp_detect(hw_config, 0, 0, NULL)==0)
-+      {
-+              printk(KERN_ERR "kahlua: audio not responding.\n");
-+              goto err_out_free;
-+      }
-+
-+      oldquiet = sb_be_quiet; 
-+      sb_be_quiet = 1;
-+      if(sb_dsp_init(hw_config, THIS_MODULE))
-+      {
-+              sb_be_quiet = oldquiet;
-+              goto err_out_free;
-+      }
-+      sb_be_quiet = oldquiet;
-+      
-+      return 0;
-+
-+err_out_free:
-+      pci_set_drvdata(pdev, NULL);
-+      kfree(hw_config);
-+      return 1;
-+}
-+
-+static void __devexit remove_one(struct pci_dev *pdev)
-+{
-+      struct address_info *hw_config = pci_get_drvdata(pdev);
-+      sb_dsp_unload(hw_config, 0);
-+      pci_set_drvdata(pdev, NULL);
-+      kfree(hw_config);
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("Kahlua VSA1 PCI Audio");
-+MODULE_LICENSE("GPL");
-+
-+/*
-+ *    5530 only. The 5510/5520 decode is different.
-+ */
-+
-+static struct pci_device_id id_tbl[] __devinitdata = {
-+      { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_AUDIO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-+      { }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, id_tbl);
-+
-+static struct pci_driver kahlua_driver = {
-+      name:           "kahlua",
-+      id_table:       id_tbl,
-+      probe:          probe_one,
-+      remove:         __devexit_p(remove_one),
-+};
-+
-+
-+static int __init kahlua_init_module(void)
-+{
-+      printk(KERN_INFO "Cyrix Kahlua VSA1 XpressAudio support (c) Copyright 2003 Red Hat Inc\n");
-+      return pci_module_init(&kahlua_driver);
-+}
-+
-+static void __devexit kahlua_cleanup_module(void)
-+{
-+      return pci_unregister_driver(&kahlua_driver);
-+}
-+
-+
-+module_init(kahlua_init_module);
-+module_exit(kahlua_cleanup_module);
-+
---- linux-2.6.0-test1/sound/oss/Kconfig        2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/Kconfig       2003-07-19 17:03:51.000000000 -0700
-@@ -233,6 +233,10 @@ config SOUND_ICH
-         Support for integral audio in Intel's I/O Controller Hub (ICH)
-         chipset, as used on the 810/820/840 motherboards.
-+config SOUND_HARMONY
-+      tristate "PA Harmony audio driver"
-+      depends on GSC_LASI && SOUND
-+
- config SOUND_RME96XX
-       tristate "RME Hammerfall (RME96XX) support (EXPERIMENTAL)"
-       depends on SOUND_PRIME!=n && SOUND && PCI && EXPERIMENTAL
-@@ -260,6 +264,10 @@ config SOUND_VWSND
-         <file:Documentation/sound/oss/vwsnd> for more info on this driver's
-         capabilities.
-+config SOUND_HAL2
-+      tristate "SGI HAL2 sound (EXPERIMENTAL)"
-+      depends on SGI_IP22 && SOUND && EXPERIMENTAL
-+
- config SOUND_VRC5477
-       tristate "NEC Vrc5477 AC97 sound"
-       depends on SOUND_PRIME!=n && DDB5477 && SOUND
-@@ -1126,3 +1134,23 @@ config SOUND_TVMIXER
-         Support for audio mixer facilities on the BT848 TV frame-grabber
-         card.
-+config SOUND_KAHLUA
-+      tristate "XpressAudio Sound Blaster emulation"
-+      depends on SOUND_SB
-+
-+config SOUND_ALI5455
-+      tristate "ALi5455 audio support"
-+      depends on SOUND_PRIME!=n && PCI
-+
-+config SOUND_FORTE
-+      tristate "ForteMedia FM801 driver"
-+      depends on SOUND_PRIME!=n && PCI
-+
-+config SOUND_RME96XX
-+      tristate "RME Hammerfall (RME96XX) support"
-+      depends on SOUND_PRIME!=n && PCI
-+
-+config SOUND_AD1980
-+      tristate "AD1980 front/back switch plugin"
-+      depends on SOUND_PRIME!=n
-+
---- linux-2.6.0-test1/sound/oss/Makefile       2003-07-13 21:44:35.000000000 -0700
-+++ 25/sound/oss/Makefile      2003-07-19 17:03:51.000000000 -0700
-@@ -10,6 +10,7 @@ obj-$(CONFIG_SOUND_CS4232)   += cs4232.o a
- # Please leave it as is, cause the link order is significant !
-+obj-$(CONFIG_SOUND_HAL2)      += hal2.o
- obj-$(CONFIG_SOUND_AEDSP16)   += aedsp16.o
- obj-$(CONFIG_SOUND_PSS)               += pss.o ad1848.o mpu401.o
- obj-$(CONFIG_SOUND_TRIX)      += trix.o ad1848.o sb_lib.o uart401.o
-@@ -21,6 +22,7 @@ obj-$(CONFIG_SOUND_MSS)              += ad1848.o
- obj-$(CONFIG_SOUND_OPL3SA2)   += opl3sa2.o ad1848.o mpu401.o
- obj-$(CONFIG_SOUND_PAS)               += pas2.o sb.o sb_lib.o uart401.o
- obj-$(CONFIG_SOUND_SB)                += sb.o sb_lib.o uart401.o
-+obj-$(CONFIG_SOUND_KAHLUA)    += kahlua.o
- obj-$(CONFIG_SOUND_WAVEFRONT) += wavefront.o
- obj-$(CONFIG_SOUND_MAUI)      += maui.o mpu401.o
- obj-$(CONFIG_SOUND_MPU401)    += mpu401.o
-@@ -60,10 +62,16 @@ obj-$(CONFIG_SOUND_FUSION) += cs46xx.o a
- obj-$(CONFIG_SOUND_MAESTRO)   += maestro.o
- obj-$(CONFIG_SOUND_MAESTRO3)  += maestro3.o ac97_codec.o
- obj-$(CONFIG_SOUND_TRIDENT)   += trident.o ac97_codec.o
-+obj-$(CONFIG_SOUND_HARMONY)   += harmony.o
- obj-$(CONFIG_SOUND_EMU10K1)   += ac97_codec.o
- obj-$(CONFIG_SOUND_RME96XX)     += rme96xx.o
- obj-$(CONFIG_SOUND_BT878)     += btaudio.o
-+obj-$(CONFIG_SOUND_ALI5455)   += ali5455.o ac97_codec.o
- obj-$(CONFIG_SOUND_IT8172)    += ite8172.o ac97_codec.o
-+obj-$(CONFIG_SOUND_FORTE)     += forte.o
-+
-+obj-$(CONFIG_SOUND_AD1980)    += ac97_plugin_ad1980.o
-+obj-$(CONFIG_SOUND_WM97XX)    += ac97_plugin_wm97xx.o
- ifeq ($(CONFIG_MIDI_EMU10K1),y)
-   obj-$(CONFIG_SOUND_EMU10K1) += sound.o
---- linux-2.6.0-test1/sound/pci/ice1712/ak4xxx.c       2003-06-14 12:17:55.000000000 -0700
-+++ 25/sound/pci/ice1712/ak4xxx.c      2003-07-19 17:06:15.000000000 -0700
-@@ -116,8 +116,8 @@ static void snd_ice1712_akm4xxx_write(ak
- /*
-  * initialize the akm4xxx_t record with the template
-  */
--int __devinit snd_ice1712_akm4xxx_init(akm4xxx_t *ak, const akm4xxx_t *temp,
--                                     const struct snd_ak4xxx_private *_priv, ice1712_t *ice)
-+int snd_ice1712_akm4xxx_init(akm4xxx_t *ak, const akm4xxx_t *temp,
-+                           const struct snd_ak4xxx_private *_priv, ice1712_t *ice)
- {
-       struct snd_ak4xxx_private *priv;
-@@ -139,7 +139,7 @@ int __devinit snd_ice1712_akm4xxx_init(a
-       return 0;
- }
--void __devexit snd_ice1712_akm4xxx_free(ice1712_t *ice)
-+void snd_ice1712_akm4xxx_free(ice1712_t *ice)
- {
-       unsigned int akidx;
-       if (ice->akm == NULL)
-@@ -155,7 +155,7 @@ void __devexit snd_ice1712_akm4xxx_free(
- /*
-  * build AK4xxx controls
-  */
--int __devinit snd_ice1712_akm4xxx_build_controls(ice1712_t *ice)
-+int snd_ice1712_akm4xxx_build_controls(ice1712_t *ice)
- {
-       unsigned int akidx;
-       int err;
---- linux-2.6.0-test1/sound/pci/intel8x0.c     2003-06-14 12:18:23.000000000 -0700
-+++ 25/sound/pci/intel8x0.c    2003-07-19 17:04:58.000000000 -0700
-@@ -2062,10 +2062,8 @@ static void __devinit intel8x0_measure_a
-       t = stop_time.tv_sec - start_time.tv_sec;
-       t *= 1000000;
--      if (stop_time.tv_usec < start_time.tv_usec)
--              t -= start_time.tv_usec - stop_time.tv_usec;
--      else
--              t += stop_time.tv_usec - start_time.tv_usec;
-+      t += stop_time.tv_usec - start_time.tv_usec;
-+      printk(KERN_INFO "%s: measured %lu usecs\n", __FUNCTION__, t);
-       if (t == 0) {
-               snd_printk(KERN_ERR "?? calculation error..\n");
-               return;
---- linux-2.6.0-test1/usr/Makefile     2003-07-10 18:50:32.000000000 -0700
-+++ 25/usr/Makefile    2003-07-19 17:03:51.000000000 -0700
-@@ -3,7 +3,7 @@ obj-y := initramfs_data.o
- host-progs  := gen_init_cpio
--clean-files := initramfs_data.cpio.gz
-+clean-files := initramfs_data.cpio.gz initramfs_data.S
- $(src)/initramfs_data.S: $(obj)/initramfs_data.cpio.gz
-       echo "  .section .init.ramfs,\"a\"" > $(src)/initramfs_data.S
diff --git a/lustre/kernel_patches/pc/2.6.0-test1-mm2.pc b/lustre/kernel_patches/pc/2.6.0-test1-mm2.pc
deleted file mode 100644 (file)
index 33e7179..0000000
+++ /dev/null
@@ -1,1202 +0,0 @@
-arch/alpha/kernel/irq.c
-arch/alpha/kernel/smp.c
-arch/alpha/mm/init.c
-arch/alpha/mm/remap.c
-arch/arm26/kernel/setup.c
-arch/arm26/mm/init.c
-arch/arm26/mm/mm-memc.c
-arch/arm/mach-arc/mm.c
-arch/arm/mach-clps711x/autcpu12.c
-arch/arm/mm/consistent.c
-arch/arm/mm/ioremap.c
-arch/arm/mm/minicache.c
-arch/arm/mm/mm-armv.c
-arch/cris/mm/ioremap.c
-arch/h8300/kernel/setup.c
-arch/h8300/mm/init.c
-arch/i386/Kconfig
-arch/i386/kernel/apic.c
-arch/i386/kernel/apm.c
-arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
-arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
-arch/i386/kernel/cpu/cpufreq/speedstep-ich.c
-arch/i386/kernel/cpuid.c
-arch/i386/kernel/cpu/mtrr/cyrix.c
-arch/i386/kernel/cpu/mtrr/main.c
-arch/i386/kernel/cpu/proc.c
-arch/i386/kernel/entry.S
-arch/i386/kernel/io_apic.c
-arch/i386/kernel/irq.c
-arch/i386/kernel/kgdb_stub.c
-arch/i386/kernel/ldt.c
-arch/i386/kernel/Makefile
-arch/i386/kernel/mpparse.c
-arch/i386/kernel/msr.c
-arch/i386/kernel/nmi.c
-arch/i386/kernel/reboot.c
-arch/i386/kernel/setup.c
-arch/i386/kernel/smpboot.c
-arch/i386/kernel/smp.c
-arch/i386/kernel/traps.c
-arch/i386/kernel/vm86.c
-arch/i386/lib/dec_and_lock.c
-arch/i386/lib/kgdb_serial.c
-arch/i386/lib/Makefile
-arch/i386/mach-generic/bigsmp.c
-arch/i386/mach-generic/default.c
-arch/i386/mach-generic/probe.c
-arch/i386/mach-generic/summit.c
-arch/i386/mach-visws/mpparse.c
-arch/i386/mach-voyager/voyager_smp.c
-arch/i386/Makefile
-arch/i386/mm/fault.c
-arch/i386/mm/hugetlbpage.c
-arch/i386/mm/init.c
-arch/i386/mm/ioremap.c
-arch/i386/mm/pageattr.c
-arch/i386/mm/pgtable.c
-arch/i386/pci/legacy.c
-arch/i386/pci/visws.c
-arch/ia64/hp/sim/simscsi.c
-arch/ia64/ia32/ia32_ioctl.c
-arch/ia64/kernel/acpi.c
-arch/ia64/kernel/entry.S
-arch/ia64/kernel/fsys.S
-arch/ia64/kernel/ia64_ksyms.c
-arch/ia64/kernel/init_task.c
-arch/ia64/kernel/iosapic.c
-arch/ia64/kernel/irq.c
-arch/ia64/kernel/module.c
-arch/ia64/kernel/perfmon.c
-arch/ia64/kernel/ptrace.c
-arch/ia64/kernel/setup.c
-arch/ia64/kernel/smpboot.c
-arch/ia64/kernel/smp.c
-arch/ia64/kernel/time.c
-arch/ia64/Makefile
-arch/ia64/mm/hugetlbpage.c
-arch/ia64/mm/init.c
-arch/ia64/pci/pci.c
-arch/ia64/scripts/check-model.c
-arch/ia64/scripts/toolchain-flags
-arch/m68k/apollo/dn_ints.c
-arch/m68k/atari/stram.c
-arch/m68k/kernel/head.S
-arch/m68k/mm/init.c
-arch/m68k/mm/kmap.c
-arch/m68k/mm/motorola.c
-arch/m68k/mm/sun3mmu.c
-arch/m68knommu/kernel/setup.c
-arch/m68knommu/mm/init.c
-arch/m68k/q40/q40ints.c
-arch/m68k/sun3x/dvma.c
-arch/mips64/kernel/irq.c
-arch/mips64/kernel/proc.c
-arch/mips64/kernel/setup.c
-arch/mips64/kernel/smp.c
-arch/mips/kernel/irq.c
-arch/mips/kernel/proc.c
-arch/mips/kernel/smp.c
-arch/mips/mm/fault.c
-arch/mips/mm/init.c
-arch/mips/mm/ioremap.c
-arch/mips/momentum/ocelot_c/setup.c
-arch/mips/momentum/ocelot_g/setup.c
-arch/mips/ramdisk/Makefile
-arch/mips/sgi-ip27/ip27-init.c
-arch/mips/sibyte/cfe/setup.c
-arch/mips/sibyte/cfe/smp.c
-arch/mips/sibyte/sb1250/prom.c
-arch/mips/sibyte/sb1250/smp.c
-arch/mips/sibyte/swarm/setup.c
-arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_irq.c
-arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
-arch/mips/vr41xx/tanbac-tb0229/setup.c
-arch/parisc/kernel/ioctl32.c
-arch/parisc/kernel/pci-dma.c
-arch/parisc/kernel/smp.c
-arch/parisc/mm/ioremap.c
-arch/ppc64/boot/Makefile
-arch/ppc64/Kconfig
-arch/ppc64/kernel/htab.c
-arch/ppc64/kernel/irq.c
-arch/ppc64/kernel/iSeries_irq.c
-arch/ppc64/kernel/open_pic.c
-arch/ppc64/kernel/open_pic.h
-arch/ppc64/kernel/pacaData.c
-arch/ppc64/kernel/prom.c
-arch/ppc64/kernel/rtasd.c
-arch/ppc64/kernel/semaphore.c
-arch/ppc64/kernel/setup.c
-arch/ppc64/kernel/smp.c
-arch/ppc64/kernel/xics.c
-arch/ppc64/kernel/XmPciLpEvent.c
-arch/ppc64/mm/init.c
-arch/ppc/kernel/irq.c
-arch/ppc/kernel/misc.S
-arch/ppc/kernel/setup.c
-arch/ppc/kernel/smp.c
-arch/ppc/kernel/syscalls.c
-arch/ppc/kernel/time.c
-arch/ppc/mm/mem_pieces.c
-arch/ppc/platforms/4xx/beech.c
-arch/ppc/platforms/4xx/sycamore.c
-arch/ppc/platforms/4xx/walnut.c
-arch/ppc/platforms/pmac_cpufreq.c
-arch/ppc/platforms/residual.c
-arch/s390/defconfig
-arch/s390/kernel/compat_ioctl.c
-arch/s390/kernel/compat_linux.c
-arch/s390/kernel/entry64.S
-arch/s390/kernel/entry.S
-arch/s390/kernel/s390_ext.c
-arch/s390/kernel/setup.c
-arch/s390/kernel/smp.c
-arch/s390/mm/init.c
-arch/s390/mm/ioremap.c
-arch/sh/mm/init.c
-arch/sh/mm/ioremap.c
-arch/sparc64/kernel/devices.c
-arch/sparc64/kernel/head.S
-arch/sparc64/kernel/irq.c
-arch/sparc64/kernel/pci.c
-arch/sparc64/kernel/setup.c
-arch/sparc64/kernel/smp.c
-arch/sparc64/kernel/sparc64_ksyms.c
-arch/sparc64/kernel/time.c
-arch/sparc64/kernel/us2e_cpufreq.c
-arch/sparc64/kernel/us3_cpufreq.c
-arch/sparc64/lib/atomic.S
-arch/sparc64/lib/rwlock.S
-arch/sparc64/mm/fault.c
-arch/sparc64/mm/generic.c
-arch/sparc64/mm/hugetlbpage.c
-arch/sparc64/mm/init.c
-arch/sparc64/prom/bootstr.c
-arch/sparc/kernel/process.c
-arch/sparc/kernel/setup.c
-arch/sparc/mm/generic.c
-arch/sparc/mm/srmmu.c
-arch/sparc/mm/sun4c.c
-arch/um/drivers/ubd_kern.c
-arch/um/kernel/irq.c
-arch/um/kernel/skas/process_kern.c
-arch/um/kernel/smp.c
-arch/um/kernel/tt/process_kern.c
-arch/um/kernel/um_arch.c
-arch/v850/Kconfig
-arch/v850/kernel/anna.c
-arch/v850/kernel/as85ep1.c
-arch/v850/kernel/fpga85e2c.c
-arch/v850/kernel/gbus_int.c
-arch/v850/kernel/head.S
-arch/v850/kernel/highres_timer.c
-arch/v850/kernel/intv.S
-arch/v850/kernel/ma.c
-arch/v850/kernel/Makefile
-arch/v850/kernel/me2.c
-arch/v850/kernel/nb85e_cache.c
-arch/v850/kernel/nb85e_intc.c
-arch/v850/kernel/nb85e_timer_d.c
-arch/v850/kernel/nb85e_utils.c
-arch/v850/kernel/rte_cb.c
-arch/v850/kernel/rte_ma1_cb.c
-arch/v850/kernel/rte_me2_cb.c
-arch/v850/kernel/rte_nb85e_cb.c
-arch/v850/kernel/sim85e2.c
-arch/v850/kernel/sim85e2c.c
-arch/v850/kernel/teg.c
-arch/v850/kernel/v850e2_cache.c
-arch/v850/kernel/v850e_cache.c
-arch/v850/kernel/v850e_intc.c
-arch/v850/kernel/v850e_timer_d.c
-arch/v850/kernel/v850e_utils.c
-arch/v850/rte_me2_cb.ld
-arch/v850/sim85e2c.ld
-arch/v850/sim85e2.ld
-arch/v850/vmlinux.lds.S
-arch/x86_64/boot/compressed/head.S
-arch/x86_64/boot/compressed/misc.c
-arch/x86_64/ia32/syscall32.c
-arch/x86_64/kernel/apic.c
-arch/x86_64/kernel/io_apic.c
-arch/x86_64/kernel/irq.c
-arch/x86_64/kernel/ldt.c
-arch/x86_64/kernel/mpparse.c
-arch/x86_64/kernel/msr.c
-arch/x86_64/kernel/reboot.c
-arch/x86_64/kernel/setup.c
-arch/x86_64/kernel/smpboot.c
-arch/x86_64/kernel/smp.c
-arch/x86_64/mm/init.c
-arch/x86_64/mm/ioremap.c
-arch/x86_64/mm/numa.c
-Documentation/fb/neofb.txt
-Documentation/filesystems/proc.txt
-Documentation/i386/kgdb/andthen
-Documentation/i386/kgdb/debug-nmi.txt
-Documentation/i386/kgdb/gdb-globals.txt
-Documentation/i386/kgdb/gdbinit
-Documentation/i386/kgdb/gdbinit.hw
-Documentation/i386/kgdb/gdbinit-modules
-Documentation/i386/kgdb/kgdb.txt
-Documentation/i386/kgdb/loadmodule.sh
-Documentation/magic-number.txt
-Documentation/networking/vortex.txt
-Documentation/pnp.txt
-drivers/acorn/block/fd1772.c
-drivers/acorn/block/mfmhd.c
-drivers/acpi/executer/exutils.c
-drivers/acpi/hardware/hwregs.c
-drivers/acpi/osl.c
-drivers/acpi/processor.c
-drivers/acpi/tables.c
-drivers/acpi/tables/tbconvrt.c
-drivers/acpi/tables/tbget.c
-drivers/acpi/tables/tbinstal.c
-drivers/acpi/tables/tbrsdt.c
-drivers/acpi/tables/tbxfroot.c
-drivers/acpi/thermal.c
-drivers/acpi/utilities/utglobal.c
-drivers/atm/atmtcp.c
-drivers/base/node.c
-drivers/block/acsi.c
-drivers/block/amiflop.c
-drivers/block/as-iosched.c
-drivers/block/ataflop.c
-drivers/block/cciss.c
-drivers/block/cciss_scsi.c
-drivers/block/cpqarray.c
-drivers/block/cryptoloop.c
-drivers/block/DAC960.c
-drivers/block/deadline-iosched.c
-drivers/block/elevator.c
-drivers/block/floppy98.c
-drivers/block/floppy.c
-drivers/block/genhd.c
-drivers/block/ioctl.c
-drivers/block/Kconfig
-drivers/block/ll_rw_blk.c
-drivers/block/nbd.c
-drivers/block/paride/pcd.c
-drivers/block/paride/pd.c
-drivers/block/paride/pf.c
-drivers/block/ps2esdi.c
-drivers/block/swim3.c
-drivers/block/swim_iop.c
-drivers/block/umem.c
-drivers/block/xd.c
-drivers/block/z2ram.c
-drivers/cdrom/aztcd.c
-drivers/cdrom/cdrom.c
-drivers/cdrom/cdu31a.c
-drivers/cdrom/cm206.c
-drivers/cdrom/gscd.c
-drivers/cdrom/mcd.c
-drivers/cdrom/mcdx.c
-drivers/cdrom/optcd.c
-drivers/cdrom/sbpcd.c
-drivers/cdrom/sjcd.c
-drivers/cdrom/sonycd535.c
-drivers/char/agp/i460-agp.c
-drivers/char/busmouse.c
-drivers/char/drm/drm_memory.h
-drivers/char/ftape/lowlevel/fdc-io.c
-drivers/char/ftape/lowlevel/ftape-calibr.c
-drivers/char/ftape/lowlevel/ftape-format.c
-drivers/char/ftape/zftape/zftape-init.c
-drivers/char/ip2.c
-drivers/char/ip2/i2lib.c
-drivers/char/ip2/i2os.h
-drivers/char/ip2main.c
-drivers/char/istallion.c
-drivers/char/keyboard.c
-drivers/char/moxa.c
-drivers/char/nwbutton.h
-drivers/char/pcxx.c
-drivers/char/stallion.c
-drivers/char/sysrq.c
-drivers/char/tty_io.c
-drivers/char/watchdog/acquirewdt.c
-drivers/char/watchdog/i810-tco.c
-drivers/char/watchdog/i810-tco.h
-drivers/char/watchdog/ib700wdt.c
-drivers/char/watchdog/indydog.c
-drivers/char/watchdog/machzwd.c
-drivers/char/watchdog/pcwd.c
-drivers/char/watchdog/sbc60xxwdt.c
-drivers/char/watchdog/sc520_wdt.c
-drivers/char/watchdog/shwdt.c
-drivers/char/watchdog/softdog.c
-drivers/char/watchdog/wdt977.c
-drivers/char/watchdog/wdt_pci.c
-drivers/fc4/fc.c
-drivers/fc4/fcp_impl.h
-drivers/i2c/i2c-dev.c
-drivers/ide/ide-disk.c
-drivers/ide/ide-dma.c
-drivers/ide/ide-io.c
-drivers/ide/Kconfig
-drivers/ide/legacy/hd98.c
-drivers/ide/legacy/hd.c
-drivers/ide/ppc/mpc8xx.c
-drivers/ieee1394/amdtp.c
-drivers/ieee1394/sbp2.c
-drivers/input/keyboard/sunkbd.c
-drivers/input/mouse/psmouse-base.c
-drivers/md/dm.c
-drivers/md/dm.h
-drivers/md/dm-ioctl.c
-drivers/md/dm-ioctl-v1.c
-drivers/md/dm-ioctl-v4.c
-drivers/md/dm-table.c
-drivers/md/Kconfig
-drivers/md/linear.c
-drivers/md/md.c
-drivers/md/multipath.c
-drivers/md/raid0.c
-drivers/md/raid1.c
-drivers/media/common/Makefile
-drivers/media/common/saa7146_core.c
-drivers/media/common/saa7146_fops.c
-drivers/media/common/saa7146_hlp.c
-drivers/media/common/saa7146_i2c.c
-drivers/media/common/saa7146_vbi.c
-drivers/media/common/saa7146_video.c
-drivers/media/common/saa7146_vv_ksyms.c
-drivers/media/dvb/b2c2/Kconfig
-drivers/media/dvb/b2c2/Makefile
-drivers/media/dvb/b2c2/skystar2.c
-drivers/media/dvb/dvb-core/dvb_demux.c
-drivers/media/dvb/dvb-core/dvbdev.c
-drivers/media/dvb/dvb-core/dvbdev.h
-drivers/media/dvb/dvb-core/dvb_frontend.c
-drivers/media/dvb/dvb-core/dvb_functions.c
-drivers/media/dvb/dvb-core/dvb_functions.h
-drivers/media/dvb/dvb-core/dvb_net.c
-drivers/media/dvb/dvb-core/dvb_net.h
-drivers/media/dvb/frontends/alps_bsrv2.c
-drivers/media/dvb/frontends/alps_tdlb7.c
-drivers/media/dvb/frontends/grundig_29504-401.c
-drivers/media/dvb/frontends/grundig_29504-491.c
-drivers/media/dvb/frontends/Kconfig
-drivers/media/dvb/frontends/Makefile
-drivers/media/dvb/frontends/mt312.c
-drivers/media/dvb/frontends/mt312.h
-drivers/media/dvb/frontends/nxt6000.c
-drivers/media/dvb/frontends/tda1004x.c
-drivers/media/dvb/frontends/ves1820.c
-drivers/media/dvb/Kconfig
-drivers/media/dvb/Makefile
-drivers/media/dvb/ttpci/av7110.c
-drivers/media/dvb/ttpci/av7110.h
-drivers/media/dvb/ttpci/budget-av.c
-drivers/media/dvb/ttpci/budget.c
-drivers/media/dvb/ttpci/budget-ci.c
-drivers/media/dvb/ttpci/budget-core.c
-drivers/media/dvb/ttpci/budget-patch.c
-drivers/media/dvb/ttpci/Makefile
-drivers/media/dvb/ttpci/ttpci-eeprom.c
-drivers/media/dvb/ttpci/ttpci-eeprom.h
-drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
-drivers/media/dvb/ttusb-budget/dvb-ttusb-dspbootcode.h
-drivers/media/dvb/ttusb-budget/Kconfig
-drivers/media/dvb/ttusb-budget/Makefile
-drivers/media/dvb/ttusb-dec/dec2000_frontend.c
-drivers/media/dvb/ttusb-dec/fdump.c
-drivers/media/dvb/ttusb-dec/Kconfig
-drivers/media/dvb/ttusb-dec/Makefile
-drivers/media/dvb/ttusb-dec/ttusb_dec.c
-drivers/media/dvb/ttusb-dec/ttusb_dec.h
-drivers/media/video/dpc7146.c
-drivers/media/video/hexium_gemini.c
-drivers/media/video/hexium_gemini.h
-drivers/media/video/hexium.h
-drivers/media/video/hexium_orion.c
-drivers/media/video/hexium_orion.h
-drivers/media/video/Kconfig
-drivers/media/video/Makefile
-drivers/media/video/mxb.c
-drivers/media/video/pms.c
-drivers/message/fusion/mptctl.c
-drivers/message/fusion/mptscsih.c
-drivers/message/i2o/i2o_block.c
-drivers/message/i2o/i2o_scsi.c
-drivers/mtd/devices/blkmtd.c
-drivers/mtd/mtd_blkdevs.c
-drivers/net/3c59x.c
-drivers/net/eql.c
-drivers/net/fc/iph5526.c
-drivers/net/irda/vlsi_ir.c
-drivers/net/Kconfig
-drivers/net/ni65.c
-drivers/net/ni65.h
-drivers/net/pcmcia/Kconfig
-drivers/net/seeq8005.c
-drivers/net/wan/comx-hw-comx.c
-drivers/net/wan/sdladrv.c
-drivers/net/wan/sdlamain.c
-drivers/net/wan/syncppp.c
-drivers/net/wireless/airo.c
-drivers/net/wireless/ray_cs.c
-drivers/parisc/led.c
-drivers/parport/parport_pc.c
-drivers/pci/hotplug/acpiphp_glue.c
-drivers/pci/hotplug/acpiphp_pci.c
-drivers/pci/hotplug.c
-drivers/pci/hotplug/cpci_hotplug_core.c
-drivers/pci/hotplug/cpci_hotplug.h
-drivers/pci/hotplug/cpci_hotplug_pci.c
-drivers/pci/hotplug/Kconfig
-drivers/pci/Makefile
-drivers/pci/pci.c
-drivers/pci/pool.c
-drivers/pci/probe.c
-drivers/pci/quirks.c
-drivers/pci/remove.c
-drivers/pci/setup-bus.c
-drivers/pci/setup-res.c
-drivers/pcmcia/hd64465_ss.c
-drivers/pcmcia/ricoh.h
-drivers/pcmcia/ti113x.h
-drivers/pcmcia/yenta_socket.c
-drivers/pnp/isapnp/core.c
-drivers/s390/block/dasd.c
-drivers/s390/block/dasd_genhd.c
-drivers/s390/block/dasd_int.h
-drivers/s390/block/dasd_ioctl.c
-drivers/s390/block/xpram.c
-drivers/s390/char/sclp.c
-drivers/s390/char/tape_block.c
-drivers/s390/cio/chsc.c
-drivers/s390/cio/cio.c
-drivers/s390/cio/device.c
-drivers/s390/cio/device_fsm.c
-drivers/s390/cio/device.h
-drivers/s390/cio/qdio.c
-drivers/s390/net/qeth.c
-drivers/s390/net/qeth.h
-drivers/s390/net/qeth_mpc.h
-drivers/sbus/char/envctrl.c
-drivers/sbus/char/jsflash.c
-drivers/scsi/3w-xxxx.c
-drivers/scsi/53c700.c
-drivers/scsi/53c7xx.c
-drivers/scsi/a2091.c
-drivers/scsi/a3000.c
-drivers/scsi/aacraid/aachba.c
-drivers/scsi/aacraid/commctrl.c
-drivers/scsi/aacraid/comminit.c
-drivers/scsi/aacraid/commsup.c
-drivers/scsi/aacraid/dpcsup.c
-drivers/scsi/aacraid/linit.c
-drivers/scsi/aacraid/rx.c
-drivers/scsi/aacraid/sa.c
-drivers/scsi/advansys.c
-drivers/scsi/aha152x.c
-drivers/scsi/aha1542.c
-drivers/scsi/aha1542.h
-drivers/scsi/aha1740.c
-drivers/scsi/aic7xxx/aic79xx_osm.c
-drivers/scsi/aic7xxx/aic79xx_osm.h
-drivers/scsi/aic7xxx/aic7xxx_osm.c
-drivers/scsi/aic7xxx/aic7xxx_osm.h
-drivers/scsi/aic7xxx/aiclib.c
-drivers/scsi/aic7xxx_old.c
-drivers/scsi/AM53C974.c
-drivers/scsi/amiga7xx.c
-drivers/scsi/arm/acornscsi.c
-drivers/scsi/arm/arxescsi.c
-drivers/scsi/arm/cumana_1.c
-drivers/scsi/arm/cumana_2.c
-drivers/scsi/arm/ecoscsi.c
-drivers/scsi/arm/eesox.c
-drivers/scsi/arm/fas216.c
-drivers/scsi/arm/oak.c
-drivers/scsi/arm/powertec.c
-drivers/scsi/arm/queue.c
-drivers/scsi/atari_scsi.c
-drivers/scsi/atp870u.c
-drivers/scsi/blz1230.c
-drivers/scsi/blz2060.c
-drivers/scsi/BusLogic.c
-drivers/scsi/bvme6000.c
-drivers/scsi/constants.c
-drivers/scsi/cpqfcTScontrol.c
-drivers/scsi/cpqfcTSinit.c
-drivers/scsi/cpqfcTSworker.c
-drivers/scsi/cyberstorm.c
-drivers/scsi/cyberstormII.c
-drivers/scsi/dc395x.c
-drivers/scsi/dec_esp.c
-drivers/scsi/dmx3191d.c
-drivers/scsi/dpt_i2o.c
-drivers/scsi/dtc.c
-drivers/scsi/eata.c
-drivers/scsi/eata_pio.c
-drivers/scsi/esp.c
-drivers/scsi/fastlane.c
-drivers/scsi/fcal.c
-drivers/scsi/fd_mcs.c
-drivers/scsi/fdomain.c
-drivers/scsi/gdth.c
-drivers/scsi/g_NCR5380.c
-drivers/scsi/gvp11.c
-drivers/scsi/hosts.c
-drivers/scsi/i91uscsi.c
-drivers/scsi/ibmmca.c
-drivers/scsi/ide-scsi.c
-drivers/scsi/imm.c
-drivers/scsi/imm.h
-drivers/scsi/in2000.c
-drivers/scsi/ini9100u.c
-drivers/scsi/inia100.c
-drivers/scsi/ips.c
-drivers/scsi/ips.h
-drivers/scsi/isp/asm_1000.h
-drivers/scsi/isp/asm_1040.h
-drivers/scsi/isp/asm_1080.h
-drivers/scsi/isp/asm_12160.h
-drivers/scsi/isp/asm_2100.h
-drivers/scsi/isp/asm_2200.h
-drivers/scsi/isp/asm_2300.h
-drivers/scsi/isp/isp.c
-drivers/scsi/isp/isp_cb_ops.c
-drivers/scsi/isp/isp_inline.h
-drivers/scsi/isp/isp_ioctl.h
-drivers/scsi/isp/isp_linux.c
-drivers/scsi/isp/isp_linux.h
-drivers/scsi/isp/ispmbox.h
-drivers/scsi/isp/isp_pci.c
-drivers/scsi/isp/ispreg.h
-drivers/scsi/isp/isp_target.c
-drivers/scsi/isp/isp_target.h
-drivers/scsi/isp/isp_tpublic.h
-drivers/scsi/isp/ispvar.h
-drivers/scsi/isp/Makefile
-drivers/scsi/jazz_esp.c
-drivers/scsi/Kconfig
-drivers/scsi/lasi700.c
-drivers/scsi/mac53c94.c
-drivers/scsi/mac_esp.c
-drivers/scsi/mac_scsi.c
-drivers/scsi/Makefile
-drivers/scsi/mca_53c9x.c
-drivers/scsi/megaraid.c
-drivers/scsi/mesh.c
-drivers/scsi/mvme147.c
-drivers/scsi/mvme16x.c
-drivers/scsi/NCR53c406a.c
-drivers/scsi/ncr53c8xx.c
-drivers/scsi/NCR53C9x.c
-drivers/scsi/NCR_D700.c
-drivers/scsi/NCR_Q720.c
-drivers/scsi/nsp32.c
-drivers/scsi/oktagon_esp.c
-drivers/scsi/osst.c
-drivers/scsi/pas16.c
-drivers/scsi/pc980155.c
-drivers/scsi/pci2000.c
-drivers/scsi/pci2220i.c
-drivers/scsi/pcmcia/aha152x_stub.c
-drivers/scsi/pcmcia/fdomain_stub.c
-drivers/scsi/pcmcia/nsp_cs.c
-drivers/scsi/pcmcia/qlogic_stub.c
-drivers/scsi/pluto.c
-drivers/scsi/ppa.c
-drivers/scsi/ppa.h
-drivers/scsi/psi240i.c
-drivers/scsi/qla1280.c
-drivers/scsi/qlogicfas.c
-drivers/scsi/qlogicfc.c
-drivers/scsi/qlogicisp.c
-drivers/scsi/qlogicpti.c
-drivers/scsi/scsicam.c
-drivers/scsi/scsi_debug.c
-drivers/scsi/scsi.h
-drivers/scsi/scsi_ioctl.c
-drivers/scsi/scsi_lib.c
-drivers/scsi/scsi_module.c
-drivers/scsi/scsi_pc98.c
-drivers/scsi/scsi_priv.h
-drivers/scsi/scsi_proc.c
-drivers/scsi/scsi_scan.c
-drivers/scsi/scsi_syms.c
-drivers/scsi/scsi_sysfs.c
-drivers/scsi/sd.c
-drivers/scsi/seagate.c
-drivers/scsi/sg.c
-drivers/scsi/sgiwd93.c
-drivers/scsi/sim710.c
-drivers/scsi/sr.c
-drivers/scsi/sr_ioctl.c
-drivers/scsi/sr_vendor.c
-drivers/scsi/st.c
-drivers/scsi/sun3_scsi.c
-drivers/scsi/sun3_scsi_vme.c
-drivers/scsi/sun3x_esp.c
-drivers/scsi/sym53c416.c
-drivers/scsi/sym53c8xx_2/sym_glue.c
-drivers/scsi/sym53c8xx_2/sym_glue.h
-drivers/scsi/sym53c8xx_2/sym_hipd.c
-drivers/scsi/sym53c8xx.c
-drivers/scsi/t128.c
-drivers/scsi/tmscsim.c
-drivers/scsi/u14-34f.c
-drivers/scsi/ultrastor.c
-drivers/scsi/wd33c93.c
-drivers/scsi/wd7000.c
-drivers/scsi/zalon.c
-drivers/serial/8250.c
-drivers/serial/core.c
-drivers/serial/Kconfig
-drivers/serial/Makefile
-drivers/serial/nb85e_uart.c
-drivers/serial/sunsu.c
-drivers/serial/sunzilog.c
-drivers/serial/v850e_uart.c
-drivers/telephony/ixj.c
-drivers/telephony/Kconfig
-drivers/usb/class/bluetty.c
-drivers/usb/class/cdc-acm.c
-drivers/usb/class/usblp.c
-drivers/usb/core/file.c
-drivers/usb/core/hcd.c
-drivers/usb/core/hcd-pci.c
-drivers/usb/core/usb.c
-drivers/usb/gadget/ether.c
-drivers/usb/gadget/net2280.c
-drivers/usb/gadget/net2280.h
-drivers/usb/gadget/zero.c
-drivers/usb/host/ohci-hcd.c
-drivers/usb/host/ohci-q.c
-drivers/usb/host/uhci-hcd.c
-drivers/usb/image/hpusbscsi.c
-drivers/usb/image/microtek.c
-drivers/usb/image/scanner.c
-drivers/usb/image/scanner.h
-drivers/usb/media/dabusb.c
-drivers/usb/media/vicam.c
-drivers/usb/misc/usblcd.c
-drivers/usb/misc/usbtest.c
-drivers/usb/net/ax8817x.c
-drivers/usb/net/catc.c
-drivers/usb/net/kaweth.c
-drivers/usb/net/pegasus.c
-drivers/usb/net/rtl8150.c
-drivers/usb/net/usbnet.c
-drivers/usb/serial/ftdi_sio.c
-drivers/usb/serial/ftdi_sio.h
-drivers/usb/serial/ipaq.c
-drivers/usb/serial/ipaq.h
-drivers/usb/serial/usb-serial.c
-drivers/usb/serial/visor.c
-drivers/usb/storage/debug.h
-drivers/usb/storage/isd200.c
-drivers/usb/storage/jumpshot.c
-drivers/usb/storage/protocol.c
-drivers/usb/storage/protocol.h
-drivers/usb/storage/scsiglue.c
-drivers/usb/storage/scsiglue.h
-drivers/usb/storage/sddr09.c
-drivers/usb/storage/sddr55.c
-drivers/usb/storage/transport.h
-drivers/usb/storage/unusual_devs.h
-drivers/usb/storage/usb.c
-drivers/usb/storage/usb.h
-drivers/usb/usb-skeleton.c
-drivers/video/cfbimgblt.c
-drivers/video/chipsfb.c
-drivers/video/console/fbcon.c
-drivers/video/controlfb.c
-drivers/video/epson1355fb.c
-drivers/video/fbmem.c
-drivers/video/g364fb.c
-drivers/video/i2c.c
-drivers/video/i2c.h
-drivers/video/Kconfig
-drivers/video/logo/logo.c
-drivers/video/macfb.c
-drivers/video/Makefile
-drivers/video/neofb.c
-drivers/video/platinumfb.c
-drivers/video/pvr2fb.c
-drivers/video/sis/300vtbl.h
-drivers/video/sis/310vtbl.h
-drivers/video/sis/init301.c
-drivers/video/sis/init301.h
-drivers/video/sis/init.c
-drivers/video/sis/initdef.h
-drivers/video/sis/init.h
-drivers/video/sis/oem300.h
-drivers/video/sis/oem310.h
-drivers/video/sis/osdef.h
-drivers/video/sis/sis_accel.c
-drivers/video/sis/sis_accel.h
-drivers/video/sis/sis_main.c
-drivers/video/sis/sis_main.h
-drivers/video/sis/vgatypes.h
-drivers/video/sis/vstruct.h
-drivers/video/skeletonfb.c
-drivers/video/softcursor.c
-drivers/video/valkyriefb.c
-drivers/video/vesafb.c
-fs/aio.c
-fs/binfmt_elf.c
-fs/bio.c
-fs/buffer.c
-fs/cifs/CHANGES
-fs/cifs/cifsfs.c
-fs/cifs/cifsglob.h
-fs/cifs/connect.c
-fs/cifs/misc.c
-fs/cifs/TODO
-fs/cifs/transport.c
-fs/compat_ioctl.c
-fs/devfs/base.c
-fs/exec.c
-fs/ext2/inode.c
-fs/ext3/acl.c
-fs/ext3/balloc.c
-fs/ext3/inode.c
-fs/ext3/super.c
-fs/ext3/xattr.c
-fs/inode.c
-fs/intermezzo/sysctl.c
-fs/intermezzo/vfs.c
-fs/jbd/journal.c
-fs/jbd/transaction.c
-fs/jffs2/Makefile
-fs/Kconfig
-fs/lockd/clntlock.c
-fs/lockd/svc.c
-fs/namei.c
-fs/namespace.c
-fs/nfs/direct.c
-fs/nfsd/nfssvc.c
-fs/nfs/inode.c
-fs/nfs/nfs3proc.c
-fs/nfs/nfs3xdr.c
-fs/nfs/nfs4proc.c
-fs/nfs/pagelist.c
-fs/nfs/proc.c
-fs/nfs/read.c
-fs/nfs/write.c
-fs/partitions/check.c
-fs/partitions/efi.h
-fs/partitions/nec98.c
-fs/proc/array.c
-fs/proc/proc_misc.c
-fs/stat.c
-fs/umsdos/ioctl.c
-fs/vfat/namei.c
-include/acpi/acconfig.h
-include/acpi/platform/acenv.h
-include/asm-alpha/lockmeter.h
-include/asm-alpha/pgalloc.h
-include/asm-alpha/pgtable.h
-include/asm-alpha/posix_types.h
-include/asm-alpha/smp.h
-include/asm-alpha/spinlock.h
-include/asm-arm26/pgalloc.h
-include/asm-arm26/pgtable.h
-include/asm-arm26/posix_types.h
-include/asm-arm/pgalloc.h
-include/asm-arm/pgtable.h
-include/asm-arm/posix_types.h
-include/asm-cris/pgalloc.h
-include/asm-cris/pgtable.h
-include/asm-cris/posix_types.h
-include/asm-generic/cpumask_array.h
-include/asm-generic/cpumask_const_reference.h
-include/asm-generic/cpumask_const_value.h
-include/asm-generic/cpumask_up.h
-include/asm-generic/local.h
-include/asm-generic/percpu.h
-include/asm-generic/sections.h
-include/asm-h8300/pgtable.h
-include/asm-h8300/posix_types.h
-include/asm-i386/atomic.h
-include/asm-i386/bitops.h
-include/asm-i386/bugs.h
-include/asm-i386/genapic.h
-include/asm-i386/highmem.h
-include/asm-i386/hw_irq.h
-include/asm-i386/kgdb.h
-include/asm-i386/kgdb_local.h
-include/asm-i386/kmap_types.h
-include/asm-i386/local.h
-include/asm-i386/lockmeter.h
-include/asm-i386/mach-bigsmp/mach_apic.h
-include/asm-i386/mach-bigsmp/mach_ipi.h
-include/asm-i386/mach-default/mach_apic.h
-include/asm-i386/mach-default/mach_ipi.h
-include/asm-i386/mach-es7000/mach_apic.h
-include/asm-i386/mach-es7000/mach_ipi.h
-include/asm-i386/mach-numaq/mach_apic.h
-include/asm-i386/mach-numaq/mach_ipi.h
-include/asm-i386/mach-summit/mach_apic.h
-include/asm-i386/mach-summit/mach_ipi.h
-include/asm-i386/mach-visws/mach_apic.h
-include/asm-i386/mmu_context.h
-include/asm-i386/mpspec.h
-include/asm-i386/numaq.h
-include/asm-i386/pgalloc.h
-include/asm-i386/pgtable-2level.h
-include/asm-i386/pgtable-3level.h
-include/asm-i386/pgtable.h
-include/asm-i386/posix_types.h
-include/asm-i386/rwlock.h
-include/asm-i386/smp.h
-include/asm-i386/spinlock.h
-include/asm-i386/stat.h
-include/asm-i386/thread_info.h
-include/asm-i386/topology.h
-include/asm-i386/unistd.h
-include/asm-ia64/atomic.h
-include/asm-ia64/bitops.h
-include/asm-ia64/elf.h
-include/asm-ia64/local.h
-include/asm-ia64/lockmeter.h
-include/asm-ia64/mmu_context.h
-include/asm-ia64/percpu.h
-include/asm-ia64/pgalloc.h
-include/asm-ia64/pgtable.h
-include/asm-ia64/posix_types.h
-include/asm-ia64/processor.h
-include/asm-ia64/smp.h
-include/asm-ia64/spinlock.h
-include/asm-ia64/system.h
-include/asm-ia64/tlb.h
-include/asm-m68k/motorola_pgalloc.h
-include/asm-m68k/motorola_pgtable.h
-include/asm-m68knommu/pgtable.h
-include/asm-m68k/posix_types.h
-include/asm-m68k/sun3_pgalloc.h
-include/asm-mips64/lockmeter.h
-include/asm-mips64/pgalloc.h
-include/asm-mips64/pgtable.h
-include/asm-mips64/posix_types.h
-include/asm-mips64/smp.h
-include/asm-mips/lockmeter.h
-include/asm-mips/pgalloc.h
-include/asm-mips/pgtable.h
-include/asm-mips/posix_types.h
-include/asm-mips/smp.h
-include/asm-mips/spinlock.h
-include/asm-parisc/pgalloc.h
-include/asm-parisc/pgtable.h
-include/asm-parisc/posix_types.h
-include/asm-parisc/smp.h
-include/asm-ppc64/mmu_context.h
-include/asm-ppc64/pgalloc.h
-include/asm-ppc64/pgtable.h
-include/asm-ppc64/semaphore.h
-include/asm-ppc64/smp.h
-include/asm-ppc64/tlb.h
-include/asm-ppc/hardirq.h
-include/asm-ppc/ipc.h
-include/asm-ppc/pci.h
-include/asm-ppc/pgalloc.h
-include/asm-ppc/pgtable.h
-include/asm-ppc/posix_types.h
-include/asm-ppc/processor.h
-include/asm-ppc/smp.h
-include/asm-ppc/uaccess.h
-include/asm-ppc/unistd.h
-include/asm-s390/bitops.h
-include/asm-s390/dma.h
-include/asm-s390/dma-mapping.h
-include/asm-s390/irq.h
-include/asm-s390/mmu_context.h
-include/asm-s390/pgalloc.h
-include/asm-s390/pgtable.h
-include/asm-s390/posix_types.h
-include/asm-s390/siginfo.h
-include/asm-s390/smp.h
-include/asm-s390/tlbflush.h
-include/asm-sh/pgalloc.h
-include/asm-sh/pgtable-2level.h
-include/asm-sh/posix_types.h
-include/asm-sparc64/atomic.h
-include/asm-sparc64/bitops.h
-include/asm-sparc64/local.h
-include/asm-sparc64/lockmeter.h
-include/asm-sparc64/mmu_context.h
-include/asm-sparc64/pgalloc.h
-include/asm-sparc64/pgtable.h
-include/asm-sparc64/posix_types.h
-include/asm-sparc64/sections.h
-include/asm-sparc64/smp.h
-include/asm-sparc64/spinlock.h
-include/asm-sparc/pgalloc.h
-include/asm-sparc/pgtable.h
-include/asm-sparc/posix_types.h
-include/asm-sparc/smp.h
-include/asm-um/pgalloc.h
-include/asm-um/pgtable.h
-include/asm-um/smp.h
-include/asm-v850/anna.h
-include/asm-v850/as85ep1.h
-include/asm-v850/asm.h
-include/asm-v850/cacheflush.h
-include/asm-v850/entry.h
-include/asm-v850/fpga85e2c.h
-include/asm-v850/highres_timer.h
-include/asm-v850/ma1.h
-include/asm-v850/machdep.h
-include/asm-v850/ma.h
-include/asm-v850/me2.h
-include/asm-v850/nb85e_cache.h
-include/asm-v850/nb85e.h
-include/asm-v850/nb85e_intc.h
-include/asm-v850/nb85e_timer_c.h
-include/asm-v850/nb85e_timer_d.h
-include/asm-v850/nb85e_uart.h
-include/asm-v850/nb85e_utils.h
-include/asm-v850/pgtable.h
-include/asm-v850/posix_types.h
-include/asm-v850/processor.h
-include/asm-v850/ptrace.h
-include/asm-v850/rte_cb.h
-include/asm-v850/rte_ma1_cb.h
-include/asm-v850/rte_me2_cb.h
-include/asm-v850/rte_nb85e_cb.h
-include/asm-v850/serial.h
-include/asm-v850/sim85e2c.h
-include/asm-v850/sim85e2.h
-include/asm-v850/sim85e2s.h
-include/asm-v850/stat.h
-include/asm-v850/system.h
-include/asm-v850/teg.h
-include/asm-v850/v850e2_cache.h
-include/asm-v850/v850e2.h
-include/asm-v850/v850e_cache.h
-include/asm-v850/v850e.h
-include/asm-v850/v850e_intc.h
-include/asm-v850/v850e_timer_c.h
-include/asm-v850/v850e_timer_d.h
-include/asm-v850/v850e_uarta.h
-include/asm-v850/v850e_uartb.h
-include/asm-v850/v850e_uart.h
-include/asm-v850/v850e_utils.h
-include/asm-x86_64/bitops.h
-include/asm-x86_64/mpspec.h
-include/asm-x86_64/pgalloc.h
-include/asm-x86_64/pgtable.h
-include/asm-x86_64/posix_types.h
-include/asm-x86_64/smp.h
-include/asm-x86_64/topology.h
-include/linux/aio.h
-include/linux/atmdev.h
-include/linux/bitmap.h
-include/linux/blkdev.h
-include/linux/blk.h
-include/linux/buffer_head.h
-include/linux/compiler.h
-include/linux/config.h
-include/linux/cpumask.h
-include/linux/dm-ioctl.h
-include/linux/dm-ioctl-v1.h
-include/linux/dm-ioctl-v4.h
-include/linux/elevator.h
-include/linux/elfcore.h
-include/linux/errno.h
-include/linux/ext3_fs.h
-include/linux/ext3_jbd.h
-include/linux/fb.h
-include/linux/fs.h
-include/linux/hfs_sysdep.h
-include/linux/ide.h
-include/linux/init_task.h
-include/linux/irq.h
-include/linux/kdev_t.h
-include/linux/kernel_stat.h
-include/linux/linux_logo.h
-include/linux/list.h
-include/linux/lockmeter.h
-include/linux/loop.h
-include/linux/mm.h
-include/linux/module.h
-include/linux/namespace.h
-include/linux/netdevice.h
-include/linux/nfs_fs.h
-include/linux/nfs_fs_sb.h
-include/linux/nfs_mount.h
-include/linux/nfs_page.h
-include/linux/nfs_xdr.h
-include/linux/node.h
-include/linux/pagemap.h
-include/linux/pci.h
-include/linux/raid/md_k.h
-include/linux/rcupdate.h
-include/linux/root_dev.h
-include/linux/sched.h
-include/linux/serial_core.h
-include/linux/smp.h
-include/linux/spinlock.h
-include/linux/times.h
-include/linux/topology.h
-include/linux/tty.h
-include/linux/usb.h
-include/linux/wait.h
-include/linux/writeback.h
-include/media/saa7146.h
-include/media/saa7146_vv.h
-include/net/ip_vs.h
-include/pcmcia/ss.h
-include/scsi/scsi_device.h
-include/scsi/scsi_host.h
-include/scsi/scsi_request.h
-include/video/epson1355.h
-include/video/neomagic.h
-include/video/sisfb.h
-init/do_mounts.h
-init/do_mounts_initrd.c
-init/do_mounts_rd.c
-init/main.c
-kernel/compat.c
-kernel/extable.c
-kernel/fork.c
-kernel/ksyms.c
-kernel/lockmeter.c
-kernel/Makefile
-kernel/module.c
-kernel/printk.c
-kernel/profile.c
-kernel/rcupdate.c
-kernel/sched.c
-kernel/softirq.c
-kernel/suspend.c
-kernel/sys.c
-kernel/time.c
-kernel/timer.c
-kernel/workqueue.c
-MAINTAINERS
-Makefile
-mm/bootmem.c
-mm/filemap.c
-mm/fremap.c
-mm/memory.c
-mm/mprotect.c
-mm/mremap.c
-mm/msync.c
-mm/page-writeback.c
-mm/slab.c
-mm/swapfile.c
-mm/swap_state.c
-mm/vmalloc.c
-mm/vmscan.c
-net/atm/br2684.c
-net/atm/clip.c
-net/atm/common.c
-net/atm/common.h
-net/atm/lec.c
-net/atm/mpc.c
-net/atm/pppoatm.c
-net/atm/proc.c
-net/atm/pvc.c
-net/atm/raw.c
-net/atm/signaling.c
-net/atm/signaling.h
-net/atm/svc.c
-net/core/dev.c
-net/ipv4/ip_gre.c
-net/ipv4/ipip.c
-net/ipv4/ipvs/ip_vs_conn.c
-net/ipv4/ipvs/ip_vs_ctl.c
-net/ipv4/ipvs/ip_vs_xmit.c
-net/ipv4/ipvs/Kconfig
-net/ipv4/tcp_input.c
-net/ipv6/addrconf.c
-net/ipv6/ah6.c
-net/ipv6/esp6.c
-net/ipv6/route.c
-net/ipv6/sit.c
-net/ipv6/tcp_ipv6.c
-net/ipv6/xfrm6_input.c
-net/ipv6/xfrm6_policy.c
-net/ipv6/xfrm6_state.c
-net/netsyms.c
-net/sunrpc/auth_gss/auth_gss.c
-net/sunrpc/clnt.c
-net/sunrpc/xprt.c
-net/wanrouter/wanmain.c
-net/xfrm/xfrm_policy.c
-net/xfrm/xfrm_state.c
-net/xfrm/xfrm_user.c
-scripts/ver_linux
-security/Kconfig
-security/Makefile
-security/selinux/avc.c
-security/selinux/hooks.c
-security/selinux/include/avc.h
-security/selinux/include/avc_ss.h
-security/selinux/include/av_inherit.h
-security/selinux/include/av_permissions.h
-security/selinux/include/av_perm_to_string.h
-security/selinux/include/class_to_string.h
-security/selinux/include/common_perm_to_string.h
-security/selinux/include/flask.h
-security/selinux/include/initial_sid_to_string.h
-security/selinux/include/objsec.h
-security/selinux/include/security.h
-security/selinux/Kconfig
-security/selinux/Makefile
-security/selinux/selinuxfs.c
-security/selinux/ss/avtab.c
-security/selinux/ss/avtab.h
-security/selinux/ss/constraint.h
-security/selinux/ss/context.h
-security/selinux/ss/ebitmap.c
-security/selinux/ss/ebitmap.h
-security/selinux/ss/global.h
-security/selinux/ss/hashtab.c
-security/selinux/ss/hashtab.h
-security/selinux/ss/Makefile
-security/selinux/ss/mls.c
-security/selinux/ss/mls.h
-security/selinux/ss/mls_types.h
-security/selinux/ss/policydb.c
-security/selinux/ss/policydb.h
-security/selinux/ss/services.c
-security/selinux/ss/services.h
-security/selinux/ss/sidtab.c
-security/selinux/ss/sidtab.h
-security/selinux/ss/symtab.c
-security/selinux/ss/symtab.h
-sound/core/timer.c
-sound/isa/cmi8330.c
-sound/isa/es18xx.c
-sound/oss/ac97_plugin_ad1980.c
-sound/oss/ad1816.c
-sound/oss/ad1889.c
-sound/oss/btaudio.c
-sound/oss/dmasound/dmasound_core.c
-sound/oss/emu10k1/8010.h
-sound/oss/emu10k1/audio.c
-sound/oss/emu10k1/cardmi.c
-sound/oss/emu10k1/cardmo.c
-sound/oss/emu10k1/cardwo.c
-sound/oss/emu10k1/efxmgr.c
-sound/oss/emu10k1/efxmgr.h
-sound/oss/emu10k1/hwaccess.c
-sound/oss/emu10k1/hwaccess.h
-sound/oss/emu10k1/irqmgr.h
-sound/oss/emu10k1/main.c
-sound/oss/emu10k1/midi.h
-sound/oss/emu10k1/mixer.c
-sound/oss/emu10k1/passthrough.c
-sound/oss/emu10k1/passthrough.h
-sound/oss/emu10k1/recmgr.c
-sound/oss/emu10k1/voicemgr.c
-sound/oss/emu10k1/voicemgr.h
-sound/oss/hal2.c
-sound/oss/hal2.h
-sound/oss/harmony.c
-sound/oss/kahlua.c
-sound/oss/Kconfig
-sound/oss/Makefile
-sound/pci/ice1712/ak4xxx.c
-sound/pci/intel8x0.c
-usr/Makefile